Ben Pfaff [Thu, 4 Feb 2010 05:05:43 +0000 (21:05 -0800)]
csv: Close pipe files properly.
csv_create() opens the output file with fn_open() so csv_destroy() should
close it with fn_close() to ensure that pipes and the standard file
descriptors are closed properly.
Ben Pfaff [Tue, 19 Jan 2010 06:19:13 +0000 (22:19 -0800)]
pspp: Fix interactive usability for multi-line commands.
Until now, the terminal UI has only flushed output just before reading
the first line of a command. This generally worked OK because typically
only the final command produced output, not intermediate lines. But now
every line of a command potentially produces output (e.g. the command name
or the command syntax). With the ASCII driver that makes the interface
difficult to use because it typically opens and holds open a pipe to an
interactive program such as "more", which in turn turns off terminal echo
etc.
Flushing output before reading each command avoids this problem and makes
the terminal UI more usable.
Ben Pfaff [Tue, 19 Jan 2010 06:10:30 +0000 (22:10 -0800)]
ascii: Fix closing pipe files in ascii_destroy().
Files that are opened with fn_open() must be closed with fn_close(), but
ascii_destroy() wasn't doing that. This made a particular difference for
interactive output where fn_close() calls pclose() instead of fclose().
Ben Pfaff [Tue, 19 Jan 2010 00:10:10 +0000 (16:10 -0800)]
message: Fix corner case in msg_emit().
In most cases, msg_emit() initialized the "where" member of the message
passed in. However, if msg_init() had not yet been called, it did not do
this. This fixes that corner case.
In addition, one caller of msg_emit() did not initialize these members. It
is not necessary for both msg_emit() and its callers to do so, but since
most callers did so, this commit simply makes the remaining caller do so
as well, for consistency.
Ben Pfaff [Mon, 18 Jan 2010 23:59:56 +0000 (15:59 -0800)]
message: Make msg_dup() copy and msg_destroy() free the file name.
This fixes a PSPPIRE bug in its message handling (found by inspection). It
makes copies of messages to use later. The file names were not being
copied, so in the meantime it was posible that they would be freed,
yielding a use-after-free error.
Since doing this sensibly required changing the file_name member of
struct msg_locator from "const char *" to "char *", it also touches up
places where this caused new warnings.
Ben Pfaff [Mon, 18 Jan 2010 23:13:02 +0000 (15:13 -0800)]
New library for interned strings.
An "interned" string is stored in a global hash table. Only one copy of any
given string is kept in the hash table, which reduces memory usage in cases
where there might otherwise be many duplicates of a given string.
Interned strings can be compared for equality by comparing pointers, which
can also be a significant advantage in some cases.
Interned strings are immutable.
This commit adds a general-purpose implementation of interned strings and
adapts the implementation of value labels, which already had a
special-purpose and less convenient implementation of interned strings,
to use them.
Ben Pfaff [Mon, 18 Jan 2010 21:21:24 +0000 (13:21 -0800)]
Update Makefile for tests to reflect currently recommended style.
The Autotest example Makefile was recently update to use $(VAR) notation
instead of @VAR@ notation:
http://permalink.gmane.org/gmane.comp.sysutils.autoconf.patches/6978
This commit updates tests/automake.mk to follow this new style.
Ben Pfaff [Sun, 17 Jan 2010 02:07:31 +0000 (18:07 -0800)]
Rewrite PSPP output engine.
This rewrite makes the PSPP output engine much more object-oriented and
extensible than previously. It should make it much easier to add new
output features, such as cell footnotes and nested tables. It also makes
minimal changes to code that currently uses the output engine. The largest
changes are to the implementation of the LIST procedure, which are
necessary because this procedure had a too-intimate relationship with the
details of the output drivers.
The cairo and ascii drivers are now much better at breaking large cells and
large tables across pages and at choosing appropriate sizes for rows and
columns.
This commit adds a new output driver called "csv", which presents output
in comma-separated value format. It also updates all of the test cases
that produce output to use this output format.
This commit enhances the HTML output significantly and the ODF output
slightly.
This commit adds support for charts to the GUI output. However, it
temporarily removes the tree-view output summary pane from GUI output. It
should not be difficult to restore this later.
Ben Pfaff [Sun, 17 Jan 2010 00:06:38 +0000 (16:06 -0800)]
LIST: Remove WEIGHT subcommand.
This subcommand is not needed for compatibility, and it is not really
useful because the case weight can be listed by including the name of
the weighting variable on the LIST command.
Ben Pfaff [Tue, 22 Dec 2009 01:11:47 +0000 (17:11 -0800)]
casereader: Make parameter to casereader_count_cases const.
casereader_count_cases does not conceptually modify its argument, since
there is no way for the client to observe the difference (other than
through improved performance). So there is no need for the parameter to
be const.
John Darrington [Wed, 16 Dec 2009 20:52:17 +0000 (21:52 +0100)]
Linear Regression: Dependent variables should not be strings.
Prevent the gui from selecting string variables as the dependent
variable in a linear regression procedure, since that's not
allowed in such a procedure.
John Darrington [Wed, 16 Dec 2009 18:49:22 +0000 (19:49 +0100)]
New interface PsppireSelectDestWidget.
Created a new interface type PsppireSelectDestWidget to serve
as an abstract widget which can be the destination for a PsppireSelector.
Changed PsppireVarView to implement this interface.
John Darrington [Sat, 12 Dec 2009 11:55:57 +0000 (12:55 +0100)]
Remove awkward dependency from psppire-selector.c
Removed the default selection functions from being
statically linked to psppire-selector.c - apart from
being inelegant this caused a lot of unncessary dependencies
in the glade module.
John Darrington [Mon, 16 Nov 2009 18:29:25 +0000 (19:29 +0100)]
PsppireDictView: Change "dictionary" property to "model".
Previously, PsppireDictView, which derives from GtkTreeView,
had a property "dictionary", and a trap on the GtkTreeView's
"model" property. This change removes the trap and changes the
"dictionary" property to an override of the "model" property.
John Darrington [Sun, 15 Nov 2009 21:30:18 +0000 (22:30 +0100)]
PsppireSelector: new properties: "source-widget" and "dest-widget".
Previously, a function psppire_selector_set_subjects was used to
set the destination and source widgets of a PsppireSelector. This
change adds two new properties, and sets them in the GtkBuilder
definitions instead of in the C code.
Ben Pfaff [Thu, 15 Oct 2009 04:20:44 +0000 (21:20 -0700)]
sys-file-reader: Tolerate nonsensical opcodes in compressed data.
Compressed data in .sav files uses a set of 256 opcodes, some of which make
sense only for numeric data and others of which only make sense for string
data. However, Jereme Thomas <jereme.thomas@gmail.com> has provided one
file, written by SPSS 14, that uses an opcode that seems to makes sense
only for numeric data in a string field. So this commit adds support for
these opcodes, although it still warns about the ones other than the exact
one found in the file provided by Jereme.
Ben Pfaff [Thu, 15 Oct 2009 03:41:25 +0000 (20:41 -0700)]
Enhance dissect-sysfile utility to print compressed data also.
This proved useful in investigating a report that PSPP failed to read a
.sav file that contained compressed data, so it seems worthwhile to include
it in the PSPP tree.
Ben Pfaff [Mon, 12 Oct 2009 04:31:18 +0000 (21:31 -0700)]
Don't delete .po files from source directory in "make clean".
Running "make clean" when the source directory is configured as a build
directory shouldn't delete the .po files, but the rule as written did so.
This fixes the problem.