78208e4512fb1907dd55ce2012de13b55c6c81ee
[pspp-builds.git] / src / ChangeLog
1 Sat Jul 30 22:01:32 2005  Ben Pfaff  <blp@gnu.org>
2
3         * Make.build: Don't append -ansi to AM_CFLAGS for GCC.  Using
4         -ansi changes the behavior of header files significantly.
5         It causes __STRICT_ANSI__ to be defined, and some headers
6         interpret that as cause to e.g. not use `long long' or
7         __attribute__.  The former example is bad when off_t is supposed
8         to be `long long'.
9
10 Sun Jul 24 20:26:59 2005  Ben Pfaff  <blp@gnu.org>
11
12         Get rid of dependency on libgmp by writing our own routine for
13         floating-point base conversion.
14
15         * pfm-write.c: (write_float) Rewrote.
16         (write_int) Rewrote.
17         (pow30_nonnegative) New function.
18         (pow30) New function.
19         (trig_to_char) New function.
20         (format_trig_digits) New function.
21         (recurse_format_trig_int) New function.
22         (format_trig_int) New function.
23         (should_round_up) New function.
24         (try_round_up) New function.
25         (format_trig_double) New function.
26
27 Sun Jul 24 18:49:20 2005  Ben Pfaff  <blp@gnu.org>
28
29         * data-in.c: (parse_numeric) Allow "1+23" even for F format, for
30         compatibility.
31
32 Sun Jul 24 18:47:37 2005  Ben Pfaff  <blp@gnu.org>
33
34         * pfm-read.c: (read_version_data) Read and ignore author field.
35
36 Wed Jul  6 20:44:27 2005  Ben Pfaff  <blp@gnu.org>
37
38         * get.c: (mtf_processing) Don't assume that
39         mtf_compare_BY_values() always returns -1, 0, or 1.  Actually, it
40         returns a negative, zero, or positive result.  Fixes MATCH FILES
41         bug on Mac OS X reported by "Marshall DeBerry" <mdb@radix.net>.
42
43 Mon Jul  4 18:01:15 2005  Ben Pfaff  <blp@gnu.org>
44
45         * flip.c: [HAVE_SYS_TYPES_H] Really include <sys/types.h>.  The
46         preprocessor test for sys/types.h was accidentally inverted.  This
47         was bug 12789.
48
49 Sun Jul  3 22:47:39 2005  Ben Pfaff  <blp@gnu.org>
50
51         * get.c: (cmd_match_files) Fix memory leak on `by' and on
52         `vfm_source'.
53
54         * getline.c: [HAVE_LIBREADLINE] (read_console) Fix memory leak on
55         `line'.
56
57         * vfm.c: (close_active_file) Remove unnecessary test.
58
59 Sun Jul  3 21:45:32 2005  Ben Pfaff  <blp@gnu.org>
60
61         Fix NDEBUG compile errors.
62
63         * hash.h: Needed explicit #include <assert.h>.
64
65         * linked-list.c: (ll_next) First arg is UNUSED when NDEBUG is
66         defined.
67
68 Sun Jun 12 23:44:38 2005  Ben Pfaff  <blp@gnu.org>
69
70         Implement embedding for PostScript driver.  Fixes bug 12970.
71
72         * ascii.c: Fix compiler warnings.
73
74         * html.c: Ditto.
75
76         * chart.h: Add `file' member.
77
78         * output.h: (struct outp_class) initialise_chart, finalise_chart
79         should take outp_driver *, not outp_class *.  Update all
80         references.
81
82         * plot-chart.c: (chart_create) Fix segfault when there are no
83         output drivers at all.
84         (chart_submit) Call d->class->finalise_chart.
85
86         * postscript.c: (ps_open_page) Set cp_y to 0.
87         (ps_submit) New function.
88         (ps_chart_initialise) Implement.
89         (ps_chart_finalise) Implement.
90         (static var postscript_class) Add ps_submit.
91         (static var epsf_class) Add ps_submit.
92         
93
94 Sun Jun 12 14:54:40 2005  Ben Pfaff  <blp@gnu.org>
95
96         Did some more work on bug 12859 and then realized that a *good*
97         solution would require some fundamental restructuring.  For now,
98         I'm marking REPEATING DATA unimplemented, and then we can revisit
99         it post-0.4.0.
100         
101         * command.def: Make REPEATING DATA unimplemented.
102
103         * data-list.c: (cmd_repeating_data) Assume inline file is 80
104         characters wide.
105         (realize_value) Revert previous changes; no longer needed.
106         Updated all callers.
107
108         * error.c: (err_hcf) Set nfile_loc, mfile_loc to 0 after freeing
109         file_loc, to avoid bad references later.
110
111         * str.c: Fix typo.
112
113 Tue Jun  7 00:14:09 2005  Ben Pfaff  <blp@gnu.org>
114
115         Make some code tolerant of reentry.  Should not be needed if other
116         code is correct but it is good to be generally tolerant.
117         
118         * error.c: (err_hcf) Set file_loc to null after free().
119
120         * output.c: (outp_done) Similar changes.
121
122         * str.c: (ds_destroy) Ditto.
123         
124 Tue Jun  7 00:10:20 2005  Ben Pfaff  <blp@gnu.org>
125
126         Continue work on bug 12859, plus some code cleanup.
127         
128         * data-list.c: (cmd_repeating_data) Replace `seen' bitmap by
129         boolean variables.  Don't try to compute starts_end, cont_end for
130         inline file.  Calculate length only after parsing variable
131         specifications.  Add proper transformation to list.
132         (realize_value) If the rpd_num_or_var has no value, return new
133         DEFAULT_MEMBER argument (for use with inline file).
134         (repeating_data_trns_proc) Pass default values.
135
136         * dfm-read.c: (dfm_close_reader) Only skip data if *not* still
137         open, and only if we actually started reading data.
138
139 Sun Jun  5 18:39:36 2005  Ben Pfaff  <blp@gnu.org>
140
141         Fix bug 11894.
142         
143         * output.c: (outp_read_devices) Fix message.
144
145 Fri May 27 12:34:43 WST 2005 John Darrington <john@darrington.wattle.id.au>
146         
147         * sort-prs.[ch] (newfiles), aggregate.c, sort.[ch]: Separated the guts 
148         of the sort algorithm from the parser for the SORT command.
149         
150         * rank.q: Added the parser for the RANK command.
151         
152 Thu May 26 12:29:21 2005  Ben Pfaff  <blp@gnu.org>
153
154         Fix bug 13192.
155
156         * sort.c: (sort_parse_criteria) Only set *saw_direction if
157         saw_direction is non-null.  Thanks to John Darrington for
158         reporting this bug.
159
160 Tue May 24 21:52:55 2005  Ben Pfaff  <blp@gnu.org>
161
162         * get.c: (mtf_processing) Handle case of a lookup table as the
163         active file.  Thanks to John Darrington for reporting this bug.
164
165 Wed May 25 10:27:02 WST 2005 John Darrington <john@darrington.wattle.id.au>
166         
167         * alloc.c alloc.h: (xcalloc) changed signature to imitate the
168         POSIX  calloc function.
169         
170         * crosstabs.q get.c vars-prs.c: Updated calls to xcalloc to
171         reflect new signature.
172
173         * sfm-read.c: Now much more robust in the face of badly formed
174         system files.
175
176 Mon May 23 11:57:31 WST 2005 John Darrington <john@darrington.wattle.id.au>
177
178         *sfm-read.c: Fixed some bugs regarding long string continuation
179         records, which the previous fix uncovered.
180
181 Sat May 21 12:48:34 WST 2005 John Darrington <john@darrington.wattle.id.au>
182
183         * sfm-read.c, sfmP.h:  Allow reading of system files when the 
184         case_size value in the header is -1.  Also changed some Errors to 
185         Warnings when reading system files.
186
187 Tue May 17 21:00:57 2005  Ben Pfaff  <blp@gnu.org>
188
189         * data-list.c: (data_list_trns_free) Don't free the argument
190         because cancel_transformations() will do that itself.
191         (data_list_source_destroy) Destroy the argument to
192         data_list_trns_free(), because it no longer does so itself.
193
194 Tue May 17 18:29:35 2005  Ben Pfaff  <blp@gnu.org>
195
196         * data-out.c: (format_and_round) Don't output leading `-' if value
197         rounds to zero.
198
199 Tue May 17 00:06:43 2005  Ben Pfaff  <blp@gnu.org>
200
201         Fix bug 11119.
202
203         * som.c: (output_encodings) If some cell in the table won't fit
204         with the horizontal or vertical headers, cancel those headers.
205
206         * som.h: (struct som_table_class) Add fits_width, fits_length,
207         set_headers members.
208
209         * tab.c: (tabi_fits_width) New function.
210         (tabi_fits_length) New function.
211         (tabi_set_headers) New function.
212         (global var tab_table_class) Add the new functions as appropriate
213         members.
214         
215 Mon May 16 22:34:06 2005  Ben Pfaff  <blp@gnu.org>
216
217         Fix rest of bug 13054.
218
219         * format.def: Fix EDATE, SDATE, ADATE, JDATE, QYR, MOYR, WKYR,
220         DATETIME, TIME system/portable file values.
221
222 Mon May 16 22:31:15 2005  Ben Pfaff  <blp@gnu.org>
223
224         * data-list.c: (parse_free) Use make_input_format().
225         
226         * data-out.c: (num_to_string) Use make_output_format().
227
228         * dictionary.c: (dict_create_var) Ditto.
229
230         * format.c: (global var f8_2) New var.
231         (make_input_format) New function.
232         (make_output_format) New function.
233
234         * get.c: (cmd_match_files) Use make_output_format().
235
236         * list.q: (cmd_list) Ditto.
237
238         * matrix-data.c: Ditto.
239
240         * sfm-read.c: (parse_format_spec) Check output specifier
241         thoroughly.
242
243         * tab.c: (tab_float) Use make_output_format().
244
245 Sun May 15 23:38:10 2005  Ben Pfaff  <blp@gnu.org>
246
247         Fix more of bug 13054.
248         
249         * format.def: FMT_A should allow 255-character output.  FMT_AHEX
250         should allow 510-character input and output.
251
252         * data-out.c: (num_to_string) Get rid of NEW_STYLE option.
253         (convert_E) Handle non-finite values.
254         (try_F) Rewrite.
255         (format_and_round) New function.
256         (convert_infinite) New function used by try_F() and convert_E().
257
258 Sun May 15 23:36:55 2005  Ben Pfaff  <blp@gnu.org>
259
260         Regularize string and buffer function names so that they make some
261         kind of sense.
262
263         * str.c: (mm_reverse) Rename buf_reverse().  Update all
264         references.
265         (mm_find_reverse) Rename buf_find_reverse().  Update all
266         references.
267         (mm_case_compare) Rename buf_compare_case().  Update all
268         references.
269         (st_compare_pad) Rename buf_compare_rpad().  Update all
270         references.
271         (str_compare_rpad) New function.
272         (st_bare_pad_copy) Rename buf_copy_str_rpad().  Update all
273         references.
274         (buf_copy_str_lpad) New function.
275         (st_bare_pad_len_copy) Rename buf_copy_rpad().  Update all
276         references.
277         (st_pad_copy) Rename str_copy_rpad().  Update all references.
278         (st_trim_copy) Rename str_copy_trunc().  Update all references.
279         (st_uppercase) Renamed str_uppercase().  Update all references.
280         
281 Sat May 14 08:22:26 WST 2005 John Darrington <john@darrington.wattle.id.au>
282
283         * dfm-read.c: Fixed polarity of test in dfm-close-reader.  Closes 
284         Bug #13082
285
286 Tue May 10 20:08:18 2005  Ben Pfaff  <blp@gnu.org>
287
288         * data-in.c: (data_in) Add assertion to check input specifier.
289
290         * data-out.c: (data_out) Add assertion to check output specifier.
291
292 Tue May 10 19:56:35 2005  Ben Pfaff  <blp@gnu.org>
293
294         Start to fix bug 13054.
295
296         * format.c: (check_input_specifier) Improve error message.
297         (check_input_specifier) Check F, COMMA, and DOLLAR formats for
298         valid decimal places.
299         (check_output_specifier) Ditto (but different criteria).
300         (convert_fmt_ItoO) Assert valid input and output specifiers.
301         Also, if input specifier has *any* decimal places, make the output
302         specifier 1 place wider.
303
304 Mon May  9 07:14:29 WST 2005 John Darrington <john@darrington.wattle.id.au>
305
306         * sysfile-info.c: Fixed bug [# 13024 ]
307
308 Sun May  8 13:52:12 2005  Ben Pfaff  <blp@gnu.org>
309
310         "Fix" bug 13021 by disabling FILE TYPE.  Eventually, we should
311         actually implement it.
312
313         * command.c: (FILE_TYPE_okay) Always return 1.
314
315         * command.def: Change FILE TYPE, END FILE TYPE into UNIMPL.
316
317         * file-type.c: Add prototypes to get rid of warnings.
318
319 Sun May  8 08:08:07 WST 2005 John Darrington <john@darrington.wattle.id.au>
320
321         * barchart.c box-whisker.c cartesian.c piechart.c plot-hist.c: Fixed 
322         more ISO/IEC 9899:1990 conformance issues.
323
324 Wed May  4 23:54:02 2005  Ben Pfaff  <blp@gnu.org>
325
326         Fix bug 12948.  See also new test in
327         tests/bugs/match-file-scratch.sh.
328         
329         * get.c: (mtf_merge_dictionary) Don't compact dictionary because
330         that deletes scratch variables that someone else might be using,
331         and because we can't reassign our sources' value indexes.
332         Instead, simply don't copy scratch variables into the master
333         dictionary.
334
335         * dictionary.c: (dict_compact_values) Delete variables from the
336         dictionary passed in, not from default_dict (!).
337
338 Tue May  3 22:25:17 2005  Ben Pfaff  <blp@gnu.org>
339
340         Improve hash.c comments, error-checking.
341         
342         * hash.c: (struct hsh_table) [NDEBUG] Add hash_ordered member.
343         (hsh_create) size == 0 should *not* return NULL!  Set
344         hash_ordered.
345         (hsh_clear) Set hash_ordered.
346         (locate_matching_entry) Check hash_ordered.
347         (hsh_rehash) Rename rehash().  Add assertion.  Set hash_ordered.
348         (hsh_data) Set hash_ordered.  Add const-ness to return value and
349         update all callers.
350         (hsh_sort) Ditto.       
351
352 Wed May  4 08:50:11 WST 2005 John Darrington <john@darrington.wattle.id.au>
353
354         * casefile.c: Removed unnecessary #include <valgrind/valgrind.h>
355
356 Tue May  3 19:14:48 WST 2005 John Darrington <john@darrington.wattle.id.au>
357
358         * copyleft.c: Updated copyright date.
359
360         * Makefile.am: Removed erroneous explicit "-lplot"
361
362         * examine.q oneway.q: Made these files conform to ISO/IEC 9899:1990
363
364 Tue May  3 16:20:31 WST 2005 John Darrington <john@darrington.wattle.id.au>
365
366         * command.c command.def: Added description string for unimplemented commands.
367
368         * oneway.q: Sorted the hash tables before shipping out the results. Closes 
369         bug [#12931].
370
371 Mon May  2 23:45:01 2005  Ben Pfaff  <blp@gnu.org>
372
373         Code improvements.
374         
375         * data-list.c:  (parse_fixed) Use lex_end_of_command().
376         (parse_free) Ditto.
377         (cmd_repeating_data) Set cont_end.num in right situations.
378         (parse_repeating_data) Remove redundant test.
379
380 Mon May  2 23:37:19 2005  Ben Pfaff  <blp@gnu.org>
381
382         Partial fix for bug 12859.
383         
384         * data-list.c: (cmd_data_list) Add transformation properly in
385         vfm_source == NULL case.
386
387 Mon May  2 23:27:28 2005  Ben Pfaff  <blp@gnu.org>
388
389         * lexer.c: (lex_error) Improve error messages.
390
391 Mon May  2 22:28:17 2005  Ben Pfaff  <blp@gnu.org>
392
393         * get.c: (cmd_match_files) Check token type before trying to match
394         tokid.  Fixes bug 12923.
395
396 Mon May  2 22:16:51 2005  Ben Pfaff  <blp@gnu.org>
397
398         * flip.c: [HAVE_SYS_TYPES_H] Include <sys/types.h>.  Fixes bug
399         12789.
400
401 Mon May  2 22:02:52 2005  Ben Pfaff  <blp@gnu.org>
402
403         * expressions/generate.pl: (get_token) Make use of /g
404         backward-compatible with Perl 5.6.1.
405
406 Sun May  1 23:00:19 2005  Ben Pfaff  <blp@gnu.org>
407
408         * var-display.c: (cmd_variable_alignment) Fix memory leak.
409         (cmd_variable_level) Ditto.
410
411 Sun May  1 22:49:04 2005  Ben Pfaff  <blp@gnu.org>
412
413         Hash table had buggy deletion function.  The fix required changing
414         other functions to do probing in the required order.
415
416         * hash.c: (locate_matching_entry) Rewrite and change interface.
417         (hsh_rehash) Rewrite to use locate_matching_entry().
418         (hsh_probe) Ditto.
419         (hsh_find) Ditto.
420         (hsh_delete) Ditto.  Also, fix stupid bugs.
421
422 Sun May  1 22:24:58 2005  Ben Pfaff  <blp@gnu.org>
423
424         * dictionary.c: (dict_clone) Properly copy vectors.
425
426 Sun May  1 22:07:58 2005  Ben Pfaff  <blp@gnu.org>
427
428         New implementation of long variable names.  Each variable has a
429         "normal" name, which may be up to 64 bytes long and which is used
430         for all normal operations.  Variables may have a "short" name,
431         which is limited to 8 bytes and used only for system and portable
432         file input and output.
433         
434         Make tokid case-preserving.  Update most uses of tokid to treat it
435         case-insensitively.
436
437         Update many commands to deal with long variable names.
438
439         * autorecode.c: (cmd_autorecode) Use strcasecmp() instead of strcmp().
440
441         * command.c: (cmd_parse) Ditto.
442         (match_strings) Use toupper() before comparing characters.
443         (conflicting_3char_prefixes) Use mm_case_compare() instead of
444         memcmp().
445         (cmd_match_words) Ditto.
446
447         * compute.c: (lvalue_parse) Use st_trim_copy() instead of
448         strncpy().
449
450         * count.c: (struct cnt_var_info) Change n[] to fit long var name.
451         Use st_trim_copy() instead of strcpy().
452
453         * data-in.c: (parse_enum) Use mm_case_compare() instead of
454         memcmp().
455
456         * data-list.c: (struct dls_var_spec) Change name[] to fit long var
457         name.
458         (parse_free) Use st_trim_copy() instead of strcpy().
459
460         * descript.c: (struct dsc_var) Change z_name[] to fit long var
461         name.
462         (try_name) Use strcasecmp() instead of strcmp().
463         (generate_z_varname) Use st_trim_copy() instead of strcpy().
464         (descriptives_compare_dsc_vars) Use strcasecmp() instead of
465         strcmp().
466
467         * dictionary.c: (struct dictionary) Removed `long_name_tab'
468         member.
469         (compare_long_names) Removed.
470         (hash_long_name) Removed.
471         (dict_create) Don't initialize `long_name_tab' member.
472         (dict_clone) Copy short names into new dictionary. 
473         (dict_clear) Don't clear `long_name_tab' member.
474         (dict_get_varname_block) Removed.
475         (dict_add_longvar_entry) Removed.
476         (free_nte) Removed.
477         (dict_destroy) Don't destroy `long_name_tab' member.
478         (dict_create_var_from_short) Removed.
479         (dict_create_var_x) Removed.
480         (dict_create_var) Get rid of longname handling.
481         Clear short name.
482         (dict_clone_var) Get rid of longname parameter and longname
483         handling.
484         (dict_lookup_var) Get rid of longname handling.
485         (dict_reorder_var) New function.
486         (dict_rename_var) Clear short name.
487         (dict_rename_vars) Get rid of longname handling.  Clear short
488         names.
489         (dict_create_vector) Support long vector names.
490         (dict_lookup_vector) Use strcasecmp() instead of strcmp().
491         (quasi_base27) Removed.
492         (make_short_name) Removed.
493         (compare_strings) New function.
494         (hash_string) New function.
495         (dict_assign_short_names) New function.
496
497         * file-handle.q: (get_handle_with_name) Use strcasecmp() instead
498         of strcmp().
499         (get_handle_for_filename) Support long handle names.
500
501         * file-type.c: (struct col_spec) Make `name' fit long var names.
502         (cmd_file_type) Use strcasecmp() instead of strcmp().
503
504         * flip.c: (make_new_var) Rewrite.
505         (flip_sink_write) Use st_trim_copy() instead of strncpy().
506
507         * format.c: (parse_format_specifier_name) Use mm_case_compare()
508         instead of memcmp().
509
510         * get.c: (cmd_save_internal) Rephrase.
511         (rename_variables) Drop test for identical variable name.
512         (struct mtf_proc) Change `first', `last' to fit long var name.
513
514         * hash.c: (hsh_hash_case_string) New function for case-insensitive
515         string hashing.
516
517         * lexer.c: (restore_token) Use st_trim_copy() instead of
518         strncpy().
519         (lex_get) Don't uppercase string when copying into tokid.
520         (lex_put_back_id) Use st_trim_copy() instead of
521         strncpy().
522
523         * list.q: (determine_layout) Consider length of variable names in
524         choosing vertical layout.
525
526         * matrix-data.c: (cmd_matrix_data) Use strcasecmp() instead of
527         strcmp().
528         (string_to_content_type) Ditto.
529
530         * modify-vars.c: (compare_variables_given_ordering) Ditto.
531         (struct var_renaming) Change `new_name' to fit long var name.
532         (compare_var_renaming_by_new_name) Use strcasecmp() instead of
533         strcmp().
534
535         * pfm-read.c: (read_variables) Disallow system variables in system
536         files.
537         (write_variables) Call dict_assign_short_names() and use
538         short_name[] members.
539
540         * repeat.c: (internal_cmd_do_repeat) Use strcasecmp() instead of
541         strcmp().
542
543         * sfm-read.c: (sfm_open_reader) Rewrite code for long variable
544         map.  Reorder variables into same order as long variable map.
545         (read_variables) Set short name.
546
547         * sfm-write.c: (sfm_open_writer) Call dict_assign_short_names().
548         (write_variable) Use st_bare_pad_copy().
549         (write_longvar_table) Rewrite.
550
551         * str.c: (mm_case_compare) New function.
552
553         * sysfile-info.c: (compare_vectors_by_name) Use strcasecmp()
554         instead of strcmp().
555
556         * t-test.q: (tts_custom_groups) Remove redundant test.
557         (tts_custom_pairs) Ditto.
558
559         * var.h: (struct variable) Change `name' to fit long var names.
560         Remove `longname'.  Add `short_name' member.  Reorder some
561         variables.
562         (struct name_table_entry) Removed.
563         (struct vector) Change `name' to fit long vector names.
564
565         * vars-atr.c: (var_is_valid_name) Allow long var names.
566         (compare_var_names) Use strcasecmp() instead of strcmp().
567         (compare_var_ptr_names) Ditto.
568         (hash_var_name) Use hsh_hash_case_string().
569         (hash_var_ptr_name) Ditto.
570         (var_set_short_name) New function.
571         (var_clear_short_name) New function.
572         (var_set_short_name_suffix) New function.
573
574         * vars-prs.c: (parse_DATA_LIST_vars) Support long names.
575         Use strcasecmp() instead of strcmp().
576         (struct array_var_set) Removed `longname_tab'.
577         (array_var_set_lookup_var_idx) Drop longname_tab support.
578         (array_var_set_destroy) Don't destroy `longname_tab'.
579         (var_set_create_from_array) Don't create `longname_tab'.
580
581         * vector.c: (cmd_vector) Use strcasecmp() instead of strcmp().
582         Support long names.
583
584         * expressions/parse.c: (word_matches) Use mm_case_compare()
585         instead of memcmp().
586         (compare_strings) New function.
587         (lookup_function) Use compare_strings() instead of strcmp().
588         
589 Sun May  1 22:07:43 2005  Ben Pfaff  <blp@gnu.org>
590
591         * algorithm.c: (move_element) New function.
592
593 Sun May  1 22:05:35 2005  Ben Pfaff  <blp@gnu.org>
594
595         * aggregate.c: (parse_aggregate_functions) Always initialize
596         destvar.
597
598 Sun May  1 22:03:47 2005  Ben Pfaff  <blp@gnu.org>
599
600         * aggregate.c: (cmd_aggregate) Use dict_clone_var_assert().
601
602         * dictionary.c: (dict_clone) Ditto.
603         (dict_clone_var_assert) New function.
604
605         * get.c: (mtf_merge_dictionary) Use dict_clone_var_assert().
606
607 Sun May  1 15:05:54 WST 2005 John Darrington <john@darrington.wattle.id.au>
608
609         * error.c: Added a string for the compiler version to the
610         request_bug_report_and_abort function.
611
612         * groff_font.c, font.c: Removed manpage(1) style references from 
613         comments, because RMS frowns upon them.
614
615 Thu Apr 28 18:52:06 2005  Ben Pfaff  <blp@gnu.org>
616
617         * expressions/parse.c: Improve previous fix for bug 12858 (LAG).
618
619 Fri Apr 29 09:28:00 WST 2005 John Darrington <john@darrington.wattle.id.au>
620
621         * expressions/parse.c: Added handler for OP_LAG_Vn and OP_LAG_Vs.  
622         Fixed bug [#12858] .
623
624 Wed Apr 27 12:42:34 WST 2005 John Darrington <john@darrington.wattle.id.au>
625
626         * loop.c recode.c repeat.c: Fixed a couple of instances of SHORT_NAME_LEN 
627         which should be LONG_NAME_LEN
628
629 Wed Apr 27 07:43:50 WST 2005 John Darrington <john@darrington.wattle.id.au>
630
631         * command.def echo.c:  Added the ECHO command.
632
633 Mon Apr 25 22:55:59 2005  Ben Pfaff  <blp@gnu.org>
634
635         Finish fixing MATCH FILES (bug 11677).
636
637         * get.c: (trim_dictionary) Rewrite in terms of drop_variables(),
638         keep_variables(), rename_variables().
639         (drop_variables) New function.
640         (keep_variables) New function.
641         (struct mtf_file) Rename `in' to `in_name'.  Add `in_var'.
642         (cmd_match_files) Deal with in_var.  Use drop_variables(),
643         keep_variables().  When IN is specified, require BY.  Set master
644         variables after master dictionary is complete.  Add IN variables
645         after master dictionary is complete.
646         (mtf_free_file) Free `in_name'.
647         (mtf_delete_file_in_place) Set in_var value to 0.
648         (mtf_read_nonactive_records)  Rephrase.
649         (mtf_processing) Support IN.  Rephrase.  Fix bugs.
650         (mtf_merge_dictionary) Don't set master variables; we do that
651         later now.
652         (get_master) Don't insist that there's a master variable.
653         
654 Mon Apr 25 22:55:22 2005  Ben Pfaff  <blp@gnu.org>
655
656         Kluge to make some variable renaming sort of work.
657         Needs real fix.
658
659         * dictionary.c: (dict_rename_var) Call dict_add_longvar_entry().
660
661 Mon Apr 25 22:52:28 2005  Ben Pfaff  <blp@gnu.org>
662
663         Add functions for comparing sets of variables between cases.
664         Use the functions.
665
666         * case.c: (case_compare) New function.
667         (case_compare_2dict) New function.
668         
669         * aggregate.c: (struct agr_proc) Remove `prev_break' member.  Add
670         `break_case'.
671         (cmd_aggregate) Nullify break_case.  Don't call
672         initialize_aggregate_info().
673         (agr_destroy) Destroy break_case.
674         (aggregate_single_case) Rewrite.  Use case_compare().
675         (dump_aggregate_info) Copy from break_case into output.
676         (initialize_aggregate_info) Copy break_case from input.
677
678         * get.c: (mtf_compare_BY_values) Use case_compare_2dict().
679
680         * vfm.c: (equal_splits) Use case_compare().
681
682 Sat Apr 23 17:01:04 WST 2005 John Darrington <john@darrington.wattle.id.au>
683
684         * dictionary.c vars-prs.c sfm-write.c: Fixed some memory leaks
685
686 Sun Apr 17 23:08:15 2005  Ben Pfaff  <blp@gnu.org>
687
688         Start work on fixing MATCH FILES.
689
690         * get.c: (enum operation) Remove OP_MATCH.
691         (trim_dictionary) Change return value to bool.  Don't support
692         OP_MATCH.
693         (struct mtf_file) Remove `first', `last' members.
694         (struct mtf_proc) Add `first', `last' members.  Change mtf_case
695         from `struct ccase *' to `struct ccase'.  Remove `by' member.
696         (cmd_match_files) Essentially rewrite.
697         (mtf_free) Don't free `by' member.  Destroy `mtf_case' member.
698         (mtf_read_nonactive_records) mtf_ parameter is not unused.
699         (mtf_processing) Ditto.  Also rephrase some code.
700         (mtf_merge_dictionary) Rewrite for easy comprehension.  
701
702 Sun Apr 17 23:06:00 2005  Ben Pfaff  <blp@gnu.org>
703
704         * matrix-data.c: (wr_output_data) [DEBUGGING] Fix compilation
705         error.
706
707         * q2c.c: (dump_token) [DEBUGGING] Fix compilation error.
708         
709 Thu Apr 14 2005 John Darrington
710
711         * var-display.c: New file.
712
713         * format.h var.h sfm-read.c sfm-write.c dictionary.c :  Added 
714           display_width, measure and alignment parameters to variables.
715
716         * aggregate.c command.def compute.c count.c data-list.c descript.c
717           dictionary.c dictionary.h expr-prs.c file-type.c flip.c get.c 
718           lexer.c lexer.h loop.c modify-vars.c pfm-read.c recode.c repeat.c 
719           sfm-read.c sfm-write.c sfm-write.h sfmP.h val-labs.c val.h var.h 
720           vars-prs.c vector.c :  
721               - Replaced literal constants representing maximum variable name 
722                 length with macro definitions. 
723               - Added support for long variable names.
724               - Changed lexer such that it no longer makes tokens upper
725                 case, but relies upon case insensitive behaviour of commands.
726
727 Mon Apr  4 22:27:34 2005  Ben Pfaff  <blp@gnu.org>
728
729         * aggregate.c: (parse_aggregate_functions) If dict_create_var()
730         fails, don't dereference the resulting null pointer (bug 12427).
731         Also, fix double free error.
732
733 Sat Mar 19 23:06:02 2005  Ben Pfaff  <blp@gnu.org>
734
735         * aggregate.c: (parse_aggregate_functions) Fix N_NO_VARS format.
736         (accumulate_aggregate_info) Set int1 to 1 for SUM.
737         (dump_aggregate_info) Only make SUM non-missing if there was at
738         least one variate.
739
740 Sat Mar 19 14:48:19 2005  Ben Pfaff  <blp@gnu.org>
741
742         * aggregate.c: (dump_aggregate_info) Properly test whether the
743         destination variable is numeric, when making the result
744         system-missing for columnwise missing values.
745
746 Mon Mar 14 21:52:34 2005  Ben Pfaff  <blp@gnu.org>
747
748         * misc.h: Remove GCC specializations.
749
750 Mon Mar 14 21:07:23 2005  Ben Pfaff  <blp@gnu.org>
751
752         Make sort stable (bug 12313).
753         
754         * sort.c: Don't need to include some headers anymore.
755         (static var min_buffers) New variable.
756         (static var max_buffers) New variable.
757         (static var allow_internal_sort) New variable.
758         (cmd_sort_cases) Add test mode.
759         (sort_execute) Rephrase.
760         (do_internal_sort) Don't try internal sorting if
761         allow_internal_sort is set.
762         (struct external_sort) Renamed `initial_runs' to `runs' and
763         updated all references.
764         (macro MIN_BUFFER_TOTAL_SIZE_RECS) Removed.
765         (macro MIN_BUFFER_SIZE_BYTES) Removed.
766         (macro MIN_BUFFER_SIZE_RECS) Removed.
767         (compare_initial_runs) Removed.
768         (struct record_run) Add member `idx'.
769         (write_initial_runs) Pass increasing values to process_case() as
770         index.
771         (process_case) Add `idx' parameter and use it to initialize new
772         `idx' member.
773         (allocate_cases) Limit allocated buffers to max_buffers.
774         (compare_record_run) Use new `idx' member for last resort
775         comparison, for stability.
776         (end_run) Call casefile_sleep() on irs->casefile, to prevent
777         running out of file descriptors.
778         (struct merge_state) Removed.
779         (merge) Don't need to allocate cases.  Always use MAX_MERGE_ORDER
780         unless we have fewer runs left.  Always merge consecutive runs,
781         for stability.  Return the final run.
782         (mod) Removed.
783         (choose_merge) New function.
784         (merge_once) Rewritten.
785
786 Mon Mar 14 21:05:42 2005  Ben Pfaff  <blp@gnu.org>
787
788         * cmdline.c: (static var testing_mode) Move into
789         parse_command_line().
790         
791 Mon Mar 14 21:05:13 2005  Ben Pfaff  <blp@gnu.org>
792
793         * algorithm.c: (remove_range) New function.
794         (remove_element) New function.
795
796         * dictionary.c: (dict_delete_var) Use remove_element().
797
798         * flip.c: (cmd_flip) Ditto.
799
800 Sun Mar 13 22:52:05 2005  Ben Pfaff  <blp@gnu.org>
801
802         * file-handle.q: (struct file_handle) `open_mode' should not be
803         const.
804         
805 Sun Mar 13 22:40:54 2005  Ben Pfaff  <blp@gnu.org>
806
807         First phase of making SORT CASES stable (bug 12313).
808
809         * sort.c: (struct indexed_case) New structure.
810         (do_internal_sort) Rewrite to make internal sorting stable.
811         (compare_case_dblptrs) Removed.
812         (compare_indexed_cases) New function.
813
814 Sun Mar 13 22:38:40 2005  Ben Pfaff  <blp@gnu.org>
815
816         Clean-ups.
817
818         * casefile.c: (casereader_read_xfer_assert) New function.
819
820         * dictionary.c: (dict_compact_case) New function.
821
822         * flip.c: (struct flip_pgm) New member idx_to_fv.
823         (cmd_flip) Initialize idx_to_fv member.
824         (destroy_flip_pgm) Free idx_to_fv member.
825         (flip_sink_write) Use struct flip_pgm member instead of case_sink
826         member.
827         (flip_sink_write) Ditto.
828
829         * vfm.c: (write_case) Use dict_compact_case() instead of
830         compact_case().
831         (compact_case) Removed.
832         (storage_source_create) Removed `dict' parameter.  All references
833         updated.
834
835         * vfm.h: (struct case_source) Removed `value_cnt' member.  All
836         references removed.
837         (struct case_sink) Removed `dict', `idx_to_fv' members.  All
838         references removed.
839
840 Sun Mar 13 22:35:55 2005  Ben Pfaff  <blp@gnu.org>
841
842         More AGGREGATE fixes.
843
844         * aggregate.c: (accumulate_aggregate_info) Implement NMISS and
845         NUMISS for strings.  Fix FOUT, POUT, FGT, FLT, FIN, FOUT for
846         strings.
847         (initialize_aggregate_info) Fix initialization for MIN, MAX for
848         strings.
849
850 Sat Mar 12 23:26:21 2005  Ben Pfaff  <blp@gnu.org>
851
852         Start work on testing and debugging AGGREGATE.
853
854         * aggregate.c: (cmd_aggregate) Use discrete bool variables instead
855         of a bit-map.  Require proper subcommand ordering.  Make OUTFILE
856         subcommand mandatory.
857         (parse_aggregate_functions) Check that PIN, POUT, FIN, FOUT
858         functions' arguments are in the correct order and swap them if
859         not.
860         (accumulate_aggregate_info) Make SUM include weights.  Add various
861         string functions.
862         (dump_aggregate_info) Add various string functions.
863         (initialize_aggregate_info) Initialize int1 for MIN, MAX.
864
865         * sort.c: (sort_parse_criteria) Add parameter for returning
866         whether any directions were specified.  All callers updated.
867
868 Sun Mar 13 14:54:27 WST 2005 John Darrington <john@darrington.wattle.id.au>
869
870         * t-test.q: Fixed erroneous logic in compare_group_binary.
871
872 Sat Mar 12 13:29:21 2005  Ben Pfaff  <blp@gnu.org>
873
874         * split-file.c: (cmd_split_file) Ignore LAYERED and SEPARATE
875         keywords (bug 11628).
876
877 Sat Mar 12 13:17:12 2005  Ben Pfaff  <blp@gnu.org>
878
879         * vfm.c: (procedure_with_splits) Fix bug 11492: end_func() must be
880         called *before* close_active_file().
881
882 Sat Mar 12 12:20:57 2005  Ben Pfaff  <blp@gnu.org>
883
884         * file-handle.q: (struct file_handle) Change open_mode from
885         character pointer to 3-char array, for safety.  Updated all
886         references.
887
888 Sat Mar 12 12:15:49 2005  Ben Pfaff  <blp@gnu.org>
889
890         Thanks to Ben Kujala <bkujala@oregonchildcare.org> for reporting
891         these bugs.
892         
893         * pfm-read.c: (read_header) Improve error message for many cases
894         in which the input is not actually a portable file.
895
896         * file-handle.q: (fh_open) When we give an error message, actually
897         return NULL.
898
899 Fri Mar 11 11:50:30 2005  Ben Pfaff  <blp@gnu.org>
900
901         * format.c: (check_common_specifier) New function for checks
902         common to check_input_specifier() and check_output_specifier().
903         (check_input_specifier) Use check_common_specifier().
904         (check_output_specifier) Use check_common_specifier().
905         (check_string_specifier) Removed.
906         (check_specifier_type) New function.
907         (check_specifier_width) New function.
908         (get_format_var_width) Fix bug.
909
910         * formats.c: (internal_cmd_formats) Only accept numeric variables.
911
912         * lexer.c: (check_id) Rename lex_id_to_token(), make public,
913         update all references.  Make case-insensitive.
914
915         * pfm-read.c: Essentially rewrite the whole file.  Now much
916         cleaner.
917
918         * print.c: (check_string_width) New function.
919         (fixed_parse_compatible) Use check_string_width(),
920         check_specifier_type().
921         (dump_fmt_list) Ditto.
922
923         * str.c: (st_trim_copy) New function.
924         (st_uppercase) New function.
925
926         * vars-atr.c: (var_is_valid_name) New function.
927         
928         * expressions/parse.c: (type_coercion_core) Use
929         check_specifier_type().
930         
931 Fri Mar 11 11:31:24 2005  Ben Pfaff  <blp@gnu.org>
932
933         * expressions/evaluate.c: (cmd_debug_evaluate) Fix memory leaks.
934
935         * expressions/parse.c: (no_match) Ditto.
936
937 Wed Mar  9 09:54:27 2005  Ben Pfaff  <blp@gnu.org>
938
939         * Makefile.am: (pspp_LDADD) Add libgsl-extras.a.
940
941         * expressions/helpers.c: (struct func_params) Removed.
942         (generalized_idf) Removed.
943         (cdf_beta) Removed.
944         (idf_beta) Removed.
945         (idf_fdist) Use gslextras_cdf_beta_Pinv() instead of idf_beta().
946
947         * expressions/operations.def: Implement IDF.BETA, CDF.BINOM,
948         CDF.GEOM, CDF.HYPER, CDF.NEGBIN, CDF.POISSON using gsl-extras.
949         Implement SIG.F, which I had overlooked previously.
950
951 Tue Mar  8 12:47:53 WST 2005 John Darrington <john@darrington.wattle.id.au>
952
953         * command.c command.def glob.[ch] cmdline.c: Made DEBUG cmds
954         available only in testing mode.
955
956 Sun Mar  6 23:25:40 2005  Ben Pfaff  <blp@gnu.org>
957
958         * data-in.c: Use `bool' throughout, where relevant.
959
960 Sun Mar  6 19:52:22 2005  Ben Pfaff  <blp@gnu.org>
961
962         DATA LIST with free-field formats should not have implied decimal
963         places (bug 12035).  Also clean up data-in.c a bit.
964
965         * data-in.h: (enum) Add DI_IMPLIED_DECIMALS.
966
967         * data-in.c: (apply_implied_decimals) New function.
968         (parse_numeric) Don't adjust exponent if DI_IMPLIED_DECIMALS not
969         set.  Also, get rid of gotos.
970         (parse_Z) Use apply_implied_decimals() if the field doesn't
971         contain a decimal point.
972         (parse_N) Use apply_implied_decimals().
973         (parse_IB) Ditto.
974         (parse_PIB) Ditto.
975         (parse_P) Ditto.
976         (parse_PK) Ditto.
977         (to_roman) Removed.
978         (parse_enum) New function.
979         (macro CHAR_IS_ROMAN) Removed.
980         (macro ROMAN_VALUE) Removed.
981         (parse_month) Use parse_enum().
982         (parse_weekday) Use parse_enum().
983         (parse_DATETIME) Use long for weekday.
984
985         * data-list.c: (read_from_data_list_fixed) Use
986         DI_IMPLIED_DECIMALS.
987
988 Sun Mar  6 17:07:20 2005  Ben Pfaff  <blp@gnu.org>
989
990         When the lexer sees something like `-5' in the input, it has to
991         decide whether it's a negative numeric constant token or a '-'
992         token followed by a positive numeric constant token.  It always
993         decides on the former, and then the parser can call
994         lex_negative_to_dash() if it wants the latter.  However, this
995         doesn't work for the case of `-0', because negative zero is
996         (portably) indistinguishable from positive zero.  So now we divide
997         T_NUM into two tokens, T_POS_NUM and T_NEG_NUM, to make the
998         distinction clear.  This requires a little bit of extra effort,
999         because there were several references to T_NUM in the code base.
1000         
1001         * lexer.c: (lex_get) Use T_NEG_NUM and T_POS_NUM to distinguish
1002         positive and negative numeric constants.
1003         (lex_double_p) Renamed lex_is_number().  Changed return type to
1004         bool.  Updated all relevant references to T_NUM to instead use
1005         this function.
1006         (lex_double) Renamed lex_number().  All references updated.
1007         (lex_integer_p) Renamed lex_is_integer().  Changed return type to
1008         bool.  All references updated.
1009         (lex_token_representation) Understand T_NEG_NUM and T_POS_NUM.
1010         (lex_negative_to_dash) Ditto.
1011         (dump_token) Ditto.
1012         
1013         * lexer.h: (enum) Add T_POS_NUM, T_NEG_NUM.  Remove T_NUM.
1014
1015 Sun Mar  6 22:09:20 2005  Ben Pfaff  <blp@gnu.org>
1016
1017         * expressions/operations.def: (NUMBER) Use DI_IMPLIED_DECIMALS.
1018
1019 Sun Mar  6 19:33:24 2005  Ben Pfaff  <blp@gnu.org>
1020
1021         * expressions/operations.def: (VEC_ELEM_NUM) Treat user-missing
1022         values as system-missing.
1023
1024         * expressions/parse.c: (parse_vector_element) Fix order of
1025         arguments in call to expr_allocate_binary().
1026
1027 Sun Mar  6 17:51:05 2005  Ben Pfaff  <blp@gnu.org>
1028
1029         * expressions/optimize.c: (optimize_tree) Fix optimization bug for
1030         x**2.
1031
1032         * expressions/parse.c: (type_coercion_core) Set *node to NULL on
1033         failure, as indicated by function comment.
1034         (parse_binary_operators) Always return NULL on type_coercion()
1035         failure.  Should have been doing this anyway, but bug in
1036         type_coercion_core() filtered through.
1037         (parse_add) Fix typo in user message.
1038         (parse_primary) Understand T_NEG_NUM and T_POS_NUM.
1039
1040 Sun Mar  6 10:47:13 2005  Ben Pfaff  <blp@gnu.org>
1041
1042         * expressions/operations.def: Add VALUE function.
1043
1044         * expressions/parse.c: (parse_function) Need an unary composite
1045         node for variables in A TO B, not a variable node.  Use
1046         allocate_unary_variable().
1047         (parse_primary) Use allocate_unary_variable().
1048         (allocate_unary_variable) New function.
1049
1050 Thu Mar  3 23:53:32 2005  Ben Pfaff  <blp@gnu.org>
1051
1052         * expressions/PSPP_expressions.pm: Renamed it back to generate.pl
1053         but fixed the real problem that was preventing the build from a
1054         separate directory.  I liked it my way better ;-)
1055         
1056 Thu Mar  3 23:17:51 2005  Ben Pfaff  <blp@gnu.org>
1057
1058         * expressions/parse.c: (expr_parse) Fix parameter type.  Thanks to
1059         John Darrington <john@darrington.wattle.id.au> for reporting this
1060         bug.
1061
1062 Thu Mar  3 22:10:25 WST 2005 John Darrington <john@darrington.wattle.id.au>
1063
1064         * expressions/Makefile.am expressions/evaluate.h.pl
1065           expressions/evaluate.inc.pl expressions/operations.h.pl
1066           expressions/optimize.inc.pl expressions/parse.inc.p:
1067
1068           Renamed generate.pl to PSPP_expressions.pm and adjusted *.pl
1069           to suit. 
1070
1071           Fixed everything so that it can be built from an arbitrary
1072           directory.
1073         
1074 Thu Mar  3 22:08:35 WST 2005 John Darrington <john@darrington.wattle.id.au>
1075
1076         * Makefile.am : Fixed up CLEANFILES target.
1077
1078 Mon Feb 28 23:49:56 2005  Ben Pfaff  <blp@gnu.org>
1079
1080         * str.h: Changed `struct len_string' to `struct fixed_string', a
1081         more accurate name.  Updated all references.
1082
1083 Mon Feb 28 23:35:30 2005  Ben Pfaff  <blp@gnu.org>
1084
1085         Redo calendar support.  Should now be bug-for-bug compatible.
1086         
1087         * calendar.c: New file.
1088
1089         * calendar.h: New file.
1090
1091         * data-in.c: Use new calendar functions.
1092         (parse_sign) Change sense of return value.
1093         (calendar_error) New function.
1094         (ymd_to_ofs) New function.
1095         (ymd_to_date) New function.
1096         (parse_DATE) Use new function.
1097         (parse_ADATE) Ditto.
1098         (parse_EDATE) Ditto.
1099         (parse_SDATE) Ditto.
1100         (parse_JDATE) Ditto.
1101         (parse_QYR) Ditto.
1102         (parse_MOYR) Ditto.
1103         (parse_WKYR) Ditto.
1104         (parse_TIME) Ditto.
1105         (parse_DTIME) Ditto.
1106         (parse_DATETIME) Ditto.
1107
1108         * data-out.c: (convert_date) Use new calendar functions.
1109
1110         * error.c: (err_vmsg) Changed interface to be more sensible.
1111         Updated all callers.
1112         (dump_message) Don't double new-lines (why did we do this
1113         anyway?).
1114
1115 Mon Feb 28 23:30:25 2005  Ben Pfaff  <blp@gnu.org>
1116
1117         * sfmP.h: (macro flt64) Moved here from pref.h.orig.
1118         (macro FLT64_MAX) Moved here from pref.h.orig.
1119
1120 Mon Feb 28 23:28:01 2005  Ben Pfaff  <blp@gnu.org>
1121
1122         * set.q: Support SET EPOCH.
1123         (static var set_epoch) New var.
1124         (aux_stc_custom_epoch) New function.
1125         (stc_custom_epoch) New function.
1126         (get_epoch) New function.
1127         (stc_custom_pager) [USE_INTERNAL_PAGER] Fix bug.
1128
1129         * format.c: Make it possible just to check whether a specifier is
1130         valid without emitting an error message.
1131         (parse_format_specifier_name) Change interface, update all
1132         callers.
1133         (check_input_specifier) Ditto.
1134         (check_output_specifier) Ditto.
1135         (parse_format_specifier) Ditto.
1136
1137 Mon Feb 28 23:24:08 2005  Ben Pfaff  <blp@gnu.org>
1138
1139         * command.def: Add DEBUG POOL.
1140
1141         * pool.c: (pool_destroy) Fix bug in deleting this pool from its
1142         parent.
1143         (pool_clear) Properly account for size of pool gizmo.
1144         (pool_realloc) Ditto.
1145         (pool_clone) New function.
1146
1147         * pool.h: Mark our allocation functions MALLOC_LIKE.
1148
1149 Mon Feb 28 23:21:26 2005  Ben Pfaff  <blp@gnu.org>
1150
1151         * Makefile.am: Move many definitions into new top-level
1152         Make.build.  Add expressions to SUBDIRS.  Add calendar.c,
1153         calendar.h.  Remove expr-evl.c, expr-opt.c expr-prs.c, expr.h,
1154         exprP.h, expr.def.
1155
1156         * case.c: (case_resize) New function.
1157         (case_swap) New function.
1158
1159         * casefile.c: Include mkfile.h.
1160
1161 Fri Feb 25 21:11:35 WST 2005 John Darrington <john@darrington.wattle.id.au>
1162
1163         * sfm-read.c: Fixed a buglet which caused a crash when trying
1164         to read a non-existent file.
1165
1166 Sun Feb 13 16:11:13 2005  Ben Pfaff  <blp@gnu.org>
1167
1168         Fix bug 11955.
1169
1170         * aggregate.c: (parse_aggregate_functions) Code cleanup.
1171         Important part: get rid of spurious copying of function->format to
1172         destvar->print and destvar->write.
1173
1174 Fri Feb 11 00:08:36 2005  Ben Pfaff  <blp@gnu.org>
1175
1176         Fix bug 11916, which was confusing a variable's `index' member
1177         with the variable's position in a var_set.  Although these are
1178         usually the same, they are not for array `var_set's.
1179         
1180         Took advantage of this bug as an opportunity to clean up and
1181         rewrite parse_var_set_vars().
1182
1183         * vars-prs.c: (parse_vs_variable_idx) New function.
1184         (parse_vs_variable) Reimplement in terms of
1185         parse_vs_variable_idx().
1186         (parse_var_idx_class) New function.
1187         (add_variable) New function.
1188         (add_variables) New function.
1189         (parse_var_set_vars) Rewritten.
1190         (struct var_set) Change `lookup_var' member that returns a
1191         variable into `lookup_var_idx' member that returns an int.
1192         Updated the var set implementations in obvious corresponding ways.
1193         Used compare_var_ptr_names(), hash_var_ptr_name() just added.
1194         
1195 Fri Feb 11 00:06:03 2005  Ben Pfaff  <blp@gnu.org>
1196
1197         Use our global variable compare & hash functions and give them
1198         better names.  Add similar functions for dealing with double
1199         pointers to variables.
1200         
1201         * vars-atr.c: (compare_variables) Renamed compare_var_names().
1202         (hash_variable) Renamed hash_var_name().
1203         (compare_var_ptr_names) New function.
1204         (hash_var_ptr_name) New function.
1205         
1206         * t-test.q: (cmd_t_test) Use global compare_var_names(),
1207         hash_var_name().
1208         (compare_var_name) Removed.
1209         (hash_var_name) Removed.
1210
1211 Fri Feb 11 00:04:39 2005  Ben Pfaff  <blp@gnu.org>
1212
1213         Fix dictionary bug.
1214         
1215         * dictionary.c: (compare_variable_dblptrs) Rename
1216         compare_var_ptrs() and fix it to properly dereference the double
1217         pointers.
1218
1219 Mon Feb  7 09:58:15 WST 2005 John Darrington <john@darrington.wattle.id.au>
1220
1221         crosstabs.q examine.q oneway.q q2c.c:  Added a q2c feature to 
1222         declare subcommands as mandatory.  Closed bug #11843
1223
1224 Sat Feb  5 20:35:10 WST 2005 John Darrington <john@darrington.wattle.id.au>
1225         
1226         * getline.c command.[ch] command.def:  Added (very rudimentary)
1227         support for line  completion when in interactive mode.  Partially 
1228         addresses bug #11693
1229         
1230 Mon Jan 31 09:52:51 WST 2005 John Darrington <john@darrington.wattle.id.au>
1231
1232         * examine.q factor_stats.c oneway.q output.c pfm-read.c: Fixed some
1233         problems revealed by valgrind.
1234
1235
1236 Wed Jan 26 11:44:11 WST 2005 John Darrington <john@darrington.wattle.id.au>
1237
1238         * set.q: Affixed a fix to the previous fix such that we'll be OK now
1239         whether or not PAGER is set.
1240
1241 Wed Jan 26 09:25:54 WST 2005 John Darrington <john@darrington.wattle.id.au>
1242
1243         * set.q: Copied the string produced by getenv("PAGER") thus avoiding
1244         "invalid free" errors.  Hopefully fixes bug #11722
1245
1246         * compute.c expr-prs.c: Check that lvalues are populated before 
1247         attempting to destroy them.  Closes bug #11676
1248
1249 Tue Jan 25 21:01:43 WST 2005 John Darrington <john@darrington.wattle.id.au>
1250
1251         * aggregate.c: Initialised the complete agr_proc structure.
1252         Closes bug #11675
1253
1254
1255 Sun Jan 23 23:02:21 2005  Ben Pfaff  <blp@gnu.org>
1256
1257         * print.c: (print_trns_free) Close the dfm writer if there is one,
1258         fixing a memory leak.
1259
1260 Mon Jan 24 12:24:36 WST 2005 John Darrington <john@darrington.wattle.id.au>
1261
1262         * glob.c oneway.q q2c.c t-test.q vfm.c: Still *more* memory leaks 
1263         fixed.
1264
1265
1266 Fri Jan 21 19:54:14 WST 2005 John Darrington <john@darrington.wattle.id.au>
1267
1268         * linked-list.[ch] Added
1269
1270         * examine.q file-handle.[hq] font.h glob.c groff-font.c postscript.c 
1271           set.q:    Yet more memory leaks
1272
1273 Tue Jan 18 23:12:40 WST 2005 John Darrington <john@darrington.wattle.id.au>
1274
1275         * t-test.q examine.q : More memory leaks fixed.
1276
1277 Tue Jan 18 19:26:59 WST 2005 John Darrington <john@darrington.wattle.id.au>
1278
1279         * examine.q  factor_stats.[ch] get.c pfm-read.c: Plugged numerous
1280         memory leaks.
1281
1282 Mon Jan 10 14:43:45 WST 2005 John Darrington <john@darrington.wattle.id.au>
1283
1284         * ascii.c cartesian.c casefile.c chart.h devind.c 
1285           examine.q frequencies.q
1286           html.c output.h piechart.c plot-chart.c plot-hist.c
1287
1288           Integrated the chart rendering into the output stream
1289           (currently only works for html).
1290           
1291           Removed gratuitous use of ifndef NO_CHARTS, and replaced with
1292           dummy-chart.c for compiling without charts.
1293
1294         * mkfile.[ch] Created.  
1295
1296         * som.[ch] tab.[ch]: Changed name of som_table to som_entity
1297         Added type element so we can tell if it's a chart or a table.
1298
1299         * chart.h examine.q piechart.c plot-chart.c plot-hist.c: changed the 
1300         API of charts to be more like that of tables.
1301
1302 Thu Jan 13 21:00:02 WST 2005 John Darrington <john@darrington.wattle.id.au>
1303
1304         * casefile.c main.c: Moved the SIGINT handler from casefile.c to
1305         main.c. Removed the handler for SIGQUIT.
1306
1307 Mon Jan 10 14:43:45 WST 2005 John Darrington <john@darrington.wattle.id.au>
1308
1309         * casefile.c: Added a signal handler to delete temp files on 
1310         SIGINT and SIGQUIT
1311
1312         * permissions.c Inhibited the PERMISSIONS command when SAFER is on.
1313
1314         * command.def Added a lot more unimplemented commands.
1315
1316         * copyleft.[ch] cmdline.c Moved legal information to copyleft.c
1317
1318 Sat Jan  8 23:58:34 2005  Ben Pfaff  <blp@gnu.org>
1319
1320         * sort.c: (compare_initial_runs) Needed additional level of
1321         dereferencing.
1322         (merge_once) Fix plenty of stupid mistakes.
1323
1324 Sat Jan  8 23:55:27 2005  Ben Pfaff  <blp@gnu.org>
1325
1326         * casefile.c: (casefile_sleep) Need to flush_buffer() after
1327         calling casefile_to_disk() or we will lose the last block in the
1328         file if the casefile started out as disk-based.
1329         (casefile_get_reader) Initialize reader->destructive to 0.
1330         (cmd_debug_casefile) Add new test pattern.
1331         (test_casefile) Define new test pattern to make sure
1332         casefile_sleep() works properly.
1333
1334 Fri Jan  7 08:00:05 WST 2005 John Darrington <john@darrington.wattle.id.au>
1335
1336         * Makefile.am chart.[ch]  histogram.[ch] piechart.c (Modified);
1337           plot-hist.c plot-chart.c (Added) Reorganised these files in an
1338           attempt to seperate the creation and processing of charts from their
1339           actuall renedering.
1340
1341         * examine.q frequencies.q generated charts conditional upon the NO_CHARTS
1342           macro.
1343
1344 Thu Jan  6 18:48:58 WST 2005 John Darrington <john@darrington.wattle.id.au>
1345
1346         * main.c Added a signal handler for SIGFPE
1347
1348         * sort.c Somewhat more robust fix to the previous entry.
1349
1350 Wed Jan  5 21:23:31 2005  Ben Pfaff  <blp@gnu.org>
1351
1352         * sort.c: (merge) Fix assertion for proper Huffman merge pattern:
1353         0 == 1 modulo 1.  See Knuth 5.4.9 (vol. 3, 2nd ed.,
1354         pp. 361).  Thanks to John Darrington <john@cellform.com.au> for
1355         reporting the bug.
1356
1357 Wed Jan  5 22:42:26 WST 2005 John Darrington <john@darrington.wattle.id.au>
1358
1359         * case.h Fixed bug # 11307
1360         
1361 Wed Jan  5 08:30:48 WST 2005 John Darrington <john@darrington.wattle.id.au>
1362
1363         * val-labs.c Fixed bug which caused a crash if VALUE LABELS had
1364         a trailing slash.
1365
1366 Mon Jan  3 17:44:37 2005  Ben Pfaff  <blp@gnu.org>
1367
1368         * pfm-read.c: (read_variables) Remove direct manipulation of
1369         v->aux, which is no longer needed.  Fixes bug 11483.
1370
1371 Sat Jan  1 19:01:16 WST 2005 John Darrington <john@darrington.wattle.id.au>
1372
1373         * data-list.c Fixed a bug in parsing delimiters.
1374
1375         * group.c vars-atr.c Fixed buglet in hash/compare functions for alpha
1376         values.
1377
1378         * percentiles.c Properly handled calculation of Tukey hinges where
1379         the number of data is small.
1380
1381         * oneway.q Used the generic value_to_string function for independent
1382         variable instead of trying to do it ourselves.
1383
1384         * box-whisker.c Fixed a buglet which caused a crash if the number of
1385         data was zero
1386
1387
1388 Fri Dec 31 16:47:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
1389
1390         * examine.q box-whisker.c chart.h Implemented boxplots in EXAMINE
1391
1392         * percentiles.c Fixed some bugs when calculating percentiles when
1393         there's a small number of cases.
1394
1395 Wed Dec 29 08:18:08 WST 2004 John Darrington <john@darrington.wattle.id.au>
1396
1397         * percentiles.[ch] Added. Calculates percentiles and Tukey hinges
1398
1399         * examine.q factor_stats.[ch]  Added calculation of percentiles
1400
1401 Fri Dec 24 15:09:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
1402
1403         * t-test.q Fixed bug #11227 Made t-test work when the independent
1404         variable is alpha
1405
1406 Sat Dec 11 11:43:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
1407
1408         * factor_stats.c Fixed calculation of trimmed mean under various
1409         special conditions.
1410
1411 Sat Dec  4 17:14:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
1412
1413         * histogram.c chart.[ch] factor_stats.c frequencies.q
1414
1415         Added code to calculate sensible histogram ranges and limits.
1416
1417 Thu Dec  2 13:37:43 WST 2004 John Darrington <john@darrington.wattle.id.au>
1418
1419         * chart.h Updated to reflect many API changes.
1420
1421         * cartesian.c chart.c Moved the definitions of chart_write_{xy}scale from 
1422         cartesian.c and into chart.c
1423
1424         * factorstats.[ch] Added the histogram calculations
1425
1426         * casefile.c Removed an unused variable.
1427
1428         * frequencies.q examine.q histogram.c  Reworked the API for 
1429         histograms.
1430
1431         * piechart.c  Revised the API for piecharts.
1432
1433         * var.h  Moved the definitions of freq_tab and freq out of var.h
1434         and into frequencies.q where they belong.
1435         
1436 Tue Nov 30 21:10:20 2004  Ben Pfaff  <blp@gnu.org>
1437
1438         * flip.c: (flip_file) Check for off_t separately from fseeko(),
1439         using AC_TYPE_OFF_T.
1440
1441 Tue Nov 30 08:47:41 2004  Ben Pfaff  <blp@gnu.org>
1442
1443         * flip.c: (flip_file) If fseeko() is not available, use long int
1444         for off_t.  Thanks to "Marshall DeBerry" <mdb@radix.net> for
1445         reporting the problem.
1446
1447 Mon Nov 29 12:20:59 WST 2004 John Darrington <john@darrington.wattle.id.au>
1448
1449         * examine.q factor_stats.[ch] Changed stderr to se_mean to avoid
1450         conflict with stdio.
1451
1452 Sun Nov 21 10:32:41 WST 2004 John Darrington <john@darrington.wattle.id.au>
1453
1454         * var-labs.c (var_to_string) Now returns null if the variable is null
1455
1456         * value-labels.c (value_to_string) Made it return null if either the 
1457         value or the variable is null.
1458
1459         * hash.c (hsh_clear) Fixed a buglet.
1460
1461         * examine.q  factor_stats.[ch] Largely  rewrote, because I'd started 
1462         with  the wrong model.
1463
1464         * casefile.[ch] Added a function to return the casereader.case_idx 
1465         member
1466
1467         * examine.q  Implemented the extreme values results.
1468
1469 John Darrington <john@darrington.wattle.id.au>
1470
1471         * settings.h set.c glob.[ch] frequencies.q q2c.c error.c lexer.[ch] 
1472           output.[ch] getline.c 
1473
1474           Plugged some memory leaks
1475
1476 Mon Nov 15 23:47:40 2004  Ben Pfaff  <blp@gnu.org>
1477
1478         Adopt GSL random number generators, paving the way for providing
1479         the complete suite of random number generators on expressions.
1480         
1481         * Makefile.am: Remove random.c, random.h.
1482
1483         * random.c: Removed.
1484
1485         * random.h: Removed.
1486
1487         * algorithm.c: (algo_default_random) Use GSL functions.
1488
1489         * casefile.c: (test_casefile) Use GSL RNG functions.
1490
1491         * expr-evl.c: (expr_evaluate) Use GSL RNG functions for OP_NORMAL,
1492         OP_UNIFORM.
1493
1494         * sample.c: (cmd_sample) Use GSL RNG functions.
1495         (sample_trns_proc) Ditto.
1496
1497         * set.q: (static var set_seed) Removed.
1498         (static var seed_flag) Removed.
1499         (static var rng) New variable.
1500         (aux_stc_custom_seed) No seed value anymore, don't print anything.
1501         (stc_custom_seed) Use new seed functions.
1502         (seed_is_set) Removed.
1503         (get_rng) New function that composes the entire external
1504         interface.
1505         (set_rng) New function.
1506         (random_seed) New function.
1507
1508 Mon Nov 15 22:08:25 2004  Ben Pfaff  <blp@gnu.org>
1509
1510         * expr-evl.c: (expr_evaluate) Fix XDATE.JDAY formula.  Thanks to
1511         John Darrington <john@darrington.wattle.id.au> for reporting this
1512         bug.
1513
1514 Tue Nov 16 13:19:18 WST 2004 John Darrington <john@darrington.wattle.id.au>
1515
1516         * permissions.c command.def Added the PERMISSIONS command
1517
1518 Mon Nov 15 01:33:32 2004  Ben Pfaff  <blp@gnu.org>
1519
1520         * q2c.c: (dump_header) Don't try to emit #includes at very top of
1521         output file because that will precede #include <config.h>, which
1522         is bad.
1523         (main) Add needed headers to /* (header) */ code.
1524
1525 Mon Nov 15 01:21:36 2004  Ben Pfaff  <blp@gnu.org>
1526
1527         Instead of making system or portable file readers responsible for
1528         dropping and reordering variables, make them read full cases and
1529         let the caller take care of any changes.
1530
1531         * get.c: New "case map" structure to handle this.  Use for GET,
1532         IMPORT, MATCH FILES.  Essentially rewrite the whole file.
1533
1534         * pfm-read.c: (pfm_read_case) Read into provided case.  Signature
1535         changed appropriately.
1536
1537         * sfm-read.c: (sfm_read_case) Ditto.
1538
1539 Mon Nov 15 00:47:45 2004  Ben Pfaff  <blp@gnu.org>
1540
1541         Decided that case_serialize() and case_unserialize() were too
1542         abstract.  Also we need a couple more functions to avoid excessive
1543         copying for data in/out fast paths.
1544
1545         * case.c: (case_serial_size) Removed.
1546         (case_serialize) Rename case_to_values() and make its argument
1547         explicitly an array of union values.
1548         (case_unserialize) Rename case_from_values() and make its argument
1549         explicitly an array of union values.
1550         (case_data_all) New function.
1551         (case_data_all_rw) New function.
1552
1553         * casefile.c: (struct casefile) Change buffer from array of
1554         unsigned char to array of union value for better accuracy.
1555         Redefine buffer_used and buffer_size in terms of values, not
1556         bytes.  Remove case_size because it is now redundant with
1557         value_cnt.  Fix up all references to these members.
1558
1559 Mon Nov 15 00:45:46 2004  Ben Pfaff  <blp@gnu.org>
1560
1561         * barchart.c: (struct subcat) Make `label' member const to silence
1562         GCC warning with -Wwrite-strings.
1563
1564         * cartesian.c: (struct dataset) Ditto.
1565
1566         * case.c: Don't re-define NDEBUG if already defined.
1567         Add lots of comments.
1568
1569         * str.c: Fix includes.
1570
1571         * crosstabs.q: Fix includes.
1572
1573         * examine.q: Fix includes.  Fix GCC warning about unused
1574         variables.
1575         
1576         * frequencies.q: (stat macro) Removed and replaced where used by
1577         its expansion.
1578
1579         * list.q: Fix includes.
1580
1581         * oneway.q: Fix includes.
1582
1583         * piechart.c: Fix includes.  Only define M_PI if not already
1584         defined.
1585
1586         * sfm-read.c: (bswap) New function.
1587         (bswap_int32) Write in terms of bswap.
1588         (bswap_flt64) Ditto.
1589
1590         * str.c: (ds_data) Add external definition here, needed because
1591         str.h has only an `extern inline' version.
1592
1593         * value-labels.c: Fix includes.
1594
1595 Mon Nov 15 00:40:55 2004  Ben Pfaff  <blp@gnu.org>
1596
1597         Instead of providing a system or portable file writer with a raw
1598         case in the format needed for output, provide it with a regular
1599         case.  The writer takes care of any needed translation.
1600
1601         * aggregate.c: Adopt new scheme for AGGREGATE.
1602         (struct agr_proc) sfm_agr_case member removed.
1603         (write_case_to_sfm) Removed because the new interface is easier to
1604         use.
1605
1606         * get.c: Adopt new scheme for SAVE, XSAVE, EXPORT.
1607
1608         * pfm-write.c: Implement new scheme.
1609
1610         * sfm-write.c: Ditto.
1611
1612 Mon Nov 15 00:32:24 2004  Ben Pfaff  <blp@gnu.org>
1613
1614         Instead of treating `struct file_handle' as a class to subclass
1615         into data files, system files, and portable files, instead use it
1616         as a helper that coordinates access.  Now it is opaque, too.
1617
1618         This means that most references to a struct file_handle are now
1619         changed into references to one of struct dfm_reader, struct
1620         dfm_writer, struct sfm_reader, struct sfm_writer, struct
1621         pfm_reader, or struct pfm_writer, according to what's being read
1622         or written.
1623
1624         Most related changes are only worth summarizing briefly.
1625
1626         * dictionary.c: (dict_clear) Destroy aux data in deleted
1627         variables.
1628         (dict_clear_aux) New function.
1629         (dict_create_var) Initialize aux, aux_dtor.
1630         (dict_delete_var) Destroy aux data in deleted variable.
1631
1632         * file-handle.h: (struct fh_ext_class) Removed.
1633         (struct file_handle) Removed.
1634         (fh_init_files) Removed.
1635
1636         * file-handle.q: Changed references to a handle's `private' member
1637         to direct references.
1638         (struct private_file_handle) Renamed file_handle.
1639         Add next, open_cnt, type, open_mode, aux members.
1640         (struct file_handle_list) Removed.
1641         (extern var inline_file) Removed.
1642         (static var file_handles) Changed from file_handle_list * to
1643         file_handle *.
1644         (create_file_handle) Initialize new members.
1645         (fh_close_handle) Removed.
1646         (mode_name) New function.
1647         (fh_open) New function.
1648         (fh_close) New function.
1649         (fh_parse_file_handle) Renamed fh_parse().
1650
1651         * glob.c: (init_glob) Remove fh_init_files() call.
1652         
1653         * aggregate.c: use sfm_writer.
1654         (create_sysfile) Removed because the new interface is simpler.
1655         
1656         * apply-dict.c: Use sfm_reader.
1657
1658         * data-list.c: Use dfm_reader.
1659
1660         * file-type.c: Use dfm_reader.
1661
1662         * get.c: Use sfm_reader, sfm_writer, pfm_reader, pfm_writer.
1663
1664         * inpt-pgm.c: Use dfm_reader.
1665
1666         * print.c: Use dfm_writer.
1667
1668         * sysfile-info: Use sfm_reader.
1669
1670         * dfm-read.c: Adopt new file handle infrastructure.
1671
1672         * dfm-write.c: Ditto.
1673
1674         * pfm-read.c: Ditto.
1675         
1676         * pfm-write.c: Ditto.
1677
1678         * sfm-read.c: Ditto.
1679
1680         * sfm-write.c: Ditto.
1681         
1682 Mon Nov 15 00:31:44 2004  Ben Pfaff  <blp@gnu.org>
1683
1684         Break dictionary functions into separate header file.
1685
1686         * dictionary.h: New file.
1687
1688         * var.h: Moved dict_*() functions to dictionary.h.
1689
1690 Mon Nov 15 00:30:33 2004  Ben Pfaff  <blp@gnu.org>
1691
1692         Get rid of procedure-specific union in struct variable, using
1693         instead a void * pointer and a destructor function.
1694
1695         Most related changes are only worth brief summaries.
1696
1697         * crosstabs.q: Fix includes.  Use new struct var_range in lieu of
1698         old p.crs member in struct variable.
1699         
1700         * frequencies.q: Fix includes.  Use new struct var_freqs in lieu
1701         of old p.frq member in struct variable.
1702
1703         * histogram.c: (draw_histogram) Takes new freq_tab arg because
1704         it's no longer possible to grab this from var->p.frq.
1705
1706         * piechart.c: (draw_piechart) Ditto.
1707
1708         * group.c: (group_proc_get) New function.
1709
1710         * levene.c: Use group_proc_get() in lieu of old p.grp_data member
1711         in struct variable.
1712
1713         * oneway.q: Ditto.
1714
1715         * t-test.q: Ditto.
1716
1717         * main.c: (execute_command) Clear aux data in default_dict after
1718         each command.  (It's debatable whether this should be done.)
1719
1720         * matrix-data.c: Use new struct mxd_var in lieu of old p.mxd
1721         member in struct variable.
1722
1723         * means.q: Get rid of integer mode, which is not included in
1724         recent SPSS and was the only code that wanted per-variable private
1725         data.
1726
1727         * var.h: (struct crosstab_proc) Removed.
1728         (struct frequencies_proc) Removed.
1729         (struct list_proc) Removed.
1730         (struct get_proc) Removed.
1731         (struct means_proc) Removed.
1732         (struct matrix_data_proc) Removed.
1733         (struct match_files_proc) Removed.
1734         (lots of enums) Removed.
1735         (struct variable) Removed members `p', `get'.  Add member
1736         `aux_dtor'.
1737
1738         * vars-atr.c: (var_attach_aux) New function.
1739         (var_detach_aux) New function.
1740         (var_clear_aux) New function.
1741         (var_dtor_free) New function.
1742         (discard_variables) Use NULL instead of inline_file.
1743
1744 Fri Nov 12 10:07:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
1745
1746         * value-labs.c  Fixed the implmentation of value_to_string, so 
1747         that it properly handles alpha values.
1748
1749         * oneway.q  Changed instances where labels were being probed manually, 
1750         to use the canonical {var,value}_to_string functions
1751
1752 Thu Nov 11 21:01:31 WST 2004 John Darrington <john@darrington.wattle.id.au>
1753
1754         * examine.q cartesian.c chart.[ch]   Added normal and detrended normal
1755         plots.  Changed the API of the cartesian plot to be a much lower level
1756         thing.
1757
1758 Sun Nov  7 17:25:04 WST 2004 John Darrington <john@darrington.wattle.id.au>
1759
1760         * examine.q Added some of the parametric calculations
1761
1762         * factor_stats.[ch]  Created
1763         
1764 Sat Nov  6 21:24:31 WST 2004 John Darrington <john@darrington.wattle.id.au>
1765
1766         * examine.q  Changed the definition of factors to be a composite, and
1767         dealt with the consequences.
1768
1769 Sat Nov  6 20:40:38 WST 2004 John Darrington <john@darrington.wattle.id.au>
1770
1771         * examine.q Fixed problem where examine wasn't dealing properly with 
1772         splits
1773
1774 Sat Nov  6 14:49:47 WST 2004 John Darrington <john@darrington.wattle.id.au>
1775
1776         * oneway.q Fixed problem where oneway wasn't dealing properly with 
1777         splits
1778
1779 Thu Nov  4 11:09:01 WST 2004 John Darrington <john@darrington.wattle.id.au>
1780
1781         * q2c.c examine.q  Fixed a bug (feature?) whereby arrays in the
1782         command which had settings didn't get the appropriate code
1783         generated.
1784
1785         * val.h value-labels.[ch] var-labs.c Added v*to_string functions
1786         to convert variables/values to strings.
1787
1788         * examine.q  Added framework for the EXAMINE command.
1789
1790 Mon Nov  1 12:46:17 WST 2004 John Darrington <john@darrington.wattle.id.au>
1791
1792         * q2c.c frequencies.q set.q t-test.q  Fixed the q2c parsing of DBL 
1793         subcommand types.  Changed frequencies.q to use it rather then the 
1794         custom parser.  Dealt with the consequences.  Added a test for NTILES
1795         subcommand of frequencies.
1796
1797 Sat Oct 30 09:16:29 WST 2004 John Darrington <john@darrington.wattle.id.au>
1798
1799         * oneway.q   Fixed up the behaviour when given missing values
1800
1801         * levene.c oneway.q Fixed a buglet with the levene statistic and
1802         incorporated the levene test into the oneway command.
1803
1804         * group.h  t-test.q  Moved the CMP_EQ and CMP_LE symbols out of 
1805         global scope, since they're only relevant to T-TEST
1806
1807 Fri Oct 29 17:39:03 WST 2004 John Darrington <john@darrington.wattle.id.au>
1808
1809         * group.c group.h group_proc.h levene.c oneway.q t-test.q
1810
1811         Made the t-test more consistent
1812         with the way it handles groups.  That is, it now uses a hash instead
1813         of an array of 2.  Also, made the levene.c file independent of the 
1814         implementation of the t-test.  So now levene should be fine for both
1815         t-test and anova.
1816
1817         * Added an oneway.q file for one way anova
1818
1819 Wed Jun  2 22:08:02 2004  Ben Pfaff  <blp@gnu.org>
1820
1821         * descript.c: (cmd_descriptives) Remove harmless but bogus test in
1822         STATISTICS parsing.
1823
1824 Mon May 31 20:45:24 2004  Ben Pfaff  <blp@gnu.org>
1825
1826         Fix memory leaks.
1827
1828         * data-list.c: (cmd_data_list) Free dls->delims on lossage.
1829         (data_list_trns_free) Free dls->delims.
1830
1831         * t-test.q: (tts_custom_pairs) Free vars.
1832         (ssbox_one_sample_init) Fix tab_vline() argument.
1833         (ssbox_independent_samples_init) Ditto.
1834         (trbox_paired_init) Ditto.
1835         (trbox_one_sample_init) Ditto.
1836
1837 Mon May 31 17:19:27 2004  Ben Pfaff  <blp@gnu.org>
1838
1839         Generalize casefiles to the extent that we can use them for
1840         sorting and other kinds of data transformations.  Change cases to
1841         be copy-on-write to improve memory efficiency in common cases.
1842         Every access to a member of a `struct ccase' was changed to be a
1843         call to a case_*() function, especially case_data(), case_num(),
1844         case_str(), or case_data_rw().  Many instances of a local variable
1845         named "case_num" were changed to "case_idx" as a consequence.
1846         Many `struct ccase *' were changed to actual `struct ccase'
1847         because of copying semantics of cases.  In several places there
1848         was a choice between updating debug code to work with the new ADTs
1849         or just deleting it because it was useless; I chose to delete it.
1850  
1851         * Makefile.am: (pspp_SOURCES) Add case.c, case.h.
1852
1853         * case.c: New file.
1854
1855         * case.h: New file.
1856
1857         * aggregate.c: (struct agr_proc) Change type of `sort' to
1858         sort_criteria *.  Add `break_vars', `break_var_cnt' members.
1859         Rename `vars' to `agr_vars', all references updated.  Change
1860         `agr_case' to type `struct ccase'.
1861         (cmd_aggregate) Deal with new members.  Use case_create(),
1862         sort_active_file_in_place(), sort_active_file_to_casefile().
1863         (agr_destroy) Deal with new members.
1864         (aggregate_single_case) Ditto.
1865         (dump_aggregate_info) Ditto.
1866         (initialize_aggregate_info) Ditto.
1867         (agr_to_active_file) Ditto.
1868         (presorted_agr_to_sysfile) Ditto.
1869         (sort_agr_to_sysfile) Removed.
1870
1871         * alloc.c: (out_of_memory) Make non-static.
1872
1873         * alloc.h: Prototype out_of_memory().
1874
1875         * casefile.c: Switched from a linked list in-memory representation
1876         to a two-level array-style representation.  The linked list was
1877         appropriate when we could stick a header onto cases, but that's no
1878         longer the case.  Also, the two-level array will allow for random
1879         in-memory access in case that's ever wanted.  Also added the
1880         concept of a `destructive casereader', one that destroys cases in
1881         the underlying casefile as they are read out.
1882         (macro CASES_PER_BLOCK) New macro.
1883         (struct casefile) New members `value_cnt', `case_list_size',
1884         `case_acct_size', `being_destroyed', `cases'.  Removed `head',
1885         `tail'.
1886         (struct casereader) Removed `cur'.  Added `destructive', `c'.
1887         (global var casefiles) Made static.
1888         (static var case_bytes) New var.
1889         (casefile_create) Takes a value count, not a case size in bytes,
1890         to conform to the case interface.  All callers updated.  Deal with
1891         new and removed members.
1892         (casefile_destroy) Deal with new and removed members.
1893         (casefile_sleep) New function.
1894         (casefile_get_case_size) Removed.
1895         (casefile_get_value_cnt) New function.
1896         (casefile_append) Rewritten to deal with new and removed members.
1897         (casefile_append_xfer) New function.
1898         (write_case_to_disk) Use case_serialize().
1899         (call_posix_fadvise) Removed because posix_fadvise64 segfaults.
1900         Couldn't figure out why.
1901         (casefile_to_disk) Don't call call_posix_fadvise.  Rewritten to
1902         deal with new and removed members.
1903         (merge) Removed.
1904         (merge_sort) Removed.
1905         (casefile_sort) Removed.
1906         (casefile_get_reader) Deal with new and removed members.
1907         (casefile_get_destructive_reader) New function.
1908         (reader_open_file) Make code more readable.  Create case for
1909         reader.
1910         (casereader_get_casefile) New function.
1911         (casereader_read) Deal with new and removed members.  Now returns
1912         a copy of the case, so that the caller is responsible for
1913         destroying the returned case.
1914         (casereader_read_xfer) New function.
1915         (casereader_destroy) Destroy reader's case.
1916         (test_casefile) Second arg is now a value count, all callers
1917         updated.  Now tests destructive readers too.
1918         (get_random_case) Deal with new case ADT.
1919         (write_random_case) Ditto.
1920         (read_and_verify_random_case) Ditto.
1921
1922         * crosstabs.q: Remove debug code.
1923
1924         * descript.q: (calc_descriptives) Deal with new case, casefile
1925         ADTs.
1926
1927         * dfm.c: (cmd_begin_data) There's no storage_source_class anymore.
1928
1929         * do-if.c: Remove unneeded header inclusion.
1930
1931         * expr-prs.c: Remove debug code.
1932
1933         * exprP.h: Remove debug code.
1934
1935         * flip.c: (flip_file) Use fseeko() if available.
1936
1937         * formats.c: Remove debug code.
1938
1939         * get.c: Remove debug code.
1940         (struct mtf_file) Change `input' from `union value *' to `struct
1941         ccase', all references updated.
1942
1943         * levene.c: (levene) Deal with new case, casefile ADTs.
1944
1945         * list.q: Remove debug code.
1946
1947         * loop.c: Remove debug code.
1948         
1949         * matrix-data.c: Remove debug code.
1950
1951         * means.q: Remove debug code.
1952
1953         * mis-val.c: Remove debug code.
1954
1955         * pfm-read.c: Remove debug code.
1956         (pfm_read_code) Change second arg from `union value *' to `struct
1957         ccase *', all references updated.
1958
1959         * recode.c: (string_to_long) Make first arg const.
1960         (convert_to_double) Ditto.
1961
1962         * repeat.c: Remove debug code.
1963
1964         * sample.c: Remove debug code.
1965
1966         * sfm-read.c: Remove debug code.
1967         (sfm_read_case) Change second arg from `union value *' to `struct
1968         ccase *'.
1969
1970         * sort.c: Redone in terms of casefiles.
1971         (enum sort_direction) Moved here from sort.h.
1972         (struct sort_criterion) New structure.
1973         (struct sort_criteria) New structure.
1974         (cmd_sort_cases) Rewritten.
1975         (prepare_to_sort_active_file) New function.
1976         (sort_active_file_in_place) New function.
1977         (sort_active_file_to_casefile) New function.
1978         (parse_sort) Renamed sort_parse_criteria(), rewritten & interface
1979         changed, all callers updated.
1980         (destroy_sort_cases_pgm) Renamed sort_destroy_criteria(),
1981         rewritten & interface changed, all callers updated.
1982         (sort_cases) Renamed sort_execute(), rewritten & interface
1983         changed, all callers updated.
1984         (struct internal_sort) Removed.
1985         (do_internal_sort) Rewritten, interface changed.
1986         (destroy_internal_sort) Removed.
1987         (compare_case_dblptrs) Use sort_criteria instead of sort_case_pgm.
1988         (struct initial_run) Removed; an initial run is now just a
1989         casefile.
1990         (compare_initial_runs) Rewritten.
1991         (struct external_sort) Changed almost completely.
1992         (do_external_sort) Rewritten, interface changed.
1993         (destroy_external_sort) Rewritten.
1994         [HAVE_MKDTEMP] (make_temp_dir) Removed.
1995         [!HAVE_MKDTEMP] (do_mkdir) Removed.
1996         [!HAVE_MKDTEMP] (make_temp_dir) Removed.
1997         (init_external_sort) Removed.
1998         (simulate_error) Removed.
1999         (rmdir_temp_dir) Removed.
2000         (get_temp_file_name) Removed.
2001         (open_temp_file) Removed.
2002         (close_temp_file) Removed.
2003         (remove_temp_file) Removed.
2004         (write_temp_file) Removed.
2005         (read_temp_file) Removed.
2006         (struct record_run) Change `record' from `struct case_lit *' to
2007         `struct ccase'.
2008         (struct initial_run_state) Remove `idx_to_fv', `free_list',
2009         `file_idx', `output_file'.  Add `run', casefile'.  Change
2010         `last_output' from `struct case_list *' to `struct ccase'.
2011         (write_initial_runs) Change interface, rewrite.
2012         (sort_sink_write) Renamed process_case(), changed interfaced,
2013         rewrote.
2014         (destroy_initial_run_state) Rewritten.
2015         (allocate_cases) Rewritten.
2016         (compare_record) Interface changed, rewritten.
2017         (start_run) Rewritten.
2018         (end_run) Rewritten.
2019         (output_record) Rewritten.
2020         (grab_case) Removed.
2021         (release_case) Removed.
2022         (struct merge_case) Change `cases' from double pointer to single
2023         pointer.
2024         (merge) Deal with new case and casefile ADTs.
2025         (struct run) Removed.
2026         (merge_once) Rewritten, interface changed.
2027         (fill_run_buffer) Removed.
2028         (sort_sink_make_source) Removed.
2029         (sort_sink_class) Removed.
2030         (struct sort_source_aux) Removed.
2031         (sort_source_read_helper) Removed.
2032         (sort_source_read) Removed.
2033         (read_sort_output) Removed.
2034         (read_internal_sort_output) Removed.
2035         (read_external_sort_output) Removed.
2036         (sort_source_destroy) Removed.
2037         (sort_source_class) Removed.
2038
2039         * sort.h: (struct sort_cases_pgm) Removed.
2040         (enum sort_direction) Moved to sort.c.
2041
2042         * t-test.q: (calculate) Deal with new case, casefile ADTs.
2043
2044         * tab.c: Remove debug code.
2045
2046         * var-labs.c: Remove debug code.
2047
2048         * var.h: (struct ccase) Removed.
2049         (struct case_list) Removed.
2050
2051         * vars-atr.c: (discard_variables) Use free_case_source().
2052
2053         * vars-prs.c: (parse_vs_variable) Make arg const.
2054         (parse_dict_variable) Ditto.
2055         (parse_variables) Make struct dictionary * arg const.
2056         (parse_var_set_vars) Make struct var_set * arg const.
2057         (struct var_set) Add const to some of the function pointers' args.
2058         (var_set_get_cnt) Make arg const.
2059         (var_set_get_var) Make first arg const.
2060         (var_set_lookup_var) Make first arg const.
2061         (dict_var_set_get_cnt) Make arg const.
2062         (dict_var_set_get_var) Make first arg const.
2063         (dict_var_set_lookup_var) Make first arg const.
2064         (var_set_create_from_dict) Make arg const.  Add cast to aux
2065         assignment.
2066         (struct array_var_set) Add const to var member.
2067         (array_var_set_get_cnt) Make arg const.
2068         (array_var_set_get_var) Make first arg const.
2069         (array_var_set_lookup_var) Make first arg const.
2070         (var_set_create_from_array) Make first arg const.  Insert cast.
2071
2072         * vfm.c: (struct write_case_data) Change trns_case, sink_case
2073         members from `struct ccase *' to `struct ccase'.
2074         (static var lag_queue) Change from double to single pointer.
2075         (procedure) Optimize trivial case.
2076         (internal_procedure) Deal with changed case, case_source ADTs.
2077         (create_trns_case) Changed interface, rewrote.
2078         (open_active_interface) Initialize modified lag queue.
2079         (write_case) Deal with changed case ADT.
2080         (lag_case) Deal with modified lag queue.
2081         (close_active_file) Destroy modified lag queue.
2082         Deal with changed case_source, case_sink ADTs.
2083         (destroy_storage_stream_info) Make null arg into no-op.
2084         (storage_sink_make_source) Set aux in created source.
2085         (storage_source_read) Deal with changed case, casefile ADTs.
2086         (storage_source_create) New function.
2087         (lagged_case) Rewrite.
2088         (free_case_source) New function.
2089         (free_case_sink) Rewrite.
2090         (struct split_aux_data) Changed prev_case from `struct ccase *' to
2091         `struct ccase'.
2092         (procedure_with_splits) Deal with changed prev_case.
2093         (procedure_with_splits_callback) Ditto.
2094         (multipass_split_aux_data) Changed prev_case from `struct ccase *' to
2095         `struct ccase'.
2096         (multipass_procedure_with_splits) Deal with changed prev_case.
2097         (multipass_split_callback) Ditto.
2098         
2099         
2100 Mon May 31 17:19:06 2004  Ben Pfaff  <blp@gnu.org>
2101
2102         The workspace idea didn't work out.
2103
2104         * Makefile.am: (pspp_SOURCES) Remove workspace.c, workspace.h.
2105         
2106         * workspace.c: Removed.
2107
2108         * workspace.h: Removed.
2109
2110 Sun May 30 18:35:19 2004  Ben Pfaff  <blp@gnu.org>
2111
2112         Fully implement arbitrary delimiters on DATA LIST, extending the
2113         half implementation that was already there.
2114
2115         * data-list.c: (struct data_list_pgm) Remove `delim', add
2116         `delims', `delim_cnt'.
2117         (cmd_data_list) Initialize new members.  Parse delimiters and
2118         clean up code a bit.
2119         (cut_field) Extract fields with arbitrary delimiters.  Also, fix
2120         handling of leading commas.
2121         (read_from_data_list_fixed) Expand tabs.  Adapt to new DFM
2122         interfaces.
2123         (read_from_data_list_free) Adapt to new DFM interfaces.
2124         (read_from_data_list_list) Ditto.
2125         (repeating_data_trns_proc) Ditto.
2126
2127         * dfm.c: Split up reader and writer into separate code, because
2128         they do different things.  Use struct string instead of explicit
2129         allocation code, for clarity.
2130         (enum dfm_reader_flags) New enum.
2131         (struct dfm_fhuser_ext) Removed.
2132         (struct dfm_reader_ext) New.
2133         (get_reader) New function, used by just about all the reader
2134         functions.
2135         (dfm_close) Removed.
2136         (close_reader) New function.
2137         (dfm_open_for_reading) Rewrite initialization of dfm_fhuser_ext.
2138         (dfm_open_for_writing) Ditto.
2139         (macro force_line_buffer_expansion) Removed.
2140         (count_tabs) Removed.
2141         (tabs_to_spaces) Removed.
2142         (read_record) Deal with new dfm_reader_ext.  Use struct string
2143         functions.  Don't convert tabs to spaces.
2144         (dfm_eof) New function.
2145         (dfm_get_record) Changed interface, rewrote.
2146         (dfm_expand_tabs) New function.
2147         (dfm_fwd_record) Renamed dfm_forward_record(), updated to new
2148         dfm_reader_ext, rewritten.
2149         (dfm_bkwd_record) Renamed dfm_reread_record(), updated to new
2150         dfm_reader_ext, rewritten.
2151         (dfm_set_record) Removed in favor of dfm_forward_columns().
2152         (dfm_forward_columns) New function.
2153         (dfm_get_cur_col) Renamed dfm_column_start, updated to new
2154         dfm_reader_ext, rewritten.
2155         (static var dfm_r_class) Use close_reader for the destructor.
2156         (struct dfm_writer_ext) New.
2157         (dfm_put_record) Updated to new dfm_writer_ext, rewritten.  Uses
2158         bounce buffer now instead of local allocation.
2159         (close_writer) New function.
2160         (static var dfm_writer_ext) Use close_writer for destructor.
2161         (cmd_begin_data) Adapt to new dfm_reader_ext.
2162
2163         * file-handle.q: Add support for per-file tab width.
2164         (struct private_file_handle) Add tab_width member.
2165         (q2c specifications) Add tabwidth subcommand.
2166         (cmd_file_handle) Put parsed tab width into private_file_handle.
2167         (create_file_handle) Set default tab width.
2168         (handle_get_tab_width) New function.
2169
2170         * file-type.c: (file_type_source_read) Adapt to new DFM interface.
2171
2172         * inpt-pgm.c: (reread_trns_proc) Ditto.
2173
2174         * matrix-data.c: (context) Ditto.
2175         (another_token) Ditto.
2176         (mget_token) Ditto.
2177         (force_eol) Ditto.
2178
2179 Sun May 30 18:33:59 2004  Ben Pfaff  <blp@gnu.org>
2180
2181         * casefile.c: (casefile_destroy) Fix memory leak by freeing
2182         cf->filename.
2183         (casereader_destroy) Don't close file descriptor -1.
2184
2185         * recode.c: (cmd_recode) Fix memory leak.
2186
2187         * set.q: (q2c specifications) Fix typo in user message.
2188
2189         * str.c: (st_bare_pad_len_copy) Change memcpy to memmove to avoid
2190         undefined behavior for overlapping arguments.
2191
2192 Sun May 30 18:31:48 2004  Ben Pfaff  <blp@gnu.org>
2193
2194         * casefile.c: valgrind doesn't implement posix_fadvise() yet, so
2195         don't call it when we're running under valgrind.
2196         (call_posix_fadvise) New function.
2197         (casefile_to_disk) Use call_posix_fadvise().
2198         (reader_open_file) Ditto.
2199         
2200 Sun May 30 18:20:12 2004  Ben Pfaff  <blp@gnu.org>
2201
2202         Update our string ADTs, struct string and struct len_string.  Get
2203         rid of pool support, which was largely unused.  Rename lots of
2204         functions to have more obvious or consistent names.
2205         
2206         * ascii.c: Get rid of ascii_pool.  It was only used for string
2207         allocations.
2208         (ascii_open_global) Don't create ascii_pool.
2209         (ascii_close_driver) Don't destroy ascii_pool.
2210         (ascii_postopen_driver) Don't use pool.
2211         (ascii_close_driver) Destroy strings manually.
2212
2213         * str.c: (ds_create) Remove pool argument, all references updated.
2214         (ds_init) Ditto.
2215         (ds_replace) Remove pool support, make more efficient when we
2216         don't need to reallocate.
2217         (ds_destroy) Remove pool support.
2218         (ds_rpad) New function.
2219         (ds_size) Renamed ds_capacity(), all references updated.
2220         (ds_value) Renamed ds_c_str(), all references updated.
2221         (ds_concat) Renamed ds_puts(), all references updated.
2222         (ds_concat_buffer) Renamed ds_concat(), all references updated.
2223         (ds_putchar) Renamed ds_putc(), all references updated.
2224         (ds_getline) Renamed ds_gets(), all references updated.
2225         (ls_create) Remove pool argument, all references updated.
2226         (ls_create_buffer) Ditto.
2227         (ls_destroy) Removed pool support.
2228         (ls_value) Renamed ls_c_str(), all references updated.
2229
2230         * str.h: (ls_length) [__GNUC__] Add inline version.
2231         (ls_c_str) [__GNUC__] Add inline version.
2232         (ls_end) [__GNUC__] Add inline version.
2233         (struct string) Remove pool member.  Rename `size' to `capacity',
2234         all references updated.
2235
2236         * tab.c: (text_format) Instead of using pool argument to
2237         ls_create_buffer(), call pool_register() on allocated data.
2238
2239 Mon Apr 26 22:40:07 2004  Ben Pfaff  <blp@gnu.org>
2240
2241         We're abusing the current ASCII driver by telling it to allocate a
2242         9999-line, 9999-character page in the tests.  This causes some
2243         systems to curl up and die because it allocates 20 MB of
2244         contiguous RAM.  This change alleviates at least part of the
2245         problem.  It is mostly a stop-gap until the new output system is
2246         ready.
2247         
2248         * ascii.c: (struct line) New structure.
2249         (struct ascii_driver_ext) Remove `page', `page_size', `line_len',
2250         `line_len_size', `n_output' members.  Add `lines', `lines_cap'.
2251         (ascii_preopen_driver) Initialize new members, not old ones.
2252         (ascii_close_driver) Destroy new members, not old ones.
2253         (ascii_open_page) Allocate new members, not old ones.
2254         (expand_line) Allocate room in line.
2255         (draw_line) Use new members.
2256         (ascii_line_horz) Ditto.
2257         (ascii_line_vert) Ditto.
2258         (ascii_line_intersection) Ditto.
2259         (text_draw) Ditto.
2260         (output_lines) Ditto.
2261         (ascii_close_page) Ditto.
2262
2263 Sun Apr 25 23:40:15 2004  Ben Pfaff  <blp@gnu.org>
2264
2265         * matrix.c: Dead code.  Removed.
2266
2267         * matrix.h: Dead code.  Removed.
2268
2269 Fri Apr 16 23:59:51 2004  Ben Pfaff  <blp@gnu.org>
2270
2271         Contrary to what I'd always understood, there is an efficient
2272         algorithm for deletion from a hash table populated via linear
2273         probing.  This change implements it.
2274         
2275         * hash.c: (hsh_rehash) Probe in increasing order.
2276         (hsh_probe) Ditto.
2277         (locate_matching_entry) Ditto.
2278         (hsh_delete) Use Knuth's Algorithm 6.4R for deletion.
2279
2280 Tue Apr 13 19:24:15 2004  Ben Pfaff  <blp@gnu.org>
2281
2282         * moments.c (calc_moments): Adjust calculation of kurtosis to
2283         avoid subtracting huge numbers from huge numbers, on Michael
2284         Kiefte's advice.
2285
2286 Sun Apr 11 14:22:12 2004  Ben Pfaff  <blp@gnu.org>
2287
2288         Rework moments routines for improved numerical stability based on
2289         Michael Kiefte's advice.  Any bugs or remaining numerical problems
2290         are still mine though.
2291
2292         There is now a struct moments1 for use with one-pass moments.  It
2293         uses a provisional means algorithm as an attempt to improve
2294         accuracy of higher moments.  The older struct moments now only
2295         handles two-pass moments.
2296         
2297         * aggregate.c: Use moments1 instead moments.
2298
2299         * descript.c: Revert previous change, which is no longer needed
2300         due to the moments revision.
2301
2302         * moments.c: (calc_moments) New function for calculating variance,
2303         skewness, kurtosis.
2304         (moments_pass_one) Only accumulate weights bigger than zero.
2305         (moments_calculate) Allow calculating the mean on pass one, others
2306         require pass two.  Implement in terms of calc_moments().
2307         (struct moments1) New structure.
2308         (init_moments1) New function.
2309         (moments1_clear) Ditto.
2310         (moments1_create) Ditto.
2311         (moments1_add) Ditto.
2312         (moments1_calculate) Ditto.
2313         (moments1_destroy) Ditto.
2314         (cmd_debug_moments) Deal with `struct moments' or `struct
2315         moments1' as requested by user.
2316
2317 Sun Apr 11 14:21:55 2004  Ben Pfaff  <blp@gnu.org>
2318
2319         * Makefile.am (pspp_SOURCES): Remove debug.c.
2320
2321         * debug.c: Removed.  It was empty anyway.
2322
2323 Fri Apr  9 20:04:49 2004  Ben Pfaff  <blp@gnu.org>
2324
2325         * descript.c (calc_descriptives): Fix assert failure when only
2326         MOMENT_MEAN is needed.
2327
2328 2004-04-09  Michael Kiefte  <mkiefte@dal.ca>
2329
2330         * descript.c: 
2331
2332         fixed problem with parsing in match_statistic() causing
2333         "DESCRIPTIVE STAT=MEAN." to barf.
2334
2335         "MEAN" is now default if "SORT" given without specification.
2336
2337         Fixed infinite loop with "DESCRIPT GIBBERISH=ALL."  Parsing is
2338         generally less forgiving of syntax errors: better to have it do
2339         nothing and type it in again then to not know what it actually did
2340         instead.  
2341
2342         z-score transformation now checks score for user-missing values
2343         and checks std_dev for SYSMIS.
2344
2345 2004-04-06  Michael Kiefte  <mkiefte@dal.ca>
2346
2347         * aggregate.c, crosstabs.q, descript.c, dictionary.c, frequencies.q, levene.c, t-test.q, var.h: 
2348         Changed dict_get_case_weight() to accept an additional int * flag
2349         to complain about system-missing, user-missing, zero, or negative
2350         weights and updated existing functions to pass int * to
2351         dict_get_case_weight().
2352
2353 2004-04-05  jmd  <jmd@gnu.org>
2354
2355         * main.c: Fixed configuration problems with gsl
2356
2357         * t-test.q: Fixed some problems encountered when compiling under Cygwin
2358
2359 2004-04-03  blp  <blp@gnu.org>
2360
2361         * lexer.c, ChangeLog:
2362         Fix infinite loop on comment at end of file, add test.
2363
2364 2004-04-03  jmd  <jmd@gnu.org>
2365
2366         * 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:
2367         Fixed the calculation of percentiles and added --syntax and --algorithm options
2368
2369 Sat Apr  3 11:43:37 2004  Ben Pfaff  <blp@gnu.org>
2370
2371         * lexer.c: (lex_skip_comment) Handle end-of-file correctly (I
2372         hope).
2373
2374 Sat Apr  3 15:00:18 WST 2004 John Darrington <john@darrington.wattle.id.au>
2375
2376         * frequencies.q:  Fixed the calculation of percentiles
2377
2378         * Makefile.am:  Added the --ansi flag and dealt with the
2379         consequences.  Added some entries to PSPP_sources so that
2380         make distcheck would pass
2381
2382         * cmdline.c:   Added the --syntax and --algorithm options
2383
2384         * q2c.c:  Added an implicit /ALGORITHM subcommand to everything.
2385
2386 Fri Apr  2 11:25:22 WAST 2004 John Darrington <john@darrington.wattle.id.au>
2387
2388         * t-test.q, levene.c, levene.h  Converted t-test (incl levene) to 
2389         use the new multipass_split_... mechanism.
2390
2391 Wed Mar 31 22:36:22 2004  Ben Pfaff  <blp@gnu.org>
2392
2393         * frequencies.q: (calc_stats) Use moments data structure and
2394         calc_seskew(), calc_sekurt() functions.
2395
2396         * set.q main.c settings.h Added support for --syntax and --algorithm 
2397         options
2398
2399 Tue Mar 30 22:04:19 2004  Ben Pfaff  <blp@gnu.org>
2400
2401         * vfm.c: Had to get last call to multipass_split_output() inside
2402         open_active_file()/close_active_file() pairing, so introduce new
2403         function.
2404         (internal_procedure) Move procedure() code here, except for calls
2405         to open_active_file() and close_active_file().
2406         (procedure) Wrap open_active_file() and close_active_file() around
2407         internal_procedure().
2408         (multipass_procedure_with_splits) Wrap open_active_file() and
2409         close_active_file() around internal_procedure().
2410
2411 Tue Mar 30 22:01:57 2004  Ben Pfaff  <blp@gnu.org>
2412
2413         * descript.c: (cmd_descriptives) Free `vars' to avoid memory leak.
2414
2415 Mon Mar 29 16:26:40 2004  Ben Pfaff  <blp@gnu.org>
2416
2417         * debug.c: Removed.  Moved cmd_debug_evaluate() into expr-evl.c.
2418
2419         * expr-evl.c: (cmd_debug_evaluate) Moved here from debug.c.
2420
2421 Mon Mar 29 16:03:08 2004  Ben Pfaff  <blp@gnu.org>
2422
2423         * algorithm.c: By default turn off some of the more expensive
2424         assertions.
2425         (expensive_assert) New macro which expands to assert if
2426         EXTRA_CHECKS is defined, to nothing otherwise.
2427         (unique) Use expensive_assert().
2428         (binary_search) Ditto.
2429         (push_heap) Ditto.
2430         (pop_heap) Ditto.
2431         (make_heap) Ditto.
2432         (sort_heap) Ditto.
2433
2434         * command.c: (conflicting_3char_prefixes) Words that are the same
2435         don't cause conflicts when they are abbreviated to the first three
2436         letters.
2437
2438         * expr-evl.c: (CONCAT_func) Fix memory leak by incrementing struct
2439         nonterm_node's n earlier.
2440         (generic_str_func) Ditto.
2441         
2442 Mon Mar 29 15:32:17 2004  Ben Pfaff  <blp@gnu.org>
2443
2444         Add support for multipass procedures.  Rewrite DESCRIPTIVES to
2445         test multipass support, take advantage of new moments
2446         calculation, and to not be such crappy code.  Get rid of q2c
2447         processing for DESCRIPTIVES.
2448
2449         * vfm.c: (struct multipass_split_aux_data) New structure.
2450         (multipass_procedure_with_splits) New function.
2451         (multipass_split_callback) New function.
2452         (multipass_split_output) New function.
2453         * descript.q: Removed.
2454
2455         * descript.c: New file.
2456
2457         * var.h: Removed descriptives enums.
2458         (struct descriptives_proc) Removed.
2459         (struct variable) Removed p.dsc.
2460
2461         * Makefile.am: (q_sources_c) Remove descript.c.
2462         (q_sources_q) Removed descript.q.
2463         
2464 Mon Mar 29 15:31:55 2004  Ben Pfaff  <blp@gnu.org>
2465
2466         New manager for keeping track of used workspace.
2467         
2468         * workspace.c: New file.
2469
2470         * workspace.h: New file.
2471
2472         * Makefile.am: (pspp_SOURCES) Add workspace.c, workspace.h.
2473
2474         * sort.c: (do_internal_sort) Use workspace_malloc().
2475         (destroy_internal_sort) Use workspace_free().
2476
2477 Mon Mar 29 15:31:08 2004  Ben Pfaff  <blp@gnu.org>
2478
2479         New `struct casefile' for managing sets of cases.
2480
2481         * casefile.c: New file.
2482
2483         * casefile.h: New file.
2484
2485         * command.def: Add DEBUG CASEFILE command.
2486
2487         * Makefile.am: (pspp_SOURCES) Add casefile.c, casefile.h.
2488
2489         * sort.c: (sort_cases) Move logic for sending storage file to disk
2490         into do_external_sort().
2491         (struct internal_sort) Use an array of ccase pointers instead of a
2492         case_list.
2493         (do_internal_sort) Rewrite to handle casefiles.
2494         (compare_case_list) Removed.
2495         (compare_cases) New function.
2496         (compare_case_dblptrs) New function.
2497         (read_internal_sort_output) Deal with new struct internal_sort.
2498
2499         * vfm.c: (static var workspace_overflow) Removed.
2500         (struct storage_stream_info) Removed all the members.  Added
2501         struct casefile * member.
2502         (storage_sink_open) Use casefile.
2503         (open_storage_file) Removed.
2504         (write_storage_file) Removed.
2505         (storage_to_disk) Removed.
2506         (destroy_storage_stream_info) Use casefile.
2507         (storage_sink_write) Use casefile.
2508         (storage_sink_make_source) Use casefile.
2509         (storage_source_count) Use casefile.
2510         (storage_source_read) Use casefile.
2511         (storage_source_on_disk) Removed.
2512         (storage_source_get_cases) Removed.
2513         (storage_source_set_cases) Removed.
2514         (storage_source_get_casefile) New function.
2515         
2516 Mon Mar 29 15:30:09 2004  Ben Pfaff  <blp@gnu.org>
2517
2518         New `struct moments' for calculating moments.
2519
2520         * stats.c: Removed.
2521
2522         * stats.h: Removed.
2523
2524         * moments.c: New file.
2525
2526         * moments.h: New file.
2527
2528         * command.def: Add DEBUG MOMENTS command.
2529
2530         * Makefile.am: (pspp_SOURCES) Add moments.c, moments.h.  Remove
2531         stats.c, stats.h.
2532
2533         * aggregate.c: Modify AGGREGATE to use the new moments
2534         calculation, even if not in such a great way.
2535         (struct agr_var) Add `moments' member.
2536         (parse_aggregate_functions) Set `moments' member to null.
2537         (agr_destroy) Destroy `moments' member.
2538         (accumulate_aggregate_info) Use `moments' for standard deviation.
2539         (dump_aggregate_info) Ditto.
2540         (initialize_aggregate_info) Create or clear `moments'.
2541
2542         * misc.h: Add pow2(), pow3(), pow4() functions in place of sqr(),
2543         cube(), pow4() that were in stats.h.  All references updated.
2544
2545         * crosstabs.q: stats.h had chi-square significance functions.  Use
2546         GSL instead.
2547         (display_chisq) Use gsl_cdf_chisq_Q() instead of chisq_sig().
2548
2549         * expr-evl.c: (expr_evaluate) Use moments_of_values() for
2550         OP_CFVAR, OP_MEAN, OP_SD, OP_VARIANCE.
2551                 
2552 Fri Mar 26 14:21:23 2004  Ben Pfaff  <blp@gnu.org>
2553
2554         * dictionary.c: (dict_compact_values) Compacted values need to
2555         start off from 0.
2556
2557 Fri Mar 26 00:54:57 2004  Ben Pfaff  <blp@gnu.org>
2558
2559         * var-labs.c: (cmd_variable_labels) For compatibility, don't allow
2560         `/' at start.  Check return value of parse_variables() for error
2561         return.
2562
2563 Fri Mar 26 00:19:27 2004  Ben Pfaff  <blp@gnu.org>
2564
2565         Revamp expressions: make the code a little nicer, and fix bugs
2566         found in testing.
2567         
2568         * expr-evl.c: (expr_evaluate) Make expression argument const.
2569         Support OP_ADD, OP_SUB, OP_MUL, OP_DIV instead of OP_PLUS, OP_MUL.
2570         OP_POW is missing for arg 2 <= 0.  OP_LOG is natural log, not
2571         base-10 log.  Fix OP_ANY, OP_ANY_STRING, OP_RANGE, OP_RANGE_STRING
2572         off-by-ones.  Add OP_MAX_STRING, OP_MIN_STRING.  Fix OP_TIME_HMS,
2573         OP_DATE_WKYR boundary conditions.  Add OP_CTIME_DAYS,
2574         OP_CTIME_HOURS, OP_CTIME_MINUTES, OP_CTIME_DAYS, OP_CTIME_SECONDS.
2575         Support OP_INDEX_2, OP_INDEX_3, OP_RINDEX_2, OP_RINDEX_3 instead
2576         of OP_INDEX, OP_INDEX_OPT, OP_RINDEX, OP_RINDEX_OPT.  Merge
2577         OP_LPAD_OPT into OP_LPAD, OP_RPAD_OPT into OP_RPAD, OP_LTRIM_OPT
2578         into OP_LTRIM, OP_RTRIM_OPT into OP_RTRIM, OP_NUMBER_OPT into
2579         OP_NUMBER.  Fix OP_RTRIM fragility.  Support OP_SUBSTR_2,
2580         OP_SUBSTR_3 instead of OP_SUBSTR, OP_SUBSTR_OPT.  Remove OP_INV.
2581         Simplify OP_SYSMIS.  Remove OP_STR_MIS.
2582
2583         * expr-opt.c: (optimize_expression) Rewrite.
2584         (macro n0) Removed.
2585         (macro n1) Removed.
2586         (macro n2) Removed.
2587         (macro s0) Removed.
2588         (macro s0l) Removed.
2589         (macro s1) Removed.
2590         (macro s1l) Removed.
2591         (macro s2) Removed.
2592         (macro s2l) Removed.
2593         (macro s) Removed.
2594         (macro sl) Removed.
2595         (eq_num_con) New function.
2596         (optimize_tree) New function.
2597         (macro rnc) Removed.
2598         (macro frnc) Removed.
2599         (str_search) Add const to string params.
2600         (str_rsearch) Ditto.
2601         (evaluate_tree_no_missing) Renamed from evaluate_tree.  Add num[],
2602         str[], str_len[] locals to substitute for most of removed macros.
2603         Support OP_ADD, OP_SUB, OP_MUL, OP_DIV instead of OP_PLUS, OP_MUL.
2604         Removed support for missing values because we're never called with
2605         missing values.  Use set_number() or set_number_errno() instead of
2606         rnc or frnc.  Removed any stuff that caused trouble in testing.
2607         We can re-add it later if it really slows anything.  Fix some
2608         random problems.
2609         (evaluate_tree_with_missing) Not yet supported.  To be added later
2610         if it's important.
2611         (repl_num_con) Removed.
2612         (collapse_node) New function.
2613         (force_repl_num_con) Removed.
2614         (set_number) New function.
2615         (set_number_errno) New function.
2616         (repl_str_con) Removed.
2617         (set_string) New function.
2618         (yrmoda) Tighten boundary conditions.  Adopt 2030 cut-off for
2619         2-digit years.
2620         (dump_node) No special case for OP_AND, OP_OR.
2621
2622         * expr-prs.c: (expr_prs) Honor EXPR_NO_OPTIMIZE bit.  Rewrite.
2623         (expr_get_type) New function.
2624         (type_check) Rewrite.
2625         (type_coercion) New function.
2626         (struct operator) New structure.
2627         (match_operator New function.
2628         (parse_binary_operators) New function.
2629         (parse_inverting_unary_operator) New function.
2630         (parse_or) Rewritten.
2631         (parse_and) Rewritten.
2632         (parse_not) Rewritten.
2633         (parse_rel) Rewritten.
2634         (parse_add) Rewritten.
2635         (parse_mul) Rewritten.
2636         (parse_neg) Rewritten.
2637         (parse_exp) Rewritten.
2638         (parse_sysvar) Add $TRUE, $FALSE system variables.
2639         Get $LENGTH, $WIDTH from get_viewlength(), get_viewwidth().
2640         (parse_primary) Use allocate_var_node(), allocate_num_con(),
2641         allocate_str_con().
2642         (struct function) Remove desc, change `func' prototype.
2643         (unary_func) Remove special cases.
2644         (MISSING_func) Reduce to unary_func() that just returns a boolean.
2645         (SYSMIS_func) Handle SYSMIS((x)) like SYSMIS(x).
2646         (VALUE_func) Use allocate_var_node().
2647         (nary_num_func) Allow MIN and MAX for strings.
2648         Use allocate_var_node().  Properly clean up.
2649         Fix return type.
2650         (generic_str_func) Use local table instead of removed `desc'
2651         member.  Mostly rewrite.
2652         (get_num_args) Revise error message.
2653         (parse_function) Return EXPR_ERROR, not 0 on error.
2654         (macro op) Removed.
2655         (macro varies) Removed.
2656         (ops[]) Use expr.def.
2657         (free_node) Do nothing if node is null.
2658         (allocate_num_con) New function.
2659         (allocate_str_con) New function.
2660         (allocate_var_node) New function.
2661         (allocate_binary_nonterminal) New function.
2662         (append_nonterminal_arg) Removed.
2663         (static var func_tab[]) Revised.
2664         (expr_debug_print_postfix) Make parameter const.
2665         Use printf() instead of debug_printf().
2666
2667         * expr.def: New file.
2668         
2669         * expr.h: Change PXP_* to EXPR_*, all references updated.  Also
2670         use named enum instead of unnamed, all references updated.  Add
2671         EXPR_ANY, EXPR_NO_OPTIMIZE.
2672
2673         * exprP.h: Remove EX_*.  Add DEFINE_OPERATOR.  Use expr.def
2674         instead of defining OP_* directly.
2675         (macro IS_TERMINAL) New macro.
2676         (macro IS_NONTERMINAL) New macro.
2677         (enum OP_NO_FLAGS) New.
2678         
2679 Fri Mar 26 00:18:01 2004  Ben Pfaff  <blp@gnu.org>
2680
2681         * error.c: (err_assert_fail) msg variable needs to be non-const.
2682
2683 Fri Mar 26 00:17:24 2004  Ben Pfaff  <blp@gnu.org>
2684
2685         * debug.c: (cmd_debug_evaluate) Rewrite.
2686
2687 Fri Mar 26 00:15:13 2004  Ben Pfaff  <blp@gnu.org>
2688
2689         Fix some CROSSTABS bit rot stupidity.
2690
2691         * crosstabs.q: Reorder the CELLS subcommands for compatibility.
2692         (internal_cmd_crosstabs) Initializes cells[] correctly.
2693         (float_M_suffix) Rename format_cell_entry(), change prototype,
2694         rewrite.
2695         (display_crosstabulation) Fix cell formatting.
2696
2697 Fri Mar 26 00:14:09 2004  Ben Pfaff  <blp@gnu.org>
2698
2699         Make lex_rest_of_line(), lex_entire_end() not discard lines.  Have
2700         to call lex_discard_line() to do that.
2701
2702         * command.c: (run_command) Call lex_discard_line() after
2703         lex_rest_of_line().
2704
2705         * lexer.c: (lex_entire_end) Change behavior.
2706         (lex_rest_of_line) Change behavior.  Return const char *.
2707         (lex_discard_line) Don't clear getl_buf, don't emit message.
2708
2709         * main.c: (handle_error) Emit message here.
2710
2711         * repeat.c: (internal_cmd_do_repeat) Use lex_discard_line()
2712         instead of lex_entire_line().
2713
2714         * str.c: (mm_find_reverse) Make length params size_t.  Rewrite.
2715
2716         * title.c: (get_title) Call lex_discard_line() after
2717         lex_rest_of_line().
2718         (cmd_file_label) Ditto.
2719         (cmd_document) Deal with const char * return value.
2720
2721 Fri Mar 26 00:10:16 2004  Ben Pfaff  <blp@gnu.org>
2722
2723         Removed REMARK command.
2724
2725         * command.c: (extract_prefix) Removed.
2726         (output_line) Removed.
2727         (cmd_remark) Removed.
2728
2729         * command.def: Remove REMARK.
2730
2731 Fri Mar 26 00:08:38 2004  Ben Pfaff  <blp@gnu.org>
2732
2733         Added abort() after lots of assert(0) invocations to avoid some
2734         compiler warnings.  We really need a NOT_REACHED macro.
2735
2736 Tue Mar 23 08:00:42 WAST 2004 John Darrington <john@darrington.wattle.id.au>
2737
2738         * sort.c: Added missing call to temp_file_close.  Changed error 
2739         messages to warnings.
2740
2741         * set.q: Improved setting of set_view{length,width} to be more tolerant
2742         of buggy OSes.
2743
2744 Sun Mar 21 10:11:14 WST 2004 John Darrington <john@darrington.wattle.id.au>
2745
2746         * val-labs.c: Fixed a bug where PSPP would crash, if VALUE LABELS was
2747         used with incorrect syntax.
2748
2749         * error.c, error.h et al:  Overridden definition of assert for a
2750         custom one.
2751
2752         * test-q.c: Fixed a buglet where it would crash if no /VARIABLES
2753         subcommand was given when it ought to have been.
2754
2755 Sat Mar 20 22:19:08 2004  Ben Pfaff  <blp@gnu.org>
2756
2757         * tab.c: (tab_vline) Fix assertions to respect row_ofs and
2758         col_ofs.
2759         (tab_hline) Ditto.
2760         (tab_box) Ditto.
2761         (tab_joint_text) Ditto.
2762
2763 Sat Mar 20 17:57:23 2004  Ben Pfaff  <blp@gnu.org>
2764
2765         * levene.c: Add #include.
2766
2767         * set.q: (set_viewport) Add `int' argument to make its prototype
2768         correct for signal().
2769
2770 Sat Mar 20 15:35:17 2004  Ben Pfaff  <blp@gnu.org>
2771
2772         * expr-evl.c: (expr_evaluate) Assert that `c' is nonzero before
2773         using it.
2774
2775 Sat Mar 20 15:18:16 2004  Ben Pfaff  <blp@gnu.org>
2776
2777         Changed DFM from open-at-first-access to explicit-open.  Before,
2778         calling dfm_get_record() or dfm_put_record() would automatically
2779         open the file.  Now, you have to call dfm_open_for_reading() or
2780         dfm_open_for_writing() explicitly.  This makes it possible to
2781         check permissions, file existence, etc. earlier.
2782
2783         Also made struct file_handle more opaque, and clean up in general.
2784
2785         * data-list.c: (cmd_data_list) Open handle for reading.
2786
2787         * dfm.c: (struct dfm_fhuser_ext) Add `where', `saw_begin_data'
2788         members.
2789         (open_file_r) Renamed dfm_open_for_reading(), rewrote.
2790         (open_file_w) Renamed dfm_open_for_writing(), rewrote.
2791         (open_inline_file) Removed.
2792         (read_record) For inline_file, if we haven't seen BEGIN DATA, read
2793         it.  Deal with line_number in extension record instead of file
2794         handle.
2795         (dfm_get_record) Rewrote.
2796         (dfm_put_record) Rewrote.
2797         (dfm_push) Assert file is open and one of ours.  Deal with
2798         line_number in extension record instead of file handle.
2799         (dfm_pop) Assert file is open and one of ours.  Deal with
2800         line_number in extension record instead of file handle.
2801         (cmd_begin_data) Use dfm_open_for_reading().  Mark that we saw
2802         BEGIN DATA.     
2803
2804         * file-handle.h: (enum constants RH_RF_*) Removed.
2805         (enum constants FH_MD_*) Removed.
2806         (struct file_handle) Removed `name', `norm_fn', `fn', `where',
2807         `recform', `lrecl', `mode' members.  Public references to
2808         `recform' changed to use handle_get_mode(), references to `lrecl'
2809         changed to use handle_get_record_width().  Added `private' member.
2810         (enum file_handle_mode) New.
2811
2812         * file-handle.q: (struct private_file_handle) New structure.
2813         (struct file_handle_list) New structure.
2814         (static var files) New.
2815         (static var file_handles) Removed.
2816         (init_file_handle) Removed.
2817         (create_file_handle) Removed.
2818         (get_handle_with_name) New function.
2819         (get_handle_for_filename) New function.
2820         (cmd_file_handle) Rewritten.
2821         (hash_file_handle) Removed.
2822         (cmp_file_handle) Removed.
2823         (fh_init_files) Rewritten.
2824         (fh_parse_file_handle) Rewritten.  Allows identifiers as
2825         filenames.
2826         (fh_get_handle_by_name) Renamed handle_get_name(), all references
2827         updated.  Rewritten.
2828         (fh_get_handle_by_filename) Renamed handle_get_filename(), all
2829         references updated.  Rewritten.
2830         (fh_record_width) Renamed handle_get_record_width(), all
2831         references updated.  Rewritten.
2832         (handle_get_mode) New function.
2833
2834         * file-type.c: (cmd_file_type) Open handle for reading.
2835
2836         * filename.c: [unix] (struct file_identity) New structure.
2837         [unix] (fn_get_identity) New function.
2838         [unix] (fn_free_identity) New function.
2839         [unix] (fn_compare_file_identities) New function.
2840         [!unix] (struct file_identity) New structure.
2841         [!unix] (fn_get_identity) New function.
2842         [!unix] (fn_free_identity) New function.
2843         [!unix] (fn_compare_file_identities) New function.
2844
2845         * lexer.c: (static var put) Renamed put_token, all references
2846         updated.
2847         (static var put_tokstr) New.
2848         (static var put_tokval) New.
2849         (lex_init) Initialize put_tokstr().
2850         (restore_token) New function.
2851         (save_token) New function.
2852         (lex_get) Use restore_token().
2853         (lex_put_back) Use save_token().
2854         (lex_put_back_id) New function.
2855         (lex_put_forward) Removed.
2856         (lex_preprocess_line) Set put_token instead of using
2857         lex_put_forward().
2858         (lex_negative_to_dash) Use save_token(), set put_token directly.
2859         (dump_token) Use stderr instead of stdout.
2860
2861         * main.c: (main) Remove call to cmd_init().
2862         
2863         * matrix-data.c: (cmd_matrix_data) Open file for reading.
2864
2865         * pfm-read.c: Use handle_get_filename() instead of trying to use
2866         h->fn directly, all over.
2867
2868         * pfm-write.c: Ditto.
2869
2870         * print.c: (internal_cmd_print) Open handle for writing.
2871         (dump_table) Use handle_get_filename().
2872         (print_trns_proc) Use handle_get_mode().
2873         (cmd_print_space) Use fh_parse_file_handle().
2874         Open handle for writing.
2875         [0] (debug_print) Removed.
2876
2877         * sfm-read.c: Use handle_get_filename() instead of trying to use
2878         h->fn directly, all over.
2879
2880         * sfm-write.c: Ditto.
2881
2882 Sat Mar 20 14:35:48 2004  Ben Pfaff  <blp@gnu.org>
2883
2884         Fix memory leaks.
2885         
2886         * autorecode.c: (arc_free) Free arc->src_values.
2887
2888         * error.c: (msg) Free buf.
2889
2890         * val-labs.c: (do_value_labels) Always free vars.
2891
2892         * vfm.c: (close_active_file) If sink has no make_source then call
2893         its destroy function.
2894
2895 Sat Mar 20 14:00:24 2004  Ben Pfaff  <blp@gnu.org>
2896
2897         Fixed cmd_parse() so that it always skips past a full command
2898         name.  A few special commands for which this would be bad get
2899         special treatment.  This lets us drop code for skipping past the
2900         end of a command name in most cmd_*() functions.  It's not worth
2901         listing all the commands affected.
2902
2903         * command.c: (struct command) Remove `cmd' member, replace by
2904         `name' member, all references updated.  Remove `word', `next',
2905         `skip_entire_name' members.
2906         (macro DEFCMD) Deal with revised `struct command'.
2907         (macro UNIMPL) Ditto.
2908         (macro SPCCMD) New macro for commands whose last word shouldn't be
2909         skipped.
2910         (static array cmd_table[]) Make const, rename `commands', remove
2911         sentinel element.
2912         (macro COMMAND_CNT) New macro.
2913         (split_words) Removed.
2914         (cmd_init) Removed.
2915         (FILE_TYPE_okay) Make parameter const.
2916         (cmd_parse) Improve error messages.
2917         (match_strings) New function.
2918         (next_word) New function.
2919         (enum command_match) New enum.
2920         (conflicting_3char_prefixes) New function.
2921         (conflicting_3char_prefix_command) New function.
2922         (cmd_match_words) New function.
2923         (count_matching_commands) New function.
2924         (get_command_name) New function.
2925         (free_words) New function.
2926         (unknown_command_error) New function.
2927         (figure_out_command) Renamed parse_command_name(), rewritten.
2928
2929         * command.def: Removed @ command.  Marked BEGIN DATA, DOCUMENT,
2930         FILE LABEL, REMARK, SUBTITLE, TITLE as special.  Renamed EVALUATE
2931         to DEBUG EVALUATE.  Added N alias for N OF CASES, SORT alias for
2932         SORT CASES.
2933
2934         * command.h: (macro SPCCMD) New.
2935
2936         * include.c: (cmd_include_at) Removed.
2937         (cmd_include) Allow identifier to be used as filename.
2938
2939         * inpt-pgm.c: (cmd_reread) Use fh_parse_file_handle().
2940
2941         * t-test.q: (cmd_t_test) Command name is now parsed for us.
2942         
2943
2944 Sat Mar 20 13:56:00 2004  Ben Pfaff  <blp@gnu.org>
2945
2946         Start work on better test framework.
2947         
2948         * Makefile.am: (pspp_sources) Add debug.c.
2949         
2950         * debug.c: New file.
2951
2952         * compute.c: (cmd_evaluate) Moved to debug.c, renamed
2953         cmd_debug_evaluate().
2954
2955         * expr-prs.c: (expr_parse) Remove PXP_DUMP support.
2956
2957         * expr.h: (enum constant PXP_DUMP) Removed.
2958
2959 Sat Mar 20 00:05:42 WST 2004 John Darrington <john@darrington.wattle.id.au>
2960
2961         * set.q:  Implemented the SHOW command, and synced it to the existing 
2962         SET cmd.
2963
2964         Added a handler for SIGWINCH so that viewlength and viewwidth follow
2965         changes as the window size is changed.
2966
2967         Added fallback to set viewlength and viewwidth from LINES and COLUMS
2968         environment variables if other methods are not available.
2969
2970         glob.c: Removed a lot of global variables from glob.c and encapsulated 
2971         them in set.q
2972
2973         random.c: Tidied up the way the random seed is set.
2974
2975         str.c: Added a ds_vprintf function.
2976
2977         error.c: Extended dump_message so that messages are always broken at
2978         '\n' characters.
2979         
2980 Thu Mar 18 11:07:14 2004  Ben Pfaff  <blp@gnu.org>
2981
2982         * pfm-write.c: (bufwrite) Write out the correct element for string
2983         variables.  From Andreas Streichardt <streichardt@globalpark.de>.
2984
2985 Mon Mar 15 20:48:03 2004  Ben Pfaff  <blp@gnu.org>
2986
2987         Get rid of static and global (!) vars in matrix-data.c.
2988
2989         * matrix-data.c: (static var nr_data) Removed.
2990         (static var nr_factor_values) Removed.
2991         (static var max_cell_index) Removed.
2992         (static var split_values) Removed.
2993         (struct nr_aux_data) New structure.
2994         (read_matrices_without_rowtype) Use a local struct nr_aux_data in
2995         place of static vars, pass to create_case_source() and procedure()
2996         as aux data.
2997         (nr_read_data_lines) Use struct nr_aux_data * parameter instead of
2998         struct matrix_data_pgm *.
2999         (nr_read_splits) Ditto.
3000         (nr_read_factors) Ditto.
3001         (nr_output_data) Ditto.
3002         (static var wr_content) Removed.
3003         (global var wr_data) Removed.
3004         (global var wr_current) Removed.
3005         (struct wr_aux_data) New structure.
3006         (read_matrices_with_rowtype) Use a local struct wr_aux_data in
3007         place of static vars, pass to create_case_source() and procedure()
3008         as aux data.
3009         (matrix_data_read_with_rowtype) Use struct wr_aux_data * parameter
3010         instead of matrix_data_pgm *.
3011         (wr_read_splits) Ditto.
3012         (wr_output_data) Ditto.
3013         (wr_read_rowtype) Ditto.
3014         (wr_read_factors) Ditto.
3015         (wr_read_indeps) Ditto.
3016         
3017 Mon Mar 15 20:07:29 2004  Ben Pfaff  <blp@gnu.org>
3018
3019         Get rid of static vars in autorecode.c.
3020
3021         * autorecode.c: (struct autorecode_trns) Rename `arc' to `specs',
3022         `n_arc' to `spec_cnt'.  All references updated.
3023         (static var v_src) Removed.
3024         (static var v_dest) Removed.
3025         (static var h_trns) Removed.
3026         (static var nv_src) Removed.
3027         (static var descend) Removed.
3028         (static var print) Removed.
3029         (enum direction) New enum.
3030         (struct autorecode_pgm) New structure.
3031         (cmd_autorecode) Use struct autorecode_pgm instead of static vars.
3032         Move n_dest local var into struct autorecode_pgm for ease of
3033         clean-up.  Use arc_free().
3034         (arc_free) New function.
3035         (recode) Modify to take struct autorecode_pgm * parameter instead
3036         of using statics.  Let the caller clean up.
3037         (autorecode_proc_func) Use struct autorecode_pgm * auxiliary data
3038         instead of statics.  Rearrange code a little.
3039
3040 Mon Mar 15 00:25:02 2004  Ben Pfaff  <blp@gnu.org>
3041
3042         Get rid of static, global vars in recode.c.  Remove debug code.
3043
3044         * recode.c: (static var head) Removed.
3045         (global var v) Removed.
3046         (global var nv) Removed.
3047         (cmd_recode) New local variables head, v, nv.  Initialize and free
3048         v.  Don't call debug_print().
3049         [DEBUGGING] (dump_dest) Removed.
3050         [DEBUGGING] (debug_print) Removed.
3051
3052 Mon Mar 15 00:14:49 2004  Ben Pfaff  <blp@gnu.org>
3053
3054         Get rid of static vars in expr-opt.c.
3055
3056         * expr-opt.c: (static var e) Removed.
3057         (static var nop) Removed.
3058         (static var mop) Removed.
3059         (static var ndbl) Removed.
3060         (static var mdbl) Removed.
3061         (static var nstr) Removed.
3062         (static var mstr) Removed.
3063         (static var nvars) Removed.
3064         (static var mvars) Removed.
3065         (struct expr_dump_state) New structure.
3066         (dump_expression) Use new struct expr_dump_state instead of static
3067         vars and pass to functions we call.
3068         (dump_node) Use struct expr_dump_state * parameter.
3069         (emit) Ditto.
3070         (emit_num_con) Ditto.
3071         (emit_str_con) Ditto.
3072         (emit_var) Ditto.
3073         
3074 Mon Mar 15 00:03:51 2004  Ben Pfaff  <blp@gnu.org>
3075
3076         Get rid of static var in COUNT.
3077
3078         * count.c: (static var head) Move into cmd_count().
3079         (cmd_count) [DEBUGGING] Don't call debug_print.
3080         [DEBUGGING] (debug_print) Removed.
3081
3082 Sun Mar 14 23:56:09 2004  Ben Pfaff  <blp@gnu.org>
3083
3084         Get rid of static vars in VALUE LABELS, ADD VALUE LABELS.
3085
3086         * val-labs.c: (static var v) Removed.
3087         (static var nv) Removed.
3088         [DEBUGGING] (debug_print) Removed.
3089         (verify_val_labs) Add struct variable **, int parameters.
3090         (get_label) Ditto.  Improve error messages, streamline.
3091         (erase_labels) New function for erasing value labels, taking over
3092         part of verify_val_labs()'s function.
3093         (init) Removed.
3094         (done) Removed.
3095         (cmd_value_labels) No need to call init() or done() anymore.
3096         (cmd_add_value_labels) Ditto.
3097         (do_value_labels) Add vars, var_cnt local variables.  Clean up
3098         after them internally.  Call erase_labels() if we should.  Don't
3099         call debug_print().
3100
3101 Sun Mar 14 23:33:53 2004  Ben Pfaff  <blp@gnu.org>
3102
3103         Get rid of static vars in MATCH FILES.
3104         
3105         * get.c: (static var mtf_head) Removed.
3106         (static var mtf_tail) Removed.
3107         (static var mtf_by) Removed.
3108         (static var mtf_n_by) Removed.
3109         (static var mtf_master) Removed.
3110         (static var mtf_seq_num) Removed.
3111         (static var mtf_seq_nums) Removed.
3112         (static var mtf_sink) Removed.
3113         (static var mtf_case) Removed.
3114         (struct mtf_proc) New structure.
3115         (cmd_match_files) Use struct mtf_proc instead of static vars.
3116         (mtf_processing_finish) Ditto.
3117         (mtf_free) Ditto.
3118         (mtf_delete_file_in_place) Ditto.
3119         (mtf_read_nonactive_records) Ditto.
3120         (mtf_compare_BY_values) Ditto.
3121         (mtf_processing) Ditto.
3122         (mtf_merge_dictionary) Ditto.
3123
3124 Sun Mar 14 22:48:12 2004  Ben Pfaff  <blp@gnu.org>
3125
3126         * command.def: Add CASESTOVARS, VARSTOCASES unimplemented commands.
3127
3128         * dictionary.c: (dict_rename_var) Add assertion.
3129         (dict_contains_var) Check by index instead of name.
3130
3131 Sun Mar 14 22:01:02 2004  Ben Pfaff  <blp@gnu.org>
3132
3133         Get rid of compaction_necessary, compaction_nval, compaction_case.
3134         Redo VFM interface.  Replace disk_sink and memory_sink by
3135         storage_sink, disk_source and memory_source by storage_source.
3136
3137         * vfm.h: (struct case_sink) Add `dict', `idx_to_fv', `value_cnt'
3138         members.
3139
3140         * vfm.c: 
3141         (struct write_case_data) Remove `begin_func', `end_func',
3142         `func_aux' members.  Add `aux', `trns_case', `sink_case',
3143         `cases_written', `cases_analyzed' members.
3144         (global var compaction_necessary) Make static.
3145         (global var compaction_nval) Removed.
3146         (global var compaction_case) Removed.
3147         (static var case_count) Removed.
3148         (struct procedure_aux_data) Removed.
3149         (struct split_aux_data) Removed.
3150         (procedure) Remove begin_func, end_func parameters.  Rewrite.
3151         (static var not_canceled) Removed.
3152         (process_active_file) Removed.
3153         (process_active_file_write_case) Removed.
3154         (process_active_file_output_case) Removed.
3155         (prepare_for_writing) Moved into open_active_file().
3156         (arrange_compaction) Ditto.
3157         (setup_lag) Ditto.
3158         (open_active_file) Rewrote.
3159         (write_case) New function.
3160         [DEBUGGING] (index_to_varname) Removed.
3161         (execute_transformations) New function.
3162         (exclude_this_case) Renamed filter_case(), changed interface.
3163         (clear_case) Added struct ccase * parameter to interface.
3164         (close_active_file) Added struct write_case_data * parameter,
3165         rewrote.
3166         (disk_sink_create) Removed.
3167         (disk_sink_destroy) Removed.
3168         (disk_sink_make_source) Removed.
3169         (disk_sink_write) Removed.
3170         (disk_source_count) Removed.
3171         (disk_source_destroy) Removed.
3172         (disk_source_read) Removed.
3173         (global var disk_sink_class) Removed.
3174         (global var disk_source_class) Removed.
3175         (global var memory_sink_class) Removed.
3176         (global var memory_source_class) Removed.
3177         (memory_sink_create) Removed.
3178         (memory_sink_destroy) Removed.
3179         (memory_sink_make_source) Removed.
3180         (memory_sink_write) Removed.
3181         (memory_source_count) Removed.
3182         (memory_source_destroy) Removed.
3183         (memory_source_get_cases) Removed.
3184         (memory_source_read) Removed.
3185         (memory_source_set_cases) Removed.
3186         (struct disk_stream_info) Removed.
3187         (struct memory_sink_info) Removed.
3188         (struct memory_source_info) Removed.
3189         (write_active_file_to_disk) Removed.
3190         (destroy_storage_stream_info) New function.
3191         (global var null_sink_class) New var.
3192         (global var storage_sink_class) New var.
3193         (global var storage_source_class) New var.
3194         (open_storage_file) New function.
3195         (storage_sink_destroy) New function.
3196         (storage_sink_make_source) New function.
3197         (storage_sink_open) New function.
3198         (storage_sink_write) New function.
3199         (storage_source_count) New function.
3200         (storage_source_destroy) New function.
3201         (storage_source_get_cases) New function.
3202         (storage_source_on_disk) New function.
3203         (storage_source_read) New function.
3204         (storage_source_set_cases) New function.
3205         (storage_source_to_disk) New function.
3206         (storage_to_disk) New function.
3207         (struct storage_stream_info) New structure.
3208         (write_storage_file) New function.
3209         (procedure_write_case) Removed.
3210         (create_case_source) Add `struct dictionary *' parameter, all
3211         references updated.
3212         (create_case_sink) Ditto.
3213         (free_case_sink) New function.
3214         (struct split_aux_data) New structure.
3215         (procedure_with_splits) New function implementing what procedure()
3216         used to.
3217         (SPLIT_FILE_proc_func) Removed.
3218         (procedure_with_splits_callback) New function.
3219         (equal_splits) New function.
3220         
3221         * aggregate.c: Pass around a struct instead of using statics.
3222         (static var outfile) Remove.
3223         (enum type) Give it tag `missing_treatment'.
3224         (static var missing) Remove.
3225         (static var sort) Remove.
3226         (static var agr_first) Remove.
3227         (static var agr_next) Remove.
3228         (static var case_count) Remove.
3229         (static var prev_case) Remove.
3230         (static var buf64_1xx) Remove.
3231         (static var buf_1xx) Remove.
3232         (struct agr_proc) New structure incorporating the above.
3233         (cmd_aggregate) Use new struct.  Clean up error handling using
3234         agr_destroy().  Completely rewrite actual implementation of
3235         aggregation.
3236         (create_sysfile) Add struct agr_proc * parameter, modify
3237         accordingly.
3238         (parse_aggregate_functions) Ditto.
3239         (free_aggregate_functions) Ditto.  Rename agr_destroy().
3240         (aggregate_single_case) Add struct agr_proc * parameter, modify
3241         accordingly.
3242         (accumulate_aggregate_info) Ditto.
3243         (dump_aggregate_info) Ditto.
3244         (initialize_aggregate_info) Ditto.
3245         (agr_00x_trns_proc) Removed.
3246         (agr_00x_end_func) Removed.
3247         (agr_10x_trns_proc) Removed.
3248         (agr_10x_trns_free) Removed.
3249         (agr_10x_end_func) Removed.
3250         (agr_11x_read) Removed.
3251         (agr_11x_finish) Removed.
3252         [DEBUGGING] (debug_print) Removed.
3253         (write_case_to_sfm) Add struct agr_proc * parameter, modify
3254         accordingly.
3255         (agr_to_active_file) New function.
3256         (presorted_agr_to_sysfile) New function.
3257         (sort_agr_to_sysfile) New function.
3258
3259         * autorecode.c: (cmd_autorecode) Use procedure_with_splits().
3260
3261         * crosstabs.q: (internal_cmd_crosstabs) Ditto.
3262
3263         * descript.q: (cmd_descriptives) Ditto.
3264
3265         * dfm.c: (cmd_begin_data) Check for storage_source_class.  Adapt
3266         to new procedure() interface.
3267
3268         * command.c: (cmd_execute) Adapt to new procedure() interface.
3269
3270         * dictionary.c: (dict_compact_values) Also delete scratch
3271         variables.
3272         (dict_get_compacted_value_cnt) New function.
3273         (dict_get_compacted_idx_to_fv) New function.
3274
3275         * flip.c: (cmd_flip) Warn about and cancel TEMPORARY.
3276         (cmd_flip) Adapt to new procedure() interface.
3277         (flip_sink_write) Use sink->idx_to_fv.
3278
3279         * frequencies.q: (internal_cmd_frequencies) Use
3280         procedure_with_splits().
3281
3282         * get.c: (cmd_save_internal) Adapt to new procedure() interface.
3283         (static var mtf_sink) New static var.
3284         (static var mtf_case) New static var.
3285         (cmd_match_files) Warn about and cancel TEMPORARY.  Redo the way
3286         we actually implement the matching.
3287         (mtf_delete_file_in_place) Use mtf_case.
3288         (mtf_processing) Use mtf_case and mtf_sink.
3289         (cmd_export) Adapt to new procedure() interface.
3290
3291         * levene.c: (levene) Use procedure_with_splits().
3292
3293         * list.q: (cmd_list) Use procedure_with_splits().
3294
3295         * matrix-data.c: (read_matrices_without_rowtype) Adapt to new
3296         procedure() interface.
3297         (read_matrices_with_rowtype) Ditto.
3298
3299         * modify-vars.c; (cmd_modify_vars) Warn about and cancel
3300         TEMPORARY.  Adapt to new procedure() interface.
3301
3302         * rename-vars.c: Warn about and cancel TEMPORARY.
3303
3304         * sort.c: (cmd_sort_cases) Warn about TEMPORARY.
3305         (sort_cases) Use dict_get_compacted_value_cnt() instead of
3306         compaction_nval.  Adapt to new procedure() interface.  Use
3307         storage_source_to_disk().
3308         (do_internal_sort) Don't try to dump the cases to memory.
3309         (compare_case_lists) Pass null idx_to_fv.
3310         (struct initial_run_state) Add `idx_to_fv' member.  Remove
3311         `case_size' member.
3312         (write_initial_runs) Don't initialize irs->case_size.  Adapt to
3313         new procedure() interface.  Reset irs->idx_to_fv after calling
3314         procedure().
3315         (sort_sink_write) Set irs->idx_to_fv.  Use case_size from struct
3316         sort_cases_pgm.  Pass irs, not struct sort_cases_pgm to
3317         push_heap().
3318         (destroy_initial_run_state) Don't dereference irs after freeing
3319         it.
3320         (allocate_cases) Don't calculate case_size locally.
3321         (compare_record) Add idx_to_fv parameter.
3322         (compare_record_run) Change parameter from struct sort_cases_pgm *
3323         to struct initial_run_state *.  Pass irs->idx_to_fv to
3324         compare_record().
3325         (compare_record_run) Third parameter now a struct
3326         initial_run_state *.
3327         (output_record) No need for out_case anymore.  Pass irs, not
3328         struct sort_cases_pgm to pop_heap().  Use case_size from struct
3329         sort_cases_pgm.
3330         (merge) Use case_size from struct sort_cases_pgm.
3331         (merge_once) Use case_size from struct sort_cases_pgm.
3332         Pass null pointer to compare_record() as idx_to_fv.
3333         (global var sort_sink_class) Make static.
3334
3335         * t-test.q: (cmd_t_test) Use procedure_with_splits().
3336
3337         * temporary.c: Remove debugging crap.
3338
3339 Sat Mar 13 14:19:52 WST 2004 John Darrington <john@darrington.wattle.id.au>
3340
3341         * t-test.q, levene.c: Fixed up the handling of MISSING values
3342         int the T-TEST
3343
3344 Fri Mar 12 16:23:35 WST 2004 John Darrington <john@darrington.wattle.id.au>
3345
3346         * t-test.q, levene.c: Added support for T-TEST /GROUP where only 
3347         one value is given.
3348
3349 Wed Mar 10 23:25:13 2004  Ben Pfaff  <blp@gnu.org>
3350
3351         Change explicit variable name checks into use of
3352         dict_class_from_id().
3353
3354         * dictionary.c: (dict_create_var)  Change explicit variable name
3355         check into use of dict_class_from_id().
3356
3357         * get.c: (trim_dictionary) Ditto.
3358
3359         * sel-if.c: (cmd_filter) Ditto.
3360
3361         * sysfile-info.c: (cmd_display) Ditto.
3362
3363         * vars-prs.c: (parse_DATA_LIST_vars) Ditto.
3364
3365         * vfm.c: (arrange_compaction) Ditto.
3366
3367         * weight.c: (cmd_weight) Ditto.
3368
3369 Wed Mar 10 21:16:34 2004  Ben Pfaff  <blp@gnu.org>
3370
3371         * temporary.c: (cmd_temporary) When TEMPORARY was the first
3372         transformation following the input program, if any, for some
3373         reason we special-cased f_trns.  That's just wrong.  It should
3374         always be set to n_trns.
3375
3376 Tue Mar  9 23:44:40 2004  Ben Pfaff  <blp@gnu.org>
3377
3378         * format.c: (parse_format_specifier_name) Fix brown-bag bug
3379         introduced in last check-in.
3380
3381 Tue Mar  9 23:10:41 2004  Ben Pfaff  <blp@gnu.org>
3382
3383         * format.c: (global array translate_fmt[]) Removed.
3384         (translate_fmt) New function as replacement.
3385         (parse_format_specifier_name) Rewrite.
3386
3387         * pfm-read.c: (convert_format) Use translate_fmt() instead of
3388         translate_fmt[].
3389
3390         * sfm-read.c: (parse_format_spec) Ditto.
3391
3392         * postscript.c: (text) Fix handling of fonts with missing
3393         ligatures.
3394
3395         * sort.c: (struct external_sort) Add temp_name member.
3396         (destroy_external_sort) Free temp_dir, temp_name members.
3397         (init_external_sort) Allocate temp_name.
3398         (get_temp_file_name) Change prototype.
3399         (open_temp_file) Deal with change to get_temp_file_name().
3400         (close_temp_file) Ditto.
3401         (remove_temp_file) Ditto.
3402         (write_temp_file) Ditto.
3403         (read_temp_file) Ditto.
3404         (sort_sink_destroy) Removed.
3405         (sort_sink_class) Change destroy member to null.
3406
3407 Tue Mar  9 22:36:34 2004  Ben Pfaff  <blp@gnu.org>
3408
3409         Eliminate temp_case.
3410
3411         * aggregate.c: (cmd_aggregate) No need to save/restore temp_case
3412         anymore.  Use agr_11x_finish().
3413         (aggregate_single_case) Make first param const.
3414         (accumulate_aggregate_info) Ditto.
3415         (agr_00x_end_func) Use compaction_case, not temp_case.
3416         (agr_11x_func) Break into agr_11x_read(), agr_11x_finish().
3417
3418         * data-list.c: (struct data_list_pgm) Add `case_size' member.
3419         (cmd_data_list) Initialize case_size.
3420         (read_from_data_list_fixed) Add struct ccase * param, use instead
3421         of temp_case.
3422         (read_from_data_list_free) Ditto.
3423         (read_from_data_list_list) Ditto.
3424         (read_one_case) Rename data_list_trns_proc(), all references
3425         updated.  Add argument in calling above functions.  Use c
3426         argument instead of temp_case.
3427         (destroy_dls) Rename data_list_trns_free(), all references
3428         updated.
3429
3430         * expr-evl.c: (expr_evaluate) Make second parameter const.
3431
3432         * file-type.c: (struct file_type_pgm) Add `case_size' member.
3433         (cmd_end_file_type) Initialize `case_size'.
3434         (file_type_source_read) Add struct ccase * parameter.  Use instead
3435         of temp_case.
3436
3437         * flip.c: Rewritten.
3438
3439         * get.c: (struct get_pgm) New structure to keep track of
3440         case_size.
3441         (cmd_get) Initialize case_size.
3442         (cmd_import) Ditto.
3443         (get_source) Deal with struct get_pgm.
3444         (get_source_read) Add struct ccase * parameter, use instead of
3445         temp_case.
3446         (import_source_read) Ditto.
3447
3448         * get.c: Use a null pointer instead of temp_case to represent the
3449         "current case" in a struct mtf_file's input member.
3450         (mtf_processing_finish) Pass null to mtf_processing(), not
3451         temp_case.
3452         (mtf_read_nonactive_records) Don't set iter->input to temp_case.
3453         (mtf_compare_BY_values) Add extra arg, use instead of null input
3454         members.
3455         (mtf_processing) Use c parameter instead of temp_case.  Pass
3456         compaction_case to process_active_file_output_case().
3457         
3458         * glob.c: (global variable temp_case) Removed.
3459
3460         * inpt-pgm.c: (struct input_program_pgm) Add `case_size' member.
3461         (cmd_input_program) Initialize case_size.  Set
3462         vfm_source->value_cnt.
3463         (init_case) Add struct ccase * parameter, use instead of
3464         temp_case.
3465         (clear_case) Ditto.
3466         (input_program_source_read) Ditto.
3467
3468         * matrix-data.c: (matrix_data_read_without_rowtype) Ditto.
3469         (dump_cell_content) Ditto.
3470         (nr_output_data) Ditto.
3471         (read_matrices_without_rowtype) Ditto.
3472         (matrix_data_read_with_rowtype) Ditto.
3473         (wr_read_splits) Ditto.
3474         (wr_output_data) Ditto.
3475
3476         * sort.h: (struct sort_cases_pgm) New member `case_size'.
3477         
3478         * sort.c: (sort_cases) Initialize scp->case_size.
3479         (struct external_sort) Remove `case_size' member.
3480         (write_initial_runs) Only call vfm_sink->class_destroy if
3481         non-null.
3482         (struct sort_source_aux) New structure.
3483         (sort_source_read_helper) New function.
3484         (sort_source_read) Use sort_source_read_helper().
3485         (read_sort_output) Change interface to be more reasonable.
3486         (read_internal_sort_output) Ditto.
3487         (read_external_sort_output) Ditto.
3488
3489         * vars-prs.c: (dict_class_to_name) Pass return value through
3490         gettext.
3491
3492         * vfm.c: (struct procedure_aux_data) Add `trns_case' member.
3493         (procedure) Initialize trns_case.
3494         (procedure) Pass trns_case to vfm_source->class->read().
3495         Free trns_case.
3496         (process_active_file) Start using struct procedure_aux_data.
3497         (process_active_file_write_case) Pass trns_case to
3498         transformations, lag_case(), clear_case().
3499         (process_active_file_output_case) Add struct ccase * parameter.
3500         (create_trns_case) New function.
3501         (make_temp_case) Removed.
3502         (vector_initialization) Removed.
3503         (close_active_file) Only call make_source if non-null, otherwise
3504         set vfm_source to null pointer.  Don't free temp_case.
3505         (disk_source_read) Add struct ccase * parameter, use instead of
3506         temp_case.
3507         (memory_source_read) Ditto.
3508         (lag_case) Add const struct ccase * member.
3509         (procedure_write_case) Use trns_case instead of temp_case.
3510         (clear_case) Add struct ccase * member, use instead of temp_case.
3511         (exclude_this_case) Ditto.
3512         (create_case_source) Add struct dictionary * parameter, use to
3513         initialize source->value_cnt.
3514
3515         * vfm.h: (struct case_source) Add `value_cnt' member.
3516         (struct case_source_class) Add struct ccase * parameter to `read'
3517         member function pointer.
3518         (struct case_sink_class) Make struct ccase * parameter const in
3519         `write' member function pointer.
3520         
3521 Wed Mar  3 20:44:37 2004  Ben Pfaff  <blp@gnu.org>
3522
3523         Fix a lot of "possibly uninitialized variable" warnings.  Some of
3524         them are even real bugs.  A few of them make me wonder how the
3525         code ever worked.
3526
3527         * aggregate.c: (parse_aggregate_functions) Initialize `function.
3528
3529         * ascii.c: (output_lines) Add default case to switch.
3530
3531         * crosstabs.q: Remove static variable `expected' and all
3532         references to it.
3533         (display_crosstabulation) Always calculate expected value.
3534         (calc_chisq) Ditto.
3535         (output_pivot_table) Initialize `cmp'.
3536         (display_crosstabulation) New variable `last_row', which is
3537         initialized.
3538
3539         * data-in.c: (parse_numeric) Always initialize sign.  How did this
3540         work at all?!
3541
3542         * data-list.c: (repeating_data_trns_proc) Always initialize code.
3543         Always set info.ofs.  (How did this work?!)
3544
3545         * expr-opt.c: (optimize_tree) Always initialize `m'.
3546         (evaluate_tree) Always initialize `c'.  (How did this work?)
3547
3548         * frequencies.q: (frq_custom_variables) Always initialize min,
3549         max.
3550         (frq_custom_grouped) Always initialize `dl'.
3551
3552         * groff-font.c: (groff_read_font) Always initialize char_set.
3553
3554         * matrix-data.c: (nr_output_data) Initialize `split'.
3555         (wr_read_splits) Remove shadowing split_cnt declaration.
3556         (wr_output_data) Initialize `split'.
3557
3558         * output.c: (tokener) Skip add character on syntax error.
3559
3560         * pool.c: (pool_strndup) Always set `copy'.  (How did this work?!)
3561
3562         * postscript.c: (read_ps_encodings) Use line.string instead of
3563         uninitialized `bp'.
3564         (write_text) Add default case to switch.
3565         (text) Always initialize multiple variables.  Fix bug with
3566         ligatures.
3567
3568         * print.c: (fixed_parse_fortran) Initialize head.
3569         (alloc_line) Add default case to switch.
3570
3571         * recode.c: (parse_dest_spec) Handle case where nothing matches.
3572         (recode_trns_proc) Move variable declaration inward.  Add default
3573         case to switch.
3574
3575         * sfm-read.c: (read_header) Initialize skip_amt.
3576
3577         * sysfile-info.c: (display_variables) Always initialize pc.
3578
3579         * vars-prs.c: Initialized `included'.
3580
3581 Wed Mar  3 09:30:09 2004  Ben Pfaff  <blp@gnu.org>
3582
3583         * main.c: (main) sigaction()'s sa_flags member was uninitialized.
3584         Just use signal() instead.
3585
3586 Wed Mar  3 09:26:30 2004  Ben Pfaff  <blp@gnu.org>
3587
3588         Get rid of vfm_sink_info and vfm_source_info.
3589         
3590         * aggregate.c: (agr_00x_end_func) Don't increment
3591         sfm_sink_info.ncases.
3592
3593         * sort.c: (do_internal_sort) Get case count from
3594         vfm_source->class->count().
3595         (struct external_sort) Add `case_size' member.
3596         (do_external_sort) Initialize case_size.
3597         (struct initial_run_state) Add `case_size' member.
3598         (write_initial_runs) Initialize case_size.
3599         (sort_sink_write) Use case_size.
3600         (read_external_sort_output) Use case_size.  Get case_cnt from
3601         initial_runs.
3602
3603         * vfm.c: (struct write_case_data) Add underscores to existing arg
3604         names, all references updated.  Renamed `aux' as `func_aux', all
3605         references updated.  Added new `aux' member.
3606         (global var vfm_source_info) Removed.
3607         (global var vfm_sink_info) Removed.
3608         (struct procedure_aux_data) New.
3609         (struct split_aux_data) New.
3610         (procedure) Use `aux' fields for procedure_aux_data,
3611         split_aux_data.
3612         (process_active_file_write_case) Pass case_count + 1 to
3613         transformation procedures, exclude_this_case().
3614         (process_active_file_output_case) Don't increment
3615         vfm_sink_info.ncases.
3616         (prepare_for_writing) Don't initialize vfm_sink_info.  Don't try
3617         to send data to disk early.
3618         (make_temp_case) Don't use vfm_sink_info.case_size.
3619         (close_active_file) Don't initialize vfm_source_info.
3620         (struct disk_stream_info) New, to allow for case_cnt and case_size fields.
3621         (disk_sink_create) Initialize and/or update disk_stream_info.
3622         (disk_sink_write) Ditto.
3623         (disk_sink_destroy) Ditto.
3624         (disk_sink_make_source) Ditto.
3625         (disk_source_read) Ditto.
3626         (disk_source_destroy) Ditto.
3627         (global var disk_source_class) Add disk_source_count().
3628         (disk_source_count) New function.
3629         (struct memory_sink_info) Add `case_cnt', `case_size' members.
3630         (struct memory_source_info) Ditto.
3631         (memory_sink_create) Deal with case_cnt, case_size.
3632         (memory_sink_write) Ditto.
3633         (memory_sink_make_source) Ditto.
3634         (memory_source_read) Ditto.
3635         (memory_source_count) New function.
3636         (memory_source_class) Add memory_source_count().
3637         (procedure_write_case) Don't use vfm_sink_info.ncases.  Do use
3638         proc_aux->cases_written, and pass it to transformation procedures
3639         and exclude_this_case ().
3640         (exclude_this_case) Add case_num parameter.  Pass it to
3641         expr_evaluate().
3642         (SPLIT_FILE_procfunc) Use split_aux->prev_case instead of static
3643         variable.
3644
3645         * vfm.h: (struct case_source_class) Add `count' member.
3646
3647         * vfmP.h: (struct stream_info) Removed.
3648         (global variable vfm_source_info) Removed.
3649         (global variable vfm_sink_info) Removed.
3650         
3651 Tue Mar  2 23:38:17 2004  Ben Pfaff  <blp@gnu.org>
3652
3653         * var.h: (typedef trns_proc_func) New typedef.
3654         (trns_free_func) New typedef.
3655         (struct trns_header) Change `proc' to type trns_proc_func, `free'
3656         to type trns_free_func.  This only changes the actual type of
3657         trns_proc_func, adding a `case_num' parameter.  Updated all
3658         implementations to use the typedefs instead.
3659
3660         * compute.c: (compute_num) Pass case_num to expr_evaluate().
3661         (compute_num_vec) Ditto.
3662         (compute_str) Ditto.
3663         (compute_str_vec) Ditto.
3664
3665         * do-if.c: (do_if_trns_proc) Ditto.
3666
3667         * expr-evl.c: (expr_evaluate) Add new case_num parameter, use for
3668         OP_CASENUM.
3669
3670         * inpt-pgm.c: (input_program_source_read) Maintain case count,
3671         pass to transformation functions.
3672         (reread_trns_proc) Pass case_num arg to expr_evaluate().
3673
3674         * loop.c: (loop_1_trns_proc) Ditto.
3675         (loop_2_trns_proc) Ditto.
3676         (loop_3_trns_proc) Ditto.
3677
3678         * print.c: (print_space_trns_proc) Ditto.
3679
3680         * sel-if.c: (select_if_proc) Ditto.
3681
3682 Tue Mar  2 11:36:52 2004  Ben Pfaff  <blp@gnu.org>
3683
3684         * frequencies.q: (cleanup_freq_tab) Avoid memory leak by
3685         destroying hash table.
3686
3687         * glob.c: (read_active_file) Variable not referenced, removed.
3688         (cancel_input_pgm) Ditto.
3689
3690         * levene.c: Add #include <stdlib.h> needed to call free().
3691
3692         * aggregate.c: (parse_aggregate_functions) Make `function'
3693         variable const.
3694
3695 Tue Mar  2 11:30:56 2004  Ben Pfaff  <blp@gnu.org>
3696
3697         Start working to eliminate VFM dependence on static variables.
3698
3699         * command.c: (cmd_parse) Use case_source_is_class().
3700
3701         * data-list.c: Rewrite to eliminate use of static variables.
3702
3703         * dfm.c: (cmd_begin_data) Use case_source_is_class().
3704
3705         * file-handle.q: (fh_handle_name) Make parameter const.
3706
3707         * file-type.c: Rewrite to eliminate use of static variables.
3708
3709         * flip.c: Rewrite to eliminate use of static variables.
3710
3711         * format.c: (get_format_var_width) New function.
3712
3713         * get.c: Eliminate use of static variables.
3714
3715         * inpt-pgm.c: Eliminate use of static variables.
3716
3717         * matrix-data.c: Eliminate use of static variables.
3718
3719         * set.q: (set_max_workspace) New variable.
3720         (cmd_set) Use SET WORKSPACE to modify set_max_workspace.
3721
3722         * var.h: (struct case_list) Move here from vfmP.h.
3723
3724         * vars-atr.c: (discard_variables) Handle new vfm_source type.
3725
3726         * vfm.c: (vfm_source) Change type from struct case_stream to
3727         struct case_source.
3728         (vfm_sink) Change type from struct case_stream to struct
3729         case_sink.
3730         (static var paging) Rename workspace_overflow, all references
3731         updated.
3732         (procedure) Use new class structures.
3733         (process_active_file) Ditto.
3734         (process_active_file_write_case) Ditto.
3735         (prepare_for_writing) Use set_max_workspace.  Use new class
3736         structures.
3737         (close_active_file) Use new class structures.  Free old sink.
3738         (global var disk_source_file) Removed.
3739         (global var disk_sink_file) Removed.
3740         (disk_stream_init) Removed.
3741         (disk_stream_read) Removed.
3742         (disk_stream_write) Removed.
3743         (disk_stream_mode) Removed.
3744         (disk_stream_destroy_source) Removed.
3745         (disk_stream_destroy_sink) Removed.
3746         (global var vfm_disk_stream) Removed.
3747         (disk_sink_create) New function.
3748         (disk_sink_write) New function.
3749         (disk_sink_destroy) New function.
3750         (disk_sink_make_source) New function.
3751         (disk_sink_class) New static var.
3752         (disk_source_read) New function.
3753         (disk_source_destroy) New function.
3754         (global var vfm_source_class) New var.
3755         (global var memory_source_cases) Removed.
3756         (global var memory_sink_cases) Removed.
3757         (global var memory_sink_max_cases) Removed.
3758         (struct memory_sink_info) New struct.
3759         (memory_stream_init) Removed.
3760         (memory_stream_read) Removed.
3761         (memory_stream_write) Removed.
3762         (memory_stream_mode) Removed.
3763         (memory_stream_destroy_source) Removed.
3764         (memory_stream_destroy_sink) Removed.
3765         (global var vfm_memory_stream) Removed.
3766         (page_to_disk) Renamed write_active_file_to_disk().
3767         (memory_sink_create) New function.
3768         (memory_sink_write) New function.
3769         (memory_sink_destroy) New function.
3770         (memory_sink_make_source) New function.
3771         (memory_sink_class) New static var.
3772         (memory_source_read) New function.
3773         (memory_source_destroy) New function.
3774         (memory_source_get_cases) New function.
3775         (memory_source_set_cases) New function.
3776         (global var vfm_source_class) New var.
3777         (procedure_write_case) Use new class structures.
3778         (create_case_source) New function.
3779         (case_source_is_complex) New function.
3780         (case_source_is_class) New function.
3781         (create_case_sink) New function.
3782
3783         * vfm.h: (global variable reinit_sysmis) Not used, removed.
3784         (global variable reinit_blanks) Not used, removed.
3785         (global variable init_zero) Not used, removed.
3786         (global variable init_blanks) Not used, removed.
3787         (struct case_source) New struct.
3788         (struct case_source_class) New struct.
3789         (struct case_sink) New struct.
3790         (struct case_sink_class) New struct.
3791         (struct case_stream) Removed.
3792
3793         * vfmP.h: (struct case_list) Moved to var.h.
3794
3795 Tue Mar  2 11:28:30 2004  Ben Pfaff  <blp@gnu.org>
3796
3797         * algorithm.c: (count_equal) New function.
3798         (count_if) New function.
3799         (unique) Add assertions.
3800         (partition) Add assertions.
3801         (is_partitioned) New function.
3802         (copy_if) Add assertions.
3803         (remove_equal) Add assertions.
3804         (lexicographical_compare) Rename lexicographical_compare_3way.
3805         (sort) Add assertions.  Rephrase some code.
3806         (is_sorted) New function.
3807
3808 Sun Feb 29 23:24:57 2004  Ben Pfaff  <blp@gnu.org>
3809
3810         Rewrite SORT CASES.
3811
3812         * sort.c: Completely rewrite.
3813
3814         * sort.h: Expose interface via struct sort_cases_pgm, not via
3815         global variables.
3816
3817         * aggregate.c: (sort) New static var.
3818         (cmd_aggregate) Use sort.
3819         (create_sysfile) Ditto.
3820         (aggregate_single_case) Ditto.
3821         (dump_aggregate_info) Ditto.
3822         (agr_00x_end_func) Ditto.
3823         (debug_print) Ditto.
3824
3825         * var.h: (enum SRT_ASCEND) Removed.
3826         (enum SRT_DESCEND) Removed.
3827         (struct sort_cases_proc) Removed.
3828         (struct variable) Remove p.srt member.
3829
3830 Sun Feb 29 23:22:45 2004  Ben Pfaff  <blp@gnu.org>
3831
3832         Get rid of the old, crappy heap structure and replace it by a new,
3833         shiny, C++ STL-like heap structure.
3834         
3835         * Makefile.am: (pspp_SOURCES) Remove heap.c, heap.h.
3836
3837         * algorithm.c: (push_heap) New function.
3838         (heapify) Ditto.
3839         (pop_heap) Ditto.
3840         (make_heap) Ditto.
3841         (sort_heap) Ditto.
3842         (is_heap) Ditto.
3843         
3844         * heap.c: Removed.
3845
3846         * heap.h: Removed.
3847
3848 Sun Feb 29 23:21:53 2004  Ben Pfaff  <blp@gnu.org>
3849
3850         Increase warning level.
3851         
3852         * Makefile.am: (AM_CFLAGS) Remove -Wnouninitialized.
3853
3854 Sat Feb 21 17:38:58 WST 2004 John Darrington <john@darrington.wattle.id.au>
3855
3856         * main.c: Added a signal handler for SIGSEGV requesting a bug report.
3857          
3858 Fri Feb 20 23:22:14 2004  Ben Pfaff  <blp@gnu.org>
3859
3860         * dictionary.c: (dict_create_var) Fix root cause of bug worked
3861         around by previous change log entry.
3862         
3863         * compute.c: (lvalue_finalize) Remove workaround from previous
3864         change log entry.
3865
3866 Fri Feb 20 14:37:41 WAST 2004 John Darrington <john@darrington.wattle.id.au>
3867
3868         * compute.c: Fixed a bug where the Format was not getting set for 
3869           computed variables (thus causing a crash when SAVEing).
3870
3871         * Added a test to stop this bug ever coming back
3872
3873 Wed Feb 18 22:21:35 2004  Ben Pfaff  <blp@gnu.org>
3874
3875         Got rid of approx.h.  In general, replaced all references to
3876         approx_eq() by ==, approx_lt() by <, etc.  Other types of changes
3877         noted below.
3878
3879         * Makefile.am: (pspp_SOURCES) Removed approx.h.
3880
3881         * data-out.c: (try_F) Replaced test for approx_eq(number, 0.0) by
3882         test for mag < EPSILON.
3883
3884         * misc.h: Add definition of EPSILON.
3885
3886 Wed Feb 18 21:32:44 2004  Ben Pfaff  <blp@gnu.org>
3887
3888         * vfm.c: (procedure) Add check to prevent recursive call.
3889
3890 Wed Feb 18 21:48:54 WST 2004 John Darrington <john@darrington.wattle.id.au>
3891
3892         * Moved the declarations relating to values to their own header file
3893           (val.h)
3894
3895         * Added levene.c and levene.h
3896
3897         * vars-atr.c: Changed the signature of compare_values to 
3898         take const * arguments.
3899                 
3900         * t-test.q: Changed the structure of struct t_test_proc 
3901        variables now contain their own group statistics information.
3902        Eventually, t_test_proc might get renamed, because it'd be 
3903        applicable to other commands too.
3904
3905 Mon Feb 16 23:15:51 2004  Ben Pfaff  <blp@gnu.org>
3906
3907         * data-out.c: Clean up.  Changed interface of convert_*() to take
3908         either a `double' or a `const char *' instead of a `const union
3909         value *'.  Update all implementations of those interfaces.
3910         (data_out) Use switch statements instead of a table.
3911         (convert_AHEX) Rewrite.
3912
3913         * format.h: Update comment.
3914
3915 Mon Feb 16 22:14:36 2004  Ben Pfaff  <blp@gnu.org>
3916
3917         * q2c.c: (dump_header) Add an Emacs header line to output files
3918         that makes generated .c files read-only by default, to make it
3919         difficult to accidentally change generated files.
3920
3921 Mon Feb 16 22:12:07 2004  Ben Pfaff  <blp@gnu.org>
3922
3923         * frequencies.q: (compare_freq_numeric_a) Compare by frequency,
3924         not bogus a->v.c <=> b->v.c pointer compare.
3925         (compare_freq_alpha_a) Ditto.
3926         (compare_freq_numeric_d) Ditto.
3927         (compare_freq_alpha_d) Ditto.
3928         
3929 Mon Feb 16 22:00:53 2004  Ben Pfaff  <blp@gnu.org>
3930
3931         Changed data_out() to store string data directly into a `union
3932         value''s s member, not indirectly into c.
3933
3934         * crosstabs.q: (output_pivot_table) Use format_short() instead of
3935         data_out().
3936         (table_value_missing) Ditto.
3937         (float_M_suffix) Ditto.
3938         (format_short) New function.
3939
3940         * data-in.h: (data_in_finite_line) Remove inline definition.
3941
3942         * data-list.c: (destroy_dls_var_spec) New function.
3943         (destroy_dls) Rewrite in terms of destroy_dls_var_spec().
3944         (data_list_source_destroy_source) Avoid cast.
3945         (struct repeating_data_trns) New field `id_value'.  Update
3946         comments.
3947         (cmd_repeating_data) Initialize id_value.  Use new
3948         repeating_data_trns_free() for freeing REPEATING DATA
3949         transformations.
3950         (rpd_parse_record) Rewrite support for record ID to be less bogus.
3951         (repeating_data_trns_free) New function.
3952
3953         * data-out.c: (data_out) Change return type to `void' by replacing
3954         error returns by writing a message into the output buffer.
3955         (convert_A) Read from v->s instead of v->c.
3956         (convert_AHEX) Ditto.
3957
3958         * expr-evl.c: Update comment.
3959         (expr_evaluate) Add assertion in OP_STRING case.
3960
3961         * format.h: (macro MAX_FORMATTED_LEN) New macro.
3962
3963         * list.q: (list_cases) Update for new data_out() semantics.
3964
3965         * print.c: (print_trns_proc) Ditto.
3966
3967         * tab.c: (tab_value) Ditto.
3968         (tab_float) Avoid stupid cast.
3969
3970         * var.h: Update comments.
3971         (macro MAX_STRING) New macro.
3972         (macro MAX_ELEMS_PER_VALUE) New macro.
3973
3974         * vars-atr.c: (compare_values) New function.
3975
3976         * vfm.c: (dump_splits) Update for new data_out() semantics.
3977
3978 Mon Feb 16 21:45:47 2004  Ben Pfaff  <blp@gnu.org>
3979
3980         * crosstabs.q: (struct table_entry) Rename v[] to values[].  All
3981         references updated.
3982         (struct crosstab) Rename v[] to vars[].  All references updated.
3983         (hash_table_entry) Replace the hash algorithm and fix a bug at the
3984         same time, which caused the hash value to depend only on a single
3985         value, not all of the variables' values.
3986         
3987 Mon Feb 16 12:49:53 2004  Ben Pfaff  <blp@gnu.org>
3988
3989         Clean up struct dictionary's value_cnt usage.
3990
3991         * dictionary.c: Add a function comment to each function.
3992         (struct dictionary) Rename value_cnt to next_value_idx, which more
3993         accurately reflects its meaning.  All references updated.
3994         (dict_rename_vars) Add assertion.
3995         (dict_get_value_cnt) Rename dict_get_next_value_idx().  All
3996         references updated.
3997         (dict_get_case_size) New function.
3998
3999         * aggregate.c: (create_sysfile) Use dict_get_case_size().
4000
4001         * get.c: (mtf_read_nonactive_records) Ditto.
4002
4003         * sort.c: (allocate_cases) Ditto.
4004         (write_initial_runs) Ditto.
4005         (merge) Ditto.
4006         (merge_once) Ditto.
4007
4008         * vfm.c: (prepare_for_writing) Ditto.
4009         (setup_lag) Ditto.
4010         (lag_case) Ditto.
4011
4012 Mon Feb 16 00:17:55 2004  Ben Pfaff  <blp@gnu.org>
4013
4014         Make vfm.c slightly less grotesque.
4015
4016         * vfm.c: (filter_var) Removed.
4017         (filter_index) Removed.
4018         (FILTERED macro) Removed.
4019         (exclude_this_case) New function.
4020         (process_active_file_write_case) Use exclude_this_case() instead
4021         of FILTERED and inline tests.
4022         (procedure_write_case) Ditto.
4023         (setup_filter) Removed.
4024         (open_active_file) Don't call setup_filter().
4025         (close_active_file) Call dict_get_filter() instead of checking
4026         filter_var.
4027
4028 Mon Feb 16 00:01:53 2004  Ben Pfaff  <blp@gnu.org>
4029
4030         * var.h: (struct variable) Update comments.
4031
4032 Sun Feb 15 23:14:59 2004  Ben Pfaff  <blp@gnu.org>
4033
4034         New functions dict_create_var_assert(), dict_lookup_var_assert().
4035         Converted several dict_*_var()/assert pairs into a single
4036         dict_*_var_assert().
4037
4038         * dictionary.c: (dict_create_var_assert) New function.
4039         (dict_lookup_var_assert) New function.
4040
4041 Sun Feb 15 23:06:08 2004  Ben Pfaff  <blp@gnu.org>
4042
4043         Got rid of "struct long_vec", envector(), devector(), etc.  Added
4044         two members `init', `reinit' to struct variable as a substitute.
4045         
4046         * Makefile.am: (pspp_SOURCES) Removed cases.c, cases.h.
4047         
4048         * cases.c: Removed.
4049
4050         * cases.h: Removed.
4051
4052         * aggregate.c: (parse_aggregate_functions) destvar doesn't need
4053         init.
4054
4055         * autorecode.c: (cmd_autorecode) destvars don't need init.
4056
4057         * compute.c: (lvalue_finalize) Set reinit.
4058
4059         * data-list.c: (fixed_parse_compatible) Don't need init usually.
4060         (dump_fmt_list) Ditto.
4061         (parse_free) Ditto.
4062
4063         * descript.q: (run_z_pass) Don't need init for z-scores.
4064
4065         * dictionary.c: (dict_create_var) Initialize `init', `reinit'
4066         members.
4067         (dict_clone_var) Copy `reinit' member, initialize `init' member.
4068
4069         * glob.c: (init_glob) Remove vec_init() calls.
4070
4071         * inpt-pgm.c: (cmd_end_input_program) Use `reinit', not `left'.
4072         
4073         * loop.c: (internal_cmd_loop) Don't need to call envector().
4074
4075         * numeric.c: (cmd_numeric) Ditto.
4076         (cmd_string) Ditto.
4077         (cmd_leave) Ditto.  Set `init', `reinit' members.
4078
4079         * recode.c: (cmd_recode) Don't need to call envector().
4080
4081         * repeat.c: (internal_cmd_do_repeat) Ditto.
4082
4083         * var.h: (struct variable) Remove `left'.  Add `init', `reinit'.
4084         (force_create_variable) Removed prototype.
4085         (force_dup_variable) Ditto.
4086
4087         * vector.c: (cmd_vector) Don't need to call envector().
4088
4089         * vfm.c: (reinit_sysmis) Removed.
4090         (reinit_blanks) Removed.
4091         (init_zero) Removed.
4092         (init_blanks) Removed.
4093         (process_active_file_write_case) No need to deal with vectors.
4094         Call clear_temp_case().
4095         (vector_initialization) Rewrite to use `init', `reinit'.
4096         (close_active_file) No need to call vec_clear().
4097         (procedure_write_case) Call clear_temp_case().
4098         (clear_temp_case) New function.
4099
4100 Sun Feb 15 20:50:36 2004  Ben Pfaff  <blp@gnu.org>
4101
4102         * pfm-write.c: (bufwrite) Get rid of nasty cast that also invoked
4103         undefined behavior.
4104
4105 Thu Feb 12 23:35:15 2004  Ben Pfaff  <blp@gnu.org>
4106
4107         Add auxiliary argument to procedure() interface.  Associated small
4108         clean-ups of vfm interface.
4109         
4110         * Updated every caller of procedure() and process_active_file() to
4111         reflect modified interface.  Simple, ordinary changes not listed
4112         otherwise below.
4113
4114         * Updated every function that implements struct case_stream's
4115         `read' function to take a write_case_func and a write_case_data.
4116         Also updated every caller of write_case() to instead call them
4117         through these arguments.  In some cases this meant that the extra
4118         args had to be threaded through a couple of extra levels.  This
4119         wasn't difficult or interesting so the details won't be given.
4120
4121         * data-list.c: (struct repeating_data_trns) Add members
4122         `write_case', `wc_data' as kluge.
4123         (read_one_set_of_repetitions) Rename repeating_data_trns_proc and
4124         make non-static.
4125         (repeating_data_set_write_case) New function.
4126
4127         * data-list.h: New file to declare repeating_data_trns_proc() and
4128         repeating_data_set_write_case().
4129
4130         * inpt-pgm.c: (input_program_source_read) Call
4131         repeating_data_set_write_case() for all the REPEATING DATA
4132         transformations, so that they know where to send their cases.
4133         It's a big kluge.  Also kluge in END CASE.
4134         (end_case_trns_proc) Never called anymore, but we still need it,
4135         so just assert(0).
4136
4137         * sort.c: (read_sort_output) Update to match struct case_stream
4138         `read' member.
4139
4140         * vfm.c: (struct write_case_data) New structure.
4141         (proc_func) Removed.
4142         (virt_proc_func) Removed.
4143         (begin_func) Removed.
4144         (virt_begin_func) Removed.
4145         (end_func) Removed.
4146         (write_case) Removed.
4147         (procedure) Added an auxiliary parameter to each function pointer
4148         argument's prototype.  Added an auxiliary data parameter.
4149         Rewrote.
4150         (process_active_file) Ditto.
4151         (process_active_file_write_case) Pass aux data along.
4152         (close_active_file) Ditto.
4153         (procedure_write_case) Ditto.
4154         (SPLIT_FILE_procfunc) Ditto.
4155
4156         * vfm.h: (typedef write_case_data) New.
4157         (typedef write_case_func) New.
4158         (struct case_stream) Add parameters to `read' member prototype.
4159         
4160 Thu Feb 12 19:24:53 WST 2004 John Darrington <john@darrington.wattle.id.au>
4161
4162         * t-test.q:  Added calculations for independent samples. (But no Levene
4163         test yet!)
4164
4165         * Makefile.am: Moved q_sources_c into own variable 
4166
4167 Wed Feb 11 23:56:51 2004  Ben Pfaff  <blp@gnu.org>
4168
4169         Miscellaneous cleanups.
4170         
4171         * Change unused to UNUSED in many source files to reflect modified
4172         pref.h.  Change use of __WIN32__, __MSDOS, __DJGPP__,
4173         __CYGWIN32__, __unix__, and unix not to assume that they're
4174         defined to a nonzero value.  Change use of __attribute__ to use
4175         NO_RETURN or PRINTF_FORMAT instead.
4176         
4177         * alloc.h: Move definitions for local_alloc(), local_free() here
4178         from ../pref.h.orig and simplify.
4179
4180         * expr-evl.c: Instead of working differently based on PAGED_STACK,
4181         use a pool allocator unconditionally.
4182         (CHECK_STRING_SPACE) Removed.
4183         (ALLOC_STRING_SPACE) Removed.
4184         (expr_evaluate) Use e->pool instead of CHECK_STRING_SPACE and
4185         ALLOC_STRING_SPACE.
4186
4187         * expr-opt.c: (dump_expression) Allocate string pool.
4188
4189         * expr-prs.c: (expr_free) Free string pool.
4190
4191         * pool.c: (pool_destroy) This pool must be removed from its
4192         parent's list of gizmos, not from its own.  Use free_all_gizmos().
4193         (pool_clear) New function.
4194         (free_all_gizmos) New function.
4195         (pool_alloc) Use space in empty block after this one if any.
4196         (pool_release) Only empty out blocks, don't actually free() them.
4197
4198         * print.c: Get rid of PAGED_STACK special case by always
4199         dynamically allocating line buffers.
4200         (struct print_trns) Always include the `line' member.
4201         (internal_cmd_print) Always initialize the `line' member.
4202         (alloc_line) Always allocate memory for `line'.
4203         (print_trns_proc) Always initialize buf from `line' member.
4204         (print_trns_free) Always free `line' memory.
4205
4206         * sort.c: (allocate_file_handles) Special-case MS-DOS for mkdir()
4207         call.
4208         
4209 Wed Feb 11 20:33:18 2004  Ben Pfaff  <blp@gnu.org>
4210
4211         * flip.c: Fixed crash from FLIP when a numeric variable is
4212           specified on NEWNAMES and a large value is used, and a couple of
4213           other minor bugs besides.
4214           (struct varname) Make name a 9-character fixed-size array
4215           instead of a 1-character variable size array.
4216           (make_new_var) Allow digits in variable names.
4217           (flip_stream_write) Limit numeric values to 8 characters and
4218           format system missing and very large and small values more
4219           appropriately.
4220
4221 Thu Feb  5 13:19:06 WAST 2004 John Darrington <john@darrington.wattle.id.au>
4222
4223         * command.c: Fixed test on command return status for the correct 
4224           value,  which had been causing a crash under certain invalid input.
4225
4226 Wed Feb  4 15:34:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
4227
4228         * t-test.q: Added calculations for the one sample variant of the T-TEST
4229
4230 Tue Feb  3 20:09:54 2004  Ben Pfaff  <blp@gnu.org>
4231
4232         * tab.c: (render_strip) Fix bug that sometimes caused joined text
4233           in joined cells to be rendered outside box boundaries.
4234
4235 Tue Feb  3 18:56:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
4236
4237         * random.c (rng_create): Fixed seeding so that it gets reseeded after
4238         SET seed=xx has been called.
4239
4240 Mon Jan 19 14:08:09 2004  Ben Pfaff  <blp@gnu.org> 
4241
4242         * random.c (rng_get_double): Fix always-returning-zero bug in my
4243         preferred way, and at the same time make sure rounding doesn't
4244         bite us.
4245
4246 Thu Jan  1 23:16:41 2004  Ben Pfaff  <blp@gnu.org>
4247
4248         * html.c: (change_attributes) Dead code, removed.
4249         (escape_string) Eliminate code to call change_attributes() that
4250         never actually called it.
4251         (output_tab_table) Get rid of dependence on tab_hit
4252         and struct tab_joined_cell's hit member, which are abominations.
4253
4254         * tab.c: (tab_output_text) Don't call
4255         d->class->text_set_font_by_name if it's a null pointer.
4256         (macro UNROLL_LOOP) Eliminate.
4257         (macro UNROLL_3_LOOPS) Eliminate.
4258         (tabi_render) Rewrite not to use the above macros.
4259
4260 Thu Jan  1 23:09:07 2004  Ben Pfaff  <blp@gnu.org>
4261
4262         Start working on a new output driver system, one that doesn't suck
4263         so much, by adding a "device-independent" output driver.  The idea
4264         is to write out only a single output stream, then use separate
4265         processes to translate them into whatever formats we want.  This
4266         is similar to how "groff" works with its various output drivers
4267         (grops, grotty, grodvi, ...).
4268         
4269         * Makefile.am: (pspp_SOURCES) Add devind.c, devind.h.
4270
4271         * list.q: (write_all_headers) Stub out devind class.
4272         (clean_up) Ditto.
4273         (determine_layout) Ditto.
4274         (list_cases) Ditto.
4275
4276         * output.c: (outp_init) Add devind class.
4277
4278         * devind.c: New file.
4279
4280         * devind.h: New file.
4281
4282 Thu Jan  1 23:08:14 2004  Ben Pfaff  <blp@gnu.org>
4283
4284         * frequencies.q: (hash_value_alpha) Fixed up the previous change
4285         to use the proper string length.
4286
4287 Wed Dec 31 16:27:33 WAST 2003 John Darrington <john@darrington.wattle.id.au>
4288
4289         * Fixed bug where FREQ would crash on alpha values
4290
4291 Tue Dec 30 22:42:57 2003  Ben Pfaff  <blp@gnu.org>
4292
4293         * Removed bletcherous alloca() workarounds for AIX from top of
4294         many files.  AIX can use the alternative alloca() implementation
4295         instead.
4296
4297 Tue Dec 30 22:35:16 2003  Ben Pfaff  <blp@gnu.org>
4298
4299         * ascii.c: (ascii_option) Fix implementation of headers option.
4300
4301 Tue Dec 30 22:32:53 2003  Ben Pfaff  <blp@gnu.org>
4302
4303         * ascii.c: Add a "squeeze" option to the ASCII driver to squeeze
4304         multiple blank lines into one.
4305         (struct ascii_driver_ext) Add squeeze_blank_lines option.
4306         (ascii_preopen_driver) Initialize squeeze_blank_lines.
4307         (static var option_tab) Add squeeze entry.
4308         (ascii_option) Set squeeze_blank_lines.
4309         (output_lines) Implement squeezing blank lines.
4310
4311 Wed Dec 31 07:19:46 WST 2003 John Darrington <john@darrington.wattle.id.au>
4312
4313         * Removed redundant code from output.h
4314
4315 Sat Dec 27 22:17:52 2003  Ben Pfaff  <blp@gnu.org>
4316
4317         Dictionary classes: each variable is "ordinary", "system", or
4318         "scratch".
4319
4320         * var.h: (enum dict_class) New enum.
4321
4322         * vars-prs.c: (dict_class_from_id) New function.
4323         (dict_class_to_name) New function.
4324
4325 Sat Dec 27 22:16:06 2003  Ben Pfaff  <blp@gnu.org>
4326
4327         * var.h: (struct freq_tab_set) Removed (not used).
4328
4329 Sat Dec 27 22:15:21 2003  Ben Pfaff  <blp@gnu.org>
4330
4331         * value-labels.c: (val_labs_destroy) vls needs to be freed too.
4332
4333 Sat Dec 27 22:10:49 2003  Ben Pfaff  <blp@gnu.org>
4334
4335         * stats.c: (hypercube) Rename pow4().  All references updated.
4336
4337 Sat Dec 27 22:05:49 2003  Ben Pfaff  <blp@gnu.org>
4338
4339         * rename-vars.c: (cmd_rename_variables) Rewritten.
4340         (compare_name) Removed.
4341
4342 Sat Dec 27 22:03:51 2003  Ben Pfaff  <blp@gnu.org>
4343
4344         var_set feature, and code taking advantage of it.
4345         
4346         * crosstabs.q: (static var var_dict) Removed.
4347         (static var variables) New variable.
4348         (static var variables_cnt) New variable.
4349         (cmd_crosstabs) Free variables instead of var_dict.
4350         (internal_cmd_crosstabs) Initialize and use variables,
4351         variables_cnt instead of var_dict.
4352         (free_var_dict) Removed.
4353         (crs_custom_tables) Use var_set instead of a copied dictionary.
4354         (crs_custom_variables) Set up variables, variables_cnt instead of
4355         var_dict.
4356         [DEBUGGING] (debug_print) Ditto.
4357
4358         * means.q: (mns_custom_tables) Use var_set instead of a copied
4359         dictionary.
4360
4361         * vars-prs.c: (parse_vs_variable) New function.
4362         (parse_dict_variable) Rewritten.
4363         (parse_variable) Rewritten.
4364         (parse_variables) Renamed parse_var_set_vars(), rewritten.
4365         (parse_variables) New function in terms of parse_var_set_vars().
4366         Now requires its first argument to be non-null.  All references
4367         that passed a null pointer updated to pass default_dict instead.
4368         (macro id_dict) Removed.
4369         (parse_DATA_LIST_vars) Add assertions.
4370         (parse_mixed_vars) Ditto.
4371         (struct var_set) New structure.
4372         (var_set_get_cnt) New function.
4373         (var_set_get_var) New function.
4374         (var_set_lookup_var) New function.
4375         (var_set_destroy) New function.
4376         (dict_var_set_get_cnt) New function.
4377         (dict_var_set_get_var) New function.
4378         (dict_var_set_lookup_var) New function.
4379         (dict_var_set_destroy) New function.
4380         (var_set_create_from_dict) New function.
4381         (struct array_var_set) New structure.
4382         (array_var_set_get_cnt) New function.
4383         (array_var_set_get_var) New function.
4384         (array_var_set_lookup_var) New function.
4385         (array_var_set_destroy) New function.
4386         (var_set_create_from_array) New function.
4387
4388         * q2c.c: (dump_parser) Use parse_variables(default_dict, ...)
4389         instead of parse_variables(NULL, ...) in output code.
4390
4391 Sat Dec 27 21:38:53 2003  Ben Pfaff  <blp@gnu.org>
4392
4393         Change inp_init from a 2-bit vector to an ordinary array.
4394         Initialize it all in cmd_end_input_program() instead of in
4395         create_variable().
4396
4397         * inpt-pgm.c: (enum value_init_type) New enum.
4398         (global var inp_init) Change to `enum value_init_type *', make
4399         static.
4400         (inp_init_size) Removed.
4401         (inp_nval) Change to `size_t', make static.
4402         (cmd_input_program) Don't initialize inp_init or inp_init_size.
4403         (cmd_end_input_program) Initialize inp_init, inp_nval.
4404         (init_case) Rewrite.
4405         (clear_case) Rewrite.
4406
4407         * inpt-pgm.h: Removed.
4408
4409 Sat Dec 27 21:36:38 2003  Ben Pfaff  <blp@gnu.org>
4410
4411         * hash.c: (hsh_hash_bytes) Use Fowler-Noll-Vo hash instead of
4412         Colin Plumb hash.  It is simpler and should better resist
4413         collisions.
4414         (hsh_hash_string) Ditto.
4415
4416 Sat Dec 27 21:34:57 2003  Ben Pfaff  <blp@gnu.org>
4417
4418         * get.c: (export_write_case_func) Remove debug printing code.
4419
4420 Sat Dec 27 21:11:09 2003  Ben Pfaff  <blp@gnu.org>
4421
4422         * get.c: (cmd_save_internal) Rename parameter.  Use &t->h instead
4423         of cast.
4424         (save_write_case_func) Use &trns->h instead of cast.
4425         (cmd_export) Use &t->h instead of cast.
4426
4427 Sat Dec 27 20:57:42 2003  Ben Pfaff  <blp@gnu.org>
4428
4429         Moved vectors into the dictionary.
4430
4431         * var.h: (struct vector) Moved here from vector.h.  `index' member
4432         renamed `idx', `v' renamed `var', `nv' renamed `cnt'.  All
4433         references updated.
4434         
4435         * vector.h: Removed.
4436
4437         * vector.c: (global var vec) Removed.
4438         (global var nvec) Removed.
4439         (cmd_vector) Rewritten.
4440         (find_vector) Removed.
4441
4442         * dictionary.c: (dict_create_vector) New function.
4443         (dict_get_vector) New function, replaces reading global vec[]
4444         array.
4445         (dict_get_vector_cnt) New function, replaces reading global nvec
4446         variable.
4447         (dict_lookup_vector) New function, replaces find_vector().
4448         (dict_clear_vectors) New function.
4449
4450 Sat Dec 27 20:54:01 2003  Ben Pfaff  <blp@gnu.org>
4451
4452         Start to move away from `struct variable' p `union' member to void
4453         * aux member.
4454
4455         * var.h: (struct variable) Add `aux' member.
4456
4457 Sat Dec 27 20:36:25 2003  Ben Pfaff  <blp@gnu.org>
4458
4459         Get rid of struct variable `foo' member.
4460
4461         * frequencies.q: (internal_cmd_frequencies) Use p.frq.used instead
4462         of foo.
4463         (frq_custom_variables) Ditto.
4464         (frq_custom_grouped) Ditto.
4465
4466         * get.c: (struct save_trns) Change `var' member from `int *' to
4467         `struct variable **'.
4468         (cmd_save_internal) Use aux instead of foo.
4469         (save_trns_proc) Use revised `var' member.
4470         (static var mtf_seq_no) Renamed mtf_seq_num.
4471         (static var mtf_seq_nums) New static var.
4472         (cmd_match_files) Initialize mtf_seq_nums.
4473         (mtf_free) Free mtf_seq_nums.
4474         (mtf_processing) Use mtf_seq_nums instead of foo.
4475         (mtf_merge_dictionary) No need to initialize mv->foo.
4476         (cmd_export) Use aux instead of foo.  Use revised `var' member.
4477         (mns_custom_tables) Don't use foo to check for duplicates, that's
4478         what PV_NO_DUPLICATE is for.
4479
4480         * var.h: (struct variable) Remove `foo' member.
4481         (struct frequencies_proc) New member.
4482         
4483 Sat Dec 27 19:46:13 2003  Ben Pfaff  <blp@gnu.org>
4484
4485         Clean up COMPUTE and IF.
4486
4487         * compute.c: More or less rewrite the darn thing.
4488         (struct compute_trns) Rename and reorder and add and delete
4489         members.
4490         (cmd_compute) Rewrite.
4491         (compute_num) Make conditional on test expression.  Now used for
4492         both COMPUTE and IF.
4493         (compute_num_vec) Ditto.
4494         (compute_str) Ditto.
4495         (compute_str_vec) Ditto.
4496         (cmd_if) Rewrite.
4497         (if_num) Removed.
4498         (if_num_vec) Removed.
4499         (if_str) Removed.
4500         (if_str_vec) Removed.
4501         (parse_target_expression) Renamed parse_rvalue_expression(),
4502         rewritten.
4503         (new_trns) Renamed compute_trns_create(), rewritten.
4504         (delete_trns) Removed.
4505         (free_trns) Renamed compute_trns_free(), rewritten.
4506         (struct lvalue) New structure.
4507         (parse_var_or_vec) Renamed lvalue_parse(), rewritten.
4508         (lvalue_get_type) New function.
4509         (lvalue_is_vector) New function.
4510         (lvalue_finalize) New function.
4511         (lvalue_destroy) New function.
4512         
4513 Sat Dec 27 19:44:14 2003  Ben Pfaff  <blp@gnu.org>
4514
4515         * command.def: Disallow MODIFY VARS in input mode, so that
4516         variables can't get dropped and confuse cmd_end_input_program()'s
4517         attempt to fill inp_init[].
4518         
4519         * modify-vars.c: (static var forward_positional_ordering) New
4520         variable.
4521         (struct var_modification) Entirely changed.
4522         (rearrange_dict) Interface changed, rewritten.
4523         (cmd_modify_vars) Deal with modified struct var_modification, much
4524         rewritten.
4525         (struct var_renaming) New structure.
4526         (compare_var_renaming_by_new_name) New function.
4527         (validate_var_modification) New function.
4528
4529         * var.h: (struct modify_vars_proc) Removed.
4530         (struct variable) Removed member p.mfv.
4531
4532 Sat Dec 27 19:40:26 2003  Ben Pfaff  <blp@gnu.org>
4533
4534         Make EVALUATE a valid command whether we're debugging or not, so
4535         that `make check' can succeed regardless of whether debugging is
4536         turned on.
4537         
4538         * command.def: [GLOBAL_DEBUGGING] Drop the #if.
4539
4540         * compute.c: [GLOBAL_DEBUGGING] (cmd_evaluate) Drop the #if.
4541
4542 Sat Dec 27 19:34:40 2003  Ben Pfaff  <blp@gnu.org>
4543
4544         * apply-dict.c: (cmd_apply_dictionary) Replace a ghastly switch
4545         statement by a simple if test.
4546
4547         * dfm.c: (dfm_get_record) Add assertion.
4548
4549 Sat Dec 27 17:51:26 2003  Ben Pfaff  <blp@gnu.org>
4550
4551         For each file x.c, move #include "x.h" to the very top of the
4552         include list, to catch x.h failing to include the proper headers.
4553
4554 Sat Dec 27 17:50:19 2003  Ben Pfaff  <blp@gnu.org>
4555
4556         * algorithm.c: (find) New function.
4557         (remove_equal) New function.
4558         (set_difference) New function.
4559         (adjacent_find_equal) New function.
4560         [TEST_UNIQUE] Removed test case.
4561         (copy_if) Find end test.
4562
4563 Sat Dec 27 17:42:45 2003  Ben Pfaff  <blp@gnu.org>
4564
4565         * dictionary.c: (dict_get_case_weight) New convenience function.
4566
4567         * aggregate.c: (accumulate_aggregate_info) Use
4568         dict_get_case_weight().
4569
4570         * frequencies.q: (calc_general) Ditto.
4571         (calc_integer) Ditto.
4572         (calc) Ditto.
4573
4574         * t-test.q: (groups_calc) Ditto.
4575         (z_calc) Ditto.
4576
4577 Sat Dec 27 17:29:45 2003  Ben Pfaff  <blp@gnu.org>
4578
4579         * glob.c: (global var default_dict) Change from `struct
4580         dictionary' to `struct dictionary *'.  All references changed.
4581         (init_glob) Initialize default_dict with dict_create().
4582
4583 Sat Dec 27 17:06:06 2003  Ben Pfaff  <blp@gnu.org>
4584
4585         struct dictionary now made opaque.  All related functions:
4586
4587         * get.c: (rename_variables) Removed.
4588         (dict_delete_run) Removed.
4589         
4590         * temporary.c: (copy_variable) Removed.
4591         (new_dictionary) Removed.
4592         (save_dictionary) Removed.
4593         (restore_dictionary) Removed.
4594         (free_dictionary) Removed.
4595
4596         * vars-atr.c: (clear_default_dict) Removed.
4597         (find_variable) Removed.
4598         (find_dict_variable) Removed.
4599         (create_variable) Removed.
4600         (delete_variable) Removed.
4601         (common_init_stuff) Removed.
4602         (init_variable) Removed.  Updating of inp_init moved into
4603         cmd_end_input_program().
4604         (replace_variable) Removed.
4605         (rename_variable) Removed.
4606         (clear_variable) Removed.
4607         (dup_variable) Removed.
4608
4609         * vars-prs.c: (is_varname) Removed.
4610         (is_dict_varname) Removed.
4611         (fill_all_vars) Removed.
4612
4613         * vector.c: (find_vector) Removed.
4614
4615         * weight.c: (stop_weighting) Removed.
4616
4617         * dictionary.c: New file.
4618         (dict_create) New, replaces new_dictionary().
4619         (dict_clone) New, replaces save_dictionary() and
4620         restore_dictionary().
4621         (dict_clear) New, replaces clear_default_dict().
4622         (dict_destroy) New, replaces free_dictionary().
4623         (dict_get_var_cnt) New function, replaces references to
4624         dict->nvar.
4625         (dict_get_var) New function, replaces references to dict->var[i].
4626         (dict_get_vars) New function, replaces fill_all_vars().
4627         (dict_create_var) New, replaces create_variable().  Interface
4628         drops `type' parameter, using a zero `width' to designate numeric.
4629         (dict_clone_var) New, replaces dup_variable().
4630         (dict_rename_var) New, replaces rename_variable().
4631         (dict_lookup_var) New, replaces find_variable(),
4632         find_dict_variable(), is_varname().
4633         (dict_contains_var) New function.
4634         (compare_variable_dblptrs) New function.
4635         (dict_delete_var) New function, replaces clear_variable().
4636         (dict_delete_vars) New function, replaces dict_delete_run().
4637         (dict_reorder_vars) New function.
4638         (dict_rename_vars) New function, replaces rename_variables().
4639         (dict_get_weight) New function, replaces reading dict->weight_var.
4640         (dict_set_weight) New function, replaces writing dict->weight_var
4641         or calling stop_weight(dict).
4642         (dict_get_filter) New function, replaces reading dict->filter_var.
4643         (dict_set_filter) New function, replaces writing dict->filter_var.
4644         (dict_get_case_limit) New function, replaces reading dict->N.
4645         (dict_set_case_limit) New function, replaces writing dict->N.
4646         (dict_get_value_cnt) New function, replaces reading dict->nval.
4647         (dict_compact_values) New function, replaces a loop that was
4648         replicated in several places.
4649         (dict_get_split_vars) New function, replaces reading dict->splits.
4650         (dict_get_split_cnt) New function, replaces reading
4651         dict->n_splits.
4652         (dict_set_split_vars) New function, replaces writing dict->splits.
4653         (dict_get_label) New function, replaces reading dict->label.
4654         (dict_set_label) New function, replaces writing dict->label.
4655         (dict_get_documents) New function, replaces reading
4656         dict->documents.
4657         (dict_set_documents) New function, replaces writing
4658         dict->documents.
4659         
4660         All references to above functions updated.
4661         
4662         * aggregate.c: (cmd_aggregate) Copy file label and documents from
4663         old dictionary to new by hand, because dict_create() can't do it
4664         itself.  Use dict_set_documents(), dict_set_split_vars().
4665
4666         * temporary.c: (cancel_temporary) Also set temp_dict to NULL after
4667         calling dict_destroy().
4668
4669         * data-list.c: (dls_var_spec) Remove `type' member, replace by
4670         `width'.
4671         (fixed_parse_compatible) Some slightly nontrivial changes for
4672         dict_create_var().
4673         (dump_fmt_list) Ditto.
4674         (parse_free) Ditto.
4675
4676         * file-type.c: (create_col_var) Ditto.
4677
4678         * get.c: (cmd_get) Use dict_compact_values() instead of a loop.
4679         (trim_dictionary) Use dict_delete_vars(), dict_reorder_vars().
4680         (rename_variables) Use dict_rename_vars().
4681         (mtf_merge_dictionary) Use dict_get_documents(),
4682         dict_set_documents(), dict_compact_values().
4683
4684         * pfm-read.c: (read_variables) Deal with changes to weighting.
4685
4686         * q2c.c: (dump_parser) Use dict_lookup_var() instead of
4687         is_varname() in output code.
4688
4689         * sfm-read.c: (read_header) Use dict_create(), dict_set_label(),
4690         other dictionary functions.
4691
4692         * title.c: (add_document_line) Use dict_get_documents(),
4693         dict_set_documents().
4694
4695         * vars-atr.c: (discard_variables) Use dict_clear(default_dict),
4696         reset default_handle by hand.  dict_clear() will clear vectors so
4697         there's no need for that by hand.
4698
4699         * vfm.c: (close_active_file) Move call to finish_compaction()
4700         earlier, so that we can do the compaction as a single step using
4701         dict_compact_values().  Use dict_clear_vectors().
4702         (finish_compaction) Use dict_delete_var(), dict_compact_values().
4703                 
4704         Some functions don't have replacements:
4705
4706         * vars-atr.c: (force_create_variable) Removed.  All references
4707         updated to dict_create_var() followed by an assertion.
4708         (force_dup_variable) Removed.  All references updated to
4709         dict_clone_var() followed by an assertion.
4710         
4711         * weight.c: (update_weighting) Removed.  No longer necessary, so
4712         all references removed.
4713
4714 Sat Dec 27 16:43:01 2003  Ben Pfaff  <blp@gnu.org>
4715
4716         Clean up AGGREGATE.
4717         
4718         * aggregate.c: Eliminate separation of weighted and unweighted
4719         case.  It made the code too obscure and I doubt it was actually
4720         faster.  Instead, all code uses the "weighted" code, because
4721         that's a generalization of the "unweighted" code.
4722         (FWEIGHT) Removed.
4723         (FOPTIONS) Ditto.
4724         (parse_aggregate_functions) No need to set FWEIGHT.
4725         (accumulate_aggregate_info) Get rid of FWEIGHT cases.
4726         (dump_aggregate_info) Ditto.
4727         (initialize_aggregate_info) No need for special plain_function
4728         that gets rid of FWEIGHT option.
4729
4730         * aggregate.c: Get rid of approximations.
4731         (accumulate_aggregate_info) Don't use approx_gt(), approx_lt(),
4732         approx_in_range().
4733         (aggregate_single_case) Don't use approx_ne().
4734
4735 Sat Dec 27 16:19:36 2003  Ben Pfaff  <blp@gnu.org>
4736
4737         * ascii.c (ascii_line_width): Dead code, removed.
4738
4739         * postscript.c (ps_line_width): Ditto.
4740
4741         * q2c.c (xrealloc): Ditto.
4742
4743         * count.c (internal_cmd_count): Ditto.
4744
4745         * means.q (validate_dependent_endpoint): Ditto.
4746
4747         * set.q: (cmd_gset) Ditto.
4748
4749         * weight.c: [0] (weight_trns_proc) Ditto.
4750
4751 Sat Dec 27 16:18:16 2003  Ben Pfaff  <blp@gnu.org>
4752
4753         Make the code -Wmissing-prototypes clean.
4754
4755         * Makefile.am (version.c): Add #include "version.h".
4756         
4757         * ascii.c: (ascii_open_global) Make static.
4758         (ascii_close_page) Ditto.
4759         (ascii_font_sizes) Ditto.
4760         (ascii_postopen_driver) Ditto.
4761         (ascii_close_driver) Ditto.
4762         (ascii_option) Ditto.
4763         (ascii_open_page) Ditto.
4764         (ascii_line_horz) Ditto.
4765         (ascii_line_vert) Ditto.
4766         (ascii_line_intersection) Ditto.
4767         (ascii_box) Ditto.
4768         (ascii_polyline_begin) Ditto.
4769         (ascii_polyline_point) Ditto.
4770         (ascii_polyline_end) Ditto.
4771         (ascii_text_set_font_by_name) Ditto.
4772         (ascii_text_set_font_by_position) Ditto.
4773         (ascii_text_set_font_by_family) Ditto.
4774         (ascii_text_get_font_name) Ditto.
4775         (ascii_text_get_font_family) Ditto.
4776         (ascii_text_set_size) Ditto.
4777         (ascii_text_get_size) Ditto.
4778         (ascii_text_metrics) Ditto.
4779         (ascii_text_draw) Ditto.
4780         (ascii_close_page) Ditto.
4781
4782         * cmdline.h: New header for parse_command_line().  Used where
4783         needed.
4784
4785         * command.c: Move prototypes for cmd_*() functions to command.h.
4786
4787         * command.h: Prototypes for cmd_*() functions moved here from
4788         command.c.
4789
4790         * crosstabs.q: (gamma_int) Ditto.
4791
4792         * file-handle.h: Add fh_init_files() prototype.
4793         
4794         * getline.c: (welcome) Ditto.
4795
4796         * glob.h: New header for init_glob().  Used where appropriate.
4797
4798         * hash.c: (comparison_helper) Ditto.
4799
4800         * html.c: (html_open_global) Ditto.
4801         (html_close_global) Ditto.
4802         (html_preopen_driver) Ditto.
4803         (html_postopen_driver) Ditto.
4804         (html_close_driver) Ditto.
4805         (html_option) Ditto.
4806         (html_open_page) Ditto.
4807         (html_close_page) Ditto.
4808         (html_submit) Ditto.
4809
4810         * inpt-pgm.c: (input_program_source_read) Ditto.
4811
4812         * output.c: (find_defn_value) Ditto.
4813         (destroy_list) Ditto.
4814
4815         * pfm-read.c: (read_int) Ditto.
4816
4817         * postscript.c: (ps_open_global) Ditto.
4818         (ps_close_global) Ditto.
4819         (ps_font_sizes) Ditto.
4820         (ps_preopen_driver) Ditto.
4821         (ps_postopen_driver) Ditto.
4822         (ps_close_driver) Ditto.
4823         (ps_option) Ditto.
4824         (ps_open_page) Ditto.
4825         (ps_close_page) Ditto.
4826         (ps_line_horz) Ditto.
4827         (ps_line_vert) Ditto.
4828         (ps_line_intersection) Ditto.
4829         (ps_box) Ditto.
4830         (ps_polyline_begin) Ditto.
4831         (ps_polyline_point) Ditto.
4832         (ps_polyline_end) Ditto.
4833         (ps_text_set_font_by_name) Ditto.
4834         (ps_text_set_font_by_position) Ditto.
4835         (ps_text_set_font_family) Ditto.
4836         (ps_text_get_font_name) Ditto.
4837         (ps_text_get_font_family) Ditto.
4838         (ps_text_set_size) Ditto.
4839         (ps_text_get_size) Ditto.
4840         (ps_text_metrics) Ditto.
4841         (ps_text_draw) Ditto.
4842
4843         * q2c.c: (finish_up) Ditto.
4844         (xmalloc) Ditto.
4845         (xstrdup) Ditto.
4846         (get_buffer) Ditto.
4847         (st_lower) Ditto.
4848         (st_upper) Ditto.
4849         (skip_ws) Ditto.
4850         (get_line) Ditto.
4851         (add_symbol) Ditto.
4852         (find_symbol) Ditto.
4853         (lex_get) Ditto.
4854         (force_id) Ditto.
4855         (force_string) Ditto.
4856         (match_id) Ditto.
4857         (match_token) Ditto.
4858         (skip_token) Ditto.
4859         (parse) Ditto.
4860         (parse_setting) Ditto.
4861         (parse_specifier) Ditto.
4862         (parse_specifiers) Ditto.
4863         (parse_subcommand) Ditto.
4864         (dump_specifier_vars) Ditto.
4865         (is_keyword) Ditto.
4866         (make_identifier) Ditto.
4867         (dump_declarations) Ditto.
4868         (dump_specifier_init) Ditto.
4869         (dump_vars_init) Ditto.
4870         (make_match) Ditto.
4871         (dump_specifier_parse) Ditto.
4872         (dump_subcommand) Ditto.
4873         (dump_parser) Ditto.
4874         (dump_header) Ditto.
4875         (dump_free) Ditto.
4876         (recognize_directive) Ditto.
4877
4878         * recode.c: (string_to_long) Ditto.
4879
4880         * repeat.c: (find_DO_REPEAT_substitution) Ditto.
4881
4882         * repeat.h: New header for perform_DO_REPEAT_substitutions, used
4883         where appropriate.
4884
4885         * sort.c: (sort_stream_read) Ditto.
4886         (sort_stream_mode) Ditto.
4887         
4888 Fri Dec 19 23:35:04 2003  Ben Pfaff  <blp@gnu.org>
4889
4890         * algorithm.c (binary_search): Fix comparison.
4891
4892 Fri Dec 19 23:27:45 2003  Ben Pfaff  <blp@gnu.org>
4893
4894         * algorithm.c: (binary_search) Fix assertion.
4895
4896 Fri Dec 19 21:31:48 2003  Ben Pfaff  <blp@gnu.org>
4897
4898         * sysfile-info.c: (compare_vectors_by_name) Rewrite.
4899
4900 Fri Dec 19 21:30:24 2003  Ben Pfaff  <blp@gnu.org>
4901
4902         * sort.c: (compare_case_lists) Rewrite.
4903
4904 Fri Dec 19 16:44:22 2003  Ben Pfaff  <blp@gnu.org>
4905
4906         * quicksort.c: Removed (not used).
4907
4908         * quicksort.h: Removed (not used).
4909
4910         * sort.c: Removed blp_quicksort() prototype.
4911
4912 Fri Dec 19 16:42:13 2003  Ben Pfaff  <blp@gnu.org>
4913
4914         * postscript.c: (int_2_compare) Rewrite.
4915         (compare_line) Rewrite.
4916
4917 Fri Dec 19 16:38:35 2003  Ben Pfaff  <blp@gnu.org>
4918
4919         * matrix-data.c (compare_factors) Use lexicographical_compare()
4920         algorithm.
4921         (compare_doubles) New function.
4922         
4923         * algorithm.c: (lexicographical_compare) New algorithm.
4924
4925 Fri Dec 19 16:23:45 2003  Ben Pfaff  <blp@gnu.org>
4926
4927         * matrix-data.c (compare_variables_by_mxd_vartype): Rewrite.
4928
4929 Fri Dec 19 15:54:45 2003  Ben Pfaff  <blp@gnu.org>
4930
4931         * expr-prs.c: (cmp_func) Removed.
4932         (parse_function) Use binary_search() algorithm.
4933         (compare_functions) New function.
4934         (init_func_tab) Use sort() algorithm.
4935
4936         * algorithm.c: (binary_search) New algorithm.
4937
4938 Fri Dec 19 15:50:45 2003  Ben Pfaff  <blp@gnu.org>
4939
4940         * descript.q: (display) Use sort() algorithm instead of qsort().
4941         (compare_func) Removed.
4942         (descriptives_compare_variables) New function.
4943
4944 Fri Dec 19 15:08:38 2003  Ben Pfaff  <blp@gnu.org>
4945
4946         Get rid of AVL trees.  Hashes are more appropriate for everything
4947         PSPP does.
4948
4949         * Makefile.am: (pspp_SOURCES) Remove avl.c, avl.h.
4950         
4951         * avl.c: Removed.
4952
4953         * avl.h: Removed.
4954
4955 Fri Dec 19 14:33:31 2003  Ben Pfaff  <blp@gnu.org>
4956
4957         Much code can be clarified by using C++ STL-like algorithms.  Not
4958         all uses of these algorithms are listed below, only the ones where
4959         the change to an algorithm was the only change of interest.
4960         
4961         * Makefile.am: (pspp_SOURCES) Add algorithm.c, algorithm.h.
4962         
4963         * algorithm.c: New file.
4964
4965         * algorithm.h: New file.
4966
4967         * modify-vars.c: (static var forward) Removed.
4968         (static var positional) Removed.
4969         (compare_variables) Removed.
4970         (struct ordering) New.
4971         (cmd_modify_vars) Use sort() algorithm.
4972         (compare_variables_given_ordering) New function.
4973         (rearrange_dict) Use sort() algorithm.
4974
4975         * sysfile-info.c: (cmd_display) Use sort() algorithm.
4976         (cmp_var_by_name) Removed.
4977
4978 Fri Dec 19 14:26:17 2003  Ben Pfaff  <blp@gnu.org>
4979
4980         Make file handles use a hash table.
4981         
4982         * file-handle.q: (files) Change to hash table, make static.
4983         (cmd_file_handle) Use hash table functions.
4984         (fh_get_handle_by_filename) Ditto.
4985         (fh_get_handle_by_name) Ditto.
4986         (hash_file_handle) New function.
4987         (cmp_file_handle) Rewrite.
4988         (fh_init_files) Use hash table functions.
4989
4990 Fri Dec 19 14:24:38 2003  Ben Pfaff  <blp@gnu.org>
4991
4992         Clean up FREQUENCIES.
4993         
4994         * Makefile.am: (pspp_SOURCES) Remove frequencies.g.
4995
4996         * frequencies.q: Remove a lot of old #if'd out code at the end.
4997         (internal_cmd_frequencies) Use calc() instead of calc_no_weight()
4998         or calc_weight().  Initialize percentile_values.
4999         (calc) New function based on calc_weight() from frequencies.g.
5000         (precalc) Use hash functions.
5001         (static var comparison_func) Removed.
5002         (static var comparison_param) Removed.
5003         (comparison_helper) Removed.
5004         (get_freq_comparator) New function.
5005         (not_missing) New function.
5006         (add_freq) Removed.
5007         (postprocess_freq_tab) Use hash table functions, algorithms,
5008         get_freq_comparator().  Rewrite.
5009         (cleanup_freq_tab) Rephrase.
5010         (add_percentile) Clean up spacing.
5011         (hash_value_numeric) New function.
5012         (hash_value_alpha) New function.
5013         (compare_value_numeric_a) Rewrite.
5014         (compare_value_alpha_a) Rewrite.
5015         (compare_value_numeric_d) Rewrite.
5016         (compare_value_alpha_d) Rewrite.
5017         (compare_freq_numeric_a) Rewrite.
5018         (compare_freq_alpha_a) Rewrite.
5019         (compare_freq_numeric_d) Rewrite.
5020         (compare_freq_alpha_d) Rewrite.
5021         (calc_stats) Clean up mode, percentiles, max.
5022         (dump_statistics) Clean up spacing.
5023         
5024         * frequencies.g: Removed.
5025
5026         * var.h: (struct freq_tab) Change `data' to hash table.
5027
5028 Fri Dec 19 14:15:46 2003  Ben Pfaff  <blp@gnu.org>
5029
5030         * file-handle.h: Remove declaration of global variable `files',
5031         which wasn't used anywhere.
5032
5033         * postscript.c: (add_encoding) Remove superfluous cast.
5034         (line) Ditto.
5035
5036         * sfm-read.c: [linux] (bswap_int32) Drop ntohl() non-portable
5037         version.
5038
5039         * temporary.c: [0] (display_tree) Removed.
5040
5041 Fri Dec 19 14:13:04 2003  Ben Pfaff  <blp@gnu.org>
5042
5043         Implement a new random number generator based on the alleged RC4
5044         algorithm.
5045
5046         * expr-evl.c: (expr_evaluate) Use rng_get_double_normal() instead
5047         of rand_normal().
5048
5049         * random.c: [!HAVE_GOOD_RANDOM] (real_rand) Removed.
5050         [!HAVE_GOOD_RANDOM] (real_srand) Removed.
5051         (macro k) Removed.
5052         (static var V[]) Removed.
5053         (static var Y) Removed.
5054         (static var X2) Removed.
5055         (setup_randomize) Removed.
5056         (shuffle) Removed.
5057         (rand_uniform) Removed.
5058         (rand_normal) Removed.
5059         (struct rng) New structure.
5060         (rng_create) New function.
5061         (rng_destroy) New function.
5062         (swap_byte) New static function.
5063         (rng_seed) New function.
5064         (rng_get_bytes) New function.
5065         (rng_get_int) New function.
5066         (rng_get_unsigned) New function.
5067         (rng_get_double) New function.
5068         (rng_get_double_normal) New function.
5069         (pspp_rng) New function.
5070
5071         * random.h: Sync up to random.c.
5072
5073         * sample.c: (struct sample_trns) Make `frac' unsigned and a
5074         fraction of UINT_MAX, not 65536.
5075         (cmd_sample) Use rng_get_unsigned(), rng_get_double(), UINT_MAX
5076         fraction.
5077
5078         * vfm.c: (open_active_file) No need to call setup_randomize() any
5079         longer.
5080
5081 Fri Dec 19 12:05:56 2003  Ben Pfaff  <blp@gnu.org>
5082
5083         Change dictionary name indexes to use hash tables instead of AVL
5084         trees.
5085
5086         * crosstabs.q: (free_var_dict) Use hash tables.
5087         (crs_custom_tables) Ditto.
5088         (calc_general) Ditto.
5089         (compare_table_entry) Rewrite.
5090         (enum_var_values) Reorder parameters.  All references updated.
5091         Rewrite.
5092
5093         * get.c: (rename_variable) Use hash tables.
5094         (mtf_merge_dictionary) Ditto.
5095
5096         * glob.c: (init_glob) Use hash tables.
5097         (cmp_variable) Removed.
5098
5099         * means.q: (mns_custom_tables) Use hash tables.
5100
5101         * modify-vars.c: (rearrange_dict) Use hash tables.
5102
5103         * rename-vars.c: (cmd_rename_variables) Use hash tables.
5104
5105         * sfm-read.c: (read_header) Use hash tables.
5106         (read_variables) Ditto.
5107
5108         * temporary.c: (new_dictionary) Use hash tables.
5109         (save_dictionary) Ditto.
5110         (restore_dictionary) Ditto.
5111
5112         * var.h: (struct dictionary) Change AVL tree `var_by_name' into
5113         hash table `name_tab'.
5114
5115         * vars-atr.c: [DEBUGGING] (dump_one_var_node) Removed.
5116         [DEBUGGING] (dump_var_tree) Removed.
5117         (find_variable) Use hash tables.
5118         (find_dict_variable) Ditto.
5119         (common_init_stuff) Ditto.
5120         (rename_variable) Ditto.
5121         (clear_variable) Ditto.  Also, remove debug code.
5122         (dup_variable) Use hash tables.
5123
5124         * vars-prs.c: (fill_all_vars) Use hash tables.
5125         (is_dict_varname) Ditto.
5126         (parse_dict_variable) Ditto.
5127         
5128 Fri Dec 19 11:46:23 2003  Ben Pfaff  <blp@gnu.org>
5129
5130         Change value labels to use hash tables instead of AVL trees, and
5131         change value labels into an ADT.
5132
5133         * Makefile.am: (pspp_SOURCES) Add value-labels.c, value-labels.h.
5134         
5135         * value-labels.c: New file.
5136
5137         * value-labels.h: New file.
5138
5139         * apply-dict.c: (cmd_apply_dictionary) Use value label ADT.
5140         Get rid of a stupid use of goto.
5141
5142         * autorecode.c: (compare_alpha_value) Rewrite.
5143         (hash_alpha_value) Ditto.
5144         (compare_numeric_value) Rewrite.
5145         (hash_numeric_value) Ditto.
5146
5147         * frequencies.q: (dump_full) Use value label ADT.
5148
5149         * pfm-read.c: (read_value_label) Use value label ADT.
5150
5151         * pfm-write.c: (write_value_labels) Use value label ADT.
5152
5153         * sfm-read.c: (read_variables) Use value label ADT.
5154         (read_value_labels) Rewrite.
5155
5156         * sfm-write.c: (write_value_labels) Rewrite.
5157
5158         * sysfile-info.c: (cmd_sysfile_info) Use value label ADT.
5159         (display_variables) Ditto.
5160         (describe_variable) Ditto.
5161
5162         * t-test.q: (print_t_groups) Use value label ADT.
5163
5164         * temporary.c: (copy_variable) Use value label ADT.
5165         (free_dictionary) Ditto.
5166
5167         * val-labs.c: (verify_val_labs) Use value label ADT.
5168         (get_label) Ditto.
5169         (debug_print) Ditto.
5170         (val_lab_cmp) Removed.
5171         (inc_ref_count) Removed.
5172         (copy_value_labels) Removed.
5173
5174         * var.h: (struct value_label) Removed.
5175         (struct variable) Change AVL tree `val_lab' into hash table
5176         `val_labs'.
5177
5178         * vars-atr.c: (init_variable) Use value label ADT.
5179         (clear_variable) Ditto.
5180         (free_value_label) Removed.
5181         (free_val_lab) Removed.
5182         (get_val_lab) Removed.
5183         (compare_variables) New function.
5184         (hash_variable) New function.
5185
5186         * vfm.c: (dump_splits) Use value label ADT.
5187
5188 Fri Dec 19 11:18:11 2003  Ben Pfaff  <blp@gnu.org>
5189
5190         Add to the hash table interface.
5191
5192         * hash.c: (hsh_hash_bytes) Add assertion.
5193         (hsh_hash_string) Ditto.
5194         (hsh_clear) Ditto.
5195         (hsh_rehash) Ditto.
5196         (hsh_probe) Ditto.
5197         (hsh_create) Ditto.  Also make minimum `size'.
5198         (hsh_destroy) Rephrase.
5199         (sort_nulls_last) Removed.
5200         (not_null) New function.
5201         (hsh_data) Ditto.
5202         (comparison_helper) Ditto.
5203         (hsh_sort) Rewritten.
5204         (hsh_data_copy) New function.
5205         (hsh_sort_copy) Ditto.
5206         (hsh_insert) Ditto.
5207         (hsh_replace) Ditto.
5208         (hsh_hash_double) Ditto.
5209         (hsh_delete) Fix stupid bug.
5210         
5211 Thu Dec 18 12:27:03 WAST 2003 John Darrington <john@darrington.wattle.id.au>
5212         * added a calculation of the mode to FREQUENCIES
5213
5214 Wed Dec 17 12:53:01 WAST 2003 John Darrington <john@darrington.wattle.id.au>
5215
5216         * moved (un)defs of DEBUGGING to config.h
5217
5218 Mon Dec 15 21:35:59 2003  Ben Pfaff  <blp@gnu.org>
5219
5220         * groff-font.c: (add_kern) Fix indentation.
5221         (add_kern) Use & instead of % to take power-of-2 modulus.
5222         (font_get_kern_adjust) Likewise.
5223
5224 Fri Dec 12 23:54:37 2003  Ben Pfaff  <blp@gnu.org>
5225
5226         * autorecode.c: (recode) Replace stupid use of memcpy() by
5227         memberwise copy.
5228         (hash_alpha_value) Use hsh_hash_bytes().  Get rid of nasty casts.
5229         (hash_numeric_value) Ditto.
5230         (autorecode_proc_func) pool_strdup() was wrong here because the
5231         source string was not null-terminated.  Use new pool_strndup()
5232         instead.
5233
5234         * crosstabs.q: (enum_var_values) Remove superfluous and bizarre
5235         use of hsh_iterator_init().
5236
5237         * data-in.c: (parse_N) Initialize i->v->f.
5238
5239         * flip.c: (cmd_flip) Use memmove(), not memcpy(), to copy
5240         overlapping arrays.
5241
5242         * groff-font.c: Use power-of-2 hash table sizes, not prime.
5243         (groff_read_font) Don't call hsh_next_prime().  Don't call
5244         fclose(NULL).
5245         (static var hash) Remove `size_p', `max_used' members.
5246         (font_char_name_to_index) Don't call hsh_next_prime().  Use
5247         hsh_hash_string() instead of hashpjw(), & instead of %.
5248         (default_font) Don't call hsh_next_prime().
5249
5250         * pool.c: (pool_strndup) New function.
5251         (pool_strdup) Reimplement in terms of pool_strndup.
5252
5253         * postscript.c: (hash_font_entry) Use hsh_hash_string().  Get rid
5254         of nasty casts.
5255         (hash_ps_encoding) Use hsh_hash_string().
5256         (hash_ps_combo) Use hsh_hash_string(), hsh_hash_int().
5257         (hash_filename2font) Use hsh_hash_string().
5258
5259         * som.c: Add #include <stdlib.h>.
5260
5261         * tab.c: (tab_destroy) Don't set t->container after freeing `t'
5262         (by destroying its pool).
5263         
5264 Fri Dec 12 23:18:59 2003  Ben Pfaff  <blp@gnu.org>
5265
5266         Miscellaneous hash table code cleanup:
5267         
5268         * hash.h: (struct hsh_table) Moved into hash.c.
5269         (hsh_count) Ditto, and transformed into function.
5270         (hsh_compare_func) New typedef, used for defining otherwise-long
5271         function types here and in hash.c
5272         (hsh_hash_func) Ditto.
5273         (hsh_free_func) Ditto.
5274         
5275         * hash.c: (struct hsh_table) Renamed `n' to `used', `m' to `size',
5276         `table' to `entries'.  Removed `mp'.  All references updated.
5277         (hsh_clear) Don't shrink entries array; if the hash was this big
5278         once, it probably will be again.
5279         (hsh_rehash) Made static.
5280         (force_hsh_insert) Renamed hsh_force_insert.
5281         (force_hsh_find) Renamed hsh_force_find.
5282
5283         Made hash table sizes powers of 2, because that's fine with any
5284         reasonable hash function and because taking a power-of-2 modulus
5285         is faster than any other:
5286         
5287         (hsh_prime_tab) Removed;
5288         (hsh_next_prime) Ditto.
5289         (next_power_of_2) New function.
5290         (hsh_create) Use next_power_of_2.
5291         (hsh_rehash) Use & instead of %.
5292
5293         Cleaned up hsh_sort:
5294         
5295         (internal_comparison_fn) Removed.
5296         (sort_nulls_last) New function.
5297         (hsh_sort) Removed second parameter, switched to using the new
5298         quicksort() function from quicksort.h to avoid using nasty need
5299         for static variables with qsort().  All references updated.
5300
5301         Changed the hash functions offered, because there are better hash
5302         functions than the ones we had, and cleaned up the names to boot:
5303         
5304         * hash.c: (hashpjw_d) Removed.
5305         (hashpjw) Ditto.
5306         (hsh_hash_bytes) New function.
5307         (hsh_hash_string) New function.
5308         (hsh_hash_int) New function.
5309
5310         Improved the hash table iteration interface:
5311         
5312         * hash.h: (hsh_iterator_init) Removed.
5313         (struct hsh_iterator) Removed `init' member, change `next' to
5314         size_t.
5315
5316         * hash.c: (hsh_foreach) Removed.  All references updated to use
5317         hsh_first/hsh_next instead.
5318         (hsh_first) New function.  Notably, unlike hsh_foreach() it does
5319         not treat a null pointer as an empty hash table.
5320         (hsh_next) New function.
5321
5322         Made deletion possible, though slow:
5323
5324         * hash.c: (locate_matching_entry) New function.
5325         (hsh_find) Use locate_matching_entry().
5326         (hsh_delete) New function also using locate_matching_entry().
5327         (hsh_force_delete) New function.
5328
5329 Fri Dec 12 23:16:10 2003  Ben Pfaff  <blp@gnu.org>
5330
5331         * quicksort.c: New file implementing a sort routine with a
5332         interface better than qsort() because it passes a user-provided
5333         parameter to the sort routine.
5334
5335         * Makefile.am: Add quicksort.c, quicksort.h.
5336
5337 Fri Dec 12 13:31:58 2003  Ben Pfaff  <blp@gnu.org>
5338
5339         * All source files: Get rid of nasty special cases for Checker,
5340         which is pretty obsolete now.
5341
5342 Thu Dec 11 21:38:24 WST 2003 John Darrington <john@darrington.wattle.id.au>
5343
5344         * Fixed a bug apparent when using the FREQUENCIES command with the
5345         html driver.  The html driver was incorrectly trying to display 
5346         empty cells.
5347
5348 Sun Jan  2 21:40:13 2000  Ben Pfaff  <blp@gnu.org>
5349
5350         * Makefile.am: Reorganized.  Put locale dir in version.c instead
5351         of passing it to each compile command.  Only put local gmp libs in
5352         LD_ADD if not installed on system.  Remove `boast' target.
5353
5354         * All source files: struct and union typedefs eliminated.
5355         `sizeof type' replaced by `sizeof object' where practical.  Moved
5356         `unused' qualifiers from start to end of declarations for gcc
5357         2.7.2 compatibility.  Change `while (1)' to `for (;;)'.  Made
5358         assertions on pointers strictly compliant.  Removed _ prefixes on
5359         some function parameter names.
5360
5361         * alloc.c: New source file, containing these external linkage
5362         functions removed from common.c: xmalloc, xcalloc, xrealloc,
5363         xstrdup.
5364
5365         * arena.c: Removed.
5366         
5367         * arena.h: Removed.
5368
5369         * ascii.c: Migrated from arenas to pools.
5370         (struct ascii_driver_ext) ops[], box[], fonts[] changed from
5371         c_string to len_string.  All references changed.
5372         (ascii_option) Signature changed to comply to new output.c
5373         interface.
5374         (count_fancy_chars) Removed.
5375         (delineate) Removed support for rich text.
5376         (ascii_text_metrics) Ditto.
5377         (text_draw) Ditto.
5378         (output_shorts) Change `box', `off', `on' from c_string to
5379         len_string.  Change `remaining' from int to size_t.
5380         (ascii_close_page) Make page numbering less haphazard.
5381
5382         * autorecode.c: Migrate from arenas to pools.
5383
5384         * avl.c: Migrate from arenas to pools.  Synch from libavl 1.4.0.
5385
5386         * bitvector.h: New file containing these macros from misc.h:
5387         SET_BIT, CLEAR_BIT, SET_BIT_TO, TEST_BIT, BIT_INDEX.
5388
5389         * command.c: (struct command) cmd1, cmd2, cmd3 members changed to
5390         word[3].  ncmd removed.
5391         (var empty_string) Removed.
5392         (var cmd_table) Declaration updated.
5393         (var cmdtab) Removed.
5394         (cmp_command) Removed.
5395         (split_words) Rewritten to use strtok_r().
5396         (init_cmd_parser) Renamed cmd_init().  Rewritten.
5397         (find_command) Removed.
5398         (FILE_TYPE_okay) Rewritten.
5399         (cmd_parse) Rewritten.  Semantics of the return value of command
5400         handlers has changed: they must now return one of the new CMD_*
5401         enumerals, rather than a magic value.  This meant that all
5402         commands had to be modified, and they were.
5403         (figure_out_command) New function.
5404
5405         * command.def: Add CORRELATIONS, PEARSON CORRELATIONS.  Add
5406         #defines for INIT, INPU, etc.
5407
5408         * command.h: New CMD_* enum series.
5409         (cur_proc) Make const char *, not char *.
5410         (cmd_init) Prototype.
5411         (cmd_parse) Ditto.
5412
5413         * common.c: Removed.
5414
5415         * common.h: Removed.
5416
5417         * correlations.q: New file.
5418
5419         * crosstabs.q: Migrate from arenas to pools.  Migrate to new-style
5420         q2c.
5421         (custom_tables) Renamed crs_custom_tables().
5422         (custom_variables) Renamed crs_custom_variables().
5423         (calc_integer) Add in some `const' qualifiers.
5424         (table_value_missing) Change from a_string to len_string.
5425         (float_M_suffix) Change from a_string to len_string.
5426
5427         * data-in.c: Rewritten.  All references to
5428         parse_string_as_format() changed to data_in().
5429
5430         * data-in.h: New file.
5431
5432         * data-list.c: Change DLS_* from #define's to enums.  Move from
5433         rpd_msg() to tmsg().
5434         (RPD_ERR) New #define.
5435         (do_reading) Change dfm_push_cust() to dfm_push(), pop_cust() to
5436         dfm_pop().
5437         (read_from_data_list_fixed) Change from old
5438         parse_string_as_format() to new data_in().
5439         (read_from_data_list_free) Ditto.
5440         (read_from_data_list_list) Ditto.
5441         (cmd_repeating_data) Modify approach to checking for end of
5442         command.
5443         (rpd_msg) Removed.
5444         (rpd_parse_record) Change from old parse_string_as_format() to new
5445         data_in().  Change from old convert_format_to_string() to new
5446         data_out().
5447         (read_one_set_of_repetitions) Change dfm_push_cust() to
5448         dfm_push(), pop_cust() to dfm_pop().
5449
5450         * data-out.c: Rewritten.  All references to
5451         convert_format_to_string() changed to data_out().
5452
5453         * descript.q: Migrate to new q2c.
5454         (cmd_descriptives) Removed.
5455         (internal_cmd_descriptives) Renamed cmd_descriptives ().
5456         (custom_variables) Renamed dsc_custom_variables().
5457
5458         * dfm.c: (struct dfm_fhuser_ext) `ln' removed.  All references
5459         removed.
5460         (open_file_r) Initialize h->where.line_number.  Migrate to new
5461         struct string.
5462         (open_file_w) Initialize h->where.line_number.
5463         (read_record) Change from ext->ln to h->where.line_number.
5464         Migrate to struct string.
5465         (dfm_put_record) Rephrased.
5466         (dfm_push_cust) Renamed dfm_push(), rewritten.
5467         (dfm_pop) New function.
5468
5469         * error.c: All references updated.
5470         (glob var error_count) Renamed err_err_count.
5471         (glob var warning_count) Renamed err_warning_count.
5472         (glob var error_already_flagged) Renamed err_already_flagged.
5473         (glob var verbosity) Renamed err_verbosity.
5474         (glob var cust_fn) Removed.
5475         (glob var cust_ln) Removed.
5476         (static var file_loc) New.
5477         (static var nfile_loc) New.
5478         (static var mfile_loc) New.
5479         (tmsg) New function.
5480         (push_cust) Removed.
5481         (pop_cust) Removed.
5482         (msg) Rewritten.
5483         (static var terminating) Removed.
5484         (failure) Renamed err_failure().
5485         (hcf) Renamed err_hcf().
5486         (err_push_file_locator) New function.
5487         (err_pop_file_locator) New function.
5488         (err_location) New function.
5489         (check_error_count) Renamed err_check_count().
5490         (vmsg) Renamed err_vmsg().  Interface changed.
5491         (verbose_msg) Removed.
5492         (err_cond_fail) New function.
5493         (error_break) Renamed err_break().
5494
5495         * error.h: All references updated.
5496         (enum MSG_CLASS_COUNT) Renamed ERR_CLASS_COUNT.
5497         (enum ERR_CLASS_MASK, ERR_VERBOSITY_SHIFT, ERR_VERBOSITY_MASK)
5498         New.
5499         (struct file_locator) New.
5500         (struct error) New.
5501         (macro verbose_msg) Removed.
5502         (macro cond_fail) Removed.
5503
5504         * expr-opt.c: (evaluate_tree) sizeof(char) == 1.
5505
5506         * expr-prs.c: Reorganized.  All references updated.
5507         (exprtypename) Renamed expr_type_name().
5508         (typename) Renamed type_name().
5509         (free_expression) Renamed expr_free().
5510         (parse_expression) Renamed expr_parse().  Uses new type_check()
5511         function.
5512         (init_functab) Renamed init_func_tab().
5513         (type_check) New function.
5514         (parse_or) Rewritten to use new allocate_nonterminal() and
5515         append_nonterminal_arg() functions.
5516         (parse_and) Ditto.
5517         (parse_not) Ditto.
5518         (parse_rel) Ditto.  Also simplified logic.
5519         (parse_add) Ditto.
5520         (parse_mul) Ditto.
5521         (parse_neg) Ditto.
5522         (parse_exp) Ditto.
5523         (SYSMIS_func) Ditto.
5524         (VALUE_func) Rephrased.
5525         (CONCAT_func) Fix memory leak by replacing free by free_node on
5526         lossage.
5527         (generic_str_func) Ditto.
5528         (parse_function) Ditto.  Also rephrasings.  Uses bsearch() to find
5529         function.
5530         (allocate_nonterminal) New function.
5531         (append_nonterminal_arg) New function.
5532         (static func_tab[]) Now at file level.
5533         (cmp_func) Moved.
5534         (init_func_tab) Moved.  Now just uses qsort() to sort func_tab[].
5535
5536         * expr.h: (enum series OP_*) Moved to exprP.h.
5537         (OP_* defines) Ditto.
5538         (struct op_desc) Ditto.
5539         (global ops[]) Ditto.
5540         (struct num_con_node) Ditto.
5541         (struct str_con_node) Ditto.
5542         (struct var_node) Ditto.
5543         (struct lag_node) Ditto.
5544         (struct casenum_node) Ditto.
5545         (struct nonterm_node) Ditto.
5546         (union any_node) Members renamed.
5547         (struct sys_node) Removed.
5548         (struct val_node) Removed.
5549         (operator typedef) Removed.
5550         (typedef exprtype) Removed.
5551         (enum series EX_*) Moved to exprP.h.
5552         (struct expression) Ditto.  Also renamed a lot of the members.
5553         (PXP_* defines) Changed to enums.
5554         (free_node prototype) Moved to exprP.h.
5555
5556         * file-handle.h: (struct file_handle) New member `where'.
5557
5558         * file-handle.q: Migrated to new q2c format.
5559         (prepend_current_directory) Removed (dead code).
5560         (cmd_file_handle) Incorporated all of internal_cmd_file_handle().
5561         (fh_get_handle_by_filename) Removed dead code.
5562         Set new `where' member.
5563
5564         * file-type.c: (file_type_source_read) References to
5565         parse_string_as_format() changed to data_in().
5566         dfm_push_cust()/pop_cust() changed to dfm_push()/dfm_pop().
5567
5568         * filename.c: All references updated.
5569         (init_filename) Renamed fn_init().
5570         (expand_line) Removed.
5571         (macro EXPAND_LINE) Removed.
5572         (interp_vars) Renamed fn_interp_vars().  Now uses st_*() instead
5573         of custom functions.
5574         (gnu_getcwd) Renamed fn_get_cwd(), rewritten.
5575         (tilde_expand) Renamed fn_tilde_expand(), uses ds_*().
5576         (normalize_filename) Renamed fn_normalize().
5577         (search_path) Renamed fn_search_path(), rewritten.
5578         (prepend_dir) Renamed fn_prepend_dir().
5579         (blp_getenv) Renamed fn_getenv().
5580         (blp_dirname) Renamed fn_dirname().
5581         (fn_basename) New function, not used.
5582         (absolute_filename_p) Renamed fn_absolute_p().
5583         (is_special_filename) Renamed fn_special_p().
5584         (file_exists) Renamed fn_exists_p().
5585         (readlink_malloc) Renamed fn_readlink().
5586         (getenv_default) Renamed fn_getenv_default().
5587         (open_file) Renamed fn_open().
5588         (close_file) Renamed fn_close().
5589         (open_file_ext) Renamed fn_open_ext().
5590         (close_file_ext) Renamed fn_close_ext().
5591
5592         * font.h: Migrate from arenas to pools.
5593
5594         * format.c: (parse_format_specifier_name) Deal with ds_* strings.
5595
5596         * frequencies.g: Migrate from arenas to pools.
5597
5598         * frequencies.q: Migrate to new q2c version.  Migrate from arenas
5599         to pools.
5600
5601         * getline.c: All references updated.
5602         (global getl_buf) Changed from char * to struct string.
5603         (static getl_include_path) Ditto.
5604         (global getl_buf_len) Removed.
5605         (global getl_buf_size) Removed.
5606         (getl_include_path) Deal with new getl_buf, getl_include_path.
5607         (getl_uninitialize) New function.
5608         (getl_get_current_directory) Rewritten.
5609         (getl_clear_include_path) Rewritten.
5610         (getl_add_include_dir) Rewritten.
5611         (getl_add_file) Assertion fixed.
5612         (getl_add_virtual_file) Change initial value of `remaining_loops'
5613         from 2 to 1.
5614         (welcome) Rewritten.
5615         (handle_line_buffer) Make static.  Change logic to make
5616         getl_add_virtual_file() change sensible.  Use ds_*() strings.
5617         (getl_read_line) Use ds_*() strings.  Implement SET ECHO.
5618         (getl_close_file) Moved.
5619         (getl_location) New function.
5620
5621         * getline.h: All references updated.
5622         (macro curln) Removed.
5623         (macro curfn) Removed.
5624         (macro am_interactive) Renamed getl_am_interactive.
5625         (macro am_reading_script) Renamed getl_reading_script.
5626
5627         * glob.c: (global fmt_parse_ignore_error) Removed.
5628         (init_glob) Use locale_dir not LOCALEDIR.  Use feholdexcept() on
5629         systems that support it (C99).  Turn off SET ECHO by default.  No
5630         necessary julcal initialization anymore.
5631
5632         * groff-font.c: Migrate from arenas to pools.
5633         (groff_read_font) Use err_push_file_locator().
5634         (groff_read_DESC) Ditto.
5635         (font_msg) Use tmsg().
5636
5637         * hash.c: (hsh_sort) Fix debug code.
5638         [GLOBAL_DEBUGGING] Include stdio.h.
5639
5640         * hash.h: (macro force_hsh_insert) Rephrase.
5641
5642         * heap.c: Rewritten.
5643         
5644         * heap.h: Rewritten.
5645
5646         * html.c: (html_option) Change from outp_value to struct string.
5647         (postopen) Change from curfn to getl_location().
5648         (escape_string) Remove rich-text code.  Signature changed.
5649         (output_tab_table) Switch from a_string to struct len_string.
5650         Remove rich text support.
5651
5652         * lexer.c: All references updated.  Largely rewritten.  Major
5653         changes listed below.  Removed tagged quote support.  Adapted to
5654         struct string tokstr.
5655         (global tokstr) Changed to struct string.
5656         (global tokstr_size) Removed.
5657         (global tokstr_len) Removed.
5658         (global tokid) New.
5659         (global tokint) Removed.
5660         (global toklongstr) Removed.
5661         (C* defines) Removed.
5662         (static tbl[]) Removed.
5663         (static id[]) Removed.
5664         (static une[]) Removed.
5665         (discard_line) Renamed lex_discard_line().
5666         (get_entire_line) Renamed lex_entire_line().
5667         (get_rest_of_line) Renamed lex_rest_of_line().
5668         (get_dotted_rest_of_line) Merged into lex_rest_of_line().
5669         (make_hexit) Removed.
5670         (syntax_error) Renamed lex_error().  Return value removed.
5671         (get_token_representation) Renamed lex_token_representation().
5672         (putback) Renamed lex_put_back().
5673         (putfwd) Renamed lex_put_forward().
5674         (convert_negative_to_dash) Renamed lex_negative_to_dash().
5675         (set_prog) Renamed lex_set_prog().
5676         (init_lex) Renamed lex_init().
5677         (reset_eof) Renamed lex_reset_eof().
5678         (lookahead) Renamed lex_look_ahead().
5679         (check_id) Rewritten.
5680         (yylex) Renamed lex_get(), rewritten.
5681         (lex_end_of_command) New function.  Many commands were rephrased
5682         using this.
5683         (lex_integer_p) New function.  Replaces compare of tokint against
5684         NOT_LONG.
5685         (lex_integer) New function.  Replaces tokint.
5686         (match_tok) Renamed lex_match().
5687         (match_id) Renamed lex_match_id().
5688         (match_int) Renamed lex_match_int().
5689         (force_match_id) Renamed lex_force_match_id(), added return value.
5690         (force_match) Renamed lex_force_match(), added return value.
5691         (force_string) Renamed lex_force_string(), added return value.
5692         (force_int) Renamed lex_force_int(), added return value.
5693         (lex_id_match_len) New function.
5694         (id_match) Renamed lex_id_match(), rewritten.
5695         (get_line) Renamed lex_get_line().
5696         (preprocess_line) Renamed lex_preprocess_line().
5697         (tokname) Renamed lex_token_name().
5698         (bin_value_func) Removed.
5699         (oct_value_func) Removed.
5700         (hex_value_func) Removed.
5701         (unexpected_eof) New function.
5702         (convert_numeric_string_to_char_string) New function.
5703         (parse_string) Rewritten, signature changed.
5704         (add_tokstr_char) Removed.
5705         (add_tokstr_unsigned) Removed.
5706         (add_tokstr_string) Removed.
5707         (parse_tagged_quote) Removed.
5708         (skip_comment) Renamed lex_skip_comment().
5709
5710         * lexer.h: All references updated.
5711         (macro is_id1) Renamed CHAR_IS_ID1.
5712         (macro is_idn) Renamed CHAR_IS_IDN.
5713         (token names ID, NUM, STRING, STOP, ... WITH, EXP) Renamed with
5714         prefix T_: T_ID, T_NUM, T_STRING, T_STOP, ... T_WITH, T_EXP.
5715         (macro get_token) Removed.
5716         (macro id_match) Removed.
5717         (macro force_match_id) Removed.
5718         (macro force_match) Removed.
5719         (macro force_string) Removed.
5720         (macro force_int) Removed.
5721         (macro force_num) Removed.
5722         (macro force_id) Removed.
5723
5724         * lexerP.h: Removed.
5725
5726         * list.q: Migrated to new q2c format.
5727         (write_line) Deal with struct len_string.
5728         (write_varname) Ditto.
5729         (write_fallback_headers) Ditto.
5730
5731         * magic.c: New file, incorporating the following global variables
5732         previously in other files: endian, second_lowest_value.  And both
5733         of those are conditional on #define's.
5734
5735         * magic.h: New file, incorporating the following global variable
5736         declarations: endian, second_lowest_value, and the following macro
5737         declarations: NOT_DOUBLE, NOT_LONG, NOT_INT.
5738
5739         * main.c: Added declarations of pgmname, finished, curdate,
5740         start_interactive.
5741         (main) Call new parse_script() function.
5742         (parse_script) New function.
5743         (execute_command) New function.
5744         (dump_token) Removed.
5745         (handle_error) New function.
5746
5747         * matrix.c: New file.
5748
5749         * matrix.h: New file.
5750
5751         * matrix-data.c: Migrated from arenas to pools.
5752         (mget_token) Change from parse_string_as_format() to data_in().
5753
5754         * means.q: Migrate to new q2c.
5755         (custom_tables) Renamed mns_custom_tables().
5756         (custom_crossbreak) Renamed mns_custom_crossbreak().
5757         (custom_variables) Renamed mns_custom_variables().
5758
5759         * mis-val.c: (static var width) Changed from `int' to `size_t'.
5760         (parse_varnames) Prototype.
5761         (parse_numeric) Rephrasings.
5762         (parse_alpha) Adapt to new struct string tokstr.
5763
5764         * misc.c: (intlog10) Rewritten.
5765         (spacing) Removed.
5766         (ansi_rand) Renamed real_rand(), moved into random.c.
5767         (ansi_srand) Renamed real_srand(), moved into random.c.
5768         (setup_randomize) Moved to random.c.
5769         (rand_uniform) Ditto.
5770         (rand_normal) Ditto.
5771         (rand_simple) Ditto.
5772         (get_config_line) Removed.
5773         (reverse) Removed (dead code).
5774
5775         * misc.h: (macro SET_BIT) Moved to bitvector.h.
5776         (macro CLEAR_BIT) Ditto.
5777         (macro TEST_BIT) Ditto.
5778         (macro SET_BIT_TO) Ditto.
5779         (macro BIT_INDEX) Ditto.
5780
5781         * output.c: (outp_read_devices) Move to err_push_file_locator()
5782         from push_cust().  Use struct string.
5783         (expand_op_tokstr) Removed.
5784         (static var op_tokstr) Changed to struct string.
5785         (static var op_tokstr_size) Removed.
5786         (tokener) Rephrasings.  Use struct string.
5787         (parse_options) Use struct string.
5788         (destroy_driver) Fix assertion.
5789         (outp_get_paper_size) Move to err_push_file_locator().
5790         [0] Removed dead code.
5791         (outp_string_width) Move to len_string.
5792
5793         * output.h: Comment fixes.
5794         (TAG_* enum series) Removed.
5795         (struct outp_value) Removed.
5796         (enum OUTP_T_FANCY) Removed.
5797         (struct outp_text) `s' changed from a_string to len_string.
5798         (struct outp_class) `option' change arg 3 from outp_value to
5799         struct string.
5800
5801         * pfm-read.c: (corrupt_msg) Rewritten.
5802
5803         * pfm-write.c: (bufwrite) Fix assertion.
5804
5805         * pool.c: New file, reference version.
5806
5807         * pool.h: New file, reference version.
5808
5809         * postscript.c: (ps_font_sizes) Fix assertion.
5810         (ps_option) Change arg 3 from outp_value to struct string.
5811         Adapt to struct string.
5812         (macro output_line) Removed.
5813         (macro add_string) Removed.
5814         (output_encodings) Adapted to struct string.  Moved to
5815         err_push_file_locator().
5816         (find_encoding_file) Fix assertion.
5817         (read_ps_encodings) Move to err_push_file_locator().
5818         (postopen) Use getl_location() instead of curfn.
5819         (out_text_plain) Move to len_string.
5820         (text) Ditto.  Remove rich text support.
5821
5822         * print.c: (cmd_print) Remove now-unneeded resource cleanup code.
5823         (cmd_print_eject) Ditto.
5824         (cmd_write) Ditto.
5825         (internal_cmd_print) Now cleans up after itself.  Uses
5826         fh_parse_file_handle() now.
5827         (cmd_print_space) Use PXP_NUMERIC to type-check.
5828
5829         * q2c.c: Overhauled.  Removed _("") i18n support.  All references
5830         updated.  All output functions updated to handle structures rather
5831         than local or static variables.  Adapt to new PSPP lex_*()
5832         functions.
5833         (macro _) Removed.
5834         (macro N_) Removed.
5835         (macro MAX_N_SBC) Removed.
5836         (global bare) Removed.
5837         (enum STRING) Renamed T_STRING.
5838         (enum ID) Renamed T_ID.
5839         (get_buffer) Buffer size increased.
5840         (strlower) Renamed st_lower(), rephrased.
5841         (strupper) Renamed st_upper(), rephrased.
5842         (skip_ws) New function.
5843         (get_line) Don't special-case any types of lines (like those
5844         beginning with ! or $, for instance).
5845         (get_token) Renamed lex_get().  Rephrased.
5846         (static var `prefix') New.
5847         (parse) New function.
5848         (parse_setting) Minor rephrasing.
5849         (dump_specifier_vars) Ditto.
5850         (make_identifier) Put null terminator on identifier, duh.
5851         (dump_vars) Renamed dump_declarations().  Never indent.  Never
5852         static.  Output changed entirely.
5853         (dump_specifier_init) Rephrase.
5854         (dump_vars_init) No index variable needed.  Other modifications.
5855         (dump_parser) Don't parse command name.  Do dump functions instead
5856         of just code fragments.
5857         (dump_free) Dump function instead of code fragment.
5858         (recognize_directive) New function.
5859         (main) Use recognize_directive().  Don't rely on magic $ line
5860         beginning: instead, parse comments.  Update list of headers.
5861
5862         * random.c: New file, containing the following functions:
5863         real_rand(), real_srand(), setup_randomize, shuffle, rand_uniform,
5864         rand_normal, rand_simple.
5865
5866         * random.h: New file.
5867
5868         * recode.c: (cmd_recode) Merge internal_cmd_recode() into this
5869         function.  `max_src_width', `max_dst_width' changed to size_t.
5870         (internal_cmd_recode) Removed.
5871         (parse_dest_spec) Merge similar cases.
5872         (parse_src_spec) Add assertion.
5873
5874         * repeat.c: (recognize_keyword) New function.
5875         (internal_cmd_do_repeat) Parse and handle PRINT keyword on END
5876         REPEAT.  Improve recognition of END REPEAT (use
5877         recognize_keyword()).  Move from curfn to getl_location().  Use
5878         struct string.
5879                 
5880         (perform_DO_REPEAT_substitutions) Adapt to struct string.
5881
5882         * set.q: Adapt to new q2c.
5883         (cmd_set) Range-check some values better.
5884         (custom_blanks) Renamed stc_custom_blanks().
5885         (custom_length) Renamed stc_custom_length().
5886         (custom_results) Renamed stc_custom_results().
5887         (custom_seed) Renamed stc_custom_seed().
5888         (custom_width) Renamed stc_custom_width().
5889         (custom_format) Renamed stc_custom_format().
5890         (custom_journal) Renamed stc_custom_journal().
5891         (custom_color) Renamed stc_custom_color().
5892         (custom_listing) Renamed stc_custom_listing().
5893         (custom_disk) Renamed stc_custom_disk().
5894         (custom_log) Renamed stc_custom_log().
5895         (custom_rcolor) Renamed stc_custom_rcolor().
5896         (custom_viewlength) Renamed stc_custom_viewlength().
5897         (custom_workdev) Renamed stc_custom_workdev().
5898
5899         * settings.h: Not necessary to include format.h any longer.
5900
5901         * sfm-read.h: (macro bswap_int32) Moved here from sfmP.h.
5902         (corrupt_msg) Rewritten.
5903
5904         * sort.c: Adapt to rewritten heap ADT.
5905
5906         * str.c: (aa_strcpy) Removed.
5907         (ab_strcpy) Removed.
5908         (ac_strcpy) Removed.
5909         (ba_strcpy) Removed.
5910         (bb_strcpy) Removed.
5911         (ca_strcpy) Removed.
5912         (aa_strdup) Removed.
5913         (aa_strdupcpy) Removed.
5914         (ba_strdup) Removed.
5915         (sa_strdup) Removed.
5916         (memrev) Renamed mm_reverse().
5917         (memrmem) Renamed mm_find_reverse().
5918         (cmp_str) Renamed st_compare_pad().
5919         (strmaxcpy) Removed.
5920         (strbarepadcpy) Renamed st_bare_pad_copy(), signature changed.
5921         (strbarepadlencpy) Renamed st_bare_pad_len_copy(), signature
5922         changed.
5923         (strpadcpy) Renamed st_pad_copy(), signature changed.
5924         (blpstrset) Removed.
5925         (ds_create) New function.
5926         (ds_init) New function.
5927         (ds_replace) New function.
5928         (ds_destroy) New function.
5929         (ds_clear) New function.
5930         (ds_extend) New function.
5931         (ds_shrink) New function.
5932         (ds_truncate) New function.
5933         (ds_length) New function.
5934         (ds_size) New function.
5935         (ds_value) New function.
5936         (ds_end) New function.
5937         (ds_concat) New function.
5938         (ds_concat_buffer) New function.
5939         (ds_printf) New function.
5940         (ds_putchar) New function.
5941         (ds_getline) New function.
5942         (ds_get_config_line) New function derived from the old
5943         misc.c:get_config_line().
5944         (ls_create) New function.
5945         (ls_create_buffer) New function.
5946         (ls_init) New function.
5947         (ls_shallow_copy) New function.
5948         (ls_destroy) New function.
5949         (ls_null) New function.
5950         (ls_null_p) New function.
5951         (ls_empty_p) New function.
5952         (ls_length) New function.
5953         (ls_value) New function.
5954         (ls_end) New function.
5955
5956         * str.h: Reformatted.
5957         (struct a_string) Removed.
5958         (struct b_string) Removed.
5959         (struct c_string) Removed.
5960         (struct len_string) New.
5961         (struct string) New.
5962         (macro as_streq) Removed.
5963         (macro bs_streq) Removed.
5964         (macro cs_streq) Removed.
5965         (macro sa_streq) Removed.
5966         (macro sb_streq) Removed.
5967         [__GNUC__] (inline function ds_putchar) New function.
5968         [__GNUC__] (inline function ds_length) New function.
5969         [__GNUC__] (inline function ds_value) New function.
5970         [__GNUC__] (inline function ds_end) New function.
5971
5972         * sysfile-info.c: (cmd_sysfile_info) Rephrased.
5973         (display_vectors) Fix missing i18n.
5974
5975         * t-test.q: Migrate to new q2c.
5976
5977         * tab.c: Migrate from arenas to pools.
5978         (tab_create) Use struct len_string.
5979         (tab_realloc) Ditto.
5980         (text_format) Ditto.
5981         (tab_joint_text) Ditto.
5982         (tab_natural_width) Remove rich text support.
5983         (tab_natural_height) Ditto.
5984         (tab_output_text) Handle TAT_FIX.
5985         (tab_raw) Change arg from a_string to len_string.
5986         (tabi_driver) Fix assertion.  Use struct len_string.
5987         (render_strip) Use struct len_string.  Remove rich text support.
5988         Add `const' qualifiers.
5989
5990         * tab.h: (enum TAB_RICH) Remove.
5991         (enums TAB_COL_NONE, TAB_COL_DONE) New.  Where appropriate,
5992         SOM_COL_* updated to read TAB_COL_*.
5993         (struct tab_table) Change arena to pool.  Change a_string to
5994         len_string.
5995
5996         * temporary.c: (restore_dictionary) Rewrite Checker code.
5997
5998         * var.h: (macros MAX_SHORT_STRING, MIN_LONG_STRING, SYSMIS,
5999         LOWEST, HIGHEST) Moved here from common.h.
6000         (typedef any_trns) Removed.  All references changed to `struct
6001         trns_header'.
6002
6003         * vars-atr.c: (force_create_variable) Fix assertion.
6004         (force_dup_variable) Fix assertion.
6005         
6006 Thu Jun  3 18:40:42 1999  Ben Pfaff  <blp@gnu.org>
6007
6008         Using alphanumeric variables in functions under AGGREGATE
6009         segfaulted.  Fixed.  Thanks to Dr. Dirk Melcher
6010         <BZN-mdksh@t-online.de> for reporting this bug.
6011         
6012         * aggregate.c: (parse_aggregate_functions) When setting the
6013         FSTRING bit, also allocate memory for the `string' member of
6014         agr_next.
6015         (free_aggregate_functions) Free iter->string.  Don't use the
6016         non-function bits when indexing the array of functions.
6017         [DEBUGGING] (debug_print) Don't use the non-function bits when
6018         indexing the array of functions.        
6019
6020 Sun May 30 00:00:54 1999  Ben Pfaff  <blp@gnu.org>
6021
6022         Under certain circumstances, the final case would be omitted from
6023         the results of an AGGREGATE operation.  Fixed.  Thanks to Dr. Dirk
6024         Melcher <BZN-mdksh@t-online.de> for reporting this bug.
6025         
6026         * aggregate.c (agr_00x_end_func): Increment number of cases in
6027         sink before writing case.  For streams that keep track of how many
6028         cases there are based on this value, this means that the last case
6029         will be read in on the next stream read.
6030
6031 Sat May 29 22:03:31 1999  Ben Pfaff  <blp@gnu.org>
6032
6033         Undefined behavior was invoked by referencing a freed pointer.
6034         
6035         * vfm.c (memory_stream_write): Free pointer *after* checking for
6036         non-null status.
6037
6038 Sat May 29 22:02:22 1999  Ben Pfaff  <blp@gnu.org>
6039
6040         A wrong record size was displayed when paging the active file to
6041         disk.
6042         
6043         * vfm.c: (memory_stream_write) Fix off-by-one error.
6044
6045 Sat May 29 21:50:26 1999  Ben Pfaff  <blp@gnu.org>
6046
6047         Not having enough temporary space for sorting caused a core dump.
6048         Fixed.
6049         
6050         * sort.c: (allocate_cases) Initialize i.
6051
6052 Sat May 29 21:40:54 1999  Ben Pfaff  <blp@gnu.org>
6053
6054         Syntax errors in function descriptions on AGGREGATE caused core
6055         dumps.  Fixed.
6056         
6057         * aggregate.c (cmd_aggregate): Don't free agr_dict after calling
6058         free_aggregate_functions(), since that function already frees
6059         agr_dict.
6060         
6061 Sat May 29 21:06:10 1999  Ben Pfaff  <blp@gnu.org>
6062
6063         A null pointer was dereferenced, causing a core dump, when
6064         PERCENTILES was specified on FREQUENCIES.  This fixes the problem,
6065         but PSPP still doesn't calculate percentiles.  Thanks to Regnor
6066         Jernsletten <rjernsle@eunet.no> for reporting this problem.
6067         
6068         * arena.c: (arena_malloc) If the arena hasn't been initialized
6069         already, initialize it.
6070
6071 Sat May 29 20:47:29 1999  Ben Pfaff  <blp@gnu.org>
6072
6073         * Makefile.cygwin: New file supplied by Hankin <hankin@dunno.com>
6074         for compilation with Cygnus Windows B20.  Not used by other
6075         systems.
6076
6077 Sat May 29 20:36:04 1999  Ben Pfaff  <blp@gnu.org>
6078
6079         SORT always sorted in ascending order.  Fixed.  Thanks to Dr. Dirk
6080         Melcher <BZN-mdksh@t-online.de> for reporting this bug.
6081
6082         * sort.c: (compare_case_lists) Reverse sense of comparison if
6083         sorting in descending order.
6084         (compare_record) Ditto.
6085
6086 Tue Mar  9 13:18:54 1999  Ben Pfaff  <blp@gnu.org>
6087
6088         SPLIT FILE with a string variable caused a core dump.  Fixed.
6089
6090         * vfm.c: If the variable is a string then make a temporary value
6091         struct pointing to it.  The underlying problem is a lot bigger
6092         than this (see TODO) but this is a stopgap for the simple case at
6093         least.
6094         
6095 Tue Mar  9 13:15:53 1999  Ben Pfaff  <blp@gnu.org>
6096
6097         Nested INCLUDEs didn't work.  Fixed.
6098
6099         * getline.c: (getl_include) Set first_line to NULL in allocated
6100         structure.
6101
6102 Tue Mar  9 13:13:46 1999  Ben Pfaff  <blp@gnu.org>
6103
6104         The MATCH FILES procedure set the values of variables not present
6105         to 0.  It should have been SYSMIS.  This is now fixed.
6106
6107         * get.c: (mtf_delete_file_in_place) Replace 0.0 by SYSMIS.
6108
6109 Tue Mar  9 12:52:23 1999  Ben Pfaff  <blp@gnu.org>
6110
6111         The REMARK command was too aggressive about skipping lines.  It
6112         didn't like being the last command in a file.
6113
6114         * command.c: (cmd_remark) Call get_entire_line() instead of
6115         get_line().
6116
6117 Tue Mar  9 12:48:05 1999  Ben Pfaff  <blp@gnu.org>
6118
6119         Comment parsing wasn't consistent with the rest of the code in its
6120         idea of where one command ends and another starts.  This meant
6121         that sometimes commands would be mysteriously ignored.  Thanks to
6122         Dr. Dirk Melcher <BZN-mdksh@t-online.de> for reporting this bug.
6123          
6124         * command.c: (parse_cmd) Hand off comment parsing to new function
6125         skip_comment() in lexer.c.
6126         * lexer.c: (skip_comment) New function.
6127
6128 Wed Jan 20 20:22:07 1999  Ben Pfaff  <blp@gnu.org>
6129
6130         The TABLE subcommand on MATCH FILES worked only erratically at
6131         best.  This fixes it.  Thanks to Dr. Dirk Melcher
6132         <BZN-mdksh@t-online.de> for reporting this bug.
6133
6134         * get.c: (mtf_compare_BY_values) When comparing string values, a
6135         difference of 1 is still a difference :-)
6136         (mtf_processing) Inverted TABLE reading logic fixed.  Also don't
6137         advance TABLE files automatically when matched.  Comment fixes.
6138
6139 Tue Jan 19 22:32:31 1999  Ben Pfaff  <blp@gnu.org>
6140
6141         VARIABLE LABELS rejected a slash before the first variable
6142         specification, contradicting the documentation.  Thanks to Walter
6143         M. Gray <graywm@northernc.on.ca> for reporting this bug.
6144
6145         * var-labs.c: (cmd_variable_labels) Ignore a leading slash in
6146         command specification.
6147
6148 Tue Jan 19 22:29:54 1999  Ben Pfaff  <blp@gnu.org>
6149
6150         Because of an incorrect optimization in memory allocation,
6151         CROSSTABS sometimes segfaulted when asked to output multiple
6152         tables.  Thanks to Walter M. Gray <graywm@northernc.on.ca> for
6153         reporting this bug.
6154
6155         * crosstabs.q: (postcalc) New variables maxcols, maxcells, which
6156         are passed to output_pivot_table() for its use.
6157         (output_pivot_table) Instead of assuming the number of columns is
6158         constant, keep track with maxcols.  In general mode, use maxcells
6159         to determine whether more matrix cells need to be allocated.    
6160
6161 Tue Jan 19 22:27:46 1999  Ben Pfaff  <blp@gnu.org>
6162
6163         CROSSTABS didn't display value labels for column and row
6164         variables.  Thanks to Walter M. Gray <graywm@northernc.on.ca> for
6165         reporting this bug.
6166
6167         * crosstabs.q: (table_value_missing) If the specified value has a
6168         value label for this variable, then show it instead of the raw
6169         value.
6170         (display_dimensions) Delegate display of value_labels to
6171         table_value_missing.
6172
6173 Mon Jan 18 20:04:06 1999  Ben Pfaff  <blp@gnu.org>
6174
6175         WRITE didn't write line ends.  Fixed.  Thanks to Dr. Dirk Melcher
6176         <BZN-mdksh@t-online.de> for reporting this bug.
6177
6178         * print.c: (print_trns_proc) Write (CR/)LF if PRINT is used _or_
6179         if the file isn't declared as binary.
6180
6181 Mon Jan 18 19:56:45 1999  Ben Pfaff  <blp@gnu.org>
6182
6183         MATCH FILES corrupted memory and dumped core on some syntax
6184         errors.  Fixed.
6185
6186         * get.c: (cmd_match_files) Set file->handle to NULL before
6187         jumping to lossage.
6188         (mtf_free_file) Don't free a null dictionary.   
6189
6190 Mon Jan 18 19:27:57 1999  Ben Pfaff  <blp@gnu.org>
6191
6192         MATCH FILES should set numeric values not available to the
6193         system-missing value, not to 0.  Thanks to Dr. Dirk Melcher
6194         <BZN-mdksh@t-online.de> for reporting this bug.
6195
6196         * get.c: (mtf_processing) Set unused records to system-missing,
6197         not 0.
6198
6199 Mon Jan 18 15:06:46 1999  Ben Pfaff  <blp@gnu.org>
6200
6201         KEEP didn't work properly on the SAVE procedure.  Fixed.  Thanks
6202         to Ralf Geschke <ralf@kuerbis.org> for reporting this bug.
6203
6204         * temporary.c: (save_dictionary) Initialize var_by_name AVL tree
6205         in newly created dictionary, and add each copied variable to the
6206         tree.
6207  
6208 Mon Jan 18 15:04:48 1999  Ben Pfaff  <blp@gnu.org>
6209
6210         Memory leak fix.
6211         
6212         * get.c: (trim_dictionary) Free variable list for KEEP after
6213         finishing with it.
6214
6215 Mon Jan 18 12:57:36 1999  Ben Pfaff  <blp@gnu.org>
6216
6217         Some systems didn't like the way open_file was coded.  Thanks to
6218         Hankin <hankin@rogue.consultco.com> for pointing this out.
6219
6220         * filename.c: (open_file) Don't try to store stdin, stdout,
6221         stderr as part of an array, because that doesn't always work.
6222
6223 Mon Jan 18 12:53:27 1999  Ben Pfaff  <blp@gnu.org>
6224
6225         The SAVE procedure didn't save long string variables properly.
6226         Fixed by this patch.  Thanks to Hankin
6227         <hankin@rogue.consultco.com> for this patch.
6228         
6229         * sfm-write.c: (write_variable) Fix off-by-one error in writing
6230         out variable pad records.
6231
6232 Tue Jan  5 14:29:27 1999  Ben Pfaff  <blp@gnu.org>
6233
6234         Previously, if PRINT SPACE were given a negative argument, it
6235         would report an error, then spin in an (almost) infinite loop.
6236         This fixes that behavior.
6237
6238         * print.c: (print_space_trns_proc) After reporting a negative
6239         argument, set number of lines to print to 1.
6240
6241 Tue Jan  5 13:59:55 1999  Ben Pfaff  <blp@gnu.org>
6242
6243         SPSS 8.0 outputs some new record types in its system files, and it
6244         allows longer value labels.  Accept these system files.
6245
6246         * sfm-read.c: (sfm_read_dictionary) Ignore record type 7 subtype
6247         11 emitted by SPSS 8.0.
6248         
6249 Tue Jan  5 13:55:50 1999  Ben Pfaff  <blp@gnu.org>
6250
6251         The LIST procedure was too conservative in allocating space for
6252         buffers, which caused a bug that only showed up with very long
6253         output variables.  Thanks to Hankin <hankin@dunno.com> for this
6254         bug report.
6255
6256         * list.q: (determine_layout) Allocate 1022 bytes instead of 256.
6257
6258 Tue Jan  5 13:34:34 1999  Ben Pfaff  <blp@gnu.org>
6259
6260         Typo meant string format specifiers weren't checked properly.  I
6261         think that Hankin <hankin@dunno.com> sent me this report, but I'm
6262         willing to be corrected on this point.
6263  
6264         * format.c: (check_string_specifier) Fix obvious typo.  
6265
6266 Tue Jan  5 12:50:42 1999  Ben Pfaff  <blp@gnu.org>
6267
6268         Using $CASENUM in an expression didn't work.  Here's a fix.
6269         Thanks to Dirk Melcher <BZN-mdksh@t-online.de> for reporting this
6270         bug.
6271          
6272         * expr-evl.c: (evaluate_expression) Add OP_CASENUM case.
6273
6274         * expr-opt.c: (dump_node) OP_CASENUM is acceptable.
6275
6276 Tue Jan  5 12:47:48 1999  Ben Pfaff  <blp@gnu.org>
6277
6278         The changes in 0.2.1 to fix DATA LIST FREE parsing broke some
6279         other behavior, *sigh*.  This patch hopefully fixes that.  This
6280         time I've actually tested it.
6281
6282         Thanks to Hankin <hankin@dunno.com> for reporting this bug.
6283
6284         * data-list.c: (read_from_data_list_free,
6285         read_from_data_list_list) Call parse_string_as_format() directly
6286         without mucking around with the field width.
6287
6288 Tue Jan  5 12:31:19 1999  Ben Pfaff  <blp@gnu.org>
6289
6290         Occasionally, you may encounter a script that wants to be
6291         interpreted in interactive mode.  Make -i emulate this behavior to
6292         allow such scripts to be executed with PSPP.
6293
6294         Thanks to Hankin <hankin@dunno.com> for reporting this behavior.
6295
6296         * cmdline.c: (pre_syntax_message[]) Update -i description.
6297
6298         * lexer.c: (preprocess_line) When getl_interactive is 2 (i.e.,
6299         when -i is given on the command line) don't treat unindented lines
6300         as starting a new command.
6301
6302 Tue Jan  5 12:30:10 1999  Ben Pfaff  <blp@gnu.org>
6303
6304         In conjunction with egcs 1.1.1, Checker emits some bogus warnings,
6305         mostly caused by local initialized aggregates.  After egcs is
6306         fixed upstream these can be removed, but for now they're not a big
6307         deal.
6308         
6309         * ascii.c: (ascii_postopen_driver) Checker chokes on local
6310         initialized arrays.  Avoid this.
6311
6312         * sfm-write.c: (sfm_write_dictionary) Don't use a local
6313         initialized struct.
6314
6315 Tue Jan  5 12:07:24 1999  Ben Pfaff  <blp@gnu.org>
6316
6317         egcs 1.1.1 has some new warnings relative to gcc 2.8.1, which the
6318         following changes avoid.  Currently I compile sources with egcs
6319         1.1.1 and gcc 2.7.2.3 before sending them out.
6320
6321         * apply-dict.c: (apply_dict) Use new avl_traverser_init() macro.
6322         
6323         * ascii.c: (option_tab[]) Initialize all struct members.
6324
6325         * avl.h: (avl_traverser_init) New macro.
6326         
6327         * command.c: (DEFCMD, UNIMPL macros, cmd_table[]) Initialize all
6328         struct members.
6329
6330         * crosstabs.q: (enum_var_values) Use new hsh_iterator_init()
6331         macro.
6332
6333         * hash.c: Comment fix.
6334
6335         * hash.h: (hsh_iterator_init) New macro.
6336
6337         * html.c: (option_tab[]) Initialize all struct members.
6338
6339         * pfm-write.c: (write_value_labels) Use new avl_traverser_init()
6340         macro.
6341
6342         * postscript.c: (option_tab[]) Initialize all struct members.
6343         (output_encodings, preclose, dump_lines) Use new
6344         hsh_iterator_init() macro.
6345
6346         * sfm-write.c: (write_value_labels) Use new avl_traverser_init()
6347         macro.
6348
6349         * sysfile-info.c: (describe_variable) Use new avl_traverser_init()
6350         macro.
6351
6352 Thu Nov 19 12:32:45 1998  Ben Pfaff  <blp@gnu.org>
6353
6354         * data-in.c: Examined each of the parsing functions to make sure
6355         that they wouldn't dump core if they were passed a string of the
6356         wrong length, since now the DATA LIST FREE/LIST routines don't
6357         check for field width before passing it to the data parser.
6358         (parse_RBHEX, parse_AHEX) Reject odd length input.
6359         (parse_string_as_format) Reject input that's too short or too
6360         long.
6361
6362         * data-list.c: Before, the DATA LIST FREE/LIST routines would pad
6363         a field to its entire declared output width then pass it to the
6364         data-in parsing routines.  This contradicted the documented
6365         behavior.  This is fixed in these changes.  Thanks to Mark H. Wood
6366         <mwood@IUPUI.Edu>.  In addition, this fixes a few more details of
6367         free-format parsing that differed from SPSS.
6368         (cut_field) Commas and spaces are treated identically.  Returns
6369         the proper column instead of a fixed 1 value.
6370         (parse_field) Removed.
6371         (read_from_data_list_free, read_from_data_list_list) Call
6372         parse_string_as_format directly instead of parse_field.
6373
6374         * heap.c: (heap_delete) Stylistic fixes.
6375
6376 Sun Aug  9 11:12:13 1998  Ben Pfaff  <blp@gnu.org>
6377
6378         * loop.c: (loop_2_trns_proc) Formatting fix.
6379
6380         * sel-if.c: (cmd_filter) Set FILTER_before_TEMPORARY.
6381
6382         * var.h: (glob var FILTER_before_TEMPORARY) New global var.
6383
6384         * vfm.c: (macro FILTERED) New.
6385         (static var filter_var) New.
6386         (process_active_file_write_case) Use FILTERED.
6387         (setup_filter) Set filter_var.
6388         (close_active_file) Delete the filter if not
6389         FILTER_before_TEMPORARY.
6390         (procedure_write_case) Use FILTERED.
6391
6392 Sat Aug  8 00:20:14 1998  Ben Pfaff  <blp@gnu.org>
6393
6394         * crosstabs.q: Changed /PIVOT={ON,OFF} to /FORMAT={PIVOT,NOPIVOT}.
6395
6396         * data-in.c: (parse_day_count) Message fix.
6397         (parse_month) Style fix.
6398
6399         * data-list.c: (struct data_list_pgm) New member eof.
6400         (cmd_data_list) Init eof to 0.
6401         (do_reading) Implement the /END subcommand and read-past-eof
6402         checking.
6403
6404         * do-if.c: Include stdio.h when debugging.
6405         (cmd_else_if) Make sure the command is .-terminated.
6406
6407         * glob.c: (init_glob) Capitalize the command prompt.
6408
6409         * inpt-pgm.c: (end_case_trns_proc) Debugging message.
6410         (end_file_trns_proc) Debugging message.
6411
6412         * loop.c: (internal_cmd_loop) Make it work when there's no loop
6413         index!
6414         (loop_2_trns_proc) Enable MXLOOPS (why was this disabled?)
6415
6416         * main.c: (dump_token) Make kwtab[] const.
6417
6418         * set.q: Spelling, comment fixes.
6419
6420         * sysfile-info.c: (cmd_display) DISPLAY VECTORS not DISPLAY
6421         VECTOR.
6422
6423         * vars-prs.c: (fill_all_vars) Style fix.
6424
6425         * vfm.c: (index_to_varname) Return const.
6426
6427 Tue Aug  4 23:49:23 1998  Ben Pfaff  <blp@gnu.org>
6428
6429         * Changes in many source files for partial -ansi -pedantic and
6430         no-debugging compliance: Remove trailing common in enum
6431         declarations; add `unused' attributes; insert some appropriate
6432         casts.
6433
6434         * cmdline.c: (parse_command_line) Add new --testing-mode flag.
6435
6436         * command.c: (shell) Make static.
6437         (run_command) Make static.
6438
6439         * data-list.c: (dump_fixed_table) Remove use of local_strdup().
6440
6441         * dfm.c: (cmd_begin_data) I18n fix.
6442
6443         * error.c: (verbose_msg) Define if __STRICT_ANSI__.
6444
6445         * error.h: (macro verbose_msg) Define if __STRICT_ANSI__.
6446
6447         * expr-opt.c: (evaluate_tree) Don't initialize local arrays if
6448         __STRICT_ANSI__.
6449
6450         * file-handle.q: Don't prepend the source file directory name to
6451         the data file name.  (Ongoing issue.)
6452         (prepend_current_directory) Comment out.
6453         (internal_cmd_file_handle) Don't call prepend_current_directory().
6454         (fh_get_handle_by_filename) Ditto.
6455
6456         * filename.c: Append zero byte to readlink() return value.
6457
6458         * getline.c: (getl_read_line) I18n fix.
6459
6460         * lexer.h: Don't use gcc features if __STRICT_ANSI__.
6461
6462         * misc.h: Don't use gcc features if __STRICT_ANSI__.
6463
6464         * pfm-write.c: (bufwrite) Don't try to increment a void * pointer
6465         directly.
6466
6467         * postscript.c: (output_encodings) Don't use local_strdup().
6468         (postopen) Ditto.
6469
6470         * print.c: Don't use gcc features if __STRICT_ANSI__.
6471
6472         * q2c.c: (dump_vars) Don't put a , at the end of the last enum.
6473
6474         * recode.c: (parse_src_spec) Fully brace nested if's.
6475
6476         * set.q: (global var set_testing_mode) New var.
6477
6478 Wed Jul 29 22:01:44 1998  Ben Pfaff  <blp@gnu.org>
6479
6480         * ascii.c: Add some more `unused' attributes that only come into
6481         play when NDEBUG is defined.
6482         (ascii_close_page) Set s_len when reallocating s.
6483         
6484         * crosstabs.q: (delete_missing) New function.
6485         (output_pivot_table) Call delete_missing() if /MISSING=REPORT.
6486         (make_summary_table) Create summary table reallocable.
6487
6488         * postscript.c: Add more `unused' attributes as above.
6489
6490         * tab.c: (tab_create) [GLOBAL_DEBUGGING] Set reallocable member.
6491         (tab_realloc) [GLOBAL_DEBUGGING] Assert that table is reallocable.
6492          
6493         * tab.h: (struct tab_table) [GLOBAL_DEBUGGING] New `reallocable'
6494         member.
6495
6496         * var.h: (macro force_dup_variable) [!GLOBAL_DEBUGGING] Remove
6497         gratuitous space between parameter definition.
6498
6499         * vars-atr.c: Changed some assert(0)'s to abort()'s to prevent
6500         complaints about running off the end of functions with NDEBUG
6501         enabled.
6502
6503 Sun Jul  5 00:17:25 1998  Ben Pfaff  <blp@gnu.org>
6504
6505         * Several source files: Removed some PORTME notes when reflection
6506         revealed that ANSI forbids that sort of breakage.  Also, added
6507         lots of `unused' qualifiers here and there.
6508
6509         * aggregate.c: (accumulate_aggregate_info) Remove local var
6510         weighting that turned out not to be used.
6511
6512         * avl.c: Update to version 1.1.0.  Add unused specifier.
6513         (avl_destroy) Initialize ab to 0.  Comment fixes.  Cast return
6514         value to void *.
6515         (avl_probe) Replace some instances of 1 with +1 where appropriate.
6516         (avl_find) Cast return value to void *.
6517         (avl_delete) q doesn't need to be initialized at the beginning of
6518         the function.  Replace some instances of 1 with +1.
6519         (force_avl_delete) Renamed avl_force_delete, all references changed.
6520         (compare_ints) `param' marked unused.
6521         (print_int) `param' marked unused.
6522         (recurse_tree) Replace some instances of 1 with +1.
6523
6524         * avl.h: Update to version 1.1.0.  Only declares avl function
6525         types if not already declared.
6526         (AVL_MAX_HEIGHT) Only define if not already defined.
6527         (struct avl_node) New unused member char pad[2].
6528         [GLOBAL_DEBUGGING] Change conditionalization to NDEBUG instead.
6529         (force_avl_insert) Renamed avl_force_insert.
6530         (force_avl_delete) Renamed avl_force_delete.
6531
6532         * crosstabs.q: (struct table_entry) Put `freq' into a union with
6533         new member `data'.
6534         (struct crosstab) Add new member `ofs'.
6535         (glob var int_tab) Removed.
6536         (custom_tables) In integer mode, assign v[i] properly through the
6537         indirect var_dict.
6538         (custom_variables) Now p.crs.max == max + 1.
6539         [DEBUGGING] (debug_print) p.crs.min and p.crs.max are now ints.
6540         (precalc) Implement integer mode.
6541         (calc_integer) Implement integer mode.
6542         (compare_table_entry) Remove unused local variable `comparing'.
6543         (make_summary_table) Implement integer mode.
6544         (macro ns_rows) Implemented as static variable now.
6545         (several variables) Made static, from global.
6546         (output_pivot_table) Use table_value_missing() for column heads.
6547         Remove several unused local variables.  Implement integer mode
6548         table summing.  Count up ns_rows.
6549         (crosstabs_dim) Make columns wider when /MISSING=REPORT requested.
6550         (find_pivot_extent) Moved into find_pivot_extent_general; now just
6551         calls that function or find_pivot_extent_integer.
6552         (find_pivot_extent_integer) New function.
6553         (enum_var_values) Implemented for integer mode.
6554         (table_value_missing) New function.
6555         (display_dimensions) Call table_value_missing() for heads.
6556         (float_M_suffix) New function.
6557         (display_crosstabulation) Call table_value_missing() for row
6558         heads.  Handle missing values in /MISSING=REPORT mode.
6559         (calc_fisher) Remove unused var N.
6560         (calc_r) Remove unused var fact.
6561
6562         * data-list.c: (dump_fixed_table) Fix table dimensioning.
6563         (read_one_set_of_repetitions) Remove unused vars var_spec, column.
6564
6565         * data-out.c: (insert_commas) Remove unused var cp.
6566         (convert_CCx) Remove unused vars save_set_decimal,
6567         save_set_grouping.
6568
6569         * descript.q: (dump_z_table) Fix table dimensioning.
6570         (pre_calc) Remove unused var j.
6571         (display) Remove unused vars title, s.  Fix table dimensioning.
6572
6573         * expr-evl.c: Comment fixes.
6574
6575         * frequencies.q: (full_dim) New function.
6576         (dump_full) Fix table dimensioning.
6577         (condensed_dim) New function.
6578         (dump_condensed) Fix table dimensioning.
6579
6580         * get.c: (cmd_match_files) Remove unused var n_val.  Remove unused
6581         label winnage.
6582
6583         * html.c: (html_close_drive) Remove unused var i.
6584         (postopen) Remove unused vars title, curfn_len, cp.
6585         (preclose) Remove unused vars this, x.
6586
6587         * lexer.c: Comment fixes.
6588
6589         * matrix-data.c: (cmd_matrix_data) Remove unused var index.
6590
6591         * means.q: (custom_tables) Remove unused var m_dim.
6592
6593         * mis-val.c: Format fix.
6594
6595         * modify-vars.c: (cmd_modify_vars) Remove unused var new_dict.
6596
6597         * output.c: (outp_get_paper_size) Remove unused var cp.
6598
6599         * pfm-read.c: (read_float) Remove unused var save, unused label
6600         underflow.
6601         (read_variables) Remove unused vars cp, j.
6602         (read_value_label) Remove unused var j.
6603
6604         * pfm-write.c: (bufwrite) Remove unused var i.
6605
6606         * postscript.c: (ps_postopen_drive) Remove unused vars dev_info,
6607         fn.
6608         (output_encodings) Remove unused vars char_cp, n_output.
6609         (read_ps_encodings) Remove unused var ep.
6610         (postopen) Remove unused var title.
6611         (preclose) Remove unused var fp.
6612         (ps_open_page) Remove unused vars true, false, orientation,
6613         mirror_horz, mirror_vert, width, length.
6614         (ps_text_metrics) Remove unused var x.
6615
6616         * q2c.c: (find_symbol) Remove unused var y.
6617         (parse_setting) Remove unused parameter sbc, all references
6618         changed.
6619         (dump_parser) Remove unused var cp.
6620         (dump_free) Remove unused var i.
6621
6622         * set.q: (static vars args, n) Removed.
6623         (internal_cmd_gset) Removed.
6624
6625         * sfm-read.c: (sfm_read_dictionary) Removed unused var i.
6626         (read_machine_flt64_info) Removed unused var file_endian.
6627         (read_documents) Removed unused var i.
6628         (read_compressed_data) Removed unused parameter dict, all
6629         references changed.
6630
6631         * sfm-write.c: (bufwrite) Removed unused var i.
6632         (sfm_write_case) Removed unused var i.
6633
6634         * sort.c: (merge_once) Remove unused var t.
6635         (write_separate) #if 0 out as dead code.
6636
6637         * split-file.c: (cmd_split_file) Remove unused var i.
6638
6639         * sysfile-info.c: (sysfile_info_dim) New function.
6640         (cmd_sysfile_info) Fix table dimensioning.
6641         (variables_dim) New function.
6642         (display_variables) Fix table dimensioning.
6643         (describe_variable) Remove unused var prev_r.
6644
6645         * t-test.q: (z_postcalc) Removed.
6646         (pairs_calc) Remove unused var bad_weight.
6647         (postcalc) Remove unused vars dfn, dfd.
6648
6649         * tab.c: (tab_create) Set t->dim to NULL.
6650         (tab_dim) Make sure t->dim is NULL first.
6651         (tab_natural_width) Remove parameter `clamp'.
6652         (tab_value) Remove duplicate assertion for table.
6653         (tab_raw) New function.
6654         (nowrap_dim) New function.
6655         (wrap_dim) New function.
6656         (tab_output_text) Fix table dimensioning.
6657
6658         * tab.h: (tab_raw) New macro.
6659
6660         * val-labs.c: (get_label) Remove unused var type.
6661         (copy_value_labels) Remove unused var trav.
6662
6663         * var.h: (struct crosstab_proc) Completely changed.
6664
6665         * vars-prs.c: (parse_dict_variable) Remove unused var v.
6666
6667         * vfm.c: (open_active_file) Remove unused vars i, lp.
6668
6669         * weight.c: (weight_trns_proc) #if 0 out as dead code.
6670         
6671 Tue Jun  2 23:37:21 1998  Ben Pfaff  <blp@gnu.org>
6672
6673         * Makefile.am: Add apply-dict.c, flip.c.
6674
6675         * apply-dict.c: New file.
6676         
6677         * command.c: (struct command) Make cmd[] larger for CLEAR
6678         TRANSFORMATIONS command name.
6679         (parse_cmd) Make sure we're in a valid state before using it as an
6680         index.  Discard variables and reset state on invalid transitions.
6681         (cmd_clear_transformations) New function.
6682
6683         * command.def: Add APPLY DICTIONARY, CLEAR TRANSFORMATIONS, FLIP.
6684         Add unimplemented PRESERVE, RESTORE.
6685
6686         * file-handle.h: Include stddef.h.
6687
6688         * flip.c: New file.
6689         
6690         * pfm-read.c: (parse_value) Pad value label values with spaces,
6691         not nulls.
6692
6693         * sfm-read.c: (struct sfm_fhuser_ext) Add reference count.
6694         (sfm_close) Decrement reference count, make sure it's zero.
6695         (sfm_maybe_close) New function.
6696         (sfm_read_dictionary) Handle reference counts.
6697
6698         * vars-atr.c: (clear_default_dict) New function.
6699         (discard_variables) Use clear_default_dict().
6700
6701 Sun May 31 00:58:05 1998  Ben Pfaff  <blp@gnu.org>
6702
6703         * Makefile.am: Add pfm-write.c.
6704         (LDADD) Add the libgmp2 libraries.
6705
6706         * command.def: Define EXPORT.
6707
6708         * get.c: (cmd_export) New function.
6709         (export_write_case_func) New function.
6710
6711         * pfm-read.c: (static spss2ascii[]) Make it const.
6712
6713         * pfm-write.c: New file.
6714
6715         * sfm-write.c: Formatting, comment fixes.
6716
6717         * var.h: Comment fix.
6718
6719 Fri May 29 21:44:12 1998  Ben Pfaff  <blp@gnu.org>
6720
6721         * Makefile.am: Add pfm.h, pfm-read.c.
6722
6723         * command.def: IMPORT is now implemented.
6724
6725         * format.c: (glob var translate_fmt[]) New var.
6726
6727         * get.c: (enum GTSV_NONE) Renamed GTSV_OPT_NONE.
6728         (cmd_import) New function.
6729         (import_source_read) New function.
6730         (glob var import_source) New var.
6731
6732         * pfm-read.c: New file.
6733
6734         * pfm.h: New file.
6735         
6736         * sfm-read.c: (parse_format_spec) Local variable translate_fmt[]
6737         moved in format.c.
6738         (dump_dictionary) Disabled printing a couple of items.
6739
6740 Mon May 25 12:42:37 1998  Ben Pfaff  <blp@gnu.org>
6741
6742         * crosstabs.q: (postcalc) Call make_summary_table().
6743         (make_summary_table) New function.
6744         (insert_summary) New function.
6745         (display_dimensions) Remove some unnecessary arguments, all
6746         references changed.
6747         (output_pivot_table) Fix lots of problems with the risk table
6748         setup.
6749         (submit) Don't display an empty table.
6750         (display_risk) Fix order of arguments to calc_risk().
6751
6752         * glob.c: Always include assert.h and stdlib.h.
6753
6754         * output.h: (enum OUTP_T_JUST_FULL) Removed, all references
6755         removed.
6756
6757         * tab.c: (tab_create) Cosmetic changes.
6758
6759         * tab.h: (enum TAB_JUSTIFY) Removed, all references removed.
6760
6761 Sun May 24 22:39:23 1998  Ben Pfaff  <blp@gnu.org>
6762
6763         * tab.def: Removed.
6764
6765         * crosstabs.q: (output_pivot_table) Headers drawing and submission
6766         code simplified, moved into new function submit().
6767         (submit) New function.
6768         (crosstabs_dim) New function.
6769         (display_directional) Substitute variable names for %s where
6770         appropriate.
6771         (somers_d_v[], somers_d_ase[], somers_d_t[]) New static vars.
6772         (calc_symmetric) Initialize parameters only if non-NULL.
6773         Calculate Somers' d.
6774         (calc_directional) Calculate Somers' d (or copy it, really).
6775         Calculate eta.
6776
6777         * output.c: (outp_string_width) New function.
6778
6779         * postscript.c: (postopen) Calculate font widths based on the
6780         width of the zero '0' character, not the width of the space
6781         character.  Set paper-width and paper-length based on points, not
6782         device units.
6783         (ps_open_page) Fix page setup string for landscape mode.
6784
6785         * som.h: (struct som_dimension) Removed.
6786         (struct som_table_class) height, width members take int * not
6787         som_dimesion * now.
6788
6789         * tab.c: Many functions now have added parameter validation.
6790         (tab_height, tab_width) These functions were removed and merged
6791         into a single function tab_resize(), and all references changed.
6792         (tab_dim) Rewritten since the interface changed; reduced from
6793         hundreds of lines to two.  All callers were changed.  Currently
6794         most of them just use tab_natural_dimensions as their callback and
6795         await detailed translation of functionality.
6796         (tab_natural_width) New function.
6797         (tab_natural_height) New function.
6798         (tab_natural_dimensions) New function.  This is a callback
6799         function, not something that you'd want to call directly.
6800         (tab_nat_dim) Removed.
6801         (tabi_table) Allocates t->w and t->h.
6802         (tabi_driver) Inlined sum_columns()'s functionality.  Calls the
6803         dimensions callback.
6804         (evaluate_dimensions) Removed.
6805         (sum_columns) Removed.
6806
6807         * tab.h: (enum TAL_1THIN) Removed.
6808         (enum series t_*) Removed.
6809         (struct tab_table) Members trh, trv changed to unsigned char *
6810         from int *.  Member dim changed to a function pointer from a
6811         unsigned char *.  Member max_stack_height removed.  New members
6812         hr_tot, vr_tot.
6813         (macros tab_l, tab_r, tab_t, tab_b) New.
6814
6815 Sat May 23 23:22:13 1998  Ben Pfaff  <blp@gnu.org>
6816
6817         * ascii.c: (delineate) Assign last_space_nchars before skipping
6818         spaces, to fix right justification.
6819
6820         * crosstabs.q: (static vars risk, direct) New vars.
6821         (static var pearson_r) Removed.
6822         (glob var chisq_fisher) Made static.
6823         (static vars row_tot[], col_tot[]) Don't include grand total
6824         anymore.
6825         (static var grand_total) Renamed W, all references changed.
6826         (output_pivot_table) Only make `table' if num_cells != 0.  Make
6827         risk and directional tables.  Deal with grand total no longer part
6828         of col_tot[].  Free rows and cols after we're done with them.
6829         (display_risk) New function.
6830         (display_directional) New function.
6831         (clac_r) Rewritten so that it stores all its results into its
6832         arguments, so it can be used for Spearman's correlation too.
6833         (calc_symmetric) Added a t[] argument, all references changed.
6834         Calculates ASEs for tau-b, tau-c, gamma.  Calculates Spearman's r,
6835         Pearson's r, Cohen's kappa.
6836         (calc_risk) New function.
6837         (calc_directional) New function.
6838
6839         * som.c: (som_submit) Improved debugging code.
6840
6841         * stats.c: (hypercube) New function.
6842         (cube) New function.
6843         (sqr) New function.
6844         (normal_sig) Went back to old implementation, which actually
6845         worked.
6846
6847         * stats.h: (macros square, cube, hypercube) Removed.  The
6848         equivalent functions in stats.c are inlined here; all references
6849         to square changed to sqr.
6850
6851 Fri May 22 00:03:41 1998  Ben Pfaff  <blp@gnu.org>
6852
6853         * crosstabs.q: (N_SYMMETRIC) New define.
6854         (postcalc) Disable debug printing.
6855         (static vars chisq_fisher, pearson_r) New.
6856         (output_pivot_table) Add support for symmetric measures.  Add
6857         chi-square output of exact sigs.
6858         (display_chisq) Rewritten.
6859         (display_symmetric) New function.
6860         (gamma_int) New function.
6861         (Pr) New function.
6862         (swap) New function.
6863         (calc_fisher) New function.
6864         (calc_chisq) Check boundary conditions better. Calculate Yates,
6865         Fisher, Mantel-Haenszel tests.
6866         (calc_r) New function.
6867         (calc_symmetric) New function.
6868
6869         * stats.c: (normal_sig) Rewritten with new algorithm.  Renamed
6870         from calc_normal.
6871         (chisq_sig) Better boundary conditions.  Renamed from
6872         calc_significance.
6873
6874         * tab.h: (struct tab_table) New member cf.
6875
6876         * tab.c: (tab_create) Set cf.
6877         (tab_width) New function.
6878         (tab_realloc) Handle cf.
6879         (tab_vline) Handle cf.
6880         (tab_hline) Handle cf.
6881         (tab_box) Handle cf.
6882         (tab_value) Handle cf.
6883         (tab_float) Handle cf.
6884         (tab_text) Handle cf.
6885         (tab_joint_text) Handle cf.
6886         (tab_offset) Handle cf.
6887         (tab_next_row) Handle cf.
6888         (evaluate_dimensions) Handle cf.
6889         (render_strip) Handle cf.
6890
6891 Wed May 20 00:03:59 1998  Ben Pfaff  <blp@gnu.org>
6892
6893         * crosstabs.q: (postcalc) New vars row_tot, col_tot, pass them to
6894         output_pivot_table().
6895         (output_pivot_table) Moved lots of local variables outside and
6896         made them static.  Add beginnings of chi-square statistic
6897         support.  Now column and row totals aren't in the main matrix.
6898         Always zero out any leftover rows & columns after we're done with
6899         the table entries.  Move all output stuff into
6900         display_dimensions(), display_crosstabs(), display_chisq().
6901         (display_dimensions) New function.
6902         (display_crosstabulation) New function.
6903         (display_chisq) New function.
6904         (calc_chisq) Implemented Pearson and likelihood-ratio chisquares.
6905
6906         * frequencies.q: (dump_full, dump_condensed) Remove tab_null()
6907         references, simplify logic.
6908
6909         * postscript.c: Remove scale, translate-x, translate-y,
6910         mirror-horz, mirror-vert, rotate-180 options.
6911         (struct ps_driver_ext) Remove scale, translate_x, translate_y.
6912         All references deleted.
6913         (macro YT) New macro.
6914         (array option_tab[]) Removed options.
6915         (ps_option) Removed options.
6916         (ps_open_page) Write page setup explicitly to output file, without
6917         using now-deleted BP function.
6918         (macro dump_line) Use YT().
6919         (macro dump_thick_line) Use YT().
6920         (draw_headers) Use YT().
6921         (switch_font) Reorder arguments to SF function.
6922         (write_text) Use YT().
6923
6924         * sfm-read.c: (sfm_read_case) Don't attempt to read variables that
6925         have get.fv == -1.
6926
6927         * sysfile-info.c: (describe_variables) Don't use tab_nulls().
6928
6929         * tab.c: (tab_create) Initialize t->ct to zeros.  Remove
6930         null-debugging code.
6931         (tab_realloc) Remove null-debugging code.  Initialize new regions
6932         of t->ct to zeros.
6933         (tab_vline) Support offsets.
6934         (tab_hline) Support offsets.
6935         (tab_box) Support offsets.
6936         (tab_null) Removed.
6937         (tab_nulls) Removed.
6938         (tab_row) Removed.
6939         (tab_col) Removed.
6940         (evaluate_dimensions) Remove null-debugging code.  Understand
6941         TAB_EMPTY attribute.  Assert that text.s.s is always non-NULL if
6942         TAB_EMPTY not present.
6943
6944         * tab.h: New cell attribute TAB_EMPTY.
6945         (macros tab_nr, tab_nc, tab_row, tab_col) New.
6946
6947         * vars-atr.c: (init_variable) Set get.fv to -1 so that GET doesn't
6948         try to read them from system files.
6949
6950         * vfm.c: (dump_splits) Don't call tab_null().   
6951
6952 Sat May 16 19:36:55 1998  Ben Pfaff  <blp@gnu.org>
6953
6954         * crosstabs.q: (struct crosstab) Added `missing' member.
6955         (custom_tables) Init missing.
6956         (calc_general) Handle missing values.
6957         (calc_chisq) New function.
6958         (output_pivot_table) Start work on chi-square output.  Update for
6959         new tab offset support functions.  Shorten statistic names.
6960
6961         * Several files: add in more `const's to placate gcc's warnings.
6962
6963         * tab.h: (struct tab_table) Add col_ofs, row_ofs members.  Comment
6964         fixes.
6965
6966         * tab.c: (tab_height, tab_realloc, tab_vline, tab_hline, tab_box,
6967         tab_null, tab_nulls, tab_value, tab_float, tab_text,
6968         tab_joint_text) Add col_ofs and row_ofs support.
6969         (tab_offset) New function.
6970         (tab_next_row) New function.
6971         (tab_row) New function.
6972         (tab_col) New function.
6973         (tabi_table) Add col_ofs and row_ofs support.
6974
6975         * vars-atr.c: (is_system_missing) New function.
6976
6977 Tue May 12 16:14:30 1998  Ben Pfaff  <blp@gnu.org>
6978
6979         * crosstabs.q: Expanded subcommand names RESID --> RESIDUAL, etc.
6980         (static var no_cells) Removed.
6981         (static var num_cells) New.
6982         (static var expected) New.
6983         (static var cells[]) New.
6984         (internal_cmd_crosstabs) Deal with new variables.
6985         (postcalc) Removed most of the meat and put it in new function
6986         output_pivot_table().
6987         (output_pivot_table) Calculates and outputs an entire pivot table.
6988
6989         * postscript.c: (postopen) Fix problems with free()ing addresses
6990         not obtained from malloc().
6991
6992         * som.c: (som_submit) Add assertion.
6993
6994         * sysfile-info.c: (describe_variable) Use new tab_nulls()
6995         function.
6996
6997         * tab.c: (static var tab_names[]) New.
6998         (tab_realloc) -1 for nc or nr indicates no change.
6999         (tab_nulls) New function.
7000         (tab_dim) Use tab_names[].
7001         (tabi_cumulate) Don't include bottom or right headers.  Furrfu.
7002         (evaluate_dimensions) Don't terminate on uninited cells, just put
7003         an X in them and emit a notice.  Use tab_names[].
7004
7005         * tab.h: Move bits into tab.def.
7006
7007         * tab.def: New.  Don't try to declare tab_table_class because then
7008         som.h has to be included.       
7009         
7010 Thu May  7 22:55:04 1998  Ben Pfaff  <blp@gnu.org>
7011
7012         * command.def: New file, contains all the command definitions
7013         previously included bodily in command.c.
7014
7015         * format.def: New file, contains all of the format definitions
7016         previously split across format.h, format.c, and sfm-write.c.
7017
7018         * lexer.h: Renamed from tokens.h in order to match corresponding
7019         .c file name.
7020
7021         * lexerP.h: Moved some rarely used functions exported by lexer.c
7022         into here.
7023
7024         * Makefile.am: Commemorate renamed files.
7025         (EXTRA_DIST) Add command.def, format.def.
7026
7027         * command.c: [0] (walk_cmdtable_func) Removed.
7028
7029         * crosstabs.q: (postcalc) Made it work and print out matrices
7030         proving it.
7031         (enum_column_values) Renamed enum_var_values, generalized for any
7032         variable.
7033
7034         * format.h: (struct fmt_desc) New member `spss'.
7035
7036         * q2c.c: (main) Generated code includes lexer.h instead of
7037         tokens.h.
7038
7039         * sfm-write.c: (write_format_spec) Use new spss member of fmt_spec
7040         instead of an independent translation table.
7041
7042 Tue May  5 13:19:03 1998  Ben Pfaff  <blp@gnu.org>
7043
7044         * Lots of source files: Added const to declarations.
7045
7046         * aggregate.c: (parse_aggregate_function) Rename inner i to j.
7047         
7048         * arena.c: (arena_clear) Set prev pointer to null when done.
7049
7050         * ascii.c: (ascii_option) Rename index as indx.
7051
7052         * avl.c: This is now a separate library called libavl.
7053         (xmalloc) Make static.
7054         (avl_probe) Step A7 can use the cache instead of an explicit
7055         compare.
7056         (avl_delete) Don't maintain a q pointer because it's always
7057         available in the pointer stack.  Comment fix.
7058
7059         * avl.h: This is now a separate library called libavl.
7060
7061         * command.c: (cmd_table[]) Remove spurious trailing "".
7062
7063         * common.h: Only include random() fix if this system needs it.
7064
7065         * crosstabs.q: Include alloca headers.
7066         (n_sorted_tab) New global var.
7067         (postcalc) Mostly rewritten.
7068         (find_pivot_extent) Rewritten.
7069         (enum_column_values) Rewritten.
7070
7071         * data-out.c: (convert_F) Rename inner n as n_spaces.
7072
7073         * error.c: (dump_message) Don't have an outer var i.
7074
7075         * file-handle.q: (static var f) Removed.  All references removed.
7076         (internal_cmd_file_handle) Uses a local variable instead of f.
7077
7078         * get.c: (trim_dictionary) Change scope of i, i1, i2.
7079         (cmd_match_files) Don't strcpy tokstr into sbc (why was this ever
7080         done?)
7081
7082         * getline.h: Declare getl_history as extern.  Reported by
7083         palme@uni-wuppertal.de (Hubert Palme).
7084
7085         * postscript.c: (postopen) Some large mods for constness.
7086
7087         * recode.c: Remove spurious copyrights since PSPP is owned by FSF
7088         anyway.
7089
7090 Fri Apr 24 12:52:47 1998  Ben Pfaff  <blp@gnu.org>
7091
7092         * Makefile.am: Rename BUILT_SOURCES to q_sources, all references
7093         changed.  Add avl.c, avl.h to pspp_SOURCES.  Remove avllib from
7094         LDADD.
7095
7096         * avl.c, avl.h: New files.  These form a clean-room
7097         reimplementation of avllib.  Iterative algorithms are used in
7098         place of recursive ones, so there is no resemblance in the code.
7099
7100         * Lots of headers: Don't include other headers by default.
7101
7102         * Lots of source files: Explicitly include all needed headers.
7103
7104         * arena.c: (arena_clear) New function.
7105
7106         * crosstabs.q: (ROW_VAR, COL_VAR) New enums.
7107         (static var ar) Removed.
7108         (staitc vars ar_tc, ar_col) New.
7109         (cmd_crosstabs) Destroy the arenas.
7110         (internal_cmd_crosstabs) Create the arenas.
7111         (precalc) Don't need a free function for the hash.
7112         (calc_general) Make sure to zero out the trailer on the key data
7113         before inserting.
7114         (print_table_entries) Updated.
7115         (postcalc) Worked on actually implementing.
7116         (find_pivot_extent) New function.
7117         (compare_value) New function.
7118         (enum_column_values) New function.
7119
7120         * data-in.c: (parse_month) Make local array `static const'.
7121         
7122         * data-out.c: (convert_date) Make local array `static const'.
7123         (convert_WKDAY) Same.
7124         (convert_MONTH) Same.
7125
7126         * frequencies.q: (postprocess_freq_tab) avl_walk_inorder() has
7127         been renamed to avl_walk().
7128         
7129         * hash.c: Rewritten more efficiently.
7130
7131         * hash.h: Add attribute const to hsh_next_prime declaration.
7132
7133         * lexer.c: (id_match) Make arguments const.
7134
7135         * postscript.c: (ps_postopen_driver) Make default fonts the
7136         Helvetica family.
7137
7138         * q2c.c: (main) Generated code needs stdlib.h.
7139
7140         * sfm-write.c: (write_value_labels) An avl_traverser needs to be
7141         initialized to 0 now, not to NULL.  All other references to
7142         avl_traverser were updated in the same way.
7143
7144         * tokens.h: Macro version of id_match updated to use const
7145         properly.
7146
7147         * val-labs.c: (inc_ref_count) New function.
7148         (copy_value_labels) Simply through use of new avl_copy() function.
7149
7150 Wed Apr 15 13:01:58 1998  Ben Pfaff  <blp@gnu.org>
7151
7152         * crosstabs.q: Probably doesn't compile.  New PIVOT subcommand.
7153         (postcalc) Worked on this.
7154
7155         * postscript.c: (OPO_DOUBLE_LINE) New enum.
7156         (struct ps_driver_ext) New line_width_thick member.
7157         (ps_preopen_drive) Init line_width_thick.
7158         (option_tab[]) Add line-* options.
7159         (ps_option) Parse line-* options.
7160         (postopen) Add line_width_thick support.  Strip leading spaces on
7161         prologue output lines.
7162         (ps_open_page) Include line_width_thick in output.
7163         (macro dump_thick_line) New.
7164         (dump_fancy_line) Support thick lines as well as double lines.
7165
7166 Tue Apr 14 00:50:08 1998  Ben Pfaff  <blp@gnu.org>
7167
7168         * Makefile.am: Add crosstabs.c to BUILT_SOURCES.  Add crosstabs.q
7169         to pspp_SOURCES.  Add crosstabs.q to EXTRA_DIST.
7170
7171         * Many source files: Rename `options' to `pv_opts' as appropriate.
7172
7173         * command.c: (static var cmd_table[]) Add CROSSTABS command.
7174
7175         * common.c: (xcalloc) New function.
7176
7177         * crosstabs.q: New file.  Not finished yet, though.
7178                 
7179         * data-list.c: Comment fix.
7180
7181         * error.c: Remove some old Checker cruft.
7182
7183         * frequencies.q: (dump_full) Cumulate valid percent instead of
7184         regular percent.
7185
7186         * getline.c: Comment fix.
7187
7188         * hash.c: Comment fixes.
7189
7190         * hash.h: (struct hsh_table) Make hash functions return unsigned
7191         instead of int to avoid problems with taking the modulo of
7192         negative return values.  All references changed.
7193
7194         * misc.c: (intlog10) Make its table static const instead of auto.
7195
7196         * sfm-read.c: (read_header) Make `prefix' static const instead of
7197         auto.
7198
7199         * var.h: (union value) Add member `hash'.
7200         (struct variable) Rename prv_index as `foo'--all references
7201         changed.  Reorder.
7202         (typedef pv_opts) Removed.  All references changed.
7203
7204         * vars-prs.c: (parse_variables) Message fixes.
7205         
7206 Mon Mar  9 15:35:08 1998  Ben Pfaff  <blp@gnu.org>
7207
7208         * get.c: (cmd_match_files) Don't reverse the order of FILEs as
7209         they are being inserted.  Don't check for BY variables of
7210         different types.  Discard variables if the active file isn't
7211         included in the merge.
7212         (mtf_processing) Essentially rewritten.
7213         (mtf_merge_dictionary) Check for master/slave variables of
7214         different types/widths.
7215
7216         * vfm.c: (static var not_canceled) New var.
7217         (process_active_file) Don't call vfm_source->read() if
7218         there's no vfm-source.  Initialize not_canceled.
7219         (process_active_file_write_case) Honor and update not_canceled.
7220         (prepare_for_writing) Rollback changes from yesterday, they were
7221         wrong.
7222         (close_active_file) Don't destroy vfm_source unless it exists.
7223         
7224 Mon Mar  9 00:56:16 1998  Ben Pfaff  <blp@gnu.org>
7225
7226         * Lots of source files: Added { } around nested if/else constructs
7227         to avoid new gcc 2.8 warnings.
7228
7229         * data-in.c: (parse_Z) Declare `int' type explicitly.
7230         (convert_Z) Ditto.
7231
7232         * get.c: (struct mtf_file) Add prev, next_min, by, input members.
7233         (cmd_match_files) Initialize mtf_by_values.  Manage by, input,
7234         prev members.  Put TABLEs at the end of the chain and FILEs at the
7235         beginning.  Don't allow the active file in STATE_INIT.  Use proper
7236         `seen' value for the active file.  Fill out the by members and
7237         make sure they're of consistent type.  Do the actual merge
7238         operation.
7239         (mtf_processing_finish) New function.
7240         (var_type_description) New function.
7241         (mtf_free_file) New function.
7242         (mtf_free) Rewritten.
7243         (mtf_delete_file_in_place) New function.
7244         (mtf_read_nonactive_records) New function.
7245         (mtf_compare_BY_values) New function.
7246         (static var mtf_seq_no) New var.
7247         (mtf_processing) New function.
7248         (mtf_merge_dictionary) Assign nval members for the system file
7249         dictionary.  Assign fv values for its variables.  Point each slave
7250         variable to the corresponding master variable.
7251
7252         * hash.c: Include str.h.
7253
7254         * mis-val.c: (copy_missing_values) src arg is const.
7255
7256         * misc.c: (spacing) Make `max' var explicitly int.
7257
7258         * sfm-read.c: (dump_dictionary) Message reformatting.
7259         (sfm_read_case) Add assertion.
7260
7261         * sort.c: Esthetic fixes.
7262
7263         * var.h: (struct match_files_proc) New struct.
7264         (struct variable) Add private data match_files_proc.
7265
7266         * vars-atr.c: (delete_variable) Implement.  Add argument for the
7267         dictionary that owning the variable.
7268         (dup_variable) Add assertion.
7269
7270         * vfm.c: Comment fixes, hopefully the comments are correct now.
7271         (process_active_file) New function.
7272         (process_active_file_write_case) New function.
7273         (process_active_file_output_case) New function.
7274         (prepare_for_writing) Use temp_dict->nval for vfm_info, not
7275         default_dict.nval.
7276         (write_case) Renamed procedure_write_case().  Now write_case is a
7277         pointer to a function.  Style fixes.
7278         
7279 1998-03-05  Ben Pfaff  <blp@gnu.org>
7280
7281         * Makefile.am: (q2c) Link with libmisc.
7282         (version.c) Define default_config_path, include_path,
7283         groff_font_path.
7284
7285         * ascii.c: (ascii_postopen_driver) When the default newline string
7286         is requested, open file in text mode.  Suggested by
7287         palme@uni-wuppertal.de (Hubert Palme).
7288         (static vars line_buf, line_p) Change from char * to unsigned char
7289         *.
7290         (ascii_close_page) char * to unsigned char *.
7291
7292         * cmdline.c: (parse_command_line) Implement -r option by
7293         prepending ~/.pspp/rc to the list of files to process.
7294
7295         * command.c: (cmd_remark) Reset getl_prompt to the standard prompt
7296         before pulling in a final line.
7297         (null_func, null_int_func) Removed (dead code).
7298
7299         * descript.q: (display) Calculate width of variable name column
7300         properly.  Calculate number of valid cases properly.  Reported by
7301         palme@uni-wuppertal.de (Hubert Palme).
7302
7303         * filename.c: (init_filename) Use default_config_path instead of
7304         now obsolete CONFIG_PATH.
7305
7306         * getline.c: (getl_initialize) Use include_path instead of now
7307         obsolete INCLUDE_PATH.
7308         (getl_add_file) New argument `where'.  All references changed.
7309
7310         * groff.c: (find_font_file) Use groff_font_path instead of now
7311         obsolete GROFF_FONT_PATH.
7312         
7313         * postscript.c: (find_ps_file) Use groff_font_path instead of now
7314         obsolete GROFF_FONT_PATH.  Copy through temporary variable to
7315         avoid problems with constness.
7316
7317         * str.h: (macro cs_streq) New macro.
7318
7319         * version.h: (glob var default_config_path, include_path,
7320         groff_font_path) New vars.
7321         
7322 1998-02-23  Ben Pfaff  <blp@gnu.org>
7323
7324         * Many source files: Change verbose_msg() priority levels and
7325         messages.
7326
7327         * aggregate.c: Include debug-print.h.
7328
7329         * cmdline.c: (parse_command_line) Add --safer/-s and --command/-c
7330         options.
7331         (static var pre_syntax_message) Document --safer/-s and
7332         --command/-c.
7333
7334         * command.c: (cmd_erase, cmd_host) Disable if set_safer is set.
7335
7336         * dfm.c: (open_inline_file) [__CHECKER__] Zero out ext->file,
7337         because it's not used but it's still copied.
7338         (open_file_r) Remove gratuitous debug message.
7339
7340         * filename.c: (safety_violation) New function.
7341         (open_file) Remove gratuitous debug messages.  Don't allow pipe
7342         files if set_safer is set.
7343
7344         * get.c: Turn off debugging.
7345
7346         * getline.c: (getl_add_virtual_file) New function.
7347         (getl_read_line) Add verbose_msg() call for opening new syntax
7348         file.
7349         (getl_perform_delayed_reset) Add a return value describing whether
7350         any action was taken.  Call reset_eof().
7351
7352         * getline.h: Comment fix.
7353
7354         * groff-font.c: (groff_read_font) Use `goto next_iteration' in
7355         place of incorrect `continue'.  Use strtok_r() instead of
7356         strtok().  Always check strtok_r() return value.
7357         (groff_read_DESC) Use strtok_r() instead of strtok().
7358
7359         * lexer.c: (reset_eof) New function.
7360
7361         * main.c: (parse) Get a token after performing a delayed reset
7362         action; allow empty syntax files.
7363
7364         * postscript.c: (output_encodings) Use strtok_r() instead of
7365         strtok().
7366
7367         * q2c.c: (dump_parser) Use strtok_r() instead of strtok().
7368
7369         * set.q: Comment fixes.
7370         (glob var set_safer) New var.
7371         (internal_cmd_set) Support SAFER.
7372
7373         * str.h: [!HAVE_STRTOK_R] Declare strtok_r() prototype.
7374
7375         * temporary.c: (free_dictionary) Set d->splits to NULL after
7376         freeing.
7377
7378         * vars-atr.c: (clear_variable) Decrement dict->n_splits if
7379         variable deleted, not if it *isn't* deleted.
7380
7381 1998-02-16  Ben Pfaff  <blp@gnu.org>
7382
7383         * command.c: (array cmd_table[]) Add MATCH FILES.
7384
7385         * common.c: Comment fixes.
7386
7387         * data-list.c, dfm.c, error.c, filename.c, list.q, matrix-data.c,
7388         modify-vars.c, postscript.c, sfm-read.c, sfm-write.c, tab.c:
7389         Include alloca.h.  Problem reported by palme@uni-wuppertal.de
7390         (Hubert Palme).
7391
7392         * expr-opt.c: Include str.h.  Problem reported by
7393         palme@uni-wuppertal.de (Hubert Palme).
7394
7395         * get.c: (cmd_get) [DEBUGGING] Update v->p.get to v->get.
7396         (static var mtf_by) Change from char ** to variable **.
7397         (static var mtf_master) New var.
7398         (mtf_merge_dictionary) New function.
7399         (cmd_match_files) Init mtf_master.  Parse mtf_by according to new
7400         var type.  Reorder tests properly.  Initialize file->dict.  Detect
7401         TABLE= without BY=.  Read file dictionaries and merge them.  Give
7402         subcommand name with IN, LAST, FIRST error messages.  Create IN,
7403         LAST, FIRST variables.  Comment fixes.
7404         (mtf_free) Don't free default_dict.  Free mtf_master.
7405
7406         * getline.c: Define getl_mode.  Change getl_buf_size to size_t
7407         from int.
7408         (handle_line_buffer) Cast int to size_t in comparison to avoid
7409         warning.
7410
7411         * getline.h: Declare getl_mode extern.
7412
7413         * groff-font.c: (groff_read_font) Type-fix calls to getline.
7414         (groff_read_DESC) Make line_size a size_t.
7415         (match_tok) Parenthesize name to avoid macro expansion.
7416
7417         * mis-val.c: (copy_missing_values) New function.
7418
7419         * postscript.c: (postopen) Make buf_size a size_t.
7420
7421         * sfm-read.c: (dump_dictionary) Make global from static.  Print
7422         variable info in parts for easier debugging with Checker.
7423
7424         * temporary.c: (copy_variable) Use copy_value_labels().
7425         (new_dictionary) New arg: whether to copy file label, documents.
7426
7427         * val-labs.c: (copy_value_labels) New function.
7428
7429         * var.h: (enums MISSING_*) Add MISSING_COUNT.
7430
7431         * vars-atr.c: [GLOBAL_DEBUGGING] (force_dup_variable) New
7432         function.
7433         (dup_variable) Set prv_index, get.fv, get.nv.
7434
7435 Fri Feb 13 15:38:36 1998  Ben Pfaff  <blp@gnu.org>
7436
7437         * Makefile.am: (pspp_SOURCE) Add htmlP.h.
7438
7439         * Many source files: For ANSI-compliance, add empty statement
7440         after label.  Reported by palme@uni-wuppertal.de (Hubert Palme)
7441         and Micah Altman <maltman@www-vdc.fas.harvard.edu>.
7442
7443         * data-in.c: (parse_numeric) Some header files break on
7444         -DBL_MIN_10_EXP because they get a --; add () for safety.
7445         Reported by palme@uni-wuppertal.de (Hubert Palme).
7446
7447         * dfm.c: Idea by Dr Eberhard W Lisse <el@linux.lisse.na>.
7448         (struct dfm_fhuser_ext) Change `file' from FILE * to file_ext.
7449         (dfm_close) Use close_file_ext.
7450         (open_inline_file) Set file.file to NULL, not file.
7451         (open_file_r, open_file_w) Initialize file.file; fill in file_ext
7452         struct and use open_file_ext().
7453         (read_record) Use file.file.
7454
7455         * file-handle.q: (prepend_current_directory) Pass through special
7456         filenames.
7457
7458         * filename.c: Only include unistd.h if HAVE_UNISTD_H.
7459         (normalize_filename) Pass through special filenames.
7460         (open_file, close_file) Accept pipe| and |pipe syntaxes as
7461         equivalent.
7462         (dirname) Rename blp_dirname() because of name conflict on some
7463         OS.  All references changed.  Reported by palme@uni-wuppertal.de
7464         (Hubert Palme).
7465         (is_special_filename) New function.
7466
7467         * get.c: (GTSV_OPT*) Add GTSV_OPT_MATCH_FILES.
7468         (trim_dictionary) Conditionalize some of the options on whether
7469         GTSV_OPT_MATCH_FILES is in *options.
7470         (rename_variables) Don't allow variables to be renamed as scratch
7471         variables.
7472         (MTF_*) New enum series.
7473         (struct mtf_file) New struct.
7474         (static vars mtf_head, mtf_tail, mtf_by, mtf_n_by, mtf_free) New
7475         vars.
7476         (cmd_match_files, mtf_free) New functions.
7477
7478         * lexer.c: (match_int) Needed parentheses around name to escape
7479         macro expansion.  Reported by Micah Altman
7480         <maltman@www-vdc.fas.harvard.edu>.
7481
7482         * print.c: Needed to include alloca.h.  Reported by Micah Altman
7483         <maltman@www-vdc.fas.harvard.edu>.
7484
7485         * recode.c: (convert_to_double) Parenthesize -DBL_MIN_10_EXP to
7486         -(DBL_MIN_10_EXP).  Reported by palme@uni-wuppertal.de (Hubert
7487         Palme).
7488         
7489         * str.h: Include stdarg.h.  Reported by palme@uni-wuppertal.de
7490         (Hubert Palme) and Micah Altman <maltman@www-vdc.fas.harvard.edu>.
7491
7492 Thu Feb  5 00:18:21 1998  Ben Pfaff  <blp@gnu.org>
7493
7494         * html.c: (struct html_driver_ext) Move into htmlP.h.
7495         (html_preopen_driver) Initialize cp_x, cp_y.
7496         (html_submit) Implement as call to output_tab_table().
7497         (change_attributes) New function.
7498         (escape_string) New function.
7499         (output_tab_table) New function.
7500
7501         * list.q: (write_all_headers) Add code for writing headers for the
7502         html driver.
7503         (clean_up) Write out the html close-table tag.
7504         (determine_layout) Ignore html driver.
7505         (list_cases) Write html data.
7506
7507         * som.c: (som_submit) Move more of the code into output_table().
7508
7509         * tab.c: (static var hit) Make a global var and rename tab_hit.
7510         (static var tab_table_class) Make a global var.
7511
7512         * htmlP.h: New file.
7513
7514 Tue Feb  3 16:12:18 1998  Ben Pfaff  <blp@gnu.org>
7515
7516         * dump-sysfile.c: Removed.
7517
7518         * html.c: (preclose) Change comment in emitted code.
7519
7520         * matrix-data.c: Debugging off by default.  Comment fixes.
7521         (static var container) New var.
7522         (cmd_matrix_data) Create and destroy container.  Initialize
7523         is_per_factor[] to 0s.  Move code into new function
7524         string_to_content_type().  Require split values to be present in
7525         the data when ROWTYPE_ is explicit.  Call specific function, not
7526         general read_matrices().
7527         (string_to_content_type) New function.
7528         (context) Exclude all whitespace, not just spaces.
7529         (mget_token) A dot is a number.  Add assertion.
7530         (static var data) Renamed nr_data.
7531         (static var factor_values) Renamed nr_factor_values.
7532         (read_matrices) Renamed read_matrices_without_rowtype().  Handle
7533         only specific case.  Close data_file before exit.
7534         (fill_matrix) New function.
7535         (read_data_lines) Renamed nr_read_data_lines().  Remove debug
7536         printing.  Style fixes.  Message fixes.  Move code into
7537         fill_matrix().
7538         (read_matrices_without_rowtype) Rename
7539         matrix_data_read_without_rowtype().  Fix off-by-one error on
7540         loops.  Allocate nr_data[] memory from arena.
7541         (read_matrices_with_rowtype) Removed.
7542         (read_splits) Renamed nr_read_splits().  Style fixes.
7543         (read_factors) Renamed nr_read_factors().
7544         (dump_cell_content) Comment fixes.  Arguments changed.  Change
7545         debug printing.  All references changed.
7546         (output_data) Renamed nr_output_data().
7547         (static var wr_content) New var.
7548         (struct factor_data) New struct.
7549         (static var wr_data) New var.
7550         (static var wr_current) New var.
7551         (matrix_data_source_destroy_source) Removed.
7552         (read_matrices_with_rowtype) New function.
7553         (matrix_data_read_with_rowtype) New function.
7554         (wr_read_splits) New function.
7555         (compare_factors) New function.
7556         (wr_output_data) New function.
7557         (wr_read_rowtype) New function.
7558         (wr_read_factors) New function.
7559         (wr_read_indeps) New function.
7560         (glob var matrix_data_source) Make destroy_source member NULL as
7561         well.
7562
7563 Fri Jan 23 00:09:08 1998  Ben Pfaff  <blp@gnu.org>
7564
7565         * lexer.c: (syntax_error) Give better error message when at end of
7566         file.
7567
7568         * matrix-data.c: (var content_names[]) Fix PROX spelling.  Change
7569         N_SCALAR to output as plain N.
7570         (mdump_token) Change output format.
7571         (context) Fix message output interaction with spaces in input.
7572         (another_token) New function.
7573         (force_eol) Improved error message.
7574         (static var max_cell_index) New var.
7575         (read_matrices) Init `cells'.  factor_values is now per-cell.
7576         Init max_cell_index.
7577         (read_data_lines) Replace `compare' local with new `compare' arg.
7578         Debugging messages changed.  Only read factors if per_factor.
7579         Propagate error return from read_factors(), force_eol().
7580         Copy N_SCALAR values across the N vector.
7581         (read_matrices_without_rowtype) Don't init `cells'.  Don't need to
7582         check parentheses manually since we now have is_per_factor[].
7583         Call read_data_lines() with new args.  Check for end of data after
7584         looping, using another_token().
7585         (read_factors) Arguments changed.  Use max_cell_index to determine
7586         whether to read or compare factors.  Message fixes.
7587         (dump_cell_content) New function.
7588         (output_data) Completely rewritten because content types were
7589         supported to be nested inside factor values, not vice versa.
7590         
7591 Thu Jan 22 00:26:38 1998  Ben Pfaff  <blp@gnu.org>
7592
7593         * lexer.c: (syntax_error) Support formatted varargs messages.
7594
7595         * matrix-data.c: Turn debugging on by default.
7596         (static content_type[]) New array.
7597         (static content_names[]) New array.
7598         (static rowtype_, varname_) New vars.
7599         (static is_per_factor[]) New array.
7600         (static split_values) Moved declaration.
7601         (static n_continuous, first_continuous) New var.
7602         (cmd_matrix_data) Don't init split_values.  Assign ROWTYPE_ to
7603         rowtype_.  Simplify SPLIT code.  Init is_per_factor[].  Assign
7604         VARNAME_ to varname_.  Initialize first_continuous, n_continuous.
7605         Check for continuous variables.
7606         [DEBUGGING] (debug_print) Remove content_names[].
7607         (mdump_token) New macro.
7608         (mget_token_dump) New function.
7609         (mdump_token) New function.
7610         (context) New function.
7611         (mget_token) Fix messages.
7612         (static var data, split_values, factor_values) New vars.
7613         (read_matrices) Manage split_values, factor_values.
7614         (read_data_lines) New function.
7615         (read_matrices_without_rowtype) Implemented.
7616         (read_splits) Message fixes.  Uses `just_read'.
7617         (read_factors) New function.
7618         (output_data) New function.
7619         (matrix_data_source_destroy_source) Close the file handle.
7620         (glob var matrix_source) Change name from "DATA LIST" to "MATRIX
7621         DATA".
7622
7623         * str.c: (strpadcmp) Removed.
7624
7625         * vfm.c: (dump_splits) Initialize i; fix test for end of splits.
7626
7627 Sun Jan 18 00:30:59 1998  Ben Pfaff  <blp@gnu.org>
7628
7629         * Lots of source files: Add cast to unsigned character to calls to
7630         tolower() and toupper().
7631
7632         * aggregate.c: Set default_dict.splits to NULL.
7633
7634         * command.c: (static variable tab[]) Add MATRIX DATA.
7635
7636         * data-in.c: Add debugging defines.  Formatting fixes.
7637
7638         * expr-opt.c: Formatting fixes.
7639
7640         * lexer.c: (syntax_error) Message fixes.
7641
7642         * matrix-data.c: New enum series.
7643         (static vars fmt, section, diag, explicit_rowtype, signle_split,
7644         split_values, n_factors, factors, cells, pop_n, contents,
7645         n_contents) New vars.
7646         (cmd_matrix_data) Finished implementation.
7647         (compare_variables_by_mxd_vartype) New function.
7648         [DEBUGGING] (debug_print) New function.
7649         (static vars mtoken, mtokstr, mtoklen, mtokval) New vars.
7650         (read_matrices) New function.
7651         (read_matrices_without_rowtype) New function.
7652         (read_matrices_with_rowtype) New function.
7653         (read_splits) New function.
7654         (mget_token) New function.
7655         (force_eol) New function.
7656         [0] (test_tokenizer) New function.
7657         (matrix_data_source_destroy_source) New function.
7658         (glob var matrix_data_source) New var.
7659
7660         * misc.h: Include ieeefp.h if present.
7661
7662         * split-file.h: (cmd_split_file) Changes corresponding to struct
7663         dictionary changes.
7664
7665         * str.h: Fix memmem prototype.
7666
7667         * temporary.c: (save_dictionary, restore_dictionary,
7668         free_dictionary) Changes corresponding to struct dictionary
7669         changes.
7670
7671         * var.h: (MXD_* enums) New enum series.
7672         (struct matrix_data_proc) New struct.
7673         (struct split) Removed.
7674         (struct dictionary) Changed `splits' member from `split *' to
7675         `variable **'.
7676         (macro force_create_variable) New macro.  Replaced lots of
7677         create_variable()/assert() calls with calls to this macro.
7678
7679         * vars-atr.c: (discard_variables) Changed assertion.
7680         [GLOBAL_DEBUGGING] (force_create_variable) New function
7681         called by the macro of the same name.
7682         (clear_variable) Changes to delete splits from the dictionary
7683         corresponding to struct dictionary changes.
7684
7685         * vars-prs.c: (parse_variables) [GLOBAL_DEBUGGING] Check for
7686         corrupted variable `index' values in the dictionary passed in
7687         every time this function is called.
7688
7689         * vfm.c: (dump_splits, SPLIT_FILE_procfunc) Changes corresponding
7690         to struct dictionary changes.
7691
7692 Tue Jan 13 23:45:02 1998  Ben Pfaff  <blp@gnu.org>
7693
7694         * Makefile.am: (pspp_SOURCES) Add matrix-data.c.
7695
7696         * command.c: New includes.
7697         (static array cmd_table[]) Add ERASE, HOST, NEW FILE.
7698         (cmd_erase) New function.
7699         [unix] (shell) New function.
7700         (run_command) New function.
7701         (cmd_host) New function.
7702         (cmd_new_file) New function.
7703
7704         * expr-prs.c: (parse_primary) Message fix.
7705
7706         * inpt-pgm.c: Formatting fix.
7707         (cmd_reread) Implement the FILE subcommand.
7708
7709         * matrix-data.c: New file.
7710
7711         * q2c.c: (dump_header) Change output commenting style.
7712
7713         * weight.c: Comment fix.
7714
7715 Tue Jan 13 00:53:39 1998  Ben Pfaff  <blp@gnu.org>
7716
7717         * aggregate.c: (buf64_10x) Renamed buf64_1xx, all references
7718         changed.
7719         (buf_10x) Renamed buf_1xx, all references changed.
7720         (cmd_aggregate) Implemented cases 010, 011, 110, and 111 (all
7721         cases now implemented).
7722         (create_sysfile) New function.
7723         (agr_11x_func) New function.
7724
7725         * data-in.c: (parse_numeric) Work properly if there's an
7726         explicitly coded decimal point in the data and decimal places are
7727         specified on DATA LIST.  Bug reported by Dr Eberhard W Lisse
7728         <el@linux.lisse.na>.
7729
7730         * get.c: (cmd_get, cmd_save_internal) Allow extraneous slash
7731         before file specification on GET, SAVE, XSAVE.  Bug reported by Dr
7732         Eberhard W Lisse <el@linux.lisse.na>.
7733
7734         * q2c.c: [!HAVE_STRERROR] Include misc/strerror.c, not
7735         strerror.c.  Bug reported by Alexandre Oliva
7736         <oliva@dcc.unicamp.br>.
7737
7738         * sort.c: Include sort.h.  Comment fixes.  A few esthetic fixes.
7739         (static var separate_case_tab) New var.
7740         (cmd_sort_cases) Cancel temporary transformations here.  Free
7741         v_sort before return.
7742         (sort_cases) Run an EXECUTE procedure if SEPARATE is nonzero and
7743         we're reading from a sort stream.  Don't cancel temporary
7744         transformations.  Offload internal sorting to do_internal_sort().
7745         (do_internal_sort) New function.  Handles internal sorting even
7746         when SEPARATE is nonzero.  Doesn't free v_sort.
7747         (do_external_sort) Take new arg SEPARATE.  Only destroy `x' if
7748         it's non-NULL.
7749         (write_initial_runs) Take new arg SEPARATE.  Only destroy the old
7750         sink if SEPARATE is zero.
7751         (read_output_cases) Renamed read_sort_output(), all references
7752         changed.  Now uses separate_case_tab when it exists.
7753         (write_separate) New function.
7754
7755         * vfm.c: (page_to_disk) Destroy memory_source_cases, not
7756         memory_sink_cases.  Don't redundantly call
7757         vfm_source->destroy_source().
7758         (memory_stream_mode) After switching over, set memory_sink_cases
7759         to NULL.
7760
7761 Sat Jan 10 23:35:51 1998  Ben Pfaff  <blp@gnu.org>
7762
7763         * aggregate.c: (struct agr_var) Expand dbl[] array from 2 to 3
7764         elements.
7765         (static var prev_case) New, moved out of aggregate_single_case()
7766         local scope.
7767         (static var buf64_10x, buf_10x) New.
7768         (cmd_aggregate) Initialize prev_case.  Comment fixes.  Implement
7769         the 000, 001, 100, and 101 cases.  Free prev_case.
7770         (parse_aggregate_functions) Disallow scratch variables.
7771         (free_aggregate_functions) Only free agr_dict if non-null.  Use
7772         iter->function to determine numeric/string type, not
7773         iter->src->type.
7774         (aggregate_single_case) Don't manage prev_case.  Initialize
7775         aggregate info after dumping it.
7776         (accumulate_aggregate_info) Fix sum, weighted sum, mean, weighted
7777         mean, stddev, weighted stddev definitions.
7778         (dump_aggregate_info) Implemented.
7779         (initialize_aggregate_info) Renamed from
7780         initialize_aggregate_functions().  Initializes dbl[2].
7781         (agr_00x_trns_proc, agr_00x_end_func, write_case_to_sfm,
7782         agr_10x_trns_proc, agr_10x_trns_free, agr_10x_end_func) New.
7783
7784         * cases.c: (alloc_val) Removed.
7785
7786         * get.c: (cmd_save_internal) Initialize new `dict' member.
7787
7788         * sfm-write.c: (sfm_write_dictionary, write_header,
7789         write_variable, write_value_labels, write_documents) Reorganize,
7790         simplify for new parameter structure.
7791         (write_variable) Only one variable * argument now.
7792
7793         * sfm.h: (struct sfm_write_info) Removed `pri', `sec', and
7794         replaced by new `dict' member.
7795
7796         * temporary.c: (new_dictionary) Initialize n_documents.
7797
7798         * vars-atr.c: (dup_variable) Allocate `value's from dict into
7799         v->fv manually.
7800         (init_variable, replace_variable) Eliminate usage of alloc_val().
7801
7802         * vars-prs.c: (parse_DATA_LIST_vars) Accept PV_NO_SCRATCH option.
7803
7804         * vfm.c: (arrange_compaction) Allow `temporary' value of 2 to
7805         signal that AGGREGATE is to be used for forming final cases.
7806         (close_active_file) Call end_func before stopping lagging.  Cancel
7807         temporary after finishing compaction.
7808         (write_case) Comment fixes.  Cleaned up.
7809         (compact_case) Let AGGREGATE handle compaction when `temporary' is
7810         2.
7811
7812 Sat Jan 10 02:10:47 1998  Ben Pfaff  <blp@gnu.org>
7813
7814         * Makefile.am: (BUILT_SOURCES) Add means.c.
7815         (pspp_SOURCES) Add means.c.
7816         (EXTRA_DIST) Add means.q.
7817
7818         * command.c: (array cmd_table[]) Add MEANS.
7819
7820         * common.h: Esthetic fixes.  Comment fixes.  Test for
7821         MAX_SHORT_STRING greater than 8.
7822         (macros LOWEST, HIGHEST) New.
7823
7824         * data-in.c, data-list.c, recode.c: Comment fixes.
7825
7826         * means.q: New file, base version.
7827
7828         * mis-val.c: (parse_num_or_range, parse_numeric) Replace -DBL_MAX
7829         with LOWEST, DBL_MAX with HIGHEST.
7830
7831         * q2c.c: (dump_vars) Add an enum to array types giving the number
7832         of values for the enum.
7833
7834         * sfm-read.c: (sfm_read_dictionary, read_machine_flt64_info)
7835         Replace second_lowest_value with second_lowest_flt64.
7836
7837         * sfm-write.c: (write_variable, write_rec_7_34) Replace
7838         second_lowest_value with second_lowest_flt64.
7839
7840         * t-test.q: Comment fix.
7841
7842         * temporary.c: (restore_dictionary) Esthetic fix.
7843
7844         * tokens.h: (force_match_id, force_match, force_string, force_int,
7845         force_num, force_id) Replace msg() with syntax_error().
7846
7847         * var.h: (struct means_proc) New.
7848         (struct variable) Add mns member to `p' union.
7849
7850         * vars-prs.c: (parse_variable, parse_dict_variable,
7851         parse_variables, parse_DATA_LIST_vars) Replace msg() with
7852         syntax_error().
7853
7854 Thu Jan  8 22:28:41 1998  Ben Pfaff  <blp@gnu.org>
7855
7856         * Makefile.am: (pspp_SOURCES) Add tab.h.
7857
7858         * Most source files: Added a cast to unsigned char in usages of
7859         the ctype is*() functions.  Replaced `end of command expected'
7860         calls to msg() with calls to syntax_error().
7861
7862         * frequencies.q: (dump_condensed) Fix tab_dim() column reference.
7863
7864         * lexer.c: (hex_val) Removed (was dead code).
7865         (idmatch) Parenthesize function name to avoid macro expansion.
7866
7867         * postscript.c: Comment fixes.
7868         (ps_preopen_driver) Change default font size to 10pt.
7869
7870         * sfm-read.c: (read_variables) Byteswap sv.print, sv.write as
7871         int32s.
7872         (parse_format_spec) Change system-file format spec argument type
7873         to int32.  Parse the format spec with bitwise operators.
7874
7875         * sfmP.h: (struct sysfile_format) Removed.
7876         (struct sysfile_variable) Changed print, write members from
7877         sysfile_format to int32.
7878
7879         * tokens.h: Esthetic fixes.
7880         [__GNUC__] (macro id_match) New macro to hopefully speed up
7881         identifier matching.
7882         (macros match_id, match_tok, match_int) Implemented in
7883         compiler-independent manner; no longer GNU C only.
7884
7885         * vfm.h: Include time.h.
7886
7887 Mon Jan  5 11:06:15 1998  Ben Pfaff  <blp@gnu.org>
7888
7889         * data-list.c: (dump_fixed_table) Change tab_dim().
7890
7891         * dump-sysfile.c: (open_sysfile) Fix mmap() call.
7892
7893         * error.c: Include command.h.
7894
7895         * frequencies.g: Formatting fixes.
7896
7897         * frequencies.q: Add tab_dim() calls.  Make the total cell a
7898         joined cell.
7899
7900         * glob.c: Include command.h.
7901
7902         * sfm-read.c: (struct sfm_fhuser_ext) New members sysmis, highest,
7903         lowest.
7904         (sfm_read_dictionary) Initialize sysmis, highest, lowest.
7905         (sfm_read_machine_flt64_info) Update sysmis, highest, lowest.
7906         (read_variables) Byteswap sv.type; byteswap sv.print, sv.write as
7907         the other elements (is this right?).
7908         (read_variables) Use lowest, highest members.
7909         (parse_format_spec) New arg `vv' for more stringent checking.
7910         (dump_dictionary) Byteswaps nonexplicit data.
7911         (sfm_read_case) Byteswap numeric data.
7912
7913         * som.c: Initialize table_num to 1.
7914         (render_segments) Remember to increment y_index after each table
7915         segment.
7916
7917         * sysfile-info.c: (cmd_sysfile_info) Change tab_dim().  Don't call
7918         avl_count() on a NULL tree.  No title for the second table.
7919         (cmd_display) Handle DISPLAY VECTORS by calling display_vectors().
7920         Handle AS_SCRATCH as AS_NAMES.  Warn if no variables.  Re-enable;
7921         fix call to display_variables().
7922         (display_variables) Default to 4 columns, not 3.  Set up headers.
7923         Column title is Variable, not Name.  Fix index column.
7924         Add joint text.  Add tab_dim().  Handle value labels properly.
7925         Handle DISPLAY LABELS properly.  Draw boxes correctly.
7926         (describe_variable) Value labels don't need titles.  Don't clear
7927         nonexistent index column.
7928         (compare_vectors_by_name) New function.
7929         (display_vectors) New function.
7930
7931         * tab.c: (tab_height) Add assertion.
7932         (tab_null) Add debug code.
7933         (evaluate_dimensions) Add debug code.
7934
7935         * var.h: (struct variable) get_proc data is sometimes used
7936         simultaneously with other per-procedure info, therefore it was
7937         removed from the union.  All references changed.        
7938
7939 Sun Jan  4 18:13:33 1998  Ben Pfaff  <blp@gnu.org>
7940
7941         * ascii.c: (ascii_close_page) Put title on second line of headers
7942         if there is no subtitle.
7943
7944         * command.c: (glob var cur_proc) Move definition here, from
7945         common.c.
7946         (cmd_remark) Emit blank line before remarks.
7947
7948         * command.h: (glob var cur_proc) Move declaration here, from
7949         common.h.
7950
7951         * data-list.c: (dump_fixed_table) Fix messages.
7952         (dump_free_table) Call tab_nat_dim().
7953
7954         * descript.q: (dump_z_table) Modify tab_dim() call.
7955
7956         * frequencies.q: (dump_condensed, dump_statistics) Add tab_dim()
7957         call.
7958         (dump_statistics) Don't output header.
7959
7960         * groff-font.c: Minor format fix.
7961
7962         * html.c: Comment fix.
7963
7964         * list.q: (write_varname) Indent after advancing page.
7965
7966         * output.h: Minor reordering.
7967
7968         * postscript.c: Comment fixes.  Many places, '\n' was replaced by
7969         a reference to eol[].
7970         (struct ps_driver_ext) New member eol[].
7971         (ps_preopen_driver) Initialize eol[].
7972         (ps_postopen_driver) Fix sense of text for text_opt, line_opt
7973         defaults.  Handle headers.  Fix test for minimum page length.
7974         (static var option_tab[]) Add `line-ends'.
7975         (ps_option) Handle line-ends to change eol[].
7976         (postopen) Scale prop_em_width and fixed_width properly.  Set the
7977         prologue title to outp_title if applicable.  Replace the prologue
7978         line ends with eol[].  Call draw_headers() if headers are enabled.
7979         (text_width) New function.
7980         (out_text_plain) New function.
7981         (draw_headers) New function.
7982
7983         * print.c: (dump_table) Call tab_nat_dim().
7984
7985         * som.c: (som_blank_line) Only advance a line if not at the top of
7986         a page.
7987         (som_submit) Move several informational table calls here.
7988         Increment subtable_num if SOMF_NO_TITLE not set.
7989         (output_table) Advance a line if SOMF_NO_SPACING not set.
7990         (render_columns, render_segments, render_simple) Handle spacing
7991         between tables.  Handle table titles.  Remove debug output.
7992
7993         * som.h: (SOMF_*) New enum series.
7994         (struct som_table_class) New member `flags'.
7995
7996         * sysfile-info.c: (cmd_sysfile_info) Calls tab_nat_dim().  No
7997         headers or spacing.
7998         (display_variables) Calls tab_nat_dim().
7999         (describe_variable) Remove restriction on number of value labels.
8000         Make value labels separated by thin lines.
8001
8002         * tab.c: (tab_create) Default `flags' to none.
8003         (tab_float) New arg `w'.  All references changed.
8004         (tab_nat_dim) New function.
8005         (tab_output_text) No title or spacing.
8006         (tab_flags) New function.
8007         (tabi_flags) New function.
8008         (tabi_title) New function.
8009         (strip_height) Removed.
8010         (tabi_render) Skip title when necessary.
8011         (static var tab_tab_class) Add tabi_flags, tabi_title.
8012         (evaluate_dimensions) Disable display of column, row size.
8013         (sum_columns) Add title height to top header.
8014         (render_strip) Moved within file.
8015
8016         * tab.h: (struct tab_table) New member `flags'.
8017
8018         * vfm.c: (dump_splits) Calls tab_nat_dim().  No title.
8019
8020 Sat Jan  3 16:55:44 1998  Ben Pfaff  <blp@gnu.org>
8021
8022         * Most source files: Add `const' attribute in all appropriate
8023         places.
8024         
8025         * sysfile-info.c: (cmd_sysfile_info) Add tab_dim() call, add a
8026         column to the variables table for use by describe_variable().
8027         (cmd_display) Disable for the present.
8028         (display_documents) Don't wrap documents.
8029         (display_variables) Table has four columns now.
8030         (describe_variable) Table has four columns now.  Don't use a
8031         subtable, use joined cells instead.
8032
8033         * tab.c: (tab_create) Don't set `join'.
8034         (tab_realloc) ct array is not made up of a_string's.
8035         Reallocate trh, hrh, h arrays, initialize trh array.  Initialize
8036         cell contents on GLOBAL_DEBUGGING, not DEBUGGING.
8037         (text_format) New function.
8038         (tab_title) Rewritten, uses text_format().
8039         (tab_text) Rewritten, uses text_format().
8040         (tab_joint_text) New function.
8041         (tab_join) Removed.
8042         (static var hit) New variable.
8043         (render_strip) New args r1, r2.  Implement joined cells that fit
8044         on a single page.
8045         (tabi_render) Increment hit.  Pass new args to render_strip().
8046         (evaluate_dimensions) [GLOBAL_DEBUGGING] Check for uninitialized
8047         cells.  For t_naw and t_nah, ignore joined cells and null cells in
8048         calculations.
8049         
8050         * tab.h: (struct tab_join_rect) Removed.
8051         (struct tab_table) Removed `join'.
8052         (TAB_JOIN_MAIN) Removed.
8053         (struct tab_joined_cell) New struct.
8054         (TAT_NOWRAP) New enum.
8055
8056 Fri Jan  2 01:39:58 1998  Ben Pfaff  <blp@gnu.org>
8057
8058         * ascii.c: (ascii_postopen) Replace ASCII_* macros with their
8059         expansions.
8060         (ascii_postopen_driver) Fix initialization of *_spacing so that
8061         the TAL_0 bit doesn't count.
8062
8063         * data-list.c: (dump_fixed_table) Use natural width for Format
8064         column.
8065
8066         * glob.c: (rerange) Removed.
8067         (get_date) Formatting fixes.  Internationalization fix.
8068
8069         * html.c: (html_postopen_driver) Replace HTML_DEFAULT_OUTPUT_FILE
8070         with "pspp.html".
8071
8072         * postscript.c: (ps_postopen_driver) Replace
8073         PS_DEFAULT_OUTPUT_FILE with "pspp.ps".
8074
8075         * som.c: (som_submit) Don't eject page before every table.
8076         (output_table) Fix order of arguments on call to area().
8077         (render_columns) Fix calculation of max_len.
8078         
8079         * tab.c: (tabi_cumulate) Minor change to increase elegance.
8080         (render_strip) New function.
8081         (strip_height) New function.
8082         (tabi_render) Rewrite as calls to render_strip().
8083
8084         * tab.h: (TAT_* enums) Removed TAT_RICH, all references removed.
8085         Renumbered TAT_PRINTF, TAT_TITLE, TAT_FIX to correspond better
8086         with the TAB_* and OUTP_T_* constants.
8087         
8088 Thu Jan  1 11:53:52 1998  Ben Pfaff  <blp@gnu.org>
8089
8090         * Makefile.am: Formatting fixes.
8091
8092         * ascii.c: (ascii_postopen_driver) Initialize *_line_spacing[],
8093         *_line_width[].
8094
8095         * data-list.c: (dump_fixed_table) Add tab_dim() call.
8096
8097         * descript.q: (dump_z_table, display) Add tab_dim() calls.
8098
8099         * dump-sysfile.c: (glob var length) Make type off_t.
8100         (usage) Fix arguments.
8101         (main) Return 0.
8102
8103         * output.h: (OUTP_T_*) Change constants' value to match tab.h.
8104         Now right-justification is the default so many references had to
8105         change.
8106         (struct outp_class) Removed line_width, all references changed.
8107         (OUTP_DEV_*) Add OUTP_DEV_DISABLED.
8108         (struct outp_driver) Add elements horiz_line_width,
8109         vert_line_width, horiz_line_spacing, vert_line_spacing.  Remove
8110         som element.
8111
8112         * postscript.c: (outp_encodings) Formatting fixes.  Fix garbage
8113         collection.
8114         (postopen) Initialize all the informational members of
8115         outp_driver.
8116
8117         * som.c: (som_blank_line) New function, renamed from blank_line(),
8118         all references changed.
8119         (som_submit) Disables drivers whose pages can't be opened.
8120         (render_columns, render_simple, render_segments) Add debug output.
8121         (render_columns) Fix loop range.
8122         (render_simple) Don't try to render the headers, they're taken
8123         care of automatically.  Advance cp_y past the table when done.
8124         (render_segments) Fix loop ranges.
8125
8126         * tab.c: Initialize new members of tab_table.
8127         (tab_vline) Handle trv[]; don't set style for spacing-only lines.
8128         (tab_hline) Handle trh[]; don't set style for spacing-only lines.
8129         (tab_box) Handle trh[], trv[]; don't set style for spacing-only
8130         lines.
8131         (set_expr) Removed.
8132         (tab_dim) New function.
8133         (tab_col_width) Removed.
8134         (tab_row_height) Removed.
8135         (tab_output_text) Call tab_dim().
8136         (tabi_driver) Call evaluate_dimensions(), sum_columns().
8137         (tabi_area) Implemented.
8138         (tabi_cumulate) Implemented.
8139         (tabi_render) Partially implemented, but broken.
8140         (var tab_table_class) Made static.
8141         (evaluate_dimensions) New function.
8142         (sum_columns) New function.
8143
8144         * tab.h: (enum t_*) Now start at t_end.  New: t_ptw, t_nr, t_nc,
8145         t_nah, t_naw, t_neg, t_xch, t_dup, t_lbl, t_jnz, t_sac, t_sar,
8146         t_scr, t_srr, t_sentinel.  Removed: t_nat.
8147         (struct tab_table) New: wl, wr, ht, hb, trh, hrh, trv, wrv, dim,
8148         max_stack_height, w, h.  Removed: ce, re.
8149         (macro blank_line) Removed.
8150         (glob var zero_length) Removed.
8151
8152 Fri Dec 26 15:44:31 1997  Ben Pfaff  <blp@gnu.org>
8153
8154         * Most source files: include some of the new include files broken
8155         out of var.h.
8156         
8157         * Makefile.am: (pspp_SOURCES) Add all the new source files to the
8158         list.
8159
8160         * aggregate.c: (glob var outfile) Make static.
8161
8162         * command.c: (glob var pgm_state) Move here.
8163
8164         * common.c: (glob vars endian, second_lowest_value, pgmname,
8165         finished, curdate, cur_proc, start_interactive, history_file) Move
8166         here.
8167
8168         * descript.q: (structs dsc_z_score, descriptives_trns) Move here.
8169
8170         * file-handle.q: (glob vars files, inline_file) Move here.
8171
8172         * glob.c: Lost lots of glob vars, detailed in individual file
8173         entries.
8174         (init_glob) set_printer, set_screen were obsolete, deleted.
8175         set_cprompt has fewer spaces because pspp has fewer letters than
8176         fiasco.
8177
8178         * inpt-pgm.c: (glob vars inp_init, inp_init_size) Move here.
8179         (inp_nval) Made static.
8180
8181         * lexer.c: (glob vars token, tokval, tokstr, tokstr_size,
8182         tokstr_len, toklongstr, tokint) Move here.
8183
8184         * misc.c: Lost several vars and functions.
8185
8186         * set.q: (all the set_* variables) Move here.
8187
8188         * str.c: (strmaxcpy, strbarepadcpy, strbarepadlencpy, strpadcpy,
8189         blpstrset, strpadcmp, memrev, memrmem, cmp_str) Move here from
8190         misc.c.
8191
8192         * tab.c: (set_expr, tab_col_width, tab_row_height) New functions.
8193
8194         * tab.h: (enum series t_*) New enums.
8195         (struct tab_table) Use arena struct tag.  New members ce, re.
8196
8197         * tokens.h: Comment fixes.
8198
8199         * var.h: Move lots of enums and variables and functions and
8200         structures to other files.  Use and declare a lot more union and
8201         struct tags.  Comment fixes.  
8202
8203         * vector.c: (glob vars vec, nvec) Move here.
8204
8205         * vfm.c: (glob vars reinit_sysmis, reinit_blanks, init_zero,
8206         init_blanks, last_vfm_invocation) Move here.
8207
8208         * cases.h: New file.
8209         (struct long_vec) Move here.
8210         (vec_init, vec_clear, vec_insert, vec_delete, devector, envector)
8211         Move here.
8212
8213         * command.h: New file.
8214         (STATE_* enums) Move here.
8215         (glob var pgm_state) Move here.
8216
8217         * format.c: New file.
8218         (glob var formats) Move here.
8219         (parse_format_specifier_name, fmt_to_string,
8220         check_input_specifier, check_output_specifier,
8221         check_string_specifier, convert_fmt_ItoO, parse_format_specifier)
8222         Move here.
8223
8224         * format.h: New file.  Move functions now in format.c here.
8225         (FMT_* enums) Move here.
8226         (struct fmt_desc) Move here.
8227         (FCAT_* enums) Move here.
8228         (struct fmt_spec) Move here.
8229         (glob vars formats, fmt_parse_ignore_error) Move here.
8230
8231         * inpt-pgm.h: New file.
8232         (INP_* enums) Move here, make #defines into enums.
8233         (glob vars inp_init, inp_init_size) Move here.
8234
8235         * sort.h: New file.
8236         (glob vars v_sort, nv_sort) Move here.
8237         (sort_cases, read_sort_output) Move here.
8238
8239         * vector.h: New file.
8240         (struct vector) Move here, add struct tag.
8241         (glob vars vec, nvec) Move here.
8242         (find_vector) Move here.
8243
8244         * New file.
8245         (glob vars last_vfm_invocation, temp_case, reinit_sysmis,
8246         reinit_blanks, init_zero, init_blanks) Move here.
8247         (struct case_stream) Move here.
8248         (glob vars vfm_source, vfm_sink, vfm_memory_stream,
8249         vfm_disk_stream, sort_stream, data_list_source,
8250         input_program_source, file_type_source, get_source, n_lag) Move
8251         here.
8252         (procedure, write_case, lagged_case, compact_case, page_to_disk)
8253         Move here.
8254                 
8255 Wed Dec 24 22:40:42 1997  Ben Pfaff  <blp@gnu.org>
8256
8257         * Makefile.am: (pspp_SOURCES) Added html.c, som.c, som.h.
8258         (LDADD) Add libdcdflib.
8259
8260         * ascii.c: Comment and formatting fixes.  Almost every external
8261         function had an assert added, checking driver_open and page_open.
8262         (ascii_init_driver) Broken into ascii_preopen_driver,
8263         ascii_postopen_driver, ascii_close_driver.  Manages driver_open.
8264         (ascii_open_page) Sets page_open.
8265         (ascii_close_page) Clears page_open.
8266
8267         * html.c: Comment and formatting fixes.  Almost every external
8268         function had an assert added, checking driver_open and page_open.
8269         (html_init_driver) Broken into html_preopen_driver,
8270         html_postopen_driver, html_close_driver.  Manages driver_open.
8271         (html_open_page) Sets page_open.
8272         (html_close_page) Clears page_open.
8273         (html_submit) Disabled.
8274
8275         * lexer.c: (parse_string) Remove debugging printf.
8276
8277         * list.q: (determine_layout) Open a page if one is not yet open.
8278
8279         * output.c: Comment fixes.
8280         (add_class) Set the class member of the new list element.
8281         (parse_options) Don't handle device type.
8282         (colon_tokenize) New function.
8283         (configure_driver) New four-field format with a field for device
8284         type.  Now initialize driver_open, page_open, next, and prev
8285         fields.  Use new colon_tokenize() function.  Don't do a memory
8286         copy to replace a driver, it doesn't work; instead delete the old
8287         driver and insert a new one.
8288         (destroy_driver) Don't call som_destroy_driver().  Close the page
8289         if it's open.  Find the class in the list of classes and decrement
8290         that reference count.  Remove the driver from the global driver
8291         list.
8292         (outp_iterate_enabled_drivers) Renamed outp_drivers().  All
8293         references changed.  Rewritten.  Don't return a driver that's not
8294         enabled.
8295         (outp_eject_page) All references to som_internal_eject_page()
8296         changed to use this.  Sets cp_x to 0 as well as cp_y.
8297
8298         * output.h: (OUTP_I_* enums) Removed.
8299         (struct som_submission_form) Removed.
8300         (struct outp_class) init_driver broken into preopen_driver,
8301         postopen_driver, and close_driver.  submit changed to take a
8302         som_table argument.
8303
8304         * postscript.c: Comment and formatting fixes.  Almost every
8305         external function had an assert added, checking driver_open and
8306         page_open.
8307         (ps_init_driver) Broken into ps_preopen_driver,
8308         ps_postopen_driver, ps_close_driver.  Manages driver_open.
8309         (ps_open_page) Sets page_open.
8310         (ps_close_page) Clears page_open.
8311
8312         * som.c: New file, base implementation.
8313         
8314         * som.h: (struct som_table) Add struct tag.
8315         (enum SOM_COL_ACROSS) Removed.
8316         (SOM_ROWS, SOM_COLUMNS) New enums.
8317         (struct som_table_class) Add member `cumulate'.  Remove `segment';
8318         change `render' arguments.
8319         (struct som_point, struct som_rect) Removed.
8320         (som_submit_table) Fixed typo, should have been som_submit.
8321
8322         * sysfile-info: (describe_variable) Don't try to insert a
8323         subtable; just destroy it for now.
8324
8325         * t-test.q: Include dcdflib/cdflib.h instead of cdflib.h.  Fix
8326         references to value labels.
8327
8328         * tab.c: (tab_destroy) New function.
8329         (tab_columns) Change argument.
8330         [0] (tab_submit) Remove dead code.
8331         (tab_title) Allocate string from the table's arena.
8332         (tab_output_text) Only free the buffer if we allocated it.
8333         (tab_submit) New function.
8334         (static vars t, d) New static vars.
8335         (tabi_table, tabi_driver, tabi_count, tabi_area, tabi_columns,
8336         tabi_headers, tabi_cumulate, tabi_render) New functions.
8337         (glob var tab_table_class) New global var.
8338
8339         * tab.h: (struct tab_join_rect) Don't use a som_rect; directly
8340         encapsulate the rectangle.  All references changed.
8341         
8342 Sun Dec 21 16:18:58 1997  Ben Pfaff  <blp@gnu.org>
8343
8344         * All header files updated to use struct tags in addition to
8345         typedefs for all structures.  Don't use word `struct' in struct
8346         tags.
8347         
8348         * Makefile.am: (pspp_SOURCES) Remove html.c.
8349         (INCLUDES) Replace the lib/* includes with a single lib/ include;
8350         all references updated.
8351
8352         * command.c: (parse_cmd) Remove call to som_check_workspace.
8353         (output_line) Update to new som.
8354
8355         * data-in.c: (parse_numeric) A single dot is not an error; it is
8356         the system-missing value.
8357
8358         * data-list.c: (dump_fixed_table, dump_free_table) Update to new
8359         som.
8360
8361         * data-out.c: Added `const' as appropriate to many prototypes.
8362         (convert_E, convert_F, convert_CCx) Take double argument instead
8363         of value * argument.
8364         (convert_format_to_string) Call changed functions appropriately.
8365         Instead of modifying the caller's value for FCAT_SHIFT_DECIMAL,
8366         make a local copy of the value.
8367
8368         * descript.q: Remove custom_variables() prototype now provided by
8369         q2c.  
8370         (custom_variables) Don't increment sbc_variables, the caller does
8371         this.
8372         (dump_z_table, display) Update to new som.
8373
8374         * error.c: (vmsg) Add const to prototype.  Remove code to handle
8375         `too many errors' condition.
8376         (check_error_count) New function.
8377         (msg) Add const to prototype.
8378
8379         * filename.c: (open_file) Rewrite for elegance.
8380
8381         * frequencies.q: Remove custom_*() prototypes now provided by q2c.
8382         (dump_full, dump_condensed, dump_statistics) Update for new som.
8383
8384         * list.q: Don't include somP.h.  Change all references to
8385         som_driver_ext to refer to the new members of som_driver.  Change
8386         som_internal_eject_page() references to outp_eject_page().
8387
8388         * main.c: (parse) Rewrite for elegance.  Add call to
8389         check_error_count().
8390
8391         * output.c: (add_class, outp_list_classes, outp_configure_driver)
8392         Rewrite or revise for new outp_driver_class_list structure.
8393         (outp_iterate_enabled_drivers) Fix comparison between disabled
8394         devices and current device type.
8395         (outp_eject_page) New function.
8396
8397         * output.h: Comment fixes.
8398         (struct outp_driver) New members driver_open, page_open, cp_x,
8399         cp_y, font_height, prop_em_width, fixed_width.  Deleted members
8400         ref_count, next.
8401         (struct outp_driver_class_list) New struct.
8402         (outp_class_list) Changed to type outp_driver_class_list; all
8403         references updated.
8404
8405         * print.c: (dump_table, print_trns_proc) Updated for new som.
8406
8407         * q2c.c: (dump_vars) Simplify array subcommand code.  Declare
8408         prototypes for custom subcommands.
8409         (dump_subcommand) Always include the `else'.
8410         (dump_parser) Fix comments in output code.
8411
8412         * set.q: Reordered functions.
8413
8414         * som-frnt.c, som-high.c, som-low.c, somP.h: Removed.
8415         
8416         * som.h: Rewritten from scratch.
8417
8418         * str.h: Remove dead code.
8419
8420         * tab.c, tab.h: New files, base implementation.
8421
8422         * sysfile-info.c: (cmd_sysfile_info, describe_variable) Update to
8423         new som.
8424
8425         * t-test.q: New code from John Williams
8426         <johnr.williams@stonebow.otago.ac.nz>.  Include math.h, cdflib.h.
8427         Many many new static vars and defines.
8428         (precalc, postcalc, g_postcalc, z_postcalc, t_pairs, t_groups,
8429         groups_calc, pairs_calc, z_dev_calc, z_calc) New functions.
8430         (struct value_list) New struct.
8431         (variance, covariance, pooled_variance, oneway, pearson_r, f_sig,
8432         t_crt, t_sig, print_t_groups) New functions.
8433         (cmd_t_test) Implemented.
8434
8435         * temporary.c: (cancel_temporary) Only free the temp_dict if it's
8436         non-NULL.
8437
8438         * vfm.c: (dump_splits) Update to new som.
8439
8440 Thu Dec  4 23:02:22 1997  Ben Pfaff  <blp@gnu.org>
8441
8442         * Makefile.am: (fiasco_SOURCES) Add html.c.
8443
8444         * aggregate.c: Base source.
8445
8446         * ascii.c: (postopen, preclose) Reformat.
8447
8448         * data-out.c, expr-evl.c: Comment fixes.
8449         
8450         * filename.c: (open_file) When opening a file for writing, use
8451         line buffering instead of full buffering for better interactive
8452         performance.  Suggested by Valerio Aimale
8453         <valerio@svpop.com.dist.unige.it>.  Also, recognize special file
8454         names `stdin', `stdout', `stderr'.
8455
8456         * groff-font.c: Comment fixes.
8457
8458         * html.c: New file; base version.
8459
8460         * list.q: (write_all_headers, clean_up, determine_layout,
8461         list_cases) Ignore `special' devices for now.  Needs to be fixed
8462         later.
8463
8464         * output.c: (outp_init) Add html driver to list; reverse list
8465         order.
8466
8467         * output.h: (struct outp_class_struct) New members `special',
8468         `submit'; comment fixes.  All references changed.
8469
8470         * postscript.c: (ps_init_driver) Make defaults for text_opt,
8471         line_opt depend on whether the OUTP_DEV_SCREEN bit is set on the
8472         device.
8473         (postopen) Comment fix.
8474         (preclose) Comment fixes, formatting fixes.  Change x->file.file
8475         references to more proper f->file.
8476
8477         * som-high.c: (som_submit_table) Special classes use their own
8478         renderers.
8479
8480         * som.h: Comment fixes.
8481
8482         * temporary.c: (new_dictionary) Don't try to xstrdup() a NULL
8483         string.
8484         
8485 Tue Dec  2 14:36:07 1997  Ben Pfaff  <blp@gnu.org>
8486
8487         * Makefile.am: (fiasco_SOURCES) Add aggregate.c back in.
8488
8489         * aggregate.c: Still working on this.
8490
8491         * command.c: (cmd_table[]) Add AGGREGATE back in.
8492         (split_words) Make '-' a legal word separator as well as ' '.
8493
8494         * main.c: Comment fixes.
8495
8496         * q2c.c: (dump_parser) Don't require the procedure's full name to
8497         be present, in the generated source.
8498
8499         * t-test.q: Change name to `t-test' from `t test'.  Let PAIRS be
8500         multiply specified and let it be default; let MISSING, CRITERIA,
8501         FORMAT be multiply specified.
8502         (cmd_t_test) Parse command name.  [DEBUGGING] Call debug_print().
8503         (custom_groups) Fix defaults.
8504         (custom_pairs) Check whether this is a PAIRS subcommand before
8505         attempting to parse.  Better garbage collection.  Proper storage
8506         allocation.
8507         [DEBUGGING] (debug_print) New function.
8508
8509         * temporary.c: Comment fixes.
8510         (copy_variable) Don't copy variable name and index.
8511         (save_dictionary) Copy variable name and index by hand.
8512
8513         * vars-atr.c: Comment fixes.
8514         (create_variable) New dictionary argument.  All references
8515         changed.
8516         (common_init_stuff) New dictionary argument.  All references
8517         changed.
8518         (init_variable) New dictionary argument.  All references changed.
8519         (dup_variable) New function.
8520
8521         * vars-prs.c: (parse_variables) If there are any errors, we always
8522         return 0.  Previously, it was possible for some types of errors to
8523         be ignored.
8524         
8525 Sat Nov 22 01:20:59 1997  Ben Pfaff  <blp@gnu.org>
8526
8527         * Makefile.am: (fiasco_SOURCES) For 0.1.5 release, remove
8528         aggregate.c.
8529
8530         * command.c: (cmd_table[]) Comment out AGGREGATE; add T TEST.
8531
8532         * list.q, t-test.q: Remove ALL option from VARLIST declaration in
8533         grammar rules.
8534
8535         * q2c.c: Comment fixes.
8536         (SBC_* enums) Remove SBC_VARLIST_ALL; all references removed.
8537         
8538         * t-test.q: (cmd_list) Rename cmd_t_test.
8539
8540         * temporary.c: (new_dictionary) Don't declare as static.
8541         
8542 Fri Nov 21 00:03:06 1997  Ben Pfaff  <blp@gnu.org>
8543
8544         * aggregate.c: Changes, still not finished.
8545
8546         * file-handle.q, frequencies.q, list.q, set.q: Comment fixes.
8547
8548         * q2c.c: Comment fixes.  Now its output is internationalized.
8549         (get_token) Fix parsing of escapes within literal strings.
8550         (main) Fix bad #line directives in output.
8551
8552         * t-test.q: Base implementation.
8553
8554         * temporary.c: (new_dictionary) New function.
8555         (restore_dictionary) [__CHECKER__] Change fill character to *
8556         (from @).
8557         
8558 Sun Nov 16 01:29:57 1997  Ben Pfaff  <blp@gnu.org>
8559
8560         * Makefile.am: (BUILT_SOURCES, fiasco_SOURCES) Add t-test.c
8561
8562         * aggregate.c: Changes, still not finished.
8563
8564         * descript.q, list.q: Comment fixes.
8565
8566         * q2c.c: Almost completely rewritten.
8567
8568         * t-test.q: New file, not complete.
8569
8570 Fri Nov 14 00:14:48 1997  Ben Pfaff  <blp@gnu.org>
8571
8572         * aggregate.c: Changes, still not finished.
8573
8574         * sort.c: (sort_cases) Call cancel_temporary() instead of doing it
8575         by hand.
8576
8577         * temporary.c: (cancel_temporary) New function.
8578
8579         * vars-atr.c: (discard_variables) Call cancel_temporary() instead
8580         of doing it by hand.
8581
8582         * vfm.c: (close_active_file) After restoring a TEMPORARY
8583         dictionary, set temp_dict to NULL.  Cancel TEMPORARY through
8584         cancel_temporary().
8585         (SPLIT_FILE_procfunc) Comment fix.
8586
8587 Tue Oct 28 16:08:45 1997  Ben Pfaff  <blp@gnu.org>
8588
8589         * Makefile.am: (fiasco_SOURCES) Add aggregate.c.
8590
8591         * aggregate.c: New file, not finished yet.
8592
8593         * command.c: (cmd_table) Add AGGREGATE.
8594
8595         * common.h: (pgm_state) Move declaration to var.h.
8596
8597         * lexer.c: (bin_value_func, oct_value_func, hex_value_func) i18n
8598         fixes.
8599         (parse_string) Message fix.
8600
8601         * recode.c: Comment fix.
8602
8603         * sfm-read.c: (read_variables) Code esthetic fixes.
8604         (write_header) Default date is `Jan', not `JAN'.
8605
8606         * sfmP.h: (bswap_int32) [!__linux__] Fix off-by-one errors.
8607
8608         * sort.c: (cmd_sort_cases) Farm the work out to new function
8609         parse_sort_variables().
8610         (parse_sort_variables) New function.
8611         (sort_cases) New function.  Cancels temporary transformations,
8612         which sorting didn't do previously.
8613         (cmd_sort_cases) Better garbage collection on error.  Uses
8614         do_external_sort().
8615         (write_initial_runs, merge_once) Improved code esthetics.
8616         (sort_stream_read) Reduced to one call to read_output_cases().
8617         (read_output_cases) New function.
8618
8619         * var-labs.c: (cmd_variable_labels) Re-enabled truncation of
8620         variable labels to 120 characters.
8621
8622         * var.h: Comment fixes.
8623         (glob var pgm_state) From common.h.
8624
8625         * vars-atr.c: (discard_variables) Set pgm_state to STATE_INIT.
8626
8627         * vars-prs.c: (parse_DATA_LIST_vars) Support PV_SINGLE in
8628         options.  Set *names to NULL on error.
8629
8630         * vfm.c: (memory_stream_init) Assert compaction_nval != 0.
8631
8632 Thu Oct  9 09:59:49 1997  Ben Pfaff  <blp@gnu.org>
8633
8634         * sfm-write.c, vfm.c: [HAVE_UNISTD] #include <unistd.h>, needed by
8635         SunOS4.  From Alexandre Oliva <oliva@dcc.unicamp.br>.
8636
8637 Wed Oct  8 18:55:24 1997  Ben Pfaff  <blp@gnu.org>
8638
8639         * vfm.c: (page_to_disk) Added missing local variables.
8640
8641 Tue Oct  7 20:23:17 1997  Ben Pfaff  <blp@gnu.org>
8642
8643         * get.c: Comment fix.
8644
8645         * sort.c: (cmd_sort_cases) Attempt to perform internal sort if the
8646         source is anything other than a disk stream, not just if it's in a
8647         memory stream.  Call page_to_disk() before external sort.
8648         (allocate_cases) Message fix.
8649
8650         * vfm.c: (prepare_for_writing) Warn user when paging workspace to
8651         disk.
8652         (page_to_disk) New function.
8653
8654 Sun Oct  5 15:56:14 1997  Ben Pfaff  <blp@gnu.org>
8655
8656         * Makefile.am: (INCLUDES) Include .. instead of $(top_srcdir).
8657
8658         * common.h: (macro strerror) Remove.  From Alexandre Oliva
8659         <oliva@dcc.unicamp.br>.
8660
8661         * get.c: (dict_delete_run) The number of variables to delete is
8662         not necessarily the number of variables that need to be shifted
8663         up.
8664         (trim_dictionary) Don't set *options to 0.  Fix bug that caused
8665         too many variables to be deleted.
8666
8667         * postscript.c: Comment fix.
8668
8669         * q2c.c: Include strerror.c.  From Alexandre Oliva
8670         <oliva@dcc.unicamp.br>.
8671
8672         * set.q: #undef ON and OFF.  From Alexandre Oliva
8673         <oliva@dcc.unicamp.br>.
8674
8675         * sfm-read.c: (sfm_read_dictionary) Don't set the file class too
8676         early, otherwise errors cause a bad free().
8677
8678         * str.h: (macro nvsprintf) s/FORMATS/FORMAT/ typo.  From Alexandre
8679         Oliva <oliva@dcc.unicamp.br>.
8680
8681         * temporary.c: (save_dictionary) Don't allocate memory if
8682         n_documents is 0.
8683
8684         * vfm.c: (memory_stream_write) Message fix.
8685
8686 Sat Oct  4 16:20:43 1997  Ben Pfaff  <blp@gnu.org>
8687
8688         * command.c: (static var cmd_table[]) Define REPEATING DATA
8689         command.
8690
8691         * common.h: Added support for broken systems that are missing
8692         EXIT_SUCCESS, EXIT_FAILURE, RAND_MAX, and/or strerror().
8693
8694         * Many source files: Replace syntax error messages via msg() with
8695         call to syntax_error().
8696
8697         * data-list.c: (dump_fixed_table) Add support for dumping table
8698         for REPEATING DATA as well as DATA LIST FIXED.
8699         (cmd_repeating_data) Allows and requires `/' between subcommands.
8700         Does proper thing with allowing rpd.starts_end to stay 0.  Allows
8701         CONTINUED specifications to be omitted.  Forces CONTINUED to be
8702         specified if ID is.  Calculates starts_end, cont_end from logical
8703         record length as reported by fhp.  Calls dump_fixed_table() if
8704         requested.  Fixed length of record copied by memcpy.
8705         (parse_num_or_var) Sets `num' to 0, not NOT_INT, for variables.
8706         Message fix.
8707         (realize_value) Returns sensible value for out-of-range variable
8708         values.
8709         (rpd_parse_record) New argument `ofs'.  Fixed confusion between
8710         length of occurrences and length of line.  Added warning for
8711         fields that exceed the line length.  Fixed infinite loop.
8712         (read_one_set_of_repetitions) Numerous minor changes for more
8713         complete SPSS compliance.  Message fixes.
8714
8715         * dfm.c: (dfm_close) If the file being closed is the inline file,
8716         read all the remaining data before closing it.
8717         (dfm_get_record) Don't close the file on lossage, as either it
8718         has been closed already or it doesn't belong to us.
8719
8720         * error.c: (puts_stdout) New function.
8721         (vmsg) Use puts_stdout instead of puts.
8722
8723         * file-handle.q: (fh_record_width) New function.
8724
8725         * inpt-pgm.c: (init_case) Fixed buffer overrun when inp_nval % 4
8726         == 0.
8727         (clear_case) Ditto.
8728         (input_program_source_read) Made an old kluge an approved method.
8729
8730         * lexer.c: (syntax_error) New function.
8731
8732         * misc.c: [BROKEN_RAND] (ansi_rand, ansi_srand; static var next)
8733         New.
8734
8735         * output.c: (oupt_get_paper_size) Message fix.
8736
8737         * q2c.c: Numerous fixes to formatting of generated code made to
8738         conform to GNU coding standards.  Uses syntax_error() in generated
8739         code.  Other miscellaneous generated message fixes.  Added support
8740         for broken systems that are missing EXIT_SUCCESS, EXIT_FAILURE,
8741         RAND_MAX, and/or strerror().
8742
8743 Sat Oct  4 02:09:56 1997  Ben Pfaff  <blp@gnu.org>
8744
8745         * data-in.c: Comment fixes.
8746
8747         * data-list.c: (struct repeating_data_trns) New member `id_spec'.
8748         (find_variable_input_spec) New function.
8749         (cmd_repeating_data) Initializes id_spec.
8750         (rpd_parse_record) Implemented.
8751         (read_one_set_of_repetitions) Returns -3 by default in order to
8752         kluge out some potential bugs.
8753
8754         * data-out.c: Comment fixes.
8755
8756         * file-type.c: (internal_cmd_record_type) Message fix.
8757
8758         * inpt-pgm.c: (input_program_source_read) Special temporary kluge
8759         for handling -3 return value.
8760
8761 Sat Sep 20 23:58:15 1997  Ben Pfaff  <blp@gnu.org>
8762
8763         * data-list.c: Comment fixes.
8764         (struct dls_var_spec) Reordered members.
8765         (read_from_data_list_fixed) Restructured.
8766         (struct repeating_data_trns) Reordered members.  Renamed `starts'
8767         as `starts_beg', `ends' as `starts_end'.
8768         (cmd_repeating_data) Calculates length of repeated data if
8769         necessary and possible.
8770         (parse_num_or_var) Don't allow string variables.
8771         (realize_value) New function.
8772         (rpd_msg) New function.
8773         (rpd_parse_record) New function.  Currently stubbed out.
8774         (read_one_set_of_repetitions) Implemented.
8775
8776         * inpt-pgm.c: (input_program_source_read) Comment fix.
8777
8778 Thu Sep 18 21:34:57 1997  Ben Pfaff  <blp@gnu.org>
8779
8780         * command.c: (cmd_end_repeat_p) Removed.
8781         (init_cmd_parser) Doesn't set cmd_end_repeat_p.
8782         (parse_cmd_name) Removed.
8783
8784         * data-list.c: Comment fixes.
8785         (data_list_pgm) Removed `eof' member.
8786         (static var first) New var.
8787         (cmd_data_list) Sets `first'.  Ensures that DATA LIST uses the
8788         FILE TYPE file inside FILE TYPE structures.
8789         (append_var_spec) Appends to *first, not dls.spec.
8790         (parse_fixed) Message fixes.
8791         (struct rpd_num_or_var) New.
8792         (struct repeating_data_trns) New.
8793         (static var rpd) New.
8794         (cmd_repeating_data) New function.
8795         (parse_num_or_var) New function.
8796         (parse_repeating_data) New function.
8797         (read_one_set_of_repetitions) New function.
8798
8799         * file-type.c: (cmd_file_type) Message fixes.  Always
8800         default_handle to FILE TYPE file handle.
8801         (internal_cmd_record_type) Message fixes.
8802
8803 Wed Aug 20 14:22:03 1997  Ben Pfaff  <blp@gnu.org>
8804
8805         * repeat.c: Comment fix.  Disable debugging.
8806
8807         * temporary.c: (restore_dictionary) Sets splits to NULL and
8808         n_splits to 0 before destroying the variables because now doing
8809         this tries to remove split variables.
8810
8811         * vars-atr.c: (discard_variables) Asserts that n_splits is 0 after
8812         destroying the dictionary.
8813         (clear_variable) Removes a variable from splits after destroying
8814         it.
8815
8816 Mon Aug 18 18:06:55 1997  Ben Pfaff  <blp@gnu.org>
8817
8818         * cmdline.c: (set_compat) Removed.
8819         (pick_compat) Removed.
8820         (parse_command_line) Removed -c option.
8821         (pre_syntax_message) Removed -c option.
8822         (usage) Remove compatibility code.
8823
8824         * common.h: (macros VER_PC, VER_WND, VER_X) Removed.
8825         (glob var compat) Removed.
8826
8827         * compute.c: (type_check) Fixed messages about type mismatches.
8828
8829         * data-list.c: (cmd_data_list) Removed compatibility code.
8830         (fixed_parse_compatible) Calls convert_negative_to_dash().
8831         Fixed bug where it only set the variable in fx.spec if it created
8832         the variable itself.
8833         (dump_fmt_list) Spelling fix.
8834         (cut_field) Removed compatibility code.
8835
8836         * dfm.c: (cmd_begin_data) Don't require a command terminator on
8837         BEGIN DATA command.
8838
8839         * expr-evl.c: (evaluate_expression) Implement LAG.
8840
8841         * expr-prs.c: (parse_add) Calls convert_negative_to_dash().
8842         (parse_neg) Calls convert_negative_to_dash().
8843         (LAG_func) Increases n_lag to the lag requested.  Fixed assignment
8844         bug.
8845
8846         * expr.h: (struct expression_struct) Removed member max_lag.
8847
8848         * file-type.c: (parse_col_spec) Calls convert_negative_to_dash().
8849         (internal_cmd_record_type) Removed special handling to produce
8850         negative numbers from dash tokens.
8851
8852         * getline.c: (static var DO_REPEAT_level) New var.
8853         (getl_add_DO_REPEAT_file) Increments DO_REPEAT_level.
8854         (handle_line_buffer) Copies the line into getl_buf; doesn't call
8855         copy_with_DO_REPEAT_substitutions().
8856         (getl_read_line) Maintains value of getl_mode.  Calls
8857         perform_DO_REPEAT_substitutions() whenever DO_REPEAT_level is
8858         positive.
8859         (getl_close_file) Decrements DO_REPEAT_level when appropriate.
8860
8861         * getline.h: (getl_mode) New glob var.
8862
8863         * glob.c: Comment fixes.
8864         (init_glob) Restructured.  Sets set_seed.
8865         (init_compat_dependent) Removed.  All references removed.
8866         (get_date) Format changed from MM/DD/YY to DD MMM YYYY.
8867         (__htonl, __htons) Removed.  (What were these for?)
8868
8869         * lexer.c: (static var tbl) Dash set to class CNUM.
8870         (make_hexit) New function from data-out.c.
8871         (get_token_representation) Rewritten.
8872         (convert_negative_to_dash) New function.
8873         (lex_init_compat_dependent) Removed.
8874         (yylex) A dash is parsed as part of a number if it is followed by
8875         a digit.  The ASCII representation of a number is copied to
8876         tokstr.  String parsing farmed out to parse_string().  Comment
8877         fixes.
8878         (bin_value_func, oct_value_func, hex_value_func, parse_string) New
8879         functions.
8880         (preprocess_line) Line processing depends on interactive/batch
8881         mode, not on compatibility mode.  Removed PC+ compatibility code.
8882
8883         * loop.c: (loop_3_trns_proc) Comment fix.
8884
8885         * main.c: Remove dead code.
8886         (main) Remove call to init_compat_dependent().
8887
8888         * misc.c: (convert_fmt_ItoO) Make E format conversion more
8889         conformant.
8890
8891         * print.c: (parse_string_argument) Calls
8892         convert_negative_to_dash().
8893         (fixed_parse_compatible) Calls convert_negative_to_dash().
8894
8895         * repeat.c: (RPT_* defines) Removed.
8896         (struct rpt_numeric) Removed.
8897         (struct repeat_entry) New member type, changed `replacement' from
8898         char * to char **.
8899         (clean_up) Deallocation adapted to new repeat_entry.
8900         (internal_cmd_do_repeat) `type' defaults to 0.  Remove lookahead()
8901         usage.  Creates vars for `type' of 1.
8902         (parse_ids) Sets type of 1.  Adapted to new repeat_entry.
8903         (store_numeric) Rewritten, new interface.
8904         (parse_numbers) Rewritten.
8905         (parse_strings) Rewritten.
8906         (find_DO_REPEAT_substitution) New function.
8907         (perform_DO_REPEAT_substitutions) New function.
8908         (copy_with_DO_REPEAT_substitutions) Removed.
8909         (debug_print) Rewritten.
8910
8911         * set.q: Comment fix.
8912         (custom_results) Removed compatibility code.
8913         (internal_cmd_set) Removed SET EMULATION subcommand.  Removed
8914         compatibility code.
8915
8916         * sysfile-info.c: (cmd_display) Removed compatibility code.
8917
8918         * tokens.h: Comment fixes.
8919         (token types enum) Removed `toktype' typedef name for this int
8920         type.  Removed SUBST.  Restructured.
8921
8922         * vars-atr.c: (discard_variables) Sets n_lag to 0.
8923
8924         * vars-prs.c: Comment fix.
8925
8926         * vfm.c: Comment fixes.
8927         (glob var n_lag) New var.
8928         (static vars lag_count, lag_head, lag_queue) New vars.
8929         (procedure) Removed argument nlag.
8930         (setup_lag) New function.
8931         (close_active_file) Discards lagging state.
8932         (lag_case) New function.
8933         (lagged_case) New function.
8934         (write_case) Lags a case if lagging.
8935
8936         * weight.c: (cmd_weight) Removed compatibility code.
8937         
8938 Sun Aug 17 22:34:40 1997  Ben Pfaff  <blp@gnu.org>
8939
8940         * getline.h: (struct getl_script) New members loop_index, macros.
8941
8942         * getline.c: (getl_add_file) Sets first_line field to NULL.
8943         (getl_add_DO_REPEAT_file) New function.
8944         (handle_line_buffer) When the current line's length is negative,
8945         set the filename and line number.  Increment line number after
8946         reading line.  Pass the line to
8947         copy_with_DO_REPEAT_substitutions() for processing.
8948         (getl_close_file) Free DO REPEAT lines before freeing the
8949         filename, and just set the filename to NULL when doing this,
8950         because otherwise the filename gets freed twice.
8951
8952         * glob.c: (glob var queuing) Removed.  All references removed.
8953
8954         * lexer.c: Comment fixes.
8955         (get_token_representation) New function.
8956
8957         * repeat.c: Comment fixes.
8958         (struct repeat_entry) Replaced type and v union members with a
8959         simple string.
8960         (append_record) New function.
8961         (internal_cmd_do_repeat) Started reforming it for the new
8962         repeat_entry struct.  Properly records filename changes in the
8963         getl_line_buf.  Fixed improper use of = for ==.  Fixed sense of
8964         strncasecmp() result usage.  Uses append_record() to simplify.
8965         Properly discards END REPEAT line.  Calls getl_add_DO_REPEAT_file
8966         to add in the file.
8967
8968         (copy_with_DO_REPEAT_substitutions) Started coding.
8969
8970         [DEBUGGING] (debug_print_lines) New function.
8971
8972         * set.q: (custom_results, internal_cmd_set) s/VER_PCP40/VER_PC/;
8973
8974         * tokens.h: (macro is_id1, is_idn) New macros.
8975
8976 Sat Aug 16 10:57:41 1997  Ben Pfaff  <blp@gnu.org>
8977
8978         * cmdline.c: (static var pre_syntax_message) Changed `win'
8979         compatibility mode to `wnd'.
8980
8981         * data-list.c: (fixed_parse_spss) Renamed
8982         fixed_parse_compatible().
8983
8984         * glob.c: (init_glob) Excise unused code for
8985         program_invocation_short_name.
8986
8987         * lexer.c: (preprocess_line) Leading indentors are ignored in Wnd
8988         as well as in X.
8989
8990         * print.c: (fixed_parse_spss) Renamed fixed_parse_compatible().
8991
8992         * set.q: `win' compatibility renamed `wnd'.
8993
8994 Thu Aug 14 22:11:12 1997  Ben Pfaff  <blp@gnu.org>
8995
8996         * filename.c: [__WIN32__] Change the included Windows header files
8997         (again).
8998         (absolute_filename_p) [__MSDOS__] A filename with a colon as the
8999         second character is absolute.
9000         (dirname) Fix logic error.  Don't printf() the results.
9001         (prepend_dir) Don't printf() the results.
9002
9003         * getline.c: (handle_line_buffer) New function.
9004         (getl_read_line) Reads line with handle_line_buffer() when
9005         appropriate.
9006         (getl_close_file) Discard line buffer data.
9007
9008         * getline.h: Comment fixes.
9009         (struct getl_line_list) New struct.
9010         (getl_script_struct) Added line buffer members.  These are hooks
9011         for use by DO REPEAT to allow it to insert virtual source code
9012         into the program.
9013
9014         * glob.c: (init_glob) [__DJGPP__ || (__WIN32__ && __BORLANDC__)]
9015         Override Borland C++ stupidity that claims Windows has a console
9016         window size of 0x3.
9017
9018         * repeat.c: This is in the process of being restructured from
9019         using a token-buffering approach to the DO REPEAT facility to
9020         using the more flexible approach of a line-buffering approach in
9021         conjunction with the getline module.  Comment fixes.
9022         (struct tok_struct) Removed.
9023         (static vars queue_index, queue_head, queue) Removed.
9024         (static vars line_buf_head, line_buf_tail) New vars.
9025         (internal_cmd_do_repeat) Instead of queuing tokens, queue lines.
9026         Not complete.
9027         (pull_queue, destroy_queue) Removed.
9028         [DEBUGGING] (debug_print_tokens) Removed.
9029
9030 Tue Aug  5 13:57:58 1997  Ben Pfaff  <blp@gnu.org>
9031
9032         * file-handle.q: (prepend_current_directory) New function.
9033         (internal_cmd_file_handle, fh_get_handle_by_filename) Prepends
9034         current directory before normalizing filename.
9035
9036         * filename.c: (gnu_getcwd) New function.
9037         (absolute_filename_p) New function.
9038         (search_path) New argument, PREPEND.  All references changed to
9039         pass NULL except those explicitly mentioned.  Uses
9040         absolute_filename_p().  Prepends PREPEND before trying the
9041         filename.
9042         (dirname, prepend_dir) New functions.
9043
9044         * getline.c: (getl_get_current_directory) New function.
9045         (getl_include) Passes getl_get_current_directory() as PREPEND arg
9046         to search_path().
9047                 
9048 Sun Aug  3 11:42:36 1997  Ben Pfaff  <blp@gnu.org>
9049
9050         * In several source files, the term `script' was replaced with
9051         `syntax file' inside error messages.  Usage of the term `script'
9052         in the sense of a syntax file is now deprecated.
9053
9054         * cmdline.c: (static vars pre_syntax_message, post_syntax_message)
9055         Updated messages.
9056
9057         * dump-sysfile.c: (usage) Update message.
9058
9059         * getline.c: (getl_read_line) Ignore lines beginning with `#!'.
9060
9061         * getline.h: (glob var getl_include_path) Declare extern.
9062
9063         * list.q: Define EXTERN as extern before #including somP.h.
9064
9065         * var.h: Remove declaration of `disptype' variable.
9066
9067         * vfm.c: (close_active_file) After switching the data sink to a
9068         data source, set vfm_sink to NULL, because it doesn't exist any
9069         more.
9070
9071 Thu Jul 17 21:41:44 1997  Ben Pfaff  <blp@gnu.org>
9072
9073         * glob.c: [__BORLANDC__] Include math.h.  Define _matherr() and
9074         _matherrl() to ignore all math errors.
9075
9076         * sfm-read.c: (read_value_labels) When reading the labels from
9077         disk, read the little parts separately instead of as a struct;
9078         this avoids alignment problems.
9079
9080         * sfm-write.c: (struct sfm_fhuser_ext) New member `elem_type'.
9081         (sfm_write_dictionary) Sets elem_type and frees it on lossage.
9082         (write_header) Allocates and initializes elem_type.
9083         (sfm_write_case) Uses elem_type to determine how to handle each
9084         flt64 element.
9085         (sfm_close) Frees elem_type.
9086
9087         * sfmP.h: Comment fix.
9088         [__BORLANDC__] Uses #pragma -a to adjust structure member
9089         alignment.
9090         
9091 Thu Jul 17 01:55:12 1997  Ben Pfaff  <blp@gnu.org>
9092
9093         * Makefile.am: (fiasco_SOURCES) Remove display.c.
9094
9095         * common.c: Fix typo.
9096
9097         * dfm.c: (read_record) Remove strncasecmp() emulation and fix the
9098         sense of the condition.
9099
9100         * expr-evl.c: (macro ALLOC_STRING_SPACE) [!PAGED_STACK] Add
9101         line-continuation backslash.
9102
9103         * filename.c: [__WIN32__] Include <windef.h> before <winbase.h>.
9104
9105         * frequencies.q: (custom_grouped, add_percentile) Don't use a
9106         non-constant expression as an argument to sizeof.
9107
9108         * glob.c: [__WIN32__ && __BORLANDC__] When including <conio.h>,
9109         undefine gettext macro because that's a conio function.
9110
9111         * hash.h: (hsh_prime_tab declaration) Remove.
9112
9113         * list.q: (write_fallback_headers) Move `leader' allocation out of
9114         main loop.  Change to local_alloc() allocation.
9115
9116         * output.h: Formatting fixes.  Put __attribute__ in right place on
9117         function prototypes.
9118
9119         * sfm-read.c: (read_machine_flt64_info, read_variables) Change
9120         incorrect `SECOND_LOWEST_VALUE' references to proper
9121         `second_lowest_value'.
9122
9123         * som-frnt.c: (EXTERN macro) Define as `extern' instead of null
9124         value.  This way 2 out of 3 of the som files define the vars
9125         extern, the correct way, that actually works under BC++.
9126         (som_set_float) Don't use nonconstant initializers for a struct.
9127
9128         * som-high.c: Add the standard alloca() header.
9129         (replicate_table) Add prototype.
9130
9131         Merged DISPLAY routine.
9132         * sysfile-info.c: (AS_*) New enum series.
9133         (cmd_sysfile_info) Gutted.  Calls describe_variable() to do the
9134         dirty work.
9135         (cmd_display, display_macros, display_documents,
9136         display_variables) Stolen from defunct display.c.
9137         (describe_variable) New function.
9138
9139         * temporary.c: [0] (display_tree) New debug function.
9140         (copy_variable) Performs shallow copy of value labels instead of
9141         deep copy; i.e., just copys the AVL tree and increments the
9142         reference counts.
9143
9144         * val-labs.c: Comment fixes.
9145         (do_value_labels) Optionally skip leading forward slash.
9146         (get_label) Creates only a single value label instead of many
9147         copies of one, and sets the reference count.
9148
9149         * display.c: Removed.
9150
9151         * dump-sysfile.c: New file, not yet complete.
9152
9153 Fri Jul 11 23:02:18 1997  Ben Pfaff  <blp@gnu.org>
9154
9155         For lots of source files I added more verbose_msg's.  These aren't
9156         listed below as they have tested as being benign.  In some cases
9157         these replaced debug_printf() calls.
9158
9159         * output.c: (outp_read_devices) Message fix.
9160
9161         * postscript.c: (output_encodings) Message fix.  Reports errors on
9162         fclose().
9163         (postopen) Message fix.
9164         
9165 Fri Jul 11 14:09:40 1997  Ben Pfaff  <blp@gnu.org>
9166
9167         * dfm.c: (dfm_close) Don't call fclose() for a NULL FILE.
9168
9169         * filename.c: (close_file_ext) Set f->file to NULL *after* closing
9170         it.
9171
9172         * main.c: Remove <malloc.h> #include.
9173
9174         * mis-val.c: (parse_numeric) Set .f member for each missing[]
9175         instead of trying to just set the missing[] itself, which is a
9176         gcc-specific idiom.
9177
9178         * sfm-read.c: (read_variables) Same.
9179
9180         * str.h: Add memmem() prototype.
9181
9182         * val-labs.c, var-labs.c: Replace <malloc.h> with <stdlib.h>.
9183
9184 Thu Jul 10 22:13:53 1997  Ben Pfaff  <blp@gnu.org>
9185
9186         * Makefile.am: (q2c) Don't include any libraries in the link.
9187
9188         * dfm.c: (force_line_buffer_extension) New macro.
9189         (count_tabs) New function.
9190         (tabs_To_spaces) New function.
9191         (read_record) Calls tabs_to_spaces() on the line being processed.
9192
9193         * q2c.c: Disabled i18n for this proglet so that libintl.a doesn't
9194         have to be compiled twice (once for CC, once for LOCAL_CC).
9195  
9196 Sun Jul  6 19:14:33 1997  Ben Pfaff  <blp@gnu.org>
9197
9198         * Makefile.am: (INCLUDES) Add intl directory; fix directories.
9199         (LDADD) Add @INTLLIBS@.
9200         (q2c) Add LIBS, @INTLLIBS@ to link step.
9201
9202         * inpt-pgm.c: Turn off debugging.
9203
9204         * postscript.c: (postopen) Format fix.  local_free() blocks
9205         returned by local_alloc(); don't free() them.
9206
9207 Sat Jul  5 23:44:51 1997  Ben Pfaff  <blp@gnu.org>
9208
9209         * data-in.c: (parse_string_as_format) Comment fix.  Fix check for
9210         string length.
9211
9212         * data-list.c: (read_from_data_list_fixed) Pass proper value for
9213         LEN arg, not simply the full string length.
9214
9215         * sort.c: (allocate_file_handles) Check SPSS compatible temp file
9216         directories before generic temp file directories.
9217
9218         * vfm.c: Disable debugging.
9219
9220 Fri Jul  4 13:26:41 1997  Ben Pfaff  <blp@gnu.org>
9221
9222         * get.c: Comment fix.
9223         (cmd_save_internal) Always passes GTSV_OPT_SAVE option.
9224
9225 Wed Jun 25 22:52:28 1997  Ben Pfaff  <blp@gnu.org>
9226
9227         * expr-prs.c: (debug_print_postfix) Conditionally included on
9228         GLOBAL_DEBUGGING.  Removed out_header() reference.
9229
9230         * exprP.h: Removed #undef GLOBAL_DEBUGGING.
9231
9232 Sun Jun 22 22:00:28 1997  Ben Pfaff  <blp@gnu.org>
9233
9234         * ascii.c: Removed obsolete ascii_close_page() prototype.
9235
9236         * command.c: (output_line) Comment fix.
9237
9238         * data-in.c: Formatting fix.
9239         (parse_string_as_format) Now the `fc' argument is used only for
9240         the purpose of error messages; it is not an index into the string
9241         passed.  All references changed.
9242
9243         * data-list.c: Comment fix.
9244         (cut_field) Comment fix.  Now returns the column number of the
9245         position of the field cut out on success.
9246         (parse_field) Added `column' argument.  Puts the column numbers in
9247         the error message.
9248         (read_from_data_list_free, read_from_data_list_list) Record the
9249         column number returned by cut_field(), pass it to parse_field().
9250
9251         * dfm.c: Comment fix.
9252
9253         * do-ifP.h: Comment fix.
9254
9255         * expr-prs.c: (SYSMIS_func) Implemented string-type arguments for
9256         the SYSMIS function.
9257
9258         * expr.h, exprP.h: Comment fix.
9259
9260         * glob.c: (init_glob) Only calls setlocale() and family if
9261         ENABLE_NLS set.
9262
9263         * hash.h: Comment fix.
9264
9265         * include.c: Comment fix.
9266
9267         * output.c: Comment fix.
9268
9269         * postscript.c: (ps_line_intersection) Simplified assertion.
9270
9271         * repeat.c: Comment fix.
9272
9273         * vars-atr.c: Comment fix.
9274
9275         * vars-prs.c: Comment fix.
9276
9277         * vfm.c: (vector_initialization) [DEBUGGING] Fixed undefined
9278         behavior with usage of postincrement.
9279         (memory_stream_read) Discards cases as it goes. 
9280
9281 Sun Jun 15 16:45:17 1997  Ben Pfaff  <blp@gnu.org>
9282
9283         * Makefile.am: Cleans q2c, not just distcleans it.  Distcleans
9284         foo.
9285
9286         * Most source files: Includes debug-print.h, related comment
9287         fixes.
9288
9289         * cases.c: (alloc_val) Removed complex allocation code.  Merely
9290         increments default_dict.nval and returns the former value.
9291         (envector, devector) Removed references to lv member of struct
9292         variable.
9293
9294         * common.h: (macro VME) Replaced complex definition with simple
9295         one.
9296
9297         * data-list.c: (cmd_data_list) Sets vfm_source instead of
9298         read_active_file and cancel_input_pgm.
9299         (read_from_data_list, cancel_data_list) Removed.
9300         (data_list_source_read, data_list_source_destroy_source) New
9301         functions.
9302         (glob var data_list_source) New var.
9303
9304         * dfm.c: (open_file_r, open_file_w) Simplified debug output.
9305         (cmd_begin_data) Improved criteria for an input program accessing
9306         the inline file.  Still not perfect.
9307
9308         * do-if.c: (do_if_trns_proc) Simplified debug output.
9309
9310         * expr-prs.c: Comment fixes.
9311         [DEBUGGING] (debug_print_postfix) Simplified debug output.
9312
9313         * file-handle.q: (fh_close_handle) Simplified debug output.
9314
9315         * file-type.c: Comment fixes.
9316         (cmd_file_type) Sets vfm_source instead of read_active_file and
9317         cancel_input_pgm.
9318         (cmd_end_file_type) On failure, discards variables in place of
9319         just canceling the input program.
9320         (read_from_file_type) Renamed file_type_source_read.
9321         (cancel_file_type) Renamed file_type_source_destroy_source.
9322         (glob var file_type_source) New var.
9323
9324         * get.c: (GTSV_* enum series) New enums GTSV_OPT_SAVE, GTSV_NONE.
9325         (cmd_get) Initializes options to GTSV_NONE before passing to
9326         trim_dictionary().  Removed `lv' reference.  Sets vfm_source
9327         instead of read_active_file and cancel_input_pgm.
9328         (cmd_save_internal) Initializes options before passing to
9329         trim_dictionary().  Local var `nval' removed.
9330         (dict_delete_run) Comment fixes.
9331         (trim_dictionary) Comment fixes.  Disallows scratch variables if
9332         GTSV_OPT_SAVE set in options.
9333         (read_from_get) Renamed get_source_read.
9334         (cancel_get) Renamed get_source_destroy_source.
9335         (glob var get_source) New var.
9336
9337         * inpt-pgm.c: (cmd_input_program) Sets vfm_source instead of
9338         read_active_file and cancel_input_pgm.
9339         (read_from_input_program) Renamed input_program_source_read.
9340         Simplified debug output.
9341         (cancel_input_program) Renamed
9342         input_program_source_destroy_source.
9343         (glob var input_program_source) New var.
9344
9345         * loop.c: (loop_1_trns_proc) Simplified debug output.
9346
9347         * main.c: (dump_token) Made eof output more explicit.
9348
9349         * sfm-read.c: (read_variables, dump_dictionary) Removed `lv'
9350         references.
9351
9352         * sort.c: (cmd_sort_cases) Disallows scratch variables.  Removed
9353         code for always-memory or always-disk cases.  malloc's case-list
9354         based on vfm_source_info.ncases.  Explicit support for
9355         memory_stream via memory_source_cases.
9356         (do_external_sort) Sets vfm_source instead of read_active_file and
9357         cancel_input_pgm.
9358         (allocate_file_handles) The temporary directory permissions are
9359         set to 0700 instead of 0777.
9360         (allocate_cases) Formatting fixes.  Simplified debug output.
9361         (output_record) Compacts the case if necessary before writing it
9362         out.
9363         (close_handle, open_handle_w) Simplified debug output.
9364         (write_initial_runs) Destroys vfm_sink, then sets it to
9365         sort_stream.  Writes records to memory based on
9366         vfm_sink_info.case_size.
9367         (write_to_sort_cases) Renamed sort_stream_write().
9368         (merge) Simplified error handling.  Simplified debug output.
9369         Formatting fixes.
9370         (read_from_external_sort) Renamed sort_stream_read().
9371         Reads records based on vfm_source_info.case_size.
9372         (sort_stream_write) Writes records to memory based on
9373         vfm_sink_info.case_size.
9374         (sort_stream_mode) New function.
9375         (glob var sort_stream) New variable.
9376
9377         * temporary.c: (cmd_temporary) Simplified debug output.
9378         (copy_variable) Removed references to `lv'.
9379
9380         * title.c: (get_title) Simplified debug output.
9381
9382         * var.h: Comment fixes.
9383         (struct get_proc) Removed member `lv'.
9384         (struct variable) Removed member `lv'.  Comment fixes.
9385         (glob vars read_active_file, write_active_file, cancel_input_pgm)
9386         Removed.
9387         (struct case_stream) New.
9388
9389         * vars-atr.c: (discard_variables) Changed cancel_input_pgm,
9390         read_active_file references to use vfm_source.
9391         (init_variable, replace_variable) Removed references to `lv'.
9392
9393         * vfm.c: Comment fixes.
9394         (glob var vfm_source, vfm_sink, vfm_source_info, vfm_sink_info)
9395         New variables.
9396         (static var queue, qh, qt, n_lag) Removed.  All references
9397         removed.
9398         (glob var compaction_necessary, compaction_nval, compaction_case,
9399         paging) New variables.
9400         (record_case) Removed.
9401         (procedure) Comment fixes.  Calls vfm_source->read() instead of
9402         read_active_file().
9403         (lag) Removed.
9404         (prepare_for_writing, arrange_compaction, make_temp_case,
9405         vector_initialization, setup_filter) New function.
9406         (open_active_file) Most of the code moved into the abovementioned
9407         new functions.  Now sets temp_dict to &default_dict if there is no
9408         temporary dictionary, for convenience.  New debug output.
9409         (close_active_file) Deals with changing the sink to the source.
9410         Calls finish_compaction().  Frees compaction_case.  Mostly
9411         rewritten.
9412         (glob vars disk_source_file, disk_sink_file) New vars.
9413         (destroy_active_file, read_from_memory) Removed.
9414         (disk_stream_init, disk_stream_read, disk_stream_write,
9415         disk_stream_mode, disk_stream_destroy_source,
9416         disk_stream_destroy_sink) New functions.
9417         (glob var vfm_disk_stream) New var.
9418         (glob vars memory_source_cases, memory_sink_cases,
9419         memory_sink_iter, memory_sink_max_cases) New vars.
9420         (memory_stream_init, memory_stream_read, memory_stream_write,
9421         memory_stream_mode, memory_stream_destroy_source,
9422         memory_stream_destroy_sink) New functions.
9423         (glob var vfm_memory_stream) New var.
9424         (write_case) Local var `i' renamed `cur_trns'; local var `retval'
9425         named `more_cases'.  Simplified debug output.  Otherwise mostly
9426         rewritten.
9427         (record_case) Moved into the stream drivers.  Removed.
9428         (transform) Removed (was dead code).
9429         (SPLIT_FILE_procfunc) s/vfm_replacement/vfm_sink_info/.  In the
9430         common case that the splits don't change, we don't need to copy
9431         the case into prev_case again--pointless.
9432         (compact_case) New function.
9433         (finish_compaction) New function.
9434
9435         * vfmP.h: Comment fixes.
9436         (DEV_* enum series) Removed. 
9437         (struct storage) Renamed `stream_info'.  Removed variant record.
9438         Removed `device' member.
9439
9440         * debug-print.h: New file.
9441         
9442 Sun Jun  8 01:12:38 1997  Ben Pfaff  <blp@gnu.org>
9443
9444         * autorecode.c: Turned off debugging.
9445
9446         * data-list.c: (destroy_dls) Closes the associated file handle.
9447
9448         * descript.q: (custom_variables) Added PV_NO_SCRATCH to
9449         parse_variables() options.
9450
9451         * dfm.c: (open_file_r) Removed gratuituous argument to msg() call.
9452
9453         * display.c: (display_variables) Really fixed null cell bug.
9454
9455         * file-handle.q: (fh_close_handle) Changed debugging message.
9456
9457         * frequencies.q: (custom_variables) Added PV_NO_SCRATCH to
9458         parse_variables() options.
9459
9460         * list.q: Added PV_NO_SCRATCH in q2c varlist options.
9461         (cmd_list) Fails if no variables specified.
9462         (determine_layout) Writes blank lines manually.
9463
9464         * loop.c: (loop_1_trns_proc) Made debugging code only print
9465         messages if debugging.
9466
9467         * q2c.c: (dump_subcommand) Appends sbc->message to SBC_VARLIST
9468         parse_variables() arguments.
9469         (main) Parses optional parenthesized options to varlist
9470         subcommands into sbc->message.
9471
9472         * sfm-read.c: Format fix.
9473
9474         * var.h: (FV_*) New enum series.
9475         (PV_*) New enum PV_NO_SCRATCH.
9476
9477         * vars-prs.c: (find_var) Removed.
9478         (fill_all_vars) Takes FV_* enum instead of boolean third
9479         argument.  Rewritten to deal with scratch as well as system
9480         variables.
9481         (parse_variables) Error message on scratch variable if
9482         PV_NO_SCRATCH set.
9483
9484         * vfm.c: (static var virt_begin_func) New var.
9485         (procedure) Sets up virt_begin_func.
9486         (SPLIT_FILE_procfunc) For the first case, calls virt_begin_func()
9487         after dump_splits().  For succeeding groups changes, calls
9488         virt_begin_func() instead of begin_func().      
9489
9490 Fri Jun  6 22:42:23 1997  Ben Pfaff  <blp@gnu.org>
9491
9492         * count.c, data-out.c, file-handle.q, list.q, loop.c: Turned off
9493         debugging.
9494
9495         * dfm.c: Added some debugging messages, disabled by default.
9496         (open_file_r) Fixed error message.
9497         (read_record) On eof on inline_file, instead of calling
9498         fh_close_handle(), simply jump to eof label like a normal file.
9499         Message fixes.
9500
9501         * display.c: Thin lines between rows for certain kinds of
9502         listing.  Fixed `null cell' bug.
9503
9504         * error.c: (failure) Flush stdout, stderr before failing.
9505
9506         * file-handle.q: (fh_close_handle) Added debugging message.
9507
9508         * frequencies.q: (dump_full) Bottom line extends across entire
9509         table width.  Changed title formatting.
9510         (dump_condensed) Changed title formatting.
9511         (dump_statistics) Fixed title formatting.
9512
9513         * glob.c: (init_glob) Moved initialization of cur_proc out of #if.
9514         Sets default value of set_format.
9515
9516         * list.q: (cmd_list) Calls blank_line() before determine_layout().
9517         Passes write_all_headers() to procedure() as pre-group func.
9518         (write_all_headers) New function.
9519         (determine_layout) Removed calls to write_header().
9520         Calls blank_line() before and after write_fallback_headers().
9521
9522         * recode.c: (recode_trns_free) Only attempts to free head->map if
9523         non-NULL.
9524
9525         * sfm-read.c: (read_variables) Allows `#' at beginning of system
9526         file variable names but gives a warning.  Sets `left' based on
9527         first character being/not being `#'.  On lossage frees dict->var.
9528
9529         * som-high.c: (som_draw_title) Simplified title formatting.
9530
9531         * vfm.c: (dump_splits) Fixed and changed splits formatting.
9532
9533 Thu Jun  5 22:51:15 1997  Ben Pfaff  <blp@gnu.org>
9534
9535         * autorecode.c: (cmd_autorecode) Sets h_trans to NULL at
9536         beginning.  Frees v_src, v_dest on successful exit.  Frees
9537         h_trans[*], h_trans on lossage.
9538         (recode) Frees h_trans[*], h_trans.
9539
9540         * dfm.c: (dfm_close) Formatting change.
9541         (open_inline_file) Now passed a dfm_fhuser_ext to initialize; no
9542         longer allocates its own in inline_file.
9543         (open_file_r) Passes the local dfm_fhuser_ext to
9544         open_inline_file().
9545         (open_file_w) Message fix. 
9546         (read_record) Buffer reallocation strategy changed.  Frees
9547         ext->line even in inline_file to prevent leaks.
9548         (dfm_put_record) Fixed bug where `ext' was cached before the file
9549         was opened and thus it would be NULL when the file really was
9550         open.
9551         (cmd_begin_data) Sets up inline_file basics itself, then calls
9552         open_inline_file() for the dfm_fhuser_ext.  Formatting fix.
9553
9554         * list.q: (write_line) Formatting fix.
9555         (clean_up) Minor strategy change.  Sets proportional font after
9556         finishing cleanup.
9557         (determine_layout) Sets fixed font before writing regular headers,
9558         or after writing fallback headers.
9559
9560         * modify-vars.c: (cmd_modify_vars) Frees variable lists for DROP
9561         and KEEP vars after using them.
9562
9563         * postscript.c: (ps_init_driver) Frees x->family.
9564         (postopen) When loading fonts, free the temporary font name buffer
9565         after using it.
9566         (ps_text_set_font_by_position) Free temporary font name buffer
9567         after using it.
9568         (text) Fixed code that calculated `lig' so that `lig' always gets
9569         initialized.  Formatting fix.
9570
9571         * som-low.c: (get_cell_size, som_get_table_size) `prop_height' ->
9572         `font_height'.
9573         [GLOBAL_DEBUGGIGN] (check_table) Use arena_alloc() to allocate
9574         cells, not xmalloc(), so that the cells will get destroyed
9575         automatically.
9576
9577         * sysfile-info.c: (cmd_sysfile_info) Frees the dictionary after
9578         using it.
9579
9580 Tue Jun  3 23:33:22 1997  Ben Pfaff  <blp@gnu.org>
9581
9582         * ascii.c: (ascii_text_draw) Always sets metrics for strings that
9583         are drawn.
9584
9585         * dfm.c: Comment fix.
9586
9587         * list.q: Comment fixes.  Include somP.h.  Removed static vars
9588         table, n_columns, n_rows, part.  New struct list_ext.  New static
9589         var line_buf.
9590         (n_lines_remaining, n_chars_width, write_line) New functions.
9591         (cmd_list, list_cases) Rewritten.
9592         (begin_row, end_row, flush_table) Removed.
9593         (write_header, clean_up, write_varname, write_fallback_headers,
9594         determine_layout) New functions.
9595
9596         * output.c: (outp_iterate_enabled_drivers) Minor reformat.
9597
9598         * output.h: Comment fix.
9599
9600         * postscript.c: Comment fix.
9601         (struct ps_driver_ext) Removed prop_size, fixed_size members;
9602         added font_size.  All references changed.
9603         (ps_init_driver) Initializes font_size.  Simplified space checking
9604         code.
9605         (static var option_tab[]) Removed prop-size, fixed-size; added
9606         font-size.
9607         (ps_option) Handles font_size.
9608
9609         * som-high.c: Moved prototypes into somP.h.
9610         (som_init_driver) New function.
9611         (som_submit_table) Moved some code into new function
9612         som_init_driver().
9613         (build_target) Moved some code into new function
9614         som_internal_eject_page().
9615         (som_eject_page) Uses som_internal_eject_page().
9616         (som_internal_eject_page) New function.
9617
9618         * som-low.c: Moved prototypes into somP.h.
9619
9620         * som.h: Formatting fixes.
9621
9622         * somP.h: (struct som_driver_ext) Removed em_width;
9623         added prop_em_width, fixed_width.
9624
9625 Mon Jun  2 14:25:25 1997  Ben Pfaff  <blp@gnu.org>
9626
9627         * Makefile.am: Added `localedir' definition.  Added
9628         -DLOCALEDIR="..." to DEFS.  Added -I. to INCLUDES.
9629
9630         * ascii.c: (macro draw_line) Fixed capitalization.
9631
9632         * ascii.c, autorecode.c, cases.c, cmdline.c, command.c, common.c,
9633         compute.c, count.c, data-in.c, data-list.c, data-out.c,
9634         descript.q, dfm.c, display.c, do-if.c, error.c, expr-evl.c,
9635         expr-opt.c, expr-prs.c, file-handle.q, file-type.c, filename.c,
9636         formats.c, frequencies.q, get.c, getline.c, glob.c, groff-font.c,
9637         hash.c, heap.c, include.c, inpt-pgm.c, lexer.c, list.q, loop.c,
9638         main.c, mis-val.c, misc.c, modify-vars.c, numeric.c, output.c,
9639         postscript.c, print.c, q2c.c, recode.c, rename-vars.c, repeat.c,
9640         sample.c, sel-if.c, sfm-read.c, sfm-write.c, sfmP.h, som-frnt.c,
9641         som-high.c, som-low.c, sort.c, split-file.c, sysfile-info.c,
9642         temporary.c, title.c, tokens.h, val-labs.c, var-labs.c,
9643         vars-atr.c, vars-prs.c, vector.c, vfm.c, weight.c: Marked strings
9644         for internationlization.
9645
9646         * glob.c: [HAVE_LOCALE_H] Includes locale.h.
9647
9648 Sun Jun  1 23:31:18 1997  Ben Pfaff  <blp@gnu.org>
9649
9650         * do-if.c, sort.c, val-labs.c: Comment fixes.
9651
9652         * glob.c: (init_glob) Uncommented, updated i18n support.
9653         
9654         * arena.c, ascii.c, data-in.c, descript.q, error.c, expr-evl.c,
9655         expr-opt.c, expr-prs.c, filename.c, frequencies.q, groff-font.c,
9656         output.c, postscript.c, sfm-read.c, som-high.c, vars-prs.c: Made
9657         the declarations of macros taking arguments a lot nicer.
9658
9659 Sun Jun  1 17:22:04 1997  Ben Pfaff  <blp@gnu.org>
9660
9661         * error.h: Removed CE, CW aliases for SE, SW.
9662
9663         * q2c.c: Removed explicit streq() definition since it's duplicated
9664         in str.h.
9665         
9666         * approx.h, error.h, font.h, hash.h, misc.h, output.h, somP.h,
9667         stats.h, str.h, tokens.h: Made the declarations of macros taking
9668         arguments a lot nicer-looking of <pinard@iro.umontreal.ca>.
9669         Comment fixes.
9670
9671 Sun Jun  1 12:02:06 1997  Ben Pfaff  <blp@gnu.org>
9672
9673         * cmdline.c: Comment fixes.
9674         (pick_compat) Changed return type to int.  Now, instead of setting
9675         glob var `compat' to the emulation, returns the emulation.  All
9676         references changed.
9677         (parse_command_line) Added terminating null to end of
9678         `long_options' array definition.
9679         (pre_syntax_message) Fixes.
9680         (usage) Shows the default emulation in the syntax message by
9681         calling pick_compat().
9682
9683         * getline.c: (getl_add_include_dir) Separates paths with
9684         PATH_DELIMITER, not DIR_SEPARATOR.
9685
9686         * glob.c: (init_glob) Fixed references to DEFAULT_VER_PCP40,
9687         DEFAULT_VER_WIN61, DEFAULT_VER_X40.
9688
9689         * output.c: (outp_configure_macro) Make earlier definitions for a
9690         particular key override later ones for the same key.
9691         
9692 Fri May 30 19:40:49 1997  Ben Pfaff  <blp@gnu.org>
9693
9694         * ascii.c: Comment fixes.
9695
9696         * output.c: (outp_get_paper_size)
9697         s/STAT_OUTPUT_INIT_FILE/STAT_OUTPUT_PAPERSIZE_FILE/.
9698         
9699 Sun May 25 22:34:07 1997  Ben Pfaff  <blp@gnu.org>
9700
9701         * ascii.c, postscript.c, sfm-read.c, sfm-write.c, sort.c: Include
9702         <errno.h>.  GNU libc 2 enforces this!
9703
9704         * command.c: (parse_cmd) Fixed problem with `else' clause being
9705         paired with wrong `if'.  Comment fix.
9706
9707 Fri May  9 16:53:52 1997  Ben Pfaff  <blp@gnu.org>
9708
9709         * getline.c: [!HAVE_LIBREADLINE] (read_console) Changed
9710         blp_getline() to getline().
9711
9712         * output.c: (outp_eval_dimension) Changed the fix from last time;
9713         there was no variable `a'.
9714
9715         * q2c.c: (get_line) Fixed boundary condition overrun bug.
9716
9717 Mon May  5 21:58:22 1997  Ben Pfaff  <blp@gnu.org>
9718
9719         * output.c: (outp_evaluate_dimension) Fixed handling of negative
9720         numbers having fractional parts.  Added case of a fraction without
9721         a whole-number part.
9722
9723 Fri May  2 22:08:05 1997  Ben Pfaff  <blp@gnu.org>
9724
9725         * ascii.c: (ascii_text_get_font_position) Removed.
9726
9727         * expr.h, exprP.h: Disabled debugging.
9728
9729         * groff-font.c, postscript.c: Changed `groff' to `Groff' in
9730         several places.
9731
9732         * output.h: (struct outp_class_struct) Removed
9733         text_get_font_position method.  All references deleted.
9734
9735         * postscript.c: Big change here.  Fontmaps were completely
9736         eliminated because of a change in philosophy.  Comment fixes.
9737         (struct ps_fontmap, ps2dit_map, font_family, dit2family_map)
9738         Removed.
9739         (struct ps_driver_ext) `position', `fontmap', `prop_name',
9740         `fixed_name' members removed.  New members `prop_family',
9741         `fixed_family'.  `family' member changed to type char *.
9742         (static var ps_fontmaps) Removed.
9743         () Removed.
9744         (ps_init_driver) Removed obsolete references, updated.
9745         Initializes `translate_x', `translate_y', `scale'.  Doesn't read
9746         fontmap, of course.  Refers to font names through internal_name
9747         rather than subversive means.  Frees proper items.
9748         (static var option_tab[]) Removed `fontmap-file' option; renamed
9749         `fixed-font', `prop-font'.
9750         (ps_option) Corresponds to option_tab[].
9751         (read_fontmap, release_fontmap, ps_to_dit, compare_ps2dit,
9752         hash_ps2dit, compare_dit2family, hash_dit2family, compare_family,
9753         hash_family) Removed.
9754         (postopen) Generates font names from family names.  Gets
9755         PostScript font name properly.  New prologue file comment `!!!'
9756         style.
9757         (ps_open_page) Adds translate_x, translate_y to BP prologue
9758         function; gives SF argument floating-point format.
9759         (ps_text_set_font_by_name) Doesn't try to map PostScript->Groff
9760         font name.  Doesn't change font family.
9761         (ps_text_set_font_by_position) Generates Groff font name from font
9762         family name instead of through table lookup.
9763         (ps_text_set_font_by_family) Renamed `ps_text_set_font_family',
9764         all references changed.  Reduced to simple string assignment.
9765         (ps_get_font_name) Removed.
9766         (ps_get_font_family) Reduced to string return.
9767         (text) Doesn't save `position' since it no longer exists.  Ugly
9768         kluge to save font family--fix soon?
9769         (load_font) Removed PostScript name argument.
9770         
9771 Thu May  1 14:58:59 1997  Ben Pfaff  <blp@gnu.org>
9772
9773         * postscript.c: Comment fix.
9774         (ps_open_page) Puts scale factor in PostScript output.
9775         
9776 Sat Apr 26 11:49:32 1997  Ben Pfaff  <blp@gnu.org>
9777
9778         * Makefile.am: Distcleans q2c.
9779
9780 Wed Apr 23 21:33:48 1997  Ben Pfaff  <blp@gnu.org>
9781
9782         * ascii.c: (delineate) Sets text size even if width is zero.
9783
9784         * command.c: Comment fix.
9785         (static var cmd_table[]) Re-enabled EVALUATE command.
9786         (parse_cmd) Lotsa comment fixes.  Fixed infinite loop in parsing
9787         of comments in script files.  Now more liberal on criteria for
9788         performing a state transition--if *anything* happened correctly,
9789         not just if *everything* happened correctly.
9790
9791         * data-out.c: (convert_F) Comment fix.  Why in the fsck does
9792         Checker segfault on formatting large numbers and why in the fsck
9793         hadn't I noticed this before?
9794
9795         * expr.h, exprP.h: No longer turn off GLOBAL_DEBUGGING.
9796
9797         * list.q: (cmd_list) Commented out the actual output routine
9798         because of various problems.  Probably will abandon the idea of
9799         using the general `crushed tables' for the LIST procedure.
9800
9801         * temporary.c: (restore_dictionary) Sets var_by_name to NULL after
9802         clearing it.  Allocates a new var_by_name dictionary before trying
9803         to add members to it.
9804
9805         * vars-atr.c: [DEBUGGING] (dump_one_var_node) Removed argument
9806         `sib'.  Changed type of `node' argument.
9807         [DEBUGGING] (dump_var_tree) Replaced avlwalk() with
9808         avl_walk_inorder().
9809         (clear_variable) Only dumps the var tree if var_by_name non-NULL.
9810         [DEBUGGING] Only deletes the variable from var_by_name if that var
9811         non-NULL.
9812
9813 Fri Apr 18 16:48:41 1997  Ben Pfaff  <blp@gnu.org>
9814
9815         * Makefile.am: Added include files to SOURCES.  Added
9816         frequencies.q to EXTRA_DIST.  Removed include/ from INCLUDES.  Now
9817         includes rules for q2c.  Added `boast' target.
9818
9819 Fri Apr 18 15:42:22 1997  Ben Pfaff  <blp@gnu.org>
9820
9821         * Makefile.am: Maintainer-clean Makefile.in.
9822         
9823         * Makefile.am: Fixed redundant EXTRA_DIST line.
9824
9825         * ascii.c: Comment fixes.
9826         (ascii_line_vert) Fixed overly aggressive range check.
9827
9828         * display.c: Removed dead code.
9829
9830         * list.q: Turn debugging on.
9831         (flush_table) New debug code.
9832
9833         * sfm-read.c: (read_value_labels) malloc's the structure before
9834         trying to assign to its members.
9835
9836         * sfm-write.c: Comment fix.
9837
9838         * som-high.c: (som_submit_table) Sets som.t and som.d on each call
9839         to output_table().
9840         (output_table) No arguments anymore--gets them through `som'
9841         global.  New debug code.  In crushed tables, now sets `htv' as
9842         well as `hv' to avoid bad confusion later.
9843         (dump_crush_page) New debug code.
9844
9845         * som-low.c: (som_dump_crush_page) New debug code.
9846
9847 Thu Mar 27 01:11:29 1997  Ben Pfaff  <blp@gnu.org>
9848
9849         All source files: Broke long lines into multiple lines.
9850         
9851         * ascii.c: (ascii_close_page) Uses host_system var in place of
9852         HOST_SYSTEM constant.
9853
9854         * cmdline.c: (var syntax_message[]) Broke into
9855         pre_syntax_message[] and post_syntax_message[].
9856         (usage) Outputs both parts, separated by driver list.
9857
9858         * error.h: Fixed broken formatting.
9859
9860         * expr-opt.c: (str_search, str_rsearch) New functions.
9861
9862         * misc.c: (blp_getdelim) Removed.  All references changed to
9863         `getdelim'.
9864         (str_search, str_rsearch) Removed.
9865         (memrmem) New function.
9866
9867         * misc.h: (blp_getline) Removed.  All reference changed to
9868         `getline'.
9869
9870         * stat.h: New file.
9871
9872         * filename.c: Includes "stat.h", not <sys/stat.h>.
9873         (blp_getenv) Uses host_system var instead of HOST_SYSTEM constant.
9874
9875         * output.c: (outp_list_classes) Changed output formatting.
9876
9877         * sfm-write.c: (write_header) Uses host_system var instead of
9878         HOST_SYSTEM constant.
9879         (write_rec_7_34) Extracts version numbers from the version string.
9880         Untested.
9881
9882         * sort.c: Includes "stat.h", not <sys/stat.h>.
9883
9884         * str.c: (strcasecmp) Removed.
9885
9886         * title.c: (cmd_document) Uses host_system var instead of
9887         HOST_SYSTEM constant.
9888
9889         * version.c: Generated on-the-fly by the Makefile instead of being
9890         static.
9891
9892         * str.h: Comment fixes.  Doesn't substitute for missing memmove or
9893         memcpy.
9894         [!HAVE_STRNCASECMP] Declares strncasecmp().
9895
9896         * version.h: Removed stray character.  Comment fixes.
9897         (vars host_system, build_system) New vars.
9898
9899 Mon Mar 24 21:47:31 1997  Ben Pfaff  <blp@gnu.org>
9900
9901         * Most source files: Changed formatting of copyright notice; fixed
9902         FSF address; reformatted to better conform to GNU standards;
9903         comment fixes.  Added markups to prevent GNU indent from messing
9904         up my beautiful formatting :-).
9905         
9906         * q2c.c: (get_line) Ignores lines that begin with `/* *INDENT' so
9907         that GNU indent markups can be passed through without problems.
9908
9909 Wed Feb 19 21:30:31 1997  Ben Pfaff  <blp@gnu.org>
9910
9911         * get.c: Turned off debugging.
9912
9913         * glob.c: (init_glob) Turned on save-file compression by default.
9914
9915         * sfm-write.c: (sfm_write_case) Fixed bug which resulted in less
9916         compression than was possible in save files.
9917
9918 Sun Feb 16 20:57:20 1997  Ben Pfaff  <blp@gnu.org>
9919
9920         * data-out.c: (convert_F) Comment fixes.  Debug message fixes.
9921
9922         * frequencies.q: Removed Fiasco extensions.  Updated calculation
9923         algorithms.  Polished output format. 
9924         (struct frq_info_struct) Removed members `max_degree', `min_n',
9925         all references removed.
9926         (macro frq_extensions) Removed.
9927         (static vars min_n, max_degree) Removed, all references removed.
9928         (internal_cmd_frequencies) Doesn't handle extensions.  Doesn't
9929         calculate `min_n', `max_degree'.
9930         (postcalc) Passes new arg to dump_statistics().
9931         (dump_full) Honor NOLABEL option.  Buggy?  Adds variable name
9932         title.
9933         (dump_condensed) Adds variable name title.
9934         (sum_freqs) Removed.
9935         (calc_stats) Updated calculation algorithm.
9936         (dump_statistics) Removed warning for too-few observations.
9937         Changed table formatting.  Adds variable name title if passed new
9938         arg is nonzero.
9939
9940         * output.h: Comment fix.
9941
9942         * recode.c, sample.c, sort.c: Disabled debug code.
9943
9944         * som-frnt.c: (som_set_value, som_set_float, som_set_text)
9945         Improved debug code.
9946
9947         * var.h: (enum series frq_*) Removed Fiasco extensions.
9948
9949 Sat Feb 15 21:26:53 1997  Ben Pfaff  <blp@gnu.org>
9950
9951         * command.c: Added PROCESS IF to command table.
9952
9953         * Lots & lots of places, removed checks for NULLs preceding calls
9954         to free_expression(), which itself checks.
9955
9956         * descript.q: Removed Fiasco extensions.  Removed optimizations
9957         for non-weighted active files.  Implemented some options.
9958         Finished polishing output format.  Comment fixes.  Merged
9959         `descript.g'.
9960         (static vars n_glob_miss_list, n_glob_valid, n_glob_missing,
9961         max_degree, min_n) Removed.
9962         (macro dsc_extensions) Removed.
9963         (struct dsc_info_struct) Removed `min_n' member, all references
9964         fixed.
9965         (internal_cmd_descriptives) Removed calculation of min_n,
9966         max_degree.  Only deals with one `calc' routine instead of two
9967         flavors.
9968         (precalc) Eliminated redundancy.  Updated for changes to
9969         descriptives_proc structure.
9970         (calc) Moved here from `descript.g'.  Rewritten to calculate
9971         statistics via `moments about the mean' rather than by summing,
9972         summing squares, summing cubes, and so on.
9973         (postcalc) Rewritten for new-style statistical calculation.
9974         (display) Removed support for displaying variables across rows.
9975         No longer crushes the descriptives table.  Removed ancient code.
9976         Added display of N, by variable and listwise.
9977
9978         * descript.g: Removed; merged into `descript.q'.
9979
9980         * expr-evl.c: (evaluate_expression) Now returns a double.  For
9981         numeric results, it returns the result as well as storing it in
9982         the passed `value' structure if non-NULL.  For string results it
9983         just returns 0.0 and it must be passed non-NULL.  Many references
9984         to this function were optimized by use of this change, especially
9985         but not exclusively in `compute.c'.
9986
9987         * frequencies.g: Comment fix.
9988
9989         * glob.c: (glob var process_if_expr) New global var.
9990
9991         * postscript.c: (static var option_tab[]) Corrected entry for
9992         `fixed_size'.
9993         (postopen) Sets x->size to x->prop_size.
9994         (ps_text_set_font_by_name) Sets font size as well as typeface for
9995         PROP and FIXED fonts.
9996         
9997         * sel-if.c: (cmd_process_if) New function.
9998
9999         * sfm-write.c: (struct sfm_fhuser_ext) New member `n_cases'.
10000         (sfm_write_dictionary) Sets `n_cases' to 0.
10001         (sfm_write_case) Increments `n_cases'.
10002         (sfm_close) Attempts to seek the system file back to the header
10003         and write the number of cases in its proper slot.
10004
10005         * som-frnt.c: (som_insert_table) Masks off expansion options since
10006         only SOPT_X_NORM seems to work sensibly.
10007
10008         * som-low.c: (get_cell_size) Fixed bug when a table cell was sized
10009         with a `fixed' value of 2.
10010
10011         * sort.c: (cmd_sort_cases) Cancels PROCESS IF.
10012
10013         * sysfile-info.c: (cmd_sysfile_info) Doesn't display more than 10
10014         value labels; uses SOPT_NONE instead of SOPT_X_BOTH.
10015
10016         * var.h: (enum series dsc_*) Removed Fiasco extensions.
10017         (struct descriptives_proc) Removed `miss_noweight'; new members
10018         `X_bar', `M2', `M3', `M4', `min', `max'.
10019
10020         * vars-atr.c: (discard_variables) Cancels PROCESS IF.
10021
10022         * vfm.c: (close_active_file) Cancels PROCESS IF.
10023         (write_case) Doesn't process cases unselected by PROCESS IF.
10024
10025 Fri Feb 14 23:32:58 1997  Ben Pfaff  <blp@gnu.org>
10026
10027         * glob.c: (glob var err) Removed.
10028
10029         * sysfile-info.c: (cmd_sysfile_info) When adjusting table size,
10030         doesn't have to take into account number of value labels since
10031         they're in a subtable anyway.  Also, doesn't display more than 10
10032         value labels since we can't yet break pages in subtables.
10033
10034 Tue Feb  4 15:15:50 1997  Ben Pfaff  <blp@gnu.org>
10035
10036         * som-frnt.c: (som_change_table_size) Simple change for elegance
10037         that shouldn't change behavior.
10038         (som_set_value) Comment fix.
10039
10040         * som-high.c: (som_submit_table) Message fix.
10041
10042 Wed Jan 22 21:54:00 1997  Ben Pfaff  <blp@gnu.org>
10043
10044         * command.c: Added SYSFILE INFO to command table.
10045
10046         * file-handle.q: (fh_handle_filename) New function.
10047
10048         * get.c: (save_trns_proc) Fixed a bug in padding of output data
10049         with spaces.
10050
10051         * main.c: (parse) New return value for command functions, -3.
10052
10053         * misc.h: Comment fix.
10054
10055         * output.h: Comment fixes.
10056         (macro COMPONENTS) Removed.
10057
10058         * postscript.c: (write_text) Modified literal_chars[] so that `('
10059         and ')' are not written to the output in strings as literals.
10060
10061         * sfm-read.c: (sfm_read_dictionary) New argument.
10062         (read_header) New argument.  Sets the information structure's
10063         values from the header information.  
10064         (read_variables) [__CHECKER__] Redefines isalnum()--some sort of
10065         bizarre Checker problem, I guess.
10066         (read_variables) Proper cleanup on lossage.
10067
10068         * sfm.h: (struct sfm_read_info) New struct for use by
10069         sfm_read_dictionary().
10070
10071         * som-frnt.c: (som_create_table) New argument CREATE_FLAGS,
10072         currently used just for tables that can be dynamically resized and
10073         thus have to be allocated with arena_malloc() instead of
10074         arena_alloc().  All references changed.
10075         (som_change_table_size) New function.
10076         (som_insert_table) Bugfix: now inserts `cell', not `c'!
10077
10078         * som-high.c: [GLOBAL_DEBUGGING] (check_table) Moved to som-low.c.
10079         (som_submit_table) [GLOBAL_DEBUGGING] Doesn't call check_table()
10080         any more.
10081
10082         * som-low.c: (draw_cell) Calls draw_table_cell() for SCON_TABLE
10083         cells.
10084         (draw_intersection) Now takes an argument specifying the table in
10085         question.  All references changed.
10086         (draw_table_cell) New function.
10087         (som_get_table_size) [GLOBAL_DEBUGGING] Calls check_table().
10088         (som_get_table_size) Many nice new explanatory comments.
10089         [GLOBAL_DEBUGGING] (check_table) Moved here from som-high.c.
10090
10091         * som.h: New enum series SOM_CREATE_* for use as create flags with
10092         som_create_table().
10093
10094         * str.h: Moved a comment here from TODO.
10095
10096         * sysfile-info.c: New file.  Reference implementation.
10097
10098 Sun Jan 19 14:22:11 1997  Ben Pfaff  <blp@gnu.org>
10099
10100         * command.c: Added RENAME VARIABLES to table of commands.
10101
10102         * data-in.c: (dls_error) Sets `cust_field'.
10103         (parse_N) Message fix.
10104         (parse_day_count) New function.
10105         (to_roman) Never outputs VX as a `short form' of V.
10106         (parse_month) Fixed parsing of Roman numerals.
10107         (parse_trailer) Message fix.
10108         (parse_DATE, parse_ADATE, parse_EDATE, parse_SDATE, parse_JDATE,
10109         parse_QYR, parse_MOYR, parse_WKYR, parse_DTIME) Issue a message if
10110         the date is invalid.
10111         (parse_SDATE) Fixed swapped day, year.
10112         (parse_JDATE) Fixed bug for dates in 1582.
10113         (parse_DTIME) Allows days not between 1 and 31.
10114         (parse_numeric) Makes local copy of f.type for easier usage.
10115         FMT_DOLLAR fixed.
10116
10117         * data-out.c: (convert_F) When outputting as scientific, properly
10118         sets f.type as fp->type.
10119         (insert_commas) Fixed operator precedence problem with setting of
10120         nitems.  Changed strcpy to memcpy (no null terminator). 
10121         (convert_date) Fixed FMT_JDATE: added 1900 to year.
10122         (convert_CCx) Essentially rewritten, but now it works.
10123
10124         * display.c: (cmd_display) Added DISPLAY FILE LABEL (undocumented
10125         feature of Fiasco).
10126         (display_documents) Implemented.
10127
10128         * error.c: (glob var cust_field) New var.
10129         (vmsg) Displays cust_field as part of message classes DE and DW.
10130
10131         * formats.c: (debug_print) Fixed to compile under updated
10132         dictionary format.
10133
10134         * get.c: (cmd_get, cmd_save_internal) Close file handle on
10135         failure.
10136
10137         * misc.c: (parse_format_specifier) Formatting fix.
10138
10139         * modify-vars.c: (struct var_modification) Renamed `n_reorder' as
10140         `n_rename' for clarity.
10141         (cmd_modify_vars) Initializes `forward' and `positional' at
10142         appropriate times.  Frees lists of vars to rename on failure.
10143         Comment fix.  Frees memory on success.  
10144         (rearrange_dict) Simplified `for' loop condition.
10145
10146         * rename-vars.c: New file (reference implementation).
10147         
10148         * set.q: (internal_cmd_set) Fixed `emu' test condition.
10149
10150         * sfm-read.c: (read_header) File label is created only if file
10151         label in file is not blank.
10152         (read_variables) Initializes `dict' local variable.
10153         (read_documents) Proper behavior on lossage.
10154
10155         * sfm-write.c: (write_header) Doesn't blank out the file label
10156         (why was this here to begin with?!)
10157
10158         * temporary.c: (save_dictionary) File label is copied only if
10159         non-NULL.  Doesn't try to xstrdup() dictionary documents.
10160         Adapted so as to not irritate Checker.
10161         (free_dictionary) Only destroys var_by_name if non-NULL.
10162
10163         * title.c: (cmd_file_label) Doesn't skip FILE, LABEL tokens.
10164         (cmd_document) Doesn't skip DOCUMENT token.  Adds some header
10165         lines to the document, indents the document.  Also, it works now.
10166         (add_document_line) New function.
10167
10168         * var.h: (struct dictionary) Reordering.
10169
10170         * vars-prs.c: (parse_variables) On lossage, only local_free()'s
10171         bits if it was allocated to begin with.
10172
10173 Thu Jan 16 13:08:57 1997  Ben Pfaff  <blp@gnu.org>
10174
10175         * command.c: Added MODIFY VARS to list of commands.
10176
10177         * configure.in: Updated custom macros for autoconf 2.12.  Removed
10178         mmap reference; fixed termcap library reference.
10179
10180         * display.c: (display_variables) Fixed a few bugs although it's
10181         still not well written.
10182
10183         * error.c: [!__CHECKER__] (chkr_disp_call_chain) New function.
10184         (induce_segfault) Calls chkr_disp_call_chain() instead of
10185         inducing an actual SIGSEGV.
10186
10187         * expr-opt.c: (evaluate_tree) Swapped order of arguments to
10188         str_search() and str_rsearch().  Fixed tests for matches on
10189         OP_INDEX and OP_RINDEX.
10190
10191         * filename.c: (good_getcwd) Removed as the new libc for Checker
10192         doesn't contain this bug, apparently.
10193
10194         * misc.c: (str_search, str_rsearch) Changed order of arguments for
10195         consistency with GNU memmem.
10196         (blp_getdelim) Changed `len' from `int' to `size_t'.
10197
10198         * modify-vars.c: Reference implementation.
10199
10200         * som-frnt.c: (zero_length) New global var.
10201         (som_create_table) Message fix.
10202
10203         * som.h: Added gcc attributions to som_set_text(),
10204         som_output_text() prototypes.  blank_line() refers to
10205         zero_length[] instead of a literal null string to suppress gcc
10206         warnings.
10207
10208         * sort.c: (do_external_sort) Fixed fencepost error on lossage.
10209         (allocate_cases) Decrements x_max so the last element of x[] can
10210         be used by the algorithm.
10211
10212         * var.h: Changed minor details of `variable' declaration.  
10213         (struct modify_vars_proc) New struct.
10214         (struct variable) Added field p.mfv.
10215
10216         * vars-atr.c: Comment fix.
10217
10218         * vars-prs.c: (fill_all_vars) More optimal implementation.
10219
10220         * vfm.c: (dump_splits) Sets the last byte of temp_buf to a null
10221         character, which it shouldn't have to do but printf() seems to
10222         read the null byte even though I supply a maximum length...
10223
10224 Fri Jan 10 20:22:08 1997  Ben Pfaff  <blp@gnu.org>
10225
10226         * command.c: Removed command alias X for QUIT.
10227         (parse_cmd) Fixed comment parsing.
10228
10229         * dfm.c: (struct dfm_fhuser_ext) Fields `len', `size' are now of
10230         type size_t.
10231         (read_record) Fixed references to len, size.
10232         (dfm_get_record) Restructured.
10233
10234         * file-handle.h: (struct file_handle) Field `lrecl' now of type
10235         size_t.
10236
10237         * file-handle.q: (internal_cmd_file_handle) Checks for nonpositive
10238         record length.
10239
10240         * modify-vars.c: New file.  Not complete.
10241         
10242         * set.q: (set_ccx) Fixed operator precedence problem regarding ^
10243         and ==.
10244
10245         * sfm-read.c: (bswap_flt64, read_header, write_variable) Fixed
10246         problems caused by int/size_t differences.
10247
10248         * sort.c: (output_record, merge_once) Cast `size_t's to `int's in
10249         appropriate spots.
10250
10251         * str.c: (strcasecmp) Fixed bug that cropped up when the strings
10252         being compared were of equal length.
10253
10254 Thu Jan  2 19:08:23 1997  Ben Pfaff  <blp@gnu.org>
10255
10256         * command.c: Added DOCUMENT, DROP DOCUMENTS, FILE LABEL.
10257
10258         * lexer.c: (get_dotted_rest_of_line) New function.
10259
10260         * sel-if.c: (cmd_filter) Cannot choose string or scratch variables
10261         as filters.
10262
10263         * sfm-read.c: (sfm_read_dictionary) Calls read_documents() to read
10264         type 6 records.  Frees the dictionary properly.
10265         (read_header) Initializes the dictionary instead of letting
10266         read_variables() do it.  Sets the dictionary file label from the
10267         system file.
10268         (read_documents) New function.
10269
10270         * sfm-write.c: (sfm_write_dictionary) Calls write_documents() to
10271         write type 6 record if appropriate.
10272         (write_header) Writes file label from dictionary.
10273         (write_documents) New function.
10274
10275         * temporary.c: (save_dictionary, restore_dictionary,
10276         free_dictionary) Properly handle new fields in dictionary struct.
10277
10278         * title.c: (get_title) Returns after failure().
10279         (cmd_file_label, cmd_document, cmd_drop_documents) New functions
10280         for new commands FILE LABEL, DOCUMENT, DROP DOCUMENTS.  Untested.
10281
10282         * var.h: (struct dictionary) New fields `label', `n_documents',
10283         `documents'.
10284
10285 Wed Jan  1 22:08:10 1997  Ben Pfaff  <blp@gnu.org>
10286
10287         * command.c: Added FILTER to list of commands.
10288
10289         * frequencies.g: [WEIGHTING] Removed test for weighting!=-1 since
10290         it's always true.
10291
10292         * get.c: (cmd_save_internal) Removed weighting code since it's now
10293         handled by sfm-write.c.  Properly commented out debug code.
10294
10295         * glob.c: (glob var weighting) Removed.
10296
10297         * sel-if.c: Comment fixes.
10298         (cmd_filter) New function.
10299
10300         * sfm-read.c: (struct sfm_fhuser_ext) New field `weight_index'.
10301         (sfm_read_dictionary) Sets weighting variable direct in the
10302         created dictionary now.  (Apparently we previously didn't support
10303         weighting on GET?)
10304         (read_header) Sets weight_index field in sfm_fhuser_ext from
10305         header read from disk.
10306
10307         * sfm-write.c: (sfm_write_dictionary) Comment fix.
10308         (write_header) Now sets the weighting in the header from the
10309         passed primary dictionary instead of from the sfm_write_info.
10310
10311         * sfm.h: (struct sfm_write_info) Removed field `weight'.
10312
10313         * som-high.c: (dump_crush_table) Fixed a couple of assertions that
10314         broke on boundary conditions.
10315
10316         * var.h: (struct dictionary) New fields `weight_var',
10317         `weight_index', and `filter_var'.
10318         (glob var weighting) Removed.  This is now part of struct
10319         dictionary.  All references changed; the less mechanical changes
10320         are described above.
10321
10322         * vars-atr.c: (find_dict_variable) New function.
10323
10324         * vfm.c: (static var filter_index) New variable.
10325         (open_active_file) Initializes filter_index from default_dict.
10326         (write_case) Calls proc_func() only if the filter variable is
10327         nonzero; this implements FILTER behavior.
10328
10329         * weight.c: (static var weight_varname) Removed.
10330         (cmd_weight) Modified default_dict instead of glob vars.
10331         (update_weighting) Changed the signature to modify a dictionary
10332         instead of glob vars.  Now returns the weighting variable.
10333         (get_weighting_variable) Removed; its function is absorbed by
10334         update_weighting().
10335         (stop_weighting) Operates on a dictionary now.
10336
10337 Wed Jan  1 17:00:59 1997  Ben Pfaff  <blp@gnu.org>
10338
10339         * sort.c: Removed debugging info from messages.
10340         (do_external_sort) Cleans up after itself by deleting the
10341         temporary directory on failure.  (On success it is deleted by the
10342         input program.)
10343         (allocate_cases) Removed debug code.  Added clean up code.
10344         (output_record) Removed debug code.
10345         (merge) Added code to close all the input files that are currently
10346         open.  This is a likely location for bugs, because I'm not sure
10347         about boundary conditions.  Removed an unnecesary heap_delete().
10348         (merge_once) Removed input file "optimization" that in fact
10349         screwed up the rest of the code.  Message and comment fixes.
10350
10351 Sun Dec 29 21:36:48 1996  Ben Pfaff  <blp@gnu.org>
10352
10353         * error.c: [__CHECKER__] (induce_segfault) Flushes output streams.
10354
10355         * heap.c: (heap_delete) New argument.
10356
10357         * sort.c: Finished implementation of external sort.
10358
10359         * vfm.c: (read_from_disk) Returns after a disk error.
10360
10361 Sun Dec 22 23:10:39 1996  Ben Pfaff  <blp@gnu.org>
10362
10363         * sort.c: (static var state) Removed.
10364         (static vars max_handles, tmp_basename, tmp_extname,
10365         huffman_queue) New variables.
10366         (do_external_sort) Moved most code to new functions.
10367         Creates huffman_queue.
10368         (allocate_file_handles, allocate_cases) New functions.
10369         (static vars run_no, run_length, file_index, case_count) New
10370         variables. 
10371         (output_record) Returns success.  Now really writes to the output
10372         file.
10373         (begin_run, end_run) New functions.
10374         (write_initial_runs) Returns success.  Initializes run_no to -1.
10375         Calls begin_run(), end_run() at appropriate times.  Outputs debug
10376         messages.
10377         (write_to_sort_cases) Calls begin_run(), end_run() at appropriate
10378         times.
10379         (merge) New function.
10380
10381         * heap.c, heap.h: New files.  Hopefully in near-final form.
10382
10383 Sat Dec 21 21:51:04 1996  Ben Pfaff  <blp@gnu.org>
10384
10385         * glob.c: Added write_active_file to global vars.
10386
10387         * sort.c: Several new miscellaneous static variables.
10388         (cmd_sort_cases) Big comment fix.
10389         (perform_case_2) Renamed `do_external_sort' and completely
10390         rewritten.
10391         (case_2_proc_func) Removed.
10392         (output_record, write_initial_runs, write_to_sort_cases,
10393         compare_record) New functions.
10394
10395         * vfm.c: [DEBUGGING] (index_to_varname) Excised bit rot.
10396
10397 Tue Dec 17 18:57:59 1996  Ben Pfaff  <blp@gnu.org>
10398
10399         * sort.c: (perform_case_2) Changed the method for allocation of
10400         lots of memory--now allocates one case at a time in hopes that
10401         more cases can be allocated with heavily fragmented memory.
10402
10403         * var.h: (write_active_file) New global var.
10404
10405         * vfm.c: (procedure, close_active_file, write_case,
10406         SPLIT_FILE_procfunc) Now allow beginfunc, procfunc, and endfunc
10407         arguments to procedure() to be NULL.  All references to
10408         procedure() that made use of dummy functions were changed to NULL
10409         functions.
10410         (open_active_file) If write_active_file is non-NULL, the output
10411         device becomes DEV_PGM (a new enum).
10412         (close_active_file) Sets write_active_file to NULL.
10413         (read_from_memory) Comment fix.
10414         (record_case) Calls write_active_file() when the output device is
10415         DEV_PGM.
10416
10417 Sun Dec 15 15:32:16 1996  Ben Pfaff  <blp@gnu.org>
10418
10419         * sort.c: New file.
10420
10421         * autorecode.c: (cmd_autorecode) Fixed parsing of options.
10422         Fixed checking for duplicate varnames.
10423         (recode) xmalloc()'s the transformation instead of arena_alloc()'ing
10424         it.
10425         (autorecode_trns_free) Destroys hash tables for each recoding
10426         specification.
10427         (autorecode_proc_func) Compares NULL to *vpp instead of vpp.
10428
10429         * command.c: Added SORT CASES to cmd_table.
10430         (null_func, null_int_func) Prototyped.
10431
10432         * descript.g: (calc_weight, calc_noweight) Computes own case
10433         number now.
10434         
10435         * frequencies.q: (dump_statistics) Fixed problem with
10436         too-few-cases warning message.
10437
10438         * get.c: (cmd_save_internal) Handles weighting properly.
10439
10440         * hash.c: (hsh_dump) Output format changed.
10441         (force_hsh_insert) Actually works now, prototype changed.
10442
10443         * list.q: (static var case_num) New variable.
10444         (cmd_list) Initializes case_num.
10445         (list_cases) Increments case_num.
10446
10447         * var.h: Added definitions for SORT CASES.  Comment fixes.
10448
10449         * vfm.c: Some definitions moved to new file vfmP.h.  Comment
10450         fixes.  `active' renamed vfm_active, `rep' renamed
10451         vfm_replacement, all references changed.
10452         (procedure) The procfunc no longer receives a case number.  All
10453         references changed.
10454         (write_case) Subtle reordering.
10455         (SPLIT_FILE_procfunc) Counts cases differently.  Slightly less
10456         redundant.
10457
10458         * weight.c: (get_weighting_variable) New function.
10459
10460         * vfmP.h: New file with definitions from vfm.c.
10461
10462 Sat Dec 14 10:35:30 1996  Ben Pfaff  <blp@gnu.org>
10463
10464         * command.c: (FILE_TYPE_okay) Commented out some tests because
10465         they're clumsy and not yet needed.
10466
10467         * var.h: Most *_trns structures moved to their respective source
10468         files.  Some were moved into a new file, do-ifP.h.  Comment fixes.
10469         (union any_trns) Changed to a typedef for trns_header.
10470         (struct input_program_pgm) Removed.
10471
10472         * vars-prs.c: (parse_variables) Only local_free()'s bits if it
10473         was allocated in the first place.
10474
10475 Fri Dec 13 21:30:53 1996  Ben Pfaff  <blp@gnu.org>
10476
10477         * autorecode.c: New file.
10478         
10479         * command.c: Added AUTORECODE to command table; re-enabled SET.
10480
10481         * data-out.c: (convert_F) Handles infinities and NaNs properly.
10482
10483         * error.c: (vmsg) Comment fixes.
10484
10485         * hash.c: Comment fix.
10486         (hashpjw_d) New function.
10487         (hashpjw) Reimplemented as call to more general function
10488         hashpjw_d().
10489         (internal_comparison_fn) Initializes pointers properly.
10490         (hsh_sort) [GLOBAL_DEBUGGING] New debugging code.
10491         (force_hsh_insert, force_hsh_find) New debugging wrapper
10492         functions.
10493
10494         * main.c: (main) Message fix.
10495
10496         * output.c: (outp_read_devices) Message fix.
10497
10498         * set.q: Comment fixes.
10499         (custom_results) Implemented Wnd/X form of subcommand.
10500         (set_routing) New function.
10501         (internal_cmd_set) Implemented ERRORS, MESSAGES.
10502
10503         * settings.h: (SET_ROUTE_*) New enum series.
10504         (set_results) Renamed set_results_file, all references changed.
10505         (set_messages) Removed.
10506         (glob vars set_errors, set_messages, set_results) New vars.
10507
10508         * title.c: (get_title) Remembers to xstrdup() the result of
10509         get_rest_of_line().
10510
10511         * var.h: (arc_item, arc_spec, autorecode_trns) New structures for
10512         use by AUTORECODE.
10513         (union any_trns) New element `arc'.
10514
10515 Fri Dec  6 23:53:47 1996  Ben Pfaff  <blp@gnu.org>
10516
10517         * command.c: (output_line) Removed references to set_screen.
10518
10519         * error.c: (static var terminating) New var.
10520         (hcf) Sets terminating to 1.
10521         (vmsg) If terminating is nonzero, does not attempt to call hcf().
10522         This prevents an infinite loop if an error occurs within hcf().
10523
10524         * expr-evl.c: (evaluate_expression) [__CHECKER__] Replaced case
10525         statement circumlocution with `case 42000' trick.
10526         (evaluate_expression) New support for OP_STR_MIS.
10527
10528         * expr-opt.c: (evaluate_expression) [__CHECKER__] Replaced case
10529         statement circumlocution with `case 42000' trick.
10530         (dump_node) Handles OP_STR_MIS.
10531
10532         * expr-prs.c: (MISSING_func, SYSMIS_func) Rewrote to handle string
10533         variables exceptions.
10534         (parse_function) Message fix.
10535         (ops[]) Added OP_STR_MIS.
10536
10537         * expr.h: Added OP_STR_MIS to OP_* enum.  Comment fixes.
10538
10539         * exprP.h: [__CHECKER__] Removed case statement circumlocution.
10540
10541         * glob.c: Removed set_scrnfile glob var.
10542         (init_glob) set_errorbreak set to 0 by default.
10543
10544         * groff-font.c: Changed included files.
10545         (groff_read_font) Initializes font_arena local var correctly.
10546         (default_font) New function.
10547
10548         * output.c: Comment fixes.
10549         (glob var disabled_devices) New variable.
10550         [GLOBAL_DEBUGGING] (static var iterating_driver_list) New
10551         variable.
10552         [GLOBAL_DEBUGGING] (reentrancy) New function.
10553         [GLOBAL_DEBUGGING] (outp_read_devices, outp_done, find_driver,
10554         outp_iterate_enabled_drivers) Calls to reentrancy().
10555         (destroy_list) New function.
10556         (outp_done) Moved code to destroy_list().
10557         (parse_options) Parses `listing', `screen', `printer' options
10558         internally.
10559         (configure_driver) Sets new `device' member of driver.
10560         (outp_iterate_enabled_drivers, outp_enable_device) New functions.
10561
10562         * output.h: Comment fixes.  New enum series OUTP_DEV_*.
10563         (struct outp_driver_struct) New member `device'.
10564
10565         * postscript.c: (find_encoding_file) Doesn't display its own error
10566         messages.
10567         (default_encoding) New function.
10568         (switch_font) Calls default_encoding() if no encoding can be
10569         found.
10570         (text) Makes up a character metric if none exists for the desired
10571         character.
10572         (load_font) Properly copies a fallback filename.  Calls
10573         default_font() for a font if none at all are known.
10574
10575         * set.q: Comment fixes.  Removed OUTPUT subcommand.
10576         (custom_listing) Calls outp_enable_device() to enable/disable
10577         listing device.
10578         (turn_screen_on) Removed.
10579         (internal_cmd_set) Calls outp_enable_device() to enable/disable
10580         screen, printer devices.
10581
10582         * settings.h: Comment fixes.
10583         (glob vars set_output, set_printer, set_screen, set_scrnfile)
10584         Removed.
10585
10586         * som-high.c: (som_submit_table, som_eject_page) Use
10587         outp_iterate_enabled_drivers() instead of iterating
10588         outp_driver_list directly.
10589
10590 Wed Dec  4 21:34:17 1996  Ben Pfaff  <blp@gnu.org>
10591
10592         * data-in.c: (parse_EDATE, parse_SDATE) New functions.
10593         (parse_string_as_format) Handles new formats.
10594         (parse_numeric) Now handles DOT and PCT formats.
10595
10596         * data-out.c: (convert_E, convert_F, insert_commas) Handle DOT
10597         format now.
10598         (convert_date) Handle EDATE and SDATE formats.
10599         (convert_CCx) Now if there's not room for the currency characters,
10600         converts it as F format if it's positive instead of giving up
10601         quickly.  Also fixed save-and-restore bug with decimal point
10602         characters.  
10603         (convert_format_to_string) Handles new formats.
10604
10605         * misc.c: (formats[]) Added new formats.
10606         (convert_fmt_ItoO) Supports new formats.
10607
10608         * sfm-read.c: (parse_format_spec) Supports new formats.  Better
10609         data checking.  New argument, all references changed.
10610
10611         * sfm-write.c: (write_format_spec) Supports new formats.
10612
10613         * var.h: New formats FMT_DOT, FMT_PCT, FMT_EDATE, FMT_SDATE.
10614         Comment fixes.
10615
10616 Sun Dec  1 17:19:00 1996  Ben Pfaff  <blp@gnu.org>
10617
10618         * cmdline.c: Comment fixes.
10619         (parse_command_line) Changed return type to void.
10620
10621         * data-in.c: (parse_string_as_format) Added FMT_CCA...FMT_CCE to
10622         switch.
10623         (parse_numeric) Handles international numbers (comma as decimal
10624         point).  Some reformatting.
10625
10626         * data-list.c: (parse_free) Default output format is now
10627         set_format instead of hard-coded F8.2.
10628         (read_from_data_list_list) Emits error message on undefined data
10629         only if set_undefined is nonzero.
10630
10631         * data-out.c: (convert_E) Changes decimal point from period to
10632         comma if appropriate.  Restructured.  Better comments.
10633         (convert_F) Changes decimal point from period to comma if
10634         appropriate.
10635         (insert_commas) Major bug with handling of negative values fixed.
10636         Also, inserts periods instead of commas if appropriate.
10637         (convert_CCx) New function.
10638         (convert_format_to_string) Added FMT_CCA...FMT_CCE to switch.
10639         (num_to_string) Changed `.' to set_decimal.
10640
10641         * dfm.c: Comment fixes.
10642         (dfm_close) Frees ext->line even in inline_file.
10643         (open_inline_file) New function.
10644         (open_file_r) When opening the inline file: now properly
10645         recognizes `BEGIN DATA.' line, and calls open_inline_file() to
10646         finish up.
10647         (read_record) Calls fh_close_handle() instead of dfm_close() to
10648         close the inline file.  Makes a copy of the line getl_buf to avoid
10649         interlock problems.
10650         (dfm_get_record) Restructured.  Now checks the return value of
10651         open_file_r().
10652         (cmd_begin_data) Moved open code into open_inline_file().  Relaxed
10653         checking for use of inline file.  No longer tries to close inline
10654         file.
10655
10656         * error.c: (glob var error_already_flagged) New var.
10657         (vmsg) Message change.  Now checks max number of errors/warnings,
10658         acts on it.
10659
10660         * file-handle.q: (fh_handle_name) Now allows closing of
10661         inline_file.
10662         (fh_init_files) Reformatted.
10663
10664         * get.c: (trim_dictionary) Checks SCOMP option instead of COMP.
10665
10666         * getline.c: (getl_include) Fixed bug that popped up when called
10667         when file queue was empty.
10668         (read_console) Resets error_count, warning_count,
10669         error_already_flagged to zero.
10670
10671         * glob.c: Many changes to update list of variables.
10672         (init_compat_dependent) Now this function is called whenever
10673         `compat' changes.  It now sets set_seed only if it hasn't
10674         previously been referenced.  It now calls
10675         lex_init_compat_dependent().
10676
10677         * include.c: (cmd_include_at) Frees temporary buffer instead of
10678         line buffer.  
10679         (cmd_include) Doesn't make copy of include file name.
10680
10681         * lexer.c: Comment fixes.
10682         (init_lex) Moved some code into new function
10683         lex_init_compat_dependent().
10684         (lex_init_compat_dependent) New function.
10685         (hex_val) Simplified.
10686         (preprocess_line) Uses set_endcmd instead of hardcoding `.'.
10687
10688         * main.c: Comment fixes.
10689         (main) Reformatted.
10690
10691         * misc.c: (formats[]) Added FMT_CCA...FMT_CCE.
10692         (check_input_specifier) Disallows FMT_CCA...FMT_CCE.
10693         (convert_fmt_ItoO) Detects FMT_CCA...FMT_CCE.
10694         (setup_randomize) Sets set_seed_used.
10695
10696         * set.q: Comment fixes.
10697         (custom_results) Conditionalizes on `compat'.
10698         (custom_log) Calls custom_journal().
10699         (set_ccx) New function.
10700         (cmd_set) Calls init_compat_dependent() when `compat' changes.
10701         Calls set_ccx() to handle CCA...CCE.  Sets set_grouping
10702         when set_decimal changes.  Range-checks values for MITERATE,
10703         MNEST.  Message fixes.
10704
10705         * settings.h: Comment fixes.
10706         (struct set_cust_currency) New struct.
10707         (set_cc[], set_grouping, set_seed_used) New global vars.
10708
10709         * var.h: (FMT_CCA...FMT_CCE) New output formats.
10710         (FCAT_OUTPUT_ONLY) New FCAT_* constant.
10711
10712 Thu Nov 28 23:14:07 1996  Ben Pfaff  <blp@gnu.org>
10713
10714         * glob.c: Revised variables to correspond to settings.h.
10715         (init_glob) Initializes variables from settings.h properly.
10716
10717         * set.q: Began long-overdue major revision to correspond to new
10718         philosophy.  Most code changed. 
10719
10720         * settings.h: Mostly changed; reorganized, reordered, large new
10721         comment.
10722
10723 Thu Nov 28 19:46:10 1996  Ben Pfaff  <blp@gnu.org>
10724
10725         * get.c: (cmd_save_internal) No longer forces compression off.
10726
10727         * sfm-read.c: (read_compressed_data) If eof is reached when
10728         reading a new instruction octet, only signal error if we're in the
10729         middle of a case.
10730
10731         * sfm-write.c: (COMPRESSION_BIAS) New #define.
10732         (struct sfm_fhuser_ext) New member `end'.
10733         (write_header) Refers to COMPRESSION_BIAS instead of magic 100.0.
10734         (ensure_buf_space) New function.
10735         (sfm_write_case) Reimplemented in order to support compression.
10736         (sfm_close) Writes out the remaining contents of the compression
10737         buffer if any.
10738
10739 Wed Nov 27 23:18:35 1996  Ben Pfaff  <blp@gnu.org>
10740
10741         * command.c: Defined SAVE and XSAVE commands in command table.
10742
10743         * common.h: second_lowest_value is of type flt64, not double.
10744
10745         * file-handle.h: Comment fix.
10746
10747         * get.c: Comment fixes.
10748         (static var `trns') New.
10749         (save_write_case_func, save_trns_proc, save_trns_free, null_func,
10750         cmd_save_internal, cmd_save, cmd_xsave) New functions.
10751         (dict_delete_run) Clears the variables and frees them now.
10752         (trim_dictionary) Sets default for compression.
10753         On KEEP subcommand, frees deleted variables as well as clearing
10754         them.  Finally got the sense of the test for deleting all
10755         variables correct.
10756         [DEBUGGING] (dump_dict_variables) Message fix.
10757
10758         * glob.c: (init_glob) set_compression set to 1 by default.
10759
10760         * list.q: Properly #includes config.h.
10761
10762         * misc.h: New macro REM_RND_UP.
10763
10764         * settings.h: Comment fix.
10765
10766         * sfm-read.c: (structs sysfile_header, sysfile_format,
10767         sysfile_variable; inline function bswap_int32) Moved to new file
10768         sfmP.h.
10769         (corrupt_msg) [__CHECKER__] No longer induces segfault.
10770         (sfm_read_dictionary) Fixed bug caused by failing to initialize
10771         var_by_index.
10772         (read_machine_flt64_info) Fixed some problems caused by confusion
10773         between flt64 and double types.
10774         (read_header) Message fix.
10775         (read_variables) Fixed set of cases in which we byte-swap sv.print
10776         and sv.write.  Fixed confusion of flt64 and double.
10777
10778         * sfm.h: (struct sfm_write_info) New.
10779
10780         * som-high.c: (som_draw_title) Properly frees `s'.
10781
10782         * temporary.c: (save_dictionary) Comment fix.
10783
10784         * var.h: Comment fixes.  New FMT_* enum, FMT_NUMBER_OF_FORMATS.
10785         (struct trns_header) Formatting fix.
10786         (struct save_trns) New.
10787
10788         * vars-atr.c: (discard_variables) Comment fix.
10789
10790         * sfm-write.c: New file, baseline release.
10791
10792         * sfmP.h: New file, baseline release.
10793
10794 Sun Nov 24 14:53:53 1996  Ben Pfaff  <blp@gnu.org>
10795
10796         * cmdline.c: (parse_command_line) `--version' output updated.
10797         (glob var syntax_message[]) Added my e-mail address.
10798
10799         * file-handle.q, lexer.c, vfm.c: Changed many instances of
10800         `illegal' to `invalid'.
10801
10802         * sfm-read.c: (struct sfm_fhuser_ext) New fields used as
10803         uncompression buffer.
10804         (sfm_close) Frees decompression buffer.
10805         (sfm_read_dictionary) Initializes decompression buffer.
10806         (buffer_input, read_compressed_data) New functions.
10807         (sfm_read_case) Restructured; now calls read_compressed_data() to
10808         handle compressed system file data.
10809
10810         * var.h: Comment fix.
10811
10812 Mon Nov 11 15:34:09 1996  Ben Pfaff  <blp@gnu.org>
10813
10814         * dfm.c: (dfm_close) Does not set h->{ext,class} because the
10815         caller handles it.
10816          
10817         * get.c: New comments.  New static var `get_file'.
10818         (cmd_get) Now fully implemented.  Calls discard_variables();
10819         initializes fv and lv for all variables; new debug code; sets
10820         up the dictionary; sets up the input program.
10821         (read_from_get, cancel_get) New functions.
10822
10823         * sfm-read.c: Comment fixes.
10824         (sfm_close) New static function.
10825         (sfm_read_dictionary) Properly sets up the class of the
10826         file_handle.  No longer cares what size the data is in records of
10827         type 7.  Also, on failure, properly cleans up the file_handle and
10828         free()s some stuff.
10829         (read_variables) No longer thinks it knows `nval' of the
10830         dictionary.  Now sets p.get.fv, etc., instead of speculatively
10831         setting fv itself.
10832         (read_value_labels) Fixed off-by-one error in indexing of
10833         var_by_index[].
10834         (sfm_read_case) New function.
10835         (sfm_r_class) New static var.
10836
10837         * var.h: (get_proc) New struct.
10838         (struct variable) New member p.get.
10839
10840 Thu Nov  7 20:52:28 1996  Ben Pfaff  <blp@gnu.org>
10841
10842         * get.c: Removed GTSV_OPT_MAP because of a misinterpretation of
10843         the manual's meaning.
10844         (rename_variables) New function.
10845         (trim_variables) Doesn't try to parse MAP any more.  Removed debug
10846         code.  Now properly reorders the dictionary on the KEEP keyword.
10847
10848         * sfm-read.c: (read_value_labels) Fixed some bugs regarding
10849         garbage collection.
10850
10851         * vars-atr.c: (clear_variable) New argument `dictionary *'.
10852         (rename_variable) New function.
10853         (free_val_lab) Reformatted.
10854
10855 Thu Nov  7 17:29:16 1996  Ben Pfaff  <blp@gnu.org>
10856
10857         * var.h: Reindented entire file.  Comment fixes.
10858         (glob vars var, var_by_name, nvar, N, nval, n_splits, splits)
10859         Removed.
10860         (glob var default_dict) New.
10861         (struct indirect_dictionary) Removed.
10862
10863         * Many other source files were changed to add `default_dict.'
10864         before all references to the dictionary of the active file.
10865         
10866         * vars-atr.c: (make_indirect_dictionary) Removed.
10867
10868         * glob.c: Reindented all variable declarations.  Updated for
10869         changed var.h.  Comment fixes.
10870
10871         * temporary.c: (restore_dictionary, save_dictionary) Simplified
10872         because now we can mainly copy dictionary structs.
10873
10874         * vars-prs.c: (is_dict_varname, parse_dict_variable,
10875         parse_variables) Takes dictionary instead of indirect_dictionary
10876         first argument.
10877         (parse_variables) Instead of calling make_indirect_dictionary,
10878         just sets DICT to &default_dict if DICT is NULL.  Of course, lots
10879         of `*dict.' references had to be changed to `dict->'.  Removed
10880         debug code.
10881
10882 Thu Nov  7 15:48:52 1996  Ben Pfaff  <blp@gnu.org>
10883
10884         * get.c: Added GTSV_OPT_* series of enums.
10885         (trim_dictionary, dict_delete_run) New functions.
10886         [DEBUGGING] (dump_dict_variables) New function.
10887         (cmd_get) Calls trim_dictionary() to get dictionary fully set-up.
10888         [DEBUGGING] Calls dump_dict_variables() to display results.
10889
10890         * glob.c: (cmp_variable) Now a public function declared in var.h.
10891
10892         * sfm-read.c: Turned off debug code.  Comment fixes.
10893         (read_machine_int32_info, read_machine_flt64_info) New functions
10894         to parse type 7 records.
10895         (sfm_read_dictionary) Properly byteswaps several fields now.
10896         Calls read_machine_*_info() to parse type 7 subtypes 3 and 4
10897         records.  [DEBUGGING] Dumps dictionary.
10898         (read_variables) Sets `index' field of variables created properly.
10899         Constructs avl tree of variables in dictionary.  [DEBUGGING] No
10900         longer dumps dictionary.
10901         (read_value_labels) Properly byteswaps fields.  [DEBUGGING] New
10902         debug code.
10903         [DEBUGGING] (dump_dictionary) No longer stubbed out.
10904
10905         * temporary.c: (restore_dictionary) Destroys `var_by_name' glob
10906         var before destroying any variables just to save a little time.
10907
10908         * var.h: (struct variable) Reordered in order to make name[] the
10909         first member; this makes pointers to `variable' pointers to the
10910         variable name, simplifying avl trees, etc.
10911         (struct indirect_dictionary) New struct.
10912
10913         * vars-atr.c: (find_variable) Rewritten for efficiency.
10914         (make_indirect_dictionary, is_dict_varname, parse_dict_variable)
10915         New functions.
10916         (is_varname) Rewritten for efficiency.
10917         (parse_variables) New argument, which is a `dictionary *'.  All
10918         references changed.  This function now reads variable names from
10919         the dictionary passed, or from the default dictionary if NULL.
10920
10921 Tue Nov  5 18:34:59 1996  Ben Pfaff  <blp@gnu.org>
10922
10923         * misc.h: Added new macro DIV_RND_UP to perform integer division,
10924         rounding up.  Changed many references to ROUND_UP to use this
10925         instead.
10926
10927         * sfm-read.c: Includes avl.h.
10928         (corrupt_msg) Induces a segfault under Checker.
10929         (macro assertive_bufread) New.  Many references to bufread() now
10930         use this instead.
10931         (sfm_read_dictionary) Split up into several functions.  Added code
10932         to read dictionary records following the the type 2 records.  Not
10933         quite complete.  New variable `var_by_index'.
10934         (read_header, read_variables) New functions extracted from
10935         sfm_read_dictionary().
10936         (read_value_labels) New function.
10937         (bufread) Checks ferror() if fread() doesn't return the expected
10938         value; if ferror() is zero it's just EOF.
10939         (dump_dictionary) Stubbed out.
10940
10941         * BTW: The source code now exceeds 50000 lines!
10942         
10943 Mon Nov  4 22:03:28 1996  Ben Pfaff  <blp@gnu.org>
10944
10945         * command.c: Added GET to cmd_table[].
10946
10947         * list.q: Removed reference to alloca headers.
10948         (cmd_list) Gave prototype.
10949
10950         * sfm-read.c: Added DEBUGGING comments.
10951         (sfm_read_dictionary) Checks bias correctly.  Sets
10952         dict->var_by_name to NULL.  Calculates long_string_count
10953         correctly.  realloc's dict->var[] array to minimum size.
10954         [DEBUGGING] Calls dump_dictionary.
10955         [DEBUGGING] (dump_dictionary) New function.
10956
10957         * temporary.c: (save_dictionary) Sets var_by_name to NULL.
10958         (restore_dictionary) If the dictionary contains a non-NULL
10959         var_by_name, uses that instead of generating one.
10960         (free_dictionary) Destroys var_by_name.
10961
10962         * var.h: (struct dictionary) Added field `var_by_name'.
10963
10964         * get.c: New file, not complete.
10965
10966 Sun Nov  3 12:24:36 1996  Ben Pfaff  <blp@gnu.org>
10967
10968         * mis-val.c: New enums MV_NOR_*.  New struct num_or_range.
10969         (parse_num_or_range) New function.
10970         (parse_numeric) Reimplemented in order to support LOW THRU <n> and
10971         <n> THRU HIGH missing values.
10972
10973         * output.h: [__GNUC__>1 && __OPTIMIZE__] (width, height) Made
10974         __attribute__((const)).
10975
10976         * q2c.c: (get_token) Merged isdigit || isalpha into isalnum.
10977
10978         * sfm-read.c: Finished reference implementation.
10979
10980         * sfm.h: Includes var.h.
10981
10982         * var.h: Comment fixes.
10983         (struct `variable') Reordered some fields.
10984
10985         * vars-atr.c: (is_num_user_missing) Added support for MISSING_*
10986         constants added previously.
10987
10988 Wed Oct 30 17:13:08 1996  Ben Pfaff  <blp@gnu.org>
10989
10990         * common.h: Comment fixes.  Added declaration of
10991         `second_lowest_value' as variable or macro.  Made `compat_type',
10992         `pgm_state_type' into anonymous enums.
10993
10994         * display.c: Comment fix.
10995
10996         * glob.c: [ENDIAN==UNKNOWN] Added definition for `endian' global
10997         var.
10998         [!defined SECOND_LOWEST_VALUE] Added definition for
10999         `second_lowest_value' global var.
11000         (compat, pgm_state global vars) Changed types to `int'.
11001         (init_glob) Initializes `second_lowest_value'.
11002
11003         * sfm-read.c: Continued work, not complete.
11004
11005         * var.h: Added new MISSING_* constants to handle LOWEST and
11006         HIGHEST.
11007
11008 Sat Oct 26 23:06:06 1996  Ben Pfaff  <blp@gnu.org>
11009
11010         * sfm-read.c: New file, not complete.
11011
11012         * cases.c: (vec_insert) Changed vector expansion algorithm.
11013         (vec_delete) Fixed bug that screwed up deletion sometimes, it was
11014         mucking up the RECODE transformation in particular.
11015         (envector) Harmless change in notation.
11016
11017         dfm is now fairly well tested again.  
11018         * dfm.c: (dfm_get_record) Only returns ext->ptr if ext is
11019         non-NULL--duh.
11020         (cmd_begin_data) if(ext->line) replaced by if(ext && ext->line).
11021
11022         * recode.c: Comment fix.
11023
11024         * sfm.h: Interface should be fairly final now, or at least for a
11025         day or so...
11026
11027         * vfm.c: [DEBUGGING] (index_to_varname) New function.
11028         (open_active_file) [DEBUGGING] Translates ccase indices into
11029         variable names now to make it easier to understand what's really
11030         going on.
11031
11032 Sat Oct 26 20:46:31 1996  Ben Pfaff  <blp@gnu.org>
11033
11034         * data-in.c: Comment fix.
11035
11036         * data-list.c: Includes dfm.h.
11037         (do_reading) Uses new function dfm_push_cust().
11038
11039         * data-out.c: (convert_time, convert_WKDAY, convert_MONTH) Added
11040         `return 1;' at end.
11041
11042         * file-handle.h: Completely changed.  Some parts split off into
11043         new file dfm.h.  Implemented in file-handle.q.
11044         (enum FH_*) Removed.
11045         (struct fh_ext_class) New struct.
11046         (struct file_handle) Retained only these fields: name, norm_fn,
11047         fn, recform, lrecl, mode.  New fields class, ext.
11048         (get_handle_by_name, get_handle_by_filename, parse_file_handle,
11049         close_handle, handle_name) Added `fh_' prefix to name, all
11050         references changed.
11051
11052         * dfm.h: New file, implemented in dfm.c.
11053         (get_record, put_record, fwd_record, bkwd_record, set_record,
11054         get_cur_col) Functions moved from file-handle.h, now prefixed with
11055         `dfm_'.
11056         (dfm_push_cust) New function.
11057
11058         * sfm.h: New file.  Incomplete.
11059
11060         * dfm.c: All functions adjusted/rewritten for new dfm/fhp
11061         interface.  Functions reordered, comments changed.  Not well
11062         tested, probably full of bugs.
11063         (struct dfm_fhuser_ext) New struct.
11064         (dfm_close) New function.
11065         (open_file_r) Pickier about finding `BEGIN DATA.' line.
11066         (open_file_w) User messages changed.
11067         (get_record) Comment fixed.
11068         (read_record) Increments ext->ln even for inline_file.  Calls
11069         dfm_close() for inline_file when `END DATA.' encountered.
11070         (dfm_get_record) Experimental restructuring.
11071         (dfm_push_cust) New function.
11072         (cmd_begin_data) Detects whether the inline file was fully read by
11073         checking whether it is still open; detects whether it was read at
11074         all by checking whether the line number is greater than zero.
11075
11076         * file-handle.q: All functions adjust/rewritten for new dfm/fhp
11077         interface.  Functions reordered, comments changed.  Not well
11078         tested, probably full of bugs.
11079         (init_file_handle) Removed initializers for obsolete fields, added
11080         new fields.
11081         (fh_close_handle) Much simpler, now mainly calls the class
11082         function.
11083         (fh_init_files) Renamed inline file internal filename.
11084
11085         * file-type.c: Includes dfm.h.
11086         (read_from_file_type) Doesn't use dfm internal state anymore.
11087
11088         * inpt-pgm.c, print.c: Include dfm.h.
11089
11090         * recode.c: (internal_cmd_recode) Casts strlen() return value to
11091         int in comparison with other int.
11092
11093         * som-high.c: (build_target) Fixed operator precedence problem in
11094         if statement (& versus ==).
11095
11096 Sat Oct 26 10:39:25 1996  Ben Pfaff  <blp@gnu.org>
11097
11098         * dfm.c: (read_record) Can now read fixed-length records; not
11099         tested.
11100         (put_record) Can now write fixed-length records; not tested.
11101
11102         * file-handle.h: FH_* defines changed to enums.  New enum series
11103         FH_RF_*, FH_MD_*.
11104         (struct file_handle) New members recform, lrecl, mode.
11105
11106         * file-handle.q: Parser changed.
11107         (internal_cmd_file_handle) Added support for new /RECFORM, /MODE,
11108         /LRECL subcommands.  These are compatible with Windows.
11109         (init_file_handle) Initializes recform, mode fields.
11110
11111         * q2c.c: (get_line) When outputting `!' comment lines, now
11112         increments the output file line number so that `#line' directives
11113         are correct.
11114         (make_identifier) New function that converts an arbitrary string
11115         into a valid C identifier.
11116         (dump_vars) Calls make_identifier() in two places in order to
11117         suppress some errors for bad identifiers.
11118         (make_match) Allows TRUE as synonym for YES and FALSE as synonym
11119         for NO.  Allows numbers to be prefixed by underscores to make them
11120         acceptable C identifiers but still to be parsed as numbers by the
11121         Fiasco lexer.
11122
11123 Thu Oct 24 20:13:42 1996  Ben Pfaff  <blp@gnu.org>
11124
11125         * command.c: Re-enabled RECODE, SAMPLE, SELECT IF.
11126         
11127         * dfm.c: Comment fixes. (get_record) Gives error if file handle
11128         was opened for writing.
11129         (open_file_w) New function.
11130         (read_record) Uses strncasecmp if available.  Improved error
11131         messages, comments.
11132         (put_record) New function.
11133
11134         * file-handle.h: Moved function comments into dfm.c and
11135         file-handle.q.  Comment fixes.  Removed declarations of
11136         tilde_expand() and normalize_filename().
11137         (struct file_handle) Changed `open' from boolean to enumerated
11138         field to allow for three states--closed, open for reading, open
11139         for writing--all references changed.
11140
11141         * file-handle.q: Includes filename.h.
11142
11143         * print.c: (CMD_* enums) Renamed PRT_* and moved into var.h; all
11144         references changed.
11145         (alloc_line) Makes allowance for line terminator characters in
11146         calculations.
11147         (print_trns_proc) Now handles OUTFILE, WRITE differences.
11148         (print_space_trns_proc) Handles OUTFILE differences.
11149
11150         * recode.c, sample.c: Comment fixes.
11151
11152         * var.h: (struct print_trns) Changed boolean field `eject' to
11153         bitmapped field `options'; all references changed.  New enums
11154         PRT_* for use with this field.
11155
11156         * exception.h, test-exception.c: Removed.
11157
11158 Thu Oct 24 17:47:14 1996  Ben Pfaff  <blp@gnu.org>
11159
11160         * ascii.c: (delineate) Turned off debug output.
11161
11162         * common.c: [Checker and Linux] (__assert_fail, __eprintf) Moved
11163         to error.c.
11164
11165         * data-in.c: (parse_string_as_format) Sets the entire string value
11166         to spaces, not just the short string part of it.  Is this correct
11167         now? 
11168
11169         * data-out.c: (convert_date) Fixed DATETIME format problems with
11170         decimal places, removed debug code.
11171
11172         * dfm.c: (open_file_r) Fixed bug where an error would occur in the
11173         middle of parsing BEGIN DATA that would cause the lexer to read
11174         from a wild pointer `prog'; now calls new function
11175         preprocess_line() in lexer.c.
11176
11177         * error.c: [__CHECKER__] (hcf) Calls induce_segfault() on improper
11178         termination.
11179         [Checker and Linux] (__assert_fail, _eprintf) Moved from common.c.
11180         Now call induce_segfault() to induce the segfault.
11181         (induce_segfault) New function.
11182
11183         * expr-opt.c: Comment fix.
11184         (parse_sysvar) New function.
11185         (parse_primary) Added system variable support--calls
11186         parse_sysvar().
11187         (global var ops) Added OP_CASENUM operator.
11188
11189         * expr.h: Comment fixes.
11190         (OP_* enum) added OP_CASENUM operator.
11191         (struct casenum_node) New struct.
11192         (union any_union_union) New member `cas' of type `casenum_node'.
11193
11194         * glob.c: (global var last_vfm_invocation) New var.
11195         (init_glob) Initializes last_vfm_invocation.
11196
11197         * lexer.c: (lookahead) Fixed reversed condition on if statement.
11198
11199         * getline.c: (get_line) Split into get_line() and preprocess_line().
11200         (preprocess_line) New function.
11201
11202         * var.h: Declares last_vfm_invocation.
11203
11204         * vfm.c: (procedure) Sets last_vfm_invocation.
11205
11206 Wed Oct 23 21:53:43 1996  Ben Pfaff  <blp@gnu.org>
11207
11208         * command.c: (parse_cmd) Fixed bad assertion related to
11209         lookahead().
11210
11211         * data-in.c: (parse_month) Implemented to parse months according
11212         to full interpretation of standard.
11213         (to_roman) New function.
11214         (parse_wk_delimiter) Bug fix (forgot to skip `WK' in string).
11215         (parse_weekday) Bug fix (forgot to skip all the day name).
11216
11217         * data-list.c: (read_from_data_list_fixed) Fixed bug that screwed
11218         up parsing of multirecord data items.  Also fixed user message.
11219
11220         * data-out.c: Comment fix.
11221         (year2, year4, convert_date, convert_time, convert_WKDAY,
11222         convert_MONTH) New functions to support time & date output.
11223         (convert_format_to_string) Calls new time & date output routines.
11224
11225         * expr-prs.c: (nary_num_func) Found a bug, but didn't fix it yet.
11226
11227         * lexer.c: (lookahead) Noted a previously unnoticed caveat in
11228         comment.
11229
11230         * main.c: [DEBUGGING] (dump_token) Updated to handle getline.h.
11231
11232         * misc.c: (global var formats) Fixed declarations of DATETIME,
11233         TIME, DTIME.
11234
11235         * postscript.c: (text) Fixed a pair of bugs in the reallocation of
11236         the output_char buffer.
11237
11238         * vars-prs.c: (parse_DATA_LIST_vars) Fixed a failure to free
11239         memory bug.  Fixed user messages.
11240
11241 Tue Oct 22 17:27:04 1996  Ben Pfaff  <blp@gnu.org>
11242
11243         * Removed #pragma argsused from lots of places.
11244         
11245         * data-in.c: Implemented zoned decimal and time-date formats.
11246         Untested.  This is a huge chunk of code--maybe 1000 lines and 50
11247         new functions.
11248
11249         * data-out.c: Implemented zoned decimal format.
11250
11251         * expr.h: Moved yrmoda() declaration here from exprP.h.
11252
11253         * misc.c: (global var formats) Minor fixes--added
11254         FCAT_SHIFT_DECIMAL to formats N and Z.
11255         (convert_fmt_ItoO) Added support for format Z.
11256
11257         * som-frnt.c: (som_set_value) Fixed bug regarding string values.
11258
11259 Mon Oct 21 20:39:59 1996  Ben Pfaff  <blp@gnu.org>
11260
11261         * command.c: (parse_cmd) [GLOBAL_DEBUGGING] Inserted call to
11262         som_check_workspace() that is activated between commands.
11263
11264         * data-list.c: (dump_fixed_table, dump_free_table) Finished these
11265         for good, I hope.
11266
11267         * list.q: (begin_row) Changed title expansion style from
11268         SOPT_X_VERT to SOPT_X_SHSP.
11269
11270         * som-frnt.c: Now includes `somP.h'.
11271         (som_push_workspace, som_pop_workspace) New functions that, taken
11272         together, form a solution to the recursive table building problem
11273         mentioned yesterday.  Surrounded every table output routine
11274         throughout the program with calls to these functions.
11275         [GLOBAL_DEBUGGING] (som_check_workspace) New function.
11276         (som_create_table) Checks that there's an active workspace.
11277         (som_destroy_all_tables, som_crush) Removed.
11278
11279         * som-high.c: (global var som_preserve_tables) Removed, all
11280         references deleted.
11281         (som_submit_table) Checks that there's an active workspace.
11282         (dump_columnated_table) Doesn't columnate tables that would have
11283         just one row per column.
11284         (dump_crush_page, som_dump_crush_page) Removed debugging code.
11285         (som_dump_crush_page) Moved row number labels from left side of
11286         tables to right side.
11287         (som_get_table_size) Added support for SOPT_X_SHSP.
11288
11289         * som.h: New cell expansion type SOPT_X_SHSP.
11290
11291         * somP.h: (global vars arena_stack, n_arena_stack, m_arena_stack)
11292         New vars.
11293         (global var curtab_arena) Moved from som-frnt.c.
11294
11295 Sun Oct 20 13:45:28 1996  Ben Pfaff  <blp@gnu.org>
11296
11297         * ascii.c: [GLOBAL_DEBUGGING] (SUPPRESS_WARNINGS) New debug option
11298         that causes bad location warnings to be suppressed.
11299         (delineate) Saves current font when calling draw_text(); fixed
11300         handling of NULLs when backing up.  Also fixed line-wrapping bug.
11301
11302         * command.c: Re-enabled `LEAVE', `NUMERIC', `PRINT', `PRINT EJECT',
11303         `PRINT FORMATS', `PRINT SPACE', `STRING', `TITLE', `WRITE'.
11304
11305         * common.c: Added code to cause assertion failure to dump core
11306         when run under Checker.
11307
11308         * data-list.c: (dump_fixed_table) Fixed some inconsistencies, but
11309         there are still bugs.
11310
11311         * glob.c: (__eprintf) Removed.
11312
11313         * list.q: Inserted som_preserve_tables kluge that prevents tables
11314         from being thrown away due to recursive table building through
11315         som_output_line being called from a transformation during the LIST
11316         procedure invocation.  This is a general problem that must be
11317         solved in a better way since it applies to all procedures in
11318         general.
11319         (begin_row) Changed title options to SOM_X_VERT from SOM_X_BOTH.
11320         (flush_table) Removed SOM_TOPT_PRESERVE from submission options.
11321
11322         * numeric.c: Fixed several errors in the form of msg() calls.
11323
11324         * print.c: Updated for use of som.
11325         (dump_table) Reimplemented.
11326         (print_trns_proc) Calls som_eject_page() instead of eject_page().
11327         Calls som_output_text() instead of outs_line().
11328
11329         * som-frnt.c: (som_destroy_all_tables) Sets som_preserve_tables to
11330         0.
11331         (som_output_text) Function moved from som-low.c.  Interface
11332         changed.
11333
11334         * som-high.c: (som_preserve_tables) New global public variable
11335         declared in som.h.
11336         (som_submit_table) Destroys the tables only if som_preserve_tables
11337         is 0.
11338         (paginate_horizontally) Bugfix: sets som.mpw even if there's only
11339         one subrow per row.  Now labels subrows if there's more than one
11340         subrow per row.
11341         (dump_crush_table) Added wishlist comment.
11342         (som_eject_page) New public function declared in som.h.
11343
11344         * som-low.c: (som_dump_crush_page) Draws row labels if there's
11345         more than one subrow per row.
11346         (som_output_text) Moved to som-frnt.c.
11347
11348         * som.h: (SOM_TOPT_PRESERVE) Removed.
11349
11350         * title.c: (get_title) Changed interface.
11351         (cmd_title) Changed `title' to `outp_title'.
11352         (cmd_subtitle) Changed `subtitle' to `outp_subtitle'.
11353
11354 Sun Oct 20 09:04:15 1996  Ben Pfaff  <blp@gnu.org>
11355
11356         * list.q: (flush_table) Conforms to new partial options in
11357         som_submission_form.
11358
11359         * som-high.c: (paginate_horizontally) Changed form of subrow
11360         number labels.
11361         (build_target) Omits spacing before table if
11362         SOM_TOPT_PARTIAL_OMIT_TOP is selected.
11363         (dump_crush_page) Changed interface.  Only trims bottom rule if
11364         SOM_TOPT_PARTIAL_OMIT_BTM is not selected.
11365         (dump_crush_table) Handles partial tables.
11366         (output_row_label) New function.
11367         (som_dump_crush_page) Emits subrow number labels.  Draws vertical
11368         rule on the right edge of narrow subrows.
11369
11370         * som.h: Changed SOM_SUB_PARTIAL_* series of submission type
11371         constants to a series of SOM_TOPT_PARTIAL_* submission options.
11372         All references updated.
11373
11374 Fri Oct 18 19:46:49 1996  Ben Pfaff  <blp@gnu.org>
11375
11376         * misc.c: Comment fix.
11377
11378         * som-high.c: (examine_table) Treats crushed tables separates for
11379         purpose of determining header size.
11380         (paginate_horizontally) Allots space for line numbers in crushed
11381         tables with lots of subrows per row.  Calculates the `maximum page
11382         width', the width of the widest horizontal page.
11383         (build_target) Removed trim argument; all references changed.
11384         Stricter assertions.  (dump_crush_page) New function.
11385         (dump_crush_table) Reimplemented.
11386
11387         * som-low.c: (som_dump_page) Uses new RULE_ROW &c. constants.
11388         (som_dump_crush_page) Reimplemented, interface changed.
11389
11390         * somP.h: Many many new helper macros for use with crushed tables.
11391         (global var som) Removed `tv', `cum_y' members; all references
11392         removed.  New members `mpw', `digit_space'.
11393
11394 Sun Sep 29 19:37:03 1996  Ben Pfaff  <blp@gnu.org>
11395
11396         * arena.c: (arena_alloc) [!DISCRETE_BLOCKS] Removed `size'
11397         variable, changed to constant 1024.
11398         (arena_ca_strdup) Changed `sizeof(a_string)' to
11399         `sizeof(c_string)'.
11400         (arena_ca_strdup) [!DISCRETE_BLOCKS] Changed bad cast from
11401         `(c_string *)' to `(char *)'; this fixed some offset problems.
11402
11403         * filename.c: (readlink_malloc) Changed initial allocation from
11404         100 bytes to 128.
11405         (good_getcwd) Changed from xmalloc() to local_alloc(); removed
11406         comment.
11407
11408         * postscript.c: (read_fontmap) Fixed leak by changing &owner to
11409         &fm->owner in several places.
11410
11411         * som-high.c: (output_table) Changed interface to rest of world.
11412         (examine_crush_table) Removed.  Crushed tables are re-broken now,
11413         in preparation for rewrite.
11414
11415         * som.h: Comment fix.
11416
11417 Sat Sep 28 21:28:07 1996  Ben Pfaff  <blp@gnu.org>
11418
11419         * ascii.c: (ascii_init_driver) Disposes of x->file.filename and x
11420         itself in the cleanup stage.
11421
11422         * descript.q: (display) At least temporarily, changed the table
11423         format to a crushed table.
11424
11425         * list.q: (begin_row) At least temporarily, added horizontal lines
11426         between cases.
11427
11428         * som-high.c: (examine_crush_table) Sets som.hh to the width of
11429         the horizontal "headers," that is, to the width of the far left
11430         and far right rules.
11431         (justify_pagination) Sets som.th to the width of the widest row
11432         in the crushed table.  Fixed inner loop off-by-one error.
11433
11434         * som-low.c: (som_dump_crush_page) Added code to draw horizontal
11435         rules.
11436
11437         * somP.h: Comment fix.
11438
11439 Fri Sep 27 20:08:39 1996  Ben Pfaff  <blp@gnu.org>
11440
11441         * filename.c: (open_file_ext) Now, doesn't set f->file to NULL
11442         before closing it; also, opens the constructed filename `s'
11443         instead of f->filename.
11444
11445         * postscript.c: Moved initialization of x->loaded, x->prop,
11446         x->fixed, x->current, also the add_encoding() calls, into
11447         postopen().
11448         (preclose) Destroys x->combos; sets x->loaded, x->combos to NULL;
11449         sets x->last_font to NULL; sets x->next_combo to zero.
11450
11451         * som-high.c: (crushed_row_height) Moved definition farther up.
11452         (som_submit_table) Doesn't calculate line width, font size until
11453         after calling open_page(), to accomodate changes to PostScript
11454         driver.
11455         (vert_headers) Removed; equivalent functionality moved to
11456         examine_table(), examine_crush_table().
11457         (justify_pagination) Replaced with different algorithm.
11458         (dump_crush_table) Bugfix that caused tables to fail to be clipped
11459         at the bottom of the page.
11460
11461 Thu Sep 26 22:20:26 1996  Ben Pfaff  <blp@gnu.org>
11462
11463         * command.c: Added cmd_list back into cmd_table.
11464
11465         * freq.c, frequencies.q, repeat.c, list.q, vars-atr.c, vfm.c:
11466         Comment fix: `#define DEBUGGING' --> `#define DEBUGGING 1'.
11467
11468         * list.q: (flush_table) Updated to new som_submission_form format.
11469
11470         * som-frnt.c: Comment fix.
11471
11472         * som-high.c: Changed `#endif' to `#undef EXTERN'.
11473         (output_table) Calls som_get_table_size() directly; handles
11474         crushed tables.
11475         (examine_crush_table) New function; calls vert_headers().
11476         (examine_table) Moved some code into new function, vert_headers().
11477         (justify_pagination) New function.
11478         (dump_plain_table) Removed `static' from `cy'.
11479         (dump_crush_table) New function.
11480
11481         * som-low.c: (som_dump_crush_page) New function.
11482
11483         * som.h: Comment fixes.
11484         (enum SOM_TOPT_CRUSH) New.
11485         (SOM_SUB_PARTIAL_BEG, SOM_SUB_PARTIAL_MID, SOM_SUB_PARTIAL_END)
11486         Temporarily set to zero to make do with LIST procedure.
11487
11488         * somP.h: Re-ordering.
11489
11490 Wed Sep 25 19:36:11 1996  Ben Pfaff  <blp@gnu.org>
11491
11492         * som.c: Split into som-frnt.c, som-high.c, som-low.c.
11493
11494         * somP.h: New file for use by som-high.c, som-low.c.
11495
11496         * q2c.c: Added definition for VME.
11497         (get_line) Now dumps `!' comment lines to the output file
11498         verbatim.
11499
11500         * crosstabs.q, descript.q, file-handle.q, frequencies.q, list.q,
11501         set.q: Changed format of `!' comment lines.
11502
11503 Tue Sep 24 18:39:09 1996  Ben Pfaff  <blp@gnu.org>
11504
11505         * All source files: Added copyright notice.
11506
11507         * common.c: (xmalloc, xrealloc, xstrdup) Cast size_t's to unsigned
11508         longs in msg() calls.
11509
11510         * con32s.c: (xmalloc, xrealloc) Updated from common.c.
11511
11512         * q2c.c: (xmalloc, xrealloc, xstrdup) Updated from common.c.
11513
11514 Sat Sep 21 23:16:31 1996  Ben Pfaff  <blp@gnu.org>
11515
11516         * output.c: (outp_read_devices) Changed criteria for
11517         distinguishing different types of lines.
11518
11519 Fri Sep 20 22:52:28 1996  Ben Pfaff  <blp@gnu.org>
11520
11521         * cmdline.c: Changed syntax message.
11522
11523         * filename.c: (good_getcwd) Bug fix (?).
11524         (normalize_filename) [__BORLANDC__] Uses _fullpath() library
11525         function.
11526         (search_path) Appends DIR_SEPARATOR to directory name only if it
11527         does not already end with one.
11528
11529         * glob.c: Checks STAT_PAGER envvar before PAGER.
11530
11531         * output.c: Checks environment variables instead of just local
11532         macros.
11533
11534 Tue Sep 10 21:39:00 1996  Ben Pfaff  <blp@gnu.org>
11535
11536         * arena.c: (arena_destroy) Swatted a subtle bug that cropped up
11537         when the pointer passed to the function was within the arena
11538         itself, so that it couldn't properly be set to NULL _after the
11539         arena was freed_.
11540
11541         * command.c: Re-enabled DISPLAY.
11542
11543         * display.c: Rewritten to handle tables.  Untested.
11544
11545         * filename.c: (search_path) Fixed memory leak.
11546
11547         * frequencies.q: (cmd_frequencies) Frees v_variables.
11548         (postcalc) Calls cleanup_freq_tab() after displaying statistics.
11549         (cleanup_freq_tab) New function to garbage collect.
11550         (dump_full) Elegantized.
11551
11552         * main.c: New comment.
11553
11554         * output.h: New tag for tagged quotes: TAG_NEWLINE.
11555
11556         * postscript.c: Comment fix.
11557         (release_fontmap, free_font_entry) New functions.
11558         (ps_init_driver) Sets free_font_entry() as the freefunc for
11559         hashtable `loaded'.  Calls release_fontmap() when destroying a
11560         driver; also frees the output filename; also frees the
11561         ps_driver_ext block.
11562         (free_ps_encoding) Frees the filename as well as the encoding
11563         block.
11564         (output_encodings) Frees the line buffer and pops the msg-filename
11565         stack.
11566         (read_fontmap) Frees the fontmap filename and the line buffer.
11567         (postopen, preclose) Misc. garbage collection fixes.
11568         (ps_open_page) Destroys the `combos' hash table; sets `last_font'
11569         to NULL; this fixes some output problems.
11570         (text) Handles TAG_NEWLINE.  Untested.
11571
11572         * som.c: (cell_byte_size) Merged SCON_VALUE and SCON_TEXT cases.
11573         (som_set_string) Removed.  All references changed to
11574         `som_set_text'.
11575         (som_set_text) Rewritten.  New interface.  More general.
11576
11577         * som.h: Minor format changes.
11578         (struct som_value_cell) Removed; all references changed to
11579         `som_text_cell'.
11580         (enums SOT_*) Changed.
11581
11582 Mon Sep  9 21:43:13 1996  Ben Pfaff  <blp@gnu.org>
11583
11584         * command.c: Re-enabled SPLIT FILE.
11585
11586         * postscript.c: Comment fix.
11587
11588         * som.h: Added `SOT_NONE'.
11589
11590         * split-file.h: (cmd_split_file) Removed superfluous parenthesis.
11591
11592         * vfm.c: (dump_splits) Reimplemented.
11593
11594 Sat Sep  7 22:35:12 1996  Ben Pfaff  <blp@gnu.org>
11595
11596         * Compiled the project under gcc 2.7.2, which gave some new
11597         warnings.  This led to many additions of casts from unsigned to
11598         int sprinkled throughout the code.
11599         
11600         * arena.c: Many uses of `unsigned' changed to `size_t'.
11601
11602         * command.c: Added END FILE, END REPEAT to command table.
11603         (var cmd_end_repeat) Renamed cmd_end_repeat_p.
11604         (find_command, FILE_TYPE_okay) Not commented out anymore.
11605         (parse_cmd) Calls FILE_TYPE_okay again.
11606         (output_line) Added calls to som_output_text() to put the line
11607         in the output files.
11608
11609         * common.c: (macro VME) Format changes.
11610         (xstrdup) Asserts that its argument is not NULL.
11611         
11612         * data-list.c: Implemented dump_fixed_table().
11613         
11614         * inpt-pgm.c: Formatting changes.  Comment changes.
11615         (end_case_proc) Renamed end_case_trns_proc.
11616         (cmd_end_file, end_file_trns_proc) New functions.
11617
11618         * misc.c: Many uses of `int' and `unsigned' changed to `size_t'.
11619
11620         * misc.h: (local_strdup) New macro corresponding to strdup() but
11621         allocating its data through local_alloc() if possible--that is, if
11622         GNU C is in use.
11623
11624         * postscript.c: Comment changes.
11625         (quote_ps_name, quote_ps_string, output_encodings) New functions.
11626         (output_line, add_string) New macros supporting
11627         output_encodings().
11628         (postopen) Fixed contents of ${fixed-font} and ${prop-font}
11629         substitution vars.  Calls output_encodings() when a line
11630         consisting of `!encodings' is encountered.
11631         (preclose) Some code moved into quote_ps_string().
11632         (dump_line) Changed into macro supporting dump_fancy_line().
11633         (switch_font) Now outputs DSC "%%IncludeResource: font (...)"
11634         command when appropriate.
11635         (write_text) Fixed `literal_char' array (I think it's fixed, at
11636         least.)
11637         (text) Fixed bug when width was zero.  Now exits immediately on
11638         zero height_left.  Now, when executing `goto restart;', checks
11639         that cp<end, so that we don't read beyond end-of-string.  Also,
11640         outputs the correct code to the output file by outputting the code
11641         from the metric instead of the internal metric index.
11642
11643         * repeat.c: (cmd_end_repeat) New function.
11644
11645         * som.c: (var som) `headers' renamed `options' and semantics
11646         changed.  All references changed.
11647         (draw_title) `if(px!=-1 || px!=-1)' --> `if(px!=-1 || py!=-1)'.
11648         (build_target) Only inserts spacing if SOM_TOPT_SPACING not
11649         selected.
11650         (som_text_table) Removed.
11651         (som_output_text) New function.
11652
11653         * som.h: (struct som_submission_form) Removed `header', `reuse',
11654         replaced with bitmapped field `options'.
11655         (SOM_TOPT_*) New enum set for som_submission_form.options.
11656         (SOT_*) New enum set for som_output_text().
11657
11658         * temporary.c: (copy_variable) When copying the var label, only
11659         calls xstrdup() if it's non-NULL.
11660
11661         * var.h: (enum type `vartype') Removed; all references changed to
11662         `int'.
11663
11664         * vars-atr.c: (init_variable) Changed local var `nbytes' from
11665         `int' to `size_t'.
11666
11667 Thu Sep  5 22:05:56 1996  Ben Pfaff  <blp@gnu.org>
11668
11669         * font.h: Comment changes.
11670
11671         * groff-font.c: (groff_read_font) Initializes `name' field to
11672         NULL.  Handles `encoding' field.
11673
11674         * hash.c: (hsh_dump) [GLOBAL_DEBUGGING] Output formatting changes.
11675
11676         * postscript.c: (struct font_entry) Removed `position' field.
11677         (struct ps_font_combo) New struct.
11678         (struct ps_driver_ext) Removed field `next_position'.  New fields
11679         `combos', `next_combo'.  `last_font' field changed from
11680         `font_entry *' to `ps_font_combo *'.
11681         (ps_init_driver) Reformatted; handles new fields.  When
11682         OPO_AUTO_ENCODE is set, adds the two default fonts' encodings to
11683         the encoding list.
11684         (get_encoding, find_encoding_file) New functions.
11685         (add_encoding) Some code moved out into find_encoding_file().
11686         (postopen) Changed value for ${title}.
11687         (preclose) Sets `loaded' field to NULL after destroying the hash
11688         table.
11689         (ps_open_page) Added comment.  Inits the `combos' and `next_combo'
11690         fields.
11691         (ps_text_set_font_by_position) Figures out the current family if
11692         not known.
11693         (compare_ps_combo, hash_ps_combo, free_ps_combo) New functions.
11694         (switch_font) Implemented.
11695         (write_text) Calls switch_font() more often.  Format changes.
11696         #undefs its macros after they're no longer useful.
11697         (text) Changed `continue' at one point to a jump to the top of the
11698         loop because we don't want `separate' reset to 0 at that point.
11699         (load_font) No longer sets `position' in the font_entry created.
11700
11701 Wed Sep  4 21:45:35 1996  Ben Pfaff  <blp@gnu.org>
11702
11703         * font.h: (struct font_desc) New member `encoding', which is not
11704         properly handled yet.
11705
11706         * glob.c: (init_glob) Some new i18n code, which is probably
11707         screwed up.
11708
11709         * output.c: (outp_read_devices, outp_get_paper_size) Changed
11710         `size' local from `int' to `size_t'.
11711
11712         * postscript.c: New driver configuration parameter `auto-encode'.
11713         New enums OPO_AUTO_ENCODE, ODA_COUNT.
11714         (struct font_entry) New member `position'.
11715         (struct ps_driver_ext) Reordered.  New hash table member
11716         `encodings'; new members `next_position', `next_encoding',
11717         `last_font'.  Members `current', `prop', `fixed' changed from type
11718         `font_desc *' to `font_entry *'; all references changed.
11719         (struct ps_encoding) New struct.
11720         (read_ps_encodings, compare_ps_encoding, hash_ps_encoding,
11721         free_ps_encoding, add_encoding) New functions.
11722         (ps_init_driver) Added OPO_AUTO_ENCODE to default
11723         x->output_options.  Initializes new members of ps_driver_ext.
11724         Changed default value for prologue_fn, encoding_fn.  Calls
11725         read_ps_encodings after loading default fonts.
11726         (option_tab[], ps_option) Handle new configuration parameter.
11727         (switch_font) New function.
11728         (struct output_char) `font' member changed from `font_desc *' to
11729         `font_entry *'.  New member `separate'.
11730         (read_fontmap) Changed `size' from `int' to `size_t'.
11731         (output_line, put_number) New macros for write_text().
11732         (write_text) Optimizes text output by consolidating multiple
11733         calls to PostScript `show' operator.
11734         (text) Keeps track of when text arguments can't be consolidated by
11735         write_text(), and marks those spots in the output stream.
11736         (load_font) Sets `position' of the allocated font_entry to -1, cuz
11737         the font hasn't been switched to by switch_font(), which is where
11738         the position is important--the PostScript is what cares about the
11739         position.
11740
11741 Sat Aug 31 23:52:38 1996  Ben Pfaff  <blp@gnu.org>
11742
11743         * hash.c: (hsh_destroy) Ignores NULL argument.  Doesn't try to
11744         call a NULL free_func.
11745         (hsh_rehash) Elegantized.
11746         (hsh_probe) Fix bug that manifested when the table was expanded
11747         and thus had to change location in memory.  Good thing
11748         too--otherwise could have been much more subtle.
11749         (hsh_find) [GLOBAL_DEBUGGING] Not stubbed out anymore.
11750         (hsh_foreach) New function for hash table iteration.
11751
11752         * hash.h: (struct hsh_iterator) New.
11753
11754         * lexer.c: (parse_tagged_quote) Font and family name strings in
11755         tags are now null-terminated.
11756
11757         * output.c: (outp_evaluate_dimension) Fixed over-aggressive unit
11758         parsing.
11759         (internal_get_paper_size, outp_get_paper_size) Fixed; now work as
11760         documented.  (Never before tested?)
11761
11762         * output.h: Comment changes.
11763
11764         * postscript.c: New driver options `optimize-text-size',
11765         `optimize-line-size', `max-fonts-simult'.  New enum set for
11766         specing cached line types.  Comment fixes.
11767         (struct line_form) New struct.
11768         (struct ps_driver_struct) New members `text_opt', `line_opt',
11769         `max_fonts', `lines'.
11770         (ps_init_driver) Initializes new members of ps_driver_struct.
11771         (user option type enum set) New member `nonneg_int_arg'.
11772         (static var option_tab[]) Supports new options.
11773         (ps_option) Handles new options.
11774         (find_ps_file) Made static.  No longer calls hsh_dump().
11775         (ps_get_var) Made static.
11776         (preclose) Dumps out proper DSC trailer.
11777         (ps_open_page) Elegantized.
11778         (ps_close_page) Calls dump_lines() if appropriate.
11779         (ps_line_horz, ps_line_vert, ps_line_intersection) Reduced to
11780         wrappers around line().
11781         (int_2_compare, compare_line, dump_line, dump_fancy_line,
11782         dump_lines, hash_line, free_line, line) New functions for support
11783         of line caching.
11784         (write_text, text) Made static.
11785         (text) Added to font support, not finished.
11786
11787 Thu Aug 29 21:36:41 1996  Ben Pfaff  <blp@gnu.org>
11788
11789         * font.h: (struct font_desc) New members ascent, descent.
11790
11791         * groff-font.c: (groff_read_font) Calculates font ascent and
11792         descent from the ascent and descent of the `d' and `p' characters,
11793         respectively, as per a suggestion on comp.fonts.
11794
11795         * postscript.c: (ps_open_page, ps_close_page, ps_line_horz,
11796         ps_line_vert, ps_line_intersection) Rewritten to deal with changed
11797         prologue.
11798         (write_text) Handles text right-justification and centering (not
11799         full justification).  Still very inefficient.  (One output line
11800         per character?!)
11801         (struct output_char) Added fields for font and font size.
11802         (text) Many bugfixes.
11803
11804 Sat Aug 24 23:26:00 1996  Ben Pfaff  <blp@gnu.org>
11805
11806         * cmdline.c: (usage) Calls outp_list_classes().
11807
11808         * font.h: Comment fix.
11809
11810         * groff-font.c: New exported global var `space_index'.
11811         (groff_init) New function to initialize `space_index'.
11812         (hash_kern) Casts result to unsigned.
11813         (font_name_to_index) Renamed font_char_name_to_index.  All
11814         references changed.  Also, now returns the value of `space_index'
11815         when passed an ASCII space character as an argument.  Fixed
11816         handling of nulls.
11817         (font_get_kern_adjust) Changed i from `int' to `unsigned'.
11818         Handles passed NULL pointers properly.
11819
11820         * lexer.c: (parse_tagged_quote) Comment fix.  Better range
11821         checking.
11822
11823         * output.c: (outp_list_drivers) Removed.  Removed all references.
11824         
11825         * output.h: Comment fixes.
11826
11827         * postscript.c: (ps_open_global) Calls groff_init().
11828         (output_char) New structure.
11829         (write_text) New function.
11830         (text) No longer stubbed out!  Now the output is correct--with a
11831         few exceptions, one of them being that the page has to be held
11832         upside down into a mirror.
11833
11834 Sun Aug 11 21:31:22 1996  Ben Pfaff  <blp@gnu.org>
11835
11836         * font.h: Comment fix.
11837         
11838         * font.c: (name_to_index) Renamed font_name_to_index, made extern.
11839         All callers changed.
11840         (number_to_index) Renamed font_number_to_index, made extern.  All
11841         callers changed.
11842         (font_get_kern_adjust, font_get_char_metrics) New functions.
11843
11844         * output.h: New constant OUTP_T_INTERNAL_DRAW.
11845
11846         * postscript.c: Changed default line width back to 1/2 point.
11847         (ps_line_horz, ps_line_vert, ps_line_intersection) Now lines are
11848         in the center of the space allotted for them, not just a fixed
11849         offset from the edge of the space; this fixes some bugs.
11850         (ps_line_intersection) Now supports all command line styles.
11851         (ps_text_get_size) Bug fix in computation of em width.
11852         (text) New function, the meat behind ps_text_metrics and
11853         ps_text_draw.  Not complete.
11854         (ps_text_metrics, ps_text_draw) Removed the stub taken from
11855         ascii.c; call text().
11856
11857 Sat Aug 10 23:28:17 1996  Ben Pfaff  <blp@gnu.org>
11858
11859         * arena.c: (arena_free) Assert that the argument is non-NULL.
11860         
11861         * groff-font.c: (add_kern) Calls arena_free() for old_kern if and
11862         only if old_kern is non-NULL.
11863
11864         * postscript.c: (ps_init_driver) Changed default line width to 1
11865         point.
11866         (postopen) New prologue variables.
11867         (ps_line_horz, ps_line_vert, ps_line_intersection) Implements some
11868         more of the common line styles properly, but not all.
11869         (ps_text_metrics) Fixed problem with this stubbed out version that
11870         kept it from taking font sizes into account.
11871
11872 Thu Aug  8 22:31:11 1996  Ben Pfaff  <blp@gnu.org>
11873
11874         * arena.c: (arena_malloc) Bug fix.
11875         (arena_dump) [GLOBAL_DEBUGGING] New function.
11876
11877         * ascii.c: Comment fix.
11878         (count_fancy_chars, delineate) Now static functions.
11879         
11880         * filename.c: (interp_vars) Bug fixes.
11881
11882         * font.h: Comment fixes.
11883
11884         * glob.c: (init_glob) Sets set_viewwidth, set_viewlength at
11885         beginning in case we have an error message to display before
11886         initializing the display.
11887
11888         * groff-font.c: Comment fix.  Changed rehash threshold from 2/3
11889         full to 1/2 full.
11890         (groff_read_font) Bug fixes.
11891         (name_to_index) Increments hash.used.  Sets `name' field of hash
11892         entry properly.
11893         (add_kern) Sets kern_max_used after rehashing.  Other bug fixes.
11894
11895         * hash.c: Return type changed.
11896
11897         * postscript.c: Continued development.  Now marks lines on the
11898         paper, but very buggy.
11899
11900 Sat Aug  3 20:50:35 1996  Ben Pfaff  <blp@gnu.org>
11901
11902         * Changed comments in many source files from `/* xxx /* yyy */' to
11903         `/* xxx */ /* yyy */' for cleanliness.
11904
11905         * arena.c: (arena_sd_strdup) New function.
11906         
11907         * ascii.c: (struct ascii_driver_ext) New member `file'.
11908         (ascii_init_driver) Fills out member `file' for initing; uses
11909         close_file_ext for closing drivers.
11910         (ascii_option) Changed %.*s back to %s because the a_string's are
11911         always null-terminated.
11912         (postopen, preclose) New functions.
11913         (ascii_open_page) Uses new style of open_file_ext.
11914         (ascii_option, commit_line_buf, output_lines) Use ext->file.file
11915         instead of this->output.
11916         (__assert_fail) Removed.
11917
11918         * cmdline.c: Changed syntax_message[].
11919
11920         * error.c: #include's <readline/history.h> only if the history
11921         library is available, not if just the readline library is
11922         available.
11923
11924         * filename.c: (expand_line) Removed alloca() support.
11925         (interp_vars) No longer tilde-expands argument.  Limit on output
11926         length removed.
11927         (tilde_expand) Now treats argument as path rather than filename.
11928         [!unix] Now is a no-op function.
11929         (search_path) Better verbose message formatting.
11930         (open_file, close_file) Comment fixes.
11931         (close_file) [!unix] Doesn't bother with pipes.
11932         (open_file_ext) Completely rewritten, interface revamped.
11933         (close_file_ext) New function.
11934
11935         * font.h: Comment changes.
11936
11937         * frequencies.q: Removed AIX alloca support since it doesn't use
11938         alloca.
11939
11940         * hash.c: Comment changes & additions.
11941         (hsh_create) Initializes entire table instead of first M entries.
11942         (hsh_probe) Stupid bug fixed.  Now it works.
11943         (hsh_dump) [GLOBAL_DEBUGGING] New function.
11944
11945         * main.c: (parse) Detects EOF properly in token-eating loop.
11946         Should the STOP token have its value changed to 0?
11947
11948         * misc.c: (blp_getdelim) [HAVE_GETDELIM] Now it's a macro.
11949         (blp_getline) Now it's a macro.
11950
11951         * output.h: (struct outp_driver) Removed members output, filename.
11952         
11953         * output.c: (outp_init) [!NO_POSTSCRIPT] Installs PostScript
11954         drivers in driver table.
11955         (outp_read_devices) Frees buf.  Warns if there are no active
11956         output drivers.
11957         (outp_configure_clear) Sets outp_configure_vec to NULL after
11958         deleting its elements.
11959         (configure_driver, destroy_driver) Removed references to output,
11960         filename members of outp_driver.
11961         (outp_evaluate_dimension, internal_get_paper_size,
11962         outp_get_paper_size) New functions.
11963
11964         * postscript.c: Continued development.  Now links but doesn't make
11965         any marks on the page.  Lotsa bugs I suppose.
11966
11967         * str.c: (strcasecmp) [!HAVE_STRCASECMP] New function.
11968
11969         * str.h: Comment changes.
11970
11971 Sat Jul 27 22:32:38 1996  Ben Pfaff  <blp@gnu.org>
11972
11973         * Removed dependencies on non-nested comments in several files.
11974         Also removed references to (unix || __unix__) in #if's since
11975         prefh.orig makes those two equivalent.
11976         
11977         * ascii.c: (ascii_open_global) Creates ascii_arena.
11978         (ascii_close_global) Destroys ascii_arena.
11979         (ascii_init_driver) Doesn't create ascii_arena.
11980         (ascii_copy_driver) Removed.
11981         (ascii_option) Possible bugfix regarding %s vs. %.*s with a_string's.
11982         (outp_class ascii_class) Removed ascii_copy_driver reference.
11983
11984         * frequencies.q: Now can display all statistics except median.
11985         Still not finished.
11986
11987         * output.c: Handles outp_class.ref_count so output class
11988         destructors are called properly.
11989         (add_class) Sets ref_count to 0.
11990         (configure_driver) Initializes class if ref_count++ is 0.
11991         (destroy_driver) Destructs class if --ref_count is 0.  Frees the
11992         class output file name.
11993         
11994         * output.h: (struct outp_class) Removed copy_driver, inited.
11995         Added ref_count.
11996
11997         * postscript.c: Completely replaced but not finished.
11998         
11999 Tue Jul 23 21:48:36 1996  Ben Pfaff  <blp@gnu.org>
12000
12001         * approx.h: #includes <float.h>.
12002
12003         * arena.h, arena.c: Many functions changed to take an arena **
12004         instead of an arena *, for consistency.  All callers changed.
12005         (arena_alloc) Now creates a new arena if passed *A that is NULL.
12006         (arena_destroy) Sets *A to NULL.
12007         
12008         * ascii.c: (delineate) Implements OUTP_T_VERT correctly.  Removed
12009         assertion that `width' be positive.
12010
12011         * command.c: Removed #if's from cmd_table.
12012         (walk_cmdtable_func) [0] New function (debug code).
12013         (init_cmd_parser) [0] Dumps out cmd_table (debug code).
12014         (parse_cmd) Doesn't return failure for unimplemented commands.
12015
12016         * common.h: (SYSMIS) Changed from DBL_MAX to -DBL_MAX.
12017         (SYSCODE) New constant macro.
12018
12019         * descript.q: Checks for positive n_variables before performing
12020         analysis.
12021
12022         * file-handle.q: (get_handle_by_filename) Bug fix: passes &f to
12023         avl_find instead of &fp as arg 2.
12024
12025         * frequencies.g, frequencies.q: Continued updating; now compiles &
12026         works again, but not complete.
12027
12028         * main.c: Changes to user messages.
12029
12030         * misc.c: (reverse) [0] New function.
12031
12032         * settings.h: Comment removed.  #includes "common.h".
12033
12034         * som.c: (som_set_null) New function.
12035         (som_set_value, som_set_string, som_set_text) More detailing
12036         assertions.
12037         (som_set_float) Implemented function.
12038         (dump_columnated_table) Bug fix regarding page breaks.
12039         (draw_cell) Bug fix regarding text that spilled out of a cell.
12040         (draw_intersection, draw_horz_rule, draw_vert_rule) No longer draw
12041         null lines.
12042         (get_cell_size) Support SCON_EMPTY cells.
12043         (get_table_size) When calculating rules' widths and heights, mask
12044         out SLIN_SPACING bit.  Added SOPT_X_HLTL support.
12045         
12046         * som.h: (som_any_cell) New option SOPT_X_HTLT.  Removed
12047         SOPT_X_SHADE.
12048         (struct som_submission_form) New member `header'; all users
12049         changed.
12050
12051         * val-labs.c: (get_label) User messages changed.
12052
12053         * var.h: Changed FREQUENCIES structures.
12054
12055         * vars-atr.c: (is_num_user_missing, is_str_user_missing) Made
12056         inline.
12057         
12058 Fri Jul 19 19:11:13 1996  Ben Pfaff  <blp@gnu.org>
12059
12060         * approx.h: Definition of EPSILON now depends on system's
12061         DBL_EPSILON.  Removed GNU C specific code.
12062         (cmpapx) Renamed approx_compare.
12063
12064         * frequencies.g, frequencies.q: Continued updating; still doesn't
12065         compile.
12066
12067         * groff-font.c: (name_to_index) Fix bug that kept it from
12068         compiling.
12069
12070         * hash.c, hash.h: Completed work.
12071
12072         * var.h: Changes to freq_tab, frequencies_proc.
12073         
12074 Wed Jul 17 21:23:36 1996  Ben Pfaff  <blp@gnu.org>
12075
12076         New hashing code.
12077         * hash.c, hash.h: New files.  Not completed.
12078         * Makefile.am: Added hash.c to source file list.
12079         * font.h: (struct font_desc) New member kern_size_p.
12080         * groff-font.c: Uses hash.h.
12081         (hashpjw) Moved to hash.c.
12082         (next_prime_power) Rewrote, renamed hsh_next_prime, moved to
12083         hash.c.
12084         (static var hash) New member size_p.
12085         * var.h: Includes hash.h.
12086         (struct freq_tab) Changed AVL_TREE to hash_tab.
12087
12088         * vars-prs.c: Comment, formatting fixes.
12089
12090         * frequencies.g, frequencies.q: Continued updating.  Not yet
12091         working.
12092
12093         * formats.c: Bug fix.
12094
12095 Tue Jul 16 22:10:04 1996  Ben Pfaff  <blp@gnu.org>
12096
12097         Increasing parallelism between DESCRIPTIVES and FREQUENCIES.
12098         * descript.g: Comment fixes.
12099         * descript.q: Comment fixes.  Moved some declarations into var.h.
12100         Made dsc_info a static table.  Updated FIXMEs.
12101         (internal_cmd_descriptives) Beautified.
12102         
12103         * frequencies.q: Started updating into working order.
12104         * frequencies.g: New file analogous to descript.g.
12105         * var.h: Comment fixes.  Added structures for FREQUENCIES.
12106         
12107         * som.c: Removed vestiges of crushing and partial table support.
12108
12109 Sun Jul 14 15:45:31 1996  Ben Pfaff  <blp@gnu.org>
12110
12111         * Many more changes to som.c especially, but these will not be
12112         documented as I have resolved to remove them.  This patchlevel is
12113         being released solely so that I can fall back to it if I decide
12114         that removing the changes is not a good idea.
12115
12116 Sat Jul 13 09:58:44 1996  Ben Pfaff  <blp@gnu.org>
12117
12118         * som.c: (global var som) New member `cum_y'.
12119         (build_target) Properly handles titles for partial tables.
12120         (dump_partial_beg, dump_partial_mid, dump_partial_end)
12121         Merged into single new function dump_partial().  Fixed problem
12122         with titles on partial tables.
12123         (dump_table) Calls dump_partial() for all parts of partial tables.
12124         (dump_page) Criteria for drawing title changed.
12125         
12126 Fri Jul 12 22:03:36 1996  Ben Pfaff  <blp@gnu.org>
12127
12128         * command.c: (cmd_table) Added LIST, WEIGHT.
12129
12130         * command.c: (cmd_remark) No longer frees `s' since it's not
12131         dynamically allocated.
12132         
12133         * data-out.c: (convert_f) Now correctly handles the case where
12134         abs(v->f)<1 but v->f rounds to a value of 1.00 given the specified
12135         number of decimals.
12136         (som_destroy_all_tables) Removed argument.  All callers changed.
12137         (som_vline, som_hline) Argument validity checking corrected.
12138         (som_set_value) Implemented half-heartedly.
12139         (replicate_table) Copies tables piece-by-piece when using Checker.
12140
12141         * som.h: New line style SLIN_1THIN, currently equivalent to
12142         SLIN_0.  New enum set SOM_SUB_*.
12143         (struct som_submission_form) Removed `seq_no'.  Added `type'.
12144         
12145         * list.q: Newly working file; uses partial tables.
12146         
12147         * som.c: (som_reduce_table) Renamed som_set_table_height().
12148         (som_crush) Removed argument `group'.
12149         (global var som) Removed `nt', `seq_no'.  Added `type'.
12150         (som_submit_table) Arguments changed.
12151         (output_table) Removed partial table code.
12152         (build_target) New arg; partial table support added.  All callers
12153         changed.
12154         (dump_plain_table) Removed partial table code.
12155         (dump_partial_beg, dump_partial_mid, dump_partial_end) New functions.
12156         (dump_table) Supports partial tables.
12157         (dump_page) New argument to allow not drawing top and/or bottom
12158         headers.  All callers changed.  Supports partial tables.
12159
12160 Sat Jul  6 22:22:25 1996  Ben Pfaff  <blp@gnu.org>
12161
12162         * data-out.c: Changed `#include <approx.h>' to `#include
12163         "approx.h".
12164         (convert_F) Comment fix.  Now won't print `-.000', etc.
12165
12166         * descript.q: Now Z-scores work, although there appears to
12167         be a bug (which might actually be in data-out.c:convert_F()).
12168         (descriptives_trns_proc, descriptives_trns_free) New functions.
12169         (run_z_pass) Implemented.
12170         
12171         * var.h: Comment fixes.
12172         (dsc_z_score, descriptives_trns) New structs.
12173         (descriptives_trns) Added to any_trns as `dsc'.
12174
12175         * error.c, error.h: New error class, IS (Installation Script
12176         error), used in those instances where the error is in the
12177         installation, but there is a script file or installation file that
12178         can be usefully referred to.
12179         
12180         * output.c: Change many IE classes to IS classes.
12181
12182         * cases.c, command.c, common.c, crosstabs.q, expr-evl.c,
12183         frequencies.q, list.q, vars-prs.c, vfm.c: Removed reference to
12184         HAVE_MALLOC_H because Borland C++ alloca() is broken, so why
12185         include the corresponding header?
12186         
12187         * glob.c: (init_glob) Don't malloc term_buffer under Checker.
12188         Don't bail out if termcap can't be read.
12189
12190         * som.c: (som_destroy_table) Removed.
12191         (som_reduce_table, som_destroy_all_tables) New functions.
12192         (som_crush) New function, not implemented.
12193         
12194         * som.h: New table option STAB_CRUSH.  Comment fix.  New struct
12195         som_submission_form.  Function prototypes revised.
12196
12197         Outputting huge tables (1000s of rows) a few rows at a time
12198         is supported, though untested.  May even break everything.
12199         Actually, the code doesn't even compile right now.
12200         * som.c: (struct som) New fields htv, nt, seq_no.
12201         (som_submit_table) Multiple arguments changed to a single
12202         pointer to struct submission_form.  Only increments subtable_num
12203         if seq_no is zero.  Only destroys table if it's not going to
12204         be reused.
12205         (replicate_table) New function.
12206         (output_table) Comment fix.
12207         (examine_table) Changed inline code to code calling
12208         replicate_table().  Calculates htv.  Supports partial tables.
12209         (draw_title) Removed comment.
12210         (build_target) Only allows for title on first part of partial
12211         tables.
12212         (dump_plain_table) Only resets table chunk number on first part
12213         of partial tables; FIXME: doesn't work quite right.  Supports
12214         partial tables.
12215         (dump_page) Titles only on first part of partial tables.
12216
12217 Fri Jul  5 20:16:19 1996  Ben Pfaff  <blp@gnu.org>
12218
12219         * Thanks to an unreliable IDE hard drive, I have spent the last
12220         day reconstructing my Debian GNU/Linux installation and redoing
12221         the previous day's changes--somehow I managed to save every file
12222         except for output.c and output.h.  So the following changes could
12223         really be considered independent of the output.c, output.h changes
12224         from Jul 4.
12225
12226         * output.h, output.c: Moved the outp_configure_vec global var,
12227         outp_names struct, and enum set OUTP_S_* from output.h to output.c.
12228         outp_configure_vec is now static.
12229         
12230 Thu Jul  4 20:20:24 1996  Ben Pfaff  <blp@gnu.org>
12231
12232         * The entire philosophy behind configuration of the output drivers
12233         changed.  Now there is a termcap-type configuration where drivers
12234         to be read are determined beforehand, rather than parsing the
12235         entire output init file and storing it in memory & deciding what
12236         to actually use later.  Faster & more memory-efficient at the same
12237         time, cool.
12238         
12239         * output.c: Comment fix.  Removed outp_init_drivers global var.
12240         Removed all references to synonyms.  New structure outp_defn.  New
12241         global vars outp_macros, outp_configure_vec.
12242         (search_name, delete_name, add_name, check_configure_vec,
12243         expand_name, find_defn_value) New static functions.
12244         (outp_configure_clear, outp_configure_add, outp_configure_macro,
12245         outp_read_devices) New extern functions.
12246         (outp_init) Much functionality moved into outp_read_devices.
12247         (outp_read_devices) Format of output init file changed; name of
12248         file is `devices' rather than `output' to avoid Makefile
12249         conflicts.
12250         (outp_clear) Renamed outp_done.
12251         (outp_list_classes) Bug fix, cleaned up.
12252         (outp_list_drivers) Not implemented anymore.
12253         (outp_configure_driver) Now a static function; simplified; now
12254         interpolates macros; supports new structure.
12255         (outp_enable_driver, match_synonym) Removed; all references
12256         removed.
12257         (find_driver) First argument removed.
12258         
12259         * output.h: Global var outp_init_drivers removed; new structure
12260         outp_names; new enum set OUTP_S_*; new global var
12261         outp_configure_vec; function prototypes for output.c exports
12262         updated.
12263         
12264         * main.c: (main) Calls outp_read_devices() after parsing the
12265         command line.
12266         
12267         * cmdline.c: (parse_command_line) New option -v --verbose;
12268         --version changed to -V.  --device option changed syntax to just
12269         take a single device name.  Accepts key=value declaration of
12270         output init file macros.  Syntax message updated.
12271
12272         * filename.c: (expand_line) New function.
12273         (interp_environ_vars) Renamed interp_vars; no longer uses
12274         fixed-size buffer.
12275         (blp_getenv) Allows $ARCH and $VER pseudo-environment-vars to be
12276         overridden by real environment vars.
12277         (search_path) Uses verbose_msg() instead of #ifdef'd printf().
12278         * filename.h: interp_environ_vars() renamed interp_vars().
12279         
12280         * error.c, error.h: Added extern variable `verbosity', message
12281         class MM.
12282         
12283         * error.c: (vmsg) Support message class MM.
12284         (verbose_msg) New function.
12285
12286         * descript.q: (generate_z_varname) Bug fix in generation of
12287         Z-score varnames.
12288         (dump_z_table) Bug fix in column headers.
12289         
12290         * ascii.c: (ascii_init_driver) Changed minimum number of lines per
12291         page from 29 to 15.  Don't set a default for ops[OPS_INIT,
12292         OPS_DONE].  Writes the uninit string when the driver is closed.
12293         (ascii_open_page) Write the init string before the first page.
12294         (output_shorts) Form of main loop changed from `while' to `for'.
12295         Bug fix with overstrikes: the character is printed *after* the
12296         backspace.  Eliminated a lot of `& 0xff' modifiers.
12297         (advance_to_left_margin) New function.
12298         (return_carriage, output_lines) Handle left margin.
12299
12300 Thu Jul  4 00:35:59 1996  Ben Pfaff  <blp@gnu.org>
12301
12302         * ascii.c: New option `carriage-return-style'.
12303
12304         * ascii.c: (count_fancy_chars) New function.
12305         (delineate, text_metrics) Use new function; bug fixes regarding
12306         rich text strings.
12307         (text_draw) Bug fix with rich text.
12308         (output_string, output_shorts) Reordered.
12309         (output_shorts) Now handles boxchars and some overstrike font
12310         changes.
12311         (output_char, return_carriage) New functions.
12312         (output_lines) Now handles overstriking and font changes properly;
12313         some code moved to output_shorts.
12314
12315 Tue Jul  2 22:13:23 1996  Ben Pfaff  <blp@gnu.org>
12316
12317         [GLOBAL_DEBUGGING]
12318         * ascii.c: New member `debug' in ascii_driver_ext.
12319         (ascii_init_driver, delineate) Uses new member.
12320
12321         Now you can set a vertical height on writing text.
12322         * ascii.c: (delineate) Keeps track of vertical position.
12323         (text_draw) No longer considers fully justified text an internal
12324         error.
12325         
12326         * output.h: New flag OUTP_T_VERT; other OUTP_T_ values changed.
12327
12328         Tables' titles are drawn; they can have variable height.
12329         * som.c: `som' struct has new member, title_height.
12330         (draw_title) New argument.  Moved within file.  All caller
12331         changed.
12332         (build_target) New argument, amount of space needed for first row.
12333         Calculates height of title, takes that into account.  All callers
12334         changed.
12335         (dump_plain_table, dump_columnated_table) Took calculation of y1,
12336         y2 out of loop.
12337         (dump_columnated_table) [GLOBAL_DEBUGGING] Debugging code
12338         improved.
12339         (dump_columnated_table) Organized for readability.
12340         (dump_page) Makes use of som.title_height.
12341
12342         * som.c: Many comment bug fixes.
12343
12344         * descript.q: (try_name, generate_z_name) Bug fix regarding
12345         generation of Z-score variable names.
12346         * var.h: Removed num from descriptives_proc; all referents removed.
12347
12348 Mon Jul  1 22:13:39 1996  Ben Pfaff  <blp@gnu.org>
12349
12350         * ascii.c: (ascii_line_horz, ascii_line_vert,
12351         ascii_line_intersection) Added debugging code.
12352
12353         Added a descriptive line above each table to describe it.
12354         * command.c: (parse_cmd) Calls som_new_series.
12355         
12356         * som.c: New static vars table_num, subtable_num.  New `som'
12357         member `title'.
12358         (dump_page) New arguments.
12359         (som_submit_table) Handle new variables.
12360         
12361         * som.c, som.h: (som_submit_table) New arguments.  All callers
12362         changed.
12363         (som_new_series) New function.
12364         (build_target) Makes room for extra line.
12365         (draw_title) New function.
12366         (dump_page) Calls draw_title.  Bug fix: doesn't always set
12367         som.ext->cp to 0.
12368         
12369         Columnation of tables support.
12370         * som.h: Deleted fr, lr, ri from som_table.  Reorganized.
12371         
12372         * som.c: Deleted references to fr, lr, ri.
12373         (som_columnate) Bux fix: sets group member of table.
12374         (som_add_options) Function removed.
12375         (dump_table) Split into three functions; extensively reworked.
12376         
12377         * descript.q: (dump_z_table) Better output table formatting; added
12378         title support to correspond to som.h changes.
12379         (display) Title support.
12380
12381         * output.h: Added OUTP_T_NONE.
12382         
12383 Mon Jul  1 13:00:00 1996  Ben Pfaff  <blp@gnu.org>
12384
12385         * descript.q: Improved handling of Z scores; still not perfect.
12386         
12387         * output.h, ascii.c: Added hook for getting em width of current
12388         font.
12389         
12390         * som.c: Uses new em-width hook.  Added debugging code to
12391         several functions.
12392         (som_columnate) New argument.
12393         (som_add_options) Removed.
12394
12395 Jun 29 17:40:47 1996  Ben Pfaff  <blp@gnu.org>
12396
12397         * som.h, som.c, output.c, output.h, ascii.c: Updated to work with
12398         rules as a property of the table instead of as a property of the
12399         cells.
12400         
12401         * ascii.c: Added `header' to table of options.
12402         
12403         * descript.q: Added even shorter statistic names; modified to work
12404         with new som interface.
12405         
12406         * misc.c (blp_getdelim): Bug fix.
12407         
12408         * version.c: includes 'conf.h'.
12409         
12410 ----------------------------------------------------------------------
12411 Local Variables:
12412 mode: change-log
12413 version-control: never
12414 End: