pspp
13 years agooutput: New function text_item_create_nocopy().
Ben Pfaff [Tue, 7 Dec 2010 04:54:40 +0000 (20:54 -0800)]
output: New function text_item_create_nocopy().

13 years agosys-file-reader: Refactor to clean up character encoding support.
Ben Pfaff [Sun, 6 Feb 2011 05:10:10 +0000 (21:10 -0800)]
sys-file-reader: Refactor to clean up character encoding support.

The system file format is unusual in that it does not record the encoding
used by character strings at the beginning or at any fixed place in the
file.  Instead, it can be recorded practically anywhere in the file.  It
never precedes all of the actual character strings in the file, which makes
it impossible to interpret those strings completely and correctly until it
is encountered.

Until now, the system file reader has dealt with this situation by
stuffing uninterpreted character strings into data structures until the
encoding is known, then at that point fetching out the character strings,
reencoding them, and stuffing them back into the data structures.  This
does work, but it has the disadvantage that all of the PSPP data
structures have to tolerate character strings with unknown encoding.  In
some cases this seems like an ugly situation.  For example, arbitrary
variable names have to be supported, even though the syntax for variable
names is circumscribed by the language, because the syntax rules for
variable names cannot be completely and correctly applied to a string that
is in an unknown encoding.

This commit fixes that problem by adopting a new way to read system files.
Each record in the system file dictionary is essentially slurped into
memory as a chunk, then the character encoding is extracted from it, then
the rest of the dictionary is interpreted based on that encoding.  The
actual implementation is a little more intricate because the format of
system file records is somewhat non-uniform.

13 years agofile-name: Do not make output files line-buffered in fn_open().
Ben Pfaff [Thu, 17 Mar 2011 04:33:54 +0000 (21:33 -0700)]
file-name: Do not make output files line-buffered in fn_open().

I don't see any reason to do this.  I can't see anything in the commit
log for this file or in OChangeLog that explains why it was done.

13 years agodata-reader: Remove unreachable "return" statements.
Ben Pfaff [Tue, 15 Mar 2011 01:19:23 +0000 (18:19 -0700)]
data-reader: Remove unreachable "return" statements.

13 years agofile-handle-def: Use hmap instead of list for name table. 20110320030508/pspp
Ben Pfaff [Sun, 5 Sep 2010 03:56:41 +0000 (20:56 -0700)]
file-handle-def: Use hmap instead of list for name table.

It makes much more sense to keep an index of names using a hash table
than using a linked list.

13 years agoUpdate all #include directives to the currently preferred style.
Ben Pfaff [Sat, 19 Mar 2011 20:48:24 +0000 (13:48 -0700)]
Update all #include directives to the currently preferred style.

I left src/ui/gui alone for now.

13 years agoSmake: Remove ulc-width-linebreaks module.
Ben Pfaff [Sat, 19 Mar 2011 20:57:45 +0000 (13:57 -0700)]
Smake: Remove ulc-width-linebreaks module.

This function has not been used in PSPP for a long time now.

13 years agoFREQUENCIES: Fix percentiles calculation. 20110312030504/pspp 20110313030503/pspp 20110314030506/pspp 20110315030503/pspp 20110316030502/pspp 20110317030504/pspp 20110318030507/pspp 20110319030507/pspp
Ben Pfaff [Sat, 12 Mar 2011 06:10:54 +0000 (22:10 -0800)]
FREQUENCIES: Fix percentiles calculation.

The condition for using a variate directly instead of interpolating was
just wrong.  It would interpolate in cases where it clearly should not,
which produced incorrect results in many cases.

Thanks to Fabio Bordignon <bordignon@demos.it> for reporting the problem
and supplying a simple test case.

13 years agoT-TEST: Fix use-after-free with TEMPORARY and independent samples. 20110311030503/pspp
Ben Pfaff [Fri, 11 Mar 2011 06:53:17 +0000 (22:53 -0800)]
T-TEST: Fix use-after-free with TEMPORARY and independent samples.

When TEMPORARY is in effect, proc_commit() destroys the temporary
dictionary.  This means that any procedure that does not somehow disable
temporary transformations and refers to a variable following proc_commit()
has a use-after-free error.

T-TEST has two different bugs of this type.  First, the loop that destroys
group statistics refers to destroyed variables.  This commit fixes this
problem by instead using variable aux data destructors to destroy group
statistics.

Second, when there is an independent variable, destroying its values
requires knowing the variable's width.  This commit fixes this problem by
destroying the values before calling proc_commit().

The AUTORECODE, DESCRIPTIVES, RANK, and REGRESSION procedures appear to
have similar issues (not fixed by this commit).

Reported by Jeremy Lavergne <jeremy@lavergne.gotdns.org>.

13 years agogroup: Delete unused functions.
Ben Pfaff [Fri, 11 Mar 2011 06:46:04 +0000 (22:46 -0800)]
group: Delete unused functions.

13 years agoDELETE VARIABLES: Style fix.
Ben Pfaff [Fri, 11 Mar 2011 06:44:50 +0000 (22:44 -0800)]
DELETE VARIABLES: Style fix.

13 years agoREADME.Git: Update to newer commit. 20110225030502/pspp 20110225070542/pspp 20110226030503/pspp 20110227030503/pspp 20110228030503/pspp 20110301030502/pspp 20110302030503/pspp 20110303030502/pspp 20110304030502/pspp 20110305030508/pspp 20110306030502/pspp 20110307030503/pspp 20110308030502/pspp 20110309030501/pspp 20110310030503/pspp
Ben Pfaff [Fri, 25 Feb 2011 05:31:44 +0000 (21:31 -0800)]
README.Git: Update to newer commit.

This is the Gnulib commit I'm testing against locally.  It should fix the
problem that showed up in the nightly build, in which the dtoastr module
was missing.

13 years agodata-out: Add test for non-ASCII custom currency formats. 20110223030502/pspp 20110224030502/pspp
Ben Pfaff [Sun, 20 Feb 2011 01:30:39 +0000 (17:30 -0800)]
data-out: Add test for non-ASCII custom currency formats.

These now work as I would expect, so add a test to avoid future regression.

13 years agodata-out: Optimize and fix some bad assumptions.
Ben Pfaff [Sat, 19 Feb 2011 20:55:54 +0000 (12:55 -0800)]
data-out: Optimize and fix some bad assumptions.

Until now, data_out_pool() and its wrapper function data_out() have always
done at least two memory allocations: one to fill in the initial version
of the result and another to recode it to UTF-8.  However, recoding to
UTF-8 is usually unnecessary, because most output formats always produce
output in UTF-8 anyway.  Only binary formats and the string A format ever
produce data in other encodings, so this commit drops recoding entirely
except for those cases.  Binary formats are a particularly special case:
usually it doesn't make any sense to use these formats for text output,
but this commit does its best to translate the binary output bytes into
valid UTF-8, at least up to the first null byte.

This commit also finishes fixing up display widths.

The closely related data_out_legacy() function, which only has one user
in three also needed some work.  It was badly named, so I renamed it to
data_out_recode().  It made the bad assumption that the data passed in
was encoded in ASCII (written C_ENCODING).  It also made the bad
assumption that the number of bytes output would be exactly the format's
width.  This rewrite fixes these problems.

13 years agopool: Support NULL pool argument to pool_alloc_unaligned().
Ben Pfaff [Sat, 19 Feb 2011 05:58:08 +0000 (21:58 -0800)]
pool: Support NULL pool argument to pool_alloc_unaligned().

I don't see a reason that this should be unsupported.

13 years agodata-out: Reorganize output_Z() to be more easily understood.
Ben Pfaff [Thu, 17 Feb 2011 05:42:13 +0000 (21:42 -0800)]
data-out: Reorganize output_Z() to be more easily understood.

It took me a minute to figure out what was going on here, so this commit
slightly reorganizes it.

13 years agoformat: Count prefix and suffix width in terms of display columns.
Ben Pfaff [Sat, 19 Feb 2011 05:55:18 +0000 (21:55 -0800)]
format: Count prefix and suffix width in terms of display columns.

Until now, the prefixes and suffixes for custom currency formats
(CCA, etc.) have been considered to occupy one display column per
byte.  This is fine for prefixes and suffixes like "$" or "%", but
falls down badly with U+00A5 (¥) or U+20AC (€), which occupy two
or three bytes, respectively, in UTF-8, while occupying only a
single display column.

This commit fixes the problem.  It doesn't add a test yet because
there are still some higher-level issues, but that will come in
a later commit when those remaining issues are resolved.

13 years agoformat: Create a new "struct fmt_affix" for prefix and suffix strings.
Ben Pfaff [Wed, 16 Feb 2011 06:00:33 +0000 (22:00 -0800)]
format: Create a new "struct fmt_affix" for prefix and suffix strings.

This combines two changes: changing the string type for numeric
prefix and suffix strings from "struct substring" to plain "char *",
and putting the string inside a new structure.  Both of these will
make more sense after the following commit, which adds another member
to the new structure and stops using the length of the string in so
many places (which is the reason that "struct substring" was a good
choice).

13 years agodata-out: Make each converter responsible for storing null terminator.
Ben Pfaff [Sat, 19 Feb 2011 06:30:00 +0000 (22:30 -0800)]
data-out: Make each converter responsible for storing null terminator.

Until now, every converter has produced output that is exactly as many
bytes long as the format's width.  In upcoming patches this will change,
because in UTF-8 a character that occupies a single display column can
require multiple bytes.  In preparation, this commit requires the
individual converters to write out their own null byte, giving a bit
more flexibility regarding length.

13 years agoformat: Increase abstraction of fmt_number_style.
Ben Pfaff [Tue, 15 Feb 2011 07:17:11 +0000 (23:17 -0800)]
format: Increase abstraction of fmt_number_style.

Upcoming commits will make some changes to fmt_number_style, so it
seems best to avoid having clients actually construct and modify
instances of this structure.  This commit makes that change.

We could take it one step further and add accessor functions even
for reading out the structure, but in my opinion that would be
overkill for this structure.

13 years agolegacy-encoding: Remove.
Ben Pfaff [Sun, 13 Feb 2011 19:23:06 +0000 (11:23 -0800)]
legacy-encoding: Remove.

The functions in this module are no longer used.

13 years agoi18n: Introduce C_ENCODING as replacement for LEGACY_NATIVE.
Ben Pfaff [Sun, 13 Feb 2011 19:49:30 +0000 (11:49 -0800)]
i18n: Introduce C_ENCODING as replacement for LEGACY_NATIVE.

The LEGACY_NATIVE name seems a bit awkward for something that is just the
name of the encoding for strings in C source code, that is, the C locale,
so this commit renames it to C_ENCODING and moves it to i18n.h with the
rest of the encoding-related functions.

In addition, PSPP assumes in various places that the local system has
ASCII-based locales.  I don't think there's much point in pretending to
support EBCDIC, so this commit removes that little bit of support.

13 years agoi18n: New function recode_byte().
Ben Pfaff [Sun, 13 Feb 2011 19:36:27 +0000 (11:36 -0800)]
i18n: New function recode_byte().

13 years agoPRINT: Use UTF-8 encoding for output to the output subsystem.
Ben Pfaff [Sun, 20 Feb 2011 00:55:58 +0000 (16:55 -0800)]
PRINT: Use UTF-8 encoding for output to the output subsystem.

All string data coming into the output subsystem must be encoded in UTF-8,
but PRINT was recoding it into ASCII instead.

13 years agoCROSSTABS: Eliminate redundant data copying.
Ben Pfaff [Tue, 15 Feb 2011 06:04:51 +0000 (22:04 -0800)]
CROSSTABS: Eliminate redundant data copying.

There's no point in copying the output string twice.

13 years agoUse new Gnulib function dtoastr() to format short, accurate real numbers.
Ben Pfaff [Mon, 14 Feb 2011 06:20:45 +0000 (22:20 -0800)]
Use new Gnulib function dtoastr() to format short, accurate real numbers.

%.*g with DBL_DIG + 1 as argument is simple but in rare cases it fails to
accurately format a real number.  The recently added Gnulib routine
dtoastr() always formats a real number accurately, so switch to using it
for these cases.

13 years agooperations.def: Fix indentation. 191/pspp 192/pspp 193/pspp 194/pspp 195/pspp 196/pspp 197/pspp 198/pspp 199/pspp 20110214030502/pspp 20110215030502/pspp 20110216030503/pspp 20110217030502/pspp 20110218030502/pspp 20110219030503/pspp 20110220030503/pspp 20110221030503/pspp 20110222030502/pspp
Ben Pfaff [Sun, 13 Feb 2011 19:20:35 +0000 (11:20 -0800)]
operations.def: Fix indentation.

13 years agoPRINT SPACE: When an output file is specified, don't ignore expression. 190/pspp 20110213030502/pspp
Ben Pfaff [Sat, 12 Feb 2011 16:02:48 +0000 (08:02 -0800)]
PRINT SPACE: When an output file is specified, don't ignore expression.

When both OUTFILE= and an expression were specified on PRINT SPACE, the
expression was ignored (if it was only a single token) or an error would
occur (if it was was more than one token).

13 years agoGET DATA: Get rid of lex_put_back().
Ben Pfaff [Sun, 6 Feb 2011 21:39:38 +0000 (13:39 -0800)]
GET DATA: Get rid of lex_put_back().

An upcoming commit will get rid of lex_put_back(), so don't use it here.

13 years agofloat-format: Eliminate tests' dependence on exact string encoding.
Ben Pfaff [Sun, 12 Dec 2010 22:00:28 +0000 (14:00 -0800)]
float-format: Eliminate tests' dependence on exact string encoding.

Until now, the float-format tests have depended on the PSPP syntax
accepting arbitrary byte values in strings, without treating them as part
of any particular encoding.  The lexer is being rewritten so that this
assumption is no longer true, so this commit eliminates this assumption in
the float-format tests.  After this commit, the tests only use ASCII
characters in strings.

13 years agopor-file-reader: Remove dependency on VAR_NAME_LEN. 189/pspp 20110212030502/pspp
Ben Pfaff [Sun, 2 Jan 2011 00:42:06 +0000 (16:42 -0800)]
por-file-reader: Remove dependency on VAR_NAME_LEN.

VAR_NAME_LEN wasn't really needed here because we knew that the name we
started from was no more than 8 bytes long.  Also, we know that we can
come up with a unique name within ULONG_MAX tries since we'd run out of
memory before running out of values to try.

Most uses of VAR_NAME_LEN within PSPP are wrong due to encoding issues:
the limit applies to variable names in the encoding used by the data
set, but most uses of VAR_NAME_LEN actually limit the length of a name
in UTF-8.  The UTF-8 representation of a name can be longer or shorter
than its representation in the data set encoding, so it seems best to
eliminate references to VAR_NAME_LEN entirely.

13 years agotext-data-import-dialog: Eliminate VAR_NAME_LEN restriction.
Ben Pfaff [Sun, 2 Jan 2011 00:30:42 +0000 (16:30 -0800)]
text-data-import-dialog: Eliminate VAR_NAME_LEN restriction.

Most uses of VAR_NAME_LEN within PSPP are wrong due to encoding issues:
the limit applies to variable names in the encoding used by the data
set, but most uses of VAR_NAME_LEN actually limit the length of a name
in UTF-8.  The UTF-8 representation of a name can be longer or shorter
than its representation in the data set encoding, so it seems best to
eliminate references to VAR_NAME_LEN entirely.

13 years agoREGRESSION: Eliminate restriction to VAR_NAME_LEN in reg_get_name().
Ben Pfaff [Sun, 2 Jan 2011 00:26:25 +0000 (16:26 -0800)]
REGRESSION: Eliminate restriction to VAR_NAME_LEN in reg_get_name().

There's still an obvious problem here that the prefix isn't being trimmed
down so that the suffix will fit.  Since an upcoming series of changes
would have to completely redo how this would be done, I'm not fixing that
now, only marking it with XXX.

Most uses of VAR_NAME_LEN within PSPP are wrong due to encoding issues:
the limit applies to variable names in the encoding used by the data
set, but most uses of VAR_NAME_LEN actually limit the length of a name
in UTF-8.  The UTF-8 representation of a name can be longer or shorter
than its representation in the data set encoding, so it seems best to
eliminate references to VAR_NAME_LEN entirely.

13 years agoFLIP: Eliminate false dependency on VAR_NAME_LEN.
Ben Pfaff [Sun, 2 Jan 2011 00:16:30 +0000 (16:16 -0800)]
FLIP: Eliminate false dependency on VAR_NAME_LEN.

The size of this buffer really shouldn't have anything to do with
VAR_NAME_LEN but with the string about to be put into it.

Most uses of VAR_NAME_LEN within PSPP are wrong due to encoding issues:
the limit applies to variable names in the encoding used by the data
set, but most uses of VAR_NAME_LEN actually limit the length of a name
in UTF-8.  The UTF-8 representation of a name can be longer or shorter
than its representation in the data set encoding, so it seems best to
eliminate references to VAR_NAME_LEN entirely.

13 years agoDESCRIPTIVES: Eliminate main restriction on Z-score variable name length.
Ben Pfaff [Sun, 2 Jan 2011 00:08:03 +0000 (16:08 -0800)]
DESCRIPTIVES: Eliminate main restriction on Z-score variable name length.

13 years agovariable-parser: Drop VAR_NAME_LEN restriction from var_set_lookup_var_idx().
Ben Pfaff [Sat, 1 Jan 2011 23:54:54 +0000 (15:54 -0800)]
variable-parser: Drop VAR_NAME_LEN restriction from var_set_lookup_var_idx().

This restriction is purely artificial, as part of an assertion.  Since
longer variable names are going to have to be supported, remove it.

Most uses of VAR_NAME_LEN within PSPP are wrong due to encoding issues:
the limit applies to variable names in the encoding used by the data
set, but most uses of VAR_NAME_LEN actually limit the length of a name
in UTF-8.  The UTF-8 representation of a name can be longer or shorter
than its representation in the data set encoding, so it seems best to
eliminate references to VAR_NAME_LEN entirely.

13 years agovariable-parser: Rewrite parse_DATA_LIST_vars().
Ben Pfaff [Sat, 1 Jan 2011 21:00:49 +0000 (13:00 -0800)]
variable-parser: Rewrite parse_DATA_LIST_vars().

This rewrite was prompted by getting rid of the VAR_NAME_LEN limit inside
parse_DATA_LIST_vars(), but then I noticed that the variable naming and
coding style was dated, and that duplicate variable names were only
detected for variables named using TO, not for individual names, so I
rewrote much of the code instead.

13 years agoDEBUG EVALUATE: Eliminate VAR_NAME_LEN limit.
Ben Pfaff [Sat, 1 Jan 2011 19:15:33 +0000 (11:15 -0800)]
DEBUG EVALUATE: Eliminate VAR_NAME_LEN limit.

Most uses of VAR_NAME_LEN within PSPP are wrong due to encoding issues:
the limit applies to variable names in the encoding used by the data
set, but most uses of VAR_NAME_LEN actually limit the length of a name
in UTF-8.  The UTF-8 representation of a name can be longer or shorter
than its representation in the data set encoding, so it seems best to
eliminate references to VAR_NAME_LEN entirely.

13 years agoVECTOR: Eliminate VAR_NAME_LEN limit for variable names.
Ben Pfaff [Sat, 1 Jan 2011 19:11:07 +0000 (11:11 -0800)]
VECTOR: Eliminate VAR_NAME_LEN limit for variable names.

Most uses of VAR_NAME_LEN within PSPP are wrong due to encoding issues:
the limit applies to variable names in the encoding used by the data
set, but most uses of VAR_NAME_LEN actually limit the length of a name
in UTF-8.  The UTF-8 representation of a name can be longer or shorter
than its representation in the data set encoding, so it seems best to
eliminate references to VAR_NAME_LEN entirely.

13 years agoMODIFY VARIABLES: Eliminate VAR_NAME_LEN limit on variable names.
Ben Pfaff [Sat, 1 Jan 2011 19:09:01 +0000 (11:09 -0800)]
MODIFY VARIABLES: Eliminate VAR_NAME_LEN limit on variable names.

This is actually a general code improvement, since it eliminates memory
allocation and copying that was not actually necessary.

Most uses of VAR_NAME_LEN within PSPP are wrong due to encoding issues:
the limit applies to variable names in the encoding used by the data
set, but most uses of VAR_NAME_LEN actually limit the length of a name
in UTF-8.  The UTF-8 representation of a name can be longer or shorter
than its representation in the data set encoding, so it seems best to
eliminate references to VAR_NAME_LEN entirely.

13 years agoDATAFILE ATTRIBUTE, VARIABLE ATTRIBUTE: Eliminate VAR_NAME_LEN limit.
Ben Pfaff [Sat, 1 Jan 2011 19:05:14 +0000 (11:05 -0800)]
DATAFILE ATTRIBUTE, VARIABLE ATTRIBUTE: Eliminate VAR_NAME_LEN limit.

Most uses of VAR_NAME_LEN within PSPP are wrong due to encoding issues:
the limit applies to variable names in the encoding used by the data
set, but most uses of VAR_NAME_LEN actually limit the length of a name
in UTF-8.  The UTF-8 representation of a name can be longer or shorter
than its representation in the data set encoding, so it seems best to
eliminate references to VAR_NAME_LEN entirely.

13 years agoGET DATA /TYPE=TXT: Get rid of VAR_NAME_LEN limit on variable names.
Ben Pfaff [Sat, 1 Jan 2011 18:59:03 +0000 (10:59 -0800)]
GET DATA /TYPE=TXT: Get rid of VAR_NAME_LEN limit on variable names.

Most uses of VAR_NAME_LEN within PSPP are wrong due to encoding issues:
the limit applies to variable names in the encoding used by the data
set, but most uses of VAR_NAME_LEN actually limit the length of a name
in UTF-8.  The UTF-8 representation of a name can be longer or shorter
than its representation in the data set encoding, so it seems best to
eliminate references to VAR_NAME_LEN entirely.

13 years agoFILE HANDLE: Get rid of VAR_NAME_LEN limit on handle name.
Ben Pfaff [Sat, 1 Jan 2011 18:56:55 +0000 (10:56 -0800)]
FILE HANDLE: Get rid of VAR_NAME_LEN limit on handle name.

Most uses of VAR_NAME_LEN within PSPP are wrong due to encoding issues:
the limit applies to variable names in the encoding used by the data
set, but most uses of VAR_NAME_LEN actually limit the length of a name
in UTF-8.  The UTF-8 representation of a name can be longer or shorter
than its representation in the data set encoding, so it seems best to
eliminate references to VAR_NAME_LEN entirely.

13 years agocombine-files: Eliminate VAR_NAME_LEN restriction from combine_files().
Ben Pfaff [Sat, 1 Jan 2011 18:52:14 +0000 (10:52 -0800)]
combine-files: Eliminate VAR_NAME_LEN restriction from combine_files().

Most uses of VAR_NAME_LEN within PSPP are wrong due to encoding issues:
the limit applies to variable names in the encoding used by the data
set, but most uses of VAR_NAME_LEN actually limit the length of a name
in UTF-8.  The UTF-8 representation of a name can be longer or shorter
than its representation in the data set encoding, so it seems best to
eliminate references to VAR_NAME_LEN entirely.

13 years agovector: Remove VAR_NAME_LEN limit for internal representation of name.
Ben Pfaff [Sat, 1 Jan 2011 18:47:56 +0000 (10:47 -0800)]
vector: Remove VAR_NAME_LEN limit for internal representation of name.

Most uses of VAR_NAME_LEN within PSPP are wrong due to encoding issues:
the limit applies to variable names in the encoding used by the data
set, but most uses of VAR_NAME_LEN actually limit the length of a name
in UTF-8.  The UTF-8 representation of a name can be longer or shorter
than its representation in the data set encoding, so it seems best to
eliminate references to VAR_NAME_LEN entirely.

13 years agovariable: Remove VAR_NAME_LEN limit for internal representation of name.
Ben Pfaff [Sat, 1 Jan 2011 18:45:11 +0000 (10:45 -0800)]
variable: Remove VAR_NAME_LEN limit for internal representation of name.

Most uses of VAR_NAME_LEN within PSPP are wrong due to encoding issues:
the limit applies to variable names in the encoding used by the data
set, but most uses of VAR_NAME_LEN actually limit the length of a name
in UTF-8.  The UTF-8 representation of a name can be longer or shorter
than its representation in the data set encoding, so it seems best to
eliminate references to VAR_NAME_LEN entirely.

13 years agodict: Make dict_make_unique_var_name() return an allocated string.
Ben Pfaff [Sat, 1 Jan 2011 18:39:07 +0000 (10:39 -0800)]
dict: Make dict_make_unique_var_name() return an allocated string.

13 years agotests: Add `check-programs' target. 185/pspp 186/pspp 187/pspp 20110206030504/pspp 20110207030502/pspp 20110208030506/pspp
Ben Pfaff [Sun, 12 Dec 2010 22:29:00 +0000 (14:29 -0800)]
tests: Add `check-programs' target.

Occasionally I want to build all the programs required to run "make check"
without actually running the tests.  This target allows me to do that.

13 years agoSmake: Avoid duplicating $(GNULIB_TOOL) invocation.
Ben Pfaff [Mon, 27 Dec 2010 05:12:06 +0000 (21:12 -0800)]
Smake: Avoid duplicating $(GNULIB_TOOL) invocation.

The "all" and "gnulib" rules both contained the same gnulib-tool
invocation.  This commit changes the "all" rule to use the "gnulib" rule
as a subrule.

13 years agoi18n: Always allocate from pool in recode_substring_pool().
Ben Pfaff [Sat, 5 Feb 2011 05:33:47 +0000 (21:33 -0800)]
i18n: Always allocate from pool in recode_substring_pool().

13 years agosys-file-writer: Fix subtype used for v14+ multiple response set records.
Ben Pfaff [Wed, 5 Jan 2011 05:55:07 +0000 (21:55 -0800)]
sys-file-writer: Fix subtype used for v14+ multiple response set records.

13 years agodoc: Document that type-7 records must appear in ascending numerical order.
Ben Pfaff [Mon, 3 Jan 2011 21:10:07 +0000 (13:10 -0800)]
doc: Document that type-7 records must appear in ascending numerical order.

Every system file that I have seen puts them in this order, so I cannot
imagine that any other order receives any testing.

13 years agodoc: Update description of character encoding information in system files.
Ben Pfaff [Sat, 5 Feb 2011 21:18:07 +0000 (13:18 -0800)]
doc: Update description of character encoding information in system files.

Based on information provided by John Darrington and on system files
obtained freely from the Internet.

13 years agosys-file-reader: Add tests. 183/pspp 184/pspp 20110204030503/pspp 20110205030505/pspp
Ben Pfaff [Fri, 4 Feb 2011 04:41:40 +0000 (20:41 -0800)]
sys-file-reader: Add tests.

13 years agosys-file-reader: Elevate invalid number of labels from warning to error.
Ben Pfaff [Sun, 30 Jan 2011 23:41:12 +0000 (15:41 -0800)]
sys-file-reader: Elevate invalid number of labels from warning to error.

There's no way to figure out when the labels end when the count is wrong,
so this has to be an error.

13 years agosys-file-reader: Avoid redundant "within system file" in messages.
Ben Pfaff [Sun, 30 Jan 2011 23:27:06 +0000 (15:27 -0800)]
sys-file-reader: Avoid redundant "within system file" in messages.

All system file message already state the system file's name, which should
be enough identification.

13 years agosys-file-reader: Improve debugging usefulness of error messages.
Ben Pfaff [Sun, 30 Jan 2011 23:42:51 +0000 (15:42 -0800)]
sys-file-reader: Improve debugging usefulness of error messages.

I found that these changes made it easier to debug problems with system
files while I was developing tests.

13 years agosys-file-reader: Really enable warnings for invalid variable formats.
Ben Pfaff [Sun, 30 Jan 2011 23:40:17 +0000 (15:40 -0800)]
sys-file-reader: Really enable warnings for invalid variable formats.

With these operator in the wrong order, I never saw any warnings, although
other people might have seen different behavior.

13 years agosys-file-reader: Add missing periods at end of error messages.
Ben Pfaff [Sun, 30 Jan 2011 23:29:38 +0000 (15:29 -0800)]
sys-file-reader: Add missing periods at end of error messages.

Most of the error messages already ended in periods, so this adds them to
the others for consistency.

13 years agosys-file-reader: Check that multiple response set names begin with `$'.
Ben Pfaff [Sun, 30 Jan 2011 23:35:48 +0000 (15:35 -0800)]
sys-file-reader: Check that multiple response set names begin with `$'.

This invariant was being checked by an assertion in dict_add_mrset(), so
this change avoids an assertion failure for invalid system files.

13 years agosys-file-reader: Fix double-free on read of partial record.
Ben Pfaff [Sun, 30 Jan 2011 23:33:30 +0000 (15:33 -0800)]
sys-file-reader: Fix double-free on read of partial record.

partial_record() does a longjmp() to code near the top of
sys_file_casereader_read() that unrefs the case, but this code at the
end of sys_file_casereader_read() would have already unref'ed it once in
that case, resulting in a double-free.

13 years agohash-functions: Use C instead of preprocessor to test size of double.
Ben Pfaff [Mon, 31 Jan 2011 04:34:32 +0000 (20:34 -0800)]
hash-functions: Use C instead of preprocessor to test size of double.

I don't see a reason that this has to be done as an #if directive.  The
compiler should be easily able to optimize out the branch that will never
be taken.  This allows us to get rid of a configure check, so it seems
worthwhile to me.

13 years agoq2c: T_RPAREN should be T_LPAREN for matching a left parenthesis. 178/pspp 179/pspp 180/pspp 181/pspp 182/pspp 20110130030509/pspp 20110131030507/pspp 20110201030505/pspp 20110202030504/pspp 20110203030509/pspp
Ben Pfaff [Sat, 29 Jan 2011 18:02:32 +0000 (10:02 -0800)]
q2c: T_RPAREN should be T_LPAREN for matching a left parenthesis.

Also add a test for this case on the T-TEST command, where the bug was
first reported.

Bug #32061.
Reported by Mindaugas <embar@super.lt>.
Reported by Chuck Kralowec <chuck.kralowec@gmail.com>.

13 years agoUpdated the Lithuanian translation from http://translationproject.org. 155/pspp 156/pspp 159/pspp 160/pspp 165/pspp 166/pspp 167/pspp 168/pspp 169/pspp 170/pspp 171/pspp 172/pspp 173/pspp 174/pspp 175/pspp 176/pspp 177/pspp 20110106030503/pspp 20110107030504/pspp 20110110030503/pspp 20110111030501/pspp 20110116030504/pspp 20110117030504/pspp 20110118030510/pspp 20110119030502/pspp 20110121030509/pspp 20110122030503/pspp 20110123030505/pspp 20110124030505/pspp 20110125030506/pspp 20110126030510/pspp 20110127030507/pspp 20110128030509/pspp 20110129030507/pspp
Ben Pfaff [Wed, 5 Jan 2011 17:18:27 +0000 (09:18 -0800)]
Updated the Lithuanian translation from translationproject.org.

13 years agoREADME: Describe meaning of copyright year ranges. 152/pspp 153/pspp 154/pspp 20110103030508/pspp 20110104030504/pspp 20110105030507/pspp
Ben Pfaff [Sun, 2 Jan 2011 16:37:31 +0000 (08:37 -0800)]
README: Describe meaning of copyright year ranges.

This is required by the GNU maintainers guide as a prerequisite for using
copyright year ranges.  So far, PSPP itself doesn't use ranges, but Gnulib
(which PSPP uses) does.

13 years agoexpressions: Fix test failures due to new year. 151/pspp 20110102030509/pspp
Ben Pfaff [Sat, 1 Jan 2011 21:42:04 +0000 (13:42 -0800)]
expressions: Fix test failures due to new year.

Some of the date-related test cases assumed that year 41 would be
interpreted as 1941, but due to the 30-year century window, as soon as it
became 2011 this assumption failed.  Write these years explicitly as 1941
instead to fix the problem.

13 years agoNPAR TESTS: Fix two test failures. 139/pspp 140/pspp 141/pspp 142/pspp 143/pspp 144/pspp 145/pspp 146/pspp 147/pspp 148/pspp 149/pspp 150/pspp 20101221030505/pspp 20101222030509/pspp 20101223030504/pspp 20101224030508/pspp 20101225030503/pspp 20101226030509/pspp 20101227030502/pspp 20101228030501/pspp 20101229030502/pspp 20101230030502/pspp 20101231030502/pspp 20110101030503/pspp
Ben Pfaff [Tue, 21 Dec 2010 08:12:09 +0000 (00:12 -0800)]
NPAR TESTS: Fix two test failures.

Tests "NPAR TESTS CHISQUARE with DESCRIPTIVES" and "NPAR TESTS CHISQUARE,
listwise missing" were failing because of some unexpected behavior of
lex_put_back().  This fixes the problem by avoiding lex_put_back()
entirely.

13 years agoNPAR TESTS: Fix "NPAR TESTS BINOMIAL, P = 0.5; N1/N2 < 1" test failure.
Ben Pfaff [Tue, 21 Dec 2010 08:00:25 +0000 (00:00 -0800)]
NPAR TESTS: Fix "NPAR TESTS BINOMIAL, P = 0.5; N1/N2 < 1" test failure.

13 years agolexer: Fix GCC warning for unhandled TOKEN_N_TYPES in lex_token_name().
Ben Pfaff [Tue, 21 Dec 2010 07:59:28 +0000 (23:59 -0800)]
lexer: Fix GCC warning for unhandled TOKEN_N_TYPES in lex_token_name().

13 years agolexer: Remove unused function lex_put_back_id().
Ben Pfaff [Tue, 21 Dec 2010 07:58:59 +0000 (23:58 -0800)]
lexer: Remove unused function lex_put_back_id().

13 years agovalue-parser: Remove redundant call to lex_force_string() in parse_value(). 131/pspp 132/pspp 133/pspp 134/pspp 135/pspp 136/pspp 137/pspp 138/pspp 20101213030503/pspp 20101214030502/pspp 20101215030501/pspp 20101216030504/pspp 20101217030502/pspp 20101218030503/pspp 20101219030504/pspp 20101220030504/pspp
Ben Pfaff [Fri, 10 Dec 2010 05:41:49 +0000 (21:41 -0800)]
value-parser: Remove redundant call to lex_force_string() in parse_value().

13 years agoGET DATA: Fix punctuation in error message.
Ben Pfaff [Sun, 12 Dec 2010 04:56:15 +0000 (20:56 -0800)]
GET DATA: Fix punctuation in error message.

13 years agoAGGREGATE: Align arg_func_tab[] in columns.
Ben Pfaff [Fri, 10 Dec 2010 05:55:58 +0000 (21:55 -0800)]
AGGREGATE: Align arg_func_tab[] in columns.

This makes the code more readable.  It should not change PSPP behavior.

13 years agoi18n: Remove unnecessary #ifs.
Ben Pfaff [Tue, 7 Dec 2010 04:54:15 +0000 (20:54 -0800)]
i18n: Remove unnecessary #ifs.

The test for LC_MESSAGES should not be necessary because Gnulib ensures
that LC_MESSAGES is always defined.

The test for ENABLE_NLS should not be necessary because PSPP has not
supported that configuration for some time.

13 years agoECHO: Use text_item, as intended.
Ben Pfaff [Tue, 7 Dec 2010 04:48:32 +0000 (20:48 -0800)]
ECHO: Use text_item, as intended.

TEXT_ITEM_ECHO is meant for use by ECHO but it had been overlooked
accidentally until now.

13 years agofloat-format: Don't translate test strings.
Ben Pfaff [Tue, 7 Dec 2010 04:47:44 +0000 (20:47 -0800)]
float-format: Don't translate test strings.

These aren't visible to users in normal operation, so we might as well not
burden translators with them.

13 years agoDO REPEAT: Make this command usable anywhere.
Ben Pfaff [Tue, 7 Dec 2010 04:46:35 +0000 (20:46 -0800)]
DO REPEAT: Make this command usable anywhere.

DO REPEAT just does macro expansion so there's no reason to limit it to
just after an active dataset has been defined.

13 years agoidentifier: New function token_type_to_string().
Ben Pfaff [Tue, 7 Dec 2010 04:43:27 +0000 (20:43 -0800)]
identifier: New function token_type_to_string().

This is useful for debugging and testing code.

13 years agoNPAR TESTS: Prefer lex_match_id() over lex_match_hyphenated_word()
Ben Pfaff [Mon, 6 Dec 2010 06:21:14 +0000 (22:21 -0800)]
NPAR TESTS: Prefer lex_match_id() over lex_match_hyphenated_word()

This code used lex_match_hyphenated_word() in many places where it was
necessary to match a plain identifier.  But it is better to use
lex_match_id() when it can be, because it is simpler and faster, so this
commit does that.

13 years agoq2c: Prefer lex_match_id() over lex_match_hyphenated_word() in emitted code.
Ben Pfaff [Mon, 6 Dec 2010 06:19:34 +0000 (22:19 -0800)]
q2c: Prefer lex_match_id() over lex_match_hyphenated_word() in emitted code.

Until now, q2c has used lex_match_hyphenated_word() wherever it was
necessary to match a plain identifier.  But it is better to use
lex_match_id() when it can be, because it is simpler and faster, so this
commit does that.

13 years agoDEBUG XFORM FAIL: Issue an error message as part of transformation.
Ben Pfaff [Sun, 12 Dec 2010 06:17:01 +0000 (22:17 -0800)]
DEBUG XFORM FAIL: Issue an error message as part of transformation.

PSPP only returns a failure exit status if an error message is issued, but
DEBUG XFORM FAIL doesn't issue an error message.  This means that, if PSPP
has no other errors, then it's difficult to tell that the transformation
really did what it should have.  This commit fixes the potential problem.

13 years agoINPUT PROGRAM: Remove unused enumeration.
Ben Pfaff [Sun, 5 Dec 2010 23:16:03 +0000 (15:16 -0800)]
INPUT PROGRAM: Remove unused enumeration.

13 years agoexpressions: Make extract_min_valid() parameter const.
Ben Pfaff [Sun, 12 Dec 2010 06:07:56 +0000 (22:07 -0800)]
expressions: Make extract_min_valid() parameter const.

This fixes the following warning:

parse.c: In function ‘parse_function’:
parse.c:1213: warning: passing argument 1 of ‘extract_min_valid’ discards qualifiers from pointer target type

13 years agocategoricals: Make parameter to categoricals_done() const.
Ben Pfaff [Sun, 12 Dec 2010 06:07:14 +0000 (22:07 -0800)]
categoricals: Make parameter to categoricals_done() const.

From a high-level point of view, categoricals_done() does not actually
mutate any data in a categoricals object.  Instead, it just computes a
cache.  So it seems reasonable to make it take a "const" parameter, and
this fixes a warning:

oneway.c: In function ‘run_oneway’:
oneway.c:502: warning: initialization discards qualifiers from pointer target type

13 years agocovariance: Fix const-ness of covariance_calculate[_unnormalized] retval.
Ben Pfaff [Sun, 12 Dec 2010 05:29:55 +0000 (21:29 -0800)]
covariance: Fix const-ness of covariance_calculate[_unnormalized] retval.

The covariance_calculate() and covariance_calculate_unnormalized()
functions documented that their return values were owned by the covariance
object itself and thus should not be freed by the caller.  However, this
documentation was incorrect, because in fact the covariance object did not
retain the pointer at all.  This commit fixes the comments, updates
the return values to be non-"const", and changes the callers to free the
returned "gsl_matrix" objects.

13 years agoONEWAY: Fix warning for passing "const" pointer as non-const parameter.
Ben Pfaff [Sun, 12 Dec 2010 05:13:03 +0000 (21:13 -0800)]
ONEWAY: Fix warning for passing "const" pointer as non-const parameter.

13 years agomann-whitney: Suppress GCC warning about unused parameter.
Ben Pfaff [Sun, 12 Dec 2010 05:09:45 +0000 (21:09 -0800)]
mann-whitney: Suppress GCC warning about unused parameter.

13 years agofriedman: Fix GCC warning about uninitialized fr.w.
Ben Pfaff [Sun, 12 Dec 2010 05:09:17 +0000 (21:09 -0800)]
friedman: Fix GCC warning about uninitialized fr.w.

On my machine GCC 4.4 complains:
friedman.c: In function ‘friedman_execute’:
friedman.c:106: warning: ‘fr.w’ may be used uninitialized in this function

This appears to be because GCC can't see that the assignment to fr.w and
its later use (in show_sig_box()) both have the same condition.  At any
rate, this commit suppresses the warning by always initializing fr.w.

13 years agogui: Factor out duplicated code for executing and pasting syntax. 124/pspp 125/pspp 126/pspp 127/pspp 128/pspp 129/pspp 130/pspp 20101206030505/pspp 20101207030502/pspp 20101208030508/pspp 20101209030502/pspp 20101210030502/pspp 20101211030502/pspp 20101212030503/pspp
Ben Pfaff [Sun, 5 Dec 2010 14:43:51 +0000 (06:43 -0800)]
gui: Factor out duplicated code for executing and pasting syntax.

Reducing code duplication is good on its own.  This will also make it
easier in upcoming patches to swap out "getl_interface" with a new
structure, by eliminating most of the references to getl_interface.

13 years agocommand: Don't allow SORT as an abbreviation for SORT CASES.
Ben Pfaff [Sat, 4 Dec 2010 19:11:51 +0000 (11:11 -0800)]
command: Don't allow SORT as an abbreviation for SORT CASES.

This abbreviation has never been documented, and I don't see a reason to
keep it.

13 years agoRemove the PROMPT, CPROMPT, and DPROMPT settings.
Ben Pfaff [Sun, 21 Nov 2010 20:00:32 +0000 (12:00 -0800)]
Remove the PROMPT, CPROMPT, and DPROMPT settings.

These settings will be insufficient to configure prompting for the new
lexer, which is able to detect more special cases in syntax and report
them through the prompt.  (However, if users actually want this feature,
then we could add it; it's not difficult.)

13 years agoRemove the NULLINE and ENDCMD settings.
Ben Pfaff [Sun, 21 Nov 2010 19:16:10 +0000 (11:16 -0800)]
Remove the NULLINE and ENDCMD settings.

These settings change the lexical structure of the language, which makes
lexical analysis difficult.

13 years agoVALUE LABELS: Relax limit on value label length from 60 bytes to 255. 123/pspp 20101205030504/pspp
Ben Pfaff [Sat, 4 Dec 2010 19:10:02 +0000 (11:10 -0800)]
VALUE LABELS: Relax limit on value label length from 60 bytes to 255.

Requested by friedrich nietzsche <f_nietsje@hotmail.com>.
With improvements by John Darrington.

13 years agolexer: Change the functions for retrieving token strings. 111/pspp 112/pspp 113/pspp 114/pspp 115/pspp 116/pspp 120/pspp 121/pspp 122/pspp 20101122030502/pspp 20101123030502/pspp 20101124030502/pspp 20101125030504/pspp 20101126030502/pspp 20101127030503/pspp 20101202030501/pspp 20101203030504/pspp 20101204030504/pspp
Ben Pfaff [Sat, 20 Nov 2010 05:05:04 +0000 (21:05 -0800)]
lexer: Change the functions for retrieving token strings.

Until now, lex_tokid() has been for T_ID tokens only and lex_tokstr() has
been for T_ID and T_STRING tokens.  For T_ID tokens, lex_tokid() and
lex_tokstr() had slightly different semantics.

This doesn't entirely make sense, and these particular functions are not
the ones wanted most by clients, so this commit removes these functions
in favor of lex_tokcstr() and lex_tokss(), which are both applicable
to both T_ID and T_STRING tokens, with the same semantics in each case.

These functions are also easier for the upcoming reimplementation of the
lexer.

13 years agolexer: Get rid of lex_negative_to_dash().
Ben Pfaff [Tue, 20 Jul 2010 05:52:18 +0000 (22:52 -0700)]
lexer: Get rid of lex_negative_to_dash().

This function stands in the way of replacing the lexer in a
straightforward way, because it disrupts the stream of tokens: the
lexer can't tell in advance whether, e.g., "-4" is one token or
two.  Fortunately, it is not used in very many places and is
relatively easy to remove.

13 years agolexer: New type enum token_type.
Ben Pfaff [Mon, 20 Sep 2010 00:37:30 +0000 (17:37 -0700)]
lexer: New type enum token_type.

It seems useful to have a type that indicates that a value is a token.
Furthermore, being able to enumerate all of the possible tokens in a
straightforward way seems worthwhile.  It also makes it possible for
GCC to check "switch" statements on token types and to build arrays
indexed by token.

13 years agocommand: Factor command name matching out of command.c. 109/pspp 110/pspp 20101120030502/pspp 20101121030501/pspp
Ben Pfaff [Fri, 19 Nov 2010 06:19:58 +0000 (22:19 -0800)]
command: Factor command name matching out of command.c.

Making command parsing into a library will allow other code to use
the same functionality, which will be useful later in the lexer.
It also simplifies parsing command names and allows us to easily
add tests for command name parsing.

The new command name parsing code supports UTF-8.  This is not useful yet,
because its only client does not feed it UTF-8 strings, but it will be
useful later when the rest of the lexer is rewritten, where it will gain
another client that does feed it UTF-8.

13 years agoidentifier: Add some functions for Unicode syntax.
Ben Pfaff [Fri, 19 Nov 2010 05:30:24 +0000 (21:30 -0800)]
identifier: Add some functions for Unicode syntax.

13 years agostr: Add some functions for handling UTF-8.
Ben Pfaff [Fri, 19 Nov 2010 05:25:39 +0000 (21:25 -0800)]
str: Add some functions for handling UTF-8.

13 years agostr: Change "char" to "byte" in function names.
Ben Pfaff [Thu, 18 Nov 2010 04:03:26 +0000 (20:03 -0800)]
str: Change "char" to "byte" in function names.

As PSPP moves toward using UTF-8 pervasively for command syntax, a
character is no longer always a byte, so this naming is clearer.