Seperated file_loc from error.c
[pspp-builds.git] / src / ChangeLog
1 Fri Dec 23 20:59:01 WST 2005 John Darrington <john@darrington.wattle.id.au>
2
3         * getl.c error.c: Separated file_loc functionality from error.c
4
5 Mon Dec 19 14:01:56 WST 2005 John Darrington <john@darrington.wattle.id.au>
6
7         * format.c: Additional error checking.
8         * getl.[ch]: Separated into getl.c and readln.c
9         * settings.[ch]: Made CC_CNT public
10
11 Fri Dec 16 09:11:48 WST 2005 John Darrington <john@darrington.wattle.id.au>
12
13         * examine.q: Fixed buglet when cleaning up at end of procedure.
14
15 Tue Dec 13 22:34:42 2005  Ben Pfaff  <blp@gnu.org>
16
17         Move global initialization and cleanup code into main.c.
18         Remove vestigial log infrastructure.
19         Minor related cleanups.
20         
21         * command.c: (shell) When execl() fails, use _exit(), not
22         err_hcf().
23
24         * error.c: (err_hcf) Move into main.c, rename terminate().  All
25         callers updated.
26         (err_done) New function with just the error.c-specific code for
27         err_hcf().  Called by terminate().
28
29         * glob.c: Removed all Borland C, DJGPP cruft.
30         (init_glob) Merged into main().
31         (done_glob) Merged into terminate().
32         (get_date) Removed.
33         (get_start_date) New function.  All users of curdate updated to call
34         this function instead.
35
36         * lexer.c: (lex_init) Moved initialization of tokstr here, from
37         init_glob().
38         (lex_done) Moved destruction of tokstr here, from done_glob().
39
40         * main.c: (global var pgmname) Removed.  Changed all references to
41         program_name, which is defined by gnulib.
42         (global var curdate) Removed.
43         (main) Moved init_glob() code here.  Merged parse_script() in
44         here.
45         (parse_script) Removed.
46         (terminate) Moved err_hcf() here from error.c and renamed
47         terminate().  Merged done_glob() code in here.  Call err_done().
48         All callers updated.
49         (i18n_init) New function.
50         (fpu_init) New function.
51
52         * output.c: (outp_init) Make void.
53         (init_default_drivers) New function.
54         (outp_read_devices) If no drivers are initialized successfully,
55         call init_default_drivers() to initialize a default driver.
56         (outp_done) Make void.
57         (static var prog) Make const.
58         (parse_options) Make parameter const.
59         (colon_tokenize) Make return value const.
60         (configure_driver) Change prototype to take a broken-down driver
61         configuration instead of a line of text.
62         (configure_driver_line) New function that does what
63         configure_driver() did before.
64
65         * q2c.c: (global var pgmname) Rename program_name.
66
67         * settings.c: (settings_init) Renamed from init_settings().
68         (settings_done) Renamed from done_settings().
69
70         * vfm.c: (global var last_vfm_invocation) Make static.
71         (vfm_last_invocation) New function.  All references to
72         last_vfm_invocation update to call this.
73         (procedure) Call update_last_vfm_invocation().
74         (internal_procedure) Ditto.
75         (update_last_vfm_invocation) New function.
76         
77 Sat Dec 10 23:30:19 2005  Ben Pfaff  <blp@gnu.org>
78
79         Separate random numbers from other settings because of GSL
80         dependency.
81
82         * Makefile.am: Add random.c, random.h to sources.
83
84         * glob.c: (init_glob) Call random_init().
85         (done_glob) Call random_done().
86
87         * settings.c: (static var rng) Move to random.c.
88         (done_settings) Move freeing of RNG to random_done().
89         (get_rng) Move to random.c
90         (set_rng) Ditto.
91
92         * random.c: New file.
93
94         * random.h: New file.
95
96 Sat Dec 10 18:13:36 2005  Ben Pfaff  <blp@gnu.org>
97
98         Separate settings and the SET command, for modularity.
99         
100         * Makefile.am: Add settings.c to sources.
101
102         * glob.c: (global variable test_mode) Removed.
103
104         * set.q: Remove all the set_* variables.  Remove a lot of obsolete
105         SPSS/PC+ settings.  Remove the aux_*() routines.  Moved the
106         get_*() functions into settings.c.  Rewrite the settings code and
107         functions to call the new set_*() functions.  Rewrite custom
108         currency parsing.  Write new by-hand cmd_show().
109
110         * esttings.c: New file.  Moved the get_*() functions here from
111         set.q.  Created new set_*() functions to correspond with them.
112         Regularized the names and types of some functions and updated
113         their callers.  Added static, file-scope variables to support the
114         settings.
115
116         * q2c.c: Remove "aux" support, which was only needed by set.q.
117         
118 Sun Nov 27 06:43:46 WST 2005 John Darrington <john@darington.wattle.id.au>
119
120         * data-out.c format.h: Added return value to data_out function.
121
122         * value-labels.c: Fixed bug in val_labs_remove.
123
124 Sat Nov  5 18:37:26 2005  Ben Pfaff  <blp@gnu.org>
125
126         * Makefile.am: Remove devind.c, devind.h from list of source
127         files.
128
129         * devind.c: Removed.
130
131         * devind.h: Removed.
132
133         * list.q: Removed "support" for devind.
134
135         * output.c: Don't add devind class.
136
137 Sat Nov  5 18:21:00 2005  Ben Pfaff  <blp@gnu.org>
138
139         * var.h: (struct variable) Make `init', `reinit' bool values.
140         Rearrange fields.
141
142 Fri Nov  4 19:43:01 2005  Ben Pfaff  <blp@gnu.org>
143
144         * recode.c: Rewrote whole file, as clean-up.
145
146 Fri Nov  4 19:37:50 2005  Ben Pfaff  <blp@gnu.org>
147
148         * pool.c: Don't make alignment exception for x86.
149         (pool_alloc) Return null for 0-size blocks.
150         (pool_alloc_unaligned) New function.
151         (pool_strndup) Removed.  Changed callers to use pool_clone_unaligned().
152         (pool_clone_unaligned) New function.
153         (pool_strdup) Use pool_clone_unaligned().
154
155         * var.h: (enum var_type) Give the NUMERIC, ALPHA enum this name.
156         (struct variable) Use `enum var_type' for `type'.
157
158         * vars-atr.c: (var_type_adj) New function.
159         (var_type_noun) New function.
160
161         * vars-prs: (parse_mixed_vars) Fix freeing code.
162         (parse_mixed_vars_pool) New function.
163
164 Wed Nov  2 21:24:48 2005  Ben Pfaff  <blp@gnu.org>
165
166         * file-handle-def.c: Needed another #include, to avoid missing
167         prototype warning.
168
169         * file-handle.q: (cmd_file_handle) Declarations must precede
170         statements.  Free parse data on success as well as on failure, to
171         avoid memory leak.
172
173         * get.c: (parse_write_command) Destroy dict on success, to avoid
174         memory leak.
175         
176         * data-list.c: (cmd_repeating_data) Fix usage of saw_occurs,
177         saw_length, saw_continued, saw_id, which were boolean but
178         incorrectly treated as bitmaps as result of a previous
179         half-finished cleanup.
180
181         * weight.c: (struct weight_trns) Unused, so removed.
182
183         * Makefile.am: Add range-prs.h to sources.
184
185 Wed Nov  2 21:24:15 2005  Ben Pfaff  <blp@gnu.org>
186
187         DO IF, LOOP cleanup.
188
189         * Makefile.am: Add ctl-stack.c, ctl-stack.h to source files.
190         Reformat source file list to list one file per file, so that
191         patches for future changes will be easier to read.
192
193         * ctl-stack.c, ctl-stack.h: New files.
194
195         * do-if.c: Rewrote whole file.
196
197         * do-ifP.h: Removed.
198
199         * loop.c: Rewrote whole file.
200
201         * glob.c: (global var ctl_stack) Move into ctl-stack.c.
202
203         * temporary.c: (cmd_temporary) Use ctl_stack_is_empty().
204
205         * vfm.c: (open_active_file) Use ctl_stack_clear().
206
207 Wed Nov  2 21:18:13 2005  Ben Pfaff  <blp@gnu.org>
208
209         New pool functions.
210         
211         * pool.c: (pool_create_at_offset) New function.
212         (pool_add_subpool) New function.
213
214         * pool.h: (pool_create_container) New macro.
215         
216         * expressions/parse.c: (expr_parse_pool) New function.
217         
218         * autorecode.c: (recode) Use pool_create_container().
219
220         * count.c: (cmd_count) Ditto.
221
222 Wed Nov  2 19:59:32 2005  Ben Pfaff  <blp@gnu.org>
223
224         Clean up transformations, by getting rid of `struct trns_header',
225         replacing it by `struct transformation' that has a void *
226         `private' member.  Updated all uses of transformations to match,
227         which was a lot of code.  Only major related changes listed below.
228
229         * compute.c: (cmd_if) Use get_proc_func().
230         (cmd_compute) Use get_proc_func().
231         (get_proc_func) New function.
232
233         * glob.c: (global var m_trns) Change type to size_t.
234         (global var n_trns) Ditto.
235         (global var f_trns) Ditto.
236         (global var t_trns) Change type to struct transformation *.
237
238         * var.h: (struct trns_header) Removed.
239         (struct transformation) New.
240         (typedef trns_proc_func) Takes a void * instead of a struct
241         trns_header *.
242         (typedef trns_free_func) Ditto.
243
244         * vfm.c: (execute_transformations) Takes an array of
245         transformations instead of trns_headers.
246         (add_transformation) Change prototype from (trns_header *) to
247         (trns_proc_func *, trns_free_func *, void *).
248         (next_transformation) New function.
249
250 Sat Oct 29 16:25:36 2005  Ben Pfaff  <blp@gnu.org>
251
252         * count.c: Major cleanups.  Rename practically everything.
253         Rewrite much of the code.  Use pools for memory management.  Use
254         the new parse_num_range().
255
256         * mis-val.c: (cmd_missing_values) Use the new parse_num_range().
257         (parse_number) Removed.
258
259         * missing-values.c: (mv_add_num_range) Don't add out-of-order
260         ranges, e.g. where low > high.
261
262         * pool.c: (pool_2nrealloc) New function.
263
264         * range-prs.c: New file.
265         (parse_num_range) New function.
266         (parse_number) New function.
267         
268 Fri Oct 28 22:47:48 2005  Ben Pfaff  <blp@gnu.org>
269
270         Fix up potential overflows in size calculations by replacing
271         instances of pool_alloc(p, x * sizeof *y) by pool_malloc(p, x,
272         sizeof *y) everywhere I could find them.  Similarly by
273         pool_malloc(), pool_realloc().
274         (Order is important: pool_alloc(p, sizeof *y, x) will divide by 0
275         if x is 0.)
276
277         * pool.c: (pool_nalloc) New function.
278         (pool_nmalloc) New function.
279         (pool_nrealloc) New function.
280
281 Thu Oct 27 11:16:53 WST 2005 John Darrington <john@darrington.wattle.id.au>
282
283         Separated the definition of a file handle object from the stuff 
284         pertaining to the FILE HANDLE command.
285
286         * file-handle-def.[ch]: New files.
287
288         * dfm-read.c file-handle.h file-handle.q
289         
290 Tue Oct 25 21:56:23 2005  Ben Pfaff  <blp@gnu.org>
291
292         Fix up potential overflows in size calculations by replacing
293         instances of xmalloc(x * sizeof *y) by xnmalloc(x, sizeof *y)
294         everywhere I could find them.  Similarly by xrealloc(), malloc().
295         (Order is important: xnmalloc(sizeof *y, x) will divide by 0 if x
296         is 0.)
297
298         * alloc.c: (nmalloc) New function.
299         (out_of_memory) Removed.  Replaced references by xalloc_die().
300
301         * sort.c: (allocate_cases) Fix segfault if memory allocation
302         fails.
303
304         * subclist.c: (subc_list_double_create) Use xnmalloc() instead of
305         malloc().
306         (subc_list_double_push) Use xnrealloc() instead of realloc().
307
308 Wed Oct 26 08:43:51 WST 2005 John Darrington <john@darrington.wattle.id.au>
309
310         Dictionary abstraction part #2
311
312         * algorithm.c format.c str.c sysfile-info.c val.h var.h vars-atr.c:
313           Removed unnecessary #include directives
314
315 Mon Oct 24 21:35:08 2005  Ben Pfaff  <blp@gnu.org>
316
317         * groff-font.c (font_msg): Use err_vmsg() instead of incorrectly
318         trying to pass a va_list to tmsg().  Thanks to Jason Stover for
319         reporting this bug.
320
321 Mon Oct 24 21:24:15 2005  Ben Pfaff  <blp@gnu.org>
322
323         Work to get rid of GCC 4.0 warnings, part 2.
324
325         In many files, change `unsigned char' to `char'.  This often
326         requires adding casts to <ctype.h> functions.
327
328         * data-in.c: (parse_A) Use buf_copy_rpad().
329
330         * str.c: (str_copy_buf_trunc) New function.
331
332         * value-labels.c: (value_to_string) Fix mistaken use of strncpy(),
333         by rewriting.
334
335 Mon Oct 24 13:42:32 WST 2005 John Darrington <john@darrington.wattle.id.au>
336
337         Moved some definitions to make it easier to abstract a dictionary 
338         from the rest of PSPP.
339
340         * format-prs.c lex-def.[ch]:  New files.
341
342         * Makefile.am lexer.[ch] dictionary.c vars-atr.c vfm.c algorithm.c 
343           format.c:  Moved some functions between modules.
344         
345 Sun Oct 23 19:28:08 2005  Ben Pfaff  <blp@gnu.org>
346
347         Work to get rid of GCC 4.0 warnings, part 1.
348         
349         In many files, change count parameters to parse_variables(),
350         etc. from `int' to `size_t'.  Also change related variables and
351         struct members.  Also change messages as needed (e.g. %d to %u
352         with cast to unsigned).  Also change arithmetic as necessary
353         (e.g. n >= m - 1 to n + 1 >= m). 
354
355         * crosstabs.q: (crs_custom_tables) Check for size_t overflow in
356         multiplication.
357
358         * q2c.c: (dump_declarations) Generate code for size_t instead of
359         int.
360         
361 Thu Oct 20 18:18:40 2005  Ben Pfaff  <blp@gnu.org>
362
363         * output.c: (outp_read_devices) Fix message.
364
365 Sat Sep 17 11:13:13 2005  Ben Pfaff  <blp@gnu.org>
366
367         * matrix-data.c: (cmd_matrix_data) Change type of variable whose
368         address is passed to dict_get_vars() from size_t to int to match
369         John's change below.
370
371         * modify-vars.c: (validate_var_modification) Ditto.
372
373 Mon Sep 12 19:26:06 WST 2005 John Darrington <john@darrington.wattle.id.au>
374
375         * dictionary.[ch]  Changed cnt from size_t* to int* since that's
376         what it's called as, and on  x86_64 machines they're different sizes.
377         
378         * str.c: (ds_vprintf) Copied va_list args so they can be re-used
379         
380 Sun Aug 21 00:12:24 2005  Ben Pfaff  <blp@gnu.org>
381
382         * lexer.c: (lex_sbc_only_once) New function.
383         (lex_sbc_missing) New function.
384
385 Sun Aug 21 00:00:47 2005  Ben Pfaff  <blp@gnu.org>
386
387         * case.h: (case_str) Make it return `unsigned char'.
388
389 Sat Aug 20 23:56:14 2005  Ben Pfaff  <blp@gnu.org>
390
391         Revamp SAVE, XSAVE, EXPORT.  Add (or at least parse) all the
392         subcommands that we didn't support.  Fix bug 13911.  Fix bug
393         reported by Adam Pierson (COMPRESSED and other subcommands didn't
394         work on SAVE).  Refactor all related code.
395         
396         * command.def: Add XEXPORT command.
397
398         * dictionary.c: (dict_delete_scratch_vars) New function.
399
400         * get.c: (cmd_get) Fix parsing.
401         (struct save_trns) Removed.
402         (cmd_save_internal) Removed.
403         (cmd_save) Removed.
404         (do_write_case) Removed.
405         (save_write_case_func) Removed.
406         (save_trns_proc) Removed.
407         (save_trns_free) Removed.
408         (trim_dictionary) Removed.
409         (struct export_proc) Removed.
410         (cmd_export) Rewrote.
411         (export_write_case_func) Removed.
412         (export_proc_free) Removed.
413         (enum writer_type) New enum.
414         (enum command_type) New enum.
415         (struct any_writer) New struct.
416         (any_writer_destroy) New function.
417         (parse_write_command) New function.
418         (any_writer_write_case) New function.
419         (parse_output_proc) New function.
420         (output_proc) New function.
421         (cmd_save) Rewrote.
422         (cmd_xsave) Rewrote.
423         (struct output_trns) New struct.
424         (parse_output_trns) New function.
425         (output_trns_proc) New function.
426         (output_trns_free) New function.
427         (cmd_xsave) Rewrote.
428         (cmd_xexport) New function.
429         (parse_dict_trim) New function.
430         (struct mtf_proc) Change `by_cnt' member type to `int'.
431         (cmd_import) Rewrote.
432
433         * pfm-write.c: (struct pfm_writer) Add `digits' member.
434         (pfm_writer_default_options) New function.
435         (pfm_open_writer) Add `opts' argument and handle options.
436         (write_float) Write only as many digits as `digits' member says.
437         (format_trig_double) Limit base-10 precision to LDBL_DIG.
438
439         * pfm-write.h: (enum pfm_type) Moved here from pfm-read.h.
440         (struct pfm_write_options) New struct.
441
442         * sfm-write.c: (sfm_writer_default_options) New function.
443         (sfm_open_writer) Remove `compress', `omit_long_names' args.  Add
444         `opts' argument.  Implement options.
445
446         * sfm-write.h: (struct sfm_write_options) New struct.
447
448         * expressions/helpers.c: (copy_string) Make `old' arg `unsigned
449         char *' instead of `char *'.
450         
451 Sat Aug  6 21:29:15 2005  Ben Pfaff  <blp@gnu.org>
452
453         * factor_stats.c: Needed <config.h> included earlier.
454
455         * percentiles.c: Needed to include <config.h>.
456
457         * val.h: Don't include "config.h".
458
459 Sat Aug  6 21:26:27 2005  Ben Pfaff  <blp@gnu.org>
460
461         Clean up treatment of missing values by moving all the code into
462         one place.  All references to the missing value function were
463         updated, but only major changes are detailed below.
464
465         * Makefile.am: Add missing-values.c, missing-values.h to sources.
466
467         * apply-dict.c: (cmd_apply_dictionary) Use mv_resize().
468
469         * dictionary.c: (dict_create_var) Initialize `miss' member with
470         mv_init().
471         (dict_clone_var) Copy `miss' member with mv_copy().
472         
473         * get.c: (mtf_merge_dictionary) Use mv_copy().
474
475         * missing-values.c: New file.
476         
477         * missing-values.h: New file.
478
479         * mis-val.c: Rewrite.  New version implements updated semantics.
480
481         * pfm-read.c: (read_variables) Rewrite missing value handling.
482
483         * pfm-write.c: (write_variables) Rewrite missing value handling.
484
485         * sfm-read.c: (read_variables) Rewrite missing value handling.
486
487         * sfm-write.c: (write_variable) Rewrite missing value handling.
488
489         * sfmP.h: Include "magic.h" to get definition of
490         second_lowest_value.
491
492         * sysfile-info.c: (describe_variable) Rewrite missing value
493         handling.
494
495         * val.h: Include "magic.h" to get definition of
496         second_lowest_value.
497
498         * var.h: Include "missing-values.h".  Drop MISSING_* enums.
499         (struct variable) Remove `miss_type', `missing'.  Add `miss'.
500
501         * vars-atr.c: (is_num_user_missing) Removed--use
502         mv_is_num_user_missing().
503         (is_str_user_missing) Removed--use mv_is_str_user_missing().
504         (is_system_missing) Removed--use mv_is_value_system_missing().
505         (is_missing) Removed--use mv_is_value_missing().
506         (is_user_missing) Removed--use mv_is_value_user_missing().
507         
508 Sun Jul 31 14:09:57 2005  Ben Pfaff  <blp@gnu.org>
509
510         Adopt use of gnulib for portability.
511
512         * Make.build: Add $(top_srcdir)/gl and $(top_builddir)/gl to
513         include path.
514
515         * Makefile.am: Remove bool.h, stat.h and change getline.[ch] to
516         getl.[ch] in pspp_SOURCES.  Remove libmisc, add libgl in
517         pspp_LDADD.
518
519         * In many source files, added an explicit inclusion of gettext.h
520         and definition of _ macro.  These are no longer in pref.h because
521         it interfered with definitions in a few gnulib source files.
522
523         * In many source files, changed #include "bool.h" to #include
524         <stdbool.h>, which is provided by gnulib.
525
526         * alloc.c: Removed functions defined in gnulib:
527         (xmalloc) Removed.
528         (xcalloc) Removed.
529         (xrealloc) Removed.
530         (xstrdup) Removed.
531         (out_of_memory) Redefined as wrapper for xalloc_die().
532
533         * alloc.h: Replace prototypes by #include "xalloc.h".
534
535         * casefile.c: Use full_read() and full_write() from gnulib instead
536         of our home-grown versions.
537         (full_read) Removed.
538         (full_write) Removed.
539
540         * getline.c: Renamed getl.c.
541
542         * getline.h: Renamed getl.h, updated all references.
543
544         * filename.c: (fn_readlink) Change to wrapper around xreadlink()
545         from gnulib.
546
547         * glob.c: Just #include <time.h> instead of the crazy rigmarole
548         here before.
549         (init_glob) Call set_program_name() to initial gnulib progname
550         module.
551
552         * html.c: (postopen) Use getlogin_r(), gethostname() from gnulib.
553
554         * permissions.c: Use "stat-macros.h" from gnulib.
555
556         * postscript.c: Just #include <time.h> instead of the crazy
557         rigmarole here before.
558
559         * q2c.c: (main) Make generated code #include "gettext.h".
560
561         * str.h: Get rid of most explicit declarations of standard
562         functions, in favor of including gnulib header files.
563
564         * expressions/evaluate.c: Ditto.
565
566         * expressions/operations.h.pl: Make generated code #include
567         <stdbool.h>, not "bool.h".
568
569 Sat Jul 30 23:13:17 2005  Ben Pfaff  <blp@gnu.org>
570
571         * expressions/parse.c: (validate_function_args) Fix two msg() bugs
572         found by -Wformat.
573
574 Sat Jul 30 23:10:01 2005  Ben Pfaff  <blp@gnu.org>
575
576         * expressions/evaluate.c: (expr_debug_print_postfix) Don't pass
577         null pointer to printf for %.*s.
578
579 Sat Jul 30 23:05:33 2005  Ben Pfaff  <blp@gnu.org>
580
581         * vars-atr.c: (var_is_valid_name) Fix three msg() bugs found by
582         -Wformat.
583
584 Sat Jul 30 22:58:33 2005  Ben Pfaff  <blp@gnu.org>
585
586         * rank.q: (parse_rank_function) Fix msg() bug found by -Wformat.
587
588 Sat Jul 30 22:56:12 2005  Ben Pfaff  <blp@gnu.org>
589
590         * postscript.c: (postopen) Cast `char' to `unsigned char' before
591         passing to isspace().
592
593 Sat Jul 30 22:52:09 2005  Ben Pfaff  <blp@gnu.org>
594
595         * pfm-read.c: (read_variables) Fix msg() bug found by -Wformat.
596
597 Sat Jul 30 22:50:57 2005  Ben Pfaff  <blp@gnu.org>
598
599         * histogram.c: Include <config.h>.
600
601 Sat Jul 30 22:48:50 2005  Ben Pfaff  <blp@gnu.org>
602
603         * get.c: (cmd_match_files) Fix msg() bug found by -Wformat.
604
605 Sat Jul 30 22:46:10 2005  Ben Pfaff  <blp@gnu.org>
606
607         * format.c: (check_common_specifier) Fix msg() bug found by
608         -Wformat.
609         (check_output_specifier) Ditto.
610
611 Sat Jul 30 22:43:57 2005  Ben Pfaff  <blp@gnu.org>
612
613         * file-handle.q: (cmd_file_handle) Fix msg() bug found by
614         -Wformat.
615
616 Sat Jul 30 22:41:44 2005  Ben Pfaff  <blp@gnu.org>
617
618         * data-in.c: (parse_Z) [WORDS_BIGENDIAN] Don't declare buf[], to
619         avoid "unused variable" warning.
620
621 Sat Jul 30 22:38:46 2005  Ben Pfaff  <blp@gnu.org>
622
623         * command.c: (find_word) Cast `char' to `unsigned char' before
624         passing to isspace().
625
626 Sat Jul 30 22:36:29 2005  Ben Pfaff  <blp@gnu.org>
627
628         * case.c: (case_compare) Implement as delegating to
629         case_compare_2dict().
630
631 Sat Jul 30 22:34:18 2005  Ben Pfaff  <blp@gnu.org>
632
633         * algorithm.c: Inclusion of <alloca.h> is unneeded.
634
635 Sat Jul 30 22:01:32 2005  Ben Pfaff  <blp@gnu.org>
636
637         * Make.build: Don't append -ansi to AM_CFLAGS for GCC.  Using
638         -ansi changes the behavior of header files significantly.  It
639         causes __STRICT_ANSI__ to be defined, and some headers interpret
640         that as cause to e.g. not use `long long' or __attribute__.  The
641         former example is bad when off_t is supposed to be `long long',
642         and the latter prevents -Wformat from working.
643
644 Sun Jul 24 20:26:59 2005  Ben Pfaff  <blp@gnu.org>
645
646         Get rid of dependency on libgmp by writing our own routine for
647         floating-point base conversion.
648
649         * pfm-write.c: (write_float) Rewrote.
650         (write_int) Rewrote.
651         (pow30_nonnegative) New function.
652         (pow30) New function.
653         (trig_to_char) New function.
654         (format_trig_digits) New function.
655         (recurse_format_trig_int) New function.
656         (format_trig_int) New function.
657         (should_round_up) New function.
658         (try_round_up) New function.
659         (format_trig_double) New function.
660
661 Sun Jul 24 18:49:20 2005  Ben Pfaff  <blp@gnu.org>
662
663         * data-in.c: (parse_numeric) Allow "1+23" even for F format, for
664         compatibility.
665
666 Sun Jul 24 18:47:37 2005  Ben Pfaff  <blp@gnu.org>
667
668         * pfm-read.c: (read_version_data) Read and ignore author field.
669
670 Wed Jul  6 20:44:27 2005  Ben Pfaff  <blp@gnu.org>
671
672         * get.c: (mtf_processing) Don't assume that
673         mtf_compare_BY_values() always returns -1, 0, or 1.  Actually, it
674         returns a negative, zero, or positive result.  Fixes MATCH FILES
675         bug on Mac OS X reported by "Marshall DeBerry" <mdb@radix.net>.
676
677 Mon Jul  4 18:01:15 2005  Ben Pfaff  <blp@gnu.org>
678
679         * flip.c: [HAVE_SYS_TYPES_H] Really include <sys/types.h>.  The
680         preprocessor test for sys/types.h was accidentally inverted.  This
681         was bug 12789.
682
683 Sun Jul  3 22:47:39 2005  Ben Pfaff  <blp@gnu.org>
684
685         * get.c: (cmd_match_files) Fix memory leak on `by' and on
686         `vfm_source'.
687
688         * getline.c: [HAVE_LIBREADLINE] (read_console) Fix memory leak on
689         `line'.
690
691         * vfm.c: (close_active_file) Remove unnecessary test.
692
693 Sun Jul  3 21:45:32 2005  Ben Pfaff  <blp@gnu.org>
694
695         Fix NDEBUG compile errors.
696
697         * hash.h: Needed explicit #include <assert.h>.
698
699         * linked-list.c: (ll_next) First arg is UNUSED when NDEBUG is
700         defined.
701
702 Sun Jun 12 23:44:38 2005  Ben Pfaff  <blp@gnu.org>
703
704         Implement embedding for PostScript driver.  Fixes bug 12970.
705
706         * ascii.c: Fix compiler warnings.
707
708         * html.c: Ditto.
709
710         * chart.h: Add `file' member.
711
712         * output.h: (struct outp_class) initialise_chart, finalise_chart
713         should take outp_driver *, not outp_class *.  Update all
714         references.
715
716         * plot-chart.c: (chart_create) Fix segfault when there are no
717         output drivers at all.
718         (chart_submit) Call d->class->finalise_chart.
719
720         * postscript.c: (ps_open_page) Set cp_y to 0.
721         (ps_submit) New function.
722         (ps_chart_initialise) Implement.
723         (ps_chart_finalise) Implement.
724         (static var postscript_class) Add ps_submit.
725         (static var epsf_class) Add ps_submit.
726         
727
728 Sun Jun 12 14:54:40 2005  Ben Pfaff  <blp@gnu.org>
729
730         Did some more work on bug 12859 and then realized that a *good*
731         solution would require some fundamental restructuring.  For now,
732         I'm marking REPEATING DATA unimplemented, and then we can revisit
733         it post-0.4.0.
734         
735         * command.def: Make REPEATING DATA unimplemented.
736
737         * data-list.c: (cmd_repeating_data) Assume inline file is 80
738         characters wide.
739         (realize_value) Revert previous changes; no longer needed.
740         Updated all callers.
741
742         * error.c: (err_hcf) Set nfile_loc, mfile_loc to 0 after freeing
743         file_loc, to avoid bad references later.
744
745         * str.c: Fix typo.
746
747 Tue Jun  7 00:14:09 2005  Ben Pfaff  <blp@gnu.org>
748
749         Make some code tolerant of reentry.  Should not be needed if other
750         code is correct but it is good to be generally tolerant.
751         
752         * error.c: (err_hcf) Set file_loc to null after free().
753
754         * output.c: (outp_done) Similar changes.
755
756         * str.c: (ds_destroy) Ditto.
757         
758 Tue Jun  7 00:10:20 2005  Ben Pfaff  <blp@gnu.org>
759
760         Continue work on bug 12859, plus some code cleanup.
761         
762         * data-list.c: (cmd_repeating_data) Replace `seen' bitmap by
763         boolean variables.  Don't try to compute starts_end, cont_end for
764         inline file.  Calculate length only after parsing variable
765         specifications.  Add proper transformation to list.
766         (realize_value) If the rpd_num_or_var has no value, return new
767         DEFAULT_MEMBER argument (for use with inline file).
768         (repeating_data_trns_proc) Pass default values.
769
770         * dfm-read.c: (dfm_close_reader) Only skip data if *not* still
771         open, and only if we actually started reading data.
772
773 Sun Jun  5 18:39:36 2005  Ben Pfaff  <blp@gnu.org>
774
775         Fix bug 11894.
776         
777         * output.c: (outp_read_devices) Fix message.
778
779 Fri May 27 12:34:43 WST 2005 John Darrington <john@darrington.wattle.id.au>
780         
781         * sort-prs.[ch] (newfiles), aggregate.c, sort.[ch]: Separated the guts 
782         of the sort algorithm from the parser for the SORT command.
783         
784         * rank.q: Added the parser for the RANK command.
785         
786 Thu May 26 12:29:21 2005  Ben Pfaff  <blp@gnu.org>
787
788         Fix bug 13192.
789
790         * sort.c: (sort_parse_criteria) Only set *saw_direction if
791         saw_direction is non-null.  Thanks to John Darrington for
792         reporting this bug.
793
794 Tue May 24 21:52:55 2005  Ben Pfaff  <blp@gnu.org>
795
796         * get.c: (mtf_processing) Handle case of a lookup table as the
797         active file.  Thanks to John Darrington for reporting this bug.
798
799 Wed May 25 10:27:02 WST 2005 John Darrington <john@darrington.wattle.id.au>
800         
801         * alloc.c alloc.h: (xcalloc) changed signature to imitate the
802         POSIX  calloc function.
803         
804         * crosstabs.q get.c vars-prs.c: Updated calls to xcalloc to
805         reflect new signature.
806
807         * sfm-read.c: Now much more robust in the face of badly formed
808         system files.
809
810 Mon May 23 11:57:31 WST 2005 John Darrington <john@darrington.wattle.id.au>
811
812         *sfm-read.c: Fixed some bugs regarding long string continuation
813         records, which the previous fix uncovered.
814
815 Sat May 21 12:48:34 WST 2005 John Darrington <john@darrington.wattle.id.au>
816
817         * sfm-read.c, sfmP.h:  Allow reading of system files when the 
818         case_size value in the header is -1.  Also changed some Errors to 
819         Warnings when reading system files.
820
821 Tue May 17 21:00:57 2005  Ben Pfaff  <blp@gnu.org>
822
823         * data-list.c: (data_list_trns_free) Don't free the argument
824         because cancel_transformations() will do that itself.
825         (data_list_source_destroy) Destroy the argument to
826         data_list_trns_free(), because it no longer does so itself.
827
828 Tue May 17 18:29:35 2005  Ben Pfaff  <blp@gnu.org>
829
830         * data-out.c: (format_and_round) Don't output leading `-' if value
831         rounds to zero.
832
833 Tue May 17 00:06:43 2005  Ben Pfaff  <blp@gnu.org>
834
835         Fix bug 11119.
836
837         * som.c: (output_encodings) If some cell in the table won't fit
838         with the horizontal or vertical headers, cancel those headers.
839
840         * som.h: (struct som_table_class) Add fits_width, fits_length,
841         set_headers members.
842
843         * tab.c: (tabi_fits_width) New function.
844         (tabi_fits_length) New function.
845         (tabi_set_headers) New function.
846         (global var tab_table_class) Add the new functions as appropriate
847         members.
848         
849 Mon May 16 22:34:06 2005  Ben Pfaff  <blp@gnu.org>
850
851         Fix rest of bug 13054.
852
853         * format.def: Fix EDATE, SDATE, ADATE, JDATE, QYR, MOYR, WKYR,
854         DATETIME, TIME system/portable file values.
855
856 Mon May 16 22:31:15 2005  Ben Pfaff  <blp@gnu.org>
857
858         * data-list.c: (parse_free) Use make_input_format().
859         
860         * data-out.c: (num_to_string) Use make_output_format().
861
862         * dictionary.c: (dict_create_var) Ditto.
863
864         * format.c: (global var f8_2) New var.
865         (make_input_format) New function.
866         (make_output_format) New function.
867
868         * get.c: (cmd_match_files) Use make_output_format().
869
870         * list.q: (cmd_list) Ditto.
871
872         * matrix-data.c: Ditto.
873
874         * sfm-read.c: (parse_format_spec) Check output specifier
875         thoroughly.
876
877         * tab.c: (tab_float) Use make_output_format().
878
879 Sun May 15 23:38:10 2005  Ben Pfaff  <blp@gnu.org>
880
881         Fix more of bug 13054.
882         
883         * format.def: FMT_A should allow 255-character output.  FMT_AHEX
884         should allow 510-character input and output.
885
886         * data-out.c: (num_to_string) Get rid of NEW_STYLE option.
887         (convert_E) Handle non-finite values.
888         (try_F) Rewrite.
889         (format_and_round) New function.
890         (convert_infinite) New function used by try_F() and convert_E().
891
892 Sun May 15 23:36:55 2005  Ben Pfaff  <blp@gnu.org>
893
894         Regularize string and buffer function names so that they make some
895         kind of sense.
896
897         * str.c: (mm_reverse) Rename buf_reverse().  Update all
898         references.
899         (mm_find_reverse) Rename buf_find_reverse().  Update all
900         references.
901         (mm_case_compare) Rename buf_compare_case().  Update all
902         references.
903         (st_compare_pad) Rename buf_compare_rpad().  Update all
904         references.
905         (str_compare_rpad) New function.
906         (st_bare_pad_copy) Rename buf_copy_str_rpad().  Update all
907         references.
908         (buf_copy_str_lpad) New function.
909         (st_bare_pad_len_copy) Rename buf_copy_rpad().  Update all
910         references.
911         (st_pad_copy) Rename str_copy_rpad().  Update all references.
912         (st_trim_copy) Rename str_copy_trunc().  Update all references.
913         (st_uppercase) Renamed str_uppercase().  Update all references.
914         
915 Sat May 14 08:22:26 WST 2005 John Darrington <john@darrington.wattle.id.au>
916
917         * dfm-read.c: Fixed polarity of test in dfm-close-reader.  Closes 
918         Bug #13082
919
920 Tue May 10 20:08:18 2005  Ben Pfaff  <blp@gnu.org>
921
922         * data-in.c: (data_in) Add assertion to check input specifier.
923
924         * data-out.c: (data_out) Add assertion to check output specifier.
925
926 Tue May 10 19:56:35 2005  Ben Pfaff  <blp@gnu.org>
927
928         Start to fix bug 13054.
929
930         * format.c: (check_input_specifier) Improve error message.
931         (check_input_specifier) Check F, COMMA, and DOLLAR formats for
932         valid decimal places.
933         (check_output_specifier) Ditto (but different criteria).
934         (convert_fmt_ItoO) Assert valid input and output specifiers.
935         Also, if input specifier has *any* decimal places, make the output
936         specifier 1 place wider.
937
938 Mon May  9 07:14:29 WST 2005 John Darrington <john@darrington.wattle.id.au>
939
940         * sysfile-info.c: Fixed bug [# 13024 ]
941
942 Sun May  8 13:52:12 2005  Ben Pfaff  <blp@gnu.org>
943
944         "Fix" bug 13021 by disabling FILE TYPE.  Eventually, we should
945         actually implement it.
946
947         * command.c: (FILE_TYPE_okay) Always return 1.
948
949         * command.def: Change FILE TYPE, END FILE TYPE into UNIMPL.
950
951         * file-type.c: Add prototypes to get rid of warnings.
952
953 Sun May  8 08:08:07 WST 2005 John Darrington <john@darrington.wattle.id.au>
954
955         * barchart.c box-whisker.c cartesian.c piechart.c plot-hist.c: Fixed 
956         more ISO/IEC 9899:1990 conformance issues.
957
958 Wed May  4 23:54:02 2005  Ben Pfaff  <blp@gnu.org>
959
960         Fix bug 12948.  See also new test in
961         tests/bugs/match-file-scratch.sh.
962         
963         * get.c: (mtf_merge_dictionary) Don't compact dictionary because
964         that deletes scratch variables that someone else might be using,
965         and because we can't reassign our sources' value indexes.
966         Instead, simply don't copy scratch variables into the master
967         dictionary.
968
969         * dictionary.c: (dict_compact_values) Delete variables from the
970         dictionary passed in, not from default_dict (!).
971
972 Tue May  3 22:25:17 2005  Ben Pfaff  <blp@gnu.org>
973
974         Improve hash.c comments, error-checking.
975         
976         * hash.c: (struct hsh_table) [NDEBUG] Add hash_ordered member.
977         (hsh_create) size == 0 should *not* return NULL!  Set
978         hash_ordered.
979         (hsh_clear) Set hash_ordered.
980         (locate_matching_entry) Check hash_ordered.
981         (hsh_rehash) Rename rehash().  Add assertion.  Set hash_ordered.
982         (hsh_data) Set hash_ordered.  Add const-ness to return value and
983         update all callers.
984         (hsh_sort) Ditto.       
985
986 Wed May  4 08:50:11 WST 2005 John Darrington <john@darrington.wattle.id.au>
987
988         * casefile.c: Removed unnecessary #include <valgrind/valgrind.h>
989
990 Tue May  3 19:14:48 WST 2005 John Darrington <john@darrington.wattle.id.au>
991
992         * copyleft.c: Updated copyright date.
993
994         * Makefile.am: Removed erroneous explicit "-lplot"
995
996         * examine.q oneway.q: Made these files conform to ISO/IEC 9899:1990
997
998 Tue May  3 16:20:31 WST 2005 John Darrington <john@darrington.wattle.id.au>
999
1000         * command.c command.def: Added description string for unimplemented commands.
1001
1002         * oneway.q: Sorted the hash tables before shipping out the results. Closes 
1003         bug [#12931].
1004
1005 Mon May  2 23:45:01 2005  Ben Pfaff  <blp@gnu.org>
1006
1007         Code improvements.
1008         
1009         * data-list.c:  (parse_fixed) Use lex_end_of_command().
1010         (parse_free) Ditto.
1011         (cmd_repeating_data) Set cont_end.num in right situations.
1012         (parse_repeating_data) Remove redundant test.
1013
1014 Mon May  2 23:37:19 2005  Ben Pfaff  <blp@gnu.org>
1015
1016         Partial fix for bug 12859.
1017         
1018         * data-list.c: (cmd_data_list) Add transformation properly in
1019         vfm_source == NULL case.
1020
1021 Mon May  2 23:27:28 2005  Ben Pfaff  <blp@gnu.org>
1022
1023         * lexer.c: (lex_error) Improve error messages.
1024
1025 Mon May  2 22:28:17 2005  Ben Pfaff  <blp@gnu.org>
1026
1027         * get.c: (cmd_match_files) Check token type before trying to match
1028         tokid.  Fixes bug 12923.
1029
1030 Mon May  2 22:16:51 2005  Ben Pfaff  <blp@gnu.org>
1031
1032         * flip.c: [HAVE_SYS_TYPES_H] Include <sys/types.h>.  Fixes bug
1033         12789.
1034
1035 Mon May  2 22:02:52 2005  Ben Pfaff  <blp@gnu.org>
1036
1037         * expressions/generate.pl: (get_token) Make use of /g
1038         backward-compatible with Perl 5.6.1.
1039
1040 Sun May  1 23:00:19 2005  Ben Pfaff  <blp@gnu.org>
1041
1042         * var-display.c: (cmd_variable_alignment) Fix memory leak.
1043         (cmd_variable_level) Ditto.
1044
1045 Sun May  1 22:49:04 2005  Ben Pfaff  <blp@gnu.org>
1046
1047         Hash table had buggy deletion function.  The fix required changing
1048         other functions to do probing in the required order.
1049
1050         * hash.c: (locate_matching_entry) Rewrite and change interface.
1051         (hsh_rehash) Rewrite to use locate_matching_entry().
1052         (hsh_probe) Ditto.
1053         (hsh_find) Ditto.
1054         (hsh_delete) Ditto.  Also, fix stupid bugs.
1055
1056 Sun May  1 22:24:58 2005  Ben Pfaff  <blp@gnu.org>
1057
1058         * dictionary.c: (dict_clone) Properly copy vectors.
1059
1060 Sun May  1 22:07:58 2005  Ben Pfaff  <blp@gnu.org>
1061
1062         New implementation of long variable names.  Each variable has a
1063         "normal" name, which may be up to 64 bytes long and which is used
1064         for all normal operations.  Variables may have a "short" name,
1065         which is limited to 8 bytes and used only for system and portable
1066         file input and output.
1067         
1068         Make tokid case-preserving.  Update most uses of tokid to treat it
1069         case-insensitively.
1070
1071         Update many commands to deal with long variable names.
1072
1073         * autorecode.c: (cmd_autorecode) Use strcasecmp() instead of strcmp().
1074
1075         * command.c: (cmd_parse) Ditto.
1076         (match_strings) Use toupper() before comparing characters.
1077         (conflicting_3char_prefixes) Use mm_case_compare() instead of
1078         memcmp().
1079         (cmd_match_words) Ditto.
1080
1081         * compute.c: (lvalue_parse) Use st_trim_copy() instead of
1082         strncpy().
1083
1084         * count.c: (struct cnt_var_info) Change n[] to fit long var name.
1085         Use st_trim_copy() instead of strcpy().
1086
1087         * data-in.c: (parse_enum) Use mm_case_compare() instead of
1088         memcmp().
1089
1090         * data-list.c: (struct dls_var_spec) Change name[] to fit long var
1091         name.
1092         (parse_free) Use st_trim_copy() instead of strcpy().
1093
1094         * descript.c: (struct dsc_var) Change z_name[] to fit long var
1095         name.
1096         (try_name) Use strcasecmp() instead of strcmp().
1097         (generate_z_varname) Use st_trim_copy() instead of strcpy().
1098         (descriptives_compare_dsc_vars) Use strcasecmp() instead of
1099         strcmp().
1100
1101         * dictionary.c: (struct dictionary) Removed `long_name_tab'
1102         member.
1103         (compare_long_names) Removed.
1104         (hash_long_name) Removed.
1105         (dict_create) Don't initialize `long_name_tab' member.
1106         (dict_clone) Copy short names into new dictionary. 
1107         (dict_clear) Don't clear `long_name_tab' member.
1108         (dict_get_varname_block) Removed.
1109         (dict_add_longvar_entry) Removed.
1110         (free_nte) Removed.
1111         (dict_destroy) Don't destroy `long_name_tab' member.
1112         (dict_create_var_from_short) Removed.
1113         (dict_create_var_x) Removed.
1114         (dict_create_var) Get rid of longname handling.
1115         Clear short name.
1116         (dict_clone_var) Get rid of longname parameter and longname
1117         handling.
1118         (dict_lookup_var) Get rid of longname handling.
1119         (dict_reorder_var) New function.
1120         (dict_rename_var) Clear short name.
1121         (dict_rename_vars) Get rid of longname handling.  Clear short
1122         names.
1123         (dict_create_vector) Support long vector names.
1124         (dict_lookup_vector) Use strcasecmp() instead of strcmp().
1125         (quasi_base27) Removed.
1126         (make_short_name) Removed.
1127         (compare_strings) New function.
1128         (hash_string) New function.
1129         (dict_assign_short_names) New function.
1130
1131         * file-handle.q: (get_handle_with_name) Use strcasecmp() instead
1132         of strcmp().
1133         (get_handle_for_filename) Support long handle names.
1134
1135         * file-type.c: (struct col_spec) Make `name' fit long var names.
1136         (cmd_file_type) Use strcasecmp() instead of strcmp().
1137
1138         * flip.c: (make_new_var) Rewrite.
1139         (flip_sink_write) Use st_trim_copy() instead of strncpy().
1140
1141         * format.c: (parse_format_specifier_name) Use mm_case_compare()
1142         instead of memcmp().
1143
1144         * get.c: (cmd_save_internal) Rephrase.
1145         (rename_variables) Drop test for identical variable name.
1146         (struct mtf_proc) Change `first', `last' to fit long var name.
1147
1148         * hash.c: (hsh_hash_case_string) New function for case-insensitive
1149         string hashing.
1150
1151         * lexer.c: (restore_token) Use st_trim_copy() instead of
1152         strncpy().
1153         (lex_get) Don't uppercase string when copying into tokid.
1154         (lex_put_back_id) Use st_trim_copy() instead of
1155         strncpy().
1156
1157         * list.q: (determine_layout) Consider length of variable names in
1158         choosing vertical layout.
1159
1160         * matrix-data.c: (cmd_matrix_data) Use strcasecmp() instead of
1161         strcmp().
1162         (string_to_content_type) Ditto.
1163
1164         * modify-vars.c: (compare_variables_given_ordering) Ditto.
1165         (struct var_renaming) Change `new_name' to fit long var name.
1166         (compare_var_renaming_by_new_name) Use strcasecmp() instead of
1167         strcmp().
1168
1169         * pfm-read.c: (read_variables) Disallow system variables in system
1170         files.
1171         (write_variables) Call dict_assign_short_names() and use
1172         short_name[] members.
1173
1174         * repeat.c: (internal_cmd_do_repeat) Use strcasecmp() instead of
1175         strcmp().
1176
1177         * sfm-read.c: (sfm_open_reader) Rewrite code for long variable
1178         map.  Reorder variables into same order as long variable map.
1179         (read_variables) Set short name.
1180
1181         * sfm-write.c: (sfm_open_writer) Call dict_assign_short_names().
1182         (write_variable) Use st_bare_pad_copy().
1183         (write_longvar_table) Rewrite.
1184
1185         * str.c: (mm_case_compare) New function.
1186
1187         * sysfile-info.c: (compare_vectors_by_name) Use strcasecmp()
1188         instead of strcmp().
1189
1190         * t-test.q: (tts_custom_groups) Remove redundant test.
1191         (tts_custom_pairs) Ditto.
1192
1193         * var.h: (struct variable) Change `name' to fit long var names.
1194         Remove `longname'.  Add `short_name' member.  Reorder some
1195         variables.
1196         (struct name_table_entry) Removed.
1197         (struct vector) Change `name' to fit long vector names.
1198
1199         * vars-atr.c: (var_is_valid_name) Allow long var names.
1200         (compare_var_names) Use strcasecmp() instead of strcmp().
1201         (compare_var_ptr_names) Ditto.
1202         (hash_var_name) Use hsh_hash_case_string().
1203         (hash_var_ptr_name) Ditto.
1204         (var_set_short_name) New function.
1205         (var_clear_short_name) New function.
1206         (var_set_short_name_suffix) New function.
1207
1208         * vars-prs.c: (parse_DATA_LIST_vars) Support long names.
1209         Use strcasecmp() instead of strcmp().
1210         (struct array_var_set) Removed `longname_tab'.
1211         (array_var_set_lookup_var_idx) Drop longname_tab support.
1212         (array_var_set_destroy) Don't destroy `longname_tab'.
1213         (var_set_create_from_array) Don't create `longname_tab'.
1214
1215         * vector.c: (cmd_vector) Use strcasecmp() instead of strcmp().
1216         Support long names.
1217
1218         * expressions/parse.c: (word_matches) Use mm_case_compare()
1219         instead of memcmp().
1220         (compare_strings) New function.
1221         (lookup_function) Use compare_strings() instead of strcmp().
1222         
1223 Sun May  1 22:07:43 2005  Ben Pfaff  <blp@gnu.org>
1224
1225         * algorithm.c: (move_element) New function.
1226
1227 Sun May  1 22:05:35 2005  Ben Pfaff  <blp@gnu.org>
1228
1229         * aggregate.c: (parse_aggregate_functions) Always initialize
1230         destvar.
1231
1232 Sun May  1 22:03:47 2005  Ben Pfaff  <blp@gnu.org>
1233
1234         * aggregate.c: (cmd_aggregate) Use dict_clone_var_assert().
1235
1236         * dictionary.c: (dict_clone) Ditto.
1237         (dict_clone_var_assert) New function.
1238
1239         * get.c: (mtf_merge_dictionary) Use dict_clone_var_assert().
1240
1241 Sun May  1 15:05:54 WST 2005 John Darrington <john@darrington.wattle.id.au>
1242
1243         * error.c: Added a string for the compiler version to the
1244         request_bug_report_and_abort function.
1245
1246         * groff_font.c, font.c: Removed manpage(1) style references from 
1247         comments, because RMS frowns upon them.
1248
1249 Thu Apr 28 18:52:06 2005  Ben Pfaff  <blp@gnu.org>
1250
1251         * expressions/parse.c: Improve previous fix for bug 12858 (LAG).
1252
1253 Fri Apr 29 09:28:00 WST 2005 John Darrington <john@darrington.wattle.id.au>
1254
1255         * expressions/parse.c: Added handler for OP_LAG_Vn and OP_LAG_Vs.  
1256         Fixed bug [#12858] .
1257
1258 Wed Apr 27 12:42:34 WST 2005 John Darrington <john@darrington.wattle.id.au>
1259
1260         * loop.c recode.c repeat.c: Fixed a couple of instances of SHORT_NAME_LEN 
1261         which should be LONG_NAME_LEN
1262
1263 Wed Apr 27 07:43:50 WST 2005 John Darrington <john@darrington.wattle.id.au>
1264
1265         * command.def echo.c:  Added the ECHO command.
1266
1267 Mon Apr 25 22:55:59 2005  Ben Pfaff  <blp@gnu.org>
1268
1269         Finish fixing MATCH FILES (bug 11677).
1270
1271         * get.c: (trim_dictionary) Rewrite in terms of drop_variables(),
1272         keep_variables(), rename_variables().
1273         (drop_variables) New function.
1274         (keep_variables) New function.
1275         (struct mtf_file) Rename `in' to `in_name'.  Add `in_var'.
1276         (cmd_match_files) Deal with in_var.  Use drop_variables(),
1277         keep_variables().  When IN is specified, require BY.  Set master
1278         variables after master dictionary is complete.  Add IN variables
1279         after master dictionary is complete.
1280         (mtf_free_file) Free `in_name'.
1281         (mtf_delete_file_in_place) Set in_var value to 0.
1282         (mtf_read_nonactive_records)  Rephrase.
1283         (mtf_processing) Support IN.  Rephrase.  Fix bugs.
1284         (mtf_merge_dictionary) Don't set master variables; we do that
1285         later now.
1286         (get_master) Don't insist that there's a master variable.
1287         
1288 Mon Apr 25 22:55:22 2005  Ben Pfaff  <blp@gnu.org>
1289
1290         Kluge to make some variable renaming sort of work.
1291         Needs real fix.
1292
1293         * dictionary.c: (dict_rename_var) Call dict_add_longvar_entry().
1294
1295 Mon Apr 25 22:52:28 2005  Ben Pfaff  <blp@gnu.org>
1296
1297         Add functions for comparing sets of variables between cases.
1298         Use the functions.
1299
1300         * case.c: (case_compare) New function.
1301         (case_compare_2dict) New function.
1302         
1303         * aggregate.c: (struct agr_proc) Remove `prev_break' member.  Add
1304         `break_case'.
1305         (cmd_aggregate) Nullify break_case.  Don't call
1306         initialize_aggregate_info().
1307         (agr_destroy) Destroy break_case.
1308         (aggregate_single_case) Rewrite.  Use case_compare().
1309         (dump_aggregate_info) Copy from break_case into output.
1310         (initialize_aggregate_info) Copy break_case from input.
1311
1312         * get.c: (mtf_compare_BY_values) Use case_compare_2dict().
1313
1314         * vfm.c: (equal_splits) Use case_compare().
1315
1316 Sat Apr 23 17:01:04 WST 2005 John Darrington <john@darrington.wattle.id.au>
1317
1318         * dictionary.c vars-prs.c sfm-write.c: Fixed some memory leaks
1319
1320 Sun Apr 17 23:08:15 2005  Ben Pfaff  <blp@gnu.org>
1321
1322         Start work on fixing MATCH FILES.
1323
1324         * get.c: (enum operation) Remove OP_MATCH.
1325         (trim_dictionary) Change return value to bool.  Don't support
1326         OP_MATCH.
1327         (struct mtf_file) Remove `first', `last' members.
1328         (struct mtf_proc) Add `first', `last' members.  Change mtf_case
1329         from `struct ccase *' to `struct ccase'.  Remove `by' member.
1330         (cmd_match_files) Essentially rewrite.
1331         (mtf_free) Don't free `by' member.  Destroy `mtf_case' member.
1332         (mtf_read_nonactive_records) mtf_ parameter is not unused.
1333         (mtf_processing) Ditto.  Also rephrase some code.
1334         (mtf_merge_dictionary) Rewrite for easy comprehension.  
1335
1336 Sun Apr 17 23:06:00 2005  Ben Pfaff  <blp@gnu.org>
1337
1338         * matrix-data.c: (wr_output_data) [DEBUGGING] Fix compilation
1339         error.
1340
1341         * q2c.c: (dump_token) [DEBUGGING] Fix compilation error.
1342         
1343 Thu Apr 14 2005 John Darrington
1344
1345         * var-display.c: New file.
1346
1347         * format.h var.h sfm-read.c sfm-write.c dictionary.c :  Added 
1348           display_width, measure and alignment parameters to variables.
1349
1350         * aggregate.c command.def compute.c count.c data-list.c descript.c
1351           dictionary.c dictionary.h expr-prs.c file-type.c flip.c get.c 
1352           lexer.c lexer.h loop.c modify-vars.c pfm-read.c recode.c repeat.c 
1353           sfm-read.c sfm-write.c sfm-write.h sfmP.h val-labs.c val.h var.h 
1354           vars-prs.c vector.c :  
1355               - Replaced literal constants representing maximum variable name 
1356                 length with macro definitions. 
1357               - Added support for long variable names.
1358               - Changed lexer such that it no longer makes tokens upper
1359                 case, but relies upon case insensitive behaviour of commands.
1360
1361 Mon Apr  4 22:27:34 2005  Ben Pfaff  <blp@gnu.org>
1362
1363         * aggregate.c: (parse_aggregate_functions) If dict_create_var()
1364         fails, don't dereference the resulting null pointer (bug 12427).
1365         Also, fix double free error.
1366
1367 Sat Mar 19 23:06:02 2005  Ben Pfaff  <blp@gnu.org>
1368
1369         * aggregate.c: (parse_aggregate_functions) Fix N_NO_VARS format.
1370         (accumulate_aggregate_info) Set int1 to 1 for SUM.
1371         (dump_aggregate_info) Only make SUM non-missing if there was at
1372         least one variate.
1373
1374 Sat Mar 19 14:48:19 2005  Ben Pfaff  <blp@gnu.org>
1375
1376         * aggregate.c: (dump_aggregate_info) Properly test whether the
1377         destination variable is numeric, when making the result
1378         system-missing for columnwise missing values.
1379
1380 Mon Mar 14 21:52:34 2005  Ben Pfaff  <blp@gnu.org>
1381
1382         * misc.h: Remove GCC specializations.
1383
1384 Mon Mar 14 21:07:23 2005  Ben Pfaff  <blp@gnu.org>
1385
1386         Make sort stable (bug 12313).
1387         
1388         * sort.c: Don't need to include some headers anymore.
1389         (static var min_buffers) New variable.
1390         (static var max_buffers) New variable.
1391         (static var allow_internal_sort) New variable.
1392         (cmd_sort_cases) Add test mode.
1393         (sort_execute) Rephrase.
1394         (do_internal_sort) Don't try internal sorting if
1395         allow_internal_sort is set.
1396         (struct external_sort) Renamed `initial_runs' to `runs' and
1397         updated all references.
1398         (macro MIN_BUFFER_TOTAL_SIZE_RECS) Removed.
1399         (macro MIN_BUFFER_SIZE_BYTES) Removed.
1400         (macro MIN_BUFFER_SIZE_RECS) Removed.
1401         (compare_initial_runs) Removed.
1402         (struct record_run) Add member `idx'.
1403         (write_initial_runs) Pass increasing values to process_case() as
1404         index.
1405         (process_case) Add `idx' parameter and use it to initialize new
1406         `idx' member.
1407         (allocate_cases) Limit allocated buffers to max_buffers.
1408         (compare_record_run) Use new `idx' member for last resort
1409         comparison, for stability.
1410         (end_run) Call casefile_sleep() on irs->casefile, to prevent
1411         running out of file descriptors.
1412         (struct merge_state) Removed.
1413         (merge) Don't need to allocate cases.  Always use MAX_MERGE_ORDER
1414         unless we have fewer runs left.  Always merge consecutive runs,
1415         for stability.  Return the final run.
1416         (mod) Removed.
1417         (choose_merge) New function.
1418         (merge_once) Rewritten.
1419
1420 Mon Mar 14 21:05:42 2005  Ben Pfaff  <blp@gnu.org>
1421
1422         * cmdline.c: (static var testing_mode) Move into
1423         parse_command_line().
1424         
1425 Mon Mar 14 21:05:13 2005  Ben Pfaff  <blp@gnu.org>
1426
1427         * algorithm.c: (remove_range) New function.
1428         (remove_element) New function.
1429
1430         * dictionary.c: (dict_delete_var) Use remove_element().
1431
1432         * flip.c: (cmd_flip) Ditto.
1433
1434 Sun Mar 13 22:52:05 2005  Ben Pfaff  <blp@gnu.org>
1435
1436         * file-handle.q: (struct file_handle) `open_mode' should not be
1437         const.
1438         
1439 Sun Mar 13 22:40:54 2005  Ben Pfaff  <blp@gnu.org>
1440
1441         First phase of making SORT CASES stable (bug 12313).
1442
1443         * sort.c: (struct indexed_case) New structure.
1444         (do_internal_sort) Rewrite to make internal sorting stable.
1445         (compare_case_dblptrs) Removed.
1446         (compare_indexed_cases) New function.
1447
1448 Sun Mar 13 22:38:40 2005  Ben Pfaff  <blp@gnu.org>
1449
1450         Clean-ups.
1451
1452         * casefile.c: (casereader_read_xfer_assert) New function.
1453
1454         * dictionary.c: (dict_compact_case) New function.
1455
1456         * flip.c: (struct flip_pgm) New member idx_to_fv.
1457         (cmd_flip) Initialize idx_to_fv member.
1458         (destroy_flip_pgm) Free idx_to_fv member.
1459         (flip_sink_write) Use struct flip_pgm member instead of case_sink
1460         member.
1461         (flip_sink_write) Ditto.
1462
1463         * vfm.c: (write_case) Use dict_compact_case() instead of
1464         compact_case().
1465         (compact_case) Removed.
1466         (storage_source_create) Removed `dict' parameter.  All references
1467         updated.
1468
1469         * vfm.h: (struct case_source) Removed `value_cnt' member.  All
1470         references removed.
1471         (struct case_sink) Removed `dict', `idx_to_fv' members.  All
1472         references removed.
1473
1474 Sun Mar 13 22:35:55 2005  Ben Pfaff  <blp@gnu.org>
1475
1476         More AGGREGATE fixes.
1477
1478         * aggregate.c: (accumulate_aggregate_info) Implement NMISS and
1479         NUMISS for strings.  Fix FOUT, POUT, FGT, FLT, FIN, FOUT for
1480         strings.
1481         (initialize_aggregate_info) Fix initialization for MIN, MAX for
1482         strings.
1483
1484 Sat Mar 12 23:26:21 2005  Ben Pfaff  <blp@gnu.org>
1485
1486         Start work on testing and debugging AGGREGATE.
1487
1488         * aggregate.c: (cmd_aggregate) Use discrete bool variables instead
1489         of a bit-map.  Require proper subcommand ordering.  Make OUTFILE
1490         subcommand mandatory.
1491         (parse_aggregate_functions) Check that PIN, POUT, FIN, FOUT
1492         functions' arguments are in the correct order and swap them if
1493         not.
1494         (accumulate_aggregate_info) Make SUM include weights.  Add various
1495         string functions.
1496         (dump_aggregate_info) Add various string functions.
1497         (initialize_aggregate_info) Initialize int1 for MIN, MAX.
1498
1499         * sort.c: (sort_parse_criteria) Add parameter for returning
1500         whether any directions were specified.  All callers updated.
1501
1502 Sun Mar 13 14:54:27 WST 2005 John Darrington <john@darrington.wattle.id.au>
1503
1504         * t-test.q: Fixed erroneous logic in compare_group_binary.
1505
1506 Sat Mar 12 13:29:21 2005  Ben Pfaff  <blp@gnu.org>
1507
1508         * split-file.c: (cmd_split_file) Ignore LAYERED and SEPARATE
1509         keywords (bug 11628).
1510
1511 Sat Mar 12 13:17:12 2005  Ben Pfaff  <blp@gnu.org>
1512
1513         * vfm.c: (procedure_with_splits) Fix bug 11492: end_func() must be
1514         called *before* close_active_file().
1515
1516 Sat Mar 12 12:20:57 2005  Ben Pfaff  <blp@gnu.org>
1517
1518         * file-handle.q: (struct file_handle) Change open_mode from
1519         character pointer to 3-char array, for safety.  Updated all
1520         references.
1521
1522 Sat Mar 12 12:15:49 2005  Ben Pfaff  <blp@gnu.org>
1523
1524         Thanks to Ben Kujala <bkujala@oregonchildcare.org> for reporting
1525         these bugs.
1526         
1527         * pfm-read.c: (read_header) Improve error message for many cases
1528         in which the input is not actually a portable file.
1529
1530         * file-handle.q: (fh_open) When we give an error message, actually
1531         return NULL.
1532
1533 Fri Mar 11 11:50:30 2005  Ben Pfaff  <blp@gnu.org>
1534
1535         * format.c: (check_common_specifier) New function for checks
1536         common to check_input_specifier() and check_output_specifier().
1537         (check_input_specifier) Use check_common_specifier().
1538         (check_output_specifier) Use check_common_specifier().
1539         (check_string_specifier) Removed.
1540         (check_specifier_type) New function.
1541         (check_specifier_width) New function.
1542         (get_format_var_width) Fix bug.
1543
1544         * formats.c: (internal_cmd_formats) Only accept numeric variables.
1545
1546         * lexer.c: (check_id) Rename lex_id_to_token(), make public,
1547         update all references.  Make case-insensitive.
1548
1549         * pfm-read.c: Essentially rewrite the whole file.  Now much
1550         cleaner.
1551
1552         * print.c: (check_string_width) New function.
1553         (fixed_parse_compatible) Use check_string_width(),
1554         check_specifier_type().
1555         (dump_fmt_list) Ditto.
1556
1557         * str.c: (st_trim_copy) New function.
1558         (st_uppercase) New function.
1559
1560         * vars-atr.c: (var_is_valid_name) New function.
1561         
1562         * expressions/parse.c: (type_coercion_core) Use
1563         check_specifier_type().
1564         
1565 Fri Mar 11 11:31:24 2005  Ben Pfaff  <blp@gnu.org>
1566
1567         * expressions/evaluate.c: (cmd_debug_evaluate) Fix memory leaks.
1568
1569         * expressions/parse.c: (no_match) Ditto.
1570
1571 Wed Mar  9 09:54:27 2005  Ben Pfaff  <blp@gnu.org>
1572
1573         * Makefile.am: (pspp_LDADD) Add libgsl-extras.a.
1574
1575         * expressions/helpers.c: (struct func_params) Removed.
1576         (generalized_idf) Removed.
1577         (cdf_beta) Removed.
1578         (idf_beta) Removed.
1579         (idf_fdist) Use gslextras_cdf_beta_Pinv() instead of idf_beta().
1580
1581         * expressions/operations.def: Implement IDF.BETA, CDF.BINOM,
1582         CDF.GEOM, CDF.HYPER, CDF.NEGBIN, CDF.POISSON using gsl-extras.
1583         Implement SIG.F, which I had overlooked previously.
1584
1585 Tue Mar  8 12:47:53 WST 2005 John Darrington <john@darrington.wattle.id.au>
1586
1587         * command.c command.def glob.[ch] cmdline.c: Made DEBUG cmds
1588         available only in testing mode.
1589
1590 Sun Mar  6 23:25:40 2005  Ben Pfaff  <blp@gnu.org>
1591
1592         * data-in.c: Use `bool' throughout, where relevant.
1593
1594 Sun Mar  6 19:52:22 2005  Ben Pfaff  <blp@gnu.org>
1595
1596         DATA LIST with free-field formats should not have implied decimal
1597         places (bug 12035).  Also clean up data-in.c a bit.
1598
1599         * data-in.h: (enum) Add DI_IMPLIED_DECIMALS.
1600
1601         * data-in.c: (apply_implied_decimals) New function.
1602         (parse_numeric) Don't adjust exponent if DI_IMPLIED_DECIMALS not
1603         set.  Also, get rid of gotos.
1604         (parse_Z) Use apply_implied_decimals() if the field doesn't
1605         contain a decimal point.
1606         (parse_N) Use apply_implied_decimals().
1607         (parse_IB) Ditto.
1608         (parse_PIB) Ditto.
1609         (parse_P) Ditto.
1610         (parse_PK) Ditto.
1611         (to_roman) Removed.
1612         (parse_enum) New function.
1613         (macro CHAR_IS_ROMAN) Removed.
1614         (macro ROMAN_VALUE) Removed.
1615         (parse_month) Use parse_enum().
1616         (parse_weekday) Use parse_enum().
1617         (parse_DATETIME) Use long for weekday.
1618
1619         * data-list.c: (read_from_data_list_fixed) Use
1620         DI_IMPLIED_DECIMALS.
1621
1622 Sun Mar  6 17:07:20 2005  Ben Pfaff  <blp@gnu.org>
1623
1624         When the lexer sees something like `-5' in the input, it has to
1625         decide whether it's a negative numeric constant token or a '-'
1626         token followed by a positive numeric constant token.  It always
1627         decides on the former, and then the parser can call
1628         lex_negative_to_dash() if it wants the latter.  However, this
1629         doesn't work for the case of `-0', because negative zero is
1630         (portably) indistinguishable from positive zero.  So now we divide
1631         T_NUM into two tokens, T_POS_NUM and T_NEG_NUM, to make the
1632         distinction clear.  This requires a little bit of extra effort,
1633         because there were several references to T_NUM in the code base.
1634         
1635         * lexer.c: (lex_get) Use T_NEG_NUM and T_POS_NUM to distinguish
1636         positive and negative numeric constants.
1637         (lex_double_p) Renamed lex_is_number().  Changed return type to
1638         bool.  Updated all relevant references to T_NUM to instead use
1639         this function.
1640         (lex_double) Renamed lex_number().  All references updated.
1641         (lex_integer_p) Renamed lex_is_integer().  Changed return type to
1642         bool.  All references updated.
1643         (lex_token_representation) Understand T_NEG_NUM and T_POS_NUM.
1644         (lex_negative_to_dash) Ditto.
1645         (dump_token) Ditto.
1646         
1647         * lexer.h: (enum) Add T_POS_NUM, T_NEG_NUM.  Remove T_NUM.
1648
1649 Sun Mar  6 22:09:20 2005  Ben Pfaff  <blp@gnu.org>
1650
1651         * expressions/operations.def: (NUMBER) Use DI_IMPLIED_DECIMALS.
1652
1653 Sun Mar  6 19:33:24 2005  Ben Pfaff  <blp@gnu.org>
1654
1655         * expressions/operations.def: (VEC_ELEM_NUM) Treat user-missing
1656         values as system-missing.
1657
1658         * expressions/parse.c: (parse_vector_element) Fix order of
1659         arguments in call to expr_allocate_binary().
1660
1661 Sun Mar  6 17:51:05 2005  Ben Pfaff  <blp@gnu.org>
1662
1663         * expressions/optimize.c: (optimize_tree) Fix optimization bug for
1664         x**2.
1665
1666         * expressions/parse.c: (type_coercion_core) Set *node to NULL on
1667         failure, as indicated by function comment.
1668         (parse_binary_operators) Always return NULL on type_coercion()
1669         failure.  Should have been doing this anyway, but bug in
1670         type_coercion_core() filtered through.
1671         (parse_add) Fix typo in user message.
1672         (parse_primary) Understand T_NEG_NUM and T_POS_NUM.
1673
1674 Sun Mar  6 10:47:13 2005  Ben Pfaff  <blp@gnu.org>
1675
1676         * expressions/operations.def: Add VALUE function.
1677
1678         * expressions/parse.c: (parse_function) Need an unary composite
1679         node for variables in A TO B, not a variable node.  Use
1680         allocate_unary_variable().
1681         (parse_primary) Use allocate_unary_variable().
1682         (allocate_unary_variable) New function.
1683
1684 Thu Mar  3 23:53:32 2005  Ben Pfaff  <blp@gnu.org>
1685
1686         * expressions/PSPP_expressions.pm: Renamed it back to generate.pl
1687         but fixed the real problem that was preventing the build from a
1688         separate directory.  I liked it my way better ;-)
1689         
1690 Thu Mar  3 23:17:51 2005  Ben Pfaff  <blp@gnu.org>
1691
1692         * expressions/parse.c: (expr_parse) Fix parameter type.  Thanks to
1693         John Darrington <john@darrington.wattle.id.au> for reporting this
1694         bug.
1695
1696 Thu Mar  3 22:10:25 WST 2005 John Darrington <john@darrington.wattle.id.au>
1697
1698         * expressions/Makefile.am expressions/evaluate.h.pl
1699           expressions/evaluate.inc.pl expressions/operations.h.pl
1700           expressions/optimize.inc.pl expressions/parse.inc.p:
1701
1702           Renamed generate.pl to PSPP_expressions.pm and adjusted *.pl
1703           to suit. 
1704
1705           Fixed everything so that it can be built from an arbitrary
1706           directory.
1707         
1708 Thu Mar  3 22:08:35 WST 2005 John Darrington <john@darrington.wattle.id.au>
1709
1710         * Makefile.am : Fixed up CLEANFILES target.
1711
1712 Mon Feb 28 23:49:56 2005  Ben Pfaff  <blp@gnu.org>
1713
1714         * str.h: Changed `struct len_string' to `struct fixed_string', a
1715         more accurate name.  Updated all references.
1716
1717 Mon Feb 28 23:35:30 2005  Ben Pfaff  <blp@gnu.org>
1718
1719         Redo calendar support.  Should now be bug-for-bug compatible.
1720         
1721         * calendar.c: New file.
1722
1723         * calendar.h: New file.
1724
1725         * data-in.c: Use new calendar functions.
1726         (parse_sign) Change sense of return value.
1727         (calendar_error) New function.
1728         (ymd_to_ofs) New function.
1729         (ymd_to_date) New function.
1730         (parse_DATE) Use new function.
1731         (parse_ADATE) Ditto.
1732         (parse_EDATE) Ditto.
1733         (parse_SDATE) Ditto.
1734         (parse_JDATE) Ditto.
1735         (parse_QYR) Ditto.
1736         (parse_MOYR) Ditto.
1737         (parse_WKYR) Ditto.
1738         (parse_TIME) Ditto.
1739         (parse_DTIME) Ditto.
1740         (parse_DATETIME) Ditto.
1741
1742         * data-out.c: (convert_date) Use new calendar functions.
1743
1744         * error.c: (err_vmsg) Changed interface to be more sensible.
1745         Updated all callers.
1746         (dump_message) Don't double new-lines (why did we do this
1747         anyway?).
1748
1749 Mon Feb 28 23:30:25 2005  Ben Pfaff  <blp@gnu.org>
1750
1751         * sfmP.h: (macro flt64) Moved here from pref.h.orig.
1752         (macro FLT64_MAX) Moved here from pref.h.orig.
1753
1754 Mon Feb 28 23:28:01 2005  Ben Pfaff  <blp@gnu.org>
1755
1756         * set.q: Support SET EPOCH.
1757         (static var set_epoch) New var.
1758         (aux_stc_custom_epoch) New function.
1759         (stc_custom_epoch) New function.
1760         (get_epoch) New function.
1761         (stc_custom_pager) [USE_INTERNAL_PAGER] Fix bug.
1762
1763         * format.c: Make it possible just to check whether a specifier is
1764         valid without emitting an error message.
1765         (parse_format_specifier_name) Change interface, update all
1766         callers.
1767         (check_input_specifier) Ditto.
1768         (check_output_specifier) Ditto.
1769         (parse_format_specifier) Ditto.
1770
1771 Mon Feb 28 23:24:08 2005  Ben Pfaff  <blp@gnu.org>
1772
1773         * command.def: Add DEBUG POOL.
1774
1775         * pool.c: (pool_destroy) Fix bug in deleting this pool from its
1776         parent.
1777         (pool_clear) Properly account for size of pool gizmo.
1778         (pool_realloc) Ditto.
1779         (pool_clone) New function.
1780
1781         * pool.h: Mark our allocation functions MALLOC_LIKE.
1782
1783 Mon Feb 28 23:21:26 2005  Ben Pfaff  <blp@gnu.org>
1784
1785         * Makefile.am: Move many definitions into new top-level
1786         Make.build.  Add expressions to SUBDIRS.  Add calendar.c,
1787         calendar.h.  Remove expr-evl.c, expr-opt.c expr-prs.c, expr.h,
1788         exprP.h, expr.def.
1789
1790         * case.c: (case_resize) New function.
1791         (case_swap) New function.
1792
1793         * casefile.c: Include mkfile.h.
1794
1795 Fri Feb 25 21:11:35 WST 2005 John Darrington <john@darrington.wattle.id.au>
1796
1797         * sfm-read.c: Fixed a buglet which caused a crash when trying
1798         to read a non-existent file.
1799
1800 Sun Feb 13 16:11:13 2005  Ben Pfaff  <blp@gnu.org>
1801
1802         Fix bug 11955.
1803
1804         * aggregate.c: (parse_aggregate_functions) Code cleanup.
1805         Important part: get rid of spurious copying of function->format to
1806         destvar->print and destvar->write.
1807
1808 Fri Feb 11 00:08:36 2005  Ben Pfaff  <blp@gnu.org>
1809
1810         Fix bug 11916, which was confusing a variable's `index' member
1811         with the variable's position in a var_set.  Although these are
1812         usually the same, they are not for array `var_set's.
1813         
1814         Took advantage of this bug as an opportunity to clean up and
1815         rewrite parse_var_set_vars().
1816
1817         * vars-prs.c: (parse_vs_variable_idx) New function.
1818         (parse_vs_variable) Reimplement in terms of
1819         parse_vs_variable_idx().
1820         (parse_var_idx_class) New function.
1821         (add_variable) New function.
1822         (add_variables) New function.
1823         (parse_var_set_vars) Rewritten.
1824         (struct var_set) Change `lookup_var' member that returns a
1825         variable into `lookup_var_idx' member that returns an int.
1826         Updated the var set implementations in obvious corresponding ways.
1827         Used compare_var_ptr_names(), hash_var_ptr_name() just added.
1828         
1829 Fri Feb 11 00:06:03 2005  Ben Pfaff  <blp@gnu.org>
1830
1831         Use our global variable compare & hash functions and give them
1832         better names.  Add similar functions for dealing with double
1833         pointers to variables.
1834         
1835         * vars-atr.c: (compare_variables) Renamed compare_var_names().
1836         (hash_variable) Renamed hash_var_name().
1837         (compare_var_ptr_names) New function.
1838         (hash_var_ptr_name) New function.
1839         
1840         * t-test.q: (cmd_t_test) Use global compare_var_names(),
1841         hash_var_name().
1842         (compare_var_name) Removed.
1843         (hash_var_name) Removed.
1844
1845 Fri Feb 11 00:04:39 2005  Ben Pfaff  <blp@gnu.org>
1846
1847         Fix dictionary bug.
1848         
1849         * dictionary.c: (compare_variable_dblptrs) Rename
1850         compare_var_ptrs() and fix it to properly dereference the double
1851         pointers.
1852
1853 Mon Feb  7 09:58:15 WST 2005 John Darrington <john@darrington.wattle.id.au>
1854
1855         crosstabs.q examine.q oneway.q q2c.c:  Added a q2c feature to 
1856         declare subcommands as mandatory.  Closed bug #11843
1857
1858 Sat Feb  5 20:35:10 WST 2005 John Darrington <john@darrington.wattle.id.au>
1859         
1860         * getline.c command.[ch] command.def:  Added (very rudimentary)
1861         support for line  completion when in interactive mode.  Partially 
1862         addresses bug #11693
1863         
1864 Mon Jan 31 09:52:51 WST 2005 John Darrington <john@darrington.wattle.id.au>
1865
1866         * examine.q factor_stats.c oneway.q output.c pfm-read.c: Fixed some
1867         problems revealed by valgrind.
1868
1869
1870 Wed Jan 26 11:44:11 WST 2005 John Darrington <john@darrington.wattle.id.au>
1871
1872         * set.q: Affixed a fix to the previous fix such that we'll be OK now
1873         whether or not PAGER is set.
1874
1875 Wed Jan 26 09:25:54 WST 2005 John Darrington <john@darrington.wattle.id.au>
1876
1877         * set.q: Copied the string produced by getenv("PAGER") thus avoiding
1878         "invalid free" errors.  Hopefully fixes bug #11722
1879
1880         * compute.c expr-prs.c: Check that lvalues are populated before 
1881         attempting to destroy them.  Closes bug #11676
1882
1883 Tue Jan 25 21:01:43 WST 2005 John Darrington <john@darrington.wattle.id.au>
1884
1885         * aggregate.c: Initialised the complete agr_proc structure.
1886         Closes bug #11675
1887
1888
1889 Sun Jan 23 23:02:21 2005  Ben Pfaff  <blp@gnu.org>
1890
1891         * print.c: (print_trns_free) Close the dfm writer if there is one,
1892         fixing a memory leak.
1893
1894 Mon Jan 24 12:24:36 WST 2005 John Darrington <john@darrington.wattle.id.au>
1895
1896         * glob.c oneway.q q2c.c t-test.q vfm.c: Still *more* memory leaks 
1897         fixed.
1898
1899
1900 Fri Jan 21 19:54:14 WST 2005 John Darrington <john@darrington.wattle.id.au>
1901
1902         * linked-list.[ch] Added
1903
1904         * examine.q file-handle.[hq] font.h glob.c groff-font.c postscript.c 
1905           set.q:    Yet more memory leaks
1906
1907 Tue Jan 18 23:12:40 WST 2005 John Darrington <john@darrington.wattle.id.au>
1908
1909         * t-test.q examine.q : More memory leaks fixed.
1910
1911 Tue Jan 18 19:26:59 WST 2005 John Darrington <john@darrington.wattle.id.au>
1912
1913         * examine.q  factor_stats.[ch] get.c pfm-read.c: Plugged numerous
1914         memory leaks.
1915
1916 Mon Jan 10 14:43:45 WST 2005 John Darrington <john@darrington.wattle.id.au>
1917
1918         * ascii.c cartesian.c casefile.c chart.h devind.c 
1919           examine.q frequencies.q
1920           html.c output.h piechart.c plot-chart.c plot-hist.c
1921
1922           Integrated the chart rendering into the output stream
1923           (currently only works for html).
1924           
1925           Removed gratuitous use of ifndef NO_CHARTS, and replaced with
1926           dummy-chart.c for compiling without charts.
1927
1928         * mkfile.[ch] Created.  
1929
1930         * som.[ch] tab.[ch]: Changed name of som_table to som_entity
1931         Added type element so we can tell if it's a chart or a table.
1932
1933         * chart.h examine.q piechart.c plot-chart.c plot-hist.c: changed the 
1934         API of charts to be more like that of tables.
1935
1936 Thu Jan 13 21:00:02 WST 2005 John Darrington <john@darrington.wattle.id.au>
1937
1938         * casefile.c main.c: Moved the SIGINT handler from casefile.c to
1939         main.c. Removed the handler for SIGQUIT.
1940
1941 Mon Jan 10 14:43:45 WST 2005 John Darrington <john@darrington.wattle.id.au>
1942
1943         * casefile.c: Added a signal handler to delete temp files on 
1944         SIGINT and SIGQUIT
1945
1946         * permissions.c Inhibited the PERMISSIONS command when SAFER is on.
1947
1948         * command.def Added a lot more unimplemented commands.
1949
1950         * copyleft.[ch] cmdline.c Moved legal information to copyleft.c
1951
1952 Sat Jan  8 23:58:34 2005  Ben Pfaff  <blp@gnu.org>
1953
1954         * sort.c: (compare_initial_runs) Needed additional level of
1955         dereferencing.
1956         (merge_once) Fix plenty of stupid mistakes.
1957
1958 Sat Jan  8 23:55:27 2005  Ben Pfaff  <blp@gnu.org>
1959
1960         * casefile.c: (casefile_sleep) Need to flush_buffer() after
1961         calling casefile_to_disk() or we will lose the last block in the
1962         file if the casefile started out as disk-based.
1963         (casefile_get_reader) Initialize reader->destructive to 0.
1964         (cmd_debug_casefile) Add new test pattern.
1965         (test_casefile) Define new test pattern to make sure
1966         casefile_sleep() works properly.
1967
1968 Fri Jan  7 08:00:05 WST 2005 John Darrington <john@darrington.wattle.id.au>
1969
1970         * Makefile.am chart.[ch]  histogram.[ch] piechart.c (Modified);
1971           plot-hist.c plot-chart.c (Added) Reorganised these files in an
1972           attempt to seperate the creation and processing of charts from their
1973           actuall renedering.
1974
1975         * examine.q frequencies.q generated charts conditional upon the NO_CHARTS
1976           macro.
1977
1978 Thu Jan  6 18:48:58 WST 2005 John Darrington <john@darrington.wattle.id.au>
1979
1980         * main.c Added a signal handler for SIGFPE
1981
1982         * sort.c Somewhat more robust fix to the previous entry.
1983
1984 Wed Jan  5 21:23:31 2005  Ben Pfaff  <blp@gnu.org>
1985
1986         * sort.c: (merge) Fix assertion for proper Huffman merge pattern:
1987         0 == 1 modulo 1.  See Knuth 5.4.9 (vol. 3, 2nd ed.,
1988         pp. 361).  Thanks to John Darrington <john@cellform.com.au> for
1989         reporting the bug.
1990
1991 Wed Jan  5 22:42:26 WST 2005 John Darrington <john@darrington.wattle.id.au>
1992
1993         * case.h Fixed bug # 11307
1994         
1995 Wed Jan  5 08:30:48 WST 2005 John Darrington <john@darrington.wattle.id.au>
1996
1997         * val-labs.c Fixed bug which caused a crash if VALUE LABELS had
1998         a trailing slash.
1999
2000 Mon Jan  3 17:44:37 2005  Ben Pfaff  <blp@gnu.org>
2001
2002         * pfm-read.c: (read_variables) Remove direct manipulation of
2003         v->aux, which is no longer needed.  Fixes bug 11483.
2004
2005 Sat Jan  1 19:01:16 WST 2005 John Darrington <john@darrington.wattle.id.au>
2006
2007         * data-list.c Fixed a bug in parsing delimiters.
2008
2009         * group.c vars-atr.c Fixed buglet in hash/compare functions for alpha
2010         values.
2011
2012         * percentiles.c Properly handled calculation of Tukey hinges where
2013         the number of data is small.
2014
2015         * oneway.q Used the generic value_to_string function for independent
2016         variable instead of trying to do it ourselves.
2017
2018         * box-whisker.c Fixed a buglet which caused a crash if the number of
2019         data was zero
2020
2021
2022 Fri Dec 31 16:47:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
2023
2024         * examine.q box-whisker.c chart.h Implemented boxplots in EXAMINE
2025
2026         * percentiles.c Fixed some bugs when calculating percentiles when
2027         there's a small number of cases.
2028
2029 Wed Dec 29 08:18:08 WST 2004 John Darrington <john@darrington.wattle.id.au>
2030
2031         * percentiles.[ch] Added. Calculates percentiles and Tukey hinges
2032
2033         * examine.q factor_stats.[ch]  Added calculation of percentiles
2034
2035 Fri Dec 24 15:09:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
2036
2037         * t-test.q Fixed bug #11227 Made t-test work when the independent
2038         variable is alpha
2039
2040 Sat Dec 11 11:43:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
2041
2042         * factor_stats.c Fixed calculation of trimmed mean under various
2043         special conditions.
2044
2045 Sat Dec  4 17:14:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
2046
2047         * histogram.c chart.[ch] factor_stats.c frequencies.q
2048
2049         Added code to calculate sensible histogram ranges and limits.
2050
2051 Thu Dec  2 13:37:43 WST 2004 John Darrington <john@darrington.wattle.id.au>
2052
2053         * chart.h Updated to reflect many API changes.
2054
2055         * cartesian.c chart.c Moved the definitions of chart_write_{xy}scale from 
2056         cartesian.c and into chart.c
2057
2058         * factorstats.[ch] Added the histogram calculations
2059
2060         * casefile.c Removed an unused variable.
2061
2062         * frequencies.q examine.q histogram.c  Reworked the API for 
2063         histograms.
2064
2065         * piechart.c  Revised the API for piecharts.
2066
2067         * var.h  Moved the definitions of freq_tab and freq out of var.h
2068         and into frequencies.q where they belong.
2069         
2070 Tue Nov 30 21:10:20 2004  Ben Pfaff  <blp@gnu.org>
2071
2072         * flip.c: (flip_file) Check for off_t separately from fseeko(),
2073         using AC_TYPE_OFF_T.
2074
2075 Tue Nov 30 08:47:41 2004  Ben Pfaff  <blp@gnu.org>
2076
2077         * flip.c: (flip_file) If fseeko() is not available, use long int
2078         for off_t.  Thanks to "Marshall DeBerry" <mdb@radix.net> for
2079         reporting the problem.
2080
2081 Mon Nov 29 12:20:59 WST 2004 John Darrington <john@darrington.wattle.id.au>
2082
2083         * examine.q factor_stats.[ch] Changed stderr to se_mean to avoid
2084         conflict with stdio.
2085
2086 Sun Nov 21 10:32:41 WST 2004 John Darrington <john@darrington.wattle.id.au>
2087
2088         * var-labs.c (var_to_string) Now returns null if the variable is null
2089
2090         * value-labels.c (value_to_string) Made it return null if either the 
2091         value or the variable is null.
2092
2093         * hash.c (hsh_clear) Fixed a buglet.
2094
2095         * examine.q  factor_stats.[ch] Largely  rewrote, because I'd started 
2096         with  the wrong model.
2097
2098         * casefile.[ch] Added a function to return the casereader.case_idx 
2099         member
2100
2101         * examine.q  Implemented the extreme values results.
2102
2103 John Darrington <john@darrington.wattle.id.au>
2104
2105         * settings.h set.c glob.[ch] frequencies.q q2c.c error.c lexer.[ch] 
2106           output.[ch] getline.c 
2107
2108           Plugged some memory leaks
2109
2110 Mon Nov 15 23:47:40 2004  Ben Pfaff  <blp@gnu.org>
2111
2112         Adopt GSL random number generators, paving the way for providing
2113         the complete suite of random number generators on expressions.
2114         
2115         * Makefile.am: Remove random.c, random.h.
2116
2117         * random.c: Removed.
2118
2119         * random.h: Removed.
2120
2121         * algorithm.c: (algo_default_random) Use GSL functions.
2122
2123         * casefile.c: (test_casefile) Use GSL RNG functions.
2124
2125         * expr-evl.c: (expr_evaluate) Use GSL RNG functions for OP_NORMAL,
2126         OP_UNIFORM.
2127
2128         * sample.c: (cmd_sample) Use GSL RNG functions.
2129         (sample_trns_proc) Ditto.
2130
2131         * set.q: (static var set_seed) Removed.
2132         (static var seed_flag) Removed.
2133         (static var rng) New variable.
2134         (aux_stc_custom_seed) No seed value anymore, don't print anything.
2135         (stc_custom_seed) Use new seed functions.
2136         (seed_is_set) Removed.
2137         (get_rng) New function that composes the entire external
2138         interface.
2139         (set_rng) New function.
2140         (random_seed) New function.
2141
2142 Mon Nov 15 22:08:25 2004  Ben Pfaff  <blp@gnu.org>
2143
2144         * expr-evl.c: (expr_evaluate) Fix XDATE.JDAY formula.  Thanks to
2145         John Darrington <john@darrington.wattle.id.au> for reporting this
2146         bug.
2147
2148 Tue Nov 16 13:19:18 WST 2004 John Darrington <john@darrington.wattle.id.au>
2149
2150         * permissions.c command.def Added the PERMISSIONS command
2151
2152 Mon Nov 15 01:33:32 2004  Ben Pfaff  <blp@gnu.org>
2153
2154         * q2c.c: (dump_header) Don't try to emit #includes at very top of
2155         output file because that will precede #include <config.h>, which
2156         is bad.
2157         (main) Add needed headers to /* (header) */ code.
2158
2159 Mon Nov 15 01:21:36 2004  Ben Pfaff  <blp@gnu.org>
2160
2161         Instead of making system or portable file readers responsible for
2162         dropping and reordering variables, make them read full cases and
2163         let the caller take care of any changes.
2164
2165         * get.c: New "case map" structure to handle this.  Use for GET,
2166         IMPORT, MATCH FILES.  Essentially rewrite the whole file.
2167
2168         * pfm-read.c: (pfm_read_case) Read into provided case.  Signature
2169         changed appropriately.
2170
2171         * sfm-read.c: (sfm_read_case) Ditto.
2172
2173 Mon Nov 15 00:47:45 2004  Ben Pfaff  <blp@gnu.org>
2174
2175         Decided that case_serialize() and case_unserialize() were too
2176         abstract.  Also we need a couple more functions to avoid excessive
2177         copying for data in/out fast paths.
2178
2179         * case.c: (case_serial_size) Removed.
2180         (case_serialize) Rename case_to_values() and make its argument
2181         explicitly an array of union values.
2182         (case_unserialize) Rename case_from_values() and make its argument
2183         explicitly an array of union values.
2184         (case_data_all) New function.
2185         (case_data_all_rw) New function.
2186
2187         * casefile.c: (struct casefile) Change buffer from array of
2188         unsigned char to array of union value for better accuracy.
2189         Redefine buffer_used and buffer_size in terms of values, not
2190         bytes.  Remove case_size because it is now redundant with
2191         value_cnt.  Fix up all references to these members.
2192
2193 Mon Nov 15 00:45:46 2004  Ben Pfaff  <blp@gnu.org>
2194
2195         * barchart.c: (struct subcat) Make `label' member const to silence
2196         GCC warning with -Wwrite-strings.
2197
2198         * cartesian.c: (struct dataset) Ditto.
2199
2200         * case.c: Don't re-define NDEBUG if already defined.
2201         Add lots of comments.
2202
2203         * str.c: Fix includes.
2204
2205         * crosstabs.q: Fix includes.
2206
2207         * examine.q: Fix includes.  Fix GCC warning about unused
2208         variables.
2209         
2210         * frequencies.q: (stat macro) Removed and replaced where used by
2211         its expansion.
2212
2213         * list.q: Fix includes.
2214
2215         * oneway.q: Fix includes.
2216
2217         * piechart.c: Fix includes.  Only define M_PI if not already
2218         defined.
2219
2220         * sfm-read.c: (bswap) New function.
2221         (bswap_int32) Write in terms of bswap.
2222         (bswap_flt64) Ditto.
2223
2224         * str.c: (ds_data) Add external definition here, needed because
2225         str.h has only an `extern inline' version.
2226
2227         * value-labels.c: Fix includes.
2228
2229 Mon Nov 15 00:40:55 2004  Ben Pfaff  <blp@gnu.org>
2230
2231         Instead of providing a system or portable file writer with a raw
2232         case in the format needed for output, provide it with a regular
2233         case.  The writer takes care of any needed translation.
2234
2235         * aggregate.c: Adopt new scheme for AGGREGATE.
2236         (struct agr_proc) sfm_agr_case member removed.
2237         (write_case_to_sfm) Removed because the new interface is easier to
2238         use.
2239
2240         * get.c: Adopt new scheme for SAVE, XSAVE, EXPORT.
2241
2242         * pfm-write.c: Implement new scheme.
2243
2244         * sfm-write.c: Ditto.
2245
2246 Mon Nov 15 00:32:24 2004  Ben Pfaff  <blp@gnu.org>
2247
2248         Instead of treating `struct file_handle' as a class to subclass
2249         into data files, system files, and portable files, instead use it
2250         as a helper that coordinates access.  Now it is opaque, too.
2251
2252         This means that most references to a struct file_handle are now
2253         changed into references to one of struct dfm_reader, struct
2254         dfm_writer, struct sfm_reader, struct sfm_writer, struct
2255         pfm_reader, or struct pfm_writer, according to what's being read
2256         or written.
2257
2258         Most related changes are only worth summarizing briefly.
2259
2260         * dictionary.c: (dict_clear) Destroy aux data in deleted
2261         variables.
2262         (dict_clear_aux) New function.
2263         (dict_create_var) Initialize aux, aux_dtor.
2264         (dict_delete_var) Destroy aux data in deleted variable.
2265
2266         * file-handle.h: (struct fh_ext_class) Removed.
2267         (struct file_handle) Removed.
2268         (fh_init_files) Removed.
2269
2270         * file-handle.q: Changed references to a handle's `private' member
2271         to direct references.
2272         (struct private_file_handle) Renamed file_handle.
2273         Add next, open_cnt, type, open_mode, aux members.
2274         (struct file_handle_list) Removed.
2275         (extern var inline_file) Removed.
2276         (static var file_handles) Changed from file_handle_list * to
2277         file_handle *.
2278         (create_file_handle) Initialize new members.
2279         (fh_close_handle) Removed.
2280         (mode_name) New function.
2281         (fh_open) New function.
2282         (fh_close) New function.
2283         (fh_parse_file_handle) Renamed fh_parse().
2284
2285         * glob.c: (init_glob) Remove fh_init_files() call.
2286         
2287         * aggregate.c: use sfm_writer.
2288         (create_sysfile) Removed because the new interface is simpler.
2289         
2290         * apply-dict.c: Use sfm_reader.
2291
2292         * data-list.c: Use dfm_reader.
2293
2294         * file-type.c: Use dfm_reader.
2295
2296         * get.c: Use sfm_reader, sfm_writer, pfm_reader, pfm_writer.
2297
2298         * inpt-pgm.c: Use dfm_reader.
2299
2300         * print.c: Use dfm_writer.
2301
2302         * sysfile-info: Use sfm_reader.
2303
2304         * dfm-read.c: Adopt new file handle infrastructure.
2305
2306         * dfm-write.c: Ditto.
2307
2308         * pfm-read.c: Ditto.
2309         
2310         * pfm-write.c: Ditto.
2311
2312         * sfm-read.c: Ditto.
2313
2314         * sfm-write.c: Ditto.
2315         
2316 Mon Nov 15 00:31:44 2004  Ben Pfaff  <blp@gnu.org>
2317
2318         Break dictionary functions into separate header file.
2319
2320         * dictionary.h: New file.
2321
2322         * var.h: Moved dict_*() functions to dictionary.h.
2323
2324 Mon Nov 15 00:30:33 2004  Ben Pfaff  <blp@gnu.org>
2325
2326         Get rid of procedure-specific union in struct variable, using
2327         instead a void * pointer and a destructor function.
2328
2329         Most related changes are only worth brief summaries.
2330
2331         * crosstabs.q: Fix includes.  Use new struct var_range in lieu of
2332         old p.crs member in struct variable.
2333         
2334         * frequencies.q: Fix includes.  Use new struct var_freqs in lieu
2335         of old p.frq member in struct variable.
2336
2337         * histogram.c: (draw_histogram) Takes new freq_tab arg because
2338         it's no longer possible to grab this from var->p.frq.
2339
2340         * piechart.c: (draw_piechart) Ditto.
2341
2342         * group.c: (group_proc_get) New function.
2343
2344         * levene.c: Use group_proc_get() in lieu of old p.grp_data member
2345         in struct variable.
2346
2347         * oneway.q: Ditto.
2348
2349         * t-test.q: Ditto.
2350
2351         * main.c: (execute_command) Clear aux data in default_dict after
2352         each command.  (It's debatable whether this should be done.)
2353
2354         * matrix-data.c: Use new struct mxd_var in lieu of old p.mxd
2355         member in struct variable.
2356
2357         * means.q: Get rid of integer mode, which is not included in
2358         recent SPSS and was the only code that wanted per-variable private
2359         data.
2360
2361         * var.h: (struct crosstab_proc) Removed.
2362         (struct frequencies_proc) Removed.
2363         (struct list_proc) Removed.
2364         (struct get_proc) Removed.
2365         (struct means_proc) Removed.
2366         (struct matrix_data_proc) Removed.
2367         (struct match_files_proc) Removed.
2368         (lots of enums) Removed.
2369         (struct variable) Removed members `p', `get'.  Add member
2370         `aux_dtor'.
2371
2372         * vars-atr.c: (var_attach_aux) New function.
2373         (var_detach_aux) New function.
2374         (var_clear_aux) New function.
2375         (var_dtor_free) New function.
2376         (discard_variables) Use NULL instead of inline_file.
2377
2378 Fri Nov 12 10:07:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
2379
2380         * value-labs.c  Fixed the implmentation of value_to_string, so 
2381         that it properly handles alpha values.
2382
2383         * oneway.q  Changed instances where labels were being probed manually, 
2384         to use the canonical {var,value}_to_string functions
2385
2386 Thu Nov 11 21:01:31 WST 2004 John Darrington <john@darrington.wattle.id.au>
2387
2388         * examine.q cartesian.c chart.[ch]   Added normal and detrended normal
2389         plots.  Changed the API of the cartesian plot to be a much lower level
2390         thing.
2391
2392 Sun Nov  7 17:25:04 WST 2004 John Darrington <john@darrington.wattle.id.au>
2393
2394         * examine.q Added some of the parametric calculations
2395
2396         * factor_stats.[ch]  Created
2397         
2398 Sat Nov  6 21:24:31 WST 2004 John Darrington <john@darrington.wattle.id.au>
2399
2400         * examine.q  Changed the definition of factors to be a composite, and
2401         dealt with the consequences.
2402
2403 Sat Nov  6 20:40:38 WST 2004 John Darrington <john@darrington.wattle.id.au>
2404
2405         * examine.q Fixed problem where examine wasn't dealing properly with 
2406         splits
2407
2408 Sat Nov  6 14:49:47 WST 2004 John Darrington <john@darrington.wattle.id.au>
2409
2410         * oneway.q Fixed problem where oneway wasn't dealing properly with 
2411         splits
2412
2413 Thu Nov  4 11:09:01 WST 2004 John Darrington <john@darrington.wattle.id.au>
2414
2415         * q2c.c examine.q  Fixed a bug (feature?) whereby arrays in the
2416         command which had settings didn't get the appropriate code
2417         generated.
2418
2419         * val.h value-labels.[ch] var-labs.c Added v*to_string functions
2420         to convert variables/values to strings.
2421
2422         * examine.q  Added framework for the EXAMINE command.
2423
2424 Mon Nov  1 12:46:17 WST 2004 John Darrington <john@darrington.wattle.id.au>
2425
2426         * q2c.c frequencies.q set.q t-test.q  Fixed the q2c parsing of DBL 
2427         subcommand types.  Changed frequencies.q to use it rather then the 
2428         custom parser.  Dealt with the consequences.  Added a test for NTILES
2429         subcommand of frequencies.
2430
2431 Sat Oct 30 09:16:29 WST 2004 John Darrington <john@darrington.wattle.id.au>
2432
2433         * oneway.q   Fixed up the behaviour when given missing values
2434
2435         * levene.c oneway.q Fixed a buglet with the levene statistic and
2436         incorporated the levene test into the oneway command.
2437
2438         * group.h  t-test.q  Moved the CMP_EQ and CMP_LE symbols out of 
2439         global scope, since they're only relevant to T-TEST
2440
2441 Fri Oct 29 17:39:03 WST 2004 John Darrington <john@darrington.wattle.id.au>
2442
2443         * group.c group.h group_proc.h levene.c oneway.q t-test.q
2444
2445         Made the t-test more consistent
2446         with the way it handles groups.  That is, it now uses a hash instead
2447         of an array of 2.  Also, made the levene.c file independent of the 
2448         implementation of the t-test.  So now levene should be fine for both
2449         t-test and anova.
2450
2451         * Added an oneway.q file for one way anova
2452
2453 Wed Jun  2 22:08:02 2004  Ben Pfaff  <blp@gnu.org>
2454
2455         * descript.c: (cmd_descriptives) Remove harmless but bogus test in
2456         STATISTICS parsing.
2457
2458 Mon May 31 20:45:24 2004  Ben Pfaff  <blp@gnu.org>
2459
2460         Fix memory leaks.
2461
2462         * data-list.c: (cmd_data_list) Free dls->delims on lossage.
2463         (data_list_trns_free) Free dls->delims.
2464
2465         * t-test.q: (tts_custom_pairs) Free vars.
2466         (ssbox_one_sample_init) Fix tab_vline() argument.
2467         (ssbox_independent_samples_init) Ditto.
2468         (trbox_paired_init) Ditto.
2469         (trbox_one_sample_init) Ditto.
2470
2471 Mon May 31 17:19:27 2004  Ben Pfaff  <blp@gnu.org>
2472
2473         Generalize casefiles to the extent that we can use them for
2474         sorting and other kinds of data transformations.  Change cases to
2475         be copy-on-write to improve memory efficiency in common cases.
2476         Every access to a member of a `struct ccase' was changed to be a
2477         call to a case_*() function, especially case_data(), case_num(),
2478         case_str(), or case_data_rw().  Many instances of a local variable
2479         named "case_num" were changed to "case_idx" as a consequence.
2480         Many `struct ccase *' were changed to actual `struct ccase'
2481         because of copying semantics of cases.  In several places there
2482         was a choice between updating debug code to work with the new ADTs
2483         or just deleting it because it was useless; I chose to delete it.
2484  
2485         * Makefile.am: (pspp_SOURCES) Add case.c, case.h.
2486
2487         * case.c: New file.
2488
2489         * case.h: New file.
2490
2491         * aggregate.c: (struct agr_proc) Change type of `sort' to
2492         sort_criteria *.  Add `break_vars', `break_var_cnt' members.
2493         Rename `vars' to `agr_vars', all references updated.  Change
2494         `agr_case' to type `struct ccase'.
2495         (cmd_aggregate) Deal with new members.  Use case_create(),
2496         sort_active_file_in_place(), sort_active_file_to_casefile().
2497         (agr_destroy) Deal with new members.
2498         (aggregate_single_case) Ditto.
2499         (dump_aggregate_info) Ditto.
2500         (initialize_aggregate_info) Ditto.
2501         (agr_to_active_file) Ditto.
2502         (presorted_agr_to_sysfile) Ditto.
2503         (sort_agr_to_sysfile) Removed.
2504
2505         * alloc.c: (out_of_memory) Make non-static.
2506
2507         * alloc.h: Prototype out_of_memory().
2508
2509         * casefile.c: Switched from a linked list in-memory representation
2510         to a two-level array-style representation.  The linked list was
2511         appropriate when we could stick a header onto cases, but that's no
2512         longer the case.  Also, the two-level array will allow for random
2513         in-memory access in case that's ever wanted.  Also added the
2514         concept of a `destructive casereader', one that destroys cases in
2515         the underlying casefile as they are read out.
2516         (macro CASES_PER_BLOCK) New macro.
2517         (struct casefile) New members `value_cnt', `case_list_size',
2518         `case_acct_size', `being_destroyed', `cases'.  Removed `head',
2519         `tail'.
2520         (struct casereader) Removed `cur'.  Added `destructive', `c'.
2521         (global var casefiles) Made static.
2522         (static var case_bytes) New var.
2523         (casefile_create) Takes a value count, not a case size in bytes,
2524         to conform to the case interface.  All callers updated.  Deal with
2525         new and removed members.
2526         (casefile_destroy) Deal with new and removed members.
2527         (casefile_sleep) New function.
2528         (casefile_get_case_size) Removed.
2529         (casefile_get_value_cnt) New function.
2530         (casefile_append) Rewritten to deal with new and removed members.
2531         (casefile_append_xfer) New function.
2532         (write_case_to_disk) Use case_serialize().
2533         (call_posix_fadvise) Removed because posix_fadvise64 segfaults.
2534         Couldn't figure out why.
2535         (casefile_to_disk) Don't call call_posix_fadvise.  Rewritten to
2536         deal with new and removed members.
2537         (merge) Removed.
2538         (merge_sort) Removed.
2539         (casefile_sort) Removed.
2540         (casefile_get_reader) Deal with new and removed members.
2541         (casefile_get_destructive_reader) New function.
2542         (reader_open_file) Make code more readable.  Create case for
2543         reader.
2544         (casereader_get_casefile) New function.
2545         (casereader_read) Deal with new and removed members.  Now returns
2546         a copy of the case, so that the caller is responsible for
2547         destroying the returned case.
2548         (casereader_read_xfer) New function.
2549         (casereader_destroy) Destroy reader's case.
2550         (test_casefile) Second arg is now a value count, all callers
2551         updated.  Now tests destructive readers too.
2552         (get_random_case) Deal with new case ADT.
2553         (write_random_case) Ditto.
2554         (read_and_verify_random_case) Ditto.
2555
2556         * crosstabs.q: Remove debug code.
2557
2558         * descript.q: (calc_descriptives) Deal with new case, casefile
2559         ADTs.
2560
2561         * dfm.c: (cmd_begin_data) There's no storage_source_class anymore.
2562
2563         * do-if.c: Remove unneeded header inclusion.
2564
2565         * expr-prs.c: Remove debug code.
2566
2567         * exprP.h: Remove debug code.
2568
2569         * flip.c: (flip_file) Use fseeko() if available.
2570
2571         * formats.c: Remove debug code.
2572
2573         * get.c: Remove debug code.
2574         (struct mtf_file) Change `input' from `union value *' to `struct
2575         ccase', all references updated.
2576
2577         * levene.c: (levene) Deal with new case, casefile ADTs.
2578
2579         * list.q: Remove debug code.
2580
2581         * loop.c: Remove debug code.
2582         
2583         * matrix-data.c: Remove debug code.
2584
2585         * means.q: Remove debug code.
2586
2587         * mis-val.c: Remove debug code.
2588
2589         * pfm-read.c: Remove debug code.
2590         (pfm_read_code) Change second arg from `union value *' to `struct
2591         ccase *', all references updated.
2592
2593         * recode.c: (string_to_long) Make first arg const.
2594         (convert_to_double) Ditto.
2595
2596         * repeat.c: Remove debug code.
2597
2598         * sample.c: Remove debug code.
2599
2600         * sfm-read.c: Remove debug code.
2601         (sfm_read_case) Change second arg from `union value *' to `struct
2602         ccase *'.
2603
2604         * sort.c: Redone in terms of casefiles.
2605         (enum sort_direction) Moved here from sort.h.
2606         (struct sort_criterion) New structure.
2607         (struct sort_criteria) New structure.
2608         (cmd_sort_cases) Rewritten.
2609         (prepare_to_sort_active_file) New function.
2610         (sort_active_file_in_place) New function.
2611         (sort_active_file_to_casefile) New function.
2612         (parse_sort) Renamed sort_parse_criteria(), rewritten & interface
2613         changed, all callers updated.
2614         (destroy_sort_cases_pgm) Renamed sort_destroy_criteria(),
2615         rewritten & interface changed, all callers updated.
2616         (sort_cases) Renamed sort_execute(), rewritten & interface
2617         changed, all callers updated.
2618         (struct internal_sort) Removed.
2619         (do_internal_sort) Rewritten, interface changed.
2620         (destroy_internal_sort) Removed.
2621         (compare_case_dblptrs) Use sort_criteria instead of sort_case_pgm.
2622         (struct initial_run) Removed; an initial run is now just a
2623         casefile.
2624         (compare_initial_runs) Rewritten.
2625         (struct external_sort) Changed almost completely.
2626         (do_external_sort) Rewritten, interface changed.
2627         (destroy_external_sort) Rewritten.
2628         [HAVE_MKDTEMP] (make_temp_dir) Removed.
2629         [!HAVE_MKDTEMP] (do_mkdir) Removed.
2630         [!HAVE_MKDTEMP] (make_temp_dir) Removed.
2631         (init_external_sort) Removed.
2632         (simulate_error) Removed.
2633         (rmdir_temp_dir) Removed.
2634         (get_temp_file_name) Removed.
2635         (open_temp_file) Removed.
2636         (close_temp_file) Removed.
2637         (remove_temp_file) Removed.
2638         (write_temp_file) Removed.
2639         (read_temp_file) Removed.
2640         (struct record_run) Change `record' from `struct case_lit *' to
2641         `struct ccase'.
2642         (struct initial_run_state) Remove `idx_to_fv', `free_list',
2643         `file_idx', `output_file'.  Add `run', casefile'.  Change
2644         `last_output' from `struct case_list *' to `struct ccase'.
2645         (write_initial_runs) Change interface, rewrite.
2646         (sort_sink_write) Renamed process_case(), changed interfaced,
2647         rewrote.
2648         (destroy_initial_run_state) Rewritten.
2649         (allocate_cases) Rewritten.
2650         (compare_record) Interface changed, rewritten.
2651         (start_run) Rewritten.
2652         (end_run) Rewritten.
2653         (output_record) Rewritten.
2654         (grab_case) Removed.
2655         (release_case) Removed.
2656         (struct merge_case) Change `cases' from double pointer to single
2657         pointer.
2658         (merge) Deal with new case and casefile ADTs.
2659         (struct run) Removed.
2660         (merge_once) Rewritten, interface changed.
2661         (fill_run_buffer) Removed.
2662         (sort_sink_make_source) Removed.
2663         (sort_sink_class) Removed.
2664         (struct sort_source_aux) Removed.
2665         (sort_source_read_helper) Removed.
2666         (sort_source_read) Removed.
2667         (read_sort_output) Removed.
2668         (read_internal_sort_output) Removed.
2669         (read_external_sort_output) Removed.
2670         (sort_source_destroy) Removed.
2671         (sort_source_class) Removed.
2672
2673         * sort.h: (struct sort_cases_pgm) Removed.
2674         (enum sort_direction) Moved to sort.c.
2675
2676         * t-test.q: (calculate) Deal with new case, casefile ADTs.
2677
2678         * tab.c: Remove debug code.
2679
2680         * var-labs.c: Remove debug code.
2681
2682         * var.h: (struct ccase) Removed.
2683         (struct case_list) Removed.
2684
2685         * vars-atr.c: (discard_variables) Use free_case_source().
2686
2687         * vars-prs.c: (parse_vs_variable) Make arg const.
2688         (parse_dict_variable) Ditto.
2689         (parse_variables) Make struct dictionary * arg const.
2690         (parse_var_set_vars) Make struct var_set * arg const.
2691         (struct var_set) Add const to some of the function pointers' args.
2692         (var_set_get_cnt) Make arg const.
2693         (var_set_get_var) Make first arg const.
2694         (var_set_lookup_var) Make first arg const.
2695         (dict_var_set_get_cnt) Make arg const.
2696         (dict_var_set_get_var) Make first arg const.
2697         (dict_var_set_lookup_var) Make first arg const.
2698         (var_set_create_from_dict) Make arg const.  Add cast to aux
2699         assignment.
2700         (struct array_var_set) Add const to var member.
2701         (array_var_set_get_cnt) Make arg const.
2702         (array_var_set_get_var) Make first arg const.
2703         (array_var_set_lookup_var) Make first arg const.
2704         (var_set_create_from_array) Make first arg const.  Insert cast.
2705
2706         * vfm.c: (struct write_case_data) Change trns_case, sink_case
2707         members from `struct ccase *' to `struct ccase'.
2708         (static var lag_queue) Change from double to single pointer.
2709         (procedure) Optimize trivial case.
2710         (internal_procedure) Deal with changed case, case_source ADTs.
2711         (create_trns_case) Changed interface, rewrote.
2712         (open_active_interface) Initialize modified lag queue.
2713         (write_case) Deal with changed case ADT.
2714         (lag_case) Deal with modified lag queue.
2715         (close_active_file) Destroy modified lag queue.
2716         Deal with changed case_source, case_sink ADTs.
2717         (destroy_storage_stream_info) Make null arg into no-op.
2718         (storage_sink_make_source) Set aux in created source.
2719         (storage_source_read) Deal with changed case, casefile ADTs.
2720         (storage_source_create) New function.
2721         (lagged_case) Rewrite.
2722         (free_case_source) New function.
2723         (free_case_sink) Rewrite.
2724         (struct split_aux_data) Changed prev_case from `struct ccase *' to
2725         `struct ccase'.
2726         (procedure_with_splits) Deal with changed prev_case.
2727         (procedure_with_splits_callback) Ditto.
2728         (multipass_split_aux_data) Changed prev_case from `struct ccase *' to
2729         `struct ccase'.
2730         (multipass_procedure_with_splits) Deal with changed prev_case.
2731         (multipass_split_callback) Ditto.
2732         
2733         
2734 Mon May 31 17:19:06 2004  Ben Pfaff  <blp@gnu.org>
2735
2736         The workspace idea didn't work out.
2737
2738         * Makefile.am: (pspp_SOURCES) Remove workspace.c, workspace.h.
2739         
2740         * workspace.c: Removed.
2741
2742         * workspace.h: Removed.
2743
2744 Sun May 30 18:35:19 2004  Ben Pfaff  <blp@gnu.org>
2745
2746         Fully implement arbitrary delimiters on DATA LIST, extending the
2747         half implementation that was already there.
2748
2749         * data-list.c: (struct data_list_pgm) Remove `delim', add
2750         `delims', `delim_cnt'.
2751         (cmd_data_list) Initialize new members.  Parse delimiters and
2752         clean up code a bit.
2753         (cut_field) Extract fields with arbitrary delimiters.  Also, fix
2754         handling of leading commas.
2755         (read_from_data_list_fixed) Expand tabs.  Adapt to new DFM
2756         interfaces.
2757         (read_from_data_list_free) Adapt to new DFM interfaces.
2758         (read_from_data_list_list) Ditto.
2759         (repeating_data_trns_proc) Ditto.
2760
2761         * dfm.c: Split up reader and writer into separate code, because
2762         they do different things.  Use struct string instead of explicit
2763         allocation code, for clarity.
2764         (enum dfm_reader_flags) New enum.
2765         (struct dfm_fhuser_ext) Removed.
2766         (struct dfm_reader_ext) New.
2767         (get_reader) New function, used by just about all the reader
2768         functions.
2769         (dfm_close) Removed.
2770         (close_reader) New function.
2771         (dfm_open_for_reading) Rewrite initialization of dfm_fhuser_ext.
2772         (dfm_open_for_writing) Ditto.
2773         (macro force_line_buffer_expansion) Removed.
2774         (count_tabs) Removed.
2775         (tabs_to_spaces) Removed.
2776         (read_record) Deal with new dfm_reader_ext.  Use struct string
2777         functions.  Don't convert tabs to spaces.
2778         (dfm_eof) New function.
2779         (dfm_get_record) Changed interface, rewrote.
2780         (dfm_expand_tabs) New function.
2781         (dfm_fwd_record) Renamed dfm_forward_record(), updated to new
2782         dfm_reader_ext, rewritten.
2783         (dfm_bkwd_record) Renamed dfm_reread_record(), updated to new
2784         dfm_reader_ext, rewritten.
2785         (dfm_set_record) Removed in favor of dfm_forward_columns().
2786         (dfm_forward_columns) New function.
2787         (dfm_get_cur_col) Renamed dfm_column_start, updated to new
2788         dfm_reader_ext, rewritten.
2789         (static var dfm_r_class) Use close_reader for the destructor.
2790         (struct dfm_writer_ext) New.
2791         (dfm_put_record) Updated to new dfm_writer_ext, rewritten.  Uses
2792         bounce buffer now instead of local allocation.
2793         (close_writer) New function.
2794         (static var dfm_writer_ext) Use close_writer for destructor.
2795         (cmd_begin_data) Adapt to new dfm_reader_ext.
2796
2797         * file-handle.q: Add support for per-file tab width.
2798         (struct private_file_handle) Add tab_width member.
2799         (q2c specifications) Add tabwidth subcommand.
2800         (cmd_file_handle) Put parsed tab width into private_file_handle.
2801         (create_file_handle) Set default tab width.
2802         (handle_get_tab_width) New function.
2803
2804         * file-type.c: (file_type_source_read) Adapt to new DFM interface.
2805
2806         * inpt-pgm.c: (reread_trns_proc) Ditto.
2807
2808         * matrix-data.c: (context) Ditto.
2809         (another_token) Ditto.
2810         (mget_token) Ditto.
2811         (force_eol) Ditto.
2812
2813 Sun May 30 18:33:59 2004  Ben Pfaff  <blp@gnu.org>
2814
2815         * casefile.c: (casefile_destroy) Fix memory leak by freeing
2816         cf->filename.
2817         (casereader_destroy) Don't close file descriptor -1.
2818
2819         * recode.c: (cmd_recode) Fix memory leak.
2820
2821         * set.q: (q2c specifications) Fix typo in user message.
2822
2823         * str.c: (st_bare_pad_len_copy) Change memcpy to memmove to avoid
2824         undefined behavior for overlapping arguments.
2825
2826 Sun May 30 18:31:48 2004  Ben Pfaff  <blp@gnu.org>
2827
2828         * casefile.c: valgrind doesn't implement posix_fadvise() yet, so
2829         don't call it when we're running under valgrind.
2830         (call_posix_fadvise) New function.
2831         (casefile_to_disk) Use call_posix_fadvise().
2832         (reader_open_file) Ditto.
2833         
2834 Sun May 30 18:20:12 2004  Ben Pfaff  <blp@gnu.org>
2835
2836         Update our string ADTs, struct string and struct len_string.  Get
2837         rid of pool support, which was largely unused.  Rename lots of
2838         functions to have more obvious or consistent names.
2839         
2840         * ascii.c: Get rid of ascii_pool.  It was only used for string
2841         allocations.
2842         (ascii_open_global) Don't create ascii_pool.
2843         (ascii_close_driver) Don't destroy ascii_pool.
2844         (ascii_postopen_driver) Don't use pool.
2845         (ascii_close_driver) Destroy strings manually.
2846
2847         * str.c: (ds_create) Remove pool argument, all references updated.
2848         (ds_init) Ditto.
2849         (ds_replace) Remove pool support, make more efficient when we
2850         don't need to reallocate.
2851         (ds_destroy) Remove pool support.
2852         (ds_rpad) New function.
2853         (ds_size) Renamed ds_capacity(), all references updated.
2854         (ds_value) Renamed ds_c_str(), all references updated.
2855         (ds_concat) Renamed ds_puts(), all references updated.
2856         (ds_concat_buffer) Renamed ds_concat(), all references updated.
2857         (ds_putchar) Renamed ds_putc(), all references updated.
2858         (ds_getline) Renamed ds_gets(), all references updated.
2859         (ls_create) Remove pool argument, all references updated.
2860         (ls_create_buffer) Ditto.
2861         (ls_destroy) Removed pool support.
2862         (ls_value) Renamed ls_c_str(), all references updated.
2863
2864         * str.h: (ls_length) [__GNUC__] Add inline version.
2865         (ls_c_str) [__GNUC__] Add inline version.
2866         (ls_end) [__GNUC__] Add inline version.
2867         (struct string) Remove pool member.  Rename `size' to `capacity',
2868         all references updated.
2869
2870         * tab.c: (text_format) Instead of using pool argument to
2871         ls_create_buffer(), call pool_register() on allocated data.
2872
2873 Mon Apr 26 22:40:07 2004  Ben Pfaff  <blp@gnu.org>
2874
2875         We're abusing the current ASCII driver by telling it to allocate a
2876         9999-line, 9999-character page in the tests.  This causes some
2877         systems to curl up and die because it allocates 20 MB of
2878         contiguous RAM.  This change alleviates at least part of the
2879         problem.  It is mostly a stop-gap until the new output system is
2880         ready.
2881         
2882         * ascii.c: (struct line) New structure.
2883         (struct ascii_driver_ext) Remove `page', `page_size', `line_len',
2884         `line_len_size', `n_output' members.  Add `lines', `lines_cap'.
2885         (ascii_preopen_driver) Initialize new members, not old ones.
2886         (ascii_close_driver) Destroy new members, not old ones.
2887         (ascii_open_page) Allocate new members, not old ones.
2888         (expand_line) Allocate room in line.
2889         (draw_line) Use new members.
2890         (ascii_line_horz) Ditto.
2891         (ascii_line_vert) Ditto.
2892         (ascii_line_intersection) Ditto.
2893         (text_draw) Ditto.
2894         (output_lines) Ditto.
2895         (ascii_close_page) Ditto.
2896
2897 Sun Apr 25 23:40:15 2004  Ben Pfaff  <blp@gnu.org>
2898
2899         * matrix.c: Dead code.  Removed.
2900
2901         * matrix.h: Dead code.  Removed.
2902
2903 Fri Apr 16 23:59:51 2004  Ben Pfaff  <blp@gnu.org>
2904
2905         Contrary to what I'd always understood, there is an efficient
2906         algorithm for deletion from a hash table populated via linear
2907         probing.  This change implements it.
2908         
2909         * hash.c: (hsh_rehash) Probe in increasing order.
2910         (hsh_probe) Ditto.
2911         (locate_matching_entry) Ditto.
2912         (hsh_delete) Use Knuth's Algorithm 6.4R for deletion.
2913
2914 Tue Apr 13 19:24:15 2004  Ben Pfaff  <blp@gnu.org>
2915
2916         * moments.c (calc_moments): Adjust calculation of kurtosis to
2917         avoid subtracting huge numbers from huge numbers, on Michael
2918         Kiefte's advice.
2919
2920 Sun Apr 11 14:22:12 2004  Ben Pfaff  <blp@gnu.org>
2921
2922         Rework moments routines for improved numerical stability based on
2923         Michael Kiefte's advice.  Any bugs or remaining numerical problems
2924         are still mine though.
2925
2926         There is now a struct moments1 for use with one-pass moments.  It
2927         uses a provisional means algorithm as an attempt to improve
2928         accuracy of higher moments.  The older struct moments now only
2929         handles two-pass moments.
2930         
2931         * aggregate.c: Use moments1 instead moments.
2932
2933         * descript.c: Revert previous change, which is no longer needed
2934         due to the moments revision.
2935
2936         * moments.c: (calc_moments) New function for calculating variance,
2937         skewness, kurtosis.
2938         (moments_pass_one) Only accumulate weights bigger than zero.
2939         (moments_calculate) Allow calculating the mean on pass one, others
2940         require pass two.  Implement in terms of calc_moments().
2941         (struct moments1) New structure.
2942         (init_moments1) New function.
2943         (moments1_clear) Ditto.
2944         (moments1_create) Ditto.
2945         (moments1_add) Ditto.
2946         (moments1_calculate) Ditto.
2947         (moments1_destroy) Ditto.
2948         (cmd_debug_moments) Deal with `struct moments' or `struct
2949         moments1' as requested by user.
2950
2951 Sun Apr 11 14:21:55 2004  Ben Pfaff  <blp@gnu.org>
2952
2953         * Makefile.am (pspp_SOURCES): Remove debug.c.
2954
2955         * debug.c: Removed.  It was empty anyway.
2956
2957 Fri Apr  9 20:04:49 2004  Ben Pfaff  <blp@gnu.org>
2958
2959         * descript.c (calc_descriptives): Fix assert failure when only
2960         MOMENT_MEAN is needed.
2961
2962 2004-04-09  Michael Kiefte  <mkiefte@dal.ca>
2963
2964         * descript.c: 
2965
2966         fixed problem with parsing in match_statistic() causing
2967         "DESCRIPTIVE STAT=MEAN." to barf.
2968
2969         "MEAN" is now default if "SORT" given without specification.
2970
2971         Fixed infinite loop with "DESCRIPT GIBBERISH=ALL."  Parsing is
2972         generally less forgiving of syntax errors: better to have it do
2973         nothing and type it in again then to not know what it actually did
2974         instead.  
2975
2976         z-score transformation now checks score for user-missing values
2977         and checks std_dev for SYSMIS.
2978
2979 2004-04-06  Michael Kiefte  <mkiefte@dal.ca>
2980
2981         * aggregate.c, crosstabs.q, descript.c, dictionary.c, frequencies.q, levene.c, t-test.q, var.h: 
2982         Changed dict_get_case_weight() to accept an additional int * flag
2983         to complain about system-missing, user-missing, zero, or negative
2984         weights and updated existing functions to pass int * to
2985         dict_get_case_weight().
2986
2987 2004-04-05  jmd  <jmd@gnu.org>
2988
2989         * main.c: Fixed configuration problems with gsl
2990
2991         * t-test.q: Fixed some problems encountered when compiling under Cygwin
2992
2993 2004-04-03  blp  <blp@gnu.org>
2994
2995         * lexer.c, ChangeLog:
2996         Fix infinite loop on comment at end of file, add test.
2997
2998 2004-04-03  jmd  <jmd@gnu.org>
2999
3000         * 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:
3001         Fixed the calculation of percentiles and added --syntax and --algorithm options
3002
3003 Sat Apr  3 11:43:37 2004  Ben Pfaff  <blp@gnu.org>
3004
3005         * lexer.c: (lex_skip_comment) Handle end-of-file correctly (I
3006         hope).
3007
3008 Sat Apr  3 15:00:18 WST 2004 John Darrington <john@darrington.wattle.id.au>
3009
3010         * frequencies.q:  Fixed the calculation of percentiles
3011
3012         * Makefile.am:  Added the --ansi flag and dealt with the
3013         consequences.  Added some entries to PSPP_sources so that
3014         make distcheck would pass
3015
3016         * cmdline.c:   Added the --syntax and --algorithm options
3017
3018         * q2c.c:  Added an implicit /ALGORITHM subcommand to everything.
3019
3020 Fri Apr  2 11:25:22 WAST 2004 John Darrington <john@darrington.wattle.id.au>
3021
3022         * t-test.q, levene.c, levene.h  Converted t-test (incl levene) to 
3023         use the new multipass_split_... mechanism.
3024
3025 Wed Mar 31 22:36:22 2004  Ben Pfaff  <blp@gnu.org>
3026
3027         * frequencies.q: (calc_stats) Use moments data structure and
3028         calc_seskew(), calc_sekurt() functions.
3029
3030         * set.q main.c settings.h Added support for --syntax and --algorithm 
3031         options
3032
3033 Tue Mar 30 22:04:19 2004  Ben Pfaff  <blp@gnu.org>
3034
3035         * vfm.c: Had to get last call to multipass_split_output() inside
3036         open_active_file()/close_active_file() pairing, so introduce new
3037         function.
3038         (internal_procedure) Move procedure() code here, except for calls
3039         to open_active_file() and close_active_file().
3040         (procedure) Wrap open_active_file() and close_active_file() around
3041         internal_procedure().
3042         (multipass_procedure_with_splits) Wrap open_active_file() and
3043         close_active_file() around internal_procedure().
3044
3045 Tue Mar 30 22:01:57 2004  Ben Pfaff  <blp@gnu.org>
3046
3047         * descript.c: (cmd_descriptives) Free `vars' to avoid memory leak.
3048
3049 Mon Mar 29 16:26:40 2004  Ben Pfaff  <blp@gnu.org>
3050
3051         * debug.c: Removed.  Moved cmd_debug_evaluate() into expr-evl.c.
3052
3053         * expr-evl.c: (cmd_debug_evaluate) Moved here from debug.c.
3054
3055 Mon Mar 29 16:03:08 2004  Ben Pfaff  <blp@gnu.org>
3056
3057         * algorithm.c: By default turn off some of the more expensive
3058         assertions.
3059         (expensive_assert) New macro which expands to assert if
3060         EXTRA_CHECKS is defined, to nothing otherwise.
3061         (unique) Use expensive_assert().
3062         (binary_search) Ditto.
3063         (push_heap) Ditto.
3064         (pop_heap) Ditto.
3065         (make_heap) Ditto.
3066         (sort_heap) Ditto.
3067
3068         * command.c: (conflicting_3char_prefixes) Words that are the same
3069         don't cause conflicts when they are abbreviated to the first three
3070         letters.
3071
3072         * expr-evl.c: (CONCAT_func) Fix memory leak by incrementing struct
3073         nonterm_node's n earlier.
3074         (generic_str_func) Ditto.
3075         
3076 Mon Mar 29 15:32:17 2004  Ben Pfaff  <blp@gnu.org>
3077
3078         Add support for multipass procedures.  Rewrite DESCRIPTIVES to
3079         test multipass support, take advantage of new moments
3080         calculation, and to not be such crappy code.  Get rid of q2c
3081         processing for DESCRIPTIVES.
3082
3083         * vfm.c: (struct multipass_split_aux_data) New structure.
3084         (multipass_procedure_with_splits) New function.
3085         (multipass_split_callback) New function.
3086         (multipass_split_output) New function.
3087         * descript.q: Removed.
3088
3089         * descript.c: New file.
3090
3091         * var.h: Removed descriptives enums.
3092         (struct descriptives_proc) Removed.
3093         (struct variable) Removed p.dsc.
3094
3095         * Makefile.am: (q_sources_c) Remove descript.c.
3096         (q_sources_q) Removed descript.q.
3097         
3098 Mon Mar 29 15:31:55 2004  Ben Pfaff  <blp@gnu.org>
3099
3100         New manager for keeping track of used workspace.
3101         
3102         * workspace.c: New file.
3103
3104         * workspace.h: New file.
3105
3106         * Makefile.am: (pspp_SOURCES) Add workspace.c, workspace.h.
3107
3108         * sort.c: (do_internal_sort) Use workspace_malloc().
3109         (destroy_internal_sort) Use workspace_free().
3110
3111 Mon Mar 29 15:31:08 2004  Ben Pfaff  <blp@gnu.org>
3112
3113         New `struct casefile' for managing sets of cases.
3114
3115         * casefile.c: New file.
3116
3117         * casefile.h: New file.
3118
3119         * command.def: Add DEBUG CASEFILE command.
3120
3121         * Makefile.am: (pspp_SOURCES) Add casefile.c, casefile.h.
3122
3123         * sort.c: (sort_cases) Move logic for sending storage file to disk
3124         into do_external_sort().
3125         (struct internal_sort) Use an array of ccase pointers instead of a
3126         case_list.
3127         (do_internal_sort) Rewrite to handle casefiles.
3128         (compare_case_list) Removed.
3129         (compare_cases) New function.
3130         (compare_case_dblptrs) New function.
3131         (read_internal_sort_output) Deal with new struct internal_sort.
3132
3133         * vfm.c: (static var workspace_overflow) Removed.
3134         (struct storage_stream_info) Removed all the members.  Added
3135         struct casefile * member.
3136         (storage_sink_open) Use casefile.
3137         (open_storage_file) Removed.
3138         (write_storage_file) Removed.
3139         (storage_to_disk) Removed.
3140         (destroy_storage_stream_info) Use casefile.
3141         (storage_sink_write) Use casefile.
3142         (storage_sink_make_source) Use casefile.
3143         (storage_source_count) Use casefile.
3144         (storage_source_read) Use casefile.
3145         (storage_source_on_disk) Removed.
3146         (storage_source_get_cases) Removed.
3147         (storage_source_set_cases) Removed.
3148         (storage_source_get_casefile) New function.
3149         
3150 Mon Mar 29 15:30:09 2004  Ben Pfaff  <blp@gnu.org>
3151
3152         New `struct moments' for calculating moments.
3153
3154         * stats.c: Removed.
3155
3156         * stats.h: Removed.
3157
3158         * moments.c: New file.
3159
3160         * moments.h: New file.
3161
3162         * command.def: Add DEBUG MOMENTS command.
3163
3164         * Makefile.am: (pspp_SOURCES) Add moments.c, moments.h.  Remove
3165         stats.c, stats.h.
3166
3167         * aggregate.c: Modify AGGREGATE to use the new moments
3168         calculation, even if not in such a great way.
3169         (struct agr_var) Add `moments' member.
3170         (parse_aggregate_functions) Set `moments' member to null.
3171         (agr_destroy) Destroy `moments' member.
3172         (accumulate_aggregate_info) Use `moments' for standard deviation.
3173         (dump_aggregate_info) Ditto.
3174         (initialize_aggregate_info) Create or clear `moments'.
3175
3176         * misc.h: Add pow2(), pow3(), pow4() functions in place of sqr(),
3177         cube(), pow4() that were in stats.h.  All references updated.
3178
3179         * crosstabs.q: stats.h had chi-square significance functions.  Use
3180         GSL instead.
3181         (display_chisq) Use gsl_cdf_chisq_Q() instead of chisq_sig().
3182
3183         * expr-evl.c: (expr_evaluate) Use moments_of_values() for
3184         OP_CFVAR, OP_MEAN, OP_SD, OP_VARIANCE.
3185                 
3186 Fri Mar 26 14:21:23 2004  Ben Pfaff  <blp@gnu.org>
3187
3188         * dictionary.c: (dict_compact_values) Compacted values need to
3189         start off from 0.
3190
3191 Fri Mar 26 00:54:57 2004  Ben Pfaff  <blp@gnu.org>
3192
3193         * var-labs.c: (cmd_variable_labels) For compatibility, don't allow
3194         `/' at start.  Check return value of parse_variables() for error
3195         return.
3196
3197 Fri Mar 26 00:19:27 2004  Ben Pfaff  <blp@gnu.org>
3198
3199         Revamp expressions: make the code a little nicer, and fix bugs
3200         found in testing.
3201         
3202         * expr-evl.c: (expr_evaluate) Make expression argument const.
3203         Support OP_ADD, OP_SUB, OP_MUL, OP_DIV instead of OP_PLUS, OP_MUL.
3204         OP_POW is missing for arg 2 <= 0.  OP_LOG is natural log, not
3205         base-10 log.  Fix OP_ANY, OP_ANY_STRING, OP_RANGE, OP_RANGE_STRING
3206         off-by-ones.  Add OP_MAX_STRING, OP_MIN_STRING.  Fix OP_TIME_HMS,
3207         OP_DATE_WKYR boundary conditions.  Add OP_CTIME_DAYS,
3208         OP_CTIME_HOURS, OP_CTIME_MINUTES, OP_CTIME_DAYS, OP_CTIME_SECONDS.
3209         Support OP_INDEX_2, OP_INDEX_3, OP_RINDEX_2, OP_RINDEX_3 instead
3210         of OP_INDEX, OP_INDEX_OPT, OP_RINDEX, OP_RINDEX_OPT.  Merge
3211         OP_LPAD_OPT into OP_LPAD, OP_RPAD_OPT into OP_RPAD, OP_LTRIM_OPT
3212         into OP_LTRIM, OP_RTRIM_OPT into OP_RTRIM, OP_NUMBER_OPT into
3213         OP_NUMBER.  Fix OP_RTRIM fragility.  Support OP_SUBSTR_2,
3214         OP_SUBSTR_3 instead of OP_SUBSTR, OP_SUBSTR_OPT.  Remove OP_INV.
3215         Simplify OP_SYSMIS.  Remove OP_STR_MIS.
3216
3217         * expr-opt.c: (optimize_expression) Rewrite.
3218         (macro n0) Removed.
3219         (macro n1) Removed.
3220         (macro n2) Removed.
3221         (macro s0) Removed.
3222         (macro s0l) Removed.
3223         (macro s1) Removed.
3224         (macro s1l) Removed.
3225         (macro s2) Removed.
3226         (macro s2l) Removed.
3227         (macro s) Removed.
3228         (macro sl) Removed.
3229         (eq_num_con) New function.
3230         (optimize_tree) New function.
3231         (macro rnc) Removed.
3232         (macro frnc) Removed.
3233         (str_search) Add const to string params.
3234         (str_rsearch) Ditto.
3235         (evaluate_tree_no_missing) Renamed from evaluate_tree.  Add num[],
3236         str[], str_len[] locals to substitute for most of removed macros.
3237         Support OP_ADD, OP_SUB, OP_MUL, OP_DIV instead of OP_PLUS, OP_MUL.
3238         Removed support for missing values because we're never called with
3239         missing values.  Use set_number() or set_number_errno() instead of
3240         rnc or frnc.  Removed any stuff that caused trouble in testing.
3241         We can re-add it later if it really slows anything.  Fix some
3242         random problems.
3243         (evaluate_tree_with_missing) Not yet supported.  To be added later
3244         if it's important.
3245         (repl_num_con) Removed.
3246         (collapse_node) New function.
3247         (force_repl_num_con) Removed.
3248         (set_number) New function.
3249         (set_number_errno) New function.
3250         (repl_str_con) Removed.
3251         (set_string) New function.
3252         (yrmoda) Tighten boundary conditions.  Adopt 2030 cut-off for
3253         2-digit years.
3254         (dump_node) No special case for OP_AND, OP_OR.
3255
3256         * expr-prs.c: (expr_prs) Honor EXPR_NO_OPTIMIZE bit.  Rewrite.
3257         (expr_get_type) New function.
3258         (type_check) Rewrite.
3259         (type_coercion) New function.
3260         (struct operator) New structure.
3261         (match_operator New function.
3262         (parse_binary_operators) New function.
3263         (parse_inverting_unary_operator) New function.
3264         (parse_or) Rewritten.
3265         (parse_and) Rewritten.
3266         (parse_not) Rewritten.
3267         (parse_rel) Rewritten.
3268         (parse_add) Rewritten.
3269         (parse_mul) Rewritten.
3270         (parse_neg) Rewritten.
3271         (parse_exp) Rewritten.
3272         (parse_sysvar) Add $TRUE, $FALSE system variables.
3273         Get $LENGTH, $WIDTH from get_viewlength(), get_viewwidth().
3274         (parse_primary) Use allocate_var_node(), allocate_num_con(),
3275         allocate_str_con().
3276         (struct function) Remove desc, change `func' prototype.
3277         (unary_func) Remove special cases.
3278         (MISSING_func) Reduce to unary_func() that just returns a boolean.
3279         (SYSMIS_func) Handle SYSMIS((x)) like SYSMIS(x).
3280         (VALUE_func) Use allocate_var_node().
3281         (nary_num_func) Allow MIN and MAX for strings.
3282         Use allocate_var_node().  Properly clean up.
3283         Fix return type.
3284         (generic_str_func) Use local table instead of removed `desc'
3285         member.  Mostly rewrite.
3286         (get_num_args) Revise error message.
3287         (parse_function) Return EXPR_ERROR, not 0 on error.
3288         (macro op) Removed.
3289         (macro varies) Removed.
3290         (ops[]) Use expr.def.
3291         (free_node) Do nothing if node is null.
3292         (allocate_num_con) New function.
3293         (allocate_str_con) New function.
3294         (allocate_var_node) New function.
3295         (allocate_binary_nonterminal) New function.
3296         (append_nonterminal_arg) Removed.
3297         (static var func_tab[]) Revised.
3298         (expr_debug_print_postfix) Make parameter const.
3299         Use printf() instead of debug_printf().
3300
3301         * expr.def: New file.
3302         
3303         * expr.h: Change PXP_* to EXPR_*, all references updated.  Also
3304         use named enum instead of unnamed, all references updated.  Add
3305         EXPR_ANY, EXPR_NO_OPTIMIZE.
3306
3307         * exprP.h: Remove EX_*.  Add DEFINE_OPERATOR.  Use expr.def
3308         instead of defining OP_* directly.
3309         (macro IS_TERMINAL) New macro.
3310         (macro IS_NONTERMINAL) New macro.
3311         (enum OP_NO_FLAGS) New.
3312         
3313 Fri Mar 26 00:18:01 2004  Ben Pfaff  <blp@gnu.org>
3314
3315         * error.c: (err_assert_fail) msg variable needs to be non-const.
3316
3317 Fri Mar 26 00:17:24 2004  Ben Pfaff  <blp@gnu.org>
3318
3319         * debug.c: (cmd_debug_evaluate) Rewrite.
3320
3321 Fri Mar 26 00:15:13 2004  Ben Pfaff  <blp@gnu.org>
3322
3323         Fix some CROSSTABS bit rot stupidity.
3324
3325         * crosstabs.q: Reorder the CELLS subcommands for compatibility.
3326         (internal_cmd_crosstabs) Initializes cells[] correctly.
3327         (float_M_suffix) Rename format_cell_entry(), change prototype,
3328         rewrite.
3329         (display_crosstabulation) Fix cell formatting.
3330
3331 Fri Mar 26 00:14:09 2004  Ben Pfaff  <blp@gnu.org>
3332
3333         Make lex_rest_of_line(), lex_entire_end() not discard lines.  Have
3334         to call lex_discard_line() to do that.
3335
3336         * command.c: (run_command) Call lex_discard_line() after
3337         lex_rest_of_line().
3338
3339         * lexer.c: (lex_entire_end) Change behavior.
3340         (lex_rest_of_line) Change behavior.  Return const char *.
3341         (lex_discard_line) Don't clear getl_buf, don't emit message.
3342
3343         * main.c: (handle_error) Emit message here.
3344
3345         * repeat.c: (internal_cmd_do_repeat) Use lex_discard_line()
3346         instead of lex_entire_line().
3347
3348         * str.c: (mm_find_reverse) Make length params size_t.  Rewrite.
3349
3350         * title.c: (get_title) Call lex_discard_line() after
3351         lex_rest_of_line().
3352         (cmd_file_label) Ditto.
3353         (cmd_document) Deal with const char * return value.
3354
3355 Fri Mar 26 00:10:16 2004  Ben Pfaff  <blp@gnu.org>
3356
3357         Removed REMARK command.
3358
3359         * command.c: (extract_prefix) Removed.
3360         (output_line) Removed.
3361         (cmd_remark) Removed.
3362
3363         * command.def: Remove REMARK.
3364
3365 Fri Mar 26 00:08:38 2004  Ben Pfaff  <blp@gnu.org>
3366
3367         Added abort() after lots of assert(0) invocations to avoid some
3368         compiler warnings.  We really need a NOT_REACHED macro.
3369
3370 Tue Mar 23 08:00:42 WAST 2004 John Darrington <john@darrington.wattle.id.au>
3371
3372         * sort.c: Added missing call to temp_file_close.  Changed error 
3373         messages to warnings.
3374
3375         * set.q: Improved setting of set_view{length,width} to be more tolerant
3376         of buggy OSes.
3377
3378 Sun Mar 21 10:11:14 WST 2004 John Darrington <john@darrington.wattle.id.au>
3379
3380         * val-labs.c: Fixed a bug where PSPP would crash, if VALUE LABELS was
3381         used with incorrect syntax.
3382
3383         * error.c, error.h et al:  Overridden definition of assert for a
3384         custom one.
3385
3386         * test-q.c: Fixed a buglet where it would crash if no /VARIABLES
3387         subcommand was given when it ought to have been.
3388
3389 Sat Mar 20 22:19:08 2004  Ben Pfaff  <blp@gnu.org>
3390
3391         * tab.c: (tab_vline) Fix assertions to respect row_ofs and
3392         col_ofs.
3393         (tab_hline) Ditto.
3394         (tab_box) Ditto.
3395         (tab_joint_text) Ditto.
3396
3397 Sat Mar 20 17:57:23 2004  Ben Pfaff  <blp@gnu.org>
3398
3399         * levene.c: Add #include.
3400
3401         * set.q: (set_viewport) Add `int' argument to make its prototype
3402         correct for signal().
3403
3404 Sat Mar 20 15:35:17 2004  Ben Pfaff  <blp@gnu.org>
3405
3406         * expr-evl.c: (expr_evaluate) Assert that `c' is nonzero before
3407         using it.
3408
3409 Sat Mar 20 15:18:16 2004  Ben Pfaff  <blp@gnu.org>
3410
3411         Changed DFM from open-at-first-access to explicit-open.  Before,
3412         calling dfm_get_record() or dfm_put_record() would automatically
3413         open the file.  Now, you have to call dfm_open_for_reading() or
3414         dfm_open_for_writing() explicitly.  This makes it possible to
3415         check permissions, file existence, etc. earlier.
3416
3417         Also made struct file_handle more opaque, and clean up in general.
3418
3419         * data-list.c: (cmd_data_list) Open handle for reading.
3420
3421         * dfm.c: (struct dfm_fhuser_ext) Add `where', `saw_begin_data'
3422         members.
3423         (open_file_r) Renamed dfm_open_for_reading(), rewrote.
3424         (open_file_w) Renamed dfm_open_for_writing(), rewrote.
3425         (open_inline_file) Removed.
3426         (read_record) For inline_file, if we haven't seen BEGIN DATA, read
3427         it.  Deal with line_number in extension record instead of file
3428         handle.
3429         (dfm_get_record) Rewrote.
3430         (dfm_put_record) Rewrote.
3431         (dfm_push) Assert file is open and one of ours.  Deal with
3432         line_number in extension record instead of file handle.
3433         (dfm_pop) Assert file is open and one of ours.  Deal with
3434         line_number in extension record instead of file handle.
3435         (cmd_begin_data) Use dfm_open_for_reading().  Mark that we saw
3436         BEGIN DATA.     
3437
3438         * file-handle.h: (enum constants RH_RF_*) Removed.
3439         (enum constants FH_MD_*) Removed.
3440         (struct file_handle) Removed `name', `norm_fn', `fn', `where',
3441         `recform', `lrecl', `mode' members.  Public references to
3442         `recform' changed to use handle_get_mode(), references to `lrecl'
3443         changed to use handle_get_record_width().  Added `private' member.
3444         (enum file_handle_mode) New.
3445
3446         * file-handle.q: (struct private_file_handle) New structure.
3447         (struct file_handle_list) New structure.
3448         (static var files) New.
3449         (static var file_handles) Removed.
3450         (init_file_handle) Removed.
3451         (create_file_handle) Removed.
3452         (get_handle_with_name) New function.
3453         (get_handle_for_filename) New function.
3454         (cmd_file_handle) Rewritten.
3455         (hash_file_handle) Removed.
3456         (cmp_file_handle) Removed.
3457         (fh_init_files) Rewritten.
3458         (fh_parse_file_handle) Rewritten.  Allows identifiers as
3459         filenames.
3460         (fh_get_handle_by_name) Renamed handle_get_name(), all references
3461         updated.  Rewritten.
3462         (fh_get_handle_by_filename) Renamed handle_get_filename(), all
3463         references updated.  Rewritten.
3464         (fh_record_width) Renamed handle_get_record_width(), all
3465         references updated.  Rewritten.
3466         (handle_get_mode) New function.
3467
3468         * file-type.c: (cmd_file_type) Open handle for reading.
3469
3470         * filename.c: [unix] (struct file_identity) New structure.
3471         [unix] (fn_get_identity) New function.
3472         [unix] (fn_free_identity) New function.
3473         [unix] (fn_compare_file_identities) New function.
3474         [!unix] (struct file_identity) New structure.
3475         [!unix] (fn_get_identity) New function.
3476         [!unix] (fn_free_identity) New function.
3477         [!unix] (fn_compare_file_identities) New function.
3478
3479         * lexer.c: (static var put) Renamed put_token, all references
3480         updated.
3481         (static var put_tokstr) New.
3482         (static var put_tokval) New.
3483         (lex_init) Initialize put_tokstr().
3484         (restore_token) New function.
3485         (save_token) New function.
3486         (lex_get) Use restore_token().
3487         (lex_put_back) Use save_token().
3488         (lex_put_back_id) New function.
3489         (lex_put_forward) Removed.
3490         (lex_preprocess_line) Set put_token instead of using
3491         lex_put_forward().
3492         (lex_negative_to_dash) Use save_token(), set put_token directly.
3493         (dump_token) Use stderr instead of stdout.
3494
3495         * main.c: (main) Remove call to cmd_init().
3496         
3497         * matrix-data.c: (cmd_matrix_data) Open file for reading.
3498
3499         * pfm-read.c: Use handle_get_filename() instead of trying to use
3500         h->fn directly, all over.
3501
3502         * pfm-write.c: Ditto.
3503
3504         * print.c: (internal_cmd_print) Open handle for writing.
3505         (dump_table) Use handle_get_filename().
3506         (print_trns_proc) Use handle_get_mode().
3507         (cmd_print_space) Use fh_parse_file_handle().
3508         Open handle for writing.
3509         [0] (debug_print) Removed.
3510
3511         * sfm-read.c: Use handle_get_filename() instead of trying to use
3512         h->fn directly, all over.
3513
3514         * sfm-write.c: Ditto.
3515
3516 Sat Mar 20 14:35:48 2004  Ben Pfaff  <blp@gnu.org>
3517
3518         Fix memory leaks.
3519         
3520         * autorecode.c: (arc_free) Free arc->src_values.
3521
3522         * error.c: (msg) Free buf.
3523
3524         * val-labs.c: (do_value_labels) Always free vars.
3525
3526         * vfm.c: (close_active_file) If sink has no make_source then call
3527         its destroy function.
3528
3529 Sat Mar 20 14:00:24 2004  Ben Pfaff  <blp@gnu.org>
3530
3531         Fixed cmd_parse() so that it always skips past a full command
3532         name.  A few special commands for which this would be bad get
3533         special treatment.  This lets us drop code for skipping past the
3534         end of a command name in most cmd_*() functions.  It's not worth
3535         listing all the commands affected.
3536
3537         * command.c: (struct command) Remove `cmd' member, replace by
3538         `name' member, all references updated.  Remove `word', `next',
3539         `skip_entire_name' members.
3540         (macro DEFCMD) Deal with revised `struct command'.
3541         (macro UNIMPL) Ditto.
3542         (macro SPCCMD) New macro for commands whose last word shouldn't be
3543         skipped.
3544         (static array cmd_table[]) Make const, rename `commands', remove
3545         sentinel element.
3546         (macro COMMAND_CNT) New macro.
3547         (split_words) Removed.
3548         (cmd_init) Removed.
3549         (FILE_TYPE_okay) Make parameter const.
3550         (cmd_parse) Improve error messages.
3551         (match_strings) New function.
3552         (next_word) New function.
3553         (enum command_match) New enum.
3554         (conflicting_3char_prefixes) New function.
3555         (conflicting_3char_prefix_command) New function.
3556         (cmd_match_words) New function.
3557         (count_matching_commands) New function.
3558         (get_command_name) New function.
3559         (free_words) New function.
3560         (unknown_command_error) New function.
3561         (figure_out_command) Renamed parse_command_name(), rewritten.
3562
3563         * command.def: Removed @ command.  Marked BEGIN DATA, DOCUMENT,
3564         FILE LABEL, REMARK, SUBTITLE, TITLE as special.  Renamed EVALUATE
3565         to DEBUG EVALUATE.  Added N alias for N OF CASES, SORT alias for
3566         SORT CASES.
3567
3568         * command.h: (macro SPCCMD) New.
3569
3570         * include.c: (cmd_include_at) Removed.
3571         (cmd_include) Allow identifier to be used as filename.
3572
3573         * inpt-pgm.c: (cmd_reread) Use fh_parse_file_handle().
3574
3575         * t-test.q: (cmd_t_test) Command name is now parsed for us.
3576         
3577
3578 Sat Mar 20 13:56:00 2004  Ben Pfaff  <blp@gnu.org>
3579
3580         Start work on better test framework.
3581         
3582         * Makefile.am: (pspp_sources) Add debug.c.
3583         
3584         * debug.c: New file.
3585
3586         * compute.c: (cmd_evaluate) Moved to debug.c, renamed
3587         cmd_debug_evaluate().
3588
3589         * expr-prs.c: (expr_parse) Remove PXP_DUMP support.
3590
3591         * expr.h: (enum constant PXP_DUMP) Removed.
3592
3593 Sat Mar 20 00:05:42 WST 2004 John Darrington <john@darrington.wattle.id.au>
3594
3595         * set.q:  Implemented the SHOW command, and synced it to the existing 
3596         SET cmd.
3597
3598         Added a handler for SIGWINCH so that viewlength and viewwidth follow
3599         changes as the window size is changed.
3600
3601         Added fallback to set viewlength and viewwidth from LINES and COLUMS
3602         environment variables if other methods are not available.
3603
3604         glob.c: Removed a lot of global variables from glob.c and encapsulated 
3605         them in set.q
3606
3607         random.c: Tidied up the way the random seed is set.
3608
3609         str.c: Added a ds_vprintf function.
3610
3611         error.c: Extended dump_message so that messages are always broken at
3612         '\n' characters.
3613         
3614 Thu Mar 18 11:07:14 2004  Ben Pfaff  <blp@gnu.org>
3615
3616         * pfm-write.c: (bufwrite) Write out the correct element for string
3617         variables.  From Andreas Streichardt <streichardt@globalpark.de>.
3618
3619 Mon Mar 15 20:48:03 2004  Ben Pfaff  <blp@gnu.org>
3620
3621         Get rid of static and global (!) vars in matrix-data.c.
3622
3623         * matrix-data.c: (static var nr_data) Removed.
3624         (static var nr_factor_values) Removed.
3625         (static var max_cell_index) Removed.
3626         (static var split_values) Removed.
3627         (struct nr_aux_data) New structure.
3628         (read_matrices_without_rowtype) Use a local struct nr_aux_data in
3629         place of static vars, pass to create_case_source() and procedure()
3630         as aux data.
3631         (nr_read_data_lines) Use struct nr_aux_data * parameter instead of
3632         struct matrix_data_pgm *.
3633         (nr_read_splits) Ditto.
3634         (nr_read_factors) Ditto.
3635         (nr_output_data) Ditto.
3636         (static var wr_content) Removed.
3637         (global var wr_data) Removed.
3638         (global var wr_current) Removed.
3639         (struct wr_aux_data) New structure.
3640         (read_matrices_with_rowtype) Use a local struct wr_aux_data in
3641         place of static vars, pass to create_case_source() and procedure()
3642         as aux data.
3643         (matrix_data_read_with_rowtype) Use struct wr_aux_data * parameter
3644         instead of matrix_data_pgm *.
3645         (wr_read_splits) Ditto.
3646         (wr_output_data) Ditto.
3647         (wr_read_rowtype) Ditto.
3648         (wr_read_factors) Ditto.
3649         (wr_read_indeps) Ditto.
3650         
3651 Mon Mar 15 20:07:29 2004  Ben Pfaff  <blp@gnu.org>
3652
3653         Get rid of static vars in autorecode.c.
3654
3655         * autorecode.c: (struct autorecode_trns) Rename `arc' to `specs',
3656         `n_arc' to `spec_cnt'.  All references updated.
3657         (static var v_src) Removed.
3658         (static var v_dest) Removed.
3659         (static var h_trns) Removed.
3660         (static var nv_src) Removed.
3661         (static var descend) Removed.
3662         (static var print) Removed.
3663         (enum direction) New enum.
3664         (struct autorecode_pgm) New structure.
3665         (cmd_autorecode) Use struct autorecode_pgm instead of static vars.
3666         Move n_dest local var into struct autorecode_pgm for ease of
3667         clean-up.  Use arc_free().
3668         (arc_free) New function.
3669         (recode) Modify to take struct autorecode_pgm * parameter instead
3670         of using statics.  Let the caller clean up.
3671         (autorecode_proc_func) Use struct autorecode_pgm * auxiliary data
3672         instead of statics.  Rearrange code a little.
3673
3674 Mon Mar 15 00:25:02 2004  Ben Pfaff  <blp@gnu.org>
3675
3676         Get rid of static, global vars in recode.c.  Remove debug code.
3677
3678         * recode.c: (static var head) Removed.
3679         (global var v) Removed.
3680         (global var nv) Removed.
3681         (cmd_recode) New local variables head, v, nv.  Initialize and free
3682         v.  Don't call debug_print().
3683         [DEBUGGING] (dump_dest) Removed.
3684         [DEBUGGING] (debug_print) Removed.
3685
3686 Mon Mar 15 00:14:49 2004  Ben Pfaff  <blp@gnu.org>
3687
3688         Get rid of static vars in expr-opt.c.
3689
3690         * expr-opt.c: (static var e) Removed.
3691         (static var nop) Removed.
3692         (static var mop) Removed.
3693         (static var ndbl) Removed.
3694         (static var mdbl) Removed.
3695         (static var nstr) Removed.
3696         (static var mstr) Removed.
3697         (static var nvars) Removed.
3698         (static var mvars) Removed.
3699         (struct expr_dump_state) New structure.
3700         (dump_expression) Use new struct expr_dump_state instead of static
3701         vars and pass to functions we call.
3702         (dump_node) Use struct expr_dump_state * parameter.
3703         (emit) Ditto.
3704         (emit_num_con) Ditto.
3705         (emit_str_con) Ditto.
3706         (emit_var) Ditto.
3707         
3708 Mon Mar 15 00:03:51 2004  Ben Pfaff  <blp@gnu.org>
3709
3710         Get rid of static var in COUNT.
3711
3712         * count.c: (static var head) Move into cmd_count().
3713         (cmd_count) [DEBUGGING] Don't call debug_print.
3714         [DEBUGGING] (debug_print) Removed.
3715
3716 Sun Mar 14 23:56:09 2004  Ben Pfaff  <blp@gnu.org>
3717
3718         Get rid of static vars in VALUE LABELS, ADD VALUE LABELS.
3719
3720         * val-labs.c: (static var v) Removed.
3721         (static var nv) Removed.
3722         [DEBUGGING] (debug_print) Removed.
3723         (verify_val_labs) Add struct variable **, int parameters.
3724         (get_label) Ditto.  Improve error messages, streamline.
3725         (erase_labels) New function for erasing value labels, taking over
3726         part of verify_val_labs()'s function.
3727         (init) Removed.
3728         (done) Removed.
3729         (cmd_value_labels) No need to call init() or done() anymore.
3730         (cmd_add_value_labels) Ditto.
3731         (do_value_labels) Add vars, var_cnt local variables.  Clean up
3732         after them internally.  Call erase_labels() if we should.  Don't
3733         call debug_print().
3734
3735 Sun Mar 14 23:33:53 2004  Ben Pfaff  <blp@gnu.org>
3736
3737         Get rid of static vars in MATCH FILES.
3738         
3739         * get.c: (static var mtf_head) Removed.
3740         (static var mtf_tail) Removed.
3741         (static var mtf_by) Removed.
3742         (static var mtf_n_by) Removed.
3743         (static var mtf_master) Removed.
3744         (static var mtf_seq_num) Removed.
3745         (static var mtf_seq_nums) Removed.
3746         (static var mtf_sink) Removed.
3747         (static var mtf_case) Removed.
3748         (struct mtf_proc) New structure.
3749         (cmd_match_files) Use struct mtf_proc instead of static vars.
3750         (mtf_processing_finish) Ditto.
3751         (mtf_free) Ditto.
3752         (mtf_delete_file_in_place) Ditto.
3753         (mtf_read_nonactive_records) Ditto.
3754         (mtf_compare_BY_values) Ditto.
3755         (mtf_processing) Ditto.
3756         (mtf_merge_dictionary) Ditto.
3757
3758 Sun Mar 14 22:48:12 2004  Ben Pfaff  <blp@gnu.org>
3759
3760         * command.def: Add CASESTOVARS, VARSTOCASES unimplemented commands.
3761
3762         * dictionary.c: (dict_rename_var) Add assertion.
3763         (dict_contains_var) Check by index instead of name.
3764
3765 Sun Mar 14 22:01:02 2004  Ben Pfaff  <blp@gnu.org>
3766
3767         Get rid of compaction_necessary, compaction_nval, compaction_case.
3768         Redo VFM interface.  Replace disk_sink and memory_sink by
3769         storage_sink, disk_source and memory_source by storage_source.
3770
3771         * vfm.h: (struct case_sink) Add `dict', `idx_to_fv', `value_cnt'
3772         members.
3773
3774         * vfm.c: 
3775         (struct write_case_data) Remove `begin_func', `end_func',
3776         `func_aux' members.  Add `aux', `trns_case', `sink_case',
3777         `cases_written', `cases_analyzed' members.
3778         (global var compaction_necessary) Make static.
3779         (global var compaction_nval) Removed.
3780         (global var compaction_case) Removed.
3781         (static var case_count) Removed.
3782         (struct procedure_aux_data) Removed.
3783         (struct split_aux_data) Removed.
3784         (procedure) Remove begin_func, end_func parameters.  Rewrite.
3785         (static var not_canceled) Removed.
3786         (process_active_file) Removed.
3787         (process_active_file_write_case) Removed.
3788         (process_active_file_output_case) Removed.
3789         (prepare_for_writing) Moved into open_active_file().
3790         (arrange_compaction) Ditto.
3791         (setup_lag) Ditto.
3792         (open_active_file) Rewrote.
3793         (write_case) New function.
3794         [DEBUGGING] (index_to_varname) Removed.
3795         (execute_transformations) New function.
3796         (exclude_this_case) Renamed filter_case(), changed interface.
3797         (clear_case) Added struct ccase * parameter to interface.
3798         (close_active_file) Added struct write_case_data * parameter,
3799         rewrote.
3800         (disk_sink_create) Removed.
3801         (disk_sink_destroy) Removed.
3802         (disk_sink_make_source) Removed.
3803         (disk_sink_write) Removed.
3804         (disk_source_count) Removed.
3805         (disk_source_destroy) Removed.
3806         (disk_source_read) Removed.
3807         (global var disk_sink_class) Removed.
3808         (global var disk_source_class) Removed.
3809         (global var memory_sink_class) Removed.
3810         (global var memory_source_class) Removed.
3811         (memory_sink_create) Removed.
3812         (memory_sink_destroy) Removed.
3813         (memory_sink_make_source) Removed.
3814         (memory_sink_write) Removed.
3815         (memory_source_count) Removed.
3816         (memory_source_destroy) Removed.
3817         (memory_source_get_cases) Removed.
3818         (memory_source_read) Removed.
3819         (memory_source_set_cases) Removed.
3820         (struct disk_stream_info) Removed.
3821         (struct memory_sink_info) Removed.
3822         (struct memory_source_info) Removed.
3823         (write_active_file_to_disk) Removed.
3824         (destroy_storage_stream_info) New function.
3825         (global var null_sink_class) New var.
3826         (global var storage_sink_class) New var.
3827         (global var storage_source_class) New var.
3828         (open_storage_file) New function.
3829         (storage_sink_destroy) New function.
3830         (storage_sink_make_source) New function.
3831         (storage_sink_open) New function.
3832         (storage_sink_write) New function.
3833         (storage_source_count) New function.
3834         (storage_source_destroy) New function.
3835         (storage_source_get_cases) New function.
3836         (storage_source_on_disk) New function.
3837         (storage_source_read) New function.
3838         (storage_source_set_cases) New function.
3839         (storage_source_to_disk) New function.
3840         (storage_to_disk) New function.
3841         (struct storage_stream_info) New structure.
3842         (write_storage_file) New function.
3843         (procedure_write_case) Removed.
3844         (create_case_source) Add `struct dictionary *' parameter, all
3845         references updated.
3846         (create_case_sink) Ditto.
3847         (free_case_sink) New function.
3848         (struct split_aux_data) New structure.
3849         (procedure_with_splits) New function implementing what procedure()
3850         used to.
3851         (SPLIT_FILE_proc_func) Removed.
3852         (procedure_with_splits_callback) New function.
3853         (equal_splits) New function.
3854         
3855         * aggregate.c: Pass around a struct instead of using statics.
3856         (static var outfile) Remove.
3857         (enum type) Give it tag `missing_treatment'.
3858         (static var missing) Remove.
3859         (static var sort) Remove.
3860         (static var agr_first) Remove.
3861         (static var agr_next) Remove.
3862         (static var case_count) Remove.
3863         (static var prev_case) Remove.
3864         (static var buf64_1xx) Remove.
3865         (static var buf_1xx) Remove.
3866         (struct agr_proc) New structure incorporating the above.
3867         (cmd_aggregate) Use new struct.  Clean up error handling using
3868         agr_destroy().  Completely rewrite actual implementation of
3869         aggregation.
3870         (create_sysfile) Add struct agr_proc * parameter, modify
3871         accordingly.
3872         (parse_aggregate_functions) Ditto.
3873         (free_aggregate_functions) Ditto.  Rename agr_destroy().
3874         (aggregate_single_case) Add struct agr_proc * parameter, modify
3875         accordingly.
3876         (accumulate_aggregate_info) Ditto.
3877         (dump_aggregate_info) Ditto.
3878         (initialize_aggregate_info) Ditto.
3879         (agr_00x_trns_proc) Removed.
3880         (agr_00x_end_func) Removed.
3881         (agr_10x_trns_proc) Removed.
3882         (agr_10x_trns_free) Removed.
3883         (agr_10x_end_func) Removed.
3884         (agr_11x_read) Removed.
3885         (agr_11x_finish) Removed.
3886         [DEBUGGING] (debug_print) Removed.
3887         (write_case_to_sfm) Add struct agr_proc * parameter, modify
3888         accordingly.
3889         (agr_to_active_file) New function.
3890         (presorted_agr_to_sysfile) New function.
3891         (sort_agr_to_sysfile) New function.
3892
3893         * autorecode.c: (cmd_autorecode) Use procedure_with_splits().
3894
3895         * crosstabs.q: (internal_cmd_crosstabs) Ditto.
3896
3897         * descript.q: (cmd_descriptives) Ditto.
3898
3899         * dfm.c: (cmd_begin_data) Check for storage_source_class.  Adapt
3900         to new procedure() interface.
3901
3902         * command.c: (cmd_execute) Adapt to new procedure() interface.
3903
3904         * dictionary.c: (dict_compact_values) Also delete scratch
3905         variables.
3906         (dict_get_compacted_value_cnt) New function.
3907         (dict_get_compacted_idx_to_fv) New function.
3908
3909         * flip.c: (cmd_flip) Warn about and cancel TEMPORARY.
3910         (cmd_flip) Adapt to new procedure() interface.
3911         (flip_sink_write) Use sink->idx_to_fv.
3912
3913         * frequencies.q: (internal_cmd_frequencies) Use
3914         procedure_with_splits().
3915
3916         * get.c: (cmd_save_internal) Adapt to new procedure() interface.
3917         (static var mtf_sink) New static var.
3918         (static var mtf_case) New static var.
3919         (cmd_match_files) Warn about and cancel TEMPORARY.  Redo the way
3920         we actually implement the matching.
3921         (mtf_delete_file_in_place) Use mtf_case.
3922         (mtf_processing) Use mtf_case and mtf_sink.
3923         (cmd_export) Adapt to new procedure() interface.
3924
3925         * levene.c: (levene) Use procedure_with_splits().
3926
3927         * list.q: (cmd_list) Use procedure_with_splits().
3928
3929         * matrix-data.c: (read_matrices_without_rowtype) Adapt to new
3930         procedure() interface.
3931         (read_matrices_with_rowtype) Ditto.
3932
3933         * modify-vars.c; (cmd_modify_vars) Warn about and cancel
3934         TEMPORARY.  Adapt to new procedure() interface.
3935
3936         * rename-vars.c: Warn about and cancel TEMPORARY.
3937
3938         * sort.c: (cmd_sort_cases) Warn about TEMPORARY.
3939         (sort_cases) Use dict_get_compacted_value_cnt() instead of
3940         compaction_nval.  Adapt to new procedure() interface.  Use
3941         storage_source_to_disk().
3942         (do_internal_sort) Don't try to dump the cases to memory.
3943         (compare_case_lists) Pass null idx_to_fv.
3944         (struct initial_run_state) Add `idx_to_fv' member.  Remove
3945         `case_size' member.
3946         (write_initial_runs) Don't initialize irs->case_size.  Adapt to
3947         new procedure() interface.  Reset irs->idx_to_fv after calling
3948         procedure().
3949         (sort_sink_write) Set irs->idx_to_fv.  Use case_size from struct
3950         sort_cases_pgm.  Pass irs, not struct sort_cases_pgm to
3951         push_heap().
3952         (destroy_initial_run_state) Don't dereference irs after freeing
3953         it.
3954         (allocate_cases) Don't calculate case_size locally.
3955         (compare_record) Add idx_to_fv parameter.
3956         (compare_record_run) Change parameter from struct sort_cases_pgm *
3957         to struct initial_run_state *.  Pass irs->idx_to_fv to
3958         compare_record().
3959         (compare_record_run) Third parameter now a struct
3960         initial_run_state *.
3961         (output_record) No need for out_case anymore.  Pass irs, not
3962         struct sort_cases_pgm to pop_heap().  Use case_size from struct
3963         sort_cases_pgm.
3964         (merge) Use case_size from struct sort_cases_pgm.
3965         (merge_once) Use case_size from struct sort_cases_pgm.
3966         Pass null pointer to compare_record() as idx_to_fv.
3967         (global var sort_sink_class) Make static.
3968
3969         * t-test.q: (cmd_t_test) Use procedure_with_splits().
3970
3971         * temporary.c: Remove debugging crap.
3972
3973 Sat Mar 13 14:19:52 WST 2004 John Darrington <john@darrington.wattle.id.au>
3974
3975         * t-test.q, levene.c: Fixed up the handling of MISSING values
3976         int the T-TEST
3977
3978 Fri Mar 12 16:23:35 WST 2004 John Darrington <john@darrington.wattle.id.au>
3979
3980         * t-test.q, levene.c: Added support for T-TEST /GROUP where only 
3981         one value is given.
3982
3983 Wed Mar 10 23:25:13 2004  Ben Pfaff  <blp@gnu.org>
3984
3985         Change explicit variable name checks into use of
3986         dict_class_from_id().
3987
3988         * dictionary.c: (dict_create_var)  Change explicit variable name
3989         check into use of dict_class_from_id().
3990
3991         * get.c: (trim_dictionary) Ditto.
3992
3993         * sel-if.c: (cmd_filter) Ditto.
3994
3995         * sysfile-info.c: (cmd_display) Ditto.
3996
3997         * vars-prs.c: (parse_DATA_LIST_vars) Ditto.
3998
3999         * vfm.c: (arrange_compaction) Ditto.
4000
4001         * weight.c: (cmd_weight) Ditto.
4002
4003 Wed Mar 10 21:16:34 2004  Ben Pfaff  <blp@gnu.org>
4004
4005         * temporary.c: (cmd_temporary) When TEMPORARY was the first
4006         transformation following the input program, if any, for some
4007         reason we special-cased f_trns.  That's just wrong.  It should
4008         always be set to n_trns.
4009
4010 Tue Mar  9 23:44:40 2004  Ben Pfaff  <blp@gnu.org>
4011
4012         * format.c: (parse_format_specifier_name) Fix brown-bag bug
4013         introduced in last check-in.
4014
4015 Tue Mar  9 23:10:41 2004  Ben Pfaff  <blp@gnu.org>
4016
4017         * format.c: (global array translate_fmt[]) Removed.
4018         (translate_fmt) New function as replacement.
4019         (parse_format_specifier_name) Rewrite.
4020
4021         * pfm-read.c: (convert_format) Use translate_fmt() instead of
4022         translate_fmt[].
4023
4024         * sfm-read.c: (parse_format_spec) Ditto.
4025
4026         * postscript.c: (text) Fix handling of fonts with missing
4027         ligatures.
4028
4029         * sort.c: (struct external_sort) Add temp_name member.
4030         (destroy_external_sort) Free temp_dir, temp_name members.
4031         (init_external_sort) Allocate temp_name.
4032         (get_temp_file_name) Change prototype.
4033         (open_temp_file) Deal with change to get_temp_file_name().
4034         (close_temp_file) Ditto.
4035         (remove_temp_file) Ditto.
4036         (write_temp_file) Ditto.
4037         (read_temp_file) Ditto.
4038         (sort_sink_destroy) Removed.
4039         (sort_sink_class) Change destroy member to null.
4040
4041 Tue Mar  9 22:36:34 2004  Ben Pfaff  <blp@gnu.org>
4042
4043         Eliminate temp_case.
4044
4045         * aggregate.c: (cmd_aggregate) No need to save/restore temp_case
4046         anymore.  Use agr_11x_finish().
4047         (aggregate_single_case) Make first param const.
4048         (accumulate_aggregate_info) Ditto.
4049         (agr_00x_end_func) Use compaction_case, not temp_case.
4050         (agr_11x_func) Break into agr_11x_read(), agr_11x_finish().
4051
4052         * data-list.c: (struct data_list_pgm) Add `case_size' member.
4053         (cmd_data_list) Initialize case_size.
4054         (read_from_data_list_fixed) Add struct ccase * param, use instead
4055         of temp_case.
4056         (read_from_data_list_free) Ditto.
4057         (read_from_data_list_list) Ditto.
4058         (read_one_case) Rename data_list_trns_proc(), all references
4059         updated.  Add argument in calling above functions.  Use c
4060         argument instead of temp_case.
4061         (destroy_dls) Rename data_list_trns_free(), all references
4062         updated.
4063
4064         * expr-evl.c: (expr_evaluate) Make second parameter const.
4065
4066         * file-type.c: (struct file_type_pgm) Add `case_size' member.
4067         (cmd_end_file_type) Initialize `case_size'.
4068         (file_type_source_read) Add struct ccase * parameter.  Use instead
4069         of temp_case.
4070
4071         * flip.c: Rewritten.
4072
4073         * get.c: (struct get_pgm) New structure to keep track of
4074         case_size.
4075         (cmd_get) Initialize case_size.
4076         (cmd_import) Ditto.
4077         (get_source) Deal with struct get_pgm.
4078         (get_source_read) Add struct ccase * parameter, use instead of
4079         temp_case.
4080         (import_source_read) Ditto.
4081
4082         * get.c: Use a null pointer instead of temp_case to represent the
4083         "current case" in a struct mtf_file's input member.
4084         (mtf_processing_finish) Pass null to mtf_processing(), not
4085         temp_case.
4086         (mtf_read_nonactive_records) Don't set iter->input to temp_case.
4087         (mtf_compare_BY_values) Add extra arg, use instead of null input
4088         members.
4089         (mtf_processing) Use c parameter instead of temp_case.  Pass
4090         compaction_case to process_active_file_output_case().
4091         
4092         * glob.c: (global variable temp_case) Removed.
4093
4094         * inpt-pgm.c: (struct input_program_pgm) Add `case_size' member.
4095         (cmd_input_program) Initialize case_size.  Set
4096         vfm_source->value_cnt.
4097         (init_case) Add struct ccase * parameter, use instead of
4098         temp_case.
4099         (clear_case) Ditto.
4100         (input_program_source_read) Ditto.
4101
4102         * matrix-data.c: (matrix_data_read_without_rowtype) Ditto.
4103         (dump_cell_content) Ditto.
4104         (nr_output_data) Ditto.
4105         (read_matrices_without_rowtype) Ditto.
4106         (matrix_data_read_with_rowtype) Ditto.
4107         (wr_read_splits) Ditto.
4108         (wr_output_data) Ditto.
4109
4110         * sort.h: (struct sort_cases_pgm) New member `case_size'.
4111         
4112         * sort.c: (sort_cases) Initialize scp->case_size.
4113         (struct external_sort) Remove `case_size' member.
4114         (write_initial_runs) Only call vfm_sink->class_destroy if
4115         non-null.
4116         (struct sort_source_aux) New structure.
4117         (sort_source_read_helper) New function.
4118         (sort_source_read) Use sort_source_read_helper().
4119         (read_sort_output) Change interface to be more reasonable.
4120         (read_internal_sort_output) Ditto.
4121         (read_external_sort_output) Ditto.
4122
4123         * vars-prs.c: (dict_class_to_name) Pass return value through
4124         gettext.
4125
4126         * vfm.c: (struct procedure_aux_data) Add `trns_case' member.
4127         (procedure) Initialize trns_case.
4128         (procedure) Pass trns_case to vfm_source->class->read().
4129         Free trns_case.
4130         (process_active_file) Start using struct procedure_aux_data.
4131         (process_active_file_write_case) Pass trns_case to
4132         transformations, lag_case(), clear_case().
4133         (process_active_file_output_case) Add struct ccase * parameter.
4134         (create_trns_case) New function.
4135         (make_temp_case) Removed.
4136         (vector_initialization) Removed.
4137         (close_active_file) Only call make_source if non-null, otherwise
4138         set vfm_source to null pointer.  Don't free temp_case.
4139         (disk_source_read) Add struct ccase * parameter, use instead of
4140         temp_case.
4141         (memory_source_read) Ditto.
4142         (lag_case) Add const struct ccase * member.
4143         (procedure_write_case) Use trns_case instead of temp_case.
4144         (clear_case) Add struct ccase * member, use instead of temp_case.
4145         (exclude_this_case) Ditto.
4146         (create_case_source) Add struct dictionary * parameter, use to
4147         initialize source->value_cnt.
4148
4149         * vfm.h: (struct case_source) Add `value_cnt' member.
4150         (struct case_source_class) Add struct ccase * parameter to `read'
4151         member function pointer.
4152         (struct case_sink_class) Make struct ccase * parameter const in
4153         `write' member function pointer.
4154         
4155 Wed Mar  3 20:44:37 2004  Ben Pfaff  <blp@gnu.org>
4156
4157         Fix a lot of "possibly uninitialized variable" warnings.  Some of
4158         them are even real bugs.  A few of them make me wonder how the
4159         code ever worked.
4160
4161         * aggregate.c: (parse_aggregate_functions) Initialize `function.
4162
4163         * ascii.c: (output_lines) Add default case to switch.
4164
4165         * crosstabs.q: Remove static variable `expected' and all
4166         references to it.
4167         (display_crosstabulation) Always calculate expected value.
4168         (calc_chisq) Ditto.
4169         (output_pivot_table) Initialize `cmp'.
4170         (display_crosstabulation) New variable `last_row', which is
4171         initialized.
4172
4173         * data-in.c: (parse_numeric) Always initialize sign.  How did this
4174         work at all?!
4175
4176         * data-list.c: (repeating_data_trns_proc) Always initialize code.
4177         Always set info.ofs.  (How did this work?!)
4178
4179         * expr-opt.c: (optimize_tree) Always initialize `m'.
4180         (evaluate_tree) Always initialize `c'.  (How did this work?)
4181
4182         * frequencies.q: (frq_custom_variables) Always initialize min,
4183         max.
4184         (frq_custom_grouped) Always initialize `dl'.
4185
4186         * groff-font.c: (groff_read_font) Always initialize char_set.
4187
4188         * matrix-data.c: (nr_output_data) Initialize `split'.
4189         (wr_read_splits) Remove shadowing split_cnt declaration.
4190         (wr_output_data) Initialize `split'.
4191
4192         * output.c: (tokener) Skip add character on syntax error.
4193
4194         * pool.c: (pool_strndup) Always set `copy'.  (How did this work?!)
4195
4196         * postscript.c: (read_ps_encodings) Use line.string instead of
4197         uninitialized `bp'.
4198         (write_text) Add default case to switch.
4199         (text) Always initialize multiple variables.  Fix bug with
4200         ligatures.
4201
4202         * print.c: (fixed_parse_fortran) Initialize head.
4203         (alloc_line) Add default case to switch.
4204
4205         * recode.c: (parse_dest_spec) Handle case where nothing matches.
4206         (recode_trns_proc) Move variable declaration inward.  Add default
4207         case to switch.
4208
4209         * sfm-read.c: (read_header) Initialize skip_amt.
4210
4211         * sysfile-info.c: (display_variables) Always initialize pc.
4212
4213         * vars-prs.c: Initialized `included'.
4214
4215 Wed Mar  3 09:30:09 2004  Ben Pfaff  <blp@gnu.org>
4216
4217         * main.c: (main) sigaction()'s sa_flags member was uninitialized.
4218         Just use signal() instead.
4219
4220 Wed Mar  3 09:26:30 2004  Ben Pfaff  <blp@gnu.org>
4221
4222         Get rid of vfm_sink_info and vfm_source_info.
4223         
4224         * aggregate.c: (agr_00x_end_func) Don't increment
4225         sfm_sink_info.ncases.
4226
4227         * sort.c: (do_internal_sort) Get case count from
4228         vfm_source->class->count().
4229         (struct external_sort) Add `case_size' member.
4230         (do_external_sort) Initialize case_size.
4231         (struct initial_run_state) Add `case_size' member.
4232         (write_initial_runs) Initialize case_size.
4233         (sort_sink_write) Use case_size.
4234         (read_external_sort_output) Use case_size.  Get case_cnt from
4235         initial_runs.
4236
4237         * vfm.c: (struct write_case_data) Add underscores to existing arg
4238         names, all references updated.  Renamed `aux' as `func_aux', all
4239         references updated.  Added new `aux' member.
4240         (global var vfm_source_info) Removed.
4241         (global var vfm_sink_info) Removed.
4242         (struct procedure_aux_data) New.
4243         (struct split_aux_data) New.
4244         (procedure) Use `aux' fields for procedure_aux_data,
4245         split_aux_data.
4246         (process_active_file_write_case) Pass case_count + 1 to
4247         transformation procedures, exclude_this_case().
4248         (process_active_file_output_case) Don't increment
4249         vfm_sink_info.ncases.
4250         (prepare_for_writing) Don't initialize vfm_sink_info.  Don't try
4251         to send data to disk early.
4252         (make_temp_case) Don't use vfm_sink_info.case_size.
4253         (close_active_file) Don't initialize vfm_source_info.
4254         (struct disk_stream_info) New, to allow for case_cnt and case_size fields.
4255         (disk_sink_create) Initialize and/or update disk_stream_info.
4256         (disk_sink_write) Ditto.
4257         (disk_sink_destroy) Ditto.
4258         (disk_sink_make_source) Ditto.
4259         (disk_source_read) Ditto.
4260         (disk_source_destroy) Ditto.
4261         (global var disk_source_class) Add disk_source_count().
4262         (disk_source_count) New function.
4263         (struct memory_sink_info) Add `case_cnt', `case_size' members.
4264         (struct memory_source_info) Ditto.
4265         (memory_sink_create) Deal with case_cnt, case_size.
4266         (memory_sink_write) Ditto.
4267         (memory_sink_make_source) Ditto.
4268         (memory_source_read) Ditto.
4269         (memory_source_count) New function.
4270         (memory_source_class) Add memory_source_count().
4271         (procedure_write_case) Don't use vfm_sink_info.ncases.  Do use
4272         proc_aux->cases_written, and pass it to transformation procedures
4273         and exclude_this_case ().
4274         (exclude_this_case) Add case_num parameter.  Pass it to
4275         expr_evaluate().
4276         (SPLIT_FILE_procfunc) Use split_aux->prev_case instead of static
4277         variable.
4278
4279         * vfm.h: (struct case_source_class) Add `count' member.
4280
4281         * vfmP.h: (struct stream_info) Removed.
4282         (global variable vfm_source_info) Removed.
4283         (global variable vfm_sink_info) Removed.
4284         
4285 Tue Mar  2 23:38:17 2004  Ben Pfaff  <blp@gnu.org>
4286
4287         * var.h: (typedef trns_proc_func) New typedef.
4288         (trns_free_func) New typedef.
4289         (struct trns_header) Change `proc' to type trns_proc_func, `free'
4290         to type trns_free_func.  This only changes the actual type of
4291         trns_proc_func, adding a `case_num' parameter.  Updated all
4292         implementations to use the typedefs instead.
4293
4294         * compute.c: (compute_num) Pass case_num to expr_evaluate().
4295         (compute_num_vec) Ditto.
4296         (compute_str) Ditto.
4297         (compute_str_vec) Ditto.
4298
4299         * do-if.c: (do_if_trns_proc) Ditto.
4300
4301         * expr-evl.c: (expr_evaluate) Add new case_num parameter, use for
4302         OP_CASENUM.
4303
4304         * inpt-pgm.c: (input_program_source_read) Maintain case count,
4305         pass to transformation functions.
4306         (reread_trns_proc) Pass case_num arg to expr_evaluate().
4307
4308         * loop.c: (loop_1_trns_proc) Ditto.
4309         (loop_2_trns_proc) Ditto.
4310         (loop_3_trns_proc) Ditto.
4311
4312         * print.c: (print_space_trns_proc) Ditto.
4313
4314         * sel-if.c: (select_if_proc) Ditto.
4315
4316 Tue Mar  2 11:36:52 2004  Ben Pfaff  <blp@gnu.org>
4317
4318         * frequencies.q: (cleanup_freq_tab) Avoid memory leak by
4319         destroying hash table.
4320
4321         * glob.c: (read_active_file) Variable not referenced, removed.
4322         (cancel_input_pgm) Ditto.
4323
4324         * levene.c: Add #include <stdlib.h> needed to call free().
4325
4326         * aggregate.c: (parse_aggregate_functions) Make `function'
4327         variable const.
4328
4329 Tue Mar  2 11:30:56 2004  Ben Pfaff  <blp@gnu.org>
4330
4331         Start working to eliminate VFM dependence on static variables.
4332
4333         * command.c: (cmd_parse) Use case_source_is_class().
4334
4335         * data-list.c: Rewrite to eliminate use of static variables.
4336
4337         * dfm.c: (cmd_begin_data) Use case_source_is_class().
4338
4339         * file-handle.q: (fh_handle_name) Make parameter const.
4340
4341         * file-type.c: Rewrite to eliminate use of static variables.
4342
4343         * flip.c: Rewrite to eliminate use of static variables.
4344
4345         * format.c: (get_format_var_width) New function.
4346
4347         * get.c: Eliminate use of static variables.
4348
4349         * inpt-pgm.c: Eliminate use of static variables.
4350
4351         * matrix-data.c: Eliminate use of static variables.
4352
4353         * set.q: (set_max_workspace) New variable.
4354         (cmd_set) Use SET WORKSPACE to modify set_max_workspace.
4355
4356         * var.h: (struct case_list) Move here from vfmP.h.
4357
4358         * vars-atr.c: (discard_variables) Handle new vfm_source type.
4359
4360         * vfm.c: (vfm_source) Change type from struct case_stream to
4361         struct case_source.
4362         (vfm_sink) Change type from struct case_stream to struct
4363         case_sink.
4364         (static var paging) Rename workspace_overflow, all references
4365         updated.
4366         (procedure) Use new class structures.
4367         (process_active_file) Ditto.
4368         (process_active_file_write_case) Ditto.
4369         (prepare_for_writing) Use set_max_workspace.  Use new class
4370         structures.
4371         (close_active_file) Use new class structures.  Free old sink.
4372         (global var disk_source_file) Removed.
4373         (global var disk_sink_file) Removed.
4374         (disk_stream_init) Removed.
4375         (disk_stream_read) Removed.
4376         (disk_stream_write) Removed.
4377         (disk_stream_mode) Removed.
4378         (disk_stream_destroy_source) Removed.
4379         (disk_stream_destroy_sink) Removed.
4380         (global var vfm_disk_stream) Removed.
4381         (disk_sink_create) New function.
4382         (disk_sink_write) New function.
4383         (disk_sink_destroy) New function.
4384         (disk_sink_make_source) New function.
4385         (disk_sink_class) New static var.
4386         (disk_source_read) New function.
4387         (disk_source_destroy) New function.
4388         (global var vfm_source_class) New var.
4389         (global var memory_source_cases) Removed.
4390         (global var memory_sink_cases) Removed.
4391         (global var memory_sink_max_cases) Removed.
4392         (struct memory_sink_info) New struct.
4393         (memory_stream_init) Removed.
4394         (memory_stream_read) Removed.
4395         (memory_stream_write) Removed.
4396         (memory_stream_mode) Removed.
4397         (memory_stream_destroy_source) Removed.
4398         (memory_stream_destroy_sink) Removed.
4399         (global var vfm_memory_stream) Removed.
4400         (page_to_disk) Renamed write_active_file_to_disk().
4401         (memory_sink_create) New function.
4402         (memory_sink_write) New function.
4403         (memory_sink_destroy) New function.
4404         (memory_sink_make_source) New function.
4405         (memory_sink_class) New static var.
4406         (memory_source_read) New function.
4407         (memory_source_destroy) New function.
4408         (memory_source_get_cases) New function.
4409         (memory_source_set_cases) New function.
4410         (global var vfm_source_class) New var.
4411         (procedure_write_case) Use new class structures.
4412         (create_case_source) New function.
4413         (case_source_is_complex) New function.
4414         (case_source_is_class) New function.
4415         (create_case_sink) New function.
4416
4417         * vfm.h: (global variable reinit_sysmis) Not used, removed.
4418         (global variable reinit_blanks) Not used, removed.
4419         (global variable init_zero) Not used, removed.
4420         (global variable init_blanks) Not used, removed.
4421         (struct case_source) New struct.
4422         (struct case_source_class) New struct.
4423         (struct case_sink) New struct.
4424         (struct case_sink_class) New struct.
4425         (struct case_stream) Removed.
4426
4427         * vfmP.h: (struct case_list) Moved to var.h.
4428
4429 Tue Mar  2 11:28:30 2004  Ben Pfaff  <blp@gnu.org>
4430
4431         * algorithm.c: (count_equal) New function.
4432         (count_if) New function.
4433         (unique) Add assertions.
4434         (partition) Add assertions.
4435         (is_partitioned) New function.
4436         (copy_if) Add assertions.
4437         (remove_equal) Add assertions.
4438         (lexicographical_compare) Rename lexicographical_compare_3way.
4439         (sort) Add assertions.  Rephrase some code.
4440         (is_sorted) New function.
4441
4442 Sun Feb 29 23:24:57 2004  Ben Pfaff  <blp@gnu.org>
4443
4444         Rewrite SORT CASES.
4445
4446         * sort.c: Completely rewrite.
4447
4448         * sort.h: Expose interface via struct sort_cases_pgm, not via
4449         global variables.
4450
4451         * aggregate.c: (sort) New static var.
4452         (cmd_aggregate) Use sort.
4453         (create_sysfile) Ditto.
4454         (aggregate_single_case) Ditto.
4455         (dump_aggregate_info) Ditto.
4456         (agr_00x_end_func) Ditto.
4457         (debug_print) Ditto.
4458
4459         * var.h: (enum SRT_ASCEND) Removed.
4460         (enum SRT_DESCEND) Removed.
4461         (struct sort_cases_proc) Removed.
4462         (struct variable) Remove p.srt member.
4463
4464 Sun Feb 29 23:22:45 2004  Ben Pfaff  <blp@gnu.org>
4465
4466         Get rid of the old, crappy heap structure and replace it by a new,
4467         shiny, C++ STL-like heap structure.
4468         
4469         * Makefile.am: (pspp_SOURCES) Remove heap.c, heap.h.
4470
4471         * algorithm.c: (push_heap) New function.
4472         (heapify) Ditto.
4473         (pop_heap) Ditto.
4474         (make_heap) Ditto.
4475         (sort_heap) Ditto.
4476         (is_heap) Ditto.
4477         
4478         * heap.c: Removed.
4479
4480         * heap.h: Removed.
4481
4482 Sun Feb 29 23:21:53 2004  Ben Pfaff  <blp@gnu.org>
4483
4484         Increase warning level.
4485         
4486         * Makefile.am: (AM_CFLAGS) Remove -Wnouninitialized.
4487
4488 Sat Feb 21 17:38:58 WST 2004 John Darrington <john@darrington.wattle.id.au>
4489
4490         * main.c: Added a signal handler for SIGSEGV requesting a bug report.
4491          
4492 Fri Feb 20 23:22:14 2004  Ben Pfaff  <blp@gnu.org>
4493
4494         * dictionary.c: (dict_create_var) Fix root cause of bug worked
4495         around by previous change log entry.
4496         
4497         * compute.c: (lvalue_finalize) Remove workaround from previous
4498         change log entry.
4499
4500 Fri Feb 20 14:37:41 WAST 2004 John Darrington <john@darrington.wattle.id.au>
4501
4502         * compute.c: Fixed a bug where the Format was not getting set for 
4503           computed variables (thus causing a crash when SAVEing).
4504
4505         * Added a test to stop this bug ever coming back
4506
4507 Wed Feb 18 22:21:35 2004  Ben Pfaff  <blp@gnu.org>
4508
4509         Got rid of approx.h.  In general, replaced all references to
4510         approx_eq() by ==, approx_lt() by <, etc.  Other types of changes
4511         noted below.
4512
4513         * Makefile.am: (pspp_SOURCES) Removed approx.h.
4514
4515         * data-out.c: (try_F) Replaced test for approx_eq(number, 0.0) by
4516         test for mag < EPSILON.
4517
4518         * misc.h: Add definition of EPSILON.
4519
4520 Wed Feb 18 21:32:44 2004  Ben Pfaff  <blp@gnu.org>
4521
4522         * vfm.c: (procedure) Add check to prevent recursive call.
4523
4524 Wed Feb 18 21:48:54 WST 2004 John Darrington <john@darrington.wattle.id.au>
4525
4526         * Moved the declarations relating to values to their own header file
4527           (val.h)
4528
4529         * Added levene.c and levene.h
4530
4531         * vars-atr.c: Changed the signature of compare_values to 
4532         take const * arguments.
4533                 
4534         * t-test.q: Changed the structure of struct t_test_proc 
4535        variables now contain their own group statistics information.
4536        Eventually, t_test_proc might get renamed, because it'd be 
4537        applicable to other commands too.
4538
4539 Mon Feb 16 23:15:51 2004  Ben Pfaff  <blp@gnu.org>
4540
4541         * data-out.c: Clean up.  Changed interface of convert_*() to take
4542         either a `double' or a `const char *' instead of a `const union
4543         value *'.  Update all implementations of those interfaces.
4544         (data_out) Use switch statements instead of a table.
4545         (convert_AHEX) Rewrite.
4546
4547         * format.h: Update comment.
4548
4549 Mon Feb 16 22:14:36 2004  Ben Pfaff  <blp@gnu.org>
4550
4551         * q2c.c: (dump_header) Add an Emacs header line to output files
4552         that makes generated .c files read-only by default, to make it
4553         difficult to accidentally change generated files.
4554
4555 Mon Feb 16 22:12:07 2004  Ben Pfaff  <blp@gnu.org>
4556
4557         * frequencies.q: (compare_freq_numeric_a) Compare by frequency,
4558         not bogus a->v.c <=> b->v.c pointer compare.
4559         (compare_freq_alpha_a) Ditto.
4560         (compare_freq_numeric_d) Ditto.
4561         (compare_freq_alpha_d) Ditto.
4562         
4563 Mon Feb 16 22:00:53 2004  Ben Pfaff  <blp@gnu.org>
4564
4565         Changed data_out() to store string data directly into a `union
4566         value''s s member, not indirectly into c.
4567
4568         * crosstabs.q: (output_pivot_table) Use format_short() instead of
4569         data_out().
4570         (table_value_missing) Ditto.
4571         (float_M_suffix) Ditto.
4572         (format_short) New function.
4573
4574         * data-in.h: (data_in_finite_line) Remove inline definition.
4575
4576         * data-list.c: (destroy_dls_var_spec) New function.
4577         (destroy_dls) Rewrite in terms of destroy_dls_var_spec().
4578         (data_list_source_destroy_source) Avoid cast.
4579         (struct repeating_data_trns) New field `id_value'.  Update
4580         comments.
4581         (cmd_repeating_data) Initialize id_value.  Use new
4582         repeating_data_trns_free() for freeing REPEATING DATA
4583         transformations.
4584         (rpd_parse_record) Rewrite support for record ID to be less bogus.
4585         (repeating_data_trns_free) New function.
4586
4587         * data-out.c: (data_out) Change return type to `void' by replacing
4588         error returns by writing a message into the output buffer.
4589         (convert_A) Read from v->s instead of v->c.
4590         (convert_AHEX) Ditto.
4591
4592         * expr-evl.c: Update comment.
4593         (expr_evaluate) Add assertion in OP_STRING case.
4594
4595         * format.h: (macro MAX_FORMATTED_LEN) New macro.
4596
4597         * list.q: (list_cases) Update for new data_out() semantics.
4598
4599         * print.c: (print_trns_proc) Ditto.
4600
4601         * tab.c: (tab_value) Ditto.
4602         (tab_float) Avoid stupid cast.
4603
4604         * var.h: Update comments.
4605         (macro MAX_STRING) New macro.
4606         (macro MAX_ELEMS_PER_VALUE) New macro.
4607
4608         * vars-atr.c: (compare_values) New function.
4609
4610         * vfm.c: (dump_splits) Update for new data_out() semantics.
4611
4612 Mon Feb 16 21:45:47 2004  Ben Pfaff  <blp@gnu.org>
4613
4614         * crosstabs.q: (struct table_entry) Rename v[] to values[].  All
4615         references updated.
4616         (struct crosstab) Rename v[] to vars[].  All references updated.
4617         (hash_table_entry) Replace the hash algorithm and fix a bug at the
4618         same time, which caused the hash value to depend only on a single
4619         value, not all of the variables' values.
4620         
4621 Mon Feb 16 12:49:53 2004  Ben Pfaff  <blp@gnu.org>
4622
4623         Clean up struct dictionary's value_cnt usage.
4624
4625         * dictionary.c: Add a function comment to each function.
4626         (struct dictionary) Rename value_cnt to next_value_idx, which more
4627         accurately reflects its meaning.  All references updated.
4628         (dict_rename_vars) Add assertion.
4629         (dict_get_value_cnt) Rename dict_get_next_value_idx().  All
4630         references updated.
4631         (dict_get_case_size) New function.
4632
4633         * aggregate.c: (create_sysfile) Use dict_get_case_size().
4634
4635         * get.c: (mtf_read_nonactive_records) Ditto.
4636
4637         * sort.c: (allocate_cases) Ditto.
4638         (write_initial_runs) Ditto.
4639         (merge) Ditto.
4640         (merge_once) Ditto.
4641
4642         * vfm.c: (prepare_for_writing) Ditto.
4643         (setup_lag) Ditto.
4644         (lag_case) Ditto.
4645
4646 Mon Feb 16 00:17:55 2004  Ben Pfaff  <blp@gnu.org>
4647
4648         Make vfm.c slightly less grotesque.
4649
4650         * vfm.c: (filter_var) Removed.
4651         (filter_index) Removed.
4652         (FILTERED macro) Removed.
4653         (exclude_this_case) New function.
4654         (process_active_file_write_case) Use exclude_this_case() instead
4655         of FILTERED and inline tests.
4656         (procedure_write_case) Ditto.
4657         (setup_filter) Removed.
4658         (open_active_file) Don't call setup_filter().
4659         (close_active_file) Call dict_get_filter() instead of checking
4660         filter_var.
4661
4662 Mon Feb 16 00:01:53 2004  Ben Pfaff  <blp@gnu.org>
4663
4664         * var.h: (struct variable) Update comments.
4665
4666 Sun Feb 15 23:14:59 2004  Ben Pfaff  <blp@gnu.org>
4667
4668         New functions dict_create_var_assert(), dict_lookup_var_assert().
4669         Converted several dict_*_var()/assert pairs into a single
4670         dict_*_var_assert().
4671
4672         * dictionary.c: (dict_create_var_assert) New function.
4673         (dict_lookup_var_assert) New function.
4674
4675 Sun Feb 15 23:06:08 2004  Ben Pfaff  <blp@gnu.org>
4676
4677         Got rid of "struct long_vec", envector(), devector(), etc.  Added
4678         two members `init', `reinit' to struct variable as a substitute.
4679         
4680         * Makefile.am: (pspp_SOURCES) Removed cases.c, cases.h.
4681         
4682         * cases.c: Removed.
4683
4684         * cases.h: Removed.
4685
4686         * aggregate.c: (parse_aggregate_functions) destvar doesn't need
4687         init.
4688
4689         * autorecode.c: (cmd_autorecode) destvars don't need init.
4690
4691         * compute.c: (lvalue_finalize) Set reinit.
4692
4693         * data-list.c: (fixed_parse_compatible) Don't need init usually.
4694         (dump_fmt_list) Ditto.
4695         (parse_free) Ditto.
4696
4697         * descript.q: (run_z_pass) Don't need init for z-scores.
4698
4699         * dictionary.c: (dict_create_var) Initialize `init', `reinit'
4700         members.
4701         (dict_clone_var) Copy `reinit' member, initialize `init' member.
4702
4703         * glob.c: (init_glob) Remove vec_init() calls.
4704
4705         * inpt-pgm.c: (cmd_end_input_program) Use `reinit', not `left'.
4706         
4707         * loop.c: (internal_cmd_loop) Don't need to call envector().
4708
4709         * numeric.c: (cmd_numeric) Ditto.
4710         (cmd_string) Ditto.
4711         (cmd_leave) Ditto.  Set `init', `reinit' members.
4712
4713         * recode.c: (cmd_recode) Don't need to call envector().
4714
4715         * repeat.c: (internal_cmd_do_repeat) Ditto.
4716
4717         * var.h: (struct variable) Remove `left'.  Add `init', `reinit'.
4718         (force_create_variable) Removed prototype.
4719         (force_dup_variable) Ditto.
4720
4721         * vector.c: (cmd_vector) Don't need to call envector().
4722
4723         * vfm.c: (reinit_sysmis) Removed.
4724         (reinit_blanks) Removed.
4725         (init_zero) Removed.
4726         (init_blanks) Removed.
4727         (process_active_file_write_case) No need to deal with vectors.
4728         Call clear_temp_case().
4729         (vector_initialization) Rewrite to use `init', `reinit'.
4730         (close_active_file) No need to call vec_clear().
4731         (procedure_write_case) Call clear_temp_case().
4732         (clear_temp_case) New function.
4733
4734 Sun Feb 15 20:50:36 2004  Ben Pfaff  <blp@gnu.org>
4735
4736         * pfm-write.c: (bufwrite) Get rid of nasty cast that also invoked
4737         undefined behavior.
4738
4739 Thu Feb 12 23:35:15 2004  Ben Pfaff  <blp@gnu.org>
4740
4741         Add auxiliary argument to procedure() interface.  Associated small
4742         clean-ups of vfm interface.
4743         
4744         * Updated every caller of procedure() and process_active_file() to
4745         reflect modified interface.  Simple, ordinary changes not listed
4746         otherwise below.
4747
4748         * Updated every function that implements struct case_stream's
4749         `read' function to take a write_case_func and a write_case_data.
4750         Also updated every caller of write_case() to instead call them
4751         through these arguments.  In some cases this meant that the extra
4752         args had to be threaded through a couple of extra levels.  This
4753         wasn't difficult or interesting so the details won't be given.
4754
4755         * data-list.c: (struct repeating_data_trns) Add members
4756         `write_case', `wc_data' as kluge.
4757         (read_one_set_of_repetitions) Rename repeating_data_trns_proc and
4758         make non-static.
4759         (repeating_data_set_write_case) New function.
4760
4761         * data-list.h: New file to declare repeating_data_trns_proc() and
4762         repeating_data_set_write_case().
4763
4764         * inpt-pgm.c: (input_program_source_read) Call
4765         repeating_data_set_write_case() for all the REPEATING DATA
4766         transformations, so that they know where to send their cases.
4767         It's a big kluge.  Also kluge in END CASE.
4768         (end_case_trns_proc) Never called anymore, but we still need it,
4769         so just assert(0).
4770
4771         * sort.c: (read_sort_output) Update to match struct case_stream
4772         `read' member.
4773
4774         * vfm.c: (struct write_case_data) New structure.
4775         (proc_func) Removed.
4776         (virt_proc_func) Removed.
4777         (begin_func) Removed.
4778         (virt_begin_func) Removed.
4779         (end_func) Removed.
4780         (write_case) Removed.
4781         (procedure) Added an auxiliary parameter to each function pointer
4782         argument's prototype.  Added an auxiliary data parameter.
4783         Rewrote.
4784         (process_active_file) Ditto.
4785         (process_active_file_write_case) Pass aux data along.
4786         (close_active_file) Ditto.
4787         (procedure_write_case) Ditto.
4788         (SPLIT_FILE_procfunc) Ditto.
4789
4790         * vfm.h: (typedef write_case_data) New.
4791         (typedef write_case_func) New.
4792         (struct case_stream) Add parameters to `read' member prototype.
4793         
4794 Thu Feb 12 19:24:53 WST 2004 John Darrington <john@darrington.wattle.id.au>
4795
4796         * t-test.q:  Added calculations for independent samples. (But no Levene
4797         test yet!)
4798
4799         * Makefile.am: Moved q_sources_c into own variable 
4800
4801 Wed Feb 11 23:56:51 2004  Ben Pfaff  <blp@gnu.org>
4802
4803         Miscellaneous cleanups.
4804         
4805         * Change unused to UNUSED in many source files to reflect modified
4806         pref.h.  Change use of __WIN32__, __MSDOS, __DJGPP__,
4807         __CYGWIN32__, __unix__, and unix not to assume that they're
4808         defined to a nonzero value.  Change use of __attribute__ to use
4809         NO_RETURN or PRINTF_FORMAT instead.
4810         
4811         * alloc.h: Move definitions for local_alloc(), local_free() here
4812         from ../pref.h.orig and simplify.
4813
4814         * expr-evl.c: Instead of working differently based on PAGED_STACK,
4815         use a pool allocator unconditionally.
4816         (CHECK_STRING_SPACE) Removed.
4817         (ALLOC_STRING_SPACE) Removed.
4818         (expr_evaluate) Use e->pool instead of CHECK_STRING_SPACE and
4819         ALLOC_STRING_SPACE.
4820
4821         * expr-opt.c: (dump_expression) Allocate string pool.
4822
4823         * expr-prs.c: (expr_free) Free string pool.
4824
4825         * pool.c: (pool_destroy) This pool must be removed from its
4826         parent's list of gizmos, not from its own.  Use free_all_gizmos().
4827         (pool_clear) New function.
4828         (free_all_gizmos) New function.
4829         (pool_alloc) Use space in empty block after this one if any.
4830         (pool_release) Only empty out blocks, don't actually free() them.
4831
4832         * print.c: Get rid of PAGED_STACK special case by always
4833         dynamically allocating line buffers.
4834         (struct print_trns) Always include the `line' member.
4835         (internal_cmd_print) Always initialize the `line' member.
4836         (alloc_line) Always allocate memory for `line'.
4837         (print_trns_proc) Always initialize buf from `line' member.
4838         (print_trns_free) Always free `line' memory.
4839
4840         * sort.c: (allocate_file_handles) Special-case MS-DOS for mkdir()
4841         call.
4842         
4843 Wed Feb 11 20:33:18 2004  Ben Pfaff  <blp@gnu.org>
4844
4845         * flip.c: Fixed crash from FLIP when a numeric variable is
4846           specified on NEWNAMES and a large value is used, and a couple of
4847           other minor bugs besides.
4848           (struct varname) Make name a 9-character fixed-size array
4849           instead of a 1-character variable size array.
4850           (make_new_var) Allow digits in variable names.
4851           (flip_stream_write) Limit numeric values to 8 characters and
4852           format system missing and very large and small values more
4853           appropriately.
4854
4855 Thu Feb  5 13:19:06 WAST 2004 John Darrington <john@darrington.wattle.id.au>
4856
4857         * command.c: Fixed test on command return status for the correct 
4858           value,  which had been causing a crash under certain invalid input.
4859
4860 Wed Feb  4 15:34:11 WST 2004 John Darrington <john@darrington.wattle.id.au>
4861
4862         * t-test.q: Added calculations for the one sample variant of the T-TEST
4863
4864 Tue Feb  3 20:09:54 2004  Ben Pfaff  <blp@gnu.org>
4865
4866         * tab.c: (render_strip) Fix bug that sometimes caused joined text
4867           in joined cells to be rendered outside box boundaries.
4868
4869 Tue Feb  3 18:56:45 WST 2004 John Darrington <john@darrington.wattle.id.au>
4870
4871         * random.c (rng_create): Fixed seeding so that it gets reseeded after
4872         SET seed=xx has been called.
4873
4874 Mon Jan 19 14:08:09 2004  Ben Pfaff  <blp@gnu.org> 
4875
4876         * random.c (rng_get_double): Fix always-returning-zero bug in my
4877         preferred way, and at the same time make sure rounding doesn't
4878         bite us.
4879
4880 Thu Jan  1 23:16:41 2004  Ben Pfaff  <blp@gnu.org>
4881
4882         * html.c: (change_attributes) Dead code, removed.
4883         (escape_string) Eliminate code to call change_attributes() that
4884         never actually called it.
4885         (output_tab_table) Get rid of dependence on tab_hit
4886         and struct tab_joined_cell's hit member, which are abominations.
4887
4888         * tab.c: (tab_output_text) Don't call
4889         d->class->text_set_font_by_name if it's a null pointer.
4890         (macro UNROLL_LOOP) Eliminate.
4891         (macro UNROLL_3_LOOPS) Eliminate.
4892         (tabi_render) Rewrite not to use the above macros.
4893
4894 Thu Jan  1 23:09:07 2004  Ben Pfaff  <blp@gnu.org>
4895
4896         Start working on a new output driver system, one that doesn't suck
4897         so much, by adding a "device-independent" output driver.  The idea
4898         is to write out only a single output stream, then use separate
4899         processes to translate them into whatever formats we want.  This
4900         is similar to how "groff" works with its various output drivers
4901         (grops, grotty, grodvi, ...).
4902         
4903         * Makefile.am: (pspp_SOURCES) Add devind.c, devind.h.
4904
4905         * list.q: (write_all_headers) Stub out devind class.
4906         (clean_up) Ditto.
4907         (determine_layout) Ditto.
4908         (list_cases) Ditto.
4909
4910         * output.c: (outp_init) Add devind class.
4911
4912         * devind.c: New file.
4913
4914         * devind.h: New file.
4915
4916 Thu Jan  1 23:08:14 2004  Ben Pfaff  <blp@gnu.org>
4917
4918         * frequencies.q: (hash_value_alpha) Fixed up the previous change
4919         to use the proper string length.
4920
4921 Wed Dec 31 16:27:33 WAST 2003 John Darrington <john@darrington.wattle.id.au>
4922
4923         * Fixed bug where FREQ would crash on alpha values
4924
4925 Tue Dec 30 22:42:57 2003  Ben Pfaff  <blp@gnu.org>
4926
4927         * Removed bletcherous alloca() workarounds for AIX from top of
4928         many files.  AIX can use the alternative alloca() implementation
4929         instead.
4930
4931 Tue Dec 30 22:35:16 2003  Ben Pfaff  <blp@gnu.org>
4932
4933         * ascii.c: (ascii_option) Fix implementation of headers option.
4934
4935 Tue Dec 30 22:32:53 2003  Ben Pfaff  <blp@gnu.org>
4936
4937         * ascii.c: Add a "squeeze" option to the ASCII driver to squeeze
4938         multiple blank lines into one.
4939         (struct ascii_driver_ext) Add squeeze_blank_lines option.
4940         (ascii_preopen_driver) Initialize squeeze_blank_lines.
4941         (static var option_tab) Add squeeze entry.
4942         (ascii_option) Set squeeze_blank_lines.
4943         (output_lines) Implement squeezing blank lines.
4944
4945 Wed Dec 31 07:19:46 WST 2003 John Darrington <john@darrington.wattle.id.au>
4946
4947         * Removed redundant code from output.h
4948
4949 Sat Dec 27 22:17:52 2003  Ben Pfaff  <blp@gnu.org>
4950
4951         Dictionary classes: each variable is "ordinary", "system", or
4952         "scratch".
4953
4954         * var.h: (enum dict_class) New enum.
4955
4956         * vars-prs.c: (dict_class_from_id) New function.
4957         (dict_class_to_name) New function.
4958
4959 Sat Dec 27 22:16:06 2003  Ben Pfaff  <blp@gnu.org>
4960
4961         * var.h: (struct freq_tab_set) Removed (not used).
4962
4963 Sat Dec 27 22:15:21 2003  Ben Pfaff  <blp@gnu.org>
4964
4965         * value-labels.c: (val_labs_destroy) vls needs to be freed too.
4966
4967 Sat Dec 27 22:10:49 2003  Ben Pfaff  <blp@gnu.org>
4968
4969         * stats.c: (hypercube) Rename pow4().  All references updated.
4970
4971 Sat Dec 27 22:05:49 2003  Ben Pfaff  <blp@gnu.org>
4972
4973         * rename-vars.c: (cmd_rename_variables) Rewritten.
4974         (compare_name) Removed.
4975
4976 Sat Dec 27 22:03:51 2003  Ben Pfaff  <blp@gnu.org>
4977
4978         var_set feature, and code taking advantage of it.
4979         
4980         * crosstabs.q: (static var var_dict) Removed.
4981         (static var variables) New variable.
4982         (static var variables_cnt) New variable.
4983         (cmd_crosstabs) Free variables instead of var_dict.
4984         (internal_cmd_crosstabs) Initialize and use variables,
4985         variables_cnt instead of var_dict.
4986         (free_var_dict) Removed.
4987         (crs_custom_tables) Use var_set instead of a copied dictionary.
4988         (crs_custom_variables) Set up variables, variables_cnt instead of
4989         var_dict.
4990         [DEBUGGING] (debug_print) Ditto.
4991
4992         * means.q: (mns_custom_tables) Use var_set instead of a copied
4993         dictionary.
4994
4995         * vars-prs.c: (parse_vs_variable) New function.
4996         (parse_dict_variable) Rewritten.
4997         (parse_variable) Rewritten.
4998         (parse_variables) Renamed parse_var_set_vars(), rewritten.
4999         (parse_variables) New function in terms of parse_var_set_vars().
5000         Now requires its first argument to be non-null.  All references
5001         that passed a null pointer updated to pass default_dict instead.
5002         (macro id_dict) Removed.
5003         (parse_DATA_LIST_vars) Add assertions.
5004         (parse_mixed_vars) Ditto.
5005         (struct var_set) New structure.
5006         (var_set_get_cnt) New function.
5007         (var_set_get_var) New function.
5008         (var_set_lookup_var) New function.
5009         (var_set_destroy) New function.
5010         (dict_var_set_get_cnt) New function.
5011         (dict_var_set_get_var) New function.
5012         (dict_var_set_lookup_var) New function.
5013         (dict_var_set_destroy) New function.
5014         (var_set_create_from_dict) New function.
5015         (struct array_var_set) New structure.
5016         (array_var_set_get_cnt) New function.
5017         (array_var_set_get_var) New function.
5018         (array_var_set_lookup_var) New function.
5019         (array_var_set_destroy) New function.
5020         (var_set_create_from_array) New function.
5021
5022         * q2c.c: (dump_parser) Use parse_variables(default_dict, ...)
5023         instead of parse_variables(NULL, ...) in output code.
5024
5025 Sat Dec 27 21:38:53 2003  Ben Pfaff  <blp@gnu.org>
5026
5027         Change inp_init from a 2-bit vector to an ordinary array.
5028         Initialize it all in cmd_end_input_program() instead of in
5029         create_variable().
5030
5031         * inpt-pgm.c: (enum value_init_type) New enum.
5032         (global var inp_init) Change to `enum value_init_type *', make
5033         static.
5034         (inp_init_size) Removed.
5035         (inp_nval) Change to `size_t', make static.
5036         (cmd_input_program) Don't initialize inp_init or inp_init_size.
5037         (cmd_end_input_program) Initialize inp_init, inp_nval.
5038         (init_case) Rewrite.
5039         (clear_case) Rewrite.
5040
5041         * inpt-pgm.h: Removed.
5042
5043 Sat Dec 27 21:36:38 2003  Ben Pfaff  <blp@gnu.org>
5044
5045         * hash.c: (hsh_hash_bytes) Use Fowler-Noll-Vo hash instead of
5046         Colin Plumb hash.  It is simpler and should better resist
5047         collisions.
5048         (hsh_hash_string) Ditto.
5049
5050 Sat Dec 27 21:34:57 2003  Ben Pfaff  <blp@gnu.org>
5051
5052         * get.c: (export_write_case_func) Remove debug printing code.
5053
5054 Sat Dec 27 21:11:09 2003  Ben Pfaff  <blp@gnu.org>
5055
5056         * get.c: (cmd_save_internal) Rename parameter.  Use &t->h instead
5057         of cast.
5058         (save_write_case_func) Use &trns->h instead of cast.
5059         (cmd_export) Use &t->h instead of cast.
5060
5061 Sat Dec 27 20:57:42 2003  Ben Pfaff  <blp@gnu.org>
5062
5063         Moved vectors into the dictionary.
5064
5065         * var.h: (struct vector) Moved here from vector.h.  `index' member
5066         renamed `idx', `v' renamed `var', `nv' renamed `cnt'.  All
5067         references updated.
5068         
5069         * vector.h: Removed.
5070
5071         * vector.c: (global var vec) Removed.
5072         (global var nvec) Removed.
5073         (cmd_vector) Rewritten.
5074         (find_vector) Removed.
5075
5076         * dictionary.c: (dict_create_vector) New function.
5077         (dict_get_vector) New function, replaces reading global vec[]
5078         array.
5079         (dict_get_vector_cnt) New function, replaces reading global nvec
5080         variable.
5081         (dict_lookup_vector) New function, replaces find_vector().
5082         (dict_clear_vectors) New function.
5083
5084 Sat Dec 27 20:54:01 2003  Ben Pfaff  <blp@gnu.org>
5085
5086         Start to move away from `struct variable' p `union' member to void
5087         * aux member.
5088
5089         * var.h: (struct variable) Add `aux' member.
5090
5091 Sat Dec 27 20:36:25 2003  Ben Pfaff  <blp@gnu.org>
5092
5093         Get rid of struct variable `foo' member.
5094
5095         * frequencies.q: (internal_cmd_frequencies) Use p.frq.used instead
5096         of foo.
5097         (frq_custom_variables) Ditto.
5098         (frq_custom_grouped) Ditto.
5099
5100         * get.c: (struct save_trns) Change `var' member from `int *' to
5101         `struct variable **'.
5102         (cmd_save_internal) Use aux instead of foo.
5103         (save_trns_proc) Use revised `var' member.
5104         (static var mtf_seq_no) Renamed mtf_seq_num.
5105         (static var mtf_seq_nums) New static var.
5106         (cmd_match_files) Initialize mtf_seq_nums.
5107         (mtf_free) Free mtf_seq_nums.
5108         (mtf_processing) Use mtf_seq_nums instead of foo.
5109         (mtf_merge_dictionary) No need to initialize mv->foo.
5110         (cmd_export) Use aux instead of foo.  Use revised `var' member.
5111         (mns_custom_tables) Don't use foo to check for duplicates, that's
5112         what PV_NO_DUPLICATE is for.
5113
5114         * var.h: (struct variable) Remove `foo' member.
5115         (struct frequencies_proc) New member.
5116         
5117 Sat Dec 27 19:46:13 2003  Ben Pfaff  <blp@gnu.org>
5118
5119         Clean up COMPUTE and IF.
5120
5121         * compute.c: More or less rewrite the darn thing.
5122         (struct compute_trns) Rename and reorder and add and delete
5123         members.
5124         (cmd_compute) Rewrite.
5125         (compute_num) Make conditional on test expression.  Now used for
5126         both COMPUTE and IF.
5127         (compute_num_vec) Ditto.
5128         (compute_str) Ditto.
5129         (compute_str_vec) Ditto.
5130         (cmd_if) Rewrite.
5131         (if_num) Removed.
5132         (if_num_vec) Removed.
5133         (if_str) Removed.
5134         (if_str_vec) Removed.
5135         (parse_target_expression) Renamed parse_rvalue_expression(),
5136         rewritten.
5137         (new_trns) Renamed compute_trns_create(), rewritten.
5138         (delete_trns) Removed.
5139         (free_trns) Renamed compute_trns_free(), rewritten.
5140         (struct lvalue) New structure.
5141         (parse_var_or_vec) Renamed lvalue_parse(), rewritten.
5142         (lvalue_get_type) New function.
5143         (lvalue_is_vector) New function.
5144         (lvalue_finalize) New function.
5145         (lvalue_destroy) New function.
5146         
5147 Sat Dec 27 19:44:14 2003  Ben Pfaff  <blp@gnu.org>
5148
5149         * command.def: Disallow MODIFY VARS in input mode, so that
5150         variables can't get dropped and confuse cmd_end_input_program()'s
5151         attempt to fill inp_init[].
5152         
5153         * modify-vars.c: (static var forward_positional_ordering) New
5154         variable.
5155         (struct var_modification) Entirely changed.
5156         (rearrange_dict) Interface changed, rewritten.
5157         (cmd_modify_vars) Deal with modified struct var_modification, much
5158         rewritten.
5159         (struct var_renaming) New structure.
5160         (compare_var_renaming_by_new_name) New function.
5161         (validate_var_modification) New function.
5162
5163         * var.h: (struct modify_vars_proc) Removed.
5164         (struct variable) Removed member p.mfv.
5165
5166 Sat Dec 27 19:40:26 2003  Ben Pfaff  <blp@gnu.org>
5167
5168         Make EVALUATE a valid command whether we're debugging or not, so
5169         that `make check' can succeed regardless of whether debugging is
5170         turned on.
5171         
5172         * command.def: [GLOBAL_DEBUGGING] Drop the #if.
5173
5174         * compute.c: [GLOBAL_DEBUGGING] (cmd_evaluate) Drop the #if.
5175
5176 Sat Dec 27 19:34:40 2003  Ben Pfaff  <blp@gnu.org>
5177
5178         * apply-dict.c: (cmd_apply_dictionary) Replace a ghastly switch
5179         statement by a simple if test.
5180
5181         * dfm.c: (dfm_get_record) Add assertion.
5182
5183 Sat Dec 27 17:51:26 2003  Ben Pfaff  <blp@gnu.org>
5184
5185         For each file x.c, move #include "x.h" to the very top of the
5186         include list, to catch x.h failing to include the proper headers.
5187
5188 Sat Dec 27 17:50:19 2003  Ben Pfaff  <blp@gnu.org>
5189
5190         * algorithm.c: (find) New function.
5191         (remove_equal) New function.
5192         (set_difference) New function.
5193         (adjacent_find_equal) New function.
5194         [TEST_UNIQUE] Removed test case.
5195         (copy_if) Find end test.
5196
5197 Sat Dec 27 17:42:45 2003  Ben Pfaff  <blp@gnu.org>
5198
5199         * dictionary.c: (dict_get_case_weight) New convenience function.
5200
5201         * aggregate.c: (accumulate_aggregate_info) Use
5202         dict_get_case_weight().
5203
5204         * frequencies.q: (calc_general) Ditto.
5205         (calc_integer) Ditto.
5206         (calc) Ditto.
5207
5208         * t-test.q: (groups_calc) Ditto.
5209         (z_calc) Ditto.
5210
5211 Sat Dec 27 17:29:45 2003  Ben Pfaff  <blp@gnu.org>
5212
5213         * glob.c: (global var default_dict) Change from `struct
5214         dictionary' to `struct dictionary *'.  All references changed.
5215         (init_glob) Initialize default_dict with dict_create().
5216
5217 Sat Dec 27 17:06:06 2003  Ben Pfaff  <blp@gnu.org>
5218
5219         struct dictionary now made opaque.  All related functions:
5220
5221         * get.c: (rename_variables) Removed.
5222         (dict_delete_run) Removed.
5223         
5224         * temporary.c: (copy_variable) Removed.
5225         (new_dictionary) Removed.
5226         (save_dictionary) Removed.
5227         (restore_dictionary) Removed.
5228         (free_dictionary) Removed.
5229
5230         * vars-atr.c: (clear_default_dict) Removed.
5231         (find_variable) Removed.
5232         (find_dict_variable) Removed.
5233         (create_variable) Removed.
5234         (delete_variable) Removed.
5235         (common_init_stuff) Removed.
5236         (init_variable) Removed.  Updating of inp_init moved into
5237         cmd_end_input_program().
5238         (replace_variable) Removed.
5239         (rename_variable) Removed.
5240         (clear_variable) Removed.
5241         (dup_variable) Removed.
5242
5243         * vars-prs.c: (is_varname) Removed.
5244         (is_dict_varname) Removed.
5245         (fill_all_vars) Removed.
5246
5247         * vector.c: (find_vector) Removed.
5248
5249         * weight.c: (stop_weighting) Removed.
5250
5251         * dictionary.c: New file.
5252         (dict_create) New, replaces new_dictionary().
5253         (dict_clone) New, replaces save_dictionary() and
5254         restore_dictionary().
5255         (dict_clear) New, replaces clear_default_dict().
5256         (dict_destroy) New, replaces free_dictionary().
5257         (dict_get_var_cnt) New function, replaces references to
5258         dict->nvar.
5259         (dict_get_var) New function, replaces references to dict->var[i].
5260         (dict_get_vars) New function, replaces fill_all_vars().
5261         (dict_create_var) New, replaces create_variable().  Interface
5262         drops `type' parameter, using a zero `width' to designate numeric.
5263         (dict_clone_var) New, replaces dup_variable().
5264         (dict_rename_var) New, replaces rename_variable().
5265         (dict_lookup_var) New, replaces find_variable(),
5266         find_dict_variable(), is_varname().
5267         (dict_contains_var) New function.
5268         (compare_variable_dblptrs) New function.
5269         (dict_delete_var) New function, replaces clear_variable().
5270         (dict_delete_vars) New function, replaces dict_delete_run().
5271         (dict_reorder_vars) New function.
5272         (dict_rename_vars) New function, replaces rename_variables().
5273         (dict_get_weight) New function, replaces reading dict->weight_var.
5274         (dict_set_weight) New function, replaces writing dict->weight_var
5275         or calling stop_weight(dict).
5276         (dict_get_filter) New function, replaces reading dict->filter_var.
5277         (dict_set_filter) New function, replaces writing dict->filter_var.
5278         (dict_get_case_limit) New function, replaces reading dict->N.
5279         (dict_set_case_limit) New function, replaces writing dict->N.
5280         (dict_get_value_cnt) New function, replaces reading dict->nval.
5281         (dict_compact_values) New function, replaces a loop that was
5282         replicated in several places.
5283         (dict_get_split_vars) New function, replaces reading dict->splits.
5284         (dict_get_split_cnt) New function, replaces reading
5285         dict->n_splits.
5286         (dict_set_split_vars) New function, replaces writing dict->splits.
5287         (dict_get_label) New function, replaces reading dict->label.
5288         (dict_set_label) New function, replaces writing dict->label.
5289         (dict_get_documents) New function, replaces reading
5290         dict->documents.
5291         (dict_set_documents) New function, replaces writing
5292         dict->documents.
5293         
5294         All references to above functions updated.
5295         
5296         * aggregate.c: (cmd_aggregate) Copy file label and documents from
5297         old dictionary to new by hand, because dict_create() can't do it
5298         itself.  Use dict_set_documents(), dict_set_split_vars().
5299
5300         * temporary.c: (cancel_temporary) Also set temp_dict to NULL after
5301         calling dict_destroy().
5302
5303         * data-list.c: (dls_var_spec) Remove `type' member, replace by
5304         `width'.
5305         (fixed_parse_compatible) Some slightly nontrivial changes for
5306         dict_create_var().
5307         (dump_fmt_list) Ditto.
5308         (parse_free) Ditto.
5309
5310         * file-type.c: (create_col_var) Ditto.
5311
5312         * get.c: (cmd_get) Use dict_compact_values() instead of a loop.
5313         (trim_dictionary) Use dict_delete_vars(), dict_reorder_vars().
5314         (rename_variables) Use dict_rename_vars().
5315         (mtf_merge_dictionary) Use dict_get_documents(),
5316         dict_set_documents(), dict_compact_values().
5317
5318         * pfm-read.c: (read_variables) Deal with changes to weighting.
5319
5320         * q2c.c: (dump_parser) Use dict_lookup_var() instead of
5321         is_varname() in output code.
5322
5323         * sfm-read.c: (read_header) Use dict_create(), dict_set_label(),
5324         other dictionary functions.
5325
5326         * title.c: (add_document_line) Use dict_get_documents(),
5327         dict_set_documents().
5328
5329         * vars-atr.c: (discard_variables) Use dict_clear(default_dict),
5330         reset default_handle by hand.  dict_clear() will clear vectors so
5331         there's no need for that by hand.
5332
5333         * vfm.c: (close_active_file) Move call to finish_compaction()
5334         earlier, so that we can do the compaction as a single step using
5335         dict_compact_values().  Use dict_clear_vectors().
5336         (finish_compaction) Use dict_delete_var(), dict_compact_values().
5337                 
5338         Some functions don't have replacements:
5339
5340         * vars-atr.c: (force_create_variable) Removed.  All references
5341         updated to dict_create_var() followed by an assertion.
5342         (force_dup_variable) Removed.  All references updated to
5343         dict_clone_var() followed by an assertion.
5344         
5345         * weight.c: (update_weighting) Removed.  No longer necessary, so
5346         all references removed.
5347
5348 Sat Dec 27 16:43:01 2003  Ben Pfaff  <blp@gnu.org>
5349
5350         Clean up AGGREGATE.
5351         
5352         * aggregate.c: Eliminate separation of weighted and unweighted
5353         case.  It made the code too obscure and I doubt it was actually
5354         faster.  Instead, all code uses the "weighted" code, because
5355         that's a generalization of the "unweighted" code.
5356         (FWEIGHT) Removed.
5357         (FOPTIONS) Ditto.
5358         (parse_aggregate_functions) No need to set FWEIGHT.
5359         (accumulate_aggregate_info) Get rid of FWEIGHT cases.
5360         (dump_aggregate_info) Ditto.
5361         (initialize_aggregate_info) No need for special plain_function
5362         that gets rid of FWEIGHT option.
5363
5364         * aggregate.c: Get rid of approximations.
5365         (accumulate_aggregate_info) Don't use approx_gt(), approx_lt(),
5366         approx_in_range().
5367         (aggregate_single_case) Don't use approx_ne().
5368
5369 Sat Dec 27 16:19:36 2003  Ben Pfaff  <blp@gnu.org>
5370
5371         * ascii.c (ascii_line_width): Dead code, removed.
5372
5373         * postscript.c (ps_line_width): Ditto.
5374
5375         * q2c.c (xrealloc): Ditto.
5376
5377         * count.c (internal_cmd_count): Ditto.
5378
5379         * means.q (validate_dependent_endpoint): Ditto.
5380
5381         * set.q: (cmd_gset) Ditto.
5382
5383         * weight.c: [0] (weight_trns_proc) Ditto.
5384
5385 Sat Dec 27 16:18:16 2003  Ben Pfaff  <blp@gnu.org>
5386
5387         Make the code -Wmissing-prototypes clean.
5388
5389         * Makefile.am (version.c): Add #include "version.h".
5390         
5391         * ascii.c: (ascii_open_global) Make static.
5392         (ascii_close_page) Ditto.
5393         (ascii_font_sizes) Ditto.
5394         (ascii_postopen_driver) Ditto.
5395         (ascii_close_driver) Ditto.
5396         (ascii_option) Ditto.
5397         (ascii_open_page) Ditto.
5398         (ascii_line_horz) Ditto.
5399         (ascii_line_vert) Ditto.
5400         (ascii_line_intersection) Ditto.
5401         (ascii_box) Ditto.
5402         (ascii_polyline_begin) Ditto.
5403         (ascii_polyline_point) Ditto.
5404         (ascii_polyline_end) Ditto.
5405         (ascii_text_set_font_by_name) Ditto.
5406         (ascii_text_set_font_by_position) Ditto.
5407         (ascii_text_set_font_by_family) Ditto.
5408         (ascii_text_get_font_name) Ditto.
5409         (ascii_text_get_font_family) Ditto.
5410         (ascii_text_set_size) Ditto.
5411         (ascii_text_get_size) Ditto.
5412         (ascii_text_metrics) Ditto.
5413         (ascii_text_draw) Ditto.
5414         (ascii_close_page) Ditto.
5415
5416         * cmdline.h: New header for parse_command_line().  Used where
5417         needed.
5418
5419         * command.c: Move prototypes for cmd_*() functions to command.h.
5420
5421         * command.h: Prototypes for cmd_*() functions moved here from
5422         command.c.
5423
5424         * crosstabs.q: (gamma_int) Ditto.
5425
5426         * file-handle.h: Add fh_init_files() prototype.
5427         
5428         * getline.c: (welcome) Ditto.
5429
5430         * glob.h: New header for init_glob().  Used where appropriate.
5431
5432         * hash.c: (comparison_helper) Ditto.
5433
5434         * html.c: (html_open_global) Ditto.
5435         (html_close_global) Ditto.
5436         (html_preopen_driver) Ditto.
5437         (html_postopen_driver) Ditto.
5438         (html_close_driver) Ditto.
5439         (html_option) Ditto.
5440         (html_open_page) Ditto.
5441         (html_close_page) Ditto.
5442         (html_submit) Ditto.
5443
5444         * inpt-pgm.c: (input_program_source_read) Ditto.
5445
5446         * output.c: (find_defn_value) Ditto.
5447         (destroy_list) Ditto.
5448
5449         * pfm-read.c: (read_int) Ditto.
5450
5451         * postscript.c: (ps_open_global) Ditto.
5452         (ps_close_global) Ditto.
5453         (ps_font_sizes) Ditto.
5454         (ps_preopen_driver) Ditto.
5455         (ps_postopen_driver) Ditto.
5456         (ps_close_driver) Ditto.
5457         (ps_option) Ditto.
5458         (ps_open_page) Ditto.
5459         (ps_close_page) Ditto.
5460         (ps_line_horz) Ditto.
5461         (ps_line_vert) Ditto.
5462         (ps_line_intersection) Ditto.
5463         (ps_box) Ditto.
5464         (ps_polyline_begin) Ditto.
5465         (ps_polyline_point) Ditto.
5466         (ps_polyline_end) Ditto.
5467         (ps_text_set_font_by_name) Ditto.
5468         (ps_text_set_font_by_position) Ditto.
5469         (ps_text_set_font_family) Ditto.
5470         (ps_text_get_font_name) Ditto.
5471         (ps_text_get_font_family) Ditto.
5472         (ps_text_set_size) Ditto.
5473         (ps_text_get_size) Ditto.
5474         (ps_text_metrics) Ditto.
5475         (ps_text_draw) Ditto.
5476
5477         * q2c.c: (finish_up) Ditto.
5478         (xmalloc) Ditto.
5479         (xstrdup) Ditto.
5480         (get_buffer) Ditto.
5481         (st_lower) Ditto.
5482         (st_upper) Ditto.
5483         (skip_ws) Ditto.
5484         (get_line) Ditto.
5485         (add_symbol) Ditto.
5486         (find_symbol) Ditto.
5487         (lex_get) Ditto.
5488         (force_id) Ditto.
5489         (force_string) Ditto.
5490         (match_id) Ditto.
5491         (match_token) Ditto.
5492         (skip_token) Ditto.
5493         (parse) Ditto.
5494         (parse_setting) Ditto.
5495         (parse_specifier) Ditto.
5496         (parse_specifiers) Ditto.
5497         (parse_subcommand) Ditto.
5498         (dump_specifier_vars) Ditto.
5499         (is_keyword) Ditto.
5500         (make_identifier) Ditto.
5501         (dump_declarations) Ditto.
5502         (dump_specifier_init) Ditto.
5503         (dump_vars_init) Ditto.
5504         (make_match) Ditto.
5505         (dump_specifier_parse) Ditto.
5506         (dump_subcommand) Ditto.
5507         (dump_parser) Ditto.
5508         (dump_header) Ditto.
5509         (dump_free) Ditto.
5510         (recognize_directive) Ditto.
5511
5512         * recode.c: (string_to_long) Ditto.
5513
5514         * repeat.c: (find_DO_REPEAT_substitution) Ditto.
5515
5516         * repeat.h: New header for perform_DO_REPEAT_substitutions, used
5517         where appropriate.
5518
5519         * sort.c: (sort_stream_read) Ditto.
5520         (sort_stream_mode) Ditto.
5521         
5522 Fri Dec 19 23:35:04 2003  Ben Pfaff  <blp@gnu.org>
5523
5524         * algorithm.c (binary_search): Fix comparison.
5525
5526 Fri Dec 19 23:27:45 2003  Ben Pfaff  <blp@gnu.org>
5527
5528         * algorithm.c: (binary_search) Fix assertion.
5529
5530 Fri Dec 19 21:31:48 2003  Ben Pfaff  <blp@gnu.org>
5531
5532         * sysfile-info.c: (compare_vectors_by_name) Rewrite.
5533
5534 Fri Dec 19 21:30:24 2003  Ben Pfaff  <blp@gnu.org>
5535
5536         * sort.c: (compare_case_lists) Rewrite.
5537
5538 Fri Dec 19 16:44:22 2003  Ben Pfaff  <blp@gnu.org>
5539
5540         * quicksort.c: Removed (not used).
5541
5542         * quicksort.h: Removed (not used).
5543
5544         * sort.c: Removed blp_quicksort() prototype.
5545
5546 Fri Dec 19 16:42:13 2003  Ben Pfaff  <blp@gnu.org>
5547
5548         * postscript.c: (int_2_compare) Rewrite.
5549         (compare_line) Rewrite.
5550
5551 Fri Dec 19 16:38:35 2003  Ben Pfaff  <blp@gnu.org>
5552
5553         * matrix-data.c (compare_factors) Use lexicographical_compare()
5554         algorithm.
5555         (compare_doubles) New function.
5556         
5557         * algorithm.c: (lexicographical_compare) New algorithm.
5558
5559 Fri Dec 19 16:23:45 2003  Ben Pfaff  <blp@gnu.org>
5560
5561         * matrix-data.c (compare_variables_by_mxd_vartype): Rewrite.
5562
5563 Fri Dec 19 15:54:45 2003  Ben Pfaff  <blp@gnu.org>
5564
5565         * expr-prs.c: (cmp_func) Removed.
5566         (parse_function) Use binary_search() algorithm.
5567         (compare_functions) New function.
5568         (init_func_tab) Use sort() algorithm.
5569
5570         * algorithm.c: (binary_search) New algorithm.
5571
5572 Fri Dec 19 15:50:45 2003  Ben Pfaff  <blp@gnu.org>
5573
5574         * descript.q: (display) Use sort() algorithm instead of qsort().
5575         (compare_func) Removed.
5576         (descriptives_compare_variables) New function.
5577
5578 Fri Dec 19 15:08:38 2003  Ben Pfaff  <blp@gnu.org>
5579
5580         Get rid of AVL trees.  Hashes are more appropriate for everything
5581         PSPP does.
5582
5583         * Makefile.am: (pspp_SOURCES) Remove avl.c, avl.h.
5584         
5585         * avl.c: Removed.
5586
5587         * avl.h: Removed.
5588
5589 Fri Dec 19 14:33:31 2003  Ben Pfaff  <blp@gnu.org>
5590
5591         Much code can be clarified by using C++ STL-like algorithms.  Not
5592         all uses of these algorithms are listed below, only the ones where
5593         the change to an algorithm was the only change of interest.
5594         
5595         * Makefile.am: (pspp_SOURCES) Add algorithm.c, algorithm.h.
5596         
5597         * algorithm.c: New file.
5598
5599         * algorithm.h: New file.
5600
5601         * modify-vars.c: (static var forward) Removed.
5602         (static var positional) Removed.
5603         (compare_variables) Removed.
5604         (struct ordering) New.
5605         (cmd_modify_vars) Use sort() algorithm.
5606         (compare_variables_given_ordering) New function.
5607         (rearrange_dict) Use sort() algorithm.
5608
5609         * sysfile-info.c: (cmd_display) Use sort() algorithm.
5610         (cmp_var_by_name) Removed.
5611
5612 Fri Dec 19 14:26:17 2003  Ben Pfaff  <blp@gnu.org>
5613
5614         Make file handles use a hash table.
5615         
5616         * file-handle.q: (files) Change to hash table, make static.
5617         (cmd_file_handle) Use hash table functions.
5618         (fh_get_handle_by_filename) Ditto.
5619         (fh_get_handle_by_name) Ditto.
5620         (hash_file_handle) New function.
5621         (cmp_file_handle) Rewrite.
5622         (fh_init_files) Use hash table functions.
5623
5624 Fri Dec 19 14:24:38 2003  Ben Pfaff  <blp@gnu.org>
5625
5626         Clean up FREQUENCIES.
5627         
5628         * Makefile.am: (pspp_SOURCES) Remove frequencies.g.
5629
5630         * frequencies.q: Remove a lot of old #if'd out code at the end.
5631         (internal_cmd_frequencies) Use calc() instead of calc_no_weight()
5632         or calc_weight().  Initialize percentile_values.
5633         (calc) New function based on calc_weight() from frequencies.g.
5634         (precalc) Use hash functions.
5635         (static var comparison_func) Removed.
5636         (static var comparison_param) Removed.
5637         (comparison_helper) Removed.
5638         (get_freq_comparator) New function.
5639         (not_missing) New function.
5640         (add_freq) Removed.
5641         (postprocess_freq_tab) Use hash table functions, algorithms,
5642         get_freq_comparator().  Rewrite.
5643         (cleanup_freq_tab) Rephrase.
5644         (add_percentile) Clean up spacing.
5645         (hash_value_numeric) New function.
5646         (hash_value_alpha) New function.
5647         (compare_value_numeric_a) Rewrite.
5648         (compare_value_alpha_a) Rewrite.
5649         (compare_value_numeric_d) Rewrite.
5650         (compare_value_alpha_d) Rewrite.
5651         (compare_freq_numeric_a) Rewrite.
5652         (compare_freq_alpha_a) Rewrite.
5653         (compare_freq_numeric_d) Rewrite.
5654         (compare_freq_alpha_d) Rewrite.
5655         (calc_stats) Clean up mode, percentiles, max.
5656         (dump_statistics) Clean up spacing.
5657         
5658         * frequencies.g: Removed.
5659
5660         * var.h: (struct freq_tab) Change `data' to hash table.
5661
5662 Fri Dec 19 14:15:46 2003  Ben Pfaff  <blp@gnu.org>
5663
5664         * file-handle.h: Remove declaration of global variable `files',
5665         which wasn't used anywhere.
5666
5667         * postscript.c: (add_encoding) Remove superfluous cast.
5668         (line) Ditto.
5669
5670         * sfm-read.c: [linux] (bswap_int32) Drop ntohl() non-portable
5671         version.
5672
5673         * temporary.c: [0] (display_tree) Removed.
5674
5675 Fri Dec 19 14:13:04 2003  Ben Pfaff  <blp@gnu.org>
5676
5677         Implement a new random number generator based on the alleged RC4
5678         algorithm.
5679
5680         * expr-evl.c: (expr_evaluate) Use rng_get_double_normal() instead
5681         of rand_normal().
5682
5683         * random.c: [!HAVE_GOOD_RANDOM] (real_rand) Removed.
5684         [!HAVE_GOOD_RANDOM] (real_srand) Removed.
5685         (macro k) Removed.
5686         (static var V[]) Removed.
5687         (static var Y) Removed.
5688         (static var X2) Removed.
5689         (setup_randomize) Removed.
5690         (shuffle) Removed.
5691         (rand_uniform) Removed.
5692         (rand_normal) Removed.
5693         (struct rng) New structure.
5694         (rng_create) New function.
5695         (rng_destroy) New function.
5696         (swap_byte) New static function.
5697         (rng_seed) New function.
5698         (rng_get_bytes) New function.
5699         (rng_get_int) New function.
5700         (rng_get_unsigned) New function.
5701         (rng_get_double) New function.
5702         (rng_get_double_normal) New function.
5703         (pspp_rng) New function.
5704
5705         * random.h: Sync up to random.c.
5706
5707         * sample.c: (struct sample_trns) Make `frac' unsigned and a
5708         fraction of UINT_MAX, not 65536.
5709         (cmd_sample) Use rng_get_unsigned(), rng_get_double(), UINT_MAX
5710         fraction.
5711
5712         * vfm.c: (open_active_file) No need to call setup_randomize() any
5713         longer.
5714
5715 Fri Dec 19 12:05:56 2003  Ben Pfaff  <blp@gnu.org>
5716
5717         Change dictionary name indexes to use hash tables instead of AVL
5718         trees.
5719
5720         * crosstabs.q: (free_var_dict) Use hash tables.
5721         (crs_custom_tables) Ditto.
5722         (calc_general) Ditto.
5723         (compare_table_entry) Rewrite.
5724         (enum_var_values) Reorder parameters.  All references updated.
5725         Rewrite.
5726
5727         * get.c: (rename_variable) Use hash tables.
5728         (mtf_merge_dictionary) Ditto.
5729
5730         * glob.c: (init_glob) Use hash tables.
5731         (cmp_variable) Removed.
5732
5733         * means.q: (mns_custom_tables) Use hash tables.
5734
5735         * modify-vars.c: (rearrange_dict) Use hash tables.
5736
5737         * rename-vars.c: (cmd_rename_variables) Use hash tables.
5738
5739         * sfm-read.c: (read_header) Use hash tables.
5740         (read_variables) Ditto.
5741
5742         * temporary.c: (new_dictionary) Use hash tables.
5743         (save_dictionary) Ditto.
5744         (restore_dictionary) Ditto.
5745
5746         * var.h: (struct dictionary) Change AVL tree `var_by_name' into
5747         hash table `name_tab'.
5748
5749         * vars-atr.c: [DEBUGGING] (dump_one_var_node) Removed.
5750         [DEBUGGING] (dump_var_tree) Removed.
5751         (find_variable) Use hash tables.
5752         (find_dict_variable) Ditto.
5753         (common_init_stuff) Ditto.
5754         (rename_variable) Ditto.
5755         (clear_variable) Ditto.  Also, remove debug code.
5756         (dup_variable) Use hash tables.
5757
5758         * vars-prs.c: (fill_all_vars) Use hash tables.
5759         (is_dict_varname) Ditto.
5760         (parse_dict_variable) Ditto.
5761         
5762 Fri Dec 19 11:46:23 2003  Ben Pfaff  <blp@gnu.org>
5763
5764         Change value labels to use hash tables instead of AVL trees, and
5765         change value labels into an ADT.
5766
5767         * Makefile.am: (pspp_SOURCES) Add value-labels.c, value-labels.h.
5768         
5769         * value-labels.c: New file.
5770
5771         * value-labels.h: New file.
5772
5773         * apply-dict.c: (cmd_apply_dictionary) Use value label ADT.
5774         Get rid of a stupid use of goto.
5775
5776         * autorecode.c: (compare_alpha_value) Rewrite.
5777         (hash_alpha_value) Ditto.
5778         (compare_numeric_value) Rewrite.
5779         (hash_numeric_value) Ditto.
5780
5781         * frequencies.q: (dump_full) Use value label ADT.
5782
5783         * pfm-read.c: (read_value_label) Use value label ADT.
5784
5785         * pfm-write.c: (write_value_labels) Use value label ADT.
5786
5787         * sfm-read.c: (read_variables) Use value label ADT.
5788         (read_value_labels) Rewrite.
5789
5790         * sfm-write.c: (write_value_labels) Rewrite.
5791
5792         * sysfile-info.c: (cmd_sysfile_info) Use value label ADT.
5793         (display_variables) Ditto.
5794         (describe_variable) Ditto.
5795
5796         * t-test.q: (print_t_groups) Use value label ADT.
5797
5798         * temporary.c: (copy_variable) Use value label ADT.
5799         (free_dictionary) Ditto.
5800
5801         * val-labs.c: (verify_val_labs) Use value label ADT.
5802         (get_label) Ditto.
5803         (debug_print) Ditto.
5804         (val_lab_cmp) Removed.
5805         (inc_ref_count) Removed.
5806         (copy_value_labels) Removed.
5807
5808         * var.h: (struct value_label) Removed.
5809         (struct variable) Change AVL tree `val_lab' into hash table
5810         `val_labs'.
5811
5812         * vars-atr.c: (init_variable) Use value label ADT.
5813         (clear_variable) Ditto.
5814         (free_value_label) Removed.
5815         (free_val_lab) Removed.
5816         (get_val_lab) Removed.
5817         (compare_variables) New function.
5818         (hash_variable) New function.
5819
5820         * vfm.c: (dump_splits) Use value label ADT.
5821
5822 Fri Dec 19 11:18:11 2003  Ben Pfaff  <blp@gnu.org>
5823
5824         Add to the hash table interface.
5825
5826         * hash.c: (hsh_hash_bytes) Add assertion.
5827         (hsh_hash_string) Ditto.
5828         (hsh_clear) Ditto.
5829         (hsh_rehash) Ditto.
5830         (hsh_probe) Ditto.
5831         (hsh_create) Ditto.  Also make minimum `size'.
5832         (hsh_destroy) Rephrase.
5833         (sort_nulls_last) Removed.
5834         (not_null) New function.
5835         (hsh_data) Ditto.
5836         (comparison_helper) Ditto.
5837         (hsh_sort) Rewritten.
5838         (hsh_data_copy) New function.
5839         (hsh_sort_copy) Ditto.
5840         (hsh_insert) Ditto.
5841         (hsh_replace) Ditto.
5842         (hsh_hash_double) Ditto.
5843         (hsh_delete) Fix stupid bug.
5844         
5845 Thu Dec 18 12:27:03 WAST 2003 John Darrington <john@darrington.wattle.id.au>
5846         * added a calculation of the mode to FREQUENCIES
5847
5848 Wed Dec 17 12:53:01 WAST 2003 John Darrington <john@darrington.wattle.id.au>
5849
5850         * moved (un)defs of DEBUGGING to config.h
5851
5852 Mon Dec 15 21:35:59 2003  Ben Pfaff  <blp@gnu.org>
5853
5854         * groff-font.c: (add_kern) Fix indentation.
5855         (add_kern) Use & instead of % to take power-of-2 modulus.
5856         (font_get_kern_adjust) Likewise.
5857
5858 Fri Dec 12 23:54:37 2003  Ben Pfaff  <blp@gnu.org>
5859
5860         * autorecode.c: (recode) Replace stupid use of memcpy() by
5861         memberwise copy.
5862         (hash_alpha_value) Use hsh_hash_bytes().  Get rid of nasty casts.
5863         (hash_numeric_value) Ditto.
5864         (autorecode_proc_func) pool_strdup() was wrong here because the
5865         source string was not null-terminated.  Use new pool_strndup()
5866         instead.
5867
5868         * crosstabs.q: (enum_var_values) Remove superfluous and bizarre
5869         use of hsh_iterator_init().
5870
5871         * data-in.c: (parse_N) Initialize i->v->f.
5872
5873         * flip.c: (cmd_flip) Use memmove(), not memcpy(), to copy
5874         overlapping arrays.
5875
5876         * groff-font.c: Use power-of-2 hash table sizes, not prime.
5877         (groff_read_font) Don't call hsh_next_prime().  Don't call
5878         fclose(NULL).
5879         (static var hash) Remove `size_p', `max_used' members.
5880         (font_char_name_to_index) Don't call hsh_next_prime().  Use
5881         hsh_hash_string() instead of hashpjw(), & instead of %.
5882         (default_font) Don't call hsh_next_prime().
5883
5884         * pool.c: (pool_strndup) New function.
5885         (pool_strdup) Reimplement in terms of pool_strndup.
5886
5887         * postscript.c: (hash_font_entry) Use hsh_hash_string().  Get rid
5888         of nasty casts.
5889         (hash_ps_encoding) Use hsh_hash_string().
5890         (hash_ps_combo) Use hsh_hash_string(), hsh_hash_int().
5891         (hash_filename2font) Use hsh_hash_string().
5892
5893         * som.c: Add #include <stdlib.h>.
5894
5895         * tab.c: (tab_destroy) Don't set t->container after freeing `t'
5896         (by destroying its pool).
5897         
5898 Fri Dec 12 23:18:59 2003  Ben Pfaff  <blp@gnu.org>
5899
5900         Miscellaneous hash table code cleanup:
5901         
5902         * hash.h: (struct hsh_table) Moved into hash.c.
5903         (hsh_count) Ditto, and transformed into function.
5904         (hsh_compare_func) New typedef, used for defining otherwise-long
5905         function types here and in hash.c
5906         (hsh_hash_func) Ditto.
5907         (hsh_free_func) Ditto.
5908         
5909         * hash.c: (struct hsh_table) Renamed `n' to `used', `m' to `size',
5910         `table' to `entries'.  Removed `mp'.  All references updated.
5911         (hsh_clear) Don't shrink entries array; if the hash was this big
5912         once, it probably will be again.
5913         (hsh_rehash) Made static.
5914         (force_hsh_insert) Renamed hsh_force_insert.
5915         (force_hsh_find) Renamed hsh_force_find.
5916
5917         Made hash table sizes powers of 2, because that's fine with any
5918         reasonable hash function and because taking a power-of-2 modulus
5919         is faster than any other:
5920         
5921         (hsh_prime_tab) Removed;
5922         (hsh_next_prime) Ditto.
5923         (next_power_of_2) New function.
5924         (hsh_create) Use next_power_of_2.
5925         (hsh_rehash) Use & instead of %.
5926
5927         Cleaned up hsh_sort:
5928         
5929         (internal_comparison_fn) Removed.
5930         (sort_nulls_last) New function.
5931         (hsh_sort) Removed second parameter, switched to using the new
5932         quicksort() function from quicksort.h to avoid using nasty need
5933         for static variables with qsort().  All references updated.
5934
5935         Changed the hash functions offered, because there are better hash
5936         functions than the ones we had, and cleaned up the names to boot:
5937         
5938         * hash.c: (hashpjw_d) Removed.
5939         (hashpjw) Ditto.
5940         (hsh_hash_bytes) New function.
5941         (hsh_hash_string) New function.
5942         (hsh_hash_int) New function.
5943
5944         Improved the hash table iteration interface:
5945         
5946         * hash.h: (hsh_iterator_init) Removed.
5947         (struct hsh_iterator) Removed `init' member, change `next' to
5948         size_t.
5949
5950         * hash.c: (hsh_foreach) Removed.  All references updated to use
5951         hsh_first/hsh_next instead.
5952         (hsh_first) New function.  Notably, unlike hsh_foreach() it does
5953         not treat a null pointer as an empty hash table.
5954         (hsh_next) New function.
5955
5956         Made deletion possible, though slow:
5957
5958         * hash.c: (locate_matching_entry) New function.
5959         (hsh_find) Use locate_matching_entry().
5960         (hsh_delete) New function also using locate_matching_entry().
5961         (hsh_force_delete) New function.
5962
5963 Fri Dec 12 23:16:10 2003  Ben Pfaff  <blp@gnu.org>
5964
5965         * quicksort.c: New file implementing a sort routine with a
5966         interface better than qsort() because it passes a user-provided
5967         parameter to the sort routine.
5968
5969         * Makefile.am: Add quicksort.c, quicksort.h.
5970
5971 Fri Dec 12 13:31:58 2003  Ben Pfaff  <blp@gnu.org>
5972
5973         * All source files: Get rid of nasty special cases for Checker,
5974         which is pretty obsolete now.
5975
5976 Thu Dec 11 21:38:24 WST 2003 John Darrington <john@darrington.wattle.id.au>
5977
5978         * Fixed a bug apparent when using the FREQUENCIES command with the
5979         html driver.  The html driver was incorrectly trying to display 
5980         empty cells.
5981
5982 Sun Jan  2 21:40:13 2000  Ben Pfaff  <blp@gnu.org>
5983
5984         * Makefile.am: Reorganized.  Put locale dir in version.c instead
5985         of passing it to each compile command.  Only put local gmp libs in
5986         LD_ADD if not installed on system.  Remove `boast' target.
5987
5988         * All source files: struct and union typedefs eliminated.
5989         `sizeof type' replaced by `sizeof object' where practical.  Moved
5990         `unused' qualifiers from start to end of declarations for gcc
5991         2.7.2 compatibility.  Change `while (1)' to `for (;;)'.  Made
5992         assertions on pointers strictly compliant.  Removed _ prefixes on
5993         some function parameter names.
5994
5995         * alloc.c: New source file, containing these external linkage
5996         functions removed from common.c: xmalloc, xcalloc, xrealloc,
5997         xstrdup.
5998
5999         * arena.c: Removed.
6000         
6001         * arena.h: Removed.
6002
6003         * ascii.c: Migrated from arenas to pools.
6004         (struct ascii_driver_ext) ops[], box[], fonts[] changed from
6005         c_string to len_string.  All references changed.
6006         (ascii_option) Signature changed to comply to new output.c
6007         interface.
6008         (count_fancy_chars) Removed.
6009         (delineate) Removed support for rich text.
6010         (ascii_text_metrics) Ditto.
6011         (text_draw) Ditto.
6012         (output_shorts) Change `box', `off', `on' from c_string to
6013         len_string.  Change `remaining' from int to size_t.
6014         (ascii_close_page) Make page numbering less haphazard.
6015
6016         * autorecode.c: Migrate from arenas to pools.
6017
6018         * avl.c: Migrate from arenas to pools.  Synch from libavl 1.4.0.
6019
6020         * bitvector.h: New file containing these macros from misc.h:
6021         SET_BIT, CLEAR_BIT, SET_BIT_TO, TEST_BIT, BIT_INDEX.
6022
6023         * command.c: (struct command) cmd1, cmd2, cmd3 members changed to
6024         word[3].  ncmd removed.
6025         (var empty_string) Removed.
6026         (var cmd_table) Declaration updated.
6027         (var cmdtab) Removed.
6028         (cmp_command) Removed.
6029         (split_words) Rewritten to use strtok_r().
6030         (init_cmd_parser) Renamed cmd_init().  Rewritten.
6031         (find_command) Removed.
6032         (FILE_TYPE_okay) Rewritten.
6033         (cmd_parse) Rewritten.  Semantics of the return value of command
6034         handlers has changed: they must now return one of the new CMD_*
6035         enumerals, rather than a magic value.  This meant that all
6036         commands had to be modified, and they were.
6037         (figure_out_command) New function.
6038
6039         * command.def: Add CORRELATIONS, PEARSON CORRELATIONS.  Add
6040         #defines for INIT, INPU, etc.
6041
6042         * command.h: New CMD_* enum series.
6043         (cur_proc) Make const char *, not char *.
6044         (cmd_init) Prototype.
6045         (cmd_parse) Ditto.
6046
6047         * common.c: Removed.
6048
6049         * common.h: Removed.
6050
6051         * correlations.q: New file.
6052
6053         * crosstabs.q: Migrate from arenas to pools.  Migrate to new-style
6054         q2c.
6055         (custom_tables) Renamed crs_custom_tables().
6056         (custom_variables) Renamed crs_custom_variables().
6057         (calc_integer) Add in some `const' qualifiers.
6058         (table_value_missing) Change from a_string to len_string.
6059         (float_M_suffix) Change from a_string to len_string.
6060
6061         * data-in.c: Rewritten.  All references to
6062         parse_string_as_format() changed to data_in().
6063
6064         * data-in.h: New file.
6065
6066         * data-list.c: Change DLS_* from #define's to enums.  Move from
6067         rpd_msg() to tmsg().
6068         (RPD_ERR) New #define.
6069         (do_reading) Change dfm_push_cust() to dfm_push(), pop_cust() to
6070         dfm_pop().
6071         (read_from_data_list_fixed) Change from old
6072         parse_string_as_format() to new data_in().
6073         (read_from_data_list_free) Ditto.
6074         (read_from_data_list_list) Ditto.
6075         (cmd_repeating_data) Modify approach to checking for end of
6076         command.
6077         (rpd_msg) Removed.
6078         (rpd_parse_record) Change from old parse_string_as_format() to new
6079         data_in().  Change from old convert_format_to_string() to new
6080         data_out().
6081         (read_one_set_of_repetitions) Change dfm_push_cust() to
6082         dfm_push(), pop_cust() to dfm_pop().
6083
6084         * data-out.c: Rewritten.  All references to
6085         convert_format_to_string() changed to data_out().
6086
6087         * descript.q: Migrate to new q2c.
6088         (cmd_descriptives) Removed.
6089         (internal_cmd_descriptives) Renamed cmd_descriptives ().
6090         (custom_variables) Renamed dsc_custom_variables().
6091
6092         * dfm.c: (struct dfm_fhuser_ext) `ln' removed.  All references
6093         removed.
6094         (open_file_r) Initialize h->where.line_number.  Migrate to new
6095         struct string.
6096         (open_file_w) Initialize h->where.line_number.
6097         (read_record) Change from ext->ln to h->where.line_number.
6098         Migrate to struct string.
6099         (dfm_put_record) Rephrased.
6100         (dfm_push_cust) Renamed dfm_push(), rewritten.
6101         (dfm_pop) New function.
6102
6103         * error.c: All references updated.
6104         (glob var error_count) Renamed err_err_count.
6105         (glob var warning_count) Renamed err_warning_count.
6106         (glob var error_already_flagged) Renamed err_already_flagged.
6107         (glob var verbosity) Renamed err_verbosity.
6108         (glob var cust_fn) Removed.
6109         (glob var cust_ln) Removed.
6110         (static var file_loc) New.
6111         (static var nfile_loc) New.
6112         (static var mfile_loc) New.
6113         (tmsg) New function.
6114         (push_cust) Removed.
6115         (pop_cust) Removed.
6116         (msg) Rewritten.
6117         (static var terminating) Removed.
6118         (failure) Renamed err_failure().
6119         (hcf) Renamed err_hcf().
6120         (err_push_file_locator) New function.
6121         (err_pop_file_locator) New function.
6122         (err_location) New function.
6123         (check_error_count) Renamed err_check_count().
6124         (vmsg) Renamed err_vmsg().  Interface changed.
6125         (verbose_msg) Removed.
6126         (err_cond_fail) New function.
6127         (error_break) Renamed err_break().
6128
6129         * error.h: All references updated.
6130         (enum MSG_CLASS_COUNT) Renamed ERR_CLASS_COUNT.
6131         (enum ERR_CLASS_MASK, ERR_VERBOSITY_SHIFT, ERR_VERBOSITY_MASK)
6132         New.
6133         (struct file_locator) New.
6134         (struct error) New.
6135         (macro verbose_msg) Removed.
6136         (macro cond_fail) Removed.
6137
6138         * expr-opt.c: (evaluate_tree) sizeof(char) == 1.
6139
6140         * expr-prs.c: Reorganized.  All references updated.
6141         (exprtypename) Renamed expr_type_name().
6142         (typename) Renamed type_name().
6143         (free_expression) Renamed expr_free().
6144         (parse_expression) Renamed expr_parse().  Uses new type_check()
6145         function.
6146         (init_functab) Renamed init_func_tab().
6147         (type_check) New function.
6148         (parse_or) Rewritten to use new allocate_nonterminal() and
6149         append_nonterminal_arg() functions.
6150         (parse_and) Ditto.
6151         (parse_not) Ditto.
6152         (parse_rel) Ditto.  Also simplified logic.
6153         (parse_add) Ditto.
6154         (parse_mul) Ditto.
6155         (parse_neg) Ditto.
6156         (parse_exp) Ditto.
6157         (SYSMIS_func) Ditto.
6158         (VALUE_func) Rephrased.
6159         (CONCAT_func) Fix memory leak by replacing free by free_node on
6160         lossage.
6161         (generic_str_func) Ditto.
6162         (parse_function) Ditto.  Also rephrasings.  Uses bsearch() to find
6163         function.
6164         (allocate_nonterminal) New function.
6165         (append_nonterminal_arg) New function.
6166         (static func_tab[]) Now at file level.
6167         (cmp_func) Moved.
6168         (init_func_tab) Moved.  Now just uses qsort() to sort func_tab[].
6169
6170         * expr.h: (enum series OP_*) Moved to exprP.h.
6171         (OP_* defines) Ditto.
6172         (struct op_desc) Ditto.
6173         (global ops[]) Ditto.
6174         (struct num_con_node) Ditto.
6175         (struct str_con_node) Ditto.
6176         (struct var_node) Ditto.
6177         (struct lag_node) Ditto.
6178         (struct casenum_node) Ditto.
6179         (struct nonterm_node) Ditto.
6180         (union any_node) Members renamed.
6181         (struct sys_node) Removed.
6182         (struct val_node) Removed.
6183         (operator typedef) Removed.
6184         (typedef exprtype) Removed.
6185         (enum series EX_*) Moved to exprP.h.
6186         (struct expression) Ditto.  Also renamed a lot of the members.
6187         (PXP_* defines) Changed to enums.
6188         (free_node prototype) Moved to exprP.h.
6189
6190         * file-handle.h: (struct file_handle) New member `where'.
6191
6192         * file-handle.q: Migrated to new q2c format.
6193         (prepend_current_directory) Removed (dead code).
6194         (cmd_file_handle) Incorporated all of internal_cmd_file_handle().
6195         (fh_get_handle_by_filename) Removed dead code.
6196         Set new `where' member.
6197
6198         * file-type.c: (file_type_source_read) References to
6199         parse_string_as_format() changed to data_in().
6200         dfm_push_cust()/pop_cust() changed to dfm_push()/dfm_pop().
6201
6202         * filename.c: All references updated.
6203         (init_filename) Renamed fn_init().
6204         (expand_line) Removed.
6205         (macro EXPAND_LINE) Removed.
6206         (interp_vars) Renamed fn_interp_vars().  Now uses st_*() instead
6207         of custom functions.
6208         (gnu_getcwd) Renamed fn_get_cwd(), rewritten.
6209         (tilde_expand) Renamed fn_tilde_expand(), uses ds_*().
6210         (normalize_filename) Renamed fn_normalize().
6211         (search_path) Renamed fn_search_path(), rewritten.
6212         (prepend_dir) Renamed fn_prepend_dir().
6213         (blp_getenv) Renamed fn_getenv().
6214         (blp_dirname) Renamed fn_dirname().
6215         (fn_basename) New function, not used.
6216         (absolute_filename_p) Renamed fn_absolute_p().
6217         (is_special_filename) Renamed fn_special_p().
6218         (file_exists) Renamed fn_exists_p().
6219         (readlink_malloc) Renamed fn_readlink().
6220         (getenv_default) Renamed fn_getenv_default().
6221         (open_file) Renamed fn_open().
6222         (close_file) Renamed fn_close().
6223         (open_file_ext) Renamed fn_open_ext().
6224         (close_file_ext) Renamed fn_close_ext().
6225
6226         * font.h: Migrate from arenas to pools.
6227
6228         * format.c: (parse_format_specifier_name) Deal with ds_* strings.
6229
6230         * frequencies.g: Migrate from arenas to pools.
6231
6232         * frequencies.q: Migrate to new q2c version.  Migrate from arenas
6233         to pools.
6234
6235         * getline.c: All references updated.
6236         (global getl_buf) Changed from char * to struct string.
6237         (static getl_include_path) Ditto.
6238         (global getl_buf_len) Removed.
6239         (global getl_buf_size) Removed.
6240         (getl_include_path) Deal with new getl_buf, getl_include_path.
6241         (getl_uninitialize) New function.
6242         (getl_get_current_directory) Rewritten.
6243         (getl_clear_include_path) Rewritten.
6244         (getl_add_include_dir) Rewritten.
6245         (getl_add_file) Assertion fixed.
6246         (getl_add_virtual_file) Change initial value of `remaining_loops'
6247         from 2 to 1.
6248         (welcome) Rewritten.
6249         (handle_line_buffer) Make static.  Change logic to make
6250         getl_add_virtual_file() change sensible.  Use ds_*() strings.
6251         (getl_read_line) Use ds_*() strings.  Implement SET ECHO.
6252         (getl_close_file) Moved.
6253         (getl_location) New function.
6254
6255         * getline.h: All references updated.
6256         (macro curln) Removed.
6257         (macro curfn) Removed.
6258         (macro am_interactive) Renamed getl_am_interactive.
6259         (macro am_reading_script) Renamed getl_reading_script.
6260
6261         * glob.c: (global fmt_parse_ignore_error) Removed.
6262         (init_glob) Use locale_dir not LOCALEDIR.  Use feholdexcept() on
6263         systems that support it (C99).  Turn off SET ECHO by default.  No
6264         necessary julcal initialization anymore.
6265
6266         * groff-font.c: Migrate from arenas to pools.
6267         (groff_read_font) Use err_push_file_locator().
6268         (groff_read_DESC) Ditto.
6269         (font_msg) Use tmsg().
6270
6271         * hash.c: (hsh_sort) Fix debug code.
6272         [GLOBAL_DEBUGGING] Include stdio.h.
6273
6274         * hash.h: (macro force_hsh_insert) Rephrase.
6275
6276         * heap.c: Rewritten.
6277         
6278         * heap.h: Rewritten.
6279
6280         * html.c: (html_option) Change from outp_value to struct string.
6281         (postopen) Change from curfn to getl_location().
6282         (escape_string) Remove rich-text code.  Signature changed.
6283         (output_tab_table) Switch from a_string to struct len_string.
6284         Remove rich text support.
6285
6286         * lexer.c: All references updated.  Largely rewritten.  Major
6287         changes listed below.  Removed tagged quote support.  Adapted to
6288         struct string tokstr.
6289         (global tokstr) Changed to struct string.
6290         (global tokstr_size) Removed.
6291         (global tokstr_len) Removed.
6292         (global tokid) New.
6293         (global tokint) Removed.
6294         (global toklongstr) Removed.
6295         (C* defines) Removed.
6296         (static tbl[]) Removed.
6297         (static id[]) Removed.
6298         (static une[]) Removed.
6299         (discard_line) Renamed lex_discard_line().
6300         (get_entire_line) Renamed lex_entire_line().
6301         (get_rest_of_line) Renamed lex_rest_of_line().
6302         (get_dotted_rest_of_line) Merged into lex_rest_of_line().
6303         (make_hexit) Removed.
6304         (syntax_error) Renamed lex_error().  Return value removed.
6305         (get_token_representation) Renamed lex_token_representation().
6306         (putback) Renamed lex_put_back().
6307         (putfwd) Renamed lex_put_forward().
6308         (convert_negative_to_dash) Renamed lex_negative_to_dash().
6309         (set_prog) Renamed lex_set_prog().
6310         (init_lex) Renamed lex_init().
6311         (reset_eof) Renamed lex_reset_eof().
6312         (lookahead) Renamed lex_look_ahead().
6313         (check_id) Rewritten.
6314         (yylex) Renamed lex_get(), rewritten.
6315         (lex_end_of_command) New function.  Many commands were rephrased
6316         using this.
6317         (lex_integer_p) New function.  Replaces compare of tokint against
6318         NOT_LONG.
6319         (lex_integer) New function.  Replaces tokint.
6320         (match_tok) Renamed lex_match().
6321         (match_id) Renamed lex_match_id().
6322         (match_int) Renamed lex_match_int().
6323         (force_match_id) Renamed lex_force_match_id(), added return value.
6324         (force_match) Renamed lex_force_match(), added return value.
6325         (force_string) Renamed lex_force_string(), added return value.
6326         (force_int) Renamed lex_force_int(), added return value.
6327         (lex_id_match_len) New function.
6328         (id_match) Renamed lex_id_match(), rewritten.
6329         (get_line) Renamed lex_get_line().
6330         (preprocess_line) Renamed lex_preprocess_line().
6331         (tokname) Renamed lex_token_name().
6332         (bin_value_func) Removed.
6333         (oct_value_func) Removed.
6334         (hex_value_func) Removed.
6335         (unexpected_eof) New function.
6336         (convert_numeric_string_to_char_string) New function.
6337         (parse_string) Rewritten, signature changed.
6338         (add_tokstr_char) Removed.
6339         (add_tokstr_unsigned) Removed.
6340         (add_tokstr_string) Removed.
6341         (parse_tagged_quote) Removed.
6342         (skip_comment) Renamed lex_skip_comment().
6343
6344         * lexer.h: All references updated.
6345         (macro is_id1) Renamed CHAR_IS_ID1.
6346         (macro is_idn) Renamed CHAR_IS_IDN.
6347         (token names ID, NUM, STRING, STOP, ... WITH, EXP) Renamed with
6348         prefix T_: T_ID, T_NUM, T_STRING, T_STOP, ... T_WITH, T_EXP.
6349         (macro get_token) Removed.
6350         (macro id_match) Removed.
6351         (macro force_match_id) Removed.
6352         (macro force_match) Removed.
6353         (macro force_string) Removed.
6354         (macro force_int) Removed.
6355         (macro force_num) Removed.
6356         (macro force_id) Removed.
6357
6358         * lexerP.h: Removed.
6359
6360         * list.q: Migrated to new q2c format.
6361         (write_line) Deal with struct len_string.
6362         (write_varname) Ditto.
6363         (write_fallback_headers) Ditto.
6364
6365         * magic.c: New file, incorporating the following global variables
6366         previously in other files: endian, second_lowest_value.  And both
6367         of those are conditional on #define's.
6368
6369         * magic.h: New file, incorporating the following global variable
6370         declarations: endian, second_lowest_value, and the following macro
6371         declarations: NOT_DOUBLE, NOT_LONG, NOT_INT.
6372
6373         * main.c: Added declarations of pgmname, finished, curdate,
6374         start_interactive.
6375         (main) Call new parse_script() function.
6376         (parse_script) New function.
6377         (execute_command) New function.
6378         (dump_token) Removed.
6379         (handle_error) New function.
6380
6381         * matrix.c: New file.
6382
6383         * matrix.h: New file.
6384
6385         * matrix-data.c: Migrated from arenas to pools.
6386         (mget_token) Change from parse_string_as_format() to data_in().
6387
6388         * means.q: Migrate to new q2c.
6389         (custom_tables) Renamed mns_custom_tables().
6390         (custom_crossbreak) Renamed mns_custom_crossbreak().
6391         (custom_variables) Renamed mns_custom_variables().
6392
6393         * mis-val.c: (static var width) Changed from `int' to `size_t'.
6394         (parse_varnames) Prototype.
6395         (parse_numeric) Rephrasings.
6396         (parse_alpha) Adapt to new struct string tokstr.
6397
6398         * misc.c: (intlog10) Rewritten.
6399         (spacing) Removed.
6400         (ansi_rand) Renamed real_rand(), moved into random.c.
6401         (ansi_srand) Renamed real_srand(), moved into random.c.
6402         (setup_randomize) Moved to random.c.
6403         (rand_uniform) Ditto.
6404         (rand_normal) Ditto.
6405         (rand_simple) Ditto.
6406         (get_config_line) Removed.
6407         (reverse) Removed (dead code).
6408
6409         * misc.h: (macro SET_BIT) Moved to bitvector.h.
6410         (macro CLEAR_BIT) Ditto.
6411         (macro TEST_BIT) Ditto.
6412         (macro SET_BIT_TO) Ditto.
6413         (macro BIT_INDEX) Ditto.
6414
6415         * output.c: (outp_read_devices) Move to err_push_file_locator()
6416         from push_cust().  Use struct string.
6417         (expand_op_tokstr) Removed.
6418         (static var op_tokstr) Changed to struct string.
6419         (static var op_tokstr_size) Removed.
6420         (tokener) Rephrasings.  Use struct string.
6421         (parse_options) Use struct string.
6422         (destroy_driver) Fix assertion.
6423         (outp_get_paper_size) Move to err_push_file_locator().
6424         [0] Removed dead code.
6425         (outp_string_width) Move to len_string.
6426
6427         * output.h: Comment fixes.
6428         (TAG_* enum series) Removed.
6429         (struct outp_value) Removed.
6430         (enum OUTP_T_FANCY) Removed.
6431         (struct outp_text) `s' changed from a_string to len_string.
6432         (struct outp_class) `option' change arg 3 from outp_value to
6433         struct string.
6434
6435         * pfm-read.c: (corrupt_msg) Rewritten.
6436
6437         * pfm-write.c: (bufwrite) Fix assertion.
6438
6439         * pool.c: New file, reference version.
6440
6441         * pool.h: New file, reference version.
6442
6443         * postscript.c: (ps_font_sizes) Fix assertion.
6444         (ps_option) Change arg 3 from outp_value to struct string.
6445         Adapt to struct string.
6446         (macro output_line) Removed.
6447         (macro add_string) Removed.
6448         (output_encodings) Adapted to struct string.  Moved to
6449         err_push_file_locator().
6450         (find_encoding_file) Fix assertion.
6451         (read_ps_encodings) Move to err_push_file_locator().
6452         (postopen) Use getl_location() instead of curfn.
6453         (out_text_plain) Move to len_string.
6454         (text) Ditto.  Remove rich text support.
6455
6456         * print.c: (cmd_print) Remove now-unneeded resource cleanup code.
6457         (cmd_print_eject) Ditto.
6458         (cmd_write) Ditto.
6459         (internal_cmd_print) Now cleans up after itself.  Uses
6460         fh_parse_file_handle() now.
6461         (cmd_print_space) Use PXP_NUMERIC to type-check.
6462
6463         * q2c.c: Overhauled.  Removed _("") i18n support.  All references
6464         updated.  All output functions updated to handle structures rather
6465         than local or static variables.  Adapt to new PSPP lex_*()
6466         functions.
6467         (macro _) Removed.
6468         (macro N_) Removed.
6469         (macro MAX_N_SBC) Removed.
6470         (global bare) Removed.
6471         (enum STRING) Renamed T_STRING.
6472         (enum ID) Renamed T_ID.
6473         (get_buffer) Buffer size increased.
6474         (strlower) Renamed st_lower(), rephrased.
6475         (strupper) Renamed st_upper(), rephrased.
6476         (skip_ws) New function.
6477         (get_line) Don't special-case any types of lines (like those
6478         beginning with ! or $, for instance).
6479         (get_token) Renamed lex_get().  Rephrased.
6480         (static var `prefix') New.
6481         (parse) New function.
6482         (parse_setting) Minor rephrasing.
6483         (dump_specifier_vars) Ditto.
6484         (make_identifier) Put null terminator on identifier, duh.
6485         (dump_vars) Renamed dump_declarations().  Never indent.  Never
6486         static.  Output changed entirely.
6487         (dump_specifier_init) Rephrase.
6488         (dump_vars_init) No index variable needed.  Other modifications.
6489         (dump_parser) Don't parse command name.  Do dump functions instead
6490         of just code fragments.
6491         (dump_free) Dump function instead of code fragment.
6492         (recognize_directive) New function.
6493         (main) Use recognize_directive().  Don't rely on magic $ line
6494         beginning: instead, parse comments.  Update list of headers.
6495
6496         * random.c: New file, containing the following functions:
6497         real_rand(), real_srand(), setup_randomize, shuffle, rand_uniform,
6498         rand_normal, rand_simple.
6499
6500         * random.h: New file.
6501
6502         * recode.c: (cmd_recode) Merge internal_cmd_recode() into this
6503         function.  `max_src_width', `max_dst_width' changed to size_t.
6504         (internal_cmd_recode) Removed.
6505         (parse_dest_spec) Merge similar cases.
6506         (parse_src_spec) Add assertion.
6507
6508         * repeat.c: (recognize_keyword) New function.
6509         (internal_cmd_do_repeat) Parse and handle PRINT keyword on END
6510         REPEAT.  Improve recognition of END REPEAT (use
6511         recognize_keyword()).  Move from curfn to getl_location().  Use
6512         struct string.
6513                 
6514         (perform_DO_REPEAT_substitutions) Adapt to struct string.
6515
6516         * set.q: Adapt to new q2c.
6517         (cmd_set) Range-check some values better.
6518         (custom_blanks) Renamed stc_custom_blanks().
6519         (custom_length) Renamed stc_custom_length().
6520         (custom_results) Renamed stc_custom_results().
6521         (custom_seed) Renamed stc_custom_seed().
6522         (custom_width) Renamed stc_custom_width().
6523         (custom_format) Renamed stc_custom_format().
6524         (custom_journal) Renamed stc_custom_journal().
6525         (custom_color) Renamed stc_custom_color().
6526         (custom_listing) Renamed stc_custom_listing().
6527         (custom_disk) Renamed stc_custom_disk().
6528         (custom_log) Renamed stc_custom_log().
6529         (custom_rcolor) Renamed stc_custom_rcolor().
6530         (custom_viewlength) Renamed stc_custom_viewlength().
6531         (custom_workdev) Renamed stc_custom_workdev().
6532
6533         * settings.h: Not necessary to include format.h any longer.
6534
6535         * sfm-read.h: (macro bswap_int32) Moved here from sfmP.h.
6536         (corrupt_msg) Rewritten.
6537
6538         * sort.c: Adapt to rewritten heap ADT.
6539
6540         * str.c: (aa_strcpy) Removed.
6541         (ab_strcpy) Removed.
6542         (ac_strcpy) Removed.
6543         (ba_strcpy) Removed.
6544         (bb_strcpy) Removed.
6545         (ca_strcpy) Removed.
6546         (aa_strdup) Removed.
6547         (aa_strdupcpy) Removed.
6548         (ba_strdup) Removed.
6549         (sa_strdup) Removed.
6550         (memrev) Renamed mm_reverse().
6551         (memrmem) Renamed mm_find_reverse().
6552         (cmp_str) Renamed st_compare_pad().
6553         (strmaxcpy) Removed.
6554         (strbarepadcpy) Renamed st_bare_pad_copy(), signature changed.
6555         (strbarepadlencpy) Renamed st_bare_pad_len_copy(), signature
6556         changed.
6557         (strpadcpy) Renamed st_pad_copy(), signature changed.
6558         (blpstrset) Removed.
6559         (ds_create) New function.
6560         (ds_init) New function.
6561         (ds_replace) New function.
6562         (ds_destroy) New function.
6563         (ds_clear) New function.
6564         (ds_extend) New function.
6565         (ds_shrink) New function.
6566         (ds_truncate) New function.
6567         (ds_length) New function.
6568         (ds_size) New function.
6569         (ds_value) New function.
6570         (ds_end) New function.
6571         (ds_concat) New function.
6572         (ds_concat_buffer) New function.
6573         (ds_printf) New function.
6574         (ds_putchar) New function.
6575         (ds_getline) New function.
6576         (ds_get_config_line) New function derived from the old
6577         misc.c:get_config_line().
6578         (ls_create) New function.
6579         (ls_create_buffer) New function.
6580         (ls_init) New function.
6581         (ls_shallow_copy) New function.
6582         (ls_destroy) New function.
6583         (ls_null) New function.
6584         (ls_null_p) New function.
6585         (ls_empty_p) New function.
6586         (ls_length) New function.
6587         (ls_value) New function.
6588         (ls_end) New function.
6589
6590         * str.h: Reformatted.
6591         (struct a_string) Removed.
6592         (struct b_string) Removed.
6593         (struct c_string) Removed.
6594         (struct len_string) New.
6595         (struct string) New.
6596         (macro as_streq) Removed.
6597         (macro bs_streq) Removed.
6598         (macro cs_streq) Removed.
6599         (macro sa_streq) Removed.
6600         (macro sb_streq) Removed.
6601         [__GNUC__] (inline function ds_putchar) New function.
6602         [__GNUC__] (inline function ds_length) New function.
6603         [__GNUC__] (inline function ds_value) New function.
6604         [__GNUC__] (inline function ds_end) New function.
6605
6606         * sysfile-info.c: (cmd_sysfile_info) Rephrased.
6607         (display_vectors) Fix missing i18n.
6608
6609         * t-test.q: Migrate to new q2c.
6610
6611         * tab.c: Migrate from arenas to pools.
6612         (tab_create) Use struct len_string.
6613         (tab_realloc) Ditto.
6614         (text_format) Ditto.
6615         (tab_joint_text) Ditto.
6616         (tab_natural_width) Remove rich text support.
6617         (tab_natural_height) Ditto.
6618         (tab_output_text) Handle TAT_FIX.
6619         (tab_raw) Change arg from a_string to len_string.
6620         (tabi_driver) Fix assertion.  Use struct len_string.
6621         (render_strip) Use struct len_string.  Remove rich text support.
6622         Add `const' qualifiers.
6623
6624         * tab.h: (enum TAB_RICH) Remove.
6625         (enums TAB_COL_NONE, TAB_COL_DONE) New.  Where appropriate,
6626         SOM_COL_* updated to read TAB_COL_*.
6627         (struct tab_table) Change arena to pool.  Change a_string to
6628         len_string.
6629
6630         * temporary.c: (restore_dictionary) Rewrite Checker code.
6631
6632         * var.h: (macros MAX_SHORT_STRING, MIN_LONG_STRING, SYSMIS,
6633         LOWEST, HIGHEST) Moved here from common.h.
6634         (typedef any_trns) Removed.  All references changed to `struct
6635         trns_header'.
6636
6637         * vars-atr.c: (force_create_variable) Fix assertion.
6638         (force_dup_variable) Fix assertion.
6639         
6640 Thu Jun  3 18:40:42 1999  Ben Pfaff  <blp@gnu.org>
6641
6642         Using alphanumeric variables in functions under AGGREGATE
6643         segfaulted.  Fixed.  Thanks to Dr. Dirk Melcher
6644         <BZN-mdksh@t-online.de> for reporting this bug.
6645         
6646         * aggregate.c: (parse_aggregate_functions) When setting the
6647         FSTRING bit, also allocate memory for the `string' member of
6648         agr_next.
6649         (free_aggregate_functions) Free iter->string.  Don't use the
6650         non-function bits when indexing the array of functions.
6651         [DEBUGGING] (debug_print) Don't use the non-function bits when
6652         indexing the array of functions.        
6653
6654 Sun May 30 00:00:54 1999  Ben Pfaff  <blp@gnu.org>
6655
6656         Under certain circumstances, the final case would be omitted from
6657         the results of an AGGREGATE operation.  Fixed.  Thanks to Dr. Dirk
6658         Melcher <BZN-mdksh@t-online.de> for reporting this bug.
6659         
6660         * aggregate.c (agr_00x_end_func): Increment number of cases in
6661         sink before writing case.  For streams that keep track of how many
6662         cases there are based on this value, this means that the last case
6663         will be read in on the next stream read.
6664
6665 Sat May 29 22:03:31 1999  Ben Pfaff  <blp@gnu.org>
6666
6667         Undefined behavior was invoked by referencing a freed pointer.
6668         
6669         * vfm.c (memory_stream_write): Free pointer *after* checking for
6670         non-null status.
6671
6672 Sat May 29 22:02:22 1999  Ben Pfaff  <blp@gnu.org>
6673
6674         A wrong record size was displayed when paging the active file to
6675         disk.
6676         
6677         * vfm.c: (memory_stream_write) Fix off-by-one error.
6678
6679 Sat May 29 21:50:26 1999  Ben Pfaff  <blp@gnu.org>
6680
6681         Not having enough temporary space for sorting caused a core dump.
6682         Fixed.
6683         
6684         * sort.c: (allocate_cases) Initialize i.
6685
6686 Sat May 29 21:40:54 1999  Ben Pfaff  <blp@gnu.org>
6687
6688         Syntax errors in function descriptions on AGGREGATE caused core
6689         dumps.  Fixed.
6690         
6691         * aggregate.c (cmd_aggregate): Don't free agr_dict after calling
6692         free_aggregate_functions(), since that function already frees
6693         agr_dict.
6694         
6695 Sat May 29 21:06:10 1999  Ben Pfaff  <blp@gnu.org>
6696
6697         A null pointer was dereferenced, causing a core dump, when
6698         PERCENTILES was specified on FREQUENCIES.  This fixes the problem,
6699         but PSPP still doesn't calculate percentiles.  Thanks to Regnor
6700         Jernsletten <rjernsle@eunet.no> for reporting this problem.
6701         
6702         * arena.c: (arena_malloc) If the arena hasn't been initialized
6703         already, initialize it.
6704
6705 Sat May 29 20:47:29 1999  Ben Pfaff  <blp@gnu.org>
6706
6707         * Makefile.cygwin: New file supplied by Hankin <hankin@dunno.com>
6708         for compilation with Cygnus Windows B20.  Not used by other
6709         systems.
6710
6711 Sat May 29 20:36:04 1999  Ben Pfaff  <blp@gnu.org>
6712
6713         SORT always sorted in ascending order.  Fixed.  Thanks to Dr. Dirk
6714         Melcher <BZN-mdksh@t-online.de> for reporting this bug.
6715
6716         * sort.c: (compare_case_lists) Reverse sense of comparison if
6717         sorting in descending order.
6718         (compare_record) Ditto.
6719
6720 Tue Mar  9 13:18:54 1999  Ben Pfaff  <blp@gnu.org>
6721
6722         SPLIT FILE with a string variable caused a core dump.  Fixed.
6723
6724         * vfm.c: If the variable is a string then make a temporary value
6725         struct pointing to it.  The underlying problem is a lot bigger
6726         than this (see TODO) but this is a stopgap for the simple case at
6727         least.
6728         
6729 Tue Mar  9 13:15:53 1999  Ben Pfaff  <blp@gnu.org>
6730
6731         Nested INCLUDEs didn't work.  Fixed.
6732
6733         * getline.c: (getl_include) Set first_line to NULL in allocated
6734         structure.
6735
6736 Tue Mar  9 13:13:46 1999  Ben Pfaff  <blp@gnu.org>
6737
6738         The MATCH FILES procedure set the values of variables not present
6739         to 0.  It should have been SYSMIS.  This is now fixed.
6740
6741         * get.c: (mtf_delete_file_in_place) Replace 0.0 by SYSMIS.
6742
6743 Tue Mar  9 12:52:23 1999  Ben Pfaff  <blp@gnu.org>
6744
6745         The REMARK command was too aggressive about skipping lines.  It
6746         didn't like being the last command in a file.
6747
6748         * command.c: (cmd_remark) Call get_entire_line() instead of
6749         get_line().
6750
6751 Tue Mar  9 12:48:05 1999  Ben Pfaff  <blp@gnu.org>
6752
6753         Comment parsing wasn't consistent with the rest of the code in its
6754         idea of where one command ends and another starts.  This meant
6755         that sometimes commands would be mysteriously ignored.  Thanks to
6756         Dr. Dirk Melcher <BZN-mdksh@t-online.de> for reporting this bug.
6757          
6758         * command.c: (parse_cmd) Hand off comment parsing to new function
6759         skip_comment() in lexer.c.
6760         * lexer.c: (skip_comment) New function.
6761
6762 Wed Jan 20 20:22:07 1999  Ben Pfaff  <blp@gnu.org>
6763
6764         The TABLE subcommand on MATCH FILES worked only erratically at
6765         best.  This fixes it.  Thanks to Dr. Dirk Melcher
6766         <BZN-mdksh@t-online.de> for reporting this bug.
6767
6768         * get.c: (mtf_compare_BY_values) When comparing string values, a
6769         difference of 1 is still a difference :-)
6770         (mtf_processing) Inverted TABLE reading logic fixed.  Also don't
6771         advance TABLE files automatically when matched.  Comment fixes.
6772
6773 Tue Jan 19 22:32:31 1999  Ben Pfaff  <blp@gnu.org>
6774
6775         VARIABLE LABELS rejected a slash before the first variable
6776         specification, contradicting the documentation.  Thanks to Walter
6777         M. Gray <graywm@northernc.on.ca> for reporting this bug.
6778
6779         * var-labs.c: (cmd_variable_labels) Ignore a leading slash in
6780         command specification.
6781
6782 Tue Jan 19 22:29:54 1999  Ben Pfaff  <blp@gnu.org>
6783
6784         Because of an incorrect optimization in memory allocation,
6785         CROSSTABS sometimes segfaulted when asked to output multiple
6786         tables.  Thanks to Walter M. Gray <graywm@northernc.on.ca> for
6787         reporting this bug.
6788
6789         * crosstabs.q: (postcalc) New variables maxcols, maxcells, which
6790         are passed to output_pivot_table() for its use.
6791         (output_pivot_table) Instead of assuming the number of columns is
6792         constant, keep track with maxcols.  In general mode, use maxcells
6793         to determine whether more matrix cells need to be allocated.    
6794
6795 Tue Jan 19 22:27:46 1999  Ben Pfaff  <blp@gnu.org>
6796
6797         CROSSTABS didn't display value labels for column and row
6798         variables.  Thanks to Walter M. Gray <graywm@northernc.on.ca> for
6799         reporting this bug.
6800
6801         * crosstabs.q: (table_value_missing) If the specified value has a
6802         value label for this variable, then show it instead of the raw
6803         value.
6804         (display_dimensions) Delegate display of value_labels to
6805         table_value_missing.
6806
6807 Mon Jan 18 20:04:06 1999  Ben Pfaff  <blp@gnu.org>
6808
6809         WRITE didn't write line ends.  Fixed.  Thanks to Dr. Dirk Melcher
6810         <BZN-mdksh@t-online.de> for reporting this bug.
6811
6812         * print.c: (print_trns_proc) Write (CR/)LF if PRINT is used _or_
6813         if the file isn't declared as binary.
6814
6815 Mon Jan 18 19:56:45 1999  Ben Pfaff  <blp@gnu.org>
6816
6817         MATCH FILES corrupted memory and dumped core on some syntax
6818         errors.  Fixed.
6819
6820         * get.c: (cmd_match_files) Set file->handle to NULL before
6821         jumping to lossage.
6822         (mtf_free_file) Don't free a null dictionary.   
6823
6824 Mon Jan 18 19:27:57 1999  Ben Pfaff  <blp@gnu.org>
6825
6826         MATCH FILES should set numeric values not available to the
6827         system-missing value, not to 0.  Thanks to Dr. Dirk Melcher
6828         <BZN-mdksh@t-online.de> for reporting this bug.
6829
6830         * get.c: (mtf_processing) Set unused records to system-missing,
6831         not 0.
6832
6833 Mon Jan 18 15:06:46 1999  Ben Pfaff  <blp@gnu.org>
6834
6835         KEEP didn't work properly on the SAVE procedure.  Fixed.  Thanks
6836         to Ralf Geschke <ralf@kuerbis.org> for reporting this bug.
6837
6838         * temporary.c: (save_dictionary) Initialize var_by_name AVL tree
6839         in newly created dictionary, and add each copied variable to the
6840         tree.
6841  
6842 Mon Jan 18 15:04:48 1999  Ben Pfaff  <blp@gnu.org>
6843
6844         Memory leak fix.
6845         
6846         * get.c: (trim_dictionary) Free variable list for KEEP after
6847         finishing with it.
6848
6849 Mon Jan 18 12:57:36 1999  Ben Pfaff  <blp@gnu.org>
6850
6851         Some systems didn't like the way open_file was coded.  Thanks to
6852         Hankin <hankin@rogue.consultco.com> for pointing this out.
6853
6854         * filename.c: (open_file) Don't try to store stdin, stdout,
6855         stderr as part of an array, because that doesn't always work.
6856
6857 Mon Jan 18 12:53:27 1999  Ben Pfaff  <blp@gnu.org>
6858
6859         The SAVE procedure didn't save long string variables properly.
6860         Fixed by this patch.  Thanks to Hankin
6861         <hankin@rogue.consultco.com> for this patch.
6862         
6863         * sfm-write.c: (write_variable) Fix off-by-one error in writing
6864         out variable pad records.
6865
6866 Tue Jan  5 14:29:27 1999  Ben Pfaff  <blp@gnu.org>
6867
6868         Previously, if PRINT SPACE were given a negative argument, it
6869         would report an error, then spin in an (almost) infinite loop.
6870         This fixes that behavior.
6871
6872         * print.c: (print_space_trns_proc) After reporting a negative
6873         argument, set number of lines to print to 1.
6874
6875 Tue Jan  5 13:59:55 1999  Ben Pfaff  <blp@gnu.org>
6876
6877         SPSS 8.0 outputs some new record types in its system files, and it
6878         allows longer value labels.  Accept these system files.
6879
6880         * sfm-read.c: (sfm_read_dictionary) Ignore record type 7 subtype
6881         11 emitted by SPSS 8.0.
6882         
6883 Tue Jan  5 13:55:50 1999  Ben Pfaff  <blp@gnu.org>
6884
6885         The LIST procedure was too conservative in allocating space for
6886         buffers, which caused a bug that only showed up with very long
6887         output variables.  Thanks to Hankin <hankin@dunno.com> for this
6888         bug report.
6889
6890         * list.q: (determine_layout) Allocate 1022 bytes instead of 256.
6891
6892 Tue Jan  5 13:34:34 1999  Ben Pfaff  <blp@gnu.org>
6893
6894         Typo meant string format specifiers weren't checked properly.  I
6895         think that Hankin <hankin@dunno.com> sent me this report, but I'm
6896         willing to be corrected on this point.
6897  
6898         * format.c: (check_string_specifier) Fix obvious typo.  
6899
6900 Tue Jan  5 12:50:42 1999  Ben Pfaff  <blp@gnu.org>
6901
6902         Using $CASENUM in an expression didn't work.  Here's a fix.
6903         Thanks to Dirk Melcher <BZN-mdksh@t-online.de> for reporting this
6904         bug.
6905          
6906         * expr-evl.c: (evaluate_expression) Add OP_CASENUM case.
6907
6908         * expr-opt.c: (dump_node) OP_CASENUM is acceptable.
6909
6910 Tue Jan  5 12:47:48 1999  Ben Pfaff  <blp@gnu.org>
6911
6912         The changes in 0.2.1 to fix DATA LIST FREE parsing broke some
6913         other behavior, *sigh*.  This patch hopefully fixes that.  This
6914         time I've actually tested it.
6915
6916         Thanks to Hankin <hankin@dunno.com> for reporting this bug.
6917
6918         * data-list.c: (read_from_data_list_free,
6919         read_from_data_list_list) Call parse_string_as_format() directly
6920         without mucking around with the field width.
6921
6922 Tue Jan  5 12:31:19 1999  Ben Pfaff  <blp@gnu.org>
6923
6924         Occasionally, you may encounter a script that wants to be
6925         interpreted in interactive mode.  Make -i emulate this behavior to
6926         allow such scripts to be executed with PSPP.
6927
6928         Thanks to Hankin <hankin@dunno.com> for reporting this behavior.
6929
6930         * cmdline.c: (pre_syntax_message[]) Update -i description.
6931
6932         * lexer.c: (preprocess_line) When getl_interactive is 2 (i.e.,
6933         when -i is given on the command line) don't treat unindented lines
6934         as starting a new command.
6935
6936 Tue Jan  5 12:30:10 1999  Ben Pfaff  <blp@gnu.org>
6937
6938         In conjunction with egcs 1.1.1, Checker emits some bogus warnings,
6939         mostly caused by local initialized aggregates.  After egcs is
6940         fixed upstream these can be removed, but for now they're not a big
6941         deal.
6942         
6943         * ascii.c: (ascii_postopen_driver) Checker chokes on local
6944         initialized arrays.  Avoid this.
6945
6946         * sfm-write.c: (sfm_write_dictionary) Don't use a local
6947         initialized struct.
6948
6949 Tue Jan  5 12:07:24 1999  Ben Pfaff  <blp@gnu.org>
6950
6951         egcs 1.1.1 has some new warnings relative to gcc 2.8.1, which the
6952         following changes avoid.  Currently I compile sources with egcs
6953         1.1.1 and gcc 2.7.2.3 before sending them out.
6954
6955         * apply-dict.c: (apply_dict) Use new avl_traverser_init() macro.
6956         
6957         * ascii.c: (option_tab[]) Initialize all struct members.
6958
6959         * avl.h: (avl_traverser_init) New macro.
6960         
6961         * command.c: (DEFCMD, UNIMPL macros, cmd_table[]) Initialize all
6962         struct members.
6963
6964         * crosstabs.q: (enum_var_values) Use new hsh_iterator_init()
6965         macro.
6966
6967         * hash.c: Comment fix.
6968
6969         * hash.h: (hsh_iterator_init) New macro.
6970
6971         * html.c: (option_tab[]) Initialize all struct members.
6972
6973         * pfm-write.c: (write_value_labels) Use new avl_traverser_init()
6974         macro.
6975
6976         * postscript.c: (option_tab[]) Initialize all struct members.
6977         (output_encodings, preclose, dump_lines) Use new
6978         hsh_iterator_init() macro.
6979
6980         * sfm-write.c: (write_value_labels) Use new avl_traverser_init()
6981         macro.
6982
6983         * sysfile-info.c: (describe_variable) Use new avl_traverser_init()
6984         macro.
6985
6986 Thu Nov 19 12:32:45 1998  Ben Pfaff  <blp@gnu.org>
6987
6988         * data-in.c: Examined each of the parsing functions to make sure
6989         that they wouldn't dump core if they were passed a string of the
6990         wrong length, since now the DATA LIST FREE/LIST routines don't
6991         check for field width before passing it to the data parser.
6992         (parse_RBHEX, parse_AHEX) Reject odd length input.
6993         (parse_string_as_format) Reject input that's too short or too
6994         long.
6995
6996         * data-list.c: Before, the DATA LIST FREE/LIST routines would pad
6997         a field to its entire declared output width then pass it to the
6998         data-in parsing routines.  This contradicted the documented
6999         behavior.  This is fixed in these changes.  Thanks to Mark H. Wood
7000         <mwood@IUPUI.Edu>.  In addition, this fixes a few more details of
7001         free-format parsing that differed from SPSS.
7002         (cut_field) Commas and spaces are treated identically.  Returns
7003         the proper column instead of a fixed 1 value.
7004         (parse_field) Removed.
7005         (read_from_data_list_free, read_from_data_list_list) Call
7006         parse_string_as_format directly instead of parse_field.
7007
7008         * heap.c: (heap_delete) Stylistic fixes.
7009
7010 Sun Aug  9 11:12:13 1998  Ben Pfaff  <blp@gnu.org>
7011
7012         * loop.c: (loop_2_trns_proc) Formatting fix.
7013
7014         * sel-if.c: (cmd_filter) Set FILTER_before_TEMPORARY.
7015
7016         * var.h: (glob var FILTER_before_TEMPORARY) New global var.
7017
7018         * vfm.c: (macro FILTERED) New.
7019         (static var filter_var) New.
7020         (process_active_file_write_case) Use FILTERED.
7021         (setup_filter) Set filter_var.
7022         (close_active_file) Delete the filter if not
7023         FILTER_before_TEMPORARY.
7024         (procedure_write_case) Use FILTERED.
7025
7026 Sat Aug  8 00:20:14 1998  Ben Pfaff  <blp@gnu.org>
7027
7028         * crosstabs.q: Changed /PIVOT={ON,OFF} to /FORMAT={PIVOT,NOPIVOT}.
7029
7030         * data-in.c: (parse_day_count) Message fix.
7031         (parse_month) Style fix.
7032
7033         * data-list.c: (struct data_list_pgm) New member eof.
7034         (cmd_data_list) Init eof to 0.
7035         (do_reading) Implement the /END subcommand and read-past-eof
7036         checking.
7037
7038         * do-if.c: Include stdio.h when debugging.
7039         (cmd_else_if) Make sure the command is .-terminated.
7040
7041         * glob.c: (init_glob) Capitalize the command prompt.
7042
7043         * inpt-pgm.c: (end_case_trns_proc) Debugging message.
7044         (end_file_trns_proc) Debugging message.
7045
7046         * loop.c: (internal_cmd_loop) Make it work when there's no loop
7047         index!
7048         (loop_2_trns_proc) Enable MXLOOPS (why was this disabled?)
7049
7050         * main.c: (dump_token) Make kwtab[] const.
7051
7052         * set.q: Spelling, comment fixes.
7053
7054         * sysfile-info.c: (cmd_display) DISPLAY VECTORS not DISPLAY
7055         VECTOR.
7056
7057         * vars-prs.c: (fill_all_vars) Style fix.
7058
7059         * vfm.c: (index_to_varname) Return const.
7060
7061 Tue Aug  4 23:49:23 1998  Ben Pfaff  <blp@gnu.org>
7062
7063         * Changes in many source files for partial -ansi -pedantic and
7064         no-debugging compliance: Remove trailing common in enum
7065         declarations; add `unused' attributes; insert some appropriate
7066         casts.
7067
7068         * cmdline.c: (parse_command_line) Add new --testing-mode flag.
7069
7070         * command.c: (shell) Make static.
7071         (run_command) Make static.
7072
7073         * data-list.c: (dump_fixed_table) Remove use of local_strdup().
7074
7075         * dfm.c: (cmd_begin_data) I18n fix.
7076
7077         * error.c: (verbose_msg) Define if __STRICT_ANSI__.
7078
7079         * error.h: (macro verbose_msg) Define if __STRICT_ANSI__.
7080
7081         * expr-opt.c: (evaluate_tree) Don't initialize local arrays if
7082         __STRICT_ANSI__.
7083
7084         * file-handle.q: Don't prepend the source file directory name to
7085         the data file name.  (Ongoing issue.)
7086         (prepend_current_directory) Comment out.
7087         (internal_cmd_file_handle) Don't call prepend_current_directory().
7088         (fh_get_handle_by_filename) Ditto.
7089
7090         * filename.c: Append zero byte to readlink() return value.
7091
7092         * getline.c: (getl_read_line) I18n fix.
7093
7094         * lexer.h: Don't use gcc features if __STRICT_ANSI__.
7095
7096         * misc.h: Don't use gcc features if __STRICT_ANSI__.
7097
7098         * pfm-write.c: (bufwrite) Don't try to increment a void * pointer
7099         directly.
7100
7101         * postscript.c: (output_encodings) Don't use local_strdup().
7102         (postopen) Ditto.
7103
7104         * print.c: Don't use gcc features if __STRICT_ANSI__.
7105
7106         * q2c.c: (dump_vars) Don't put a , at the end of the last enum.
7107
7108         * recode.c: (parse_src_spec) Fully brace nested if's.
7109
7110         * set.q: (global var set_testing_mode) New var.
7111
7112 Wed Jul 29 22:01:44 1998  Ben Pfaff  <blp@gnu.org>
7113
7114         * ascii.c: Add some more `unused' attributes that only come into
7115         play when NDEBUG is defined.
7116         (ascii_close_page) Set s_len when reallocating s.
7117         
7118         * crosstabs.q: (delete_missing) New function.
7119         (output_pivot_table) Call delete_missing() if /MISSING=REPORT.
7120         (make_summary_table) Create summary table reallocable.
7121
7122         * postscript.c: Add more `unused' attributes as above.
7123
7124         * tab.c: (tab_create) [GLOBAL_DEBUGGING] Set reallocable member.
7125         (tab_realloc) [GLOBAL_DEBUGGING] Assert that table is reallocable.
7126          
7127         * tab.h: (struct tab_table) [GLOBAL_DEBUGGING] New `reallocable'
7128         member.
7129
7130         * var.h: (macro force_dup_variable) [!GLOBAL_DEBUGGING] Remove
7131         gratuitous space between parameter definition.
7132
7133         * vars-atr.c: Changed some assert(0)'s to abort()'s to prevent
7134         complaints about running off the end of functions with NDEBUG
7135         enabled.
7136
7137 Sun Jul  5 00:17:25 1998  Ben Pfaff  <blp@gnu.org>
7138
7139         * Several source files: Removed some PORTME notes when reflection
7140         revealed that ANSI forbids that sort of breakage.  Also, added
7141         lots of `unused' qualifiers here and there.
7142
7143         * aggregate.c: (accumulate_aggregate_info) Remove local var
7144         weighting that turned out not to be used.
7145
7146         * avl.c: Update to version 1.1.0.  Add unused specifier.
7147         (avl_destroy) Initialize ab to 0.  Comment fixes.  Cast return
7148         value to void *.
7149         (avl_probe) Replace some instances of 1 with +1 where appropriate.
7150         (avl_find) Cast return value to void *.
7151         (avl_delete) q doesn't need to be initialized at the beginning of
7152         the function.  Replace some instances of 1 with +1.
7153         (force_avl_delete) Renamed avl_force_delete, all references changed.
7154         (compare_ints) `param' marked unused.
7155         (print_int) `param' marked unused.
7156         (recurse_tree) Replace some instances of 1 with +1.
7157
7158         * avl.h: Update to version 1.1.0.  Only declares avl function
7159         types if not already declared.
7160         (AVL_MAX_HEIGHT) Only define if not already defined.
7161         (struct avl_node) New unused member char pad[2].
7162         [GLOBAL_DEBUGGING] Change conditionalization to NDEBUG instead.
7163         (force_avl_insert) Renamed avl_force_insert.
7164         (force_avl_delete) Renamed avl_force_delete.
7165
7166         * crosstabs.q: (struct table_entry) Put `freq' into a union with
7167         new member `data'.
7168         (struct crosstab) Add new member `ofs'.
7169         (glob var int_tab) Removed.
7170         (custom_tables) In integer mode, assign v[i] properly through the
7171         indirect var_dict.
7172         (custom_variables) Now p.crs.max == max + 1.
7173         [DEBUGGING] (debug_print) p.crs.min and p.crs.max are now ints.
7174         (precalc) Implement integer mode.
7175         (calc_integer) Implement integer mode.
7176         (compare_table_entry) Remove unused local variable `comparing'.
7177         (make_summary_table) Implement integer mode.
7178         (macro ns_rows) Implemented as static variable now.
7179         (several variables) Made static, from global.
7180         (output_pivot_table) Use table_value_missing() for column heads.
7181         Remove several unused local variables.  Implement integer mode
7182         table summing.  Count up ns_rows.
7183         (crosstabs_dim) Make columns wider when /MISSING=REPORT requested.
7184         (find_pivot_extent) Moved into find_pivot_extent_general; now just
7185         calls that function or find_pivot_extent_integer.
7186         (find_pivot_extent_integer) New function.
7187         (enum_var_values) Implemented for integer mode.
7188         (table_value_missing) New function.
7189         (display_dimensions) Call table_value_missing() for heads.
7190         (float_M_suffix) New function.
7191         (display_crosstabulation) Call table_value_missing() for row
7192         heads.  Handle missing values in /MISSING=REPORT mode.
7193         (calc_fisher) Remove unused var N.
7194         (calc_r) Remove unused var fact.
7195
7196         * data-list.c: (dump_fixed_table) Fix table dimensioning.
7197         (read_one_set_of_repetitions) Remove unused vars var_spec, column.
7198
7199         * data-out.c: (insert_commas) Remove unused var cp.
7200         (convert_CCx) Remove unused vars save_set_decimal,
7201         save_set_grouping.
7202
7203         * descript.q: (dump_z_table) Fix table dimensioning.
7204         (pre_calc) Remove unused var j.
7205         (display) Remove unused vars title, s.  Fix table dimensioning.
7206
7207         * expr-evl.c: Comment fixes.
7208
7209         * frequencies.q: (full_dim) New function.
7210         (dump_full) Fix table dimensioning.
7211         (condensed_dim) New function.
7212         (dump_condensed) Fix table dimensioning.
7213
7214         * get.c: (cmd_match_files) Remove unused var n_val.  Remove unused
7215         label winnage.
7216
7217         * html.c: (html_close_drive) Remove unused var i.
7218         (postopen) Remove unused vars title, curfn_len, cp.
7219         (preclose) Remove unused vars this, x.
7220
7221         * lexer.c: Comment fixes.
7222
7223         * matrix-data.c: (cmd_matrix_data) Remove unused var index.
7224
7225         * means.q: (custom_tables) Remove unused var m_dim.
7226
7227         * mis-val.c: Format fix.
7228
7229         * modify-vars.c: (cmd_modify_vars) Remove unused var new_dict.
7230
7231         * output.c: (outp_get_paper_size) Remove unused var cp.
7232
7233         * pfm-read.c: (read_float) Remove unused var save, unused label
7234         underflow.
7235         (read_variables) Remove unused vars cp, j.
7236         (read_value_label) Remove unused var j.
7237
7238         * pfm-write.c: (bufwrite) Remove unused var i.
7239
7240         * postscript.c: (ps_postopen_drive) Remove unused vars dev_info,
7241         fn.
7242         (output_encodings) Remove unused vars char_cp, n_output.
7243         (read_ps_encodings) Remove unused var ep.
7244         (postopen) Remove unused var title.
7245         (preclose) Remove unused var fp.
7246         (ps_open_page) Remove unused vars true, false, orientation,
7247         mirror_horz, mirror_vert, width, length.
7248         (ps_text_metrics) Remove unused var x.
7249
7250         * q2c.c: (find_symbol) Remove unused var y.
7251         (parse_setting) Remove unused parameter sbc, all references
7252         changed.
7253         (dump_parser) Remove unused var cp.
7254         (dump_free) Remove unused var i.
7255
7256         * set.q: (static vars args, n) Removed.
7257         (internal_cmd_gset) Removed.
7258
7259         * sfm-read.c: (sfm_read_dictionary) Removed unused var i.
7260         (read_machine_flt64_info) Removed unused var file_endian.
7261         (read_documents) Removed unused var i.
7262         (read_compressed_data) Removed unused parameter dict, all
7263         references changed.
7264
7265         * sfm-write.c: (bufwrite) Removed unused var i.
7266         (sfm_write_case) Removed unused var i.
7267
7268         * sort.c: (merge_once) Remove unused var t.
7269         (write_separate) #if 0 out as dead code.
7270
7271         * split-file.c: (cmd_split_file) Remove unused var i.
7272
7273         * sysfile-info.c: (sysfile_info_dim) New function.
7274         (cmd_sysfile_info) Fix table dimensioning.
7275         (variables_dim) New function.
7276         (display_variables) Fix table dimensioning.
7277         (describe_variable) Remove unused var prev_r.
7278
7279         * t-test.q: (z_postcalc) Removed.
7280         (pairs_calc) Remove unused var bad_weight.
7281         (postcalc) Remove unused vars dfn, dfd.
7282
7283         * tab.c: (tab_create) Set t->dim to NULL.
7284         (tab_dim) Make sure t->dim is NULL first.
7285         (tab_natural_width) Remove parameter `clamp'.
7286         (tab_value) Remove duplicate assertion for table.
7287         (tab_raw) New function.
7288         (nowrap_dim) New function.
7289         (wrap_dim) New function.
7290         (tab_output_text) Fix table dimensioning.
7291
7292         * tab.h: (tab_raw) New macro.
7293
7294         * val-labs.c: (get_label) Remove unused var type.
7295         (copy_value_labels) Remove unused var trav.
7296
7297         * var.h: (struct crosstab_proc) Completely changed.
7298
7299         * vars-prs.c: (parse_dict_variable) Remove unused var v.
7300
7301         * vfm.c: (open_active_file) Remove unused vars i, lp.
7302
7303         * weight.c: (weight_trns_proc) #if 0 out as dead code.
7304         
7305 Tue Jun  2 23:37:21 1998  Ben Pfaff  <blp@gnu.org>
7306
7307         * Makefile.am: Add apply-dict.c, flip.c.
7308
7309         * apply-dict.c: New file.
7310         
7311         * command.c: (struct command) Make cmd[] larger for CLEAR
7312         TRANSFORMATIONS command name.
7313         (parse_cmd) Make sure we're in a valid state before using it as an
7314         index.  Discard variables and reset state on invalid transitions.
7315         (cmd_clear_transformations) New function.
7316
7317         * command.def: Add APPLY DICTIONARY, CLEAR TRANSFORMATIONS, FLIP.
7318         Add unimplemented PRESERVE, RESTORE.
7319
7320         * file-handle.h: Include stddef.h.
7321
7322         * flip.c: New file.
7323         
7324         * pfm-read.c: (parse_value) Pad value label values with spaces,
7325         not nulls.
7326
7327         * sfm-read.c: (struct sfm_fhuser_ext) Add reference count.
7328         (sfm_close) Decrement reference count, make sure it's zero.
7329         (sfm_maybe_close) New function.
7330         (sfm_read_dictionary) Handle reference counts.
7331
7332         * vars-atr.c: (clear_default_dict) New function.
7333         (discard_variables) Use clear_default_dict().
7334
7335 Sun May 31 00:58:05 1998  Ben Pfaff  <blp@gnu.org>
7336
7337         * Makefile.am: Add pfm-write.c.
7338         (LDADD) Add the libgmp2 libraries.
7339
7340         * command.def: Define EXPORT.
7341
7342         * get.c: (cmd_export) New function.
7343         (export_write_case_func) New function.
7344
7345         * pfm-read.c: (static spss2ascii[]) Make it const.
7346
7347         * pfm-write.c: New file.
7348
7349         * sfm-write.c: Formatting, comment fixes.
7350
7351         * var.h: Comment fix.
7352
7353 Fri May 29 21:44:12 1998  Ben Pfaff  <blp@gnu.org>
7354
7355         * Makefile.am: Add pfm.h, pfm-read.c.
7356
7357         * command.def: IMPORT is now implemented.
7358
7359         * format.c: (glob var translate_fmt[]) New var.
7360
7361         * get.c: (enum GTSV_NONE) Renamed GTSV_OPT_NONE.
7362         (cmd_import) New function.
7363         (import_source_read) New function.
7364         (glob var import_source) New var.
7365
7366         * pfm-read.c: New file.
7367
7368         * pfm.h: New file.
7369         
7370         * sfm-read.c: (parse_format_spec) Local variable translate_fmt[]
7371         moved in format.c.
7372         (dump_dictionary) Disabled printing a couple of items.
7373
7374 Mon May 25 12:42:37 1998  Ben Pfaff  <blp@gnu.org>
7375
7376         * crosstabs.q: (postcalc) Call make_summary_table().
7377         (make_summary_table) New function.
7378         (insert_summary) New function.
7379         (display_dimensions) Remove some unnecessary arguments, all
7380         references changed.
7381         (output_pivot_table) Fix lots of problems with the risk table
7382         setup.
7383         (submit) Don't display an empty table.
7384         (display_risk) Fix order of arguments to calc_risk().
7385
7386         * glob.c: Always include assert.h and stdlib.h.
7387
7388         * output.h: (enum OUTP_T_JUST_FULL) Removed, all references
7389         removed.
7390
7391         * tab.c: (tab_create) Cosmetic changes.
7392
7393         * tab.h: (enum TAB_JUSTIFY) Removed, all references removed.
7394
7395 Sun May 24 22:39:23 1998  Ben Pfaff  <blp@gnu.org>
7396
7397         * tab.def: Removed.
7398
7399         * crosstabs.q: (output_pivot_table) Headers drawing and submission
7400         code simplified, moved into new function submit().
7401         (submit) New function.
7402         (crosstabs_dim) New function.
7403         (display_directional) Substitute variable names for %s where
7404         appropriate.
7405         (somers_d_v[], somers_d_ase[], somers_d_t[]) New static vars.
7406         (calc_symmetric) Initialize parameters only if non-NULL.
7407         Calculate Somers' d.
7408         (calc_directional) Calculate Somers' d (or copy it, really).
7409         Calculate eta.
7410
7411         * output.c: (outp_string_width) New function.
7412
7413         * postscript.c: (postopen) Calculate font widths based on the
7414         width of the zero '0' character, not the width of the space
7415         character.  Set paper-width and paper-length based on points, not
7416         device units.
7417         (ps_open_page) Fix page setup string for landscape mode.
7418
7419         * som.h: (struct som_dimension) Removed.
7420         (struct som_table_class) height, width members take int * not
7421         som_dimesion * now.
7422
7423         * tab.c: Many functions now have added parameter validation.
7424         (tab_height, tab_width) These functions were removed and merged
7425         into a single function tab_resize(), and all references changed.
7426         (tab_dim) Rewritten since the interface changed; reduced from
7427         hundreds of lines to two.  All callers were changed.  Currently
7428         most of them just use tab_natural_dimensions as their callback and
7429         await detailed translation of functionality.
7430         (tab_natural_width) New function.
7431         (tab_natural_height) New function.
7432         (tab_natural_dimensions) New function.  This is a callback
7433         function, not something that you'd want to call directly.
7434         (tab_nat_dim) Removed.
7435         (tabi_table) Allocates t->w and t->h.
7436         (tabi_driver) Inlined sum_columns()'s functionality.  Calls the
7437         dimensions callback.
7438         (evaluate_dimensions) Removed.
7439         (sum_columns) Removed.
7440
7441         * tab.h: (enum TAL_1THIN) Removed.
7442         (enum series t_*) Removed.
7443         (struct tab_table) Members trh, trv changed to unsigned char *
7444         from int *.  Member dim changed to a function pointer from a
7445         unsigned char *.  Member max_stack_height removed.  New members
7446         hr_tot, vr_tot.
7447         (macros tab_l, tab_r, tab_t, tab_b) New.
7448
7449 Sat May 23 23:22:13 1998  Ben Pfaff  <blp@gnu.org>
7450
7451         * ascii.c: (delineate) Assign last_space_nchars before skipping
7452         spaces, to fix right justification.
7453
7454         * crosstabs.q: (static vars risk, direct) New vars.
7455         (static var pearson_r) Removed.
7456         (glob var chisq_fisher) Made static.
7457         (static vars row_tot[], col_tot[]) Don't include grand total
7458         anymore.
7459         (static var grand_total) Renamed W, all references changed.
7460         (output_pivot_table) Only make `table' if num_cells != 0.  Make
7461         risk and directional tables.  Deal with grand total no longer part
7462         of col_tot[].  Free rows and cols after we're done with them.
7463         (display_risk) New function.
7464         (display_directional) New function.
7465         (clac_r) Rewritten so that it stores all its results into its
7466         arguments, so it can be used for Spearman's correlation too.
7467         (calc_symmetric) Added a t[] argument, all references changed.
7468         Calculates ASEs for tau-b, tau-c, gamma.  Calculates Spearman's r,
7469         Pearson's r, Cohen's kappa.
7470         (calc_risk) New function.
7471         (calc_directional) New function.
7472
7473         * som.c: (som_submit) Improved debugging code.
7474
7475         * stats.c: (hypercube) New function.
7476         (cube) New function.
7477         (sqr) New function.
7478         (normal_sig) Went back to old implementation, which actually
7479         worked.
7480
7481         * stats.h: (macros square, cube, hypercube) Removed.  The
7482         equivalent functions in stats.c are inlined here; all references
7483         to square changed to sqr.
7484
7485 Fri May 22 00:03:41 1998  Ben Pfaff  <blp@gnu.org>
7486
7487         * crosstabs.q: (N_SYMMETRIC) New define.
7488         (postcalc) Disable debug printing.
7489         (static vars chisq_fisher, pearson_r) New.
7490         (output_pivot_table) Add support for symmetric measures.  Add
7491         chi-square output of exact sigs.
7492         (display_chisq) Rewritten.
7493         (display_symmetric) New function.
7494         (gamma_int) New function.
7495         (Pr) New function.
7496         (swap) New function.
7497         (calc_fisher) New function.
7498         (calc_chisq) Check boundary conditions better. Calculate Yates,
7499         Fisher, Mantel-Haenszel tests.
7500         (calc_r) New function.
7501         (calc_symmetric) New function.
7502
7503         * stats.c: (normal_sig) Rewritten with new algorithm.  Renamed
7504         from calc_normal.
7505         (chisq_sig) Better boundary conditions.  Renamed from
7506         calc_significance.
7507
7508         * tab.h: (struct tab_table) New member cf.
7509
7510         * tab.c: (tab_create) Set cf.
7511         (tab_width) New function.
7512         (tab_realloc) Handle cf.
7513         (tab_vline) Handle cf.
7514         (tab_hline) Handle cf.
7515         (tab_box) Handle cf.
7516         (tab_value) Handle cf.
7517         (tab_float) Handle cf.
7518         (tab_text) Handle cf.
7519         (tab_joint_text) Handle cf.
7520         (tab_offset) Handle cf.
7521         (tab_next_row) Handle cf.
7522         (evaluate_dimensions) Handle cf.
7523         (render_strip) Handle cf.
7524
7525 Wed May 20 00:03:59 1998  Ben Pfaff  <blp@gnu.org>
7526
7527         * crosstabs.q: (postcalc) New vars row_tot, col_tot, pass them to
7528         output_pivot_table().
7529         (output_pivot_table) Moved lots of local variables outside and
7530         made them static.  Add beginnings of chi-square statistic
7531         support.  Now column and row totals aren't in the main matrix.
7532         Always zero out any leftover rows & columns after we're done with
7533         the table entries.  Move all output stuff into
7534         display_dimensions(), display_crosstabs(), display_chisq().
7535         (display_dimensions) New function.
7536         (display_crosstabulation) New function.
7537         (display_chisq) New function.
7538         (calc_chisq) Implemented Pearson and likelihood-ratio chisquares.
7539
7540         * frequencies.q: (dump_full, dump_condensed) Remove tab_null()
7541         references, simplify logic.
7542
7543         * postscript.c: Remove scale, translate-x, translate-y,
7544         mirror-horz, mirror-vert, rotate-180 options.
7545         (struct ps_driver_ext) Remove scale, translate_x, translate_y.
7546         All references deleted.
7547         (macro YT) New macro.
7548         (array option_tab[]) Removed options.
7549         (ps_option) Removed options.
7550         (ps_open_page) Write page setup explicitly to output file, without
7551         using now-deleted BP function.
7552         (macro dump_line) Use YT().
7553         (macro dump_thick_line) Use YT().
7554         (draw_headers) Use YT().
7555         (switch_font) Reorder arguments to SF function.
7556         (write_text) Use YT().
7557
7558         * sfm-read.c: (sfm_read_case) Don't attempt to read variables that
7559         have get.fv == -1.
7560
7561         * sysfile-info.c: (describe_variables) Don't use tab_nulls().
7562
7563         * tab.c: (tab_create) Initialize t->ct to zeros.  Remove
7564         null-debugging code.
7565         (tab_realloc) Remove null-debugging code.  Initialize new regions
7566         of t->ct to zeros.
7567         (tab_vline) Support offsets.
7568         (tab_hline) Support offsets.
7569         (tab_box) Support offsets.
7570         (tab_null) Removed.
7571         (tab_nulls) Removed.
7572         (tab_row) Removed.
7573         (tab_col) Removed.
7574         (evaluate_dimensions) Remove null-debugging code.  Understand
7575         TAB_EMPTY attribute.  Assert that text.s.s is always non-NULL if
7576         TAB_EMPTY not present.
7577
7578         * tab.h: New cell attribute TAB_EMPTY.
7579         (macros tab_nr, tab_nc, tab_row, tab_col) New.
7580
7581         * vars-atr.c: (init_variable) Set get.fv to -1 so that GET doesn't
7582         try to read them from system files.
7583
7584         * vfm.c: (dump_splits) Don't call tab_null().   
7585
7586 Sat May 16 19:36:55 1998  Ben Pfaff  <blp@gnu.org>
7587
7588         * crosstabs.q: (struct crosstab) Added `missing' member.
7589         (custom_tables) Init missing.
7590         (calc_general) Handle missing values.
7591         (calc_chisq) New function.
7592         (output_pivot_table) Start work on chi-square output.  Update for
7593         new tab offset support functions.  Shorten statistic names.
7594
7595         * Several files: add in more `const's to placate gcc's warnings.
7596
7597         * tab.h: (struct tab_table) Add col_ofs, row_ofs members.  Comment
7598         fixes.
7599
7600         * tab.c: (tab_height, tab_realloc, tab_vline, tab_hline, tab_box,
7601         tab_null, tab_nulls, tab_value, tab_float, tab_text,
7602         tab_joint_text) Add col_ofs and row_ofs support.
7603         (tab_offset) New function.
7604         (tab_next_row) New function.
7605         (tab_row) New function.
7606         (tab_col) New function.
7607         (tabi_table) Add col_ofs and row_ofs support.
7608
7609         * vars-atr.c: (is_system_missing) New function.
7610
7611 Tue May 12 16:14:30 1998  Ben Pfaff  <blp@gnu.org>
7612
7613         * crosstabs.q: Expanded subcommand names RESID --> RESIDUAL, etc.
7614         (static var no_cells) Removed.
7615         (static var num_cells) New.
7616         (static var expected) New.
7617         (static var cells[]) New.
7618         (internal_cmd_crosstabs) Deal with new variables.
7619         (postcalc) Removed most of the meat and put it in new function
7620         output_pivot_table().
7621         (output_pivot_table) Calculates and outputs an entire pivot table.
7622
7623         * postscript.c: (postopen) Fix problems with free()ing addresses
7624         not obtained from malloc().
7625
7626         * som.c: (som_submit) Add assertion.
7627
7628         * sysfile-info.c: (describe_variable) Use new tab_nulls()
7629         function.
7630
7631         * tab.c: (static var tab_names[]) New.
7632         (tab_realloc) -1 for nc or nr indicates no change.
7633         (tab_nulls) New function.
7634         (tab_dim) Use tab_names[].
7635         (tabi_cumulate) Don't include bottom or right headers.  Furrfu.
7636         (evaluate_dimensions) Don't terminate on uninited cells, just put
7637         an X in them and emit a notice.  Use tab_names[].
7638
7639         * tab.h: Move bits into tab.def.
7640
7641         * tab.def: New.  Don't try to declare tab_table_class because then
7642         som.h has to be included.       
7643         
7644 Thu May  7 22:55:04 1998  Ben Pfaff  <blp@gnu.org>
7645
7646         * command.def: New file, contains all the command definitions
7647         previously included bodily in command.c.
7648
7649         * format.def: New file, contains all of the format definitions
7650         previously split across format.h, format.c, and sfm-write.c.
7651
7652         * lexer.h: Renamed from tokens.h in order to match corresponding
7653         .c file name.
7654
7655         * lexerP.h: Moved some rarely used functions exported by lexer.c
7656         into here.
7657
7658         * Makefile.am: Commemorate renamed files.
7659         (EXTRA_DIST) Add command.def, format.def.
7660
7661         * command.c: [0] (walk_cmdtable_func) Removed.
7662
7663         * crosstabs.q: (postcalc) Made it work and print out matrices
7664         proving it.
7665         (enum_column_values) Renamed enum_var_values, generalized for any
7666         variable.
7667
7668         * format.h: (struct fmt_desc) New member `spss'.
7669
7670         * q2c.c: (main) Generated code includes lexer.h instead of
7671         tokens.h.
7672
7673         * sfm-write.c: (write_format_spec) Use new spss member of fmt_spec
7674         instead of an independent translation table.
7675
7676 Tue May  5 13:19:03 1998  Ben Pfaff  <blp@gnu.org>
7677
7678         * Lots of source files: Added const to declarations.
7679
7680         * aggregate.c: (parse_aggregate_function) Rename inner i to j.
7681         
7682         * arena.c: (arena_clear) Set prev pointer to null when done.
7683
7684         * ascii.c: (ascii_option) Rename index as indx.
7685
7686         * avl.c: This is now a separate library called libavl.
7687         (xmalloc) Make static.
7688         (avl_probe) Step A7 can use the cache instead of an explicit
7689         compare.
7690         (avl_delete) Don't maintain a q pointer because it's always
7691         available in the pointer stack.  Comment fix.
7692
7693         * avl.h: This is now a separate library called libavl.
7694
7695         * command.c: (cmd_table[]) Remove spurious trailing "".
7696
7697         * common.h: Only include random() fix if this system needs it.
7698
7699         * crosstabs.q: Include alloca headers.
7700         (n_sorted_tab) New global var.
7701         (postcalc) Mostly rewritten.
7702         (find_pivot_extent) Rewritten.
7703         (enum_column_values) Rewritten.
7704
7705         * data-out.c: (convert_F) Rename inner n as n_spaces.
7706
7707         * error.c: (dump_message) Don't have an outer var i.
7708
7709         * file-handle.q: (static var f) Removed.  All references removed.
7710         (internal_cmd_file_handle) Uses a local variable instead of f.
7711
7712         * get.c: (trim_dictionary) Change scope of i, i1, i2.
7713         (cmd_match_files) Don't strcpy tokstr into sbc (why was this ever
7714         done?)
7715
7716         * getline.h: Declare getl_history as extern.  Reported by
7717         palme@uni-wuppertal.de (Hubert Palme).
7718
7719         * postscript.c: (postopen) Some large mods for constness.
7720
7721         * recode.c: Remove spurious copyrights since PSPP is owned by FSF
7722         anyway.
7723
7724 Fri Apr 24 12:52:47 1998  Ben Pfaff  <blp@gnu.org>
7725
7726         * Makefile.am: Rename BUILT_SOURCES to q_sources, all references
7727         changed.  Add avl.c, avl.h to pspp_SOURCES.  Remove avllib from
7728         LDADD.
7729
7730         * avl.c, avl.h: New files.  These form a clean-room
7731         reimplementation of avllib.  Iterative algorithms are used in
7732         place of recursive ones, so there is no resemblance in the code.
7733
7734         * Lots of headers: Don't include other headers by default.
7735
7736         * Lots of source files: Explicitly include all needed headers.
7737
7738         * arena.c: (arena_clear) New function.
7739
7740         * crosstabs.q: (ROW_VAR, COL_VAR) New enums.
7741         (static var ar) Removed.
7742         (staitc vars ar_tc, ar_col) New.
7743         (cmd_crosstabs) Destroy the arenas.
7744         (internal_cmd_crosstabs) Create the arenas.
7745         (precalc) Don't need a free function for the hash.
7746         (calc_general) Make sure to zero out the trailer on the key data
7747         before inserting.
7748         (print_table_entries) Updated.
7749         (postcalc) Worked on actually implementing.
7750         (find_pivot_extent) New function.
7751         (compare_value) New function.
7752         (enum_column_values) New function.
7753
7754         * data-in.c: (parse_month) Make local array `static const'.
7755         
7756         * data-out.c: (convert_date) Make local array `static const'.
7757         (convert_WKDAY) Same.
7758         (convert_MONTH) Same.
7759
7760         * frequencies.q: (postprocess_freq_tab) avl_walk_inorder() has
7761         been renamed to avl_walk().
7762         
7763         * hash.c: Rewritten more efficiently.
7764
7765         * hash.h: Add attribute const to hsh_next_prime declaration.
7766
7767         * lexer.c: (id_match) Make arguments const.
7768
7769         * postscript.c: (ps_postopen_driver) Make default fonts the
7770         Helvetica family.
7771
7772         * q2c.c: (main) Generated code needs stdlib.h.
7773
7774         * sfm-write.c: (write_value_labels) An avl_traverser needs to be
7775         initialized to 0 now, not to NULL.  All other references to
7776         avl_traverser were updated in the same way.
7777
7778         * tokens.h: Macro version of id_match updated to use const
7779         properly.
7780
7781         * val-labs.c: (inc_ref_count) New function.
7782         (copy_value_labels) Simply through use of new avl_copy() function.
7783
7784 Wed Apr 15 13:01:58 1998  Ben Pfaff  <blp@gnu.org>
7785
7786         * crosstabs.q: Probably doesn't compile.  New PIVOT subcommand.
7787         (postcalc) Worked on this.
7788
7789         * postscript.c: (OPO_DOUBLE_LINE) New enum.
7790         (struct ps_driver_ext) New line_width_thick member.
7791         (ps_preopen_drive) Init line_width_thick.
7792         (option_tab[]) Add line-* options.
7793         (ps_option) Parse line-* options.
7794         (postopen) Add line_width_thick support.  Strip leading spaces on
7795         prologue output lines.
7796         (ps_open_page) Include line_width_thick in output.
7797         (macro dump_thick_line) New.
7798         (dump_fancy_line) Support thick lines as well as double lines.
7799
7800 Tue Apr 14 00:50:08 1998  Ben Pfaff  <blp@gnu.org>
7801
7802         * Makefile.am: Add crosstabs.c to BUILT_SOURCES.  Add crosstabs.q
7803         to pspp_SOURCES.  Add crosstabs.q to EXTRA_DIST.
7804
7805         * Many source files: Rename `options' to `pv_opts' as appropriate.
7806
7807         * command.c: (static var cmd_table[]) Add CROSSTABS command.
7808
7809         * common.c: (xcalloc) New function.
7810
7811         * crosstabs.q: New file.  Not finished yet, though.
7812                 
7813         * data-list.c: Comment fix.
7814
7815         * error.c: Remove some old Checker cruft.
7816
7817         * frequencies.q: (dump_full) Cumulate valid percent instead of
7818         regular percent.
7819
7820         * getline.c: Comment fix.
7821
7822         * hash.c: Comment fixes.
7823
7824         * hash.h: (struct hsh_table) Make hash functions return unsigned
7825         instead of int to avoid problems with taking the modulo of
7826         negative return values.  All references changed.
7827
7828         * misc.c: (intlog10) Make its table static const instead of auto.
7829
7830         * sfm-read.c: (read_header) Make `prefix' static const instead of
7831         auto.
7832
7833         * var.h: (union value) Add member `hash'.
7834         (struct variable) Rename prv_index as `foo'--all references
7835         changed.  Reorder.
7836         (typedef pv_opts) Removed.  All references changed.
7837
7838         * vars-prs.c: (parse_variables) Message fixes.
7839         
7840 Mon Mar  9 15:35:08 1998  Ben Pfaff  <blp@gnu.org>
7841
7842         * get.c: (cmd_match_files) Don't reverse the order of FILEs as
7843         they are being inserted.  Don't check for BY variables of
7844         different types.  Discard variables if the active file isn't
7845         included in the merge.
7846         (mtf_processing) Essentially rewritten.
7847         (mtf_merge_dictionary) Check for master/slave variables of
7848         different types/widths.
7849
7850         * vfm.c: (static var not_canceled) New var.
7851         (process_active_file) Don't call vfm_source->read() if
7852         there's no vfm-source.  Initialize not_canceled.
7853         (process_active_file_write_case) Honor and update not_canceled.
7854         (prepare_for_writing) Rollback changes from yesterday, they were
7855         wrong.
7856         (close_active_file) Don't destroy vfm_source unless it exists.
7857         
7858 Mon Mar  9 00:56:16 1998  Ben Pfaff  <blp@gnu.org>
7859
7860         * Lots of source files: Added { } around nested if/else constructs
7861         to avoid new gcc 2.8 warnings.
7862
7863         * data-in.c: (parse_Z) Declare `int' type explicitly.
7864         (convert_Z) Ditto.
7865
7866         * get.c: (struct mtf_file) Add prev, next_min, by, input members.
7867         (cmd_match_files) Initialize mtf_by_values.  Manage by, input,
7868         prev members.  Put TABLEs at the end of the chain and FILEs at the
7869         beginning.  Don't allow the active file in STATE_INIT.  Use proper
7870         `seen' value for the active file.  Fill out the by members and
7871         make sure they're of consistent type.  Do the actual merge
7872         operation.
7873         (mtf_processing_finish) New function.
7874         (var_type_description) New function.
7875         (mtf_free_file) New function.
7876         (mtf_free) Rewritten.
7877         (mtf_delete_file_in_place) New function.
7878         (mtf_read_nonactive_records) New function.
7879         (mtf_compare_BY_values) New function.
7880         (static var mtf_seq_no) New var.
7881         (mtf_processing) New function.
7882         (mtf_merge_dictionary) Assign nval members for the system file
7883         dictionary.  Assign fv values for its variables.  Point each slave
7884         variable to the corresponding master variable.
7885
7886         * hash.c: Include str.h.
7887
7888         * mis-val.c: (copy_missing_values) src arg is const.
7889
7890         * misc.c: (spacing) Make `max' var explicitly int.
7891
7892         * sfm-read.c: (dump_dictionary) Message reformatting.
7893         (sfm_read_case) Add assertion.
7894
7895         * sort.c: Esthetic fixes.
7896
7897         * var.h: (struct match_files_proc) New struct.
7898         (struct variable) Add private data match_files_proc.
7899
7900         * vars-atr.c: (delete_variable) Implement.  Add argument for the
7901         dictionary that owning the variable.
7902         (dup_variable) Add assertion.
7903
7904         * vfm.c: Comment fixes, hopefully the comments are correct now.
7905         (process_active_file) New function.
7906         (process_active_file_write_case) New function.
7907         (process_active_file_output_case) New function.
7908         (prepare_for_writing) Use temp_dict->nval for vfm_info, not
7909         default_dict.nval.
7910         (write_case) Renamed procedure_write_case().  Now write_case is a
7911         pointer to a function.  Style fixes.
7912         
7913 1998-03-05  Ben Pfaff  <blp@gnu.org>
7914
7915         * Makefile.am: (q2c) Link with libmisc.
7916         (version.c) Define default_config_path, include_path,
7917         groff_font_path.
7918
7919         * ascii.c: (ascii_postopen_driver) When the default newline string
7920         is requested, open file in text mode.  Suggested by
7921         palme@uni-wuppertal.de (Hubert Palme).
7922         (static vars line_buf, line_p) Change from char * to unsigned char
7923         *.
7924         (ascii_close_page) char * to unsigned char *.
7925
7926         * cmdline.c: (parse_command_line) Implement -r option by
7927         prepending ~/.pspp/rc to the list of files to process.
7928
7929         * command.c: (cmd_remark) Reset getl_prompt to the standard prompt
7930         before pulling in a final line.
7931         (null_func, null_int_func) Removed (dead code).
7932
7933         * descript.q: (display) Calculate width of variable name column
7934         properly.  Calculate number of valid cases properly.  Reported by
7935         palme@uni-wuppertal.de (Hubert Palme).
7936
7937         * filename.c: (init_filename) Use default_config_path instead of
7938         now obsolete CONFIG_PATH.
7939
7940         * getline.c: (getl_initialize) Use include_path instead of now
7941         obsolete INCLUDE_PATH.
7942         (getl_add_file) New argument `where'.  All references changed.
7943
7944         * groff.c: (find_font_file) Use groff_font_path instead of now
7945         obsolete GROFF_FONT_PATH.
7946         
7947         * postscript.c: (find_ps_file) Use groff_font_path instead of now
7948         obsolete GROFF_FONT_PATH.  Copy through temporary variable to
7949         avoid problems with constness.
7950
7951         * str.h: (macro cs_streq) New macro.
7952
7953         * version.h: (glob var default_config_path, include_path,
7954         groff_font_path) New vars.
7955         
7956 1998-02-23  Ben Pfaff  <blp@gnu.org>
7957
7958         * Many source files: Change verbose_msg() priority levels and
7959         messages.
7960
7961         * aggregate.c: Include debug-print.h.
7962
7963         * cmdline.c: (parse_command_line) Add --safer/-s and --command/-c
7964         options.
7965         (static var pre_syntax_message) Document --safer/-s and
7966         --command/-c.
7967
7968         * command.c: (cmd_erase, cmd_host) Disable if set_safer is set.
7969
7970         * dfm.c: (open_inline_file) [__CHECKER__] Zero out ext->file,
7971         because it's not used but it's still copied.
7972         (open_file_r) Remove gratuitous debug message.
7973
7974         * filename.c: (safety_violation) New function.
7975         (open_file) Remove gratuitous debug messages.  Don't allow pipe
7976         files if set_safer is set.
7977
7978         * get.c: Turn off debugging.
7979
7980         * getline.c: (getl_add_virtual_file) New function.
7981         (getl_read_line) Add verbose_msg() call for opening new syntax
7982         file.
7983         (getl_perform_delayed_reset) Add a return value describing whether
7984         any action was taken.  Call reset_eof().
7985
7986         * getline.h: Comment fix.
7987
7988         * groff-font.c: (groff_read_font) Use `goto next_iteration' in
7989         place of incorrect `continue'.  Use strtok_r() instead of
7990         strtok().  Always check strtok_r() return value.
7991         (groff_read_DESC) Use strtok_r() instead of strtok().
7992
7993         * lexer.c: (reset_eof) New function.
7994
7995         * main.c: (parse) Get a token after performing a delayed reset
7996         action; allow empty syntax files.
7997
7998         * postscript.c: (output_encodings) Use strtok_r() instead of
7999         strtok().
8000
8001         * q2c.c: (dump_parser) Use strtok_r() instead of strtok().
8002
8003         * set.q: Comment fixes.
8004         (glob var set_safer) New var.
8005         (internal_cmd_set) Support SAFER.
8006
8007         * str.h: [!HAVE_STRTOK_R] Declare strtok_r() prototype.
8008
8009         * temporary.c: (free_dictionary) Set d->splits to NULL after
8010         freeing.
8011
8012         * vars-atr.c: (clear_variable) Decrement dict->n_splits if
8013         variable deleted, not if it *isn't* deleted.
8014
8015 1998-02-16  Ben Pfaff  <blp@gnu.org>
8016
8017         * command.c: (array cmd_table[]) Add MATCH FILES.
8018
8019         * common.c: Comment fixes.
8020
8021         * data-list.c, dfm.c, error.c, filename.c, list.q, matrix-data.c,
8022         modify-vars.c, postscript.c, sfm-read.c, sfm-write.c, tab.c:
8023         Include alloca.h.  Problem reported by palme@uni-wuppertal.de
8024         (Hubert Palme).
8025
8026         * expr-opt.c: Include str.h.  Problem reported by
8027         palme@uni-wuppertal.de (Hubert Palme).
8028
8029         * get.c: (cmd_get) [DEBUGGING] Update v->p.get to v->get.
8030         (static var mtf_by) Change from char ** to variable **.
8031         (static var mtf_master) New var.
8032         (mtf_merge_dictionary) New function.
8033         (cmd_match_files) Init mtf_master.  Parse mtf_by according to new
8034         var type.  Reorder tests properly.  Initialize file->dict.  Detect
8035         TABLE= without BY=.  Read file dictionaries and merge them.  Give
8036         subcommand name with IN, LAST, FIRST error messages.  Create IN,
8037         LAST, FIRST variables.  Comment fixes.
8038         (mtf_free) Don't free default_dict.  Free mtf_master.
8039
8040         * getline.c: Define getl_mode.  Change getl_buf_size to size_t
8041         from int.
8042         (handle_line_buffer) Cast int to size_t in comparison to avoid
8043         warning.
8044
8045         * getline.h: Declare getl_mode extern.
8046
8047         * groff-font.c: (groff_read_font) Type-fix calls to getline.
8048         (groff_read_DESC) Make line_size a size_t.
8049         (match_tok) Parenthesize name to avoid macro expansion.
8050
8051         * mis-val.c: (copy_missing_values) New function.
8052
8053         * postscript.c: (postopen) Make buf_size a size_t.
8054
8055         * sfm-read.c: (dump_dictionary) Make global from static.  Print
8056         variable info in parts for easier debugging with Checker.
8057
8058         * temporary.c: (copy_variable) Use copy_value_labels().
8059         (new_dictionary) New arg: whether to copy file label, documents.
8060
8061         * val-labs.c: (copy_value_labels) New function.
8062
8063         * var.h: (enums MISSING_*) Add MISSING_COUNT.
8064
8065         * vars-atr.c: [GLOBAL_DEBUGGING] (force_dup_variable) New
8066         function.
8067         (dup_variable) Set prv_index, get.fv, get.nv.
8068
8069 Fri Feb 13 15:38:36 1998  Ben Pfaff  <blp@gnu.org>
8070
8071         * Makefile.am: (pspp_SOURCE) Add htmlP.h.
8072
8073         * Many source files: For ANSI-compliance, add empty statement
8074         after label.  Reported by palme@uni-wuppertal.de (Hubert Palme)
8075         and Micah Altman <maltman@www-vdc.fas.harvard.edu>.
8076
8077         * data-in.c: (parse_numeric) Some header files break on
8078         -DBL_MIN_10_EXP because they get a --; add () for safety.
8079         Reported by palme@uni-wuppertal.de (Hubert Palme).
8080
8081         * dfm.c: Idea by Dr Eberhard W Lisse <el@linux.lisse.na>.
8082         (struct dfm_fhuser_ext) Change `file' from FILE * to file_ext.
8083         (dfm_close) Use close_file_ext.
8084         (open_inline_file) Set file.file to NULL, not file.
8085         (open_file_r, open_file_w) Initialize file.file; fill in file_ext
8086         struct and use open_file_ext().
8087         (read_record) Use file.file.
8088
8089         * file-handle.q: (prepend_current_directory) Pass through special
8090         filenames.
8091
8092         * filename.c: Only include unistd.h if HAVE_UNISTD_H.
8093         (normalize_filename) Pass through special filenames.
8094         (open_file, close_file) Accept pipe| and |pipe syntaxes as
8095         equivalent.
8096         (dirname) Rename blp_dirname() because of name conflict on some
8097         OS.  All references changed.  Reported by palme@uni-wuppertal.de
8098         (Hubert Palme).
8099         (is_special_filename) New function.
8100
8101         * get.c: (GTSV_OPT*) Add GTSV_OPT_MATCH_FILES.
8102         (trim_dictionary) Conditionalize some of the options on whether
8103         GTSV_OPT_MATCH_FILES is in *options.
8104         (rename_variables) Don't allow variables to be renamed as scratch
8105         variables.
8106         (MTF_*) New enum series.
8107         (struct mtf_file) New struct.
8108         (static vars mtf_head, mtf_tail, mtf_by, mtf_n_by, mtf_free) New
8109         vars.
8110         (cmd_match_files, mtf_free) New functions.
8111
8112         * lexer.c: (match_int) Needed parentheses around name to escape
8113         macro expansion.  Reported by Micah Altman
8114         <maltman@www-vdc.fas.harvard.edu>.
8115
8116         * print.c: Needed to include alloca.h.  Reported by Micah Altman
8117         <maltman@www-vdc.fas.harvard.edu>.
8118
8119         * recode.c: (convert_to_double) Parenthesize -DBL_MIN_10_EXP to
8120         -(DBL_MIN_10_EXP).  Reported by palme@uni-wuppertal.de (Hubert
8121         Palme).
8122         
8123         * str.h: Include stdarg.h.  Reported by palme@uni-wuppertal.de
8124         (Hubert Palme) and Micah Altman <maltman@www-vdc.fas.harvard.edu>.
8125
8126 Thu Feb  5 00:18:21 1998  Ben Pfaff  <blp@gnu.org>
8127
8128         * html.c: (struct html_driver_ext) Move into htmlP.h.
8129         (html_preopen_driver) Initialize cp_x, cp_y.
8130         (html_submit) Implement as call to output_tab_table().
8131         (change_attributes) New function.
8132         (escape_string) New function.
8133         (output_tab_table) New function.
8134
8135         * list.q: (write_all_headers) Add code for writing headers for the
8136         html driver.
8137         (clean_up) Write out the html close-table tag.
8138         (determine_layout) Ignore html driver.
8139         (list_cases) Write html data.
8140
8141         * som.c: (som_submit) Move more of the code into output_table().
8142
8143         * tab.c: (static var hit) Make a global var and rename tab_hit.
8144         (static var tab_table_class) Make a global var.
8145
8146         * htmlP.h: New file.
8147
8148 Tue Feb  3 16:12:18 1998  Ben Pfaff  <blp@gnu.org>
8149
8150         * dump-sysfile.c: Removed.
8151
8152         * html.c: (preclose) Change comment in emitted code.
8153
8154         * matrix-data.c: Debugging off by default.  Comment fixes.
8155         (static var container) New var.
8156         (cmd_matrix_data) Create and destroy container.  Initialize
8157         is_per_factor[] to 0s.  Move code into new function
8158         string_to_content_type().  Require split values to be present in
8159         the data when ROWTYPE_ is explicit.  Call specific function, not
8160         general read_matrices().
8161         (string_to_content_type) New function.
8162         (context) Exclude all whitespace, not just spaces.
8163         (mget_token) A dot is a number.  Add assertion.
8164         (static var data) Renamed nr_data.
8165         (static var factor_values) Renamed nr_factor_values.
8166         (read_matrices) Renamed read_matrices_without_rowtype().  Handle
8167         only specific case.  Close data_file before exit.
8168         (fill_matrix) New function.
8169         (read_data_lines) Renamed nr_read_data_lines().  Remove debug
8170         printing.  Style fixes.  Message fixes.  Move code into
8171         fill_matrix().
8172         (read_matrices_without_rowtype) Rename
8173         matrix_data_read_without_rowtype().  Fix off-by-one error on
8174         loops.  Allocate nr_data[] memory from arena.
8175         (read_matrices_with_rowtype) Removed.
8176         (read_splits) Renamed nr_read_splits().  Style fixes.
8177         (read_factors) Renamed nr_read_factors().
8178         (dump_cell_content) Comment fixes.  Arguments changed.  Change
8179         debug printing.  All references changed.
8180         (output_data) Renamed nr_output_data().
8181         (static var wr_content) New var.
8182         (struct factor_data) New struct.
8183         (static var wr_data) New var.
8184         (static var wr_current) New var.
8185         (matrix_data_source_destroy_source) Removed.
8186         (read_matrices_with_rowtype) New function.
8187         (matrix_data_read_with_rowtype) New function.
8188         (wr_read_splits) New function.
8189         (compare_factors) New function.
8190         (wr_output_data) New function.
8191         (wr_read_rowtype) New function.
8192         (wr_read_factors) New function.
8193         (wr_read_indeps) New function.
8194         (glob var matrix_data_source) Make destroy_source member NULL as
8195         well.
8196
8197 Fri Jan 23 00:09:08 1998  Ben Pfaff  <blp@gnu.org>
8198
8199         * lexer.c: (syntax_error) Give better error message when at end of
8200         file.
8201
8202         * matrix-data.c: (var content_names[]) Fix PROX spelling.  Change
8203         N_SCALAR to output as plain N.
8204         (mdump_token) Change output format.
8205         (context) Fix message output interaction with spaces in input.
8206         (another_token) New function.
8207         (force_eol) Improved error message.
8208         (static var max_cell_index) New var.
8209         (read_matrices) Init `cells'.  factor_values is now per-cell.
8210         Init max_cell_index.
8211         (read_data_lines) Replace `compare' local with new `compare' arg.
8212         Debugging messages changed.  Only read factors if per_factor.
8213         Propagate error return from read_factors(), force_eol().
8214         Copy N_SCALAR values across the N vector.
8215         (read_matrices_without_rowtype) Don't init `cells'.  Don't need to
8216         check parentheses manually since we now have is_per_factor[].
8217         Call read_data_lines() with new args.  Check for end of data after
8218         looping, using another_token().
8219         (read_factors) Arguments changed.  Use max_cell_index to determine
8220         whether to read or compare factors.  Message fixes.
8221         (dump_cell_content) New function.
8222         (output_data) Completely rewritten because content types were
8223         supported to be nested inside factor values, not vice versa.
8224         
8225 Thu Jan 22 00:26:38 1998  Ben Pfaff  <blp@gnu.org>
8226
8227         * lexer.c: (syntax_error) Support formatted varargs messages.
8228
8229         * matrix-data.c: Turn debugging on by default.
8230         (static content_type[]) New array.
8231         (static content_names[]) New array.
8232         (static rowtype_, varname_) New vars.
8233         (static is_per_factor[]) New array.
8234         (static split_values) Moved declaration.
8235         (static n_continuous, first_continuous) New var.
8236         (cmd_matrix_data) Don't init split_values.  Assign ROWTYPE_ to
8237         rowtype_.  Simplify SPLIT code.  Init is_per_factor[].  Assign
8238         VARNAME_ to varname_.  Initialize first_continuous, n_continuous.
8239         Check for continuous variables.
8240         [DEBUGGING] (debug_print) Remove content_names[].
8241         (mdump_token) New macro.
8242         (mget_token_dump) New function.
8243         (mdump_token) New function.
8244         (context) New function.
8245         (mget_token) Fix messages.
8246         (static var data, split_values, factor_values) New vars.
8247         (read_matrices) Manage split_values, factor_values.
8248         (read_data_lines) New function.
8249         (read_matrices_without_rowtype) Implemented.
8250         (read_splits) Message fixes.  Uses `just_read'.
8251         (read_factors) New function.
8252         (output_data) New function.
8253         (matrix_data_source_destroy_source) Close the file handle.
8254         (glob var matrix_source) Change name from "DATA LIST" to "MATRIX
8255         DATA".
8256
8257         * str.c: (strpadcmp) Removed.
8258
8259         * vfm.c: (dump_splits) Initialize i; fix test for end of splits.
8260
8261 Sun Jan 18 00:30:59 1998  Ben Pfaff  <blp@gnu.org>
8262
8263         * Lots of source files: Add cast to unsigned character to calls to
8264         tolower() and toupper().
8265
8266         * aggregate.c: Set default_dict.splits to NULL.
8267
8268         * command.c: (static variable tab[]) Add MATRIX DATA.
8269
8270         * data-in.c: Add debugging defines.  Formatting fixes.
8271
8272         * expr-opt.c: Formatting fixes.
8273
8274         * lexer.c: (syntax_error) Message fixes.
8275
8276         * matrix-data.c: New enum series.
8277         (static vars fmt, section, diag, explicit_rowtype, signle_split,
8278         split_values, n_factors, factors, cells, pop_n, contents,
8279         n_contents) New vars.
8280         (cmd_matrix_data) Finished implementation.
8281         (compare_variables_by_mxd_vartype) New function.
8282         [DEBUGGING] (debug_print) New function.
8283         (static vars mtoken, mtokstr, mtoklen, mtokval) New vars.
8284         (read_matrices) New function.
8285         (read_matrices_without_rowtype) New function.
8286         (read_matrices_with_rowtype) New function.
8287         (read_splits) New function.
8288         (mget_token) New function.
8289         (force_eol) New function.
8290         [0] (test_tokenizer) New function.
8291         (matrix_data_source_destroy_source) New function.
8292         (glob var matrix_data_source) New var.
8293
8294         * misc.h: Include ieeefp.h if present.
8295
8296         * split-file.h: (cmd_split_file) Changes corresponding to struct
8297         dictionary changes.
8298
8299         * str.h: Fix memmem prototype.
8300
8301         * temporary.c: (save_dictionary, restore_dictionary,
8302         free_dictionary) Changes corresponding to struct dictionary
8303         changes.
8304
8305         * var.h: (MXD_* enums) New enum series.
8306         (struct matrix_data_proc) New struct.
8307         (struct split) Removed.
8308         (struct dictionary) Changed `splits' member from `split *' to
8309         `variable **'.
8310         (macro force_create_variable) New macro.  Replaced lots of
8311         create_variable()/assert() calls with calls to this macro.
8312
8313         * vars-atr.c: (discard_variables) Changed assertion.
8314         [GLOBAL_DEBUGGING] (force_create_variable) New function
8315         called by the macro of the same name.
8316         (clear_variable) Changes to delete splits from the dictionary
8317         corresponding to struct dictionary changes.
8318
8319         * vars-prs.c: (parse_variables) [GLOBAL_DEBUGGING] Check for
8320         corrupted variable `index' values in the dictionary passed in
8321         every time this function is called.
8322
8323         * vfm.c: (dump_splits, SPLIT_FILE_procfunc) Changes corresponding
8324         to struct dictionary changes.
8325
8326 Tue Jan 13 23:45:02 1998  Ben Pfaff  <blp@gnu.org>
8327
8328         * Makefile.am: (pspp_SOURCES) Add matrix-data.c.
8329
8330         * command.c: New includes.
8331         (static array cmd_table[]) Add ERASE, HOST, NEW FILE.
8332         (cmd_erase) New function.
8333         [unix] (shell) New function.
8334         (run_command) New function.
8335         (cmd_host) New function.
8336         (cmd_new_file) New function.
8337
8338         * expr-prs.c: (parse_primary) Message fix.
8339
8340         * inpt-pgm.c: Formatting fix.
8341         (cmd_reread) Implement the FILE subcommand.
8342
8343         * matrix-data.c: New file.
8344
8345         * q2c.c: (dump_header) Change output commenting style.
8346
8347         * weight.c: Comment fix.
8348
8349 Tue Jan 13 00:53:39 1998  Ben Pfaff  <blp@gnu.org>
8350
8351         * aggregate.c: (buf64_10x) Renamed buf64_1xx, all references
8352         changed.
8353         (buf_10x) Renamed buf_1xx, all references changed.
8354         (cmd_aggregate) Implemented cases 010, 011, 110, and 111 (all
8355         cases now implemented).
8356         (create_sysfile) New function.
8357         (agr_11x_func) New function.
8358
8359         * data-in.c: (parse_numeric) Work properly if there's an
8360         explicitly coded decimal point in the data and decimal places are
8361         specified on DATA LIST.  Bug reported by Dr Eberhard W Lisse
8362         <el@linux.lisse.na>.
8363
8364         * get.c: (cmd_get, cmd_save_internal) Allow extraneous slash
8365         before file specification on GET, SAVE, XSAVE.  Bug reported by Dr
8366         Eberhard W Lisse <el@linux.lisse.na>.
8367
8368         * q2c.c: [!HAVE_STRERROR] Include misc/strerror.c, not
8369         strerror.c.  Bug reported by Alexandre Oliva
8370         <oliva@dcc.unicamp.br>.
8371
8372         * sort.c: Include sort.h.  Comment fixes.  A few esthetic fixes.
8373         (static var separate_case_tab) New var.
8374         (cmd_sort_cases) Cancel temporary transformations here.  Free
8375         v_sort before return.
8376         (sort_cases) Run an EXECUTE procedure if SEPARATE is nonzero and
8377         we're reading from a sort stream.  Don't cancel temporary
8378         transformations.  Offload internal sorting to do_internal_sort().
8379         (do_internal_sort) New function.  Handles internal sorting even
8380         when SEPARATE is nonzero.  Doesn't free v_sort.
8381         (do_external_sort) Take new arg SEPARATE.  Only destroy `x' if
8382         it's non-NULL.
8383         (write_initial_runs) Take new arg SEPARATE.  Only destroy the old
8384         sink if SEPARATE is zero.
8385         (read_output_cases) Renamed read_sort_output(), all references
8386         changed.  Now uses separate_case_tab when it exists.
8387         (write_separate) New function.
8388
8389         * vfm.c: (page_to_disk) Destroy memory_source_cases, not
8390         memory_sink_cases.  Don't redundantly call
8391         vfm_source->destroy_source().
8392         (memory_stream_mode) After switching over, set memory_sink_cases
8393         to NULL.
8394
8395 Sat Jan 10 23:35:51 1998  Ben Pfaff  <blp@gnu.org>
8396
8397         * aggregate.c: (struct agr_var) Expand dbl[] array from 2 to 3
8398         elements.
8399         (static var prev_case) New, moved out of aggregate_single_case()
8400         local scope.
8401         (static var buf64_10x, buf_10x) New.
8402         (cmd_aggregate) Initialize prev_case.  Comment fixes.  Implement
8403         the 000, 001, 100, and 101 cases.  Free prev_case.
8404         (parse_aggregate_functions) Disallow scratch variables.
8405         (free_aggregate_functions) Only free agr_dict if non-null.  Use
8406         iter->function to determine numeric/string type, not
8407         iter->src->type.
8408         (aggregate_single_case) Don't manage prev_case.  Initialize
8409         aggregate info after dumping it.
8410         (accumulate_aggregate_info) Fix sum, weighted sum, mean, weighted
8411         mean, stddev, weighted stddev definitions.
8412         (dump_aggregate_info) Implemented.
8413         (initialize_aggregate_info) Renamed from
8414         initialize_aggregate_functions().  Initializes dbl[2].
8415         (agr_00x_trns_proc, agr_00x_end_func, write_case_to_sfm,
8416         agr_10x_trns_proc, agr_10x_trns_free, agr_10x_end_func) New.
8417
8418         * cases.c: (alloc_val) Removed.
8419
8420         * get.c: (cmd_save_internal) Initialize new `dict' member.
8421
8422         * sfm-write.c: (sfm_write_dictionary, write_header,
8423         write_variable, write_value_labels, write_documents) Reorganize,
8424         simplify for new parameter structure.
8425         (write_variable) Only one variable * argument now.
8426
8427         * sfm.h: (struct sfm_write_info) Removed `pri', `sec', and
8428         replaced by new `dict' member.
8429
8430         * temporary.c: (new_dictionary) Initialize n_documents.
8431
8432         * vars-atr.c: (dup_variable) Allocate `value's from dict into
8433         v->fv manually.
8434         (init_variable, replace_variable) Eliminate usage of alloc_val().
8435
8436         * vars-prs.c: (parse_DATA_LIST_vars) Accept PV_NO_SCRATCH option.
8437
8438         * vfm.c: (arrange_compaction) Allow `temporary' value of 2 to
8439         signal that AGGREGATE is to be used for forming final cases.
8440         (close_active_file) Call end_func before stopping lagging.  Cancel
8441         temporary after finishing compaction.
8442         (write_case) Comment fixes.  Cleaned up.
8443         (compact_case) Let AGGREGATE handle compaction when `temporary' is
8444         2.
8445
8446 Sat Jan 10 02:10:47 1998  Ben Pfaff  <blp@gnu.org>
8447
8448         * Makefile.am: (BUILT_SOURCES) Add means.c.
8449         (pspp_SOURCES) Add means.c.
8450         (EXTRA_DIST) Add means.q.
8451
8452         * command.c: (array cmd_table[]) Add MEANS.
8453
8454         * common.h: Esthetic fixes.  Comment fixes.  Test for
8455         MAX_SHORT_STRING greater than 8.
8456         (macros LOWEST, HIGHEST) New.
8457
8458         * data-in.c, data-list.c, recode.c: Comment fixes.
8459
8460         * means.q: New file, base version.
8461
8462         * mis-val.c: (parse_num_or_range, parse_numeric) Replace -DBL_MAX
8463         with LOWEST, DBL_MAX with HIGHEST.
8464
8465         * q2c.c: (dump_vars) Add an enum to array types giving the number
8466         of values for the enum.
8467
8468         * sfm-read.c: (sfm_read_dictionary, read_machine_flt64_info)
8469         Replace second_lowest_value with second_lowest_flt64.
8470
8471         * sfm-write.c: (write_variable, write_rec_7_34) Replace
8472         second_lowest_value with second_lowest_flt64.
8473
8474         * t-test.q: Comment fix.
8475
8476         * temporary.c: (restore_dictionary) Esthetic fix.
8477
8478         * tokens.h: (force_match_id, force_match, force_string, force_int,
8479         force_num, force_id) Replace msg() with syntax_error().
8480
8481         * var.h: (struct means_proc) New.
8482         (struct variable) Add mns member to `p' union.
8483
8484         * vars-prs.c: (parse_variable, parse_dict_variable,
8485         parse_variables, parse_DATA_LIST_vars) Replace msg() with
8486         syntax_error().
8487
8488 Thu Jan  8 22:28:41 1998  Ben Pfaff  <blp@gnu.org>
8489
8490         * Makefile.am: (pspp_SOURCES) Add tab.h.
8491
8492         * Most source files: Added a cast to unsigned char in usages of
8493         the ctype is*() functions.  Replaced `end of command expected'
8494         calls to msg() with calls to syntax_error().
8495
8496         * frequencies.q: (dump_condensed) Fix tab_dim() column reference.
8497
8498         * lexer.c: (hex_val) Removed (was dead code).
8499         (idmatch) Parenthesize function name to avoid macro expansion.
8500
8501         * postscript.c: Comment fixes.
8502         (ps_preopen_driver) Change default font size to 10pt.
8503
8504         * sfm-read.c: (read_variables) Byteswap sv.print, sv.write as
8505         int32s.
8506         (parse_format_spec) Change system-file format spec argument type
8507         to int32.  Parse the format spec with bitwise operators.
8508
8509         * sfmP.h: (struct sysfile_format) Removed.
8510         (struct sysfile_variable) Changed print, write members from
8511         sysfile_format to int32.
8512
8513         * tokens.h: Esthetic fixes.
8514         [__GNUC__] (macro id_match) New macro to hopefully speed up
8515         identifier matching.
8516         (macros match_id, match_tok, match_int) Implemented in
8517         compiler-independent manner; no longer GNU C only.
8518
8519         * vfm.h: Include time.h.
8520
8521 Mon Jan  5 11:06:15 1998  Ben Pfaff  <blp@gnu.org>
8522
8523         * data-list.c: (dump_fixed_table) Change tab_dim().
8524
8525         * dump-sysfile.c: (open_sysfile) Fix mmap() call.
8526
8527         * error.c: Include command.h.
8528
8529         * frequencies.g: Formatting fixes.
8530
8531         * frequencies.q: Add tab_dim() calls.  Make the total cell a
8532         joined cell.
8533
8534         * glob.c: Include command.h.
8535
8536         * sfm-read.c: (struct sfm_fhuser_ext) New members sysmis, highest,
8537         lowest.
8538         (sfm_read_dictionary) Initialize sysmis, highest, lowest.
8539         (sfm_read_machine_flt64_info) Update sysmis, highest, lowest.
8540         (read_variables) Byteswap sv.type; byteswap sv.print, sv.write as
8541         the other elements (is this right?).
8542         (read_variables) Use lowest, highest members.
8543         (parse_format_spec) New arg `vv' for more stringent checking.
8544         (dump_dictionary) Byteswaps nonexplicit data.
8545         (sfm_read_case) Byteswap numeric data.
8546
8547         * som.c: Initialize table_num to 1.
8548         (render_segments) Remember to increment y_index after each table
8549         segment.
8550
8551         * sysfile-info.c: (cmd_sysfile_info) Change tab_dim().  Don't call
8552         avl_count() on a NULL tree.  No title for the second table.
8553         (cmd_display) Handle DISPLAY VECTORS by calling display_vectors().
8554         Handle AS_SCRATCH as AS_NAMES.  Warn if no variables.  Re-enable;
8555         fix call to display_variables().
8556         (display_variables) Default to 4 columns, not 3.  Set up headers.
8557         Column title is Variable, not Name.  Fix index column.
8558         Add joint text.  Add tab_dim().  Handle value labels properly.
8559         Handle DISPLAY LABELS properly.  Draw boxes correctly.
8560         (describe_variable) Value labels don't need titles.  Don't clear
8561         nonexistent index column.
8562         (compare_vectors_by_name) New function.
8563         (display_vectors) New function.
8564
8565         * tab.c: (tab_height) Add assertion.
8566         (tab_null) Add debug code.
8567         (evaluate_dimensions) Add debug code.
8568
8569         * var.h: (struct variable) get_proc data is sometimes used
8570         simultaneously with other per-procedure info, therefore it was
8571         removed from the union.  All references changed.        
8572
8573 Sun Jan  4 18:13:33 1998  Ben Pfaff  <blp@gnu.org>
8574
8575         * ascii.c: (ascii_close_page) Put title on second line of headers
8576         if there is no subtitle.
8577
8578         * command.c: (glob var cur_proc) Move definition here, from
8579         common.c.
8580         (cmd_remark) Emit blank line before remarks.
8581
8582         * command.h: (glob var cur_proc) Move declaration here, from
8583         common.h.
8584
8585         * data-list.c: (dump_fixed_table) Fix messages.
8586         (dump_free_table) Call tab_nat_dim().
8587
8588         * descript.q: (dump_z_table) Modify tab_dim() call.
8589
8590         * frequencies.q: (dump_condensed, dump_statistics) Add tab_dim()
8591         call.
8592         (dump_statistics) Don't output header.
8593
8594         * groff-font.c: Minor format fix.
8595
8596         * html.c: Comment fix.
8597
8598         * list.q: (write_varname) Indent after advancing page.
8599
8600         * output.h: Minor reordering.
8601
8602         * postscript.c: Comment fixes.  Many places, '\n' was replaced by
8603         a reference to eol[].
8604         (struct ps_driver_ext) New member eol[].
8605         (ps_preopen_driver) Initialize eol[].
8606         (ps_postopen_driver) Fix sense of text for text_opt, line_opt
8607         defaults.  Handle headers.  Fix test for minimum page length.
8608         (static var option_tab[]) Add `line-ends'.
8609         (ps_option) Handle line-ends to change eol[].
8610         (postopen) Scale prop_em_width and fixed_width properly.  Set the
8611         prologue title to outp_title if applicable.  Replace the prologue
8612         line ends with eol[].  Call draw_headers() if headers are enabled.
8613         (text_width) New function.
8614         (out_text_plain) New function.
8615         (draw_headers) New function.
8616
8617         * print.c: (dump_table) Call tab_nat_dim().
8618
8619         * som.c: (som_blank_line) Only advance a line if not at the top of
8620         a page.
8621         (som_submit) Move several informational table calls here.
8622         Increment subtable_num if SOMF_NO_TITLE not set.
8623         (output_table) Advance a line if SOMF_NO_SPACING not set.
8624         (render_columns, render_segments, render_simple) Handle spacing
8625         between tables.  Handle table titles.  Remove debug output.
8626
8627         * som.h: (SOMF_*) New enum series.
8628         (struct som_table_class) New member `flags'.
8629
8630         * sysfile-info.c: (cmd_sysfile_info) Calls tab_nat_dim().  No
8631         headers or spacing.
8632         (display_variables) Calls tab_nat_dim().
8633         (describe_variable) Remove restriction on number of value labels.
8634         Make value labels separated by thin lines.
8635
8636         * tab.c: (tab_create) Default `flags' to none.
8637         (tab_float) New arg `w'.  All references changed.
8638         (tab_nat_dim) New function.
8639         (tab_output_text) No title or spacing.
8640         (tab_flags) New function.
8641         (tabi_flags) New function.
8642         (tabi_title) New function.
8643         (strip_height) Removed.
8644         (tabi_render) Skip title when necessary.
8645         (static var tab_tab_class) Add tabi_flags, tabi_title.
8646         (evaluate_dimensions) Disable display of column, row size.
8647         (sum_columns) Add title height to top header.
8648         (render_strip) Moved within file.
8649
8650         * tab.h: (struct tab_table) New member `flags'.
8651
8652         * vfm.c: (dump_splits) Calls tab_nat_dim().  No title.
8653
8654 Sat Jan  3 16:55:44 1998  Ben Pfaff  <blp@gnu.org>
8655
8656         * Most source files: Add `const' attribute in all appropriate
8657         places.
8658         
8659         * sysfile-info.c: (cmd_sysfile_info) Add tab_dim() call, add a
8660         column to the variables table for use by describe_variable().
8661         (cmd_display) Disable for the present.
8662         (display_documents) Don't wrap documents.
8663         (display_variables) Table has four columns now.
8664         (describe_variable) Table has four columns now.  Don't use a
8665         subtable, use joined cells instead.
8666
8667         * tab.c: (tab_create) Don't set `join'.
8668         (tab_realloc) ct array is not made up of a_string's.
8669         Reallocate trh, hrh, h arrays, initialize trh array.  Initialize
8670         cell contents on GLOBAL_DEBUGGING, not DEBUGGING.
8671         (text_format) New function.
8672         (tab_title) Rewritten, uses text_format().
8673         (tab_text) Rewritten, uses text_format().
8674         (tab_joint_text) New function.
8675         (tab_join) Removed.
8676         (static var hit) New variable.
8677         (render_strip) New args r1, r2.  Implement joined cells that fit
8678         on a single page.
8679         (tabi_render) Increment hit.  Pass new args to render_strip().
8680         (evaluate_dimensions) [GLOBAL_DEBUGGING] Check for uninitialized
8681         cells.  For t_naw and t_nah, ignore joined cells and null cells in
8682         calculations.
8683         
8684         * tab.h: (struct tab_join_rect) Removed.
8685         (struct tab_table) Removed `join'.
8686         (TAB_JOIN_MAIN) Removed.
8687         (struct tab_joined_cell) New struct.
8688         (TAT_NOWRAP) New enum.
8689
8690 Fri Jan  2 01:39:58 1998  Ben Pfaff  <blp@gnu.org>
8691
8692         * ascii.c: (ascii_postopen) Replace ASCII_* macros with their
8693         expansions.
8694         (ascii_postopen_driver) Fix initialization of *_spacing so that
8695         the TAL_0 bit doesn't count.
8696
8697         * data-list.c: (dump_fixed_table) Use natural width for Format
8698         column.
8699
8700         * glob.c: (rerange) Removed.
8701         (get_date) Formatting fixes.  Internationalization fix.
8702
8703         * html.c: (html_postopen_driver) Replace HTML_DEFAULT_OUTPUT_FILE
8704         with "pspp.html".
8705
8706         * postscript.c: (ps_postopen_driver) Replace
8707         PS_DEFAULT_OUTPUT_FILE with "pspp.ps".
8708
8709         * som.c: (som_submit) Don't eject page before every table.
8710         (output_table) Fix order of arguments on call to area().
8711         (render_columns) Fix calculation of max_len.
8712         
8713         * tab.c: (tabi_cumulate) Minor change to increase elegance.
8714         (render_strip) New function.
8715         (strip_height) New function.
8716         (tabi_render) Rewrite as calls to render_strip().
8717
8718         * tab.h: (TAT_* enums) Removed TAT_RICH, all references removed.
8719         Renumbered TAT_PRINTF, TAT_TITLE, TAT_FIX to correspond better
8720         with the TAB_* and OUTP_T_* constants.
8721         
8722 Thu Jan  1 11:53:52 1998  Ben Pfaff  <blp@gnu.org>
8723
8724         * Makefile.am: Formatting fixes.
8725
8726         * ascii.c: (ascii_postopen_driver) Initialize *_line_spacing[],
8727         *_line_width[].
8728
8729         * data-list.c: (dump_fixed_table) Add tab_dim() call.
8730
8731         * descript.q: (dump_z_table, display) Add tab_dim() calls.
8732
8733         * dump-sysfile.c: (glob var length) Make type off_t.
8734         (usage) Fix arguments.
8735         (main) Return 0.
8736
8737         * output.h: (OUTP_T_*) Change constants' value to match tab.h.
8738         Now right-justification is the default so many references had to
8739         change.
8740         (struct outp_class) Removed line_width, all references changed.
8741         (OUTP_DEV_*) Add OUTP_DEV_DISABLED.
8742         (struct outp_driver) Add elements horiz_line_width,
8743         vert_line_width, horiz_line_spacing, vert_line_spacing.  Remove
8744         som element.
8745
8746         * postscript.c: (outp_encodings) Formatting fixes.  Fix garbage
8747         collection.
8748         (postopen) Initialize all the informational members of
8749         outp_driver.
8750
8751         * som.c: (som_blank_line) New function, renamed from blank_line(),
8752         all references changed.
8753         (som_submit) Disables drivers whose pages can't be opened.
8754         (render_columns, render_simple, render_segments) Add debug output.
8755         (render_columns) Fix loop range.
8756         (render_simple) Don't try to render the headers, they're taken
8757         care of automatically.  Advance cp_y past the table when done.
8758         (render_segments) Fix loop ranges.
8759
8760         * tab.c: Initialize new members of tab_table.
8761         (tab_vline) Handle trv[]; don't set style for spacing-only lines.
8762         (tab_hline) Handle trh[]; don't set style for spacing-only lines.
8763         (tab_box) Handle trh[], trv[]; don't set style for spacing-only
8764         lines.
8765         (set_expr) Removed.
8766         (tab_dim) New function.
8767         (tab_col_width) Removed.
8768         (tab_row_height) Removed.
8769         (tab_output_text) Call tab_dim().
8770         (tabi_driver) Call evaluate_dimensions(), sum_columns().
8771         (tabi_area) Implemented.
8772         (tabi_cumulate) Implemented.
8773         (tabi_render) Partially implemented, but broken.
8774         (var tab_table_class) Made static.
8775         (evaluate_dimensions) New function.
8776         (sum_columns) New function.
8777
8778         * tab.h: (enum t_*) Now start at t_end.  New: t_ptw, t_nr, t_nc,
8779         t_nah, t_naw, t_neg, t_xch, t_dup, t_lbl, t_jnz, t_sac, t_sar,
8780         t_scr, t_srr, t_sentinel.  Removed: t_nat.
8781         (struct tab_table) New: wl, wr, ht, hb, trh, hrh, trv, wrv, dim,
8782         max_stack_height, w, h.  Removed: ce, re.
8783         (macro blank_line) Removed.
8784         (glob var zero_length) Removed.
8785
8786 Fri Dec 26 15:44:31 1997  Ben Pfaff  <blp@gnu.org>
8787
8788         * Most source files: include some of the new include files broken
8789         out of var.h.
8790         
8791         * Makefile.am: (pspp_SOURCES) Add all the new source files to the
8792         list.
8793
8794         * aggregate.c: (glob var outfile) Make static.
8795
8796         * command.c: (glob var pgm_state) Move here.
8797
8798         * common.c: (glob vars endian, second_lowest_value, pgmname,
8799         finished, curdate, cur_proc, start_interactive, history_file) Move
8800         here.
8801
8802         * descript.q: (structs dsc_z_score, descriptives_trns) Move here.
8803
8804         * file-handle.q: (glob vars files, inline_file) Move here.
8805
8806         * glob.c: Lost lots of glob vars, detailed in individual file
8807         entries.
8808         (init_glob) set_printer, set_screen were obsolete, deleted.
8809         set_cprompt has fewer spaces because pspp has fewer letters than
8810         fiasco.
8811
8812         * inpt-pgm.c: (glob vars inp_init, inp_init_size) Move here.
8813         (inp_nval) Made static.
8814
8815         * lexer.c: (glob vars token, tokval, tokstr, tokstr_size,
8816         tokstr_len, toklongstr, tokint) Move here.
8817
8818         * misc.c: Lost several vars and functions.
8819
8820         * set.q: (all the set_* variables) Move here.
8821
8822         * str.c: (strmaxcpy, strbarepadcpy, strbarepadlencpy, strpadcpy,
8823         blpstrset, strpadcmp, memrev, memrmem, cmp_str) Move here from
8824         misc.c.
8825
8826         * tab.c: (set_expr, tab_col_width, tab_row_height) New functions.
8827
8828         * tab.h: (enum series t_*) New enums.
8829         (struct tab_table) Use arena struct tag.  New members ce, re.
8830
8831         * tokens.h: Comment fixes.
8832
8833         * var.h: Move lots of enums and variables and functions and
8834         structures to other files.  Use and declare a lot more union and
8835         struct tags.  Comment fixes.  
8836
8837         * vector.c: (glob vars vec, nvec) Move here.
8838
8839         * vfm.c: (glob vars reinit_sysmis, reinit_blanks, init_zero,
8840         init_blanks, last_vfm_invocation) Move here.
8841
8842         * cases.h: New file.
8843         (struct long_vec) Move here.
8844         (vec_init, vec_clear, vec_insert, vec_delete, devector, envector)
8845         Move here.
8846
8847         * command.h: New file.
8848         (STATE_* enums) Move here.
8849         (glob var pgm_state) Move here.
8850
8851         * format.c: New file.
8852         (glob var formats) Move here.
8853         (parse_format_specifier_name, fmt_to_string,
8854         check_input_specifier, check_output_specifier,
8855         check_string_specifier, convert_fmt_ItoO, parse_format_specifier)
8856         Move here.
8857
8858         * format.h: New file.  Move functions now in format.c here.
8859         (FMT_* enums) Move here.
8860         (struct fmt_desc) Move here.
8861         (FCAT_* enums) Move here.
8862         (struct fmt_spec) Move here.
8863         (glob vars formats, fmt_parse_ignore_error) Move here.
8864
8865         * inpt-pgm.h: New file.
8866         (INP_* enums) Move here, make #defines into enums.
8867         (glob vars inp_init, inp_init_size) Move here.
8868
8869         * sort.h: New file.
8870         (glob vars v_sort, nv_sort) Move here.
8871         (sort_cases, read_sort_output) Move here.
8872
8873         * vector.h: New file.
8874         (struct vector) Move here, add struct tag.
8875         (glob vars vec, nvec) Move here.
8876         (find_vector) Move here.
8877
8878         * New file.
8879         (glob vars last_vfm_invocation, temp_case, reinit_sysmis,
8880         reinit_blanks, init_zero, init_blanks) Move here.
8881         (struct case_stream) Move here.
8882         (glob vars vfm_source, vfm_sink, vfm_memory_stream,
8883         vfm_disk_stream, sort_stream, data_list_source,
8884         input_program_source, file_type_source, get_source, n_lag) Move
8885         here.
8886         (procedure, write_case, lagged_case, compact_case, page_to_disk)
8887         Move here.
8888                 
8889 Wed Dec 24 22:40:42 1997  Ben Pfaff  <blp@gnu.org>
8890
8891         * Makefile.am: (pspp_SOURCES) Added html.c, som.c, som.h.
8892         (LDADD) Add libdcdflib.
8893
8894         * ascii.c: Comment and formatting fixes.  Almost every external
8895         function had an assert added, checking driver_open and page_open.
8896         (ascii_init_driver) Broken into ascii_preopen_driver,
8897         ascii_postopen_driver, ascii_close_driver.  Manages driver_open.
8898         (ascii_open_page) Sets page_open.
8899         (ascii_close_page) Clears page_open.
8900
8901         * html.c: Comment and formatting fixes.  Almost every external
8902         function had an assert added, checking driver_open and page_open.
8903         (html_init_driver) Broken into html_preopen_driver,
8904         html_postopen_driver, html_close_driver.  Manages driver_open.
8905         (html_open_page) Sets page_open.
8906         (html_close_page) Clears page_open.
8907         (html_submit) Disabled.
8908
8909         * lexer.c: (parse_string) Remove debugging printf.
8910
8911         * list.q: (determine_layout) Open a page if one is not yet open.
8912
8913         * output.c: Comment fixes.
8914         (add_class) Set the class member of the new list element.
8915         (parse_options) Don't handle device type.
8916         (colon_tokenize) New function.
8917         (configure_driver) New four-field format with a field for device
8918         type.  Now initialize driver_open, page_open, next, and prev
8919         fields.  Use new colon_tokenize() function.  Don't do a memory
8920         copy to replace a driver, it doesn't work; instead delete the old
8921         driver and insert a new one.
8922         (destroy_driver) Don't call som_destroy_driver().  Close the page
8923         if it's open.  Find the class in the list of classes and decrement
8924         that reference count.  Remove the driver from the global driver
8925         list.
8926         (outp_iterate_enabled_drivers) Renamed outp_drivers().  All
8927         references changed.  Rewritten.  Don't return a driver that's not
8928         enabled.
8929         (outp_eject_page) All references to som_internal_eject_page()
8930         changed to use this.  Sets cp_x to 0 as well as cp_y.
8931
8932         * output.h: (OUTP_I_* enums) Removed.
8933         (struct som_submission_form) Removed.
8934         (struct outp_class) init_driver broken into preopen_driver,
8935         postopen_driver, and close_driver.  submit changed to take a
8936         som_table argument.
8937
8938         * postscript.c: Comment and formatting fixes.  Almost every
8939         external function had an assert added, checking driver_open and
8940         page_open.
8941         (ps_init_driver) Broken into ps_preopen_driver,
8942         ps_postopen_driver, ps_close_driver.  Manages driver_open.
8943         (ps_open_page) Sets page_open.
8944         (ps_close_page) Clears page_open.
8945
8946         * som.c: New file, base implementation.
8947         
8948         * som.h: (struct som_table) Add struct tag.
8949         (enum SOM_COL_ACROSS) Removed.
8950         (SOM_ROWS, SOM_COLUMNS) New enums.
8951         (struct som_table_class) Add member `cumulate'.  Remove `segment';
8952         change `render' arguments.
8953         (struct som_point, struct som_rect) Removed.
8954         (som_submit_table) Fixed typo, should have been som_submit.
8955
8956         * sysfile-info: (describe_variable) Don't try to insert a
8957         subtable; just destroy it for now.
8958
8959         * t-test.q: Include dcdflib/cdflib.h instead of cdflib.h.  Fix
8960         references to value labels.
8961
8962         * tab.c: (tab_destroy) New function.
8963         (tab_columns) Change argument.
8964         [0] (tab_submit) Remove dead code.
8965         (tab_title) Allocate string from the table's arena.
8966         (tab_output_text) Only free the buffer if we allocated it.
8967         (tab_submit) New function.
8968         (static vars t, d) New static vars.
8969         (tabi_table, tabi_driver, tabi_count, tabi_area, tabi_columns,
8970         tabi_headers, tabi_cumulate, tabi_render) New functions.
8971         (glob var tab_table_class) New global var.
8972
8973         * tab.h: (struct tab_join_rect) Don't use a som_rect; directly
8974         encapsulate the rectangle.  All references changed.
8975         
8976 Sun Dec 21 16:18:58 1997  Ben Pfaff  <blp@gnu.org>
8977
8978         * All header files updated to use struct tags in addition to
8979         typedefs for all structures.  Don't use word `struct' in struct
8980         tags.
8981         
8982         * Makefile.am: (pspp_SOURCES) Remove html.c.
8983         (INCLUDES) Replace the lib/* includes with a single lib/ include;
8984         all references updated.
8985
8986         * command.c: (parse_cmd) Remove call to som_check_workspace.
8987         (output_line) Update to new som.
8988
8989         * data-in.c: (parse_numeric) A single dot is not an error; it is
8990         the system-missing value.
8991
8992         * data-list.c: (dump_fixed_table, dump_free_table) Update to new
8993         som.
8994
8995         * data-out.c: Added `const' as appropriate to many prototypes.
8996         (convert_E, convert_F, convert_CCx) Take double argument instead
8997         of value * argument.
8998         (convert_format_to_string) Call changed functions appropriately.
8999         Instead of modifying the caller's value for FCAT_SHIFT_DECIMAL,
9000         make a local copy of the value.
9001
9002         * descript.q: Remove custom_variables() prototype now provided by
9003         q2c.  
9004         (custom_variables) Don't increment sbc_variables, the caller does
9005         this.
9006         (dump_z_table, display) Update to new som.
9007
9008         * error.c: (vmsg) Add const to prototype.  Remove code to handle
9009         `too many errors' condition.
9010         (check_error_count) New function.
9011         (msg) Add const to prototype.
9012
9013         * filename.c: (open_file) Rewrite for elegance.
9014
9015         * frequencies.q: Remove custom_*() prototypes now provided by q2c.
9016         (dump_full, dump_condensed, dump_statistics) Update for new som.
9017
9018         * list.q: Don't include somP.h.  Change all references to
9019         som_driver_ext to refer to the new members of som_driver.  Change
9020         som_internal_eject_page() references to outp_eject_page().
9021
9022         * main.c: (parse) Rewrite for elegance.  Add call to
9023         check_error_count().
9024
9025         * output.c: (add_class, outp_list_classes, outp_configure_driver)
9026         Rewrite or revise for new outp_driver_class_list structure.
9027         (outp_iterate_enabled_drivers) Fix comparison between disabled
9028         devices and current device type.
9029         (outp_eject_page) New function.
9030
9031         * output.h: Comment fixes.
9032         (struct outp_driver) New members driver_open, page_open, cp_x,
9033         cp_y, font_height, prop_em_width, fixed_width.  Deleted members
9034         ref_count, next.
9035         (struct outp_driver_class_list) New struct.
9036         (outp_class_list) Changed to type outp_driver_class_list; all
9037         references updated.
9038
9039         * print.c: (dump_table, print_trns_proc) Updated for new som.
9040
9041         * q2c.c: (dump_vars) Simplify array subcommand code.  Declare
9042         prototypes for custom subcommands.
9043         (dump_subcommand) Always include the `else'.
9044         (dump_parser) Fix comments in output code.
9045
9046         * set.q: Reordered functions.
9047
9048         * som-frnt.c, som-high.c, som-low.c, somP.h: Removed.
9049         
9050         * som.h: Rewritten from scratch.
9051
9052         * str.h: Remove dead code.
9053
9054         * tab.c, tab.h: New files, base implementation.
9055
9056         * sysfile-info.c: (cmd_sysfile_info, describe_variable) Update to
9057         new som.
9058
9059         * t-test.q: New code from John Williams
9060         <johnr.williams@stonebow.otago.ac.nz>.  Include math.h, cdflib.h.
9061         Many many new static vars and defines.
9062         (precalc, postcalc, g_postcalc, z_postcalc, t_pairs, t_groups,
9063         groups_calc, pairs_calc, z_dev_calc, z_calc) New functions.
9064         (struct value_list) New struct.
9065         (variance, covariance, pooled_variance, oneway, pearson_r, f_sig,
9066         t_crt, t_sig, print_t_groups) New functions.
9067         (cmd_t_test) Implemented.
9068
9069         * temporary.c: (cancel_temporary) Only free the temp_dict if it's
9070         non-NULL.
9071
9072         * vfm.c: (dump_splits) Update to new som.
9073
9074 Thu Dec  4 23:02:22 1997  Ben Pfaff  <blp@gnu.org>
9075
9076         * Makefile.am: (fiasco_SOURCES) Add html.c.
9077
9078         * aggregate.c: Base source.
9079
9080         * ascii.c: (postopen, preclose) Reformat.
9081
9082         * data-out.c, expr-evl.c: Comment fixes.
9083         
9084         * filename.c: (open_file) When opening a file for writing, use
9085         line buffering instead of full buffering for better interactive
9086         performance.  Suggested by Valerio Aimale
9087         <valerio@svpop.com.dist.unige.it>.  Also, recognize special file
9088         names `stdin', `stdout', `stderr'.
9089
9090         * groff-font.c: Comment fixes.
9091
9092         * html.c: New file; base version.
9093
9094         * list.q: (write_all_headers, clean_up, determine_layout,
9095         list_cases) Ignore `special' devices for now.  Needs to be fixed
9096         later.
9097
9098         * output.c: (outp_init) Add html driver to list; reverse list
9099         order.
9100
9101         * output.h: (struct outp_class_struct) New members `special',
9102         `submit'; comment fixes.  All references changed.
9103
9104         * postscript.c: (ps_init_driver) Make defaults for text_opt,
9105         line_opt depend on whether the OUTP_DEV_SCREEN bit is set on the
9106         device.
9107         (postopen) Comment fix.
9108         (preclose) Comment fixes, formatting fixes.  Change x->file.file
9109         references to more proper f->file.
9110
9111         * som-high.c: (som_submit_table) Special classes use their own
9112         renderers.
9113
9114         * som.h: Comment fixes.
9115
9116         * temporary.c: (new_dictionary) Don't try to xstrdup() a NULL
9117         string.
9118         
9119 Tue Dec  2 14:36:07 1997  Ben Pfaff  <blp@gnu.org>
9120
9121         * Makefile.am: (fiasco_SOURCES) Add aggregate.c back in.
9122
9123         * aggregate.c: Still working on this.
9124
9125         * command.c: (cmd_table[]) Add AGGREGATE back in.
9126         (split_words) Make '-' a legal word separator as well as ' '.
9127
9128         * main.c: Comment fixes.
9129
9130         * q2c.c: (dump_parser) Don't require the procedure's full name to
9131         be present, in the generated source.
9132
9133         * t-test.q: Change name to `t-test' from `t test'.  Let PAIRS be
9134         multiply specified and let it be default; let MISSING, CRITERIA,
9135         FORMAT be multiply specified.
9136         (cmd_t_test) Parse command name.  [DEBUGGING] Call debug_print().
9137         (custom_groups) Fix defaults.
9138         (custom_pairs) Check whether this is a PAIRS subcommand before
9139         attempting to parse.  Better garbage collection.  Proper storage
9140         allocation.
9141         [DEBUGGING] (debug_print) New function.
9142
9143         * temporary.c: Comment fixes.
9144         (copy_variable) Don't copy variable name and index.
9145         (save_dictionary) Copy variable name and index by hand.
9146
9147         * vars-atr.c: Comment fixes.
9148         (create_variable) New dictionary argument.  All references
9149         changed.
9150         (common_init_stuff) New dictionary argument.  All references
9151         changed.
9152         (init_variable) New dictionary argument.  All references changed.
9153         (dup_variable) New function.
9154
9155         * vars-prs.c: (parse_variables) If there are any errors, we always
9156         return 0.  Previously, it was possible for some types of errors to
9157         be ignored.
9158         
9159 Sat Nov 22 01:20:59 1997  Ben Pfaff  <blp@gnu.org>
9160
9161         * Makefile.am: (fiasco_SOURCES) For 0.1.5 release, remove
9162         aggregate.c.
9163
9164         * command.c: (cmd_table[]) Comment out AGGREGATE; add T TEST.
9165
9166         * list.q, t-test.q: Remove ALL option from VARLIST declaration in
9167         grammar rules.
9168
9169         * q2c.c: Comment fixes.
9170         (SBC_* enums) Remove SBC_VARLIST_ALL; all references removed.
9171         
9172         * t-test.q: (cmd_list) Rename cmd_t_test.
9173
9174         * temporary.c: (new_dictionary) Don't declare as static.
9175         
9176 Fri Nov 21 00:03:06 1997  Ben Pfaff  <blp@gnu.org>
9177
9178         * aggregate.c: Changes, still not finished.
9179
9180         * file-handle.q, frequencies.q, list.q, set.q: Comment fixes.
9181
9182         * q2c.c: Comment fixes.  Now its output is internationalized.
9183         (get_token) Fix parsing of escapes within literal strings.
9184         (main) Fix bad #line directives in output.
9185
9186         * t-test.q: Base implementation.
9187
9188         * temporary.c: (new_dictionary) New function.
9189         (restore_dictionary) [__CHECKER__] Change fill character to *
9190         (from @).
9191         
9192 Sun Nov 16 01:29:57 1997  Ben Pfaff  <blp@gnu.org>
9193
9194         * Makefile.am: (BUILT_SOURCES, fiasco_SOURCES) Add t-test.c
9195
9196         * aggregate.c: Changes, still not finished.
9197
9198         * descript.q, list.q: Comment fixes.
9199
9200         * q2c.c: Almost completely rewritten.
9201
9202         * t-test.q: New file, not complete.
9203
9204 Fri Nov 14 00:14:48 1997  Ben Pfaff  <blp@gnu.org>
9205
9206         * aggregate.c: Changes, still not finished.
9207
9208         * sort.c: (sort_cases) Call cancel_temporary() instead of doing it
9209         by hand.
9210
9211         * temporary.c: (cancel_temporary) New function.
9212
9213         * vars-atr.c: (discard_variables) Call cancel_temporary() instead
9214         of doing it by hand.
9215
9216         * vfm.c: (close_active_file) After restoring a TEMPORARY
9217         dictionary, set temp_dict to NULL.  Cancel TEMPORARY through
9218         cancel_temporary().
9219         (SPLIT_FILE_procfunc) Comment fix.
9220
9221 Tue Oct 28 16:08:45 1997  Ben Pfaff  <blp@gnu.org>
9222
9223         * Makefile.am: (fiasco_SOURCES) Add aggregate.c.
9224
9225         * aggregate.c: New file, not finished yet.
9226
9227         * command.c: (cmd_table) Add AGGREGATE.
9228
9229         * common.h: (pgm_state) Move declaration to var.h.
9230
9231         * lexer.c: (bin_value_func, oct_value_func, hex_value_func) i18n
9232         fixes.
9233         (parse_string) Message fix.
9234
9235         * recode.c: Comment fix.
9236
9237         * sfm-read.c: (read_variables) Code esthetic fixes.
9238         (write_header) Default date is `Jan', not `JAN'.
9239
9240         * sfmP.h: (bswap_int32) [!__linux__] Fix off-by-one errors.
9241
9242         * sort.c: (cmd_sort_cases) Farm the work out to new function
9243         parse_sort_variables().
9244         (parse_sort_variables) New function.
9245         (sort_cases) New function.  Cancels temporary transformations,
9246         which sorting didn't do previously.
9247         (cmd_sort_cases) Better garbage collection on error.  Uses
9248         do_external_sort().
9249         (write_initial_runs, merge_once) Improved code esthetics.
9250         (sort_stream_read) Reduced to one call to read_output_cases().
9251         (read_output_cases) New function.
9252
9253         * var-labs.c: (cmd_variable_labels) Re-enabled truncation of
9254         variable labels to 120 characters.
9255
9256         * var.h: Comment fixes.
9257         (glob var pgm_state) From common.h.
9258
9259         * vars-atr.c: (discard_variables) Set pgm_state to STATE_INIT.
9260
9261         * vars-prs.c: (parse_DATA_LIST_vars) Support PV_SINGLE in
9262         options.  Set *names to NULL on error.
9263
9264         * vfm.c: (memory_stream_init) Assert compaction_nval != 0.
9265
9266 Thu Oct  9 09:59:49 1997  Ben Pfaff  <blp@gnu.org>
9267
9268         * sfm-write.c, vfm.c: [HAVE_UNISTD] #include <unistd.h>, needed by
9269         SunOS4.  From Alexandre Oliva <oliva@dcc.unicamp.br>.
9270
9271 Wed Oct  8 18:55:24 1997  Ben Pfaff  <blp@gnu.org>
9272
9273         * vfm.c: (page_to_disk) Added missing local variables.
9274
9275 Tue Oct  7 20:23:17 1997  Ben Pfaff  <blp@gnu.org>
9276
9277         * get.c: Comment fix.
9278
9279         * sort.c: (cmd_sort_cases) Attempt to perform internal sort if the
9280         source is anything other than a disk stream, not just if it's in a
9281         memory stream.  Call page_to_disk() before external sort.
9282         (allocate_cases) Message fix.
9283
9284         * vfm.c: (prepare_for_writing) Warn user when paging workspace to
9285         disk.
9286         (page_to_disk) New function.
9287
9288 Sun Oct  5 15:56:14 1997  Ben Pfaff  <blp@gnu.org>
9289
9290         * Makefile.am: (INCLUDES) Include .. instead of $(top_srcdir).
9291
9292         * common.h: (macro strerror) Remove.  From Alexandre Oliva
9293         <oliva@dcc.unicamp.br>.
9294
9295         * get.c: (dict_delete_run) The number of variables to delete is
9296         not necessarily the number of variables that need to be shifted
9297         up.
9298         (trim_dictionary) Don't set *options to 0.  Fix bug that caused
9299         too many variables to be deleted.
9300
9301         * postscript.c: Comment fix.
9302
9303         * q2c.c: Include strerror.c.  From Alexandre Oliva
9304         <oliva@dcc.unicamp.br>.
9305
9306         * set.q: #undef ON and OFF.  From Alexandre Oliva
9307         <oliva@dcc.unicamp.br>.
9308
9309         * sfm-read.c: (sfm_read_dictionary) Don't set the file class too
9310         early, otherwise errors cause a bad free().
9311
9312         * str.h: (macro nvsprintf) s/FORMATS/FORMAT/ typo.  From Alexandre
9313         Oliva <oliva@dcc.unicamp.br>.
9314
9315         * temporary.c: (save_dictionary) Don't allocate memory if
9316         n_documents is 0.
9317
9318         * vfm.c: (memory_stream_write) Message fix.
9319
9320 Sat Oct  4 16:20:43 1997  Ben Pfaff  <blp@gnu.org>
9321
9322         * command.c: (static var cmd_table[]) Define REPEATING DATA
9323         command.
9324
9325         * common.h: Added support for broken systems that are missing
9326         EXIT_SUCCESS, EXIT_FAILURE, RAND_MAX, and/or strerror().
9327
9328         * Many source files: Replace syntax error messages via msg() with
9329         call to syntax_error().
9330
9331         * data-list.c: (dump_fixed_table) Add support for dumping table
9332         for REPEATING DATA as well as DATA LIST FIXED.
9333         (cmd_repeating_data) Allows and requires `/' between subcommands.
9334         Does proper thing with allowing rpd.starts_end to stay 0.  Allows
9335         CONTINUED specifications to be omitted.  Forces CONTINUED to be
9336         specified if ID is.  Calculates starts_end, cont_end from logical
9337         record length as reported by fhp.  Calls dump_fixed_table() if
9338         requested.  Fixed length of record copied by memcpy.
9339         (parse_num_or_var) Sets `num' to 0, not NOT_INT, for variables.
9340         Message fix.
9341         (realize_value) Returns sensible value for out-of-range variable
9342         values.
9343         (rpd_parse_record) New argument `ofs'.  Fixed confusion between
9344         length of occurrences and length of line.  Added warning for
9345         fields that exceed the line length.  Fixed infinite loop.
9346         (read_one_set_of_repetitions) Numerous minor changes for more
9347         complete SPSS compliance.  Message fixes.
9348
9349         * dfm.c: (dfm_close) If the file being closed is the inline file,
9350         read all the remaining data before closing it.
9351         (dfm_get_record) Don't close the file on lossage, as either it
9352         has been closed already or it doesn't belong to us.
9353
9354         * error.c: (puts_stdout) New function.
9355         (vmsg) Use puts_stdout instead of puts.
9356
9357         * file-handle.q: (fh_record_width) New function.
9358
9359         * inpt-pgm.c: (init_case) Fixed buffer overrun when inp_nval % 4
9360         == 0.
9361         (clear_case) Ditto.
9362         (input_program_source_read) Made an old kluge an approved method.
9363
9364         * lexer.c: (syntax_error) New function.
9365
9366         * misc.c: [BROKEN_RAND] (ansi_rand, ansi_srand; static var next)
9367         New.
9368
9369         * output.c: (oupt_get_paper_size) Message fix.
9370
9371         * q2c.c: Numerous fixes to formatting of generated code made to
9372         conform to GNU coding standards.  Uses syntax_error() in generated
9373         code.  Other miscellaneous generated message fixes.  Added support
9374         for broken systems that are missing EXIT_SUCCESS, EXIT_FAILURE,
9375         RAND_MAX, and/or strerror().
9376
9377 Sat Oct  4 02:09:56 1997  Ben Pfaff  <blp@gnu.org>
9378
9379         * data-in.c: Comment fixes.
9380
9381         * data-list.c: (struct repeating_data_trns) New member `id_spec'.
9382         (find_variable_input_spec) New function.
9383         (cmd_repeating_data) Initializes id_spec.
9384         (rpd_parse_record) Implemented.
9385         (read_one_set_of_repetitions) Returns -3 by default in order to
9386         kluge out some potential bugs.
9387
9388         * data-out.c: Comment fixes.
9389
9390         * file-type.c: (internal_cmd_record_type) Message fix.
9391
9392         * inpt-pgm.c: (input_program_source_read) Special temporary kluge
9393         for handling -3 return value.
9394
9395 Sat Sep 20 23:58:15 1997  Ben Pfaff  <blp@gnu.org>
9396
9397         * data-list.c: Comment fixes.
9398         (struct dls_var_spec) Reordered members.
9399         (read_from_data_list_fixed) Restructured.
9400         (struct repeating_data_trns) Reordered members.  Renamed `starts'
9401         as `starts_beg', `ends' as `starts_end'.
9402         (cmd_repeating_data) Calculates length of repeated data if
9403         necessary and possible.
9404         (parse_num_or_var) Don't allow string variables.
9405         (realize_value) New function.
9406         (rpd_msg) New function.
9407         (rpd_parse_record) New function.  Currently stubbed out.
9408         (read_one_set_of_repetitions) Implemented.
9409
9410         * inpt-pgm.c: (input_program_source_read) Comment fix.
9411
9412 Thu Sep 18 21:34:57 1997  Ben Pfaff  <blp@gnu.org>
9413
9414         * command.c: (cmd_end_repeat_p) Removed.
9415         (init_cmd_parser) Doesn't set cmd_end_repeat_p.
9416         (parse_cmd_name) Removed.
9417
9418         * data-list.c: Comment fixes.
9419         (data_list_pgm) Removed `eof' member.
9420         (static var first) New var.
9421         (cmd_data_list) Sets `first'.  Ensures that DATA LIST uses the
9422         FILE TYPE file inside FILE TYPE structures.
9423         (append_var_spec) Appends to *first, not dls.spec.
9424         (parse_fixed) Message fixes.
9425         (struct rpd_num_or_var) New.
9426         (struct repeating_data_trns) New.
9427         (static var rpd) New.
9428         (cmd_repeating_data) New function.
9429         (parse_num_or_var) New function.
9430         (parse_repeating_data) New function.
9431         (read_one_set_of_repetitions) New function.
9432
9433         * file-type.c: (cmd_file_type) Message fixes.  Always
9434         default_handle to FILE TYPE file handle.
9435         (internal_cmd_record_type) Message fixes.
9436
9437 Wed Aug 20 14:22:03 1997  Ben Pfaff  <blp@gnu.org>
9438
9439         * repeat.c: Comment fix.  Disable debugging.
9440
9441         * temporary.c: (restore_dictionary) Sets splits to NULL and
9442         n_splits to 0 before destroying the variables because now doing
9443         this tries to remove split variables.
9444
9445         * vars-atr.c: (discard_variables) Asserts that n_splits is 0 after
9446         destroying the dictionary.
9447         (clear_variable) Removes a variable from splits after destroying
9448         it.
9449
9450 Mon Aug 18 18:06:55 1997  Ben Pfaff  <blp@gnu.org>
9451
9452         * cmdline.c: (set_compat) Removed.
9453         (pick_compat) Removed.
9454         (parse_command_line) Removed -c option.
9455         (pre_syntax_message) Removed -c option.
9456         (usage) Remove compatibility code.
9457
9458         * common.h: (macros VER_PC, VER_WND, VER_X) Removed.
9459         (glob var compat) Removed.
9460
9461         * compute.c: (type_check) Fixed messages about type mismatches.
9462
9463         * data-list.c: (cmd_data_list) Removed compatibility code.
9464         (fixed_parse_compatible) Calls convert_negative_to_dash().
9465         Fixed bug where it only set the variable in fx.spec if it created
9466         the variable itself.
9467         (dump_fmt_list) Spelling fix.
9468         (cut_field) Removed compatibility code.
9469
9470         * dfm.c: (cmd_begin_data) Don't require a command terminator on
9471         BEGIN DATA command.
9472
9473         * expr-evl.c: (evaluate_expression) Implement LAG.
9474
9475         * expr-prs.c: (parse_add) Calls convert_negative_to_dash().
9476         (parse_neg) Calls convert_negative_to_dash().
9477         (LAG_func) Increases n_lag to the lag requested.  Fixed assignment
9478         bug.
9479
9480         * expr.h: (struct expression_struct) Removed member max_lag.
9481
9482         * file-type.c: (parse_col_spec) Calls convert_negative_to_dash().
9483         (internal_cmd_record_type) Removed special handling to produce
9484         negative numbers from dash tokens.
9485
9486         * getline.c: (static var DO_REPEAT_level) New var.
9487         (getl_add_DO_REPEAT_file) Increments DO_REPEAT_level.
9488         (handle_line_buffer) Copies the line into getl_buf; doesn't call
9489         copy_with_DO_REPEAT_substitutions().
9490         (getl_read_line) Maintains value of getl_mode.  Calls
9491         perform_DO_REPEAT_substitutions() whenever DO_REPEAT_level is
9492         positive.
9493         (getl_close_file) Decrements DO_REPEAT_level when appropriate.
9494
9495         * getline.h: (getl_mode) New glob var.
9496
9497         * glob.c: Comment fixes.
9498         (init_glob) Restructured.  Sets set_seed.
9499         (init_compat_dependent) Removed.  All references removed.
9500         (get_date) Format changed from MM/DD/YY to DD MMM YYYY.
9501         (__htonl, __htons) Removed.  (What were these for?)
9502
9503         * lexer.c: (static var tbl) Dash set to class CNUM.
9504         (make_hexit) New function from data-out.c.
9505         (get_token_representation) Rewritten.
9506         (convert_negative_to_dash) New function.
9507         (lex_init_compat_dependent) Removed.
9508         (yylex) A dash is parsed as part of a number if it is followed by
9509         a digit.  The ASCII representation of a number is copied to
9510         tokstr.  String parsing farmed out to parse_string().  Comment
9511         fixes.
9512         (bin_value_func, oct_value_func, hex_value_func, parse_string) New
9513         functions.
9514         (preprocess_line) Line processing depends on interactive/batch
9515         mode, not on compatibility mode.  Removed PC+ compatibility code.
9516
9517         * loop.c: (loop_3_trns_proc) Comment fix.
9518
9519         * main.c: Remove dead code.
9520         (main) Remove call to init_compat_dependent().
9521
9522         * misc.c: (convert_fmt_ItoO) Make E format conversion more
9523         conformant.
9524
9525         * print.c: (parse_string_argument) Calls
9526         convert_negative_to_dash().
9527         (fixed_parse_compatible) Calls convert_negative_to_dash().
9528
9529         * repeat.c: (RPT_* defines) Removed.
9530         (struct rpt_numeric) Removed.
9531         (struct repeat_entry) New member type, changed `replacement' from
9532         char * to char **.
9533         (clean_up) Deallocation adapted to new repeat_entry.
9534         (internal_cmd_do_repeat) `type' defaults to 0.  Remove lookahead()
9535         usage.  Creates vars for `type' of 1.
9536         (parse_ids) Sets type of 1.  Adapted to new repeat_entry.
9537         (store_numeric) Rewritten, new interface.
9538         (parse_numbers) Rewritten.
9539         (parse_strings) Rewritten.
9540         (find_DO_REPEAT_substitution) New function.
9541         (perform_DO_REPEAT_substitutions) New function.
9542         (copy_with_DO_REPEAT_substitutions) Removed.
9543         (debug_print) Rewritten.
9544
9545         * set.q: Comment fix.
9546         (custom_results) Removed compatibility code.
9547         (internal_cmd_set) Removed SET EMULATION subcommand.  Removed
9548         compatibility code.
9549
9550         * sysfile-info.c: (cmd_display) Removed compatibility code.
9551
9552         * tokens.h: Comment fixes.
9553         (token types enum) Removed `toktype' typedef name for this int
9554         type.  Removed SUBST.  Restructured.
9555
9556         * vars-atr.c: (discard_variables) Sets n_lag to 0.
9557
9558         * vars-prs.c: Comment fix.
9559
9560         * vfm.c: Comment fixes.
9561         (glob var n_lag) New var.
9562         (static vars lag_count, lag_head, lag_queue) New vars.
9563         (procedure) Removed argument nlag.
9564         (setup_lag) New function.
9565         (close_active_file) Discards lagging state.
9566         (lag_case) New function.
9567         (lagged_case) New function.
9568         (write_case) Lags a case if lagging.
9569
9570         * weight.c: (cmd_weight) Removed compatibility code.
9571         
9572 Sun Aug 17 22:34:40 1997  Ben Pfaff  <blp@gnu.org>
9573
9574         * getline.h: (struct getl_script) New members loop_index, macros.
9575
9576         * getline.c: (getl_add_file) Sets first_line field to NULL.
9577         (getl_add_DO_REPEAT_file) New function.
9578         (handle_line_buffer) When the current line's length is negative,
9579         set the filename and line number.  Increment line number after
9580         reading line.  Pass the line to
9581         copy_with_DO_REPEAT_substitutions() for processing.
9582         (getl_close_file) Free DO REPEAT lines before freeing the
9583         filename, and just set the filename to NULL when doing this,
9584         because otherwise the filename gets freed twice.
9585
9586         * glob.c: (glob var queuing) Removed.  All references removed.
9587
9588         * lexer.c: Comment fixes.
9589         (get_token_representation) New function.
9590
9591         * repeat.c: Comment fixes.
9592         (struct repeat_entry) Replaced type and v union members with a
9593         simple string.
9594         (append_record) New function.
9595         (internal_cmd_do_repeat) Started reforming it for the new
9596         repeat_entry struct.  Properly records filename changes in the
9597         getl_line_buf.  Fixed improper use of = for ==.  Fixed sense of
9598         strncasecmp() result usage.  Uses append_record() to simplify.
9599         Properly discards END REPEAT line.  Calls getl_add_DO_REPEAT_file
9600         to add in the file.
9601
9602         (copy_with_DO_REPEAT_substitutions) Started coding.
9603
9604         [DEBUGGING] (debug_print_lines) New function.
9605
9606         * set.q: (custom_results, internal_cmd_set) s/VER_PCP40/VER_PC/;
9607
9608         * tokens.h: (macro is_id1, is_idn) New macros.
9609
9610 Sat Aug 16 10:57:41 1997  Ben Pfaff  <blp@gnu.org>
9611
9612         * cmdline.c: (static var pre_syntax_message) Changed `win'
9613         compatibility mode to `wnd'.
9614
9615         * data-list.c: (fixed_parse_spss) Renamed
9616         fixed_parse_compatible().
9617
9618         * glob.c: (init_glob) Excise unused code for
9619         program_invocation_short_name.
9620
9621         * lexer.c: (preprocess_line) Leading indentors are ignored in Wnd
9622         as well as in X.
9623
9624         * print.c: (fixed_parse_spss) Renamed fixed_parse_compatible().
9625
9626         * set.q: `win' compatibility renamed `wnd'.
9627
9628 Thu Aug 14 22:11:12 1997  Ben Pfaff  <blp@gnu.org>
9629
9630         * filename.c: [__WIN32__] Change the included Windows header files
9631         (again).
9632         (absolute_filename_p) [__MSDOS__] A filename with a colon as the
9633         second character is absolute.
9634         (dirname) Fix logic error.  Don't printf() the results.
9635         (prepend_dir) Don't printf() the results.
9636
9637         * getline.c: (handle_line_buffer) New function.
9638         (getl_read_line) Reads line with handle_line_buffer() when
9639         appropriate.
9640         (getl_close_file) Discard line buffer data.
9641
9642         * getline.h: Comment fixes.
9643         (struct getl_line_list) New struct.
9644         (getl_script_struct) Added line buffer members.  These are hooks
9645         for use by DO REPEAT to allow it to insert virtual source code
9646         into the program.
9647
9648         * glob.c: (init_glob) [__DJGPP__ || (__WIN32__ && __BORLANDC__)]
9649         Override Borland C++ stupidity that claims Windows has a console
9650         window size of 0x3.
9651
9652         * repeat.c: This is in the process of being restructured from
9653         using a token-buffering approach to the DO REPEAT facility to
9654         using the more flexible approach of a line-buffering approach in
9655         conjunction with the getline module.  Comment fixes.
9656         (struct tok_struct) Removed.
9657         (static vars queue_index, queue_head, queue) Removed.
9658         (static vars line_buf_head, line_buf_tail) New vars.
9659         (internal_cmd_do_repeat) Instead of queuing tokens, queue lines.
9660         Not complete.
9661         (pull_queue, destroy_queue) Removed.
9662         [DEBUGGING] (debug_print_tokens) Removed.
9663
9664 Tue Aug  5 13:57:58 1997  Ben Pfaff  <blp@gnu.org>
9665
9666         * file-handle.q: (prepend_current_directory) New function.
9667         (internal_cmd_file_handle, fh_get_handle_by_filename) Prepends
9668         current directory before normalizing filename.
9669
9670         * filename.c: (gnu_getcwd) New function.
9671         (absolute_filename_p) New function.
9672         (search_path) New argument, PREPEND.  All references changed to
9673         pass NULL except those explicitly mentioned.  Uses
9674         absolute_filename_p().  Prepends PREPEND before trying the
9675         filename.
9676         (dirname, prepend_dir) New functions.
9677
9678         * getline.c: (getl_get_current_directory) New function.
9679         (getl_include) Passes getl_get_current_directory() as PREPEND arg
9680         to search_path().
9681                 
9682 Sun Aug  3 11:42:36 1997  Ben Pfaff  <blp@gnu.org>
9683
9684         * In several source files, the term `script' was replaced with
9685         `syntax file' inside error messages.  Usage of the term `script'
9686         in the sense of a syntax file is now deprecated.
9687
9688         * cmdline.c: (static vars pre_syntax_message, post_syntax_message)
9689         Updated messages.
9690
9691         * dump-sysfile.c: (usage) Update message.
9692
9693         * getline.c: (getl_read_line) Ignore lines beginning with `#!'.
9694
9695         * getline.h: (glob var getl_include_path) Declare extern.
9696
9697         * list.q: Define EXTERN as extern before #including somP.h.
9698
9699         * var.h: Remove declaration of `disptype' variable.
9700
9701         * vfm.c: (close_active_file) After switching the data sink to a
9702         data source, set vfm_sink to NULL, because it doesn't exist any
9703         more.
9704
9705 Thu Jul 17 21:41:44 1997  Ben Pfaff  <blp@gnu.org>
9706
9707         * glob.c: [__BORLANDC__] Include math.h.  Define _matherr() and
9708         _matherrl() to ignore all math errors.
9709
9710         * sfm-read.c: (read_value_labels) When reading the labels from
9711         disk, read the little parts separately instead of as a struct;
9712         this avoids alignment problems.
9713
9714         * sfm-write.c: (struct sfm_fhuser_ext) New member `elem_type'.
9715         (sfm_write_dictionary) Sets elem_type and frees it on lossage.
9716         (write_header) Allocates and initializes elem_type.
9717         (sfm_write_case) Uses elem_type to determine how to handle each
9718         flt64 element.
9719         (sfm_close) Frees elem_type.
9720
9721         * sfmP.h: Comment fix.
9722         [__BORLANDC__] Uses #pragma -a to adjust structure member
9723         alignment.
9724         
9725 Thu Jul 17 01:55:12 1997  Ben Pfaff  <blp@gnu.org>
9726
9727         * Makefile.am: (fiasco_SOURCES) Remove display.c.
9728
9729         * common.c: Fix typo.
9730
9731         * dfm.c: (read_record) Remove strncasecmp() emulation and fix the
9732         sense of the condition.
9733
9734         * expr-evl.c: (macro ALLOC_STRING_SPACE) [!PAGED_STACK] Add
9735         line-continuation backslash.
9736
9737         * filename.c: [__WIN32__] Include <windef.h> before <winbase.h>.
9738
9739         * frequencies.q: (custom_grouped, add_percentile) Don't use a
9740         non-constant expression as an argument to sizeof.
9741
9742         * glob.c: [__WIN32__ && __BORLANDC__] When including <conio.h>,
9743         undefine gettext macro because that's a conio function.
9744
9745         * hash.h: (hsh_prime_tab declaration) Remove.
9746
9747         * list.q: (write_fallback_headers) Move `leader' allocation out of
9748         main loop.  Change to local_alloc() allocation.
9749
9750         * output.h: Formatting fixes.  Put __attribute__ in right place on
9751         function prototypes.
9752
9753         * sfm-read.c: (read_machine_flt64_info, read_variables) Change
9754         incorrect `SECOND_LOWEST_VALUE' references to proper
9755         `second_lowest_value'.
9756
9757         * som-frnt.c: (EXTERN macro) Define as `extern' instead of null
9758         value.  This way 2 out of 3 of the som files define the vars
9759         extern, the correct way, that actually works under BC++.
9760         (som_set_float) Don't use nonconstant initializers for a struct.
9761
9762         * som-high.c: Add the standard alloca() header.
9763         (replicate_table) Add prototype.
9764
9765         Merged DISPLAY routine.
9766         * sysfile-info.c: (AS_*) New enum series.
9767         (cmd_sysfile_info) Gutted.  Calls describe_variable() to do the
9768         dirty work.
9769         (cmd_display, display_macros, display_documents,
9770         display_variables) Stolen from defunct display.c.
9771         (describe_variable) New function.
9772
9773         * temporary.c: [0] (display_tree) New debug function.
9774         (copy_variable) Performs shallow copy of value labels instead of
9775         deep copy; i.e., just copys the AVL tree and increments the
9776         reference counts.
9777
9778         * val-labs.c: Comment fixes.
9779         (do_value_labels) Optionally skip leading forward slash.
9780         (get_label) Creates only a single value label instead of many
9781         copies of one, and sets the reference count.
9782
9783         * display.c: Removed.
9784
9785         * dump-sysfile.c: New file, not yet complete.
9786
9787 Fri Jul 11 23:02:18 1997  Ben Pfaff  <blp@gnu.org>
9788
9789         For lots of source files I added more verbose_msg's.  These aren't
9790         listed below as they have tested as being benign.  In some cases
9791         these replaced debug_printf() calls.
9792
9793         * output.c: (outp_read_devices) Message fix.
9794
9795         * postscript.c: (output_encodings) Message fix.  Reports errors on
9796         fclose().
9797         (postopen) Message fix.
9798         
9799 Fri Jul 11 14:09:40 1997  Ben Pfaff  <blp@gnu.org>
9800
9801         * dfm.c: (dfm_close) Don't call fclose() for a NULL FILE.
9802
9803         * filename.c: (close_file_ext) Set f->file to NULL *after* closing
9804         it.
9805
9806         * main.c: Remove <malloc.h> #include.
9807
9808         * mis-val.c: (parse_numeric) Set .f member for each missing[]
9809         instead of trying to just set the missing[] itself, which is a
9810         gcc-specific idiom.
9811
9812         * sfm-read.c: (read_variables) Same.
9813
9814         * str.h: Add memmem() prototype.
9815
9816         * val-labs.c, var-labs.c: Replace <malloc.h> with <stdlib.h>.
9817
9818 Thu Jul 10 22:13:53 1997  Ben Pfaff  <blp@gnu.org>
9819
9820         * Makefile.am: (q2c) Don't include any libraries in the link.
9821
9822         * dfm.c: (force_line_buffer_extension) New macro.
9823         (count_tabs) New function.
9824         (tabs_To_spaces) New function.
9825         (read_record) Calls tabs_to_spaces() on the line being processed.
9826
9827         * q2c.c: Disabled i18n for this proglet so that libintl.a doesn't
9828         have to be compiled twice (once for CC, once for LOCAL_CC).
9829  
9830 Sun Jul  6 19:14:33 1997  Ben Pfaff  <blp@gnu.org>
9831
9832         * Makefile.am: (INCLUDES) Add intl directory; fix directories.
9833         (LDADD) Add @INTLLIBS@.
9834         (q2c) Add LIBS, @INTLLIBS@ to link step.
9835
9836         * inpt-pgm.c: Turn off debugging.
9837
9838         * postscript.c: (postopen) Format fix.  local_free() blocks
9839         returned by local_alloc(); don't free() them.
9840
9841 Sat Jul  5 23:44:51 1997  Ben Pfaff  <blp@gnu.org>
9842
9843         * data-in.c: (parse_string_as_format) Comment fix.  Fix check for
9844         string length.
9845
9846         * data-list.c: (read_from_data_list_fixed) Pass proper value for
9847         LEN arg, not simply the full string length.
9848
9849         * sort.c: (allocate_file_handles) Check SPSS compatible temp file
9850         directories before generic temp file directories.
9851
9852         * vfm.c: Disable debugging.
9853
9854 Fri Jul  4 13:26:41 1997  Ben Pfaff  <blp@gnu.org>
9855
9856         * get.c: Comment fix.
9857         (cmd_save_internal) Always passes GTSV_OPT_SAVE option.
9858
9859 Wed Jun 25 22:52:28 1997  Ben Pfaff  <blp@gnu.org>
9860
9861         * expr-prs.c: (debug_print_postfix) Conditionally included on
9862         GLOBAL_DEBUGGING.  Removed out_header() reference.
9863
9864         * exprP.h: Removed #undef GLOBAL_DEBUGGING.
9865
9866 Sun Jun 22 22:00:28 1997  Ben Pfaff  <blp@gnu.org>
9867
9868         * ascii.c: Removed obsolete ascii_close_page() prototype.
9869
9870         * command.c: (output_line) Comment fix.
9871
9872         * data-in.c: Formatting fix.
9873         (parse_string_as_format) Now the `fc' argument is used only for
9874         the purpose of error messages; it is not an index into the string
9875         passed.  All references changed.
9876
9877         * data-list.c: Comment fix.
9878         (cut_field) Comment fix.  Now returns the column number of the
9879         position of the field cut out on success.
9880         (parse_field) Added `column' argument.  Puts the column numbers in
9881         the error message.
9882         (read_from_data_list_free, read_from_data_list_list) Record the
9883         column number returned by cut_field(), pass it to parse_field().
9884
9885         * dfm.c: Comment fix.
9886
9887         * do-ifP.h: Comment fix.
9888
9889         * expr-prs.c: (SYSMIS_func) Implemented string-type arguments for
9890         the SYSMIS function.
9891
9892         * expr.h, exprP.h: Comment fix.
9893
9894         * glob.c: (init_glob) Only calls setlocale() and family if
9895         ENABLE_NLS set.
9896
9897         * hash.h: Comment fix.
9898
9899         * include.c: Comment fix.
9900
9901         * output.c: Comment fix.
9902
9903         * postscript.c: (ps_line_intersection) Simplified assertion.
9904
9905         * repeat.c: Comment fix.
9906
9907         * vars-atr.c: Comment fix.
9908
9909         * vars-prs.c: Comment fix.
9910
9911         * vfm.c: (vector_initialization) [DEBUGGING] Fixed undefined
9912         behavior with usage of postincrement.
9913         (memory_stream_read) Discards cases as it goes. 
9914
9915 Sun Jun 15 16:45:17 1997  Ben Pfaff  <blp@gnu.org>
9916
9917         * Makefile.am: Cleans q2c, not just distcleans it.  Distcleans
9918         foo.
9919
9920         * Most source files: Includes debug-print.h, related comment
9921         fixes.
9922
9923         * cases.c: (alloc_val) Removed complex allocation code.  Merely
9924         increments default_dict.nval and returns the former value.
9925         (envector, devector) Removed references to lv member of struct
9926         variable.
9927
9928         * common.h: (macro VME) Replaced complex definition with simple
9929         one.
9930
9931         * data-list.c: (cmd_data_list) Sets vfm_source instead of
9932         read_active_file and cancel_input_pgm.
9933         (read_from_data_list, cancel_data_list) Removed.
9934         (data_list_source_read, data_list_source_destroy_source) New
9935         functions.
9936         (glob var data_list_source) New var.
9937
9938         * dfm.c: (open_file_r, open_file_w) Simplified debug output.
9939         (cmd_begin_data) Improved criteria for an input program accessing
9940         the inline file.  Still not perfect.
9941
9942         * do-if.c: (do_if_trns_proc) Simplified debug output.
9943
9944         * expr-prs.c: Comment fixes.
9945         [DEBUGGING] (debug_print_postfix) Simplified debug output.
9946
9947         * file-handle.q: (fh_close_handle) Simplified debug output.
9948
9949         * file-type.c: Comment fixes.
9950         (cmd_file_type) Sets vfm_source instead of read_active_file and
9951         cancel_input_pgm.
9952         (cmd_end_file_type) On failure, discards variables in place of
9953         just canceling the input program.
9954         (read_from_file_type) Renamed file_type_source_read.
9955         (cancel_file_type) Renamed file_type_source_destroy_source.
9956         (glob var file_type_source) New var.
9957
9958         * get.c: (GTSV_* enum series) New enums GTSV_OPT_SAVE, GTSV_NONE.
9959         (cmd_get) Initializes options to GTSV_NONE before passing to
9960         trim_dictionary().  Removed `lv' reference.  Sets vfm_source
9961         instead of read_active_file and cancel_input_pgm.
9962         (cmd_save_internal) Initializes options before passing to
9963         trim_dictionary().  Local var `nval' removed.
9964         (dict_delete_run) Comment fixes.
9965         (trim_dictionary) Comment fixes.  Disallows scratch variables if
9966         GTSV_OPT_SAVE set in options.
9967         (read_from_get) Renamed get_source_read.
9968         (cancel_get) Renamed get_source_destroy_source.
9969         (glob var get_source) New var.
9970
9971         * inpt-pgm.c: (cmd_input_program) Sets vfm_source instead of
9972         read_active_file and cancel_input_pgm.
9973         (read_from_input_program) Renamed input_program_source_read.
9974         Simplified debug output.
9975         (cancel_input_program) Renamed
9976         input_program_source_destroy_source.
9977         (glob var input_program_source) New var.
9978
9979         * loop.c: (loop_1_trns_proc) Simplified debug output.
9980
9981         * main.c: (dump_token) Made eof output more explicit.
9982
9983         * sfm-read.c: (read_variables, dump_dictionary) Removed `lv'
9984         references.
9985
9986         * sort.c: (cmd_sort_cases) Disallows scratch variables.  Removed
9987         code for always-memory or always-disk cases.  malloc's case-list
9988         based on vfm_source_info.ncases.  Explicit support for
9989         memory_stream via memory_source_cases.
9990         (do_external_sort) Sets vfm_source instead of read_active_file and
9991         cancel_input_pgm.
9992         (allocate_file_handles) The temporary directory permissions are
9993         set to 0700 instead of 0777.
9994         (allocate_cases) Formatting fixes.  Simplified debug output.
9995         (output_record) Compacts the case if necessary before writing it
9996         out.
9997         (close_handle, open_handle_w) Simplified debug output.
9998         (write_initial_runs) Destroys vfm_sink, then sets it to
9999         sort_stream.  Writes records to memory based on
10000         vfm_sink_info.case_size.
10001         (write_to_sort_cases) Renamed sort_stream_write().
10002         (merge) Simplified error handling.  Simplified debug output.
10003         Formatting fixes.
10004         (read_from_external_sort) Renamed sort_stream_read().
10005         Reads records based on vfm_source_info.case_size.
10006         (sort_stream_write) Writes records to memory based on
10007         vfm_sink_info.case_size.
10008         (sort_stream_mode) New function.
10009         (glob var sort_stream) New variable.
10010
10011         * temporary.c: (cmd_temporary) Simplified debug output.
10012         (copy_variable) Removed references to `lv'.
10013
10014         * title.c: (get_title) Simplified debug output.
10015
10016         * var.h: Comment fixes.
10017         (struct get_proc) Removed member `lv'.
10018         (struct variable) Removed member `lv'.  Comment fixes.
10019         (glob vars read_active_file, write_active_file, cancel_input_pgm)
10020         Removed.
10021         (struct case_stream) New.
10022
10023         * vars-atr.c: (discard_variables) Changed cancel_input_pgm,
10024         read_active_file references to use vfm_source.
10025         (init_variable, replace_variable) Removed references to `lv'.
10026
10027         * vfm.c: Comment fixes.
10028         (glob var vfm_source, vfm_sink, vfm_source_info, vfm_sink_info)
10029         New variables.
10030         (static var queue, qh, qt, n_lag) Removed.  All references
10031         removed.
10032         (glob var compaction_necessary, compaction_nval, compaction_case,
10033         paging) New variables.
10034         (record_case) Removed.
10035         (procedure) Comment fixes.  Calls vfm_source->read() instead of
10036         read_active_file().
10037         (lag) Removed.
10038         (prepare_for_writing, arrange_compaction, make_temp_case,
10039         vector_initialization, setup_filter) New function.
10040         (open_active_file) Most of the code moved into the abovementioned
10041         new functions.  Now sets temp_dict to &default_dict if there is no
10042         temporary dictionary, for convenience.  New debug output.
10043         (close_active_file) Deals with changing the sink to the source.
10044         Calls finish_compaction().  Frees compaction_case.  Mostly
10045         rewritten.
10046         (glob vars disk_source_file, disk_sink_file) New vars.
10047         (destroy_active_file, read_from_memory) Removed.
10048         (disk_stream_init, disk_stream_read, disk_stream_write,
10049         disk_stream_mode, disk_stream_destroy_source,
10050         disk_stream_destroy_sink) New functions.
10051         (glob var vfm_disk_stream) New var.
10052         (glob vars memory_source_cases, memory_sink_cases,
10053         memory_sink_iter, memory_sink_max_cases) New vars.
10054         (memory_stream_init, memory_stream_read, memory_stream_write,
10055         memory_stream_mode, memory_stream_destroy_source,
10056         memory_stream_destroy_sink) New functions.
10057         (glob var vfm_memory_stream) New var.
10058         (write_case) Local var `i' renamed `cur_trns'; local var `retval'
10059         named `more_cases'.  Simplified debug output.  Otherwise mostly
10060         rewritten.
10061         (record_case) Moved into the stream drivers.  Removed.
10062         (transform) Removed (was dead code).
10063         (SPLIT_FILE_procfunc) s/vfm_replacement/vfm_sink_info/.  In the
10064         common case that the splits don't change, we don't need to copy
10065         the case into prev_case again--pointless.
10066         (compact_case) New function.
10067         (finish_compaction) New function.
10068
10069         * vfmP.h: Comment fixes.
10070         (DEV_* enum series) Removed. 
10071         (struct storage) Renamed `stream_info'.  Removed variant record.
10072         Removed `device' member.
10073
10074         * debug-print.h: New file.
10075         
10076 Sun Jun  8 01:12:38 1997  Ben Pfaff  <blp@gnu.org>
10077
10078         * autorecode.c: Turned off debugging.
10079
10080         * data-list.c: (destroy_dls) Closes the associated file handle.
10081
10082         * descript.q: (custom_variables) Added PV_NO_SCRATCH to
10083         parse_variables() options.
10084
10085         * dfm.c: (open_file_r) Removed gratuituous argument to msg() call.
10086
10087         * display.c: (display_variables) Really fixed null cell bug.
10088
10089         * file-handle.q: (fh_close_handle) Changed debugging message.
10090
10091         * frequencies.q: (custom_variables) Added PV_NO_SCRATCH to
10092         parse_variables() options.
10093
10094         * list.q: Added PV_NO_SCRATCH in q2c varlist options.
10095         (cmd_list) Fails if no variables specified.
10096         (determine_layout) Writes blank lines manually.
10097
10098         * loop.c: (loop_1_trns_proc) Made debugging code only print
10099         messages if debugging.
10100
10101         * q2c.c: (dump_subcommand) Appends sbc->message to SBC_VARLIST
10102         parse_variables() arguments.
10103         (main) Parses optional parenthesized options to varlist
10104         subcommands into sbc->message.
10105
10106         * sfm-read.c: Format fix.
10107
10108         * var.h: (FV_*) New enum series.
10109         (PV_*) New enum PV_NO_SCRATCH.
10110
10111         * vars-prs.c: (find_var) Removed.
10112         (fill_all_vars) Takes FV_* enum instead of boolean third
10113         argument.  Rewritten to deal with scratch as well as system
10114         variables.
10115         (parse_variables) Error message on scratch variable if
10116         PV_NO_SCRATCH set.
10117
10118         * vfm.c: (static var virt_begin_func) New var.
10119         (procedure) Sets up virt_begin_func.
10120         (SPLIT_FILE_procfunc) For the first case, calls virt_begin_func()
10121         after dump_splits().  For succeeding groups changes, calls
10122         virt_begin_func() instead of begin_func().      
10123
10124 Fri Jun  6 22:42:23 1997  Ben Pfaff  <blp@gnu.org>
10125
10126         * count.c, data-out.c, file-handle.q, list.q, loop.c: Turned off
10127         debugging.
10128
10129         * dfm.c: Added some debugging messages, disabled by default.
10130         (open_file_r) Fixed error message.
10131         (read_record) On eof on inline_file, instead of calling
10132         fh_close_handle(), simply jump to eof label like a normal file.
10133         Message fixes.
10134
10135         * display.c: Thin lines between rows for certain kinds of
10136         listing.  Fixed `null cell' bug.
10137
10138         * error.c: (failure) Flush stdout, stderr before failing.
10139
10140         * file-handle.q: (fh_close_handle) Added debugging message.
10141
10142         * frequencies.q: (dump_full) Bottom line extends across entire
10143         table width.  Changed title formatting.
10144         (dump_condensed) Changed title formatting.
10145         (dump_statistics) Fixed title formatting.
10146
10147         * glob.c: (init_glob) Moved initialization of cur_proc out of #if.
10148         Sets default value of set_format.
10149
10150         * list.q: (cmd_list) Calls blank_line() before determine_layout().
10151         Passes write_all_headers() to procedure() as pre-group func.
10152         (write_all_headers) New function.
10153         (determine_layout) Removed calls to write_header().
10154         Calls blank_line() before and after write_fallback_headers().
10155
10156         * recode.c: (recode_trns_free) Only attempts to free head->map if
10157         non-NULL.
10158
10159         * sfm-read.c: (read_variables) Allows `#' at beginning of system
10160         file variable names but gives a warning.  Sets `left' based on
10161         first character being/not being `#'.  On lossage frees dict->var.
10162
10163         * som-high.c: (som_draw_title) Simplified title formatting.
10164
10165         * vfm.c: (dump_splits) Fixed and changed splits formatting.
10166
10167 Thu Jun  5 22:51:15 1997  Ben Pfaff  <blp@gnu.org>
10168
10169         * autorecode.c: (cmd_autorecode) Sets h_trans to NULL at
10170         beginning.  Frees v_src, v_dest on successful exit.  Frees
10171         h_trans[*], h_trans on lossage.
10172         (recode) Frees h_trans[*], h_trans.
10173
10174         * dfm.c: (dfm_close) Formatting change.
10175         (open_inline_file) Now passed a dfm_fhuser_ext to initialize; no
10176         longer allocates its own in inline_file.
10177         (open_file_r) Passes the local dfm_fhuser_ext to
10178         open_inline_file().
10179         (open_file_w) Message fix. 
10180         (read_record) Buffer reallocation strategy changed.  Frees
10181         ext->line even in inline_file to prevent leaks.
10182         (dfm_put_record) Fixed bug where `ext' was cached before the file
10183         was opened and thus it would be NULL when the file really was
10184         open.
10185         (cmd_begin_data) Sets up inline_file basics itself, then calls
10186         open_inline_file() for the dfm_fhuser_ext.  Formatting fix.
10187
10188         * list.q: (write_line) Formatting fix.
10189         (clean_up) Minor strategy change.  Sets proportional font after
10190         finishing cleanup.
10191         (determine_layout) Sets fixed font before writing regular headers,
10192         or after writing fallback headers.
10193
10194         * modify-vars.c: (cmd_modify_vars) Frees variable lists for DROP
10195         and KEEP vars after using them.
10196
10197         * postscript.c: (ps_init_driver) Frees x->family.
10198         (postopen) When loading fonts, free the temporary font name buffer
10199         after using it.
10200         (ps_text_set_font_by_position) Free temporary font name buffer
10201         after using it.
10202         (text) Fixed code that calculated `lig' so that `lig' always gets
10203         initialized.  Formatting fix.
10204
10205         * som-low.c: (get_cell_size, som_get_table_size) `prop_height' ->
10206         `font_height'.
10207         [GLOBAL_DEBUGGIGN] (check_table) Use arena_alloc() to allocate
10208         cells, not xmalloc(), so that the cells will get destroyed
10209         automatically.
10210
10211         * sysfile-info.c: (cmd_sysfile_info) Frees the dictionary after
10212         using it.
10213
10214 Tue Jun  3 23:33:22 1997  Ben Pfaff  <blp@gnu.org>
10215
10216         * ascii.c: (ascii_text_draw) Always sets metrics for strings that
10217         are drawn.
10218
10219         * dfm.c: Comment fix.
10220
10221         * list.q: Comment fixes.  Include somP.h.  Removed static vars
10222         table, n_columns, n_rows, part.  New struct list_ext.  New static
10223         var line_buf.
10224         (n_lines_remaining, n_chars_width, write_line) New functions.
10225         (cmd_list, list_cases) Rewritten.
10226         (begin_row, end_row, flush_table) Removed.
10227         (write_header, clean_up, write_varname, write_fallback_headers,
10228         determine_layout) New functions.
10229
10230         * output.c: (outp_iterate_enabled_drivers) Minor reformat.
10231
10232         * output.h: Comment fix.
10233
10234         * postscript.c: Comment fix.
10235         (struct ps_driver_ext) Removed prop_size, fixed_size members;
10236         added font_size.  All references changed.
10237         (ps_init_driver) Initializes font_size.  Simplified space checking
10238         code.
10239         (static var option_tab[]) Removed prop-size, fixed-size; added
10240         font-size.
10241         (ps_option) Handles font_size.
10242
10243         * som-high.c: Moved prototypes into somP.h.
10244         (som_init_driver) New function.
10245         (som_submit_table) Moved some code into new function
10246         som_init_driver().
10247         (build_target) Moved some code into new function
10248         som_internal_eject_page().
10249         (som_eject_page) Uses som_internal_eject_page().
10250         (som_internal_eject_page) New function.
10251
10252         * som-low.c: Moved prototypes into somP.h.
10253
10254         * som.h: Formatting fixes.
10255
10256         * somP.h: (struct som_driver_ext) Removed em_width;
10257         added prop_em_width, fixed_width.
10258
10259 Mon Jun  2 14:25:25 1997  Ben Pfaff  <blp@gnu.org>
10260
10261         * Makefile.am: Added `localedir' definition.  Added
10262         -DLOCALEDIR="..." to DEFS.  Added -I. to INCLUDES.
10263
10264         * ascii.c: (macro draw_line) Fixed capitalization.
10265
10266         * ascii.c, autorecode.c, cases.c, cmdline.c, command.c, common.c,
10267         compute.c, count.c, data-in.c, data-list.c, data-out.c,
10268         descript.q, dfm.c, display.c, do-if.c, error.c, expr-evl.c,
10269         expr-opt.c, expr-prs.c, file-handle.q, file-type.c, filename.c,
10270         formats.c, frequencies.q, get.c, getline.c, glob.c, groff-font.c,
10271         hash.c, heap.c, include.c, inpt-pgm.c, lexer.c, list.q, loop.c,
10272         main.c, mis-val.c, misc.c, modify-vars.c, numeric.c, output.c,
10273         postscript.c, print.c, q2c.c, recode.c, rename-vars.c, repeat.c,
10274         sample.c, sel-if.c, sfm-read.c, sfm-write.c, sfmP.h, som-frnt.c,
10275         som-high.c, som-low.c, sort.c, split-file.c, sysfile-info.c,
10276         temporary.c, title.c, tokens.h, val-labs.c, var-labs.c,
10277         vars-atr.c, vars-prs.c, vector.c, vfm.c, weight.c: Marked strings
10278         for internationlization.
10279
10280         * glob.c: [HAVE_LOCALE_H] Includes locale.h.
10281
10282 Sun Jun  1 23:31:18 1997  Ben Pfaff  <blp@gnu.org>
10283
10284         * do-if.c, sort.c, val-labs.c: Comment fixes.
10285
10286         * glob.c: (init_glob) Uncommented, updated i18n support.
10287         
10288         * arena.c, ascii.c, data-in.c, descript.q, error.c, expr-evl.c,
10289         expr-opt.c, expr-prs.c, filename.c, frequencies.q, groff-font.c,
10290         output.c, postscript.c, sfm-read.c, som-high.c, vars-prs.c: Made
10291         the declarations of macros taking arguments a lot nicer.
10292
10293 Sun Jun  1 17:22:04 1997  Ben Pfaff  <blp@gnu.org>
10294
10295         * error.h: Removed CE, CW aliases for SE, SW.
10296
10297         * q2c.c: Removed explicit streq() definition since it's duplicated
10298         in str.h.
10299         
10300         * approx.h, error.h, font.h, hash.h, misc.h, output.h, somP.h,
10301         stats.h, str.h, tokens.h: Made the declarations of macros taking
10302         arguments a lot nicer-looking of <pinard@iro.umontreal.ca>.
10303         Comment fixes.
10304
10305 Sun Jun  1 12:02:06 1997  Ben Pfaff  <blp@gnu.org>
10306
10307         * cmdline.c: Comment fixes.
10308         (pick_compat) Changed return type to int.  Now, instead of setting
10309         glob var `compat' to the emulation, returns the emulation.  All
10310         references changed.
10311         (parse_command_line) Added terminating null to end of
10312         `long_options' array definition.
10313         (pre_syntax_message) Fixes.
10314         (usage) Shows the default emulation in the syntax message by
10315         calling pick_compat().
10316
10317         * getline.c: (getl_add_include_dir) Separates paths with
10318         PATH_DELIMITER, not DIR_SEPARATOR.
10319
10320         * glob.c: (init_glob) Fixed references to DEFAULT_VER_PCP40,
10321         DEFAULT_VER_WIN61, DEFAULT_VER_X40.
10322
10323         * output.c: (outp_configure_macro) Make earlier definitions for a
10324         particular key override later ones for the same key.
10325         
10326 Fri May 30 19:40:49 1997  Ben Pfaff  <blp@gnu.org>
10327
10328         * ascii.c: Comment fixes.
10329
10330         * output.c: (outp_get_paper_size)
10331         s/STAT_OUTPUT_INIT_FILE/STAT_OUTPUT_PAPERSIZE_FILE/.
10332         
10333 Sun May 25 22:34:07 1997  Ben Pfaff  <blp@gnu.org>
10334
10335         * ascii.c, postscript.c, sfm-read.c, sfm-write.c, sort.c: Include
10336         <errno.h>.  GNU libc 2 enforces this!
10337
10338         * command.c: (parse_cmd) Fixed problem with `else' clause being
10339         paired with wrong `if'.  Comment fix.
10340
10341 Fri May  9 16:53:52 1997  Ben Pfaff  <blp@gnu.org>
10342
10343         * getline.c: [!HAVE_LIBREADLINE] (read_console) Changed
10344         blp_getline() to getline().
10345
10346         * output.c: (outp_eval_dimension) Changed the fix from last time;
10347         there was no variable `a'.
10348
10349         * q2c.c: (get_line) Fixed boundary condition overrun bug.
10350
10351 Mon May  5 21:58:22 1997  Ben Pfaff  <blp@gnu.org>
10352
10353         * output.c: (outp_evaluate_dimension) Fixed handling of negative
10354         numbers having fractional parts.  Added case of a fraction without
10355         a whole-number part.
10356
10357 Fri May  2 22:08:05 1997  Ben Pfaff  <blp@gnu.org>
10358
10359         * ascii.c: (ascii_text_get_font_position) Removed.
10360
10361         * expr.h, exprP.h: Disabled debugging.
10362
10363         * groff-font.c, postscript.c: Changed `groff' to `Groff' in
10364         several places.
10365
10366         * output.h: (struct outp_class_struct) Removed
10367         text_get_font_position method.  All references deleted.
10368
10369         * postscript.c: Big change here.  Fontmaps were completely
10370         eliminated because of a change in philosophy.  Comment fixes.
10371         (struct ps_fontmap, ps2dit_map, font_family, dit2family_map)
10372         Removed.
10373         (struct ps_driver_ext) `position', `fontmap', `prop_name',
10374         `fixed_name' members removed.  New members `prop_family',
10375         `fixed_family'.  `family' member changed to type char *.
10376         (static var ps_fontmaps) Removed.
10377         () Removed.
10378         (ps_init_driver) Removed obsolete references, updated.
10379         Initializes `translate_x', `translate_y', `scale'.  Doesn't read
10380         fontmap, of course.  Refers to font names through internal_name
10381         rather than subversive means.  Frees proper items.
10382         (static var option_tab[]) Removed `fontmap-file' option; renamed
10383         `fixed-font', `prop-font'.
10384         (ps_option) Corresponds to option_tab[].
10385         (read_fontmap, release_fontmap, ps_to_dit, compare_ps2dit,
10386         hash_ps2dit, compare_dit2family, hash_dit2family, compare_family,
10387         hash_family) Removed.
10388         (postopen) Generates font names from family names.  Gets
10389         PostScript font name properly.  New prologue file comment `!!!'
10390         style.
10391         (ps_open_page) Adds translate_x, translate_y to BP prologue
10392         function; gives SF argument floating-point format.
10393         (ps_text_set_font_by_name) Doesn't try to map PostScript->Groff
10394         font name.  Doesn't change font family.
10395         (ps_text_set_font_by_position) Generates Groff font name from font
10396         family name instead of through table lookup.
10397         (ps_text_set_font_by_family) Renamed `ps_text_set_font_family',
10398         all references changed.  Reduced to simple string assignment.
10399         (ps_get_font_name) Removed.
10400         (ps_get_font_family) Reduced to string return.
10401         (text) Doesn't save `position' since it no longer exists.  Ugly
10402         kluge to save font family--fix soon?
10403         (load_font) Removed PostScript name argument.
10404         
10405 Thu May  1 14:58:59 1997  Ben Pfaff  <blp@gnu.org>
10406
10407         * postscript.c: Comment fix.
10408         (ps_open_page) Puts scale factor in PostScript output.
10409         
10410 Sat Apr 26 11:49:32 1997  Ben Pfaff  <blp@gnu.org>
10411
10412         * Makefile.am: Distcleans q2c.
10413
10414 Wed Apr 23 21:33:48 1997  Ben Pfaff  <blp@gnu.org>
10415
10416         * ascii.c: (delineate) Sets text size even if width is zero.
10417
10418         * command.c: Comment fix.
10419         (static var cmd_table[]) Re-enabled EVALUATE command.
10420         (parse_cmd) Lotsa comment fixes.  Fixed infinite loop in parsing
10421         of comments in script files.  Now more liberal on criteria for
10422         performing a state transition--if *anything* happened correctly,
10423         not just if *everything* happened correctly.
10424
10425         * data-out.c: (convert_F) Comment fix.  Why in the fsck does
10426         Checker segfault on formatting large numbers and why in the fsck
10427         hadn't I noticed this before?
10428
10429         * expr.h, exprP.h: No longer turn off GLOBAL_DEBUGGING.
10430
10431         * list.q: (cmd_list) Commented out the actual output routine
10432         because of various problems.  Probably will abandon the idea of
10433         using the general `crushed tables' for the LIST procedure.
10434
10435         * temporary.c: (restore_dictionary) Sets var_by_name to NULL after
10436         clearing it.  Allocates a new var_by_name dictionary before trying
10437         to add members to it.
10438
10439         * vars-atr.c: [DEBUGGING] (dump_one_var_node) Removed argument
10440         `sib'.  Changed type of `node' argument.
10441         [DEBUGGING] (dump_var_tree) Replaced avlwalk() with
10442         avl_walk_inorder().
10443         (clear_variable) Only dumps the var tree if var_by_name non-NULL.
10444         [DEBUGGING] Only deletes the variable from var_by_name if that var
10445         non-NULL.
10446
10447 Fri Apr 18 16:48:41 1997  Ben Pfaff  <blp@gnu.org>
10448
10449         * Makefile.am: Added include files to SOURCES.  Added
10450         frequencies.q to EXTRA_DIST.  Removed include/ from INCLUDES.  Now
10451         includes rules for q2c.  Added `boast' target.
10452
10453 Fri Apr 18 15:42:22 1997  Ben Pfaff  <blp@gnu.org>
10454
10455         * Makefile.am: Maintainer-clean Makefile.in.
10456         
10457         * Makefile.am: Fixed redundant EXTRA_DIST line.
10458
10459         * ascii.c: Comment fixes.
10460         (ascii_line_vert) Fixed overly aggressive range check.
10461
10462         * display.c: Removed dead code.
10463
10464         * list.q: Turn debugging on.
10465         (flush_table) New debug code.
10466
10467         * sfm-read.c: (read_value_labels) malloc's the structure before
10468         trying to assign to its members.
10469
10470         * sfm-write.c: Comment fix.
10471
10472         * som-high.c: (som_submit_table) Sets som.t and som.d on each call
10473         to output_table().
10474         (output_table) No arguments anymore--gets them through `som'
10475         global.  New debug code.  In crushed tables, now sets `htv' as
10476         well as `hv' to avoid bad confusion later.
10477         (dump_crush_page) New debug code.
10478
10479         * som-low.c: (som_dump_crush_page) New debug code.
10480
10481 Thu Mar 27 01:11:29 1997  Ben Pfaff  <blp@gnu.org>
10482
10483         All source files: Broke long lines into multiple lines.
10484         
10485         * ascii.c: (ascii_close_page) Uses host_system var in place of
10486         HOST_SYSTEM constant.
10487
10488         * cmdline.c: (var syntax_message[]) Broke into
10489         pre_syntax_message[] and post_syntax_message[].
10490         (usage) Outputs both parts, separated by driver list.
10491
10492         * error.h: Fixed broken formatting.
10493
10494         * expr-opt.c: (str_search, str_rsearch) New functions.
10495
10496         * misc.c: (blp_getdelim) Removed.  All references changed to
10497         `getdelim'.
10498         (str_search, str_rsearch) Removed.
10499         (memrmem) New function.
10500
10501         * misc.h: (blp_getline) Removed.  All reference changed to
10502         `getline'.
10503
10504         * stat.h: New file.
10505
10506         * filename.c: Includes "stat.h", not <sys/stat.h>.
10507         (blp_getenv) Uses host_system var instead of HOST_SYSTEM constant.
10508
10509         * output.c: (outp_list_classes) Changed output formatting.
10510
10511         * sfm-write.c: (write_header) Uses host_system var instead of
10512         HOST_SYSTEM constant.
10513         (write_rec_7_34) Extracts version numbers from the version string.
10514         Untested.
10515
10516         * sort.c: Includes "stat.h", not <sys/stat.h>.
10517
10518         * str.c: (strcasecmp) Removed.
10519
10520         * title.c: (cmd_document) Uses host_system var instead of
10521         HOST_SYSTEM constant.
10522
10523         * version.c: Generated on-the-fly by the Makefile instead of being
10524         static.
10525
10526         * str.h: Comment fixes.  Doesn't substitute for missing memmove or
10527         memcpy.
10528         [!HAVE_STRNCASECMP] Declares strncasecmp().
10529
10530         * version.h: Removed stray character.  Comment fixes.
10531         (vars host_system, build_system) New vars.
10532
10533 Mon Mar 24 21:47:31 1997  Ben Pfaff  <blp@gnu.org>
10534
10535         * Most source files: Changed formatting of copyright notice; fixed
10536         FSF address; reformatted to better conform to GNU standards;
10537         comment fixes.  Added markups to prevent GNU indent from messing
10538         up my beautiful formatting :-).
10539         
10540         * q2c.c: (get_line) Ignores lines that begin with `/* *INDENT' so
10541         that GNU indent markups can be passed through without problems.
10542
10543 Wed Feb 19 21:30:31 1997  Ben Pfaff  <blp@gnu.org>
10544
10545         * get.c: Turned off debugging.
10546
10547         * glob.c: (init_glob) Turned on save-file compression by default.
10548
10549         * sfm-write.c: (sfm_write_case) Fixed bug which resulted in less
10550         compression than was possible in save files.
10551
10552 Sun Feb 16 20:57:20 1997  Ben Pfaff  <blp@gnu.org>
10553
10554         * data-out.c: (convert_F) Comment fixes.  Debug message fixes.
10555
10556         * frequencies.q: Removed Fiasco extensions.  Updated calculation
10557         algorithms.  Polished output format. 
10558         (struct frq_info_struct) Removed members `max_degree', `min_n',
10559         all references removed.
10560         (macro frq_extensions) Removed.
10561         (static vars min_n, max_degree) Removed, all references removed.
10562         (internal_cmd_frequencies) Doesn't handle extensions.  Doesn't
10563         calculate `min_n', `max_degree'.
10564         (postcalc) Passes new arg to dump_statistics().
10565         (dump_full) Honor NOLABEL option.  Buggy?  Adds variable name
10566         title.
10567         (dump_condensed) Adds variable name title.
10568         (sum_freqs) Removed.
10569         (calc_stats) Updated calculation algorithm.
10570         (dump_statistics) Removed warning for too-few observations.
10571         Changed table formatting.  Adds variable name title if passed new
10572         arg is nonzero.
10573
10574         * output.h: Comment fix.
10575
10576         * recode.c, sample.c, sort.c: Disabled debug code.
10577
10578         * som-frnt.c: (som_set_value, som_set_float, som_set_text)
10579         Improved debug code.
10580
10581         * var.h: (enum series frq_*) Removed Fiasco extensions.
10582
10583 Sat Feb 15 21:26:53 1997  Ben Pfaff  <blp@gnu.org>
10584
10585         * command.c: Added PROCESS IF to command table.
10586
10587         * Lots & lots of places, removed checks for NULLs preceding calls
10588         to free_expression(), which itself checks.
10589
10590         * descript.q: Removed Fiasco extensions.  Removed optimizations
10591         for non-weighted active files.  Implemented some options.
10592         Finished polishing output format.  Comment fixes.  Merged
10593         `descript.g'.
10594         (static vars n_glob_miss_list, n_glob_valid, n_glob_missing,
10595         max_degree, min_n) Removed.
10596         (macro dsc_extensions) Removed.
10597         (struct dsc_info_struct) Removed `min_n' member, all references
10598         fixed.
10599         (internal_cmd_descriptives) Removed calculation of min_n,
10600         max_degree.  Only deals with one `calc' routine instead of two
10601         flavors.
10602         (precalc) Eliminated redundancy.  Updated for changes to
10603         descriptives_proc structure.
10604         (calc) Moved here from `descript.g'.  Rewritten to calculate
10605         statistics via `moments about the mean' rather than by summing,
10606         summing squares, summing cubes, and so on.
10607         (postcalc) Rewritten for new-style statistical calculation.
10608         (display) Removed support for displaying variables across rows.
10609         No longer crushes the descriptives table.  Removed ancient code.
10610         Added display of N, by variable and listwise.
10611
10612         * descript.g: Removed; merged into `descript.q'.
10613
10614         * expr-evl.c: (evaluate_expression) Now returns a double.  For
10615         numeric results, it returns the result as well as storing it in
10616         the passed `value' structure if non-NULL.  For string results it
10617         just returns 0.0 and it must be passed non-NULL.  Many references
10618         to this function were optimized by use of this change, especially
10619         but not exclusively in `compute.c'.
10620
10621         * frequencies.g: Comment fix.
10622
10623         * glob.c: (glob var process_if_expr) New global var.
10624
10625         * postscript.c: (static var option_tab[]) Corrected entry for
10626         `fixed_size'.
10627         (postopen) Sets x->size to x->prop_size.
10628         (ps_text_set_font_by_name) Sets font size as well as typeface for
10629         PROP and FIXED fonts.
10630         
10631         * sel-if.c: (cmd_process_if) New function.
10632
10633         * sfm-write.c: (struct sfm_fhuser_ext) New member `n_cases'.
10634         (sfm_write_dictionary) Sets `n_cases' to 0.
10635         (sfm_write_case) Increments `n_cases'.
10636         (sfm_close) Attempts to seek the system file back to the header
10637         and write the number of cases in its proper slot.
10638
10639         * som-frnt.c: (som_insert_table) Masks off expansion options since
10640         only SOPT_X_NORM seems to work sensibly.
10641
10642         * som-low.c: (get_cell_size) Fixed bug when a table cell was sized
10643         with a `fixed' value of 2.
10644
10645         * sort.c: (cmd_sort_cases) Cancels PROCESS IF.
10646
10647         * sysfile-info.c: (cmd_sysfile_info) Doesn't display more than 10
10648         value labels; uses SOPT_NONE instead of SOPT_X_BOTH.
10649
10650         * var.h: (enum series dsc_*) Removed Fiasco extensions.
10651         (struct descriptives_proc) Removed `miss_noweight'; new members
10652         `X_bar', `M2', `M3', `M4', `min', `max'.
10653
10654         * vars-atr.c: (discard_variables) Cancels PROCESS IF.
10655
10656         * vfm.c: (close_active_file) Cancels PROCESS IF.
10657         (write_case) Doesn't process cases unselected by PROCESS IF.
10658
10659 Fri Feb 14 23:32:58 1997  Ben Pfaff  <blp@gnu.org>
10660
10661         * glob.c: (glob var err) Removed.
10662
10663         * sysfile-info.c: (cmd_sysfile_info) When adjusting table size,
10664         doesn't have to take into account number of value labels since
10665         they're in a subtable anyway.  Also, doesn't display more than 10
10666         value labels since we can't yet break pages in subtables.
10667
10668 Tue Feb  4 15:15:50 1997  Ben Pfaff  <blp@gnu.org>
10669
10670         * som-frnt.c: (som_change_table_size) Simple change for elegance
10671         that shouldn't change behavior.
10672         (som_set_value) Comment fix.
10673
10674         * som-high.c: (som_submit_table) Message fix.
10675
10676 Wed Jan 22 21:54:00 1997  Ben Pfaff  <blp@gnu.org>
10677
10678         * command.c: Added SYSFILE INFO to command table.
10679
10680         * file-handle.q: (fh_handle_filename) New function.
10681
10682         * get.c: (save_trns_proc) Fixed a bug in padding of output data
10683         with spaces.
10684
10685         * main.c: (parse) New return value for command functions, -3.
10686
10687         * misc.h: Comment fix.
10688
10689         * output.h: Comment fixes.
10690         (macro COMPONENTS) Removed.
10691
10692         * postscript.c: (write_text) Modified literal_chars[] so that `('
10693         and ')' are not written to the output in strings as literals.
10694
10695         * sfm-read.c: (sfm_read_dictionary) New argument.
10696         (read_header) New argument.  Sets the information structure's
10697         values from the header information.  
10698         (read_variables) [__CHECKER__] Redefines isalnum()--some sort of
10699         bizarre Checker problem, I guess.
10700         (read_variables) Proper cleanup on lossage.
10701
10702         * sfm.h: (struct sfm_read_info) New struct for use by
10703         sfm_read_dictionary().
10704
10705         * som-frnt.c: (som_create_table) New argument CREATE_FLAGS,
10706         currently used just for tables that can be dynamically resized and
10707         thus have to be allocated with arena_malloc() instead of
10708         arena_alloc().  All references changed.
10709         (som_change_table_size) New function.
10710         (som_insert_table) Bugfix: now inserts `cell', not `c'!
10711
10712         * som-high.c: [GLOBAL_DEBUGGING] (check_table) Moved to som-low.c.
10713         (som_submit_table) [GLOBAL_DEBUGGING] Doesn't call check_table()
10714         any more.
10715
10716         * som-low.c: (draw_cell) Calls draw_table_cell() for SCON_TABLE
10717         cells.
10718         (draw_intersection) Now takes an argument specifying the table in
10719         question.  All references changed.
10720         (draw_table_cell) New function.
10721         (som_get_table_size) [GLOBAL_DEBUGGING] Calls check_table().
10722         (som_get_table_size) Many nice new explanatory comments.
10723         [GLOBAL_DEBUGGING] (check_table) Moved here from som-high.c.
10724
10725         * som.h: New enum series SOM_CREATE_* for use as create flags with
10726         som_create_table().
10727
10728         * str.h: Moved a comment here from TODO.
10729
10730         * sysfile-info.c: New file.  Reference implementation.
10731
10732 Sun Jan 19 14:22:11 1997  Ben Pfaff  <blp@gnu.org>
10733
10734         * command.c: Added RENAME VARIABLES to table of commands.
10735
10736         * data-in.c: (dls_error) Sets `cust_field'.
10737         (parse_N) Message fix.
10738         (parse_day_count) New function.
10739         (to_roman) Never outputs VX as a `short form' of V.
10740         (parse_month) Fixed parsing of Roman numerals.
10741         (parse_trailer) Message fix.
10742         (parse_DATE, parse_ADATE, parse_EDATE, parse_SDATE, parse_JDATE,
10743         parse_QYR, parse_MOYR, parse_WKYR, parse_DTIME) Issue a message if
10744         the date is invalid.
10745         (parse_SDATE) Fixed swapped day, year.
10746         (parse_JDATE) Fixed bug for dates in 1582.
10747         (parse_DTIME) Allows days not between 1 and 31.
10748         (parse_numeric) Makes local copy of f.type for easier usage.
10749         FMT_DOLLAR fixed.
10750
10751         * data-out.c: (convert_F) When outputting as scientific, properly
10752         sets f.type as fp->type.
10753         (insert_commas) Fixed operator precedence problem with setting of
10754         nitems.  Changed strcpy to memcpy (no null terminator). 
10755         (convert_date) Fixed FMT_JDATE: added 1900 to year.
10756         (convert_CCx) Essentially rewritten, but now it works.
10757
10758         * display.c: (cmd_display) Added DISPLAY FILE LABEL (undocumented
10759         feature of Fiasco).
10760         (display_documents) Implemented.
10761
10762         * error.c: (glob var cust_field) New var.
10763         (vmsg) Displays cust_field as part of message classes DE and DW.
10764
10765         * formats.c: (debug_print) Fixed to compile under updated
10766         dictionary format.
10767
10768         * get.c: (cmd_get, cmd_save_internal) Close file handle on
10769         failure.
10770
10771         * misc.c: (parse_format_specifier) Formatting fix.
10772
10773         * modify-vars.c: (struct var_modification) Renamed `n_reorder' as
10774         `n_rename' for clarity.
10775         (cmd_modify_vars) Initializes `forward' and `positional' at
10776         appropriate times.  Frees lists of vars to rename on failure.
10777         Comment fix.  Frees memory on success.  
10778         (rearrange_dict) Simplified `for' loop condition.
10779
10780         * rename-vars.c: New file (reference implementation).
10781         
10782         * set.q: (internal_cmd_set) Fixed `emu' test condition.
10783
10784         * sfm-read.c: (read_header) File label is created only if file
10785         label in file is not blank.
10786         (read_variables) Initializes `dict' local variable.
10787         (read_documents) Proper behavior on lossage.
10788
10789         * sfm-write.c: (write_header) Doesn't blank out the file label
10790         (why was this here to begin with?!)
10791
10792         * temporary.c: (save_dictionary) File label is copied only if
10793         non-NULL.  Doesn't try to xstrdup() dictionary documents.
10794         Adapted so as to not irritate Checker.
10795         (free_dictionary) Only destroys var_by_name if non-NULL.
10796
10797         * title.c: (cmd_file_label) Doesn't skip FILE, LABEL tokens.
10798         (cmd_document) Doesn't skip DOCUMENT token.  Adds some header
10799         lines to the document, indents the document.  Also, it works now.
10800         (add_document_line) New function.
10801
10802         * var.h: (struct dictionary) Reordering.
10803
10804         * vars-prs.c: (parse_variables) On lossage, only local_free()'s
10805         bits if it was allocated to begin with.
10806
10807 Thu Jan 16 13:08:57 1997  Ben Pfaff  <blp@gnu.org>
10808
10809         * command.c: Added MODIFY VARS to list of commands.
10810
10811         * configure.in: Updated custom macros for autoconf 2.12.  Removed
10812         mmap reference; fixed termcap library reference.
10813
10814         * display.c: (display_variables) Fixed a few bugs although it's
10815         still not well written.
10816
10817         * error.c: [!__CHECKER__] (chkr_disp_call_chain) New function.
10818         (induce_segfault) Calls chkr_disp_call_chain() instead of
10819         inducing an actual SIGSEGV.
10820
10821         * expr-opt.c: (evaluate_tree) Swapped order of arguments to
10822         str_search() and str_rsearch().  Fixed tests for matches on
10823         OP_INDEX and OP_RINDEX.
10824
10825         * filename.c: (good_getcwd) Removed as the new libc for Checker
10826         doesn't contain this bug, apparently.
10827
10828         * misc.c: (str_search, str_rsearch) Changed order of arguments for
10829         consistency with GNU memmem.
10830         (blp_getdelim) Changed `len' from `int' to `size_t'.
10831
10832         * modify-vars.c: Reference implementation.
10833
10834         * som-frnt.c: (zero_length) New global var.
10835         (som_create_table) Message fix.
10836
10837         * som.h: Added gcc attributions to som_set_text(),
10838         som_output_text() prototypes.  blank_line() refers to
10839         zero_length[] instead of a literal null string to suppress gcc
10840         warnings.
10841
10842         * sort.c: (do_external_sort) Fixed fencepost error on lossage.
10843         (allocate_cases) Decrements x_max so the last element of x[] can
10844         be used by the algorithm.
10845
10846         * var.h: Changed minor details of `variable' declaration.  
10847         (struct modify_vars_proc) New struct.
10848         (struct variable) Added field p.mfv.
10849
10850         * vars-atr.c: Comment fix.
10851
10852         * vars-prs.c: (fill_all_vars) More optimal implementation.
10853
10854         * vfm.c: (dump_splits) Sets the last byte of temp_buf to a null
10855         character, which it shouldn't have to do but printf() seems to
10856         read the null byte even though I supply a maximum length...
10857
10858 Fri Jan 10 20:22:08 1997  Ben Pfaff  <blp@gnu.org>
10859
10860         * command.c: Removed command alias X for QUIT.
10861         (parse_cmd) Fixed comment parsing.
10862
10863         * dfm.c: (struct dfm_fhuser_ext) Fields `len', `size' are now of
10864         type size_t.
10865         (read_record) Fixed references to len, size.
10866         (dfm_get_record) Restructured.
10867
10868         * file-handle.h: (struct file_handle) Field `lrecl' now of type
10869         size_t.
10870
10871         * file-handle.q: (internal_cmd_file_handle) Checks for nonpositive
10872         record length.
10873
10874         * modify-vars.c: New file.  Not complete.
10875         
10876         * set.q: (set_ccx) Fixed operator precedence problem regarding ^
10877         and ==.
10878
10879         * sfm-read.c: (bswap_flt64, read_header, write_variable) Fixed
10880         problems caused by int/size_t differences.
10881
10882         * sort.c: (output_record, merge_once) Cast `size_t's to `int's in
10883         appropriate spots.
10884
10885         * str.c: (strcasecmp) Fixed bug that cropped up when the strings
10886         being compared were of equal length.
10887
10888 Thu Jan  2 19:08:23 1997  Ben Pfaff  <blp@gnu.org>
10889
10890         * command.c: Added DOCUMENT, DROP DOCUMENTS, FILE LABEL.
10891
10892         * lexer.c: (get_dotted_rest_of_line) New function.
10893
10894         * sel-if.c: (cmd_filter) Cannot choose string or scratch variables
10895         as filters.
10896
10897         * sfm-read.c: (sfm_read_dictionary) Calls read_documents() to read
10898         type 6 records.  Frees the dictionary properly.
10899         (read_header) Initializes the dictionary instead of letting
10900         read_variables() do it.  Sets the dictionary file label from the
10901         system file.
10902         (read_documents) New function.
10903
10904         * sfm-write.c: (sfm_write_dictionary) Calls write_documents() to
10905         write type 6 record if appropriate.
10906         (write_header) Writes file label from dictionary.
10907         (write_documents) New function.
10908
10909         * temporary.c: (save_dictionary, restore_dictionary,
10910         free_dictionary) Properly handle new fields in dictionary struct.
10911
10912         * title.c: (get_title) Returns after failure().
10913         (cmd_file_label, cmd_document, cmd_drop_documents) New functions
10914         for new commands FILE LABEL, DOCUMENT, DROP DOCUMENTS.  Untested.
10915
10916         * var.h: (struct dictionary) New fields `label', `n_documents',
10917         `documents'.
10918
10919 Wed Jan  1 22:08:10 1997  Ben Pfaff  <blp@gnu.org>
10920
10921         * command.c: Added FILTER to list of commands.
10922
10923         * frequencies.g: [WEIGHTING] Removed test for weighting!=-1 since
10924         it's always true.
10925
10926         * get.c: (cmd_save_internal) Removed weighting code since it's now
10927         handled by sfm-write.c.  Properly commented out debug code.
10928
10929         * glob.c: (glob var weighting) Removed.
10930
10931         * sel-if.c: Comment fixes.
10932         (cmd_filter) New function.
10933
10934         * sfm-read.c: (struct sfm_fhuser_ext) New field `weight_index'.
10935         (sfm_read_dictionary) Sets weighting variable direct in the
10936         created dictionary now.  (Apparently we previously didn't support
10937         weighting on GET?)
10938         (read_header) Sets weight_index field in sfm_fhuser_ext from
10939         header read from disk.
10940
10941         * sfm-write.c: (sfm_write_dictionary) Comment fix.
10942         (write_header) Now sets the weighting in the header from the
10943         passed primary dictionary instead of from the sfm_write_info.
10944
10945         * sfm.h: (struct sfm_write_info) Removed field `weight'.
10946
10947         * som-high.c: (dump_crush_table) Fixed a couple of assertions that
10948         broke on boundary conditions.
10949
10950         * var.h: (struct dictionary) New fields `weight_var',
10951         `weight_index', and `filter_var'.
10952         (glob var weighting) Removed.  This is now part of struct
10953         dictionary.  All references changed; the less mechanical changes
10954         are described above.
10955
10956         * vars-atr.c: (find_dict_variable) New function.
10957
10958         * vfm.c: (static var filter_index) New variable.
10959         (open_active_file) Initializes filter_index from default_dict.
10960         (write_case) Calls proc_func() only if the filter variable is
10961         nonzero; this implements FILTER behavior.
10962
10963         * weight.c: (static var weight_varname) Removed.
10964         (cmd_weight) Modified default_dict instead of glob vars.
10965         (update_weighting) Changed the signature to modify a dictionary
10966         instead of glob vars.  Now returns the weighting variable.
10967         (get_weighting_variable) Removed; its function is absorbed by
10968         update_weighting().
10969         (stop_weighting) Operates on a dictionary now.
10970
10971 Wed Jan  1 17:00:59 1997  Ben Pfaff  <blp@gnu.org>
10972
10973         * sort.c: Removed debugging info from messages.
10974         (do_external_sort) Cleans up after itself by deleting the
10975         temporary directory on failure.  (On success it is deleted by the
10976         input program.)
10977         (allocate_cases) Removed debug code.  Added clean up code.
10978         (output_record) Removed debug code.
10979         (merge) Added code to close all the input files that are currently
10980         open.  This is a likely location for bugs, because I'm not sure
10981         about boundary conditions.  Removed an unnecesary heap_delete().
10982         (merge_once) Removed input file "optimization" that in fact
10983         screwed up the rest of the code.  Message and comment fixes.
10984
10985 Sun Dec 29 21:36:48 1996  Ben Pfaff  <blp@gnu.org>
10986
10987         * error.c: [__CHECKER__] (induce_segfault) Flushes output streams.
10988
10989         * heap.c: (heap_delete) New argument.
10990
10991         * sort.c: Finished implementation of external sort.
10992
10993         * vfm.c: (read_from_disk) Returns after a disk error.
10994
10995 Sun Dec 22 23:10:39 1996  Ben Pfaff  <blp@gnu.org>
10996
10997         * sort.c: (static var state) Removed.
10998         (static vars max_handles, tmp_basename, tmp_extname,
10999         huffman_queue) New variables.
11000         (do_external_sort) Moved most code to new functions.
11001         Creates huffman_queue.
11002         (allocate_file_handles, allocate_cases) New functions.
11003         (static vars run_no, run_length, file_index, case_count) New
11004         variables. 
11005         (output_record) Returns success.  Now really writes to the output
11006         file.
11007         (begin_run, end_run) New functions.
11008         (write_initial_runs) Returns success.  Initializes run_no to -1.
11009         Calls begin_run(), end_run() at appropriate times.  Outputs debug
11010         messages.
11011         (write_to_sort_cases) Calls begin_run(), end_run() at appropriate
11012         times.
11013         (merge) New function.
11014
11015         * heap.c, heap.h: New files.  Hopefully in near-final form.
11016
11017 Sat Dec 21 21:51:04 1996  Ben Pfaff  <blp@gnu.org>
11018
11019         * glob.c: Added write_active_file to global vars.
11020
11021         * sort.c: Several new miscellaneous static variables.
11022         (cmd_sort_cases) Big comment fix.
11023         (perform_case_2) Renamed `do_external_sort' and completely
11024         rewritten.
11025         (case_2_proc_func) Removed.
11026         (output_record, write_initial_runs, write_to_sort_cases,
11027         compare_record) New functions.
11028
11029         * vfm.c: [DEBUGGING] (index_to_varname) Excised bit rot.
11030
11031 Tue Dec 17 18:57:59 1996  Ben Pfaff  <blp@gnu.org>
11032
11033         * sort.c: (perform_case_2) Changed the method for allocation of
11034         lots of memory--now allocates one case at a time in hopes that
11035         more cases can be allocated with heavily fragmented memory.
11036
11037         * var.h: (write_active_file) New global var.
11038
11039         * vfm.c: (procedure, close_active_file, write_case,
11040         SPLIT_FILE_procfunc) Now allow beginfunc, procfunc, and endfunc
11041         arguments to procedure() to be NULL.  All references to
11042         procedure() that made use of dummy functions were changed to NULL
11043         functions.
11044         (open_active_file) If write_active_file is non-NULL, the output
11045         device becomes DEV_PGM (a new enum).
11046         (close_active_file) Sets write_active_file to NULL.
11047         (read_from_memory) Comment fix.
11048         (record_case) Calls write_active_file() when the output device is
11049         DEV_PGM.
11050
11051 Sun Dec 15 15:32:16 1996  Ben Pfaff  <blp@gnu.org>
11052
11053         * sort.c: New file.
11054
11055         * autorecode.c: (cmd_autorecode) Fixed parsing of options.
11056         Fixed checking for duplicate varnames.
11057         (recode) xmalloc()'s the transformation instead of arena_alloc()'ing
11058         it.
11059         (autorecode_trns_free) Destroys hash tables for each recoding
11060         specification.
11061         (autorecode_proc_func) Compares NULL to *vpp instead of vpp.
11062
11063         * command.c: Added SORT CASES to cmd_table.
11064         (null_func, null_int_func) Prototyped.
11065
11066         * descript.g: (calc_weight, calc_noweight) Computes own case
11067         number now.
11068         
11069         * frequencies.q: (dump_statistics) Fixed problem with
11070         too-few-cases warning message.
11071
11072         * get.c: (cmd_save_internal) Handles weighting properly.
11073
11074         * hash.c: (hsh_dump) Output format changed.
11075         (force_hsh_insert) Actually works now, prototype changed.
11076
11077         * list.q: (static var case_num) New variable.
11078         (cmd_list) Initializes case_num.
11079         (list_cases) Increments case_num.
11080
11081         * var.h: Added definitions for SORT CASES.  Comment fixes.
11082
11083         * vfm.c: Some definitions moved to new file vfmP.h.  Comment
11084         fixes.  `active' renamed vfm_active, `rep' renamed
11085         vfm_replacement, all references changed.
11086         (procedure) The procfunc no longer receives a case number.  All
11087         references changed.
11088         (write_case) Subtle reordering.
11089         (SPLIT_FILE_procfunc) Counts cases differently.  Slightly less
11090         redundant.
11091
11092         * weight.c: (get_weighting_variable) New function.
11093
11094         * vfmP.h: New file with definitions from vfm.c.
11095
11096 Sat Dec 14 10:35:30 1996  Ben Pfaff  <blp@gnu.org>
11097
11098         * command.c: (FILE_TYPE_okay) Commented out some tests because
11099         they're clumsy and not yet needed.
11100
11101         * var.h: Most *_trns structures moved to their respective source
11102         files.  Some were moved into a new file, do-ifP.h.  Comment fixes.
11103         (union any_trns) Changed to a typedef for trns_header.
11104         (struct input_program_pgm) Removed.
11105
11106         * vars-prs.c: (parse_variables) Only local_free()'s bits if it
11107         was allocated in the first place.
11108
11109 Fri Dec 13 21:30:53 1996  Ben Pfaff  <blp@gnu.org>
11110
11111         * autorecode.c: New file.
11112         
11113         * command.c: Added AUTORECODE to command table; re-enabled SET.
11114
11115         * data-out.c: (convert_F) Handles infinities and NaNs properly.
11116
11117         * error.c: (vmsg) Comment fixes.
11118
11119         * hash.c: Comment fix.
11120         (hashpjw_d) New function.
11121         (hashpjw) Reimplemented as call to more general function
11122         hashpjw_d().
11123         (internal_comparison_fn) Initializes pointers properly.
11124         (hsh_sort) [GLOBAL_DEBUGGING] New debugging code.
11125         (force_hsh_insert, force_hsh_find) New debugging wrapper
11126         functions.
11127
11128         * main.c: (main) Message fix.
11129
11130         * output.c: (outp_read_devices) Message fix.
11131
11132         * set.q: Comment fixes.
11133         (custom_results) Implemented Wnd/X form of subcommand.
11134         (set_routing) New function.
11135         (internal_cmd_set) Implemented ERRORS, MESSAGES.
11136
11137         * settings.h: (SET_ROUTE_*) New enum series.
11138         (set_results) Renamed set_results_file, all references changed.
11139         (set_messages) Removed.
11140         (glob vars set_errors, set_messages, set_results) New vars.
11141
11142         * title.c: (get_title) Remembers to xstrdup() the result of
11143         get_rest_of_line().
11144
11145         * var.h: (arc_item, arc_spec, autorecode_trns) New structures for
11146         use by AUTORECODE.
11147         (union any_trns) New element `arc'.
11148
11149 Fri Dec  6 23:53:47 1996  Ben Pfaff  <blp@gnu.org>
11150
11151         * command.c: (output_line) Removed references to set_screen.
11152
11153         * error.c: (static var terminating) New var.
11154         (hcf) Sets terminating to 1.
11155         (vmsg) If terminating is nonzero, does not attempt to call hcf().
11156         This prevents an infinite loop if an error occurs within hcf().
11157
11158         * expr-evl.c: (evaluate_expression) [__CHECKER__] Replaced case
11159         statement circumlocution with `case 42000' trick.
11160         (evaluate_expression) New support for OP_STR_MIS.
11161
11162         * expr-opt.c: (evaluate_expression) [__CHECKER__] Replaced case
11163         statement circumlocution with `case 42000' trick.
11164         (dump_node) Handles OP_STR_MIS.
11165
11166         * expr-prs.c: (MISSING_func, SYSMIS_func) Rewrote to handle string
11167         variables exceptions.
11168         (parse_function) Message fix.
11169         (ops[]) Added OP_STR_MIS.
11170
11171         * expr.h: Added OP_STR_MIS to OP_* enum.  Comment fixes.
11172
11173         * exprP.h: [__CHECKER__] Removed case statement circumlocution.
11174
11175         * glob.c: Removed set_scrnfile glob var.
11176         (init_glob) set_errorbreak set to 0 by default.
11177
11178         * groff-font.c: Changed included files.
11179         (groff_read_font) Initializes font_arena local var correctly.
11180         (default_font) New function.
11181
11182         * output.c: Comment fixes.
11183         (glob var disabled_devices) New variable.
11184         [GLOBAL_DEBUGGING] (static var iterating_driver_list) New
11185         variable.
11186         [GLOBAL_DEBUGGING] (reentrancy) New function.
11187         [GLOBAL_DEBUGGING] (outp_read_devices, outp_done, find_driver,
11188         outp_iterate_enabled_drivers) Calls to reentrancy().
11189         (destroy_list) New function.
11190         (outp_done) Moved code to destroy_list().
11191         (parse_options) Parses `listing', `screen', `printer' options
11192         internally.
11193         (configure_driver) Sets new `device' member of driver.
11194         (outp_iterate_enabled_drivers, outp_enable_device) New functions.
11195
11196         * output.h: Comment fixes.  New enum series OUTP_DEV_*.
11197         (struct outp_driver_struct) New member `device'.
11198
11199         * postscript.c: (find_encoding_file) Doesn't display its own error
11200         messages.
11201         (default_encoding) New function.
11202         (switch_font) Calls default_encoding() if no encoding can be
11203         found.
11204         (text) Makes up a character metric if none exists for the desired
11205         character.
11206         (load_font) Properly copies a fallback filename.  Calls
11207         default_font() for a font if none at all are known.
11208
11209         * set.q: Comment fixes.  Removed OUTPUT subcommand.
11210         (custom_listing) Calls outp_enable_device() to enable/disable
11211         listing device.
11212         (turn_screen_on) Removed.
11213         (internal_cmd_set) Calls outp_enable_device() to enable/disable
11214         screen, printer devices.
11215
11216         * settings.h: Comment fixes.
11217         (glob vars set_output, set_printer, set_screen, set_scrnfile)
11218         Removed.
11219
11220         * som-high.c: (som_submit_table, som_eject_page) Use
11221         outp_iterate_enabled_drivers() instead of iterating
11222         outp_driver_list directly.
11223
11224 Wed Dec  4 21:34:17 1996  Ben Pfaff  <blp@gnu.org>
11225
11226         * data-in.c: (parse_EDATE, parse_SDATE) New functions.
11227         (parse_string_as_format) Handles new formats.
11228         (parse_numeric) Now handles DOT and PCT formats.
11229
11230         * data-out.c: (convert_E, convert_F, insert_commas) Handle DOT
11231         format now.
11232         (convert_date) Handle EDATE and SDATE formats.
11233         (convert_CCx) Now if there's not room for the currency characters,
11234         converts it as F format if it's positive instead of giving up
11235         quickly.  Also fixed save-and-restore bug with decimal point
11236         characters.  
11237         (convert_format_to_string) Handles new formats.
11238
11239         * misc.c: (formats[]) Added new formats.
11240         (convert_fmt_ItoO) Supports new formats.
11241
11242         * sfm-read.c: (parse_format_spec) Supports new formats.  Better
11243         data checking.  New argument, all references changed.
11244
11245         * sfm-write.c: (write_format_spec) Supports new formats.
11246
11247         * var.h: New formats FMT_DOT, FMT_PCT, FMT_EDATE, FMT_SDATE.
11248         Comment fixes.
11249
11250 Sun Dec  1 17:19:00 1996  Ben Pfaff  <blp@gnu.org>
11251
11252         * cmdline.c: Comment fixes.
11253         (parse_command_line) Changed return type to void.
11254
11255         * data-in.c: (parse_string_as_format) Added FMT_CCA...FMT_CCE to
11256         switch.
11257         (parse_numeric) Handles international numbers (comma as decimal
11258         point).  Some reformatting.
11259
11260         * data-list.c: (parse_free) Default output format is now
11261         set_format instead of hard-coded F8.2.
11262         (read_from_data_list_list) Emits error message on undefined data
11263         only if set_undefined is nonzero.
11264
11265         * data-out.c: (convert_E) Changes decimal point from period to
11266         comma if appropriate.  Restructured.  Better comments.
11267         (convert_F) Changes decimal point from period to comma if
11268         appropriate.
11269         (insert_commas) Major bug with handling of negative values fixed.
11270         Also, inserts periods instead of commas if appropriate.
11271         (convert_CCx) New function.
11272         (convert_format_to_string) Added FMT_CCA...FMT_CCE to switch.
11273         (num_to_string) Changed `.' to set_decimal.
11274
11275         * dfm.c: Comment fixes.
11276         (dfm_close) Frees ext->line even in inline_file.
11277         (open_inline_file) New function.
11278         (open_file_r) When opening the inline file: now properly
11279         recognizes `BEGIN DATA.' line, and calls open_inline_file() to
11280         finish up.
11281         (read_record) Calls fh_close_handle() instead of dfm_close() to
11282         close the inline file.  Makes a copy of the line getl_buf to avoid
11283         interlock problems.
11284         (dfm_get_record) Restructured.  Now checks the return value of
11285         open_file_r().
11286         (cmd_begin_data) Moved open code into open_inline_file().  Relaxed
11287         checking for use of inline file.  No longer tries to close inline
11288         file.
11289
11290         * error.c: (glob var error_already_flagged) New var.
11291         (vmsg) Message change.  Now checks max number of errors/warnings,
11292         acts on it.
11293
11294         * file-handle.q: (fh_handle_name) Now allows closing of
11295         inline_file.
11296         (fh_init_files) Reformatted.
11297
11298         * get.c: (trim_dictionary) Checks SCOMP option instead of COMP.
11299
11300         * getline.c: (getl_include) Fixed bug that popped up when called
11301         when file queue was empty.
11302         (read_console) Resets error_count, warning_count,
11303         error_already_flagged to zero.
11304
11305         * glob.c: Many changes to update list of variables.
11306         (init_compat_dependent) Now this function is called whenever
11307         `compat' changes.  It now sets set_seed only if it hasn't
11308         previously been referenced.  It now calls
11309         lex_init_compat_dependent().
11310
11311         * include.c: (cmd_include_at) Frees temporary buffer instead of
11312         line buffer.  
11313         (cmd_include) Doesn't make copy of include file name.
11314
11315         * lexer.c: Comment fixes.
11316         (init_lex) Moved some code into new function
11317         lex_init_compat_dependent().
11318         (lex_init_compat_dependent) New function.
11319         (hex_val) Simplified.
11320         (preprocess_line) Uses set_endcmd instead of hardcoding `.'.
11321
11322         * main.c: Comment fixes.
11323         (main) Reformatted.
11324
11325         * misc.c: (formats[]) Added FMT_CCA...FMT_CCE.
11326         (check_input_specifier) Disallows FMT_CCA...FMT_CCE.
11327         (convert_fmt_ItoO) Detects FMT_CCA...FMT_CCE.
11328         (setup_randomize) Sets set_seed_used.
11329
11330         * set.q: Comment fixes.
11331         (custom_results) Conditionalizes on `compat'.
11332         (custom_log) Calls custom_journal().
11333         (set_ccx) New function.
11334         (cmd_set) Calls init_compat_dependent() when `compat' changes.
11335         Calls set_ccx() to handle CCA...CCE.  Sets set_grouping
11336         when set_decimal changes.  Range-checks values for MITERATE,
11337         MNEST.  Message fixes.
11338
11339         * settings.h: Comment fixes.
11340         (struct set_cust_currency) New struct.
11341         (set_cc[], set_grouping, set_seed_used) New global vars.
11342
11343         * var.h: (FMT_CCA...FMT_CCE) New output formats.
11344         (FCAT_OUTPUT_ONLY) New FCAT_* constant.
11345
11346 Thu Nov 28 23:14:07 1996  Ben Pfaff  <blp@gnu.org>
11347
11348         * glob.c: Revised variables to correspond to settings.h.
11349         (init_glob) Initializes variables from settings.h properly.
11350
11351         * set.q: Began long-overdue major revision to correspond to new
11352         philosophy.  Most code changed. 
11353
11354         * settings.h: Mostly changed; reorganized, reordered, large new
11355         comment.
11356
11357 Thu Nov 28 19:46:10 1996  Ben Pfaff  <blp@gnu.org>
11358
11359         * get.c: (cmd_save_internal) No longer forces compression off.
11360
11361         * sfm-read.c: (read_compressed_data) If eof is reached when
11362         reading a new instruction octet, only signal error if we're in the
11363         middle of a case.
11364
11365         * sfm-write.c: (COMPRESSION_BIAS) New #define.
11366         (struct sfm_fhuser_ext) New member `end'.
11367         (write_header) Refers to COMPRESSION_BIAS instead of magic 100.0.
11368         (ensure_buf_space) New function.
11369         (sfm_write_case) Reimplemented in order to support compression.
11370         (sfm_close) Writes out the remaining contents of the compression
11371         buffer if any.
11372
11373 Wed Nov 27 23:18:35 1996  Ben Pfaff  <blp@gnu.org>
11374
11375         * command.c: Defined SAVE and XSAVE commands in command table.
11376
11377         * common.h: second_lowest_value is of type flt64, not double.
11378
11379         * file-handle.h: Comment fix.
11380
11381         * get.c: Comment fixes.
11382         (static var `trns') New.
11383         (save_write_case_func, save_trns_proc, save_trns_free, null_func,
11384         cmd_save_internal, cmd_save, cmd_xsave) New functions.
11385         (dict_delete_run) Clears the variables and frees them now.
11386         (trim_dictionary) Sets default for compression.
11387         On KEEP subcommand, frees deleted variables as well as clearing
11388         them.  Finally got the sense of the test for deleting all
11389         variables correct.
11390         [DEBUGGING] (dump_dict_variables) Message fix.
11391
11392         * glob.c: (init_glob) set_compression set to 1 by default.
11393
11394         * list.q: Properly #includes config.h.
11395
11396         * misc.h: New macro REM_RND_UP.
11397
11398         * settings.h: Comment fix.
11399
11400         * sfm-read.c: (structs sysfile_header, sysfile_format,
11401         sysfile_variable; inline function bswap_int32) Moved to new file
11402         sfmP.h.
11403         (corrupt_msg) [__CHECKER__] No longer induces segfault.
11404         (sfm_read_dictionary) Fixed bug caused by failing to initialize
11405         var_by_index.
11406         (read_machine_flt64_info) Fixed some problems caused by confusion
11407         between flt64 and double types.
11408         (read_header) Message fix.
11409         (read_variables) Fixed set of cases in which we byte-swap sv.print
11410         and sv.write.  Fixed confusion of flt64 and double.
11411
11412         * sfm.h: (struct sfm_write_info) New.
11413
11414         * som-high.c: (som_draw_title) Properly frees `s'.
11415
11416         * temporary.c: (save_dictionary) Comment fix.
11417
11418         * var.h: Comment fixes.  New FMT_* enum, FMT_NUMBER_OF_FORMATS.
11419         (struct trns_header) Formatting fix.
11420         (struct save_trns) New.
11421
11422         * vars-atr.c: (discard_variables) Comment fix.
11423
11424         * sfm-write.c: New file, baseline release.
11425
11426         * sfmP.h: New file, baseline release.
11427
11428 Sun Nov 24 14:53:53 1996  Ben Pfaff  <blp@gnu.org>
11429
11430         * cmdline.c: (parse_command_line) `--version' output updated.
11431         (glob var syntax_message[]) Added my e-mail address.
11432
11433         * file-handle.q, lexer.c, vfm.c: Changed many instances of
11434         `illegal' to `invalid'.
11435
11436         * sfm-read.c: (struct sfm_fhuser_ext) New fields used as
11437         uncompression buffer.
11438         (sfm_close) Frees decompression buffer.
11439         (sfm_read_dictionary) Initializes decompression buffer.
11440         (buffer_input, read_compressed_data) New functions.
11441         (sfm_read_case) Restructured; now calls read_compressed_data() to
11442         handle compressed system file data.
11443
11444         * var.h: Comment fix.
11445
11446 Mon Nov 11 15:34:09 1996  Ben Pfaff  <blp@gnu.org>
11447
11448         * dfm.c: (dfm_close) Does not set h->{ext,class} because the
11449         caller handles it.
11450          
11451         * get.c: New comments.  New static var `get_file'.
11452         (cmd_get) Now fully implemented.  Calls discard_variables();
11453         initializes fv and lv for all variables; new debug code; sets
11454         up the dictionary; sets up the input program.
11455         (read_from_get, cancel_get) New functions.
11456
11457         * sfm-read.c: Comment fixes.
11458         (sfm_close) New static function.
11459         (sfm_read_dictionary) Properly sets up the class of the
11460         file_handle.  No longer cares what size the data is in records of
11461         type 7.  Also, on failure, properly cleans up the file_handle and
11462         free()s some stuff.
11463         (read_variables) No longer thinks it knows `nval' of the
11464         dictionary.  Now sets p.get.fv, etc., instead of speculatively
11465         setting fv itself.
11466         (read_value_labels) Fixed off-by-one error in indexing of
11467         var_by_index[].
11468         (sfm_read_case) New function.
11469         (sfm_r_class) New static var.
11470
11471         * var.h: (get_proc) New struct.
11472         (struct variable) New member p.get.
11473
11474 Thu Nov  7 20:52:28 1996  Ben Pfaff  <blp@gnu.org>
11475
11476         * get.c: Removed GTSV_OPT_MAP because of a misinterpretation of
11477         the manual's meaning.
11478         (rename_variables) New function.
11479         (trim_variables) Doesn't try to parse MAP any more.  Removed debug
11480         code.  Now properly reorders the dictionary on the KEEP keyword.
11481
11482         * sfm-read.c: (read_value_labels) Fixed some bugs regarding
11483         garbage collection.
11484
11485         * vars-atr.c: (clear_variable) New argument `dictionary *'.
11486         (rename_variable) New function.
11487         (free_val_lab) Reformatted.
11488
11489 Thu Nov  7 17:29:16 1996  Ben Pfaff  <blp@gnu.org>
11490
11491         * var.h: Reindented entire file.  Comment fixes.
11492         (glob vars var, var_by_name, nvar, N, nval, n_splits, splits)
11493         Removed.
11494         (glob var default_dict) New.
11495         (struct indirect_dictionary) Removed.
11496
11497         * Many other source files were changed to add `default_dict.'
11498         before all references to the dictionary of the active file.
11499         
11500         * vars-atr.c: (make_indirect_dictionary) Removed.
11501
11502         * glob.c: Reindented all variable declarations.  Updated for
11503         changed var.h.  Comment fixes.
11504
11505         * temporary.c: (restore_dictionary, save_dictionary) Simplified
11506         because now we can mainly copy dictionary structs.
11507
11508         * vars-prs.c: (is_dict_varname, parse_dict_variable,
11509         parse_variables) Takes dictionary instead of indirect_dictionary
11510         first argument.
11511         (parse_variables) Instead of calling make_indirect_dictionary,
11512         just sets DICT to &default_dict if DICT is NULL.  Of course, lots
11513         of `*dict.' references had to be changed to `dict->'.  Removed
11514         debug code.
11515
11516 Thu Nov  7 15:48:52 1996  Ben Pfaff  <blp@gnu.org>
11517
11518         * get.c: Added GTSV_OPT_* series of enums.
11519         (trim_dictionary, dict_delete_run) New functions.
11520         [DEBUGGING] (dump_dict_variables) New function.
11521         (cmd_get) Calls trim_dictionary() to get dictionary fully set-up.
11522         [DEBUGGING] Calls dump_dict_variables() to display results.
11523
11524         * glob.c: (cmp_variable) Now a public function declared in var.h.
11525
11526         * sfm-read.c: Turned off debug code.  Comment fixes.
11527         (read_machine_int32_info, read_machine_flt64_info) New functions
11528         to parse type 7 records.
11529         (sfm_read_dictionary) Properly byteswaps several fields now.
11530         Calls read_machine_*_info() to parse type 7 subtypes 3 and 4
11531         records.  [DEBUGGING] Dumps dictionary.
11532         (read_variables) Sets `index' field of variables created properly.
11533         Constructs avl tree of variables in dictionary.  [DEBUGGING] No
11534         longer dumps dictionary.
11535         (read_value_labels) Properly byteswaps fields.  [DEBUGGING] New
11536         debug code.
11537         [DEBUGGING] (dump_dictionary) No longer stubbed out.
11538
11539         * temporary.c: (restore_dictionary) Destroys `var_by_name' glob
11540         var before destroying any variables just to save a little time.
11541
11542         * var.h: (struct variable) Reordered in order to make name[] the
11543         first member; this makes pointers to `variable' pointers to the
11544         variable name, simplifying avl trees, etc.
11545         (struct indirect_dictionary) New struct.
11546
11547         * vars-atr.c: (find_variable) Rewritten for efficiency.
11548         (make_indirect_dictionary, is_dict_varname, parse_dict_variable)
11549         New functions.
11550         (is_varname) Rewritten for efficiency.
11551         (parse_variables) New argument, which is a `dictionary *'.  All
11552         references changed.  This function now reads variable names from
11553         the dictionary passed, or from the default dictionary if NULL.
11554
11555 Tue Nov  5 18:34:59 1996  Ben Pfaff  <blp@gnu.org>
11556
11557         * misc.h: Added new macro DIV_RND_UP to perform integer division,
11558         rounding up.  Changed many references to ROUND_UP to use this
11559         instead.
11560
11561         * sfm-read.c: Includes avl.h.
11562         (corrupt_msg) Induces a segfault under Checker.
11563         (macro assertive_bufread) New.  Many references to bufread() now
11564         use this instead.
11565         (sfm_read_dictionary) Split up into several functions.  Added code
11566         to read dictionary records following the the type 2 records.  Not
11567         quite complete.  New variable `var_by_index'.
11568         (read_header, read_variables) New functions extracted from
11569         sfm_read_dictionary().
11570         (read_value_labels) New function.
11571         (bufread) Checks ferror() if fread() doesn't return the expected
11572         value; if ferror() is zero it's just EOF.
11573         (dump_dictionary) Stubbed out.
11574
11575         * BTW: The source code now exceeds 50000 lines!
11576         
11577 Mon Nov  4 22:03:28 1996  Ben Pfaff  <blp@gnu.org>
11578
11579         * command.c: Added GET to cmd_table[].
11580
11581         * list.q: Removed reference to alloca headers.
11582         (cmd_list) Gave prototype.
11583
11584         * sfm-read.c: Added DEBUGGING comments.
11585         (sfm_read_dictionary) Checks bias correctly.  Sets
11586         dict->var_by_name to NULL.  Calculates long_string_count
11587         correctly.  realloc's dict->var[] array to minimum size.
11588         [DEBUGGING] Calls dump_dictionary.
11589         [DEBUGGING] (dump_dictionary) New function.
11590
11591         * temporary.c: (save_dictionary) Sets var_by_name to NULL.
11592         (restore_dictionary) If the dictionary contains a non-NULL
11593         var_by_name, uses that instead of generating one.
11594         (free_dictionary) Destroys var_by_name.
11595
11596         * var.h: (struct dictionary) Added field `var_by_name'.
11597
11598         * get.c: New file, not complete.
11599
11600 Sun Nov  3 12:24:36 1996  Ben Pfaff  <blp@gnu.org>
11601
11602         * mis-val.c: New enums MV_NOR_*.  New struct num_or_range.
11603         (parse_num_or_range) New function.
11604         (parse_numeric) Reimplemented in order to support LOW THRU <n> and
11605         <n> THRU HIGH missing values.
11606
11607         * output.h: [__GNUC__>1 && __OPTIMIZE__] (width, height) Made
11608         __attribute__((const)).
11609
11610         * q2c.c: (get_token) Merged isdigit || isalpha into isalnum.
11611
11612         * sfm-read.c: Finished reference implementation.
11613
11614         * sfm.h: Includes var.h.
11615
11616         * var.h: Comment fixes.
11617         (struct `variable') Reordered some fields.
11618
11619         * vars-atr.c: (is_num_user_missing) Added support for MISSING_*
11620         constants added previously.
11621
11622 Wed Oct 30 17:13:08 1996  Ben Pfaff  <blp@gnu.org>
11623
11624         * common.h: Comment fixes.  Added declaration of
11625         `second_lowest_value' as variable or macro.  Made `compat_type',
11626         `pgm_state_type' into anonymous enums.
11627
11628         * display.c: Comment fix.
11629
11630         * glob.c: [ENDIAN==UNKNOWN] Added definition for `endian' global
11631         var.
11632         [!defined SECOND_LOWEST_VALUE] Added definition for
11633         `second_lowest_value' global var.
11634         (compat, pgm_state global vars) Changed types to `int'.
11635         (init_glob) Initializes `second_lowest_value'.
11636
11637         * sfm-read.c: Continued work, not complete.
11638
11639         * var.h: Added new MISSING_* constants to handle LOWEST and
11640         HIGHEST.
11641
11642 Sat Oct 26 23:06:06 1996  Ben Pfaff  <blp@gnu.org>
11643
11644         * sfm-read.c: New file, not complete.
11645
11646         * cases.c: (vec_insert) Changed vector expansion algorithm.
11647         (vec_delete) Fixed bug that screwed up deletion sometimes, it was
11648         mucking up the RECODE transformation in particular.
11649         (envector) Harmless change in notation.
11650
11651         dfm is now fairly well tested again.  
11652         * dfm.c: (dfm_get_record) Only returns ext->ptr if ext is
11653         non-NULL--duh.
11654         (cmd_begin_data) if(ext->line) replaced by if(ext && ext->line).
11655
11656         * recode.c: Comment fix.
11657
11658         * sfm.h: Interface should be fairly final now, or at least for a
11659         day or so...
11660
11661         * vfm.c: [DEBUGGING] (index_to_varname) New function.
11662         (open_active_file) [DEBUGGING] Translates ccase indices into
11663         variable names now to make it easier to understand what's really
11664         going on.
11665
11666 Sat Oct 26 20:46:31 1996  Ben Pfaff  <blp@gnu.org>
11667
11668         * data-in.c: Comment fix.
11669
11670         * data-list.c: Includes dfm.h.
11671         (do_reading) Uses new function dfm_push_cust().
11672
11673         * data-out.c: (convert_time, convert_WKDAY, convert_MONTH) Added
11674         `return 1;' at end.
11675
11676         * file-handle.h: Completely changed.  Some parts split off into
11677         new file dfm.h.  Implemented in file-handle.q.
11678         (enum FH_*) Removed.
11679         (struct fh_ext_class) New struct.
11680         (struct file_handle) Retained only these fields: name, norm_fn,
11681         fn, recform, lrecl, mode.  New fields class, ext.
11682         (get_handle_by_name, get_handle_by_filename, parse_file_handle,
11683         close_handle, handle_name) Added `fh_' prefix to name, all
11684         references changed.
11685
11686         * dfm.h: New file, implemented in dfm.c.
11687         (get_record, put_record, fwd_record, bkwd_record, set_record,
11688         get_cur_col) Functions moved from file-handle.h, now prefixed with
11689         `dfm_'.
11690         (dfm_push_cust) New function.
11691
11692         * sfm.h: New file.  Incomplete.
11693
11694         * dfm.c: All functions adjusted/rewritten for new dfm/fhp
11695         interface.  Functions reordered, comments changed.  Not well
11696         tested, probably full of bugs.
11697         (struct dfm_fhuser_ext) New struct.
11698         (dfm_close) New function.
11699         (open_file_r) Pickier about finding `BEGIN DATA.' line.
11700         (open_file_w) User messages changed.
11701         (get_record) Comment fixed.
11702         (read_record) Increments ext->ln even for inline_file.  Calls
11703         dfm_close() for inline_file when `END DATA.' encountered.
11704         (dfm_get_record) Experimental restructuring.
11705         (dfm_push_cust) New function.
11706         (cmd_begin_data) Detects whether the inline file was fully read by
11707         checking whether it is still open; detects whether it was read at
11708         all by checking whether the line number is greater than zero.
11709
11710         * file-handle.q: All functions adjust/rewritten for new dfm/fhp
11711         interface.  Functions reordered, comments changed.  Not well
11712         tested, probably full of bugs.
11713         (init_file_handle) Removed initializers for obsolete fields, added
11714         new fields.
11715         (fh_close_handle) Much simpler, now mainly calls the class
11716         function.
11717         (fh_init_files) Renamed inline file internal filename.
11718
11719         * file-type.c: Includes dfm.h.
11720         (read_from_file_type) Doesn't use dfm internal state anymore.
11721
11722         * inpt-pgm.c, print.c: Include dfm.h.
11723
11724         * recode.c: (internal_cmd_recode) Casts strlen() return value to
11725         int in comparison with other int.
11726
11727         * som-high.c: (build_target) Fixed operator precedence problem in
11728         if statement (& versus ==).
11729
11730 Sat Oct 26 10:39:25 1996  Ben Pfaff  <blp@gnu.org>
11731
11732         * dfm.c: (read_record) Can now read fixed-length records; not
11733         tested.
11734         (put_record) Can now write fixed-length records; not tested.
11735
11736         * file-handle.h: FH_* defines changed to enums.  New enum series
11737         FH_RF_*, FH_MD_*.
11738         (struct file_handle) New members recform, lrecl, mode.
11739
11740         * file-handle.q: Parser changed.
11741         (internal_cmd_file_handle) Added support for new /RECFORM, /MODE,
11742         /LRECL subcommands.  These are compatible with Windows.
11743         (init_file_handle) Initializes recform, mode fields.
11744
11745         * q2c.c: (get_line) When outputting `!' comment lines, now
11746         increments the output file line number so that `#line' directives
11747         are correct.
11748         (make_identifier) New function that converts an arbitrary string
11749         into a valid C identifier.
11750         (dump_vars) Calls make_identifier() in two places in order to
11751         suppress some errors for bad identifiers.
11752         (make_match) Allows TRUE as synonym for YES and FALSE as synonym
11753         for NO.  Allows numbers to be prefixed by underscores to make them
11754         acceptable C identifiers but still to be parsed as numbers by the
11755         Fiasco lexer.
11756
11757 Thu Oct 24 20:13:42 1996  Ben Pfaff  <blp@gnu.org>
11758
11759         * command.c: Re-enabled RECODE, SAMPLE, SELECT IF.
11760         
11761         * dfm.c: Comment fixes. (get_record) Gives error if file handle
11762         was opened for writing.
11763         (open_file_w) New function.
11764         (read_record) Uses strncasecmp if available.  Improved error
11765         messages, comments.
11766         (put_record) New function.
11767
11768         * file-handle.h: Moved function comments into dfm.c and
11769         file-handle.q.  Comment fixes.  Removed declarations of
11770         tilde_expand() and normalize_filename().
11771         (struct file_handle) Changed `open' from boolean to enumerated
11772         field to allow for three states--closed, open for reading, open
11773         for writing--all references changed.
11774
11775         * file-handle.q: Includes filename.h.
11776
11777         * print.c: (CMD_* enums) Renamed PRT_* and moved into var.h; all
11778         references changed.
11779         (alloc_line) Makes allowance for line terminator characters in
11780         calculations.
11781         (print_trns_proc) Now handles OUTFILE, WRITE differences.
11782         (print_space_trns_proc) Handles OUTFILE differences.
11783
11784         * recode.c, sample.c: Comment fixes.
11785
11786         * var.h: (struct print_trns) Changed boolean field `eject' to
11787         bitmapped field `options'; all references changed.  New enums
11788         PRT_* for use with this field.
11789
11790         * exception.h, test-exception.c: Removed.
11791
11792 Thu Oct 24 17:47:14 1996  Ben Pfaff  <blp@gnu.org>
11793
11794         * ascii.c: (delineate) Turned off debug output.
11795
11796         * common.c: [Checker and Linux] (__assert_fail, __eprintf) Moved
11797         to error.c.
11798
11799         * data-in.c: (parse_string_as_format) Sets the entire string value
11800         to spaces, not just the short string part of it.  Is this correct
11801         now? 
11802
11803         * data-out.c: (convert_date) Fixed DATETIME format problems with
11804         decimal places, removed debug code.
11805
11806         * dfm.c: (open_file_r) Fixed bug where an error would occur in the
11807         middle of parsing BEGIN DATA that would cause the lexer to read
11808         from a wild pointer `prog'; now calls new function
11809         preprocess_line() in lexer.c.
11810
11811         * error.c: [__CHECKER__] (hcf) Calls induce_segfault() on improper
11812         termination.
11813         [Checker and Linux] (__assert_fail, _eprintf) Moved from common.c.
11814         Now call induce_segfault() to induce the segfault.
11815         (induce_segfault) New function.
11816
11817         * expr-opt.c: Comment fix.
11818         (parse_sysvar) New function.
11819         (parse_primary) Added system variable support--calls
11820         parse_sysvar().
11821         (global var ops) Added OP_CASENUM operator.
11822
11823         * expr.h: Comment fixes.
11824         (OP_* enum) added OP_CASENUM operator.
11825         (struct casenum_node) New struct.
11826         (union any_union_union) New member `cas' of type `casenum_node'.
11827
11828         * glob.c: (global var last_vfm_invocation) New var.
11829         (init_glob) Initializes last_vfm_invocation.
11830
11831         * lexer.c: (lookahead) Fixed reversed condition on if statement.
11832
11833         * getline.c: (get_line) Split into get_line() and preprocess_line().
11834         (preprocess_line) New function.
11835
11836         * var.h: Declares last_vfm_invocation.
11837
11838         * vfm.c: (procedure) Sets last_vfm_invocation.
11839
11840 Wed Oct 23 21:53:43 1996  Ben Pfaff  <blp@gnu.org>
11841
11842         * command.c: (parse_cmd) Fixed bad assertion related to
11843         lookahead().
11844
11845         * data-in.c: (parse_month) Implemented to parse months according
11846         to full interpretation of standard.
11847         (to_roman) New function.
11848         (parse_wk_delimiter) Bug fix (forgot to skip `WK' in string).
11849         (parse_weekday) Bug fix (forgot to skip all the day name).
11850
11851         * data-list.c: (read_from_data_list_fixed) Fixed bug that screwed
11852         up parsing of multirecord data items.  Also fixed user message.
11853
11854         * data-out.c: Comment fix.
11855         (year2, year4, convert_date, convert_time, convert_WKDAY,
11856         convert_MONTH) New functions to support time & date output.
11857         (convert_format_to_string) Calls new time & date output routines.
11858
11859         * expr-prs.c: (nary_num_func) Found a bug, but didn't fix it yet.
11860
11861         * lexer.c: (lookahead) Noted a previously unnoticed caveat in
11862         comment.
11863
11864         * main.c: [DEBUGGING] (dump_token) Updated to handle getline.h.
11865
11866         * misc.c: (global var formats) Fixed declarations of DATETIME,
11867         TIME, DTIME.
11868
11869         * postscript.c: (text) Fixed a pair of bugs in the reallocation of
11870         the output_char buffer.
11871
11872         * vars-prs.c: (parse_DATA_LIST_vars) Fixed a failure to free
11873         memory bug.  Fixed user messages.
11874
11875 Tue Oct 22 17:27:04 1996  Ben Pfaff  <blp@gnu.org>
11876
11877         * Removed #pragma argsused from lots of places.
11878         
11879         * data-in.c: Implemented zoned decimal and time-date formats.
11880         Untested.  This is a huge chunk of code--maybe 1000 lines and 50
11881         new functions.
11882
11883         * data-out.c: Implemented zoned decimal format.
11884
11885         * expr.h: Moved yrmoda() declaration here from exprP.h.
11886
11887         * misc.c: (global var formats) Minor fixes--added
11888         FCAT_SHIFT_DECIMAL to formats N and Z.
11889         (convert_fmt_ItoO) Added support for format Z.
11890
11891         * som-frnt.c: (som_set_value) Fixed bug regarding string values.
11892
11893 Mon Oct 21 20:39:59 1996  Ben Pfaff  <blp@gnu.org>
11894
11895         * command.c: (parse_cmd) [GLOBAL_DEBUGGING] Inserted call to
11896         som_check_workspace() that is activated between commands.
11897
11898         * data-list.c: (dump_fixed_table, dump_free_table) Finished these
11899         for good, I hope.
11900
11901         * list.q: (begin_row) Changed title expansion style from
11902         SOPT_X_VERT to SOPT_X_SHSP.
11903
11904         * som-frnt.c: Now includes `somP.h'.
11905         (som_push_workspace, som_pop_workspace) New functions that, taken
11906         together, form a solution to the recursive table building problem
11907         mentioned yesterday.  Surrounded every table output routine
11908         throughout the program with calls to these functions.
11909         [GLOBAL_DEBUGGING] (som_check_workspace) New function.
11910         (som_create_table) Checks that there's an active workspace.
11911         (som_destroy_all_tables, som_crush) Removed.
11912
11913         * som-high.c: (global var som_preserve_tables) Removed, all
11914         references deleted.
11915         (som_submit_table) Checks that there's an active workspace.
11916         (dump_columnated_table) Doesn't columnate tables that would have
11917         just one row per column.
11918         (dump_crush_page, som_dump_crush_page) Removed debugging code.
11919         (som_dump_crush_page) Moved row number labels from left side of
11920         tables to right side.
11921         (som_get_table_size) Added support for SOPT_X_SHSP.
11922
11923         * som.h: New cell expansion type SOPT_X_SHSP.
11924
11925         * somP.h: (global vars arena_stack, n_arena_stack, m_arena_stack)
11926         New vars.
11927         (global var curtab_arena) Moved from som-frnt.c.
11928
11929 Sun Oct 20 13:45:28 1996  Ben Pfaff  <blp@gnu.org>
11930
11931         * ascii.c: [GLOBAL_DEBUGGING] (SUPPRESS_WARNINGS) New debug option
11932         that causes bad location warnings to be suppressed.
11933         (delineate) Saves current font when calling draw_text(); fixed
11934         handling of NULLs when backing up.  Also fixed line-wrapping bug.
11935
11936         * command.c: Re-enabled `LEAVE', `NUMERIC', `PRINT', `PRINT EJECT',
11937         `PRINT FORMATS', `PRINT SPACE', `STRING', `TITLE', `WRITE'.
11938
11939         * common.c: Added code to cause assertion failure to dump core
11940         when run under Checker.
11941
11942         * data-list.c: (dump_fixed_table) Fixed some inconsistencies, but
11943         there are still bugs.
11944
11945         * glob.c: (__eprintf) Removed.
11946
11947         * list.q: Inserted som_preserve_tables kluge that prevents tables
11948         from being thrown away due to recursive table building through
11949         som_output_line being called from a transformation during the LIST
11950         procedure invocation.  This is a general problem that must be
11951         solved in a better way since it applies to all procedures in
11952         general.
11953         (begin_row) Changed title options to SOM_X_VERT from SOM_X_BOTH.
11954         (flush_table) Removed SOM_TOPT_PRESERVE from submission options.
11955
11956         * numeric.c: Fixed several errors in the form of msg() calls.
11957
11958         * print.c: Updated for use of som.
11959         (dump_table) Reimplemented.
11960         (print_trns_proc) Calls som_eject_page() instead of eject_page().
11961         Calls som_output_text() instead of outs_line().
11962
11963         * som-frnt.c: (som_destroy_all_tables) Sets som_preserve_tables to
11964         0.
11965         (som_output_text) Function moved from som-low.c.  Interface
11966         changed.
11967
11968         * som-high.c: (som_preserve_tables) New global public variable
11969         declared in som.h.
11970         (som_submit_table) Destroys the tables only if som_preserve_tables
11971         is 0.
11972         (paginate_horizontally) Bugfix: sets som.mpw even if there's only
11973         one subrow per row.  Now labels subrows if there's more than one
11974         subrow per row.
11975         (dump_crush_table) Added wishlist comment.
11976         (som_eject_page) New public function declared in som.h.
11977
11978         * som-low.c: (som_dump_crush_page) Draws row labels if there's
11979         more than one subrow per row.
11980         (som_output_text) Moved to som-frnt.c.
11981
11982         * som.h: (SOM_TOPT_PRESERVE) Removed.
11983
11984         * title.c: (get_title) Changed interface.
11985         (cmd_title) Changed `title' to `outp_title'.
11986         (cmd_subtitle) Changed `subtitle' to `outp_subtitle'.
11987
11988 Sun Oct 20 09:04:15 1996  Ben Pfaff  <blp@gnu.org>
11989
11990         * list.q: (flush_table) Conforms to new partial options in
11991         som_submission_form.
11992
11993         * som-high.c: (paginate_horizontally) Changed form of subrow
11994         number labels.
11995         (build_target) Omits spacing before table if
11996         SOM_TOPT_PARTIAL_OMIT_TOP is selected.
11997         (dump_crush_page) Changed interface.  Only trims bottom rule if
11998         SOM_TOPT_PARTIAL_OMIT_BTM is not selected.
11999         (dump_crush_table) Handles partial tables.
12000         (output_row_label) New function.
12001         (som_dump_crush_page) Emits subrow number labels.  Draws vertical
12002         rule on the right edge of narrow subrows.
12003
12004         * som.h: Changed SOM_SUB_PARTIAL_* series of submission type
12005         constants to a series of SOM_TOPT_PARTIAL_* submission options.
12006         All references updated.
12007
12008 Fri Oct 18 19:46:49 1996  Ben Pfaff  <blp@gnu.org>
12009
12010         * misc.c: Comment fix.
12011
12012         * som-high.c: (examine_table) Treats crushed tables separates for
12013         purpose of determining header size.
12014         (paginate_horizontally) Allots space for line numbers in crushed
12015         tables with lots of subrows per row.  Calculates the `maximum page
12016         width', the width of the widest horizontal page.
12017         (build_target) Removed trim argument; all references changed.
12018         Stricter assertions.  (dump_crush_page) New function.
12019         (dump_crush_table) Reimplemented.
12020
12021         * som-low.c: (som_dump_page) Uses new RULE_ROW &c. constants.
12022         (som_dump_crush_page) Reimplemented, interface changed.
12023
12024         * somP.h: Many many new helper macros for use with crushed tables.
12025         (global var som) Removed `tv', `cum_y' members; all references
12026         removed.  New members `mpw', `digit_space'.
12027
12028 Sun Sep 29 19:37:03 1996  Ben Pfaff  <blp@gnu.org>
12029
12030         * arena.c: (arena_alloc) [!DISCRETE_BLOCKS] Removed `size'
12031         variable, changed to constant 1024.
12032         (arena_ca_strdup) Changed `sizeof(a_string)' to
12033         `sizeof(c_string)'.
12034         (arena_ca_strdup) [!DISCRETE_BLOCKS] Changed bad cast from
12035         `(c_string *)' to `(char *)'; this fixed some offset problems.
12036
12037         * filename.c: (readlink_malloc) Changed initial allocation from
12038         100 bytes to 128.
12039         (good_getcwd) Changed from xmalloc() to local_alloc(); removed
12040         comment.
12041
12042         * postscript.c: (read_fontmap) Fixed leak by changing &owner to
12043         &fm->owner in several places.
12044
12045         * som-high.c: (output_table) Changed interface to rest of world.
12046         (examine_crush_table) Removed.  Crushed tables are re-broken now,
12047         in preparation for rewrite.
12048
12049         * som.h: Comment fix.
12050
12051 Sat Sep 28 21:28:07 1996  Ben Pfaff  <blp@gnu.org>
12052
12053         * ascii.c: (ascii_init_driver) Disposes of x->file.filename and x
12054         itself in the cleanup stage.
12055
12056         * descript.q: (display) At least temporarily, changed the table
12057         format to a crushed table.
12058
12059         * list.q: (begin_row) At least temporarily, added horizontal lines
12060         between cases.
12061
12062         * som-high.c: (examine_crush_table) Sets som.hh to the width of
12063         the horizontal "headers," that is, to the width of the far left
12064         and far right rules.
12065         (justify_pagination) Sets som.th to the width of the widest row
12066         in the crushed table.  Fixed inner loop off-by-one error.
12067
12068         * som-low.c: (som_dump_crush_page) Added code to draw horizontal
12069         rules.
12070
12071         * somP.h: Comment fix.
12072
12073 Fri Sep 27 20:08:39 1996  Ben Pfaff  <blp@gnu.org>
12074
12075         * filename.c: (open_file_ext) Now, doesn't set f->file to NULL
12076         before closing it; also, opens the constructed filename `s'
12077         instead of f->filename.
12078
12079         * postscript.c: Moved initialization of x->loaded, x->prop,
12080         x->fixed, x->current, also the add_encoding() calls, into
12081         postopen().
12082         (preclose) Destroys x->combos; sets x->loaded, x->combos to NULL;
12083         sets x->last_font to NULL; sets x->next_combo to zero.
12084
12085         * som-high.c: (crushed_row_height) Moved definition farther up.
12086         (som_submit_table) Doesn't calculate line width, font size until
12087         after calling open_page(), to accomodate changes to PostScript
12088         driver.
12089         (vert_headers) Removed; equivalent functionality moved to
12090         examine_table(), examine_crush_table().
12091         (justify_pagination) Replaced with different algorithm.
12092         (dump_crush_table) Bugfix that caused tables to fail to be clipped
12093         at the bottom of the page.
12094
12095 Thu Sep 26 22:20:26 1996  Ben Pfaff  <blp@gnu.org>
12096
12097         * command.c: Added cmd_list back into cmd_table.
12098
12099         * freq.c, frequencies.q, repeat.c, list.q, vars-atr.c, vfm.c:
12100         Comment fix: `#define DEBUGGING' --> `#define DEBUGGING 1'.
12101
12102         * list.q: (flush_table) Updated to new som_submission_form format.
12103
12104         * som-frnt.c: Comment fix.
12105
12106         * som-high.c: Changed `#endif' to `#undef EXTERN'.
12107         (output_table) Calls som_get_table_size() directly; handles
12108         crushed tables.
12109         (examine_crush_table) New function; calls vert_headers().
12110         (examine_table) Moved some code into new function, vert_headers().
12111         (justify_pagination) New function.
12112         (dump_plain_table) Removed `static' from `cy'.
12113         (dump_crush_table) New function.
12114
12115         * som-low.c: (som_dump_crush_page) New function.
12116
12117         * som.h: Comment fixes.
12118         (enum SOM_TOPT_CRUSH) New.
12119         (SOM_SUB_PARTIAL_BEG, SOM_SUB_PARTIAL_MID, SOM_SUB_PARTIAL_END)
12120         Temporarily set to zero to make do with LIST procedure.
12121
12122         * somP.h: Re-ordering.
12123
12124 Wed Sep 25 19:36:11 1996  Ben Pfaff  <blp@gnu.org>
12125
12126         * som.c: Split into som-frnt.c, som-high.c, som-low.c.
12127
12128         * somP.h: New file for use by som-high.c, som-low.c.
12129
12130         * q2c.c: Added definition for VME.
12131         (get_line) Now dumps `!' comment lines to the output file
12132         verbatim.
12133
12134         * crosstabs.q, descript.q, file-handle.q, frequencies.q, list.q,
12135         set.q: Changed format of `!' comment lines.
12136
12137 Tue Sep 24 18:39:09 1996  Ben Pfaff  <blp@gnu.org>
12138
12139         * All source files: Added copyright notice.
12140
12141         * common.c: (xmalloc, xrealloc, xstrdup) Cast size_t's to unsigned
12142         longs in msg() calls.
12143
12144         * con32s.c: (xmalloc, xrealloc) Updated from common.c.
12145
12146         * q2c.c: (xmalloc, xrealloc, xstrdup) Updated from common.c.
12147
12148 Sat Sep 21 23:16:31 1996  Ben Pfaff  <blp@gnu.org>
12149
12150         * output.c: (outp_read_devices) Changed criteria for
12151         distinguishing different types of lines.
12152
12153 Fri Sep 20 22:52:28 1996  Ben Pfaff  <blp@gnu.org>
12154
12155         * cmdline.c: Changed syntax message.
12156
12157         * filename.c: (good_getcwd) Bug fix (?).
12158         (normalize_filename) [__BORLANDC__] Uses _fullpath() library
12159         function.
12160         (search_path) Appends DIR_SEPARATOR to directory name only if it
12161         does not already end with one.
12162
12163         * glob.c: Checks STAT_PAGER envvar before PAGER.
12164
12165         * output.c: Checks environment variables instead of just local
12166         macros.
12167
12168 Tue Sep 10 21:39:00 1996  Ben Pfaff  <blp@gnu.org>
12169
12170         * arena.c: (arena_destroy) Swatted a subtle bug that cropped up
12171         when the pointer passed to the function was within the arena
12172         itself, so that it couldn't properly be set to NULL _after the
12173         arena was freed_.
12174
12175         * command.c: Re-enabled DISPLAY.
12176
12177         * display.c: Rewritten to handle tables.  Untested.
12178
12179         * filename.c: (search_path) Fixed memory leak.
12180
12181         * frequencies.q: (cmd_frequencies) Frees v_variables.
12182         (postcalc) Calls cleanup_freq_tab() after displaying statistics.
12183         (cleanup_freq_tab) New function to garbage collect.
12184         (dump_full) Elegantized.
12185
12186         * main.c: New comment.
12187
12188         * output.h: New tag for tagged quotes: TAG_NEWLINE.
12189
12190         * postscript.c: Comment fix.
12191         (release_fontmap, free_font_entry) New functions.
12192         (ps_init_driver) Sets free_font_entry() as the freefunc for
12193         hashtable `loaded'.  Calls release_fontmap() when destroying a
12194         driver; also frees the output filename; also frees the
12195         ps_driver_ext block.
12196         (free_ps_encoding) Frees the filename as well as the encoding
12197         block.
12198         (output_encodings) Frees the line buffer and pops the msg-filename
12199         stack.
12200         (read_fontmap) Frees the fontmap filename and the line buffer.
12201         (postopen, preclose) Misc. garbage collection fixes.
12202         (ps_open_page) Destroys the `combos' hash table; sets `last_font'
12203         to NULL; this fixes some output problems.
12204         (text) Handles TAG_NEWLINE.  Untested.
12205
12206         * som.c: (cell_byte_size) Merged SCON_VALUE and SCON_TEXT cases.
12207         (som_set_string) Removed.  All references changed to
12208         `som_set_text'.
12209         (som_set_text) Rewritten.  New interface.  More general.
12210
12211         * som.h: Minor format changes.
12212         (struct som_value_cell) Removed; all references changed to
12213         `som_text_cell'.
12214         (enums SOT_*) Changed.
12215
12216 Mon Sep  9 21:43:13 1996  Ben Pfaff  <blp@gnu.org>
12217
12218         * command.c: Re-enabled SPLIT FILE.
12219
12220         * postscript.c: Comment fix.
12221
12222         * som.h: Added `SOT_NONE'.
12223
12224         * split-file.h: (cmd_split_file) Removed superfluous parenthesis.
12225
12226         * vfm.c: (dump_splits) Reimplemented.
12227
12228 Sat Sep  7 22:35:12 1996  Ben Pfaff  <blp@gnu.org>
12229
12230         * Compiled the project under gcc 2.7.2, which gave some new
12231         warnings.  This led to many additions of casts from unsigned to
12232         int sprinkled throughout the code.
12233         
12234         * arena.c: Many uses of `unsigned' changed to `size_t'.
12235
12236         * command.c: Added END FILE, END REPEAT to command table.
12237         (var cmd_end_repeat) Renamed cmd_end_repeat_p.
12238         (find_command, FILE_TYPE_okay) Not commented out anymore.
12239         (parse_cmd) Calls FILE_TYPE_okay again.
12240         (output_line) Added calls to som_output_text() to put the line
12241         in the output files.
12242
12243         * common.c: (macro VME) Format changes.
12244         (xstrdup) Asserts that its argument is not NULL.
12245         
12246         * data-list.c: Implemented dump_fixed_table().
12247         
12248         * inpt-pgm.c: Formatting changes.  Comment changes.
12249         (end_case_proc) Renamed end_case_trns_proc.
12250         (cmd_end_file, end_file_trns_proc) New functions.
12251
12252         * misc.c: Many uses of `int' and `unsigned' changed to `size_t'.
12253
12254         * misc.h: (local_strdup) New macro corresponding to strdup() but
12255         allocating its data through local_alloc() if possible--that is, if
12256         GNU C is in use.
12257
12258         * postscript.c: Comment changes.
12259         (quote_ps_name, quote_ps_string, output_encodings) New functions.
12260         (output_line, add_string) New macros supporting
12261         output_encodings().
12262         (postopen) Fixed contents of ${fixed-font} and ${prop-font}
12263         substitution vars.  Calls output_encodings() when a line
12264         consisting of `!encodings' is encountered.
12265         (preclose) Some code moved into quote_ps_string().
12266         (dump_line) Changed into macro supporting dump_fancy_line().
12267         (switch_font) Now outputs DSC "%%IncludeResource: font (...)"
12268         command when appropriate.
12269         (write_text) Fixed `literal_char' array (I think it's fixed, at
12270         least.)
12271         (text) Fixed bug when width was zero.  Now exits immediately on
12272         zero height_left.  Now, when executing `goto restart;', checks
12273         that cp<end, so that we don't read beyond end-of-string.  Also,
12274         outputs the correct code to the output file by outputting the code
12275         from the metric instead of the internal metric index.
12276
12277         * repeat.c: (cmd_end_repeat) New function.
12278
12279         * som.c: (var som) `headers' renamed `options' and semantics
12280         changed.  All references changed.
12281         (draw_title) `if(px!=-1 || px!=-1)' --> `if(px!=-1 || py!=-1)'.
12282         (build_target) Only inserts spacing if SOM_TOPT_SPACING not
12283         selected.
12284         (som_text_table) Removed.
12285         (som_output_text) New function.
12286
12287         * som.h: (struct som_submission_form) Removed `header', `reuse',
12288         replaced with bitmapped field `options'.
12289         (SOM_TOPT_*) New enum set for som_submission_form.options.
12290         (SOT_*) New enum set for som_output_text().
12291
12292         * temporary.c: (copy_variable) When copying the var label, only
12293         calls xstrdup() if it's non-NULL.
12294
12295         * var.h: (enum type `vartype') Removed; all references changed to
12296         `int'.
12297
12298         * vars-atr.c: (init_variable) Changed local var `nbytes' from
12299         `int' to `size_t'.
12300
12301 Thu Sep  5 22:05:56 1996  Ben Pfaff  <blp@gnu.org>
12302
12303         * font.h: Comment changes.
12304
12305         * groff-font.c: (groff_read_font) Initializes `name' field to
12306         NULL.  Handles `encoding' field.
12307
12308         * hash.c: (hsh_dump) [GLOBAL_DEBUGGING] Output formatting changes.
12309
12310         * postscript.c: (struct font_entry) Removed `position' field.
12311         (struct ps_font_combo) New struct.
12312         (struct ps_driver_ext) Removed field `next_position'.  New fields
12313         `combos', `next_combo'.  `last_font' field changed from
12314         `font_entry *' to `ps_font_combo *'.
12315         (ps_init_driver) Reformatted; handles new fields.  When
12316         OPO_AUTO_ENCODE is set, adds the two default fonts' encodings to
12317         the encoding list.
12318         (get_encoding, find_encoding_file) New functions.
12319         (add_encoding) Some code moved out into find_encoding_file().
12320         (postopen) Changed value for ${title}.
12321         (preclose) Sets `loaded' field to NULL after destroying the hash
12322         table.
12323         (ps_open_page) Added comment.  Inits the `combos' and `next_combo'
12324         fields.
12325         (ps_text_set_font_by_position) Figures out the current family if
12326         not known.
12327         (compare_ps_combo, hash_ps_combo, free_ps_combo) New functions.
12328         (switch_font) Implemented.
12329         (write_text) Calls switch_font() more often.  Format changes.
12330         #undefs its macros after they're no longer useful.
12331         (text) Changed `continue' at one point to a jump to the top of the
12332         loop because we don't want `separate' reset to 0 at that point.
12333         (load_font) No longer sets `position' in the font_entry created.
12334
12335 Wed Sep  4 21:45:35 1996  Ben Pfaff  <blp@gnu.org>
12336
12337         * font.h: (struct font_desc) New member `encoding', which is not
12338         properly handled yet.
12339
12340         * glob.c: (init_glob) Some new i18n code, which is probably
12341         screwed up.
12342
12343         * output.c: (outp_read_devices, outp_get_paper_size) Changed
12344         `size' local from `int' to `size_t'.
12345
12346         * postscript.c: New driver configuration parameter `auto-encode'.
12347         New enums OPO_AUTO_ENCODE, ODA_COUNT.
12348         (struct font_entry) New member `position'.
12349         (struct ps_driver_ext) Reordered.  New hash table member
12350         `encodings'; new members `next_position', `next_encoding',
12351         `last_font'.  Members `current', `prop', `fixed' changed from type
12352         `font_desc *' to `font_entry *'; all references changed.
12353         (struct ps_encoding) New struct.
12354         (read_ps_encodings, compare_ps_encoding, hash_ps_encoding,
12355         free_ps_encoding, add_encoding) New functions.
12356         (ps_init_driver) Added OPO_AUTO_ENCODE to default
12357         x->output_options.  Initializes new members of ps_driver_ext.
12358         Changed default value for prologue_fn, encoding_fn.  Calls
12359         read_ps_encodings after loading default fonts.
12360         (option_tab[], ps_option) Handle new configuration parameter.
12361         (switch_font) New function.
12362         (struct output_char) `font' member changed from `font_desc *' to
12363         `font_entry *'.  New member `separate'.
12364         (read_fontmap) Changed `size' from `int' to `size_t'.
12365         (output_line, put_number) New macros for write_text().
12366         (write_text) Optimizes text output by consolidating multiple
12367         calls to PostScript `show' operator.
12368         (text) Keeps track of when text arguments can't be consolidated by
12369         write_text(), and marks those spots in the output stream.
12370         (load_font) Sets `position' of the allocated font_entry to -1, cuz
12371         the font hasn't been switched to by switch_font(), which is where
12372         the position is important--the PostScript is what cares about the
12373         position.
12374
12375 Sat Aug 31 23:52:38 1996  Ben Pfaff  <blp@gnu.org>
12376
12377         * hash.c: (hsh_destroy) Ignores NULL argument.  Doesn't try to
12378         call a NULL free_func.
12379         (hsh_rehash) Elegantized.
12380         (hsh_probe) Fix bug that manifested when the table was expanded
12381         and thus had to change location in memory.  Good thing
12382         too--otherwise could have been much more subtle.
12383         (hsh_find) [GLOBAL_DEBUGGING] Not stubbed out anymore.
12384         (hsh_foreach) New function for hash table iteration.
12385
12386         * hash.h: (struct hsh_iterator) New.
12387
12388         * lexer.c: (parse_tagged_quote) Font and family name strings in
12389         tags are now null-terminated.
12390
12391         * output.c: (outp_evaluate_dimension) Fixed over-aggressive unit
12392         parsing.
12393         (internal_get_paper_size, outp_get_paper_size) Fixed; now work as
12394         documented.  (Never before tested?)
12395
12396         * output.h: Comment changes.
12397
12398         * postscript.c: New driver options `optimize-text-size',
12399         `optimize-line-size', `max-fonts-simult'.  New enum set for
12400         specing cached line types.  Comment fixes.
12401         (struct line_form) New struct.
12402         (struct ps_driver_struct) New members `text_opt', `line_opt',
12403         `max_fonts', `lines'.
12404         (ps_init_driver) Initializes new members of ps_driver_struct.
12405         (user option type enum set) New member `nonneg_int_arg'.
12406         (static var option_tab[]) Supports new options.
12407         (ps_option) Handles new options.
12408         (find_ps_file) Made static.  No longer calls hsh_dump().
12409         (ps_get_var) Made static.
12410         (preclose) Dumps out proper DSC trailer.
12411         (ps_open_page) Elegantized.
12412         (ps_close_page) Calls dump_lines() if appropriate.
12413         (ps_line_horz, ps_line_vert, ps_line_intersection) Reduced to
12414         wrappers around line().
12415         (int_2_compare, compare_line, dump_line, dump_fancy_line,
12416         dump_lines, hash_line, free_line, line) New functions for support
12417         of line caching.
12418         (write_text, text) Made static.
12419         (text) Added to font support, not finished.
12420
12421 Thu Aug 29 21:36:41 1996  Ben Pfaff  <blp@gnu.org>
12422
12423         * font.h: (struct font_desc) New members ascent, descent.
12424
12425         * groff-font.c: (groff_read_font) Calculates font ascent and
12426         descent from the ascent and descent of the `d' and `p' characters,
12427         respectively, as per a suggestion on comp.fonts.
12428
12429         * postscript.c: (ps_open_page, ps_close_page, ps_line_horz,
12430         ps_line_vert, ps_line_intersection) Rewritten to deal with changed
12431         prologue.
12432         (write_text) Handles text right-justification and centering (not
12433         full justification).  Still very inefficient.  (One output line
12434         per character?!)
12435         (struct output_char) Added fields for font and font size.
12436         (text) Many bugfixes.
12437
12438 Sat Aug 24 23:26:00 1996  Ben Pfaff  <blp@gnu.org>
12439
12440         * cmdline.c: (usage) Calls outp_list_classes().
12441
12442         * font.h: Comment fix.
12443
12444         * groff-font.c: New exported global var `space_index'.
12445         (groff_init) New function to initialize `space_index'.
12446         (hash_kern) Casts result to unsigned.
12447         (font_name_to_index) Renamed font_char_name_to_index.  All
12448         references changed.  Also, now returns the value of `space_index'
12449         when passed an ASCII space character as an argument.  Fixed
12450         handling of nulls.
12451         (font_get_kern_adjust) Changed i from `int' to `unsigned'.
12452         Handles passed NULL pointers properly.
12453
12454         * lexer.c: (parse_tagged_quote) Comment fix.  Better range
12455         checking.
12456
12457         * output.c: (outp_list_drivers) Removed.  Removed all references.
12458         
12459         * output.h: Comment fixes.
12460
12461         * postscript.c: (ps_open_global) Calls groff_init().
12462         (output_char) New structure.
12463         (write_text) New function.
12464         (text) No longer stubbed out!  Now the output is correct--with a
12465         few exceptions, one of them being that the page has to be held
12466         upside down into a mirror.
12467
12468 Sun Aug 11 21:31:22 1996  Ben Pfaff  <blp@gnu.org>
12469
12470         * font.h: Comment fix.
12471         
12472         * font.c: (name_to_index) Renamed font_name_to_index, made extern.
12473         All callers changed.
12474         (number_to_index) Renamed font_number_to_index, made extern.  All
12475         callers changed.
12476         (font_get_kern_adjust, font_get_char_metrics) New functions.
12477
12478         * output.h: New constant OUTP_T_INTERNAL_DRAW.
12479
12480         * postscript.c: Changed default line width back to 1/2 point.
12481         (ps_line_horz, ps_line_vert, ps_line_intersection) Now lines are
12482         in the center of the space allotted for them, not just a fixed
12483         offset from the edge of the space; this fixes some bugs.
12484         (ps_line_intersection) Now supports all command line styles.
12485         (ps_text_get_size) Bug fix in computation of em width.
12486         (text) New function, the meat behind ps_text_metrics and
12487         ps_text_draw.  Not complete.
12488         (ps_text_metrics, ps_text_draw) Removed the stub taken from
12489         ascii.c; call text().
12490
12491 Sat Aug 10 23:28:17 1996  Ben Pfaff  <blp@gnu.org>
12492
12493         * arena.c: (arena_free) Assert that the argument is non-NULL.
12494         
12495         * groff-font.c: (add_kern) Calls arena_free() for old_kern if and
12496         only if old_kern is non-NULL.
12497
12498         * postscript.c: (ps_init_driver) Changed default line width to 1
12499         point.
12500         (postopen) New prologue variables.
12501         (ps_line_horz, ps_line_vert, ps_line_intersection) Implements some
12502         more of the common line styles properly, but not all.
12503         (ps_text_metrics) Fixed problem with this stubbed out version that
12504         kept it from taking font sizes into account.
12505
12506 Thu Aug  8 22:31:11 1996  Ben Pfaff  <blp@gnu.org>
12507
12508         * arena.c: (arena_malloc) Bug fix.
12509         (arena_dump) [GLOBAL_DEBUGGING] New function.
12510
12511         * ascii.c: Comment fix.
12512         (count_fancy_chars, delineate) Now static functions.
12513         
12514         * filename.c: (interp_vars) Bug fixes.
12515
12516         * font.h: Comment fixes.
12517
12518         * glob.c: (init_glob) Sets set_viewwidth, set_viewlength at
12519         beginning in case we have an error message to display before
12520         initializing the display.
12521
12522         * groff-font.c: Comment fix.  Changed rehash threshold from 2/3
12523         full to 1/2 full.
12524         (groff_read_font) Bug fixes.
12525         (name_to_index) Increments hash.used.  Sets `name' field of hash
12526         entry properly.
12527         (add_kern) Sets kern_max_used after rehashing.  Other bug fixes.
12528
12529         * hash.c: Return type changed.
12530
12531         * postscript.c: Continued development.  Now marks lines on the
12532         paper, but very buggy.
12533
12534 Sat Aug  3 20:50:35 1996  Ben Pfaff  <blp@gnu.org>
12535
12536         * Changed comments in many source files from `/* xxx /* yyy */' to
12537         `/* xxx */ /* yyy */' for cleanliness.
12538
12539         * arena.c: (arena_sd_strdup) New function.
12540         
12541         * ascii.c: (struct ascii_driver_ext) New member `file'.
12542         (ascii_init_driver) Fills out member `file' for initing; uses
12543         close_file_ext for closing drivers.
12544         (ascii_option) Changed %.*s back to %s because the a_string's are
12545         always null-terminated.
12546         (postopen, preclose) New functions.
12547         (ascii_open_page) Uses new style of open_file_ext.
12548         (ascii_option, commit_line_buf, output_lines) Use ext->file.file
12549         instead of this->output.
12550         (__assert_fail) Removed.
12551
12552         * cmdline.c: Changed syntax_message[].
12553
12554         * error.c: #include's <readline/history.h> only if the history
12555         library is available, not if just the readline library is
12556         available.
12557
12558         * filename.c: (expand_line) Removed alloca() support.
12559         (interp_vars) No longer tilde-expands argument.  Limit on output
12560         length removed.
12561         (tilde_expand) Now treats argument as path rather than filename.
12562         [!unix] Now is a no-op function.
12563         (search_path) Better verbose message formatting.
12564         (open_file, close_file) Comment fixes.
12565         (close_file) [!unix] Doesn't bother with pipes.
12566         (open_file_ext) Completely rewritten, interface revamped.
12567         (close_file_ext) New function.
12568
12569         * font.h: Comment changes.
12570
12571         * frequencies.q: Removed AIX alloca support since it doesn't use
12572         alloca.
12573
12574         * hash.c: Comment changes & additions.
12575         (hsh_create) Initializes entire table instead of first M entries.
12576         (hsh_probe) Stupid bug fixed.  Now it works.
12577         (hsh_dump) [GLOBAL_DEBUGGING] New function.
12578
12579         * main.c: (parse) Detects EOF properly in token-eating loop.
12580         Should the STOP token have its value changed to 0?
12581
12582         * misc.c: (blp_getdelim) [HAVE_GETDELIM] Now it's a macro.
12583         (blp_getline) Now it's a macro.
12584
12585         * output.h: (struct outp_driver) Removed members output, filename.
12586         
12587         * output.c: (outp_init) [!NO_POSTSCRIPT] Installs PostScript
12588         drivers in driver table.
12589         (outp_read_devices) Frees buf.  Warns if there are no active
12590         output drivers.
12591         (outp_configure_clear) Sets outp_configure_vec to NULL after
12592         deleting its elements.
12593         (configure_driver, destroy_driver) Removed references to output,
12594         filename members of outp_driver.
12595         (outp_evaluate_dimension, internal_get_paper_size,
12596         outp_get_paper_size) New functions.
12597
12598         * postscript.c: Continued development.  Now links but doesn't make
12599         any marks on the page.  Lotsa bugs I suppose.
12600
12601         * str.c: (strcasecmp) [!HAVE_STRCASECMP] New function.
12602
12603         * str.h: Comment changes.
12604
12605 Sat Jul 27 22:32:38 1996  Ben Pfaff  <blp@gnu.org>
12606
12607         * Removed dependencies on non-nested comments in several files.
12608         Also removed references to (unix || __unix__) in #if's since
12609         prefh.orig makes those two equivalent.
12610         
12611         * ascii.c: (ascii_open_global) Creates ascii_arena.
12612         (ascii_close_global) Destroys ascii_arena.
12613         (ascii_init_driver) Doesn't create ascii_arena.
12614         (ascii_copy_driver) Removed.
12615         (ascii_option) Possible bugfix regarding %s vs. %.*s with a_string's.
12616         (outp_class ascii_class) Removed ascii_copy_driver reference.
12617
12618         * frequencies.q: Now can display all statistics except median.
12619         Still not finished.
12620
12621         * output.c: Handles outp_class.ref_count so output class
12622         destructors are called properly.
12623         (add_class) Sets ref_count to 0.
12624         (configure_driver) Initializes class if ref_count++ is 0.
12625         (destroy_driver) Destructs class if --ref_count is 0.  Frees the
12626         class output file name.
12627         
12628         * output.h: (struct outp_class) Removed copy_driver, inited.
12629         Added ref_count.
12630
12631         * postscript.c: Completely replaced but not finished.
12632         
12633 Tue Jul 23 21:48:36 1996  Ben Pfaff  <blp@gnu.org>
12634
12635         * approx.h: #includes <float.h>.
12636
12637         * arena.h, arena.c: Many functions changed to take an arena **
12638         instead of an arena *, for consistency.  All callers changed.
12639         (arena_alloc) Now creates a new arena if passed *A that is NULL.
12640         (arena_destroy) Sets *A to NULL.
12641         
12642         * ascii.c: (delineate) Implements OUTP_T_VERT correctly.  Removed
12643         assertion that `width' be positive.
12644
12645         * command.c: Removed #if's from cmd_table.
12646         (walk_cmdtable_func) [0] New function (debug code).
12647         (init_cmd_parser) [0] Dumps out cmd_table (debug code).
12648         (parse_cmd) Doesn't return failure for unimplemented commands.
12649
12650         * common.h: (SYSMIS) Changed from DBL_MAX to -DBL_MAX.
12651         (SYSCODE) New constant macro.
12652
12653         * descript.q: Checks for positive n_variables before performing
12654         analysis.
12655
12656         * file-handle.q: (get_handle_by_filename) Bug fix: passes &f to
12657         avl_find instead of &fp as arg 2.
12658
12659         * frequencies.g, frequencies.q: Continued updating; now compiles &
12660         works again, but not complete.
12661
12662         * main.c: Changes to user messages.
12663
12664         * misc.c: (reverse) [0] New function.
12665
12666         * settings.h: Comment removed.  #includes "common.h".
12667
12668         * som.c: (som_set_null) New function.
12669         (som_set_value, som_set_string, som_set_text) More detailing
12670         assertions.
12671         (som_set_float) Implemented function.
12672         (dump_columnated_table) Bug fix regarding page breaks.
12673         (draw_cell) Bug fix regarding text that spilled out of a cell.
12674         (draw_intersection, draw_horz_rule, draw_vert_rule) No longer draw
12675         null lines.
12676         (get_cell_size) Support SCON_EMPTY cells.
12677         (get_table_size) When calculating rules' widths and heights, mask
12678         out SLIN_SPACING bit.  Added SOPT_X_HLTL support.
12679         
12680         * som.h: (som_any_cell) New option SOPT_X_HTLT.  Removed
12681         SOPT_X_SHADE.
12682         (struct som_submission_form) New member `header'; all users
12683         changed.
12684
12685         * val-labs.c: (get_label) User messages changed.
12686
12687         * var.h: Changed FREQUENCIES structures.
12688
12689         * vars-atr.c: (is_num_user_missing, is_str_user_missing) Made
12690         inline.
12691         
12692 Fri Jul 19 19:11:13 1996  Ben Pfaff  <blp@gnu.org>
12693
12694         * approx.h: Definition of EPSILON now depends on system's
12695         DBL_EPSILON.  Removed GNU C specific code.
12696         (cmpapx) Renamed approx_compare.
12697
12698         * frequencies.g, frequencies.q: Continued updating; still doesn't
12699         compile.
12700
12701         * groff-font.c: (name_to_index) Fix bug that kept it from
12702         compiling.
12703
12704         * hash.c, hash.h: Completed work.
12705
12706         * var.h: Changes to freq_tab, frequencies_proc.
12707         
12708 Wed Jul 17 21:23:36 1996  Ben Pfaff  <blp@gnu.org>
12709
12710         New hashing code.
12711         * hash.c, hash.h: New files.  Not completed.
12712         * Makefile.am: Added hash.c to source file list.
12713         * font.h: (struct font_desc) New member kern_size_p.
12714         * groff-font.c: Uses hash.h.
12715         (hashpjw) Moved to hash.c.
12716         (next_prime_power) Rewrote, renamed hsh_next_prime, moved to
12717         hash.c.
12718         (static var hash) New member size_p.
12719         * var.h: Includes hash.h.
12720         (struct freq_tab) Changed AVL_TREE to hash_tab.
12721
12722         * vars-prs.c: Comment, formatting fixes.
12723
12724         * frequencies.g, frequencies.q: Continued updating.  Not yet
12725         working.
12726
12727         * formats.c: Bug fix.
12728
12729 Tue Jul 16 22:10:04 1996  Ben Pfaff  <blp@gnu.org>
12730
12731         Increasing parallelism between DESCRIPTIVES and FREQUENCIES.
12732         * descript.g: Comment fixes.
12733         * descript.q: Comment fixes.  Moved some declarations into var.h.
12734         Made dsc_info a static table.  Updated FIXMEs.
12735         (internal_cmd_descriptives) Beautified.
12736         
12737         * frequencies.q: Started updating into working order.
12738         * frequencies.g: New file analogous to descript.g.
12739         * var.h: Comment fixes.  Added structures for FREQUENCIES.
12740         
12741         * som.c: Removed vestiges of crushing and partial table support.
12742
12743 Sun Jul 14 15:45:31 1996  Ben Pfaff  <blp@gnu.org>
12744
12745         * Many more changes to som.c especially, but these will not be
12746         documented as I have resolved to remove them.  This patchlevel is
12747         being released solely so that I can fall back to it if I decide
12748         that removing the changes is not a good idea.
12749
12750 Sat Jul 13 09:58:44 1996  Ben Pfaff  <blp@gnu.org>
12751
12752         * som.c: (global var som) New member `cum_y'.
12753         (build_target) Properly handles titles for partial tables.
12754         (dump_partial_beg, dump_partial_mid, dump_partial_end)
12755         Merged into single new function dump_partial().  Fixed problem
12756         with titles on partial tables.
12757         (dump_table) Calls dump_partial() for all parts of partial tables.
12758         (dump_page) Criteria for drawing title changed.
12759         
12760 Fri Jul 12 22:03:36 1996  Ben Pfaff  <blp@gnu.org>
12761
12762         * command.c: (cmd_table) Added LIST, WEIGHT.
12763
12764         * command.c: (cmd_remark) No longer frees `s' since it's not
12765         dynamically allocated.
12766         
12767         * data-out.c: (convert_f) Now correctly handles the case where
12768         abs(v->f)<1 but v->f rounds to a value of 1.00 given the specified
12769         number of decimals.
12770         (som_destroy_all_tables) Removed argument.  All callers changed.
12771         (som_vline, som_hline) Argument validity checking corrected.
12772         (som_set_value) Implemented half-heartedly.
12773         (replicate_table) Copies tables piece-by-piece when using Checker.
12774
12775         * som.h: New line style SLIN_1THIN, currently equivalent to
12776         SLIN_0.  New enum set SOM_SUB_*.
12777         (struct som_submission_form) Removed `seq_no'.  Added `type'.
12778         
12779         * list.q: Newly working file; uses partial tables.
12780         
12781         * som.c: (som_reduce_table) Renamed som_set_table_height().
12782         (som_crush) Removed argument `group'.
12783         (global var som) Removed `nt', `seq_no'.  Added `type'.
12784         (som_submit_table) Arguments changed.
12785         (output_table) Removed partial table code.
12786         (build_target) New arg; partial table support added.  All callers
12787         changed.
12788         (dump_plain_table) Removed partial table code.
12789         (dump_partial_beg, dump_partial_mid, dump_partial_end) New functions.
12790         (dump_table) Supports partial tables.
12791         (dump_page) New argument to allow not drawing top and/or bottom
12792         headers.  All callers changed.  Supports partial tables.
12793
12794 Sat Jul  6 22:22:25 1996  Ben Pfaff  <blp@gnu.org>
12795
12796         * data-out.c: Changed `#include <approx.h>' to `#include
12797         "approx.h".
12798         (convert_F) Comment fix.  Now won't print `-.000', etc.
12799
12800         * descript.q: Now Z-scores work, although there appears to
12801         be a bug (which might actually be in data-out.c:convert_F()).
12802         (descriptives_trns_proc, descriptives_trns_free) New functions.
12803         (run_z_pass) Implemented.
12804         
12805         * var.h: Comment fixes.
12806         (dsc_z_score, descriptives_trns) New structs.
12807         (descriptives_trns) Added to any_trns as `dsc'.
12808
12809         * error.c, error.h: New error class, IS (Installation Script
12810         error), used in those instances where the error is in the
12811         installation, but there is a script file or installation file that
12812         can be usefully referred to.
12813         
12814         * output.c: Change many IE classes to IS classes.
12815
12816         * cases.c, command.c, common.c, crosstabs.q, expr-evl.c,
12817         frequencies.q, list.q, vars-prs.c, vfm.c: Removed reference to
12818         HAVE_MALLOC_H because Borland C++ alloca() is broken, so why
12819         include the corresponding header?
12820         
12821         * glob.c: (init_glob) Don't malloc term_buffer under Checker.
12822         Don't bail out if termcap can't be read.
12823
12824         * som.c: (som_destroy_table) Removed.
12825         (som_reduce_table, som_destroy_all_tables) New functions.
12826         (som_crush) New function, not implemented.
12827         
12828         * som.h: New table option STAB_CRUSH.  Comment fix.  New struct
12829         som_submission_form.  Function prototypes revised.
12830
12831         Outputting huge tables (1000s of rows) a few rows at a time
12832         is supported, though untested.  May even break everything.
12833         Actually, the code doesn't even compile right now.
12834         * som.c: (struct som) New fields htv, nt, seq_no.
12835         (som_submit_table) Multiple arguments changed to a single
12836         pointer to struct submission_form.  Only increments subtable_num
12837         if seq_no is zero.  Only destroys table if it's not going to
12838         be reused.
12839         (replicate_table) New function.
12840         (output_table) Comment fix.
12841         (examine_table) Changed inline code to code calling
12842         replicate_table().  Calculates htv.  Supports partial tables.
12843         (draw_title) Removed comment.
12844         (build_target) Only allows for title on first part of partial
12845         tables.
12846         (dump_plain_table) Only resets table chunk number on first part
12847         of partial tables; FIXME: doesn't work quite right.  Supports
12848         partial tables.
12849         (dump_page) Titles only on first part of partial tables.
12850
12851 Fri Jul  5 20:16:19 1996  Ben Pfaff  <blp@gnu.org>
12852
12853         * Thanks to an unreliable IDE hard drive, I have spent the last
12854         day reconstructing my Debian GNU/Linux installation and redoing
12855         the previous day's changes--somehow I managed to save every file
12856         except for output.c and output.h.  So the following changes could
12857         really be considered independent of the output.c, output.h changes
12858         from Jul 4.
12859
12860         * output.h, output.c: Moved the outp_configure_vec global var,
12861         outp_names struct, and enum set OUTP_S_* from output.h to output.c.
12862         outp_configure_vec is now static.
12863         
12864 Thu Jul  4 20:20:24 1996  Ben Pfaff  <blp@gnu.org>
12865
12866         * The entire philosophy behind configuration of the output drivers
12867         changed.  Now there is a termcap-type configuration where drivers
12868         to be read are determined beforehand, rather than parsing the
12869         entire output init file and storing it in memory & deciding what
12870         to actually use later.  Faster & more memory-efficient at the same
12871         time, cool.
12872         
12873         * output.c: Comment fix.  Removed outp_init_drivers global var.
12874         Removed all references to synonyms.  New structure outp_defn.  New
12875         global vars outp_macros, outp_configure_vec.
12876         (search_name, delete_name, add_name, check_configure_vec,
12877         expand_name, find_defn_value) New static functions.
12878         (outp_configure_clear, outp_configure_add, outp_configure_macro,
12879         outp_read_devices) New extern functions.
12880         (outp_init) Much functionality moved into outp_read_devices.
12881         (outp_read_devices) Format of output init file changed; name of
12882         file is `devices' rather than `output' to avoid Makefile
12883         conflicts.
12884         (outp_clear) Renamed outp_done.
12885         (outp_list_classes) Bug fix, cleaned up.
12886         (outp_list_drivers) Not implemented anymore.
12887         (outp_configure_driver) Now a static function; simplified; now
12888         interpolates macros; supports new structure.
12889         (outp_enable_driver, match_synonym) Removed; all references
12890         removed.
12891         (find_driver) First argument removed.
12892         
12893         * output.h: Global var outp_init_drivers removed; new structure
12894         outp_names; new enum set OUTP_S_*; new global var
12895         outp_configure_vec; function prototypes for output.c exports
12896         updated.
12897         
12898         * main.c: (main) Calls outp_read_devices() after parsing the
12899         command line.
12900         
12901         * cmdline.c: (parse_command_line) New option -v --verbose;
12902         --version changed to -V.  --device option changed syntax to just
12903         take a single device name.  Accepts key=value declaration of
12904         output init file macros.  Syntax message updated.
12905
12906         * filename.c: (expand_line) New function.
12907         (interp_environ_vars) Renamed interp_vars; no longer uses
12908         fixed-size buffer.
12909         (blp_getenv) Allows $ARCH and $VER pseudo-environment-vars to be
12910         overridden by real environment vars.
12911         (search_path) Uses verbose_msg() instead of #ifdef'd printf().
12912         * filename.h: interp_environ_vars() renamed interp_vars().
12913         
12914         * error.c, error.h: Added extern variable `verbosity', message
12915         class MM.
12916         
12917         * error.c: (vmsg) Support message class MM.
12918         (verbose_msg) New function.
12919
12920         * descript.q: (generate_z_varname) Bug fix in generation of
12921         Z-score varnames.
12922         (dump_z_table) Bug fix in column headers.
12923         
12924         * ascii.c: (ascii_init_driver) Changed minimum number of lines per
12925         page from 29 to 15.  Don't set a default for ops[OPS_INIT,
12926         OPS_DONE].  Writes the uninit string when the driver is closed.
12927         (ascii_open_page) Write the init string before the first page.
12928         (output_shorts) Form of main loop changed from `while' to `for'.
12929         Bug fix with overstrikes: the character is printed *after* the
12930         backspace.  Eliminated a lot of `& 0xff' modifiers.
12931         (advance_to_left_margin) New function.
12932         (return_carriage, output_lines) Handle left margin.
12933
12934 Thu Jul  4 00:35:59 1996  Ben Pfaff  <blp@gnu.org>
12935
12936         * ascii.c: New option `carriage-return-style'.
12937
12938         * ascii.c: (count_fancy_chars) New function.
12939         (delineate, text_metrics) Use new function; bug fixes regarding
12940         rich text strings.
12941         (text_draw) Bug fix with rich text.
12942         (output_string, output_shorts) Reordered.
12943         (output_shorts) Now handles boxchars and some overstrike font
12944         changes.
12945         (output_char, return_carriage) New functions.
12946         (output_lines) Now handles overstriking and font changes properly;
12947         some code moved to output_shorts.
12948
12949 Tue Jul  2 22:13:23 1996  Ben Pfaff  <blp@gnu.org>
12950
12951         [GLOBAL_DEBUGGING]
12952         * ascii.c: New member `debug' in ascii_driver_ext.
12953         (ascii_init_driver, delineate) Uses new member.
12954
12955         Now you can set a vertical height on writing text.
12956         * ascii.c: (delineate) Keeps track of vertical position.
12957         (text_draw) No longer considers fully justified text an internal
12958         error.
12959         
12960         * output.h: New flag OUTP_T_VERT; other OUTP_T_ values changed.
12961
12962         Tables' titles are drawn; they can have variable height.
12963         * som.c: `som' struct has new member, title_height.
12964         (draw_title) New argument.  Moved within file.  All caller
12965         changed.
12966         (build_target) New argument, amount of space needed for first row.
12967         Calculates height of title, takes that into account.  All callers
12968         changed.
12969         (dump_plain_table, dump_columnated_table) Took calculation of y1,
12970         y2 out of loop.
12971         (dump_columnated_table) [GLOBAL_DEBUGGING] Debugging code
12972         improved.
12973         (dump_columnated_table) Organized for readability.
12974         (dump_page) Makes use of som.title_height.
12975
12976         * som.c: Many comment bug fixes.
12977
12978         * descript.q: (try_name, generate_z_name) Bug fix regarding
12979         generation of Z-score variable names.
12980         * var.h: Removed num from descriptives_proc; all referents removed.
12981
12982 Mon Jul  1 22:13:39 1996  Ben Pfaff  <blp@gnu.org>
12983
12984         * ascii.c: (ascii_line_horz, ascii_line_vert,
12985         ascii_line_intersection) Added debugging code.
12986
12987         Added a descriptive line above each table to describe it.
12988         * command.c: (parse_cmd) Calls som_new_series.
12989         
12990         * som.c: New static vars table_num, subtable_num.  New `som'
12991         member `title'.
12992         (dump_page) New arguments.
12993         (som_submit_table) Handle new variables.
12994         
12995         * som.c, som.h: (som_submit_table) New arguments.  All callers
12996         changed.
12997         (som_new_series) New function.
12998         (build_target) Makes room for extra line.
12999         (draw_title) New function.
13000         (dump_page) Calls draw_title.  Bug fix: doesn't always set
13001         som.ext->cp to 0.
13002         
13003         Columnation of tables support.
13004         * som.h: Deleted fr, lr, ri from som_table.  Reorganized.
13005         
13006         * som.c: Deleted references to fr, lr, ri.
13007         (som_columnate) Bux fix: sets group member of table.
13008         (som_add_options) Function removed.
13009         (dump_table) Split into three functions; extensively reworked.
13010         
13011         * descript.q: (dump_z_table) Better output table formatting; added
13012         title support to correspond to som.h changes.
13013         (display) Title support.
13014
13015         * output.h: Added OUTP_T_NONE.
13016         
13017 Mon Jul  1 13:00:00 1996  Ben Pfaff  <blp@gnu.org>
13018
13019         * descript.q: Improved handling of Z scores; still not perfect.
13020         
13021         * output.h, ascii.c: Added hook for getting em width of current
13022         font.
13023         
13024         * som.c: Uses new em-width hook.  Added debugging code to
13025         several functions.
13026         (som_columnate) New argument.
13027         (som_add_options) Removed.
13028
13029 Jun 29 17:40:47 1996  Ben Pfaff  <blp@gnu.org>
13030
13031         * som.h, som.c, output.c, output.h, ascii.c: Updated to work with
13032         rules as a property of the table instead of as a property of the
13033         cells.
13034         
13035         * ascii.c: Added `header' to table of options.
13036         
13037         * descript.q: Added even shorter statistic names; modified to work
13038         with new som interface.
13039         
13040         * misc.c (blp_getdelim): Bug fix.
13041         
13042         * version.c: includes 'conf.h'.
13043         
13044 ----------------------------------------------------------------------
13045 Local Variables:
13046 mode: change-log
13047 version-control: never
13048 End: