From: John Darrington Date: Thu, 23 Jul 2009 05:05:41 +0000 (+0200) Subject: Merge commit 'origin/roc' X-Git-Tag: build37~50 X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pspp-builds.git;a=commitdiff_plain;h=b40baf410822471fbdeeec553693619d60d7c7b6;hp=114867dd9a1dd40020d81eb1b2c5584d391a2d48 Merge commit 'origin/roc' --- diff --git a/AUTHORS b/AUTHORS index af7e9075..db7a5910 100644 --- a/AUTHORS +++ b/AUTHORS @@ -6,9 +6,9 @@ most of the core libraries which ensure that PSPP runs with optimal speed are his work. * John Darrington wrote the graphical user interface, and the T-TEST, -ONEWAY, EXAMINE, RANK and NPAR TESTS commands, implemented support -for long variable names, psql and gnumeric and made numerous revisions -to other modules. +ONEWAY, EXAMINE, RANK and NPAR TESTS commands, implemented support for +long variable names, PostgreSQL and Gnumeric and made numerous +revisions to other modules. * Jason Stover contributed statistical and numerical functionality, including lib/gslextras and the linear regression features. Jason diff --git a/Smake b/Smake index 78789d4f..2697064c 100644 --- a/Smake +++ b/Smake @@ -76,6 +76,8 @@ GNULIB_MODULES = \ trunc \ unilbrk/ulc-width-linebreaks \ unistd \ + unistr/u8-strlen \ + unistr/u8-strncat \ unlocked-io \ vasprintf-posix \ vfprintf-posix \ diff --git a/configure.ac b/configure.ac index 7e7a4c60..c44fdd56 100644 --- a/configure.ac +++ b/configure.ac @@ -106,7 +106,7 @@ if test x"$with_libpq" != x"no" ; then fi AM_CONDITIONAL(PSQL_SUPPORT, test -n "$PG_CONFIG") -dnl Checks needed for gnumeric reader +dnl Checks needed for Gnumeric reader gnm_support=yes; PKG_CHECK_MODULES(LIBXML2, libxml-2.0,, [PSPP_OPTIONAL_PREREQ([libxml2]); gnm_support=no;]); diff --git a/doc/dev/concepts.texi b/doc/dev/concepts.texi index cc6e7522..06652d62 100644 --- a/doc/dev/concepts.texi +++ b/doc/dev/concepts.texi @@ -654,19 +654,17 @@ Returns the name of the given format @var{type}. These functions provide the ability to convert data fields into @union{value}s and vice versa. -@deftypefun bool data_in (struct substring @var{input}, enum legacy_encoding @var{legacy_encoding}, enum fmt_type @var{type}, int @var{implied_decimals}, int @var{first_column}, union value *@var{output}, int @var{width}) +@deftypefun bool data_in (struct substring @var{input}, const char *@var{encoding}, enum fmt_type @var{type}, int @var{implied_decimals}, int @var{first_column}, const struct dictionary *@var{dict}, union value *@var{output}, int @var{width}) Parses @var{input} as a field containing data in the given format @var{type}. The resulting value is stored in @var{output}, which the caller must have initialized with the given @var{width}. For consistency, @var{width} must be 0 if @var{type} is a numeric format type and greater than 0 if @var{type} is a string format type. - -Ordinarily @var{legacy_encoding} should be @code{LEGACY_NATIVE}, -indicating that @var{input} is encoded in the character set -conventionally used on the host machine. It may be set to -@code{LEGACY_EBCDIC} to cause @var{input} to be re-encoded from EBCDIC -during data parsing. +@var{encoding} should be set to indicate the character +encoding of @var{input}. +@var{dict} must be a pointer to the dictionary with which @var{output} +is associated. If @var{input} is the empty string (with length 0), @var{output} is set to the value set on SET BLANKS (@pxref{SET BLANKS,,,pspp, PSPP @@ -701,21 +699,15 @@ not propagated to the caller as errors. This function is declared in @file{data/data-in.h}. @end deftypefun -@deftypefun void data_out (const union value *@var{input}, const struct fmt_spec *@var{format}, char *@var{output}) -@deftypefunx void data_out_legacy (const union value *@var{input}, enum legacy_encoding @var{legacy_encoding}, const struct fmt_spec *@var{format}, char *@var{output}) -Converts the data pointed to by @var{input} into a data field in -@var{output} according to output format specifier @var{format}, which -must be a valid output format. Exactly @code{@var{format}->w} bytes -are written to @var{output}. The width of @var{input} is also +@deftypefun char * data_out (const union value *@var{input}, const struct fmt_spec *@var{format}) +@deftypefunx char * data_out_legacy (const union value *@var{input}, const char *@var{encoding}, const struct fmt_spec *@var{format}) +Converts the data pointed to by @var{input} into a string value, which +will be encoded in UTF-8, according to output format specifier @var{format}. +Format +must be a valid output format. The width of @var{input} is inferred from @var{format} using an algorithm equivalent to @func{fmt_var_width}. -If @func{data_out} is called, or @func{data_out_legacy} is called with -@var{legacy_encoding} set to @code{LEGACY_NATIVE}, @var{output} will -be encoded in the character set conventionally used on the host -machine. If @var{legacy_encoding} is set to @code{LEGACY_EBCDIC}, -@var{output} will be re-encoded from EBCDIC during data output. - When @var{input} contains data that cannot be represented in the given @var{format}, @func{data_out} may output a message using @func{msg}, @c (@pxref{msg}), diff --git a/doc/dev/i18n.texi b/doc/dev/i18n.texi index 97077d34..3ab86c3d 100644 --- a/doc/dev/i18n.texi +++ b/doc/dev/i18n.texi @@ -53,7 +53,6 @@ Any string data stored in a @union{value} will be encoded in the dictionary's character set. - @section System files @file{*.sav} files contain a field which is supposed to identify the encoding of the data they contain (@pxref{Machine Integer Info Record}). @@ -103,25 +102,20 @@ It is the caller's responsibility to free the returned string when no longer required. @end deftypefun +In order to minimise the number of conversions required, and to simplify +design, PSPP attempts to store all internal strings in UTF8 encoding. +Thus, when reading system and portable files (or any other data source), +the following items are immediately converted to UTF8 encoding: +@itemize +@item Variable names +@item Variable labels +@item Value labels +@end itemize +Conversely, when writing system files, these are converted back to the +encoding of that system file. -For example, in order to display a string variable's value in a label widget in the psppire gui one would use code similar to -@example - -struct variable *var = /* assigned from somewhere */ -struct case c = /* from somewhere else */ - -const union value *val = case_data (&c, var); - -char *utf8string = recode_string (UTF8, dict_get_encoding (dict), val->s, - var_get_width (var)); - -GtkWidget *entry = gtk_entry_new(); -gtk_entry_set_text (entry, utf8string); -gtk_widget_show (entry); - -free (utf8string); - -@end example +String data stored in union values are left in their original encoding. +These will be converted by the data_in/data_out functions. diff --git a/perl-module/PSPP.xs b/perl-module/PSPP.xs index 8179d29a..36300cc8 100644 --- a/perl-module/PSPP.xs +++ b/perl-module/PSPP.xs @@ -38,9 +38,11 @@ #include #include #include +#include #include #include #include +#include #include typedef struct fmt_spec input_format ; @@ -163,6 +165,7 @@ onBoot (ver) const char *ver CODE: assert (0 == strcmp (ver, bare_version)); + i18n_init (); msg_init (NULL, message_handler); settings_init (0, 0); fh_init (); @@ -174,12 +177,11 @@ format_value (val, var) CODE: SV *ret; const struct fmt_spec *fmt = var_get_print_format (var); + const struct dictionary *dict = var_get_vardict (var)->dict; union value uv; char *s; make_value_from_scalar (&uv, val, var); - s = malloc (fmt->w); - memset (s, '\0', fmt->w); - data_out (&uv, fmt, s); + s = data_out (&uv, dict_get_encoding (dict), fmt); value_destroy (&uv, var_get_width (var)); ret = newSVpv (s, fmt->w); free (s); @@ -371,6 +373,37 @@ clear_value_labels (var) CODE: var_clear_value_labels (var); +SV * +get_write_format (var) + struct variable *var +CODE: + HV *fmthash = (HV *) sv_2mortal ((SV *) newHV()); + const struct fmt_spec *fmt = var_get_write_format (var); + + hv_store (fmthash, "fmt", 3, newSVnv (fmt->type), 0); + hv_store (fmthash, "decimals", 8, newSVnv (fmt->d), 0); + hv_store (fmthash, "width", 5, newSVnv (fmt->w), 0); + + RETVAL = newRV ((SV *) fmthash); + OUTPUT: +RETVAL + +SV * +get_print_format (var) + struct variable *var +CODE: + HV *fmthash = (HV *) sv_2mortal ((SV *) newHV()); + const struct fmt_spec *fmt = var_get_print_format (var); + + hv_store (fmthash, "fmt", 3, newSVnv (fmt->type), 0); + hv_store (fmthash, "decimals", 8, newSVnv (fmt->d), 0); + hv_store (fmthash, "width", 5, newSVnv (fmt->w), 0); + + RETVAL = newRV ((SV *) fmthash); + OUTPUT: +RETVAL + + void pxs_set_write_format (var, fmt) struct variable *var @@ -612,6 +645,7 @@ CODE: { struct substring ss = ss_cstr (SvPV_nolen (sv)); if ( ! data_in (ss, LEGACY_NATIVE, ifmt->type, 0, 0, 0, + sfi->dict, case_data_rw (c, v), var_get_width (v)) ) { diff --git a/perl-module/lib/PSPP.pm b/perl-module/lib/PSPP.pm index 3cb9f3be..e5599908 100644 --- a/perl-module/lib/PSPP.pm +++ b/perl-module/lib/PSPP.pm @@ -249,7 +249,7 @@ An integer denoting the number of decimal places for the format. =item width -An integer denoting the number of width of the format. +An integer denoting the width of the format. =back @@ -282,6 +282,16 @@ sub set_print_format =pod + +=head3 get_write_format () + +Returns a reference to a hash containing the write format for the variable. + + +=head3 get_print_format () + +Returns a reference to a hash containing the print format for the variable. + =head3 set_output_format (%fmt) Sets the write and print formats to C. This is the same as @@ -510,7 +520,7 @@ values retrieved from a reader. =head3 PSPP::format_value ($value, $variable) -Returns a scalar containing a string representing C formatted accoring +Returns a scalar containing a string representing C formatted according to the print format of C. In the most common ussage, C should be a value of C. diff --git a/po/en_GB.po b/po/en_GB.po index 54f873f4..6d0a4a75 100644 --- a/po/en_GB.po +++ b/po/en_GB.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: PSPP 0.7.0\n" "Report-Msgid-Bugs-To: pspp-dev@gnu.org\n" -"POT-Creation-Date: 2009-05-16 07:00+0800\n" +"POT-Creation-Date: 2009-07-17 15:23+0800\n" "PO-Revision-Date: 2008-11-05 08:17+0900\n" "Last-Translator: John Darrington \n" "Language-Team: John Darrington \n" @@ -49,81 +49,56 @@ msgid "" "system-missing, zero, or negative. These case(s) were ignored." msgstr "" -#: src/data/case-tmpfile.c:57 -#, c-format -msgid "failed to create temporary file" -msgstr "" - -#: src/data/case-tmpfile.c:131 -#, c-format -msgid "seeking in temporary file" -msgstr "" - -#: src/data/case-tmpfile.c:153 -#, c-format -msgid "reading temporary file" -msgstr "" - -#: src/data/case-tmpfile.c:155 -#, c-format -msgid "unexpected end of file reading temporary file" -msgstr "" - -#: src/data/case-tmpfile.c:175 -#, c-format -msgid "writing to temporary file" -msgstr "" - -#: src/data/data-in.c:262 src/data/data-in.c:452 +#: src/data/data-in.c:263 src/data/data-in.c:453 msgid "Field contents are not numeric." msgstr "" -#: src/data/data-in.c:264 src/data/data-in.c:454 +#: src/data/data-in.c:265 src/data/data-in.c:455 msgid "Number followed by garbage." msgstr "" -#: src/data/data-in.c:275 +#: src/data/data-in.c:276 msgid "Invalid numeric syntax." msgstr "" -#: src/data/data-in.c:284 src/data/data-in.c:467 +#: src/data/data-in.c:285 src/data/data-in.c:468 msgid "Too-large number set to system-missing." msgstr "" -#: src/data/data-in.c:289 src/data/data-in.c:472 +#: src/data/data-in.c:290 src/data/data-in.c:473 msgid "Too-small number set to zero." msgstr "" -#: src/data/data-in.c:315 +#: src/data/data-in.c:316 msgid "All characters in field must be digits." msgstr "" -#: src/data/data-in.c:338 +#: src/data/data-in.c:339 msgid "Unrecognized character in field." msgstr "Unrecognised character in field." -#: src/data/data-in.c:362 src/data/data-in.c:636 +#: src/data/data-in.c:363 src/data/data-in.c:638 msgid "Field must have even length." msgstr "" -#: src/data/data-in.c:367 src/data/data-in.c:647 +#: src/data/data-in.c:368 src/data/data-in.c:649 msgid "Field must contain only hex digits." msgstr "" -#: src/data/data-in.c:686 src/data/data-in.c:733 +#: src/data/data-in.c:688 src/data/data-in.c:735 msgid "Syntax error in date field." msgstr "" -#: src/data/data-in.c:702 +#: src/data/data-in.c:704 #, c-format msgid "Day (%ld) must be between 1 and 31." msgstr "" -#: src/data/data-in.c:749 +#: src/data/data-in.c:751 msgid "Delimiter expected between fields in date." msgstr "" -#: src/data/data-in.c:823 +#: src/data/data-in.c:825 msgid "" "Unrecognized month format. Months may be specified as Arabic or Roman " "numerals or as at least 3 letters of their English names." @@ -131,45 +106,45 @@ msgstr "" "Unrecognised month format. Months may be specified as Arabic or Roman \n" "numerals or as at least 3 letters of their English names." -#: src/data/data-in.c:850 +#: src/data/data-in.c:852 #, c-format msgid "Year (%ld) must be between 1582 and 19999." msgstr "" -#: src/data/data-in.c:862 +#: src/data/data-in.c:864 #, c-format msgid "Trailing garbage \"%.*s\" following date." msgstr "" -#: src/data/data-in.c:878 +#: src/data/data-in.c:880 msgid "Julian day must have exactly three digits." msgstr "" -#: src/data/data-in.c:883 +#: src/data/data-in.c:885 #, c-format msgid "Julian day (%ld) must be between 1 and 366." msgstr "" -#: src/data/data-in.c:907 +#: src/data/data-in.c:909 #, c-format msgid "Quarter (%ld) must be between 1 and 4." msgstr "" -#: src/data/data-in.c:927 +#: src/data/data-in.c:929 #, c-format msgid "Week (%ld) must be between 1 and 53." msgstr "" -#: src/data/data-in.c:940 +#: src/data/data-in.c:942 msgid "Delimiter expected between fields in time." msgstr "" -#: src/data/data-in.c:960 +#: src/data/data-in.c:962 #, c-format msgid "Minute (%ld) must be between 0 and 59." msgstr "" -#: src/data/data-in.c:1000 +#: src/data/data-in.c:1002 msgid "" "Unrecognized weekday name. At least the first two letters of an English " "weekday name must be specified." @@ -177,32 +152,32 @@ msgstr "" "Unrecognised weekday name. At least the first two letters of an English " "weekday name must be specified." -#: src/data/data-in.c:1138 +#: src/data/data-in.c:1140 #, c-format msgid "`%c' expected in date field." msgstr "" -#: src/data/data-in.c:1179 +#: src/data/data-in.c:1181 #, c-format msgid "column %d" msgstr "" -#: src/data/data-in.c:1181 +#: src/data/data-in.c:1183 #, c-format msgid "columns %d-%d" msgstr "" -#: src/data/data-in.c:1185 +#: src/data/data-in.c:1187 #, c-format msgid "%s field) " msgstr "" -#: src/data/data-out.c:446 +#: src/data/data-out.c:449 #, c-format msgid "Weekday number %f is not between 1 and 7." msgstr "" -#: src/data/data-out.c:467 +#: src/data/data-out.c:470 #, c-format msgid "Month number %f is not between 1 and 12." msgstr "" @@ -219,13 +194,13 @@ msgstr "" msgid "scratch" msgstr "" -#: src/data/dictionary.c:926 +#: src/data/dictionary.c:940 msgid "" "At least one case in the data file had a weight value that was user-missing, " "system-missing, zero, or negative. These case(s) were ignored." msgstr "" -#: src/data/dictionary.c:1228 +#: src/data/dictionary.c:1263 #, c-format msgid "Truncating document line to %d bytes." msgstr "" @@ -322,33 +297,33 @@ msgstr[1] "" msgid "%s variables are not compatible with %s format %s." msgstr "" -#: src/data/format.c:327 src/data/sys-file-reader.c:657 -#: src/ui/gui/psppire.glade:2034 src/ui/gui/psppire-var-store.c:575 +#: src/data/format.c:327 src/data/sys-file-reader.c:663 +#: src/ui/gui/psppire.glade:2009 src/ui/gui/psppire-var-store.c:584 #: src/ui/gui/var-sheet-dialogs.glade:139 msgid "String" msgstr "" -#: src/data/format.c:327 src/data/sys-file-reader.c:657 -#: src/ui/gui/psppire.glade:2109 src/ui/gui/psppire-var-store.c:568 +#: src/data/format.c:327 src/data/sys-file-reader.c:663 +#: src/ui/gui/psppire.glade:2084 src/ui/gui/psppire-var-store.c:577 #: src/ui/gui/var-sheet-dialogs.glade:28 msgid "Numeric" msgstr "" -#: src/data/format.c:328 src/data/sys-file-reader.c:1214 -#: src/data/sys-file-reader.c:1216 +#: src/data/format.c:328 src/data/sys-file-reader.c:1228 +#: src/data/sys-file-reader.c:1230 #: src/language/dictionary/apply-dictionary.c:78 #: src/language/dictionary/apply-dictionary.c:79 -#: src/language/xforms/recode.c:489 src/language/xforms/recode.c:490 -#: src/language/xforms/recode.c:502 src/language/xforms/recode.c:503 +#: src/language/xforms/recode.c:490 src/language/xforms/recode.c:491 +#: src/language/xforms/recode.c:503 src/language/xforms/recode.c:504 msgid "numeric" msgstr "" -#: src/data/format.c:328 src/data/sys-file-reader.c:1214 -#: src/data/sys-file-reader.c:1216 +#: src/data/format.c:328 src/data/sys-file-reader.c:1228 +#: src/data/sys-file-reader.c:1230 #: src/language/dictionary/apply-dictionary.c:78 #: src/language/dictionary/apply-dictionary.c:79 -#: src/language/xforms/recode.c:489 src/language/xforms/recode.c:490 -#: src/language/xforms/recode.c:502 src/language/xforms/recode.c:503 +#: src/language/xforms/recode.c:490 src/language/xforms/recode.c:491 +#: src/language/xforms/recode.c:503 src/language/xforms/recode.c:504 msgid "string" msgstr "" @@ -357,27 +332,27 @@ msgstr "" msgid "String variable with width %d is not compatible with format %s." msgstr "" -#: src/data/gnumeric-reader.c:33 +#: src/data/gnumeric-reader.c:36 msgid "" "Support for Gnumeric files was not compiled into this installation of PSPP" msgstr "" -#: src/data/gnumeric-reader.c:362 +#: src/data/gnumeric-reader.c:368 #, c-format -msgid "Error opening \"%s\" for reading as a gnumeric file: %s." +msgid "Error opening \"%s\" for reading as a Gnumeric file: %s." msgstr "" -#: src/data/gnumeric-reader.c:382 +#: src/data/gnumeric-reader.c:388 #, c-format msgid "Invalid cell range \"%s\"" msgstr "" -#: src/data/gnumeric-reader.c:518 src/data/psql-reader.c:182 +#: src/data/gnumeric-reader.c:520 src/data/psql-reader.c:187 #, c-format msgid "Cannot create variable name from %s" msgstr "" -#: src/data/gnumeric-reader.c:530 +#: src/data/gnumeric-reader.c:532 #, c-format msgid "Selected sheet or range of spreadsheet \"%s\" is empty." msgstr "" @@ -448,118 +423,118 @@ msgstr "" #. TRANSLATORS: this fragment will be interpolated into #. messages in fh_lock() that identify types of files. -#: src/data/por-file-reader.c:268 src/data/por-file-writer.c:148 +#: src/data/por-file-reader.c:267 src/data/por-file-writer.c:149 msgid "portable file" msgstr "" -#: src/data/por-file-reader.c:276 +#: src/data/por-file-reader.c:275 #, c-format msgid "" "An error occurred while opening \"%s\" for reading as a portable file: %s." msgstr "" -#: src/data/por-file-reader.c:297 +#: src/data/por-file-reader.c:296 msgid "Data record expected." msgstr "" -#: src/data/por-file-reader.c:379 +#: src/data/por-file-reader.c:378 msgid "Number expected." msgstr "" -#: src/data/por-file-reader.c:407 +#: src/data/por-file-reader.c:406 msgid "Missing numeric terminator." msgstr "" -#: src/data/por-file-reader.c:430 +#: src/data/por-file-reader.c:429 msgid "Invalid integer." msgstr "" -#: src/data/por-file-reader.c:441 +#: src/data/por-file-reader.c:440 #, c-format msgid "Bad string length %d." msgstr "" -#: src/data/por-file-reader.c:502 +#: src/data/por-file-reader.c:501 #, c-format msgid "%s: Not a portable file." msgstr "" -#: src/data/por-file-reader.c:519 +#: src/data/por-file-reader.c:518 #, c-format msgid "Unrecognized version code `%c'." msgstr "Unrecognised version code `%c'." -#: src/data/por-file-reader.c:528 +#: src/data/por-file-reader.c:527 #, c-format msgid "Bad date string length %zu." msgstr "" -#: src/data/por-file-reader.c:530 +#: src/data/por-file-reader.c:529 #, c-format msgid "Bad time string length %zu." msgstr "" -#: src/data/por-file-reader.c:572 +#: src/data/por-file-reader.c:571 #, c-format msgid "" "%s: Bad format specifier byte (%d). Variable will be assigned a default " "format." msgstr "" -#: src/data/por-file-reader.c:593 +#: src/data/por-file-reader.c:592 #, c-format msgid "Numeric variable %s has invalid format specifier %s." msgstr "" -#: src/data/por-file-reader.c:597 +#: src/data/por-file-reader.c:596 #, c-format msgid "String variable %s with width %d has invalid format specifier %s." msgstr "" -#: src/data/por-file-reader.c:621 +#: src/data/por-file-reader.c:620 msgid "Expected variable count record." msgstr "" -#: src/data/por-file-reader.c:625 +#: src/data/por-file-reader.c:624 #, c-format msgid "Invalid number of variables %d." msgstr "" -#: src/data/por-file-reader.c:635 +#: src/data/por-file-reader.c:633 #, c-format msgid "Weight variable name (%s) truncated." msgstr "" -#: src/data/por-file-reader.c:650 +#: src/data/por-file-reader.c:648 msgid "Expected variable record." msgstr "" -#: src/data/por-file-reader.c:654 +#: src/data/por-file-reader.c:652 #, c-format msgid "Invalid variable width %d." msgstr "" -#: src/data/por-file-reader.c:662 +#: src/data/por-file-reader.c:659 #, c-format msgid "Invalid variable name `%s' in position %d." msgstr "" -#: src/data/por-file-reader.c:666 +#: src/data/por-file-reader.c:663 src/data/sys-file-reader.c:521 #, c-format msgid "Bad width %d for variable %s." msgstr "" -#: src/data/por-file-reader.c:681 +#: src/data/por-file-reader.c:678 #, c-format msgid "Duplicate variable name %s in position %d." msgstr "" -#: src/data/por-file-reader.c:682 +#: src/data/por-file-reader.c:679 #, c-format msgid "Duplicate variable name %s in position %d renamed to %s." msgstr "" -#: src/data/por-file-reader.c:725 +#: src/data/por-file-reader.c:728 #, c-format msgid "Weighting variable %s not present in dictionary." msgstr "" @@ -575,56 +550,56 @@ msgid "" "Cannot assign value labels to %s and %s, which have different variable types." msgstr "" -#: src/data/por-file-writer.c:140 +#: src/data/por-file-writer.c:141 #, c-format msgid "Invalid decimal digits count %d. Treating as %d." msgstr "" -#: src/data/por-file-writer.c:160 +#: src/data/por-file-writer.c:161 #, c-format msgid "Error opening \"%s\" for writing as a portable file: %s." msgstr "" -#: src/data/por-file-writer.c:500 +#: src/data/por-file-writer.c:506 #, c-format msgid "An I/O error occurred writing portable file \"%s\"." msgstr "" -#: src/data/psql-reader.c:42 +#: src/data/psql-reader.c:46 msgid "" "Support for reading postgres databases was not compiled into this " "installation of PSPP" msgstr "" -#: src/data/psql-reader.c:237 +#: src/data/psql-reader.c:242 msgid "Memory error whilst opening psql source" msgstr "" -#: src/data/psql-reader.c:243 +#: src/data/psql-reader.c:248 #, c-format msgid "Error opening psql source: %s." msgstr "" -#: src/data/psql-reader.c:258 +#: src/data/psql-reader.c:263 #, c-format msgid "" "Postgres server is version %s. Reading from versions earlier than 8.0 is not " "supported." msgstr "" -#: src/data/psql-reader.c:278 +#: src/data/psql-reader.c:283 msgid "" "Connection is unencrypted, but unencrypted connections have not been " "permitted." msgstr "" -#: src/data/psql-reader.c:317 src/data/psql-reader.c:342 -#: src/data/psql-reader.c:352 +#: src/data/psql-reader.c:322 src/data/psql-reader.c:347 +#: src/data/psql-reader.c:357 #, c-format msgid "Error from psql source: %s." msgstr "" -#: src/data/psql-reader.c:447 +#: src/data/psql-reader.c:452 #, c-format msgid "Unsupported OID %d. SYSMIS values will be inserted." msgstr "" @@ -638,11 +613,11 @@ msgstr "" #. TRANSLATORS: this fragment will be interpolated into #. messages in fh_lock() that identify types of files. -#: src/data/scratch-writer.c:67 src/language/data-io/file-handle.q:181 +#: src/data/scratch-writer.c:66 src/language/data-io/file-handle.q:181 msgid "scratch file" msgstr "" -#: src/data/settings.c:685 +#: src/data/settings.c:686 #, c-format msgid "" "%s: Custom currency string `%s' does not contain exactly three periods or " @@ -655,39 +630,39 @@ msgstr "" #. TRANSLATORS: this fragment will be interpolated into #. messages in fh_lock() that identify types of files. -#: src/data/sys-file-reader.c:216 src/data/sys-file-writer.c:200 +#: src/data/sys-file-reader.c:219 src/data/sys-file-writer.c:202 msgid "system file" msgstr "" -#: src/data/sys-file-reader.c:223 +#: src/data/sys-file-reader.c:226 #, c-format msgid "Error opening \"%s\" for reading as a system file: %s." msgstr "" -#: src/data/sys-file-reader.c:262 +#: src/data/sys-file-reader.c:265 msgid "Misplaced type 4 record." msgstr "" -#: src/data/sys-file-reader.c:273 +#: src/data/sys-file-reader.c:276 #, c-format msgid "Unrecognized record type %d." msgstr "Unrecognised record type %d." -#: src/data/sys-file-reader.c:312 +#: src/data/sys-file-reader.c:315 #, c-format msgid "File header claims %d variable positions but %d were read from file." msgstr "" -#: src/data/sys-file-reader.c:352 +#: src/data/sys-file-reader.c:355 #, c-format msgid "Error closing system file \"%s\": %s." msgstr "" -#: src/data/sys-file-reader.c:417 src/data/sys-file-reader.c:427 +#: src/data/sys-file-reader.c:420 src/data/sys-file-reader.c:430 msgid "This is not an SPSS system file." msgstr "" -#: src/data/sys-file-reader.c:446 +#: src/data/sys-file-reader.c:449 msgid "" "Compression bias is not the usual value of 100, or system file uses " "unrecognized floating-point format." @@ -695,333 +670,339 @@ msgstr "" "Compression bias is not the usual value of 100, or system file uses \n" "unrecognised floating-point format." -#: src/data/sys-file-reader.c:514 +#: src/data/sys-file-reader.c:517 #, c-format msgid "Invalid variable name `%s'." msgstr "" -#: src/data/sys-file-reader.c:518 -#, c-format -msgid "Bad variable width %d." -msgstr "" - -#: src/data/sys-file-reader.c:522 +#: src/data/sys-file-reader.c:525 #, c-format msgid "Duplicate variable name `%s' within system file." msgstr "" -#: src/data/sys-file-reader.c:530 +#: src/data/sys-file-reader.c:533 msgid "Variable label indicator field is not 0 or 1." msgstr "" -#: src/data/sys-file-reader.c:538 +#: src/data/sys-file-reader.c:541 #, c-format msgid "Variable %s has label of invalid length %zu." msgstr "" -#: src/data/sys-file-reader.c:557 +#: src/data/sys-file-reader.c:560 msgid "Numeric missing value indicator field is not -3, -2, 0, 1, 2, or 3." msgstr "" -#: src/data/sys-file-reader.c:572 +#: src/data/sys-file-reader.c:578 msgid "String missing value indicator field is not 0, 1, 2, or 3." msgstr "" -#: src/data/sys-file-reader.c:575 -#, c-format -msgid "" -"Ignoring missing values on long string variable %s, which PSPP does not yet " -"support." -msgstr "" - -#: src/data/sys-file-reader.c:604 +#: src/data/sys-file-reader.c:610 msgid "Missing string continuation record." msgstr "" -#: src/data/sys-file-reader.c:638 +#: src/data/sys-file-reader.c:644 #, c-format msgid "Unknown variable format %." msgstr "" -#: src/data/sys-file-reader.c:656 +#: src/data/sys-file-reader.c:662 #, c-format msgid "%s variable %s has invalid %s format %s." msgstr "" -#: src/data/sys-file-reader.c:659 +#: src/data/sys-file-reader.c:665 msgid "print" msgstr "" -#: src/data/sys-file-reader.c:659 +#: src/data/sys-file-reader.c:665 msgid "write" msgstr "" -#: src/data/sys-file-reader.c:663 +#: src/data/sys-file-reader.c:669 msgid "Suppressing further invalid format warnings." msgstr "" -#: src/data/sys-file-reader.c:681 +#: src/data/sys-file-reader.c:687 msgid "Weighting variable must be numeric." msgstr "" -#: src/data/sys-file-reader.c:695 +#: src/data/sys-file-reader.c:701 msgid "Multiple type 6 (document) records." msgstr "" -#: src/data/sys-file-reader.c:699 +#: src/data/sys-file-reader.c:705 #, c-format msgid "Number of document lines (%d) must be greater than 0." msgstr "" -#: src/data/sys-file-reader.c:707 +#: src/data/sys-file-reader.c:713 msgid "Document line contains null byte." msgstr "" -#: src/data/sys-file-reader.c:793 -msgid "" -"Ignoring value labels for long string variables, which PSPP does not yet " -"support." -msgstr "" - -#: src/data/sys-file-reader.c:798 +#: src/data/sys-file-reader.c:803 #, c-format msgid "" "Unrecognized record type 7, subtype %d. Please send a copy of this file, " "and the syntax which created it to %s" msgstr "" -#: src/data/sys-file-reader.c:825 +#: src/data/sys-file-reader.c:830 #, c-format msgid "Bad size (%zu) or count (%zu) field on record type 7, subtype 3." msgstr "" -#: src/data/sys-file-reader.c:845 +#: src/data/sys-file-reader.c:850 #, c-format msgid "" "Floating-point representation indicated by system file (%d) differs from " "expected (%d)." msgstr "" -#: src/data/sys-file-reader.c:858 +#: src/data/sys-file-reader.c:863 msgid "little-endian" msgstr "" -#: src/data/sys-file-reader.c:858 +#: src/data/sys-file-reader.c:863 msgid "big-endian" msgstr "" -#: src/data/sys-file-reader.c:859 +#: src/data/sys-file-reader.c:864 #, c-format msgid "" "Integer format indicated by system file (%s) differs from expected (%s)." msgstr "" -#: src/data/sys-file-reader.c:916 +#: src/data/sys-file-reader.c:921 #, c-format msgid "Bad size (%zu) or count (%zu) on extension 4." msgstr "" -#: src/data/sys-file-reader.c:920 -#, c-format -msgid "File specifies unexpected value %g as SYSMIS." -msgstr "" - -#: src/data/sys-file-reader.c:922 -#, c-format -msgid "File specifies unexpected value %g as HIGHEST." -msgstr "" - -#: src/data/sys-file-reader.c:924 +#: src/data/sys-file-reader.c:925 src/data/sys-file-reader.c:929 +#: src/data/sys-file-reader.c:933 #, c-format -msgid "File specifies unexpected value %g as LOWEST." +msgid "File specifies unexpected value %g as %s." msgstr "" -#: src/data/sys-file-reader.c:940 +#: src/data/sys-file-reader.c:950 #, c-format msgid "Bad size %zu on extension 11." msgstr "" -#: src/data/sys-file-reader.c:952 +#: src/data/sys-file-reader.c:962 #, c-format msgid "Extension 11 has bad count %zu (for %zu variables)." msgstr "" -#: src/data/sys-file-reader.c:973 +#: src/data/sys-file-reader.c:983 #, c-format msgid "" "Invalid variable display parameters for variable %zu (%s). Default " "parameters substituted." msgstr "" -#: src/data/sys-file-reader.c:1017 +#: src/data/sys-file-reader.c:1027 #, c-format msgid "Long variable mapping from %s to invalid variable name `%s'." msgstr "" -#: src/data/sys-file-reader.c:1027 +#: src/data/sys-file-reader.c:1037 #, c-format msgid "Duplicate long variable name `%s' within system file." msgstr "" -#: src/data/sys-file-reader.c:1080 +#: src/data/sys-file-reader.c:1090 #, c-format msgid "%s listed as string of invalid length %s in very length string record." msgstr "" -#: src/data/sys-file-reader.c:1090 +#: src/data/sys-file-reader.c:1100 #, c-format msgid "" "%s listed in very long string record with width %s, which requires only one " "segment." msgstr "" -#: src/data/sys-file-reader.c:1096 +#: src/data/sys-file-reader.c:1106 #, c-format msgid "Very long string %s overflows dictionary." msgstr "" -#: src/data/sys-file-reader.c:1110 +#: src/data/sys-file-reader.c:1120 #, c-format msgid "" "Very long string with width %ld has segment %d of width %d (expected %d)" msgstr "" -#: src/data/sys-file-reader.c:1155 +#: src/data/sys-file-reader.c:1166 #, c-format msgid "Invalid number of labels: %d. Ignoring labels." msgstr "" -#: src/data/sys-file-reader.c:1186 +#: src/data/sys-file-reader.c:1197 msgid "" "Variable index record (type 4) does not immediately follow value label " "record (type 3) as it should." msgstr "" -#: src/data/sys-file-reader.c:1193 +#: src/data/sys-file-reader.c:1204 #, c-format msgid "" "Number of variables associated with a value label (%d) is not between 1 and " "the number of variables (%zu)." msgstr "" -#: src/data/sys-file-reader.c:1203 +#: src/data/sys-file-reader.c:1215 #, c-format -msgid "Value labels are not allowed on long string variables (%s)." +msgid "" +"Value labels may not be added to long string variables (e.g. %s) using " +"records types 3 and 4." msgstr "" -#: src/data/sys-file-reader.c:1210 +#: src/data/sys-file-reader.c:1224 #, c-format msgid "" "Variables associated with value label are not all of identical type. " "Variable %s is %s, but variable %s is %s." msgstr "" -#: src/data/sys-file-reader.c:1243 +#: src/data/sys-file-reader.c:1258 #, c-format msgid "Duplicate value label for %g on %s." msgstr "" -#: src/data/sys-file-reader.c:1246 +#: src/data/sys-file-reader.c:1261 src/data/sys-file-reader.c:1442 #, c-format msgid "Duplicate value label for \"%.*s\" on %s." msgstr "" -#: src/data/sys-file-reader.c:1284 +#: src/data/sys-file-reader.c:1299 #, c-format msgid "Error parsing attribute value %s[%d]" msgstr "" -#: src/data/sys-file-reader.c:1298 +#: src/data/sys-file-reader.c:1313 #, c-format msgid "Attribute value %s[%d] is not quoted: %s" msgstr "" -#: src/data/sys-file-reader.c:1414 -msgid "File ends in partial case." +#: src/data/sys-file-reader.c:1376 +#, c-format +msgid "" +"Variable name length in long string value label record (%d) exceeds %d-byte " +"limit." +msgstr "" + +#: src/data/sys-file-reader.c:1386 +#, c-format +msgid "Ignoring long string value record for unknown variable %s." +msgstr "" + +#: src/data/sys-file-reader.c:1393 +#, c-format +msgid "Ignoring long string value record for numeric variable %s." +msgstr "" + +#: src/data/sys-file-reader.c:1400 +#, c-format +msgid "" +"Ignoring long string value record for variable %s because the record's width " +"(%d) does not match the variable's width (%d)" msgstr "" #: src/data/sys-file-reader.c:1422 #, c-format +msgid "" +"Ignoring long string value %zu for variable %s, with width %d, that has bad " +"value width %zu." +msgstr "" + +#: src/data/sys-file-reader.c:1537 +msgid "File ends in partial case." +msgstr "" + +#: src/data/sys-file-reader.c:1545 +#, c-format msgid "Error reading case from file %s." msgstr "" -#: src/data/sys-file-reader.c:1519 src/data/sys-file-reader.c:1555 +#: src/data/sys-file-reader.c:1642 src/data/sys-file-reader.c:1678 msgid "Compressed data is corrupt." msgstr "" -#: src/data/sys-file-reader.c:1642 +#: src/data/sys-file-reader.c:1765 #, c-format msgid "Variable index %d not in valid range 1...%d." msgstr "" -#: src/data/sys-file-reader.c:1647 +#: src/data/sys-file-reader.c:1770 #, c-format msgid "Variable index %d refers to long string continuation." msgstr "" -#: src/data/sys-file-reader.c:1715 +#: src/data/sys-file-reader.c:1838 #, c-format msgid "Suppressed %d additional related warnings." msgstr "" -#: src/data/sys-file-reader.c:1756 +#: src/data/sys-file-reader.c:1879 #, c-format msgid "Variable map refers to unknown variable %s." msgstr "" -#: src/data/sys-file-reader.c:1864 +#: src/data/sys-file-reader.c:1987 #, c-format msgid "System error: %s." msgstr "" -#: src/data/sys-file-reader.c:1866 +#: src/data/sys-file-reader.c:1989 msgid "Unexpected end of file." msgstr "" -#: src/data/sys-file-writer.c:173 +#: src/data/sys-file-writer.c:175 #, c-format msgid "Unknown system file version %d. Treating as version %d." msgstr "" -#: src/data/sys-file-writer.c:212 +#: src/data/sys-file-writer.c:214 #, c-format msgid "Error opening \"%s\" for writing as a system file: %s." msgstr "" -#: src/data/sys-file-writer.c:837 +#: src/data/sys-file-writer.c:917 #, c-format msgid "An I/O error occurred writing system file \"%s\"." msgstr "" -#: src/data/variable.c:240 +#: src/data/variable.c:242 #, c-format msgid "" "Character `%c' (in %s) may not appear as the first character in a variable " "name." msgstr "" -#: src/data/variable.c:252 +#: src/data/variable.c:254 #, c-format msgid "Character `%c' (in %s) may not appear in a variable name." msgstr "" -#: src/data/variable.c:280 +#: src/data/variable.c:282 msgid "Variable name cannot be empty string." msgstr "" -#: src/data/variable.c:286 +#: src/data/variable.c:288 #, c-format msgid "Variable name %s exceeds %d-character limit." msgstr "" -#: src/data/variable.c:294 +#: src/data/variable.c:296 #, c-format msgid "`%s' may not be used as a variable name because it is a reserved word." msgstr "" -#: src/language/command.c:208 +#: src/language/command.c:208 src/language/expressions/parse.c:1267 #, c-format -msgid "%s is unimplemented." +msgid "%s is not yet implemented." msgstr "" #: src/language/command.c:214 @@ -1295,7 +1276,7 @@ msgid "" "name." msgstr "" -#: src/language/data-io/combine-files.c:757 +#: src/language/data-io/combine-files.c:762 #, c-format msgid "Encountered %zu sets of duplicate cases in the master file." msgstr "" @@ -1376,7 +1357,7 @@ msgstr "" #: src/language/dictionary/split-file.c:84 #: src/language/dictionary/sys-file-info.c:169 #: src/language/dictionary/sys-file-info.c:393 -#: src/language/dictionary/sys-file-info.c:716 +#: src/language/dictionary/sys-file-info.c:725 #: src/language/stats/descriptives.c:885 src/ui/gui/psppire-dictview.c:502 msgid "Variable" msgstr "" @@ -1386,8 +1367,8 @@ msgid "Record" msgstr "" #: src/language/data-io/data-parser.c:646 src/language/data-io/print.c:405 -#: src/ui/gui/crosstabs.glade:92 src/ui/gui/psppire-var-sheet.c:545 -#: src/ui/gui/psppire-var-store.c:791 +#: src/ui/gui/crosstabs.glade:92 src/ui/gui/psppire-var-sheet.c:534 +#: src/ui/gui/psppire-var-store.c:800 msgid "Columns" msgstr "" @@ -1591,19 +1572,19 @@ msgid "" "specified on FIXCASE, %d." msgstr "" -#: src/language/data-io/inpt-pgm.c:129 +#: src/language/data-io/inpt-pgm.c:130 msgid "Unexpected end-of-file within INPUT PROGRAM." msgstr "" -#: src/language/data-io/inpt-pgm.c:142 +#: src/language/data-io/inpt-pgm.c:143 msgid "Input program did not create any variables." msgstr "" -#: src/language/data-io/inpt-pgm.c:286 +#: src/language/data-io/inpt-pgm.c:288 msgid "COLUMN subcommand multiply specified." msgstr "" -#: src/language/data-io/inpt-pgm.c:336 +#: src/language/data-io/inpt-pgm.c:338 msgid "" "REREAD: Column numbers must be positive finite numbers. Column set to 1." msgstr "" @@ -1689,21 +1670,21 @@ msgstr "" msgid "Output calls for %d records but %zu specified on RECORDS subcommand." msgstr "" -#: src/language/data-io/print.c:436 +#: src/language/data-io/print.c:437 #, c-format msgid "Writing %d record to %s." msgid_plural "Writing %d records to %s." msgstr[0] "" msgstr[1] "" -#: src/language/data-io/print.c:440 +#: src/language/data-io/print.c:441 #, c-format msgid "Writing %d record." msgid_plural "Writing %d records." msgstr[0] "" msgstr[1] "" -#: src/language/data-io/print-space.c:73 src/language/lexer/lexer.c:479 +#: src/language/data-io/print-space.c:73 src/language/lexer/lexer.c:478 #: src/language/stats/autorecode.c:154 src/language/xforms/select-if.c:60 msgid "expecting end of command" msgstr "" @@ -1760,18 +1741,7 @@ msgstr "" msgid "Variable %s is %s in target file, but %s in source file." msgstr "" -#: src/language/dictionary/apply-dictionary.c:99 -#, c-format -msgid "Cannot add value labels from source file to long string variable %s." -msgstr "" - -#: src/language/dictionary/apply-dictionary.c:113 -#, c-format -msgid "" -"Cannot apply missing values from source file to long string variable %s." -msgstr "" - -#: src/language/dictionary/apply-dictionary.c:129 +#: src/language/dictionary/apply-dictionary.c:115 msgid "No matching variables found between the source and target files." msgstr "" @@ -1815,12 +1785,12 @@ msgid "" "a single list." msgstr "" -#: src/language/dictionary/missing-values.c:117 +#: src/language/dictionary/missing-values.c:116 #, c-format -msgid "Truncating missing value to short string length (%d characters)." +msgid "Truncating missing value to maximum acceptable length (%d bytes)." msgstr "" -#: src/language/dictionary/missing-values.c:139 +#: src/language/dictionary/missing-values.c:138 #, c-format msgid "Missing values provided are too long to assign to variable of width %d." msgstr "" @@ -1937,21 +1907,21 @@ msgid "Renaming would duplicate variable name %s." msgstr "" #: src/language/dictionary/split-file.c:85 -#: src/language/dictionary/sys-file-info.c:487 -#: src/language/dictionary/sys-file-info.c:636 -#: src/language/stats/crosstabs.q:1167 src/language/stats/crosstabs.q:1194 -#: src/language/stats/crosstabs.q:1214 src/language/stats/crosstabs.q:1236 -#: src/language/stats/examine.q:1958 src/language/stats/frequencies.q:1059 -#: src/language/stats/frequencies.q:1184 src/language/stats/reliability.q:581 -#: src/language/stats/reliability.q:592 +#: src/language/dictionary/sys-file-info.c:486 +#: src/language/dictionary/sys-file-info.c:641 +#: src/language/stats/crosstabs.q:1231 src/language/stats/crosstabs.q:1258 +#: src/language/stats/crosstabs.q:1282 src/language/stats/crosstabs.q:1307 +#: src/language/stats/examine.q:1959 src/language/stats/frequencies.q:1048 +#: src/language/stats/frequencies.q:1173 src/language/stats/reliability.q:582 +#: src/language/stats/reliability.q:593 msgid "Value" msgstr "" #: src/language/dictionary/split-file.c:86 #: src/language/dictionary/sys-file-info.c:397 -#: src/language/dictionary/sys-file-info.c:637 src/ui/gui/crosstabs.glade:275 -#: src/ui/gui/psppire.glade:1999 src/ui/gui/psppire-var-sheet.c:542 -#: src/ui/gui/psppire-var-store.c:788 +#: src/language/dictionary/sys-file-info.c:642 src/ui/gui/crosstabs.glade:275 +#: src/ui/gui/psppire.glade:1974 src/ui/gui/psppire-var-sheet.c:531 +#: src/ui/gui/psppire-var-store.c:797 msgid "Label" msgstr "" @@ -1959,7 +1929,7 @@ msgstr "" msgid "File:" msgstr "" -#: src/language/dictionary/sys-file-info.c:115 src/ui/gui/psppire.glade:1938 +#: src/language/dictionary/sys-file-info.c:115 src/ui/gui/psppire.glade:1913 #: src/ui/gui/recode.glade:841 msgid "Label:" msgstr "" @@ -2071,7 +2041,7 @@ msgstr "" #: src/language/dictionary/sys-file-info.c:171 #: src/language/dictionary/sys-file-info.c:399 -#: src/language/dictionary/sys-file-info.c:715 +#: src/language/dictionary/sys-file-info.c:724 msgid "Position" msgstr "" @@ -2099,16 +2069,16 @@ msgstr "" msgid "Documents in the active file:" msgstr "" -#: src/language/dictionary/sys-file-info.c:486 +#: src/language/dictionary/sys-file-info.c:485 msgid "Attribute" msgstr "" -#: src/language/dictionary/sys-file-info.c:544 +#: src/language/dictionary/sys-file-info.c:543 #, c-format msgid "Format: %s" msgstr "" -#: src/language/dictionary/sys-file-info.c:551 +#: src/language/dictionary/sys-file-info.c:550 #, c-format msgid "Print Format: %s" msgstr "" @@ -2118,87 +2088,72 @@ msgstr "" msgid "Write Format: %s" msgstr "" -#: src/language/dictionary/sys-file-info.c:566 +#: src/language/dictionary/sys-file-info.c:567 #, c-format msgid "Measure: %s" msgstr "" -#: src/language/dictionary/sys-file-info.c:567 +#: src/language/dictionary/sys-file-info.c:568 #: src/ui/gui/psppire-var-sheet.c:111 msgid "Nominal" msgstr "" -#: src/language/dictionary/sys-file-info.c:568 +#: src/language/dictionary/sys-file-info.c:569 #: src/ui/gui/psppire-var-sheet.c:112 msgid "Ordinal" msgstr "" -#: src/language/dictionary/sys-file-info.c:569 +#: src/language/dictionary/sys-file-info.c:570 #: src/ui/gui/psppire-var-sheet.c:113 msgid "Scale" msgstr "" -#: src/language/dictionary/sys-file-info.c:572 +#: src/language/dictionary/sys-file-info.c:573 #, c-format msgid "Display Alignment: %s" msgstr "" -#: src/language/dictionary/sys-file-info.c:573 +#: src/language/dictionary/sys-file-info.c:574 #: src/ui/gui/psppire-var-sheet.c:104 msgid "Left" msgstr "" -#: src/language/dictionary/sys-file-info.c:574 +#: src/language/dictionary/sys-file-info.c:575 #: src/ui/gui/psppire-var-sheet.c:106 msgid "Center" msgstr "Centre" -#: src/language/dictionary/sys-file-info.c:575 +#: src/language/dictionary/sys-file-info.c:576 #: src/ui/gui/psppire-var-sheet.c:105 msgid "Right" msgstr "" -#: src/language/dictionary/sys-file-info.c:578 +#: src/language/dictionary/sys-file-info.c:579 #, c-format msgid "Display Width: %d" msgstr "" -#: src/language/dictionary/sys-file-info.c:590 +#: src/language/dictionary/sys-file-info.c:593 msgid "Missing Values: " msgstr "" -#: src/language/dictionary/sys-file-info.c:693 +#: src/language/dictionary/sys-file-info.c:702 msgid "No vectors defined." msgstr "" -#: src/language/dictionary/sys-file-info.c:714 +#: src/language/dictionary/sys-file-info.c:723 msgid "Vector" msgstr "" -#: src/language/dictionary/sys-file-info.c:717 +#: src/language/dictionary/sys-file-info.c:726 msgid "Print Format" msgstr "" -#: src/language/dictionary/value-labels.c:121 -#, c-format -msgid "" -"It is not possible to assign value labels to long string variables such as %" -"s." -msgstr "" - -#: src/language/dictionary/value-labels.c:157 src/language/lexer/lexer.c:632 -msgid "expecting string" -msgstr "" - -#: src/language/dictionary/value-labels.c:166 src/language/lexer/lexer.c:659 -msgid "expecting number" -msgstr "" - -#: src/language/dictionary/value-labels.c:182 +#: src/language/dictionary/value-labels.c:150 msgid "Truncating value label to 60 characters." msgstr "" -#: src/language/dictionary/variable-display.c:119 +#: src/language/dictionary/variable-display.c:120 msgid "Variable display width must be a positive integer." msgstr "" @@ -2250,11 +2205,11 @@ msgstr "" msgid "The weighting variable may not be scratch." msgstr "" -#: src/language/expressions/evaluate.c:154 +#: src/language/expressions/evaluate.c:155 msgid "expecting number or string" msgstr "" -#: src/language/expressions/evaluate.c:168 +#: src/language/expressions/evaluate.c:169 #, c-format msgid "Duplicate variable name %s." msgstr "" @@ -2421,11 +2376,6 @@ msgstr "" msgid "%s is a PSPP extension." msgstr "" -#: src/language/expressions/parse.c:1267 -#, c-format -msgid "%s is not yet implemented." -msgstr "" - #: src/language/expressions/parse.c:1273 #, c-format msgid "%s may not appear after TEMPORARY." @@ -2446,107 +2396,110 @@ msgstr "" #: src/language/lexer/lexer.c:389 #, c-format -msgid "Bad character in input: `%c'." +msgid "Bad character in input: `%s'." msgstr "" -#: src/language/lexer/lexer.c:391 -#, c-format -msgid "Bad character in input: `\\%o'." -msgstr "" - -#: src/language/lexer/lexer.c:427 +#: src/language/lexer/lexer.c:426 #, c-format msgid "Subcommand %s may only be specified once." msgstr "" -#: src/language/lexer/lexer.c:435 +#: src/language/lexer/lexer.c:434 #, c-format msgid "missing required subcommand %s" msgstr "" -#: src/language/lexer/lexer.c:464 +#: src/language/lexer/lexer.c:463 #, c-format msgid "Syntax error %s at %s." msgstr "" -#: src/language/lexer/lexer.c:467 +#: src/language/lexer/lexer.c:466 #, c-format msgid "Syntax error at %s." msgstr "" -#: src/language/lexer/lexer.c:601 src/language/lexer/lexer.c:618 +#: src/language/lexer/lexer.c:600 src/language/lexer/lexer.c:617 #, c-format msgid "expecting `%s'" msgstr "" -#: src/language/lexer/lexer.c:646 +#: src/language/lexer/lexer.c:631 +msgid "expecting string" +msgstr "" + +#: src/language/lexer/lexer.c:645 msgid "expecting integer" msgstr "" -#: src/language/lexer/lexer.c:671 +#: src/language/lexer/lexer.c:658 +msgid "expecting number" +msgstr "" + +#: src/language/lexer/lexer.c:670 msgid "expecting identifier" msgstr "" -#: src/language/lexer/lexer.c:1065 +#: src/language/lexer/lexer.c:1064 msgid "binary" msgstr "" -#: src/language/lexer/lexer.c:1070 +#: src/language/lexer/lexer.c:1069 msgid "octal" msgstr "" -#: src/language/lexer/lexer.c:1075 +#: src/language/lexer/lexer.c:1074 msgid "hex" msgstr "" -#: src/language/lexer/lexer.c:1085 +#: src/language/lexer/lexer.c:1084 #, c-format msgid "String of %s digits has %zu characters, which is not a multiple of %d." msgstr "" -#: src/language/lexer/lexer.c:1114 +#: src/language/lexer/lexer.c:1113 #, c-format msgid "`%c' is not a valid %s digit." msgstr "" -#: src/language/lexer/lexer.c:1148 +#: src/language/lexer/lexer.c:1147 msgid "Unterminated string constant." msgstr "" -#: src/language/lexer/lexer.c:1202 +#: src/language/lexer/lexer.c:1201 msgid "Unexpected end of file in string concatenation." msgstr "" -#: src/language/lexer/lexer.c:1210 +#: src/language/lexer/lexer.c:1209 msgid "String expected following `+'." msgstr "" -#: src/language/lexer/lexer.c:1223 +#: src/language/lexer/lexer.c:1222 #, c-format msgid "String exceeds 255 characters in length (%zu characters)." msgstr "" -#: src/language/lexer/range-parser.c:60 +#: src/language/lexer/value-parser.c:60 #, c-format msgid "" "Low end of range (%g) is below high end (%g). The range will be treated as " "reversed." msgstr "" -#: src/language/lexer/range-parser.c:68 +#: src/language/lexer/value-parser.c:68 #, c-format msgid "Ends of range are equal (%g)." msgstr "" -#: src/language/lexer/range-parser.c:76 +#: src/language/lexer/value-parser.c:76 msgid "LO or LOWEST must be part of a range." msgstr "" -#: src/language/lexer/range-parser.c:108 +#: src/language/lexer/value-parser.c:108 msgid "System-missing value is not valid here." msgstr "" -#: src/language/lexer/range-parser.c:116 +#: src/language/lexer/value-parser.c:116 msgid "expecting number or data string" msgstr "" @@ -2693,392 +2646,388 @@ msgstr "" msgid "Duplicate variable name %s among target variables." msgstr "" -#: src/language/stats/binomial.c:142 +#: src/language/stats/binomial.c:141 #, c-format msgid "Variable %s is not dichotomous" msgstr "" -#: src/language/stats/binomial.c:207 +#: src/language/stats/binomial.c:194 msgid "Binomial Test" msgstr "" -#: src/language/stats/binomial.c:238 +#: src/language/stats/binomial.c:224 msgid "Group1" msgstr "" -#: src/language/stats/binomial.c:239 +#: src/language/stats/binomial.c:225 msgid "Group2" msgstr "" -#: src/language/stats/binomial.c:240 src/language/stats/chisquare.c:224 -#: src/language/stats/chisquare.c:284 src/language/stats/crosstabs.q:868 -#: src/language/stats/crosstabs.q:1074 src/language/stats/crosstabs.q:1797 -#: src/language/stats/examine.q:1214 src/language/stats/frequencies.q:1136 -#: src/language/stats/oneway.q:305 src/language/stats/oneway.q:475 -#: src/language/stats/regression.q:309 src/language/stats/reliability.q:717 -#: src/language/stats/sign.c:93 src/language/stats/wilcoxon.c:246 +#: src/language/stats/binomial.c:226 src/language/stats/chisquare.c:202 +#: src/language/stats/chisquare.c:262 src/language/stats/crosstabs.q:843 +#: src/language/stats/crosstabs.q:1170 src/language/stats/crosstabs.q:1594 +#: src/language/stats/examine.q:1216 src/language/stats/frequencies.q:1125 +#: src/language/stats/oneway.q:305 src/language/stats/oneway.q:476 +#: src/language/stats/regression.q:309 src/language/stats/reliability.q:718 +#: src/language/stats/sign.c:94 src/language/stats/wilcoxon.c:262 #: src/ui/gui/crosstabs-dialog.c:59 msgid "Total" msgstr "" -#: src/language/stats/binomial.c:273 src/language/stats/chisquare.c:247 -#: src/language/stats/crosstabs.q:1192 src/language/stats/crosstabs.q:1233 +#: src/language/stats/binomial.c:259 src/language/stats/chisquare.c:225 +#: src/language/stats/crosstabs.q:1256 src/language/stats/crosstabs.q:1304 msgid "Category" msgstr "" -#: src/language/stats/binomial.c:274 src/language/stats/crosstabs.q:878 -#: src/language/stats/examine.q:1287 src/language/stats/frequencies.q:1407 +#: src/language/stats/binomial.c:260 src/language/stats/crosstabs.q:850 +#: src/language/stats/examine.q:1289 src/language/stats/frequencies.q:1396 #: src/language/stats/npar-summary.c:123 src/language/stats/oneway.q:389 -#: src/language/stats/reliability.q:720 src/language/stats/sign.c:73 -#: src/language/stats/t-test.q:700 src/language/stats/t-test.q:724 -#: src/language/stats/t-test.q:863 src/language/stats/t-test.q:1425 -#: src/language/stats/wilcoxon.c:229 +#: src/language/stats/reliability.q:721 src/language/stats/sign.c:74 +#: src/language/stats/t-test.q:506 src/language/stats/t-test.q:526 +#: src/language/stats/t-test.q:626 src/language/stats/t-test.q:1105 +#: src/language/stats/wilcoxon.c:245 msgid "N" msgstr "" -#: src/language/stats/binomial.c:275 +#: src/language/stats/binomial.c:261 msgid "Observed Prop." msgstr "" -#: src/language/stats/binomial.c:276 +#: src/language/stats/binomial.c:262 msgid "Test Prop." msgstr "" -#: src/language/stats/binomial.c:279 +#: src/language/stats/binomial.c:265 #, c-format msgid "Exact Sig. (%d-tailed)" msgstr "" -#: src/language/stats/chisquare.c:194 +#: src/language/stats/chisquare.c:172 #, c-format msgid "" "CHISQUARE test specified %d expected values, but %d distinct values were " "encountered in variable %s." msgstr "" -#: src/language/stats/chisquare.c:208 src/language/stats/chisquare.c:248 +#: src/language/stats/chisquare.c:186 src/language/stats/chisquare.c:226 msgid "Observed N" msgstr "" -#: src/language/stats/chisquare.c:209 src/language/stats/chisquare.c:249 +#: src/language/stats/chisquare.c:187 src/language/stats/chisquare.c:227 msgid "Expected N" msgstr "" -#: src/language/stats/chisquare.c:210 src/language/stats/chisquare.c:250 +#: src/language/stats/chisquare.c:188 src/language/stats/chisquare.c:228 #: src/language/stats/regression.q:308 src/ui/gui/crosstabs-dialog.c:61 msgid "Residual" msgstr "" -#: src/language/stats/chisquare.c:243 src/language/stats/sign.c:61 +#: src/language/stats/chisquare.c:221 src/language/stats/sign.c:62 msgid "Frequencies" msgstr "" -#: src/language/stats/chisquare.c:298 src/language/stats/sign.c:114 -#: src/language/stats/wilcoxon.c:297 +#: src/language/stats/chisquare.c:276 src/language/stats/sign.c:115 +#: src/language/stats/wilcoxon.c:313 msgid "Test Statistics" msgstr "" -#: src/language/stats/chisquare.c:312 +#: src/language/stats/chisquare.c:290 msgid "Chi-Square" msgstr "" -#: src/language/stats/chisquare.c:313 src/language/stats/crosstabs.q:1168 -#: src/language/stats/oneway.q:278 src/language/stats/oneway.q:689 -#: src/language/stats/regression.q:302 src/language/stats/t-test.q:1026 -#: src/language/stats/t-test.q:1219 src/language/stats/t-test.q:1316 +#: src/language/stats/chisquare.c:291 src/language/stats/crosstabs.q:1232 +#: src/language/stats/oneway.q:278 src/language/stats/oneway.q:691 +#: src/language/stats/regression.q:302 src/language/stats/t-test.q:753 +#: src/language/stats/t-test.q:924 src/language/stats/t-test.q:1011 msgid "df" msgstr "" -#: src/language/stats/chisquare.c:314 +#: src/language/stats/chisquare.c:292 msgid "Asymp. Sig." msgstr "" -#: src/language/stats/crosstabs.q:278 +#: src/language/stats/crosstabs.q:325 msgid "" "Missing mode REPORT not allowed in general mode. Assuming MISSING=TABLE." msgstr "" -#: src/language/stats/crosstabs.q:288 -msgid "Write mode ALL not allowed in general mode. Assuming WRITE=CELLS." -msgstr "" - -#: src/language/stats/crosstabs.q:364 +#: src/language/stats/crosstabs.q:414 msgid "Too many cross-tabulation variables or dimensions." msgstr "" -#: src/language/stats/crosstabs.q:374 +#: src/language/stats/crosstabs.q:424 msgid "expecting BY" msgstr "" -#: src/language/stats/crosstabs.q:441 +#: src/language/stats/crosstabs.q:484 msgid "VARIABLES must be specified before TABLES." msgstr "" -#: src/language/stats/crosstabs.q:479 +#: src/language/stats/crosstabs.q:522 #, c-format msgid "Maximum value (%ld) less than minimum value (%ld)." msgstr "" -#: src/language/stats/crosstabs.q:863 +#: src/language/stats/crosstabs.q:838 msgid "Summary." msgstr "" -#: src/language/stats/crosstabs.q:865 src/language/stats/examine.q:1275 -#: src/language/stats/reliability.q:708 +#: src/language/stats/crosstabs.q:840 src/language/stats/examine.q:1277 +#: src/language/stats/reliability.q:709 msgid "Cases" msgstr "" -#: src/language/stats/crosstabs.q:866 src/language/stats/examine.q:1212 -#: src/language/stats/frequencies.q:1057 src/language/stats/frequencies.q:1408 -#: src/language/stats/reliability.q:711 +#: src/language/stats/crosstabs.q:841 src/language/stats/examine.q:1214 +#: src/language/stats/frequencies.q:1046 src/language/stats/frequencies.q:1397 +#: src/language/stats/reliability.q:712 msgid "Valid" msgstr "" -#: src/language/stats/crosstabs.q:867 src/language/stats/examine.q:1213 -#: src/language/stats/frequencies.q:1127 src/language/stats/frequencies.q:1409 -#: src/ui/gui/psppire-var-sheet.c:544 src/ui/gui/psppire-var-store.c:790 +#: src/language/stats/crosstabs.q:842 src/language/stats/examine.q:1215 +#: src/language/stats/frequencies.q:1116 src/language/stats/frequencies.q:1398 +#: src/ui/gui/psppire-var-sheet.c:533 src/ui/gui/psppire-var-store.c:799 msgid "Missing" msgstr "" -#: src/language/stats/crosstabs.q:879 src/language/stats/examine.q:1290 -#: src/language/stats/frequencies.q:1061 src/language/stats/frequencies.q:1062 -#: src/language/stats/frequencies.q:1063 +#: src/language/stats/crosstabs.q:851 src/language/stats/examine.q:1292 +#: src/language/stats/frequencies.q:1050 src/language/stats/frequencies.q:1051 +#: src/language/stats/frequencies.q:1052 msgid "Percent" msgstr "" -#: src/language/stats/crosstabs.q:1126 +#: src/language/stats/crosstabs.q:1131 msgid "count" msgstr "" -#: src/language/stats/crosstabs.q:1127 +#: src/language/stats/crosstabs.q:1132 msgid "row %" msgstr "" -#: src/language/stats/crosstabs.q:1128 +#: src/language/stats/crosstabs.q:1133 msgid "column %" msgstr "" -#: src/language/stats/crosstabs.q:1129 +#: src/language/stats/crosstabs.q:1134 msgid "total %" msgstr "" -#: src/language/stats/crosstabs.q:1130 +#: src/language/stats/crosstabs.q:1135 msgid "expected" msgstr "" -#: src/language/stats/crosstabs.q:1131 +#: src/language/stats/crosstabs.q:1136 msgid "residual" msgstr "" -#: src/language/stats/crosstabs.q:1132 +#: src/language/stats/crosstabs.q:1137 msgid "std. resid." msgstr "" -#: src/language/stats/crosstabs.q:1133 +#: src/language/stats/crosstabs.q:1138 msgid "adj. resid." msgstr "" -#: src/language/stats/crosstabs.q:1163 +#: src/language/stats/crosstabs.q:1227 msgid "Chi-square tests." msgstr "" -#: src/language/stats/crosstabs.q:1166 src/language/stats/crosstabs.q:1193 -#: src/language/stats/crosstabs.q:1213 src/language/stats/crosstabs.q:1234 -#: src/language/stats/examine.q:1752 src/ui/gui/checkbox-treeview.c:92 +#: src/language/stats/crosstabs.q:1230 src/language/stats/crosstabs.q:1257 +#: src/language/stats/crosstabs.q:1281 src/language/stats/crosstabs.q:1305 +#: src/language/stats/examine.q:1753 src/ui/gui/checkbox-treeview.c:92 msgid "Statistic" msgstr "" -#: src/language/stats/crosstabs.q:1170 +#: src/language/stats/crosstabs.q:1234 msgid "Asymp. Sig. (2-sided)" msgstr "" -#: src/language/stats/crosstabs.q:1172 -msgid "Exact. Sig. (2-sided)" +#: src/language/stats/crosstabs.q:1236 +msgid "Exact Sig. (2-sided)" msgstr "" -#: src/language/stats/crosstabs.q:1174 -msgid "Exact. Sig. (1-sided)" +#: src/language/stats/crosstabs.q:1238 +msgid "Exact Sig. (1-sided)" msgstr "" -#: src/language/stats/crosstabs.q:1189 +#: src/language/stats/crosstabs.q:1253 msgid "Symmetric measures." msgstr "" -#: src/language/stats/crosstabs.q:1195 src/language/stats/crosstabs.q:1237 +#: src/language/stats/crosstabs.q:1259 src/language/stats/crosstabs.q:1308 msgid "Asymp. Std. Error" msgstr "" -#: src/language/stats/crosstabs.q:1196 src/language/stats/crosstabs.q:1238 +#: src/language/stats/crosstabs.q:1260 src/language/stats/crosstabs.q:1309 msgid "Approx. T" msgstr "" -#: src/language/stats/crosstabs.q:1197 src/language/stats/crosstabs.q:1239 +#: src/language/stats/crosstabs.q:1261 src/language/stats/crosstabs.q:1310 msgid "Approx. Sig." msgstr "" -#: src/language/stats/crosstabs.q:1208 +#: src/language/stats/crosstabs.q:1276 msgid "Risk estimate." msgstr "" -#: src/language/stats/crosstabs.q:1212 +#: src/language/stats/crosstabs.q:1280 #, c-format msgid "95%% Confidence Interval" msgstr "" -#: src/language/stats/crosstabs.q:1215 src/language/stats/t-test.q:1030 -#: src/language/stats/t-test.q:1216 src/language/stats/t-test.q:1319 +#: src/language/stats/crosstabs.q:1283 src/language/stats/t-test.q:757 +#: src/language/stats/t-test.q:921 src/language/stats/t-test.q:1014 msgid "Lower" msgstr "" -#: src/language/stats/crosstabs.q:1216 src/language/stats/t-test.q:1031 -#: src/language/stats/t-test.q:1217 src/language/stats/t-test.q:1320 +#: src/language/stats/crosstabs.q:1284 src/language/stats/t-test.q:758 +#: src/language/stats/t-test.q:922 src/language/stats/t-test.q:1015 msgid "Upper" msgstr "" -#: src/language/stats/crosstabs.q:1230 +#: src/language/stats/crosstabs.q:1301 msgid "Directional measures." msgstr "" -#: src/language/stats/crosstabs.q:1235 src/ui/gui/psppire.glade:2124 -#: src/ui/gui/psppire-var-sheet.c:539 src/ui/gui/psppire-var-store.c:785 +#: src/language/stats/crosstabs.q:1306 src/ui/gui/psppire.glade:2099 +#: src/ui/gui/psppire-var-sheet.c:528 src/ui/gui/psppire-var-store.c:794 msgid "Type" msgstr "" -#: src/language/stats/crosstabs.q:1991 +#: src/language/stats/crosstabs.q:1774 msgid "Pearson Chi-Square" msgstr "" -#: src/language/stats/crosstabs.q:1992 +#: src/language/stats/crosstabs.q:1775 msgid "Likelihood Ratio" msgstr "" -#: src/language/stats/crosstabs.q:1993 +#: src/language/stats/crosstabs.q:1776 msgid "Fisher's Exact Test" msgstr "" -#: src/language/stats/crosstabs.q:1994 +#: src/language/stats/crosstabs.q:1777 msgid "Continuity Correction" msgstr "" -#: src/language/stats/crosstabs.q:1995 +#: src/language/stats/crosstabs.q:1778 msgid "Linear-by-Linear Association" msgstr "" -#: src/language/stats/crosstabs.q:2032 src/language/stats/crosstabs.q:2105 -#: src/language/stats/crosstabs.q:2167 +#: src/language/stats/crosstabs.q:1813 src/language/stats/crosstabs.q:1888 +#: src/language/stats/crosstabs.q:1953 msgid "N of Valid Cases" msgstr "" -#: src/language/stats/crosstabs.q:2051 src/language/stats/crosstabs.q:2183 +#: src/language/stats/crosstabs.q:1832 src/language/stats/crosstabs.q:1971 msgid "Nominal by Nominal" msgstr "" -#: src/language/stats/crosstabs.q:2052 src/language/stats/crosstabs.q:2184 +#: src/language/stats/crosstabs.q:1833 src/language/stats/crosstabs.q:1972 msgid "Ordinal by Ordinal" msgstr "" -#: src/language/stats/crosstabs.q:2053 +#: src/language/stats/crosstabs.q:1834 msgid "Interval by Interval" msgstr "" -#: src/language/stats/crosstabs.q:2054 +#: src/language/stats/crosstabs.q:1835 msgid "Measure of Agreement" msgstr "" -#: src/language/stats/crosstabs.q:2059 src/ui/gui/crosstabs-dialog.c:41 +#: src/language/stats/crosstabs.q:1840 src/ui/gui/crosstabs-dialog.c:41 msgid "Phi" msgstr "" -#: src/language/stats/crosstabs.q:2060 +#: src/language/stats/crosstabs.q:1841 msgid "Cramer's V" msgstr "" -#: src/language/stats/crosstabs.q:2061 +#: src/language/stats/crosstabs.q:1842 msgid "Contingency Coefficient" msgstr "" -#: src/language/stats/crosstabs.q:2062 +#: src/language/stats/crosstabs.q:1843 msgid "Kendall's tau-b" msgstr "" -#: src/language/stats/crosstabs.q:2063 +#: src/language/stats/crosstabs.q:1844 msgid "Kendall's tau-c" msgstr "" -#: src/language/stats/crosstabs.q:2064 src/ui/gui/crosstabs-dialog.c:48 +#: src/language/stats/crosstabs.q:1845 src/ui/gui/crosstabs-dialog.c:48 msgid "Gamma" msgstr "" -#: src/language/stats/crosstabs.q:2065 +#: src/language/stats/crosstabs.q:1846 msgid "Spearman Correlation" msgstr "" -#: src/language/stats/crosstabs.q:2066 +#: src/language/stats/crosstabs.q:1847 msgid "Pearson's R" msgstr "" -#: src/language/stats/crosstabs.q:2067 src/ui/gui/crosstabs-dialog.c:50 +#: src/language/stats/crosstabs.q:1848 src/ui/gui/crosstabs-dialog.c:50 msgid "Kappa" msgstr "" -#: src/language/stats/crosstabs.q:2140 +#: src/language/stats/crosstabs.q:1926 #, c-format msgid "Odds Ratio for %s (%g / %g)" msgstr "" -#: src/language/stats/crosstabs.q:2143 +#: src/language/stats/crosstabs.q:1929 #, c-format msgid "Odds Ratio for %s (%.*s / %.*s)" msgstr "" -#: src/language/stats/crosstabs.q:2151 +#: src/language/stats/crosstabs.q:1937 #, c-format msgid "For cohort %s = %g" msgstr "" -#: src/language/stats/crosstabs.q:2154 +#: src/language/stats/crosstabs.q:1940 #, c-format msgid "For cohort %s = %.*s" msgstr "" -#: src/language/stats/crosstabs.q:2185 +#: src/language/stats/crosstabs.q:1973 msgid "Nominal by Interval" msgstr "" -#: src/language/stats/crosstabs.q:2190 src/ui/gui/crosstabs-dialog.c:43 +#: src/language/stats/crosstabs.q:1978 src/ui/gui/crosstabs-dialog.c:43 msgid "Lambda" msgstr "" -#: src/language/stats/crosstabs.q:2191 +#: src/language/stats/crosstabs.q:1979 msgid "Goodman and Kruskal tau" msgstr "" -#: src/language/stats/crosstabs.q:2192 +#: src/language/stats/crosstabs.q:1980 msgid "Uncertainty Coefficient" msgstr "" -#: src/language/stats/crosstabs.q:2193 +#: src/language/stats/crosstabs.q:1981 msgid "Somers' d" msgstr "" -#: src/language/stats/crosstabs.q:2194 src/ui/gui/crosstabs-dialog.c:51 +#: src/language/stats/crosstabs.q:1982 src/ui/gui/crosstabs-dialog.c:51 msgid "Eta" msgstr "" -#: src/language/stats/crosstabs.q:2199 +#: src/language/stats/crosstabs.q:1987 msgid "Symmetric" msgstr "" -#: src/language/stats/crosstabs.q:2200 src/language/stats/crosstabs.q:2201 +#: src/language/stats/crosstabs.q:1988 src/language/stats/crosstabs.q:1989 #, c-format msgid "%s Dependent" msgstr "" -#: src/language/stats/descriptives.c:102 src/language/stats/examine.q:1557 +#: src/language/stats/descriptives.c:102 src/language/stats/examine.q:1559 #: src/language/stats/frequencies.q:123 src/language/stats/npar-summary.c:126 -#: src/language/stats/oneway.q:390 src/language/stats/t-test.q:701 -#: src/language/stats/t-test.q:725 src/language/stats/t-test.q:862 -#: src/language/stats/t-test.q:1213 src/ui/gui/descriptives-dialog.c:39 +#: src/language/stats/oneway.q:390 src/language/stats/t-test.q:507 +#: src/language/stats/t-test.q:527 src/language/stats/t-test.q:625 +#: src/language/stats/t-test.q:918 src/ui/gui/descriptives-dialog.c:39 #: src/ui/gui/frequencies-dialog.c:40 msgid "Mean" msgstr "" @@ -3091,13 +3040,13 @@ msgstr "" msgid "Std Dev" msgstr "" -#: src/language/stats/descriptives.c:105 src/language/stats/examine.q:1588 +#: src/language/stats/descriptives.c:105 src/language/stats/examine.q:1589 #: src/language/stats/frequencies.q:128 src/ui/gui/descriptives-dialog.c:46 #: src/ui/gui/frequencies-dialog.c:45 msgid "Variance" msgstr "" -#: src/language/stats/descriptives.c:106 src/language/stats/examine.q:1624 +#: src/language/stats/descriptives.c:106 src/language/stats/examine.q:1625 #: src/language/stats/frequencies.q:129 src/ui/gui/descriptives-dialog.c:47 #: src/ui/gui/frequencies-dialog.c:50 msgid "Kurtosis" @@ -3107,7 +3056,7 @@ msgstr "" msgid "S E Kurt" msgstr "" -#: src/language/stats/descriptives.c:108 src/language/stats/examine.q:1619 +#: src/language/stats/descriptives.c:108 src/language/stats/examine.q:1620 #: src/language/stats/frequencies.q:131 src/ui/gui/descriptives-dialog.c:48 #: src/ui/gui/frequencies-dialog.c:46 msgid "Skewness" @@ -3117,22 +3066,22 @@ msgstr "" msgid "S E Skew" msgstr "" -#: src/language/stats/descriptives.c:110 src/language/stats/examine.q:1608 +#: src/language/stats/descriptives.c:110 src/language/stats/examine.q:1609 #: src/language/stats/frequencies.q:133 src/ui/gui/descriptives-dialog.c:43 #: src/ui/gui/frequencies-dialog.c:48 msgid "Range" msgstr "" -#: src/language/stats/descriptives.c:111 src/language/stats/examine.q:1598 +#: src/language/stats/descriptives.c:111 src/language/stats/examine.q:1599 #: src/language/stats/frequencies.q:134 src/language/stats/npar-summary.c:132 -#: src/language/stats/oneway.q:403 src/ui/gui/descriptives-dialog.c:41 +#: src/language/stats/oneway.q:404 src/ui/gui/descriptives-dialog.c:41 #: src/ui/gui/frequencies-dialog.c:42 msgid "Minimum" msgstr "" -#: src/language/stats/descriptives.c:112 src/language/stats/examine.q:1603 +#: src/language/stats/descriptives.c:112 src/language/stats/examine.q:1604 #: src/language/stats/frequencies.q:135 src/language/stats/npar-summary.c:135 -#: src/language/stats/oneway.q:404 src/ui/gui/descriptives-dialog.c:42 +#: src/language/stats/oneway.q:405 src/ui/gui/descriptives-dialog.c:42 #: src/ui/gui/frequencies-dialog.c:43 msgid "Maximum" msgstr "" @@ -3187,131 +3136,122 @@ msgstr "" msgid "Valid cases = %g; cases with missing value(s) = %g." msgstr "" -#: src/language/stats/examine.q:343 src/language/stats/examine.q:496 -#: src/language/stats/examine.q:1058 +#: src/language/stats/examine.q:346 src/language/stats/examine.q:499 +#: src/language/stats/examine.q:1060 msgid "Not creating plot because data set is empty." msgstr "" -#: src/language/stats/examine.q:353 +#: src/language/stats/examine.q:356 #, c-format msgid "Normal Q-Q Plot of %s" msgstr "" -#: src/language/stats/examine.q:354 src/language/stats/examine.q:359 +#: src/language/stats/examine.q:357 src/language/stats/examine.q:362 msgid "Observed Value" msgstr "" -#: src/language/stats/examine.q:355 +#: src/language/stats/examine.q:358 msgid "Expected Normal" msgstr "" -#: src/language/stats/examine.q:357 +#: src/language/stats/examine.q:360 #, c-format msgid "Detrended Normal Q-Q Plot of %s" msgstr "" -#: src/language/stats/examine.q:360 +#: src/language/stats/examine.q:363 msgid "Dev from Normal" msgstr "" -#: src/language/stats/examine.q:513 +#: src/language/stats/examine.q:516 #, c-format msgid "Boxplot of %s vs. %s" msgstr "" -#: src/language/stats/examine.q:517 +#: src/language/stats/examine.q:520 #, c-format msgid "Boxplot of %s" msgstr "" -#: src/language/stats/examine.q:753 src/language/stats/examine.q:766 +#: src/language/stats/examine.q:756 src/language/stats/examine.q:769 #, c-format msgid "%s and %s are mutually exclusive" msgstr "" -#: src/language/stats/examine.q:1270 src/language/stats/reliability.q:685 +#: src/language/stats/examine.q:1272 src/language/stats/reliability.q:686 msgid "Case Processing Summary" msgstr "" -#: src/language/stats/examine.q:1562 src/language/stats/oneway.q:398 +#: src/language/stats/examine.q:1564 src/language/stats/oneway.q:398 #, c-format msgid "%g%% Confidence Interval for Mean" msgstr "" -#: src/language/stats/examine.q:1568 src/language/stats/oneway.q:400 +#: src/language/stats/examine.q:1570 src/language/stats/oneway.q:401 msgid "Lower Bound" msgstr "" -#: src/language/stats/examine.q:1573 src/language/stats/oneway.q:401 +#: src/language/stats/examine.q:1575 src/language/stats/oneway.q:402 msgid "Upper Bound" msgstr "" -#: src/language/stats/examine.q:1578 -#, c-format -msgid "5%% Trimmed Mean" +#: src/language/stats/examine.q:1579 +msgid "5% Trimmed Mean" msgstr "" -#: src/language/stats/examine.q:1583 src/language/stats/frequencies.q:125 +#: src/language/stats/examine.q:1584 src/language/stats/frequencies.q:125 #: src/ui/gui/frequencies-dialog.c:52 msgid "Median" msgstr "" -#: src/language/stats/examine.q:1593 src/language/stats/npar-summary.c:129 -#: src/language/stats/oneway.q:391 src/language/stats/t-test.q:702 -#: src/language/stats/t-test.q:726 src/language/stats/t-test.q:864 -#: src/language/stats/t-test.q:1214 +#: src/language/stats/examine.q:1594 src/language/stats/npar-summary.c:129 +#: src/language/stats/oneway.q:391 src/language/stats/t-test.q:508 +#: src/language/stats/t-test.q:528 src/language/stats/t-test.q:627 +#: src/language/stats/t-test.q:919 msgid "Std. Deviation" msgstr "" -#: src/language/stats/examine.q:1613 +#: src/language/stats/examine.q:1614 msgid "Interquartile Range" msgstr "" -#: src/language/stats/examine.q:1749 src/language/stats/oneway.q:407 +#: src/language/stats/examine.q:1750 src/language/stats/oneway.q:408 #: src/ui/gui/examine.glade:310 msgid "Descriptives" msgstr "" -#: src/language/stats/examine.q:1755 src/language/stats/oneway.q:392 -#: src/language/stats/oneway.q:687 src/language/stats/regression.q:203 +#: src/language/stats/examine.q:1756 src/language/stats/oneway.q:392 +#: src/language/stats/oneway.q:689 src/language/stats/regression.q:203 msgid "Std. Error" msgstr "" -#: src/language/stats/examine.q:1852 src/language/stats/examine.q:1857 -#: src/ui/gui/psppire-data-store.c:756 src/ui/gui/psppire-var-store.c:646 -#: src/ui/gui/psppire-var-store.c:656 src/ui/gui/psppire-var-store.c:666 -#: src/ui/gui/psppire-var-store.c:777 -#, c-format -msgid "%d" -msgstr "" - -#: src/language/stats/examine.q:1938 +#: src/language/stats/examine.q:1939 msgid "Highest" msgstr "" -#: src/language/stats/examine.q:1943 +#: src/language/stats/examine.q:1944 msgid "Lowest" msgstr "" -#: src/language/stats/examine.q:1950 +#: src/language/stats/examine.q:1951 msgid "Extreme Values" msgstr "" -#: src/language/stats/examine.q:1954 +#: src/language/stats/examine.q:1955 msgid "Case Number" msgstr "" -#: src/language/stats/examine.q:2076 +#: src/language/stats/examine.q:2077 msgid "Tukey's Hinges" msgstr "" -#: src/language/stats/examine.q:2116 src/language/stats/examine.q:2134 -#: src/language/stats/frequencies.q:1418 src/language/stats/npar-summary.c:142 +#: src/language/stats/examine.q:2117 src/language/stats/examine.q:2134 +#: src/language/stats/frequencies.q:1407 src/language/stats/npar-summary.c:142 #: src/ui/gui/examine.glade:333 msgid "Percentiles" msgstr "" -#: src/language/stats/examine.q:2123 +#: src/language/stats/examine.q:2124 #, c-format msgid "%g" msgstr "" @@ -3321,68 +3261,54 @@ msgid "" "FLIP ignores TEMPORARY. Temporary transformations will be made permanent." msgstr "" -#: src/language/stats/flip.c:151 +#: src/language/stats/flip.c:147 msgid "Could not create temporary file for FLIP." msgstr "" -#: src/language/stats/flip.c:162 -#, c-format -msgid "Error writing FLIP file: %s." -msgstr "" - -#: src/language/stats/flip.c:262 -#, c-format -msgid "Could not create acceptable variant for variable %s." -msgstr "" - -#: src/language/stats/flip.c:278 -msgid "Cannot create more than 99999 variable names." -msgstr "" - -#: src/language/stats/flip.c:394 +#: src/language/stats/flip.c:324 #, c-format msgid "Error rewinding FLIP file: %s." msgstr "" -#: src/language/stats/flip.c:401 +#: src/language/stats/flip.c:331 msgid "Error creating FLIP source file." msgstr "" -#: src/language/stats/flip.c:414 +#: src/language/stats/flip.c:344 #, c-format msgid "Error reading FLIP file: %s." msgstr "" -#: src/language/stats/flip.c:416 +#: src/language/stats/flip.c:346 msgid "Unexpected end of file reading FLIP file." msgstr "" -#: src/language/stats/flip.c:432 +#: src/language/stats/flip.c:362 #, c-format msgid "Error seeking FLIP source file: %s." msgstr "" -#: src/language/stats/flip.c:440 +#: src/language/stats/flip.c:370 #, c-format msgid "Error writing FLIP source file: %s." msgstr "" -#: src/language/stats/flip.c:451 +#: src/language/stats/flip.c:381 #, c-format msgid "Error closing FLIP source file: %s." msgstr "" -#: src/language/stats/flip.c:459 +#: src/language/stats/flip.c:389 #, c-format msgid "Error rewinding FLIP source file: %s." msgstr "" -#: src/language/stats/flip.c:487 +#: src/language/stats/flip.c:419 #, c-format msgid "Error reading FLIP temporary file: %s." msgstr "" -#: src/language/stats/flip.c:490 +#: src/language/stats/flip.c:422 msgid "Unexpected end of file reading FLIP temporary file." msgstr "" @@ -3402,66 +3328,66 @@ msgstr "" msgid "S.E. Skew" msgstr "" -#: src/language/stats/frequencies.q:409 +#: src/language/stats/frequencies.q:405 msgid "" "At most one of BARCHART, HISTOGRAM, or HBAR should be given. HBAR will be " "assumed. Argument values will be given precedence increasing along the " "order given." msgstr "" -#: src/language/stats/frequencies.q:492 +#: src/language/stats/frequencies.q:488 #, c-format msgid "" "MAX must be greater than or equal to MIN, if both are specified. However, " "MIN was specified as %g and MAX as %g. MIN and MAX will be ignored." msgstr "" -#: src/language/stats/frequencies.q:757 +#: src/language/stats/frequencies.q:752 #, c-format msgid "Variable %s specified multiple times on VARIABLES subcommand." msgstr "" -#: src/language/stats/frequencies.q:820 +#: src/language/stats/frequencies.q:809 msgid "`)' expected after GROUPED interval list." msgstr "" -#: src/language/stats/frequencies.q:832 +#: src/language/stats/frequencies.q:821 #, c-format msgid "Variables %s specified on GROUPED but not on VARIABLES." msgstr "" -#: src/language/stats/frequencies.q:839 +#: src/language/stats/frequencies.q:828 #, c-format msgid "Variables %s specified multiple times on GROUPED subcommand." msgstr "" -#: src/language/stats/frequencies.q:1058 src/language/stats/frequencies.q:1151 -#: src/language/stats/frequencies.q:1152 src/language/stats/frequencies.q:1187 +#: src/language/stats/frequencies.q:1047 src/language/stats/frequencies.q:1140 +#: src/language/stats/frequencies.q:1141 src/language/stats/frequencies.q:1176 msgid "Cum" msgstr "" -#: src/language/stats/frequencies.q:1060 src/output/charts/plot-hist.c:140 +#: src/language/stats/frequencies.q:1049 src/output/charts/plot-hist.c:140 msgid "Frequency" msgstr "" -#: src/language/stats/frequencies.q:1081 +#: src/language/stats/frequencies.q:1070 msgid "Value Label" msgstr "" -#: src/language/stats/frequencies.q:1185 +#: src/language/stats/frequencies.q:1174 msgid "Freq" msgstr "" -#: src/language/stats/frequencies.q:1186 src/language/stats/frequencies.q:1188 +#: src/language/stats/frequencies.q:1175 src/language/stats/frequencies.q:1177 msgid "Pct" msgstr "" -#: src/language/stats/frequencies.q:1381 +#: src/language/stats/frequencies.q:1370 #, c-format msgid "No valid data for variable %s; statistics not displayed." msgstr "" -#: src/language/stats/frequencies.q:1422 +#: src/language/stats/frequencies.q:1411 msgid "50 (Median)" msgstr "" @@ -3498,7 +3424,7 @@ msgid "" "exactly %d values." msgstr "" -#: src/language/stats/npar.q:441 src/language/stats/t-test.q:501 +#: src/language/stats/npar.q:441 src/language/stats/t-test.q:379 #, c-format msgid "" "PAIRED was specified but the number of variables preceding WITH (%zu) did " @@ -3544,11 +3470,11 @@ msgid "Mean Square" msgstr "" #: src/language/stats/oneway.q:280 src/language/stats/regression.q:304 -#: src/language/stats/t-test.q:1023 +#: src/language/stats/t-test.q:750 msgid "F" msgstr "" -#: src/language/stats/oneway.q:281 src/language/stats/oneway.q:538 +#: src/language/stats/oneway.q:281 src/language/stats/oneway.q:539 #: src/language/stats/regression.q:206 src/language/stats/regression.q:305 msgid "Significance" msgstr "" @@ -3565,19 +3491,19 @@ msgstr "" msgid "ANOVA" msgstr "" -#: src/language/stats/oneway.q:535 +#: src/language/stats/oneway.q:536 msgid "Levene Statistic" msgstr "" -#: src/language/stats/oneway.q:536 +#: src/language/stats/oneway.q:537 msgid "df1" msgstr "" -#: src/language/stats/oneway.q:537 +#: src/language/stats/oneway.q:538 msgid "df2" msgstr "" -#: src/language/stats/oneway.q:540 +#: src/language/stats/oneway.q:541 msgid "Test of Homogeneity of Variances" msgstr "" @@ -3585,34 +3511,34 @@ msgstr "" msgid "Contrast Coefficients" msgstr "" -#: src/language/stats/oneway.q:610 src/language/stats/oneway.q:685 +#: src/language/stats/oneway.q:610 src/language/stats/oneway.q:687 msgid "Contrast" msgstr "" -#: src/language/stats/oneway.q:683 +#: src/language/stats/oneway.q:685 msgid "Contrast Tests" msgstr "" -#: src/language/stats/oneway.q:686 +#: src/language/stats/oneway.q:688 msgid "Value of Contrast" msgstr "" -#: src/language/stats/oneway.q:688 src/language/stats/regression.q:205 -#: src/language/stats/t-test.q:1025 src/language/stats/t-test.q:1218 -#: src/language/stats/t-test.q:1315 +#: src/language/stats/oneway.q:690 src/language/stats/regression.q:205 +#: src/language/stats/t-test.q:752 src/language/stats/t-test.q:923 +#: src/language/stats/t-test.q:1010 msgid "t" msgstr "" -#: src/language/stats/oneway.q:690 src/language/stats/t-test.q:1027 -#: src/language/stats/t-test.q:1220 src/language/stats/t-test.q:1317 +#: src/language/stats/oneway.q:692 src/language/stats/t-test.q:754 +#: src/language/stats/t-test.q:925 src/language/stats/t-test.q:1012 msgid "Sig. (2-tailed)" msgstr "" -#: src/language/stats/oneway.q:734 +#: src/language/stats/oneway.q:736 msgid "Assume equal variances" msgstr "" -#: src/language/stats/oneway.q:738 +#: src/language/stats/oneway.q:740 msgid "Does not assume equal" msgstr "" @@ -3639,33 +3565,33 @@ msgstr "" msgid "%s into %s(%s of %s using %s BY %s)" msgstr "" -#: src/language/stats/rank.q:729 +#: src/language/stats/rank.q:728 #, c-format msgid "%s into %s(%s of %s BY %s)" msgstr "" -#: src/language/stats/rank.q:743 +#: src/language/stats/rank.q:741 #, c-format msgid "%s into %s(%s of %s using %s)" msgstr "" -#: src/language/stats/rank.q:753 +#: src/language/stats/rank.q:750 #, c-format msgid "%s into %s(%s of %s)" msgstr "" -#: src/language/stats/rank.q:766 +#: src/language/stats/rank.q:762 msgid "" "FRACTION has been specified, but NORMAL and PROPORTION rank functions have " "not been requested. The FRACTION subcommand will be ignored." msgstr "" -#: src/language/stats/rank.q:857 +#: src/language/stats/rank.q:853 #, c-format msgid "Variable %s already exists." msgstr "" -#: src/language/stats/rank.q:862 +#: src/language/stats/rank.q:858 msgid "Too many variables in INTO clause." msgstr "" @@ -3732,104 +3658,103 @@ msgstr "" msgid "Dependent variable must be numeric." msgstr "" -#: src/language/stats/reliability.q:432 +#: src/language/stats/reliability.q:433 msgid "Reliability Statistics" msgstr "" -#: src/language/stats/reliability.q:475 +#: src/language/stats/reliability.q:476 msgid "Item-Total Statistics" msgstr "" -#: src/language/stats/reliability.q:497 +#: src/language/stats/reliability.q:498 msgid "Scale Mean if Item Deleted" msgstr "" -#: src/language/stats/reliability.q:500 +#: src/language/stats/reliability.q:501 msgid "Scale Variance if Item Deleted" msgstr "" -#: src/language/stats/reliability.q:503 +#: src/language/stats/reliability.q:504 msgid "Corrected Item-Total Correlation" msgstr "" -#: src/language/stats/reliability.q:506 +#: src/language/stats/reliability.q:507 msgid "Cronbach's Alpha if Item Deleted" msgstr "" -#: src/language/stats/reliability.q:556 src/language/stats/reliability.q:575 +#: src/language/stats/reliability.q:557 src/language/stats/reliability.q:576 msgid "Cronbach's Alpha" msgstr "" -#: src/language/stats/reliability.q:559 +#: src/language/stats/reliability.q:560 msgid "N of items" msgstr "" -#: src/language/stats/reliability.q:578 +#: src/language/stats/reliability.q:579 msgid "Part 1" msgstr "" -#: src/language/stats/reliability.q:584 src/language/stats/reliability.q:595 +#: src/language/stats/reliability.q:585 src/language/stats/reliability.q:596 msgid "N of Items" msgstr "" -#: src/language/stats/reliability.q:589 +#: src/language/stats/reliability.q:590 msgid "Part 2" msgstr "" -#: src/language/stats/reliability.q:600 +#: src/language/stats/reliability.q:601 msgid "Total N of Items" msgstr "" -#: src/language/stats/reliability.q:603 +#: src/language/stats/reliability.q:604 msgid "Correlation Between Forms" msgstr "" -#: src/language/stats/reliability.q:607 +#: src/language/stats/reliability.q:608 msgid "Spearman-Brown Coefficient" msgstr "" -#: src/language/stats/reliability.q:610 +#: src/language/stats/reliability.q:611 msgid "Equal Length" msgstr "" -#: src/language/stats/reliability.q:613 +#: src/language/stats/reliability.q:614 msgid "Unequal Length" msgstr "" -#: src/language/stats/reliability.q:617 +#: src/language/stats/reliability.q:618 msgid "Guttman Split-Half Coefficient" msgstr "" -#: src/language/stats/reliability.q:714 +#: src/language/stats/reliability.q:715 msgid "Excluded" msgstr "" #: src/language/stats/reliability.q:723 -#, c-format -msgid "%%" +msgid "%" msgstr "" -#: src/language/stats/sign.c:90 +#: src/language/stats/sign.c:91 msgid "Negative Differences" msgstr "" -#: src/language/stats/sign.c:91 +#: src/language/stats/sign.c:92 msgid "Positive Differences" msgstr "" -#: src/language/stats/sign.c:92 src/language/stats/wilcoxon.c:245 +#: src/language/stats/sign.c:93 src/language/stats/wilcoxon.c:261 msgid "Ties" msgstr "" -#: src/language/stats/sign.c:133 +#: src/language/stats/sign.c:134 src/language/stats/wilcoxon.c:331 msgid "Exact Sig. (2-tailed)" msgstr "" -#: src/language/stats/sign.c:136 +#: src/language/stats/sign.c:137 src/language/stats/wilcoxon.c:332 msgid "Exact Sig. (1-tailed)" msgstr "" -#: src/language/stats/sign.c:139 src/language/stats/wilcoxon.c:319 +#: src/language/stats/sign.c:140 src/language/stats/wilcoxon.c:335 msgid "Point Probability" msgstr "" @@ -3850,161 +3775,148 @@ msgstr "" msgid "Variable %s specified twice in sort criteria." msgstr "" -#: src/language/stats/t-test.q:280 -msgid "TESTVAL, GROUPS and PAIRS subcommands are mutually exclusive." +#: src/language/stats/t-test.q:189 +msgid "Exactly one of TESTVAL, GROUPS and PAIRS subcommands must be specified." msgstr "" -#: src/language/stats/t-test.q:298 -msgid "VARIABLES subcommand is not appropriate with PAIRS" +#: src/language/stats/t-test.q:210 +msgid "VARIABLES subcommand may not be used with PAIRS." msgstr "" -#: src/language/stats/t-test.q:336 +#: src/language/stats/t-test.q:229 msgid "One or more VARIABLES must be specified." msgstr "" -#: src/language/stats/t-test.q:386 -#, c-format -msgid "Long string variable %s is not valid here." -msgstr "" - -#: src/language/stats/t-test.q:406 src/language/stats/t-test.q:420 +#: src/language/stats/t-test.q:323 msgid "" "When applying GROUPS to a string variable, two values must be specified." msgstr "" -#: src/language/stats/t-test.q:518 +#: src/language/stats/t-test.q:394 msgid "At least two variables must be specified on PAIRS." msgstr "" -#: src/language/stats/t-test.q:698 +#: src/language/stats/t-test.q:504 msgid "One-Sample Statistics" msgstr "" -#: src/language/stats/t-test.q:703 src/language/stats/t-test.q:727 -#: src/language/stats/t-test.q:865 +#: src/language/stats/t-test.q:509 src/language/stats/t-test.q:529 +#: src/language/stats/t-test.q:628 msgid "SE. Mean" msgstr "" -#: src/language/stats/t-test.q:722 +#: src/language/stats/t-test.q:523 msgid "Group Statistics" msgstr "" -#: src/language/stats/t-test.q:859 +#: src/language/stats/t-test.q:622 msgid "Paired Sample Statistics" msgstr "" -#: src/language/stats/t-test.q:885 src/language/stats/t-test.q:1243 -#: src/language/stats/t-test.q:1442 +#: src/language/stats/t-test.q:642 src/language/stats/t-test.q:945 +#: src/language/stats/t-test.q:1119 #, c-format msgid "Pair %d" msgstr "" -#: src/language/stats/t-test.q:1011 +#: src/language/stats/t-test.q:738 msgid "Independent Samples Test" msgstr "" -#: src/language/stats/t-test.q:1019 +#: src/language/stats/t-test.q:746 msgid "Levene's Test for Equality of Variances" msgstr "" -#: src/language/stats/t-test.q:1021 +#: src/language/stats/t-test.q:748 msgid "t-test for Equality of Means" msgstr "" -#: src/language/stats/t-test.q:1024 src/language/stats/t-test.q:1427 +#: src/language/stats/t-test.q:751 src/language/stats/t-test.q:1107 msgid "Sig." msgstr "" -#: src/language/stats/t-test.q:1028 src/language/stats/t-test.q:1318 +#: src/language/stats/t-test.q:755 src/language/stats/t-test.q:1013 msgid "Mean Difference" msgstr "" -#: src/language/stats/t-test.q:1029 +#: src/language/stats/t-test.q:756 msgid "Std. Error Difference" msgstr "" -#: src/language/stats/t-test.q:1034 src/language/stats/t-test.q:1210 -#: src/language/stats/t-test.q:1310 +#: src/language/stats/t-test.q:761 src/language/stats/t-test.q:915 +#: src/language/stats/t-test.q:1005 #, c-format msgid "%g%% Confidence Interval of the Difference" msgstr "" -#: src/language/stats/t-test.q:1090 +#: src/language/stats/t-test.q:815 msgid "Equal variances assumed" msgstr "" -#: src/language/stats/t-test.q:1142 +#: src/language/stats/t-test.q:861 msgid "Equal variances not assumed" msgstr "" -#: src/language/stats/t-test.q:1200 +#: src/language/stats/t-test.q:905 msgid "Paired Samples Test" msgstr "" -#: src/language/stats/t-test.q:1203 +#: src/language/stats/t-test.q:908 msgid "Paired Differences" msgstr "" -#: src/language/stats/t-test.q:1215 +#: src/language/stats/t-test.q:920 msgid "Std. Error Mean" msgstr "" -#: src/language/stats/t-test.q:1299 +#: src/language/stats/t-test.q:994 msgid "One-Sample Test" msgstr "" -#: src/language/stats/t-test.q:1304 +#: src/language/stats/t-test.q:999 #, c-format msgid "Test Value = %f" msgstr "" -#: src/language/stats/t-test.q:1422 +#: src/language/stats/t-test.q:1102 msgid "Paired Samples Correlations" msgstr "" -#: src/language/stats/t-test.q:1426 +#: src/language/stats/t-test.q:1106 msgid "Correlation" msgstr "" -#: src/language/stats/t-test.q:1445 +#: src/language/stats/t-test.q:1121 #, c-format msgid "%s & %s" msgstr "" -#: src/language/stats/wilcoxon.c:216 +#: src/language/stats/wilcoxon.c:232 msgid "Ranks" msgstr "" -#: src/language/stats/wilcoxon.c:230 +#: src/language/stats/wilcoxon.c:246 msgid "Mean Rank" msgstr "" -#: src/language/stats/wilcoxon.c:231 +#: src/language/stats/wilcoxon.c:247 msgid "Sum of Ranks" msgstr "" -#: src/language/stats/wilcoxon.c:243 +#: src/language/stats/wilcoxon.c:259 msgid "Negative Ranks" msgstr "" -#: src/language/stats/wilcoxon.c:244 +#: src/language/stats/wilcoxon.c:260 msgid "Positive Ranks" msgstr "" -#: src/language/stats/wilcoxon.c:310 +#: src/language/stats/wilcoxon.c:326 msgid "Z" msgstr "" -#: src/language/stats/wilcoxon.c:311 -msgid "Asymp. Sig (2-tailed)" -msgstr "" - -#: src/language/stats/wilcoxon.c:315 -msgid "Exact Sig (2-tailed)" -msgstr "" - -#: src/language/stats/wilcoxon.c:316 -msgid "Exact Sig (1-tailed)" +#: src/language/stats/wilcoxon.c:327 +msgid "Asymp. Sig. (2-tailed)" msgstr "" #: src/language/syntax-file.c:88 @@ -4017,34 +3929,16 @@ msgstr "" msgid "Opening `%s': %s." msgstr "" -#: src/language/syntax-file.c:106 +#: src/language/syntax-file.c:107 #, c-format msgid "Reading `%s': %s." msgstr "" -#: src/language/syntax-file.c:126 +#: src/language/syntax-file.c:127 #, c-format msgid "Closing `%s': %s." msgstr "" -#: src/language/tests/check-model.q:138 -msgid "PATH and SEARCH subcommands are mutually exclusive. Ignoring PATH." -msgstr "" - -#: src/language/tests/check-model.q:156 -msgid "At least one value must be specified on PATH." -msgstr "" - -#: src/language/tests/check-model.q:167 -#, c-format -msgid "Hash bits adjusted to %d." -msgstr "" - -#: src/language/tests/check-model.q:208 -#, c-format -msgid "error opening \"%s\" for writing" -msgstr "" - #: src/language/tests/float-format.c:124 #, c-format msgid "%zu-byte string needed but %zu-byte string supplied." @@ -4174,98 +4068,45 @@ msgid "" "is of type string." msgstr "" -#: src/language/utilities/set.q:522 -msgid "BLANKS is SYSMIS." -msgstr "" - -#: src/language/utilities/set.q:524 -#, c-format -msgid "BLANKS is %g." +#: src/language/utilities/set.q:668 +msgid "ISL (32-bit IEEE 754 single, little-endian)" msgstr "" -#: src/language/utilities/set.q:559 -#, c-format -msgid "%s is \"%s\"." +#: src/language/utilities/set.q:671 +msgid "ISB (32-bit IEEE 754 single, big-endian)" msgstr "" -#: src/language/utilities/set.q:595 -#, c-format -msgid "DECIMAL is \"%c\"." -msgstr "" - -#: src/language/utilities/set.q:601 -#, c-format -msgid "ENDCMD is \"%c\"." +#: src/language/utilities/set.q:674 +msgid "IDL (64-bit IEEE 754 double, little-endian)" msgstr "" -#: src/language/utilities/set.q:609 -#, c-format -msgid "ERRORS is \"%s\"." +#: src/language/utilities/set.q:677 +msgid "IDB (64-bit IEEE 754 double, big-endian)" msgstr "" -#: src/language/utilities/set.q:620 -#, c-format -msgid "FORMAT is %s." +#: src/language/utilities/set.q:681 +msgid "VF (32-bit VAX F, VAX-endian)" msgstr "" -#: src/language/utilities/set.q:626 -#, c-format -msgid "LENGTH is %d." +#: src/language/utilities/set.q:684 +msgid "VD (64-bit VAX D, VAX-endian)" msgstr "" -#: src/language/utilities/set.q:632 -#, c-format -msgid "LOCALE is %s" +#: src/language/utilities/set.q:687 +msgid "VG (64-bit VAX G, VAX-endian)" msgstr "" -#: src/language/utilities/set.q:638 -#, c-format -msgid "MXERRS is %d." +#: src/language/utilities/set.q:691 +msgid "ZS (32-bit IBM Z hexadecimal short, big-endian)" msgstr "" -#: src/language/utilities/set.q:644 -#, c-format -msgid "MXLOOPS is %d." +#: src/language/utilities/set.q:694 +msgid "ZL (64-bit IBM Z hexadecimal long, big-endian)" msgstr "" -#: src/language/utilities/set.q:650 +#: src/language/utilities/set.q:793 #, c-format -msgid "MXWARNS is %d." -msgstr "" - -#: src/language/utilities/set.q:657 src/language/utilities/set.q:708 -#, c-format -msgid "%s is %s (%s)." -msgstr "" - -#: src/language/utilities/set.q:729 -msgid "SCOMPRESSION is ON." -msgstr "" - -#: src/language/utilities/set.q:731 -msgid "SCOMPRESSION is OFF." -msgstr "" - -#: src/language/utilities/set.q:738 -msgid "UNDEFINED is WARN." -msgstr "" - -#: src/language/utilities/set.q:740 -msgid "UNDEFINED is NOWARN." -msgstr "" - -#: src/language/utilities/set.q:748 -msgid "WEIGHT is off." -msgstr "" - -#: src/language/utilities/set.q:750 -#, c-format -msgid "WEIGHT is variable %s." -msgstr "" - -#: src/language/utilities/set.q:768 -#, c-format -msgid "WIDTH is %d." +msgid "%s is %s." msgstr "" #: src/language/utilities/title.c:68 @@ -4291,7 +4132,7 @@ msgid "" "When executing COMPUTE: %g is not a valid value as an index into vector %s." msgstr "" -#: src/language/xforms/compute.c:354 +#: src/language/xforms/compute.c:353 #, c-format msgid "There is no vector named %s." msgstr "" @@ -4300,44 +4141,44 @@ msgstr "" msgid "Destination cannot be a string variable." msgstr "" -#: src/language/xforms/recode.c:251 +#: src/language/xforms/recode.c:245 msgid "" "Inconsistent target variable types. Target variables must be all numeric or " "all string." msgstr "" -#: src/language/xforms/recode.c:272 +#: src/language/xforms/recode.c:266 msgid "CONVERT requires string input values and numeric output values." msgstr "" -#: src/language/xforms/recode.c:329 +#: src/language/xforms/recode.c:321 msgid "THRU is not allowed with string variables." msgstr "" -#: src/language/xforms/recode.c:407 +#: src/language/xforms/recode.c:400 msgid "expecting output value" msgstr "" -#: src/language/xforms/recode.c:456 +#: src/language/xforms/recode.c:457 #, c-format msgid "" "%zu variable(s) cannot be recoded into %zu variable(s). Specify the same " "number of variables as source and target variables." msgstr "" -#: src/language/xforms/recode.c:471 +#: src/language/xforms/recode.c:472 #, c-format msgid "" "There is no variable named %s. (All string variables specified on INTO must " "already exist. Use the STRING command to create a string variable.)" msgstr "" -#: src/language/xforms/recode.c:487 +#: src/language/xforms/recode.c:488 #, c-format msgid "INTO is required with %s input values and %s output values." msgstr "" -#: src/language/xforms/recode.c:500 +#: src/language/xforms/recode.c:501 #, c-format msgid "Type mismatch. Cannot store %s data in %s variable %s." msgstr "" @@ -4368,6 +4209,31 @@ msgstr "" msgid "hash table:" msgstr "" +#: src/libpspp/tmpfile.c:55 +#, c-format +msgid "failed to create temporary file" +msgstr "" + +#: src/libpspp/tmpfile.c:96 +#, c-format +msgid "seeking in temporary file" +msgstr "" + +#: src/libpspp/tmpfile.c:115 +#, c-format +msgid "reading temporary file" +msgstr "" + +#: src/libpspp/tmpfile.c:117 +#, c-format +msgid "unexpected end of file reading temporary file" +msgstr "" + +#: src/libpspp/tmpfile.c:136 +#, c-format +msgid "writing to temporary file" +msgstr "" + #: src/math/percentiles.c:35 msgid "HAverage" msgstr "" @@ -4790,6 +4656,14 @@ msgid "" "bad box: (%d+%d=%d,%d+%d=%d)-(%d+%d=%d,%d+%d=%d) in table size (%d,%d)\n" msgstr "" +#: src/ui/gui/about.c:64 +msgid "A program for the analysis of sampled data" +msgstr "" + +#: src/ui/gui/about.c:73 +msgid "translator-credits" +msgstr "John Darrington" + #: src/ui/gui/comments-dialog.c:58 #, c-format msgid "Column Number: %d" @@ -4829,7 +4703,7 @@ msgstr "" #: src/ui/gui/crosstabs-dialog.c:53 src/ui/gui/crosstabs-dialog.c:64 #: src/ui/gui/crosstabs-dialog.c:99 src/ui/gui/crosstabs-dialog.c:107 -#: src/ui/gui/psppire-var-store.c:559 src/ui/gui/var-display.c:16 +#: src/ui/gui/psppire-var-store.c:568 src/ui/gui/var-display.c:16 #: src/ui/gui/variable-info-dialog.c:40 msgid "None" msgstr "" @@ -4883,7 +4757,7 @@ msgstr "" msgid "Pivot" msgstr "" -#: src/ui/gui/crosstabs.glade:253 src/ui/gui/psppire.glade:781 +#: src/ui/gui/crosstabs.glade:253 src/ui/gui/psppire.glade:756 msgid "Ascending" msgstr "" @@ -4958,7 +4832,7 @@ msgid "_Edit" msgstr "" #: src/ui/gui/data-editor.glade:174 src/ui/gui/data-editor.glade:843 -#: src/ui/gui/psppire-data-window.c:844 src/ui/gui/psppire-data-window.c:934 +#: src/ui/gui/psppire-data-window.c:843 src/ui/gui/psppire-data-window.c:933 msgid "Insert Variable" msgstr "" @@ -5155,7 +5029,7 @@ msgstr "" msgid "Open" msgstr "" -#: src/ui/gui/data-editor.glade:712 src/ui/gui/psppire-data-window.c:582 +#: src/ui/gui/data-editor.glade:712 src/ui/gui/psppire-data-window.c:581 msgid "Save" msgstr "" @@ -5183,7 +5057,7 @@ msgstr "" msgid "Find" msgstr "" -#: src/ui/gui/data-editor.glade:831 src/ui/gui/psppire-data-window.c:898 +#: src/ui/gui/data-editor.glade:831 src/ui/gui/psppire-data-window.c:897 msgid "Insert Case" msgstr "" @@ -5298,7 +5172,7 @@ msgstr "" msgid "Missing Values" msgstr "" -#: src/ui/gui/find-dialog.c:657 +#: src/ui/gui/find-dialog.c:658 #, c-format msgid "Bad regular expression: %s" msgstr "" @@ -5344,7 +5218,7 @@ msgstr "" msgid "Standard error of the kurtosis" msgstr "" -#: src/ui/gui/frequencies.glade:98 src/ui/gui/psppire.glade:277 +#: src/ui/gui/frequencies.glade:98 src/ui/gui/psppire.glade:252 #: src/ui/gui/rank.glade:103 msgid "Variable(s):" msgstr "" @@ -5585,10 +5459,17 @@ msgstr "" msgid "Variable View" msgstr "" -#: src/ui/gui/psppire-data-store.c:746 +#: src/ui/gui/psppire-data-store.c:761 msgid "var" msgstr "" +#: src/ui/gui/psppire-data-store.c:771 src/ui/gui/psppire-var-store.c:655 +#: src/ui/gui/psppire-var-store.c:665 src/ui/gui/psppire-var-store.c:675 +#: src/ui/gui/psppire-var-store.c:786 +#, c-format +msgid "%d" +msgstr "" + #: src/ui/gui/psppire-data-window.c:213 msgid "Transformations Pending" msgstr "" @@ -5619,179 +5500,179 @@ msgstr "" msgid "Weight by %s" msgstr "" -#: src/ui/gui/psppire-data-window.c:387 src/ui/gui/psppire-data-window.c:590 +#: src/ui/gui/psppire-data-window.c:387 src/ui/gui/psppire-data-window.c:589 msgid "System Files (*.sav)" msgstr "" -#: src/ui/gui/psppire-data-window.c:393 src/ui/gui/psppire-data-window.c:596 +#: src/ui/gui/psppire-data-window.c:393 src/ui/gui/psppire-data-window.c:595 msgid "Portable Files (*.por) " msgstr "" -#: src/ui/gui/psppire-data-window.c:399 src/ui/gui/psppire-data-window.c:602 +#: src/ui/gui/psppire-data-window.c:399 src/ui/gui/psppire-data-window.c:601 #: src/ui/gui/psppire-syntax-window.c:298 #: src/ui/gui/psppire-syntax-window.c:385 msgid "All Files" msgstr "" -#: src/ui/gui/psppire-data-window.c:610 +#: src/ui/gui/psppire-data-window.c:609 msgid "System File" msgstr "" -#: src/ui/gui/psppire-data-window.c:615 +#: src/ui/gui/psppire-data-window.c:614 msgid "Portable File" msgstr "" -#: src/ui/gui/psppire-data-window.c:765 +#: src/ui/gui/psppire-data-window.c:764 msgid "Font Selection" msgstr "" -#: src/ui/gui/psppire-data-window.c:833 +#: src/ui/gui/psppire-data-window.c:832 msgid "Sort Ascending" msgstr "" -#: src/ui/gui/psppire-data-window.c:839 +#: src/ui/gui/psppire-data-window.c:838 msgid "Sort Descending" msgstr "" -#: src/ui/gui/psppire-data-window.c:847 src/ui/gui/psppire-data-window.c:901 -#: src/ui/gui/psppire-data-window.c:937 src/ui/gui/psppire-data-window.c:1302 -#: src/ui/gui/psppire-data-window.c:1320 +#: src/ui/gui/psppire-data-window.c:846 src/ui/gui/psppire-data-window.c:900 +#: src/ui/gui/psppire-data-window.c:936 src/ui/gui/psppire-data-window.c:1301 +#: src/ui/gui/psppire-data-window.c:1319 msgid "Clear" msgstr "" -#: src/ui/gui/psppire-data-window.c:1179 +#: src/ui/gui/psppire-data-window.c:1178 msgid "Open a data file" msgstr "" -#: src/ui/gui/psppire-data-window.c:1197 +#: src/ui/gui/psppire-data-window.c:1196 msgid "New data file" msgstr "" -#: src/ui/gui/psppire-data-window.c:1212 +#: src/ui/gui/psppire-data-window.c:1211 msgid "Import text data file" msgstr "" -#: src/ui/gui/psppire-data-window.c:1228 src/ui/gui/psppire-data-window.c:1245 +#: src/ui/gui/psppire-data-window.c:1227 src/ui/gui/psppire-data-window.c:1244 msgid "Save data to file" msgstr "" -#: src/ui/gui/psppire-data-window.c:1244 +#: src/ui/gui/psppire-data-window.c:1243 msgid "Save As" msgstr "" -#: src/ui/gui/psppire-data-window.c:1283 +#: src/ui/gui/psppire-data-window.c:1282 msgid "Show/hide value labels" msgstr "" -#: src/ui/gui/psppire-data-window.c:1303 +#: src/ui/gui/psppire-data-window.c:1302 msgid "Delete the cases at the selected position(s)" msgstr "" -#: src/ui/gui/psppire-data-window.c:1321 +#: src/ui/gui/psppire-data-window.c:1320 msgid "Delete the variables at the selected position(s)" msgstr "" -#: src/ui/gui/psppire-data-window.c:1339 +#: src/ui/gui/psppire-data-window.c:1338 msgid "Create a new variable at the current position" msgstr "" -#: src/ui/gui/psppire-data-window.c:1354 +#: src/ui/gui/psppire-data-window.c:1353 msgid "Create a new case at the current position" msgstr "" -#: src/ui/gui/psppire-data-window.c:1370 +#: src/ui/gui/psppire-data-window.c:1369 msgid "Jump to a Case in the Data Sheet" msgstr "" -#: src/ui/gui/psppire-data-window.c:1386 +#: src/ui/gui/psppire-data-window.c:1385 msgid "Weight cases by variable" msgstr "" -#: src/ui/gui/psppire-data-window.c:1400 +#: src/ui/gui/psppire-data-window.c:1399 msgid "Transpose the cases with the variables" msgstr "" -#: src/ui/gui/psppire-data-window.c:1414 +#: src/ui/gui/psppire-data-window.c:1413 msgid "Split the active file" msgstr "" -#: src/ui/gui/psppire-data-window.c:1429 +#: src/ui/gui/psppire-data-window.c:1428 msgid "Sort cases in the active file" msgstr "" -#: src/ui/gui/psppire-data-window.c:1443 +#: src/ui/gui/psppire-data-window.c:1442 msgid "Select cases from the active file" msgstr "" -#: src/ui/gui/psppire-data-window.c:1457 +#: src/ui/gui/psppire-data-window.c:1456 msgid "Compute new values for a variable" msgstr "" -#: src/ui/gui/psppire-data-window.c:1471 +#: src/ui/gui/psppire-data-window.c:1470 msgid "Perform one way analysis of variance" msgstr "" -#: src/ui/gui/psppire-data-window.c:1486 +#: src/ui/gui/psppire-data-window.c:1485 msgid "Calculate T Test for samples from independent groups" msgstr "" -#: src/ui/gui/psppire-data-window.c:1500 +#: src/ui/gui/psppire-data-window.c:1499 msgid "Calculate T Test for paired samples" msgstr "" -#: src/ui/gui/psppire-data-window.c:1514 +#: src/ui/gui/psppire-data-window.c:1513 msgid "Calculate T Test for sample from a single distribution" msgstr "" -#: src/ui/gui/psppire-data-window.c:1529 +#: src/ui/gui/psppire-data-window.c:1528 msgid "Commentary text for the data file" msgstr "" -#: src/ui/gui/psppire-data-window.c:1555 +#: src/ui/gui/psppire-data-window.c:1554 msgid "Rank Cases" msgstr "" -#: src/ui/gui/psppire-data-window.c:1569 +#: src/ui/gui/psppire-data-window.c:1568 msgid "Recode values into the same variables" msgstr "" -#: src/ui/gui/psppire-data-window.c:1583 +#: src/ui/gui/psppire-data-window.c:1582 msgid "Recode values into different variables" msgstr "" -#: src/ui/gui/psppire-data-window.c:1597 +#: src/ui/gui/psppire-data-window.c:1596 msgid "Jump to variable" msgstr "" -#: src/ui/gui/psppire-data-window.c:1610 +#: src/ui/gui/psppire-data-window.c:1609 msgid "Calculate descriptive statistics (mean, variance, ...)" msgstr "" -#: src/ui/gui/psppire-data-window.c:1624 +#: src/ui/gui/psppire-data-window.c:1623 msgid "Generate frequency statistics" msgstr "" -#: src/ui/gui/psppire-data-window.c:1638 +#: src/ui/gui/psppire-data-window.c:1637 msgid "Generate crosstabulations" msgstr "" -#: src/ui/gui/psppire-data-window.c:1653 +#: src/ui/gui/psppire-data-window.c:1652 msgid "Examine Data by Factors" msgstr "" -#: src/ui/gui/psppire-data-window.c:1667 +#: src/ui/gui/psppire-data-window.c:1666 msgid "Estimate parameters of the linear model" msgstr "" -#: src/ui/gui/psppire-data-window.c:1681 src/ui/gui/reliability.glade:7 +#: src/ui/gui/psppire-data-window.c:1680 src/ui/gui/reliability.glade:7 msgid "Reliability Analysis" msgstr "" -#: src/ui/gui/psppire-data-window.c:1844 +#: src/ui/gui/psppire-data-window.c:1843 msgid "Split the window vertically and horizontally" msgstr "" -#: src/ui/gui/psppire-data-window.c:1886 +#: src/ui/gui/psppire-data-window.c:1885 msgid "Data Editor" msgstr "" @@ -5811,183 +5692,178 @@ msgstr "" msgid "Prefer variable labels" msgstr "" -#: src/ui/gui/psppire.glade:10 -msgid "" -"This is beta status software. Please report bugs to bug-gnu-pspp@gnu.org" -msgstr "" - -#: src/ui/gui/psppire.glade:72 src/ui/gui/psppire.glade:155 +#: src/ui/gui/psppire.glade:47 src/ui/gui/psppire.glade:130 #: src/ui/gui/weight-cases-dialog.c:79 msgid "Do not weight cases" msgstr "" -#: src/ui/gui/psppire.glade:83 +#: src/ui/gui/psppire.glade:58 msgid "Weight cases by" msgstr "" -#: src/ui/gui/psppire.glade:108 +#: src/ui/gui/psppire.glade:83 msgid "Frequency Variable" msgstr "" -#: src/ui/gui/psppire.glade:148 +#: src/ui/gui/psppire.glade:123 msgid "Current Status: " msgstr "" -#: src/ui/gui/psppire.glade:244 +#: src/ui/gui/psppire.glade:219 msgid "Name Variable:" msgstr "" -#: src/ui/gui/psppire.glade:429 +#: src/ui/gui/psppire.glade:404 msgid "Analyze all cases. Do not create groups." msgstr "Analyse all cases. Do not create groups." -#: src/ui/gui/psppire.glade:440 +#: src/ui/gui/psppire.glade:415 msgid "Compare groups." msgstr "" -#: src/ui/gui/psppire.glade:454 +#: src/ui/gui/psppire.glade:429 msgid "Organize output by groups." msgstr "Organise output by groups." -#: src/ui/gui/psppire.glade:502 +#: src/ui/gui/psppire.glade:477 msgid "Groups based on:" msgstr "" -#: src/ui/gui/psppire.glade:565 +#: src/ui/gui/psppire.glade:540 msgid "Sort the file by grouping variables." msgstr "" -#: src/ui/gui/psppire.glade:577 +#: src/ui/gui/psppire.glade:552 msgid "File is already sorted." msgstr "" -#: src/ui/gui/psppire.glade:622 +#: src/ui/gui/psppire.glade:597 msgid "Current Status : " msgstr "" -#: src/ui/gui/psppire.glade:630 +#: src/ui/gui/psppire.glade:605 msgid "Analysis by groups is off" msgstr "" -#: src/ui/gui/psppire.glade:729 +#: src/ui/gui/psppire.glade:704 msgid "Sort by:" msgstr "" -#: src/ui/gui/psppire.glade:792 +#: src/ui/gui/psppire.glade:767 msgid "Descending" msgstr "" -#: src/ui/gui/psppire.glade:809 +#: src/ui/gui/psppire.glade:784 msgid "Sort Order" msgstr "" -#: src/ui/gui/psppire.glade:878 +#: src/ui/gui/psppire.glade:853 msgid "Target Variable:" msgstr "" -#: src/ui/gui/psppire.glade:909 +#: src/ui/gui/psppire.glade:884 msgid "Type & Label" msgstr "" -#: src/ui/gui/psppire.glade:949 +#: src/ui/gui/psppire.glade:924 msgid "=" msgstr "" -#: src/ui/gui/psppire.glade:995 +#: src/ui/gui/psppire.glade:970 msgid "Numeric Expressions:" msgstr "" -#: src/ui/gui/psppire.glade:1049 +#: src/ui/gui/psppire.glade:1024 msgid "Functions:" msgstr "" -#: src/ui/gui/psppire.glade:1112 src/ui/gui/psppire.glade:1516 +#: src/ui/gui/psppire.glade:1087 src/ui/gui/psppire.glade:1491 #: src/ui/gui/recode.glade:731 msgid "If..." msgstr "" -#: src/ui/gui/psppire.glade:1345 +#: src/ui/gui/psppire.glade:1320 msgid "Use filter variable" msgstr "" -#: src/ui/gui/psppire.glade:1398 +#: src/ui/gui/psppire.glade:1373 msgid "Based on time or case range" msgstr "" -#: src/ui/gui/psppire.glade:1411 +#: src/ui/gui/psppire.glade:1386 msgid "Range..." msgstr "" -#: src/ui/gui/psppire.glade:1450 +#: src/ui/gui/psppire.glade:1425 msgid "Random sample of cases" msgstr "" -#: src/ui/gui/psppire.glade:1464 +#: src/ui/gui/psppire.glade:1439 msgid "Sample..." msgstr "" -#: src/ui/gui/psppire.glade:1502 +#: src/ui/gui/psppire.glade:1477 msgid "If condition is satisfied" msgstr "" -#: src/ui/gui/psppire.glade:1551 +#: src/ui/gui/psppire.glade:1526 msgid "All Cases" msgstr "" -#: src/ui/gui/psppire.glade:1566 +#: src/ui/gui/psppire.glade:1541 msgid "Select" msgstr "" -#: src/ui/gui/psppire.glade:1595 +#: src/ui/gui/psppire.glade:1570 msgid "Filtered" msgstr "" -#: src/ui/gui/psppire.glade:1606 +#: src/ui/gui/psppire.glade:1581 msgid "Deleted" msgstr "" -#: src/ui/gui/psppire.glade:1624 +#: src/ui/gui/psppire.glade:1599 msgid "Unselected Cases Are" msgstr "" -#: src/ui/gui/psppire.glade:1689 +#: src/ui/gui/psppire.glade:1664 msgid "Comments:" msgstr "" -#: src/ui/gui/psppire.glade:1731 +#: src/ui/gui/psppire.glade:1706 msgid "Display comments in output" msgstr "" -#: src/ui/gui/psppire.glade:1746 +#: src/ui/gui/psppire.glade:1721 msgid "Column Number: 0" msgstr "" -#: src/ui/gui/psppire.glade:1829 +#: src/ui/gui/psppire.glade:1804 msgid "First case" msgstr "" -#: src/ui/gui/psppire.glade:1842 +#: src/ui/gui/psppire.glade:1817 msgid "Last case" msgstr "" -#: src/ui/gui/psppire.glade:1855 +#: src/ui/gui/psppire.glade:1830 msgid "Observation" msgstr "" -#: src/ui/gui/psppire.glade:1919 +#: src/ui/gui/psppire.glade:1894 msgid "Use expression as label" msgstr "" -#: src/ui/gui/psppire.glade:2045 src/ui/gui/psppire-var-sheet.c:540 -#: src/ui/gui/psppire-var-store.c:786 +#: src/ui/gui/psppire.glade:2020 src/ui/gui/psppire-var-sheet.c:529 +#: src/ui/gui/psppire-var-store.c:795 msgid "Width" msgstr "" -#: src/ui/gui/psppire.glade:2175 +#: src/ui/gui/psppire.glade:2150 msgid "Goto Case Number:" msgstr "" -#: src/ui/gui/psppire.glade:2312 +#: src/ui/gui/psppire.glade:2287 msgid "Sample Size" msgstr "" @@ -6022,47 +5898,47 @@ msgstr "" msgid "Cannot load syntax file '%s'" msgstr "" -#: src/ui/gui/psppire-var-sheet.c:538 src/ui/gui/psppire-var-store.c:784 +#: src/ui/gui/psppire-var-sheet.c:527 src/ui/gui/psppire-var-store.c:793 msgid "Name" msgstr "" -#: src/ui/gui/psppire-var-sheet.c:541 src/ui/gui/psppire-var-store.c:787 +#: src/ui/gui/psppire-var-sheet.c:530 src/ui/gui/psppire-var-store.c:796 msgid "Decimals" msgstr "" -#: src/ui/gui/psppire-var-sheet.c:543 src/ui/gui/psppire-var-store.c:789 +#: src/ui/gui/psppire-var-sheet.c:532 src/ui/gui/psppire-var-store.c:798 msgid "Values" msgstr "" -#: src/ui/gui/psppire-var-sheet.c:546 src/ui/gui/psppire-var-store.c:792 +#: src/ui/gui/psppire-var-sheet.c:535 src/ui/gui/psppire-var-store.c:801 msgid "Align" msgstr "" -#: src/ui/gui/psppire-var-sheet.c:547 src/ui/gui/psppire-var-store.c:793 +#: src/ui/gui/psppire-var-sheet.c:536 src/ui/gui/psppire-var-store.c:802 msgid "Measure" msgstr "" -#: src/ui/gui/psppire-var-store.c:569 src/ui/gui/var-sheet-dialogs.glade:43 +#: src/ui/gui/psppire-var-store.c:578 src/ui/gui/var-sheet-dialogs.glade:43 msgid "Comma" msgstr "" -#: src/ui/gui/psppire-var-store.c:570 src/ui/gui/var-sheet-dialogs.glade:59 +#: src/ui/gui/psppire-var-store.c:579 src/ui/gui/var-sheet-dialogs.glade:59 msgid "Dot" msgstr "" -#: src/ui/gui/psppire-var-store.c:571 +#: src/ui/gui/psppire-var-store.c:580 msgid "Scientific" msgstr "" -#: src/ui/gui/psppire-var-store.c:572 src/ui/gui/var-sheet-dialogs.glade:91 +#: src/ui/gui/psppire-var-store.c:581 src/ui/gui/var-sheet-dialogs.glade:91 msgid "Date" msgstr "" -#: src/ui/gui/psppire-var-store.c:573 src/ui/gui/var-sheet-dialogs.glade:107 +#: src/ui/gui/psppire-var-store.c:582 src/ui/gui/var-sheet-dialogs.glade:107 msgid "Dollar" msgstr "" -#: src/ui/gui/psppire-var-store.c:574 +#: src/ui/gui/psppire-var-store.c:583 msgid "Custom" msgstr "" @@ -6652,11 +6528,11 @@ msgstr "" msgid "Measurement Level: %s\n" msgstr "" -#: src/ui/gui/variable-info-dialog.c:124 +#: src/ui/gui/variable-info-dialog.c:125 msgid "Value Labels:\n" msgstr "" -#: src/ui/gui/variable-info-dialog.c:137 +#: src/ui/gui/variable-info-dialog.c:138 #, c-format msgid "%s %s\n" msgstr "" diff --git a/po/nl.po b/po/nl.po index 1c3163be..db3c9d3e 100644 --- a/po/nl.po +++ b/po/nl.po @@ -33,7 +33,7 @@ msgid "" msgstr "" "Project-Id-Version: nl\n" "Report-Msgid-Bugs-To: pspp-dev@gnu.org\n" -"POT-Creation-Date: 2009-05-16 07:00+0800\n" +"POT-Creation-Date: 2009-07-17 15:23+0800\n" "PO-Revision-Date: 2009-05-15 18:24+0200\n" "Last-Translator: \n" "Language-Team: Dutch\n" @@ -80,81 +80,56 @@ msgstr "" "Ten minste een case in de gelezen data heeft een gewicht waarde 'user-" "missing, system-missing, zero, of negatief. Deze case(s) zijn genegeerd." -#: src/data/case-tmpfile.c:57 -#, c-format -msgid "failed to create temporary file" -msgstr "aanmaken van een tijdelijk bestand is mislukt" - -#: src/data/case-tmpfile.c:131 -#, c-format -msgid "seeking in temporary file" -msgstr "zoeken in tijdelijk bestand" - -#: src/data/case-tmpfile.c:153 -#, c-format -msgid "reading temporary file" -msgstr "lezen tijdelijk bestand" - -#: src/data/case-tmpfile.c:155 -#, c-format -msgid "unexpected end of file reading temporary file" -msgstr "onverwacht einde bestand bij het lezen van tijdelijk bestand" - -#: src/data/case-tmpfile.c:175 -#, c-format -msgid "writing to temporary file" -msgstr "schrijven naar tijdelijk bestand" - -#: src/data/data-in.c:262 src/data/data-in.c:452 +#: src/data/data-in.c:263 src/data/data-in.c:453 msgid "Field contents are not numeric." msgstr "Veld inhoud is niet numeriek." -#: src/data/data-in.c:264 src/data/data-in.c:454 +#: src/data/data-in.c:265 src/data/data-in.c:455 msgid "Number followed by garbage." msgstr "Nummer gevolgd door rommel." -#: src/data/data-in.c:275 +#: src/data/data-in.c:276 msgid "Invalid numeric syntax." msgstr "Ongeldige numerieke syntax." -#: src/data/data-in.c:284 src/data/data-in.c:467 +#: src/data/data-in.c:285 src/data/data-in.c:468 msgid "Too-large number set to system-missing." msgstr "Te groot getal, is op system-missing gezet." -#: src/data/data-in.c:289 src/data/data-in.c:472 +#: src/data/data-in.c:290 src/data/data-in.c:473 msgid "Too-small number set to zero." msgstr "Te klein getal, is op nul gezet." -#: src/data/data-in.c:315 +#: src/data/data-in.c:316 msgid "All characters in field must be digits." msgstr "Alle karakters in veld moeten cijfers zijn." -#: src/data/data-in.c:338 +#: src/data/data-in.c:339 msgid "Unrecognized character in field." msgstr "Onherkenbaar karakter in veld." -#: src/data/data-in.c:362 src/data/data-in.c:636 +#: src/data/data-in.c:363 src/data/data-in.c:638 msgid "Field must have even length." msgstr "Veld moet een even lengte hebben." -#: src/data/data-in.c:367 src/data/data-in.c:647 +#: src/data/data-in.c:368 src/data/data-in.c:649 msgid "Field must contain only hex digits." msgstr "Veld mag alleen hex cijfers bevatten." -#: src/data/data-in.c:686 src/data/data-in.c:733 +#: src/data/data-in.c:688 src/data/data-in.c:735 msgid "Syntax error in date field." msgstr "Syntax fout in datum veld." -#: src/data/data-in.c:702 +#: src/data/data-in.c:704 #, c-format msgid "Day (%ld) must be between 1 and 31." msgstr "Dag (%ld) moet tussen 1 en 31 zijn." -#: src/data/data-in.c:749 +#: src/data/data-in.c:751 msgid "Delimiter expected between fields in date." msgstr "Veldscheider verwacht tussen velden in datum." -#: src/data/data-in.c:823 +#: src/data/data-in.c:825 msgid "" "Unrecognized month format. Months may be specified as Arabic or Roman " "numerals or as at least 3 letters of their English names." @@ -163,45 +138,45 @@ msgstr "" "of Romeins numeriek of als tenminste de eerste 3 letters van hun Engelse " "naam." -#: src/data/data-in.c:850 +#: src/data/data-in.c:852 #, c-format msgid "Year (%ld) must be between 1582 and 19999." msgstr "Jaar (%ld) moet tussen 1582 en 19999 zijn." -#: src/data/data-in.c:862 +#: src/data/data-in.c:864 #, c-format msgid "Trailing garbage \"%.*s\" following date." msgstr "Afsluitende rommel \"%.*s\" achter datum." -#: src/data/data-in.c:878 +#: src/data/data-in.c:880 msgid "Julian day must have exactly three digits." msgstr "Juliaanse datum moet bestaan uit precies 3 cijfers." -#: src/data/data-in.c:883 +#: src/data/data-in.c:885 #, c-format msgid "Julian day (%ld) must be between 1 and 366." msgstr "Juliaanse dag (%ld) moet tussen 1 en 366 zijn." -#: src/data/data-in.c:907 +#: src/data/data-in.c:909 #, c-format msgid "Quarter (%ld) must be between 1 and 4." msgstr "Kwartaal (%ld) moet tussen 1 en 4 zijn." -#: src/data/data-in.c:927 +#: src/data/data-in.c:929 #, c-format msgid "Week (%ld) must be between 1 and 53." msgstr "Week (%ld) moet tussen 1 en 53 zijn." -#: src/data/data-in.c:940 +#: src/data/data-in.c:942 msgid "Delimiter expected between fields in time." msgstr "Veldscheider verwacht tussen velden in tijd." -#: src/data/data-in.c:960 +#: src/data/data-in.c:962 #, c-format msgid "Minute (%ld) must be between 0 and 59." msgstr "Minuut (%ld) moet tussen 0 en 59 zijn." -#: src/data/data-in.c:1000 +#: src/data/data-in.c:1002 msgid "" "Unrecognized weekday name. At least the first two letters of an English " "weekday name must be specified." @@ -209,32 +184,32 @@ msgstr "" "Niet herkende weekdag naam. Tenminste de eerste 2 letters van een Engelse " "weekdag naam moeten opgegeven worden." -#: src/data/data-in.c:1138 +#: src/data/data-in.c:1140 #, c-format msgid "`%c' expected in date field." msgstr "`%c' verwacht in datum veld." -#: src/data/data-in.c:1179 +#: src/data/data-in.c:1181 #, c-format msgid "column %d" msgstr "kolom %d" -#: src/data/data-in.c:1181 +#: src/data/data-in.c:1183 #, c-format msgid "columns %d-%d" msgstr "kolommen %d-%d" -#: src/data/data-in.c:1185 +#: src/data/data-in.c:1187 #, c-format msgid "%s field) " msgstr "%s veld) " -#: src/data/data-out.c:446 +#: src/data/data-out.c:449 #, c-format msgid "Weekday number %f is not between 1 and 7." msgstr "Weekdag nummer %f is niet tussen 1 en 7." -#: src/data/data-out.c:467 +#: src/data/data-out.c:470 #, c-format msgid "Month number %f is not between 1 and 12." msgstr "Maand nummer %f is niet tussen 1 en 12." @@ -251,7 +226,7 @@ msgstr "systeem" msgid "scratch" msgstr "" -#: src/data/dictionary.c:926 +#: src/data/dictionary.c:940 msgid "" "At least one case in the data file had a weight value that was user-missing, " "system-missing, zero, or negative. These case(s) were ignored." @@ -259,7 +234,7 @@ msgstr "" "Op zijn minst een case in het data bestand heeft een gewicht waarde user-" "missing, system-missing, nul, of negatief. Deze case(s) zijn genegeerd." -#: src/data/dictionary.c:1228 +#: src/data/dictionary.c:1263 #, c-format msgid "Truncating document line to %d bytes." msgstr "Document regel afgekapt tot %d bytes." @@ -369,33 +344,33 @@ msgstr[1] "" msgid "%s variables are not compatible with %s format %s." msgstr "%s variabelen zijn niet compatibel met %s formaat %s." -#: src/data/format.c:327 src/data/sys-file-reader.c:657 -#: src/ui/gui/psppire.glade:2034 src/ui/gui/psppire-var-store.c:575 +#: src/data/format.c:327 src/data/sys-file-reader.c:663 +#: src/ui/gui/psppire.glade:2009 src/ui/gui/psppire-var-store.c:584 #: src/ui/gui/var-sheet-dialogs.glade:139 msgid "String" msgstr "" -#: src/data/format.c:327 src/data/sys-file-reader.c:657 -#: src/ui/gui/psppire.glade:2109 src/ui/gui/psppire-var-store.c:568 +#: src/data/format.c:327 src/data/sys-file-reader.c:663 +#: src/ui/gui/psppire.glade:2084 src/ui/gui/psppire-var-store.c:577 #: src/ui/gui/var-sheet-dialogs.glade:28 msgid "Numeric" msgstr "Numeriek" -#: src/data/format.c:328 src/data/sys-file-reader.c:1214 -#: src/data/sys-file-reader.c:1216 +#: src/data/format.c:328 src/data/sys-file-reader.c:1228 +#: src/data/sys-file-reader.c:1230 #: src/language/dictionary/apply-dictionary.c:78 #: src/language/dictionary/apply-dictionary.c:79 -#: src/language/xforms/recode.c:489 src/language/xforms/recode.c:490 -#: src/language/xforms/recode.c:502 src/language/xforms/recode.c:503 +#: src/language/xforms/recode.c:490 src/language/xforms/recode.c:491 +#: src/language/xforms/recode.c:503 src/language/xforms/recode.c:504 msgid "numeric" msgstr "numeriek" -#: src/data/format.c:328 src/data/sys-file-reader.c:1214 -#: src/data/sys-file-reader.c:1216 +#: src/data/format.c:328 src/data/sys-file-reader.c:1228 +#: src/data/sys-file-reader.c:1230 #: src/language/dictionary/apply-dictionary.c:78 #: src/language/dictionary/apply-dictionary.c:79 -#: src/language/xforms/recode.c:489 src/language/xforms/recode.c:490 -#: src/language/xforms/recode.c:502 src/language/xforms/recode.c:503 +#: src/language/xforms/recode.c:490 src/language/xforms/recode.c:491 +#: src/language/xforms/recode.c:503 src/language/xforms/recode.c:504 msgid "string" msgstr "" @@ -404,30 +379,30 @@ msgstr "" msgid "String variable with width %d is not compatible with format %s." msgstr "String variabele met breedte %d is niet compatibel met formaat %s." -#: src/data/gnumeric-reader.c:33 +#: src/data/gnumeric-reader.c:36 msgid "" "Support for Gnumeric files was not compiled into this installation of PSPP" msgstr "" "Ondersteuning voor Gnumeric bestanden is niet gecompileerd in deze " "installatie van PSPP" -#: src/data/gnumeric-reader.c:362 -#, c-format -msgid "Error opening \"%s\" for reading as a gnumeric file: %s." +#: src/data/gnumeric-reader.c:368 +#, fuzzy, c-format +msgid "Error opening \"%s\" for reading as a Gnumeric file: %s." msgstr "" "Fout bij het openen van \"%s\" voor het lezen als een gnumeric bestand: %s." -#: src/data/gnumeric-reader.c:382 +#: src/data/gnumeric-reader.c:388 #, c-format msgid "Invalid cell range \"%s\"" msgstr "Ongeldige cel range \"%s\"" -#: src/data/gnumeric-reader.c:518 src/data/psql-reader.c:182 +#: src/data/gnumeric-reader.c:520 src/data/psql-reader.c:187 #, c-format msgid "Cannot create variable name from %s" msgstr "Kan geen variabele naam creëren van %s" -#: src/data/gnumeric-reader.c:530 +#: src/data/gnumeric-reader.c:532 #, c-format msgid "Selected sheet or range of spreadsheet \"%s\" is empty." msgstr "Geselecteerd blad of range van werkblad \"%s\" is leeg." @@ -499,11 +474,11 @@ msgstr "onverwacht einde bestand" #. TRANSLATORS: this fragment will be interpolated into #. messages in fh_lock() that identify types of files. -#: src/data/por-file-reader.c:268 src/data/por-file-writer.c:148 +#: src/data/por-file-reader.c:267 src/data/por-file-writer.c:149 msgid "portable file" msgstr "overdraagbaar (portable) bestand" -#: src/data/por-file-reader.c:276 +#: src/data/por-file-reader.c:275 #, c-format msgid "" "An error occurred while opening \"%s\" for reading as a portable file: %s." @@ -511,48 +486,48 @@ msgstr "" "Er is een fout opgetreden tijdens het openen van \"%s\" voor het lezen als " "overdraagbaar (portable) bestand: %s." -#: src/data/por-file-reader.c:297 +#: src/data/por-file-reader.c:296 msgid "Data record expected." msgstr "Data record verwacht." -#: src/data/por-file-reader.c:379 +#: src/data/por-file-reader.c:378 msgid "Number expected." msgstr "Nummer verwacht." -#: src/data/por-file-reader.c:407 +#: src/data/por-file-reader.c:406 msgid "Missing numeric terminator." msgstr "Ontbrekende numerieke afsluiter." -#: src/data/por-file-reader.c:430 +#: src/data/por-file-reader.c:429 msgid "Invalid integer." msgstr "Ongeldige integer." -#: src/data/por-file-reader.c:441 +#: src/data/por-file-reader.c:440 #, c-format msgid "Bad string length %d." msgstr "Foutieve string lengte %d." -#: src/data/por-file-reader.c:502 +#: src/data/por-file-reader.c:501 #, c-format msgid "%s: Not a portable file." msgstr "%s: Geen overdraagbaar (portable) bestand." -#: src/data/por-file-reader.c:519 +#: src/data/por-file-reader.c:518 #, c-format msgid "Unrecognized version code `%c'." msgstr "Niet herkende versie code `%c'." -#: src/data/por-file-reader.c:528 +#: src/data/por-file-reader.c:527 #, c-format msgid "Bad date string length %zu." msgstr "Foutieve datum string lengte %zu." -#: src/data/por-file-reader.c:530 +#: src/data/por-file-reader.c:529 #, c-format msgid "Bad time string length %zu." msgstr "Foutieve tijd string lengte %zu." -#: src/data/por-file-reader.c:572 +#: src/data/por-file-reader.c:571 #, c-format msgid "" "%s: Bad format specifier byte (%d). Variable will be assigned a default " @@ -561,61 +536,61 @@ msgstr "" "%s: Foutief formaat specificatie byte (%d). Variabele krijgt een default " "formaat." -#: src/data/por-file-reader.c:593 +#: src/data/por-file-reader.c:592 #, c-format msgid "Numeric variable %s has invalid format specifier %s." msgstr "Numerieke variabele %s heeft een ongeldige formaat specificatie %s." -#: src/data/por-file-reader.c:597 +#: src/data/por-file-reader.c:596 #, c-format msgid "String variable %s with width %d has invalid format specifier %s." msgstr "" "String variabele %s met breedte %d heeft ongeldige formaat specificatie %s." -#: src/data/por-file-reader.c:621 +#: src/data/por-file-reader.c:620 msgid "Expected variable count record." msgstr "Variabele teller record verwacht." -#: src/data/por-file-reader.c:625 +#: src/data/por-file-reader.c:624 #, c-format msgid "Invalid number of variables %d." msgstr "Ongeldig aantal variabelen %d." -#: src/data/por-file-reader.c:635 +#: src/data/por-file-reader.c:633 #, c-format msgid "Weight variable name (%s) truncated." msgstr "Weging variabele naam (%s) afgekapt." -#: src/data/por-file-reader.c:650 +#: src/data/por-file-reader.c:648 msgid "Expected variable record." msgstr "Variabel record verwacht." -#: src/data/por-file-reader.c:654 +#: src/data/por-file-reader.c:652 #, c-format msgid "Invalid variable width %d." msgstr "Ongeldige variabele breedte %d." -#: src/data/por-file-reader.c:662 +#: src/data/por-file-reader.c:659 #, c-format msgid "Invalid variable name `%s' in position %d." msgstr "Ongeldige variabele naam '%s' in positie %d." -#: src/data/por-file-reader.c:666 +#: src/data/por-file-reader.c:663 src/data/sys-file-reader.c:521 #, c-format msgid "Bad width %d for variable %s." msgstr "Foutieve breedte %d voor variabele %s." -#: src/data/por-file-reader.c:681 +#: src/data/por-file-reader.c:678 #, c-format msgid "Duplicate variable name %s in position %d." msgstr "Dubbele variabele naam %s in positie %d." -#: src/data/por-file-reader.c:682 +#: src/data/por-file-reader.c:679 #, c-format msgid "Duplicate variable name %s in position %d renamed to %s." msgstr "Dubbele variabele naam %s in positie %d hernoemd naar %s." -#: src/data/por-file-reader.c:725 +#: src/data/por-file-reader.c:728 #, c-format msgid "Weighting variable %s not present in dictionary." msgstr "Weging variabele %s niet aanwezig in woordenboek." @@ -633,26 +608,26 @@ msgstr "" "Kan geen waarde labels toekennen aan %s en %s, die verschillende variabele " "types hebben." -#: src/data/por-file-writer.c:140 +#: src/data/por-file-writer.c:141 #, c-format msgid "Invalid decimal digits count %d. Treating as %d." msgstr "Ongeldige decimaal cijfers teller %d. Behandeld als %d." -#: src/data/por-file-writer.c:160 +#: src/data/por-file-writer.c:161 #, c-format msgid "Error opening \"%s\" for writing as a portable file: %s." msgstr "" "Fout tijdens openen \"%s\" voor het schrijven als een overdraagbaar " "(portable) bestand: %s." -#: src/data/por-file-writer.c:500 +#: src/data/por-file-writer.c:506 #, c-format msgid "An I/O error occurred writing portable file \"%s\"." msgstr "" "Een I/O fout opgetreden tijdens het schrijven van overdraagbaar (portable) " "bestand \"%s\"." -#: src/data/psql-reader.c:42 +#: src/data/psql-reader.c:46 msgid "" "Support for reading postgres databases was not compiled into this " "installation of PSPP" @@ -660,16 +635,16 @@ msgstr "" "Ondersteuning voor het lezen van postgres databases was niet gecompileerd in " "deze installatie van PSPP" -#: src/data/psql-reader.c:237 +#: src/data/psql-reader.c:242 msgid "Memory error whilst opening psql source" msgstr "Geheugen fout tijdens het openen van psql source" -#: src/data/psql-reader.c:243 +#: src/data/psql-reader.c:248 #, c-format msgid "Error opening psql source: %s." msgstr "Fout tijdens openen psql source: %s." -#: src/data/psql-reader.c:258 +#: src/data/psql-reader.c:263 #, c-format msgid "" "Postgres server is version %s. Reading from versions earlier than 8.0 is not " @@ -678,7 +653,7 @@ msgstr "" "Postgres server is versie %s. Lezen van versies ouder dan 8.0 wordt niet " "ondersteund." -#: src/data/psql-reader.c:278 +#: src/data/psql-reader.c:283 msgid "" "Connection is unencrypted, but unencrypted connections have not been " "permitted." @@ -686,13 +661,13 @@ msgstr "" "Connectie is niet geëncrypt, maar niet geëncrypte connecties zijn niet " "toegestaan." -#: src/data/psql-reader.c:317 src/data/psql-reader.c:342 -#: src/data/psql-reader.c:352 +#: src/data/psql-reader.c:322 src/data/psql-reader.c:347 +#: src/data/psql-reader.c:357 #, c-format msgid "Error from psql source: %s." msgstr "Fout van psql source: %s." -#: src/data/psql-reader.c:447 +#: src/data/psql-reader.c:452 #, c-format msgid "Unsupported OID %d. SYSMIS values will be inserted." msgstr "Niet ondersteunde OID %d. SYSMIS waarde wordt ingevoegd." @@ -706,11 +681,11 @@ msgstr "" #. TRANSLATORS: this fragment will be interpolated into #. messages in fh_lock() that identify types of files. -#: src/data/scratch-writer.c:67 src/language/data-io/file-handle.q:181 +#: src/data/scratch-writer.c:66 src/language/data-io/file-handle.q:181 msgid "scratch file" msgstr "scratch bestand" -#: src/data/settings.c:685 +#: src/data/settings.c:686 #, c-format msgid "" "%s: Custom currency string `%s' does not contain exactly three periods or " @@ -725,141 +700,119 @@ msgstr "Variabele achtervoegsel te lang." #. TRANSLATORS: this fragment will be interpolated into #. messages in fh_lock() that identify types of files. -#: src/data/sys-file-reader.c:216 src/data/sys-file-writer.c:200 +#: src/data/sys-file-reader.c:219 src/data/sys-file-writer.c:202 msgid "system file" msgstr "systeem bestand" -#: src/data/sys-file-reader.c:223 +#: src/data/sys-file-reader.c:226 #, c-format msgid "Error opening \"%s\" for reading as a system file: %s." msgstr "" "Fout bij het openen van \"%s\" voor het lezen als een systeem file: %s." -#: src/data/sys-file-reader.c:262 +#: src/data/sys-file-reader.c:265 msgid "Misplaced type 4 record." msgstr "Verkeerd geplaatst type 4 record. " -#: src/data/sys-file-reader.c:273 +#: src/data/sys-file-reader.c:276 #, c-format msgid "Unrecognized record type %d." msgstr "Niet herkend record type %d." -#: src/data/sys-file-reader.c:312 +#: src/data/sys-file-reader.c:315 #, c-format msgid "File header claims %d variable positions but %d were read from file." msgstr "" "Bestand kop claimt %d variabele posities maar er zijn er %d gelezen van het " "bestand." -#: src/data/sys-file-reader.c:352 +#: src/data/sys-file-reader.c:355 #, c-format msgid "Error closing system file \"%s\": %s." msgstr "Fout bij het sluiten van system file \"%s\": %s." -#: src/data/sys-file-reader.c:417 src/data/sys-file-reader.c:427 +#: src/data/sys-file-reader.c:420 src/data/sys-file-reader.c:430 msgid "This is not an SPSS system file." msgstr "Dit is geen SPSS systeem bestand." -#: src/data/sys-file-reader.c:446 +#: src/data/sys-file-reader.c:449 msgid "" "Compression bias is not the usual value of 100, or system file uses " "unrecognized floating-point format." msgstr "" -#: src/data/sys-file-reader.c:514 +#: src/data/sys-file-reader.c:517 #, c-format msgid "Invalid variable name `%s'." msgstr "Ongeldige variabele naam '%s'." -#: src/data/sys-file-reader.c:518 -#, c-format -msgid "Bad variable width %d." -msgstr "Foutieve variabele breedte %d." - -#: src/data/sys-file-reader.c:522 +#: src/data/sys-file-reader.c:525 #, c-format msgid "Duplicate variable name `%s' within system file." msgstr "Dubbele variabele naam '%s' binnen system file." -#: src/data/sys-file-reader.c:530 +#: src/data/sys-file-reader.c:533 msgid "Variable label indicator field is not 0 or 1." msgstr "Variabel label indicator veld is niet 0 of 1." -#: src/data/sys-file-reader.c:538 +#: src/data/sys-file-reader.c:541 #, c-format msgid "Variable %s has label of invalid length %zu." msgstr "Variabele %s heeft label van ongeldige lengte %zu." -#: src/data/sys-file-reader.c:557 +#: src/data/sys-file-reader.c:560 msgid "Numeric missing value indicator field is not -3, -2, 0, 1, 2, or 3." msgstr "" "Numeriek ontbrekende waarde indicator veld is niet -3, -2, 0, 1, 2, of 3." -#: src/data/sys-file-reader.c:572 +#: src/data/sys-file-reader.c:578 msgid "String missing value indicator field is not 0, 1, 2, or 3." msgstr "String missing waarde indicator veld is niet 0, 1, 2, of 3." -#: src/data/sys-file-reader.c:575 -#, c-format -msgid "" -"Ignoring missing values on long string variable %s, which PSPP does not yet " -"support." -msgstr "" -"Negeren van missing values voor lange string variabele %s, wat PSPP nog niet " -"ondersteunt." - -#: src/data/sys-file-reader.c:604 +#: src/data/sys-file-reader.c:610 msgid "Missing string continuation record." msgstr "Mis string continuering record." -#: src/data/sys-file-reader.c:638 +#: src/data/sys-file-reader.c:644 #, c-format msgid "Unknown variable format %." msgstr "Onbekend variabele formaat %." -#: src/data/sys-file-reader.c:656 +#: src/data/sys-file-reader.c:662 #, c-format msgid "%s variable %s has invalid %s format %s." msgstr "%s variabele %s heeft ongeldig %s formaat %s." -#: src/data/sys-file-reader.c:659 +#: src/data/sys-file-reader.c:665 msgid "print" msgstr "afdrukken" -#: src/data/sys-file-reader.c:659 +#: src/data/sys-file-reader.c:665 msgid "write" msgstr "schrijf" -#: src/data/sys-file-reader.c:663 +#: src/data/sys-file-reader.c:669 msgid "Suppressing further invalid format warnings." msgstr "Onderdrukt verdere ongeldige formaat waarschuwingen." -#: src/data/sys-file-reader.c:681 +#: src/data/sys-file-reader.c:687 msgid "Weighting variable must be numeric." msgstr "Weging variabele moet numeriek zijn." -#: src/data/sys-file-reader.c:695 +#: src/data/sys-file-reader.c:701 msgid "Multiple type 6 (document) records." msgstr "Meerdere type 6 (document) records." -#: src/data/sys-file-reader.c:699 +#: src/data/sys-file-reader.c:705 #, c-format msgid "Number of document lines (%d) must be greater than 0." msgstr "Aantal document regels (%d) moet groter dan 0 zijn." -#: src/data/sys-file-reader.c:707 +#: src/data/sys-file-reader.c:713 msgid "Document line contains null byte." msgstr "Document regel bevat null byte." -#: src/data/sys-file-reader.c:793 -msgid "" -"Ignoring value labels for long string variables, which PSPP does not yet " -"support." -msgstr "" -"Negeer waarde labels voor lange string variabelen, die door PSPP nog niet " -"ondersteund worden." - -#: src/data/sys-file-reader.c:798 +#: src/data/sys-file-reader.c:803 #, c-format msgid "" "Unrecognized record type 7, subtype %d. Please send a copy of this file, " @@ -868,13 +821,13 @@ msgstr "" "Niet herkend type 7, subtype %d. Stuur s.v.p. een kopie van dit bestand en " "de syntax waarmee het is aangemaakt naar %s " -#: src/data/sys-file-reader.c:825 +#: src/data/sys-file-reader.c:830 #, c-format msgid "Bad size (%zu) or count (%zu) field on record type 7, subtype 3." msgstr "" "Foutieve lengte (%zu) of aantal (%zu) veld in record type 7, subtype 3." -#: src/data/sys-file-reader.c:845 +#: src/data/sys-file-reader.c:850 #, c-format msgid "" "Floating-point representation indicated by system file (%d) differs from " @@ -883,15 +836,15 @@ msgstr "" "Drijvende komma representatie aangegeven door systeem bestand %d verschilt " "van verwachting (%d)." -#: src/data/sys-file-reader.c:858 +#: src/data/sys-file-reader.c:863 msgid "little-endian" msgstr "" -#: src/data/sys-file-reader.c:858 +#: src/data/sys-file-reader.c:863 msgid "big-endian" msgstr "" -#: src/data/sys-file-reader.c:859 +#: src/data/sys-file-reader.c:864 #, c-format msgid "" "Integer format indicated by system file (%s) differs from expected (%s)." @@ -899,37 +852,28 @@ msgstr "" "Integer formaat aangegeven door systeem bestand (%s) verschilt van verwacht " "(%s). " -#: src/data/sys-file-reader.c:916 +#: src/data/sys-file-reader.c:921 #, c-format msgid "Bad size (%zu) or count (%zu) on extension 4." msgstr "Foutieve lengte (%zu) of aantal (%zu) bij extensie 4." -#: src/data/sys-file-reader.c:920 -#, c-format -msgid "File specifies unexpected value %g as SYSMIS." +#: src/data/sys-file-reader.c:925 src/data/sys-file-reader.c:929 +#: src/data/sys-file-reader.c:933 +#, fuzzy, c-format +msgid "File specifies unexpected value %g as %s." msgstr "Bestand specificeert onverwachte waarde %g als SYSMIS." -#: src/data/sys-file-reader.c:922 -#, c-format -msgid "File specifies unexpected value %g as HIGHEST." -msgstr "Bestand specificeert onverwachte waarde %g als HIGHEST." - -#: src/data/sys-file-reader.c:924 -#, c-format -msgid "File specifies unexpected value %g as LOWEST." -msgstr "Bestand specificeert onverwachte waarde %g als LOWEST." - -#: src/data/sys-file-reader.c:940 +#: src/data/sys-file-reader.c:950 #, c-format msgid "Bad size %zu on extension 11." msgstr "Foutieve lengte %zu voor extensie 11." -#: src/data/sys-file-reader.c:952 +#: src/data/sys-file-reader.c:962 #, c-format msgid "Extension 11 has bad count %zu (for %zu variables)." msgstr "Extensie 11 heeft een foutief aantal %zu (voor %zu variabelen)." -#: src/data/sys-file-reader.c:973 +#: src/data/sys-file-reader.c:983 #, c-format msgid "" "Invalid variable display parameters for variable %zu (%s). Default " @@ -938,22 +882,22 @@ msgstr "" "Ongeldige variabele toon parameters voor variabele %zu (%s). Default " "parameters ingevuld." -#: src/data/sys-file-reader.c:1017 +#: src/data/sys-file-reader.c:1027 #, c-format msgid "Long variable mapping from %s to invalid variable name `%s'." msgstr "Lange variabele afbeelding van %s tot ongeldige naam '%s'. " -#: src/data/sys-file-reader.c:1027 +#: src/data/sys-file-reader.c:1037 #, c-format msgid "Duplicate long variable name `%s' within system file." msgstr "Dubbele lange variabele naam `%s' binnen systeem bestand." -#: src/data/sys-file-reader.c:1080 +#: src/data/sys-file-reader.c:1090 #, c-format msgid "%s listed as string of invalid length %s in very length string record." msgstr "" -#: src/data/sys-file-reader.c:1090 +#: src/data/sys-file-reader.c:1100 #, c-format msgid "" "%s listed in very long string record with width %s, which requires only one " @@ -962,12 +906,12 @@ msgstr "" "%s vermeld in erg lang string record met breedte %s, dat slechts een segment " "vereist." -#: src/data/sys-file-reader.c:1096 +#: src/data/sys-file-reader.c:1106 #, c-format msgid "Very long string %s overflows dictionary." msgstr "Erg lange string %s is te groot voor woordenboek." -#: src/data/sys-file-reader.c:1110 +#: src/data/sys-file-reader.c:1120 #, c-format msgid "" "Very long string with width %ld has segment %d of width %d (expected %d)" @@ -975,12 +919,12 @@ msgstr "" "Erg lange string met breedte %ld heeft segment %d van breedte %d (verwacht %" "d)" -#: src/data/sys-file-reader.c:1155 +#: src/data/sys-file-reader.c:1166 #, c-format msgid "Invalid number of labels: %d. Ignoring labels." msgstr "Ongeldig aantal labels: %d. Labels worden genegeerd." -#: src/data/sys-file-reader.c:1186 +#: src/data/sys-file-reader.c:1197 msgid "" "Variable index record (type 4) does not immediately follow value label " "record (type 3) as it should." @@ -988,7 +932,7 @@ msgstr "" "Variabele index record (type 4) volgt niet onmiddellijk waarde label record " "(type 3) zoals het moet." -#: src/data/sys-file-reader.c:1193 +#: src/data/sys-file-reader.c:1204 #, c-format msgid "" "Number of variables associated with a value label (%d) is not between 1 and " @@ -997,12 +941,14 @@ msgstr "" "Aantal variabelen geassocieerd aan waarde label (%d) is niet tussen 1 en het " "aantal variabelen (%zu)." -#: src/data/sys-file-reader.c:1203 -#, c-format -msgid "Value labels are not allowed on long string variables (%s)." +#: src/data/sys-file-reader.c:1215 +#, fuzzy, c-format +msgid "" +"Value labels may not be added to long string variables (e.g. %s) using " +"records types 3 and 4." msgstr "Waarde labels zijn niet toegestaan bij lange string variabelen (%s)." -#: src/data/sys-file-reader.c:1210 +#: src/data/sys-file-reader.c:1224 #, c-format msgid "" "Variables associated with value label are not all of identical type. " @@ -1011,87 +957,120 @@ msgstr "" "Variabelen geassocieerd met waarde label zijn niet allemaal van het " "identieke type. Variabele %s is %s, maar variabele %s is %s." -#: src/data/sys-file-reader.c:1243 +#: src/data/sys-file-reader.c:1258 #, c-format msgid "Duplicate value label for %g on %s." msgstr "Dubbel waarde label voor %g op %s." -#: src/data/sys-file-reader.c:1246 +#: src/data/sys-file-reader.c:1261 src/data/sys-file-reader.c:1442 #, c-format msgid "Duplicate value label for \"%.*s\" on %s." msgstr "Dubbel waarde label voor \"%.*s\" on %s." -#: src/data/sys-file-reader.c:1284 +#: src/data/sys-file-reader.c:1299 #, c-format msgid "Error parsing attribute value %s[%d]" msgstr "Fout bij het ontleden van attribuut waarde %s[%d]" -#: src/data/sys-file-reader.c:1298 +#: src/data/sys-file-reader.c:1313 #, c-format msgid "Attribute value %s[%d] is not quoted: %s" msgstr "Attribuut waarde %s[%d] is niet geciteerd: %s" -#: src/data/sys-file-reader.c:1414 +#: src/data/sys-file-reader.c:1376 +#, c-format +msgid "" +"Variable name length in long string value label record (%d) exceeds %d-byte " +"limit." +msgstr "" + +#: src/data/sys-file-reader.c:1386 +#, fuzzy, c-format +msgid "Ignoring long string value record for unknown variable %s." +msgstr "Variabele afbeelding refereert aan onbekende variabele %s." + +#: src/data/sys-file-reader.c:1393 +#, fuzzy, c-format +msgid "Ignoring long string value record for numeric variable %s." +msgstr "" +"Kan missing values uit bron bestand niet toepassen op lange string variabele " +"%s." + +#: src/data/sys-file-reader.c:1400 +#, c-format +msgid "" +"Ignoring long string value record for variable %s because the record's width " +"(%d) does not match the variable's width (%d)" +msgstr "" + +#: src/data/sys-file-reader.c:1422 +#, c-format +msgid "" +"Ignoring long string value %zu for variable %s, with width %d, that has bad " +"value width %zu." +msgstr "" + +#: src/data/sys-file-reader.c:1537 msgid "File ends in partial case." msgstr "Bestand eindigt in gedeeltelijke case." -#: src/data/sys-file-reader.c:1422 +#: src/data/sys-file-reader.c:1545 #, c-format msgid "Error reading case from file %s." msgstr "Fout tijdens lezen case van bestand %s." -#: src/data/sys-file-reader.c:1519 src/data/sys-file-reader.c:1555 +#: src/data/sys-file-reader.c:1642 src/data/sys-file-reader.c:1678 msgid "Compressed data is corrupt." msgstr "Gecomprimeerde data is corrupt." -#: src/data/sys-file-reader.c:1642 +#: src/data/sys-file-reader.c:1765 #, c-format msgid "Variable index %d not in valid range 1...%d." msgstr "Variabele index %d niet in geldige range 1...%d." -#: src/data/sys-file-reader.c:1647 +#: src/data/sys-file-reader.c:1770 #, c-format msgid "Variable index %d refers to long string continuation." msgstr "Variabele index %d verwijst naar lange string voortzetting." -#: src/data/sys-file-reader.c:1715 +#: src/data/sys-file-reader.c:1838 #, c-format msgid "Suppressed %d additional related warnings." msgstr "Onderdrukt %d extra gerelateerde waarschuwingen." -#: src/data/sys-file-reader.c:1756 +#: src/data/sys-file-reader.c:1879 #, c-format msgid "Variable map refers to unknown variable %s." msgstr "Variabele afbeelding refereert aan onbekende variabele %s." -#: src/data/sys-file-reader.c:1864 +#: src/data/sys-file-reader.c:1987 #, c-format msgid "System error: %s." msgstr "Systeem fout: %s." -#: src/data/sys-file-reader.c:1866 +#: src/data/sys-file-reader.c:1989 msgid "Unexpected end of file." msgstr "Onverwacht bestand einde." -#: src/data/sys-file-writer.c:173 +#: src/data/sys-file-writer.c:175 #, c-format msgid "Unknown system file version %d. Treating as version %d." msgstr "Onbekende systeem bestand versie %d. Behandeld als versie %d." -#: src/data/sys-file-writer.c:212 +#: src/data/sys-file-writer.c:214 #, c-format msgid "Error opening \"%s\" for writing as a system file: %s." msgstr "" "Fout bij het openen van \"%s\" voor het schrijven als een systeem bestand: %" "s." -#: src/data/sys-file-writer.c:837 +#: src/data/sys-file-writer.c:917 #, c-format msgid "An I/O error occurred writing system file \"%s\"." msgstr "" "Een I/O fout is opgetreden tijdens het schrijven van systeem bestand \"%s\"." -#: src/data/variable.c:240 +#: src/data/variable.c:242 #, c-format msgid "" "Character `%c' (in %s) may not appear as the first character in a variable " @@ -1100,31 +1079,31 @@ msgstr "" "Karakter '%c' (in %s) mag niet als eerste karakter in een variabele naam " "voorkomen. " -#: src/data/variable.c:252 +#: src/data/variable.c:254 #, c-format msgid "Character `%c' (in %s) may not appear in a variable name." msgstr "Karakter '%c' (in %s) mag niet in een variabele naam voorkomen." -#: src/data/variable.c:280 +#: src/data/variable.c:282 msgid "Variable name cannot be empty string." msgstr "Variabele naam kan geen lege string zijn." -#: src/data/variable.c:286 +#: src/data/variable.c:288 #, c-format msgid "Variable name %s exceeds %d-character limit." msgstr "Variabele naam %s overschrijdt de limiet van %d-karakters." -#: src/data/variable.c:294 +#: src/data/variable.c:296 #, c-format msgid "`%s' may not be used as a variable name because it is a reserved word." msgstr "" "'%s' mag niet gebruikt worden als variabele naam omdat het een gereserveerd " "woord is." -#: src/language/command.c:208 +#: src/language/command.c:208 src/language/expressions/parse.c:1267 #, c-format -msgid "%s is unimplemented." -msgstr "%s is niet geïmplementeerd." +msgid "%s is not yet implemented." +msgstr "%s is nog niet geïmplementeerd." #: src/language/command.c:214 #, c-format @@ -1424,7 +1403,7 @@ msgstr "" "Variabele naam %s gespecificeerd op %s subopdracht dupliceert een bestaande " "variabele naam." -#: src/language/data-io/combine-files.c:757 +#: src/language/data-io/combine-files.c:762 #, c-format msgid "Encountered %zu sets of duplicate cases in the master file." msgstr "Ontmoet %zu sets van dubbele cases in het master bestand. " @@ -1509,7 +1488,7 @@ msgstr "Record eindigd in data die geen onderdeel is van een veld." #: src/language/dictionary/split-file.c:84 #: src/language/dictionary/sys-file-info.c:169 #: src/language/dictionary/sys-file-info.c:393 -#: src/language/dictionary/sys-file-info.c:716 +#: src/language/dictionary/sys-file-info.c:725 #: src/language/stats/descriptives.c:885 src/ui/gui/psppire-dictview.c:502 msgid "Variable" msgstr "Variabele" @@ -1519,8 +1498,8 @@ msgid "Record" msgstr "" #: src/language/data-io/data-parser.c:646 src/language/data-io/print.c:405 -#: src/ui/gui/crosstabs.glade:92 src/ui/gui/psppire-var-sheet.c:545 -#: src/ui/gui/psppire-var-store.c:791 +#: src/ui/gui/crosstabs.glade:92 src/ui/gui/psppire-var-sheet.c:534 +#: src/ui/gui/psppire-var-store.c:800 msgid "Columns" msgstr "Kolommen" @@ -1746,19 +1725,19 @@ msgstr "" "Het gespecificeerde record nummer, %ld, overschrijdt het aantal records per " "case zoals gespecificeerd in FIXCASE, %d." -#: src/language/data-io/inpt-pgm.c:129 +#: src/language/data-io/inpt-pgm.c:130 msgid "Unexpected end-of-file within INPUT PROGRAM." msgstr "Onverwacht einde-bestand binnen INPUT PROGRAM." -#: src/language/data-io/inpt-pgm.c:142 +#: src/language/data-io/inpt-pgm.c:143 msgid "Input program did not create any variables." msgstr "Input program heeft geen variabelen gecreëerd." -#: src/language/data-io/inpt-pgm.c:286 +#: src/language/data-io/inpt-pgm.c:288 msgid "COLUMN subcommand multiply specified." msgstr "COLUMN subopdracht meerdere keren gespecificeerd." -#: src/language/data-io/inpt-pgm.c:336 +#: src/language/data-io/inpt-pgm.c:338 msgid "" "REREAD: Column numbers must be positive finite numbers. Column set to 1." msgstr "" @@ -1857,21 +1836,21 @@ msgid "Output calls for %d records but %zu specified on RECORDS subcommand." msgstr "" "De output vraagt %d records maar %zu gespecificeerd bij RECORDS subopdracht. " -#: src/language/data-io/print.c:436 +#: src/language/data-io/print.c:437 #, c-format msgid "Writing %d record to %s." msgid_plural "Writing %d records to %s." msgstr[0] "Schrijven van %d record naar %s." msgstr[1] "Schrijven van %d records naar %s." -#: src/language/data-io/print.c:440 +#: src/language/data-io/print.c:441 #, c-format msgid "Writing %d record." msgid_plural "Writing %d records." msgstr[0] "Schrijven van %d record." msgstr[1] "Schrijven van %d records." -#: src/language/data-io/print-space.c:73 src/language/lexer/lexer.c:479 +#: src/language/data-io/print-space.c:73 src/language/lexer/lexer.c:478 #: src/language/stats/autorecode.c:154 src/language/xforms/select-if.c:60 msgid "expecting end of command" msgstr "verwacht einde van opdracht " @@ -1932,22 +1911,7 @@ msgstr "Kan niet alle variabelen DROP-en uit woordenboek." msgid "Variable %s is %s in target file, but %s in source file." msgstr "Variabele %s is %s in doel bestand, maar %s in bron bestand." -#: src/language/dictionary/apply-dictionary.c:99 -#, c-format -msgid "Cannot add value labels from source file to long string variable %s." -msgstr "" -"Kan geen value labels van bron bestand toevoegen aan lange string variabele %" -"s." - -#: src/language/dictionary/apply-dictionary.c:113 -#, c-format -msgid "" -"Cannot apply missing values from source file to long string variable %s." -msgstr "" -"Kan missing values uit bron bestand niet toepassen op lange string variabele " -"%s." - -#: src/language/dictionary/apply-dictionary.c:129 +#: src/language/dictionary/apply-dictionary.c:115 msgid "No matching variables found between the source and target files." msgstr "" "Geen overeenkomende variabelen gevonden tussen het bron en het doel bestand." @@ -1998,12 +1962,12 @@ msgstr "" "Kan numerieke variabelen (b.v. %s) en string variabelen (b.v. %s) niet mixen " "binnen een enkele lijst." -#: src/language/dictionary/missing-values.c:117 -#, c-format -msgid "Truncating missing value to short string length (%d characters)." +#: src/language/dictionary/missing-values.c:116 +#, fuzzy, c-format +msgid "Truncating missing value to maximum acceptable length (%d bytes)." msgstr "Afkappen missing value naar short string lengte (%d karakters)." -#: src/language/dictionary/missing-values.c:139 +#: src/language/dictionary/missing-values.c:138 #, c-format msgid "Missing values provided are too long to assign to variable of width %d." msgstr "" @@ -2134,21 +2098,21 @@ msgid "Renaming would duplicate variable name %s." msgstr "Hernoemen zou variabele naam %s dupliceren." #: src/language/dictionary/split-file.c:85 -#: src/language/dictionary/sys-file-info.c:487 -#: src/language/dictionary/sys-file-info.c:636 -#: src/language/stats/crosstabs.q:1167 src/language/stats/crosstabs.q:1194 -#: src/language/stats/crosstabs.q:1214 src/language/stats/crosstabs.q:1236 -#: src/language/stats/examine.q:1958 src/language/stats/frequencies.q:1059 -#: src/language/stats/frequencies.q:1184 src/language/stats/reliability.q:581 -#: src/language/stats/reliability.q:592 +#: src/language/dictionary/sys-file-info.c:486 +#: src/language/dictionary/sys-file-info.c:641 +#: src/language/stats/crosstabs.q:1231 src/language/stats/crosstabs.q:1258 +#: src/language/stats/crosstabs.q:1282 src/language/stats/crosstabs.q:1307 +#: src/language/stats/examine.q:1959 src/language/stats/frequencies.q:1048 +#: src/language/stats/frequencies.q:1173 src/language/stats/reliability.q:582 +#: src/language/stats/reliability.q:593 msgid "Value" msgstr "Waarde" #: src/language/dictionary/split-file.c:86 #: src/language/dictionary/sys-file-info.c:397 -#: src/language/dictionary/sys-file-info.c:637 src/ui/gui/crosstabs.glade:275 -#: src/ui/gui/psppire.glade:1999 src/ui/gui/psppire-var-sheet.c:542 -#: src/ui/gui/psppire-var-store.c:788 +#: src/language/dictionary/sys-file-info.c:642 src/ui/gui/crosstabs.glade:275 +#: src/ui/gui/psppire.glade:1974 src/ui/gui/psppire-var-sheet.c:531 +#: src/ui/gui/psppire-var-store.c:797 msgid "Label" msgstr "" @@ -2156,7 +2120,7 @@ msgstr "" msgid "File:" msgstr "Bestand:" -#: src/language/dictionary/sys-file-info.c:115 src/ui/gui/psppire.glade:1938 +#: src/language/dictionary/sys-file-info.c:115 src/ui/gui/psppire.glade:1913 #: src/ui/gui/recode.glade:841 msgid "Label:" msgstr "" @@ -2268,7 +2232,7 @@ msgstr "Omschrijving" #: src/language/dictionary/sys-file-info.c:171 #: src/language/dictionary/sys-file-info.c:399 -#: src/language/dictionary/sys-file-info.c:715 +#: src/language/dictionary/sys-file-info.c:724 msgid "Position" msgstr "Positie" @@ -2296,16 +2260,16 @@ msgstr "Het actieve bestand woordenboek bevat geen documenten." msgid "Documents in the active file:" msgstr "Documenten in het actieve bestand:" -#: src/language/dictionary/sys-file-info.c:486 +#: src/language/dictionary/sys-file-info.c:485 msgid "Attribute" msgstr "Attribuut" -#: src/language/dictionary/sys-file-info.c:544 +#: src/language/dictionary/sys-file-info.c:543 #, c-format msgid "Format: %s" msgstr "Formaat: %s" -#: src/language/dictionary/sys-file-info.c:551 +#: src/language/dictionary/sys-file-info.c:550 #, c-format msgid "Print Format: %s" msgstr "Print Formaat: %s" @@ -2315,89 +2279,72 @@ msgstr "Print Formaat: %s" msgid "Write Format: %s" msgstr "Schrijf Formaat: %s" -#: src/language/dictionary/sys-file-info.c:566 +#: src/language/dictionary/sys-file-info.c:567 #, c-format msgid "Measure: %s" msgstr "Meting: %s" -#: src/language/dictionary/sys-file-info.c:567 +#: src/language/dictionary/sys-file-info.c:568 #: src/ui/gui/psppire-var-sheet.c:111 msgid "Nominal" msgstr "Nominaal" -#: src/language/dictionary/sys-file-info.c:568 +#: src/language/dictionary/sys-file-info.c:569 #: src/ui/gui/psppire-var-sheet.c:112 msgid "Ordinal" msgstr "Ordinaal" -#: src/language/dictionary/sys-file-info.c:569 +#: src/language/dictionary/sys-file-info.c:570 #: src/ui/gui/psppire-var-sheet.c:113 msgid "Scale" msgstr "Schaal" -#: src/language/dictionary/sys-file-info.c:572 +#: src/language/dictionary/sys-file-info.c:573 #, c-format msgid "Display Alignment: %s" msgstr "Toon Groepering: %s" -#: src/language/dictionary/sys-file-info.c:573 +#: src/language/dictionary/sys-file-info.c:574 #: src/ui/gui/psppire-var-sheet.c:104 msgid "Left" msgstr "Links" -#: src/language/dictionary/sys-file-info.c:574 +#: src/language/dictionary/sys-file-info.c:575 #: src/ui/gui/psppire-var-sheet.c:106 msgid "Center" msgstr "Centreer" -#: src/language/dictionary/sys-file-info.c:575 +#: src/language/dictionary/sys-file-info.c:576 #: src/ui/gui/psppire-var-sheet.c:105 msgid "Right" msgstr "Rechts" -#: src/language/dictionary/sys-file-info.c:578 +#: src/language/dictionary/sys-file-info.c:579 #, c-format msgid "Display Width: %d" msgstr "Toonbreedte: %d" -#: src/language/dictionary/sys-file-info.c:590 +#: src/language/dictionary/sys-file-info.c:593 msgid "Missing Values: " msgstr "Ontbrekende Waardes:" -#: src/language/dictionary/sys-file-info.c:693 +#: src/language/dictionary/sys-file-info.c:702 msgid "No vectors defined." msgstr "Geen vectoren gedefinieerd." -#: src/language/dictionary/sys-file-info.c:714 +#: src/language/dictionary/sys-file-info.c:723 msgid "Vector" msgstr "" -#: src/language/dictionary/sys-file-info.c:717 +#: src/language/dictionary/sys-file-info.c:726 msgid "Print Format" msgstr "Print Formaat" -#: src/language/dictionary/value-labels.c:121 -#, c-format -msgid "" -"It is not possible to assign value labels to long string variables such as %" -"s." -msgstr "" -"Het is niet mogelijk om waarde labels aan lange string variabelen als %s toe " -"te kennen." - -#: src/language/dictionary/value-labels.c:157 src/language/lexer/lexer.c:632 -msgid "expecting string" -msgstr "string verwacht" - -#: src/language/dictionary/value-labels.c:166 src/language/lexer/lexer.c:659 -msgid "expecting number" -msgstr "nummer verwacht" - -#: src/language/dictionary/value-labels.c:182 +#: src/language/dictionary/value-labels.c:150 msgid "Truncating value label to 60 characters." msgstr "Afkappen waarde label tot 60 karakters." -#: src/language/dictionary/variable-display.c:119 +#: src/language/dictionary/variable-display.c:120 msgid "Variable display width must be a positive integer." msgstr "Variabele toonbreedte moet een positieve integer zijn." @@ -2449,11 +2396,11 @@ msgstr "De weging variabele moet numeriek zijn." msgid "The weighting variable may not be scratch." msgstr "De weging variabele mag geen scratch zijn." -#: src/language/expressions/evaluate.c:154 +#: src/language/expressions/evaluate.c:155 msgid "expecting number or string" msgstr "verwacht nummer of string" -#: src/language/expressions/evaluate.c:168 +#: src/language/expressions/evaluate.c:169 #, c-format msgid "Duplicate variable name %s." msgstr "Dubbele variabele naam %s." @@ -2640,11 +2587,6 @@ msgstr "verwacht ',' of ')' bij aanroep %s functie" msgid "%s is a PSPP extension." msgstr "%s is een PSPP extensie." -#: src/language/expressions/parse.c:1267 -#, c-format -msgid "%s is not yet implemented." -msgstr "%s is nog niet geïmplementeerd." - #: src/language/expressions/parse.c:1273 #, c-format msgid "%s may not appear after TEMPORARY." @@ -2664,89 +2606,92 @@ msgid "%s does not form a valid number." msgstr "%s vormt geen geldig nummer." #: src/language/lexer/lexer.c:389 -#, c-format -msgid "Bad character in input: `%c'." +#, fuzzy, c-format +msgid "Bad character in input: `%s'." msgstr "Fout karakter in input: '%c'." -#: src/language/lexer/lexer.c:391 -#, c-format -msgid "Bad character in input: `\\%o'." -msgstr "Fout karakter in input: '\\%o'." - -#: src/language/lexer/lexer.c:427 +#: src/language/lexer/lexer.c:426 #, c-format msgid "Subcommand %s may only be specified once." msgstr "Subopdracht %s mag slechts een keer gespecificeerd worden." -#: src/language/lexer/lexer.c:435 +#: src/language/lexer/lexer.c:434 #, c-format msgid "missing required subcommand %s" msgstr "mis verplichte subopdracht %s" -#: src/language/lexer/lexer.c:464 +#: src/language/lexer/lexer.c:463 #, c-format msgid "Syntax error %s at %s." msgstr "Syntax fout %s op %s." -#: src/language/lexer/lexer.c:467 +#: src/language/lexer/lexer.c:466 #, c-format msgid "Syntax error at %s." msgstr "Syntax fout op %s." -#: src/language/lexer/lexer.c:601 src/language/lexer/lexer.c:618 +#: src/language/lexer/lexer.c:600 src/language/lexer/lexer.c:617 #, c-format msgid "expecting `%s'" msgstr "verwacht '%s'" -#: src/language/lexer/lexer.c:646 +#: src/language/lexer/lexer.c:631 +msgid "expecting string" +msgstr "string verwacht" + +#: src/language/lexer/lexer.c:645 msgid "expecting integer" msgstr "verwacht integer" -#: src/language/lexer/lexer.c:671 +#: src/language/lexer/lexer.c:658 +msgid "expecting number" +msgstr "nummer verwacht" + +#: src/language/lexer/lexer.c:670 msgid "expecting identifier" msgstr "verwacht herkenningsteken" -#: src/language/lexer/lexer.c:1065 +#: src/language/lexer/lexer.c:1064 msgid "binary" msgstr "binair" -#: src/language/lexer/lexer.c:1070 +#: src/language/lexer/lexer.c:1069 msgid "octal" msgstr "octaal" -#: src/language/lexer/lexer.c:1075 +#: src/language/lexer/lexer.c:1074 msgid "hex" msgstr "" -#: src/language/lexer/lexer.c:1085 +#: src/language/lexer/lexer.c:1084 #, c-format msgid "String of %s digits has %zu characters, which is not a multiple of %d." msgstr "" "String van %s cijfers heeft %zu karakters, wat geen meervoud van %d is." -#: src/language/lexer/lexer.c:1114 +#: src/language/lexer/lexer.c:1113 #, c-format msgid "`%c' is not a valid %s digit." msgstr "'%c' is geen geldig %s cijfer." -#: src/language/lexer/lexer.c:1148 +#: src/language/lexer/lexer.c:1147 msgid "Unterminated string constant." msgstr "Geen einde aan string constante." -#: src/language/lexer/lexer.c:1202 +#: src/language/lexer/lexer.c:1201 msgid "Unexpected end of file in string concatenation." msgstr "Onverwacht bestandseinde in string samenvoeging." -#: src/language/lexer/lexer.c:1210 +#: src/language/lexer/lexer.c:1209 msgid "String expected following `+'." msgstr "String verwacht achter '+'." -#: src/language/lexer/lexer.c:1223 +#: src/language/lexer/lexer.c:1222 #, c-format msgid "String exceeds 255 characters in length (%zu characters)." msgstr "String overschrijdt de lengte van 255 karakters (%zu karakters)." -#: src/language/lexer/range-parser.c:60 +#: src/language/lexer/value-parser.c:60 #, c-format msgid "" "Low end of range (%g) is below high end (%g). The range will be treated as " @@ -2755,20 +2700,20 @@ msgstr "" "Ondergrens van range (%g) is lager dan bovengrens (%g). De range wordt " "behandeld als omgekeerd." -#: src/language/lexer/range-parser.c:68 +#: src/language/lexer/value-parser.c:68 #, c-format msgid "Ends of range are equal (%g)." msgstr "Eindes van range zijn gelijk (%g)." -#: src/language/lexer/range-parser.c:76 +#: src/language/lexer/value-parser.c:76 msgid "LO or LOWEST must be part of a range." msgstr "LO of LOWEST moet een onderdeel van een range zijn." -#: src/language/lexer/range-parser.c:108 +#: src/language/lexer/value-parser.c:108 msgid "System-missing value is not valid here." msgstr "System-missing waarde is hier niet geldig." -#: src/language/lexer/range-parser.c:116 +#: src/language/lexer/value-parser.c:116 msgid "expecting number or data string" msgstr "nummer of data string verwacht" @@ -2940,63 +2885,63 @@ msgstr "Doel variabele %s dupliceert bestaande variabele %s." msgid "Duplicate variable name %s among target variables." msgstr "Dubbele variabele naam %s tussen doel variabelen." -#: src/language/stats/binomial.c:142 +#: src/language/stats/binomial.c:141 #, c-format msgid "Variable %s is not dichotomous" msgstr "Variabele %s is niet dichotomisch " -#: src/language/stats/binomial.c:207 +#: src/language/stats/binomial.c:194 msgid "Binomial Test" msgstr "" -#: src/language/stats/binomial.c:238 +#: src/language/stats/binomial.c:224 msgid "Group1" msgstr "Groep1 " -#: src/language/stats/binomial.c:239 +#: src/language/stats/binomial.c:225 msgid "Group2" msgstr "Groep2" -#: src/language/stats/binomial.c:240 src/language/stats/chisquare.c:224 -#: src/language/stats/chisquare.c:284 src/language/stats/crosstabs.q:868 -#: src/language/stats/crosstabs.q:1074 src/language/stats/crosstabs.q:1797 -#: src/language/stats/examine.q:1214 src/language/stats/frequencies.q:1136 -#: src/language/stats/oneway.q:305 src/language/stats/oneway.q:475 -#: src/language/stats/regression.q:309 src/language/stats/reliability.q:717 -#: src/language/stats/sign.c:93 src/language/stats/wilcoxon.c:246 +#: src/language/stats/binomial.c:226 src/language/stats/chisquare.c:202 +#: src/language/stats/chisquare.c:262 src/language/stats/crosstabs.q:843 +#: src/language/stats/crosstabs.q:1170 src/language/stats/crosstabs.q:1594 +#: src/language/stats/examine.q:1216 src/language/stats/frequencies.q:1125 +#: src/language/stats/oneway.q:305 src/language/stats/oneway.q:476 +#: src/language/stats/regression.q:309 src/language/stats/reliability.q:718 +#: src/language/stats/sign.c:94 src/language/stats/wilcoxon.c:262 #: src/ui/gui/crosstabs-dialog.c:59 msgid "Total" msgstr "Totaal" -#: src/language/stats/binomial.c:273 src/language/stats/chisquare.c:247 -#: src/language/stats/crosstabs.q:1192 src/language/stats/crosstabs.q:1233 +#: src/language/stats/binomial.c:259 src/language/stats/chisquare.c:225 +#: src/language/stats/crosstabs.q:1256 src/language/stats/crosstabs.q:1304 msgid "Category" msgstr "Categorie" -#: src/language/stats/binomial.c:274 src/language/stats/crosstabs.q:878 -#: src/language/stats/examine.q:1287 src/language/stats/frequencies.q:1407 +#: src/language/stats/binomial.c:260 src/language/stats/crosstabs.q:850 +#: src/language/stats/examine.q:1289 src/language/stats/frequencies.q:1396 #: src/language/stats/npar-summary.c:123 src/language/stats/oneway.q:389 -#: src/language/stats/reliability.q:720 src/language/stats/sign.c:73 -#: src/language/stats/t-test.q:700 src/language/stats/t-test.q:724 -#: src/language/stats/t-test.q:863 src/language/stats/t-test.q:1425 -#: src/language/stats/wilcoxon.c:229 +#: src/language/stats/reliability.q:721 src/language/stats/sign.c:74 +#: src/language/stats/t-test.q:506 src/language/stats/t-test.q:526 +#: src/language/stats/t-test.q:626 src/language/stats/t-test.q:1105 +#: src/language/stats/wilcoxon.c:245 msgid "N" msgstr "" -#: src/language/stats/binomial.c:275 +#: src/language/stats/binomial.c:261 msgid "Observed Prop." msgstr "" -#: src/language/stats/binomial.c:276 +#: src/language/stats/binomial.c:262 msgid "Test Prop." msgstr "" -#: src/language/stats/binomial.c:279 +#: src/language/stats/binomial.c:265 #, c-format msgid "Exact Sig. (%d-tailed)" msgstr "" -#: src/language/stats/chisquare.c:194 +#: src/language/stats/chisquare.c:172 #, c-format msgid "" "CHISQUARE test specified %d expected values, but %d distinct values were " @@ -3005,332 +2950,327 @@ msgstr "" "CHISQUARE test specificeert %d verwachte waardes, maar %d verschillende " "waardes werden gevonden in variabele %s." -#: src/language/stats/chisquare.c:208 src/language/stats/chisquare.c:248 +#: src/language/stats/chisquare.c:186 src/language/stats/chisquare.c:226 msgid "Observed N" msgstr "Waargenomen N" -#: src/language/stats/chisquare.c:209 src/language/stats/chisquare.c:249 +#: src/language/stats/chisquare.c:187 src/language/stats/chisquare.c:227 msgid "Expected N" msgstr "Verwacht N" -#: src/language/stats/chisquare.c:210 src/language/stats/chisquare.c:250 +#: src/language/stats/chisquare.c:188 src/language/stats/chisquare.c:228 #: src/language/stats/regression.q:308 src/ui/gui/crosstabs-dialog.c:61 msgid "Residual" msgstr "Overblijvend" -#: src/language/stats/chisquare.c:243 src/language/stats/sign.c:61 +#: src/language/stats/chisquare.c:221 src/language/stats/sign.c:62 msgid "Frequencies" msgstr "Frequenties" -#: src/language/stats/chisquare.c:298 src/language/stats/sign.c:114 -#: src/language/stats/wilcoxon.c:297 +#: src/language/stats/chisquare.c:276 src/language/stats/sign.c:115 +#: src/language/stats/wilcoxon.c:313 msgid "Test Statistics" msgstr "" -#: src/language/stats/chisquare.c:312 +#: src/language/stats/chisquare.c:290 msgid "Chi-Square" msgstr "" -#: src/language/stats/chisquare.c:313 src/language/stats/crosstabs.q:1168 -#: src/language/stats/oneway.q:278 src/language/stats/oneway.q:689 -#: src/language/stats/regression.q:302 src/language/stats/t-test.q:1026 -#: src/language/stats/t-test.q:1219 src/language/stats/t-test.q:1316 +#: src/language/stats/chisquare.c:291 src/language/stats/crosstabs.q:1232 +#: src/language/stats/oneway.q:278 src/language/stats/oneway.q:691 +#: src/language/stats/regression.q:302 src/language/stats/t-test.q:753 +#: src/language/stats/t-test.q:924 src/language/stats/t-test.q:1011 msgid "df" msgstr "" -#: src/language/stats/chisquare.c:314 +#: src/language/stats/chisquare.c:292 msgid "Asymp. Sig." msgstr "" -#: src/language/stats/crosstabs.q:278 +#: src/language/stats/crosstabs.q:325 msgid "" "Missing mode REPORT not allowed in general mode. Assuming MISSING=TABLE." msgstr "" "Missing modus REPORT niet toegestaan in algemene modus. MISSING=TABLE " "aangenomen." -#: src/language/stats/crosstabs.q:288 -msgid "Write mode ALL not allowed in general mode. Assuming WRITE=CELLS." -msgstr "" -"Write modus ALL niet toegestaan in algemen modus. WRITE=CELLS aangenomen." - -#: src/language/stats/crosstabs.q:364 +#: src/language/stats/crosstabs.q:414 msgid "Too many cross-tabulation variables or dimensions." msgstr "Te veel cross-tabulation variabelen of dimensies." -#: src/language/stats/crosstabs.q:374 +#: src/language/stats/crosstabs.q:424 msgid "expecting BY" msgstr "BY verwacht" -#: src/language/stats/crosstabs.q:441 +#: src/language/stats/crosstabs.q:484 msgid "VARIABLES must be specified before TABLES." msgstr "VARIABLES dient voor TABLES gespecificeerd te worden." -#: src/language/stats/crosstabs.q:479 +#: src/language/stats/crosstabs.q:522 #, c-format msgid "Maximum value (%ld) less than minimum value (%ld)." msgstr "Maximum waarde (%ld) is kleiner dan minimum waarde (%ld)." -#: src/language/stats/crosstabs.q:863 +#: src/language/stats/crosstabs.q:838 msgid "Summary." msgstr "Overzicht." -#: src/language/stats/crosstabs.q:865 src/language/stats/examine.q:1275 -#: src/language/stats/reliability.q:708 +#: src/language/stats/crosstabs.q:840 src/language/stats/examine.q:1277 +#: src/language/stats/reliability.q:709 msgid "Cases" msgstr "" -#: src/language/stats/crosstabs.q:866 src/language/stats/examine.q:1212 -#: src/language/stats/frequencies.q:1057 src/language/stats/frequencies.q:1408 -#: src/language/stats/reliability.q:711 +#: src/language/stats/crosstabs.q:841 src/language/stats/examine.q:1214 +#: src/language/stats/frequencies.q:1046 src/language/stats/frequencies.q:1397 +#: src/language/stats/reliability.q:712 msgid "Valid" msgstr "Geldig" -#: src/language/stats/crosstabs.q:867 src/language/stats/examine.q:1213 -#: src/language/stats/frequencies.q:1127 src/language/stats/frequencies.q:1409 -#: src/ui/gui/psppire-var-sheet.c:544 src/ui/gui/psppire-var-store.c:790 +#: src/language/stats/crosstabs.q:842 src/language/stats/examine.q:1215 +#: src/language/stats/frequencies.q:1116 src/language/stats/frequencies.q:1398 +#: src/ui/gui/psppire-var-sheet.c:533 src/ui/gui/psppire-var-store.c:799 msgid "Missing" msgstr "Ontbrekend" -#: src/language/stats/crosstabs.q:879 src/language/stats/examine.q:1290 -#: src/language/stats/frequencies.q:1061 src/language/stats/frequencies.q:1062 -#: src/language/stats/frequencies.q:1063 +#: src/language/stats/crosstabs.q:851 src/language/stats/examine.q:1292 +#: src/language/stats/frequencies.q:1050 src/language/stats/frequencies.q:1051 +#: src/language/stats/frequencies.q:1052 msgid "Percent" msgstr "Procent" -#: src/language/stats/crosstabs.q:1126 +#: src/language/stats/crosstabs.q:1131 msgid "count" msgstr "aantal" -#: src/language/stats/crosstabs.q:1127 +#: src/language/stats/crosstabs.q:1132 msgid "row %" msgstr "rij %" -#: src/language/stats/crosstabs.q:1128 +#: src/language/stats/crosstabs.q:1133 msgid "column %" msgstr "kolom %" -#: src/language/stats/crosstabs.q:1129 +#: src/language/stats/crosstabs.q:1134 msgid "total %" msgstr "totaal %" -#: src/language/stats/crosstabs.q:1130 +#: src/language/stats/crosstabs.q:1135 msgid "expected" msgstr "verwacht" -#: src/language/stats/crosstabs.q:1131 +#: src/language/stats/crosstabs.q:1136 msgid "residual" msgstr "overblijvend" -#: src/language/stats/crosstabs.q:1132 +#: src/language/stats/crosstabs.q:1137 msgid "std. resid." msgstr "" -#: src/language/stats/crosstabs.q:1133 +#: src/language/stats/crosstabs.q:1138 msgid "adj. resid." msgstr "" -#: src/language/stats/crosstabs.q:1163 +#: src/language/stats/crosstabs.q:1227 msgid "Chi-square tests." msgstr "" -#: src/language/stats/crosstabs.q:1166 src/language/stats/crosstabs.q:1193 -#: src/language/stats/crosstabs.q:1213 src/language/stats/crosstabs.q:1234 -#: src/language/stats/examine.q:1752 src/ui/gui/checkbox-treeview.c:92 +#: src/language/stats/crosstabs.q:1230 src/language/stats/crosstabs.q:1257 +#: src/language/stats/crosstabs.q:1281 src/language/stats/crosstabs.q:1305 +#: src/language/stats/examine.q:1753 src/ui/gui/checkbox-treeview.c:92 msgid "Statistic" msgstr "" -#: src/language/stats/crosstabs.q:1170 +#: src/language/stats/crosstabs.q:1234 msgid "Asymp. Sig. (2-sided)" msgstr "" -#: src/language/stats/crosstabs.q:1172 -msgid "Exact. Sig. (2-sided)" +#: src/language/stats/crosstabs.q:1236 +msgid "Exact Sig. (2-sided)" msgstr "" -#: src/language/stats/crosstabs.q:1174 -msgid "Exact. Sig. (1-sided)" +#: src/language/stats/crosstabs.q:1238 +msgid "Exact Sig. (1-sided)" msgstr "" -#: src/language/stats/crosstabs.q:1189 +#: src/language/stats/crosstabs.q:1253 msgid "Symmetric measures." msgstr "Symmetrische metingen." -#: src/language/stats/crosstabs.q:1195 src/language/stats/crosstabs.q:1237 +#: src/language/stats/crosstabs.q:1259 src/language/stats/crosstabs.q:1308 msgid "Asymp. Std. Error" msgstr "" -#: src/language/stats/crosstabs.q:1196 src/language/stats/crosstabs.q:1238 +#: src/language/stats/crosstabs.q:1260 src/language/stats/crosstabs.q:1309 msgid "Approx. T" msgstr "" -#: src/language/stats/crosstabs.q:1197 src/language/stats/crosstabs.q:1239 +#: src/language/stats/crosstabs.q:1261 src/language/stats/crosstabs.q:1310 msgid "Approx. Sig." msgstr "" -#: src/language/stats/crosstabs.q:1208 +#: src/language/stats/crosstabs.q:1276 msgid "Risk estimate." msgstr "" -#: src/language/stats/crosstabs.q:1212 +#: src/language/stats/crosstabs.q:1280 #, c-format msgid "95%% Confidence Interval" msgstr "" -#: src/language/stats/crosstabs.q:1215 src/language/stats/t-test.q:1030 -#: src/language/stats/t-test.q:1216 src/language/stats/t-test.q:1319 +#: src/language/stats/crosstabs.q:1283 src/language/stats/t-test.q:757 +#: src/language/stats/t-test.q:921 src/language/stats/t-test.q:1014 msgid "Lower" msgstr "Lager" -#: src/language/stats/crosstabs.q:1216 src/language/stats/t-test.q:1031 -#: src/language/stats/t-test.q:1217 src/language/stats/t-test.q:1320 +#: src/language/stats/crosstabs.q:1284 src/language/stats/t-test.q:758 +#: src/language/stats/t-test.q:922 src/language/stats/t-test.q:1015 msgid "Upper" msgstr "Hoger" -#: src/language/stats/crosstabs.q:1230 +#: src/language/stats/crosstabs.q:1301 msgid "Directional measures." msgstr "Directioneel metingen." -#: src/language/stats/crosstabs.q:1235 src/ui/gui/psppire.glade:2124 -#: src/ui/gui/psppire-var-sheet.c:539 src/ui/gui/psppire-var-store.c:785 +#: src/language/stats/crosstabs.q:1306 src/ui/gui/psppire.glade:2099 +#: src/ui/gui/psppire-var-sheet.c:528 src/ui/gui/psppire-var-store.c:794 msgid "Type" msgstr "" -#: src/language/stats/crosstabs.q:1991 +#: src/language/stats/crosstabs.q:1774 msgid "Pearson Chi-Square" msgstr "" -#: src/language/stats/crosstabs.q:1992 +#: src/language/stats/crosstabs.q:1775 msgid "Likelihood Ratio" msgstr "" -#: src/language/stats/crosstabs.q:1993 +#: src/language/stats/crosstabs.q:1776 msgid "Fisher's Exact Test" msgstr "" -#: src/language/stats/crosstabs.q:1994 +#: src/language/stats/crosstabs.q:1777 msgid "Continuity Correction" msgstr "" -#: src/language/stats/crosstabs.q:1995 +#: src/language/stats/crosstabs.q:1778 msgid "Linear-by-Linear Association" msgstr "" -#: src/language/stats/crosstabs.q:2032 src/language/stats/crosstabs.q:2105 -#: src/language/stats/crosstabs.q:2167 +#: src/language/stats/crosstabs.q:1813 src/language/stats/crosstabs.q:1888 +#: src/language/stats/crosstabs.q:1953 msgid "N of Valid Cases" msgstr "" -#: src/language/stats/crosstabs.q:2051 src/language/stats/crosstabs.q:2183 +#: src/language/stats/crosstabs.q:1832 src/language/stats/crosstabs.q:1971 msgid "Nominal by Nominal" msgstr "" -#: src/language/stats/crosstabs.q:2052 src/language/stats/crosstabs.q:2184 +#: src/language/stats/crosstabs.q:1833 src/language/stats/crosstabs.q:1972 msgid "Ordinal by Ordinal" msgstr "" -#: src/language/stats/crosstabs.q:2053 +#: src/language/stats/crosstabs.q:1834 msgid "Interval by Interval" msgstr "" -#: src/language/stats/crosstabs.q:2054 +#: src/language/stats/crosstabs.q:1835 msgid "Measure of Agreement" msgstr "" -#: src/language/stats/crosstabs.q:2059 src/ui/gui/crosstabs-dialog.c:41 +#: src/language/stats/crosstabs.q:1840 src/ui/gui/crosstabs-dialog.c:41 msgid "Phi" msgstr "" -#: src/language/stats/crosstabs.q:2060 +#: src/language/stats/crosstabs.q:1841 msgid "Cramer's V" msgstr "" -#: src/language/stats/crosstabs.q:2061 +#: src/language/stats/crosstabs.q:1842 msgid "Contingency Coefficient" msgstr "" -#: src/language/stats/crosstabs.q:2062 +#: src/language/stats/crosstabs.q:1843 msgid "Kendall's tau-b" msgstr "" -#: src/language/stats/crosstabs.q:2063 +#: src/language/stats/crosstabs.q:1844 msgid "Kendall's tau-c" msgstr "" -#: src/language/stats/crosstabs.q:2064 src/ui/gui/crosstabs-dialog.c:48 +#: src/language/stats/crosstabs.q:1845 src/ui/gui/crosstabs-dialog.c:48 msgid "Gamma" msgstr "" -#: src/language/stats/crosstabs.q:2065 +#: src/language/stats/crosstabs.q:1846 msgid "Spearman Correlation" msgstr "" -#: src/language/stats/crosstabs.q:2066 +#: src/language/stats/crosstabs.q:1847 msgid "Pearson's R" msgstr "" -#: src/language/stats/crosstabs.q:2067 src/ui/gui/crosstabs-dialog.c:50 +#: src/language/stats/crosstabs.q:1848 src/ui/gui/crosstabs-dialog.c:50 msgid "Kappa" msgstr "" -#: src/language/stats/crosstabs.q:2140 +#: src/language/stats/crosstabs.q:1926 #, c-format msgid "Odds Ratio for %s (%g / %g)" msgstr "" -#: src/language/stats/crosstabs.q:2143 +#: src/language/stats/crosstabs.q:1929 #, c-format msgid "Odds Ratio for %s (%.*s / %.*s)" msgstr "" -#: src/language/stats/crosstabs.q:2151 +#: src/language/stats/crosstabs.q:1937 #, c-format msgid "For cohort %s = %g" msgstr "Voor cohort %s = %g" -#: src/language/stats/crosstabs.q:2154 +#: src/language/stats/crosstabs.q:1940 #, c-format msgid "For cohort %s = %.*s" msgstr "Voor cohort %s = %.*s" -#: src/language/stats/crosstabs.q:2185 +#: src/language/stats/crosstabs.q:1973 msgid "Nominal by Interval" msgstr "" -#: src/language/stats/crosstabs.q:2190 src/ui/gui/crosstabs-dialog.c:43 +#: src/language/stats/crosstabs.q:1978 src/ui/gui/crosstabs-dialog.c:43 msgid "Lambda" msgstr "" -#: src/language/stats/crosstabs.q:2191 +#: src/language/stats/crosstabs.q:1979 msgid "Goodman and Kruskal tau" msgstr "" -#: src/language/stats/crosstabs.q:2192 +#: src/language/stats/crosstabs.q:1980 msgid "Uncertainty Coefficient" msgstr "" -#: src/language/stats/crosstabs.q:2193 +#: src/language/stats/crosstabs.q:1981 msgid "Somers' d" msgstr "" -#: src/language/stats/crosstabs.q:2194 src/ui/gui/crosstabs-dialog.c:51 +#: src/language/stats/crosstabs.q:1982 src/ui/gui/crosstabs-dialog.c:51 msgid "Eta" msgstr "" -#: src/language/stats/crosstabs.q:2199 +#: src/language/stats/crosstabs.q:1987 msgid "Symmetric" msgstr "" -#: src/language/stats/crosstabs.q:2200 src/language/stats/crosstabs.q:2201 +#: src/language/stats/crosstabs.q:1988 src/language/stats/crosstabs.q:1989 #, c-format msgid "%s Dependent" msgstr "" -#: src/language/stats/descriptives.c:102 src/language/stats/examine.q:1557 +#: src/language/stats/descriptives.c:102 src/language/stats/examine.q:1559 #: src/language/stats/frequencies.q:123 src/language/stats/npar-summary.c:126 -#: src/language/stats/oneway.q:390 src/language/stats/t-test.q:701 -#: src/language/stats/t-test.q:725 src/language/stats/t-test.q:862 -#: src/language/stats/t-test.q:1213 src/ui/gui/descriptives-dialog.c:39 +#: src/language/stats/oneway.q:390 src/language/stats/t-test.q:507 +#: src/language/stats/t-test.q:527 src/language/stats/t-test.q:625 +#: src/language/stats/t-test.q:918 src/ui/gui/descriptives-dialog.c:39 #: src/ui/gui/frequencies-dialog.c:40 msgid "Mean" msgstr "Gemiddeld" @@ -3343,13 +3283,13 @@ msgstr "" msgid "Std Dev" msgstr "" -#: src/language/stats/descriptives.c:105 src/language/stats/examine.q:1588 +#: src/language/stats/descriptives.c:105 src/language/stats/examine.q:1589 #: src/language/stats/frequencies.q:128 src/ui/gui/descriptives-dialog.c:46 #: src/ui/gui/frequencies-dialog.c:45 msgid "Variance" msgstr "" -#: src/language/stats/descriptives.c:106 src/language/stats/examine.q:1624 +#: src/language/stats/descriptives.c:106 src/language/stats/examine.q:1625 #: src/language/stats/frequencies.q:129 src/ui/gui/descriptives-dialog.c:47 #: src/ui/gui/frequencies-dialog.c:50 msgid "Kurtosis" @@ -3359,7 +3299,7 @@ msgstr "" msgid "S E Kurt" msgstr "" -#: src/language/stats/descriptives.c:108 src/language/stats/examine.q:1619 +#: src/language/stats/descriptives.c:108 src/language/stats/examine.q:1620 #: src/language/stats/frequencies.q:131 src/ui/gui/descriptives-dialog.c:48 #: src/ui/gui/frequencies-dialog.c:46 msgid "Skewness" @@ -3369,22 +3309,22 @@ msgstr "" msgid "S E Skew" msgstr "" -#: src/language/stats/descriptives.c:110 src/language/stats/examine.q:1608 +#: src/language/stats/descriptives.c:110 src/language/stats/examine.q:1609 #: src/language/stats/frequencies.q:133 src/ui/gui/descriptives-dialog.c:43 #: src/ui/gui/frequencies-dialog.c:48 msgid "Range" msgstr "" -#: src/language/stats/descriptives.c:111 src/language/stats/examine.q:1598 +#: src/language/stats/descriptives.c:111 src/language/stats/examine.q:1599 #: src/language/stats/frequencies.q:134 src/language/stats/npar-summary.c:132 -#: src/language/stats/oneway.q:403 src/ui/gui/descriptives-dialog.c:41 +#: src/language/stats/oneway.q:404 src/ui/gui/descriptives-dialog.c:41 #: src/ui/gui/frequencies-dialog.c:42 msgid "Minimum" msgstr "" -#: src/language/stats/descriptives.c:112 src/language/stats/examine.q:1603 +#: src/language/stats/descriptives.c:112 src/language/stats/examine.q:1604 #: src/language/stats/frequencies.q:135 src/language/stats/npar-summary.c:135 -#: src/language/stats/oneway.q:404 src/ui/gui/descriptives-dialog.c:42 +#: src/language/stats/oneway.q:405 src/ui/gui/descriptives-dialog.c:42 #: src/ui/gui/frequencies-dialog.c:43 msgid "Maximum" msgstr "" @@ -3441,131 +3381,122 @@ msgstr "" msgid "Valid cases = %g; cases with missing value(s) = %g." msgstr "Geldige cases = %g; cases met missing value(s) = %g." -#: src/language/stats/examine.q:343 src/language/stats/examine.q:496 -#: src/language/stats/examine.q:1058 +#: src/language/stats/examine.q:346 src/language/stats/examine.q:499 +#: src/language/stats/examine.q:1060 msgid "Not creating plot because data set is empty." msgstr "Er wordt geen plot aangemaakt omdat de data set leeg is." -#: src/language/stats/examine.q:353 +#: src/language/stats/examine.q:356 #, c-format msgid "Normal Q-Q Plot of %s" msgstr "Normal Q-Q Plot van %s" -#: src/language/stats/examine.q:354 src/language/stats/examine.q:359 +#: src/language/stats/examine.q:357 src/language/stats/examine.q:362 msgid "Observed Value" msgstr "Waargenomen Waarde" -#: src/language/stats/examine.q:355 +#: src/language/stats/examine.q:358 msgid "Expected Normal" msgstr "" -#: src/language/stats/examine.q:357 +#: src/language/stats/examine.q:360 #, c-format msgid "Detrended Normal Q-Q Plot of %s" msgstr "Detrended Normal Q-Q Plot van %s" -#: src/language/stats/examine.q:360 +#: src/language/stats/examine.q:363 msgid "Dev from Normal" msgstr "" -#: src/language/stats/examine.q:513 +#: src/language/stats/examine.q:516 #, c-format msgid "Boxplot of %s vs. %s" msgstr "" -#: src/language/stats/examine.q:517 +#: src/language/stats/examine.q:520 #, c-format msgid "Boxplot of %s" msgstr "" -#: src/language/stats/examine.q:753 src/language/stats/examine.q:766 +#: src/language/stats/examine.q:756 src/language/stats/examine.q:769 #, c-format msgid "%s and %s are mutually exclusive" msgstr "%s en %s zijn wederzijds exclusief" -#: src/language/stats/examine.q:1270 src/language/stats/reliability.q:685 +#: src/language/stats/examine.q:1272 src/language/stats/reliability.q:686 msgid "Case Processing Summary" msgstr "Case Bewerkings Overzicht" -#: src/language/stats/examine.q:1562 src/language/stats/oneway.q:398 +#: src/language/stats/examine.q:1564 src/language/stats/oneway.q:398 #, c-format msgid "%g%% Confidence Interval for Mean" msgstr "" -#: src/language/stats/examine.q:1568 src/language/stats/oneway.q:400 +#: src/language/stats/examine.q:1570 src/language/stats/oneway.q:401 msgid "Lower Bound" msgstr "Beneden Grens" -#: src/language/stats/examine.q:1573 src/language/stats/oneway.q:401 +#: src/language/stats/examine.q:1575 src/language/stats/oneway.q:402 msgid "Upper Bound" msgstr "Boven Grens" -#: src/language/stats/examine.q:1578 -#, c-format -msgid "5%% Trimmed Mean" +#: src/language/stats/examine.q:1579 +msgid "5% Trimmed Mean" msgstr "" -#: src/language/stats/examine.q:1583 src/language/stats/frequencies.q:125 +#: src/language/stats/examine.q:1584 src/language/stats/frequencies.q:125 #: src/ui/gui/frequencies-dialog.c:52 msgid "Median" msgstr "" -#: src/language/stats/examine.q:1593 src/language/stats/npar-summary.c:129 -#: src/language/stats/oneway.q:391 src/language/stats/t-test.q:702 -#: src/language/stats/t-test.q:726 src/language/stats/t-test.q:864 -#: src/language/stats/t-test.q:1214 +#: src/language/stats/examine.q:1594 src/language/stats/npar-summary.c:129 +#: src/language/stats/oneway.q:391 src/language/stats/t-test.q:508 +#: src/language/stats/t-test.q:528 src/language/stats/t-test.q:627 +#: src/language/stats/t-test.q:919 msgid "Std. Deviation" msgstr "" -#: src/language/stats/examine.q:1613 +#: src/language/stats/examine.q:1614 msgid "Interquartile Range" msgstr "" -#: src/language/stats/examine.q:1749 src/language/stats/oneway.q:407 +#: src/language/stats/examine.q:1750 src/language/stats/oneway.q:408 #: src/ui/gui/examine.glade:310 msgid "Descriptives" msgstr "" -#: src/language/stats/examine.q:1755 src/language/stats/oneway.q:392 -#: src/language/stats/oneway.q:687 src/language/stats/regression.q:203 +#: src/language/stats/examine.q:1756 src/language/stats/oneway.q:392 +#: src/language/stats/oneway.q:689 src/language/stats/regression.q:203 msgid "Std. Error" msgstr "" -#: src/language/stats/examine.q:1852 src/language/stats/examine.q:1857 -#: src/ui/gui/psppire-data-store.c:756 src/ui/gui/psppire-var-store.c:646 -#: src/ui/gui/psppire-var-store.c:656 src/ui/gui/psppire-var-store.c:666 -#: src/ui/gui/psppire-var-store.c:777 -#, c-format -msgid "%d" -msgstr "" - -#: src/language/stats/examine.q:1938 +#: src/language/stats/examine.q:1939 msgid "Highest" msgstr "Hoogste" -#: src/language/stats/examine.q:1943 +#: src/language/stats/examine.q:1944 msgid "Lowest" msgstr "Laagste" -#: src/language/stats/examine.q:1950 +#: src/language/stats/examine.q:1951 msgid "Extreme Values" msgstr "Extreme Waardes" -#: src/language/stats/examine.q:1954 +#: src/language/stats/examine.q:1955 msgid "Case Number" msgstr "Case Nummer" -#: src/language/stats/examine.q:2076 +#: src/language/stats/examine.q:2077 msgid "Tukey's Hinges" msgstr "" -#: src/language/stats/examine.q:2116 src/language/stats/examine.q:2134 -#: src/language/stats/frequencies.q:1418 src/language/stats/npar-summary.c:142 +#: src/language/stats/examine.q:2117 src/language/stats/examine.q:2134 +#: src/language/stats/frequencies.q:1407 src/language/stats/npar-summary.c:142 #: src/ui/gui/examine.glade:333 msgid "Percentiles" msgstr "" -#: src/language/stats/examine.q:2123 +#: src/language/stats/examine.q:2124 #, c-format msgid "%g" msgstr "" @@ -3576,68 +3507,54 @@ msgid "" msgstr "" "FLIP negeert TEMPORARY. Tijdelijke transformaties worden permanent gemaakt." -#: src/language/stats/flip.c:151 +#: src/language/stats/flip.c:147 msgid "Could not create temporary file for FLIP." msgstr "Kon geen tijdelijk bestand voor FLIP aanmaken." -#: src/language/stats/flip.c:162 -#, c-format -msgid "Error writing FLIP file: %s." -msgstr "Fout tijdens het schrijven van FLIP bestand: %s." - -#: src/language/stats/flip.c:262 -#, c-format -msgid "Could not create acceptable variant for variable %s." -msgstr "Kon geen acceptabele variant voor variabele %s creëren." - -#: src/language/stats/flip.c:278 -msgid "Cannot create more than 99999 variable names." -msgstr "Kan niet meer dan 99999 variabele namen creëren." - -#: src/language/stats/flip.c:394 +#: src/language/stats/flip.c:324 #, c-format msgid "Error rewinding FLIP file: %s." msgstr "Fout tijdens terugdraaien FLIP bestand: %s." -#: src/language/stats/flip.c:401 +#: src/language/stats/flip.c:331 msgid "Error creating FLIP source file." msgstr "Fout tijdens het creëren van FLIP bron bestand." -#: src/language/stats/flip.c:414 +#: src/language/stats/flip.c:344 #, c-format msgid "Error reading FLIP file: %s." msgstr "Fout tijdens lezen FLIP bestand: %s." -#: src/language/stats/flip.c:416 +#: src/language/stats/flip.c:346 msgid "Unexpected end of file reading FLIP file." msgstr "Onverwacht einde bestand tijdens lezen FLIP bestand." -#: src/language/stats/flip.c:432 +#: src/language/stats/flip.c:362 #, c-format msgid "Error seeking FLIP source file: %s." msgstr "Fout tijdens zoeken FLIP bron bestand: %s." -#: src/language/stats/flip.c:440 +#: src/language/stats/flip.c:370 #, c-format msgid "Error writing FLIP source file: %s." msgstr "Fout tijdens schrijven FLIP bron bestand: %s." -#: src/language/stats/flip.c:451 +#: src/language/stats/flip.c:381 #, c-format msgid "Error closing FLIP source file: %s." msgstr "Fout tijdens sluiten FLIP bron bestand: %s." -#: src/language/stats/flip.c:459 +#: src/language/stats/flip.c:389 #, c-format msgid "Error rewinding FLIP source file: %s." msgstr "Fout tijdens terugdraaien FLIP bron bestand: %s." -#: src/language/stats/flip.c:487 +#: src/language/stats/flip.c:419 #, c-format msgid "Error reading FLIP temporary file: %s." msgstr "Fout tijdens lezen FLIP tijdelijk bestand: %s." -#: src/language/stats/flip.c:490 +#: src/language/stats/flip.c:422 msgid "Unexpected end of file reading FLIP temporary file." msgstr "Onverwacht einde bestand tijdens lezen FLIP tijdelijk bestand." @@ -3657,7 +3574,7 @@ msgstr "" msgid "S.E. Skew" msgstr "" -#: src/language/stats/frequencies.q:409 +#: src/language/stats/frequencies.q:405 msgid "" "At most one of BARCHART, HISTOGRAM, or HBAR should be given. HBAR will be " "assumed. Argument values will be given precedence increasing along the " @@ -3667,7 +3584,7 @@ msgstr "" "HBAR wordt aangenomen. Argument waardes zullen gebruikt worden in opgegeven " "volgorde." -#: src/language/stats/frequencies.q:492 +#: src/language/stats/frequencies.q:488 #, c-format msgid "" "MAX must be greater than or equal to MIN, if both are specified. However, " @@ -3676,52 +3593,52 @@ msgstr "" "MAX moet groter of gelijk zijn aan MIN, als beiden zijn opgegeven. Maar, MIN " "was opgegeven als %g en MAX als %g. MIN en MAX worden genegeerd." -#: src/language/stats/frequencies.q:757 +#: src/language/stats/frequencies.q:752 #, c-format msgid "Variable %s specified multiple times on VARIABLES subcommand." msgstr "Variabele %s is meerdere keren opgegeven bij VARIABLES subopdracht." -#: src/language/stats/frequencies.q:820 +#: src/language/stats/frequencies.q:809 msgid "`)' expected after GROUPED interval list." msgstr "')' verwacht na GROUPED interval lijst." -#: src/language/stats/frequencies.q:832 +#: src/language/stats/frequencies.q:821 #, c-format msgid "Variables %s specified on GROUPED but not on VARIABLES." msgstr "Variabele %s gespecificeerd bij GROUPED maar niet bij VARIABLES." -#: src/language/stats/frequencies.q:839 +#: src/language/stats/frequencies.q:828 #, c-format msgid "Variables %s specified multiple times on GROUPED subcommand." msgstr "Variabele %s is meerdere keren gespecificeerd bij GROUPED subopdracht." -#: src/language/stats/frequencies.q:1058 src/language/stats/frequencies.q:1151 -#: src/language/stats/frequencies.q:1152 src/language/stats/frequencies.q:1187 +#: src/language/stats/frequencies.q:1047 src/language/stats/frequencies.q:1140 +#: src/language/stats/frequencies.q:1141 src/language/stats/frequencies.q:1176 msgid "Cum" msgstr "" -#: src/language/stats/frequencies.q:1060 src/output/charts/plot-hist.c:140 +#: src/language/stats/frequencies.q:1049 src/output/charts/plot-hist.c:140 msgid "Frequency" msgstr "Frequenties" -#: src/language/stats/frequencies.q:1081 +#: src/language/stats/frequencies.q:1070 msgid "Value Label" msgstr "Waarde Label" -#: src/language/stats/frequencies.q:1185 +#: src/language/stats/frequencies.q:1174 msgid "Freq" msgstr "" -#: src/language/stats/frequencies.q:1186 src/language/stats/frequencies.q:1188 +#: src/language/stats/frequencies.q:1175 src/language/stats/frequencies.q:1177 msgid "Pct" msgstr "" -#: src/language/stats/frequencies.q:1381 +#: src/language/stats/frequencies.q:1370 #, c-format msgid "No valid data for variable %s; statistics not displayed." msgstr "Geen geldige data voor variabele %s; statistieken worden niet getoond." -#: src/language/stats/frequencies.q:1422 +#: src/language/stats/frequencies.q:1411 msgid "50 (Median)" msgstr "" @@ -3761,7 +3678,7 @@ msgstr "" "%d verwachte waardes waren opgegeven, maar de opgegeven range (%d-%d) " "vereist precies %d waardes." -#: src/language/stats/npar.q:441 src/language/stats/t-test.q:501 +#: src/language/stats/npar.q:441 src/language/stats/t-test.q:379 #, c-format msgid "" "PAIRED was specified but the number of variables preceding WITH (%zu) did " @@ -3809,11 +3726,11 @@ msgid "Mean Square" msgstr "" #: src/language/stats/oneway.q:280 src/language/stats/regression.q:304 -#: src/language/stats/t-test.q:1023 +#: src/language/stats/t-test.q:750 msgid "F" msgstr "" -#: src/language/stats/oneway.q:281 src/language/stats/oneway.q:538 +#: src/language/stats/oneway.q:281 src/language/stats/oneway.q:539 #: src/language/stats/regression.q:206 src/language/stats/regression.q:305 msgid "Significance" msgstr "Significantie " @@ -3830,19 +3747,19 @@ msgstr "Binnen Groepen" msgid "ANOVA" msgstr "" -#: src/language/stats/oneway.q:535 +#: src/language/stats/oneway.q:536 msgid "Levene Statistic" msgstr "" -#: src/language/stats/oneway.q:536 +#: src/language/stats/oneway.q:537 msgid "df1" msgstr "" -#: src/language/stats/oneway.q:537 +#: src/language/stats/oneway.q:538 msgid "df2" msgstr "" -#: src/language/stats/oneway.q:540 +#: src/language/stats/oneway.q:541 msgid "Test of Homogeneity of Variances" msgstr "" @@ -3850,34 +3767,34 @@ msgstr "" msgid "Contrast Coefficients" msgstr "" -#: src/language/stats/oneway.q:610 src/language/stats/oneway.q:685 +#: src/language/stats/oneway.q:610 src/language/stats/oneway.q:687 msgid "Contrast" msgstr "" -#: src/language/stats/oneway.q:683 +#: src/language/stats/oneway.q:685 msgid "Contrast Tests" msgstr "" -#: src/language/stats/oneway.q:686 +#: src/language/stats/oneway.q:688 msgid "Value of Contrast" msgstr "" -#: src/language/stats/oneway.q:688 src/language/stats/regression.q:205 -#: src/language/stats/t-test.q:1025 src/language/stats/t-test.q:1218 -#: src/language/stats/t-test.q:1315 +#: src/language/stats/oneway.q:690 src/language/stats/regression.q:205 +#: src/language/stats/t-test.q:752 src/language/stats/t-test.q:923 +#: src/language/stats/t-test.q:1010 msgid "t" msgstr "" -#: src/language/stats/oneway.q:690 src/language/stats/t-test.q:1027 -#: src/language/stats/t-test.q:1220 src/language/stats/t-test.q:1317 +#: src/language/stats/oneway.q:692 src/language/stats/t-test.q:754 +#: src/language/stats/t-test.q:925 src/language/stats/t-test.q:1012 msgid "Sig. (2-tailed)" msgstr "" -#: src/language/stats/oneway.q:734 +#: src/language/stats/oneway.q:736 msgid "Assume equal variances" msgstr "Veronderstelt gelijke variantie" -#: src/language/stats/oneway.q:738 +#: src/language/stats/oneway.q:740 msgid "Does not assume equal" msgstr "Veronderstelt niet gelijk" @@ -3904,22 +3821,22 @@ msgstr "Variabelen gecreëerd door RANK" msgid "%s into %s(%s of %s using %s BY %s)" msgstr "%s in %s(%s van %s gebruikt %s PER %s)" -#: src/language/stats/rank.q:729 +#: src/language/stats/rank.q:728 #, c-format msgid "%s into %s(%s of %s BY %s)" msgstr "%s in %s(%s van %s PER %s)" -#: src/language/stats/rank.q:743 +#: src/language/stats/rank.q:741 #, c-format msgid "%s into %s(%s of %s using %s)" msgstr "%s in %s(%s van %s gebruikt %s" -#: src/language/stats/rank.q:753 +#: src/language/stats/rank.q:750 #, c-format msgid "%s into %s(%s of %s)" msgstr "%s in %s(%s van %s)" -#: src/language/stats/rank.q:766 +#: src/language/stats/rank.q:762 msgid "" "FRACTION has been specified, but NORMAL and PROPORTION rank functions have " "not been requested. The FRACTION subcommand will be ignored." @@ -3927,12 +3844,12 @@ msgstr "" "FRACTION is gespecificeerd maar NORMAL en PROPORTION rangschik functies ziin " "niet gevraagd. De FRACTION subopdracht wordt genegeerd." -#: src/language/stats/rank.q:857 +#: src/language/stats/rank.q:853 #, c-format msgid "Variable %s already exists." msgstr "Variabele %s bestaat al." -#: src/language/stats/rank.q:862 +#: src/language/stats/rank.q:858 msgid "Too many variables in INTO clause." msgstr "Te veel variabelen in INTO clause." @@ -3999,104 +3916,103 @@ msgstr "" msgid "Dependent variable must be numeric." msgstr "Afhankelijke variabele moet numeriek zijn." -#: src/language/stats/reliability.q:432 +#: src/language/stats/reliability.q:433 msgid "Reliability Statistics" msgstr "" -#: src/language/stats/reliability.q:475 +#: src/language/stats/reliability.q:476 msgid "Item-Total Statistics" msgstr "" -#: src/language/stats/reliability.q:497 +#: src/language/stats/reliability.q:498 msgid "Scale Mean if Item Deleted" msgstr "" -#: src/language/stats/reliability.q:500 +#: src/language/stats/reliability.q:501 msgid "Scale Variance if Item Deleted" msgstr "" -#: src/language/stats/reliability.q:503 +#: src/language/stats/reliability.q:504 msgid "Corrected Item-Total Correlation" msgstr "" -#: src/language/stats/reliability.q:506 +#: src/language/stats/reliability.q:507 msgid "Cronbach's Alpha if Item Deleted" msgstr "" -#: src/language/stats/reliability.q:556 src/language/stats/reliability.q:575 +#: src/language/stats/reliability.q:557 src/language/stats/reliability.q:576 msgid "Cronbach's Alpha" msgstr "" -#: src/language/stats/reliability.q:559 +#: src/language/stats/reliability.q:560 msgid "N of items" msgstr "" -#: src/language/stats/reliability.q:578 +#: src/language/stats/reliability.q:579 msgid "Part 1" msgstr "Deel 1" -#: src/language/stats/reliability.q:584 src/language/stats/reliability.q:595 +#: src/language/stats/reliability.q:585 src/language/stats/reliability.q:596 msgid "N of Items" msgstr "" -#: src/language/stats/reliability.q:589 +#: src/language/stats/reliability.q:590 msgid "Part 2" msgstr "Deel 2" -#: src/language/stats/reliability.q:600 +#: src/language/stats/reliability.q:601 msgid "Total N of Items" msgstr "" -#: src/language/stats/reliability.q:603 +#: src/language/stats/reliability.q:604 msgid "Correlation Between Forms" msgstr "" -#: src/language/stats/reliability.q:607 +#: src/language/stats/reliability.q:608 msgid "Spearman-Brown Coefficient" msgstr "" -#: src/language/stats/reliability.q:610 +#: src/language/stats/reliability.q:611 msgid "Equal Length" msgstr "Gelijke Lengte" -#: src/language/stats/reliability.q:613 +#: src/language/stats/reliability.q:614 msgid "Unequal Length" msgstr "Ongelijke Lengte" -#: src/language/stats/reliability.q:617 +#: src/language/stats/reliability.q:618 msgid "Guttman Split-Half Coefficient" msgstr "" -#: src/language/stats/reliability.q:714 +#: src/language/stats/reliability.q:715 msgid "Excluded" msgstr "Uitgesloten" #: src/language/stats/reliability.q:723 -#, c-format -msgid "%%" +msgid "%" msgstr "" -#: src/language/stats/sign.c:90 +#: src/language/stats/sign.c:91 msgid "Negative Differences" msgstr "Negatieve Verschillen" -#: src/language/stats/sign.c:91 +#: src/language/stats/sign.c:92 msgid "Positive Differences" msgstr "Positieve Verschillen" -#: src/language/stats/sign.c:92 src/language/stats/wilcoxon.c:245 +#: src/language/stats/sign.c:93 src/language/stats/wilcoxon.c:261 msgid "Ties" msgstr "" -#: src/language/stats/sign.c:133 +#: src/language/stats/sign.c:134 src/language/stats/wilcoxon.c:331 msgid "Exact Sig. (2-tailed)" msgstr "" -#: src/language/stats/sign.c:136 +#: src/language/stats/sign.c:137 src/language/stats/wilcoxon.c:332 msgid "Exact Sig. (1-tailed)" msgstr "" -#: src/language/stats/sign.c:139 src/language/stats/wilcoxon.c:319 +#: src/language/stats/sign.c:140 src/language/stats/wilcoxon.c:335 msgid "Point Probability" msgstr "" @@ -4117,163 +4033,152 @@ msgstr "')' verwacht." msgid "Variable %s specified twice in sort criteria." msgstr "Variabele %s 2 keer opgegeven in sort criteria." -#: src/language/stats/t-test.q:280 -msgid "TESTVAL, GROUPS and PAIRS subcommands are mutually exclusive." +#: src/language/stats/t-test.q:189 +#, fuzzy +msgid "Exactly one of TESTVAL, GROUPS and PAIRS subcommands must be specified." msgstr "TESTVAL, GROUPS en PAIRS subopdracht zijn wederzijds uitsluitend." -#: src/language/stats/t-test.q:298 -msgid "VARIABLES subcommand is not appropriate with PAIRS" +#: src/language/stats/t-test.q:210 +#, fuzzy +msgid "VARIABLES subcommand may not be used with PAIRS." msgstr "VARIABLES subprogramma is niet het juiste met PAIRS" -#: src/language/stats/t-test.q:336 +#: src/language/stats/t-test.q:229 msgid "One or more VARIABLES must be specified." msgstr "Een of meer VARIABLES moeten gespecificeerd zijn." -#: src/language/stats/t-test.q:386 -#, c-format -msgid "Long string variable %s is not valid here." -msgstr "Lange string variabele %s is niet geldig hier." - -#: src/language/stats/t-test.q:406 src/language/stats/t-test.q:420 +#: src/language/stats/t-test.q:323 msgid "" "When applying GROUPS to a string variable, two values must be specified." msgstr "" "By het toepassen van GROUPS op een string variabele moeten twee waardes " "opgegeven zijn." -#: src/language/stats/t-test.q:518 +#: src/language/stats/t-test.q:394 msgid "At least two variables must be specified on PAIRS." msgstr "Ten minste 2 variabelen moeten opgegeven worden bij PAIRS." -#: src/language/stats/t-test.q:698 +#: src/language/stats/t-test.q:504 msgid "One-Sample Statistics" msgstr "" -#: src/language/stats/t-test.q:703 src/language/stats/t-test.q:727 -#: src/language/stats/t-test.q:865 +#: src/language/stats/t-test.q:509 src/language/stats/t-test.q:529 +#: src/language/stats/t-test.q:628 msgid "SE. Mean" msgstr "" -#: src/language/stats/t-test.q:722 +#: src/language/stats/t-test.q:523 msgid "Group Statistics" msgstr "" -#: src/language/stats/t-test.q:859 +#: src/language/stats/t-test.q:622 msgid "Paired Sample Statistics" msgstr "" -#: src/language/stats/t-test.q:885 src/language/stats/t-test.q:1243 -#: src/language/stats/t-test.q:1442 +#: src/language/stats/t-test.q:642 src/language/stats/t-test.q:945 +#: src/language/stats/t-test.q:1119 #, c-format msgid "Pair %d" msgstr "" -#: src/language/stats/t-test.q:1011 +#: src/language/stats/t-test.q:738 msgid "Independent Samples Test" msgstr "" -#: src/language/stats/t-test.q:1019 +#: src/language/stats/t-test.q:746 msgid "Levene's Test for Equality of Variances" msgstr "" -#: src/language/stats/t-test.q:1021 +#: src/language/stats/t-test.q:748 msgid "t-test for Equality of Means" msgstr "" -#: src/language/stats/t-test.q:1024 src/language/stats/t-test.q:1427 +#: src/language/stats/t-test.q:751 src/language/stats/t-test.q:1107 msgid "Sig." msgstr "" -#: src/language/stats/t-test.q:1028 src/language/stats/t-test.q:1318 +#: src/language/stats/t-test.q:755 src/language/stats/t-test.q:1013 msgid "Mean Difference" msgstr "Gemiddelde Verschil" -#: src/language/stats/t-test.q:1029 +#: src/language/stats/t-test.q:756 msgid "Std. Error Difference" msgstr "" -#: src/language/stats/t-test.q:1034 src/language/stats/t-test.q:1210 -#: src/language/stats/t-test.q:1310 +#: src/language/stats/t-test.q:761 src/language/stats/t-test.q:915 +#: src/language/stats/t-test.q:1005 #, c-format msgid "%g%% Confidence Interval of the Difference" msgstr "" -#: src/language/stats/t-test.q:1090 +#: src/language/stats/t-test.q:815 msgid "Equal variances assumed" msgstr "" -#: src/language/stats/t-test.q:1142 +#: src/language/stats/t-test.q:861 msgid "Equal variances not assumed" msgstr "" -#: src/language/stats/t-test.q:1200 +#: src/language/stats/t-test.q:905 msgid "Paired Samples Test" msgstr "" -#: src/language/stats/t-test.q:1203 +#: src/language/stats/t-test.q:908 msgid "Paired Differences" msgstr "" -#: src/language/stats/t-test.q:1215 +#: src/language/stats/t-test.q:920 msgid "Std. Error Mean" msgstr "" -#: src/language/stats/t-test.q:1299 +#: src/language/stats/t-test.q:994 msgid "One-Sample Test" msgstr "" -#: src/language/stats/t-test.q:1304 +#: src/language/stats/t-test.q:999 #, c-format msgid "Test Value = %f" msgstr "" -#: src/language/stats/t-test.q:1422 +#: src/language/stats/t-test.q:1102 msgid "Paired Samples Correlations" msgstr "" -#: src/language/stats/t-test.q:1426 +#: src/language/stats/t-test.q:1106 msgid "Correlation" msgstr "Correlatie" -#: src/language/stats/t-test.q:1445 +#: src/language/stats/t-test.q:1121 #, c-format msgid "%s & %s" msgstr "" -#: src/language/stats/wilcoxon.c:216 +#: src/language/stats/wilcoxon.c:232 msgid "Ranks" msgstr "Rangen" -#: src/language/stats/wilcoxon.c:230 +#: src/language/stats/wilcoxon.c:246 msgid "Mean Rank" msgstr "Gemiddelde Rang" -#: src/language/stats/wilcoxon.c:231 +#: src/language/stats/wilcoxon.c:247 msgid "Sum of Ranks" msgstr "Totaal van de Rangen" -#: src/language/stats/wilcoxon.c:243 +#: src/language/stats/wilcoxon.c:259 msgid "Negative Ranks" msgstr "Negatieve Rangen" -#: src/language/stats/wilcoxon.c:244 +#: src/language/stats/wilcoxon.c:260 msgid "Positive Ranks" msgstr "Positieve Rangen" -#: src/language/stats/wilcoxon.c:310 +#: src/language/stats/wilcoxon.c:326 msgid "Z" msgstr "" -#: src/language/stats/wilcoxon.c:311 -msgid "Asymp. Sig (2-tailed)" -msgstr "" - -#: src/language/stats/wilcoxon.c:315 -msgid "Exact Sig (2-tailed)" -msgstr "" - -#: src/language/stats/wilcoxon.c:316 -msgid "Exact Sig (1-tailed)" +#: src/language/stats/wilcoxon.c:327 +msgid "Asymp. Sig. (2-tailed)" msgstr "" #: src/language/syntax-file.c:88 @@ -4286,35 +4191,16 @@ msgstr "openen \"%s\" als syntax bestand" msgid "Opening `%s': %s." msgstr "Openen '%s': %s." -#: src/language/syntax-file.c:106 +#: src/language/syntax-file.c:107 #, c-format msgid "Reading `%s': %s." msgstr "Lezen '%s': %s." -#: src/language/syntax-file.c:126 +#: src/language/syntax-file.c:127 #, c-format msgid "Closing `%s': %s." msgstr "Sluiten '%s': %s." -#: src/language/tests/check-model.q:138 -msgid "PATH and SEARCH subcommands are mutually exclusive. Ignoring PATH." -msgstr "" -"PATH en SEARCH subopdrachten zijn wederzijds uitsluitend. PATH genegeerd. " - -#: src/language/tests/check-model.q:156 -msgid "At least one value must be specified on PATH." -msgstr "Tenminste 1 waarde dient bij PATH opgegeven te zijn." - -#: src/language/tests/check-model.q:167 -#, c-format -msgid "Hash bits adjusted to %d." -msgstr "Hash bits aangepast naar %d." - -#: src/language/tests/check-model.q:208 -#, c-format -msgid "error opening \"%s\" for writing" -msgstr "fout bij openen \"%s\" voor schrijven" - #: src/language/tests/float-format.c:124 #, c-format msgid "%zu-byte string needed but %zu-byte string supplied." @@ -4448,99 +4334,46 @@ msgstr "" "FORMAT vereist numeriek uitvoer formaat als een argument. Opgegeven formaat %" "s is van het type string." -#: src/language/utilities/set.q:522 -msgid "BLANKS is SYSMIS." -msgstr "" - -#: src/language/utilities/set.q:524 -#, c-format -msgid "BLANKS is %g." -msgstr "" - -#: src/language/utilities/set.q:559 -#, c-format -msgid "%s is \"%s\"." -msgstr "" - -#: src/language/utilities/set.q:595 -#, c-format -msgid "DECIMAL is \"%c\"." +#: src/language/utilities/set.q:668 +msgid "ISL (32-bit IEEE 754 single, little-endian)" msgstr "" -#: src/language/utilities/set.q:601 -#, c-format -msgid "ENDCMD is \"%c\"." +#: src/language/utilities/set.q:671 +msgid "ISB (32-bit IEEE 754 single, big-endian)" msgstr "" -#: src/language/utilities/set.q:609 -#, c-format -msgid "ERRORS is \"%s\"." +#: src/language/utilities/set.q:674 +msgid "IDL (64-bit IEEE 754 double, little-endian)" msgstr "" -#: src/language/utilities/set.q:620 -#, c-format -msgid "FORMAT is %s." +#: src/language/utilities/set.q:677 +msgid "IDB (64-bit IEEE 754 double, big-endian)" msgstr "" -#: src/language/utilities/set.q:626 -#, c-format -msgid "LENGTH is %d." +#: src/language/utilities/set.q:681 +msgid "VF (32-bit VAX F, VAX-endian)" msgstr "" -#: src/language/utilities/set.q:632 -#, c-format -msgid "LOCALE is %s" +#: src/language/utilities/set.q:684 +msgid "VD (64-bit VAX D, VAX-endian)" msgstr "" -#: src/language/utilities/set.q:638 -#, c-format -msgid "MXERRS is %d." +#: src/language/utilities/set.q:687 +msgid "VG (64-bit VAX G, VAX-endian)" msgstr "" -#: src/language/utilities/set.q:644 -#, c-format -msgid "MXLOOPS is %d." +#: src/language/utilities/set.q:691 +msgid "ZS (32-bit IBM Z hexadecimal short, big-endian)" msgstr "" -#: src/language/utilities/set.q:650 -#, c-format -msgid "MXWARNS is %d." +#: src/language/utilities/set.q:694 +msgid "ZL (64-bit IBM Z hexadecimal long, big-endian)" msgstr "" -#: src/language/utilities/set.q:657 src/language/utilities/set.q:708 -#, c-format -msgid "%s is %s (%s)." -msgstr "" - -#: src/language/utilities/set.q:729 -msgid "SCOMPRESSION is ON." -msgstr "" - -#: src/language/utilities/set.q:731 -msgid "SCOMPRESSION is OFF." -msgstr "" - -#: src/language/utilities/set.q:738 -msgid "UNDEFINED is WARN." -msgstr "" - -#: src/language/utilities/set.q:740 -msgid "UNDEFINED is NOWARN." -msgstr "" - -#: src/language/utilities/set.q:748 -msgid "WEIGHT is off." -msgstr "WEGING is uit." - -#: src/language/utilities/set.q:750 -#, c-format -msgid "WEIGHT is variable %s." -msgstr "WEGING is variabele %s." - -#: src/language/utilities/set.q:768 -#, c-format -msgid "WIDTH is %d." -msgstr "BREEDTE is %d." +#: src/language/utilities/set.q:793 +#, fuzzy, c-format +msgid "%s is %s." +msgstr "%s van %s" #: src/language/utilities/title.c:68 #, c-format @@ -4569,7 +4402,7 @@ msgstr "" "Tijdens uitvoeren van COMPUTE: %g is geen geldige waarde als een index in " "vector %s." -#: src/language/xforms/compute.c:354 +#: src/language/xforms/compute.c:353 #, c-format msgid "There is no vector named %s." msgstr "Er is geen vector genaamd %s." @@ -4578,7 +4411,7 @@ msgstr "Er is geen vector genaamd %s." msgid "Destination cannot be a string variable." msgstr "Bestemming kan geen string variabele zijn." -#: src/language/xforms/recode.c:251 +#: src/language/xforms/recode.c:245 msgid "" "Inconsistent target variable types. Target variables must be all numeric or " "all string." @@ -4586,19 +4419,19 @@ msgstr "" "Inconsistent doel variabele types. Doel variabelen moeten allemaal numeriek " "of allemaal string zijn. " -#: src/language/xforms/recode.c:272 +#: src/language/xforms/recode.c:266 msgid "CONVERT requires string input values and numeric output values." msgstr "CONVERT vereist string invoer waardes en numerieke uitvoer waardes." -#: src/language/xforms/recode.c:329 +#: src/language/xforms/recode.c:321 msgid "THRU is not allowed with string variables." msgstr "THRU is niet toegestaan met string variabelen." -#: src/language/xforms/recode.c:407 +#: src/language/xforms/recode.c:400 msgid "expecting output value" msgstr "verwacht uitvoer waarde" -#: src/language/xforms/recode.c:456 +#: src/language/xforms/recode.c:457 #, c-format msgid "" "%zu variable(s) cannot be recoded into %zu variable(s). Specify the same " @@ -4607,7 +4440,7 @@ msgstr "" "%zu variabel(en) kunnen niet gehercodeerd worden in %zu variabel(en). " "Specificeer hetzelfde aantal variabelen als bron en als doel variabelen." -#: src/language/xforms/recode.c:471 +#: src/language/xforms/recode.c:472 #, c-format msgid "" "There is no variable named %s. (All string variables specified on INTO must " @@ -4617,12 +4450,12 @@ msgstr "" "INTO dienen al te bestaan. Gebruik de STRING opdracht om een string " "variabele aan te maken.)" -#: src/language/xforms/recode.c:487 +#: src/language/xforms/recode.c:488 #, c-format msgid "INTO is required with %s input values and %s output values." msgstr "INTO is vereist met %s invoer waardes en %s uitvoer waardes." -#: src/language/xforms/recode.c:500 +#: src/language/xforms/recode.c:501 #, c-format msgid "Type mismatch. Cannot store %s data in %s variable %s." msgstr "Type fout. Kan %s data niet in %s variabele %s opslaan. " @@ -4653,6 +4486,31 @@ msgstr "De filter variabele mag niet scratch zijn." msgid "hash table:" msgstr "hash tabel:" +#: src/libpspp/tmpfile.c:55 +#, c-format +msgid "failed to create temporary file" +msgstr "aanmaken van een tijdelijk bestand is mislukt" + +#: src/libpspp/tmpfile.c:96 +#, c-format +msgid "seeking in temporary file" +msgstr "zoeken in tijdelijk bestand" + +#: src/libpspp/tmpfile.c:115 +#, c-format +msgid "reading temporary file" +msgstr "lezen tijdelijk bestand" + +#: src/libpspp/tmpfile.c:117 +#, c-format +msgid "unexpected end of file reading temporary file" +msgstr "onverwacht einde bestand bij het lezen van tijdelijk bestand" + +#: src/libpspp/tmpfile.c:136 +#, c-format +msgid "writing to temporary file" +msgstr "schrijven naar tijdelijk bestand" + #: src/math/percentiles.c:35 msgid "HAverage" msgstr "" @@ -5090,6 +4948,14 @@ msgid "" "bad box: (%d+%d=%d,%d+%d=%d)-(%d+%d=%d,%d+%d=%d) in table size (%d,%d)\n" msgstr "" +#: src/ui/gui/about.c:64 +msgid "A program for the analysis of sampled data" +msgstr "" + +#: src/ui/gui/about.c:73 +msgid "translator-credits" +msgstr "" + #: src/ui/gui/comments-dialog.c:58 #, c-format msgid "Column Number: %d" @@ -5129,7 +4995,7 @@ msgstr "" #: src/ui/gui/crosstabs-dialog.c:53 src/ui/gui/crosstabs-dialog.c:64 #: src/ui/gui/crosstabs-dialog.c:99 src/ui/gui/crosstabs-dialog.c:107 -#: src/ui/gui/psppire-var-store.c:559 src/ui/gui/var-display.c:16 +#: src/ui/gui/psppire-var-store.c:568 src/ui/gui/var-display.c:16 #: src/ui/gui/variable-info-dialog.c:40 msgid "None" msgstr "Geen" @@ -5183,7 +5049,7 @@ msgstr "Print tabellen" msgid "Pivot" msgstr "" -#: src/ui/gui/crosstabs.glade:253 src/ui/gui/psppire.glade:781 +#: src/ui/gui/crosstabs.glade:253 src/ui/gui/psppire.glade:756 msgid "Ascending" msgstr "Oplopend" @@ -5258,7 +5124,7 @@ msgid "_Edit" msgstr "" #: src/ui/gui/data-editor.glade:174 src/ui/gui/data-editor.glade:843 -#: src/ui/gui/psppire-data-window.c:844 src/ui/gui/psppire-data-window.c:934 +#: src/ui/gui/psppire-data-window.c:843 src/ui/gui/psppire-data-window.c:933 msgid "Insert Variable" msgstr "Invoegen Variabele" @@ -5455,7 +5321,7 @@ msgstr "_Over" msgid "Open" msgstr "" -#: src/ui/gui/data-editor.glade:712 src/ui/gui/psppire-data-window.c:582 +#: src/ui/gui/data-editor.glade:712 src/ui/gui/psppire-data-window.c:581 msgid "Save" msgstr "Opslaan" @@ -5483,7 +5349,7 @@ msgstr "Variabelen" msgid "Find" msgstr "Vind" -#: src/ui/gui/data-editor.glade:831 src/ui/gui/psppire-data-window.c:898 +#: src/ui/gui/data-editor.glade:831 src/ui/gui/psppire-data-window.c:897 msgid "Insert Case" msgstr "Invoegen Case" @@ -5598,7 +5464,7 @@ msgstr "Herhaal waardes" msgid "Missing Values" msgstr "Ontbrekende Waardes" -#: src/ui/gui/find-dialog.c:657 +#: src/ui/gui/find-dialog.c:658 #, c-format msgid "Bad regular expression: %s" msgstr "Foutieve regulaire expressie: %s" @@ -5644,7 +5510,7 @@ msgstr "" msgid "Standard error of the kurtosis" msgstr "" -#: src/ui/gui/frequencies.glade:98 src/ui/gui/psppire.glade:277 +#: src/ui/gui/frequencies.glade:98 src/ui/gui/psppire.glade:252 #: src/ui/gui/rank.glade:103 msgid "Variable(s):" msgstr "Variabele(n):" @@ -5887,10 +5753,17 @@ msgstr "Data Weergave" msgid "Variable View" msgstr "Variabele Weergave" -#: src/ui/gui/psppire-data-store.c:746 +#: src/ui/gui/psppire-data-store.c:761 msgid "var" msgstr "" +#: src/ui/gui/psppire-data-store.c:771 src/ui/gui/psppire-var-store.c:655 +#: src/ui/gui/psppire-var-store.c:665 src/ui/gui/psppire-var-store.c:675 +#: src/ui/gui/psppire-var-store.c:786 +#, c-format +msgid "%d" +msgstr "" + #: src/ui/gui/psppire-data-window.c:213 msgid "Transformations Pending" msgstr "Transformaties Uitstaand" @@ -5921,179 +5794,179 @@ msgstr "Weging uit" msgid "Weight by %s" msgstr "Weeg op %s" -#: src/ui/gui/psppire-data-window.c:387 src/ui/gui/psppire-data-window.c:590 +#: src/ui/gui/psppire-data-window.c:387 src/ui/gui/psppire-data-window.c:589 msgid "System Files (*.sav)" msgstr "Systeem Bestand (*.sav)" -#: src/ui/gui/psppire-data-window.c:393 src/ui/gui/psppire-data-window.c:596 +#: src/ui/gui/psppire-data-window.c:393 src/ui/gui/psppire-data-window.c:595 msgid "Portable Files (*.por) " msgstr "Overdraagbaar (Portable) Bestand (*.por)" -#: src/ui/gui/psppire-data-window.c:399 src/ui/gui/psppire-data-window.c:602 +#: src/ui/gui/psppire-data-window.c:399 src/ui/gui/psppire-data-window.c:601 #: src/ui/gui/psppire-syntax-window.c:298 #: src/ui/gui/psppire-syntax-window.c:385 msgid "All Files" msgstr "Alle bestanden" -#: src/ui/gui/psppire-data-window.c:610 +#: src/ui/gui/psppire-data-window.c:609 msgid "System File" msgstr "Systeem Bestand" -#: src/ui/gui/psppire-data-window.c:615 +#: src/ui/gui/psppire-data-window.c:614 msgid "Portable File" msgstr "Overdraagbaar (Portable) Bestand" -#: src/ui/gui/psppire-data-window.c:765 +#: src/ui/gui/psppire-data-window.c:764 msgid "Font Selection" msgstr "Font Selectie" -#: src/ui/gui/psppire-data-window.c:833 +#: src/ui/gui/psppire-data-window.c:832 msgid "Sort Ascending" msgstr "Sorteer oplopend" -#: src/ui/gui/psppire-data-window.c:839 +#: src/ui/gui/psppire-data-window.c:838 msgid "Sort Descending" msgstr "Sorteer aflopend" -#: src/ui/gui/psppire-data-window.c:847 src/ui/gui/psppire-data-window.c:901 -#: src/ui/gui/psppire-data-window.c:937 src/ui/gui/psppire-data-window.c:1302 -#: src/ui/gui/psppire-data-window.c:1320 +#: src/ui/gui/psppire-data-window.c:846 src/ui/gui/psppire-data-window.c:900 +#: src/ui/gui/psppire-data-window.c:936 src/ui/gui/psppire-data-window.c:1301 +#: src/ui/gui/psppire-data-window.c:1319 msgid "Clear" msgstr "Ruimop" -#: src/ui/gui/psppire-data-window.c:1179 +#: src/ui/gui/psppire-data-window.c:1178 msgid "Open a data file" msgstr "Open een data bestand" -#: src/ui/gui/psppire-data-window.c:1197 +#: src/ui/gui/psppire-data-window.c:1196 msgid "New data file" msgstr "Nieuw data bestand" -#: src/ui/gui/psppire-data-window.c:1212 +#: src/ui/gui/psppire-data-window.c:1211 msgid "Import text data file" msgstr "Importeer text data bestand" -#: src/ui/gui/psppire-data-window.c:1228 src/ui/gui/psppire-data-window.c:1245 +#: src/ui/gui/psppire-data-window.c:1227 src/ui/gui/psppire-data-window.c:1244 msgid "Save data to file" msgstr "Data opslaan als bestand" -#: src/ui/gui/psppire-data-window.c:1244 +#: src/ui/gui/psppire-data-window.c:1243 msgid "Save As" msgstr "Opslaan Als" -#: src/ui/gui/psppire-data-window.c:1283 +#: src/ui/gui/psppire-data-window.c:1282 msgid "Show/hide value labels" msgstr "Show/verberg waarde labels" -#: src/ui/gui/psppire-data-window.c:1303 +#: src/ui/gui/psppire-data-window.c:1302 msgid "Delete the cases at the selected position(s)" msgstr "Verwijder de cases op de geselecteerde positie(s)" -#: src/ui/gui/psppire-data-window.c:1321 +#: src/ui/gui/psppire-data-window.c:1320 msgid "Delete the variables at the selected position(s)" msgstr "Verwijder de variabele op de geselecteerde positie(s)" -#: src/ui/gui/psppire-data-window.c:1339 +#: src/ui/gui/psppire-data-window.c:1338 msgid "Create a new variable at the current position" msgstr "Creëer een nieuwe variabele op de huidige positie" -#: src/ui/gui/psppire-data-window.c:1354 +#: src/ui/gui/psppire-data-window.c:1353 msgid "Create a new case at the current position" msgstr "Creëer een nieuwe case op de huidige positie" -#: src/ui/gui/psppire-data-window.c:1370 +#: src/ui/gui/psppire-data-window.c:1369 msgid "Jump to a Case in the Data Sheet" msgstr "Spring naar een Case in het Data Blad" -#: src/ui/gui/psppire-data-window.c:1386 +#: src/ui/gui/psppire-data-window.c:1385 msgid "Weight cases by variable" msgstr "Weeg cases per variabele" -#: src/ui/gui/psppire-data-window.c:1400 +#: src/ui/gui/psppire-data-window.c:1399 msgid "Transpose the cases with the variables" msgstr "Herschik de cases met de variabelen" -#: src/ui/gui/psppire-data-window.c:1414 +#: src/ui/gui/psppire-data-window.c:1413 msgid "Split the active file" msgstr "Splits het actieve bestand" -#: src/ui/gui/psppire-data-window.c:1429 +#: src/ui/gui/psppire-data-window.c:1428 msgid "Sort cases in the active file" msgstr "Sorteer cases in het actieve bestand" -#: src/ui/gui/psppire-data-window.c:1443 +#: src/ui/gui/psppire-data-window.c:1442 msgid "Select cases from the active file" msgstr "Selecteer cases van het actieve bestand" -#: src/ui/gui/psppire-data-window.c:1457 +#: src/ui/gui/psppire-data-window.c:1456 msgid "Compute new values for a variable" msgstr "Bereken nieuwe waardes voor een variabele" -#: src/ui/gui/psppire-data-window.c:1471 +#: src/ui/gui/psppire-data-window.c:1470 msgid "Perform one way analysis of variance" msgstr "" -#: src/ui/gui/psppire-data-window.c:1486 +#: src/ui/gui/psppire-data-window.c:1485 msgid "Calculate T Test for samples from independent groups" msgstr "" -#: src/ui/gui/psppire-data-window.c:1500 +#: src/ui/gui/psppire-data-window.c:1499 msgid "Calculate T Test for paired samples" msgstr "" -#: src/ui/gui/psppire-data-window.c:1514 +#: src/ui/gui/psppire-data-window.c:1513 msgid "Calculate T Test for sample from a single distribution" msgstr "" -#: src/ui/gui/psppire-data-window.c:1529 +#: src/ui/gui/psppire-data-window.c:1528 msgid "Commentary text for the data file" msgstr "Commentaar tekst voor het data bestand" -#: src/ui/gui/psppire-data-window.c:1555 +#: src/ui/gui/psppire-data-window.c:1554 msgid "Rank Cases" msgstr "Rangschik Cases" -#: src/ui/gui/psppire-data-window.c:1569 +#: src/ui/gui/psppire-data-window.c:1568 msgid "Recode values into the same variables" msgstr "Hercodeer waardes in dezelfde Variabelen" -#: src/ui/gui/psppire-data-window.c:1583 +#: src/ui/gui/psppire-data-window.c:1582 msgid "Recode values into different variables" msgstr "Hercodeer waardes in andere Variabelen" -#: src/ui/gui/psppire-data-window.c:1597 +#: src/ui/gui/psppire-data-window.c:1596 msgid "Jump to variable" msgstr "Spring naar Variabele" -#: src/ui/gui/psppire-data-window.c:1610 +#: src/ui/gui/psppire-data-window.c:1609 msgid "Calculate descriptive statistics (mean, variance, ...)" msgstr "Bereken descriptive statistieken (mean, variance, ...)" -#: src/ui/gui/psppire-data-window.c:1624 +#: src/ui/gui/psppire-data-window.c:1623 msgid "Generate frequency statistics" msgstr "Genereer frequentie statistieken" -#: src/ui/gui/psppire-data-window.c:1638 +#: src/ui/gui/psppire-data-window.c:1637 msgid "Generate crosstabulations" msgstr "" -#: src/ui/gui/psppire-data-window.c:1653 +#: src/ui/gui/psppire-data-window.c:1652 msgid "Examine Data by Factors" msgstr "" -#: src/ui/gui/psppire-data-window.c:1667 +#: src/ui/gui/psppire-data-window.c:1666 msgid "Estimate parameters of the linear model" msgstr "" -#: src/ui/gui/psppire-data-window.c:1681 src/ui/gui/reliability.glade:7 +#: src/ui/gui/psppire-data-window.c:1680 src/ui/gui/reliability.glade:7 msgid "Reliability Analysis" msgstr "" -#: src/ui/gui/psppire-data-window.c:1844 +#: src/ui/gui/psppire-data-window.c:1843 msgid "Split the window vertically and horizontally" msgstr "Splits het venster verticaal en horizontaal" -#: src/ui/gui/psppire-data-window.c:1886 +#: src/ui/gui/psppire-data-window.c:1885 msgid "Data Editor" msgstr "" @@ -6113,184 +5986,178 @@ msgstr "Hoeveel dingen kunnen worden geselecteerd" msgid "Prefer variable labels" msgstr "Prefereer variabele labels" -#: src/ui/gui/psppire.glade:10 -msgid "" -"This is beta status software. Please report bugs to bug-gnu-pspp@gnu.org" -msgstr "" -"Dit is beta status software. Rapporteer bugs s.v.p. bij bug-gnu-pspp@gnu.org" - -#: src/ui/gui/psppire.glade:72 src/ui/gui/psppire.glade:155 +#: src/ui/gui/psppire.glade:47 src/ui/gui/psppire.glade:130 #: src/ui/gui/weight-cases-dialog.c:79 msgid "Do not weight cases" msgstr "Weeg cases niet" -#: src/ui/gui/psppire.glade:83 +#: src/ui/gui/psppire.glade:58 msgid "Weight cases by" msgstr "Weeg cases op" -#: src/ui/gui/psppire.glade:108 +#: src/ui/gui/psppire.glade:83 msgid "Frequency Variable" msgstr "Frequencie Variabele" -#: src/ui/gui/psppire.glade:148 +#: src/ui/gui/psppire.glade:123 msgid "Current Status: " msgstr "Huidige Status:" -#: src/ui/gui/psppire.glade:244 +#: src/ui/gui/psppire.glade:219 msgid "Name Variable:" msgstr "Naam Variabele:" -#: src/ui/gui/psppire.glade:429 +#: src/ui/gui/psppire.glade:404 msgid "Analyze all cases. Do not create groups." msgstr "Analyseer alle cases. Creëer geen groepen." -#: src/ui/gui/psppire.glade:440 +#: src/ui/gui/psppire.glade:415 msgid "Compare groups." msgstr "Vergelijk groepen." -#: src/ui/gui/psppire.glade:454 +#: src/ui/gui/psppire.glade:429 msgid "Organize output by groups." msgstr "Organiseer uitvoer per groepen." -#: src/ui/gui/psppire.glade:502 +#: src/ui/gui/psppire.glade:477 msgid "Groups based on:" msgstr "Groepen gebaseerd op:" -#: src/ui/gui/psppire.glade:565 +#: src/ui/gui/psppire.glade:540 msgid "Sort the file by grouping variables." msgstr "Sorteer bestand op groepering variabelen." -#: src/ui/gui/psppire.glade:577 +#: src/ui/gui/psppire.glade:552 msgid "File is already sorted." msgstr "Bestand is al gesorteerd." -#: src/ui/gui/psppire.glade:622 +#: src/ui/gui/psppire.glade:597 msgid "Current Status : " msgstr "Huidige Status : " -#: src/ui/gui/psppire.glade:630 +#: src/ui/gui/psppire.glade:605 msgid "Analysis by groups is off" msgstr "Analyseer per groep is uit" -#: src/ui/gui/psppire.glade:729 +#: src/ui/gui/psppire.glade:704 msgid "Sort by:" msgstr "Sorteer op:" -#: src/ui/gui/psppire.glade:792 +#: src/ui/gui/psppire.glade:767 msgid "Descending" msgstr "Aflopend" -#: src/ui/gui/psppire.glade:809 +#: src/ui/gui/psppire.glade:784 msgid "Sort Order" msgstr "Sorteer Volgorde" -#: src/ui/gui/psppire.glade:878 +#: src/ui/gui/psppire.glade:853 msgid "Target Variable:" msgstr "Doel Variabele:" -#: src/ui/gui/psppire.glade:909 +#: src/ui/gui/psppire.glade:884 msgid "Type & Label" msgstr "" -#: src/ui/gui/psppire.glade:949 +#: src/ui/gui/psppire.glade:924 msgid "=" msgstr "" -#: src/ui/gui/psppire.glade:995 +#: src/ui/gui/psppire.glade:970 msgid "Numeric Expressions:" msgstr "Numerieke Expressies:" -#: src/ui/gui/psppire.glade:1049 +#: src/ui/gui/psppire.glade:1024 msgid "Functions:" msgstr "Functies:" -#: src/ui/gui/psppire.glade:1112 src/ui/gui/psppire.glade:1516 +#: src/ui/gui/psppire.glade:1087 src/ui/gui/psppire.glade:1491 #: src/ui/gui/recode.glade:731 msgid "If..." msgstr "Als..." -#: src/ui/gui/psppire.glade:1345 +#: src/ui/gui/psppire.glade:1320 msgid "Use filter variable" msgstr "Gebruik filter variabele" -#: src/ui/gui/psppire.glade:1398 +#: src/ui/gui/psppire.glade:1373 msgid "Based on time or case range" msgstr "Gebaseerd op tijd of case volgorde" -#: src/ui/gui/psppire.glade:1411 +#: src/ui/gui/psppire.glade:1386 msgid "Range..." msgstr "" -#: src/ui/gui/psppire.glade:1450 +#: src/ui/gui/psppire.glade:1425 msgid "Random sample of cases" msgstr "Random steekproef van cases" -#: src/ui/gui/psppire.glade:1464 +#: src/ui/gui/psppire.glade:1439 msgid "Sample..." msgstr "Steekproef..." -#: src/ui/gui/psppire.glade:1502 +#: src/ui/gui/psppire.glade:1477 msgid "If condition is satisfied" msgstr "Aan If conditie is voldaan" -#: src/ui/gui/psppire.glade:1551 +#: src/ui/gui/psppire.glade:1526 msgid "All Cases" msgstr "Alle Cases" -#: src/ui/gui/psppire.glade:1566 +#: src/ui/gui/psppire.glade:1541 msgid "Select" msgstr "Selecteer" -#: src/ui/gui/psppire.glade:1595 +#: src/ui/gui/psppire.glade:1570 msgid "Filtered" msgstr "Gefilterd" -#: src/ui/gui/psppire.glade:1606 +#: src/ui/gui/psppire.glade:1581 msgid "Deleted" msgstr "Verwijderd" -#: src/ui/gui/psppire.glade:1624 +#: src/ui/gui/psppire.glade:1599 msgid "Unselected Cases Are" msgstr "Niet geselecteerde Cases zijn" -#: src/ui/gui/psppire.glade:1689 +#: src/ui/gui/psppire.glade:1664 msgid "Comments:" msgstr "Commentaren:" -#: src/ui/gui/psppire.glade:1731 +#: src/ui/gui/psppire.glade:1706 msgid "Display comments in output" msgstr "Toon commentaren in uitvoer" -#: src/ui/gui/psppire.glade:1746 +#: src/ui/gui/psppire.glade:1721 msgid "Column Number: 0" msgstr "Kolom Nummer: 0" -#: src/ui/gui/psppire.glade:1829 +#: src/ui/gui/psppire.glade:1804 msgid "First case" msgstr "Eerste case" -#: src/ui/gui/psppire.glade:1842 +#: src/ui/gui/psppire.glade:1817 msgid "Last case" msgstr "Laatste case" -#: src/ui/gui/psppire.glade:1855 +#: src/ui/gui/psppire.glade:1830 msgid "Observation" msgstr "Observatie" -#: src/ui/gui/psppire.glade:1919 +#: src/ui/gui/psppire.glade:1894 msgid "Use expression as label" msgstr "Gebruik expressie als label" -#: src/ui/gui/psppire.glade:2045 src/ui/gui/psppire-var-sheet.c:540 -#: src/ui/gui/psppire-var-store.c:786 +#: src/ui/gui/psppire.glade:2020 src/ui/gui/psppire-var-sheet.c:529 +#: src/ui/gui/psppire-var-store.c:795 msgid "Width" msgstr "Breedte" -#: src/ui/gui/psppire.glade:2175 +#: src/ui/gui/psppire.glade:2150 msgid "Goto Case Number:" msgstr "Ga naar Case Nummer:" -#: src/ui/gui/psppire.glade:2312 +#: src/ui/gui/psppire.glade:2287 msgid "Sample Size" msgstr "Steekproef Grootte" @@ -6325,47 +6192,47 @@ msgstr "" msgid "Cannot load syntax file '%s'" msgstr "Kan syntax bestand \"%s\" niet laden" -#: src/ui/gui/psppire-var-sheet.c:538 src/ui/gui/psppire-var-store.c:784 +#: src/ui/gui/psppire-var-sheet.c:527 src/ui/gui/psppire-var-store.c:793 msgid "Name" msgstr "Naam" -#: src/ui/gui/psppire-var-sheet.c:541 src/ui/gui/psppire-var-store.c:787 +#: src/ui/gui/psppire-var-sheet.c:530 src/ui/gui/psppire-var-store.c:796 msgid "Decimals" msgstr "Decimalen" -#: src/ui/gui/psppire-var-sheet.c:543 src/ui/gui/psppire-var-store.c:789 +#: src/ui/gui/psppire-var-sheet.c:532 src/ui/gui/psppire-var-store.c:798 msgid "Values" msgstr "Waardes" -#: src/ui/gui/psppire-var-sheet.c:546 src/ui/gui/psppire-var-store.c:792 +#: src/ui/gui/psppire-var-sheet.c:535 src/ui/gui/psppire-var-store.c:801 msgid "Align" msgstr "Uitlijnen" -#: src/ui/gui/psppire-var-sheet.c:547 src/ui/gui/psppire-var-store.c:793 +#: src/ui/gui/psppire-var-sheet.c:536 src/ui/gui/psppire-var-store.c:802 msgid "Measure" msgstr "Meting" -#: src/ui/gui/psppire-var-store.c:569 src/ui/gui/var-sheet-dialogs.glade:43 +#: src/ui/gui/psppire-var-store.c:578 src/ui/gui/var-sheet-dialogs.glade:43 msgid "Comma" msgstr "Komma" -#: src/ui/gui/psppire-var-store.c:570 src/ui/gui/var-sheet-dialogs.glade:59 +#: src/ui/gui/psppire-var-store.c:579 src/ui/gui/var-sheet-dialogs.glade:59 msgid "Dot" msgstr "Punt" -#: src/ui/gui/psppire-var-store.c:571 +#: src/ui/gui/psppire-var-store.c:580 msgid "Scientific" msgstr "Wetenschappelijk" -#: src/ui/gui/psppire-var-store.c:572 src/ui/gui/var-sheet-dialogs.glade:91 +#: src/ui/gui/psppire-var-store.c:581 src/ui/gui/var-sheet-dialogs.glade:91 msgid "Date" msgstr "Datum" -#: src/ui/gui/psppire-var-store.c:573 src/ui/gui/var-sheet-dialogs.glade:107 +#: src/ui/gui/psppire-var-store.c:582 src/ui/gui/var-sheet-dialogs.glade:107 msgid "Dollar" msgstr "Euro" -#: src/ui/gui/psppire-var-store.c:574 +#: src/ui/gui/psppire-var-store.c:583 msgid "Custom" msgstr "Aangepast" @@ -6981,11 +6848,11 @@ msgstr "Ontbrekende Waardes: %s\n" msgid "Measurement Level: %s\n" msgstr "Meetniveau: %s\n" -#: src/ui/gui/variable-info-dialog.c:124 +#: src/ui/gui/variable-info-dialog.c:125 msgid "Value Labels:\n" msgstr "Waarde Labels:\n" -#: src/ui/gui/variable-info-dialog.c:137 +#: src/ui/gui/variable-info-dialog.c:138 #, c-format msgid "%s %s\n" msgstr "" @@ -7177,5 +7044,90 @@ msgstr "Print een lijst van bekende driver classes en eindig daarna" msgid "Start an interactive session" msgstr "Start een interactieve sessie" +#~ msgid "Bad variable width %d." +#~ msgstr "Foutieve variabele breedte %d." + +#~ msgid "File specifies unexpected value %g as HIGHEST." +#~ msgstr "Bestand specificeert onverwachte waarde %g als HIGHEST." + +#~ msgid "File specifies unexpected value %g as LOWEST." +#~ msgstr "Bestand specificeert onverwachte waarde %g als LOWEST." + +#~ msgid "%s is unimplemented." +#~ msgstr "%s is niet geïmplementeerd." + +#~ msgid "Bad character in input: `\\%o'." +#~ msgstr "Fout karakter in input: '\\%o'." + +#~ msgid "WEIGHT is off." +#~ msgstr "WEGING is uit." + +#~ msgid "WEIGHT is variable %s." +#~ msgstr "WEGING is variabele %s." + +#~ msgid "WIDTH is %d." +#~ msgstr "BREEDTE is %d." + +#~ msgid "" +#~ "Ignoring missing values on long string variable %s, which PSPP does not " +#~ "yet support." +#~ msgstr "" +#~ "Negeren van missing values voor lange string variabele %s, wat PSPP nog " +#~ "niet ondersteunt." + +#~ msgid "" +#~ "Ignoring value labels for long string variables, which PSPP does not yet " +#~ "support." +#~ msgstr "" +#~ "Negeer waarde labels voor lange string variabelen, die door PSPP nog niet " +#~ "ondersteund worden." + +#~ msgid "Cannot add value labels from source file to long string variable %s." +#~ msgstr "" +#~ "Kan geen value labels van bron bestand toevoegen aan lange string " +#~ "variabele %s." + +#~ msgid "" +#~ "It is not possible to assign value labels to long string variables such " +#~ "as %s." +#~ msgstr "" +#~ "Het is niet mogelijk om waarde labels aan lange string variabelen als %s " +#~ "toe te kennen." + +#~ msgid "Write mode ALL not allowed in general mode. Assuming WRITE=CELLS." +#~ msgstr "" +#~ "Write modus ALL niet toegestaan in algemen modus. WRITE=CELLS aangenomen." + +#~ msgid "Error writing FLIP file: %s." +#~ msgstr "Fout tijdens het schrijven van FLIP bestand: %s." + +#~ msgid "Could not create acceptable variant for variable %s." +#~ msgstr "Kon geen acceptabele variant voor variabele %s creëren." + +#~ msgid "Cannot create more than 99999 variable names." +#~ msgstr "Kan niet meer dan 99999 variabele namen creëren." + +#~ msgid "Long string variable %s is not valid here." +#~ msgstr "Lange string variabele %s is niet geldig hier." + +#~ msgid "PATH and SEARCH subcommands are mutually exclusive. Ignoring PATH." +#~ msgstr "" +#~ "PATH en SEARCH subopdrachten zijn wederzijds uitsluitend. PATH genegeerd. " + +#~ msgid "At least one value must be specified on PATH." +#~ msgstr "Tenminste 1 waarde dient bij PATH opgegeven te zijn." + +#~ msgid "Hash bits adjusted to %d." +#~ msgstr "Hash bits aangepast naar %d." + +#~ msgid "error opening \"%s\" for writing" +#~ msgstr "fout bij openen \"%s\" voor schrijven" + +#~ msgid "" +#~ "This is beta status software. Please report bugs to bug-gnu-pspp@gnu.org" +#~ msgstr "" +#~ "Dit is beta status software. Rapporteer bugs s.v.p. bij bug-gnu-pspp@gnu." +#~ "org" + #~ msgid "Diagnositic options:" #~ msgstr "Diagnostische opties:" diff --git a/src/data/case.c b/src/data/case.c index a4a78dd0..dc402926 100644 --- a/src/data/case.c +++ b/src/data/case.c @@ -308,7 +308,7 @@ case_num_idx (const struct ccase *c, size_t idx) Like the strings embedded in all "union value"s, the return value is not null-terminated. */ -const char * +const uint8_t * case_str (const struct ccase *c, const struct variable *v) { size_t idx = var_get_case_index (v); @@ -321,7 +321,7 @@ case_str (const struct ccase *c, const struct variable *v) Like the strings embedded in all "union value"s, the return value is not null-terminated. */ -const char * +const uint8_t * case_str_idx (const struct ccase *c, size_t idx) { assert (idx < c->proto->n_widths); @@ -336,7 +336,7 @@ case_str_idx (const struct ccase *c, size_t idx) Like the strings embedded in all "union value"s, the return value is not null-terminated. */ -char * +uint8_t * case_str_rw (struct ccase *c, const struct variable *v) { size_t idx = var_get_case_index (v); @@ -352,7 +352,7 @@ case_str_rw (struct ccase *c, const struct variable *v) Like the strings embedded in all "union value"s, the return value is not null-terminated. */ -char * +uint8_t * case_str_rw_idx (struct ccase *c, size_t idx) { assert (idx < c->proto->n_widths); diff --git a/src/data/case.h b/src/data/case.h index 36feb15f..0bfc62cd 100644 --- a/src/data/case.h +++ b/src/data/case.h @@ -94,10 +94,10 @@ union value *case_data_rw_idx (struct ccase *, size_t idx); double case_num (const struct ccase *, const struct variable *); double case_num_idx (const struct ccase *, size_t idx); -const char *case_str (const struct ccase *, const struct variable *); -const char *case_str_idx (const struct ccase *, size_t idx); -char *case_str_rw (struct ccase *, const struct variable *); -char *case_str_rw_idx (struct ccase *, size_t idx); +const uint8_t *case_str (const struct ccase *, const struct variable *); +const uint8_t *case_str_idx (const struct ccase *, size_t idx); +uint8_t *case_str_rw (struct ccase *, const struct variable *); +uint8_t *case_str_rw_idx (struct ccase *, size_t idx); int case_compare (const struct ccase *, const struct ccase *, const struct variable *const *, size_t n_vars); diff --git a/src/data/data-in.c b/src/data/data-in.c index eda6d125..33e369f9 100644 --- a/src/data/data-in.c +++ b/src/data/data-in.c @@ -34,9 +34,11 @@ #include "settings.h" #include "value.h" #include "format.h" +#include "dictionary.h" #include #include +#include #include #include #include @@ -53,7 +55,7 @@ /* Information about parsing one data field. */ struct data_in { - enum legacy_encoding encoding;/* Encoding of source. */ + const char *src_enc; /* Encoding of source. */ struct substring input; /* Source. */ enum fmt_type format; /* Input format. */ int implied_decimals; /* Number of implied decimal places. */ @@ -88,6 +90,9 @@ static int hexit_value (int c); representation in OUTPUT, which the caller must have initialized with the given WIDTH (0 for a numeric field, otherwise the string width). + Iff FORMAT is a string format, then DICT must be a pointer + to the dictionary associated with OUTPUT. Otherwise, DICT + may be null. If no decimal point is included in a numeric format, then IMPLIED_DECIMALS decimal places are implied. Specify 0 if no @@ -100,9 +105,11 @@ static int hexit_value (int c); FIRST_COLUMN plus the length of the input because of the possibility of escaped quotes in strings, etc.) */ bool -data_in (struct substring input, enum legacy_encoding encoding, +data_in (struct substring input, const char *encoding, enum fmt_type format, int implied_decimals, - int first_column, int last_column, union value *output, int width) + int first_column, int last_column, + const struct dictionary *dict, + union value *output, int width) { static data_in_parser_func *const handlers[FMT_NUMBER_OF_FORMATS] = { @@ -111,25 +118,11 @@ data_in (struct substring input, enum legacy_encoding encoding, }; struct data_in i; - void *copy = NULL; + bool ok; assert ((width != 0) == fmt_is_string (format)); - if (encoding == LEGACY_NATIVE - || fmt_get_category (format) & (FMT_CAT_BINARY | FMT_CAT_STRING)) - { - i.input = input; - i.encoding = encoding; - } - else - { - ss_alloc_uninit (&i.input, ss_length (input)); - legacy_recode (encoding, ss_data (input), LEGACY_NATIVE, - ss_data (i.input), ss_length (input)); - i.encoding = LEGACY_NATIVE; - copy = ss_data (i.input); - } i.format = format; i.implied_decimals = implied_decimals; @@ -138,21 +131,39 @@ data_in (struct substring input, enum legacy_encoding encoding, i.first_column = first_column; i.last_column = last_column; + i.src_enc = encoding; - if (!ss_is_empty (i.input)) + if (ss_is_empty (input)) { - ok = handlers[i.format] (&i); - if (!ok) - default_result (&i); + default_result (&i); + return true; + } + + if (fmt_get_category (format) & ( FMT_CAT_BINARY | FMT_CAT_HEXADECIMAL | FMT_CAT_LEGACY)) + { + i.input = input; } else { - default_result (&i); - ok = true; + const char *dest_encoding; + char *s = NULL; + if ( dict == NULL) + { + assert (0 == (fmt_get_category (format) & (FMT_CAT_BINARY | FMT_CAT_STRING))); + dest_encoding = LEGACY_NATIVE; + } + else + dest_encoding = dict_get_encoding (dict); + + s = recode_string (dest_encoding, i.src_enc, ss_data (input), ss_length (input)); + ss_alloc_uninit (&i.input, strlen (s)); + memcpy (ss_data (i.input), s, ss_length (input)); + free (s); } - if (copy) - free (copy); + ok = handlers[i.format] (&i); + if (!ok) + default_result (&i); return ok; } @@ -608,12 +619,13 @@ parse_A (struct data_in *i) { /* This is equivalent to buf_copy_rpad, except that we posibly do a character set recoding in the middle. */ - char *dst = value_str_rw (i->output, i->width); + uint8_t *dst = value_str_rw (i->output, i->width); size_t dst_size = i->width; const char *src = ss_data (i->input); size_t src_size = ss_length (i->input); - legacy_recode (i->encoding, src, LEGACY_NATIVE, dst, MIN (src_size, dst_size)); + memcpy (dst, src, MIN (src_size, dst_size)); + if (dst_size > src_size) memset (&dst[src_size], ' ', dst_size - src_size); @@ -624,7 +636,7 @@ parse_A (struct data_in *i) static bool parse_AHEX (struct data_in *i) { - char *s = value_str_rw (i->output, i->width); + uint8_t *s = value_str_rw (i->output, i->width); size_t j; for (j = 0; ; j++) @@ -639,10 +651,10 @@ parse_AHEX (struct data_in *i) return false; } - if (i->encoding != LEGACY_NATIVE) + if (0 != strcmp (i->src_enc, LEGACY_NATIVE)) { - hi = legacy_to_native (i->encoding, hi); - lo = legacy_to_native (i->encoding, lo); + hi = legacy_to_native (i->src_enc, hi); + lo = legacy_to_native (i->src_enc, lo); } if (!c_isxdigit (hi) || !c_isxdigit (lo)) { diff --git a/src/data/data-in.h b/src/data/data-in.h index 3a8d67cc..3ebd5933 100644 --- a/src/data/data-in.h +++ b/src/data/data-in.h @@ -26,9 +26,11 @@ enum fmt_type; union value; -bool data_in (struct substring input, enum legacy_encoding, +struct dictionary; +bool data_in (struct substring input, const char *encoding, enum fmt_type, int implied_decimals, int first_column, int last_column, + const struct dictionary *dict, union value *output, int width); #endif /* data/data-in.h */ diff --git a/src/data/data-out.c b/src/data/data-out.c index e7800a8f..94a6130a 100644 --- a/src/data/data-out.c +++ b/src/data/data-out.c @@ -36,6 +36,8 @@ #include #include #include +#include +#include #include "minmax.h" @@ -83,38 +85,68 @@ static void output_binary_integer (uint64_t, int bytes, enum integer_format, char *); static void output_hex (const void *, size_t bytes, char *); -/* Same as data_out, and additionally recodes the output from - native form into the given legacy character ENCODING. */ -void -data_out_legacy (const union value *input, enum legacy_encoding encoding, - const struct fmt_spec *format, char *output) -{ - static data_out_converter_func *const converters[FMT_NUMBER_OF_FORMATS] = + +static data_out_converter_func *const converters[FMT_NUMBER_OF_FORMATS] = { #define FMT(NAME, METHOD, IMIN, OMIN, IO, CATEGORY) output_##METHOD, #include "format.def" }; +/* Similar to data_out. Additionally recodes the output from + native form into the given legacy character ENCODING. + OUTPUT must be provided by the caller and must be at least + FORMAT->w long. No null terminator is appended to OUTPUT. +*/ +void +data_out_legacy (const union value *input, const char *encoding, + const struct fmt_spec *format, char *output) +{ assert (fmt_check_output (format)); converters[format->type] (input, format, output); - if (encoding != LEGACY_NATIVE + if (0 != strcmp (encoding, LEGACY_NATIVE) && fmt_get_category (format->type) != FMT_CAT_BINARY) - legacy_recode (LEGACY_NATIVE, output, encoding, output, format->w); + { + char *s = recode_string (encoding, LEGACY_NATIVE, output, format->w ); + memcpy (output, s, format->w); + free (s); + } } -/* Converts the INPUT value into printable form in the exactly - FORMAT->W characters in OUTPUT according to format - specification FORMAT. No null terminator is appended to the - buffer. +/* Converts the INPUT value into a UTF8 encoded string, according + to format specification FORMAT. VALUE must be the correct width for FORMAT, that is, its - width must be fmt_var_width(FORMAT). */ -void -data_out (const union value *input, const struct fmt_spec *format, - char *output) + width must be fmt_var_width(FORMAT). + + ENCODING must be the encoding of INPUT. Normally this can + be obtained by calling dict_get_encoding on the dictionary + with which INPUT is associated. + + The return value is dynamically allocated, and must be freed + by the caller. If POOL is non-null, then the return value is + allocated on that pool. +*/ +char * +data_out_pool (const union value *input, const char *encoding, + const struct fmt_spec *format, struct pool *pool) +{ + char *output = xmalloc (format->w + 1); + char *t ; + assert (fmt_check_output (format)); + + converters[format->type] (input, format, output); + output[format->w] = '\0'; + + t = recode_string_pool (UTF8, encoding, output, format->w, pool); + free (output); + return t; +} + +char * +data_out (const union value *input, const char *encoding, const struct fmt_spec *format) { - return data_out_legacy (input, LEGACY_NATIVE, format, output); + return data_out_pool (input, encoding, format, NULL); } diff --git a/src/data/data-out.h b/src/data/data-out.h index f9f70da9..735679b4 100644 --- a/src/data/data-out.h +++ b/src/data/data-out.h @@ -25,9 +25,11 @@ struct fmt_spec; union value; -void data_out (const union value *, const struct fmt_spec *, char *); +char * data_out (const union value *, const char *encoding, const struct fmt_spec *); -void data_out_legacy (const union value *, enum legacy_encoding, - const struct fmt_spec *, char *); +char * data_out_pool (const union value *, const char *encoding, const struct fmt_spec *, struct pool *pool); + +void data_out_legacy (const union value *input, const char *encoding, + const struct fmt_spec *format, char *output); #endif /* data-out.h */ diff --git a/src/data/file-handle-def.c b/src/data/file-handle-def.c index 0652501f..6ed3f8f9 100644 --- a/src/data/file-handle-def.c +++ b/src/data/file-handle-def.c @@ -49,7 +49,7 @@ struct file_handle /* FH_REF_FILE only. */ char *file_name; /* File name as provided by user. */ enum fh_mode mode; /* File mode. */ - enum legacy_encoding encoding;/* File encoding. */ + const char *encoding; /* File encoding. */ /* FH_REF_FILE and FH_REF_INLINE only. */ size_t record_width; /* Length of fixed-format records. */ @@ -325,7 +325,7 @@ fh_get_tab_width (const struct file_handle *handle) } /* Returns the encoding of characters read from HANDLE. */ -enum legacy_encoding +const char * fh_get_legacy_encoding (const struct file_handle *handle) { assert (handle->referent & (FH_REF_FILE | FH_REF_INLINE)); diff --git a/src/data/file-handle-def.h b/src/data/file-handle-def.h index 73e118cd..b4a6d610 100644 --- a/src/data/file-handle-def.h +++ b/src/data/file-handle-def.h @@ -54,7 +54,7 @@ struct fh_properties enum fh_mode mode; /* File mode. */ size_t record_width; /* Length of fixed-format records. */ size_t tab_width; /* Tab width, 0=do not expand tabs. */ - enum legacy_encoding encoding;/* ASCII or EBCDIC? */ + const char *encoding; /* ASCII or EBCDIC? */ }; void fh_init (void); @@ -89,7 +89,7 @@ enum fh_mode fh_get_mode (const struct file_handle *) ; /* Properties of FH_REF_FILE and FH_REF_INLINE file handles. */ size_t fh_get_record_width (const struct file_handle *); size_t fh_get_tab_width (const struct file_handle *); -enum legacy_encoding fh_get_legacy_encoding (const struct file_handle *); +const char *fh_get_legacy_encoding (const struct file_handle *); /* Properties of FH_REF_SCRATCH file handles. */ struct scratch_handle *fh_get_scratch_handle (const struct file_handle *); diff --git a/src/data/gnumeric-reader.c b/src/data/gnumeric-reader.c index 1a6ddc1b..f166ee6a 100644 --- a/src/data/gnumeric-reader.c +++ b/src/data/gnumeric-reader.c @@ -365,7 +365,7 @@ gnumeric_open_reader (struct gnumeric_read_info *gri, struct dictionary **dict) if ( NULL == gz) { - msg (ME, _("Error opening \"%s\" for reading as a gnumeric file: %s."), + msg (ME, _("Error opening \"%s\" for reading as a Gnumeric file: %s."), gri->file_name, strerror (errno)); goto error; diff --git a/src/data/missing-values.c b/src/data/missing-values.c index c1a74691..61bb9bcb 100644 --- a/src/data/missing-values.c +++ b/src/data/missing-values.c @@ -160,7 +160,7 @@ mv_add_value (struct missing_values *mv, const union value *v) Returns true if successful, false if MV has no more room for missing values or if S is not an acceptable missing value. */ bool -mv_add_str (struct missing_values *mv, const char s[]) +mv_add_str (struct missing_values *mv, const uint8_t s[]) { union value v; bool ok; @@ -404,7 +404,7 @@ is_num_user_missing (const struct missing_values *mv, double d) MV must be a set of string missing values. S[] must contain exactly as many characters as MV's width. */ static bool -is_str_user_missing (const struct missing_values *mv, const char s[]) +is_str_user_missing (const struct missing_values *mv, const uint8_t s[]) { const union value *v = mv->values; assert (mv->width > 0); @@ -456,7 +456,7 @@ mv_is_num_missing (const struct missing_values *mv, double d, MV must be a set of string missing values. S[] must contain exactly as many characters as MV's width. */ bool -mv_is_str_missing (const struct missing_values *mv, const char s[], +mv_is_str_missing (const struct missing_values *mv, const uint8_t s[], enum mv_class class) { assert (mv->width > 0); diff --git a/src/data/missing-values.h b/src/data/missing-values.h index 5576fc6c..4d046fae 100644 --- a/src/data/missing-values.h +++ b/src/data/missing-values.h @@ -64,7 +64,7 @@ enum mv_class bool mv_is_value_missing (const struct missing_values *, const union value *, enum mv_class); bool mv_is_num_missing (const struct missing_values *, double, enum mv_class); -bool mv_is_str_missing (const struct missing_values *, const char[], +bool mv_is_str_missing (const struct missing_values *, const uint8_t[], enum mv_class); /* Initializing missing value sets. */ @@ -94,7 +94,7 @@ void mv_get_range (const struct missing_values *, double *low, double *high); /* Adding and modifying discrete values. */ bool mv_add_value (struct missing_values *, const union value *); -bool mv_add_str (struct missing_values *, const char[]); +bool mv_add_str (struct missing_values *, const uint8_t[]); bool mv_add_num (struct missing_values *, double); void mv_pop_value (struct missing_values *, union value *); bool mv_replace_value (struct missing_values *, const union value *, int idx); diff --git a/src/data/por-file-reader.c b/src/data/por-file-reader.c index 461796bf..cd8b213e 100644 --- a/src/data/por-file-reader.c +++ b/src/data/por-file-reader.c @@ -447,6 +447,28 @@ read_string (struct pfm_reader *r, char *buf) *buf = '\0'; } + +/* Reads a string into BUF, which must have room for 256 + characters. + Returns the number of bytes read. +*/ +static size_t +read_bytes (struct pfm_reader *r, uint8_t *buf) +{ + int n = read_int (r); + if (n < 0 || n > 255) + error (r, _("Bad string length %d."), n); + + while (n-- > 0) + { + *buf++ = r->cc; + advance (r); + } + return n; +} + + + /* Reads a string and returns a copy of it allocated from R's pool. */ static char * @@ -739,9 +761,9 @@ parse_value (struct pfm_reader *r, int width, union value *v) value_init (v, width); if (width > 0) { - char string[256]; - read_string (r, string); - value_copy_str_rpad (v, width, string, ' '); + uint8_t buf[256]; + size_t n_bytes = read_bytes (r, buf); + value_copy_buf_rpad (v, width, buf, n_bytes, ' '); } else v->f = read_float (r); @@ -844,9 +866,9 @@ por_file_casereader_read (struct casereader *reader, void *r_) case_data_rw_idx (c, i)->f = read_float (r); else { - char string[256]; - read_string (r, string); - buf_copy_str_rpad (case_str_rw_idx (c, i), width, string, ' '); + uint8_t buf[256]; + size_t n_bytes = read_bytes (r, buf); + u8_buf_copy_rpad (case_str_rw_idx (c, i), width, buf, n_bytes, ' '); } } diff --git a/src/data/sys-file-reader.c b/src/data/sys-file-reader.c index 67767a9f..9978d43a 100644 --- a/src/data/sys-file-reader.c +++ b/src/data/sys-file-reader.c @@ -25,6 +25,7 @@ #include #include +#include #include #include #include @@ -186,6 +187,62 @@ static void read_long_string_value_labels (struct sfm_reader *, size_t size, size_t count, struct dictionary *); +/* Convert all the strings in DICT from the dict encoding to UTF8 */ +static void +recode_strings (struct dictionary *dict) +{ + int i; + + const char *enc = dict_get_encoding (dict); + + if ( NULL == enc) + enc = get_default_encoding (); + + for (i = 0 ; i < dict_get_var_cnt (dict); ++i) + { + /* Convert the long variable name */ + struct variable *var = dict_get_var (dict, i); + const char *native_name = var_get_name (var); + char *utf8_name = recode_string (UTF8, enc, native_name, -1); + if ( 0 != strcmp (utf8_name, native_name)) + { + if ( NULL == dict_lookup_var (dict, utf8_name)) + dict_rename_var (dict, var, utf8_name); + else + msg (MW, + _("Recoded variable name duplicates an existing `%s' within system file."), utf8_name); + } + + free (utf8_name); + + /* Convert the variable label */ + if (var_has_label (var)) + { + char *utf8_label = recode_string (UTF8, enc, var_get_label (var), -1); + var_set_label (var, utf8_label); + free (utf8_label); + } + + if (var_has_value_labels (var)) + { + const struct val_lab *vl = NULL; + const struct val_labs *vlabs = var_get_value_labels (var); + + for (vl = val_labs_first (vlabs); vl != NULL; vl = val_labs_next (vlabs, vl)) + { + const union value *val = val_lab_get_value (vl); + const char *label = val_lab_get_label (vl); + char *new_label = NULL; + + new_label = recode_string (UTF8, enc, label, -1); + + var_replace_value_label (var, val, new_label); + free (new_label); + } + } + } +} + /* Opens the system file designated by file handle FH for reading. Reads the system file's dictionary into *DICT. If INFO is non-null, then it receives additional info about the @@ -303,6 +360,8 @@ sfm_open_reader (struct file_handle *fh, struct dictionary **dict, r->has_long_var_names = true; } + recode_strings (*dict); + /* Read record 999 data, which is just filler. */ read_int (r); @@ -518,7 +577,7 @@ read_variable_record (struct sfm_reader *r, struct dictionary *dict, /* Create variable. */ if (width < 0 || width > 255) - sys_error (r, _("Bad variable width %d."), width); + sys_error (r, _("Bad width %d for variable %s."), width, name); var = dict_create_var (dict, name, width); if (var == NULL) sys_error (r, @@ -582,7 +641,7 @@ read_variable_record (struct sfm_reader *r, struct dictionary *dict, value_set_missing (&value, mv_width); for (i = 0; i < missing_value_code; i++) { - char *s = value_str_rw (&value, mv_width); + uint8_t *s = value_str_rw (&value, mv_width); read_bytes (r, s, 8); mv_add_str (&mv, s); } @@ -922,11 +981,16 @@ read_machine_float_info (struct sfm_reader *r, size_t size, size_t count) size, count); if (sysmis != SYSMIS) - sys_warn (r, _("File specifies unexpected value %g as SYSMIS."), sysmis); + sys_warn (r, _("File specifies unexpected value %g as %s."), + sysmis, "SYSMIS"); + if (highest != HIGHEST) - sys_warn (r, _("File specifies unexpected value %g as HIGHEST."), highest); + sys_warn (r, _("File specifies unexpected value %g as %s."), + highest, "HIGHEST"); + if (lowest != LOWEST) - sys_warn (r, _("File specifies unexpected value %g as LOWEST."), lowest); + sys_warn (r, _("File specifies unexpected value %g as %s."), + lowest, "LOWEST"); } /* Read record type 7, subtype 11, which specifies how variables @@ -1133,7 +1197,7 @@ read_value_labels (struct sfm_reader *r, struct label { - char raw_value[8]; /* Value as uninterpreted bytes. */ + uint8_t raw_value[8]; /* Value as uninterpreted bytes. */ union value value; /* Value. */ char *label; /* Null-terminated label string. */ }; @@ -1231,7 +1295,7 @@ read_value_labels (struct sfm_reader *r, value_init_pool (subpool, &label->value, max_width); if (var_is_alpha (var[0])) - buf_copy_rpad (value_str_rw (&label->value, max_width), max_width, + u8_buf_copy_rpad (value_str_rw (&label->value, max_width), max_width, label->raw_value, sizeof label->raw_value, ' '); else label->value.f = float_get_double (r->float_format, label->raw_value); @@ -1411,7 +1475,7 @@ read_long_string_value_labels (struct sfm_reader *r, /* Read value. */ value_length = read_int (r); if (value_length == width) - read_string (r, value_str_rw (&value, width), width + 1); + read_bytes (r, value_str_rw (&value, width), width); else { sys_warn (r, _("Ignoring long string value %zu for variable %s, " @@ -1468,11 +1532,11 @@ static void partial_record (struct sfm_reader *r) static void read_error (struct casereader *, const struct sfm_reader *); static bool read_case_number (struct sfm_reader *, double *); -static bool read_case_string (struct sfm_reader *, char *, size_t); +static bool read_case_string (struct sfm_reader *, uint8_t *, size_t); static int read_opcode (struct sfm_reader *); static bool read_compressed_number (struct sfm_reader *, double *); -static bool read_compressed_string (struct sfm_reader *, char *); -static bool read_whole_strings (struct sfm_reader *, char *, size_t); +static bool read_compressed_string (struct sfm_reader *, uint8_t *); +static bool read_whole_strings (struct sfm_reader *, uint8_t *, size_t); static bool skip_whole_strings (struct sfm_reader *, size_t); /* Reads and returns one case from READER's file. Returns a null @@ -1507,7 +1571,7 @@ sys_file_casereader_read (struct casereader *reader, void *r_) } else { - char *s = value_str_rw (v, sv->var_width); + uint8_t *s = value_str_rw (v, sv->var_width); if (!read_case_string (r, s + sv->offset, sv->segment_width)) goto eof; if (!skip_whole_strings (r, ROUND_DOWN (sv->padding, 8))) @@ -1569,7 +1633,7 @@ read_case_number (struct sfm_reader *r, double *d) Returns true if successful, false if end of file is reached immediately. */ static bool -read_case_string (struct sfm_reader *r, char *s, size_t length) +read_case_string (struct sfm_reader *r, uint8_t *s, size_t length) { size_t whole = ROUND_DOWN (length, 8); size_t partial = length % 8; @@ -1582,7 +1646,7 @@ read_case_string (struct sfm_reader *r, char *s, size_t length) if (partial) { - char bounce[8]; + uint8_t bounce[8]; if (!read_whole_strings (r, bounce, sizeof bounce)) { if (whole) @@ -1653,7 +1717,7 @@ read_compressed_number (struct sfm_reader *r, double *d) Returns true if successful, false if end of file is reached immediately. */ static bool -read_compressed_string (struct sfm_reader *r, char *dst) +read_compressed_string (struct sfm_reader *r, uint8_t *dst) { switch (read_opcode (r)) { @@ -1682,7 +1746,7 @@ read_compressed_string (struct sfm_reader *r, char *dst) Returns true if successful, false if end of file is reached immediately. */ static bool -read_whole_strings (struct sfm_reader *r, char *s, size_t length) +read_whole_strings (struct sfm_reader *r, uint8_t *s, size_t length) { assert (length % 8 == 0); if (!r->compressed) @@ -1710,7 +1774,7 @@ read_whole_strings (struct sfm_reader *r, char *s, size_t length) static bool skip_whole_strings (struct sfm_reader *r, size_t length) { - char buffer[1024]; + uint8_t buffer[1024]; assert (length < sizeof buffer); return read_whole_strings (r, buffer, length); } diff --git a/src/data/sys-file-writer.c b/src/data/sys-file-writer.c index 13dc2de6..3fed2e05 100644 --- a/src/data/sys-file-writer.c +++ b/src/data/sys-file-writer.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include @@ -94,9 +95,9 @@ struct sfm_writer static const struct casewriter_class sys_file_casewriter_class; static void write_header (struct sfm_writer *, const struct dictionary *); -static void write_variable (struct sfm_writer *, const struct variable *); +static void write_variable (struct sfm_writer *, const struct variable *, const struct dictionary *); static void write_value_labels (struct sfm_writer *, - struct variable *, int idx); + struct variable *, int idx, const struct dictionary *); static void write_integer_info_record (struct sfm_writer *); static void write_float_info_record (struct sfm_writer *); @@ -222,7 +223,7 @@ sfm_open_writer (struct file_handle *fh, struct dictionary *d, /* Write basic variable info. */ short_names_assign (d); for (i = 0; i < dict_get_var_cnt (d); i++) - write_variable (w, dict_get_var (d, i)); + write_variable (w, dict_get_var (d, i), d); /* Write out value labels. */ idx = 0; @@ -230,7 +231,7 @@ sfm_open_writer (struct file_handle *fh, struct dictionary *d, { struct variable *v = dict_get_var (d, i); - write_value_labels (w, v, idx); + write_value_labels (w, v, idx, d); idx += sfm_width_to_octs (var_get_width (v)); } @@ -420,7 +421,7 @@ write_variable_continuation_records (struct sfm_writer *w, int width) /* Write the variable record(s) for variable V to system file W. */ static void -write_variable (struct sfm_writer *w, const struct variable *v) +write_variable (struct sfm_writer *w, const struct variable *v, const struct dictionary *dict) { int width = var_get_width (v); int segment_cnt = sfm_width_to_segments (width); @@ -461,9 +462,11 @@ write_variable (struct sfm_writer *w, const struct variable *v) if (var_has_label (v)) { const char *label = var_get_label (v); - size_t padded_len = ROUND_UP (MIN (strlen (label), 255), 4); + char *l = recode_string (dict_get_encoding (dict), UTF8, label, -1); + size_t padded_len = ROUND_UP (MIN (strlen (l), 255), 4); write_int (w, padded_len); - write_string (w, label, padded_len); + write_string (w, l, padded_len); + free (l); } /* Write the missing values, if any, range first. */ @@ -505,7 +508,7 @@ write_variable (struct sfm_writer *w, const struct variable *v) Value labels for long string variables are written separately, by write_long_string_value_labels. */ static void -write_value_labels (struct sfm_writer *w, struct variable *v, int idx) +write_value_labels (struct sfm_writer *w, struct variable *v, int idx, const struct dictionary *dict) { const struct val_labs *val_labs; const struct val_lab **labels; @@ -524,13 +527,14 @@ write_value_labels (struct sfm_writer *w, struct variable *v, int idx) for (i = 0; i < n_labels; i++) { const struct val_lab *vl = labels[i]; - const char *label = val_lab_get_label (vl); + char *label = recode_string (dict_get_encoding (dict), UTF8, val_lab_get_label (vl), -1); uint8_t len = MIN (strlen (label), 255); write_value (w, val_lab_get_value (vl), var_get_width (v)); write_bytes (w, &len, 1); write_bytes (w, label, len); write_zeros (w, REM_RND_UP (len + 1, 8)); + free (label); } free (labels); @@ -774,11 +778,13 @@ write_longvar_table (struct sfm_writer *w, const struct dictionary *dict) for (i = 0; i < dict_get_var_cnt (dict); i++) { struct variable *v = dict_get_var (dict, i); + char *longname = recode_string (dict_get_encoding (dict), UTF8, var_get_name (v), -1); if (i) ds_put_char (&map, '\t'); ds_put_format (&map, "%s=%s", - var_get_short_name (v, 0), var_get_name (v)); + var_get_short_name (v, 0), longname); + free (longname); } write_int (w, 7); /* Record type. */ diff --git a/src/data/value.c b/src/data/value.c index ce050c01..6dbecb11 100644 --- a/src/data/value.c +++ b/src/data/value.c @@ -22,6 +22,7 @@ #include #include #include +#include #include "minmax.h" #include "xalloc.h" @@ -44,7 +45,7 @@ value_copy_rpad (union value *dst, int dst_width, const union value *src, int src_width, char pad) { - buf_copy_rpad (value_str_rw (dst, dst_width), dst_width, + u8_buf_copy_rpad (value_str_rw (dst, dst_width), dst_width, value_str (src, src_width), src_width, pad); } @@ -62,10 +63,10 @@ value_copy_rpad (union value *dst, int dst_width, DST was initialized. Passing, e.g., a smaller value in order to modify only a prefix of DST will not work in every case. */ void -value_copy_str_rpad (union value *dst, int dst_width, const char *src, +value_copy_str_rpad (union value *dst, int dst_width, const uint8_t *src, char pad) { - value_copy_buf_rpad (dst, dst_width, src, strlen (src), pad); + value_copy_buf_rpad (dst, dst_width, src, u8_strlen (src), pad); } /* Copies the SRC_LEN bytes at SRC to string value DST with width @@ -81,9 +82,9 @@ value_copy_str_rpad (union value *dst, int dst_width, const char *src, to modify only a prefix of DST will not work in every case. */ void value_copy_buf_rpad (union value *dst, int dst_width, - const char *src, size_t src_len, char pad) + const uint8_t *src, size_t src_len, char pad) { - buf_copy_rpad (value_str_rw (dst, dst_width), dst_width, src, src_len, pad); + u8_buf_copy_rpad (value_str_rw (dst, dst_width), dst_width, src, src_len, pad); } /* Sets V to the system-missing value for data of the given @@ -145,7 +146,7 @@ value_is_resizable (const union value *value, int old_width, int new_width) return false; else { - const char *str = value_str (value, old_width); + const uint8_t *str = value_str (value, old_width); int i; for (i = new_width; i < old_width; i++) @@ -225,7 +226,7 @@ value_resize_pool (struct pool *pool, union value *value, { if (new_width > MAX_SHORT_STRING) { - char *new_long_string = pool_alloc_unaligned (pool, new_width); + uint8_t *new_long_string = pool_alloc_unaligned (pool, new_width); memcpy (new_long_string, value_str (value, old_width), old_width); value->long_string = new_long_string; } diff --git a/src/data/value.h b/src/data/value.h index 046a9a3a..f9782e2d 100644 --- a/src/data/value.h +++ b/src/data/value.h @@ -20,6 +20,7 @@ #include #include #include +#include #include #include "xalloc.h" @@ -45,8 +46,8 @@ union value { double f; - char short_string[MAX_SHORT_STRING]; - char *long_string; + uint8_t short_string[MAX_SHORT_STRING]; + uint8_t *long_string; }; static inline void value_init (union value *, int width); @@ -55,24 +56,21 @@ static inline bool value_try_init (union value *, int width); static inline void value_destroy (union value *, int width); static inline double value_num (const union value *); -static inline const char *value_str (const union value *, int width); -static inline char *value_str_rw (union value *, int width); - -int compare_values (const void *, const void *, const void *var); -unsigned hash_value (const void *, const void *var); +static inline const uint8_t *value_str (const union value *, int width); +static inline uint8_t *value_str_rw (union value *, int width); static inline void value_copy (union value *, const union value *, int width); void value_copy_rpad (union value *, int dst_width, const union value *, int src_width, char pad); -void value_copy_str_rpad (union value *, int dst_width, const char *, +void value_copy_str_rpad (union value *, int dst_width, const uint8_t *, char pad); void value_copy_buf_rpad (union value *dst, int dst_width, - const char *src, size_t src_len, char pad); + const uint8_t *src, size_t src_len, char pad); void value_set_missing (union value *, int width); int value_compare_3way (const union value *, const union value *, int width); bool value_equal (const union value *, const union value *, int width); -size_t value_hash (const union value *, int width, unsigned int basis); +unsigned int value_hash (const union value *, int width, unsigned int basis); bool value_is_resizable (const union value *, int old_width, int new_width); bool value_needs_resize (int old_width, int new_width); @@ -150,7 +148,7 @@ value_num (const union value *v) It is important that WIDTH be the actual value that was passed to value_init. Passing, e.g., a smaller value because only that number of bytes will be accessed will not always work. */ -static inline const char * +static inline const uint8_t * value_str (const union value *v, int width) { assert (width > 0); @@ -164,7 +162,7 @@ value_str (const union value *v, int width) It is important that WIDTH be the actual value that was passed to value_init. Passing, e.g., a smaller value because only that number of bytes will be accessed will not always work. */ -static inline char * +static inline uint8_t * value_str_rw (union value *v, int width) { assert (width > 0); diff --git a/src/data/variable.c b/src/data/variable.c index c0767d7c..d1e30864 100644 --- a/src/data/variable.c +++ b/src/data/variable.c @@ -149,13 +149,13 @@ var_clone (const struct variable *old_var) return new_var; } -/* Create a variable to be used for internal calculations only. - The variable is assigned a unique dictionary index and a case - index of CASE_IDX. */ +/* Create a variable of the specified WIDTH to be used for + internal calculations only. The variable is assigned a unique + dictionary index and a case index of CASE_IDX. */ struct variable * -var_create_internal (int case_idx) +var_create_internal (int case_idx, int width) { - struct variable *v = var_create ("$internal", 0); + struct variable *v = var_create ("$internal", width); struct vardict_info vdi; static int counter = INT_MAX / 2; @@ -494,7 +494,7 @@ var_is_num_missing (const struct variable *v, double d, enum mv_class class) S[] must contain exactly as many characters as V's width. V must be a string variable. */ bool -var_is_str_missing (const struct variable *v, const char s[], +var_is_str_missing (const struct variable *v, const uint8_t s[], enum mv_class class) { return mv_is_str_missing (&v->miss, s, class); @@ -590,10 +590,12 @@ var_append_value_name (const struct variable *v, const union value *value, struct string *str) { const char *name = var_lookup_value_label (v, value); + const struct dictionary *dict = var_get_vardict (v)->dict; if (name == NULL) { - char *s = ds_put_uninit (str, v->print.w); - data_out (value, &v->print, s); + char *s = data_out (value, dict_get_encoding (dict), &v->print); + ds_put_cstr (str, s); + free (s); } else ds_put_cstr (str, name); diff --git a/src/data/variable.h b/src/data/variable.h index 2752aeb3..0b619a49 100644 --- a/src/data/variable.h +++ b/src/data/variable.h @@ -32,7 +32,7 @@ union value; struct variable *var_create (const char *name, int width); struct variable *var_clone (const struct variable *); void var_destroy (struct variable *); -struct variable *var_create_internal (int case_idx); +struct variable *var_create_internal (int case_idx, int width); /* Variable names. */ @@ -69,7 +69,7 @@ bool var_has_missing_values (const struct variable *); bool var_is_value_missing (const struct variable *, const union value *, enum mv_class); bool var_is_num_missing (const struct variable *, double, enum mv_class); -bool var_is_str_missing (const struct variable *, const char[], enum mv_class); +bool var_is_str_missing (const struct variable *, const uint8_t[], enum mv_class); /* Value labels. */ const char *var_lookup_value_label (const struct variable *, diff --git a/src/language/command.c b/src/language/command.c index 5dd2a308..c00d94b9 100644 --- a/src/language/command.c +++ b/src/language/command.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2009 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -205,7 +205,7 @@ do_parse_command (struct lexer *lexer, } else if (command->function == NULL) { - msg (SE, _("%s is unimplemented."), command->name); + msg (SE, _("%s is not yet implemented."), command->name); result = CMD_NOT_IMPLEMENTED; goto finish; } diff --git a/src/language/data-io/data-list.c b/src/language/data-io/data-list.c index de857488..d43af347 100644 --- a/src/language/data-io/data-list.c +++ b/src/language/data-io/data-list.c @@ -86,7 +86,7 @@ cmd_data_list (struct lexer *lexer, struct dataset *ds) bool ok; dict = in_input_program () ? dataset_dict (ds) : dict_create (); - parser = data_parser_create (); + parser = data_parser_create (dict); reader = NULL; table = -1; /* Print table if nonzero, -1=undecided. */ diff --git a/src/language/data-io/data-parser.c b/src/language/data-io/data-parser.c index 2f503423..6ec3d0d5 100644 --- a/src/language/data-io/data-parser.c +++ b/src/language/data-io/data-parser.c @@ -41,6 +41,7 @@ /* Data parser for textual data like that read by DATA LIST. */ struct data_parser { + const struct dictionary *dict; /*Dictionary of destination */ enum data_parser_type type; /* Type of data to parse. */ int skip_records; /* Records to skip before first real data. */ casenumber max_cases; /* Max number of cases to read. */ @@ -79,7 +80,7 @@ static void set_any_sep (struct data_parser *parser); /* Creates and returns a new data parser. */ struct data_parser * -data_parser_create (void) +data_parser_create (const struct dictionary *dict) { struct data_parser *parser = xmalloc (sizeof *parser); @@ -91,6 +92,7 @@ data_parser_create (void) parser->fields = NULL; parser->field_cnt = 0; parser->field_allocated = 0; + parser->dict = dict; parser->span = true; parser->empty_line_has_field = false; @@ -505,7 +507,7 @@ static bool parse_fixed (const struct data_parser *parser, struct dfm_reader *reader, struct ccase *c) { - enum legacy_encoding encoding = dfm_reader_get_legacy_encoding (reader); + const char *encoding = dfm_reader_get_legacy_encoding (reader); struct field *f; int row; @@ -531,6 +533,7 @@ parse_fixed (const struct data_parser *parser, struct dfm_reader *reader, f->format.w), encoding, f->format.type, f->format.d, f->first_column, f->first_column + f->format.w, + parser->dict, case_data_rw_idx (c, f->case_idx), fmt_var_width (&f->format)); @@ -547,7 +550,7 @@ static bool parse_delimited_span (const struct data_parser *parser, struct dfm_reader *reader, struct ccase *c) { - enum legacy_encoding encoding = dfm_reader_get_legacy_encoding (reader); + const char *encoding = dfm_reader_get_legacy_encoding (reader); struct string tmp = DS_EMPTY_INITIALIZER; struct field *f; @@ -574,6 +577,7 @@ parse_delimited_span (const struct data_parser *parser, data_in (s, encoding, f->format.type, 0, first_column, last_column, + parser->dict, case_data_rw_idx (c, f->case_idx), fmt_var_width (&f->format)); } @@ -588,7 +592,7 @@ static bool parse_delimited_no_span (const struct data_parser *parser, struct dfm_reader *reader, struct ccase *c) { - enum legacy_encoding encoding = dfm_reader_get_legacy_encoding (reader); + const char *encoding = dfm_reader_get_legacy_encoding (reader); struct string tmp = DS_EMPTY_INITIALIZER; struct substring s; struct field *f; @@ -614,6 +618,7 @@ parse_delimited_no_span (const struct data_parser *parser, data_in (s, encoding, f->format.type, 0, first_column, last_column, + parser->dict, case_data_rw_idx (c, f->case_idx), fmt_var_width (&f->format)); } @@ -656,9 +661,9 @@ dump_fixed_table (const struct data_parser *parser, int row = i + 1; tab_text (t, 0, row, TAB_LEFT, f->name); - tab_text (t, 1, row, TAT_PRINTF, "%d", f->record); - tab_text (t, 2, row, TAT_PRINTF, "%3d-%3d", - f->first_column, f->first_column + f->format.w - 1); + tab_text_format (t, 1, row, 0, "%d", f->record); + tab_text_format (t, 2, row, 0, "%3d-%3d", + f->first_column, f->first_column + f->format.w - 1); tab_text (t, 3, row, TAB_LEFT | TAB_FIX, fmt_to_string (&f->format, fmt_string)); } diff --git a/src/language/data-io/data-parser.h b/src/language/data-io/data-parser.h index b250e91b..5a53a2f6 100644 --- a/src/language/data-io/data-parser.h +++ b/src/language/data-io/data-parser.h @@ -38,7 +38,7 @@ enum data_parser_type }; /* Creating and configuring any parser. */ -struct data_parser *data_parser_create (void); +struct data_parser *data_parser_create (const struct dictionary *dict); void data_parser_destroy (struct data_parser *); enum data_parser_type data_parser_get_type (const struct data_parser *); diff --git a/src/language/data-io/data-reader.c b/src/language/data-io/data-reader.c index 24ddcf13..6f620a6a 100644 --- a/src/language/data-io/data-reader.c +++ b/src/language/data-io/data-reader.c @@ -597,7 +597,7 @@ dfm_expand_tabs (struct dfm_reader *r) } /* Returns the legacy character encoding of data read from READER. */ -enum legacy_encoding +const char * dfm_reader_get_legacy_encoding (const struct dfm_reader *reader) { return fh_get_legacy_encoding (reader->fh); diff --git a/src/language/data-io/data-reader.h b/src/language/data-io/data-reader.h index c7fee613..308701c2 100644 --- a/src/language/data-io/data-reader.h +++ b/src/language/data-io/data-reader.h @@ -38,8 +38,7 @@ bool dfm_reader_error (const struct dfm_reader *); unsigned dfm_eof (struct dfm_reader *); struct substring dfm_get_record (struct dfm_reader *); void dfm_expand_tabs (struct dfm_reader *); -enum legacy_encoding dfm_reader_get_legacy_encoding ( - const struct dfm_reader *); +const char *dfm_reader_get_legacy_encoding (const struct dfm_reader *); int dfm_get_percent_read (const struct dfm_reader *); /* Line control. */ diff --git a/src/language/data-io/data-writer.c b/src/language/data-io/data-writer.c index b5df59d4..85b11d4c 100644 --- a/src/language/data-io/data-writer.c +++ b/src/language/data-io/data-writer.c @@ -200,7 +200,7 @@ dfm_close_writer (struct dfm_writer *w) } /* Returns the legacy character encoding of data written to WRITER. */ -enum legacy_encoding +const char * dfm_writer_get_legacy_encoding (const struct dfm_writer *writer) { return fh_get_legacy_encoding (writer->fh); diff --git a/src/language/data-io/data-writer.h b/src/language/data-io/data-writer.h index 2142f215..045db316 100644 --- a/src/language/data-io/data-writer.h +++ b/src/language/data-io/data-writer.h @@ -27,7 +27,6 @@ struct dfm_writer *dfm_open_writer (struct file_handle *); bool dfm_close_writer (struct dfm_writer *); bool dfm_write_error (const struct dfm_writer *); bool dfm_put_record (struct dfm_writer *, const char *rec, size_t len); -enum legacy_encoding dfm_writer_get_legacy_encoding ( - const struct dfm_writer *); +const char *dfm_writer_get_legacy_encoding (const struct dfm_writer *); #endif /* data-writer.h */ diff --git a/src/language/data-io/file-handle.q b/src/language/data-io/file-handle.q index 827dbab4..3e053ed5 100644 --- a/src/language/data-io/file-handle.q +++ b/src/language/data-io/file-handle.q @@ -102,7 +102,7 @@ cmd_file_handle (struct lexer *lexer, struct dataset *ds) properties.mode = FH_MODE_VARIABLE; break; case FH_360: - properties.encoding = LEGACY_EBCDIC; + properties.encoding = "EBCDIC-US"; if (cmd.recform == FH_FIXED || cmd.recform == FH_F) properties.mode = FH_MODE_FIXED; else if (cmd.recform == FH_VARIABLE || cmd.recform == FH_V) diff --git a/src/language/data-io/get-data.c b/src/language/data-io/get-data.c index e4ab76a9..32202bab 100644 --- a/src/language/data-io/get-data.c +++ b/src/language/data-io/get-data.c @@ -271,7 +271,7 @@ static int parse_get_txt (struct lexer *lexer, struct dataset *ds) { struct data_parser *parser = NULL; - struct dictionary *dict = NULL; + struct dictionary *dict = dict_create (); struct file_handle *fh = NULL; struct dfm_reader *reader = NULL; @@ -288,7 +288,7 @@ parse_get_txt (struct lexer *lexer, struct dataset *ds) if (fh == NULL) goto error; - parser = data_parser_create (); + parser = data_parser_create (dict); has_type = false; data_parser_set_type (parser, DP_DELIMITED); data_parser_set_span (parser, false); @@ -465,7 +465,7 @@ parse_get_txt (struct lexer *lexer, struct dataset *ds) } lex_match (lexer, '='); - dict = dict_create (); + record = 1; type = data_parser_get_type (parser); do diff --git a/src/language/data-io/list.q b/src/language/data-io/list.q index 28820a85..c3f9b088 100644 --- a/src/language/data-io/list.q +++ b/src/language/data-io/list.q @@ -706,18 +706,21 @@ list_case (const struct ccase *c, casenumber case_idx, if (fmt_is_string (print->type) || dict_contains_var (dict, v)) { - data_out (case_data (c, v), print, - ds_put_uninit (&line_buffer, print->w)); + char *s = data_out (case_data (c, v), dict_get_encoding (dict), print); + ds_put_cstr (&line_buffer, s); + free (s); } else { + char *s; union value case_idx_value; case_idx_value.f = case_idx; - data_out (&case_idx_value, print, - ds_put_uninit (&line_buffer,print->w)); + s = data_out (&case_idx_value, dict_get_encoding (dict), print); + ds_put_cstr (&line_buffer, s); + free (s); } - ds_put_char(&line_buffer, ' '); + ds_put_char (&line_buffer, ' '); } if (!n_lines_remaining (d)) @@ -740,20 +743,21 @@ list_case (const struct ccase *c, casenumber case_idx, { const struct variable *v = cmd.v_variables[column]; const struct fmt_spec *print = var_get_print_format (v); - char buf[256]; + char *s = NULL; if (fmt_is_string (print->type) || dict_contains_var (dict, v)) - data_out (case_data (c, v), print, buf); + s = data_out (case_data (c, v), dict_get_encoding (dict), print); else { union value case_idx_value; case_idx_value.f = case_idx; - data_out (&case_idx_value, print, buf); + s = data_out (&case_idx_value, dict_get_encoding (dict), print); } fputs (" ", x->file); - html_put_cell_contents (d, TAB_FIX, ss_buffer (buf, print->w)); + html_put_cell_contents (d, TAB_FIX, ss_buffer (s, print->w)); + free (s); fputs ("\n", x->file); } diff --git a/src/language/data-io/print.c b/src/language/data-io/print.c index aae8b38a..e345477b 100644 --- a/src/language/data-io/print.c +++ b/src/language/data-io/print.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -83,7 +84,7 @@ struct print_trns struct pool *pool; /* Stores related data. */ bool eject; /* Eject page before printing? */ bool include_prefix; /* Prefix lines with space? */ - enum legacy_encoding encoding; /* Encoding to use for output. */ + const char *encoding; /* Encoding to use for output. */ struct dfm_writer *writer; /* Output file, NULL=listing file. */ struct ll_list specs; /* List of struct prt_out_specs. */ size_t record_cnt; /* Number of records to write. */ @@ -413,8 +414,9 @@ dump_table (struct print_trns *trns, const struct file_handle *fh) switch (spec->type) { case PRT_LITERAL: - tab_text (t, 0, row, TAB_LEFT | TAB_FIX | TAT_PRINTF, "\"%.*s\"", - (int) ds_length (&spec->string), ds_data (&spec->string)); + tab_text_format (t, 0, row, TAB_LEFT | TAB_FIX, "\"%.*s\"", + (int) ds_length (&spec->string), + ds_data (&spec->string)); width = ds_length (&spec->string); break; case PRT_VAR: @@ -426,9 +428,9 @@ dump_table (struct print_trns *trns, const struct file_handle *fh) default: NOT_REACHED (); } - tab_text (t, 1, row, TAT_PRINTF, "%d", spec->record); - tab_text (t, 2, row, TAT_PRINTF, "%3d-%3d", - spec->first_column, spec->first_column + width - 1); + tab_text_format (t, 1, row, 0, "%d", spec->record); + tab_text_format (t, 2, row, 0, "%3d-%3d", + spec->first_column, spec->first_column + width - 1); row++; } @@ -479,12 +481,13 @@ print_trns_proc (void *trns_, struct ccase **c, casenumber case_num UNUSED) else { ds_put_substring (&trns->line, ds_ss (&spec->string)); - if (trns->encoding != LEGACY_NATIVE) + if (0 != strcmp (trns->encoding, LEGACY_NATIVE)) { size_t length = ds_length (&spec->string); char *data = ss_data (ds_tail (&trns->line, length)); - legacy_recode (LEGACY_NATIVE, data, - trns->encoding, data, length); + char *s = recode_string (trns->encoding, LEGACY_NATIVE, data, length); + memcpy (data, s, length); + free (s); } } } diff --git a/src/language/dictionary/missing-values.c b/src/language/dictionary/missing-values.c index aa3ce698..819b0a90 100644 --- a/src/language/dictionary/missing-values.c +++ b/src/language/dictionary/missing-values.c @@ -101,7 +101,7 @@ cmd_missing_values (struct lexer *lexer, struct dataset *ds) mv_init (&mv, MV_MAX_STRING); while (!lex_match (lexer, ')')) { - char value[MV_MAX_STRING]; + uint8_t value[MV_MAX_STRING]; size_t length; if (!lex_force_string (lexer)) diff --git a/src/language/dictionary/split-file.c b/src/language/dictionary/split-file.c index 155cfa12..5d2b42d7 100644 --- a/src/language/dictionary/split-file.c +++ b/src/language/dictionary/split-file.c @@ -88,17 +88,17 @@ output_split_file_values (const struct dataset *ds, const struct ccase *c) for (i = 0; i < split_cnt; i++) { const struct variable *v = split[i]; - char temp_buf[80]; + char *s; const char *val_lab; const struct fmt_spec *print = var_get_print_format (v); - tab_text (t, 0, i + 1, TAB_LEFT | TAT_PRINTF, "%s", var_get_name (v)); + tab_text_format (t, 0, i + 1, TAB_LEFT, "%s", var_get_name (v)); - data_out (case_data (c, v), print, temp_buf); - temp_buf[print->w] = 0; - - tab_text (t, 1, i + 1, TAT_PRINTF, "%.*s", print->w, temp_buf); + s = data_out (case_data (c, v), dict_get_encoding (dict), print); + tab_text_format (t, 1, i + 1, 0, "%.*s", print->w, s); + free (s); + val_lab = var_lookup_value_label (v, case_data (c, v)); if (val_lab) tab_text (t, 2, i + 1, TAB_LEFT, val_lab); diff --git a/src/language/dictionary/sys-file-info.c b/src/language/dictionary/sys-file-info.c index 8f2ab7d7..6a0c81ac 100644 --- a/src/language/dictionary/sys-file-info.c +++ b/src/language/dictionary/sys-file-info.c @@ -120,8 +120,8 @@ cmd_sysfile_info (struct lexer *lexer, struct dataset *ds UNUSED) tab_text (t, 1, 1, TAB_LEFT, label); } tab_text (t, 0, 2, TAB_LEFT, _("Created:")); - tab_text (t, 1, 2, TAB_LEFT | TAT_PRINTF, "%s %s by %s", - info.creation_date, info.creation_time, info.product); + tab_text_format (t, 1, 2, TAB_LEFT, "%s %s by %s", + info.creation_date, info.creation_time, info.product); tab_text (t, 0, 3, TAB_LEFT, _("Integer Format:")); tab_text (t, 1, 3, TAB_LEFT, info.integer_format == INTEGER_MSB_FIRST ? _("Big Endian.") @@ -136,11 +136,11 @@ cmd_sysfile_info (struct lexer *lexer, struct dataset *ds UNUSED) : info.float_format == FLOAT_Z_LONG ? _("IBM 390 Hex Long.") : _("Unknown.")); tab_text (t, 0, 5, TAB_LEFT, _("Variables:")); - tab_text (t, 1, 5, TAB_LEFT | TAT_PRINTF, "%zu", dict_get_var_cnt (d)); + tab_text_format (t, 1, 5, TAB_LEFT, "%zu", dict_get_var_cnt (d)); tab_text (t, 0, 6, TAB_LEFT, _("Cases:")); - tab_text (t, 1, 6, TAB_LEFT | TAT_PRINTF, - info.case_cnt == -1 ? _("Unknown") : "%ld", - (long int) info.case_cnt); + tab_text_format (t, 1, 6, TAB_LEFT, + info.case_cnt == -1 ? _("Unknown") : "%ld", + (long int) info.case_cnt); tab_text (t, 0, 7, TAB_LEFT, _("Type:")); tab_text (t, 1, 7, TAB_LEFT, _("System File.")); tab_text (t, 0, 8, TAB_LEFT, _("Weight:")); @@ -151,13 +151,13 @@ cmd_sysfile_info (struct lexer *lexer, struct dataset *ds UNUSED) ? var_get_name (weight_var) : _("Not weighted."))); } tab_text (t, 0, 9, TAB_LEFT, _("Mode:")); - tab_text (t, 1, 9, TAB_LEFT | TAT_PRINTF, - _("Compression %s."), info.compressed ? _("on") : _("off")); + tab_text_format (t, 1, 9, TAB_LEFT, + _("Compression %s."), info.compressed ? _("on") : _("off")); tab_text (t, 0, 10, TAB_LEFT, _("Charset:")); - tab_text (t, 1, 10, TAB_LEFT | TAT_PRINTF, - dict_get_encoding(d) ? dict_get_encoding(d) : _("Unknown")); + tab_text_format (t, 1, 10, TAB_LEFT, + dict_get_encoding(d) ? dict_get_encoding(d) : _("Unknown")); tab_dim (t, tab_natural_dimensions, NULL); @@ -459,8 +459,7 @@ display_attributes (struct tab_table *t, const struct attrset *set, int flags, for (i = 0; i < n_values; i++) { if (n_values > 1) - tab_text (t, c, r, TAB_LEFT | TAT_PRINTF, "%s[%d]", - name, i + 1); + tab_text_format (t, c, r, TAB_LEFT, "%s[%d]", name, i + 1); else tab_text (t, c, r, TAB_LEFT, name); tab_text (t, c + 1, r, TAB_LEFT, attribute_get_value (attr, i)); @@ -523,7 +522,7 @@ describe_variable (const struct variable *v, struct tab_table *t, int r, /* Put the name, var label, and position into the first row. */ tab_text (t, 0, r, TAB_LEFT, var_get_name (v)); if (flags & DF_DICT_INDEX) - tab_text (t, pc, r, TAT_PRINTF, "%zu", var_get_dict_index (v) + 1); + tab_text_format (t, pc, r, 0, "%zu", var_get_dict_index (v) + 1); if (flags & DF_VARIABLE_LABELS && var_has_label (v)) { @@ -540,18 +539,20 @@ describe_variable (const struct variable *v, struct tab_table *t, int r, if (fmt_equal (print, write)) { char str[FMT_STRING_LEN_MAX + 1]; - tab_joint_text (t, 1, r, 2, r, TAB_LEFT | TAT_PRINTF, - _("Format: %s"), fmt_to_string (print, str)); + tab_joint_text_format (t, 1, r, 2, r, TAB_LEFT, + _("Format: %s"), fmt_to_string (print, str)); r++; } else { char str[FMT_STRING_LEN_MAX + 1]; - tab_joint_text (t, 1, r, 2, r, TAB_LEFT | TAT_PRINTF, - _("Print Format: %s"), fmt_to_string (print, str)); + tab_joint_text_format (t, 1, r, 2, r, TAB_LEFT, + _("Print Format: %s"), + fmt_to_string (print, str)); r++; - tab_joint_text (t, 1, r, 2, r, TAB_LEFT | TAT_PRINTF, - _("Write Format: %s"), fmt_to_string (write, str)); + tab_joint_text_format (t, 1, r, 2, r, TAB_LEFT, + _("Write Format: %s"), + fmt_to_string (write, str)); r++; } } @@ -562,20 +563,21 @@ describe_variable (const struct variable *v, struct tab_table *t, int r, enum measure m = var_get_measure (v); enum alignment a = var_get_alignment (v); - tab_joint_text (t, 1, r, 2, r, TAB_LEFT | TAT_PRINTF, - _("Measure: %s"), - m == MEASURE_NOMINAL ? _("Nominal") - : m == MEASURE_ORDINAL ? _("Ordinal") - : _("Scale")); + tab_joint_text_format (t, 1, r, 2, r, TAB_LEFT, + _("Measure: %s"), + m == MEASURE_NOMINAL ? _("Nominal") + : m == MEASURE_ORDINAL ? _("Ordinal") + : _("Scale")); r++; - tab_joint_text (t, 1, r, 2, r, TAB_LEFT | TAT_PRINTF, - _("Display Alignment: %s"), - a == ALIGN_LEFT ? _("Left") - : a == ALIGN_CENTRE ? _("Center") - : _("Right")); + tab_joint_text_format (t, 1, r, 2, r, TAB_LEFT, + _("Display Alignment: %s"), + a == ALIGN_LEFT ? _("Left") + : a == ALIGN_CENTRE ? _("Center") + : _("Right")); r++; - tab_joint_text (t, 1, r, 2, r, TAB_LEFT | TAT_PRINTF, - _("Display Width: %d"), var_get_display_width (v)); + tab_joint_text_format (t, 1, r, 2, r, TAB_LEFT, + _("Display Width: %d"), + var_get_display_width (v)); r++; } @@ -739,7 +741,7 @@ display_vectors (const struct dictionary *dict, int sorted) char fmt_string[FMT_STRING_LEN_MAX + 1]; fmt_to_string (var_get_print_format (var), fmt_string); - tab_text (t, 1, row, TAB_RIGHT | TAT_PRINTF, "%zu", j + 1); + tab_text_format (t, 1, row, TAB_RIGHT, "%zu", j + 1); tab_text (t, 2, row, TAB_LEFT, var_get_name (var)); tab_text (t, 3, row, TAB_LEFT, fmt_string); row++; diff --git a/src/language/expressions/operations.def b/src/language/expressions/operations.def index 2d31bd47..d2838672 100644 --- a/src/language/expressions/operations.def +++ b/src/language/expressions/operations.def @@ -573,7 +573,7 @@ string function RTRIM (string s, string c) function NUMBER (string s, ni_format f) { union value out; - data_in (ss_head (s, f->w), LEGACY_NATIVE, f->type, f->d, 0, 0, &out, 0); + data_in (ss_head (s, f->w), LEGACY_NATIVE, f->type, f->d, 0, 0, NULL, &out, 0); return out.f; } @@ -582,11 +582,15 @@ absorb_miss string function STRING (x, no_format f) { union value v; struct substring dst; + char *s; v.f = x; - dst = alloc_string (e, f->w); + assert (!fmt_is_string (f->type)); - data_out (&v, f, dst.string); + s = data_out (&v, LEGACY_NATIVE, f); + dst = alloc_string (e, strlen (s)); + strcpy (dst.string, s); + free (s); return dst; } diff --git a/src/language/lexer/lexer.c b/src/language/lexer/lexer.c index 26511614..8b3f2a48 100644 --- a/src/language/lexer/lexer.c +++ b/src/language/lexer/lexer.c @@ -385,10 +385,9 @@ lex_get (struct lexer *lexer) else { unsigned char c = *lexer->prog++; - if (c_isgraph (c)) - msg (SE, _("Bad character in input: `%c'."), c); - else - msg (SE, _("Bad character in input: `\\%o'."), c); + char *c_name = xasprintf (c_isgraph (c) ? "%c" : "\\%o", c); + msg (SE, _("Bad character in input: `%s'."), c_name); + free (c_name); continue; } } diff --git a/src/language/lexer/value-parser.c b/src/language/lexer/value-parser.c index 2cf9cf2b..c780d86f 100644 --- a/src/language/lexer/value-parser.c +++ b/src/language/lexer/value-parser.c @@ -99,8 +99,9 @@ parse_number (struct lexer *lexer, double *x, const enum fmt_type *format) else if (lex_token (lexer) == T_STRING && format != NULL) { union value v; + assert (! (fmt_get_category (*format) & ( FMT_CAT_STRING ))); data_in (ds_ss (lex_tokstr (lexer)), LEGACY_NATIVE, - *format, 0, 0, 0, &v, 0); + *format, 0, 0, 0, NULL, &v, 0); lex_get (lexer); *x = v.f; if (*x == SYSMIS) diff --git a/src/language/stats/aggregate.c b/src/language/stats/aggregate.c index 0d181bd4..08d2f5e1 100644 --- a/src/language/stats/aggregate.c +++ b/src/language/stats/aggregate.c @@ -1105,10 +1105,10 @@ initialize_aggregate_info (struct agr_proc *agr, const struct ccase *input) proto = caseproto_add_width (proto, 0); if ( ! iter->subject) - iter->subject = var_create_internal (0); + iter->subject = var_create_internal (0, 0); if ( ! iter->weight) - iter->weight = var_create_internal (1); + iter->weight = var_create_internal (1, 0); subcase_init_var (&ordering, iter->subject, SC_ASCEND); iter->writer = sort_create_writer (&ordering, proto); diff --git a/src/language/stats/binomial.c b/src/language/stats/binomial.c index b44c5a6f..26e0257c 100644 --- a/src/language/stats/binomial.c +++ b/src/language/stats/binomial.c @@ -261,9 +261,9 @@ binomial_execute (const struct dataset *ds, tab_text (table, 4, 0, TAB_CENTER, _("Observed Prop.")); tab_text (table, 5, 0, TAB_CENTER, _("Test Prop.")); - tab_text (table, 6, 0, TAB_CENTER | TAT_PRINTF, - _("Exact Sig. (%d-tailed)"), - bst->p == 0.5 ? 2: 1); + tab_text_format (table, 6, 0, TAB_CENTER, + _("Exact Sig. (%d-tailed)"), + bst->p == 0.5 ? 2 : 1); tab_vline (table, TAL_2, 2, 0, tab_nr (table) -1); tab_submit (table); diff --git a/src/language/stats/crosstabs.q b/src/language/stats/crosstabs.q index 70bbe5cc..99fa41d9 100644 --- a/src/language/stats/crosstabs.q +++ b/src/language/stats/crosstabs.q @@ -177,6 +177,7 @@ get_var_range (const struct variable *v) struct crosstabs_proc { + const struct dictionary *dict; enum { INTEGER, GENERAL } mode; enum mv_class exclude; bool pivot; @@ -204,6 +205,7 @@ static void init_proc (struct crosstabs_proc *proc, struct dataset *ds) { const struct variable *wv = dict_get_weight (dataset_dict (ds)); + proc->dict = dataset_dict (ds); proc->bad_warn = true; proc->variables = NULL; proc->n_variables = 0; @@ -881,8 +883,8 @@ make_summary_table (struct crosstabs_proc *proc) { tab_double (summary, i * 2 + 1, 0, TAB_RIGHT, n[i], &proc->weight_format); - tab_text (summary, i * 2 + 2, 0, TAB_RIGHT | TAT_PRINTF, "%.1f%%", - n[i] / n[2] * 100.); + tab_text_format (summary, i * 2 + 2, 0, TAB_RIGHT, "%.1f%%", + n[i] / n[2] * 100.); } tab_next_row (summary); @@ -1184,14 +1186,16 @@ create_crosstab_table (struct crosstabs_proc *proc, struct pivot_table *pt) { const struct variable *var = pt->const_vars[i]; size_t ofs; + char *s = NULL; ds_put_format (&title, ", %s=", var_get_name (var)); /* Insert the formatted value of the variable, then trim leading spaces in what was just inserted. */ ofs = ds_length (&title); - data_out (&pt->const_values[i], var_get_print_format (var), - ds_put_uninit (&title, var_get_width (var))); + s = data_out (&pt->const_values[i], dict_get_encoding (proc->dict), var_get_print_format (var)); + ds_put_cstr (&title, s); + free (s); ds_remove (&title, ofs, ss_cspan (ds_substr (&title, ofs, SIZE_MAX), ss_cstr (" "))); } @@ -1233,9 +1237,9 @@ create_chisq_table (struct pivot_table *pt) tab_text (chisq, 3, 0, TAB_RIGHT | TAT_TITLE, _("Asymp. Sig. (2-sided)")); tab_text (chisq, 4, 0, TAB_RIGHT | TAT_TITLE, - _("Exact. Sig. (2-sided)")); + _("Exact Sig. (2-sided)")); tab_text (chisq, 5, 0, TAB_RIGHT | TAT_TITLE, - _("Exact. Sig. (1-sided)")); + _("Exact Sig. (1-sided)")); tab_offset (chisq, 0, 1); return chisq; @@ -1276,8 +1280,8 @@ create_risk_table (struct pivot_table *pt) tab_title (risk, _("Risk estimate.")); tab_offset (risk, pt->n_vars - 2, 0); - tab_joint_text (risk, 2, 0, 3, 0, TAB_CENTER | TAT_TITLE | TAT_PRINTF, - _("95%% Confidence Interval")); + tab_joint_text_format (risk, 2, 0, 3, 0, TAB_CENTER | TAT_TITLE, + _("95%% Confidence Interval")); tab_text (risk, 0, 1, TAB_LEFT | TAT_TITLE, _("Statistic")); tab_text (risk, 1, 1, TAB_RIGHT | TAT_TITLE, _("Value")); tab_text (risk, 2, 1, TAB_RIGHT | TAT_TITLE, _("Lower")); @@ -1519,9 +1523,8 @@ table_value_missing (struct crosstabs_proc *proc, return; } - s.string = tab_alloc (table, print->w); - data_out (v, print, s.string); - s.length = print->w; + s = ss_cstr (data_out_pool (v, dict_get_encoding (proc->dict), print, + table->container)); if (proc->exclude == MV_NEVER && var_is_num_missing (var, v->f, MV_USER)) s.string[s.length++] = 'M'; while (s.length && *s.string == ' ') @@ -1554,16 +1557,15 @@ display_dimensions (struct crosstabs_proc *proc, struct pivot_table *pt, additionally suffixed with a letter `M'. */ static void format_cell_entry (struct tab_table *table, int c, int r, double value, - char suffix, bool mark_missing) + char suffix, bool mark_missing, const struct dictionary *dict) { const struct fmt_spec f = {FMT_F, 10, 1}; union value v; struct substring s; - s.length = 10; - s.string = tab_alloc (table, 16); v.f = value; - data_out (&v, &f, s.string); + s = ss_cstr (data_out_pool (&v, dict_get_encoding (dict), &f, table->container)); + while (*s.string == ' ') { s.length--; @@ -1649,7 +1651,7 @@ display_crosstabulation (struct crosstabs_proc *proc, struct pivot_table *pt, default: NOT_REACHED (); } - format_cell_entry (table, c, i, v, suffix, mark_missing); + format_cell_entry (table, c, i, v, suffix, mark_missing, proc->dict); } mp++; @@ -1700,7 +1702,7 @@ display_crosstabulation (struct crosstabs_proc *proc, struct pivot_table *pt, NOT_REACHED (); } - format_cell_entry (table, pt->n_cols, 0, v, suffix, mark_missing); + format_cell_entry (table, pt->n_cols, 0, v, suffix, mark_missing, proc->dict); tab_next_row (table); } } @@ -1750,7 +1752,7 @@ display_crosstabulation (struct crosstabs_proc *proc, struct pivot_table *pt, NOT_REACHED (); } - format_cell_entry (table, c, i, v, suffix, mark_missing); + format_cell_entry (table, c, i, v, suffix, mark_missing, proc->dict); } last_row = i; } @@ -2060,8 +2062,8 @@ display_directional (struct crosstabs_proc *proc, struct pivot_table *pt, else string = var_get_name (pt->vars[1]); - tab_text (direct, j, 0, TAB_LEFT | TAT_PRINTF, - gettext (stats_names[j][k]), string); + tab_text_format (direct, j, 0, TAB_LEFT, + gettext (stats_names[j][k]), string); } } } diff --git a/src/language/stats/descriptives.c b/src/language/stats/descriptives.c index 58144ceb..7b30a601 100644 --- a/src/language/stats/descriptives.c +++ b/src/language/stats/descriptives.c @@ -905,9 +905,9 @@ display (struct dsc_proc *dsc) nc = 0; tab_text (t, nc++, i + 1, TAB_LEFT, var_get_name (dv->v)); - tab_text (t, nc++, i + 1, TAT_PRINTF, "%g", dv->valid); + tab_text_format (t, nc++, i + 1, 0, "%g", dv->valid); if (dsc->format == DSC_SERIAL) - tab_text (t, nc++, i + 1, TAT_PRINTF, "%g", dv->missing); + tab_text_format (t, nc++, i + 1, 0, "%g", dv->missing); for (j = 0; j < DSC_N_STATS; j++) if (dsc->show_stats & (1ul << j)) diff --git a/src/language/stats/examine.q b/src/language/stats/examine.q index a829112e..e8333b1c 100644 --- a/src/language/stats/examine.q +++ b/src/language/stats/examine.q @@ -1405,10 +1405,10 @@ show_summary (const struct variable **dependent_var, int n_dep_var, TAB_LEFT, n, wfmt); - tab_text (tbl, heading_columns + 1, - heading_rows + j + v * ll_count (&fctr->result_list), - TAB_RIGHT | TAT_PRINTF, - "%g%%", n * 100.0 / result->metrics[v].n); + tab_text_format (tbl, heading_columns + 1, + heading_rows + j + v * ll_count (&fctr->result_list), + TAB_RIGHT, + "%g%%", n * 100.0 / result->metrics[v].n); /* Total Missing */ tab_double (tbl, heading_columns + 2, @@ -1417,12 +1417,12 @@ show_summary (const struct variable **dependent_var, int n_dep_var, result->metrics[v].n - n, wfmt); - tab_text (tbl, heading_columns + 3, - heading_rows + j + v * ll_count (&fctr->result_list), - TAB_RIGHT | TAT_PRINTF, - "%g%%", - (result->metrics[v].n - n) * 100.0 / result->metrics[v].n - ); + tab_text_format (tbl, heading_columns + 3, + heading_rows + j + v * ll_count (&fctr->result_list), + TAB_RIGHT, + "%g%%", + (result->metrics[v].n - n) * 100.0 / result->metrics[v].n + ); /* Total Valid + Missing */ tab_double (tbl, heading_columns + 4, @@ -1431,12 +1431,12 @@ show_summary (const struct variable **dependent_var, int n_dep_var, result->metrics[v].n, wfmt); - tab_text (tbl, heading_columns + 5, - heading_rows + j + v * ll_count (&fctr->result_list), - TAB_RIGHT | TAT_PRINTF, - "%g%%", - (result->metrics[v].n) * 100.0 / result->metrics[v].n - ); + tab_text_format (tbl, heading_columns + 5, + heading_rows + j + v * ll_count (&fctr->result_list), + TAB_RIGHT, + "%g%%", + ((result->metrics[v].n) * 100.0 + / result->metrics[v].n)); ++j; } @@ -1558,11 +1558,11 @@ show_descriptives (const struct variable **dependent_var, TAB_LEFT, _("Mean")); - tab_text (tbl, n_cols - 4, - heading_rows + row_var_start + 1 + i * DESCRIPTIVE_ROWS, - TAB_LEFT | TAT_PRINTF, - _("%g%% Confidence Interval for Mean"), - cmd.n_cinterval[0]); + tab_text_format (tbl, n_cols - 4, + heading_rows + row_var_start + 1 + i * DESCRIPTIVE_ROWS, + TAB_LEFT, + _("%g%% Confidence Interval for Mean"), + cmd.n_cinterval[0]); tab_text (tbl, n_cols - 3, heading_rows + row_var_start + 1 + i * DESCRIPTIVE_ROWS, @@ -1575,9 +1575,8 @@ show_descriptives (const struct variable **dependent_var, _("Upper Bound")); tab_text (tbl, n_cols - 4, - heading_rows + row_var_start + 3 + i * DESCRIPTIVE_ROWS, - TAB_LEFT | TAT_PRINTF, - _("5%% Trimmed Mean")); + heading_rows + row_var_start + 3 + i * DESCRIPTIVE_ROWS, + TAB_LEFT, _("5% Trimmed Mean")); tab_text (tbl, n_cols - 4, heading_rows + row_var_start + 4 + i * DESCRIPTIVE_ROWS, @@ -1848,15 +1847,15 @@ show_extremes (const struct variable **dependent_var, for ( e = 1; e <= cmd.st_n; ++e ) { - tab_text (tbl, n_cols - 3, - heading_rows + row_var_start + row_result_start + e - 1, - TAB_RIGHT | TAT_PRINTF, - _("%d"), e); - - tab_text (tbl, n_cols - 3, - heading_rows + row_var_start + row_result_start + cmd.st_n + e - 1, - TAB_RIGHT | TAT_PRINTF, - _("%d"), e); + tab_text_format (tbl, n_cols - 3, + heading_rows + row_var_start + row_result_start + e - 1, + TAB_RIGHT, + "%d", e); + + tab_text_format (tbl, n_cols - 3, + heading_rows + row_var_start + row_result_start + cmd.st_n + e - 1, + TAB_RIGHT, + "%d", e); } @@ -2120,11 +2119,10 @@ show_percentiles (const struct variable **dependent_var, for (i = 0 ; i < n_percentiles; ++i ) { - tab_text (tbl, n_cols - n_percentiles + i, 1, - TAB_CENTER | TAT_TITLE | TAT_PRINTF, - _("%g"), - subc_list_double_at (&percentile_list, i) - ); + tab_text_format (tbl, n_cols - n_percentiles + i, 1, + TAB_CENTER | TAT_TITLE, + _("%g"), + subc_list_double_at (&percentile_list, i)); } diff --git a/src/language/stats/frequencies.q b/src/language/stats/frequencies.q index 8295f51a..83b864c9 100644 --- a/src/language/stats/frequencies.q +++ b/src/language/stats/frequencies.q @@ -207,6 +207,8 @@ struct freq_tab struct hsh_table *data; /* Undifferentiated data. */ struct freq_mutable *valid; /* Valid freqs. */ int n_valid; /* Number of total freqs. */ + const struct dictionary *dict; /* The dict from whence entries in the table + come */ struct freq_mutable *missing; /* Missing freqs. */ int n_missing; /* Number of missing freqs. */ @@ -755,6 +757,7 @@ frq_custom_variables (struct lexer *lexer, struct dataset *ds, struct cmd_freque } vf = var_attach_aux (v, xmalloc (sizeof *vf), var_dtor_free); vf->tab.valid = vf->tab.missing = NULL; + vf->tab.dict = dataset_dict (ds); vf->n_groups = 0; vf->groups = NULL; vf->width = var_get_width (v); @@ -1091,7 +1094,7 @@ dump_full (const struct variable *v, const struct variable *wv) tab_text (t, 0, r, TAB_LEFT, label); } - tab_value (t, 0 + lab, r, TAB_NONE, &f->value, &vf->print); + tab_value (t, 0 + lab, r, TAB_NONE, &f->value, ft->dict, &vf->print); tab_double (t, 1 + lab, r, TAB_NONE, f->count, wfmt); tab_double (t, 2 + lab, r, TAB_NONE, percent, NULL); tab_double (t, 3 + lab, r, TAB_NONE, valid_percent, NULL); @@ -1109,7 +1112,7 @@ dump_full (const struct variable *v, const struct variable *wv) tab_text (t, 0, r, TAB_LEFT, label); } - tab_value (t, 0 + lab, r, TAB_NONE, &f->value, &vf->print); + tab_value (t, 0 + lab, r, TAB_NONE, &f->value, ft->dict, &vf->print); tab_double (t, 1 + lab, r, TAB_NONE, f->count, wfmt); tab_double (t, 2 + lab, r, TAB_NONE, f->count / ft->total_cases * 100.0, NULL); @@ -1185,7 +1188,7 @@ dump_condensed (const struct variable *v, const struct variable *wv) percent = f->count / ft->total_cases * 100.0; cum_total += f->count / ft->valid_cases * 100.0; - tab_value (t, 0, r, TAB_NONE, &f->value, &vf->print); + tab_value (t, 0, r, TAB_NONE, &f->value, ft->dict, &vf->print); tab_double (t, 1, r, TAB_NONE, f->count, wfmt); tab_double (t, 2, r, TAB_NONE, percent, NULL); tab_double (t, 3, r, TAB_NONE, cum_total, NULL); @@ -1193,7 +1196,7 @@ dump_condensed (const struct variable *v, const struct variable *wv) } for (; f < &ft->valid[n_categories]; f++) { - tab_value (t, 0, r, TAB_NONE, &f->value, &vf->print); + tab_value (t, 0, r, TAB_NONE, &f->value, ft->dict, &vf->print); tab_double (t, 1, r, TAB_NONE, f->count, wfmt); tab_double (t, 2, r, TAB_NONE, f->count / ft->total_cases * 100.0, NULL); diff --git a/src/language/stats/oneway.q b/src/language/stats/oneway.q index 2c1c19e8..0f6b20a1 100644 --- a/src/language/stats/oneway.q +++ b/src/language/stats/oneway.q @@ -394,8 +394,9 @@ show_descriptives (const struct dictionary *dict) tab_vline (t, TAL_0, 7, 0, 0); tab_hline (t, TAL_1, 6, 7, 1); - tab_joint_text (t, 6, 0, 7, 0, TAB_CENTER | TAT_TITLE | TAT_PRINTF, - _("%g%% Confidence Interval for Mean"), confidence*100.0); + tab_joint_text_format (t, 6, 0, 7, 0, TAB_CENTER | TAT_TITLE, + _("%g%% Confidence Interval for Mean"), + confidence*100.0); tab_text (t, 6, 1, TAB_CENTER | TAT_TITLE, _("Lower Bound")); tab_text (t, 7, 1, TAB_CENTER | TAT_TITLE, _("Upper Bound")); @@ -636,14 +637,13 @@ show_contrast_coeffs (short *bad_contrast) for (i = 0; i < cmd.sbc_contrast; ++i ) { - tab_text (t, 1, i + 2, TAB_CENTER | TAT_PRINTF, "%d", i + 1); + tab_text_format (t, 1, i + 2, TAB_CENTER, "%d", i + 1); if ( bad_contrast[i] ) tab_text (t, count + 2, i + 2, TAB_RIGHT, "?" ); else - tab_text (t, count + 2, i + 2, TAB_RIGHT | TAT_PRINTF, "%g", - subc_list_double_at (&cmd.dl_contrast[i], count) - ); + tab_text_format (t, count + 2, i + 2, TAB_RIGHT, "%g", + subc_list_double_at (&cmd.dl_contrast[i], count)); } } @@ -740,12 +740,13 @@ show_contrast_tests (short *bad_contrast) _("Does not assume equal")); } - tab_text (t, 2, (v * lines_per_variable) + i + 1, - TAB_CENTER | TAT_TITLE | TAT_PRINTF, "%d", i + 1); + tab_text_format (t, 2, (v * lines_per_variable) + i + 1, + TAB_CENTER | TAT_TITLE, "%d", i + 1); - tab_text (t, 2, (v * lines_per_variable) + i + 1 + cmd.sbc_contrast, - TAB_CENTER | TAT_TITLE | TAT_PRINTF, "%d", i + 1); + tab_text_format (t, 2, + (v * lines_per_variable) + i + 1 + cmd.sbc_contrast, + TAB_CENTER | TAT_TITLE, "%d", i + 1); if ( bad_contrast[i]) diff --git a/src/language/stats/rank.q b/src/language/stats/rank.q index 8ae4076d..c225370e 100644 --- a/src/language/stats/rank.q +++ b/src/language/stats/rank.q @@ -714,48 +714,44 @@ cmd_rank (struct lexer *lexer, struct dataset *ds) if ( rank_specs[i].rfunc == NORMAL || rank_specs[i].rfunc == PROPORTION ) - tab_output_text (TAT_PRINTF, - _("%s into %s(%s of %s using %s BY %s)"), - var_get_name (src_vars[v]), - var_get_name (rank_specs[i].destvars[v]), - function_name[rank_specs[i].rfunc], - var_get_name (src_vars[v]), - fraction_name(), - ds_cstr (&varlist) - ); + tab_output_text_format (0, + _("%s into %s(%s of %s using %s BY %s)"), + var_get_name (src_vars[v]), + var_get_name (rank_specs[i].destvars[v]), + function_name[rank_specs[i].rfunc], + var_get_name (src_vars[v]), + fraction_name(), + ds_cstr (&varlist)); else - tab_output_text (TAT_PRINTF, - _("%s into %s(%s of %s BY %s)"), - var_get_name (src_vars[v]), - var_get_name (rank_specs[i].destvars[v]), - function_name[rank_specs[i].rfunc], - var_get_name (src_vars[v]), - ds_cstr (&varlist) - ); + tab_output_text_format (0, + _("%s into %s(%s of %s BY %s)"), + var_get_name (src_vars[v]), + var_get_name (rank_specs[i].destvars[v]), + function_name[rank_specs[i].rfunc], + var_get_name (src_vars[v]), + ds_cstr (&varlist)); ds_destroy (&varlist); } else { if ( rank_specs[i].rfunc == NORMAL || rank_specs[i].rfunc == PROPORTION ) - tab_output_text (TAT_PRINTF, - _("%s into %s(%s of %s using %s)"), - var_get_name (src_vars[v]), - var_get_name (rank_specs[i].destvars[v]), - function_name[rank_specs[i].rfunc], - var_get_name (src_vars[v]), - fraction_name() - ); + tab_output_text_format (0, + _("%s into %s(%s of %s using %s)"), + var_get_name (src_vars[v]), + var_get_name (rank_specs[i].destvars[v]), + function_name[rank_specs[i].rfunc], + var_get_name (src_vars[v]), + fraction_name()); else - tab_output_text (TAT_PRINTF, - _("%s into %s(%s of %s)"), - var_get_name (src_vars[v]), - var_get_name (rank_specs[i].destvars[v]), - function_name[rank_specs[i].rfunc], - var_get_name (src_vars[v]) - ); + tab_output_text_format (0, + _("%s into %s(%s of %s)"), + var_get_name (src_vars[v]), + var_get_name (rank_specs[i].destvars[v]), + function_name[rank_specs[i].rfunc], + var_get_name (src_vars[v])); } } } diff --git a/src/language/stats/regression.q b/src/language/stats/regression.q index 05c08dfa..2c259d0f 100644 --- a/src/language/stats/regression.q +++ b/src/language/stats/regression.q @@ -315,9 +315,9 @@ reg_stats_anova (pspp_linreg_cache * c) /* Degrees of freedom */ - tab_text (t, 3, 1, TAB_RIGHT | TAT_PRINTF, "%g", c->dfm); - tab_text (t, 3, 2, TAB_RIGHT | TAT_PRINTF, "%g", c->dfe); - tab_text (t, 3, 3, TAB_RIGHT | TAT_PRINTF, "%g", c->dft); + tab_text_format (t, 3, 1, TAB_RIGHT, "%g", c->dfm); + tab_text_format (t, 3, 2, TAB_RIGHT, "%g", c->dfe); + tab_text_format (t, 3, 3, TAB_RIGHT, "%g", c->dft); /* Mean Squares */ tab_double (t, 4, 1, TAB_RIGHT, msm, NULL); @@ -947,7 +947,7 @@ run_regression (struct casereader *input, struct cmd_regression *cmd, lopts.get_indep_mean_std[i] = 1; } models[k] = pspp_linreg_cache_alloc (dep_var, (const struct variable **) indep_vars, - X->m->size1, X->m->size2); + X->m->size1, n_indep); models[k]->depvar = dep_var; /* For large data sets, use QR decomposition. diff --git a/src/language/stats/reliability.q b/src/language/stats/reliability.q index 166a4dfa..681669d1 100644 --- a/src/language/stats/reliability.q +++ b/src/language/stats/reliability.q @@ -386,7 +386,7 @@ run_reliability (struct casereader *input, struct dataset *ds, tab_dim (tab, tab_natural_dimensions, NULL); tab_flags (tab, SOMF_NO_TITLE ); - tab_text(tab, 0, 0, TAT_PRINTF, "Scale: %s", ds_cstr (&rel->scale_name)); + tab_text_format (tab, 0, 0, 0, "Scale: %s", ds_cstr (&rel->scale_name)); tab_submit(tab); } @@ -720,8 +720,7 @@ case_processing_summary (casenumber n_valid, casenumber n_missing, tab_text (tbl, heading_columns, 0, TAB_CENTER | TAT_TITLE, _("N")); - tab_text (tbl, heading_columns + 1, 0, TAB_CENTER | TAT_TITLE | TAT_PRINTF, - _("%%")); + tab_text (tbl, heading_columns + 1, 0, TAB_CENTER | TAT_TITLE, _("%")); total = n_missing + n_valid; diff --git a/src/language/stats/t-test.q b/src/language/stats/t-test.q index c0a6f477..09a96cfc 100644 --- a/src/language/stats/t-test.q +++ b/src/language/stats/t-test.q @@ -577,10 +577,10 @@ ssbox_independent_samples_populate (struct ssbox *ssb, tab_text (ssb->t, 0, i * 2 + 1, TAB_LEFT, var_get_name (proc->vars[i])); - tab_text (ssb->t, 1, i * 2 + 1, TAB_LEFT | TAT_PRINTF, - "%s%s", prefix[0], val_lab[0]); - tab_text (ssb->t, 1, i * 2 + 1+ 1, TAB_LEFT | TAT_PRINTF, - "%s%s", prefix[1], val_lab[1]); + tab_text_format (ssb->t, 1, i * 2 + 1, TAB_LEFT, + "%s%s", prefix[0], val_lab[0]); + tab_text_format (ssb->t, 1, i * 2 + 1+ 1, TAB_LEFT, + "%s%s", prefix[1], val_lab[1]); /* Fill in the group statistics */ for (count = 0; count < 2; count++) @@ -639,7 +639,7 @@ ssbox_paired_populate (struct ssbox *ssb, struct t_test_proc *proc) struct pair *p = &proc->pairs[i]; int j; - tab_text (ssb->t, 0, i * 2 + 1, TAB_LEFT | TAT_PRINTF, _("Pair %d"), i); + tab_text_format (ssb->t, 0, i * 2 + 1, TAB_LEFT, _("Pair %d"), i); for (j=0; j < 2; j++) { /* Titles */ @@ -757,9 +757,9 @@ trbox_independent_samples_init (struct trbox *self, tab_text (self->t, 9, 2, TAB_CENTER | TAT_TITLE, _("Lower")); tab_text (self->t, 10, 2, TAB_CENTER | TAT_TITLE, _("Upper")); - tab_joint_text (self->t, 9, 1, 10, 1, TAB_CENTER | TAT_PRINTF, - _("%g%% Confidence Interval of the Difference"), - proc->criteria * 100.0); + tab_joint_text_format (self->t, 9, 1, 10, 1, TAB_CENTER, + _("%g%% Confidence Interval of the Difference"), + proc->criteria * 100.0); } /* Populate the independent samples trbox */ @@ -911,9 +911,9 @@ trbox_paired_init (struct trbox *self, struct t_test_proc *proc) tab_hline (self->t, TAL_1, 5, 6, 2); tab_vline (self->t, TAL_GAP, 6, 0, 1); - tab_joint_text (self->t, 5, 1, 6, 1, TAB_CENTER | TAT_PRINTF, - _("%g%% Confidence Interval of the Difference"), - proc->criteria*100.0); + tab_joint_text_format (self->t, 5, 1, 6, 1, TAB_CENTER, + _("%g%% Confidence Interval of the Difference"), + proc->criteria*100.0); tab_text (self->t, 2, 2, TAB_CENTER | TAT_TITLE, _("Mean")); tab_text (self->t, 3, 2, TAB_CENTER | TAT_TITLE, _("Std. Deviation")); @@ -942,10 +942,10 @@ trbox_paired_populate (struct trbox *trb, double t; double df = n - 1; - tab_text (trb->t, 0, i + 3, TAB_LEFT | TAT_PRINTF, _("Pair %d"), i); - tab_text (trb->t, 1, i + 3, TAB_LEFT | TAT_PRINTF, "%s - %s", - var_get_name (pair->v[0]), - var_get_name (pair->v[1])); + tab_text_format (trb->t, 0, i + 3, TAB_LEFT, _("Pair %d"), i); + tab_text_format (trb->t, 1, i + 3, TAB_LEFT, "%s - %s", + var_get_name (pair->v[0]), + var_get_name (pair->v[1])); tab_double (trb->t, 2, i + 3, TAB_RIGHT, pair->mean_diff, NULL); tab_double (trb->t, 3, i + 3, TAB_RIGHT, pair->std_dev_diff, NULL); @@ -995,15 +995,15 @@ trbox_one_sample_init (struct trbox *self, struct t_test_proc *proc) tab_hline (self->t, TAL_1, 1, hsize - 1, 1); tab_vline (self->t, TAL_2, 1, 0, vsize - 1); - tab_joint_text (self->t, 1, 0, hsize - 1, 0, TAB_CENTER | TAT_PRINTF, - _("Test Value = %f"), proc->testval); + tab_joint_text_format (self->t, 1, 0, hsize - 1, 0, TAB_CENTER, + _("Test Value = %f"), proc->testval); tab_box (self->t, -1, -1, -1, TAL_1, 1, 1, hsize - 1, vsize - 1); - tab_joint_text (self->t, 5, 1, 6, 1, TAB_CENTER | TAT_PRINTF, - _("%g%% Confidence Interval of the Difference"), - proc->criteria * 100.0); + tab_joint_text_format (self->t, 5, 1, 6, 1, TAB_CENTER, + _("%g%% Confidence Interval of the Difference"), + proc->criteria * 100.0); tab_vline (self->t, TAL_GAP, 6, 1, 1); tab_hline (self->t, TAL_1, 5, 6, 2); @@ -1115,12 +1115,12 @@ pscbox (struct t_test_proc *proc) sqrt (1 - pow2 (pair->correlation))); /* row headings */ - tab_text (table, 0, i + 1, TAB_LEFT | TAT_TITLE | TAT_PRINTF, - _("Pair %d"), i); - tab_text (table, 1, i + 1, TAB_LEFT | TAT_TITLE | TAT_PRINTF, - _("%s & %s"), - var_get_name (pair->v[0]), - var_get_name (pair->v[1])); + tab_text_format (table, 0, i + 1, TAB_LEFT | TAT_TITLE, + _("Pair %d"), i); + tab_text_format (table, 1, i + 1, TAB_LEFT | TAT_TITLE, + _("%s & %s"), + var_get_name (pair->v[0]), + var_get_name (pair->v[1])); /* row data */ tab_double (table, 2, i + 1, TAB_RIGHT, pair->n, &proc->weight_format); diff --git a/src/language/stats/wilcoxon.c b/src/language/stats/wilcoxon.c index 37d2b191..310206c0 100644 --- a/src/language/stats/wilcoxon.c +++ b/src/language/stats/wilcoxon.c @@ -88,7 +88,7 @@ wilcoxon_execute (const struct dataset *ds, struct wilcoxon_state *ws = xcalloc (sizeof (*ws), t2s->n_pairs); const struct variable *weight = dict_get_weight (dict); - struct variable *weightx = var_create_internal (WEIGHT_IDX); + struct variable *weightx = var_create_internal (WEIGHT_IDX, 0); struct caseproto *proto; input = @@ -108,8 +108,8 @@ wilcoxon_execute (const struct dataset *ds, struct subcase ordering; variable_pair *vp = &t2s->pairs[i]; - ws[i].sign = var_create_internal (0); - ws[i].absdiff = var_create_internal (1); + ws[i].sign = var_create_internal (0, 0); + ws[i].absdiff = var_create_internal (1, 0); r = casereader_create_filter_missing (r, *vp, 2, exclude, @@ -324,12 +324,12 @@ show_tests_box (const struct wilcoxon_state *ws, tab_text (table, 0, 1, TAB_LEFT, _("Z")); - tab_text (table, 0, 2, TAB_LEFT, _("Asymp. Sig (2-tailed)")); + tab_text (table, 0, 2, TAB_LEFT, _("Asymp. Sig. (2-tailed)")); if ( exact ) { - tab_text (table, 0, 3, TAB_LEFT, _("Exact Sig (2-tailed)")); - tab_text (table, 0, 4, TAB_LEFT, _("Exact Sig (1-tailed)")); + tab_text (table, 0, 3, TAB_LEFT, _("Exact Sig. (2-tailed)")); + tab_text (table, 0, 4, TAB_LEFT, _("Exact Sig. (1-tailed)")); #if 0 tab_text (table, 0, 5, TAB_LEFT, _("Point Probability")); diff --git a/src/language/utilities/set.q b/src/language/utilities/set.q index d264a00e..fd4e1a93 100644 --- a/src/language/utilities/set.q +++ b/src/language/utilities/set.q @@ -515,189 +515,183 @@ stc_custom_disk (struct lexer *lexer, struct dataset *ds, struct cmd_set *cmd UN return stc_custom_listing (lexer, ds, cmd, aux); } -static void +static char * show_blanks (const struct dataset *ds UNUSED) { - if (settings_get_blanks () == SYSMIS) - msg (SN, _("BLANKS is SYSMIS.")); - else - msg (SN, _("BLANKS is %g."), settings_get_blanks ()); - + return (settings_get_blanks () == SYSMIS + ? xstrdup ("SYSMIS") + : xasprintf ("%g", settings_get_blanks ())); } -static char * -format_cc (struct substring in, char grouping, char *out) +static void +format_cc (struct string *out, struct substring in, char grouping) { while (!ss_is_empty (in)) { char c = ss_get_char (&in); if (c == grouping || c == '\'') - *out++ = '\''; + ds_put_char (out, '\''); else if (c == '"') - *out++ = '"'; - *out++ = c; + ds_put_char (out, '"'); + ds_put_char (out, c); } - return out; } -static void +static char * show_cc (enum fmt_type type) { const struct fmt_number_style *cc = settings_get_style (type); - char cc_string[FMT_STYLE_AFFIX_MAX * 4 * 2 + 3 + 1]; - char *out; + struct string out; - out = format_cc (cc->neg_prefix, cc->grouping, cc_string); - *out++ = cc->grouping; - out = format_cc (cc->prefix, cc->grouping, out); - *out++ = cc->grouping; - out = format_cc (cc->suffix, cc->grouping, out); - *out++ = cc->grouping; - out = format_cc (cc->neg_suffix, cc->grouping, out); - *out = '\0'; + ds_init_empty (&out); + format_cc (&out, cc->neg_prefix, cc->grouping); + ds_put_char (&out, cc->grouping); + format_cc (&out, cc->prefix, cc->grouping); + ds_put_char (&out, cc->grouping); + format_cc (&out, cc->suffix, cc->grouping); + ds_put_char (&out, cc->grouping); + format_cc (&out, cc->neg_suffix, cc->grouping); - msg (SN, _("%s is \"%s\"."), fmt_name (type), cc_string); + return ds_cstr (&out); } -static void +static char * show_cca (const struct dataset *ds UNUSED) { - show_cc (FMT_CCA); + return show_cc (FMT_CCA); } -static void +static char * show_ccb (const struct dataset *ds UNUSED) { - show_cc (FMT_CCB); + return show_cc (FMT_CCB); } -static void +static char * show_ccc (const struct dataset *ds UNUSED) { - show_cc (FMT_CCC); + return show_cc (FMT_CCC); } -static void +static char * show_ccd (const struct dataset *ds UNUSED) { - show_cc (FMT_CCD); + return show_cc (FMT_CCD); } -static void +static char * show_cce (const struct dataset *ds UNUSED) { - show_cc (FMT_CCE); + return show_cc (FMT_CCE); } -static void +static char * show_decimals (const struct dataset *ds UNUSED) { - msg (SN, _("DECIMAL is \"%c\"."), settings_get_decimal_char (FMT_F)); + return xasprintf ("\"%c\"", settings_get_decimal_char (FMT_F)); } -static void +static char * show_endcmd (const struct dataset *ds UNUSED) { - msg (SN, _("ENDCMD is \"%c\"."), settings_get_endcmd ()); + return xasprintf ("\"%c\"", settings_get_endcmd ()); } -static void +static char * show_errors (const struct dataset *ds UNUSED) { bool terminal = settings_get_error_routing_to_terminal (); bool listing = settings_get_error_routing_to_listing (); - msg (SN, _("ERRORS is \"%s\"."), - terminal && listing ? "BOTH" - : terminal ? "TERMINAL" - : listing ? "LISTING" - : "NONE"); + return xstrdup (terminal && listing ? "BOTH" + : terminal ? "TERMINAL" + : listing ? "LISTING" + : "NONE"); } -static void +static char * show_format (const struct dataset *ds UNUSED) { char str[FMT_STRING_LEN_MAX + 1]; - msg (SN, _("FORMAT is %s."), fmt_to_string (settings_get_format (), str)); + return xstrdup (fmt_to_string (settings_get_format (), str)); } -static void +static char * show_length (const struct dataset *ds UNUSED) { - msg (SN, _("LENGTH is %d."), settings_get_viewlength ()); + return xasprintf ("%d", settings_get_viewlength ()); } -static void +static char * show_locale (const struct dataset *ds UNUSED) { - msg (SN, _("LOCALE is %s"), get_default_encoding ()); + return xstrdup (get_default_encoding ()); } -static void +static char * show_mxerrs (const struct dataset *ds UNUSED) { - msg (SN, _("MXERRS is %d."), settings_get_mxerrs ()); + return xasprintf ("%d", settings_get_mxerrs ()); } -static void +static char * show_mxloops (const struct dataset *ds UNUSED) { - msg (SN, _("MXLOOPS is %d."), settings_get_mxloops ()); + return xasprintf ("%d", settings_get_mxloops ()); } -static void +static char * show_mxwarns (const struct dataset *ds UNUSED) { - msg (SN, _("MXWARNS is %d."), settings_get_mxwarns ()); + return xasprintf ("%d", settings_get_mxwarns ()); } -/* Outputs that SETTING has the given INTEGER_FORMAT value. */ -static void -show_integer_format (const char *setting, enum integer_format integer_format) +/* Returns a name for the given INTEGER_FORMAT value. */ +static char * +show_integer_format (enum integer_format integer_format) { - msg (SN, _("%s is %s (%s)."), - setting, - (integer_format == INTEGER_MSB_FIRST ? "MSBFIRST" - : integer_format == INTEGER_LSB_FIRST ? "LSBFIRST" - : "VAX"), - integer_format == INTEGER_NATIVE ? "NATIVE" : "nonnative"); + return xasprintf ("%s (%s)", + (integer_format == INTEGER_MSB_FIRST ? "MSBFIRST" + : integer_format == INTEGER_LSB_FIRST ? "LSBFIRST" + : "VAX"), + integer_format == INTEGER_NATIVE ? "NATIVE" : "nonnative"); } -/* Outputs that SETTING has the given FLOAT_FORMAT value. */ -static void -show_float_format (const char *setting, enum float_format float_format) +/* Returns a name for the given FLOAT_FORMAT value. */ +static char * +show_float_format (enum float_format float_format) { const char *format_name = ""; switch (float_format) { case FLOAT_IEEE_SINGLE_LE: - format_name = "ISL (32-bit IEEE 754 single, little-endian)"; + format_name = _("ISL (32-bit IEEE 754 single, little-endian)"); break; case FLOAT_IEEE_SINGLE_BE: - format_name = "ISB (32-bit IEEE 754 single, big-endian)"; + format_name = _("ISB (32-bit IEEE 754 single, big-endian)"); break; case FLOAT_IEEE_DOUBLE_LE: - format_name = "IDL (64-bit IEEE 754 double, little-endian)"; + format_name = _("IDL (64-bit IEEE 754 double, little-endian)"); break; case FLOAT_IEEE_DOUBLE_BE: - format_name = "IDB (64-bit IEEE 754 double, big-endian)"; + format_name = _("IDB (64-bit IEEE 754 double, big-endian)"); break; case FLOAT_VAX_F: - format_name = "VF (32-bit VAX F, VAX-endian)"; + format_name = _("VF (32-bit VAX F, VAX-endian)"); break; case FLOAT_VAX_D: - format_name = "VD (64-bit VAX D, VAX-endian)"; + format_name = _("VD (64-bit VAX D, VAX-endian)"); break; case FLOAT_VAX_G: - format_name = "VG (64-bit VAX G, VAX-endian)"; + format_name = _("VG (64-bit VAX G, VAX-endian)"); break; case FLOAT_Z_SHORT: - format_name = "ZS (32-bit IBM Z hexadecimal short, big-endian)"; + format_name = _("ZS (32-bit IBM Z hexadecimal short, big-endian)"); break; case FLOAT_Z_LONG: - format_name = "ZL (64-bit IBM Z hexadecimal long, big-endian)"; + format_name = _("ZL (64-bit IBM Z hexadecimal long, big-endian)"); break; case FLOAT_FP: @@ -705,73 +699,64 @@ show_float_format (const char *setting, enum float_format float_format) NOT_REACHED (); } - msg (SN, _("%s is %s (%s)."), - setting, format_name, - float_format == FLOAT_NATIVE_DOUBLE ? "NATIVE" : "nonnative"); + return xasprintf ("%s (%s)", format_name, + (float_format == FLOAT_NATIVE_DOUBLE + ? "NATIVE" : "nonnative")); } -static void +static char * show_rib (const struct dataset *ds UNUSED) { - show_integer_format ("RIB", settings_get_input_integer_format ()); + return show_integer_format (settings_get_input_integer_format ()); } -static void +static char * show_rrb (const struct dataset *ds UNUSED) { - show_float_format ("RRB", settings_get_input_float_format ()); + return show_float_format (settings_get_input_float_format ()); } -static void +static char * show_scompression (const struct dataset *ds UNUSED) { - if (settings_get_scompression ()) - msg (SN, _("SCOMPRESSION is ON.")); - else - msg (SN, _("SCOMPRESSION is OFF.")); + return xstrdup (settings_get_scompression () ? "ON" : "OFF"); } -static void +static char * show_undefined (const struct dataset *ds UNUSED) { - if (settings_get_undefined ()) - msg (SN, _("UNDEFINED is WARN.")); - else - msg (SN, _("UNDEFINED is NOWARN.")); + return xstrdup (settings_get_undefined () ? "WARN" : "NOWARN"); } -static void +static char * show_weight (const struct dataset *ds) { const struct variable *var = dict_get_weight (dataset_dict (ds)); - if (var == NULL) - msg (SN, _("WEIGHT is off.")); - else - msg (SN, _("WEIGHT is variable %s."), var_get_name (var)); + return xstrdup (var != NULL ? var_get_name (var) : "OFF"); } -static void +static char * show_wib (const struct dataset *ds UNUSED) { - show_integer_format ("WIB", settings_get_output_integer_format ()); + return show_integer_format (settings_get_output_integer_format ()); } -static void +static char * show_wrb (const struct dataset *ds UNUSED) { - show_float_format ("WRB", settings_get_output_float_format ()); + return show_float_format (settings_get_output_float_format ()); } -static void +static char * show_width (const struct dataset *ds UNUSED) { - msg (SN, _("WIDTH is %d."), settings_get_viewwidth ()); + return xasprintf ("%d", settings_get_viewwidth ()); } struct show_sbc { const char *name; - void (*function) (const struct dataset *); + char *(*function) (const struct dataset *); }; const struct show_sbc show_table[] = @@ -801,22 +786,34 @@ const struct show_sbc show_table[] = {"WIDTH", show_width}, }; +static void +do_show (const struct dataset *ds, const struct show_sbc *sbc) +{ + char *value = sbc->function (ds); + msg (SN, _("%s is %s."), sbc->name, value); + free (value); +} + static void show_all (const struct dataset *ds) { size_t i; for (i = 0; i < sizeof show_table / sizeof *show_table; i++) - show_table[i].function (ds); + do_show (ds, &show_table[i]); } static void -show_all_cc (void) +show_all_cc (const struct dataset *ds) { int i; - for (i = 0; i < 5; i++) - show_cc (i); + for (i = 0; i < sizeof show_table / sizeof *show_table; i++) + { + const struct show_sbc *sbc = &show_table[i]; + if (!strncmp (sbc->name, "CC", 2)) + do_show (ds, sbc); + } } static void @@ -845,7 +842,7 @@ cmd_show (struct lexer *lexer, struct dataset *ds) if (lex_match (lexer, T_ALL)) show_all (ds); else if (lex_match_id (lexer, "CC")) - show_all_cc (); + show_all_cc (ds); else if (lex_match_id (lexer, "WARRANTY")) show_warranty (ds); else if (lex_match_id (lexer, "COPYING")) @@ -855,10 +852,13 @@ cmd_show (struct lexer *lexer, struct dataset *ds) int i; for (i = 0; i < sizeof show_table / sizeof *show_table; i++) - if (lex_match_id (lexer, show_table[i].name)) - { - show_table[i].function (ds); - goto found; + { + const struct show_sbc *sbc = &show_table[i]; + if (lex_match_id (lexer, sbc->name)) + { + do_show (ds, sbc); + goto found; + } } lex_error (lexer, NULL); return CMD_FAILURE; diff --git a/src/language/xforms/recode.c b/src/language/xforms/recode.c index 60c8f408..62b03ba0 100644 --- a/src/language/xforms/recode.c +++ b/src/language/xforms/recode.c @@ -83,6 +83,8 @@ struct recode_trns { struct pool *pool; + + /* Variable types, for convenience. */ enum val_type src_type; /* src_vars[*] type. */ enum val_type dst_type; /* dst_vars[*] type. */ @@ -90,6 +92,7 @@ struct recode_trns /* Variables. */ const struct variable **src_vars; /* Source variables. */ const struct variable **dst_vars; /* Destination variables. */ + const struct dictionary *dst_dict; /* Dictionary of dst_vars */ char **dst_names; /* Name of dest variables, if they're new. */ size_t var_cnt; /* Number of variables. */ @@ -540,6 +543,8 @@ create_dst_vars (struct recode_trns *trns, struct dictionary *dict) { size_t i; + trns->dst_dict = dict; + for (i = 0; i < trns->var_cnt; i++) { const struct variable **var = &trns->dst_vars[i]; @@ -598,7 +603,7 @@ find_src_numeric (struct recode_trns *trns, double value, const struct variable /* Returns the output mapping in TRNS for an input of VALUE with the given WIDTH, or a null pointer if there is no mapping. */ static const struct map_out * -find_src_string (struct recode_trns *trns, const char *value, +find_src_string (struct recode_trns *trns, const uint8_t *value, const struct variable *src_var) { struct mapping *m; @@ -625,7 +630,7 @@ find_src_string (struct recode_trns *trns, const char *value, msg_disable (); match = data_in (ss_buffer (value, width), LEGACY_NATIVE, - FMT_F, 0, 0, 0, &uv, 0); + FMT_F, 0, 0, 0, trns->dst_dict, &uv, 0); msg_enable (); out->value.f = uv.f; break; diff --git a/src/libpspp/i18n.c b/src/libpspp/i18n.c index 7fd7580e..e08ba280 100644 --- a/src/libpspp/i18n.c +++ b/src/libpspp/i18n.c @@ -28,6 +28,7 @@ #include "assertion.h" #include "hmapx.h" #include "hash-functions.h" +#include "pool.h" #include "i18n.h" @@ -57,6 +58,7 @@ create_iconv (const char* tocode, const char* fromcode) size_t hash; struct hmapx_node *node; struct converter *converter; + assert (fromcode); hash = hash_string (tocode, hash_string (fromcode, 0)); HMAPX_FOR_EACH_WITH_HASH (converter, node, hash, &map) @@ -84,13 +86,22 @@ create_iconv (const char* tocode, const char* fromcode) return converter->conv; } -/* Return a string based on TEXT converted according to HOW. +char * +recode_string (const char *to, const char *from, + const char *text, int length) +{ + return recode_string_pool (to, from, text, length, NULL); +} + + +/* Return a string based on TEXT which must be encoded using FROM. + The returned string will be encoded in TO. If length is not -1, then it must be the number of bytes in TEXT. The returned string must be freed when no longer required. */ char * -recode_string (const char *to, const char *from, - const char *text, int length) +recode_string_pool (const char *to, const char *from, + const char *text, int length, struct pool *pool) { char *outbuf = 0; size_t outbufferlength; @@ -109,7 +120,6 @@ recode_string (const char *to, const char *from, if ( length == -1 ) length = strlen(text); - if (to == NULL) to = default_encoding; @@ -120,7 +130,7 @@ recode_string (const char *to, const char *from, if ( outbufferlength > length) break; - outbuf = xmalloc(outbufferlength); + outbuf = pool_malloc (pool, outbufferlength); op = outbuf; outbytes = outbufferlength; @@ -157,7 +167,7 @@ recode_string (const char *to, const char *from, case E2BIG: free (outbuf); outbufferlength <<= 1; - outbuf = xmalloc (outbufferlength); + outbuf = pool_malloc (pool, outbufferlength); op = outbuf; outbytes = outbufferlength; inbytes = length; @@ -175,7 +185,7 @@ recode_string (const char *to, const char *from, if (outbytes == 0 ) { char *const oldaddr = outbuf; - outbuf = xrealloc (outbuf, outbufferlength + 1); + outbuf = pool_realloc (pool, outbuf, outbufferlength + 1); op += (outbuf - oldaddr) ; } diff --git a/src/libpspp/i18n.h b/src/libpspp/i18n.h index 2c30a700..9c8f7c14 100644 --- a/src/libpspp/i18n.h +++ b/src/libpspp/i18n.h @@ -24,7 +24,12 @@ void i18n_init (void); #define UTF8 "UTF-8" -char * recode_string (const char *to, const char *from, +struct pool; + +char *recode_string_pool (const char *to, const char *from, + const char *text, int length, struct pool *pool); + +char *recode_string (const char *to, const char *from, const char *text, int len); diff --git a/src/libpspp/legacy-encoding.c b/src/libpspp/legacy-encoding.c index 45f0195f..18a62197 100644 --- a/src/libpspp/legacy-encoding.c +++ b/src/libpspp/legacy-encoding.c @@ -17,116 +17,25 @@ #include #include - -#include "str.h" - -static const char ascii_to_ebcdic[256]; -static const char ebcdic_to_ascii[256]; - -void -legacy_recode (enum legacy_encoding from, const char *src, - enum legacy_encoding to, char *dst, - size_t size) -{ - if (from != to) - { - const char *table; - size_t i; - - table = from == LEGACY_ASCII ? ascii_to_ebcdic : ebcdic_to_ascii; - for (i = 0; i < size; i++) - dst[i] = table[(unsigned char) src[i]]; - } - else - { - if (src != dst) - memcpy (dst, src, size); - } -} +#include +#include char -legacy_to_native (enum legacy_encoding from, char c) +legacy_to_native (const char *from, char c) { - legacy_recode (from, &c, LEGACY_NATIVE, &c, 1); - return c; + char x; + char *s = recode_string (LEGACY_NATIVE, from, &c, 1); + x = s[0]; + free (s); + return x; } char -legacy_from_native (enum legacy_encoding to, char c) +legacy_from_native (const char *to, char c) { - legacy_recode (LEGACY_NATIVE, &c, to, &c, 1); - return c; + char x; + char *s = recode_string (to, LEGACY_NATIVE, &c, 1); + x = s[0]; + free (s); + return x; } - -static const char ascii_to_ebcdic[256] = - { - 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, - 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, - 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, - 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, - 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, - 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, - 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, - 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, - 0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x9a, 0x6d, - 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, - 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, - 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0x5f, 0x07, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, - 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b, - 0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, - 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xe1, - 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, - 0x49, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, - 0x58, 0x59, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, - 0x76, 0x77, 0x78, 0x80, 0x8a, 0x8b, 0x8c, 0x8d, - 0x8e, 0x8f, 0x90, 0x6a, 0x9b, 0x9c, 0x9d, 0x9e, - 0x9f, 0xa0, 0xaa, 0xab, 0xac, 0x4a, 0xae, 0xaf, - 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, - 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xa1, 0xbe, 0xbf, - 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xda, 0xdb, - 0xdc, 0xdd, 0xde, 0xdf, 0xea, 0xeb, 0xec, 0xed, - 0xee, 0xef, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, - }; - -static const char ebcdic_to_ascii[256] = - { - 0x00, 0x01, 0x02, 0x03, 0x9c, 0x09, 0x86, 0x7f, - 0x97, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x10, 0x11, 0x12, 0x13, 0x9d, 0x85, 0x08, 0x87, - 0x18, 0x19, 0x92, 0x8f, 0x1c, 0x1d, 0x1e, 0x1f, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x0a, 0x17, 0x1b, - 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, - 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, - 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, - 0x20, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, - 0xa7, 0xa8, 0xd5, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, - 0x26, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, - 0xb0, 0xb1, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x7e, - 0x2d, 0x2f, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, - 0xb8, 0xb9, 0xcb, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, - 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, - 0xc2, 0x60, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, - 0xc3, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, - 0xca, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, - 0x71, 0x72, 0x5e, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, - 0xd1, 0xe5, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, - 0x79, 0x7a, 0xd2, 0xd3, 0xd4, 0x5b, 0xd6, 0xd7, - 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, - 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0x5d, 0xe6, 0xe7, - 0x7b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, - 0x48, 0x49, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, - 0x7d, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, - 0x51, 0x52, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, - 0x5c, 0x9f, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, - 0x59, 0x5a, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, - }; - diff --git a/src/libpspp/legacy-encoding.h b/src/libpspp/legacy-encoding.h index 12afe42b..c6ae0ab4 100644 --- a/src/libpspp/legacy-encoding.h +++ b/src/libpspp/legacy-encoding.h @@ -17,30 +17,18 @@ #ifndef LIBPSPP_LEGACY_ENCODING #define LIBPSPP_LEGACY_ENCODING 1 -#include #include -/* A legacy character encoding. - This exists only to handle the specific legacy EBCDIC-to-ASCII - recoding that MODE=360 file handles perform. */ -enum legacy_encoding - { - LEGACY_ASCII, /* ASCII or similar character set. */ - LEGACY_EBCDIC, /* IBM EBCDIC character set. */ - - /* Native character set. */ #if 'A' == 0x41 - LEGACY_NATIVE = LEGACY_ASCII +#define LEGACY_NATIVE "ASCII" #elif 'A' == 0xc1 - LEGACY_NATIVE = LEGACY_EBCDIC +#define LEGACY_NATIVE "EBCDIC-US" #else #error Cannot detect native character set. #endif - }; -void legacy_recode (enum legacy_encoding, const char *src, - enum legacy_encoding, char *dst, size_t); -char legacy_to_native (enum legacy_encoding from, char) PURE_FUNCTION; -char legacy_from_native (enum legacy_encoding to, char) PURE_FUNCTION; +char legacy_to_native (const char *from, char) PURE_FUNCTION; +char legacy_from_native (const char *to, char) PURE_FUNCTION; + #endif /* libpspp/legacy-encoding.h */ diff --git a/src/libpspp/sparse-xarray.c b/src/libpspp/sparse-xarray.c index b6f69d94..893fe390 100644 --- a/src/libpspp/sparse-xarray.c +++ b/src/libpspp/sparse-xarray.c @@ -18,6 +18,7 @@ #include +#include #include #include #include diff --git a/src/libpspp/str.c b/src/libpspp/str.c index ccd7739c..afe32de9 100644 --- a/src/libpspp/str.c +++ b/src/libpspp/str.c @@ -1441,3 +1441,25 @@ ds_relocate (struct string *st) free ((char *) rel); } } + + + + +/* Operations on uint8_t "strings" */ + +/* Copies buffer SRC, of SRC_SIZE bytes, to DST, of DST_SIZE bytes. + DST is truncated to DST_SIZE bytes or padded on the right with + copies of PAD as needed. */ +void +u8_buf_copy_rpad (uint8_t *dst, size_t dst_size, + const uint8_t *src, size_t src_size, + char pad) +{ + if (src_size >= dst_size) + memmove (dst, src, dst_size); + else + { + memmove (dst, src, src_size); + memset (&dst[src_size], pad, dst_size - src_size); + } +} diff --git a/src/libpspp/str.h b/src/libpspp/str.h index b9be394c..a134079f 100644 --- a/src/libpspp/str.h +++ b/src/libpspp/str.h @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -223,4 +224,10 @@ char *ds_put_uninit (struct string *st, size_t incr); /* calls relocate from gnulib on ST */ void ds_relocate (struct string *st); + +void u8_buf_copy_rpad (uint8_t *dst, size_t dst_size, + const uint8_t *src, size_t src_size, + char pad); + + #endif /* str_h */ diff --git a/src/math/covariance-matrix.c b/src/math/covariance-matrix.c index 2a00a56d..89660ba9 100644 --- a/src/math/covariance-matrix.c +++ b/src/math/covariance-matrix.c @@ -61,7 +61,9 @@ struct covariance_matrix struct moments1 **m1; struct moments **m; const struct variable **v_variables; + const struct interaction_variable **interactions; size_t n_variables; + size_t n_intr; int n_pass; int missing_handling; enum mv_class missing_value; @@ -119,6 +121,7 @@ covariance_matrix_init (size_t n_variables, result->ca = covariance_hsh_create (&result->n_variables); result->m = NULL; result->m1 = NULL; + result->n_intr = 0; result->missing_handling = missing_handling; result->missing_value = missing_value; result->accumulate = (result->missing_handling == LISTWISE) ? @@ -147,6 +150,14 @@ covariance_matrix_init (size_t n_variables, return result; } +void +covariance_interaction_set (struct covariance_matrix *cov, + const struct interaction_variable **intr, size_t n_intr) +{ + cov->interactions = intr; + cov->n_intr = n_intr; +} + static size_t get_n_rows (size_t n_variables, const struct variable *v_variables[]) { @@ -177,6 +188,44 @@ covariance_matrix_create (size_t n_variables, return design_matrix_create (n_variables, v_variables, n_rows); } +static size_t +get_n_rows_s (const struct variable *var) +{ + size_t result = 0; + if (var_is_numeric (var)) + { + result++; + } + else + { + result += cat_get_n_categories (var) - 1; + } + return result; +} +static struct design_matrix * +covariance_matrix_create_s (struct covariance_matrix *cov) +{ + struct variable **v_variables; + size_t n_variables; + size_t n_rows = 0; + size_t i; + size_t j; + + n_variables = cov->n_variables + cov->n_intr; + v_variables = xnmalloc (n_variables, sizeof (*v_variables)); + for (i = 0; i < cov->n_variables; i++) + { + v_variables[i] = cov->v_variables[i]; + n_rows += get_n_rows_s (v_variables[i]); + } + for (j = 0; j < cov->n_intr; j++) + { + v_variables[i + j] = interaction_get_variable (cov->interactions[j]); + n_rows += get_n_rows_s (v_variables[i]); + } + return design_matrix_create (n_variables, v_variables, n_rows); +} + static void update_moments1 (struct covariance_matrix *cov, size_t i, double x) { @@ -550,12 +599,12 @@ get_covariance_variables (const struct covariance_matrix *cov) } static void -update_hash_entry (struct hsh_table *c, - const struct variable *v1, - const struct variable *v2, - const union value *val1, const union value *val2, - const struct interaction_value *i_val1, - const struct interaction_value *i_val2) +update_hash_entry_intr (struct hsh_table *c, + const struct variable *v1, + const struct variable *v2, + const union value *val1, const union value *val2, + const struct interaction_value *i_val1, + const struct interaction_value *i_val2) { struct covariance_accumulator *ca; struct covariance_accumulator *new_entry; @@ -588,6 +637,56 @@ update_hash_entry (struct hsh_table *c, } } +static void +update_hash_entry (struct hsh_table *c, + const struct variable *v1, + const struct variable *v2, + const union value *val1, const union value *val2) +{ + struct covariance_accumulator *ca; + struct covariance_accumulator *new_entry; + + ca = get_new_covariance_accumulator (v1, v2, val1, val2); + ca->dot_product = update_product (ca->v1, ca->v2, ca->val1, ca->val2); + ca->sum1 = update_sum (ca->v1, ca->val1, 1.0); + ca->sum2 = update_sum (ca->v2, ca->val2, 1.0); + ca->ssize = 1.0; + new_entry = hsh_insert (c, ca); + + if (new_entry != NULL) + { + new_entry->dot_product += ca->dot_product; + new_entry->ssize += 1.0; + new_entry->sum1 += ca->sum1; + new_entry->sum2 += ca->sum2; + /* + If DOT_PRODUCT is null, CA was not already in the hash + hable, so we don't free it because it was just inserted. + If DOT_PRODUCT was not null, CA is already in the hash table. + Unnecessary now, it must be freed here. + */ + free (ca); + } +} + +static void +inner_intr_loop (struct covariance_matrix *cov, const struct ccase *ccase, const struct variable *var1, + const union value *val1, const struct interaction_variable **i_var, + const struct interaction_value *i_val1, size_t j) +{ + struct variable *var2; + union value *val2; + struct interaction_value *i_val2; + + var2 = interaction_get_variable (i_var[j]); + i_val2 = interaction_case_data (ccase, i_var[j]); + val2 = interaction_value_get (i_val2); + + if (!var_is_value_missing (var2, val2, cov->missing_value)) + { + update_hash_entry_intr (cov->ca, var1, var2, val1, val2, i_val1, i_val2); + } +} /* Compute the covariance matrix in a single data-pass. Cases with missing values are dropped pairwise, in other words, only if one of @@ -608,6 +707,8 @@ covariance_accumulate_pairwise (struct covariance_matrix *cov, const union value *val1; const union value *val2; const struct variable **v_variables; + const struct variable *var1; + const struct variable *var2; struct interaction_value *i_val1 = NULL; struct interaction_value *i_val2 = NULL; @@ -619,39 +720,42 @@ covariance_accumulate_pairwise (struct covariance_matrix *cov, for (i = 0; i < cov->n_variables; ++i) { - if (is_interaction (v_variables[i], i_var, n_intr)) - { - i_val1 = interaction_case_data (ccase, v_variables[i], i_var, n_intr); - val1 = interaction_value_get (i_val1); - } - else - { - val1 = case_data (ccase, v_variables[i]); - } - if (!var_is_value_missing (v_variables[i], val1, cov->missing_value)) + var1 = v_variables[i]; + val1 = case_data (ccase, var1); + if (!var_is_value_missing (var1, val1, cov->missing_value)) { - cat_value_update (v_variables[i], val1); - if (var_is_numeric (v_variables[i])) + cat_value_update (var1, val1); + if (var_is_numeric (var1)) cov->update_moments (cov, i, val1->f); for (j = i; j < cov->n_variables; j++) { - if (is_interaction (v_variables[j], i_var, n_intr)) - { - i_val2 = interaction_case_data (ccase, v_variables[j], i_var, n_intr); - val2 = interaction_value_get (i_val2); - } - else - { - val2 = case_data (ccase, v_variables[j]); - } + var2 = v_variables[j]; + val2 = case_data (ccase, var2); if (!var_is_value_missing - (v_variables[j], val2, cov->missing_value)) + (var2, val2, cov->missing_value)) { - update_hash_entry (cov->ca, v_variables[i], v_variables[j], - val1, val2, i_val1, i_val2); + update_hash_entry (cov->ca, var1, var2, val1, val2); } } + for (j = 0; j < cov->n_intr; j++) + { + inner_intr_loop (cov, ccase, var1, val1, i_var, i_val1, j); + } + } + } + for (i = 0; i < cov->n_intr; i++) + { + var1 = interaction_get_variable (i_var[i]); + i_val1 = interaction_case_data (ccase, i_var[i]); + val1 = interaction_value_get (i_val1); + cat_value_update (var1, val1); + if (!var_is_value_missing (var1, val1, cov->missing_value)) + { + for (j = i; j < cov->n_intr; j++) + { + inner_intr_loop (cov, ccase, var1, val1, i_var, i_val1, j); + } } } } @@ -693,32 +797,15 @@ covariance_accumulate_listwise (struct covariance_matrix *cov, for (i = 0; i < cov->n_variables; ++i) { - if (is_interaction (v_variables[i], i_var, n_intr)) - { - i_val1 = interaction_case_data (ccase, v_variables[i], i_var, n_intr); - val1 = interaction_value_get (i_val1); - } - else - { - val1 = case_data (ccase, v_variables[i]); - } + val1 = case_data (ccase, v_variables[i]); cat_value_update (v_variables[i], val1); if (var_is_numeric (v_variables[i])) cov->update_moments (cov, i, val1->f); for (j = i; j < cov->n_variables; j++) { - if (is_interaction (v_variables[j], i_var, n_intr)) - { - i_val2 = interaction_case_data (ccase, v_variables[j], i_var, n_intr); - val2 = interaction_value_get (i_val2); - } - else - { - val2 = case_data (ccase, v_variables[j]); - } update_hash_entry (cov->ca, v_variables[i], v_variables[j], - val1, val2, i_val1, i_val2); + val1, val2); } } } @@ -829,15 +916,18 @@ get_sum (const struct covariance_matrix *cov, size_t i) else { k = 0; - while (var_get_dict_index (cov->v_variables[k]) != var_get_dict_index (var)) + while (cov->v_variables[k] != var && k < cov->n_variables) { k++; } - moments1_calculate (cov->m1[k], &n, &mean, NULL, NULL, NULL); - return mean * n; + if (k < cov->n_variables) + { + moments1_calculate (cov->m1[k], &n, &mean, NULL, NULL, NULL); + return mean * n; + } } } - + return 0.0; } static void @@ -868,8 +958,8 @@ covariance_accumulator_to_matrix (struct covariance_matrix *cov) struct covariance_accumulator *entry; struct hsh_iterator iter; - cov->cov = covariance_matrix_create (cov->n_variables, cov->v_variables); - cov->ssize = covariance_matrix_create (cov->n_variables, cov->v_variables); + cov->cov = covariance_matrix_create_s (cov); + cov->ssize = covariance_matrix_create_s (cov); entry = hsh_first (cov->ca, &iter); while (entry != NULL) { diff --git a/src/math/covariance-matrix.h b/src/math/covariance-matrix.h index 24ce791c..c16e5cbc 100644 --- a/src/math/covariance-matrix.h +++ b/src/math/covariance-matrix.h @@ -40,10 +40,9 @@ enum { LISTWISE, PAIRWISE }; -struct design_matrix *covariance_matrix_create (size_t, - const struct variable *[]); +struct design_matrix *covariance_matrix_create (size_t, const struct variable *[]); -void covariance_matrix_destroy (struct covariance_matrix *cov); +void covariance_matrix_destroy (struct covariance_matrix *); void covariance_pass_two (struct design_matrix *, double, double, double, const struct variable *, const struct variable *, const union value *, @@ -57,4 +56,6 @@ void covariance_matrix_accumulate (struct covariance_matrix *, const struct ccase *, void **, size_t); struct design_matrix *covariance_to_design (const struct covariance_matrix *); double covariance_matrix_get_element (const struct covariance_matrix *, size_t, size_t); +void covariance_interaction_set (struct covariance_matrix *, + const struct interaction_variable **, size_t); #endif diff --git a/src/math/interaction.c b/src/math/interaction.c index c8795ed5..7ed36f66 100644 --- a/src/math/interaction.c +++ b/src/math/interaction.c @@ -38,6 +38,7 @@ #include #include #include +#include struct interaction_variable { @@ -67,6 +68,7 @@ interaction_variable_create (const struct variable **vars, int n_vars) { struct interaction_variable *result = NULL; size_t i; + int width = 0; if (n_vars > 0) { @@ -80,10 +82,11 @@ interaction_variable_create (const struct variable **vars, int n_vars) if (var_is_alpha (vars[i])) { result->n_alpha++; + width = 1; } } } - result->intr = var_create_internal (0); + result->intr = var_create_internal (0, width); return result; } @@ -98,7 +101,7 @@ void interaction_variable_destroy (struct interaction_variable *iv) Get one of the member variables. */ const struct variable * -interaction_variable_get_member (const struct interaction_variable *iv, size_t i) +interaction_get_member (const struct interaction_variable *iv, size_t i) { return iv->members[i]; } @@ -122,10 +125,10 @@ interaction_get_n_numeric (const struct interaction_variable *iv) } /* - Get the interaction varibale itself. + Get the interaction variable itself. */ const struct variable * -interaction_variable_get_var (const struct interaction_variable *iv) +interaction_get_variable (const struct interaction_variable *iv) { return iv->intr; } @@ -146,20 +149,19 @@ interaction_value_create (const struct interaction_variable *var, const union va if (var != NULL) { - int val_width; - char *val; + uint8_t *val; + int val_width = 1; result = xmalloc (sizeof (*result)); result->intr = var; n_vars = interaction_get_n_vars (var); - val_width = n_vars * MAX_SHORT_STRING + 1; value_init (&result->val, val_width); val = value_str_rw (&result->val, val_width); val[0] = '\0'; result->f = 1.0; for (i = 0; i < n_vars; i++) { - member = interaction_variable_get_member (var, i); + member = interaction_get_member (var, i); if (var_is_value_missing (member, vals[i], MV_ANY)) { @@ -172,7 +174,9 @@ interaction_value_create (const struct interaction_variable *var, const union va if (var_is_alpha (var->members[i])) { int w = var_get_width (var->members[i]); - strncat (val, value_str (vals[i], w), MAX_SHORT_STRING); + value_resize (result, val_width, val_width + w); + u8_strncat (val, value_str (vals[i], w), w); + val = value_str_rw (&result->val, val_width); } else if (var_is_numeric (var->members[i])) { @@ -239,32 +243,22 @@ interaction_value_destroy (struct interaction_value *val) Return a value from a variable that is an interaction. */ struct interaction_value * -interaction_case_data (const struct ccase *ccase, const struct variable *var, - const struct interaction_variable **intr_vars, size_t n_intr) +interaction_case_data (const struct ccase *ccase, const struct interaction_variable *iv) { size_t i; size_t n_vars; - const struct interaction_variable *iv = NULL; - const struct variable *intr; const struct variable *member; const union value **vals = NULL; - for (i = 0; i < n_intr; i++) - { - iv = intr_vars[i]; - intr = interaction_variable_get_var (iv); - if (var_get_dict_index (intr) == var_get_dict_index (var)) - { - break; - } - } n_vars = interaction_get_n_vars (iv); vals = xnmalloc (n_vars, sizeof (*vals)); + for (i = 0; i < n_vars; i++) - { - member = interaction_variable_get_member (iv, i); - vals[i] = case_data (ccase, member); - } + { + member = interaction_get_member (iv, i); + vals[i] = case_data (ccase, member); + } + return interaction_value_create (iv, vals); } @@ -276,7 +270,7 @@ is_interaction (const struct variable *var, const struct interaction_variable ** for (i = 0; i < n_intr; i++) { - intr = interaction_variable_get_var (iv[i]); + intr = interaction_get_variable (iv[i]); if (var_get_dict_index (intr) == var_get_dict_index (var)) { return true; diff --git a/src/math/interaction.h b/src/math/interaction.h index 66025b66..995d0684 100644 --- a/src/math/interaction.h +++ b/src/math/interaction.h @@ -28,14 +28,13 @@ void interaction_value_destroy (struct interaction_value *); size_t interaction_variable_get_n_vars (const struct interaction_variable *); double interaction_value_get_nonzero_entry (const struct interaction_value *); const union value *interaction_value_get (const struct interaction_value *); -const struct variable * interaction_variable_get_var (const struct interaction_variable *); +const struct variable * interaction_get_variable (const struct interaction_variable *); size_t interaction_get_n_numeric (const struct interaction_variable *); size_t interaction_get_n_alpha (const struct interaction_variable *); size_t interaction_get_n_vars (const struct interaction_variable *); -const struct variable * interaction_variable_get_member (const struct interaction_variable *, size_t); +const struct variable * interaction_get_member (const struct interaction_variable *, size_t); bool is_interaction (const struct variable *, const struct interaction_variable **, size_t); struct interaction_value * -interaction_case_data (const struct ccase *, const struct variable *, - const struct interaction_variable **, size_t); +interaction_case_data (const struct ccase *, const struct interaction_variable *); double interaction_value_get_nonzero_entry (const struct interaction_value *); #endif diff --git a/src/math/linreg.c b/src/math/linreg.c index 8028697c..c03af467 100644 --- a/src/math/linreg.c +++ b/src/math/linreg.c @@ -383,8 +383,8 @@ pspp_linreg (const gsl_vector * Y, const struct design_matrix *dm, gsl_matrix_set (design, j, i, tmp); } } - sw = gsl_matrix_calloc (cache->n_indeps + 1, cache->n_indeps + 1); - xtx = gsl_matrix_submatrix (sw, 0, 0, cache->n_indeps, cache->n_indeps); + sw = gsl_matrix_calloc (cache->n_coeffs + 1, cache->n_coeffs + 1); + xtx = gsl_matrix_submatrix (sw, 0, 0, cache->n_coeffs, cache->n_coeffs); for (i = 0; i < xtx.matrix.size1; i++) { @@ -399,8 +399,8 @@ pspp_linreg (const gsl_vector * Y, const struct design_matrix *dm, } } - gsl_matrix_set (sw, cache->n_indeps, cache->n_indeps, cache->sst); - xty = gsl_matrix_column (sw, cache->n_indeps); + gsl_matrix_set (sw, cache->n_coeffs, cache->n_coeffs, cache->sst); + xty = gsl_matrix_column (sw, cache->n_coeffs); /* This loop starts at 1, with i=0 outside the loop, so we can get the model sum of squares due to the first independent variable. @@ -410,7 +410,7 @@ pspp_linreg (const gsl_vector * Y, const struct design_matrix *dm, gsl_vector_set (&(xty.vector), 0, tmp); tmp *= tmp / gsl_vector_get (cache->ssx, 0); gsl_vector_set (cache->ss_indeps, 0, tmp); - for (i = 1; i < cache->n_indeps; i++) + for (i = 1; i < cache->n_coeffs; i++) { xi = gsl_matrix_column (design, i); gsl_blas_ddot (&(xi.vector), Y, &tmp); @@ -641,7 +641,7 @@ double pspp_linreg_get_indep_variable_mean (pspp_linreg_cache *c, const struct v coef = pspp_linreg_get_coeff (c, v, NULL); return pspp_coeff_get_mean (coef); } - return GSL_NAN; + return 0.0; } void pspp_linreg_set_indep_variable_mean (pspp_linreg_cache *c, const struct variable *v, diff --git a/src/output/table.c b/src/output/table.c index 9e925a44..72edf17f 100644 --- a/src/output/table.c +++ b/src/output/table.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -372,18 +373,6 @@ tab_box (struct tab_table *t, int f_h, int f_v, int i_h, int i_v, } } -/* Formats text TEXT and arguments ARGS as indicated in OPT in - TABLE's pool and returns the resultant string. */ -static struct substring -text_format (struct tab_table *table, int opt, const char *text, va_list args) -{ - assert (table != NULL && text != NULL); - - return ss_cstr (opt & TAT_PRINTF - ? pool_vasprintf (table->container, text, args) - : pool_strdup (table->container, text)); -} - /* Set the title of table T to TITLE, which is formatted as if passed to printf(). */ void @@ -518,7 +507,8 @@ tab_natural_dimensions (struct tab_table *t, struct outp_driver *d, from V, displayed with format spec F. */ void tab_value (struct tab_table *table, int c, int r, unsigned char opt, - const union value *v, const struct fmt_spec *f) + const union value *v, const struct dictionary *dict, + const struct fmt_spec *f) { char *contents; @@ -537,11 +527,10 @@ tab_value (struct tab_table *table, int c, int r, unsigned char opt, } #endif - contents = pool_alloc (table->container, f->w); - table->cc[c + r * table->cf] = ss_buffer (contents, f->w); - table->ct[c + r * table->cf] = opt; + contents = data_out_pool (v, dict_get_encoding (dict), f, table->container); - data_out (v, f, contents); + table->cc[c + r * table->cf] = ss_cstr (contents); + table->ct[c + r * table->cf] = opt; } /* Sets cell (C,R) in TABLE, with options OPT, to have value VAL @@ -550,8 +539,7 @@ void tab_fixed (struct tab_table *table, int c, int r, unsigned char opt, double val, int w, int d) { - char *contents; - char buf[40], *cp; + char *s, *cp; struct fmt_spec f; union value double_value; @@ -580,17 +568,15 @@ tab_fixed (struct tab_table *table, int c, int r, unsigned char opt, #endif double_value.f = val; - data_out (&double_value, &f, buf); + s = data_out_pool (&double_value, LEGACY_NATIVE, &f, table->container); - cp = buf; - while (isspace ((unsigned char) *cp) && cp < &buf[w]) + cp = s; + while (isspace ((unsigned char) *cp) && cp < &s[w]) cp++; - f.w = w - (cp - buf); + f.w = w - (cp - s); - contents = pool_alloc (table->container, f.w); - table->cc[c + r * table->cf] = ss_buffer (contents, f.w); + table->cc[c + r * table->cf] = ss_buffer (cp, f.w); table->ct[c + r * table->cf] = opt; - memcpy (contents, cp, f.w); } /* Sets cell (C,R) in TABLE, with options OPT, to have value VAL as @@ -601,11 +587,8 @@ void tab_double (struct tab_table *table, int c, int r, unsigned char opt, double val, const struct fmt_spec *fmt) { - int w; - char *contents; - char buf[40], *cp; - - union value double_value; + struct substring ss; + union value double_value ; assert (table != NULL); @@ -634,35 +617,23 @@ tab_double (struct tab_table *table, int c, int r, unsigned char opt, #endif double_value.f = val; - data_out (&double_value, fmt, buf); + ss = ss_cstr (data_out_pool (&double_value, LEGACY_NATIVE, fmt, table->container)); - cp = buf; - while (isspace ((unsigned char) *cp) && cp < &buf[fmt->w]) - cp++; - w = fmt->w - (cp - buf); + ss_ltrim (&ss, ss_cstr (" ")); - contents = pool_alloc (table->container, w); - table->cc[c + r * table->cf] = ss_buffer (contents, w); + table->cc[c + r * table->cf] = ss; table->ct[c + r * table->cf] = opt; - memcpy (contents, cp, w); } -/* Sets cell (C,R) in TABLE, with options OPT, to have text value - TEXT. */ -void -tab_text (struct tab_table *table, int c, int r, unsigned opt, const char *text, ...) +static void +do_tab_text (struct tab_table *table, int c, int r, unsigned opt, char *text) { - va_list args; - - assert (table != NULL && text != NULL); - - assert (c >= 0 ); - assert (r >= 0 ); + assert (c >= 0); + assert (r >= 0); assert (c < table->nc); assert (r < table->nr); - #if DEBUGGING if (c + table->col_ofs < 0 || r + table->row_ofs < 0 || c + table->col_ofs >= table->nc @@ -677,21 +648,38 @@ tab_text (struct tab_table *table, int c, int r, unsigned opt, const char *text, } #endif - va_start (args, text); - table->cc[c + r * table->cf] = text_format (table, opt, text, args); + table->cc[c + r * table->cf] = ss_cstr (text); table->ct[c + r * table->cf] = opt; - va_end (args); } -/* Joins cells (X1,X2)-(Y1,Y2) inclusive in TABLE, and sets them with - options OPT to have text value TEXT. */ +/* Sets cell (C,R) in TABLE, with options OPT, to have text value + TEXT. */ void -tab_joint_text (struct tab_table *table, int x1, int y1, int x2, int y2, - unsigned opt, const char *text, ...) +tab_text (struct tab_table *table, int c, int r, unsigned opt, + const char *text) { - struct tab_joined_cell *j; + do_tab_text (table, c, r, opt, pool_strdup (table->container, text)); +} - assert (table != NULL && text != NULL); +/* Sets cell (C,R) in TABLE, with options OPT, to have text value + FORMAT, which is formatted as if passed to printf. */ +void +tab_text_format (struct tab_table *table, int c, int r, unsigned opt, + const char *format, ...) +{ + va_list args; + + va_start (args, format); + do_tab_text (table, c, r, opt, + pool_vasprintf (table->container, format, args)); + va_end (args); +} + +static void +do_tab_joint_text (struct tab_table *table, int x1, int y1, int x2, int y2, + unsigned opt, char *text) +{ + struct tab_joined_cell *j; assert (x1 + table->col_ofs >= 0); assert (y1 + table->row_ofs >= 0); @@ -725,14 +713,7 @@ tab_joint_text (struct tab_table *table, int x1, int y1, int x2, int y2, j->y1 = y1 + table->row_ofs; j->x2 = ++x2 + table->col_ofs; j->y2 = ++y2 + table->row_ofs; - - { - va_list args; - - va_start (args, text); - j->contents = text_format (table, opt, text, args); - va_end (args); - } + j->contents = ss_cstr (text); opt |= TAB_JOIN; @@ -759,6 +740,31 @@ tab_joint_text (struct tab_table *table, int x1, int y1, int x2, int y2, } } +/* Joins cells (X1,X2)-(Y1,Y2) inclusive in TABLE, and sets them with + options OPT to have text value TEXT. */ +void +tab_joint_text (struct tab_table *table, int x1, int y1, int x2, int y2, + unsigned opt, const char *text) +{ + do_tab_joint_text (table, x1, y1, x2, y2, opt, + pool_strdup (table->container, text)); +} + +/* Joins cells (X1,X2)-(Y1,Y2) inclusive in TABLE, and sets them + with options OPT to have text value FORMAT, which is formatted + as if passed to printf. */ +void +tab_joint_text_format (struct tab_table *table, int x1, int y1, int x2, int y2, + unsigned opt, const char *format, ...) +{ + va_list args; + + va_start (args, format); + do_tab_joint_text (table, x1, y1, x2, y2, opt, + pool_vasprintf (table->container, format, args)); + va_end (args); +} + /* Sets cell (C,R) in TABLE, with options OPT, to contents STRING. */ void tab_raw (struct tab_table *table, int c, int r, unsigned opt, @@ -804,30 +810,41 @@ wrap_dim (struct tab_table *t, struct outp_driver *d, void *aux UNUSED) t->h[0] = tab_natural_height (t, d, 0); } -/* Outputs text BUF as a table with a single cell having cell options +static void +do_tab_output_text (struct tab_table *t, int options, char *text) +{ + do_tab_text (t, 0, 0, options, text); + tab_flags (t, SOMF_NO_TITLE | SOMF_NO_SPACING); + tab_dim (t, options & TAT_NOWRAP ? nowrap_dim : wrap_dim, NULL); + tab_submit (t); +} + +/* Outputs TEXT as a table with a single cell having cell options OPTIONS, which is a combination of the TAB_* and TAT_* - constants. */ + constants. */ void -tab_output_text (int options, const char *buf, ...) +tab_output_text (int options, const char *text) { - struct tab_table *t = tab_create (1, 1, 0); - char *tmp_buf = NULL; - - if (options & TAT_PRINTF) - { - va_list args; + struct tab_table *table = tab_create (1, 1, 0); + do_tab_output_text (table, options, pool_strdup (table->container, text)); +} - va_start (args, buf); - buf = tmp_buf = xvasprintf (buf, args); - va_end (args); - } +/* Outputs FORMAT as a table with a single cell having cell + options OPTIONS, which is a combination of the TAB_* and TAT_* + constants. FORMAT is formatted as if it was passed through + printf. */ +void +tab_output_text_format (int options, const char *format, ...) +{ + struct tab_table *table; + va_list args; - tab_text (t, 0, 0, options & ~TAT_PRINTF, buf); - tab_flags (t, SOMF_NO_TITLE | SOMF_NO_SPACING); - tab_dim (t, options & TAT_NOWRAP ? nowrap_dim : wrap_dim, NULL); - tab_submit (t); + table = tab_create (1, 1, 0); - free (tmp_buf); + va_start (args, format); + do_tab_output_text (table, options, + pool_vasprintf (table->container, format, args)); + va_end (args); } /* Set table flags to FLAGS. */ diff --git a/src/output/table.h b/src/output/table.h index 2777c59d..1748c24c 100644 --- a/src/output/table.h +++ b/src/output/table.h @@ -147,16 +147,17 @@ void tab_box (struct tab_table *, int f_h, int f_v, int i_h, int i_v, enum { TAT_NONE = 0, /* No options. */ - TAT_PRINTF = 0x0100, /* Format the text string with sprintf. */ TAT_TITLE = 0x0200 | TAB_EMPH, /* Title attributes. */ TAT_NOWRAP = 0x0800 /* No text wrap (tab_output_text() only). */ }; /* Cells. */ struct fmt_spec; +struct dictionary; union value; void tab_value (struct tab_table *, int c, int r, unsigned char opt, - const union value *, const struct fmt_spec *); + const union value *, const struct dictionary *dict, + const struct fmt_spec *); void tab_fixed (struct tab_table *, int c, int r, unsigned char opt, double v, int w, int d); @@ -164,11 +165,15 @@ void tab_fixed (struct tab_table *, int c, int r, unsigned char opt, void tab_double (struct tab_table *, int c, int r, unsigned char opt, double v, const struct fmt_spec *); -void tab_text (struct tab_table *, int c, int r, unsigned opt, - const char *, ...) +void tab_text (struct tab_table *, int c, int r, unsigned opt, const char *); +void tab_text_format (struct tab_table *, int c, int r, unsigned opt, + const char *, ...) PRINTF_FORMAT (5, 6); + void tab_joint_text (struct tab_table *, int x1, int y1, int x2, int y2, - unsigned opt, const char *, ...) + unsigned opt, const char *); +void tab_joint_text_format (struct tab_table *, int x1, int y1, int x2, int y2, + unsigned opt, const char *, ...) PRINTF_FORMAT (7, 8); /* Cell low-level access. */ @@ -185,7 +190,8 @@ void tab_next_row (struct tab_table *); #define tab_col(TABLE) ((TABLE)->col_ofs) /* Simple output. */ -void tab_output_text (int options, const char *string, ...) +void tab_output_text (int options, const char *string); +void tab_output_text_format (int options, const char *, ...) PRINTF_FORMAT (2, 3); /* Embedding the command name in the output. */ diff --git a/src/ui/gui/about.c b/src/ui/gui/about.c index c217833c..d9bc2803 100644 --- a/src/ui/gui/about.c +++ b/src/ui/gui/about.c @@ -24,15 +24,17 @@ #include "about.h" #include "helper.h" +#include +#define _(msgid) gettext (msgid) +#define N_(msgid) msgid + static const gchar *artists[] = { "Patrick Brunier", "Dondi Bogusky", NULL}; void about_new (GtkMenuItem *m, GtkWindow *parent) { - GtkBuilder *xml = builder_new ("psppire.ui"); - - GtkWidget *about = get_widget_assert (xml, "aboutdialog1"); + GtkWidget *about = gtk_about_dialog_new (); GdkPixbuf *pb = gdk_pixbuf_new_from_file_at_size (relocate (PKGDATADIR "/pspplogo.png"), @@ -58,6 +60,17 @@ about_new (GtkMenuItem *m, GtkWindow *parent) gtk_about_dialog_set_license (GTK_ABOUT_DIALOG (about), copyleft); + gtk_about_dialog_set_comments (GTK_ABOUT_DIALOG (about), + _("A program for the analysis of sampled data")); + + gtk_about_dialog_set_copyright (GTK_ABOUT_DIALOG (about), + "Free Software Foundation"); + + + /* TRANSLATORS: Use this string to list the people who have helped with + translation to your language. */ + gtk_about_dialog_set_translator_credits (GTK_ABOUT_DIALOG (about), + _("translator-credits")); gtk_window_set_transient_for (GTK_WINDOW (about), parent); diff --git a/src/ui/gui/compute-dialog.c b/src/ui/gui/compute-dialog.c index 183aa31b..e779fba6 100644 --- a/src/ui/gui/compute-dialog.c +++ b/src/ui/gui/compute-dialog.c @@ -604,7 +604,6 @@ insert_source_row_into_text_view (GtkTreeIter iter, gint *idx; struct variable *var; GtkTreeIter dict_iter; - gchar *name; GtkTextBuffer *buffer; g_return_if_fail (GTK_IS_TEXT_VIEW (dest)); @@ -632,15 +631,10 @@ insert_source_row_into_text_view (GtkTreeIter iter, gtk_tree_path_free (path); - name = recode_string (UTF8, psppire_dict_encoding (dict), - var_get_name (var), - -1); - buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (dest)); erase_selection (buffer); - gtk_text_buffer_insert_at_cursor (buffer, name, -1); + gtk_text_buffer_insert_at_cursor (buffer, var_get_name (var), -1); - g_free (name); } diff --git a/src/ui/gui/dialog-common.c b/src/ui/gui/dialog-common.c index 8d03bed1..5d52204c 100644 --- a/src/ui/gui/dialog-common.c +++ b/src/ui/gui/dialog-common.c @@ -114,15 +114,9 @@ cell_var_name (GtkTreeViewColumn *tree_column, gpointer data) { PsppireDict *dict = data; - struct variable *var; - gchar *name; - - var = get_selected_variable (tree_model, iter, dict); + const struct variable *var = get_selected_variable (tree_model, iter, dict); - name = recode_string (UTF8, psppire_dict_encoding (dict), - var_get_name (var), -1); - g_object_set (cell, "text", name, NULL); - g_free (name); + g_object_set (cell, "text", var_get_name (var), NULL); } diff --git a/src/ui/gui/dict-display.c b/src/ui/gui/dict-display.c index d6b1bcd5..1665d7ff 100644 --- a/src/ui/gui/dict-display.c +++ b/src/ui/gui/dict-display.c @@ -67,7 +67,6 @@ insert_source_row_into_entry (GtkTreeIter iter, gint *idx; struct variable *var; GtkTreeIter dict_iter; - gchar *name; g_return_if_fail (GTK_IS_ENTRY(dest)); @@ -81,10 +80,7 @@ insert_source_row_into_entry (GtkTreeIter iter, gtk_tree_path_free (path); - name = recode_string (UTF8, psppire_dict_encoding (PSPPIRE_DICT (dict)), - var_get_name (var), -1); - gtk_entry_set_text (GTK_ENTRY (dest), name); - g_free (name); + gtk_entry_set_text (GTK_ENTRY (dest), var_get_name (var)); } @@ -123,14 +119,13 @@ is_currently_in_entry (GtkTreeModel *model, GtkTreeIter *iter, PsppireSelector *selector) { gboolean result; - gchar *name; GtkTreeIter dict_iter; GtkTreeModel *dict; struct variable *var; gint dict_index; gint *indeces; GtkTreePath *path; - const gchar *text = gtk_entry_get_text (GTK_ENTRY (selector->dest)); + const gchar *text = gtk_entry_get_text (GTK_ENTRY (selector->dest)); get_base_model (model, iter, &dict, &dict_iter); @@ -144,10 +139,7 @@ is_currently_in_entry (GtkTreeModel *model, GtkTreeIter *iter, gtk_tree_path_free (path); - name = recode_string (UTF8, psppire_dict_encoding (PSPPIRE_DICT (dict)), - var_get_name (var), -1); - result = ( 0 == strcmp (text, name)); - g_free (name); + result = ( 0 == strcmp (text, var_get_name (var) )); return result; } diff --git a/src/ui/gui/find-dialog.c b/src/ui/gui/find-dialog.c index 86d29583..faeb8f64 100644 --- a/src/ui/gui/find-dialog.c +++ b/src/ui/gui/find-dialog.c @@ -427,6 +427,7 @@ struct comparator { const struct variable *var; enum string_cmp_flags flags; + const PsppireDict *dict; bool (*compare) (const struct comparator *, const union value *); @@ -492,20 +493,24 @@ static bool string_value_compare (const struct comparator *cmptr, const union value *val) { + bool found; + char *text; const struct string_comparator *ssc = (const struct string_comparator *) cmptr; int width = var_get_width (cmptr->var); - const char *text = value_str (val, width); - + g_return_val_if_fail (width > 0, false); assert ( ! (cmptr->flags & STR_CMP_LABELS)); - g_return_val_if_fail (width > 0, false); + text = value_to_text (*val, cmptr->dict, *var_get_write_format (cmptr->var)); if ( cmptr->flags & STR_CMP_SUBSTR) - return (NULL != g_strstr_len (text, width, ssc->pattern)); + found = (NULL != g_strstr_len (text, width, ssc->pattern)); else - return (0 == strncmp (text, ssc->pattern, width)); + found = (0 == strncmp (text, ssc->pattern, width)); + + free (text); + return found; } @@ -526,9 +531,9 @@ regexp_value_compare (const struct comparator *cmptr, g_return_val_if_fail (width > 0, false); + text = value_to_text (*val, cmptr->dict, *var_get_write_format (cmptr->var)); /* We must remove trailing whitespace, otherwise $ will not match where one would expect */ - text = g_strndup (value_str (val, width), width); g_strchomp (text); retval = (0 == regexec (&rec->re, text, 0, 0, 0)); @@ -578,7 +583,7 @@ cmptr_value_destroy (struct comparator *cmptr) static struct comparator * -value_comparator_create (const struct variable *var, const char *target) +value_comparator_create (const struct variable *var, const PsppireDict *dict, const char *target) { const struct fmt_spec *fmt; int width ; @@ -589,28 +594,21 @@ value_comparator_create (const struct variable *var, const char *target) cmptr->var = var; cmptr->compare = value_compare ; cmptr->destroy = cmptr_value_destroy; + cmptr->dict = dict; width = var_get_width (var); fmt = var_get_write_format (var); value_init (&vc->pattern, width); - if ( ! data_in (ss_cstr (target), - LEGACY_NATIVE, - fmt->type, - 0, 0, 0, - &vc->pattern, width) ) - { - value_destroy (&vc->pattern, width); - free (vc); - return NULL; - } + text_to_value (target, &vc->pattern, dict, *var_get_write_format (var) ); return cmptr; } static struct comparator * -string_comparator_create (const struct variable *var, const char *target, +string_comparator_create (const struct variable *var, const PsppireDict *dict, + const char *target, enum string_cmp_flags flags) { struct string_comparator *ssc = xzalloc (sizeof (*ssc)); @@ -618,6 +616,7 @@ string_comparator_create (const struct variable *var, const char *target, cmptr->flags = flags; cmptr->var = var; + cmptr->dict = dict; if ( flags & STR_CMP_LABELS) cmptr->compare = string_label_compare; @@ -631,7 +630,7 @@ string_comparator_create (const struct variable *var, const char *target, static struct comparator * -regexp_comparator_create (const struct variable *var, const char *target, +regexp_comparator_create (const struct variable *var, const PsppireDict *dict, const char *target, enum string_cmp_flags flags) { int code; @@ -640,6 +639,7 @@ regexp_comparator_create (const struct variable *var, const char *target, cmptr->flags = flags; cmptr->var = var; + cmptr->dict = dict; cmptr->compare = (flags & STR_CMP_LABELS) ? regexp_label_compare : regexp_value_compare ; @@ -689,16 +689,16 @@ comparator_destroy (struct comparator *cmptr) static struct comparator * -comparator_factory (const struct variable *var, const char *str, +comparator_factory (const struct variable *var, const PsppireDict *dict, const char *str, enum string_cmp_flags flags) { if ( flags & STR_CMP_REGEXP ) - return regexp_comparator_create (var, str, flags); + return regexp_comparator_create (var, dict, str, flags); if ( flags & (STR_CMP_SUBSTR | STR_CMP_LABELS) ) - return string_comparator_create (var, str, flags); + return string_comparator_create (var, dict, str, flags); - return value_comparator_create (var, str); + return value_comparator_create (var, dict, str); } @@ -744,7 +744,7 @@ find_value (const struct find_dialog *fd, casenumber current_row, casenumber i; const struct casenum_iterator *ip = get_iteration_params (fd); struct comparator *cmptr = - comparator_factory (var, target_string, flags); + comparator_factory (var, fd->dict, target_string, flags); value_init (&val, width); if ( ! cmptr) diff --git a/src/ui/gui/helper.c b/src/ui/gui/helper.c index a4c07ca4..ff750b25 100644 --- a/src/ui/gui/helper.c +++ b/src/ui/gui/helper.c @@ -49,13 +49,11 @@ /* Formats a value according to FORMAT The returned string must be freed when no longer required */ gchar * -value_to_text (union value v, struct fmt_spec format) +value_to_text (union value v, const PsppireDict *dict, struct fmt_spec format) { gchar *s = 0; - s = g_new (gchar, format.w + 1); - data_out (&v, &format, s); - s[format.w]='\0'; + s = data_out (&v, dict_get_encoding (dict->dict), &format); g_strchug (s); return s; @@ -65,6 +63,7 @@ value_to_text (union value v, struct fmt_spec format) gboolean text_to_value (const gchar *text, union value *v, + const PsppireDict *dict, struct fmt_spec format) { bool ok; @@ -87,7 +86,8 @@ text_to_value (const gchar *text, union value *v, } msg_disable (); - ok = data_in (ss_cstr (text), LEGACY_NATIVE, format.type, 0, 0, 0, + ok = data_in (ss_cstr (text), UTF8, format.type, 0, 0, 0, + dict->dict, v, fmt_var_width (&format)); msg_enable (); diff --git a/src/ui/gui/helper.h b/src/ui/gui/helper.h index a6287dda..f6c084d4 100644 --- a/src/ui/gui/helper.h +++ b/src/ui/gui/helper.h @@ -25,18 +25,20 @@ #include - +#include "psppire-dict.h" void paste_syntax_in_new_window (const gchar *syntax); struct fmt_spec; + /* Formats a value according to FORMAT The returned string must be freed when no longer required */ -gchar * value_to_text (union value v, struct fmt_spec format); +gchar * value_to_text (union value v, const PsppireDict *dict, struct fmt_spec format); gboolean text_to_value (const gchar *text, union value *v, + const PsppireDict *dict, struct fmt_spec format); GObject *get_object_assert (GtkBuilder *builder, const gchar *name, GType type); diff --git a/src/ui/gui/missing-val-dialog.c b/src/ui/gui/missing-val-dialog.c index 8efbaf97..16a7f6f3 100644 --- a/src/ui/gui/missing-val-dialog.c +++ b/src/ui/gui/missing-val-dialog.c @@ -100,7 +100,8 @@ missing_val_dialog_accept (GtkWidget *w, gpointer data) continue; } - if ( text_to_value (text, &v, *write_spec)) + if ( text_to_value (text, &v, + dialog->dict, *write_spec)) { nvals++; mv_add_value (&dialog->mvl, &v); @@ -126,9 +127,9 @@ missing_val_dialog_accept (GtkWidget *w, gpointer data) const gchar *low_text = gtk_entry_get_text (GTK_ENTRY (dialog->low)); const gchar *high_text = gtk_entry_get_text (GTK_ENTRY (dialog->high)); - if ( text_to_value (low_text, &low_val, *write_spec) + if ( text_to_value (low_text, &low_val, dialog->dict, *write_spec) && - text_to_value (high_text, &high_val, *write_spec) ) + text_to_value (high_text, &high_val, dialog->dict, *write_spec) ) { if ( low_val.f > high_val.f ) { @@ -154,6 +155,7 @@ missing_val_dialog_accept (GtkWidget *w, gpointer data) { union value discrete_val; if ( !text_to_value (discrete_text, &discrete_val, + dialog->dict, *write_spec)) { err_dialog (_("Incorrect value for variable type"), @@ -309,8 +311,9 @@ missing_val_dialog_show (struct missing_val_dialog *dialog) gchar *high_text; mv_get_range (&dialog->mvl, &low.f, &high.f); - low_text = value_to_text (low, *write_spec); - high_text = value_to_text (high, *write_spec); + + low_text = value_to_text (low, dialog->dict, *write_spec); + high_text = value_to_text (high, dialog->dict, *write_spec); gtk_entry_set_text (GTK_ENTRY (dialog->low), low_text); gtk_entry_set_text (GTK_ENTRY (dialog->high), high_text); @@ -320,7 +323,7 @@ missing_val_dialog_show (struct missing_val_dialog *dialog) if ( mv_has_value (&dialog->mvl)) { gchar *text; - text = value_to_text (*mv_get_value (&dialog->mvl, 0), *write_spec); + text = value_to_text (*mv_get_value (&dialog->mvl, 0), dialog->dict, *write_spec); gtk_entry_set_text (GTK_ENTRY (dialog->discrete), text); g_free (text); } @@ -341,7 +344,7 @@ missing_val_dialog_show (struct missing_val_dialog *dialog) { gchar *text ; - text = value_to_text (*mv_get_value (&dialog->mvl, i), + text = value_to_text (*mv_get_value (&dialog->mvl, i), dialog->dict, *write_spec); gtk_entry_set_text (GTK_ENTRY (dialog->mv[i]), text); g_free (text); diff --git a/src/ui/gui/missing-val-dialog.h b/src/ui/gui/missing-val-dialog.h index 7dc079d7..82acf975 100644 --- a/src/ui/gui/missing-val-dialog.h +++ b/src/ui/gui/missing-val-dialog.h @@ -32,6 +32,9 @@ struct missing_val_dialog /* The variable whose missing values are to be updated */ struct variable *pv; + /* The dictionary to which that value belongs */ + PsppireDict *dict; + /* local copy */ struct missing_values mvl; diff --git a/src/ui/gui/psppire-data-editor.c b/src/ui/gui/psppire-data-editor.c index 7c3fca68..38250f7e 100644 --- a/src/ui/gui/psppire-data-editor.c +++ b/src/ui/gui/psppire-data-editor.c @@ -744,15 +744,10 @@ update_data_ref_entry (const PsppireSheet *sheet, gchar *text = g_strdup_printf ("%d: %s", row + FIRST_CASE_NUMBER, var_get_name (var)); - gchar *s = recode_string (UTF8, - psppire_dict_encoding (data_store->dict), - text, -1); - g_free (text); - - gtk_entry_set_text (GTK_ENTRY (de->cell_ref_entry), s); + gtk_entry_set_text (GTK_ENTRY (de->cell_ref_entry), text); - g_free (s); + g_free (text); } else goto blank_entry; @@ -1331,10 +1326,14 @@ psppire_data_editor_insert_case (PsppireDataEditor *de) { glong posn = -1; - if ( de->data_sheet[0]->state == PSPPIRE_SHEET_ROW_SELECTED ) - posn = PSPPIRE_SHEET (de->data_sheet[0])->range.row0; + if ( PSPPIRE_SHEET (de->data_sheet[0])->select_status == PSPPIRE_SHEET_ROW_SELECTED ) + { + posn = PSPPIRE_SHEET (de->data_sheet[0])->range.row0; + } else - posn = PSPPIRE_SHEET (de->data_sheet[0])->active_cell.row; + { + posn = PSPPIRE_SHEET (de->data_sheet[0])->active_cell.row; + } if ( posn == -1 ) posn = 0; @@ -1647,20 +1646,18 @@ enum { /* Perform data_out for case CC, variable V, appending to STRING */ static void -data_out_g_string (GString *string, const struct variable *v, +data_out_g_string (GString *string, const struct dictionary *dict, + const struct variable *v, const struct ccase *cc) { - char *buf ; - const struct fmt_spec *fs = var_get_print_format (v); const union value *val = case_data (cc, v); - buf = xzalloc (fs->w); - data_out (val, fs, buf); + char *s = data_out (val, dict_get_encoding (dict), fs); - g_string_append_len (string, buf, fs->w); + g_string_append (string, s); - g_free (buf); + g_free (s); } static GString * @@ -1690,7 +1687,7 @@ clip_to_text (void) for (c = 0 ; c < var_cnt ; ++c) { const struct variable *v = dict_get_var (clip_dict, c); - data_out_g_string (string, v, cc); + data_out_g_string (string, clip_dict, v, cc); if ( c < val_cnt - 1 ) g_string_append (string, "\t"); } @@ -1735,7 +1732,7 @@ clip_to_html (void) { const struct variable *v = dict_get_var (clip_dict, c); g_string_append (string, ""); - data_out_g_string (string, v, cc); + data_out_g_string (string, clip_dict, v, cc); g_string_append (string, "\n"); } diff --git a/src/ui/gui/psppire-data-store.c b/src/ui/gui/psppire-data-store.c index b67e27c1..9833fb49 100644 --- a/src/ui/gui/psppire-data-store.c +++ b/src/ui/gui/psppire-data-store.c @@ -583,13 +583,15 @@ psppire_data_store_get_string (PsppireDataStore *store, glong row, glong column) char *text; const struct fmt_spec *fp ; const struct variable *pv ; + const struct dictionary *dict; union value v; int width; - GString *s; g_return_val_if_fail (store->dict, NULL); g_return_val_if_fail (store->datasheet, NULL); + dict = store->dict->dict; + if (column >= psppire_dict_get_var_cnt (store->dict)) return NULL; @@ -615,28 +617,13 @@ psppire_data_store_get_string (PsppireDataStore *store, glong row, glong column) if (label) { value_destroy (&v, width); - return recode_string (UTF8, psppire_dict_encoding (store->dict), - label, -1); + return g_strdup (label); } } fp = var_get_write_format (pv); - s = g_string_sized_new (fp->w + 1); - g_string_set_size (s, fp->w); - - memset (s->str, 0, fp->w); - - g_assert (fp->w == s->len); - - /* Converts binary value V into printable form in the exactly - FP->W character in buffer S according to format specification - FP. No null terminator is appended to the buffer. */ - data_out (&v, fp, s->str); - - text = recode_string (UTF8, psppire_dict_encoding (store->dict), - s->str, fp->w); - g_string_free (s, TRUE); + text = data_out (&v, dict_get_encoding (dict), fp); g_strchomp (text); @@ -677,7 +664,6 @@ gboolean psppire_data_store_set_string (PsppireDataStore *store, const gchar *text, glong row, glong col) { - gchar *s; glong n_cases; const struct variable *pv = psppire_dict_get_variable (store->dict, col); if ( NULL == pv) @@ -691,12 +677,9 @@ psppire_data_store_set_string (PsppireDataStore *store, if (row == n_cases) psppire_data_store_insert_new_case (store, row); - s = recode_string (psppire_dict_encoding (store->dict), UTF8, text, -1); - psppire_data_store_data_in (store, row, - var_get_case_index (pv), ss_cstr (s), + var_get_case_index (pv), ss_cstr (text), var_get_write_format (pv)); - free (s); psppire_sheet_model_range_changed (PSPPIRE_SHEET_MODEL (store), row, col, row, col); @@ -767,15 +750,9 @@ static const gchar null_var_name[]=N_("var"); static gchar * get_row_button_label (const PsppireSheetModel *model, gint unit) { - PsppireDataStore *ds = PSPPIRE_DATA_STORE (model); - gchar *s = g_strdup_printf (_("%d"), unit + FIRST_CASE_NUMBER); - - gchar *text = recode_string (UTF8, psppire_dict_encoding (ds->dict), - s, -1); + // PsppireDataStore *ds = PSPPIRE_DATA_STORE (model); - g_free (s); - - return text; + return g_strdup_printf (_("%d"), unit + FIRST_CASE_NUMBER); } @@ -795,7 +772,6 @@ get_row_sensitivity (const PsppireSheetModel *model, gint unit) static gchar * get_column_subtitle (const PsppireSheetModel *model, gint col) { - gchar *text; const struct variable *v ; PsppireDataStore *ds = PSPPIRE_DATA_STORE (model); @@ -807,16 +783,12 @@ get_column_subtitle (const PsppireSheetModel *model, gint col) if ( ! var_has_label (v)) return NULL; - text = recode_string (UTF8, psppire_dict_encoding (ds->dict), - var_get_label (v), -1); - - return text; + return xstrdup (var_get_label (v)); } static gchar * get_column_button_label (const PsppireSheetModel *model, gint col) { - gchar *text; struct variable *pv ; PsppireDataStore *ds = PSPPIRE_DATA_STORE (model); @@ -825,10 +797,10 @@ get_column_button_label (const PsppireSheetModel *model, gint col) pv = psppire_dict_get_variable (ds->dict, col); - text = recode_string (UTF8, psppire_dict_encoding (ds->dict), - var_get_name (pv), -1); + if (NULL == pv) + return NULL; - return text; + return xstrdup (var_get_name (pv)); } static gboolean @@ -972,18 +944,23 @@ psppire_data_store_data_in (PsppireDataStore *ds, casenumber casenum, gint idx, int width; bool ok; + PsppireDict *dict; + g_return_val_if_fail (ds, FALSE); g_return_val_if_fail (ds->datasheet, FALSE); g_return_val_if_fail (idx < datasheet_get_n_columns (ds->datasheet), FALSE); + dict = ds->dict; + width = fmt_var_width (fmt); g_return_val_if_fail (caseproto_get_width ( datasheet_get_proto (ds->datasheet), idx) == width, FALSE); value_init (&value, width); ok = (datasheet_get_value (ds->datasheet, casenum, idx, &value) - && data_in (input, LEGACY_NATIVE, fmt->type, 0, 0, 0, &value, width) + && data_in (input, UTF8, fmt->type, 0, 0, 0, + dict->dict, &value, width) && datasheet_put_value (ds->datasheet, casenum, idx, &value)); value_destroy (&value, width); diff --git a/src/ui/gui/psppire-data-window.c b/src/ui/gui/psppire-data-window.c index 1df084c1..185648bc 100644 --- a/src/ui/gui/psppire-data-window.c +++ b/src/ui/gui/psppire-data-window.c @@ -521,7 +521,6 @@ static void insert_case (GtkAction *action, gpointer data) { PsppireDataWindow *dw = PSPPIRE_DATA_WINDOW (data); - psppire_data_editor_insert_case (dw->data_editor); } diff --git a/src/ui/gui/psppire-dict.c b/src/ui/gui/psppire-dict.c index 8ff92a48..c82395f2 100644 --- a/src/ui/gui/psppire-dict.c +++ b/src/ui/gui/psppire-dict.c @@ -760,11 +760,8 @@ tree_model_get_value (GtkTreeModel *model, GtkTreeIter *iter, { case DICT_TVM_COL_NAME: { - gchar *name = recode_string (UTF8, psppire_dict_encoding (dict), - var_get_name (var), -1); g_value_init (value, G_TYPE_STRING); - g_value_set_string (value, name); - g_free (name); + g_value_set_string (value, var_get_name (var)); } break; case DICT_TVM_COL_VAR: @@ -859,11 +856,10 @@ psppire_dict_dump (const PsppireDict *dict) { const struct variable *v = psppire_dict_get_variable (dict, i); int di = var_get_dict_index (v); - g_print ("\"%s\" idx=%d, fv=%d, size=%d\n", + g_print ("\"%s\" idx=%d, fv=%d\n", var_get_name(v), di, - var_get_case_index(v), - value_cnt_from_width(var_get_width(v))); + var_get_case_index(v)); } } diff --git a/src/ui/gui/psppire-dictview.c b/src/ui/gui/psppire-dictview.c index f63ea0ba..243d9078 100644 --- a/src/ui/gui/psppire-dictview.c +++ b/src/ui/gui/psppire-dictview.c @@ -340,19 +340,12 @@ var_description_cell_data_func (GtkTreeViewColumn *col, "%s", var_get_label (var)); - char *utf8 = recode_string (UTF8, psppire_dict_encoding (dict), - text, -1); - + g_object_set (cell, "markup", text, NULL); g_free (text); - g_object_set (cell, "markup", utf8, NULL); - g_free (utf8); } else { - char *name = recode_string (UTF8, psppire_dict_encoding (dict), - var_get_name (var), -1); - g_object_set (cell, "text", name, NULL); - g_free (name); + g_object_set (cell, "text", var_get_name (var), NULL); } } @@ -439,7 +432,7 @@ set_tooltip_for_variable (GtkTreeView *treeview, return FALSE; { - gchar *tip ; + const gchar *tip ; GtkTreeModel *m; PsppireDict *dict; @@ -447,15 +440,11 @@ set_tooltip_for_variable (GtkTreeView *treeview, dict = PSPPIRE_DICT (m); if ( PSPPIRE_DICT_VIEW (treeview)->prefer_labels ) - tip = recode_string (UTF8, psppire_dict_encoding (dict), - var_get_name (var), -1); + tip = var_get_name (var); else - tip = recode_string (UTF8, psppire_dict_encoding (dict), - var_get_label (var), -1); + tip = var_get_label (var); gtk_tooltip_set_text (tooltip, tip); - - g_free (tip); } return TRUE; diff --git a/src/ui/gui/psppire-output-window.h b/src/ui/gui/psppire-output-window.h index 621a9e24..d11eca61 100644 --- a/src/ui/gui/psppire-output-window.h +++ b/src/ui/gui/psppire-output-window.h @@ -24,6 +24,7 @@ #include #include #include "psppire-window.h" +#include "psppire.h" #include extern int viewer_length; diff --git a/src/ui/gui/psppire-var-sheet.c b/src/ui/gui/psppire-var-sheet.c index 3ebea2ea..dfd62bb6 100644 --- a/src/ui/gui/psppire-var-sheet.c +++ b/src/ui/gui/psppire-var-sheet.c @@ -384,6 +384,8 @@ var_sheet_change_active_cell (PsppireVarSheet *vs, vs->missing_val_dialog->pv = psppire_var_store_get_var (var_store, row); + vs->missing_val_dialog->dict = var_store->dict; + g_signal_connect_swapped (customEntry, "clicked", G_CALLBACK (missing_val_dialog_show), @@ -479,7 +481,8 @@ psppire_var_sheet_realize (GtkWidget *w) GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (vs)); vs->val_labs_dialog = val_labs_dialog_create (GTK_WINDOW (toplevel), - PSPPIRE_SHEET (vs)); + PSPPIRE_VAR_STORE (psppire_sheet_get_model (PSPPIRE_SHEET (vs)))); + vs->missing_val_dialog = missing_val_dialog_create (GTK_WINDOW (toplevel)); vs->var_type_dialog = var_type_dialog_create (GTK_WINDOW (toplevel)); diff --git a/src/ui/gui/psppire-var-store.c b/src/ui/gui/psppire-var-store.c index aadc5855..26c1ee4d 100644 --- a/src/ui/gui/psppire-var-store.c +++ b/src/ui/gui/psppire-var-store.c @@ -435,7 +435,7 @@ psppire_var_store_clear (PsppireSheetModel *model, glong row, glong col) switch (col) { case PSPPIRE_VAR_STORE_COL_LABEL: - var_set_label (pv, 0); + var_set_label (pv, NULL); return TRUE; break; } @@ -468,13 +468,7 @@ psppire_var_store_set_string (PsppireSheetModel *model, case PSPPIRE_VAR_STORE_COL_NAME: { gboolean ok; - char *s = recode_string (psppire_dict_encoding (var_store->dict), - UTF8, - text, -1); - - ok = psppire_dict_rename_var (var_store->dict, pv, s); - - free (s); + ok = psppire_dict_rename_var (var_store->dict, pv, text); return ok; } case PSPPIRE_VAR_STORE_COL_COLUMNS: @@ -540,11 +534,7 @@ psppire_var_store_set_string (PsppireSheetModel *model, break; case PSPPIRE_VAR_STORE_COL_LABEL: { - gchar *s = recode_string (psppire_dict_encoding (var_store->dict), - UTF8, - text, -1); - var_set_label (pv, s); - free (s); + var_set_label (pv, text); return TRUE; } break; @@ -583,6 +573,7 @@ text_for_column (PsppireVarStore *vs, N_("Custom"), N_("String") }; + enum {VT_NUMERIC, VT_COMMA, VT_DOT, VT_SCIENTIFIC, VT_DATE, VT_DOLLAR, VT_CUSTOM, VT_STRING}; @@ -591,8 +582,7 @@ text_for_column (PsppireVarStore *vs, switch (c) { case PSPPIRE_VAR_STORE_COL_NAME: - return recode_string (UTF8, psppire_dict_encoding (dict), - var_get_name (pv), -1); + return xstrdup (var_get_name (pv)); break; case PSPPIRE_VAR_STORE_COL_TYPE: { @@ -679,8 +669,12 @@ text_for_column (PsppireVarStore *vs, } break; case PSPPIRE_VAR_STORE_COL_LABEL: - return recode_string (UTF8, psppire_dict_encoding (dict), - var_get_label (pv), -1); + { + const char *label = var_get_label (pv); + if (label) + return xstrdup (label); + return NULL; + } break; case PSPPIRE_VAR_STORE_COL_MISSING: @@ -694,8 +688,6 @@ text_for_column (PsppireVarStore *vs, return g_locale_to_utf8 (gettext (none), -1, 0, 0, err); else { - gchar *ss; - GString *gstr = g_string_sized_new (10); const struct val_labs *vls = var_get_value_labels (pv); const struct val_lab **labels = val_labs_sorted (vls); const struct val_lab *vl = labels[0]; @@ -704,17 +696,10 @@ text_for_column (PsppireVarStore *vs, g_assert (vl); { - gchar *const vstr = value_to_text (vl->value, *write_spec); + gchar *const vstr = value_to_text (vl->value, dict, *write_spec); - g_string_printf (gstr, "{%s,\"%s\"}_", - vstr, val_lab_get_label (vl)); - g_free (vstr); + return g_strdup_printf ( "{%s,\"%s\"}_", vstr, val_lab_get_label (vl)); } - - ss = recode_string (UTF8, psppire_dict_encoding (dict), - gstr->str, gstr->len); - g_string_free (gstr, TRUE); - return ss; } } break; diff --git a/src/ui/gui/psppire.glade b/src/ui/gui/psppire.glade index a6f4bb22..a0967528 100644 --- a/src/ui/gui/psppire.glade +++ b/src/ui/gui/psppire.glade @@ -3,31 +3,6 @@ - - True - GDK_WINDOW_TYPE_HINT_NORMAL - Free Software Foundation - This is beta status software. Please report bugs to bug-gnu-pspp@gnu.org - - pspplogo.png - - - True - - - - - - True - - - False - GTK_PACK_END - - - - - Weight Cases True diff --git a/src/ui/gui/text-data-import-dialog.c b/src/ui/gui/text-data-import-dialog.c index dac8b4c1..6f33ff6d 100644 --- a/src/ui/gui/text-data-import-dialog.c +++ b/src/ui/gui/text-data-import-dialog.c @@ -1543,6 +1543,7 @@ init_formats_page (struct import_assistant *ia) p->data_tree_view = GTK_TREE_VIEW (get_widget_assert (builder, "data")); p->modified_vars = NULL; p->modified_var_cnt = 0; + p->dict = NULL; } /* Frees IA's formats substructure. */ @@ -1748,7 +1749,9 @@ parse_field (struct import_assistant *ia, if (field.string != NULL) { msg_disable (); + if (!data_in (field, LEGACY_NATIVE, in->type, 0, 0, 0, + ia->formats.dict, &val, var_get_width (var))) { char fmt_string[FMT_STRING_LEN_MAX + 1]; @@ -1768,10 +1771,7 @@ parse_field (struct import_assistant *ia, } if (outputp != NULL) { - char *output = xmalloc (out.w + 1); - data_out (&val, &out, output); - output[out.w] = '\0'; - *outputp = output; + *outputp = data_out (&val, dict_get_encoding (ia->formats.dict), &out); } value_destroy (&val, var_get_width (var)); diff --git a/src/ui/gui/val-labs-dialog.c b/src/ui/gui/val-labs-dialog.c index 0af80591..4b575d97 100644 --- a/src/ui/gui/val-labs-dialog.c +++ b/src/ui/gui/val-labs-dialog.c @@ -34,7 +34,7 @@ struct val_labs_dialog { GtkWidget *window; - PsppireSheet *vs; + PsppireVarStore *var_store; /* The variable to be updated */ struct variable *pv; @@ -72,6 +72,7 @@ on_label_entry_change (GtkEntry *entry, gpointer data) text = gtk_entry_get_text (GTK_ENTRY (dialog->value_entry)); text_to_value (text, &v, + dialog->var_store->dict, *var_get_write_format (dialog->pv)); @@ -142,6 +143,7 @@ on_value_entry_change (GtkEntry *entry, gpointer data) union value v; text_to_value (text, &v, + dialog->var_store->dict, *var_get_write_format (dialog->pv)); @@ -268,6 +270,7 @@ on_change (GtkWidget *w, gpointer data) union value v; text_to_value (val_text, &v, + dialog->var_store->dict, *var_get_write_format (dialog->pv)); val_labs_replace (dialog->labs, &v, @@ -292,6 +295,7 @@ on_add (GtkWidget *w, gpointer data) const gchar *text = gtk_entry_get_text (GTK_ENTRY (dialog->value_entry)); text_to_value (text, &v, + dialog->var_store->dict, *var_get_write_format (dialog->pv)); @@ -337,19 +341,15 @@ on_remove (GtkWidget *w, gpointer data) static void on_select_row (GtkTreeView *treeview, gpointer data) { - gchar *labeltext; struct val_labs_dialog *dialog = data; union value value; - const char *label; + const char *label = NULL; gchar *text; - PsppireVarStore *var_store = - PSPPIRE_VAR_STORE (psppire_sheet_get_model (dialog->vs)); - get_selected_tuple (dialog, &value, &label); - text = value_to_text (value, *var_get_write_format (dialog->pv)); + text = value_to_text (value, dialog->var_store->dict, *var_get_write_format (dialog->pv)); g_signal_handler_block (GTK_ENTRY (dialog->value_entry), dialog->value_handler_id); @@ -364,12 +364,8 @@ on_select_row (GtkTreeView *treeview, gpointer data) dialog->change_handler_id); - labeltext = recode_string (UTF8, psppire_dict_encoding (var_store->dict), - label, -1); - gtk_entry_set_text (GTK_ENTRY (dialog->label_entry), - labeltext); - g_free (labeltext); + label); g_signal_handler_unblock (GTK_ENTRY (dialog->label_entry), dialog->change_handler_id); @@ -382,7 +378,7 @@ on_select_row (GtkTreeView *treeview, gpointer data) /* Create a new dialog box (there should normally be only one)*/ struct val_labs_dialog * -val_labs_dialog_create (GtkWindow *toplevel, PsppireSheet *sheet) +val_labs_dialog_create (GtkWindow *toplevel, PsppireVarStore *var_store) { GtkTreeViewColumn *column; @@ -392,10 +388,10 @@ val_labs_dialog_create (GtkWindow *toplevel, PsppireSheet *sheet) struct val_labs_dialog *dialog = g_malloc (sizeof (*dialog)); + dialog->var_store = var_store; dialog->window = get_widget_assert (xml,"val_labs_dialog"); dialog->value_entry = get_widget_assert (xml,"value_entry"); dialog->label_entry = get_widget_assert (xml,"label_entry"); - dialog->vs = sheet; gtk_window_set_transient_for (GTK_WINDOW (dialog->window), toplevel); @@ -481,9 +477,6 @@ repopulate_dialog (struct val_labs_dialog *dialog) GtkTreeIter iter; - PsppireVarStore *var_store = - PSPPIRE_VAR_STORE (psppire_sheet_get_model (dialog->vs)); - GtkListStore *list_store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_DOUBLE); @@ -508,16 +501,11 @@ repopulate_dialog (struct val_labs_dialog *dialog) const struct val_lab *vl = labels[i]; gchar *const vstr = - value_to_text (vl->value, + value_to_text (vl->value, dialog->var_store->dict, *var_get_write_format (dialog->pv)); - gchar *labeltext = - recode_string (UTF8, - psppire_dict_encoding (var_store->dict), - val_lab_get_label (vl), -1); - gchar *const text = g_strdup_printf ("%s = \"%s\"", - vstr, labeltext); + vstr, val_lab_get_label (vl)); gtk_list_store_append (list_store, &iter); gtk_list_store_set (list_store, &iter, @@ -525,7 +513,6 @@ repopulate_dialog (struct val_labs_dialog *dialog) 1, vl->value.f, -1); - g_free (labeltext); g_free (text); g_free (vstr); } diff --git a/src/ui/gui/val-labs-dialog.h b/src/ui/gui/val-labs-dialog.h index 3a09f1ca..745e0a0a 100644 --- a/src/ui/gui/val-labs-dialog.h +++ b/src/ui/gui/val-labs-dialog.h @@ -24,13 +24,13 @@ #include #include -#include - +//#include +#include "psppire-var-store.h" struct val_labs; -struct val_labs_dialog * val_labs_dialog_create (GtkWindow *, PsppireSheet *); +struct val_labs_dialog * val_labs_dialog_create (GtkWindow *, PsppireVarStore *); void val_labs_dialog_show (struct val_labs_dialog *); diff --git a/src/ui/gui/var-display.c b/src/ui/gui/var-display.c index b615fe52..7081e9e2 100644 --- a/src/ui/gui/var-display.c +++ b/src/ui/gui/var-display.c @@ -45,15 +45,14 @@ missing_values_to_string (const PsppireDict *dict, const struct variable *pv, GE gint i; for (i = 0 ; i < n; ++i ) { - mv[i] = value_to_text (*mv_get_value (miss, i), *fmt); + mv[i] = value_to_text (*mv_get_value (miss, i), dict, *fmt); if ( i > 0 ) g_string_append (gstr, ", "); g_string_append (gstr, mv[i]); g_free (mv[i]); } - s = recode_string (UTF8, psppire_dict_encoding (dict), - gstr->str, gstr->len); - g_string_free (gstr, TRUE); + s = gstr->str; + g_string_free (gstr, FALSE); } else { @@ -62,8 +61,8 @@ missing_values_to_string (const PsppireDict *dict, const struct variable *pv, GE union value low, high; mv_get_range (miss, &low.f, &high.f); - l = value_to_text (low, *fmt); - h = value_to_text (high, *fmt); + l = value_to_text (low, dict, *fmt); + h = value_to_text (high, dict,*fmt); g_string_printf (gstr, "%s - %s", l, h); g_free (l); @@ -73,15 +72,14 @@ missing_values_to_string (const PsppireDict *dict, const struct variable *pv, GE { gchar *ss = 0; - ss = value_to_text (*mv_get_value (miss, 0), *fmt); + ss = value_to_text (*mv_get_value (miss, 0), dict, *fmt); g_string_append (gstr, ", "); g_string_append (gstr, ss); free (ss); } - s = recode_string (UTF8, psppire_dict_encoding (dict), - gstr->str, gstr->len); - g_string_free (gstr, TRUE); + s = gstr->str; + g_string_free (gstr, FALSE); } return s; diff --git a/src/ui/gui/var-type-dialog.c b/src/ui/gui/var-type-dialog.c index c433bf3b..05ba5d3c 100644 --- a/src/ui/gui/var-type-dialog.c +++ b/src/ui/gui/var-type-dialog.c @@ -262,12 +262,12 @@ preview_custom (GtkWidget *w, gpointer data) union value v; v.f = 1234.56; - sample_text = value_to_text (v, dialog->fmt_l); + sample_text = value_to_text (v, NULL, dialog->fmt_l); gtk_label_set_text (GTK_LABEL (dialog->label_psample), sample_text); g_free (sample_text); v.f = -v.f; - sample_text = value_to_text (v, dialog->fmt_l); + sample_text = value_to_text (v, NULL, dialog->fmt_l); gtk_label_set_text (GTK_LABEL (dialog->label_nsample), sample_text); g_free (sample_text); } diff --git a/src/ui/gui/variable-info-dialog.c b/src/ui/gui/variable-info-dialog.c index fa9d5101..178a834c 100644 --- a/src/ui/gui/variable-info-dialog.c +++ b/src/ui/gui/variable-info-dialog.c @@ -40,26 +40,14 @@ static const gchar none[] = N_("None"); -static gchar * -name_to_string (const struct variable *var, PsppireDict *dict) -{ - const char *name = var_get_name (var); - g_assert (name); - - return recode_string (UTF8, psppire_dict_encoding (dict), - name, -1); -} - - -static gchar * -label_to_string (const struct variable *var, PsppireDict *dict) +static const gchar * +label_to_string (const struct variable *var) { const char *label = var_get_label (var); - if (! label) return g_strdup (none); + if (NULL == label) return g_strdup (none); - return recode_string (UTF8, psppire_dict_encoding (dict), - label, -1); + return label; } @@ -82,16 +70,11 @@ populate_text (PsppireDictView *treeview, gpointer data) NULL); gstring = g_string_sized_new (200); - text = name_to_string (var, dict); - g_string_assign (gstring, text); - g_free (text); + g_string_assign (gstring, var_get_name (var)); g_string_append (gstring, "\n"); - text = label_to_string (var, dict); - g_string_append_printf (gstring, _("Label: %s\n"), text); - g_free (text); - + g_string_append_printf (gstring, _("Label: %s\n"), label_to_string (var)); { const struct fmt_spec *fmt = var_get_print_format (var); char buffer[FMT_STRING_LEN_MAX + 1]; @@ -130,14 +113,10 @@ populate_text (PsppireDictView *treeview, gpointer data) { const struct val_lab *vl = labels[i]; gchar *const vstr = - value_to_text (vl->value, *var_get_print_format (var)); - - text = recode_string (UTF8, psppire_dict_encoding (dict), - val_lab_get_label (vl), -1); + value_to_text (vl->value, dict, *var_get_print_format (var)); - g_string_append_printf (gstring, _("%s %s\n"), vstr, text); + g_string_append_printf (gstring, _("%s %s\n"), vstr, val_lab_get_label (vl)); - g_free (text); g_free (vstr); } free (labels); diff --git a/src/ui/syntax-gen.c b/src/ui/syntax-gen.c index bf1ee12f..22e717ac 100644 --- a/src/ui/syntax-gen.c +++ b/src/ui/syntax-gen.c @@ -146,20 +146,23 @@ syntax_gen_number (struct string *output, & (FMT_CAT_DATE | FMT_CAT_TIME | FMT_CAT_DATE_COMPONENT))) { union value v_in, v_out; - char buffer[FMT_MAX_NUMERIC_WIDTH]; + char *s; bool ok; v_in.f = number; - data_out (&v_in, format, buffer); + s = data_out (&v_in, "FIXME", format); msg_disable (); - ok = data_in (ss_buffer (buffer, format->w), LEGACY_NATIVE, - format->type, false, 0, 0, &v_out, 0); + /* FIXME: UTF8 encoded strings will fail here */ + ok = data_in (ss_cstr (s), LEGACY_NATIVE, + format->type, false, 0, 0, NULL, &v_out, 0); msg_enable (); if (ok && v_out.f == number) { - syntax_gen_string (output, ss_buffer (buffer, format->w)); + syntax_gen_string (output, ss_cstr (s)); + free (s); return; } + free (s); } if (number == SYSMIS) diff --git a/tests/command/get-data-gnm.sh b/tests/command/get-data-gnm.sh index 746f1a67..c28c8dd4 100755 --- a/tests/command/get-data-gnm.sh +++ b/tests/command/get-data-gnm.sh @@ -1,6 +1,6 @@ #!/bin/sh -# This program tests that pspp can read gnumeric files +# This program tests that pspp can read Gnumeric files TEMPDIR=/tmp/pspp-tst-$$ TESTFILE=$TEMPDIR/`basename $0`.sps diff --git a/tests/command/npar-wilcoxon.sh b/tests/command/npar-wilcoxon.sh index ae0d39fc..4242b55b 100755 --- a/tests/command/npar-wilcoxon.sh +++ b/tests/command/npar-wilcoxon.sh @@ -107,14 +107,14 @@ cat > $TEMPDIR/results.txt < #include +#include #include #include @@ -404,7 +405,7 @@ value_from_param (union value *value, int width, unsigned int idx) else { unsigned int hash = hash_int (idx, 0); - char *string = value_str_rw (value, width); + uint8_t *string = value_str_rw (value, width); int offset; assert (width < 32); diff --git a/tests/dissect-sysfile.c b/tests/dissect-sysfile.c index 897d48ff..85f36442 100644 --- a/tests/dissect-sysfile.c +++ b/tests/dissect-sysfile.c @@ -583,13 +583,18 @@ read_machine_float_info (struct sfm_reader *r, size_t size, size_t count) printf ("\tsysmis: %g\n", sysmis); if (sysmis != SYSMIS) - sys_warn (r, _("File specifies unexpected value %g as SYSMIS."), sysmis); + sys_warn (r, _("File specifies unexpected value %g as %s."), + sysmis, "SYSMIS"); + printf ("\thighest: %g\n", highest); if (highest != HIGHEST) - sys_warn (r, _("File specifies unexpected value %g as HIGHEST."), highest); + sys_warn (r, _("File specifies unexpected value %g as %s."), + highest, "HIGHEST"); + printf ("\tlowest: %g\n", lowest); if (lowest != LOWEST) - sys_warn (r, _("File specifies unexpected value %g as LOWEST."), lowest); + sys_warn (r, _("File specifies unexpected value %g as %s."), + lowest, "LOWEST"); } /* Read record type 7, subtype 11. */