Merge commit 'origin/master' into sso
authorJohn Darrington <john@darrington.wattle.id.au>
Sun, 17 Oct 2010 19:04:28 +0000 (21:04 +0200)
committerJohn Darrington <john@darrington.wattle.id.au>
Sun, 17 Oct 2010 19:04:28 +0000 (21:04 +0200)
Conflicts:

src/ui/gui/psppire-syntax-window.c

448 files changed:
NEWS
README.Git
Smake
build-aux/.gitignore [new file with mode: 0644]
configure.ac
doc/automake.mk
doc/files.texi
doc/not-implemented.texi
doc/statistics.texi
doc/transformation.texi
doc/tutorial.texi
doc/utilities.texi
lib/linreg/sweep.c
perl-module/Makefile.PL
perl-module/PSPP.xs
perl-module/automake.mk
perl-module/t/Pspp.t
po/ca.po
po/en_GB.po
po/es.po
po/nl.po
src/data/any-reader.c
src/data/calendar.c
src/data/calendar.h
src/data/case-tmpfile.c
src/data/case.h
src/data/casegrouper.c
src/data/casereader-filter.c
src/data/casereader-select.c
src/data/casereader-translator.c
src/data/casereader.c
src/data/casereader.h
src/data/csv-file-writer.c
src/data/data-in.c
src/data/data-in.h
src/data/file-handle-def.c
src/data/format.c
src/data/format.h
src/data/gnumeric-reader.c
src/data/por-file-reader.c
src/data/por-file-writer.c
src/data/psql-reader.c
src/data/settings.c
src/data/settings.h
src/data/sys-file-reader.c
src/data/sys-file-writer.c
src/data/variable.c
src/language/command.c
src/language/command.def
src/language/control/repeat.c
src/language/data-io/data-list.c
src/language/data-io/data-parser.c
src/language/data-io/data-reader.c
src/language/data-io/data-reader.h
src/language/data-io/data-writer.c
src/language/data-io/file-handle.q
src/language/data-io/get-data.c
src/language/data-io/get.c
src/language/data-io/list.q
src/language/data-io/placement-parser.c
src/language/data-io/print.c
src/language/data-io/save-translate.c
src/language/data-io/trim.c
src/language/dictionary/attributes.c
src/language/dictionary/missing-values.c
src/language/dictionary/mrsets.c
src/language/dictionary/variable-label.c
src/language/expressions/evaluate.c
src/language/expressions/helpers.c
src/language/expressions/helpers.h
src/language/expressions/operations.def
src/language/expressions/parse.c
src/language/lexer/format-parser.c
src/language/lexer/lexer.c
src/language/lexer/q2c.c
src/language/lexer/value-parser.c
src/language/stats/.gitignore
src/language/stats/aggregate.c
src/language/stats/automake.mk
src/language/stats/autorecode.c
src/language/stats/binomial.c
src/language/stats/correlations.c
src/language/stats/crosstabs.q
src/language/stats/factor.c
src/language/stats/flip.c
src/language/stats/glm.c [new file with mode: 0644]
src/language/stats/glm.q [deleted file]
src/language/stats/kruskal-wallis.c [new file with mode: 0644]
src/language/stats/kruskal-wallis.h [new file with mode: 0644]
src/language/stats/npar-summary.c
src/language/stats/npar.c [new file with mode: 0644]
src/language/stats/npar.h
src/language/stats/npar.q [deleted file]
src/language/stats/oneway.c
src/language/stats/roc.c
src/language/stats/sign.c
src/language/stats/t-test.q
src/language/stats/wilcoxon.c
src/language/syntax-file.c
src/language/syntax-string-source.c
src/language/syntax-string-source.h
src/language/tests/float-format.c
src/language/tests/format-guesser-test.c
src/language/utilities/automake.mk
src/language/utilities/echo.c
src/language/utilities/host.c [new file with mode: 0644]
src/language/utilities/include.c
src/language/utilities/permissions.c
src/language/utilities/set.q
src/language/xforms/compute.c
src/language/xforms/recode.c
src/libpspp/cast.h
src/libpspp/getl.c
src/libpspp/hash.c
src/libpspp/i18n.c
src/libpspp/i18n.h
src/libpspp/message.c
src/libpspp/message.h
src/libpspp/model-checker.c
src/libpspp/str.c
src/math/categoricals.c
src/math/categoricals.h
src/math/covariance.c
src/math/covariance.h
src/math/histogram.c
src/math/levene.c
src/math/levene.h
src/math/linreg.c
src/math/order-stats.c
src/math/sort.c
src/output/ascii.c
src/output/cairo.c
src/output/csv.c
src/output/driver.c
src/output/html.c
src/output/journal.c
src/output/measure.c
src/output/msglog.c
src/output/odt.c
src/output/options.c
src/output/render.c
src/ui/gui/aggregate-dialog.c
src/ui/gui/automake.mk
src/ui/gui/factor.ui
src/ui/gui/helper.c
src/ui/gui/main.c
src/ui/gui/psppire-data-store.c
src/ui/gui/psppire-data-window.c
src/ui/gui/psppire-dict.c
src/ui/gui/psppire-output-window.c
src/ui/gui/psppire-syntax-window.c
src/ui/gui/psppire-syntax-window.h
src/ui/gui/psppire-var-store.c
src/ui/gui/psppire-var-view.c
src/ui/gui/psppire-window.c
src/ui/gui/psppire.c
src/ui/gui/psppire.ui
src/ui/gui/recode.ui
src/ui/gui/select-cases-dialog.c
src/ui/gui/split-file-dialog.c
src/ui/gui/split-file.ui [new file with mode: 0644]
src/ui/gui/text-data-import-dialog.c
src/ui/gui/val-labs-dialog.c
src/ui/source-init-opts.c
src/ui/syntax-gen.c
src/ui/terminal/main.c
src/ui/terminal/terminal-opts.c
src/ui/terminal/terminal-opts.h
src/ui/terminal/terminal.c
tests/Book1.gnm.unzipped [deleted file]
tests/atlocal.in
tests/automake.mk
tests/bugs/README [deleted file]
tests/bugs/big-input-2.sh [deleted file]
tests/bugs/big-input.sh [deleted file]
tests/bugs/case-map.sh [deleted file]
tests/bugs/comment-at-eof.sh [deleted file]
tests/bugs/compression.sh [deleted file]
tests/bugs/curtailed.sh [deleted file]
tests/bugs/data-crash.sh [deleted file]
tests/bugs/empty-do-repeat.sh [deleted file]
tests/bugs/examine-1sample.sh [deleted file]
tests/bugs/examine-crash.sh [deleted file]
tests/bugs/examine-crash2.sh [deleted file]
tests/bugs/examine-crash3.sh [deleted file]
tests/bugs/examine-missing.sh [deleted file]
tests/bugs/examine-missing2.sh [deleted file]
tests/bugs/get-no-file.sh [deleted file]
tests/bugs/get.sh [deleted file]
tests/bugs/if_crash.sh [deleted file]
tests/bugs/input-crash.sh [deleted file]
tests/bugs/keep-all.sh [deleted file]
tests/bugs/lag_crash.sh [deleted file]
tests/bugs/list-overflow.sh [deleted file]
tests/bugs/match-files-scratch.sh [deleted file]
tests/bugs/multipass.sh [deleted file]
tests/bugs/overwrite-input-file.sh [deleted file]
tests/bugs/overwrite-special-file.sh [deleted file]
tests/bugs/print-crash.sh [deleted file]
tests/bugs/random.sh [deleted file]
tests/bugs/shbang.sh [deleted file]
tests/bugs/signals.sh [deleted file]
tests/bugs/t-test-alpha.sh [deleted file]
tests/bugs/t-test-alpha2.sh [deleted file]
tests/bugs/t-test-alpha3.sh [deleted file]
tests/bugs/t-test-paired.sh [deleted file]
tests/bugs/t-test-with-temp.sh [deleted file]
tests/bugs/t-test.sh [deleted file]
tests/bugs/temporary.sh [deleted file]
tests/bugs/unwritable-dir.sh [deleted file]
tests/bugs/val-labs-trailing-slash.sh [deleted file]
tests/bugs/val-labs.sh [deleted file]
tests/command/bignum.sh [deleted file]
tests/command/correlation.sh [deleted file]
tests/command/do-if.sh [deleted file]
tests/command/do-repeat.sh [deleted file]
tests/command/erase.sh [deleted file]
tests/command/examine-extremes.sh [deleted file]
tests/command/examine-percentiles.sh [deleted file]
tests/command/examine.sh [deleted file]
tests/command/file-handle.sh [deleted file]
tests/command/file-label.sh [deleted file]
tests/command/filter.sh [deleted file]
tests/command/get-data-gnm.sh [deleted file]
tests/command/get-data-psql.sh [deleted file]
tests/command/get-data-txt-examples.sh [deleted file]
tests/command/get-data-txt-importcases.sh [deleted file]
tests/command/get-data-txt.sh [deleted file]
tests/command/import-export.sh [deleted file]
tests/command/input-program.sh [deleted file]
tests/command/insert.sh [deleted file]
tests/command/lag.sh [deleted file]
tests/command/line-ends.sh [deleted file]
tests/command/list.sh [deleted file]
tests/command/longvars.sh [deleted file]
tests/command/loop.sh [deleted file]
tests/command/match-files.sh [deleted file]
tests/command/missing-values.sh [deleted file]
tests/command/n_of_cases.sh [deleted file]
tests/command/no_case_size.sh [deleted file]
tests/command/npar-binomial.sh [deleted file]
tests/command/npar-chisquare.sh [deleted file]
tests/command/npar-sign.sh [deleted file]
tests/command/npar-wilcoxon.sh [deleted file]
tests/command/permissions.sh [deleted file]
tests/command/print-strings.sh [deleted file]
tests/command/print.sh [deleted file]
tests/command/rank.sh [deleted file]
tests/command/regression-qr.sh [deleted file]
tests/command/regression.sh [deleted file]
tests/command/reliability.sh [deleted file]
tests/command/rename.sh [deleted file]
tests/command/roc.sh [deleted file]
tests/command/roc2.sh [deleted file]
tests/command/sample.sh [deleted file]
tests/command/sort.sh [deleted file]
tests/command/split-file.sh [deleted file]
tests/command/sysfile-info.sh [deleted file]
tests/command/sysfiles-old.sh [deleted file]
tests/command/sysfiles.sh [deleted file]
tests/command/t-test-1-indep-val.sh [deleted file]
tests/command/t-test-1-sample-missing-anal.sh [deleted file]
tests/command/t-test-1-sample-missing-list.sh [deleted file]
tests/command/t-test-1s.sh [deleted file]
tests/command/t-test-groups.sh [deleted file]
tests/command/t-test-indep-missing-anal.sh [deleted file]
tests/command/t-test-indep-missing-list.sh [deleted file]
tests/command/t-test-paired-missing-anal.sh [deleted file]
tests/command/t-test-paired-missing-list.sh [deleted file]
tests/command/t-test-pairs.sh [deleted file]
tests/command/tabs.sh [deleted file]
tests/command/trimmed-mean.sh [deleted file]
tests/command/update.sh [deleted file]
tests/command/use.sh [deleted file]
tests/command/variable-display.sh [deleted file]
tests/command/vector.sh [deleted file]
tests/command/very-long-strings.sh [deleted file]
tests/command/weight.sh [deleted file]
tests/data-list.data [deleted file]
tests/data/bcd-in.expected.cmp.gz [new file with mode: 0644]
tests/data/binhex-in.expected.cmp.gz [new file with mode: 0644]
tests/data/binhex-out.expected.gz [new file with mode: 0644]
tests/data/data-in.at [new file with mode: 0644]
tests/data/data-out.at [new file with mode: 0644]
tests/data/datasheet-test.at [new file with mode: 0644]
tests/data/datasheet-test.sh [deleted file]
tests/data/format-guesser.at [new file with mode: 0644]
tests/data/inexactify.c [new file with mode: 0644]
tests/data/legacy-in.expected.cmp.gz [new file with mode: 0644]
tests/data/num-in.expected.gz [new file with mode: 0644]
tests/data/num-out-cmp.pl [new file with mode: 0644]
tests/data/num-out.expected.cmp.gz [new file with mode: 0644]
tests/data/por-file.at [new file with mode: 0644]
tests/data/sys-file.at [new file with mode: 0644]
tests/data/v13.sav [new file with mode: 0755]
tests/data/v14.sav [new file with mode: 0644]
tests/dissect-sysfile.c
tests/expressions/randist.sh [deleted file]
tests/expressions/randist/beta.out [deleted file]
tests/expressions/randist/cauchy.out [deleted file]
tests/expressions/randist/chisq.out [deleted file]
tests/expressions/randist/compare.pl [deleted file]
tests/expressions/randist/exp.out [deleted file]
tests/expressions/randist/f.out [deleted file]
tests/expressions/randist/gamma.out [deleted file]
tests/expressions/randist/laplace.out [deleted file]
tests/expressions/randist/lnormal.out [deleted file]
tests/expressions/randist/logistic.out [deleted file]
tests/expressions/randist/normal.out [deleted file]
tests/expressions/randist/pareto.out [deleted file]
tests/expressions/randist/randist.pl [deleted file]
tests/expressions/randist/randist.txt [deleted file]
tests/expressions/randist/t.out [deleted file]
tests/expressions/randist/uniform.out [deleted file]
tests/expressions/randist/weibull.out [deleted file]
tests/expressions/valuelabel.sh [deleted file]
tests/expressions/variables.sh [deleted file]
tests/expressions/vectors.sh [deleted file]
tests/formats/360.sh [deleted file]
tests/formats/bcd-in.expected.cmp.gz [deleted file]
tests/formats/bcd-in.sh [deleted file]
tests/formats/binhex-out.expected.gz [deleted file]
tests/formats/binhex-out.sh [deleted file]
tests/formats/date-in.sh [deleted file]
tests/formats/date-out.sh [deleted file]
tests/formats/float-format.sh [deleted file]
tests/formats/format-guesser.sh [deleted file]
tests/formats/ib-in.expected.cmp.gz [deleted file]
tests/formats/ib-in.sh [deleted file]
tests/formats/inexactify.c [deleted file]
tests/formats/legacy-in.expected.cmp.gz [deleted file]
tests/formats/legacy-in.sh [deleted file]
tests/formats/month-in.sh [deleted file]
tests/formats/month-out.sh [deleted file]
tests/formats/num-in.expected.gz [deleted file]
tests/formats/num-in.sh [deleted file]
tests/formats/num-out-cmp.pl [deleted file]
tests/formats/num-out-compare.pl [deleted file]
tests/formats/num-out-decmp.pl [deleted file]
tests/formats/num-out.expected.cmp.gz [deleted file]
tests/formats/num-out.pl [deleted file]
tests/formats/num-out.sh [deleted file]
tests/formats/time-in.sh [deleted file]
tests/formats/time-out.sh [deleted file]
tests/formats/wkday-in.sh [deleted file]
tests/formats/wkday-out.sh [deleted file]
tests/language/command.at [new file with mode: 0644]
tests/language/control/do-if.at [new file with mode: 0644]
tests/language/control/do-repeat.at [new file with mode: 0644]
tests/language/control/loop.at [new file with mode: 0644]
tests/language/control/temporary.at [new file with mode: 0644]
tests/language/data-io/Book1.gnm.unzipped [new file with mode: 0644]
tests/language/data-io/data-list.at
tests/language/data-io/data-reader.at
tests/language/data-io/file-handle.at [new file with mode: 0644]
tests/language/data-io/get-data-gnm.at [new file with mode: 0644]
tests/language/data-io/get-data-psql.at [new file with mode: 0644]
tests/language/data-io/get-data-txt.at [new file with mode: 0644]
tests/language/data-io/get.at [new file with mode: 0644]
tests/language/data-io/inpt-pgm.at [new file with mode: 0644]
tests/language/data-io/list.at [new file with mode: 0644]
tests/language/data-io/match-files.at [new file with mode: 0644]
tests/language/data-io/print.at [new file with mode: 0644]
tests/language/data-io/save.at
tests/language/data-io/update.at [new file with mode: 0644]
tests/language/dictionary/missing-values.at [new file with mode: 0644]
tests/language/dictionary/mrsets.at
tests/language/dictionary/rename-variables.at [new file with mode: 0644]
tests/language/dictionary/split-file.at [new file with mode: 0644]
tests/language/dictionary/sys-file-info.at [new file with mode: 0644]
tests/language/dictionary/value-labels.at [new file with mode: 0644]
tests/language/dictionary/variable-display.at [new file with mode: 0644]
tests/language/dictionary/vector.at [new file with mode: 0644]
tests/language/dictionary/weight.at [new file with mode: 0644]
tests/language/expressions/evaluate.at
tests/language/expressions/parse.at [new file with mode: 0644]
tests/language/lexer/lexer.at [new file with mode: 0644]
tests/language/lexer/q2c.at [new file with mode: 0644]
tests/language/lexer/variable-parser.at [new file with mode: 0644]
tests/language/stats/autorecode.at
tests/language/stats/correlations.at [new file with mode: 0644]
tests/language/stats/descriptives.at
tests/language/stats/examine.at [new file with mode: 0644]
tests/language/stats/flip.at
tests/language/stats/npar.at [new file with mode: 0644]
tests/language/stats/oneway.at
tests/language/stats/rank.at [new file with mode: 0644]
tests/language/stats/regression.at [new file with mode: 0644]
tests/language/stats/reliability.at [new file with mode: 0644]
tests/language/stats/roc.at [new file with mode: 0644]
tests/language/stats/sort-cases.at [new file with mode: 0644]
tests/language/stats/t-test.at [new file with mode: 0644]
tests/language/utilities/date.at [new file with mode: 0644]
tests/language/utilities/insert.at [new file with mode: 0644]
tests/language/utilities/permissions.at [new file with mode: 0644]
tests/language/utilities/set.at
tests/language/utilities/title.at [new file with mode: 0644]
tests/language/xforms/sample.at [new file with mode: 0644]
tests/language/xforms/select-if.at [new file with mode: 0644]
tests/libpspp/abt-test.c
tests/libpspp/abt.at [new file with mode: 0644]
tests/libpspp/bt-test.c
tests/libpspp/bt.at [new file with mode: 0644]
tests/libpspp/float-format.at [new file with mode: 0644]
tests/libpspp/heap-test.c
tests/libpspp/heap.at [new file with mode: 0644]
tests/libpspp/hmap-test.c
tests/libpspp/hmap.at [new file with mode: 0644]
tests/libpspp/hmapx-test.c
tests/libpspp/hmapx.at [new file with mode: 0644]
tests/libpspp/i18n-test.c [new file with mode: 0644]
tests/libpspp/i18n.at [new file with mode: 0644]
tests/libpspp/ll-test.c
tests/libpspp/ll.at [new file with mode: 0644]
tests/libpspp/llx-test.c
tests/libpspp/llx.at [new file with mode: 0644]
tests/libpspp/range-map-test.c
tests/libpspp/range-map.at [new file with mode: 0644]
tests/libpspp/range-set-test.c
tests/libpspp/range-set.at [new file with mode: 0644]
tests/libpspp/sparse-array-test.c
tests/libpspp/sparse-array.at [new file with mode: 0644]
tests/libpspp/sparse-xarray-test.at [new file with mode: 0644]
tests/libpspp/sparse-xarray-test.sh [deleted file]
tests/libpspp/str-test.c
tests/libpspp/str.at [new file with mode: 0644]
tests/libpspp/string-map-test.c
tests/libpspp/string-map.at [new file with mode: 0644]
tests/libpspp/string-set-test.c
tests/libpspp/string-set.at [new file with mode: 0644]
tests/libpspp/stringi-map-test.c
tests/libpspp/stringi-map.at [new file with mode: 0644]
tests/libpspp/stringi-set-test.c
tests/libpspp/stringi-set.at [new file with mode: 0644]
tests/libpspp/tower-test.c
tests/libpspp/tower.at [new file with mode: 0644]
tests/list.data [deleted file]
tests/math/randist.at [new file with mode: 0644]
tests/no_case_size.sav [deleted file]
tests/output/output.at [new file with mode: 0644]
tests/output/paper-size.at [new file with mode: 0644]
tests/output/paper-size.sh [deleted file]
tests/perl-module.at
tests/test_template [deleted file]
tests/ui/terminal/main.at [new file with mode: 0644]
tests/v13.sav [deleted file]
tests/v14.sav [deleted file]
tests/weighting.data [deleted file]

diff --git a/NEWS b/NEWS
index a6192187aa451f1a6dd9b01823984c42356f036e..3c09bf8bad9865d398835bc33207b1f3fb16f4b8 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,17 +1,25 @@
 PSPP NEWS -- history of user-visible changes.
-Time-stamp: <2010-08-04 22:26:05 blp>
+Time-stamp: <2010-10-16 13:05:30 blp>
 Copyright (C) 1996-9, 2000, 2008, 2009, 2010 Free Software Foundation, Inc.
 See the end for copying conditions.
 
 Please send PSPP bug reports to bug-gnu-pspp@gnu.org.
 
-Changes from 0.7.3 to 0.7.5:
+Changes from 0.7.3 to 0.7.6:
+
+ * NPAR TESTS now supports the /KRUSKAL-WALLIS subcommand.
+
+ * AUTORECODE now supports the /GROUP subcommand.
 
  * The MRSETS command is now implemented.
 
  * SAVE TRANSLATE is now implemented, with initial support for saving
    data in comma-separated value and tab-delimited formats.
 
+ * The PRESERVE and RESTORE commands are now implemented.
+
+ * The HOST command has been updated to use more modern syntax.
+
 Changes from 0.7.2 to 0.7.3:
 
  * Charts are now produced with Cairo and Pango, instead of libplot.
index 2cbdb57919838516193a2f455050f479013b3b54..70a29ecd525fcd3a9a9e28d11ea9ed55985b6341 100644 (file)
@@ -34,11 +34,15 @@ This version of PSPP should work with the Gnulib commit shown below.
 Gnulib does not maintain a stable API or ABI, so it is possible that
 PSPP will not work with older or newer versions of Gnulib.
 
-    commit b3c3b08eab509ef08c9303b05375088575f8cc1b
-    Author: Karl Berry <karl@freefriends.org>
-    Date:   Wed Jun 16 17:30:50 2010 -0700
 
-       update from texinfo
+  commit 52a32bbd66601d12627e104cd82d9b9094d942c3
+  Author: Bruno Haible <bruno@clisp.org>
+  Date:   Fri Sep 24 14:36:26 2010 +0200
+
+      unistr/u8-strchr: Fix a test failure on i586 glibc systems.
+    
+      * tests/unistr/test-strchr.h (test_strchr): Disable an invalid check.
+
 
 To clone Gnulib into a directory named "gnulib" using Git, and then
 check out this particular commit, run these commands:
diff --git a/Smake b/Smake
index 5362c276d723d4c1e41edda08b32fa308d8d0835..3ca1187520fc4baebe45af5b51a37d1141a32618 100644 (file)
--- a/Smake
+++ b/Smake
@@ -97,7 +97,7 @@ all:
        $(GNULIB_TOOL) --import --no-changelog --m4-base=gl/m4 \
                --source-base=gl --lib=libgl --tests-base=tests \
                --doc-base=gl/doc --aux-dir=build-aux --import \
-               $(GNULIB_MODULES)
+               --libtool $(GNULIB_MODULES)
        libtoolize --force --automake
        aclocal -I m4 -I gl/m4
        autoconf
diff --git a/build-aux/.gitignore b/build-aux/.gitignore
new file mode 100644 (file)
index 0000000..5a30033
--- /dev/null
@@ -0,0 +1,9 @@
+/arg-nonnull.h
+/c++defs.h
+/config.libpath
+/config.rpath
+/gitlog-to-changelog
+/install-reloc
+/reloc-ldflags
+/unused-parameter.h
+/warn-on-use.h
index 177ca576a2ab09c9fcd9dde6fe257722bc940322..abf7afadedb7f247295e88545270abbaad9dec53 100644 (file)
@@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script.
 
 dnl Initialize.
 AC_PREREQ(2.63)
-AC_INIT([GNU PSPP], [0.7.5], [bug-gnu-pspp@gnu.org], [pspp])
+AC_INIT([GNU PSPP], [0.7.6], [bug-gnu-pspp@gnu.org], [pspp])
 AC_CONFIG_AUX_DIR([build-aux])
 AC_CONFIG_HEADERS([config.h])
 AC_CONFIG_TESTDIR([tests])
@@ -150,19 +150,22 @@ if test x"$with_libpq" != x"no" && test -n "$PG_CONFIG" ; then
      LDFLAGS=$save_LDFLAGS])
 
   if test $pspp_cv_have_libpq = yes; then
+    PSQL_SUPPORT=yes
     AC_DEFINE([PSQL_SUPPORT], [1],
       [Define to 1 if building in support for reading from postgres
        databases.])
   else
+    PSQL_SUPPORT=no
     PG_CONFIG=
     PG_CFLAGS=
     PG_LDFLAGS=
     PG_LIBS=
   fi
 else
+  PSQL_SUPPORT=no
   pspp_cv_have_libpq=no
 fi
-AM_CONDITIONAL(PSQL_SUPPORT, test $pspp_cv_have_libpq = yes)
+AC_SUBST([PSQL_SUPPORT])
 
 dnl Check for libxml2
 PKG_CHECK_MODULES(
@@ -204,7 +207,7 @@ if test $HAVE_LIBXML2 = yes && test $HAVE_ZLIB = yes; then
 else
   GNM_SUPPORT=no
 fi
-AM_CONDITIONAL([GNM_SUPPORT], [test $GNM_SUPPORT = yes])
+AC_SUBST([GNM_SUPPORT])
 
 dnl ODT support requires libxml2.
 if test $HAVE_LIBXML2 = yes; then
@@ -239,7 +242,9 @@ AC_SUBST([WITH_PERL_MODULE])
 AM_CONDITIONAL(WITH_PERL_MODULE, test $WITH_PERL_MODULE = yes)
 
 AC_SEARCH_LIBS([cblas_dsdot], [gslcblas],,[PSPP_REQUIRED_PREREQ([libgslcblas])])
-PKG_CHECK_MODULES([GSL], [gsl >= 1.12], [], [PSPP_REQUIRED_PREREQ([gsl 2.0 version 1.12 or later])])
+PKG_CHECK_MODULES([GSL], [gsl >= 1.12], [],
+                        AC_SEARCH_LIBS([gsl_linalg_cholesky_invert], [gsl],,[PSPP_REQUIRED_PREREQ([gsl 2.0 version 1.12 or later])]))
+
 
 PSPP_GSL_NEEDS_FGNU89_INLINE
 
index af99930f875a08b537498209724de5ec20aced57..d3c91a26417e712e00c5522f62113212e82d929d 100644 (file)
@@ -43,11 +43,11 @@ doc_pspp_dev_TEXINFOS = doc/version-dev.texi \
 EXTRA_DIST += doc/pspp.man \
        doc/get-commands.pl
 
-doc/ni.texi: $(top_srcdir)/src/language/command.def doc/get-commands.pl
+$(srcdir)/doc/ni.texi: $(top_srcdir)/src/language/command.def doc/get-commands.pl
        @$(MKDIR_P)  doc
        $(PERL) $(top_srcdir)/doc/get-commands.pl $(top_srcdir)/src/language/command.def > $@
 
-doc/tut.texi:
+$(srcdir)/doc/tut.texi:
        @$(MKDIR_P) doc
        echo "@set example-dir $(examplesdir)" > $@
 
index 707447e099fb49f4fca0088753c59c098a95d947..5f0c527c4738c90ffaeab349c357dba46c73e4ca 100644 (file)
@@ -485,7 +485,7 @@ The following syntax reads a file in the format used by
 @samp{/etc/passwd}:
 
 @c If you change this example, change the regression test in
-@c tests/command/get-data-txt-examples.sh to match.
+@c tests/language/data-io/get-data.at to match.
 @example
 GET DATA /TYPE=TXT /FILE='/etc/passwd' /DELIMITERS=':'
         /VARIABLES=username A20
@@ -512,7 +512,7 @@ Accord  2002    26613   17900   EX      1
 The following syntax can be used to read the used car data:
 
 @c If you change this example, change the regression test in
-@c tests/command/get-data-txt-examples.sh to match.
+@c tests/language/data-io/get-data.at to match.
 @example
 GET DATA /TYPE=TXT /FILE='cars.data' /DELIMITERS=' ' /FIRSTCASE=2
         /VARIABLES=model A8
@@ -539,7 +539,7 @@ Consider the following information on animals in a pet store:
 The following syntax can be used to read the pet store data:
 
 @c If you change this example, change the regression test in
-@c tests/command/get-data-txt-examples.sh to match.
+@c tests/language/data-io/get-data.at to match.
 @example
 GET DATA /TYPE=TXT /FILE='pets.data' /DELIMITERS=', ' /QUALIFIER='''"' /ESCAPE
         /FIRSTCASE=3
@@ -608,7 +608,7 @@ Accord  2002    26613   17900   EX      1
 The following syntax can be used to read the used car data:
 
 @c If you change this example, change the regression test in
-@c tests/command/get-data-txt-examples.sh to match.
+@c tests/language/data-io/get-data.at to match.
 @example
 GET DATA /TYPE=TXT /FILE='cars.data' /ARRANGEMENT=FIXED /FIRSTCASE=2
         /VARIABLES=model 0-7 A
index 42e02b7c8f22ee0d4206fc6d7527a64a8e52c32d..39c3a670418b1a3c479c12226c3cbf0ac1a06122 100644 (file)
@@ -7,5 +7,5 @@ implemented.
 @cindex unimplemented commands
 @cindex commands, unimplemented
 
-@include doc/ni.texi
+@include ni.texi
 
index c475f306b3644431b9e248e629b6e04b8b550b3b..be696009e4249ddc1f80eded72921e08e4b51502 100644 (file)
@@ -681,6 +681,7 @@ is used.
 @menu
 * BINOMIAL::                Binomial Test
 * CHISQUARE::               Chisquare Test
+* KRUSKAL-WALLIS::          Kruskal-Wallis Test
 * WILCOXON::                Wilcoxon Signed Ranks Test
 * SIGN::                    The Sign Test
 @end menu
@@ -762,6 +763,32 @@ sum of the frequencies need not be 1.
 If no /EXPECTED subcommand is given, then then equal frequencies 
 are expected.
 
+
+@node KRUSKAL-WALLIS
+@subsection Kruskal-Wallis Test
+@comment  node-name,  next,  previous,  up
+@vindex KRUSKAL-WALLIS
+@vindex K-W
+@cindex Kruskal-Wallis test
+
+@display
+     [ /KRUSKAL-WALLIS = varlist BY var (lower, upper) ]
+@end display
+
+The Kruskal-Wallis test is used to compare data from an 
+arbitrary number of populations.  It does not assume normality.
+The data to be compared are specified by @var{varlist}.
+The categorical variable determining the groups to which the
+data belongs is given by @var{var}. The limits @var{lower} and
+@var{upper} specify the valid range of @var{var}. Any cases for
+which @var{var} falls outside [@var{lower}, @var{upper}] will be
+ignored.
+
+The mean rank of each group as well as the chi-squared value and significance
+of the test will be printed.
+The abbreviated subcommand  K-W may be used in place of KRUSKAL-WALLIS.
+
+
 @node WILCOXON
 @subsection Wilcoxon Matched Pairs Signed Ranks Test
 @comment  node-name,  next,  previous,  up
index 27181b3cde64b1fe62b54c2b62be1296a1feaa14..6964facd31c9695adcb93c7959e9f5439b9cc516 100644 (file)
@@ -219,8 +219,9 @@ settings (@pxref{SPLIT FILE}).
 
 @display
 AUTORECODE VARIABLES=src_vars INTO dest_vars
-        /DESCENDING
-        /PRINT
+        [ /DESCENDING ]
+        [ /PRINT ]
+        [ /GROUP ]
 @end display
 
 The @cmd{AUTORECODE} procedure considers the @var{n} values that a variable
@@ -241,6 +242,10 @@ to 1), specify DESCENDING.
 
 PRINT is currently ignored.
 
+The GROUP subcommand is relevant only if more than one variable is to be
+recoded.   It causes a single mapping between source and target values to
+be used, instead of one map per variable.
+
 @cmd{AUTORECODE} is a procedure.  It causes the data to be read.
 
 @node COMPUTE
index 994c0a7fc90028e5ffab058d92b3849aaf2520d0..2432dc3e510c263c2e28c17b9d713d9f72b6010a 100644 (file)
@@ -1,6 +1,6 @@
 @alias prompt = sansserif
 
-@include doc/tut.texi
+@include tut.texi
 
 @node Using PSPP
 @chapter Using PSPP
index 6b248e621fe9766dd5df0eeec079b9420bfa31c1..9f57a76739b43c0a7921b96df18bf66c32905e26 100644 (file)
@@ -25,6 +25,7 @@ encountered in the input.
 * INCLUDE::                     Include a file within the current one.
 * INSERT::                      Insert a file within the current one.
 * PERMISSIONS::                 Change permissions on a file.
+* PRESERVE and RESTORE::        Saving settings and restoring them later.
 * SET::                         Adjust PSPP runtime parameters.
 * SHOW::                        Display runtime parameters.
 * SUBTITLE::                    Provide a document subtitle.
@@ -211,12 +212,19 @@ control to the operating system.
 
 @display
 HOST.
+HOST COMMAND=['command'...].
 @end display
 
 @cmd{HOST} suspends the current PSPP session and temporarily returns control 
 to the operating system.
 This command cannot be used if the SAFER setting is active.
 
+If the COMMAND subcommand is specified, as a sequence of shell
+commands as quoted strings within square brackets, then PSPP executes
+them together in a single subshell.
+
+If no subcommands are specified, then PSPP invokes an interactive
+subshell.
 
 @node INCLUDE
 @section INCLUDE
@@ -308,6 +316,22 @@ unchanged.
 This command cannot be used if the SAFER setting is active.
 
 
+@node PRESERVE and RESTORE
+@section PRESERVE and RESTORE
+@vindex PRESERVE
+@vindex RESTORE
+
+@display
+PRESERVE.
+@dots{}
+RESTORE.
+@end display
+
+@cmd{PRESERVE} saves all of the settings that @cmd{SET} (@pxref{SET})
+can adjust.  A later @cmd{RESTORE} command restores those settings.
+
+@cmd{PRESERVE} can be nested up to five levels deep.
+
 @node SET
 @section SET
 @vindex SET
index 0dfa71fb6ac0468bcf058763d1894c5e25c287fc..b72d24a7edfebfba71201b28a34d13a374c08804 100644 (file)
@@ -169,8 +169,8 @@ reg_sweep (gsl_matrix * A, int last_col)
                  }
            }
          gsl_matrix_free (B);
-         return GSL_SUCCESS;
          free (ordered_cols);
+         return GSL_SUCCESS;
        }
       return GSL_ENOTSQR;
     }
index a3b7b465adf80edf6708b40e95a4900e2784059f..a315abbee2241363bd5c270e5af54297445e7d64 100644 (file)
@@ -19,7 +19,7 @@ WriteMakefile(
     PREREQ_PM         => {POSIX=>0}, 
     PM                => {"lib/PSPP.pm", "\$(INST_LIBDIR)/PSPP.pm"},
     ($] >= 5.005 ?     ## Add these new keywords supported since 5.005
-      (ABSTRACT_FROM  => 'lib/PSPP.pm', # retrieve abstract from module
+      (ABSTRACT       => 'Perl extension to PSPP',
        AUTHOR         => 'John Darrington <john@darrington.wattle.id.au>') : ()),
     INC       => "-I $Locations{SourceDir}  -I $Locations{SourceDir}/src -I $Locations{SourceDir}/gl -I $Locations{BuildDir}/gl -I $Locations{BuildDir}", 
     MYEXTLIB  => "$Locations{BuildDir}/src/.libs/libpspp-core.\$(SO)",
index ca3f873ae110be68520c63a09c4f4601ca623c06..400aeda7b12ce45ada26c7dc138d8b5bf0224f4a 100644 (file)
@@ -166,6 +166,8 @@ MODULE = PSPP
 
 MODULE = PSPP          PACKAGE = PSPP
 
+PROTOTYPES: ENABLE
+
 void
 onBoot (ver)
  const char *ver
@@ -654,10 +656,16 @@ CODE:
     if ( ifmt )
       {
        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)) )
+       char *error;
+       bool ok;
+
+       error = data_in (ss, LEGACY_NATIVE, ifmt->type,
+                        case_data_rw (c, v), var_get_width (v),
+                        dict_get_encoding (sfi->dict));
+        ok = error == NULL;
+        free (error);
+
+       if ( !ok )
          {
            RETVAL = 0;
            goto finish;
index becee71b18c310d1c9302204b4399ef88d191931..93b9bc0ec1887459c7f6e6212665e585a9e75a6f 100644 (file)
@@ -31,12 +31,12 @@ perl-module/PSPP-Perl-$(VERSION_FOR_PERL).tar.gz: $(module_sources) perl-module/
        cd perl-module && $(MAKE) $(AM_MAKEFLAGS) tardist
 
 PHONY += module-make
-module-make: perl-module/Makefile src/libpspp-core.la
+module-make: perl-module/Makefile
        cd perl-module && $(MAKE) $(AM_MAKEFLAGS)
 
 ALL_LOCAL += perl_module_tarball
-perl_module_tarball: $(module_sources)
-       if test x"$(top_builddir)" != x"$(top_srcdir)" ; then \
+perl_module_tarball: $(module_sources) src/libpspp-core.la
+       @if test x"$(top_builddir)" != x"$(top_srcdir)" ; then \
         for f in $(module_sources); do \
          destdir=`dirname $$f` ;\
          mkdir -p $$destdir ;\
index d2d473d2209718fe3669464d0f100fe4bb7f28bc..fce5b74dd2eede1a4d472563cbb4413b359772fa 100644 (file)
@@ -533,7 +533,7 @@ SYNTAX
 
   ok ( !ref $sf, "Returns undef on opening failure");
 
-  ok ("$PSPP::errstr" eq "Error opening \"$tempdir/no-such-file.sav\" for reading as a system file: No such file or directory.",
+  ok ("$PSPP::errstr" eq "Error opening `$tempdir/no-such-file.sav' for reading as a system file: No such file or directory.",
       "Error string on open failure");
 }
 
index a0e3deb24abedc988ca01e63942ba0f4901108b3..464b68b9a768ea0f681bd0d56c29121d881ae102 100644 (file)
--- a/po/ca.po
+++ b/po/ca.po
@@ -4,14 +4,14 @@
 # Francisco J. Miguel Quesada <Miguel.Quesada@uab.cat>, 2009.
 # Palmira Payá Sanchez, 2009.
 # Javier Gómez Serrano, 2009.
-#
+# F. J. Miguel Quesada <miguel.quesada@uab.cat>, 2010.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: pspp-0.7.2-pre1\n"
+"Project-Id-Version: pspp-0.7.5\n"
 "Report-Msgid-Bugs-To: pspp-dev@gnu.org\n"
-"POT-Creation-Date: 2010-05-21 12:02+0200\n"
-"PO-Revision-Date: 2010-01-24 16:28+0100\n"
+"POT-Creation-Date: 2010-05-21 16:40-0700\n"
+"PO-Revision-Date: 2010-10-11 13:23+0200\n"
 "Last-Translator: Francesc Josep Miguel Quesada <Miguel.Quesada@uab.cat>\n"
 "Language-Team: Catalan <ca@dodds.net>\n"
 "MIME-Version: 1.0\n"
@@ -62,9 +62,9 @@ msgid "Prefer variable labels"
 msgstr "Prefereixo les etiquetes de variable"
 
 #: src/ui/gui/psppire-var-view.c:193
-#, fuzzy, c-format
+#, c-format
 msgid "Var%d"
-msgstr "Parell %d"
+msgstr "Var%d"
 
 #: src/data/any-reader.c:56
 #, c-format
@@ -93,17 +93,11 @@ msgstr "El dia %d no hi és a l'interval acceptable de 0 a 31."
 #: src/data/calendar.c:96
 #, c-format
 msgid "Date %04d-%d-%d is before the earliest acceptable date of 1582-10-15."
-msgstr ""
-"La data %04d-%d-%d és anterior de la data acceptada més antiga, 1582-10-15."
+msgstr "La data %04d-%d-%d és anterior de la data acceptada més antiga, 1582-10-15."
 
 #: src/data/casereader-filter.c:221
-msgid ""
-"At least one case in the data read had a weight value that was user-missing, "
-"system-missing, zero, or negative.  These case(s) were ignored."
-msgstr ""
-"Almenys un cas a la lectura de dades tenia un valor de ponderació que és "
-"perdut d'usuari, de sistema, zero o negatiu. Aquest(s) cas(os) van ser "
-"ignorat(s)."
+msgid "At least one case in the data read had a weight value that was user-missing, system-missing, zero, or negative.  These case(s) were ignored."
+msgstr "Almenys un cas a la lectura de dades tenia un valor de ponderació que és perdut d'usuari, de sistema, zero o negatiu. Aquest(s) cas(os) van ser ignorat(s)."
 
 #: src/data/data-in.c:274 src/data/data-in.c:464
 msgid "Field contents are not numeric."
@@ -155,12 +149,8 @@ msgid "Delimiter expected between fields in date."
 msgstr "A la data s'espera un delimitador entre els camps."
 
 #: src/data/data-in.c:837
-msgid ""
-"Unrecognized month format.  Months may be specified as Arabic or Roman "
-"numerals or as at least 3 letters of their English names."
-msgstr ""
-"Format de mes no reconegut. Els mesos poden ser especificats com a números "
-"Aràbics o Romans, o com a mínim 3 lletres dels seus noms en Anglès."
+msgid "Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names."
+msgstr "Format de mes no reconegut. Els mesos poden ser especificats com a números Aràbics o Romans, o com a mínim 3 lletres dels seus noms en Anglès."
 
 #: src/data/data-in.c:864
 #, c-format
@@ -201,12 +191,8 @@ msgid "Minute (%ld) must be between 0 and 59."
 msgstr "Minut (%ld) ha de ser entre 0 i 59."
 
 #: src/data/data-in.c:1014
-msgid ""
-"Unrecognized weekday name.  At least the first two letters of an English "
-"weekday name must be specified."
-msgstr ""
-"Dia de la setmana no reconegut. Al menys s'han d'especificar les dues "
-"primeres lletres del nom en anglès."
+msgid "Unrecognized weekday name.  At least the first two letters of an English weekday name must be specified."
+msgstr "Dia de la setmana no reconegut. Al menys s'han d'especificar les dues primeres lletres del nom en anglès."
 
 #: src/data/data-in.c:1152
 #, c-format
@@ -251,12 +237,8 @@ msgid "scratch"
 msgstr "zero"
 
 #: src/data/dictionary.c:980
-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 ""
-"Almenys un cas a l'arxiu de dades tenia un valor de ponderació que és perdut "
-"d'usuari, de sistema, zero o negatiu. Aquest(s) cas(os) van ser ignorat(s)."
+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 "Almenys un cas a l'arxiu de dades tenia un valor de ponderació que és perdut d'usuari, de sistema, zero o negatiu. Aquest(s) cas(os) van ser ignorat(s)."
 
 #: src/data/dictionary.c:1283
 #, c-format
@@ -266,8 +248,7 @@ msgstr "Línia de document tallada a  %d bytes."
 #: src/data/file-handle-def.c:462
 #, c-format
 msgid "Can't read from %s as a %s because it is already being read as a %s."
-msgstr ""
-"No es pot llegir de %s com una %s perquè ja està sent llegit com una %s."
+msgstr "No es pot llegir de %s com una %s perquè ja està sent llegit com una %s."
 
 #: src/data/file-handle-def.c:466
 #, c-format
@@ -282,8 +263,7 @@ msgstr "No es pot tornar a obrir %s com a %s."
 #: src/data/file-name.c:168
 #, c-format
 msgid "Not opening pipe file `%s' because SAFER option set."
-msgstr ""
-"No obrir l'arxiu de transferència '%s' perquè l'opció SAFER està activada."
+msgstr "No obrir l'arxiu de transferència '%s' perquè l'opció SAFER està activada."
 
 #: src/data/format.c:235
 msgid "Input format"
@@ -306,44 +286,28 @@ msgstr "%s especifica amplada %d, però %s requereix una amplada parell."
 #: src/data/format.c:260
 #, c-format
 msgid "%s %s specifies width %d, but %s requires a width between %d and %d."
-msgstr ""
-"%s %s especifica amplada %d, però %s requereix una amplada entre %d i %d."
+msgstr "%s %s especifica amplada %d, però %s requereix una amplada entre %d i %d."
 
 #: src/data/format.c:269
 #, c-format
 msgid "%s %s specifies %d decimal place, but %s does not allow any decimals."
-msgid_plural ""
-"%s %s specifies %d decimal places, but %s does not allow any decimals."
+msgid_plural "%s %s specifies %d decimal places, but %s does not allow any decimals."
 msgstr[0] "%s %s especifica %d lloc decimal, però %s no en permet cap."
 msgstr[1] "%s %s especifica %d llocs decimals, però %s no en permet cap."
 
 #: src/data/format.c:280
 #, c-format
-msgid ""
-"%s %s specifies %d decimal place, but the given width allows at most %d "
-"decimals."
-msgid_plural ""
-"%s %s specifies %d decimal places, but the given width allows at most %d "
-"decimals."
-msgstr[0] ""
-"%s %s especifica %d lloc decimal, però l'amplada donada permet com a molt %d "
-"decimals."
-msgstr[1] ""
-"%s %s especifica %d llocs decimals, però l'amplada donada permet com a molt %"
-"d decimals."
+msgid "%s %s specifies %d decimal place, but the given width allows at most %d decimals."
+msgid_plural "%s %s specifies %d decimal places, but the given width allows at most %d decimals."
+msgstr[0] "%s %s especifica %d lloc decimal, però l'amplada donada permet com a molt %d decimals."
+msgstr[1] "%s %s especifica %d llocs decimals, però l'amplada donada permet com a molt %d decimals."
 
 #: src/data/format.c:287
 #, c-format
-msgid ""
-"%s %s specifies %d decimal place, but the given width does not allow for any "
-"decimals."
-msgid_plural ""
-"%s %s specifies %d decimal places, but the given width does not allow for "
-"any decimals."
-msgstr[0] ""
-"%s %s especifica %d lloc decimal, però l'amplada donada no en permet cap."
-msgstr[1] ""
-"%s %s especifica %d llocs decimals, però l'amplada donada no en permet cap."
+msgid "%s %s specifies %d decimal place, but the given width does not allow for any decimals."
+msgid_plural "%s %s specifies %d decimal places, but the given width does not allow for any decimals."
+msgstr[0] "%s %s especifica %d lloc decimal, però l'amplada donada no en permet cap."
+msgstr[1] "%s %s especifica %d llocs decimals, però l'amplada donada no en permet cap."
 
 #: src/data/format.c:326
 #, c-format
@@ -386,11 +350,8 @@ msgid "String variable with width %d is not compatible with format %s."
 msgstr "Variable de cadena amb amplada %d no és compatible amb el format %s."
 
 #: src/data/gnumeric-reader.c:36
-msgid ""
-"Support for Gnumeric files was not compiled into this installation of PSPP"
-msgstr ""
-"Suport per a arxius Gnumeric no va ser compilat en aquesta instal·lació de "
-"PSPP"
+msgid "Support for Gnumeric files was not compiled into this installation of PSPP"
+msgstr "Suport per a arxius Gnumeric no va ser compilat en aquesta instal·lació de PSPP"
 
 #: src/data/gnumeric-reader.c:364
 #, c-format
@@ -458,14 +419,14 @@ msgid "Removing %s: %s."
 msgstr "Eliminant %s: %s."
 
 #: src/data/por-file-reader.c:99
-#, fuzzy, c-format
+#, c-format
 msgid "portable file %s corrupt at offset 0x%llx: "
-msgstr "arxiu portàtil %s corromput a la posició 0x%lx: "
+msgstr "l'arxiu portàtil %s és trencat a la posició 0x%llx: "
 
 #: src/data/por-file-reader.c:128
-#, fuzzy, c-format
+#, c-format
 msgid "reading portable file %s at offset 0x%llx: "
-msgstr "llegint l'arxiu portàtil %s en la posició 0x%lx: "
+msgstr "Llegint l'arxiu portàtil %s en la posició 0x%llx: "
 
 #: src/data/por-file-reader.c:156
 #, c-format
@@ -484,8 +445,7 @@ msgstr "arxiu portàtil"
 
 #: src/data/por-file-reader.c:275
 #, c-format
-msgid ""
-"An error occurred while opening \"%s\" for reading as a portable file: %s."
+msgid "An error occurred while opening \"%s\" for reading as a portable file: %s."
 msgstr "Error en obrir \"%s\" per a la lectura com a arxiu portàtil: %s."
 
 #: src/data/por-file-reader.c:296
@@ -531,12 +491,8 @@ msgstr "Longitud de cadena de temps %zu invàlida."
 
 #: src/data/por-file-reader.c:593
 #, c-format
-msgid ""
-"%s: Bad format specifier byte (%d).  Variable will be assigned a default "
-"format."
-msgstr ""
-"%s: Byte especificador de format invàlid (%d). S'assignarà el format "
-"predeterminat a la variable."
+msgid "%s: Bad format specifier byte (%d).  Variable will be assigned a default format."
+msgstr "%s: Byte especificador de format invàlid (%d). S'assignarà el format predeterminat a la variable."
 
 #: src/data/por-file-reader.c:614
 #, c-format
@@ -546,9 +502,7 @@ msgstr "La variable numèrica %s té una especificació de format invàlida %s."
 #: src/data/por-file-reader.c:618
 #, c-format
 msgid "String variable %s with width %d has invalid format specifier %s."
-msgstr ""
-"La variable en cadena %s amb longitud %d té una especificació de format "
-"invàlida %s."
+msgstr "La variable en cadena %s amb longitud %d té una especificació de format invàlida %s."
 
 #: src/data/por-file-reader.c:642
 msgid "Expected variable count record."
@@ -605,11 +559,8 @@ msgstr "Variable %s desconeguda mentre s'analitzaven les etiquetes de valor."
 
 #: src/data/por-file-reader.c:797
 #, c-format
-msgid ""
-"Cannot assign value labels to %s and %s, which have different variable types."
-msgstr ""
-"No es pot assignar etiquetes de valor a %s i %s, que tenen diferent tipus de "
-"variables."
+msgid "Cannot assign value labels to %s and %s, which have different variable types."
+msgstr "No es pot assignar etiquetes de valor a %s i %s, que tenen diferent tipus de variables."
 
 #: src/data/por-file-writer.c:141
 #, c-format
@@ -627,12 +578,8 @@ msgid "An I/O error occurred writing portable file \"%s\"."
 msgstr "Error I/O en escriure l'arxiu portàtil \"%s\"."
 
 #: src/data/psql-reader.c:46
-msgid ""
-"Support for reading postgres databases was not compiled into this "
-"installation of PSPP"
-msgstr ""
-"El suport per a la lectura de les bases de dades postgres no va ser compilat "
-"en aquesta instal·lació de PSPP"
+msgid "Support for reading postgres databases was not compiled into this installation of PSPP"
+msgstr "El suport per a la lectura de les bases de dades postgres no va ser compilat en aquesta instal·lació de PSPP"
 
 #: src/data/psql-reader.c:242
 msgid "Memory error whilst opening psql source"
@@ -645,20 +592,12 @@ msgstr "Error obrint la font psql: %s."
 
 #: 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 ""
-"La versió del servidor Postgres és la %s. No es possible la lectura des de "
-"versions anteriors a la 8.0."
+msgid "Postgres server is version %s. Reading from versions earlier than 8.0 is not supported."
+msgstr "La versió del servidor Postgres és la %s. No es possible la lectura des de versions anteriors a la 8.0."
 
 #: src/data/psql-reader.c:283
-msgid ""
-"Connection is unencrypted, but unencrypted connections have not been "
-"permitted."
-msgstr ""
-"La connexió no està xifrada, però les connexions sense xifrar no estan "
-"permeses."
+msgid "Connection is unencrypted, but unencrypted connections have not been permitted."
+msgstr "La connexió no està xifrada, però les connexions sense xifrar no estan permeses."
 
 #: src/data/psql-reader.c:322 src/data/psql-reader.c:347
 #: src/data/psql-reader.c:357
@@ -673,12 +612,8 @@ msgstr "OID %d no admès. Valors SYSMIS seran inserits."
 
 #: src/data/scratch-reader.c:54
 #, c-format
-msgid ""
-"Scratch file handle %s has not yet been written, using SAVE or another "
-"procedure, so it cannot yet be used for reading."
-msgstr ""
-"El manipulador de l'arxius de treball %s encara no s'ha escrit, utilitzant "
-"SAVE o altre procediment, de manera que encara no es pot llegir."
+msgid "Scratch file handle %s has not yet been written, using SAVE or another procedure, so it cannot yet be used for reading."
+msgstr "El manipulador de l'arxius de treball %s encara no s'ha escrit, utilitzant SAVE o altre procediment, de manera que encara no es pot llegir."
 
 #. TRANSLATORS: this fragment will be interpolated into
 #. messages in fh_lock() that identify types of files.
@@ -688,12 +623,8 @@ msgstr "arxiu de treball"
 
 #: src/data/settings.c:608
 #, c-format
-msgid ""
-"%s: Custom currency string `%s' does not contain exactly three periods or "
-"commas (or it contains both)."
-msgstr ""
-"%s: Cadena de moneda personalitzada '%s' no conté exactament tres punts o "
-"comes (o els conté ambdós)."
+msgid "%s: Custom currency string `%s' does not contain exactly three periods or commas (or it contains both)."
+msgstr "%s: Cadena de moneda personalitzada '%s' no conté exactament tres punts o comes (o els conté ambdós)."
 
 #: src/data/short-names.c:52
 msgid "Variable suffix too large."
@@ -702,9 +633,7 @@ msgstr "Sufix de la variable massa gran."
 #: src/data/sys-file-reader.c:226
 #, c-format
 msgid "Recoded variable name duplicates an existing `%s' within system file."
-msgstr ""
-"El nom de la variable recodificada duplica `%s' existent dins de l'arxiu de "
-"sistema."
+msgstr "El nom de la variable recodificada duplica `%s' existent dins de l'arxiu de sistema."
 
 #. TRANSLATORS: this fragment will be interpolated into
 #. messages in fh_lock() that identify types of files.
@@ -729,9 +658,7 @@ msgstr "Tipus de registre %d no reconegut."
 #: src/data/sys-file-reader.c:388
 #, c-format
 msgid "File header claims %d variable positions but %d were read from file."
-msgstr ""
-"Capçalera de l'arxiu requereix %d posicions de variable, però s'han llegit %"
-"d des de l'arxiu."
+msgstr "Capçalera de l'arxiu requereix %d posicions de variable, però s'han llegit %d des de l'arxiu."
 
 #: src/data/sys-file-reader.c:428
 #, c-format
@@ -744,12 +671,8 @@ msgid "This is not an SPSS system file."
 msgstr "Això no és un arxiu de sistema de SPSS."
 
 #: src/data/sys-file-reader.c:525 tests/dissect-sysfile.c:227
-msgid ""
-"Compression bias is not the usual value of 100, or system file uses "
-"unrecognized floating-point format."
-msgstr ""
-"El biaix de compressió no és el valor habitual de 100, o l'arxiu de sistema "
-"utilitza un format de punt flotant no reconegut."
+msgid "Compression bias is not the usual value of 100, or system file uses unrecognized floating-point format."
+msgstr "El biaix de compressió no és el valor habitual de 100, o l'arxiu de sistema utilitza un format de punt flotant no reconegut."
 
 #: src/data/sys-file-reader.c:602
 #, c-format
@@ -767,8 +690,7 @@ msgstr "Camp indicador d'etiqueta de variable no és 0 o 1."
 
 #: src/data/sys-file-reader.c:649 tests/dissect-sysfile.c:387
 msgid "Numeric missing value indicator field is not -3, -2, 0, 1, 2, or 3."
-msgstr ""
-"Camp d'indicador de valors perduts numèrics  no és -3, -2, 0, 1, 2 o 3."
+msgstr "Camp d'indicador de valors perduts numèrics  no és -3, -2, 0, 1, 2 o 3."
 
 #: src/data/sys-file-reader.c:667 tests/dissect-sysfile.c:402
 msgid "String missing value indicator field is not 0, 1, 2, or 3."
@@ -819,45 +741,31 @@ msgstr "Una línia del document conté un byte nul."
 
 #: src/data/sys-file-reader.c:893
 #, 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 ""
-"Registre de tipus 7, subtipus %d , no reconegut. Si us plau envieu una còpia "
-"d'aquest arxiu, així com de la sintaxi que el va crear a %s"
+msgid "Unrecognized record type 7, subtype %d.  Please send a copy of this file, and the syntax which created it to %s"
+msgstr "Registre de tipus 7, subtipus %d , no reconegut. Si us plau envieu una còpia d'aquest arxiu, així com de la sintaxi que el va crear a %s"
 
 #: src/data/sys-file-reader.c:920 tests/dissect-sysfile.c:594
 #, c-format
 msgid "Bad size (%zu) or count (%zu) field on record type 7, subtype 3."
-msgstr ""
-"Camp de longitud (%zu) o quantitat (%zu) invàlids en el registre tipus 7, "
-"subtipus 3."
+msgstr "Camp de longitud (%zu) o quantitat (%zu) invàlids en el registre tipus 7, subtipus 3."
 
 #: src/data/sys-file-reader.c:940
 #, c-format
-msgid ""
-"Floating-point representation indicated by system file (%d) differs from "
-"expected (%d)."
-msgstr ""
-"Representació del punt flotant indicat per l'arxiu de sistema (%d) difereix "
-"de l'esperat (%d)."
+msgid "Floating-point representation indicated by system file (%d) differs from expected (%d)."
+msgstr "Representació del punt flotant indicat per l'arxiu de sistema (%d) difereix de l'esperat (%d)."
 
 #: src/data/sys-file-reader.c:953 src/language/dictionary/sys-file-info.c:110
-#, fuzzy
 msgid "Little Endian"
-msgstr "Little Endian."
+msgstr "Tipus Little-Endian."
 
 #: src/data/sys-file-reader.c:953 src/language/dictionary/sys-file-info.c:109
-#, fuzzy
 msgid "Big Endian"
-msgstr "Big Endian."
+msgstr "Tipus Big-Endian."
 
 #: src/data/sys-file-reader.c:954
 #, c-format
-msgid ""
-"Integer format indicated by system file (%s) differs from expected (%s)."
-msgstr ""
-"Format enter indicat per l'arxiu de sistema  (%s) difereix de l'esperat (%s)."
+msgid "Integer format indicated by system file (%s) differs from expected (%s)."
+msgstr "Format enter indicat per l'arxiu de sistema  (%s) difereix de l'esperat (%s)."
 
 #: src/data/sys-file-reader.c:1011 tests/dissect-sysfile.c:625
 #, c-format
@@ -874,51 +782,47 @@ msgstr "L'arxiu especifica un valor inesperat %g com a %s."
 #: src/data/sys-file-reader.c:1056
 #, c-format
 msgid "Missing space following 'C' at offset %zu in MRSETS record"
-msgstr ""
+msgstr "Espai perdut darrera 'C' en la possició %zu a registre MRSETS"
 
 #: src/data/sys-file-reader.c:1074 tests/dissect-sysfile.c:691
 #, c-format
 msgid "Missing space following 'E' at offset %zu in MRSETS record"
-msgstr ""
+msgstr "Espai perdut darrera 'E' en la possició %zu a registre MRSETS"
 
 #: src/data/sys-file-reader.c:1083 tests/dissect-sysfile.c:700
 #, c-format
-msgid ""
-"Unexpected label source value \"%s\" following 'E' at offset %zu in MRSETS "
-"record"
-msgstr ""
+msgid "Unexpected label source value \"%s\" following 'E' at offset %zu in MRSETS record"
+msgstr "Valor d'etiqueta no esperat \"%s\" darrera 'E' en la possició %zu a registre MRSETS"
 
 #: src/data/sys-file-reader.c:1089
 #, c-format
 msgid "Missing 'C', 'D', or 'E' at offset %zu in MRSETS record."
-msgstr ""
+msgstr "Manca 'C', 'D' o 'E' en la possició %zu a registre MRSETS"
 
 #: src/data/sys-file-reader.c:1118
 #, c-format
 msgid "Missing new-line parsing variable names at offset %zu in MRSETS record."
-msgstr ""
+msgstr "Manca nom de variables de nova línia en la possició %zu a registre MRSETS"
 
 #: src/data/sys-file-reader.c:1129
-#, fuzzy, c-format
+#, c-format
 msgid "Duplicate variable name %s at offset %zu in MRSETS record."
-msgstr "Nom de la variable %s duplicat en la posició %d."
+msgstr "Nom de la variable %s duplicat en la posició %zu a registre MRSET."
 
 #: src/data/sys-file-reader.c:1142
-#, fuzzy, c-format
+#, c-format
 msgid "MRSET %s contains both string and numeric variables."
-msgstr ""
-"Ignorant el registre del valor de cadena llarga per a la variable numèrica %"
-"s."
+msgstr "MRSET %s contè variables textuals i numeriques."
 
 #: src/data/sys-file-reader.c:1157
 #, c-format
 msgid "MRSET %s has only %zu variables."
-msgstr ""
+msgstr "MRSET %s nomès te %zu variables."
 
 #: src/data/sys-file-reader.c:1194 tests/dissect-sysfile.c:758
 #, c-format
 msgid "Bad size %zu on extension 11."
-msgstr "Longitud no vàlid %zu en l'extensió 11."
+msgstr "Amplada no vàlida %zu en l'extensió 11."
 
 #: src/data/sys-file-reader.c:1206 tests/dissect-sysfile.c:770
 #, c-format
@@ -927,19 +831,13 @@ msgstr "Extensió 11 té un recompte invàlid %zu (per a %zu variables)."
 
 #: src/data/sys-file-reader.c:1227
 #, c-format
-msgid ""
-"Invalid variable display parameters for variable %zu (%s).  Default "
-"parameters substituted."
-msgstr ""
-"Paràmetres de visualització de variable no vàlids per a la variable %zu (%"
-"s). Substitució pels paràmetres per defecte."
+msgid "Invalid variable display parameters for variable %zu (%s).  Default parameters substituted."
+msgstr "Paràmetres de visualització de variable no vàlids per a la variable %zu (%s). Substitució pels paràmetres per defecte."
 
 #: src/data/sys-file-reader.c:1271
 #, c-format
 msgid "Long variable mapping from %s to invalid variable name `%s'."
-msgstr ""
-"Identificació de variable llarga des de %s cap a un nom de variable invàlid  "
-"'%s'."
+msgstr "Identificació de variable llarga des de %s cap a un nom de variable invàlid  '%s'."
 
 #: src/data/sys-file-reader.c:1281
 #, c-format
@@ -949,18 +847,12 @@ msgstr "Nom de la variable llarga '%s' duplicat dins de l'arxiu de sistema."
 #: src/data/sys-file-reader.c:1334
 #, c-format
 msgid "%s listed as string of invalid length %s in very length string record."
-msgstr ""
-"%s figura com a cadena de longitud no vàlida %s en un registre de cadena "
-"molt llarg."
+msgstr "%s figura com a cadena de longitud no vàlida %s en un registre de cadena molt llarg."
 
 #: src/data/sys-file-reader.c:1344
 #, c-format
-msgid ""
-"%s listed in very long string record with width %s, which requires only one "
-"segment."
-msgstr ""
-"%s figura en el registre de cadena molt llarga amb longitud %s, que "
-"requereix només un segment."
+msgid "%s listed in very long string record with width %s, which requires only one segment."
+msgstr "%s figura en el registre de cadena molt llarga amb longitud %s, que requereix només un segment."
 
 #: src/data/sys-file-reader.c:1350
 #, c-format
@@ -969,11 +861,8 @@ msgstr "Cadena molt llarga %s desborda el diccionari."
 
 #: src/data/sys-file-reader.c:1364
 #, c-format
-msgid ""
-"Very long string with width %ld has segment %d of width %d (expected %d)"
-msgstr ""
-"Cadena molt llarga amb una longitud de %ld té un segment %d de longitud %d "
-"(s'espera %d)"
+msgid "Very long string with width %ld has segment %d of width %d (expected %d)"
+msgstr "Cadena molt llarga amb una longitud de %ld té un segment %d de longitud %d (s'espera %d)"
 
 #: src/data/sys-file-reader.c:1410
 #, c-format
@@ -981,39 +870,23 @@ msgid "Invalid number of labels: %d.  Ignoring labels."
 msgstr "Nombre d'etiquetes invàlid: %d. Ignorant etiquetes."
 
 #: src/data/sys-file-reader.c:1441 tests/dissect-sysfile.c:468
-msgid ""
-"Variable index record (type 4) does not immediately follow value label "
-"record (type 3) as it should."
-msgstr ""
-"Registre d'índex de variable (tipus 4) no és seguit immediatament pel "
-"registre d'etiquetes de valors (tipus 3) com hauria."
+msgid "Variable index record (type 4) does not immediately follow value label record (type 3) as it should."
+msgstr "Registre d'índex de variable (tipus 4) no és seguit immediatament pel registre d'etiquetes de valors (tipus 3) com hauria."
 
 #: src/data/sys-file-reader.c:1448
 #, c-format
-msgid ""
-"Number of variables associated with a value label (%d) is not between 1 and "
-"the number of variables (%zu)."
-msgstr ""
-"Nombre de variables associades amb una etiqueta de valors (%d) no està entre "
-"1 i el nombre de variables (%zu)."
+msgid "Number of variables associated with a value label (%d) is not between 1 and the number of variables (%zu)."
+msgstr "Nombre de variables associades amb una etiqueta de valors (%d) no està entre 1 i el nombre de variables (%zu)."
 
 #: src/data/sys-file-reader.c:1459
 #, c-format
-msgid ""
-"Value labels may not be added to long string variables (e.g. %s) using "
-"records types 3 and 4."
-msgstr ""
-"No es pot afegir etiquetes dels valors a les variables de cadena llarga (e."
-"g. %s) utilitzant els tipus de registres 3 i 4."
+msgid "Value labels may not be added to long string variables (e.g. %s) using records types 3 and 4."
+msgstr "No es pot afegir etiquetes dels valors a les variables de cadena llarga (e.g. %s) utilitzant els tipus de registres 3 i 4."
 
 #: src/data/sys-file-reader.c:1468
 #, c-format
-msgid ""
-"Variables associated with value label are not all of identical type.  "
-"Variable %s is %s, but variable %s is %s."
-msgstr ""
-"Les variables associades amb etiqueta de valors no són totes del mateix "
-"tipus.  La variable %s és %s, però la variable %s és %s."
+msgid "Variables associated with value label are not all of identical type.  Variable %s is %s, but variable %s is %s."
+msgstr "Les variables associades amb etiqueta de valors no són totes del mateix tipus.  La variable %s és %s, però la variable %s és %s."
 
 #: src/data/sys-file-reader.c:1502
 #, c-format
@@ -1037,44 +910,28 @@ msgstr "El valor de l'atribut %s[%d] no esta entre cometes: %s"
 
 #: src/data/sys-file-reader.c:1620 tests/dissect-sysfile.c:936
 #, c-format
-msgid ""
-"Variable name length in long string value label record (%d) exceeds %d-byte "
-"limit."
-msgstr ""
-"La longitud del nom de la variable al registre de l'etiqueta del valor de "
-"cadena llarga (%d) supera el límit %d-byte."
+msgid "Variable name length in long string value label record (%d) exceeds %d-byte limit."
+msgstr "La longitud del nom de la variable al registre de l'etiqueta del valor de cadena llarga (%d) supera el límit %d-byte."
 
 #: src/data/sys-file-reader.c:1630
 #, c-format
 msgid "Ignoring long string value record for unknown variable %s."
-msgstr ""
-"Ignorant el registre del valor de cadena llarga per a la variable "
-"desconeguda %s."
+msgstr "Ignorant el registre del valor de cadena llarga per a la variable desconeguda %s."
 
 #: src/data/sys-file-reader.c:1637
 #, c-format
 msgid "Ignoring long string value record for numeric variable %s."
-msgstr ""
-"Ignorant el registre del valor de cadena llarga per a la variable numèrica %"
-"s."
+msgstr "Ignorant el registre del valor de cadena llarga per a la variable numèrica %s."
 
 #: src/data/sys-file-reader.c:1644
 #, 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 ""
-"Ignorant el registre del valor de cadena llarga %s ja que l'amplada del "
-"registre (%d) no coincideix amb l'amplada de la variable (%d)"
+msgid "Ignoring long string value record for variable %s because the record's width (%d) does not match the variable's width (%d)"
+msgstr "Ignorant el registre del valor de cadena llarga %s ja que l'amplada del registre (%d) no coincideix amb l'amplada de la variable (%d)"
 
 #: src/data/sys-file-reader.c:1666
 #, c-format
-msgid ""
-"Ignoring long string value %zu for variable %s, with width %d, that has bad "
-"value width %zu."
-msgstr ""
-"Ignorant el valor de cadena llarga %zu per a la variable %s, d'amplada %d, "
-"que té una amplada de valor incorrecta %zu."
+msgid "Ignoring long string value %zu for variable %s, with width %d, that has bad value width %zu."
+msgstr "Ignorant el valor de cadena llarga %zu per a la variable %s, d'amplada %d, que té una amplada de valor incorrecta %zu."
 
 #: src/data/sys-file-reader.c:1781
 msgid "File ends in partial case."
@@ -1086,17 +943,13 @@ msgid "Error reading case from file %s."
 msgstr "Error llegint un cas de l'arxiu %s."
 
 #: src/data/sys-file-reader.c:1890
-msgid ""
-"Possible compressed data corruption: compressed spaces appear in numeric "
-"field."
-msgstr ""
+msgid "Possible compressed data corruption: compressed spaces appear in numeric field."
+msgstr "Possible corrupció de dades comprimides: apareixen espais comprimits a un camp numeric."
 
 #: src/data/sys-file-reader.c:1943
 #, c-format
-msgid ""
-"Possible compressed data corruption: string contains compressed integer "
-"(opcode %d)"
-msgstr ""
+msgid "Possible compressed data corruption: string contains compressed integer (opcode %d)"
+msgstr "Possible corrupció de dades comprimides: una cadena textual contè un enter comprimit (opcode %d)."
 
 #: src/data/sys-file-reader.c:2035
 #, c-format
@@ -1106,8 +959,7 @@ msgstr "Índex de la variable %d no en l'interval vàlid de 1...%d."
 #: src/data/sys-file-reader.c:2040
 #, c-format
 msgid "Variable index %d refers to long string continuation."
-msgstr ""
-"Índex de la variable %d es refereix a una continuació de cadena llarga."
+msgstr "Índex de la variable %d es refereix a una continuació de cadena llarga."
 
 #: src/data/sys-file-reader.c:2108
 #, c-format
@@ -1115,29 +967,29 @@ msgid "Suppressed %d additional related warnings."
 msgstr "Suprimides %d advertències addicionals."
 
 #: src/data/sys-file-reader.c:2153 src/data/sys-file-reader.c:2170
-#, fuzzy, c-format
+#, c-format
 msgid "Dictionary record refers to unknown variable %s."
-msgstr "Mapa de la variable es refereix a una variable desconeguda %s."
+msgstr "El registre diccionari es refereix a la variable desconeguda %s."
 
 #: src/data/sys-file-reader.c:2231
 #, c-format
 msgid "Expecting digit at offset %zu in MRSETS record."
-msgstr ""
+msgstr "S'espera un dígit en la posició %zu a registre MRSETS."
 
 #: src/data/sys-file-reader.c:2238
 #, c-format
 msgid "Expecting space at offset %zu in MRSETS record."
-msgstr ""
+msgstr "S'espera un espai en la posició %zu a registre MRSETS."
 
 #: src/data/sys-file-reader.c:2245
 #, c-format
 msgid "%zu-byte string starting at offset %zu exceeds record length %zu."
-msgstr ""
+msgstr "El text de %zu-byte que comença en la posició %zu excedeix la llargada del registre %zu. "
 
 #: src/data/sys-file-reader.c:2255
 #, c-format
 msgid "Expecting space at offset %zu following %zu-byte string."
-msgstr ""
+msgstr "S'espera un espai en la posició %zu darrera dun text %zu-byte."
 
 #: src/data/sys-file-reader.c:2347 tests/dissect-sysfile.c:1341
 #, c-format
@@ -1165,12 +1017,8 @@ msgstr "S'ha produït un error de E/S al desar l'arxiu de sistema \"%s\"."
 
 #: src/data/variable.c:206
 #, c-format
-msgid ""
-"Character `%c' (in %s) may not appear as the first character in a variable "
-"name."
-msgstr ""
-"Caràcter '%c' (em %s) no pot aparèixer com el primer caràcter en un nom de "
-"variable."
+msgid "Character `%c' (in %s) may not appear as the first character in a variable name."
+msgstr "Caràcter '%c' (em %s) no pot aparèixer com el primer caràcter en un nom de variable."
 
 #: src/data/variable.c:218
 #, c-format
@@ -1189,9 +1037,7 @@ msgstr "El nom de la variable %s supera el límit de %d caràcters."
 #: src/data/variable.c:258
 #, c-format
 msgid "`%s' may not be used as a variable name because it is a reserved word."
-msgstr ""
-"'%s' no pot ser utilitzat com a nom de variable perquè es una paraula "
-"reservada."
+msgstr "'%s' no pot ser utilitzat com a nom de variable perquè es una paraula reservada."
 
 #: src/language/syntax-file.c:95
 #, c-format
@@ -1259,38 +1105,23 @@ msgstr "%s només es permet dins de FILE TYPE."
 
 #: src/language/command.c:642
 #, c-format
-msgid ""
-"%s is allowed only before the active file has been defined or inside INPUT "
-"PROGRAM."
-msgstr ""
-"%s només es permet abans que l'arxiu actiu s'ha definit o dins de INPUT "
-"PROGRAM."
+msgid "%s is allowed only before the active file has been defined or inside INPUT PROGRAM."
+msgstr "%s només es permet abans que l'arxiu actiu s'ha definit o dins de INPUT PROGRAM."
 
 #: src/language/command.c:646
 #, c-format
-msgid ""
-"%s is allowed only before the active file has been defined or inside FILE "
-"TYPE."
-msgstr ""
-"%s només es permet abans que l'arxiu actiu s'ha definit o dins de FILE TYPE."
+msgid "%s is allowed only before the active file has been defined or inside FILE TYPE."
+msgstr "%s només es permet abans que l'arxiu actiu s'ha definit o dins de FILE TYPE."
 
 #: src/language/command.c:650
 #, c-format
-msgid ""
-"%s is allowed only after the active file has been defined or inside INPUT "
-"PROGRAM."
-msgstr ""
-"%s només es permet després que l'arxiu actiu s'ha definit, o dins de INPUT "
-"PROGRAM."
+msgid "%s is allowed only after the active file has been defined or inside INPUT PROGRAM."
+msgstr "%s només es permet després que l'arxiu actiu s'ha definit, o dins de INPUT PROGRAM."
 
 #: src/language/command.c:654
 #, c-format
-msgid ""
-"%s is allowed only after the active file has been defined or inside FILE "
-"TYPE."
-msgstr ""
-"%s només es permet després que l'arxiu actiu s'ha definit, o dins de FILE "
-"TYPE."
+msgid "%s is allowed only after the active file has been defined or inside FILE TYPE."
+msgstr "%s només es permet després que l'arxiu actiu s'ha definit, o dins de FILE TYPE."
 
 #: src/language/command.c:658
 #, c-format
@@ -1299,26 +1130,18 @@ msgstr "%s només es permet dins de INPUT PROGRAM o FILE TYPE."
 
 #: src/language/command.c:664
 #, c-format
-msgid ""
-"%s is allowed only after the active file has been defined, inside INPUT "
-"PROGRAM, or inside FILE TYPE."
-msgstr ""
-"%s només es permet després que l'arxiu actiu s'ha definit, dins de INPUT "
-"PROGRAM, o FILE TYPE."
+msgid "%s is allowed only after the active file has been defined, inside INPUT PROGRAM, or inside FILE TYPE."
+msgstr "%s només es permet després que l'arxiu actiu s'ha definit, dins de INPUT PROGRAM, o FILE TYPE."
 
 #: src/language/command.c:669
 #, c-format
-msgid ""
-"%s is allowed only before the active file has been defined, inside INPUT "
-"PROGRAM, or inside FILE TYPE."
-msgstr ""
-"%s només es permet abans que l'arxiu actiu s'ha definit, dins de INPUT "
-"PROGRAM, o FILE TYPE."
+msgid "%s is allowed only before the active file has been defined, inside INPUT PROGRAM, or inside FILE TYPE."
+msgstr "%s només es permet abans que l'arxiu actiu s'ha definit, dins de INPUT PROGRAM, o FILE TYPE."
 
 #: src/language/command.c:687 src/language/command.c:689
-#, fuzzy, c-format
+#, c-format
 msgid "%s is not allowed inside %s."
-msgstr "%s no es permet dins de FILE TYPE."
+msgstr "%s no és permes dins de %s."
 
 #: src/language/command.c:768 src/language/command.c:876
 #: src/language/utilities/permissions.c:98
@@ -1460,12 +1283,8 @@ msgstr "esperant el tipus de format"
 
 #: 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 ""
-"El límit inferior de l'interval (%g) està per sota del límit superior (%g).  "
-"L' interval serà invertit."
+msgid "Low end of range (%g) is below high end (%g).  The range will be treated as reversed."
+msgstr "El límit inferior de l'interval (%g) està per sota del límit superior (%g).  L' interval serà invertit."
 
 #: src/language/lexer/value-parser.c:68
 #, c-format
@@ -1495,17 +1314,13 @@ msgstr "%s no és un nom de variable."
 
 #: src/language/lexer/variable-parser.c:178
 #, c-format
-msgid ""
-"%s is not a numeric variable.  It will not be included in the variable list."
-msgstr ""
-"%s no és una variable numèrica. No serà inclosa a la llista de variables."
+msgid "%s is not a numeric variable.  It will not be included in the variable list."
+msgstr "%s no és una variable numèrica. No serà inclosa a la llista de variables."
 
 #: src/language/lexer/variable-parser.c:181
 #, c-format
-msgid ""
-"%s is not a string variable.  It will not be included in the variable list."
-msgstr ""
-"%s no és una variable de cadena. No serà inclosa a la llista de variables."
+msgid "%s is not a string variable.  It will not be included in the variable list."
+msgstr "%s no és una variable de cadena. No serà inclosa a la llista de variables."
 
 #: src/language/lexer/variable-parser.c:185
 #, c-format
@@ -1514,21 +1329,13 @@ msgstr "Les variables de treball  (com ara %s) no estan permeses aquí."
 
 #: src/language/lexer/variable-parser.c:189
 #, c-format
-msgid ""
-"%s and %s are not the same type.  All variables in this variable list must "
-"be of the same type.  %s will be omitted from the list."
-msgstr ""
-"%s i %s no són del mateix tipus. Totes les variables d'aquesta llista han de "
-"ser del mateix tipus. %s serà omesa de la llista."
+msgid "%s and %s are not the same type.  All variables in this variable list must be of the same type.  %s will be omitted from the list."
+msgstr "%s i %s no són del mateix tipus. Totes les variables d'aquesta llista han de ser del mateix tipus. %s serà omesa de la llista."
 
 #: src/language/lexer/variable-parser.c:195
 #, c-format
-msgid ""
-"%s and %s are string variables with different widths.  All variables in this "
-"variable list must have the same width.  %s will be omitted from the list."
-msgstr ""
-"%s i %s són variables de cadena amb tamanys diferents. Totes les variables "
-"d'aquesta llista han de tenir la mateixa amplada. %s serà omesa de la llista."
+msgid "%s and %s are string variables with different widths.  All variables in this variable list must have the same width.  %s will be omitted from the list."
+msgstr "%s i %s són variables de cadena amb tamanys diferents. Totes les variables d'aquesta llista han de tenir la mateixa amplada. %s serà omesa de la llista."
 
 #: src/language/lexer/variable-parser.c:200
 #: src/language/lexer/variable-parser.c:496
@@ -1539,19 +1346,12 @@ msgstr "La variable %s apareix dues vegades en la llista de variables."
 #: src/language/lexer/variable-parser.c:313
 #, c-format
 msgid "%s TO %s is not valid syntax since %s precedes %s in the dictionary."
-msgstr ""
-"%s TO %s no és una sintaxi vàlida atès que %s precedeix %s en el diccionari."
+msgstr "%s TO %s no és una sintaxi vàlida atès que %s precedeix %s en el diccionari."
 
 #: src/language/lexer/variable-parser.c:321
 #, c-format
-msgid ""
-"When using the TO keyword to specify several variables, both variables must "
-"be from the same variable dictionaries, of either ordinary, scratch, or "
-"system variables.  %s is a %s variable, whereas %s is %s."
-msgstr ""
-"Quan s'utilitza la paraula clau TO per especificar diverses variables, "
-"ambdues han de ser del mateix diccionari de variables, ja siguin ordinals, "
-"scratch, o variables de sistema. %s és una variable %s, atès que %s és %s."
+msgid "When using the TO keyword to specify several variables, both variables must be from the same variable dictionaries, of either ordinary, scratch, or system variables.  %s is a %s variable, whereas %s is %s."
+msgstr "Quan s'utilitza la paraula clau TO per especificar diverses variables, ambdues han de ser del mateix diccionari de variables, ja siguin ordinals, scratch, o variables de sistema. %s és una variable %s, atès que %s és %s."
 
 #: src/language/lexer/variable-parser.c:395
 msgid "incorrect use of TO convention"
@@ -1571,19 +1371,13 @@ msgstr "Límits incorrectes en l'ús de la convenció TO."
 
 #: src/language/xforms/compute.c:149 src/language/xforms/compute.c:203
 #, c-format
-msgid ""
-"When executing COMPUTE: SYSMIS is not a valid value as an index into vector %"
-"s."
-msgstr ""
-"Quan s'executa COMPUTE: SYSMIS no és un valor vàlid com a índex en el vector "
-"%s."
+msgid "When executing COMPUTE: SYSMIS is not a valid value as an index into vector %s."
+msgstr "Quan s'executa COMPUTE: SYSMIS no és un valor vàlid com a índex en el vector %s."
 
 #: src/language/xforms/compute.c:153 src/language/xforms/compute.c:210
 #, c-format
-msgid ""
-"When executing COMPUTE: %g is not a valid value as an index into vector %s."
-msgstr ""
-"Quan s'executa COMPUTE: %g no és un valor vàlid com a índex en el vector %s."
+msgid "When executing COMPUTE: %g is not a valid value as an index into vector %s."
+msgstr "Quan s'executa COMPUTE: %g no és un valor vàlid com a índex en el vector %s."
 
 #: src/language/xforms/compute.c:353
 #, c-format
@@ -1604,17 +1398,12 @@ msgid "Cannot sample %d observations from a population of %d."
 msgstr "No es pot fer una mostra de %d observacions d'una població de %d."
 
 #: src/language/xforms/recode.c:248
-msgid ""
-"Inconsistent target variable types.  Target variables must be all numeric or "
-"all string."
-msgstr ""
-"Tipus inconsistent de variables objectiu.  Les variables objectiu han de ser "
-"totes, o bé de cadena o bé numèriques."
+msgid "Inconsistent target variable types.  Target variables must be all numeric or all string."
+msgstr "Tipus inconsistent de variables objectiu.  Les variables objectiu han de ser totes, o bé de cadena o bé numèriques."
 
 #: src/language/xforms/recode.c:269
 msgid "CONVERT requires string input values and numeric output values."
-msgstr ""
-"CONVERT requereix valors d'entrada de cadena i valors de sortida numèrics. "
+msgstr "CONVERT requereix valors d'entrada de cadena i valors de sortida numèrics. "
 
 #: src/language/xforms/recode.c:324
 msgid "THRU is not allowed with string variables."
@@ -1626,22 +1415,13 @@ msgstr "esperant el valor de sortida"
 
 #: src/language/xforms/recode.c:460
 #, 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 ""
-"%zu variable(s) no poden ser recodificades a %zu variable(s).  Especifiqueu "
-"el mateix nombre de variables com a origen i destinació."
+msgid "%zu variable(s) cannot be recoded into %zu variable(s).  Specify the same number of variables as source and target variables."
+msgstr "%zu variable(s) no poden ser recodificades a %zu variable(s).  Especifiqueu el mateix nombre de variables com a origen i destinació."
 
 #: src/language/xforms/recode.c:475
 #, 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 ""
-"No existeix cap variable anomenada %s. (Totes les variables de cadena "
-"especificades a INTO ja han d'existir.  Utilitzeu el comandament STRING per "
-"crear una variable de cadena.)"
+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 "No existeix cap variable anomenada %s. (Totes les variables de cadena especificades a INTO ja han d'existir.  Utilitzeu el comandament STRING per crear una variable de cadena.)"
 
 #: src/language/xforms/recode.c:491
 #, c-format
@@ -1673,8 +1453,7 @@ msgstr "%s sense %s."
 #: src/language/control/control-stack.c:55
 #, c-format
 msgid "This command must appear inside %s...%s, without intermediate %s...%s."
-msgstr ""
-"Aquesta ordre ha d'aparèixer dins de %s...%s, sense intermediaris %s...%s."
+msgstr "Aquesta ordre ha d'aparèixer dins de %s...%s, sense intermediaris %s...%s."
 
 #: src/language/control/control-stack.c:72
 #, c-format
@@ -1690,19 +1469,13 @@ msgid "Only one index clause may be specified."
 msgstr "Només pot ser especificada una clàusula d'índex."
 
 #: src/language/control/temporary.c:46
-msgid ""
-"This command may only appear once between procedures and procedure-like "
-"commands."
-msgstr ""
-"Aquesta ordre només pot aparèixer una vegada entre les ordres de "
-"procediments i quasi-procediments."
+msgid "This command may only appear once between procedures and procedure-like commands."
+msgstr "Aquesta ordre només pot aparèixer una vegada entre les ordres de procediments i quasi-procediments."
 
 #: src/language/control/repeat.c:172
 #, c-format
 msgid "Dummy variable name \"%s\" hides dictionary variable \"%s\"."
-msgstr ""
-"El nom de la variable fictícia \"%s\" oculta la variable de diccionari \"%s"
-"\"."
+msgstr "El nom de la variable fictícia \"%s\" oculta la variable de diccionari \"%s\"."
 
 #: src/language/control/repeat.c:177
 #, c-format
@@ -1711,12 +1484,8 @@ msgstr "El nom de la variable fictícia \"%s\" es dóna dues vegades."
 
 #: src/language/control/repeat.c:223
 #, c-format
-msgid ""
-"Dummy variable \"%.*s\" had %d substitutions, so \"%.*s\" must also, but %d "
-"were specified."
-msgstr ""
-"Una variable fictícia \"%.*s\" en te %d substitucions, de manera que \"%.*s"
-"\" també n'hauria de tenir-les, però es van especificar %d."
+msgid "Dummy variable \"%.*s\" had %d substitutions, so \"%.*s\" must also, but %d were specified."
+msgstr "Una variable fictícia \"%.*s\" en te %d substitucions, de manera que \"%.*s\" també n'hauria de tenir-les, però es van especificar %d."
 
 #: src/language/control/repeat.c:335
 msgid "DO REPEAT may not nest in compatibility mode."
@@ -1750,30 +1519,19 @@ msgstr "esperant ATTRIBUTE= o DELETE="
 #: src/language/dictionary/apply-dictionary.c:75
 #, c-format
 msgid "Variable %s is %s in target file, but %s in source file."
-msgstr ""
-"La variable %s és %s en l'arxiu de destinació, però %s en l'arxiu d'origen."
+msgstr "La variable %s és %s en l'arxiu de destinació, però %s en l'arxiu d'origen."
 
 #: src/language/dictionary/apply-dictionary.c:115
 msgid "No matching variables found between the source and target files."
-msgstr ""
-"No s'han trobat coincidències de variables entre els arxius d'origen i de "
-"destinació."
+msgstr "No s'han trobat coincidències de variables entre els arxius d'origen i de destinació."
 
 #: src/language/dictionary/delete-variables.c:40
-msgid ""
-"DELETE VARIABLES may not be used after TEMPORARY.  Temporary transformations "
-"will be made permanent."
-msgstr ""
-"DELETE VARIABLES no pot ser utilitzat després de TEMPORARY. Les "
-"transformacions temporals seran permanents."
+msgid "DELETE VARIABLES may not be used after TEMPORARY.  Temporary transformations will be made permanent."
+msgstr "DELETE VARIABLES no pot ser utilitzat després de TEMPORARY. Les transformacions temporals seran permanents."
 
 #: src/language/dictionary/delete-variables.c:48
-msgid ""
-"DELETE VARIABLES may not be used to delete all variables from the active "
-"file dictionary.  Use NEW FILE instead."
-msgstr ""
-"DELETE VARIABLES no pot ser utilitzar per esborrar totes les variables de "
-"l'arxiu de diccionari actiu. Utilitzar NEW FILE en el seu lloc."
+msgid "DELETE VARIABLES may not be used to delete all variables from the active file dictionary.  Use NEW FILE instead."
+msgstr "DELETE VARIABLES no pot ser utilitzar per esborrar totes les variables de l'arxiu de diccionari actiu. Utilitzar NEW FILE en el seu lloc."
 
 #: src/language/dictionary/formats.c:90
 msgid "`(' expected after variable list."
@@ -1790,12 +1548,8 @@ msgstr "esperant `('"
 
 #: src/language/dictionary/missing-values.c:72
 #, c-format
-msgid ""
-"Cannot mix numeric variables (e.g. %s) and string variables (e.g. %s) within "
-"a single list."
-msgstr ""
-"No es poden barrejar les variables numèriques (e.g. %s) i les variables de "
-"cadena (e.g. %s) dins d'una llista única."
+msgid "Cannot mix numeric variables (e.g. %s) and string variables (e.g. %s) within a single list."
+msgstr "No es poden barrejar les variables numèriques (e.g. %s) i les variables de cadena (e.g. %s) dins d'una llista única."
 
 #: src/language/dictionary/missing-values.c:116
 #, c-format
@@ -1805,79 +1559,53 @@ msgstr "Truncant el valor perdut a la longitud màxima acceptable (%d bytes)."
 #: src/language/dictionary/missing-values.c:138
 #, c-format
 msgid "Missing values provided are too long to assign to variable of width %d."
-msgstr ""
-"Els valors perduts donats són massa llargs per assignar a la variable "
-"d'amplada %d."
+msgstr "Els valors perduts donats són massa llargs per assignar a la variable d'amplada %d."
 
 #: src/language/dictionary/modify-variables.c:92
-msgid ""
-"MODIFY VARS may not be used after TEMPORARY.  Temporary transformations will "
-"be made permanent."
-msgstr ""
-"MODIFY VARS no pot ser utilitzar després de TEMPORARY. Les transformacions "
-"temporals seran permanents."
+msgid "MODIFY VARS may not be used after TEMPORARY.  Temporary transformations will be made permanent."
+msgstr "MODIFY VARS no pot ser utilitzar després de TEMPORARY. Les transformacions temporals seran permanents."
 
 #: src/language/dictionary/modify-variables.c:114
 #: src/language/dictionary/modify-variables.c:177
-#, fuzzy, c-format
+#, c-format
 msgid "%s subcommand may be given at most once."
-msgstr "El subcomando RENAME pot ser utilitzat només una vegada."
+msgstr "El subcomando %s pot ser utilitzat només una vegada."
 
 #: src/language/dictionary/modify-variables.c:137
 msgid "Cannot specify ALL after specifying a set of variables."
-msgstr ""
-"No es pot especificar ALL després de l'especificació d'un conjunt de "
-"variables."
+msgstr "No es pot especificar ALL després de l'especificació d'un conjunt de variables."
 
 #: src/language/dictionary/modify-variables.c:147
 #: src/language/dictionary/modify-variables.c:190
-#, fuzzy, c-format
+#, c-format
 msgid "`(' expected on %s subcommand."
-msgstr "`(' esperat al subcomando RENAME."
+msgstr "S'espera `(' al subcomando %s."
 
 #: src/language/dictionary/modify-variables.c:159
 msgid "`)' expected following variable names on REORDER subcommand."
-msgstr ""
-"`)' s'esperava seguit dels noms de la variable en el subcomando REORDER."
+msgstr "`)' s'esperava seguit dels noms de la variable en el subcomando REORDER."
 
 #: src/language/dictionary/modify-variables.c:199
-msgid ""
-"`=' expected between lists of new and old variable names on RENAME "
-"subcommand."
-msgstr ""
-"`=' esperat entre les llistes de noms de variables noves i velles en el "
-"subcomando RENAME."
+msgid "`=' expected between lists of new and old variable names on RENAME subcommand."
+msgstr "`=' esperat entre les llistes de noms de variables noves i velles en el subcomando RENAME."
 
 #: src/language/dictionary/modify-variables.c:208
 #: src/language/dictionary/rename-variables.c:77
 #, c-format
-msgid ""
-"Differing number of variables in old name list (%zu) and in new name list (%"
-"zu)."
-msgstr ""
-"Diferent nombre de variables en la llista de noms antiga (%zu) i en la "
-"llista de noms nova (%zu)."
+msgid "Differing number of variables in old name list (%zu) and in new name list (%zu)."
+msgstr "Diferent nombre de variables en la llista de noms antiga (%zu) i en la llista de noms nova (%zu)."
 
 #: src/language/dictionary/modify-variables.c:219
 msgid "`)' expected after variable lists on RENAME subcommand."
-msgstr ""
-"`)' esperat després de les llistes de variables en el subcomando RENAME."
+msgstr "`)' esperat després de les llistes de variables en el subcomando RENAME."
 
 #: src/language/dictionary/modify-variables.c:233
-msgid ""
-"KEEP subcommand may be given at most once.  It may not be given in "
-"conjunction with the DROP subcommand."
-msgstr ""
-"El subcomando KEEP pot ser emès més d'una vegada. Pot ser que no sigui "
-"facilitada en relació amb el subcomando DROP."
+msgid "KEEP subcommand may be given at most once.  It may not be given in conjunction with the DROP subcommand."
+msgstr "El subcomando KEEP pot ser emès més d'una vegada. Pot ser que no sigui facilitada en relació amb el subcomando DROP."
 
 #: src/language/dictionary/modify-variables.c:276
-msgid ""
-"DROP subcommand may be given at most once.  It may not be given in "
-"conjunction with the KEEP subcommand."
-msgstr ""
-"El subcomando DROP pot ser utilitzat només una vegada. No pot ser utilitzat "
-"conjuntament amb el subcomando KEEP."
+msgid "DROP subcommand may be given at most once.  It may not be given in conjunction with the KEEP subcommand."
+msgstr "El subcomando DROP pot ser utilitzat només una vegada. No pot ser utilitzat conjuntament amb el subcomando KEEP."
 
 #: src/language/dictionary/modify-variables.c:302
 #, c-format
@@ -1894,103 +1622,76 @@ msgstr "'/' o '.' esperat."
 
 #: src/language/dictionary/mrsets.c:98
 #, c-format
-msgid ""
-"%s is not a valid name for a multiple response set.  Multiple response set "
-"names must begin with `$'."
-msgstr ""
+msgid "%s is not a valid name for a multiple response set.  Multiple response set names must begin with `$'."
+msgstr "%s no és un nom vàlid de variable per a un conjunt de resposta múltiple. Els conjunts de resposta múltiple han de començar amb `$'."
 
 #: src/language/dictionary/mrsets.c:120
 #, c-format
-msgid ""
-"VARIABLES specified only variable %s on %s, but at least two variables are "
-"required."
-msgstr ""
+msgid "VARIABLES specified only variable %s on %s, but at least two variables are required."
+msgstr "VARIABLES especifica només la variable %s a %s, però es requereixen al menys dues variables."
 
 #: src/language/dictionary/mrsets.c:153
 msgid "Numeric VALUE must be an integer."
-msgstr ""
+msgstr "VALUE numèric ha de ser un enter."
 
 #: src/language/dictionary/mrsets.c:207 src/language/dictionary/mrsets.c:213
 #: src/language/dictionary/mrsets.c:223
 #, c-format
 msgid "Required %s specification missing from %s subcommand."
-msgstr ""
+msgstr "Manca la especificació %s requerida pel subcomando %s."
 
 #: src/language/dictionary/mrsets.c:231 src/language/dictionary/mrsets.c:269
 #, c-format
-msgid ""
-"MDGROUP subcommand for group %s specifies a string VALUE, but the variables "
-"specified for this group are numeric."
-msgstr ""
+msgid "MDGROUP subcommand for group %s specifies a string VALUE, but the variables specified for this group are numeric."
+msgstr "El subcomando MDGROUPS pel grup %s especifica un VALUE textual, però les variables especificades per aquest grup son numèriques."
 
 #: src/language/dictionary/mrsets.c:255
 #, c-format
-msgid ""
-"VALUE string on MDGROUP subcommand for group %s is %d bytes long, but it "
-"must be no longer than the narrowest variable in the group, which is %s with "
-"a width of %d bytes."
-msgstr ""
+msgid "VALUE string on MDGROUP subcommand for group %s is %d bytes long, but it must be no longer than the narrowest variable in the group, which is %s with a width of %d bytes."
+msgstr "El VALUE textual al subcomando MDGROUP pel grup %s té %d bytes, però no pot ser més llarg que la variable més curta al grup, que és %s amb llargada %d bytes."
 
 #: src/language/dictionary/mrsets.c:281
 #, c-format
-msgid ""
-"MDGROUP subcommand for group %s specifies LABELSOURCE=VARLABEL but not "
-"CATEGORYLABELS=COUNTEDVALUES.  Ignoring LABELSOURCE."
-msgstr ""
+msgid "MDGROUP subcommand for group %s specifies LABELSOURCE=VARLABEL but not CATEGORYLABELS=COUNTEDVALUES.  Ignoring LABELSOURCE."
+msgstr "El subcomando MDGROUP pel grup %s espeficifica LABELSOURCE=VARLABEL però no CATEGORYLABELS=COUNTEDVALUES. S'ignorarà LABELSOURCE."
 
 #: src/language/dictionary/mrsets.c:287
 #, c-format
-msgid ""
-"MDGROUP subcommand for group %s specifies both LABEL and LABELSOURCE, but "
-"only one of these subcommands may be used at a time.  Ignoring LABELSOURCE."
-msgstr ""
+msgid "MDGROUP subcommand for group %s specifies both LABEL and LABELSOURCE, but only one of these subcommands may be used at a time.  Ignoring LABELSOURCE."
+msgstr "El subcomando MDGROUP pel grup %s espeficifica LABEL i LABELSOURCE, però només un d'aquests subcomandos pot ser utilitzat alhora. S'ignorarà LABELSOURCE."
 
 #: src/language/dictionary/mrsets.c:327
 #, c-format
-msgid ""
-"Variables %s and %s specified as part of multiple dichotomy group %s have "
-"the same variable label.  Categories represented by these variables will not "
-"be distinguishable in output."
-msgstr ""
+msgid "Variables %s and %s specified as part of multiple dichotomy group %s have the same variable label.  Categories represented by these variables will not be distinguishable in output."
+msgstr "Les variables %s i %s especificades com a part del grup dicotòmic múltiple %s tenen la mateixa etiqueta de variable. Les categories representades per aquestes variables no seran distingibles als resultats."
 
 #: src/language/dictionary/mrsets.c:357
 #, c-format
-msgid ""
-"Variable %s specified as part of multiple dichotomy group %s (which has "
-"CATEGORYLABELS=COUNTEDVALUES) has no value label for its counted value.  "
-"This category will not be distinguishable in output."
-msgstr ""
+msgid "Variable %s specified as part of multiple dichotomy group %s (which has CATEGORYLABELS=COUNTEDVALUES) has no value label for its counted value.  This category will not be distinguishable in output."
+msgstr "La variable %s especificada com a part del grup dicotòmic múltiple %s (que té CATEGORYLABELS=COUNTEDVALUES) no en té etiqueta de valor pel seu valor de recompte. Aquesta categoria no serà distingible als resultats."
 
 #: src/language/dictionary/mrsets.c:370
 #, c-format
-msgid ""
-"Variables %s and %s specified as part of multiple dichotomy group %s (which "
-"has CATEGORYLABELS=COUNTEDVALUES) have the same value label for the the "
-"group's counted value.  These categories will not be distinguishable in "
-"output."
-msgstr ""
+msgid "Variables %s and %s specified as part of multiple dichotomy group %s (which has CATEGORYLABELS=COUNTEDVALUES) have the same value label for the the group's counted value.  These categories will not be distinguishable in output."
+msgstr "Les variables %s i %s  especificades com a part del grup dicotòmic múltiple %s (que té CATEGORYLABELS=COUNTEDVALUES) té la mateixa etiqueta de valor pel valor de recompte del grup. Aquestes categories no seran distingible als resultats."
 
 #: src/language/dictionary/mrsets.c:427
 #, c-format
-msgid ""
-"Variables specified on MCGROUP should have the same categories, but %s and %"
-"s (and possibly others) in multiple category group %s have different value "
-"labels for value %s."
-msgstr ""
+msgid "Variables specified on MCGROUP should have the same categories, but %s and %s (and possibly others) in multiple category group %s have different value labels for value %s."
+msgstr "Variables especificades a MDGROUP han de tenir les mateixes categories, però %s i %s (i posiblement d'altres) al grup de caterories múltiple %s té diferents etiquetes de valors pel valor %s."
 
 #: src/language/dictionary/mrsets.c:484
-#, fuzzy, c-format
+#, c-format
 msgid "No multiple response set named %s."
-msgstr "Cap funció o vector anomenat %s."
+msgstr "Cap conjunt multiresposta anomenat %s."
 
 #: src/language/dictionary/mrsets.c:538
-#, fuzzy
 msgid "The active file dictionary does not contain any multiple response sets."
-msgstr "El diccionari de l'arxiu actiu no conté cap document. "
+msgstr "El diccionari de l'arxiu actiu no conté cap conjunt de multi-resposta. "
 
 #: src/language/dictionary/mrsets.c:548
 msgid "Multiple Response Sets"
-msgstr ""
+msgstr "Conjunts Multi-Resposta"
 
 #: src/language/dictionary/mrsets.c:549 src/ui/gui/psppire-var-sheet.c:534
 #: src/ui/gui/psppire-var-store.c:832
@@ -2002,17 +1703,16 @@ msgid "Variables"
 msgstr "Variables:"
 
 #: src/language/dictionary/mrsets.c:551
-#, fuzzy
 msgid "Details"
-msgstr "Decimals"
+msgstr "Detalls"
 
 #: src/language/dictionary/mrsets.c:565
 msgid "Multiple dichotomy set"
-msgstr ""
+msgstr "Conjunt de Dicotomies Múltiples"
 
 #: src/language/dictionary/mrsets.c:566
 msgid "Multiple category set"
-msgstr ""
+msgstr "Conjunt de Categories Múltiples"
 
 #: src/language/dictionary/mrsets.c:568
 #: src/language/dictionary/split-file.c:84
@@ -2024,36 +1724,32 @@ msgid "Label"
 msgstr "Etiqueta"
 
 #: src/language/dictionary/mrsets.c:572
-#, fuzzy
 msgid "Label source"
-msgstr "Etiqueta: %s\n"
+msgstr "Font d'etiqueta"
 
 #: src/language/dictionary/mrsets.c:574
-#, fuzzy
 msgid "First variable label among variables"
-msgstr "Duplicar el nom de la variable %s entre les variables de destí."
+msgstr "Primera etiqueta de variable entre les variables"
 
 #: src/language/dictionary/mrsets.c:575
 msgid "Provided by user"
-msgstr ""
+msgstr "Proporcionat per l'usuari"
 
 #: src/language/dictionary/mrsets.c:576
-#, fuzzy
 msgid "Counted value"
-msgstr "Copiar els valors antics"
+msgstr "Valor de recompte"
 
 #: src/language/dictionary/mrsets.c:582
 msgid "Category label source"
-msgstr ""
+msgstr "Font d'etiquetes de categoria"
 
 #: src/language/dictionary/mrsets.c:584
-#, fuzzy
 msgid "Variable labels"
-msgstr "Prefereixo les etiquetes de variable"
+msgstr "Etiquetes de variable"
 
 #: src/language/dictionary/mrsets.c:585
 msgid "Value labels of counted value"
-msgstr ""
+msgstr "Etiquetes de valor del valor de recompte"
 
 #: src/language/dictionary/numeric.c:67
 #, c-format
@@ -2071,12 +1767,8 @@ msgid "Format type %s may not be used with a string variable."
 msgstr "Tipus de format %s no pot ser utilitzat amb una variable de cadena. "
 
 #: src/language/dictionary/rename-variables.c:49
-msgid ""
-"RENAME VARS may not be used after TEMPORARY.  Temporary transformations will "
-"be made permanent."
-msgstr ""
-"RENAME VARS no pot ser utilitzat després de TEMPORARY.  Les transformacions "
-"temporals seran permanents."
+msgid "RENAME VARS may not be used after TEMPORARY.  Temporary transformations will be made permanent."
+msgstr "RENAME VARS no pot ser utilitzat després de TEMPORARY.  Les transformacions temporals seran permanents."
 
 #: src/language/dictionary/rename-variables.c:59
 msgid "`(' expected."
@@ -2171,7 +1863,7 @@ msgid "Type:"
 msgstr "Tipus:"
 
 #: src/language/dictionary/sys-file-info.c:128
-#: src/ui/gui/psppire-data-window.c:631
+#: src/ui/gui/psppire-data-window.c:634
 msgid "System File"
 msgstr "Arxiu de Sistema"
 
@@ -2343,9 +2035,7 @@ msgstr "El nom del vector %s es dóna dues vegades."
 
 #: src/language/dictionary/vector.c:96
 msgid "A slash must separate each vector specification in VECTOR's long form."
-msgstr ""
-"Una barra ha de separar cada especificació de vector en la forma llarga de "
-"VECTOR."
+msgstr "Una barra ha de separar cada especificació de vector en la forma llarga de VECTOR."
 
 #: src/language/dictionary/vector.c:129
 msgid "Vectors must have at least one element."
@@ -2388,12 +2078,8 @@ msgstr "Constant hexadecimal flotant massa llarga."
 
 #: src/language/tests/float-format.c:201
 #, c-format
-msgid ""
-"%s conversion of %s from %s to %s should have produced %s but actually "
-"produced %s."
-msgstr ""
-"conversió %s de %s desde %s a %s s'hauria d'haver produït %s però actualment "
-"ha produït %s."
+msgid "%s conversion of %s from %s to %s should have produced %s but actually produced %s."
+msgstr "conversió %s de %s desde %s a %s s'hauria d'haver produït %s però actualment ha produït %s."
 
 #: src/language/tests/float-format.c:247
 msgid "Too many values in single command."
@@ -2472,13 +2158,8 @@ msgid "expecting BREAK"
 msgstr "esperant BREAK"
 
 #: src/language/stats/aggregate.c:252
-msgid ""
-"When PRESORTED is specified, specifying sorting directions with (A) or (D) "
-"has no effect.  Output data will be sorted the same way as the input data."
-msgstr ""
-"Quan s'especifica PRESORTED, donar directives d'ordenació amb  (A) o (D) no "
-"té efecte. Les dades de sortida seran ordenades de la mateixa manera que les "
-"d'entrada."
+msgid "When PRESORTED is specified, specifying sorting directions with (A) or (D) has no effect.  Output data will be sorted the same way as the input data."
+msgstr "Quan s'especifica PRESORTED, donar directives d'ordenació amb  (A) o (D) no té efecte. Les dades de sortida seran ordenades de la mateixa manera que les d'entrada."
 
 #: src/language/stats/aggregate.c:424
 msgid "expecting aggregation function"
@@ -2497,9 +2178,7 @@ msgstr "Argument perdut %zu per a %s."
 #: src/language/stats/aggregate.c:507
 #, c-format
 msgid "Arguments to %s must be of same type as source variables."
-msgstr ""
-"Els arguments per a %s han de ser del mateix tipus que les variables "
-"d'origen."
+msgstr "Els arguments per a %s han de ser del mateix tipus que les variables d'origen."
 
 #: src/language/stats/aggregate.c:517 src/language/expressions/parse.c:885
 msgid "expecting `)'"
@@ -2507,37 +2186,23 @@ msgstr "esperant `)'"
 
 #: src/language/stats/aggregate.c:529
 #, c-format
-msgid ""
-"Number of source variables (%zu) does not match number of target variables (%"
-"zu)."
-msgstr ""
-"Nombre de variables d'origen (%zu) no coincideix amb el nombre de variables "
-"de destinació (%zu)."
+msgid "Number of source variables (%zu) does not match number of target variables (%zu)."
+msgstr "Nombre de variables d'origen (%zu) no coincideix amb el nombre de variables de destinació (%zu)."
 
 #: src/language/stats/aggregate.c:545
 #, c-format
-msgid ""
-"The value arguments passed to the %s function are out-of-order.  They will "
-"be treated as if they had been specified in the correct order."
-msgstr ""
-"El valor dels arguments passats a la funció %s estan fora d'ordre. Seran "
-"tractats com si haguessin estat especificats en l'ordre correcte."
+msgid "The value arguments passed to the %s function are out-of-order.  They will be treated as if they had been specified in the correct order."
+msgstr "El valor dels arguments passats a la funció %s estan fora d'ordre. Seran tractats com si haguessin estat especificats en l'ordre correcte."
 
 #: src/language/stats/aggregate.c:615
 #, c-format
-msgid ""
-"Variable name %s is not unique within the aggregate file dictionary, which "
-"contains the aggregate variables and the break variables."
-msgstr ""
-"El nom de variable %s no és únic dins l'arxiu de diccionari agregat, que "
-"conté les variables agregades i les variables de tall."
+msgid "Variable name %s is not unique within the aggregate file dictionary, which contains the aggregate variables and the break variables."
+msgstr "El nom de variable %s no és únic dins l'arxiu de diccionari agregat, que conté les variables agregades i les variables de tall."
 
 #: src/language/stats/autorecode.c:116
 #, c-format
 msgid "Source variable count (%zu) does not match target variable count (%zu)."
-msgstr ""
-"El recompte de la variable d'origen (%zu) no coincideix amb el recompte de "
-"la variable de destí (%zu)."
+msgstr "El recompte de la variable d'origen (%zu) no coincideix amb el recompte de la variable de destí (%zu)."
 
 #: src/language/stats/autorecode.c:128
 #, c-format
@@ -2603,12 +2268,8 @@ msgstr "Sig. Exact.(%d-tailed)"
 
 #: src/language/stats/chisquare.c:150
 #, c-format
-msgid ""
-"CHISQUARE test specified %d expected values, but %d distinct values were "
-"encountered in variable %s."
-msgstr ""
-"Prova CHISQUARE especifica %d valors esperats, però %d diferents valors es "
-"van trobar a la variable %s."
+msgid "CHISQUARE test specified %d expected values, but %d distinct values were encountered in variable %s."
+msgstr "Prova CHISQUARE especifica %d valors esperats, però %d diferents valors es van trobar a la variable %s."
 
 #: src/language/stats/chisquare.c:161 src/language/stats/chisquare.c:200
 msgid "Observed N"
@@ -2672,14 +2333,12 @@ msgid "Std. Deviation"
 msgstr "Desviació Est."
 
 #: src/language/stats/correlations.c:190 src/language/stats/factor.c:1620
-#, fuzzy
 msgid "Correlations"
-msgstr "Correlació"
+msgstr "Correlacions"
 
 #: src/language/stats/correlations.c:216
-#, fuzzy
 msgid "Pearson Correlation"
-msgstr "Correlació de Spearman"
+msgstr "Correlació de Pearson"
 
 #: src/language/stats/correlations.c:218 src/language/stats/oneway.q:686
 #: src/language/stats/t-test.q:753 src/language/stats/t-test.q:924
@@ -2688,16 +2347,14 @@ msgid "Sig. (2-tailed)"
 msgstr "Sig. (2-cues)"
 
 #: src/language/stats/correlations.c:218
-#, fuzzy
 msgid "Sig. (1-tailed)"
-msgstr "Sig. (2-cues)"
+msgstr "Sig. (1-cua)"
 
 #: src/language/stats/correlations.c:222
 msgid "Cross-products"
-msgstr ""
+msgstr "Productes-creuats"
 
 #: src/language/stats/correlations.c:223
-#, fuzzy
 msgid "Covariance"
 msgstr "Covariància"
 
@@ -2777,12 +2434,8 @@ msgid "expecting statistic name: reverting to default"
 msgstr "esperant nom de l'estadístic: torna a aplicar el defecte"
 
 #: src/language/stats/descriptives.c:523
-msgid ""
-"Ran out of generic names for Z-score variables.  There are only 126 generic "
-"names: ZSC001-ZSC0999, STDZ01-STDZ09, ZZZZ01-ZZZZ09, ZQZQ01-ZQZQ09."
-msgstr ""
-"S'han esgotat els noms genèrics per les variables Z.  Només hi ha 126 noms "
-"genèrics: ZSC001-ZSC0999, STDZ01-STDZ09, ZZZZ01-ZZZZ09, ZQZQ01-ZQZQ09."
+msgid "Ran out of generic names for Z-score variables.  There are only 126 generic names: ZSC001-ZSC0999, STDZ01-STDZ09, ZZZZ01-ZZZZ09, ZQZQ01-ZQZQ09."
+msgstr "S'han esgotat els noms genèrics per les variables Z.  Només hi ha 126 noms genèrics: ZSC001-ZSC0999, STDZ01-STDZ09, ZZZZ01-ZZZZ09, ZQZQ01-ZQZQ09."
 
 #: src/language/stats/descriptives.c:555
 msgid "Mapping of variables to corresponding Z-scores."
@@ -2833,40 +2486,35 @@ msgstr "La variable %s s'especifica dues vegades als criteris d'ordenació."
 
 #: src/language/stats/factor.c:803
 msgid "Factor analysis on a single variable is not useful."
-msgstr ""
+msgstr "L'anàlisi factorial per a una única variable és inútil."
 
 #: src/language/stats/factor.c:1206
-#, fuzzy
 msgid "Component Number"
-msgstr "Columna Numero: 0"
+msgstr "Número de Component"
 
 #: src/language/stats/factor.c:1206
-#, fuzzy
 msgid "Factor Number"
-msgstr "Número de Cas"
+msgstr "Número de Factor"
 
 #: src/language/stats/factor.c:1237
-#, fuzzy
 msgid "Communalities"
-msgstr "Comentaris:"
+msgstr "Comunalitats"
 
 #: src/language/stats/factor.c:1243
 msgid "Initial"
-msgstr ""
+msgstr "Inicial"
 
 #: src/language/stats/factor.c:1246
 msgid "Extraction"
-msgstr ""
+msgstr "Extracció"
 
 #: src/language/stats/factor.c:1310 src/language/stats/factor.c:1437
-#, fuzzy
 msgid "Component"
-msgstr "Comentaris:"
+msgstr "Component"
 
 #: src/language/stats/factor.c:1315 src/language/stats/factor.c:1439
-#, fuzzy
 msgid "Factor"
-msgstr "_Factor:"
+msgstr "Factor"
 
 #: src/language/stats/factor.c:1347 src/language/stats/factor.c:1495
 #: src/ui/gui/psppire-data-store.c:755 src/ui/gui/psppire-var-store.c:699
@@ -2878,83 +2526,72 @@ msgstr "%d"
 
 #: src/language/stats/factor.c:1412
 msgid "Total Variance Explained"
-msgstr ""
+msgstr "Variancia Total Explicada"
 
 #: src/language/stats/factor.c:1444
 msgid "Initial Eigenvalues"
-msgstr ""
+msgstr "Valors propis Inicials"
 
 #: src/language/stats/factor.c:1450
 msgid "Extraction Sums of Squared Loadings"
-msgstr ""
+msgstr "Extracció: Sumes de Carregues al Quadrat"
 
 #: src/language/stats/factor.c:1456
 msgid "Rotation Sums of Squared Loadings"
-msgstr ""
+msgstr "Rotació: Sumes de Carregues al Quadrat "
 
 #: src/language/stats/factor.c:1464
-#, fuzzy, no-c-format
+#, no-c-format
 msgid "% of Variance"
-msgstr "Variància"
+msgstr "% de Variància"
 
 #: src/language/stats/factor.c:1465
 msgid "Cumulative %"
-msgstr ""
+msgstr "% Acumulat"
 
 #: src/language/stats/factor.c:1578
-#, fuzzy
 msgid "Correlation Matrix"
-msgstr "Correlació"
+msgstr "Matriu de Correlació"
 
 #: src/language/stats/factor.c:1632
-#, fuzzy
 msgid "Sig. 1-tailed"
-msgstr "Sig. (2-cues)"
+msgstr "Sig. (1-cua)"
 
 #: src/language/stats/factor.c:1666
-#, fuzzy
 msgid "Determinant"
-msgstr "Dependent"
+msgstr "Determinant"
 
 #: src/language/stats/factor.c:1743
 msgid "Analysis N"
-msgstr ""
+msgstr "N Anàlisis"
 
 #: src/language/stats/factor.c:1776
-msgid ""
-"The FACTOR criteria result in zero factors extracted. Therefore no analysis "
-"will be performed."
-msgstr ""
+msgid "The FACTOR criteria result in zero factors extracted. Therefore no analysis will be performed."
+msgstr "El criteri FACTOR resulta en l'extracció de cero factors. No es pot realitzar cap anàlisi."
 
 #: src/language/stats/factor.c:1782
-msgid ""
-"The FACTOR criteria result in more factors than variables, which is not "
-"meaningful. No analysis will be performed."
-msgstr ""
+msgid "The FACTOR criteria result in more factors than variables, which is not meaningful. No analysis will be performed."
+msgstr "El criteri FACTOR resulta en més factors que variables, i això no té cap sentit.  No es realitza cap anàlisi."
 
 #: src/language/stats/factor.c:1865
 msgid "Component Matrix"
-msgstr ""
+msgstr "Matriu de Components"
 
 #: src/language/stats/factor.c:1865
-#, fuzzy
 msgid "Factor Matrix"
-msgstr "Llista de Factors:"
+msgstr "Matriu de Factors"
 
 #: src/language/stats/factor.c:1871
 msgid "Rotated Component Matrix"
-msgstr ""
+msgstr "Matriu Rotada de Components"
 
 #: src/language/stats/factor.c:1871
-#, fuzzy
 msgid "Rotated Factor Matrix"
-msgstr "Llista de Factors:"
+msgstr "Matriu Rotada de Factors"
 
 #: src/language/stats/flip.c:98
-msgid ""
-"FLIP ignores TEMPORARY.  Temporary transformations will be made permanent."
-msgstr ""
-"FLIP ignora TEMPORARY.  Les transformacions temporals seran permanents."
+msgid "FLIP ignores TEMPORARY.  Temporary transformations will be made permanent."
+msgstr "FLIP ignora TEMPORARY.  Les transformacions temporals seran permanents."
 
 #: src/language/stats/flip.c:150
 msgid "Could not create temporary file for FLIP."
@@ -3170,17 +2807,11 @@ msgstr "Sig. Asimp. (2-cues)"
 
 #: src/language/data-io/combine-files.c:210
 msgid "Cannot specify the active file since no active file has been defined."
-msgstr ""
-"No es pot especificar el fitxer actiu ja que cap fitxer actiu ha estat "
-"definit."
+msgstr "No es pot especificar el fitxer actiu ja que cap fitxer actiu ha estat definit."
 
 #: src/language/data-io/combine-files.c:216
-msgid ""
-"This command may not be used after TEMPORARY when the active file is an "
-"input source.  Temporary transformations will be made permanent."
-msgstr ""
-"Aquest comando no pot ser utilitzat després de TEMPORARY quan l'arxiu actiu "
-"és una font d'entrada.  Les transformacions temporals seran permanents."
+msgid "This command may not be used after TEMPORARY when the active file is an input source.  Temporary transformations will be made permanent."
+msgstr "Aquest comando no pot ser utilitzat després de TEMPORARY quan l'arxiu actiu és una font d'entrada.  Les transformacions temporals seran permanents."
 
 #: src/language/data-io/combine-files.c:250
 msgid "Multiple IN subcommands for a single FILE or TABLE."
@@ -3202,26 +2833,18 @@ msgstr "Es necessita el subcomando BY."
 
 #: src/language/data-io/combine-files.c:381
 #: src/language/data-io/combine-files.c:386
-#, fuzzy, c-format
+#, c-format
 msgid "BY is required when %s is specified."
-msgstr "BY és necessari quan SORT s'especifica."
+msgstr "BY és necessari quan s'especifica %s."
 
 #: src/language/data-io/combine-files.c:513
-msgid ""
-"Combining files with incompatible encodings. String data may not be "
-"represented correctly."
-msgstr ""
-"Combinant arxius amb codificacions incompatibles. Les dades de la cadena no "
-"podran estar representades correctament."
+msgid "Combining files with incompatible encodings. String data may not be represented correctly."
+msgstr "Combinant arxius amb codificacions incompatibles. Les dades de la cadena no podran estar representades correctament."
 
 #: src/language/data-io/combine-files.c:545
 #, c-format
-msgid ""
-"Variable %s in file %s has different type or width from the same variable in "
-"earlier file."
-msgstr ""
-"La variable %s a l'arxiu %s és de tipus o amplada diferent respecte de la "
-"mateixa variable en l'arxiu anterior. "
+msgid "Variable %s in file %s has different type or width from the same variable in earlier file."
+msgstr "La variable %s a l'arxiu %s és de tipus o amplada diferent respecte de la mateixa variable en l'arxiu anterior. "
 
 #: src/language/data-io/combine-files.c:551
 #, c-format
@@ -3241,17 +2864,12 @@ msgstr "En un arxiu anterior, %s era numèric."
 #: src/language/data-io/combine-files.c:562
 #, c-format
 msgid "In an earlier file, %s was a string variable with width %d."
-msgstr ""
-"En un arxiu anterior, %s era una variable cadena amb una amplada de %d."
+msgstr "En un arxiu anterior, %s era una variable cadena amb una amplada de %d."
 
 #: src/language/data-io/combine-files.c:601
 #, c-format
-msgid ""
-"Variable name %s specified on %s subcommand duplicates an existing variable "
-"name."
-msgstr ""
-"Nom de la variable %s especificat al subcomando %s duplica el nom de la "
-"variable existent."
+msgid "Variable name %s specified on %s subcommand duplicates an existing variable name."
+msgstr "Nom de la variable %s especificat al subcomando %s duplica el nom de la variable existent."
 
 #: src/language/data-io/combine-files.c:762
 #, c-format
@@ -3272,9 +2890,7 @@ msgstr "Només un de FIXED, FREE, o LIST pot ser especificat."
 
 #: src/language/data-io/data-list.c:243
 msgid "Encoding should not be specified for inline data. It will be ignored."
-msgstr ""
-"La codificació no ha de ser especificada per les dades en línia. Serà "
-"ignorada."
+msgstr "La codificació no ha de ser especificada per les dades en línia. Serà ignorada."
 
 #: src/language/data-io/data-list.c:254
 msgid "The END subcommand may be used only with DATA LIST FIXED."
@@ -3303,9 +2919,7 @@ msgstr "Ja existeix una cadena de la variable %s d'amplada diferent."
 #: src/language/data-io/data-list.c:390
 #, c-format
 msgid "Cannot place variable %s on record %d when RECORDS=%d is specified."
-msgstr ""
-"No es pot posar la variable %s en el registre %d quan RECORDS=%d està "
-"especificat."
+msgstr "No es pot posar la variable %s en el registre %d quan RECORDS=%d està especificat."
 
 #: src/language/data-io/data-parser.c:460
 #: src/language/data-io/data-parser.c:469
@@ -3324,12 +2938,8 @@ msgstr "Cas parcial descartat.  La primera variable que faltava era %s."
 
 #: src/language/data-io/data-parser.c:610
 #, c-format
-msgid ""
-"Missing value(s) for all variables from %s onward.  These will be filled "
-"with the system-missing value or blanks, as appropriate."
-msgstr ""
-"Valor(s) perdut(s) per a totes les variables des de %st.  Aquests s'omplen "
-"amb el valor perdut del sistema o espais en blanc, segons correspongui."
+msgid "Missing value(s) for all variables from %s onward.  These will be filled with the system-missing value or blanks, as appropriate."
+msgstr "Valor(s) perdut(s) per a totes les variables des de %st.  Aquests s'omplen amb el valor perdut del sistema o espais en blanc, segons correspongui."
 
 #: src/language/data-io/data-parser.c:630
 msgid "Record ends in data not part of any field."
@@ -3375,15 +2985,8 @@ msgid "Could not open \"%s\" for reading as a data file: %s."
 msgstr "No s'ha pogut obrir \"%s\" per a la lectura com un arxiu de dades: %s."
 
 #: src/language/data-io/data-reader.c:192
-msgid ""
-"Unexpected end-of-file while reading data in BEGIN DATA.  This probably "
-"indicates a missing or misformatted END DATA command.  END DATA must appear "
-"by itself on a single line with exactly one space between words."
-msgstr ""
-"Final d'arxiu inesperat durant la lectura de dades en BEGIN DATA.  Això "
-"probablement indica una pérdua o format erroni del comando END DATA.  END "
-"DATA ha d'aparèixer per si mateix en una sola línia amb exactament un espai "
-"entre les paraules."
+msgid "Unexpected end-of-file while reading data in BEGIN DATA.  This probably indicates a missing or misformatted END DATA command.  END DATA must appear by itself on a single line with exactly one space between words."
+msgstr "Final d'arxiu inesperat durant la lectura de dades en BEGIN DATA.  Això probablement indica una pérdua o format erroni del comando END DATA.  END DATA ha d'aparèixer per si mateix en una sola línia amb exactament un espai entre les paraules."
 
 #: src/language/data-io/data-reader.c:217
 #, c-format
@@ -3429,19 +3032,13 @@ msgid "Attempt to read beyond END DATA."
 msgstr "Intent de llegir més enllà de END DATA."
 
 #: src/language/data-io/data-reader.c:708
-msgid ""
-"This command is not valid here since the current input program does not "
-"access the inline file."
-msgstr ""
-"Aquesta ordre no es vàlida ja que el programa d'entrada actual no té accés a "
-"l'arxiu en línia."
+msgid "This command is not valid here since the current input program does not access the inline file."
+msgstr "Aquesta ordre no es vàlida ja que el programa d'entrada actual no té accés a l'arxiu en línia."
 
 #: src/language/data-io/data-writer.c:74
 #, c-format
 msgid "An error occurred while opening \"%s\" for writing as a data file: %s."
-msgstr ""
-"S'ha produït un error en obrir \"%s\" per a escriure'l com un arxiu de "
-"dades: %s."
+msgstr "S'ha produït un error en obrir \"%s\" per a escriure'l com un arxiu de dades: %s."
 
 #: src/language/data-io/data-writer.c:191
 #, c-format
@@ -3455,12 +3052,8 @@ msgstr "TYPE %s no admès"
 
 #: src/language/data-io/get-data.c:260
 #, c-format
-msgid ""
-"%s is allowed only with %s arrangement, but %s arrangement was stated or "
-"implied earlier in this command."
-msgstr ""
-"%s només es permet amb configuració %s, però prèviament en aquest comando "
-"s'ha establit la configuració %s."
+msgid "%s is allowed only with %s arrangement, but %s arrangement was stated or implied earlier in this command."
+msgstr "%s només es permet amb configuració %s, però prèviament en aquest comando s'ha establit la configuració %s."
 
 #: src/language/data-io/get-data.c:315
 msgid "expecting FIXED or DELIMITED"
@@ -3487,12 +3080,8 @@ msgid "Value of PERCENT must be between 1 and 100."
 msgstr "Valor de PERCENT ha de ser entre 1 i 100."
 
 #: src/language/data-io/get-data.c:447
-msgid ""
-"In compatible syntax mode, the QUALIFIER string must contain exactly one "
-"character."
-msgstr ""
-"En el mode de sintaxi compatible, la cadena QUALIFIER ha de contenir "
-"exactament un caràcter."
+msgid "In compatible syntax mode, the QUALIFIER string must contain exactly one character."
+msgstr "En el mode de sintaxi compatible, la cadena QUALIFIER ha de contenir exactament un caràcter."
 
 #: src/language/data-io/get-data.c:462
 msgid "expecting VARIABLES"
@@ -3501,22 +3090,13 @@ msgstr "esperant VARIABLES"
 #: src/language/data-io/get-data.c:484
 #: src/language/data-io/placement-parser.c:378
 #, c-format
-msgid ""
-"The record number specified, %ld, is at or before the previous record, %d.  "
-"Data fields must be listed in order of increasing record number."
-msgstr ""
-"El nombre de registre especificat, %ld, és a o abans del registre anterior, %"
-"d.  Els camps de dades han de ser llistats en ordre incremental del número "
-"de registre."
+msgid "The record number specified, %ld, is at or before the previous record, %d.  Data fields must be listed in order of increasing record number."
+msgstr "El nombre de registre especificat, %ld, és a o abans del registre anterior, %d.  Els camps de dades han de ser llistats en ordre incremental del número de registre."
 
 #: src/language/data-io/get-data.c:493
 #, c-format
-msgid ""
-"The record number specified, %ld, exceeds the number of records per case "
-"specified on FIXCASE, %d."
-msgstr ""
-"El nombre de registre especificat , %ld, excedeix el nombre de registres per "
-"cas especificats a FIXCASE, %d."
+msgid "The record number specified, %ld, exceeds the number of records per case specified on FIXCASE, %d."
+msgstr "El nombre de registre especificat , %ld, excedeix el nombre de registres per cas especificats a FIXCASE, %d."
 
 #: src/language/data-io/get.c:99
 msgid "expecting COMM or TAPE"
@@ -3535,34 +3115,22 @@ msgid "COLUMN subcommand multiply specified."
 msgstr "subcomando COLUMN especificat múltiples vegades."
 
 #: src/language/data-io/inpt-pgm.c:338
-msgid ""
-"REREAD: Column numbers must be positive finite numbers.  Column set to 1."
-msgstr ""
-"REREAD: Els nombres de columna han de ser nombres positius finits. La "
-"columna s'estableix en 1."
+msgid "REREAD: Column numbers must be positive finite numbers.  Column set to 1."
+msgstr "REREAD: Els nombres de columna han de ser nombres positius finits. La columna s'estableix en 1."
 
 #: src/language/data-io/placement-parser.c:87
 #, c-format
-msgid ""
-"Number of variables specified (%zu) differs from number of variable formats "
-"(%zu)."
-msgstr ""
-"Nombre de variables especificades (%zu) difereix del nombre de formats de la "
-"variable (%zu)."
+msgid "Number of variables specified (%zu) differs from number of variable formats (%zu)."
+msgstr "Nombre de variables especificades (%zu) difereix del nombre de formats de la variable (%zu)."
 
 #: src/language/data-io/placement-parser.c:97
-msgid ""
-"SPSS-like or Fortran-like format specification expected after variable names."
-msgstr ""
-"Després del nom de les variables s'esperen especificacions en format tipus-"
-"SPSS o tipus-Fortran."
+msgid "SPSS-like or Fortran-like format specification expected after variable names."
+msgstr "Després del nom de les variables s'esperen especificacions en format tipus-SPSS o tipus-Fortran."
 
 #: src/language/data-io/placement-parser.c:119
 #, c-format
 msgid "The %d columns %d-%d can't be evenly divided into %zu fields."
-msgstr ""
-"Les %d columnes %d-%d no poden ser uniformement dividides entre els camps %"
-"zu."
+msgstr "Les %d columnes %d-%d no poden ser uniformement dividides entre els camps %zu."
 
 #: src/language/data-io/placement-parser.c:305
 msgid "Column positions for fields must be positive."
@@ -3592,23 +3160,21 @@ msgstr "esperant un subcomando vàlid"
 #: src/language/data-io/print.c:267
 #, c-format
 msgid "Output calls for %d records but %zu specified on RECORDS subcommand."
-msgstr ""
-"Resultats obtinguts per a %d registres, però %zu especificats al subcomando "
-"RECORDS."
+msgstr "Resultats obtinguts per a %d registres, però %zu especificats al subcomando RECORDS."
 
 #: src/language/data-io/print.c:436
-#, fuzzy, c-format
+#, c-format
 msgid "Writing %zu record to %s."
 msgid_plural "Writing %zu records to %s."
-msgstr[0] "Escribint %d registre a %s."
-msgstr[1] "Escribint %d registres a %s."
+msgstr[0] "Escribint el registre %zu a %s."
+msgstr[1] "Escribint %zu registres a %s."
 
 #: src/language/data-io/print.c:440
-#, fuzzy, c-format
+#, c-format
 msgid "Writing %zu record."
 msgid_plural "Writing %zu records."
-msgstr[0] "Escribint %d registre."
-msgstr[1] "Escrivint %d registres."
+msgstr[0] "Escribint el registre %zu."
+msgstr[1] "Escrivint %zu registres."
 
 #: src/language/data-io/save.c:223 src/language/data-io/save.c:238
 #: src/language/data-io/save.c:266
@@ -3618,15 +3184,8 @@ msgstr "esperant %s o %s"
 
 #: src/language/data-io/trim.c:88
 #, c-format
-msgid ""
-"Cannot rename %s as %s because there already exists a variable named %s.  To "
-"rename variables with overlapping names, use a single RENAME subcommand such "
-"as \"/RENAME (A=B)(B=C)(C=A)\", or equivalently, \"/RENAME (A B C=B C A)\"."
-msgstr ""
-"No es pot canviar el nom %s per %s perquè ja hi ha una variable anomenada %"
-"s.  Per canviar el nom de les variables amb noms superposats, utilitzeu el "
-"subcomando RENAME només com a \"/RENAME (A=B)(B=C)(C=A)\", o equivalentment, "
-"\"/RENAME (A B C=B C A)\"."
+msgid "Cannot rename %s as %s because there already exists a variable named %s.  To rename variables with overlapping names, use a single RENAME subcommand such as \"/RENAME (A=B)(B=C)(C=A)\", or equivalently, \"/RENAME (A B C=B C A)\"."
+msgstr "No es pot canviar el nom %s per %s perquè ja hi ha una variable anomenada %s.  Per canviar el nom de les variables amb noms superposats, utilitzeu el subcomando RENAME només com a \"/RENAME (A=B)(B=C)(C=A)\", o equivalentment, \"/RENAME (A B C=B C A)\"."
 
 #: src/language/data-io/trim.c:114
 msgid "`=' expected after variable list."
@@ -3634,14 +3193,8 @@ msgstr "`=' esperat després de llista de variables."
 
 #: src/language/data-io/trim.c:122
 #, c-format
-msgid ""
-"Number of variables on left side of `=' (%zu) does not match number of "
-"variables on right side (%zu), in parenthesized group %d of RENAME "
-"subcommand."
-msgstr ""
-"El nombre de variables en el costat esquerre de `=' (%zu) no coincideix amb "
-"el nombre de variables al costat dret (%zu), en el grup entre parèntesi %d "
-"del subcomando RENAME."
+msgid "Number of variables on left side of `=' (%zu) does not match number of variables on right side (%zu), in parenthesized group %d of RENAME subcommand."
+msgstr "El nombre de variables en el costat esquerre de `=' (%zu) no coincideix amb el nombre de variables al costat dret (%zu), en el grup entre parèntesi %d del subcomando RENAME."
 
 #: src/language/data-io/trim.c:135
 #, c-format
@@ -3662,114 +3215,60 @@ msgid "Duplicate variable name %s."
 msgstr "Nom de la variable %s duplicat."
 
 #: src/language/expressions/helpers.c:51
-msgid ""
-"One of the arguments to a DATE function is not an integer.  The result will "
-"be system-missing."
-msgstr ""
-"Un dels arguments per a funció DATE no és un enter. El resultat serà perdut "
-"del sistema."
+msgid "One of the arguments to a DATE function is not an integer.  The result will be system-missing."
+msgstr "Un dels arguments per a funció DATE no és un enter. El resultat serà perdut del sistema."
 
 #: src/language/expressions/helpers.c:73
-msgid ""
-"The week argument to DATE.WKYR is not an integer.  The result will be system-"
-"missing."
-msgstr ""
-"L'argument de setmana per DATE.WKYR no és un enter. El resultat serà perdut "
-"pel sistema."
+msgid "The week argument to DATE.WKYR is not an integer.  The result will be system-missing."
+msgstr "L'argument de setmana per DATE.WKYR no és un enter. El resultat serà perdut pel sistema."
 
 #: src/language/expressions/helpers.c:79
-msgid ""
-"The week argument to DATE.WKYR is outside the acceptable range of 1 to 53.  "
-"The result will be system-missing."
-msgstr ""
-"L'argument de setmana per DATE.WKYR és fora de l'interval acceptable entre 1 "
-"i 53.  El resultat serà perdut pel sistema."
+msgid "The week argument to DATE.WKYR is outside the acceptable range of 1 to 53.  The result will be system-missing."
+msgstr "L'argument de setmana per DATE.WKYR és fora de l'interval acceptable entre 1 i 53.  El resultat serà perdut pel sistema."
 
 #: src/language/expressions/helpers.c:101
-msgid ""
-"The day argument to DATE.YRDAY is not an integer.  The result will be system-"
-"missing."
-msgstr ""
-"L'argument de dia per DATE.YRDAY no és un enter.  El resultat serà perdut "
-"pel sistema."
+msgid "The day argument to DATE.YRDAY is not an integer.  The result will be system-missing."
+msgstr "L'argument de dia per DATE.YRDAY no és un enter.  El resultat serà perdut pel sistema."
 
 #: src/language/expressions/helpers.c:107
-msgid ""
-"The day argument to DATE.YRDAY is outside the acceptable range of 1 to 366.  "
-"The result will be system-missing."
-msgstr ""
-"L'argument de dia per DATE.YRDAY és fora de l'interval acceptable entre 1 i "
-"366. El resultat serà perdut al sistema."
+msgid "The day argument to DATE.YRDAY is outside the acceptable range of 1 to 366.  The result will be system-missing."
+msgstr "L'argument de dia per DATE.YRDAY és fora de l'interval acceptable entre 1 i 366. El resultat serà perdut al sistema."
 
 #: src/language/expressions/helpers.c:129
-msgid ""
-"The year argument to YRMODA is greater than 47516.  The result will be "
-"system-missing."
-msgstr ""
-"L'argument d'any per YRMODA és més gran que 47516. El resultat será  perdut "
-"al sistema."
+msgid "The year argument to YRMODA is greater than 47516.  The result will be system-missing."
+msgstr "L'argument d'any per YRMODA és més gran que 47516. El resultat será  perdut al sistema."
 
 #: src/language/expressions/helpers.c:182
 #, c-format
-msgid ""
-"Unrecognized date unit \"%.*s\".  Valid date units are \"years\", \"quarters"
-"\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", and \"seconds\"."
-msgstr ""
-"Unitat de dates  \"%.*s\" no reconeguda. Les unitats de data vàlides són "
-"\"anys\", \"trimestres\", \"mesos\", \"setmanes\", \"dies\", \"hores\", "
-"\"minuts\", i \"segons\"."
+msgid "Unrecognized date unit \"%.*s\".  Valid date units are \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", and \"seconds\"."
+msgstr "Unitat de dates  \"%.*s\" no reconeguda. Les unitats de data vàlides són \"anys\", \"trimestres\", \"mesos\", \"setmanes\", \"dies\", \"hores\", \"minuts\", i \"segons\"."
 
 #: src/language/expressions/helpers.c:332
-msgid ""
-"Invalid DATESUM method.  Valid choices are \"closest\" and \"rollover\"."
-msgstr ""
-"Mètode DATESUM invàlid. Les opcions vàlides són \"propera\" i  \"acomplida\"."
+msgid "Invalid DATESUM method.  Valid choices are \"closest\" and \"rollover\"."
+msgstr "Mètode DATESUM invàlid. Les opcions vàlides són \"propera\" i  \"acomplida\"."
 
 #: src/language/expressions/parse.c:259
 #, c-format
-msgid ""
-"Type mismatch: expression has %s type, but a numeric value is required here."
-msgstr ""
-"Incompatibilitat de tipus: l'expressió té tipus %s, però aquí es demana un "
-"valor numèric."
+msgid "Type mismatch: expression has %s type, but a numeric value is required here."
+msgstr "Incompatibilitat de tipus: l'expressió té tipus %s, però aquí es demana un valor numèric."
 
 #: src/language/expressions/parse.c:271
 #, c-format
-msgid ""
-"Type mismatch: expression has %s type, but a string value is required here."
-msgstr ""
-"Incompatibilitat de tipus: l'expressió té tipus %s, però aquí es demana un "
-"valor de cadena."
+msgid "Type mismatch: expression has %s type, but a string value is required here."
+msgstr "Incompatibilitat de tipus: l'expressió té tipus %s, però aquí es demana un valor de cadena."
 
 #: src/language/expressions/parse.c:427
 #, c-format
 msgid "Type mismatch while applying %s operator: cannot convert %s to %s."
-msgstr ""
-"Incompatibilitat dels tipus mentre que s'aplica l'operador %s: no es pot "
-"convertir %s a %s."
+msgstr "Incompatibilitat dels tipus mentre que s'aplica l'operador %s: no es pot convertir %s a %s."
 
 #: src/language/expressions/parse.c:643
-msgid ""
-"Chaining relational operators (e.g. \"a < b < c\") will not produce the "
-"mathematically expected result.  Use the AND logical operator to fix the "
-"problem (e.g. \"a < b AND b < c\").  If chaining is really intended, "
-"parentheses will disable this warning (e.g. \"(a < b) < c\".)"
-msgstr ""
-"L'encadenament d'operadors relacionals (p.e. \"a < b < c\") no produirà el "
-"resultat esperat matemàticament. Utilitzar l'operador lògic AND per "
-"solucionar el problema (p.e. \"a < b AND b < c\"). Si l'encadenament és "
-"realment intencionat, els parèntesis desactivaran aquesta alerta (p.e. \"(a "
-"< b) < c\".)"
+msgid "Chaining relational operators (e.g. \"a < b < c\") will not produce the mathematically expected result.  Use the AND logical operator to fix the problem (e.g. \"a < b AND b < c\").  If chaining is really intended, parentheses will disable this warning (e.g. \"(a < b) < c\".)"
+msgstr "L'encadenament d'operadors relacionals (p.e. \"a < b < c\") no produirà el resultat esperat matemàticament. Utilitzar l'operador lògic AND per solucionar el problema (p.e. \"a < b AND b < c\"). Si l'encadenament és realment intencionat, els parèntesis desactivaran aquesta alerta (p.e. \"(a < b) < c\".)"
 
 #: src/language/expressions/parse.c:744
-msgid ""
-"The exponentiation operator (\"**\") is left-associative, even though right-"
-"associative semantics are more useful.  That is, \"a**b**c\" equals \"(a**b)"
-"**c\", not as \"a**(b**c)\".  To disable this warning, insert parentheses."
-msgstr ""
-"L'operador d'exponenciació (\"**\") apareix a l'esquerra, tot i que si "
-"apareix a la dreta és més útil.  És a dir, \"a**b**c\" és igual a \"(a**b)**c"
-"\", no a \"a**(b**c)\". Per desactivar aquesta alerta, insereix parèntesis."
+msgid "The exponentiation operator (\"**\") is left-associative, even though right-associative semantics are more useful.  That is, \"a**b**c\" equals \"(a**b)**c\", not as \"a**(b**c)\".  To disable this warning, insert parentheses."
+msgstr "L'operador d'exponenciació (\"**\") apareix a l'esquerra, tot i que si apareix a la dreta és més útil.  És a dir, \"a**b**c\" és igual a \"(a**b)**c\", no a \"a**(b**c)\". Per desactivar aquesta alerta, insereix parèntesis."
 
 #: src/language/expressions/parse.c:809
 #, c-format
@@ -3812,12 +3311,8 @@ msgstr "%s requereix com a mínim %d arguments vàlids en la llista."
 
 #: src/language/expressions/parse.c:1110
 #, c-format
-msgid ""
-"With %s, using minimum valid argument count of %d does not make sense when "
-"passing only %d arguments in list."
-msgstr ""
-"Amb %s, utilitzar el mínim recompte d'argument vàlid %d no té sentit quan es "
-"passen només %d arguments en la llista."
+msgid "With %s, using minimum valid argument count of %d does not make sense when passing only %d arguments in list."
+msgstr "Amb %s, utilitzar el mínim recompte d'argument vàlid %d no té sentit quan es passen només %d arguments en la llista."
 
 #: src/language/expressions/parse.c:1164
 #, c-format
@@ -3866,9 +3361,8 @@ msgid "warning"
 msgstr "avís"
 
 #: src/libpspp/message.c:135
-#, fuzzy
 msgid "note"
-msgstr "Centre"
+msgstr "anotació"
 
 #: src/libpspp/tmpfile.c:56
 msgid "failed to create temporary file"
@@ -3891,14 +3385,14 @@ msgid "writing to temporary file"
 msgstr "escrivint a un arxiu temporal"
 
 #: src/libpspp/zip-writer.c:91
-#, fuzzy, c-format
+#, c-format
 msgid "%s: error opening output file"
-msgstr "ascii: obrint l'arxiu de resultats \"%s\""
+msgstr "%s: error obrint l'arxiu de resultats"
 
 #: src/libpspp/zip-writer.c:224
-#, fuzzy, c-format
+#, c-format
 msgid "%s: write failed"
-msgstr "%s: No és un arxiu portàtil."
+msgstr "%s: error en escriure"
 
 #: src/math/percentiles.c:36
 msgid "HAverage"
@@ -3923,17 +3417,12 @@ msgstr "Empíric amb mitjanes"
 #: src/output/ascii.c:278
 #, c-format
 msgid "%s: %s must be positive integer or `auto'"
-msgstr ""
+msgstr "%s: %s ha de ser enter positiu o `auto'"
 
 #: src/output/ascii.c:311
-#, fuzzy, c-format
-msgid ""
-"ascii: page excluding margins and headers must be at least %d characters "
-"wide by %d lines long, but as configured is only %d characters by %d lines"
-msgstr ""
-"ascii: la pàgina excloent els marges i encapçalaments ha de ser com a mínim "
-"de 59 caràcters d'ample per 15 línies de llarg, però tal com està "
-"configurada la pàgina només hi ha %d caràcters i %d línies"
+#, c-format
+msgid "ascii: page excluding margins and headers must be at least %d characters wide by %d lines long, but as configured is only %d characters by %d lines"
+msgstr "ascii: excloent els marges i encapçalaments la pàgina ha de tenir com a mínim %d caràcters d'ample per %d línies de llarg, però tal com està configurada, només n'hi ha %d caràcters i %d línies"
 
 #: src/output/ascii.c:360
 #, c-format
@@ -3943,7 +3432,7 @@ msgstr "ascii: tancant l'arxiu de sortida \"%s\""
 #: src/output/ascii.c:503
 #, c-format
 msgid "See %s for a chart."
-msgstr ""
+msgstr "Veure %s per a gràfica."
 
 #: src/output/ascii.c:806
 #, c-format
@@ -3957,29 +3446,28 @@ msgstr "%s - Pàgina %d"
 
 #: src/output/csv.c:87 src/output/html.c:106 src/output/journal.c:93
 #: src/output/msglog.c:66
-#, fuzzy, c-format
+#, c-format
 msgid "error opening output file \"%s\""
-msgstr "ascii: obrint l'arxiu de resultats \"%s\""
+msgstr "error obrint l'arxiu de resultats \"%s\""
 
 #: src/output/driver.c:330
 #, c-format
-msgid ""
-"%s is not a valid device type (the choices are \"terminal\" and \"listing\")"
-msgstr ""
+msgid "%s is not a valid device type (the choices are \"terminal\" and \"listing\")"
+msgstr "%s no és un tipus de dispositiu vàlid (les opcions son \"terminal\" i \"llistat\")"
 
 #: src/output/driver.c:343
-#, fuzzy, c-format
+#, c-format
 msgid "%s: unknown option \"%s\""
-msgstr "ascii: paràmetre desconegut `%s'"
+msgstr "%s: opció desconeguda \"%s\""
 
 #: src/output/html.c:114
 msgid "PSPP Output"
 msgstr "Resultat de PSPP"
 
 #: src/output/journal.c:67
-#, fuzzy, c-format
+#, c-format
 msgid "error writing output file \"%s\""
-msgstr "error en escriure \"%s\""
+msgstr "error en escriure l'arxiu de resultats \"%s\""
 
 #: src/output/measure.c:65
 #, c-format
@@ -3997,14 +3485,14 @@ msgid "unknown paper type `%.*s'"
 msgstr "tipus de paper desconegut `%.*s'"
 
 #: src/output/measure.c:248
-#, fuzzy, c-format
+#, c-format
 msgid "error opening input file \"%s\""
-msgstr "error en obrir \"%s\""
+msgstr "error en obrir l'arxiu de dades \"%s\""
 
 #: src/output/measure.c:259
-#, fuzzy, c-format
+#, c-format
 msgid "error reading file \"%s\""
-msgstr "error de lectura \"%s\""
+msgstr "error llegint l'arxiu \"%s\""
 
 #: src/output/measure.c:276
 #, c-format
@@ -4014,42 +3502,42 @@ msgstr "l'arxiu de mida de paper \"%s\" no indica una mida de paper"
 #: src/output/options.c:113
 #, c-format
 msgid "%s: \"%s\" is \"%s\" but a Boolean value is required"
-msgstr ""
+msgstr "%s: \"%s\" és \"%s\", però es requereix un valor Booleà"
 
 #: src/output/options.c:188
 #, c-format
 msgid "%s: \"%s\" is \"%s\" but one of the following is required: %s"
-msgstr ""
+msgstr "%s: \"%s\" és \"%s\", però es requereix un del sequents: %s "
 
 #: src/output/options.c:232
 #, c-format
 msgid "%s: \"%s\" is \"%s\" but a nonnegative integer is required"
-msgstr ""
+msgstr "%s: \"%s\" és \"%s\", però es requereix un enter no negatiu"
 
 #: src/output/options.c:236
 #, c-format
 msgid "%s: \"%s\" is \"%s\" but a positive integer is required"
-msgstr ""
+msgstr "%s: \"%s\" és \"%s\", però es requereix un enter positiu"
 
 #: src/output/options.c:239
 #, c-format
 msgid "%s: \"%s\" is \"%s\" but an integer is required"
-msgstr ""
+msgstr "%s: \"%s\" és \"%s\", però es requereix un enter"
 
 #: src/output/options.c:242
 #, c-format
 msgid "%s: \"%s\" is \"%s\" but an integer greater than %d is required"
-msgstr ""
+msgstr "%s: \"%s\" és \"%s\", però es requereix un enter més gran que %d"
 
 #: src/output/options.c:247
 #, c-format
 msgid "%s: \"%s\" is \"%s\"  but an integer between %d and %d is required"
-msgstr ""
+msgstr "%s: \"%s\" és \"%s\", però es requereix un enter entre %d i %d"
 
 #: src/output/options.c:326
 #, c-format
 msgid "%s: \"%s\" is \"%s\" but a file name that contains \"#\" is required."
-msgstr ""
+msgstr "%s: \"%s\" és \"%s\", però es requereix un nom d'arxiu que contingui \"#\"."
 
 #: src/output/tab.c:206
 #, c-format
@@ -4057,48 +3545,34 @@ msgid "bad vline: x=%d+%d=%d y=(%d+%d=%d,%d+%d=%d) in table size (%d,%d)\n"
 msgstr "bad vline: x=%d+%d=%d y=(%d+%d=%d,%d+%d=%d) a taula de mida (%d,%d)\n"
 
 #: src/output/tab.c:244
-#, fuzzy, c-format
+#, c-format
 msgid "bad hline: x=(%d+%d=%d,%d+%d=%d) y=%d+%d=%d in table size (%d,%d)\n"
-msgstr "bad vline: x=%d+%d=%d y=(%d+%d=%d,%d+%d=%d) a taula de mida (%d,%d)\n"
+msgstr "incorrecta hline: x=(%d+%d=%d,%d+%d=%d) y=%d+%d=%d a taula de mida (%d,%d)\n"
 
 #: src/output/tab.c:288
 #, c-format
-msgid ""
-"bad box: (%d+%d=%d,%d+%d=%d)-(%d+%d=%d,%d+%d=%d) in table size (%d,%d)\n"
-msgstr ""
-"bad box: (%d+%d=%d,%d+%d=%d)-(%d+%d=%d,%d+%d=%d) en taula amb mida (%d,%d)\n"
+msgid "bad box: (%d+%d=%d,%d+%d=%d)-(%d+%d=%d,%d+%d=%d) in table size (%d,%d)\n"
+msgstr "bad box: (%d+%d=%d,%d+%d=%d)-(%d+%d=%d,%d+%d=%d) en taula amb mida (%d,%d)\n"
 
 #: src/output/cairo.c:295
-#, fuzzy, c-format
+#, c-format
 msgid "error opening output file \"%s\": %s"
-msgstr "ascii: obrint l'arxiu de resultats \"%s\""
+msgstr "error obrint l'arxiu de resultats \"%s\": %s"
 
 #: src/output/cairo.c:312
-#, fuzzy, c-format
-msgid ""
-"The defined page is not wide enough to hold at least %d characters in the "
-"default font.  In fact, there's only room for %d characters."
-msgstr ""
-"La pàgina PostScript definida no és prou extensa com per contenir marges i "
-"capçaleres, a més d'almenys 15 línies amb les fonts per defecte. De fet, "
-"només hi ha espai per %d línies de cada font en la mida per defecte de %d.%"
-"03d punts."
+#, c-format
+msgid "The defined page is not wide enough to hold at least %d characters in the default font.  In fact, there's only room for %d characters."
+msgstr "La pàgina definida no és prou ampla com per contenir al més d'almenys %d caracters en la font per defecte.  De fet, només n'hi ha espai per %d caracters."
 
 #: src/output/cairo.c:322
-#, fuzzy, c-format
-msgid ""
-"The defined page is not long enough to hold margins and headers, plus least %"
-"d lines of the default fonts.  In fact, there's only room for %d lines."
-msgstr ""
-"La pàgina PostScript definida no és prou extensa com per contenir marges i "
-"capçaleres, a més d'almenys 15 línies amb les fonts per defecte. De fet, "
-"només hi ha espai per %d línies de cada font en la mida per defecte de %d.%"
-"03d punts."
+#, c-format
+msgid "The defined page is not long enough to hold margins and headers, plus least %d lines of the default fonts.  In fact, there's only room for %d lines."
+msgstr "La pàgina definida no és prou llarga com per contenir marges i capçaleres, a més d'almenys %d línies amb les fonts per defecte. De fet, només n'hi ha espai per %d línies."
 
 #: src/output/cairo.c:376
-#, fuzzy, c-format
+#, c-format
 msgid "error drawing output for %s driver: %s"
-msgstr "error de sintaxi analitzant opcions pel controlador \"%s\""
+msgstr "error dibuixant resultats pel controlador %s: \"%s\""
 
 #: src/output/cairo.c:864
 #, c-format
@@ -4106,9 +3580,9 @@ msgid "\"%s\": bad font specification"
 msgstr "\"%s\": especificació de caràcter no vàlida"
 
 #: src/output/cairo.c:1084
-#, fuzzy, c-format
+#, c-format
 msgid "error writing output file \"%s\": %s"
-msgstr "Error en tancar l'arxiu portàtil \"%s\": %s."
+msgstr "Error escribint l'arxiu de resultats \"%s\": %s."
 
 #: src/output/charts/np-plot-cairo.c:37
 #, c-format
@@ -4147,16 +3621,15 @@ msgstr "Corba ROC"
 
 #: src/output/charts/scree-cairo.c:36
 msgid "Scree Plot"
-msgstr ""
+msgstr "Grafic de Sedimentació"
 
 #: src/output/charts/scree-cairo.c:38
 msgid "Eigenvalue"
-msgstr ""
+msgstr "Valor-propi"
 
 #: src/output/odt.c:93
-#, fuzzy
 msgid "error creating temporary file"
-msgstr "llegint arxiu temporal"
+msgstr "error creant arxiu temporal"
 
 #: src/ui/source-init-opts.c:78
 msgid "Algorithm must be either \"compatible\" or \"enhanced\"."
@@ -4167,17 +3640,13 @@ msgid "Syntax must be either \"compatible\" or \"enhanced\"."
 msgstr "La sintaxi ha de ser o \"compatible\" o \"ampliada\"."
 
 #: src/ui/terminal/main.c:128
-msgid ""
-"Stopping syntax file processing here to avoid a cascade of dependent command "
-"failures."
-msgstr ""
-"Aturant el processament de l'arxiu de sintaxi aquí per evitar una cascada "
-"d'errors derivats."
+msgid "Stopping syntax file processing here to avoid a cascade of dependent command failures."
+msgstr "Aturant el processament de l'arxiu de sintaxi aquí per evitar una cascada d'errors derivats."
 
 #: src/ui/terminal/msg-ui.c:127
 #, c-format
 msgid "Notes (%d) exceed limit (%d).  Suppressing further notes."
-msgstr ""
+msgstr "Les anotacions (%d) han superat el límit (%d).  Es suprimeixen les posteriors."
 
 #: src/ui/terminal/msg-ui.c:135
 #, c-format
@@ -4185,9 +3654,9 @@ msgid "Warnings (%d) exceed limit (%d)."
 msgstr "Avisos (%d) excedeixen el límit (%d)."
 
 #: src/ui/terminal/msg-ui.c:138
-#, fuzzy, c-format
+#, c-format
 msgid "Errors (%d) exceed limit (%d)."
-msgstr "Errors (%d) excedeixen el límit (%d)."
+msgstr "Els errors (%d) excedeixen el límit (%d)."
 
 #: src/ui/terminal/terminal.c:72
 #, c-format
@@ -4197,12 +3666,12 @@ msgstr "no es pot accedir a la definició per a terminal `%s'"
 #: src/ui/terminal/terminal-opts.c:119
 #, c-format
 msgid "%s: output option missing `='"
-msgstr ""
+msgstr "%s: manca opció de resultat `='"
 
 #: src/ui/terminal/terminal-opts.c:126
 #, c-format
 msgid "%s: output option specified more than once"
-msgstr ""
+msgstr "%s: opció de resultat especificada més d'una vegada"
 
 #: src/ui/gui/checkbox-treeview.c:92 src/language/stats/crosstabs.q:1213
 #: src/language/stats/crosstabs.q:1240 src/language/stats/crosstabs.q:1263
@@ -4314,7 +3783,7 @@ msgstr "Expressió regular incorrecta: %s"
 #: src/ui/gui/factor-dialog.c:344
 #, c-format
 msgid "Eigenvalues over %4.2f times the mean eigenvalue"
-msgstr ""
+msgstr "Valors-propis per sobre de %4.2f vegades el valor-propi mitjà"
 
 #: src/ui/gui/frequencies-dialog.c:45
 msgid "Standard error of the mean"
@@ -4353,10 +3822,8 @@ msgstr "F.J. Miguel, J. Gómez, P. Payà"
 
 #: src/ui/gui/help-menu.c:98
 #, c-format
-msgid ""
-"Cannot open reference manual: %s.  The PSPP user manual is also available at "
-"http://www.gnu.org/software/pspp/documentation.html"
-msgstr ""
+msgid "Cannot open reference manual: %s.  The PSPP user manual is also available at http://www.gnu.org/software/pspp/documentation.html"
+msgstr "No es pot obrir el manula de referència: %s. El manual d'usuari de PSPP es tambè disponible a http://www.gnu.org/software/pspp/documentation.html"
 
 #: src/ui/gui/help-menu.c:117
 msgid "_Help"
@@ -4434,15 +3901,14 @@ msgid "Open"
 msgstr "Obert"
 
 #: src/ui/gui/psppire-data-window.c:392
-#, fuzzy
 msgid "Data and Syntax Files"
-msgstr "No es pot obrir l'arxiu de sintaxi \"%s\""
+msgstr "Arxius de Dades i Sintaxi"
 
-#: src/ui/gui/psppire-data-window.c:402 src/ui/gui/psppire-data-window.c:611
+#: src/ui/gui/psppire-data-window.c:402 src/ui/gui/psppire-data-window.c:614
 msgid "System Files (*.sav)"
 msgstr "Arxius de Sistema (*.sav)"
 
-#: src/ui/gui/psppire-data-window.c:408 src/ui/gui/psppire-data-window.c:617
+#: src/ui/gui/psppire-data-window.c:408 src/ui/gui/psppire-data-window.c:620
 msgid "Portable Files (*.por) "
 msgstr "Arxius Portables (*.por)"
 
@@ -4450,57 +3916,54 @@ msgstr "Arxius Portables (*.por)"
 msgid "Syntax Files (*.sps) "
 msgstr "Arxius de Sintàxi (*.sps) "
 
-#: src/ui/gui/psppire-data-window.c:420 src/ui/gui/psppire-data-window.c:623
+#: src/ui/gui/psppire-data-window.c:420 src/ui/gui/psppire-data-window.c:626
 #: src/ui/gui/psppire-syntax-window.c:298
 msgid "All Files"
 msgstr "Tots els arxius"
 
-#: src/ui/gui/psppire-data-window.c:603
+#: src/ui/gui/psppire-data-window.c:606
 msgid "Save"
 msgstr "Desar"
 
-#: src/ui/gui/psppire-data-window.c:636
+#: src/ui/gui/psppire-data-window.c:639
 msgid "Portable File"
 msgstr "Arxiu Portable"
 
-#: src/ui/gui/psppire-data-window.c:773
+#: src/ui/gui/psppire-data-window.c:776
 msgid "Font Selection"
 msgstr "Selecció de font"
 
-#: src/ui/gui/psppire-data-window.c:1261
+#: src/ui/gui/psppire-data-window.c:1264
 msgid "Data Editor"
 msgstr "Editor de Dades"
 
 #: src/ui/gui/psppire-output-window.c:458
 msgid "Export Output"
-msgstr ""
+msgstr "Exporta Resultats"
 
 #: src/ui/gui/psppire-output-window.c:466
-#, fuzzy
 msgid "PDF Files (*.pdf)"
-msgstr "Arxius Portables (*.por)"
+msgstr "Arxius PDF (*.pdf)"
 
 #: src/ui/gui/psppire-output-window.c:467
 msgid "HTML Files (*.html)"
-msgstr ""
+msgstr "Arxius HTML (*.html)"
 
 #: src/ui/gui/psppire-output-window.c:468
 msgid "OpenDocument Files (*.odt)"
-msgstr ""
+msgstr "Arxius OpenDocument (*.odt)"
 
 #: src/ui/gui/psppire-output-window.c:469
-#, fuzzy
 msgid "Text Files (*.txt)"
-msgstr "Arxius de Sistema (*.sav)"
+msgstr "Arxius de Text (*.txt)"
 
 #: src/ui/gui/psppire-output-window.c:470
-#, fuzzy
 msgid "PostScript Files (*.ps)"
-msgstr "Arxius Portables (*.por)"
+msgstr "Arxius PostScript (*.ps)"
 
 #: src/ui/gui/psppire-output-window.c:471
 msgid "Comma-Separated Value Files (*.csv)"
-msgstr ""
+msgstr "Arxius de Valors Separats per Comes (*.csv)"
 
 #: src/ui/gui/psppire-output-window.c:605
 msgid "Output Viewer"
@@ -4592,11 +4055,8 @@ msgstr "Desa el canvis a \"%s\" abans de sortir?"
 
 #: src/ui/gui/psppire-window.c:475
 #, c-format
-msgid ""
-"If you don't save, changes from the last %ld seconds will be permanently "
-"lost."
-msgstr ""
-"Si no es desa, els canvis dels darrers %ld segons es perdran permanentment."
+msgid "If you don't save, changes from the last %ld seconds will be permanently lost."
+msgstr "Si no es desa, els canvis dels darrers %ld segons es perdran permanentment."
 
 #: src/ui/gui/psppire-window.c:479
 msgid "Close _without saving"
@@ -4669,12 +4129,8 @@ msgstr "Error leyendo \"%s\": %s"
 
 #: src/ui/gui/text-data-import-dialog.c:480
 #, c-format
-msgid ""
-"Failed to read \"%s\", because it contains a line over %d bytes long and "
-"therefore appears not to be a text file."
-msgstr ""
-"Error en llegir \"%s\", perquè conté una linia per sobre dels %d bytes i per "
-"tant sembla que no es un arxiu de text."
+msgid "Failed to read \"%s\", because it contains a line over %d bytes long and therefore appears not to be a text file."
+msgstr "Error en llegir \"%s\", perquè conté una linia per sobre dels %d bytes i per tant sembla que no es un arxiu de text."
 
 #: src/ui/gui/text-data-import-dialog.c:494
 #, c-format
@@ -4691,14 +4147,10 @@ msgstr "Important dades de text deliminatat"
 
 #: src/ui/gui/text-data-import-dialog.c:749
 msgid ""
-"This assistant will guide you through the process of importing data into "
-"PSPP from a text file with one line per case,  in which fields are separated "
-"by tabs, commas, or other delimiters.\n"
+"This assistant will guide you through the process of importing data into PSPP from a text file with one line per case,  in which fields are separated by tabs, commas, or other delimiters.\n"
 "\n"
 msgstr ""
-"Aquest asistent t'acompanyarà per tot el procés d'importar dades cap al PSPP "
-"a partir d'un arxiu de text amb una linia per cas,  al qual els camps estan "
-"separats per tabuladors, comes, o altres delimitadors.\n"
+"Aquest asistent t'acompanyarà per tot el procés d'importar dades cap al PSPP a partir d'un arxiu de text amb una linia per cas,  al qual els camps estan separats per tabuladors, comes, o altres delimitadors.\n"
 "\n"
 
 #: src/ui/gui/text-data-import-dialog.c:755
@@ -4717,18 +4169,10 @@ msgstr[1] "L'arxiu seleccionat conté aproximadament %lu linies de text.  "
 
 #: src/ui/gui/text-data-import-dialog.c:769
 #, c-format
-msgid ""
-"Only the first %zu line of the file will be shown for preview purposes in "
-"the following screens.  "
-msgid_plural ""
-"Only the first %zu lines of the file will be shown for preview purposes in "
-"the following screens.  "
-msgstr[0] ""
-"Només les primeres %zu linies de l'arxiu es previsualitzaran a les seguents "
-"pantalles.  "
-msgstr[1] ""
-"Només les primeres %zu linies de l'arxiu es previsualitzaran a les seguents "
-"pantalles.  "
+msgid "Only the first %zu line of the file will be shown for preview purposes in the following screens.  "
+msgid_plural "Only the first %zu lines of the file will be shown for preview purposes in the following screens.  "
+msgstr[0] "Només les primeres %zu linies de l'arxiu es previsualitzaran a les seguents pantalles.  "
+msgstr[1] "Només les primeres %zu linies de l'arxiu es previsualitzaran a les seguents pantalles.  "
 
 #: src/ui/gui/text-data-import-dialog.c:776
 msgid "You may choose below how much of the file should actually be imported."
@@ -4804,14 +4248,14 @@ msgid "%s: Attribute value %s[%d] is not quoted: %s"
 msgstr "%s: El valor de l'atribut %s[%d] no esta entre cometes: %s"
 
 #: tests/dissect-sysfile.c:880
-#, fuzzy, c-format
+#, c-format
 msgid "Bad size %zu for extended number of cases."
-msgstr "Longitud no vàlid %zu en l'extensió 11."
+msgstr "Longitud no vàlid %zu per nombre extens de casos."
 
 #: tests/dissect-sysfile.c:886
 #, c-format
 msgid "Bad count %zu for extended number of cases."
-msgstr ""
+msgstr "Recompte incorrecte %zu per nombre extens de casos."
 
 #: src/language/utilities/set.q:188
 msgid "WORKSPACE must be at least 1MB"
@@ -4853,12 +4297,8 @@ msgstr "WIDTH ha de ser com a mínim 40."
 
 #: src/language/utilities/set.q:490
 #, c-format
-msgid ""
-"FORMAT requires numeric output format as an argument.  Specified format %s "
-"is of type string."
-msgstr ""
-"FORMAT requereix format de resultat numeric com a argument.  El format %s "
-"especificat es de tipus cadena."
+msgid "FORMAT requires numeric output format as an argument.  Specified format %s is of type string."
+msgstr "FORMAT requereix format de resultat numeric com a argument.  El format %s especificat es de tipus cadena."
 
 #: src/language/utilities/set.q:707
 msgid "ISL (32-bit IEEE 754 single, little-endian)"
@@ -4902,11 +4342,8 @@ msgid "%s is %s."
 msgstr "%s és %s."
 
 #: src/language/stats/crosstabs.q:289
-msgid ""
-"Missing mode REPORT not allowed in general mode.  Assuming MISSING=TABLE."
-msgstr ""
-"L'INFORME de perduts no esta disponible el mode general.  S'assumeix "
-"MISSING=TABLE."
+msgid "Missing mode REPORT not allowed in general mode.  Assuming MISSING=TABLE."
+msgstr "L'INFORME de perduts no esta disponible el mode general.  S'assumeix MISSING=TABLE."
 
 #: src/language/stats/crosstabs.q:399
 msgid "Too many cross-tabulation variables or dimensions."
@@ -5142,9 +4579,8 @@ msgid "%s Dependent"
 msgstr "%s Dependent"
 
 #: src/language/stats/examine.q:357
-#, fuzzy
 msgid "Not creating NP plot because data set is empty."
-msgstr "No es crea el gràfic perquè el conjunt de dades es buit."
+msgstr "No es crearà el gràfic NP perquè el conjunt de dades es buit."
 
 #: src/language/stats/examine.q:442 src/language/stats/examine.q:949
 msgid "Not creating plot because data set is empty."
@@ -5213,27 +4649,18 @@ msgid "%g"
 msgstr "%g"
 
 #: src/language/stats/frequencies.q:382
-#, fuzzy
 msgid "Bar charts are not implemented."
-msgstr "%s no està implementat."
+msgstr "El gràfic de barres no està implementat."
 
 #: src/language/stats/frequencies.q:399
-#, fuzzy, c-format
-msgid ""
-"MAX for histogram must be greater than or equal to MIN, but MIN was "
-"specified as %.15g and MAX as %.15g.  MIN and MAX will be ignored."
-msgstr ""
-"MAX ha de ser major o igual a MIN, si tots dos s'especifiquen.  Però,  MIN "
-"s'ha especificat com a %g i MAX com a %g.  MIN i MAX son ignorats."
+#, c-format
+msgid "MAX for histogram must be greater than or equal to MIN, but MIN was specified as %.15g and MAX as %.15g.  MIN and MAX will be ignored."
+msgstr "Per l'histograma, MAX ha de ser major o igual a MIN, però MIN s'ha especificat com a %.15g i MAX com a %.15g.  MIN i MAX seràn ignorats."
 
 #: src/language/stats/frequencies.q:420
-#, fuzzy, c-format
-msgid ""
-"MAX for pie chart must be greater than or equal to MIN, but MIN was "
-"specified as %.15g and MAX as %.15g.  MIN and MAX will be ignored."
-msgstr ""
-"MAX ha de ser major o igual a MIN, si tots dos s'especifiquen.  Però,  MIN "
-"s'ha especificat com a %g i MAX com a %g.  MIN i MAX son ignorats."
+#, c-format
+msgid "MAX for pie chart must be greater than or equal to MIN, but MIN was specified as %.15g and MAX as %.15g.  MIN and MAX will be ignored."
+msgstr "Per grafica de sectors, MAX ha de ser major o igual a MIN, però MIN s'ha especificat com a %.15g i MAX com a %.15g.  MIN i MAX seràn ignorats."
 
 #: src/language/stats/frequencies.q:703
 msgid "`)' expected after GROUPED interval list."
@@ -5254,20 +4681,17 @@ msgid "Value Label"
 msgstr "Etiqueta de Valor"
 
 #: src/language/stats/frequencies.q:816
-#, fuzzy
 msgid "Valid Percent"
-msgstr "Percentatge"
+msgstr "Percentatge Vàlid"
 
 #: src/language/stats/frequencies.q:817
-#, fuzzy
 msgid "Cum Percent"
-msgstr "Percentatge"
+msgstr "Percentatge Acumulat"
 
 #: src/language/stats/frequencies.q:1008
 #, c-format
 msgid "No valid data for variable %s; statistics not displayed."
-msgstr ""
-"No hi ha dades vàlides per a la variable %s; not es mostren estadístiques."
+msgstr "No hi ha dades vàlides per a la variable %s; not es mostren estadístiques."
 
 #: src/language/stats/frequencies.q:1054
 msgid "50 (Median)"
@@ -5276,14 +4700,14 @@ msgstr "50 (Mediana)"
 #: src/language/stats/frequencies.q:1209
 #, c-format
 msgid "Omitting pie chart for %s, which has only %d unique values."
-msgstr ""
+msgstr "S'omet grafic de sectors per a %s, que només té %d valors únics. "
 
 #: src/language/stats/frequencies.q:1212
 #, c-format
 msgid "Omitting pie chart for %s, which has over 50 unique values."
-msgstr ""
+msgstr "S'omet grafic de sectors per a %s, que té més de 50 valors únics. "
 
-#: src/language/stats/glm.q:248
+#: src/language/stats/glm.q:247
 msgid "Multivariate GLM not yet supported"
 msgstr "GLM multivariable encara no disponible"
 
@@ -5301,33 +4725,22 @@ msgstr "Actualment no está implenetat el subcomandament NPAR."
 
 #: src/language/stats/npar.q:256
 #, c-format
-msgid ""
-"The specified value of HI (%d) is lower than the specified value of LO (%d)"
-msgstr ""
-"El valor especificatper a HI (%d) és menor que l'especificat per a LO (%d)"
+msgid "The specified value of HI (%d) is lower than the specified value of LO (%d)"
+msgstr "El valor especificatper a HI (%d) és menor que l'especificat per a LO (%d)"
 
 #: src/language/stats/npar.q:311
 #, c-format
-msgid ""
-"%d expected values were given, but the specified range (%d-%d) requires "
-"exactly %d values."
-msgstr ""
-"S'han proporcionat %d valors esperats, però l'interval especificat (%d-%d) "
-"requereix exactament %d valors."
+msgid "%d expected values were given, but the specified range (%d-%d) requires exactly %d values."
+msgstr "S'han proporcionat %d valors esperats, però l'interval especificat (%d-%d) requereix exactament %d valors."
 
 #: src/language/stats/npar.q:453 src/language/stats/t-test.q:380
 #, c-format
-msgid ""
-"PAIRED was specified but the number of variables preceding WITH (%zu) did "
-"not match the number following (%zu)."
-msgstr ""
-"S'ha especificat PAIRED però el nombre de variables abans de WITH (%zu) not "
-"conicideixen amb en nombre de variables seguents (%zu)."
+msgid "PAIRED was specified but the number of variables preceding WITH (%zu) did not match the number following (%zu)."
+msgstr "S'ha especificat PAIRED però el nombre de variables abans de WITH (%zu) not conicideixen amb en nombre de variables seguents (%zu)."
 
 #: src/language/stats/oneway.q:170
 msgid "Number of contrast coefficients must equal the number of groups"
-msgstr ""
-"El nombre de coeficients de contrast ha de ser igual al nombre de grups."
+msgstr "El nombre de coeficients de contrast ha de ser igual al nombre de grups."
 
 #: src/language/stats/oneway.q:179
 #, c-format
@@ -5427,8 +4840,7 @@ msgstr "%s de %s"
 
 #: src/language/stats/rank.q:600
 msgid "Cannot create new rank variable.  All candidates in use."
-msgstr ""
-"No es pot crear la nova variable de rangs.  Tots els candidats estan en ús."
+msgstr "No es pot crear la nova variable de rangs.  Tots els candidats estan en ús."
 
 #: src/language/stats/rank.q:693
 msgid "Variables Created By RANK"
@@ -5455,12 +4867,8 @@ msgid "%s into %s(%s of %s)"
 msgstr "%s en %s(%s de %s)"
 
 #: src/language/stats/rank.q:761
-msgid ""
-"FRACTION has been specified, but NORMAL and PROPORTION rank functions have "
-"not been requested.  The FRACTION subcommand will be ignored."
-msgstr ""
-"S'ha especificat FRACTION, però no s'ahn demanat funcions de rang NORMAL o "
-"PROPORTION.  La  subordre FRACTION será ignorada."
+msgid "FRACTION has been specified, but NORMAL and PROPORTION rank functions have not been requested.  The FRACTION subcommand will be ignored."
+msgstr "S'ha especificat FRACTION, però no s'ahn demanat funcions de rang NORMAL o PROPORTION.  La  subordre FRACTION será ignorada."
 
 #: src/language/stats/rank.q:852
 #, c-format
@@ -5520,18 +4928,12 @@ msgid "Coefficient Correlations"
 msgstr "Correlacions de Coeficients"
 
 #: src/language/stats/regression.q:793
-msgid ""
-"The dependent variable is equal to the independent variable.The least "
-"squares line is therefore Y=X.Standard errors and related statistics may be "
-"meaningless."
-msgstr ""
-"La variable dependiente es igual a la variable independiente. La línea de "
-"minimos cuadrados es por tanto Y=X. Los errores estàndard i els estadistics "
-"relacionats podríen ser irrellevants."
+msgid "The dependent variable is equal to the independent variable.The least squares line is therefore Y=X.Standard errors and related statistics may be meaningless."
+msgstr "La variable dependiente es igual a la variable independiente. La línea de minimos cuadrados es por tanto Y=X. Los errores estàndard i els estadistics relacionats podríen ser irrellevants."
 
 #: src/language/stats/regression.q:891
 msgid "REGRESSION requires numeric variables."
-msgstr ""
+msgstr "REGRESSION requereix variables numèriques."
 
 #: src/language/stats/regression.q:962
 msgid "No valid data found. This command was skipped."
@@ -5612,9 +5014,7 @@ msgstr "%"
 
 #: src/language/stats/t-test.q:190
 msgid "Exactly one of TESTVAL, GROUPS and PAIRS subcommands must be specified."
-msgstr ""
-"Exactamente un dels subcomanaments TESTVAL, GROUPS y PAIRS ha "
-"d'especificarse."
+msgstr "Exactamente un dels subcomanaments TESTVAL, GROUPS y PAIRS ha d'especificarse."
 
 #: src/language/stats/t-test.q:211
 msgid "VARIABLES subcommand may not be used with PAIRS."
@@ -5625,11 +5025,8 @@ msgid "One or more VARIABLES must be specified."
 msgstr "Una o més  VARIABLES han de ser especificades."
 
 #: src/language/stats/t-test.q:324
-msgid ""
-"When applying GROUPS to a string variable, two values must be specified."
-msgstr ""
-"Quan s'aplica GROUPS a una variable alfabetica, s'han d'especificar dos "
-"valors."
+msgid "When applying GROUPS to a string variable, two values must be specified."
+msgstr "Quan s'aplica GROUPS a una variable alfabetica, s'han d'especificar dos valors."
 
 #: src/language/stats/t-test.q:395
 msgid "At least two variables must be specified on PAIRS."
@@ -5727,33 +5124,22 @@ msgstr "%s & %s"
 
 #: src/language/data-io/file-handle.q:65
 #, c-format
-msgid ""
-"File handle %s is already defined.  Use CLOSE FILE HANDLE before redefining "
-"a file handle."
-msgstr ""
-"El manipulador d'arxiu %s ja ha esta definit.  Utilitzar CLOSE FILE HANDLE "
-"abans de redefinir un manipulador d'arxius."
+msgid "File handle %s is already defined.  Use CLOSE FILE HANDLE before redefining a file handle."
+msgstr "El manipulador d'arxiu %s ja ha esta definit.  Utilitzar CLOSE FILE HANDLE abans de redefinir un manipulador d'arxius."
 
 #: src/language/data-io/file-handle.q:120
 msgid "RECFORM must be specified with MODE=360."
 msgstr "RECFORM ha de ser espeficat amb MODE=360."
 
 #: src/language/data-io/file-handle.q:131
-#, fuzzy, c-format
-msgid ""
-"The specified file mode requires LRECL.  Assuming %zu-character records."
-msgstr ""
-"El mode d'arxiu especificat requereix LRECL.  S'asumeix %d-registres de "
-"caracter."
+#, c-format
+msgid "The specified file mode requires LRECL.  Assuming %zu-character records."
+msgstr "El mode d'arxiu especificat requereix LRECL.  S'asumeix registres de %zu caracters."
 
 #: src/language/data-io/file-handle.q:135
 #, c-format
-msgid ""
-"Record length (%ld) must be between 1 and %lu bytes.  Assuming %d-character "
-"records."
-msgstr ""
-"L'amplada de registre (%ld) ha d'estar entre  1 i %lu bytes.  S'asumeix %d-"
-"registres de caracter."
+msgid "Record length (%ld) must be between 1 and %lu bytes.  Assuming %d-character records."
+msgstr "L'amplada de registre (%ld) ha d'estar entre  1 i %lu bytes.  S'asumeix %d-registres de caracter."
 
 #: src/language/data-io/file-handle.q:177
 msgid "file"
@@ -5774,26 +5160,18 @@ msgstr "Aquí no està permès un manipulador per a %s."
 
 #: src/language/data-io/list.q:99
 #, c-format
-msgid ""
-"The first case (%ld) specified precedes the last case (%ld) specified.  The "
-"values will be swapped."
-msgstr ""
-"El primer cas (%ld) especificat precedeix a l'ultim cas (%ld) especificat.  "
-"Els valors s'intercanviaran."
+msgid "The first case (%ld) specified precedes the last case (%ld) specified.  The values will be swapped."
+msgstr "El primer cas (%ld) especificat precedeix a l'ultim cas (%ld) especificat.  Els valors s'intercanviaran."
 
 #: src/language/data-io/list.q:107
 #, c-format
-msgid ""
-"The first case (%ld) to list is less than 1.  The value is being reset to 1."
-msgstr ""
-"EL primer cas (%ld) per llistar es menor que 1.  El valor es retorna a 1."
+msgid "The first case (%ld) to list is less than 1.  The value is being reset to 1."
+msgstr "EL primer cas (%ld) per llistar es menor que 1.  El valor es retorna a 1."
 
 #: src/language/data-io/list.q:113
 #, c-format
-msgid ""
-"The last case (%ld) to list is less than 1.  The value is being reset to 1."
-msgstr ""
-"L'últim cas (%ld) per llistar es menor que 1.  El valor es restaura a 1.."
+msgid "The last case (%ld) to list is less than 1.  The value is being reset to 1."
+msgstr "L'últim cas (%ld) per llistar es menor que 1.  El valor es restaura a 1.."
 
 #: src/language/data-io/list.q:119
 #, c-format
@@ -5801,13 +5179,12 @@ msgid "The step value %ld is less than 1.  The value is being reset to 1."
 msgstr "El valor del pas %ld es menor que 1.  el valor es retorna a 1."
 
 #: src/ui/gui/binomial.ui:57 src/ui/gui/chi-square.ui:57
-#, fuzzy
 msgid "_Test Variable List:"
-msgstr "Variable(s) de prova:"
+msgstr "Lista de Variable _Test:"
 
 #: src/ui/gui/binomial.ui:126 src/ui/gui/chi-square.ui:126
 msgid "_Get from data"
-msgstr ""
+msgstr "Obtenció des de dades"
 
 #: src/ui/gui/binomial.ui:143 src/ui/gui/t-test.ui:333
 msgid "_Cut point:"
@@ -5815,60 +5192,51 @@ msgstr "Punt de tall:"
 
 #: src/ui/gui/binomial.ui:178
 msgid "Define Dichotomy"
-msgstr ""
+msgstr "Defineix Dicotomia"
 
 #: src/ui/gui/binomial.ui:197
-#, fuzzy
 msgid "Test _Proportion:"
-msgstr "Test Prop."
+msgstr "Test _Proporció:"
 
 #: src/ui/gui/correlation.ui:7
-#, fuzzy
 msgid "Bivariate Correlations"
-msgstr "Correlació de Spearman"
+msgstr "Correlacions Bivariades"
 
 #: src/ui/gui/correlation.ui:108
-#, fuzzy
 msgid "Pearso_n"
-msgstr "R de Pearson"
+msgstr "Pearso_n"
 
 #: src/ui/gui/correlation.ui:123
-#, fuzzy
 msgid "_Kendall's tau-b"
-msgstr "Tau-B de Kendall"
+msgstr "Tau-b de _Kendall"
 
 #: src/ui/gui/correlation.ui:138
 msgid "_Spearman"
-msgstr ""
+msgstr "_Spearman"
 
 #: src/ui/gui/correlation.ui:158
-#, fuzzy
 msgid "Correlation Coefficients"
-msgstr "Coeficinents de Contrast"
+msgstr "Coeficients de Correlació"
 
 #: src/ui/gui/correlation.ui:182
-#, fuzzy
 msgid "_Two-tailed"
-msgstr "Total"
+msgstr "Dues cues"
 
 #: src/ui/gui/correlation.ui:198
 msgid "One-tai_led"
-msgstr ""
+msgstr "Una cua"
 
 #: src/ui/gui/correlation.ui:220
-#, fuzzy
 msgid "Test of Significance"
-msgstr "Significativitat"
+msgstr "Test de Significativitat"
 
 #: src/ui/gui/correlation.ui:232
-#, fuzzy
 msgid "_Flag significant correlations"
-msgstr "Correlacions de Coeficients"
+msgstr "Marca correlacions significants"
 
 #: src/ui/gui/crosstabs.ui:7
-#, fuzzy
 msgid "Crosstabs"
-msgstr "_Creuaments tabulars"
+msgstr "Taules _Creuades"
 
 #: src/ui/gui/crosstabs.ui:50
 msgid "Rows"
@@ -5888,9 +5256,8 @@ msgid "Cells..."
 msgstr "Cel.les..."
 
 #: src/ui/gui/crosstabs.ui:227
-#, fuzzy
 msgid "Crosstabs: Format"
-msgstr "_Creuaments tabulars"
+msgstr "Taules Creuades: Format"
 
 #: src/ui/gui/crosstabs.ui:241
 msgid "Print tables"
@@ -5917,18 +5284,16 @@ msgid "Labeling"
 msgstr "Etiquetant"
 
 #: src/ui/gui/crosstabs.ui:369
-#, fuzzy
 msgid "Crosstabs: Cells"
-msgstr "_Creuaments tabulars"
+msgstr "Taules Creuades: Cel·les"
 
 #: src/ui/gui/crosstabs.ui:402
 msgid "Cell Display"
 msgstr "Contingut de cel.la"
 
 #: src/ui/gui/crosstabs.ui:430
-#, fuzzy
 msgid "Crosstabs: Statistics"
-msgstr "Proves Estad."
+msgstr "Taules Creuades: Estadístics"
 
 #: src/ui/gui/crosstabs.ui:463 src/ui/gui/oneway.ui:222
 #: src/ui/gui/regression.ui:340
@@ -5936,43 +5301,36 @@ msgid "Statistics"
 msgstr "Estatísticas"
 
 #: src/ui/gui/chi-square.ui:13
-#, fuzzy
 msgid "Chi-Square Test"
-msgstr "Proves Chi-quadrat."
+msgstr "Test Chi-quadrat."
 
 #: src/ui/gui/chi-square.ui:140
-#, fuzzy
 msgid "Use _specified range"
-msgstr "Utilitza valors especificats:"
+msgstr "Utilitza rang e_specificat"
 
 #: src/ui/gui/chi-square.ui:162
-#, fuzzy
 msgid "_Lower:"
-msgstr "Inferior"
+msgstr "Mínim:"
 
 #: src/ui/gui/chi-square.ui:170
-#, fuzzy
 msgid "_Upper:"
-msgstr "Superior"
+msgstr "Màxim:"
 
 #: src/ui/gui/chi-square.ui:214
-#, fuzzy
 msgid "Expected Range:"
-msgstr "N esperat"
+msgstr "Rang esperat:"
 
 #: src/ui/gui/chi-square.ui:240
 msgid "All categor_ies equal"
-msgstr ""
+msgstr "Igual totes categories"
 
 #: src/ui/gui/chi-square.ui:257
-#, fuzzy
 msgid "_Values"
-msgstr "Valores"
+msgstr "_Valors"
 
 #: src/ui/gui/chi-square.ui:301
-#, fuzzy
 msgid "Expected Values:"
-msgstr "Valor extrems"
+msgstr "Valors Esperats:"
 
 #: src/ui/gui/descriptives.ui:130 src/ui/gui/frequencies.ui:140
 msgid "Statistics:"
@@ -5995,9 +5353,8 @@ msgid "Options:"
 msgstr "Opcions:"
 
 #: src/ui/gui/examine.ui:8
-#, fuzzy
 msgid "Explore"
-msgstr "_Explorar"
+msgstr "Explorar"
 
 #: src/ui/gui/examine.ui:51
 msgid "Label Cases by:"
@@ -6017,9 +5374,8 @@ msgid "Options..."
 msgstr "Opcions..."
 
 #: src/ui/gui/examine.ui:302
-#, fuzzy
 msgid "Explore: Statistics"
-msgstr "Proves Estad."
+msgstr "Explorar: Estadístics"
 
 #: src/ui/gui/examine.ui:332
 msgid "Extremes"
@@ -6027,7 +5383,7 @@ msgstr "Extrems"
 
 #: src/ui/gui/examine.ui:381
 msgid "Explore: Options"
-msgstr ""
+msgstr "Explorar: Opcions"
 
 #: src/ui/gui/examine.ui:405
 msgid "Exclude cases listwise"
@@ -6047,112 +5403,96 @@ msgid "Missing Values"
 msgstr "Valors perduts"
 
 #: src/ui/gui/factor.ui:21
-#, fuzzy
 msgid "Factor Analysis"
-msgstr "Llista de Factors:"
+msgstr "Anàlisi Factorial"
 
 #: src/ui/gui/factor.ui:47
-#, fuzzy
 msgid "_Descriptives..."
-msgstr "Descriptives"
+msgstr "_Descriptius..."
 
 #: src/ui/gui/factor.ui:60
-#, fuzzy
 msgid "_Extraction..."
-msgstr "Opcions..."
+msgstr "_Extracció..."
 
 #: src/ui/gui/factor.ui:74
-#, fuzzy
 msgid "_Rotations..."
-msgstr "Opcions..."
+msgstr "Rotacions..."
 
 #: src/ui/gui/factor.ui:192
 msgid "Factor Analysis: Extraction"
-msgstr ""
+msgstr "Anàlisi Factorial: Extracció"
 
 #: src/ui/gui/factor.ui:216
-#, fuzzy
 msgid "Method: "
-msgstr "Mode:"
+msgstr "Mètode: "
 
 #: src/ui/gui/factor.ui:266
-#, fuzzy
 msgid "Correlation matrix"
-msgstr "Correlació"
+msgstr "Matriu de Correlació"
 
 #: src/ui/gui/factor.ui:280
-#, fuzzy
 msgid "Covariance matrix"
-msgstr "Covariància"
+msgstr "Matriu de Covariància"
 
 #: src/ui/gui/factor.ui:300
-#, fuzzy
 msgid "Analyse"
-msgstr "_Analitzar"
+msgstr "Analitzar"
 
 #: src/ui/gui/factor.ui:324
 msgid "Unrotatated factor solution"
-msgstr ""
+msgstr "Solució factorial no rotada"
 
 #: src/ui/gui/factor.ui:338
 msgid "Scree plot"
-msgstr ""
+msgstr "Gràfic de sedimentació"
 
 #: src/ui/gui/factor.ui:357 src/ui/gui/roc.ui:286
-#, fuzzy
 msgid "Display"
-msgstr "Contingut de cel.la"
+msgstr "Contingut"
 
 #: src/ui/gui/factor.ui:430
 msgid "Number of factors:"
-msgstr ""
+msgstr "Nombre de factors:"
 
 #: src/ui/gui/factor.ui:460
-#, fuzzy
 msgid "Extract"
-msgstr "Eta"
+msgstr "Extracció"
 
 #: src/ui/gui/factor.ui:475 src/ui/gui/factor.ui:665
 msgid "Maximum iterations for convergence:"
-msgstr ""
+msgstr "Iteracions màximes per convergència:"
 
 #: src/ui/gui/factor.ui:538
-#, fuzzy
 msgid "Factor Analysis: Rotation"
-msgstr "Llista de Factors:"
+msgstr "Anàlisi Factorial: Rotació"
 
 #: src/ui/gui/factor.ui:571
-#, fuzzy
 msgid "_None"
-msgstr "Cap"
+msgstr "_No res"
 
 #: src/ui/gui/factor.ui:582
-#, fuzzy
 msgid "_Varimax"
-msgstr "_Variables:"
+msgstr "_Varimax"
 
 #: src/ui/gui/factor.ui:598
 msgid "_Quartimax"
-msgstr ""
+msgstr "_Quartimax"
 
 #: src/ui/gui/factor.ui:614
 msgid "_Equimax"
-msgstr ""
+msgstr "_Equimax"
 
 #: src/ui/gui/factor.ui:637
-#, fuzzy
 msgid "Method"
-msgstr "Mode:"
+msgstr "Mètode"
 
 #: src/ui/gui/factor.ui:648
-#, fuzzy
 msgid "_Display rotated solution"
-msgstr "Mostra _informació de l'arxiu de dades"
+msgstr "Mostra solució rotada"
 
 #: src/ui/gui/find.ui:8
-#, fuzzy
 msgid "Find Case"
-msgstr "Rang de cassos"
+msgstr "Cerca cas"
 
 #: src/ui/gui/find.ui:88
 msgid "Variable:"
@@ -6189,133 +5529,112 @@ msgid "Variable(s):"
 msgstr "Variable(s):"
 
 #: src/ui/gui/frequencies.ui:151
-#, fuzzy
 msgid "Include missing values"
-msgstr "Sense valors perduts"
+msgstr "Inclou valors perduts"
 
 #: src/ui/gui/frequencies.ui:189
-#, fuzzy
 msgid "Charts..."
-msgstr "_Contrasts..."
+msgstr "Gràfics..."
 
 #: src/ui/gui/frequencies.ui:201
-#, fuzzy
 msgid "Frequency Tables..."
-msgstr "Variable de Freqüència"
+msgstr "Taules de Freqüències..."
 
 #: src/ui/gui/frequencies.ui:251
-#, fuzzy
 msgid "Frequencies: Frequency Tables"
-msgstr "Mostrar la taula de freqüències"
+msgstr "Freqüències: Taules de freqüències"
 
 #: src/ui/gui/frequencies.ui:281
 msgid "Always"
-msgstr ""
+msgstr "Sempre"
 
 #: src/ui/gui/frequencies.ui:297
-#, fuzzy
 msgid "Never"
-msgstr "Negatiu"
+msgstr "Mai"
 
 #: src/ui/gui/frequencies.ui:316
 msgid "If no more than "
-msgstr ""
+msgstr "Si no més de "
 
 #: src/ui/gui/frequencies.ui:347
-#, fuzzy
 msgid "values"
-msgstr "Valores"
+msgstr "Valors"
 
 #: src/ui/gui/frequencies.ui:368
-#, fuzzy
 msgid "Display frequency tables"
-msgstr "Mostrar la taula de freqüències"
+msgstr "Mostra taula de freqüències"
 
 #: src/ui/gui/frequencies.ui:396
-#, fuzzy
 msgid "Ascending value"
-msgstr "Ascendent"
+msgstr "Valor Ascendent"
 
 #: src/ui/gui/frequencies.ui:412
-#, fuzzy
 msgid "Descending value"
-msgstr "Descendent"
+msgstr "Valor Descendent"
 
 #: src/ui/gui/frequencies.ui:428
-#, fuzzy
 msgid "Ascending frequency"
-msgstr "Ordre Ascendent"
+msgstr "Freqüència Ascendent"
 
 #: src/ui/gui/frequencies.ui:444
-#, fuzzy
 msgid "Descending frequency"
-msgstr "Ordre Descendent"
+msgstr "Freqüència Descendent"
 
 #: src/ui/gui/frequencies.ui:466
 msgid "Order by"
 msgstr "Ordenat per"
 
 #: src/ui/gui/frequencies.ui:508
-#, fuzzy
 msgid "Frequencies: Charts"
-msgstr "Freqüències"
+msgstr "Freqüències: Gràfics"
 
 #: src/ui/gui/frequencies.ui:536
-#, fuzzy
 msgid "Exclude values below "
-msgstr "Exclou casos segons llista"
+msgstr "Excloure valors per sota "
 
 #: src/ui/gui/frequencies.ui:571
-#, fuzzy
 msgid "Exclude values above "
-msgstr "Excloure casos per parelles"
+msgstr "Excloure valors per sobre "
 
 #: src/ui/gui/frequencies.ui:609
-#, fuzzy
 msgid "<b>Chart Formatting</b>"
-msgstr "<b>Comilles</b>"
+msgstr "<b>Format de Gràfics</b>"
 
 #: src/ui/gui/frequencies.ui:633
 msgid "Draw histograms"
-msgstr ""
+msgstr "Dibuixa histogrames"
 
 #: src/ui/gui/frequencies.ui:645
 msgid "Superimpose normal curve"
-msgstr ""
+msgstr "Sobreimposa curva normal"
 
 #: src/ui/gui/frequencies.ui:661
-#, fuzzy
 msgid "Scale:"
-msgstr "Escala"
+msgstr "Escala:"
 
 #: src/ui/gui/frequencies.ui:682
-#, fuzzy
 msgid "Percentages"
-msgstr "Percentils"
+msgstr "Percentatges"
 
 #: src/ui/gui/frequencies.ui:705
-#, fuzzy
 msgid "<b>Histograms</b>"
-msgstr "<b>Separadors</b>"
+msgstr "<b>Histogrames</b>"
 
 #: src/ui/gui/frequencies.ui:729
 msgid "Draw pie charts"
-msgstr ""
+msgstr "Dibuixa gràfiques de sectors"
 
 #: src/ui/gui/frequencies.ui:741
-#, fuzzy
 msgid "Include slices for missing values"
-msgstr "Valors perduts _Discrets"
+msgstr "Incloure sectors pels valors perduts"
 
 #: src/ui/gui/frequencies.ui:758
-#, fuzzy
 msgid "<b>Pie Charts</b>"
-msgstr "<b>Separadors</b>"
+msgstr "<b>Gràfiques de Sectors</b>"
 
 #: src/ui/gui/oneway.ui:8
-#, fuzzy
 msgid "One-Way ANOVA"
-msgstr "_ANOVA d'un factor"
+msgstr "ANOVA d'un factor"
 
 #: src/ui/gui/oneway.ui:31
 msgid "_Factor:"
@@ -6338,9 +5657,8 @@ msgid "_Contrasts..."
 msgstr "_Contrasts..."
 
 #: src/ui/gui/oneway.ui:292
-#, fuzzy
 msgid "One-Way ANOVA: Contrasts"
-msgstr "_ANOVA d'un factor"
+msgstr "ANOVA d'un factor: Contrasts"
 
 #: src/ui/gui/oneway.ui:369
 msgid "_Coefficients:"
@@ -6371,9 +5689,8 @@ msgid "Current Status: "
 msgstr "Estatus actual: "
 
 #: src/ui/gui/psppire.ui:195
-#, fuzzy
 msgid "Transpose"
-msgstr "_Transposar"
+msgstr "Trasposar"
 
 #: src/ui/gui/psppire.ui:247
 msgid "Name Variable:"
@@ -6416,9 +5733,8 @@ msgid "Analysis by groups is off"
 msgstr "L'anàlisi per grups està activat"
 
 #: src/ui/gui/psppire.ui:709
-#, fuzzy
 msgid "Compute Variable"
-msgstr "Variables de sortida"
+msgstr "Calcular Variable"
 
 #: src/ui/gui/psppire.ui:742
 msgid "Target Variable:"
@@ -6494,9 +5810,8 @@ msgid "Unselected Cases Are"
 msgstr "Els casos no seleccionats son"
 
 #: src/ui/gui/psppire.ui:1585
-#, fuzzy
 msgid "Data File Comments"
-msgstr "_Comentaris arxiu de dades"
+msgstr "Comentaris de l'arxiu de dades"
 
 #: src/ui/gui/psppire.ui:1609
 msgid "Comments:"
@@ -6511,9 +5826,8 @@ msgid "Column Number: 0"
 msgstr "Columna Numero: 0"
 
 #: src/ui/gui/psppire.ui:1703
-#, fuzzy
 msgid "Select Cases: Range"
-msgstr "Seleccionar casos"
+msgstr "Seleccionar casos: Rang"
 
 #: src/ui/gui/psppire.ui:1750
 msgid "First case"
@@ -6529,25 +5843,23 @@ msgstr "Observació"
 
 #: src/ui/gui/psppire.ui:1808
 msgid "Compute Variable: Type and Label"
-msgstr ""
+msgstr "Calcular Variable: Tipus i Etiqueta"
 
 #: src/ui/gui/psppire.ui:1843
 msgid "Use expression as label"
 msgstr "Utilitza l'expressio com a etiqueta"
 
 #: src/ui/gui/psppire.ui:2088
-#, fuzzy
 msgid "Goto Case"
-msgstr "Anar a"
+msgstr "Anar a Cas"
 
 #: src/ui/gui/psppire.ui:2106
 msgid "Goto Case Number:"
 msgstr "Anar al cas número:"
 
 #: src/ui/gui/psppire.ui:2149
-#, fuzzy
 msgid "Select Cases: Random Sample"
-msgstr "Seleccionar casos"
+msgstr "Seleccionar casos: Mostra aleatoria"
 
 #: src/ui/gui/psppire.ui:2247
 msgid "Sample Size"
@@ -6586,9 +5898,8 @@ msgid "_Ties..."
 msgstr "Vincles..."
 
 #: src/ui/gui/rank.ui:346
-#, fuzzy
 msgid "Rank Cases: Types"
-msgstr "Rang de cassos"
+msgstr "Rang de cassos: Tipus"
 
 #: src/ui/gui/rank.ui:366
 msgid "Sum of case weights"
@@ -6643,9 +5954,8 @@ msgid "Proportion Estimation Formula"
 msgstr "Formula d'estimació de Porporcións"
 
 #: src/ui/gui/rank.ui:625
-#, fuzzy
 msgid "Rank Cases: Ties"
-msgstr "Rang de cassos"
+msgstr "Rang de cassos: Vincles"
 
 #: src/ui/gui/rank.ui:651
 msgid "_Mean"
@@ -6668,9 +5978,8 @@ msgid "Rank Assigned to Ties"
 msgstr "Rang assignat a empats"
 
 #: src/ui/gui/sort.ui:8
-#, fuzzy
 msgid "Sort Cases"
-msgstr "_Ordenar Casos"
+msgstr "Ordenar Casos"
 
 #: src/ui/gui/sort.ui:79
 msgid "Sort by:"
@@ -6689,7 +5998,6 @@ msgid "System Missing"
 msgstr "Perdut del Sistema"
 
 #: src/ui/gui/recode.ui:199
-#, fuzzy
 msgid "System or User Missing"
 msgstr "Perdut de sistema o d'usuari"
 
@@ -6774,9 +6082,8 @@ msgid "Independent"
 msgstr "Independent"
 
 #: src/ui/gui/regression.ui:236
-#, fuzzy
 msgid "Regression: Save"
-msgstr "Regressió"
+msgstr "Regressió: Desar"
 
 #: src/ui/gui/regression.ui:250
 msgid "Predicted values"
@@ -6787,9 +6094,8 @@ msgid "Residuals"
 msgstr "Residuals"
 
 #: src/ui/gui/regression.ui:298
-#, fuzzy
 msgid "Regression: Statistics"
-msgstr "Proves Estad."
+msgstr "Regresió: Estadìstics"
 
 #: src/ui/gui/reliability.ui:27
 msgid "Reliability Analysis"
@@ -6808,43 +6114,36 @@ msgid "Variables in first split:"
 msgstr "Variables a primera divissió:"
 
 #: src/ui/gui/roc.ui:115
-#, fuzzy
 msgid "_Test Variable:"
-msgstr "Variable(s) de prova:"
+msgstr "Variable de prova:"
 
 #: src/ui/gui/roc.ui:147
-#, fuzzy
 msgid "_State Variable:"
-msgstr "Nom de Variable:"
+msgstr "Variable d'Estat:"
 
 #: src/ui/gui/roc.ui:172
-#, fuzzy
 msgid "_Value of state variable:"
-msgstr "Utilitzar variable de filtre"
+msgstr "_Valor de la variable d'estat:"
 
 #: src/ui/gui/roc.ui:209
-#, fuzzy
 msgid "ROC C_urve"
 msgstr "Corba ROC"
 
 #: src/ui/gui/roc.ui:227
 msgid "_With diagonal reference line"
-msgstr ""
+msgstr "Amb línia de referència diagonal"
 
 #: src/ui/gui/roc.ui:251
-#, fuzzy
 msgid "Standard _Error and Confidence Interval"
-msgstr "Interval de Confiança del 95%%"
+msgstr "_Error típic i Interval de Confiança"
 
 #: src/ui/gui/roc.ui:266
-#, fuzzy
 msgid "_Coordinate points of the ROC Curve"
-msgstr "Coordenades de la Corba"
+msgstr "_Coordenades de la Corba ROC"
 
 #: src/ui/gui/t-test.ui:8
-#, fuzzy
 msgid "Independent-Samples T Test"
-msgstr "Prova T per mostres _Independents"
+msgstr "Prova T per mostres Independents"
 
 #: src/ui/gui/t-test.ui:54 src/ui/gui/t-test.ui:175 src/ui/gui/t-test.ui:231
 msgid "Define Groups"
@@ -6867,9 +6166,8 @@ msgid "_Use specified values:"
 msgstr "Utilitza valors especificats:"
 
 #: src/ui/gui/t-test.ui:420
-#, fuzzy
 msgid "Options"
-msgstr "Opcions:"
+msgstr "Opcions"
 
 #: src/ui/gui/t-test.ui:452
 msgid "Exclude cases _analysis by analysis"
@@ -6880,7 +6178,6 @@ msgid "Exclude cases _listwise"
 msgstr "Exclure casos per _llista"
 
 #: src/ui/gui/t-test.ui:529
-#, fuzzy
 msgid "One - Sample T Test"
 msgstr "Prova T per una mostra"
 
@@ -6889,9 +6186,8 @@ msgid "Test Value: "
 msgstr "Valor de prova: "
 
 #: src/ui/gui/t-test.ui:704
-#, fuzzy
 msgid "Paired Samples T Test"
-msgstr "Prova T per mostres A_parellades"
+msgstr "Prova T per mostres Aparellades"
 
 #: src/ui/gui/text-data-import.ui:8
 msgid "Importing Textual Data"
@@ -6899,21 +6195,13 @@ msgstr "Important dades textuals"
 
 #: src/ui/gui/text-data-import.ui:19
 msgid ""
-"This assistant will guide you through the process of importing data into "
-"PSPP from a text file with one line per case,  in which fields are separated "
-"by tabs, commas, or other delimiters.\n"
+"This assistant will guide you through the process of importing data into PSPP from a text file with one line per case,  in which fields are separated by tabs, commas, or other delimiters.\n"
 "\n"
-"The selected file contains N lines of text.  Only the first M of these will "
-"be shown for preview purposes in the following screens.  You may choose "
-"below how much of the file should actually be imported."
+"The selected file contains N lines of text.  Only the first M of these will be shown for preview purposes in the following screens.  You may choose below how much of the file should actually be imported."
 msgstr ""
-"Aquest assitent t'acompanyarà per tot el procés d'importar dades al PSPP des "
-"d'un arxiu de text amb una linia per cas,  al qual els camps estan separats "
-"per tabuladors, comas, o altres delimitadors.\n"
+"Aquest assitent t'acompanyarà per tot el procés d'importar dades al PSPP des d'un arxiu de text amb una linia per cas,  al qual els camps estan separats per tabuladors, comas, o altres delimitadors.\n"
 "\n"
-"L'arxiu seleccionat conté N linies de text.  Només les primeres M seran "
-"mostrades per previsualització a les pantalles seguents.  Pots triar a "
-"continuació quina part de l'arxiu ha de ser importat."
+"L'arxiu seleccionat conté N linies de text.  Només les primeres M seran mostrades per previsualització a les pantalles seguents.  Pots triar a continuació quina part de l'arxiu ha de ser importat."
 
 #: src/ui/gui/text-data-import.ui:52
 msgid "All cases"
@@ -7016,12 +6304,8 @@ msgid "Adjust Variable Formats"
 msgstr "Ajustar formats de variables"
 
 #: src/ui/gui/text-data-import.ui:618
-msgid ""
-"Check the data formats displayed below and fix any that are incorrect.  You "
-"may set other variable properties now or later."
-msgstr ""
-"Comprovar les formats de les dades mostrades a continuació i corregir els "
-"problemes.  Es pot asignar altres propietats de les variables ara o més tard."
+msgid "Check the data formats displayed below and fix any that are incorrect.  You may set other variable properties now or later."
+msgstr "Comprovar les formats de les dades mostrades a continuació i corregir els problemes.  Es pot asignar altres propietats de les variables ara o més tard."
 
 #: src/ui/gui/text-data-import.ui:662
 msgid "<b>Variables</b>"
@@ -7173,9 +6457,8 @@ msgid "Go To Case"
 msgstr "Anar a"
 
 #: src/ui/gui/data-editor.ui:134
-#, fuzzy
 msgid "Jump to a case in the data sheet"
-msgstr "Anar a un cas a la Matriu de Dades"
+msgstr "Anar a un cas a la matriu de Dades"
 
 #: src/ui/gui/data-editor.ui:160
 msgid "Cl_ear Variables"
@@ -7322,14 +6605,12 @@ msgid "One Way _ANOVA"
 msgstr "_ANOVA d'un factor"
 
 #: src/ui/gui/data-editor.ui:376
-#, fuzzy
 msgid "Bivariate _Correlation..."
-msgstr "Correlació de Spearman"
+msgstr "_Correlació Bivariada..."
 
 #: src/ui/gui/data-editor.ui:382
-#, fuzzy
 msgid "Factor _Analysis"
-msgstr "Llista de Factors:"
+msgstr "_Anàlisi Factorial"
 
 #: src/ui/gui/data-editor.ui:388
 msgid "Re_liability"
@@ -7352,9 +6633,8 @@ msgid "_Binomial"
 msgstr "_Binomial"
 
 #: src/ui/gui/data-editor.ui:418
-#, fuzzy
 msgid "ROC Cur_ve..."
-msgstr "Corba ROC"
+msgstr "Corba ROC..."
 
 #: src/ui/gui/data-editor.ui:424
 msgid "_Utilities"
@@ -7407,9 +6687,8 @@ msgid "Split File Status Area"
 msgstr "Area de Divisió"
 
 #: src/ui/gui/output-viewer.ui:22
-#, fuzzy
 msgid "_Export"
-msgstr "_Explorar"
+msgstr "_Exportar"
 
 #: src/ui/gui/syntax-editor.ui:100
 msgid "_Run"
@@ -7431,15 +6710,6 @@ msgstr "Linia actual"
 msgid "To End"
 msgstr "Fins al final"
 
-#~ msgid "Dependent variable must be numeric."
-#~ msgstr "La variable dependent ha de ser numèrica."
-
-#~ msgid "Variable %s has label of invalid length %zu."
-#~ msgstr "Variable %s té una etiqueta de longitud no vàlida %zu."
-
-#~ msgid "_About"
-#~ msgstr "Qu_ant a..."
-
 #~ msgid "Buttons"
 #~ msgstr "Botons"
 
@@ -7464,6 +6734,9 @@ msgstr "Fins al final"
 #~ msgid "...not found"
 #~ msgstr "...no es troba"
 
+#~ msgid "Variable %s has label of invalid length %zu."
+#~ msgstr "Variable %s té una etiqueta de longitud no vàlida %zu."
+
 #~ msgid "little-endian"
 #~ msgstr "little-endian"
 
@@ -7554,27 +6827,20 @@ msgstr "Fins al final"
 #~ msgid "unexpected end of line expecting string"
 #~ msgstr "final de línia inesperat quan s'esperava una cadena"
 
-#~ msgid ""
-#~ "ascii: bad index value for `box' key: syntax is box[INDEX], 0 <= INDEX < %"
-#~ "d decimal, with INDEX expressed in base 4"
-#~ msgstr ""
-#~ "ascii: índex de valor defectuós per a la clau `box' : la sintaxi és la box"
-#~ "[INDEX], 0 <= INDEX < %d decimal, amb INDEX expressat en base 4"
+#~ msgid "ascii: bad index value for `box' key: syntax is box[INDEX], 0 <= INDEX < %d decimal, with INDEX expressed in base 4"
+#~ msgstr "ascii: índex de valor defectuós per a la clau `box' : la sintaxi és la box[INDEX], 0 <= INDEX < %d decimal, amb INDEX expressat en base 4"
 
 #~ msgid "ascii: multiple values for %s"
 #~ msgstr "ascii: valors múltiples per a %s"
 
 #~ msgid "ascii: only screen devices may have `auto' length or width"
-#~ msgstr ""
-#~ "ascii: només els dispositius de pantalla poden tenir longitud o amplada "
-#~ "`auto'"
+#~ msgstr "ascii: només els dispositius de pantalla poden tenir longitud o amplada `auto'"
 
 #~ msgid "ascii: positive integer required as `%s' value"
 #~ msgstr "ascii: enter positiu requerit com a valor `%s'"
 
 #~ msgid "ascii: `emphasis' value must be `bold', `underline', or `none'"
-#~ msgstr ""
-#~ "ascii: el valor d' `emphasis' ha de ser `bold', `underline', o `none'"
+#~ msgstr "ascii: el valor d' `emphasis' ha de ser `bold', `underline', o `none'"
 
 #~ msgid "ascii: zero or positive integer required as `%s' value"
 #~ msgstr "ascii: zero o enter positiu requerit com a valor `%s'"
@@ -7592,9 +6858,7 @@ msgstr "Fins al final"
 #~ msgstr "obrint arxiu de resultat HTML: %s"
 
 #~ msgid "unknown configuration parameter `%s' for HTML device driver"
-#~ msgstr ""
-#~ "paràmetre de configuració `%s' desconegut per al dispositiu controlador "
-#~ "HTML"
+#~ msgstr "paràmetre de configuració `%s' desconegut per al dispositiu controlador HTML"
 
 #~ msgid "error creating \"%s\""
 #~ msgstr "error en crear \"%s\""
@@ -7608,11 +6872,8 @@ msgstr "Fins al final"
 #~ msgid "using default output driver configuration"
 #~ msgstr "utilitzant controlador de configuració de resultats per defecte"
 
-#~ msgid ""
-#~ "cannot find output initialization file (use `-vv' to view search path)"
-#~ msgstr ""
-#~ "no es pot trobar l'arxiu d'inicialització de resultats (utilitzar `-vv' "
-#~ "per a veure la ruta de cerca)"
+#~ msgid "cannot find output initialization file (use `-vv' to view search path)"
+#~ msgstr "no es pot trobar l'arxiu d'inicialització de resultats (utilitzar `-vv' per a veure la ruta de cerca)"
 
 #~ msgid "cannot open \"%s\""
 #~ msgstr "no es pot obrir \"%s\""
@@ -7639,22 +6900,14 @@ msgstr "Fins al final"
 #~ "Clases de controlador:\n"
 #~ "\t"
 
-#~ msgid ""
-#~ "reached end of options inside quoted string parsing options for \"%s\" "
-#~ "driver"
-#~ msgstr ""
-#~ "Arribat al final d'opcions dins de la cadena entre cometes tot analitzant "
-#~ "opcions pel controlador \"%s\""
+#~ msgid "reached end of options inside quoted string parsing options for \"%s\" driver"
+#~ msgstr "Arribat al final d'opcions dins de la cadena entre cometes tot analitzant opcions pel controlador \"%s\""
 
 #~ msgid "syntax error in string constant parsing options for \"%s\" driver"
-#~ msgstr ""
-#~ "error de sintaxi en una constant de cadena analitzant opcions pel "
-#~ "controlador \"%s\""
+#~ msgstr "error de sintaxi en una constant de cadena analitzant opcions pel controlador \"%s\""
 
 #~ msgid "syntax error expecting `=' parsing options for driver \"%s\""
-#~ msgstr ""
-#~ "error de sintaxi quan s'esperava `=' analitzant les opcions pel "
-#~ "controlador \"%s\""
+#~ msgstr "error de sintaxi quan s'esperava `=' analitzant les opcions pel controlador \"%s\""
 
 #~ msgid "unknown output driver class `%.*s'"
 #~ msgstr "controlador de sortida de classe desconeguda `%.*s'"
@@ -7663,13 +6916,10 @@ msgstr "Fins al final"
 #~ msgstr "tipus de dispositiu desconegut `%.*s'"
 
 #~ msgid "cannot initialize output driver `%s' of class `%s'"
-#~ msgstr ""
-#~ "no pot inicialitzar el controlador de sortida `%s' de la classe `%s'"
+#~ msgstr "no pot inicialitzar el controlador de sortida `%s' de la classe `%s'"
 
 #~ msgid "driver definition line missing driver name or class name"
-#~ msgstr ""
-#~ "línia de definició del controlador sense nom del controlador o nom de la "
-#~ "classe"
+#~ msgstr "línia de definició del controlador sense nom del controlador o nom de la classe"
 
 #~ msgid "opening PostScript output file \"%s\""
 #~ msgstr "obrir l'arxiu de sortida PostScript \"%s\""
@@ -7678,16 +6928,10 @@ msgstr "Fins al final"
 #~ msgstr "tanqui l'arxiu de sortida PostScript \"%s\""
 
 #~ msgid "unknown configuration parameter `%s' for PostScript device driver"
-#~ msgstr ""
-#~ "paràmetre de configuració desconegut`%s' pel controlador del dispositiu "
-#~ "PostScript"
+#~ msgstr "paràmetre de configuració desconegut`%s' pel controlador del dispositiu PostScript"
 
-#~ msgid ""
-#~ "unknown orientation `%s' (valid orientations are `portrait' and "
-#~ "`landscape')"
-#~ msgstr ""
-#~ "orientació desconeguda `%s' (les orientacions vàlides són `retrat' i "
-#~ "`paisatge')"
+#~ msgid "unknown orientation `%s' (valid orientations are `portrait' and `landscape')"
+#~ msgstr "orientació desconeguda `%s' (les orientacions vàlides són `retrat' i `paisatge')"
 
 #~ msgid "boolean value expected for %s"
 #~ msgstr "valor booleà esperat per a %s"
@@ -7695,11 +6939,8 @@ msgstr "Fins al final"
 #~ msgid "positive integer value required for `%s'"
 #~ msgstr "valor enter positiu necessari per a `%s'"
 
-#~ msgid ""
-#~ "default font size must be at least 1 point (value of 1000 for key `%s')"
-#~ msgstr ""
-#~ "la mida de caràcter per defecte ha de ser com a mínim 1 punt (valor de "
-#~ "1000 per la clau `%s')"
+#~ msgid "default font size must be at least 1 point (value of 1000 for key `%s')"
+#~ msgstr "la mida de caràcter per defecte ha de ser com a mínim 1 punt (valor de 1000 per la clau `%s')"
 
 #~ msgid "could not find AFM file \"%s\""
 #~ msgstr "no es pot trobar l'arxiu AFM \"%s\""
@@ -7728,11 +6969,8 @@ msgstr "Fins al final"
 #~ msgid "creating \"%s\""
 #~ msgstr "creant \"%s\""
 
-#~ msgid ""
-#~ "set to `compatible' if you want output calculated from broken algorithms"
-#~ msgstr ""
-#~ "activeu `compatible' si voleu obtenir resultats calculat a partir "
-#~ "d'algorismes trencats"
+#~ msgid "set to `compatible' if you want output calculated from broken algorithms"
+#~ msgstr "activeu `compatible' si voleu obtenir resultats calculat a partir d'algorismes trencats"
 
 #~ msgid "Append DIR to include path"
 #~ msgstr "Adjuntar DIR a la ruta d'inclusió"
@@ -7749,11 +6987,8 @@ msgstr "Fins al final"
 #~ msgid "Don't allow some unsafe operations"
 #~ msgstr "No permet algunes operacions insegures"
 
-#~ msgid ""
-#~ "Set to `compatible' if you want only to accept SPSS compatible syntax"
-#~ msgstr ""
-#~ "Activeu `compatible' si només voleu acceptar la sintaxi compatible de "
-#~ "l'SPSS"
+#~ msgid "Set to `compatible' if you want only to accept SPSS compatible syntax"
+#~ msgstr "Activeu `compatible' si només voleu acceptar la sintaxi compatible de l'SPSS"
 
 #~ msgid "PSPP --- A program for statistical analysis"
 #~ msgstr "PSPP ---Un programa d'anàlisi estadística"
@@ -7771,8 +7006,7 @@ msgstr "Fins al final"
 #~ msgstr "Opcions que afecten a la sintaxi i al comportament:"
 
 #~ msgid "Cannot open %s (%s). Writing errors to stdout instead.\n"
-#~ msgstr ""
-#~ "No es pot obrir %s (%s). Alternativament, escrivint errors a stdout.\n"
+#~ msgstr "No es pot obrir %s (%s). Alternativament, escrivint errors a stdout.\n"
 
 #~ msgid "Terminating execution of syntax file due to error."
 #~ msgstr "Finalitzant l'execució de l'arxiu de sintaxi degut a un error."
@@ -7784,13 +7018,10 @@ msgstr "Fins al final"
 #~ msgstr "Enviar missatges d'error a FILE (annexa)"
 
 #~ msgid "Select output driver DEVICE and disable defaults"
-#~ msgstr ""
-#~ "Seleccionar el controlador de sortida DEVICE i desactivar els valors per "
-#~ "defecte"
+#~ msgstr "Seleccionar el controlador de sortida DEVICE i desactivar els valors per defecte"
 
 #~ msgid "Print a list of known driver classes, then exit"
-#~ msgstr ""
-#~ "Imprimir una llista de classes de controladors coneguts, després sortir"
+#~ msgstr "Imprimir una llista de classes de controladors coneguts, després sortir"
 
 #~ msgid "Start an interactive session"
 #~ msgstr "Inici d'una sessió interactiva"
@@ -7924,6 +7155,9 @@ msgstr "Fins al final"
 #~ msgid "gtk-find"
 #~ msgstr "gtk-find"
 
+#~ msgid "_About"
+#~ msgstr "Qu_ant a..."
+
 #~ msgid "Print"
 #~ msgstr "Iimprimir"
 
@@ -7957,12 +7191,8 @@ msgstr "Fins al final"
 #~ msgid "Messages Reported"
 #~ msgstr "S'han generat missatges"
 
-#~ msgid ""
-#~ "The PSPP processor reported # errors.  The first # and last # are shown "
-#~ "below:"
-#~ msgstr ""
-#~ "El processador d'PSPP ha genrat # errors.  Els primers # y els darrers # "
-#~ "es mostren a continuació:"
+#~ msgid "The PSPP processor reported # errors.  The first # and last # are shown below:"
+#~ msgstr "El processador d'PSPP ha genrat # errors.  Els primers # y els darrers # es mostren a continuació:"
 
 #~ msgid "gtk-close"
 #~ msgstr "tanca-gtk"
@@ -7992,18 +7222,11 @@ msgstr "Fins al final"
 #~ "Alpha\n"
 #~ "Dividit"
 
-#~ 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 ""
-#~ "Al menys s'ha de donar algun BARCHART, HISTOGRAM o HBAR.  S'assumeix "
-#~ "HBAR.  Els valors d'arguments Argument tindrán preferencia creixent en "
-#~ "aquest mateix ordre)."
+#~ 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 "Al menys s'ha de donar algun BARCHART, HISTOGRAM o HBAR.  S'assumeix HBAR.  Els valors d'arguments Argument tindrán preferencia creixent en aquest mateix ordre)."
 
 #~ msgid "Variable %s specified multiple times on VARIABLES subcommand."
-#~ msgstr ""
-#~ "La variable %s s'ha especificat més d'una vegada a l'ordre VARIABLES."
+#~ msgstr "La variable %s s'ha especificat més d'una vegada a l'ordre VARIABLES."
 
 #~ msgid "Cum"
 #~ msgstr "Acumulat"
@@ -8014,6 +7237,9 @@ msgstr "Fins al final"
 #~ msgid "Pct"
 #~ msgstr "Pct"
 
+#~ msgid "Dependent variable must be numeric."
+#~ msgstr "La variable dependent ha de ser numèrica."
+
 #~ msgid "N of items"
 #~ msgstr "N d'elements"
 
index b22448354c54a0d0f7f3ea2acb3ac9bd8a297134..e45dbf14a8277ae61da33bb7ca19c85d6d11aec0 100644 (file)
@@ -1,19 +1,24 @@
 # British translations for PSPP
-# Copyright (C) 2007, 2008 Free Software Foundation, Inc.
+# Copyright (C) 2007, 2008, 2010 Free Software Foundation, Inc.
 # This file is distributed under the same licence as the PSPP package.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: PSPP 0.7.0\n"
+"Project-Id-Version: PSPP 0.7.6\n"
 "Report-Msgid-Bugs-To: pspp-dev@gnu.org\n"
-"POT-Creation-Date: 2010-06-01 17:55+0200\n"
-"PO-Revision-Date: 2008-11-05 08:17+0900\n"
+"POT-Creation-Date: 2010-10-17 16:50+0200\n"
+"PO-Revision-Date: 2010-10-17 16:51+0200\n"
 "Last-Translator: John Darrington <john@darrington.wattle.id.au>\n"
 "Language-Team: John Darrington <john@darrington.wattle.id.au>\n"
+"Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+#: src/ui/gui/helper.c:194
+msgid "Sorry. The help system hasn't yet been implemented."
+msgstr ""
+
 #: src/ui/gui/psppire-buttonbox.c:275 src/ui/gui/psppire-buttonbox.c:437
 msgid "Continue"
 msgstr ""
@@ -43,12 +48,12 @@ msgid "Paste"
 msgstr ""
 
 #: src/ui/gui/psppire-dictview.c:466 src/language/dictionary/split-file.c:82
-#: src/language/dictionary/sys-file-info.c:150
-#: src/language/dictionary/sys-file-info.c:340
-#: src/language/dictionary/sys-file-info.c:664
+#: src/language/dictionary/sys-file-info.c:149
+#: src/language/dictionary/sys-file-info.c:339
+#: src/language/dictionary/sys-file-info.c:663
 #: src/language/stats/descriptives.c:881
-#: src/language/data-io/data-parser.c:649
-#: src/language/data-io/data-parser.c:688 src/language/data-io/print.c:403
+#: src/language/data-io/data-parser.c:682
+#: src/language/data-io/data-parser.c:721 src/language/data-io/print.c:403
 msgid "Variable"
 msgstr ""
 
@@ -63,13 +68,13 @@ msgstr ""
 
 #: src/data/any-reader.c:56
 #, c-format
-msgid "An error occurred while opening \"%s\": %s."
-msgstr ""
+msgid "An error occurred while opening `%s': %s."
+msgstr "An error occurred while opening ‘%s’: %s."
 
 #: src/data/any-reader.c:101
 #, c-format
-msgid "\"%s\" is not a system or portable file."
-msgstr ""
+msgid "`%s' is not a system or portable file."
+msgstr "‘%s’ is not a system or portable file."
 
 #: src/data/any-reader.c:107 src/data/any-writer.c:63
 msgid "The inline file is not allowed here."
@@ -80,12 +85,12 @@ msgstr ""
 msgid "Month %d is not in acceptable range of 0 to 13."
 msgstr ""
 
-#: src/data/calendar.c:89
+#: src/data/calendar.c:91
 #, c-format
 msgid "Day %d is not in acceptable range of 0 to 31."
 msgstr ""
 
-#: src/data/calendar.c:96
+#: src/data/calendar.c:100
 #, c-format
 msgid "Date %04d-%d-%d is before the earliest acceptable date of 1582-10-15."
 msgstr ""
@@ -96,56 +101,85 @@ msgid ""
 "system-missing, zero, or negative.  These case(s) were ignored."
 msgstr ""
 
-#: src/data/data-in.c:274 src/data/data-in.c:464
+#. TRANSLATORS: this fragment will be interpolated into messages in fh_lock()
+#. that identify types of files.
+#: src/data/csv-file-writer.c:152
+msgid "CSV file"
+msgstr ""
+
+#: src/data/csv-file-writer.c:161 src/data/sys-file-writer.c:218
+#, c-format
+msgid "Error opening `%s' for writing as a system file: %s."
+msgstr "Error opening ‘%s’ for writing as a system file: %s."
+
+#: src/data/csv-file-writer.c:462
+#, c-format
+msgid "An I/O error occurred writing CSV file `%s'."
+msgstr "An I/O error occurred writing CSV file ‘%s’."
+
+#: src/data/data-in.c:172
+#, c-format
+msgid "Data is not valid as format %s: %s"
+msgstr ""
+
+#: src/data/data-in.c:377 src/data/data-in.c:553
 msgid "Field contents are not numeric."
 msgstr ""
 
-#: src/data/data-in.c:276 src/data/data-in.c:466
+#: src/data/data-in.c:379 src/data/data-in.c:555
 msgid "Number followed by garbage."
 msgstr ""
 
-#: src/data/data-in.c:287
+#: src/data/data-in.c:392
 msgid "Invalid numeric syntax."
 msgstr ""
 
-#: src/data/data-in.c:296 src/data/data-in.c:479
+#: src/data/data-in.c:400 src/data/data-in.c:571
 msgid "Too-large number set to system-missing."
 msgstr ""
 
-#: src/data/data-in.c:301 src/data/data-in.c:484
+#: src/data/data-in.c:406 src/data/data-in.c:577
 msgid "Too-small number set to zero."
 msgstr ""
 
-#: src/data/data-in.c:327
+#: src/data/data-in.c:426
 msgid "All characters in field must be digits."
 msgstr ""
 
-#: src/data/data-in.c:350
+#: src/data/data-in.c:445
 msgid "Unrecognized character in field."
 msgstr "Unrecognised character in field."
 
-#: src/data/data-in.c:374 src/data/data-in.c:650
+#: src/data/data-in.c:466 src/data/data-in.c:729
 msgid "Field must have even length."
 msgstr ""
 
-#: src/data/data-in.c:379 src/data/data-in.c:661
+#: src/data/data-in.c:468 src/data/data-in.c:732
 msgid "Field must contain only hex digits."
 msgstr ""
 
-#: src/data/data-in.c:700 src/data/data-in.c:747
+#: src/data/data-in.c:544
+msgid "Invalid zoned decimal syntax."
+msgstr ""
+
+#: src/data/data-in.c:644 src/data/data-in.c:650
+msgid "Invalid syntax for P field."
+msgstr ""
+
+#: src/data/data-in.c:768 src/data/data-in.c:814
 msgid "Syntax error in date field."
 msgstr ""
 
-#: src/data/data-in.c:716
+#: src/data/data-in.c:783
 #, c-format
 msgid "Day (%ld) must be between 1 and 31."
 msgstr ""
 
-#: src/data/data-in.c:763
+#: src/data/data-in.c:828
 msgid "Delimiter expected between fields in date."
 msgstr ""
 
-#: src/data/data-in.c:837
+#: src/data/data-in.c:902
 msgid ""
 "Unrecognized month format.  Months may be specified as Arabic or Roman "
 "numerals or as at least 3 letters of their English names."
@@ -153,45 +187,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:864
+#: src/data/data-in.c:929
 #, c-format
 msgid "Year (%ld) must be between 1582 and 19999."
 msgstr ""
 
-#: src/data/data-in.c:876
+#: src/data/data-in.c:940
 #, c-format
-msgid "Trailing garbage \"%.*s\" following date."
-msgstr ""
+msgid "Trailing garbage `%.*s' following date."
+msgstr "Trailing garbage ‘%.*s’ following date."
 
-#: src/data/data-in.c:892
+#: src/data/data-in.c:954
 msgid "Julian day must have exactly three digits."
 msgstr ""
 
-#: src/data/data-in.c:897
+#: src/data/data-in.c:956
 #, c-format
 msgid "Julian day (%ld) must be between 1 and 366."
 msgstr ""
 
-#: src/data/data-in.c:921
+#: src/data/data-in.c:980
 #, c-format
 msgid "Quarter (%ld) must be between 1 and 4."
 msgstr ""
 
-#: src/data/data-in.c:941
+#: src/data/data-in.c:1001
 #, c-format
 msgid "Week (%ld) must be between 1 and 53."
 msgstr ""
 
-#: src/data/data-in.c:954
+#: src/data/data-in.c:1013
 msgid "Delimiter expected between fields in time."
 msgstr ""
 
-#: src/data/data-in.c:974
+#: src/data/data-in.c:1033
 #, c-format
 msgid "Minute (%ld) must be between 0 and 59."
 msgstr ""
 
-#: src/data/data-in.c:1014
+#: src/data/data-in.c:1071
 msgid ""
 "Unrecognized weekday name.  At least the first two letters of an English "
 "weekday name must be specified."
@@ -199,25 +233,10 @@ msgstr ""
 "Unrecognised weekday name.  At least the first two letters of an English "
 "weekday name must be specified."
 
-#: src/data/data-in.c:1152
+#: src/data/data-in.c:1197
 #, c-format
 msgid "`%c' expected in date field."
-msgstr ""
-
-#: src/data/data-in.c:1193
-#, c-format
-msgid "column %d"
-msgstr ""
-
-#: src/data/data-in.c:1195
-#, c-format
-msgid "columns %d-%d"
-msgstr ""
-
-#: src/data/data-in.c:1199
-#, c-format
-msgid "%s field) "
-msgstr ""
+msgstr "‘%c’ expected in date field."
 
 #: src/data/data-out.c:481
 #, c-format
@@ -241,28 +260,28 @@ msgstr ""
 msgid "scratch"
 msgstr ""
 
-#: src/data/dictionary.c:980
+#: src/data/dictionary.c:981
 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:1283
+#: src/data/dictionary.c:1284
 #, c-format
 msgid "Truncating document line to %d bytes."
 msgstr ""
 
-#: src/data/file-handle-def.c:462
+#: src/data/file-handle-def.c:471
 #, c-format
 msgid "Can't read from %s as a %s because it is already being read as a %s."
 msgstr ""
 
-#: src/data/file-handle-def.c:466
+#: src/data/file-handle-def.c:475
 #, c-format
 msgid "Can't write to %s as a %s because it is already being written as a %s."
 msgstr ""
 
-#: src/data/file-handle-def.c:473
+#: src/data/file-handle-def.c:482
 #, c-format
 msgid "Can't re-open %s as a %s."
 msgstr ""
@@ -270,32 +289,32 @@ msgstr ""
 #: src/data/file-name.c:168
 #, c-format
 msgid "Not opening pipe file `%s' because SAFER option set."
-msgstr ""
+msgstr "Not opening pipe file ‘%s’ because SAFER option set."
 
-#: src/data/format.c:235
+#: src/data/format.c:314
 msgid "Input format"
 msgstr ""
 
-#: src/data/format.c:235
+#: src/data/format.c:314
 msgid "Output format"
 msgstr ""
 
-#: src/data/format.c:244
+#: src/data/format.c:323
 #, c-format
 msgid "Format %s may not be used for input."
 msgstr ""
 
-#: src/data/format.c:251
+#: src/data/format.c:330
 #, c-format
 msgid "%s specifies width %d, but %s requires an even width."
 msgstr ""
 
-#: src/data/format.c:260
+#: src/data/format.c:339
 #, c-format
 msgid "%s %s specifies width %d, but %s requires a width between %d and %d."
 msgstr ""
 
-#: src/data/format.c:269
+#: src/data/format.c:348
 #, c-format
 msgid "%s %s specifies %d decimal place, but %s does not allow any decimals."
 msgid_plural ""
@@ -303,7 +322,7 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/data/format.c:280
+#: src/data/format.c:359
 #, c-format
 msgid ""
 "%s %s specifies %d decimal place, but the given width allows at most %d "
@@ -314,7 +333,7 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/data/format.c:287
+#: src/data/format.c:366
 #, c-format
 msgid ""
 "%s %s specifies %d decimal place, but the given width does not allow for any "
@@ -325,42 +344,42 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/data/format.c:326
+#: src/data/format.c:405
 #, c-format
 msgid "%s variables are not compatible with %s format %s."
 msgstr ""
 
-#: src/data/format.c:327 src/data/sys-file-reader.c:752
-#: src/ui/gui/psppire-var-store.c:628 src/ui/gui/psppire.ui:1960
+#: src/data/format.c:406 src/data/sys-file-reader.c:751
+#: src/ui/gui/psppire-var-store.c:628 src/ui/gui/compute.ui:503
 #: src/ui/gui/var-sheet-dialogs.ui:139
 msgid "String"
 msgstr ""
 
-#: src/data/format.c:327 src/data/sys-file-reader.c:752
-#: src/ui/gui/psppire-var-store.c:621 src/ui/gui/psppire.ui:2040
+#: src/data/format.c:406 src/data/sys-file-reader.c:751
+#: src/ui/gui/psppire-var-store.c:621 src/ui/gui/compute.ui:584
 #: src/ui/gui/var-sheet-dialogs.ui:27
 msgid "Numeric"
 msgstr ""
 
-#: src/data/format.c:328 src/data/sys-file-reader.c:1472
-#: src/data/sys-file-reader.c:1474 src/language/xforms/recode.c:493
-#: src/language/xforms/recode.c:494 src/language/xforms/recode.c:506
-#: src/language/xforms/recode.c:507
+#: src/data/format.c:407 src/data/sys-file-reader.c:1472
+#: src/data/sys-file-reader.c:1474 src/language/xforms/recode.c:496
+#: src/language/xforms/recode.c:497 src/language/xforms/recode.c:509
+#: src/language/xforms/recode.c:510
+#: src/language/dictionary/apply-dictionary.c:77
 #: src/language/dictionary/apply-dictionary.c:78
-#: src/language/dictionary/apply-dictionary.c:79
 msgid "numeric"
 msgstr ""
 
-#: src/data/format.c:328 src/data/sys-file-reader.c:1472
-#: src/data/sys-file-reader.c:1474 src/language/xforms/recode.c:493
-#: src/language/xforms/recode.c:494 src/language/xforms/recode.c:506
-#: src/language/xforms/recode.c:507
+#: src/data/format.c:407 src/data/sys-file-reader.c:1472
+#: src/data/sys-file-reader.c:1474 src/language/xforms/recode.c:496
+#: src/language/xforms/recode.c:497 src/language/xforms/recode.c:509
+#: src/language/xforms/recode.c:510
+#: src/language/dictionary/apply-dictionary.c:77
 #: src/language/dictionary/apply-dictionary.c:78
-#: src/language/dictionary/apply-dictionary.c:79
 msgid "string"
 msgstr ""
 
-#: src/data/format.c:346
+#: src/data/format.c:425
 #, c-format
 msgid "String variable with width %d is not compatible with format %s."
 msgstr ""
@@ -372,13 +391,13 @@ msgstr ""
 
 #: src/data/gnumeric-reader.c:364
 #, c-format
-msgid "Error opening \"%s\" for reading as a Gnumeric file: %s."
-msgstr ""
+msgid "Error opening `%s' for reading as a Gnumeric file: %s."
+msgstr "Error opening ‘%s’ for reading as a Gnumeric file: %s."
 
 #: src/data/gnumeric-reader.c:384
 #, c-format
-msgid "Invalid cell range \"%s\""
-msgstr ""
+msgid "Invalid cell range `%s'"
+msgstr "Invalid cell range ‘%s’"
 
 #: src/data/gnumeric-reader.c:516 src/data/psql-reader.c:187
 #, c-format
@@ -387,216 +406,206 @@ msgstr ""
 
 #: src/data/gnumeric-reader.c:528
 #, c-format
-msgid "Selected sheet or range of spreadsheet \"%s\" is empty."
-msgstr ""
-
-#: src/data/make-file.c:68
-#, c-format
-msgid "%s: Creating temporary file: %s."
-msgstr ""
-
-#: src/data/make-file.c:110
-#, c-format
-msgid "%s: Creating file: %s."
-msgstr ""
+msgid "Selected sheet or range of spreadsheet `%s' is empty."
+msgstr "Selected sheet or range of spreadsheet ‘%s’ is empty."
 
-#: src/data/make-file.c:148
+#: src/data/make-file.c:71
 #, c-format
 msgid "Opening %s for writing: %s."
 msgstr ""
 
-#: src/data/make-file.c:157
+#: src/data/make-file.c:80
 #, c-format
 msgid "Opening stream for %s: %s."
 msgstr ""
 
-#: src/data/make-file.c:186
+#: src/data/make-file.c:109
 #, c-format
 msgid "Creating temporary file to replace %s: %s."
 msgstr ""
 
-#: src/data/make-file.c:197
+#: src/data/make-file.c:120
 #, c-format
 msgid "Creating temporary file %s: %s."
 msgstr ""
 
-#: src/data/make-file.c:209
+#: src/data/make-file.c:132
 #, c-format
 msgid "Opening stream for temporary file %s: %s."
 msgstr ""
 
-#: src/data/make-file.c:250
+#: src/data/make-file.c:173
 #, c-format
 msgid "Replacing %s by %s: %s."
 msgstr ""
 
-#: src/data/make-file.c:278
+#: src/data/make-file.c:201
 #, c-format
 msgid "Removing %s: %s."
 msgstr ""
 
-#: src/data/por-file-reader.c:99
+#: src/data/por-file-reader.c:98
 #, c-format
 msgid "portable file %s corrupt at offset 0x%llx: "
 msgstr ""
 
-#: src/data/por-file-reader.c:128
+#: src/data/por-file-reader.c:129
 #, c-format
 msgid "reading portable file %s at offset 0x%llx: "
 msgstr ""
 
-#: src/data/por-file-reader.c:156
+#: src/data/por-file-reader.c:159
 #, c-format
-msgid "Error closing portable file \"%s\": %s."
-msgstr ""
+msgid "Error closing portable file `%s': %s."
+msgstr "Error closing portable file ‘%s’: %s."
 
-#: src/data/por-file-reader.c:208
+#: src/data/por-file-reader.c:211
 msgid "unexpected end of file"
 msgstr ""
 
 #. TRANSLATORS: this fragment will be interpolated into
 #. messages in fh_lock() that identify types of files.
-#: src/data/por-file-reader.c:267 src/data/por-file-writer.c:149
+#: src/data/por-file-reader.c:270 src/data/por-file-writer.c:148
 msgid "portable file"
 msgstr ""
 
-#: src/data/por-file-reader.c:275
+#: src/data/por-file-reader.c:278
 #, c-format
 msgid ""
-"An error occurred while opening \"%s\" for reading as a portable file: %s."
+"An error occurred while opening `%s' for reading as a portable file: %s."
 msgstr ""
 
-#: src/data/por-file-reader.c:296
+#: src/data/por-file-reader.c:299
 msgid "Data record expected."
 msgstr ""
 
-#: src/data/por-file-reader.c:378
+#: src/data/por-file-reader.c:381
 msgid "Number expected."
 msgstr ""
 
-#: src/data/por-file-reader.c:406
+#: src/data/por-file-reader.c:409
 msgid "Missing numeric terminator."
 msgstr ""
 
-#: src/data/por-file-reader.c:429
+#: src/data/por-file-reader.c:432
 msgid "Invalid integer."
 msgstr ""
 
-#: src/data/por-file-reader.c:440 src/data/por-file-reader.c:460
+#: src/data/por-file-reader.c:443 src/data/por-file-reader.c:463
 #, c-format
 msgid "Bad string length %d."
 msgstr ""
 
-#: src/data/por-file-reader.c:523
+#: src/data/por-file-reader.c:526
 #, c-format
 msgid "%s: Not a portable file."
 msgstr ""
 
-#: src/data/por-file-reader.c:540
+#: src/data/por-file-reader.c:543
 #, c-format
 msgid "Unrecognized version code `%c'."
 msgstr "Unrecognised version code `%c'."
 
-#: src/data/por-file-reader.c:549
+#: src/data/por-file-reader.c:552
 #, c-format
 msgid "Bad date string length %zu."
 msgstr ""
 
-#: src/data/por-file-reader.c:551
+#: src/data/por-file-reader.c:554
 #, c-format
 msgid "Bad time string length %zu."
 msgstr ""
 
-#: src/data/por-file-reader.c:593
+#: src/data/por-file-reader.c:596
 #, c-format
 msgid ""
 "%s: Bad format specifier byte (%d).  Variable will be assigned a default "
 "format."
 msgstr ""
 
-#: src/data/por-file-reader.c:614
+#: src/data/por-file-reader.c:617
 #, c-format
 msgid "Numeric variable %s has invalid format specifier %s."
 msgstr ""
 
-#: src/data/por-file-reader.c:618
+#: src/data/por-file-reader.c:621
 #, c-format
 msgid "String variable %s with width %d has invalid format specifier %s."
 msgstr ""
 
-#: src/data/por-file-reader.c:642
+#: src/data/por-file-reader.c:645
 msgid "Expected variable count record."
 msgstr ""
 
-#: src/data/por-file-reader.c:646
+#: src/data/por-file-reader.c:649
 #, c-format
 msgid "Invalid number of variables %d."
 msgstr ""
 
-#: src/data/por-file-reader.c:655
+#: src/data/por-file-reader.c:658
 #, c-format
 msgid "Weight variable name (%s) truncated."
 msgstr ""
 
-#: src/data/por-file-reader.c:670
+#: src/data/por-file-reader.c:673
 msgid "Expected variable record."
 msgstr ""
 
-#: src/data/por-file-reader.c:674
+#: src/data/por-file-reader.c:677
 #, c-format
 msgid "Invalid variable width %d."
 msgstr ""
 
-#: src/data/por-file-reader.c:681
+#: src/data/por-file-reader.c:684
 #, c-format
 msgid "Invalid variable name `%s' in position %d."
-msgstr ""
+msgstr "Invalid variable name ‘%s’ in position %d."
 
-#: src/data/por-file-reader.c:685 src/data/sys-file-reader.c:606
+#: src/data/por-file-reader.c:688 src/data/sys-file-reader.c:605
 #, c-format
 msgid "Bad width %d for variable %s."
 msgstr ""
 
-#: src/data/por-file-reader.c:700
+#: src/data/por-file-reader.c:703
 #, c-format
 msgid "Duplicate variable name %s in position %d."
 msgstr ""
 
-#: src/data/por-file-reader.c:701
+#: src/data/por-file-reader.c:704
 #, c-format
 msgid "Duplicate variable name %s in position %d renamed to %s."
 msgstr ""
 
-#: src/data/por-file-reader.c:750
+#: src/data/por-file-reader.c:753
 #, c-format
 msgid "Weighting variable %s not present in dictionary."
 msgstr ""
 
-#: src/data/por-file-reader.c:794
+#: src/data/por-file-reader.c:797
 #, c-format
 msgid "Unknown variable %s while parsing value labels."
 msgstr ""
 
-#: src/data/por-file-reader.c:797
+#: src/data/por-file-reader.c:800
 #, c-format
 msgid ""
 "Cannot assign value labels to %s and %s, which have different variable types."
 msgstr ""
 
-#: src/data/por-file-writer.c:141
+#: src/data/por-file-writer.c:140
 #, c-format
 msgid "Invalid decimal digits count %d.  Treating as %d."
 msgstr ""
 
-#: src/data/por-file-writer.c:161
+#: src/data/por-file-writer.c:160
 #, c-format
-msgid "Error opening \"%s\" for writing as a portable file: %s."
-msgstr ""
+msgid "Error opening `%s' for writing as a portable file: %s."
+msgstr "Error opening ‘%s’ for writing as a portable file: %s."
 
-#: src/data/por-file-writer.c:506
+#: src/data/por-file-writer.c:505
 #, c-format
-msgid "An I/O error occurred writing portable file \"%s\"."
-msgstr ""
+msgid "An I/O error occurred writing portable file `%s'."
+msgstr "An I/O error occurred writing portable file ‘%s’."
 
 #: src/data/psql-reader.c:46
 msgid ""
@@ -626,13 +635,13 @@ msgid ""
 "permitted."
 msgstr ""
 
-#: src/data/psql-reader.c:322 src/data/psql-reader.c:347
-#: src/data/psql-reader.c:357
+#: src/data/psql-reader.c:321 src/data/psql-reader.c:346
+#: src/data/psql-reader.c:356
 #, c-format
 msgid "Error from psql source: %s."
 msgstr ""
 
-#: src/data/psql-reader.c:452
+#: src/data/psql-reader.c:451
 #, c-format
 msgid "Unsupported OID %d.  SYSMIS values will be inserted."
 msgstr ""
@@ -650,7 +659,20 @@ msgstr ""
 msgid "scratch file"
 msgstr ""
 
-#: src/data/settings.c:608
+#: src/data/settings.c:388
+msgid ""
+"MXWARNS set to zero.  No further warnings will be given even when "
+"potentially problematic situations are encountered."
+msgstr ""
+
+#: src/data/settings.c:395
+#, c-format
+msgid ""
+"Warnings re-enabled. %d warnings will be issued before aborting syntax "
+"processing."
+msgstr ""
+
+#: src/data/settings.c:639
 #, c-format
 msgid ""
 "%s: Custom currency string `%s' does not contain exactly three periods or "
@@ -661,47 +683,47 @@ msgstr ""
 msgid "Variable suffix too large."
 msgstr ""
 
-#: src/data/sys-file-reader.c:226
+#: src/data/sys-file-reader.c:225
 #, c-format
 msgid "Recoded variable name duplicates an existing `%s' within system file."
-msgstr ""
+msgstr "Recoded variable name duplicates an existing ‘%s’ within system file."
 
 #. TRANSLATORS: this fragment will be interpolated into
 #. messages in fh_lock() that identify types of files.
-#: src/data/sys-file-reader.c:290 src/data/sys-file-writer.c:207
+#: src/data/sys-file-reader.c:289 src/data/sys-file-writer.c:206
 msgid "system file"
 msgstr ""
 
-#: src/data/sys-file-reader.c:297
+#: src/data/sys-file-reader.c:296
 #, c-format
-msgid "Error opening \"%s\" for reading as a system file: %s."
-msgstr ""
+msgid "Error opening `%s' for reading as a system file: %s."
+msgstr "Error opening ‘%s’ for reading as a system file: %s."
 
-#: src/data/sys-file-reader.c:336 tests/dissect-sysfile.c:155
+#: src/data/sys-file-reader.c:335 tests/dissect-sysfile.c:155
 msgid "Misplaced type 4 record."
 msgstr ""
 
-#: src/data/sys-file-reader.c:347 tests/dissect-sysfile.c:166
+#: src/data/sys-file-reader.c:346 tests/dissect-sysfile.c:166
 #, c-format
 msgid "Unrecognized record type %d."
 msgstr "Unrecognised record type %d."
 
-#: src/data/sys-file-reader.c:388
+#: src/data/sys-file-reader.c:387
 #, c-format
 msgid "File header claims %d variable positions but %d were read from file."
 msgstr ""
 
-#: src/data/sys-file-reader.c:428
+#: src/data/sys-file-reader.c:427
 #, c-format
-msgid "Error closing system file \"%s\": %s."
-msgstr ""
+msgid "Error closing system file `%s': %s."
+msgstr "Error closing system file ‘%s’: %s."
 
-#: src/data/sys-file-reader.c:493 src/data/sys-file-reader.c:503
+#: src/data/sys-file-reader.c:492 src/data/sys-file-reader.c:502
 #: tests/dissect-sysfile.c:203 tests/dissect-sysfile.c:213
 msgid "This is not an SPSS system file."
 msgstr ""
 
-#: src/data/sys-file-reader.c:525 tests/dissect-sysfile.c:228
+#: src/data/sys-file-reader.c:524 tests/dissect-sysfile.c:228
 msgid ""
 "Compression bias is not the usual value of 100, or system file uses "
 "unrecognized floating-point format."
@@ -709,154 +731,155 @@ 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:602
+#: src/data/sys-file-reader.c:598
+#, c-format
+msgid "Variable name begins with invalid character `%c'."
+msgstr "Variable name begins with invalid character ‘%c’."
+
+#: src/data/sys-file-reader.c:601
 #, c-format
 msgid "Invalid variable name `%s'."
-msgstr ""
+msgstr "Invalid variable name ‘%s’."
 
-#: src/data/sys-file-reader.c:610
+#: src/data/sys-file-reader.c:609
 #, c-format
 msgid "Duplicate variable name `%s' within system file."
-msgstr ""
+msgstr "Duplicate variable name ‘%s’ within system file."
 
-#: src/data/sys-file-reader.c:618 tests/dissect-sysfile.c:357
+#: src/data/sys-file-reader.c:617 tests/dissect-sysfile.c:357
 msgid "Variable label indicator field is not 0 or 1."
 msgstr ""
 
-#: src/data/sys-file-reader.c:649 tests/dissect-sysfile.c:388
+#: src/data/sys-file-reader.c:648 tests/dissect-sysfile.c:388
 msgid "Numeric missing value indicator field is not -3, -2, 0, 1, 2, or 3."
 msgstr ""
 
-#: src/data/sys-file-reader.c:667 tests/dissect-sysfile.c:403
+#: src/data/sys-file-reader.c:666 tests/dissect-sysfile.c:403
 msgid "String missing value indicator field is not 0, 1, 2, or 3."
 msgstr ""
 
-#: src/data/sys-file-reader.c:699
+#: src/data/sys-file-reader.c:698
 msgid "Missing string continuation record."
 msgstr ""
 
-#: src/data/sys-file-reader.c:733
+#: src/data/sys-file-reader.c:732
 #, c-format
 msgid "Unknown variable format %<PRIu8>."
 msgstr ""
 
-#: src/data/sys-file-reader.c:751
+#: src/data/sys-file-reader.c:750
 #, c-format
 msgid "%s variable %s has invalid %s format %s."
 msgstr ""
 
-#: src/data/sys-file-reader.c:754
+#: src/data/sys-file-reader.c:753
 msgid "print"
 msgstr ""
 
-#: src/data/sys-file-reader.c:754
+#: src/data/sys-file-reader.c:753
 msgid "write"
 msgstr ""
 
-#: src/data/sys-file-reader.c:758
+#: src/data/sys-file-reader.c:757
 msgid "Suppressing further invalid format warnings."
 msgstr ""
 
-#: src/data/sys-file-reader.c:776
+#: src/data/sys-file-reader.c:775
 msgid "Weighting variable must be numeric."
 msgstr ""
 
-#: src/data/sys-file-reader.c:790
+#: src/data/sys-file-reader.c:789
 msgid "Multiple type 6 (document) records."
 msgstr ""
 
-#: src/data/sys-file-reader.c:794
+#: src/data/sys-file-reader.c:793
 #, c-format
 msgid "Number of document lines (%d) must be greater than 0."
 msgstr ""
 
-#: src/data/sys-file-reader.c:802
+#: src/data/sys-file-reader.c:801
 msgid "Document line contains null byte."
 msgstr ""
 
-#: src/data/sys-file-reader.c:893
+#: src/data/sys-file-reader.c:892
 #, 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:920 tests/dissect-sysfile.c:595
+#: src/data/sys-file-reader.c:919 tests/dissect-sysfile.c:595
 #, c-format
 msgid "Bad size (%zu) or count (%zu) field on record type 7, subtype 3."
 msgstr ""
 
-#: src/data/sys-file-reader.c:940
+#: src/data/sys-file-reader.c:939
 #, c-format
 msgid ""
 "Floating-point representation indicated by system file (%d) differs from "
 "expected (%d)."
 msgstr ""
 
-#: src/data/sys-file-reader.c:953 src/language/dictionary/sys-file-info.c:110
+#: src/data/sys-file-reader.c:952 src/language/dictionary/sys-file-info.c:109
 msgid "Little Endian"
 msgstr ""
 
-#: src/data/sys-file-reader.c:953 src/language/dictionary/sys-file-info.c:109
+#: src/data/sys-file-reader.c:952 src/language/dictionary/sys-file-info.c:108
 msgid "Big Endian"
 msgstr ""
 
-#: src/data/sys-file-reader.c:954
+#: src/data/sys-file-reader.c:953
 #, c-format
 msgid ""
 "Integer format indicated by system file (%s) differs from expected (%s)."
 msgstr ""
 
-#: src/data/sys-file-reader.c:1011 tests/dissect-sysfile.c:626
+#: src/data/sys-file-reader.c:1010 tests/dissect-sysfile.c:626
 #, c-format
 msgid "Bad size (%zu) or count (%zu) on extension 4."
 msgstr ""
 
-#: src/data/sys-file-reader.c:1015 src/data/sys-file-reader.c:1019
-#: src/data/sys-file-reader.c:1023 tests/dissect-sysfile.c:631
+#: src/data/sys-file-reader.c:1014 src/data/sys-file-reader.c:1018
+#: src/data/sys-file-reader.c:1022 tests/dissect-sysfile.c:631
 #: tests/dissect-sysfile.c:636 tests/dissect-sysfile.c:641
 #, c-format
 msgid "File specifies unexpected value %g as %s."
 msgstr ""
 
-#: src/data/sys-file-reader.c:1056
-#, c-format
-msgid "Missing space following 'C' at offset %zu in MRSETS record"
-msgstr ""
-
-#: src/data/sys-file-reader.c:1074 tests/dissect-sysfile.c:692
+#: src/data/sys-file-reader.c:1055 src/data/sys-file-reader.c:1073
+#: tests/dissect-sysfile.c:692
 #, c-format
-msgid "Missing space following 'E' at offset %zu in MRSETS record"
+msgid "Missing space following `%c' at offset %zu in MRSETS record"
 msgstr ""
 
-#: src/data/sys-file-reader.c:1083 tests/dissect-sysfile.c:701
+#: src/data/sys-file-reader.c:1082 tests/dissect-sysfile.c:701
 #, c-format
 msgid ""
-"Unexpected label source value \"%s\" following 'E' at offset %zu in MRSETS "
+"Unexpected label source value `%s' following `E' at offset %zu in MRSETS "
 "record"
 msgstr ""
 
-#: src/data/sys-file-reader.c:1089
+#: src/data/sys-file-reader.c:1088
 #, c-format
-msgid "Missing 'C', 'D', or 'E' at offset %zu in MRSETS record."
+msgid "Missing `C', `D', or `E' at offset %zu in MRSETS record."
 msgstr ""
 
-#: src/data/sys-file-reader.c:1118
+#: src/data/sys-file-reader.c:1117
 #, c-format
 msgid "Missing new-line parsing variable names at offset %zu in MRSETS record."
 msgstr ""
 
-#: src/data/sys-file-reader.c:1129
+#: src/data/sys-file-reader.c:1128
 #, c-format
 msgid "Duplicate variable name %s at offset %zu in MRSETS record."
 msgstr ""
 
-#: src/data/sys-file-reader.c:1142
+#: src/data/sys-file-reader.c:1141
 #, c-format
 msgid "MRSET %s contains both string and numeric variables."
 msgstr ""
 
-#: src/data/sys-file-reader.c:1157
+#: src/data/sys-file-reader.c:1156
 #, c-format
 msgid "MRSET %s has only %zu variables."
 msgstr ""
@@ -881,12 +904,12 @@ msgstr ""
 #: src/data/sys-file-reader.c:1271
 #, c-format
 msgid "Long variable mapping from %s to invalid variable name `%s'."
-msgstr ""
+msgstr "Long variable mapping from %s to invalid variable name ‘%s’."
 
 #: src/data/sys-file-reader.c:1281
 #, c-format
 msgid "Duplicate long variable name `%s' within system file."
-msgstr ""
+msgstr "Duplicate long variable name ‘%s’ within system file."
 
 #: src/data/sys-file-reader.c:1334
 #, c-format
@@ -950,8 +973,8 @@ msgstr ""
 
 #: src/data/sys-file-reader.c:1505 src/data/sys-file-reader.c:1686
 #, c-format
-msgid "Duplicate value label for \"%.*s\" on %s."
-msgstr ""
+msgid "Duplicate value label for `%.*s' on %s."
+msgstr "Duplicate value label for ‘%.*s’ on %s."
 
 #: src/data/sys-file-reader.c:1543
 #, c-format
@@ -1056,29 +1079,24 @@ msgstr ""
 msgid "Expecting space at offset %zu following %zu-byte string."
 msgstr ""
 
-#: src/data/sys-file-reader.c:2347 tests/dissect-sysfile.c:1356
+#: src/data/sys-file-reader.c:2349 tests/dissect-sysfile.c:1356
 #, c-format
 msgid "System error: %s."
 msgstr ""
 
-#: src/data/sys-file-reader.c:2349 tests/dissect-sysfile.c:1358
+#: src/data/sys-file-reader.c:2351 tests/dissect-sysfile.c:1358
 msgid "Unexpected end of file."
 msgstr ""
 
-#: src/data/sys-file-writer.c:180
+#: src/data/sys-file-writer.c:179
 #, c-format
 msgid "Unknown system file version %d. Treating as version %d."
 msgstr ""
 
-#: src/data/sys-file-writer.c:219
+#: src/data/sys-file-writer.c:985
 #, c-format
-msgid "Error opening \"%s\" for writing as a system file: %s."
-msgstr ""
-
-#: src/data/sys-file-writer.c:989
-#, c-format
-msgid "An I/O error occurred writing system file \"%s\"."
-msgstr ""
+msgid "An I/O error occurred writing system file `%s'."
+msgstr "An I/O error occurred writing system file ‘%s’."
 
 #: src/data/variable.c:206
 #, c-format
@@ -1090,7 +1108,7 @@ msgstr ""
 #: src/data/variable.c:218
 #, c-format
 msgid "Character `%c' (in %s) may not appear in a variable name."
-msgstr ""
+msgstr "Character ‘%c’ (in %s) may not appear in a variable name."
 
 #: src/data/variable.c:244
 msgid "Variable name cannot be empty string."
@@ -1104,241 +1122,227 @@ msgstr ""
 #: src/data/variable.c:258
 #, c-format
 msgid "`%s' may not be used as a variable name because it is a reserved word."
-msgstr ""
-
-#: src/language/syntax-file.c:95
-#, c-format
-msgid "Opening `%s': %s."
-msgstr ""
+msgstr "‘%s’ may not be used as a variable name because it is a reserved word."
 
-#: src/language/syntax-file.c:109
+#: src/language/syntax-file.c:100
 #, c-format
 msgid "Reading `%s': %s."
-msgstr ""
+msgstr "Reading ‘%s’: %s."
 
-#: src/language/syntax-file.c:126
+#: src/language/syntax-file.c:117
 #, c-format
 msgid "Closing `%s': %s."
-msgstr ""
+msgstr "Closing ‘%s’: %s."
 
-#: src/language/command.c:205 src/language/expressions/parse.c:1267
+#: src/language/syntax-file.c:138
+#, c-format
+msgid "Opening `%s': %s."
+msgstr "Opening ‘%s’: %s."
+
+#: src/language/command.c:197 src/language/expressions/parse.c:1270
 #: src/language/utilities/set.q:213
 #, c-format
 msgid "%s is not yet implemented."
 msgstr ""
 
-#: src/language/command.c:210
+#: src/language/command.c:202
 #, c-format
 msgid "%s may be used only in testing mode."
 msgstr ""
 
-#: src/language/command.c:215
+#: src/language/command.c:207
 #, c-format
 msgid "%s may be used only in enhanced syntax mode."
 msgstr ""
 
-#: src/language/command.c:239
+#: src/language/command.c:231
 msgid "Error encountered while ERROR=STOP is effective."
 msgstr ""
 
-#: src/language/command.c:484
+#: src/language/command.c:476
 msgid "expecting command name"
 msgstr ""
 
-#: src/language/command.c:498
+#: src/language/command.c:490
 #, c-format
 msgid "Unknown command %s."
 msgstr ""
 
-#: src/language/command.c:623
+#: src/language/command.c:615
 #, c-format
 msgid "%s is allowed only before the active file has been defined."
 msgstr ""
 
-#: src/language/command.c:627
+#: src/language/command.c:619
 #, c-format
 msgid "%s is allowed only after the active file has been defined."
 msgstr ""
 
-#: src/language/command.c:631
+#: src/language/command.c:623
 #, c-format
 msgid "%s is allowed only inside INPUT PROGRAM."
 msgstr ""
 
-#: src/language/command.c:635
+#: src/language/command.c:627
 #, c-format
 msgid "%s is allowed only inside FILE TYPE."
 msgstr ""
 
-#: src/language/command.c:642
+#: src/language/command.c:634
 #, c-format
 msgid ""
 "%s is allowed only before the active file has been defined or inside INPUT "
 "PROGRAM."
 msgstr ""
 
-#: src/language/command.c:646
+#: src/language/command.c:638
 #, c-format
 msgid ""
 "%s is allowed only before the active file has been defined or inside FILE "
 "TYPE."
 msgstr ""
 
-#: src/language/command.c:650
+#: src/language/command.c:642
 #, c-format
 msgid ""
 "%s is allowed only after the active file has been defined or inside INPUT "
 "PROGRAM."
 msgstr ""
 
-#: src/language/command.c:654
+#: src/language/command.c:646
 #, c-format
 msgid ""
 "%s is allowed only after the active file has been defined or inside FILE "
 "TYPE."
 msgstr ""
 
-#: src/language/command.c:658
+#: src/language/command.c:650
 #, c-format
 msgid "%s is allowed only inside INPUT PROGRAM or inside FILE TYPE."
 msgstr ""
 
-#: src/language/command.c:664
+#: src/language/command.c:656
 #, c-format
 msgid ""
 "%s is allowed only after the active file has been defined, inside INPUT "
 "PROGRAM, or inside FILE TYPE."
 msgstr ""
 
-#: src/language/command.c:669
+#: src/language/command.c:661
 #, c-format
 msgid ""
 "%s is allowed only before the active file has been defined, inside INPUT "
 "PROGRAM, or inside FILE TYPE."
 msgstr ""
 
-#: src/language/command.c:687 src/language/command.c:689
+#: src/language/command.c:679 src/language/command.c:681
 #, c-format
 msgid "%s is not allowed inside %s."
 msgstr ""
 
-#: src/language/command.c:768 src/language/command.c:876
-#: src/language/utilities/permissions.c:98
+#: src/language/command.c:760 src/language/utilities/host.c:128
+#: src/language/utilities/permissions.c:101
 msgid "This command not allowed when the SAFER option is set."
 msgstr ""
 
-#: src/language/command.c:780
+#: src/language/command.c:772
 #, c-format
 msgid "Error removing `%s': %s."
-msgstr ""
-
-#: src/language/command.c:830
-#, c-format
-msgid "Couldn't fork: %s."
-msgstr ""
-
-#: src/language/command.c:845
-msgid "Interactive shell not supported on this platform."
-msgstr ""
-
-#: src/language/command.c:857
-msgid "Command shell not supported on this platform."
-msgstr ""
-
-#: src/language/command.c:863
-#, c-format
-msgid "Error executing command: %s."
-msgstr ""
+msgstr "Error removing ‘%s’: %s."
 
-#: src/language/lexer/lexer.c:284
+#: src/language/lexer/lexer.c:263
 #, c-format
 msgid "%s does not form a valid number."
 msgstr ""
 
-#: src/language/lexer/lexer.c:390
+#: src/language/lexer/lexer.c:369
 #, c-format
 msgid "Bad character in input: `%s'."
-msgstr ""
+msgstr "Bad character in input: ‘%s’."
 
-#: src/language/lexer/lexer.c:427
+#: src/language/lexer/lexer.c:402
 #, c-format
 msgid "Subcommand %s may only be specified once."
 msgstr ""
 
-#: src/language/lexer/lexer.c:435
+#: src/language/lexer/lexer.c:410
 #, c-format
 msgid "missing required subcommand %s"
 msgstr ""
 
-#: src/language/lexer/lexer.c:464
-#, c-format
-msgid "Syntax error %s at %s."
+#: src/language/lexer/lexer.c:423
+msgid "Syntax error at end of file"
 msgstr ""
 
-#: src/language/lexer/lexer.c:467
-#, c-format
-msgid "Syntax error at %s."
+#: src/language/lexer/lexer.c:425
+msgid "Syntax error at end of command"
 msgstr ""
 
-#: src/language/lexer/lexer.c:479 src/language/xforms/select-if.c:60
-#: src/language/stats/autorecode.c:144 src/language/data-io/print-space.c:73
+#: src/language/lexer/lexer.c:429
+#, c-format
+msgid "Syntax error at `%s'"
+msgstr "Syntax error at ‘%s’"
+
+#: src/language/lexer/lexer.c:457 src/language/xforms/select-if.c:60
+#: src/language/stats/autorecode.c:161 src/language/stats/npar.c:310
+#: src/language/data-io/print-space.c:73
 msgid "expecting end of command"
 msgstr ""
 
-#: src/language/lexer/lexer.c:601 src/language/lexer/lexer.c:618
+#: src/language/lexer/lexer.c:579 src/language/lexer/lexer.c:596
 #, c-format
 msgid "expecting `%s'"
-msgstr ""
+msgstr "expecting ‘%s’"
 
-#: src/language/lexer/lexer.c:632
+#: src/language/lexer/lexer.c:610
 msgid "expecting string"
 msgstr ""
 
-#: src/language/lexer/lexer.c:646
+#: src/language/lexer/lexer.c:624
 msgid "expecting integer"
 msgstr ""
 
-#: src/language/lexer/lexer.c:659
+#: src/language/lexer/lexer.c:637
 msgid "expecting number"
 msgstr ""
 
-#: src/language/lexer/lexer.c:671
+#: src/language/lexer/lexer.c:649
 msgid "expecting identifier"
 msgstr ""
 
-#: src/language/lexer/lexer.c:1065
+#: src/language/lexer/lexer.c:1042
 msgid "binary"
 msgstr ""
 
-#: src/language/lexer/lexer.c:1070
+#: src/language/lexer/lexer.c:1047
 msgid "octal"
 msgstr ""
 
-#: src/language/lexer/lexer.c:1075
+#: src/language/lexer/lexer.c:1052
 msgid "hex"
 msgstr ""
 
-#: src/language/lexer/lexer.c:1085
+#: src/language/lexer/lexer.c:1062
 #, 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:1091
 #, c-format
 msgid "`%c' is not a valid %s digit."
-msgstr ""
+msgstr "‘%c’ is not a valid %s digit."
 
-#: src/language/lexer/lexer.c:1148
+#: src/language/lexer/lexer.c:1125
 msgid "Unterminated string constant."
 msgstr ""
 
-#: src/language/lexer/lexer.c:1202
+#: src/language/lexer/lexer.c:1179
 msgid "Unexpected end of file in string concatenation."
 msgstr ""
 
-#: src/language/lexer/lexer.c:1210
+#: src/language/lexer/lexer.c:1187
 msgid "String expected following `+'."
-msgstr ""
+msgstr "String expected following ‘+’."
 
 #: src/language/lexer/format-parser.c:88
 msgid "expecting valid format specifier"
@@ -1348,34 +1352,34 @@ msgstr ""
 #: src/language/lexer/format-parser.c:126
 #: src/language/data-io/placement-parser.c:226
 #, c-format
-msgid "Unknown format type \"%s\"."
-msgstr ""
+msgid "Unknown format type `%s'."
+msgstr "Unknown format type ‘%s’."
 
 #: src/language/lexer/format-parser.c:121
 msgid "expecting format type"
 msgstr ""
 
-#: src/language/lexer/value-parser.c:60
+#: src/language/lexer/value-parser.c:64
 #, c-format
 msgid ""
 "Low end of range (%g) is below high end (%g).  The range will be treated as "
 "reversed."
 msgstr ""
 
-#: src/language/lexer/value-parser.c:68
+#: src/language/lexer/value-parser.c:72
 #, c-format
 msgid "Ends of range are equal (%g)."
 msgstr ""
 
-#: src/language/lexer/value-parser.c:76
+#: src/language/lexer/value-parser.c:80
 msgid "LO or LOWEST must be part of a range."
 msgstr ""
 
-#: src/language/lexer/value-parser.c:109
+#: src/language/lexer/value-parser.c:117
 msgid "System-missing value is not valid here."
 msgstr ""
 
-#: src/language/lexer/value-parser.c:117
+#: src/language/lexer/value-parser.c:125
 msgid "expecting number or data string"
 msgstr ""
 
@@ -1454,20 +1458,20 @@ msgstr ""
 msgid "Bad bounds in use of TO convention."
 msgstr ""
 
-#: src/language/xforms/compute.c:149 src/language/xforms/compute.c:203
+#: src/language/xforms/compute.c:149 src/language/xforms/compute.c:204
 #, c-format
 msgid ""
-"When executing COMPUTE: SYSMIS is not a valid value as an index into vector %"
-"s."
+"When executing COMPUTE: SYSMIS is not a valid value as an index into vector "
+"%s."
 msgstr ""
 
-#: src/language/xforms/compute.c:153 src/language/xforms/compute.c:210
+#: src/language/xforms/compute.c:153 src/language/xforms/compute.c:211
 #, c-format
 msgid ""
 "When executing COMPUTE: %g is not a valid value as an index into vector %s."
 msgstr ""
 
-#: src/language/xforms/compute.c:353
+#: src/language/xforms/compute.c:355
 #, c-format
 msgid "There is no vector named %s."
 msgstr ""
@@ -1485,44 +1489,44 @@ msgstr ""
 msgid "Cannot sample %d observations from a population of %d."
 msgstr ""
 
-#: src/language/xforms/recode.c:248
+#: src/language/xforms/recode.c:250
 msgid ""
 "Inconsistent target variable types.  Target variables must be all numeric or "
 "all string."
 msgstr ""
 
-#: src/language/xforms/recode.c:269
+#: src/language/xforms/recode.c:271
 msgid "CONVERT requires string input values and numeric output values."
 msgstr ""
 
-#: src/language/xforms/recode.c:324
+#: src/language/xforms/recode.c:326
 msgid "THRU is not allowed with string variables."
 msgstr ""
 
-#: src/language/xforms/recode.c:403
+#: src/language/xforms/recode.c:406
 msgid "expecting output value"
 msgstr ""
 
-#: src/language/xforms/recode.c:460
+#: src/language/xforms/recode.c:463
 #, 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:475
+#: src/language/xforms/recode.c:478
 #, 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:491
+#: src/language/xforms/recode.c:494
 #, c-format
 msgid "INTO is required with %s input values and %s output values."
 msgstr ""
 
-#: src/language/xforms/recode.c:504
+#: src/language/xforms/recode.c:507
 #, c-format
 msgid "Type mismatch.  Cannot store %s data in %s variable %s."
 msgstr ""
@@ -1562,7 +1566,7 @@ msgstr ""
 msgid "Only one index clause may be specified."
 msgstr ""
 
-#: src/language/control/temporary.c:46
+#: src/language/control/temporary.c:45
 msgid ""
 "This command may only appear once between procedures and procedure-like "
 "commands."
@@ -1570,39 +1574,43 @@ msgstr ""
 
 #: src/language/control/repeat.c:172
 #, c-format
-msgid "Dummy variable name \"%s\" hides dictionary variable \"%s\"."
-msgstr ""
+msgid "Dummy variable name `%s' hides dictionary variable `%s'."
+msgstr "Dummy variable name ‘%s’ hides dictionary variable ‘%s’."
 
 #: src/language/control/repeat.c:177
 #, c-format
-msgid "Dummy variable name \"%s\" is given twice."
-msgstr ""
+msgid "Dummy variable name `%s' is given twice."
+msgstr "Dummy variable name ‘%s’ is given twice."
 
 #: src/language/control/repeat.c:223
 #, c-format
 msgid ""
-"Dummy variable \"%.*s\" had %d substitutions, so \"%.*s\" must also, but %d "
-"were specified."
+"Dummy variable `%.*s' had %d substitutions, so `%.*s' must also, but %d were "
+"specified."
+msgstr ""
+
+#: src/language/control/repeat.c:310
+msgid "DO REPEAT without END REPEAT."
 msgstr ""
 
-#: src/language/control/repeat.c:335
+#: src/language/control/repeat.c:338
 msgid "DO REPEAT may not nest in compatibility mode."
 msgstr ""
 
-#: src/language/control/repeat.c:437
+#: src/language/control/repeat.c:440
 msgid "Ranges may only have integer bounds"
 msgstr ""
 
-#: src/language/control/repeat.c:446
+#: src/language/control/repeat.c:449
 #, c-format
 msgid "%g TO %g is an invalid range."
 msgstr ""
 
-#: src/language/control/repeat.c:481
+#: src/language/control/repeat.c:484
 msgid "String expected."
 msgstr ""
 
-#: src/language/control/repeat.c:500
+#: src/language/control/repeat.c:503
 msgid "No matching DO REPEAT."
 msgstr ""
 
@@ -1611,15 +1619,24 @@ msgid "Attribute array index must be between 1 and 65535."
 msgstr ""
 
 #: src/language/dictionary/attributes.c:189
-msgid "expecting ATTRIBUTE= or DELETE="
+#: src/language/data-io/get-data.c:314 src/language/data-io/get-data.c:352
+#: src/language/data-io/get.c:99 src/language/data-io/save-translate.c:118
+#: src/language/data-io/save-translate.c:135
+#: src/language/data-io/save-translate.c:148
+#: src/language/data-io/save-translate.c:194
+#: src/language/data-io/save-translate.c:208
+#: src/language/data-io/save-translate.c:226 src/language/data-io/save.c:216
+#: src/language/data-io/save.c:231 src/language/data-io/save.c:259
+#, c-format
+msgid "expecting %s or %s"
 msgstr ""
 
-#: src/language/dictionary/apply-dictionary.c:75
+#: src/language/dictionary/apply-dictionary.c:74
 #, c-format
 msgid "Variable %s is %s in target file, but %s in source file."
 msgstr ""
 
-#: src/language/dictionary/apply-dictionary.c:115
+#: src/language/dictionary/apply-dictionary.c:114
 msgid "No matching variables found between the source and target files."
 msgstr ""
 
@@ -1637,102 +1654,98 @@ msgstr ""
 
 #: src/language/dictionary/formats.c:90
 msgid "`(' expected after variable list."
-msgstr ""
+msgstr "‘(’ expected after variable list."
 
 #: src/language/dictionary/formats.c:100 src/language/dictionary/numeric.c:74
 msgid "`)' expected after output format."
-msgstr ""
+msgstr "‘)’ expected after output format."
 
-#: src/language/dictionary/missing-values.c:56
-#: src/language/stats/aggregate.c:459
-msgid "expecting `('"
-msgstr ""
-
-#: src/language/dictionary/missing-values.c:72
+#: src/language/dictionary/missing-values.c:69
 #, c-format
 msgid ""
 "Cannot mix numeric variables (e.g. %s) and string variables (e.g. %s) within "
 "a single list."
 msgstr ""
 
-#: src/language/dictionary/missing-values.c:116
+#: src/language/dictionary/missing-values.c:113
 #, c-format
 msgid "Truncating missing value to maximum acceptable length (%d bytes)."
 msgstr ""
 
-#: src/language/dictionary/missing-values.c:138
+#: src/language/dictionary/missing-values.c:135
 #, c-format
 msgid "Missing values provided are too long to assign to variable of width %d."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:92
+#: src/language/dictionary/modify-variables.c:91
 msgid ""
 "MODIFY VARS may not be used after TEMPORARY.  Temporary transformations will "
 "be made permanent."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:114
-#: src/language/dictionary/modify-variables.c:177
+#: src/language/dictionary/modify-variables.c:113
+#: src/language/dictionary/modify-variables.c:176
+#: src/language/data-io/inpt-pgm.c:288
 #, c-format
 msgid "%s subcommand may be given at most once."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:137
+#: src/language/dictionary/modify-variables.c:136
 msgid "Cannot specify ALL after specifying a set of variables."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:147
-#: src/language/dictionary/modify-variables.c:190
+#: src/language/dictionary/modify-variables.c:146
+#: src/language/dictionary/modify-variables.c:189
 #, c-format
 msgid "`(' expected on %s subcommand."
-msgstr ""
+msgstr "‘(’ expected on %s subcommand."
 
-#: src/language/dictionary/modify-variables.c:159
+#: src/language/dictionary/modify-variables.c:158
 msgid "`)' expected following variable names on REORDER subcommand."
-msgstr ""
+msgstr "‘)’ expected following variable names on REORDER subcommand."
 
-#: src/language/dictionary/modify-variables.c:199
+#: src/language/dictionary/modify-variables.c:198
 msgid ""
 "`=' expected between lists of new and old variable names on RENAME "
 "subcommand."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:208
-#: src/language/dictionary/rename-variables.c:77
+#: src/language/dictionary/modify-variables.c:207
+#: src/language/dictionary/rename-variables.c:76
 #, c-format
 msgid ""
-"Differing number of variables in old name list (%zu) and in new name list (%"
-"zu)."
+"Differing number of variables in old name list (%zu) and in new name list "
+"(%zu)."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:219
+#: src/language/dictionary/modify-variables.c:218
 msgid "`)' expected after variable lists on RENAME subcommand."
-msgstr ""
+msgstr "‘)’ expected after variable lists on RENAME subcommand."
 
-#: src/language/dictionary/modify-variables.c:233
+#: src/language/dictionary/modify-variables.c:232
 msgid ""
 "KEEP subcommand may be given at most once.  It may not be given in "
 "conjunction with the DROP subcommand."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:276
+#: src/language/dictionary/modify-variables.c:275
 msgid ""
 "DROP subcommand may be given at most once.  It may not be given in "
 "conjunction with the KEEP subcommand."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:302
+#: src/language/dictionary/modify-variables.c:301
 #, c-format
 msgid "Unrecognized subcommand name `%s'."
 msgstr "Unrecognised subcommand name `%s'."
 
-#: src/language/dictionary/modify-variables.c:304
+#: src/language/dictionary/modify-variables.c:303
 msgid "Subcommand name expected."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:312
+#: src/language/dictionary/modify-variables.c:311
 msgid "`/' or `.' expected."
-msgstr ""
+msgstr "‘/’ or ‘.’ expected."
 
 #: src/language/dictionary/mrsets.c:98
 #, c-format
@@ -1815,8 +1828,8 @@ msgstr ""
 #: src/language/dictionary/mrsets.c:427
 #, c-format
 msgid ""
-"Variables specified on MCGROUP should have the same categories, but %s and %"
-"s (and possibly others) in multiple category group %s have different value "
+"Variables specified on MCGROUP should have the same categories, but %s and "
+"%s (and possibly others) in multiple category group %s have different value "
 "labels for value %s."
 msgstr ""
 
@@ -1856,10 +1869,10 @@ msgstr ""
 
 #: src/language/dictionary/mrsets.c:568
 #: src/language/dictionary/split-file.c:84
-#: src/language/dictionary/sys-file-info.c:344
-#: src/language/dictionary/sys-file-info.c:583
+#: src/language/dictionary/sys-file-info.c:343
+#: src/language/dictionary/sys-file-info.c:582
 #: src/ui/gui/psppire-var-sheet.c:538 src/ui/gui/psppire-var-store.c:836
-#: src/ui/gui/crosstabs.ui:292 src/ui/gui/psppire.ui:1924
+#: src/ui/gui/compute.ui:467 src/ui/gui/crosstabs.ui:292
 msgid "Label"
 msgstr ""
 
@@ -1906,262 +1919,258 @@ msgstr ""
 msgid "Format type %s may not be used with a string variable."
 msgstr ""
 
-#: src/language/dictionary/rename-variables.c:49
+#: src/language/dictionary/rename-variables.c:48
 msgid ""
 "RENAME VARS may not be used after TEMPORARY.  Temporary transformations will "
 "be made permanent."
 msgstr ""
 
-#: src/language/dictionary/rename-variables.c:59
+#: src/language/dictionary/rename-variables.c:58
 msgid "`(' expected."
-msgstr ""
+msgstr "‘(’ expected."
 
-#: src/language/dictionary/rename-variables.c:67
+#: src/language/dictionary/rename-variables.c:66
 msgid "`=' expected between lists of new and old variable names."
-msgstr ""
+msgstr "‘=’ expected between lists of new and old variable names."
 
-#: src/language/dictionary/rename-variables.c:88
+#: src/language/dictionary/rename-variables.c:87
 msgid "`)' expected after variable names."
-msgstr ""
+msgstr "‘)’ expected after variable names."
 
-#: src/language/dictionary/rename-variables.c:98
+#: src/language/dictionary/rename-variables.c:97
 #, c-format
 msgid "Renaming would duplicate variable name %s."
 msgstr ""
 
 #: src/language/dictionary/split-file.c:83
-#: src/language/dictionary/sys-file-info.c:429
-#: src/language/dictionary/sys-file-info.c:582
-#: src/language/stats/crosstabs.q:1214 src/language/stats/crosstabs.q:1241
-#: src/language/stats/crosstabs.q:1264 src/language/stats/crosstabs.q:1289
+#: src/language/dictionary/sys-file-info.c:428
+#: src/language/dictionary/sys-file-info.c:581
+#: src/language/stats/reliability.c:758 src/language/stats/reliability.c:769
+#: src/language/stats/crosstabs.q:1206 src/language/stats/crosstabs.q:1233
+#: src/language/stats/crosstabs.q:1256 src/language/stats/crosstabs.q:1281
 #: src/language/stats/examine.q:1841 src/language/stats/frequencies.q:813
-#: src/language/stats/reliability.q:568 src/language/stats/reliability.q:579
 msgid "Value"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:95
+#: src/language/dictionary/sys-file-info.c:94
 msgid "File:"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:97 src/ui/gui/psppire.ui:1862
+#: src/language/dictionary/sys-file-info.c:96 src/ui/gui/compute.ui:405
 #: src/ui/gui/recode.ui:859
 msgid "Label:"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:101
+#: src/language/dictionary/sys-file-info.c:100
 msgid "No label."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:104
+#: src/language/dictionary/sys-file-info.c:103
 msgid "Created:"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:107
+#: src/language/dictionary/sys-file-info.c:106
 msgid "Integer Format:"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:111
-#: src/language/dictionary/sys-file-info.c:119
-#: src/language/dictionary/sys-file-info.c:124
-#: src/language/dictionary/sys-file-info.c:143
+#: src/language/dictionary/sys-file-info.c:110
+#: src/language/dictionary/sys-file-info.c:118
+#: src/language/dictionary/sys-file-info.c:123
+#: src/language/dictionary/sys-file-info.c:142
 msgid "Unknown"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:112
+#: src/language/dictionary/sys-file-info.c:111
 msgid "Real Format:"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:114
+#: src/language/dictionary/sys-file-info.c:113
 msgid "IEEE 754 LE."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:115
+#: src/language/dictionary/sys-file-info.c:114
 msgid "IEEE 754 BE."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:116
+#: src/language/dictionary/sys-file-info.c:115
 msgid "VAX D."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:117
+#: src/language/dictionary/sys-file-info.c:116
 msgid "VAX G."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:118
+#: src/language/dictionary/sys-file-info.c:117
 msgid "IBM 390 Hex Long."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:120 src/ui/gui/descriptives.ui:85
-#: src/ui/gui/factor.ui:173 src/ui/gui/recode.ui:960
+#: src/language/dictionary/sys-file-info.c:119 src/ui/gui/descriptives.ui:85
+#: src/ui/gui/factor.ui:181 src/ui/gui/recode.ui:960
 msgid "Variables:"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:122
+#: src/language/dictionary/sys-file-info.c:121
 msgid "Cases:"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:127
+#: src/language/dictionary/sys-file-info.c:126
 msgid "Type:"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:128
-#: src/ui/gui/psppire-data-window.c:634
+#: src/language/dictionary/sys-file-info.c:127
+#: src/ui/gui/psppire-data-window.c:635
 msgid "System File"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:129
+#: src/language/dictionary/sys-file-info.c:128
 msgid "Weight:"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:134
+#: src/language/dictionary/sys-file-info.c:133
 msgid "Not weighted."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:136
+#: src/language/dictionary/sys-file-info.c:135
 msgid "Mode:"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:138
+#: src/language/dictionary/sys-file-info.c:137
 #, c-format
 msgid "Compression %s."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:138
+#: src/language/dictionary/sys-file-info.c:137
 msgid "on"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:138
+#: src/language/dictionary/sys-file-info.c:137
 msgid "off"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:141
+#: src/language/dictionary/sys-file-info.c:140
 msgid "Charset:"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:151
-#: src/language/dictionary/sys-file-info.c:344
+#: src/language/dictionary/sys-file-info.c:150
+#: src/language/dictionary/sys-file-info.c:343
 msgid "Description"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:152
-#: src/language/dictionary/sys-file-info.c:346
-#: src/language/dictionary/sys-file-info.c:663
+#: src/language/dictionary/sys-file-info.c:151
+#: src/language/dictionary/sys-file-info.c:345
+#: src/language/dictionary/sys-file-info.c:662
 msgid "Position"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:199
+#: src/language/dictionary/sys-file-info.c:198
 msgid "The active file does not have a file label."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:202
+#: src/language/dictionary/sys-file-info.c:201
 msgid "File label:"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:277
+#: src/language/dictionary/sys-file-info.c:276
 msgid "No variables to display."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:291
+#: src/language/dictionary/sys-file-info.c:290
 msgid "Macros not supported."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:300
+#: src/language/dictionary/sys-file-info.c:299
 msgid "The active file dictionary does not contain any documents."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:308
+#: src/language/dictionary/sys-file-info.c:307
 msgid "Documents in the active file:"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:428
+#: src/language/dictionary/sys-file-info.c:427
 msgid "Attribute"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:484
+#: src/language/dictionary/sys-file-info.c:483
 #, c-format
 msgid "Format: %s"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:491
+#: src/language/dictionary/sys-file-info.c:490
 #, c-format
 msgid "Print Format: %s"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:495
+#: src/language/dictionary/sys-file-info.c:494
 #, c-format
 msgid "Write Format: %s"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:508
+#: src/language/dictionary/sys-file-info.c:507
 #, c-format
 msgid "Measure: %s"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:509
+#: src/language/dictionary/sys-file-info.c:508
 #: src/ui/gui/psppire-var-sheet.c:111
 msgid "Nominal"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:510
+#: src/language/dictionary/sys-file-info.c:509
 #: src/ui/gui/psppire-var-sheet.c:112
 msgid "Ordinal"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:511
+#: src/language/dictionary/sys-file-info.c:510
 #: src/ui/gui/psppire-var-sheet.c:113
 msgid "Scale"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:514
+#: src/language/dictionary/sys-file-info.c:513
 #, c-format
 msgid "Display Alignment: %s"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:515
+#: src/language/dictionary/sys-file-info.c:514
 #: src/ui/gui/psppire-var-sheet.c:104
 msgid "Left"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:516
+#: src/language/dictionary/sys-file-info.c:515
 #: src/ui/gui/psppire-var-sheet.c:106
 msgid "Center"
 msgstr "Centre"
 
-#: src/language/dictionary/sys-file-info.c:517
+#: src/language/dictionary/sys-file-info.c:516
 #: src/ui/gui/psppire-var-sheet.c:105
 msgid "Right"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:520
+#: src/language/dictionary/sys-file-info.c:519
 #, c-format
 msgid "Display Width: %d"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:534
+#: src/language/dictionary/sys-file-info.c:533
 msgid "Missing Values: "
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:643
+#: src/language/dictionary/sys-file-info.c:642
 msgid "No vectors defined."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:662
+#: src/language/dictionary/sys-file-info.c:661
 msgid "Vector"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:665
+#: src/language/dictionary/sys-file-info.c:664
 msgid "Print Format"
 msgstr ""
 
-#: src/language/dictionary/value-labels.c:150
+#: src/language/dictionary/value-labels.c:149
 msgid "Truncating value label to 60 characters."
 msgstr ""
 
-#: src/language/dictionary/variable-label.c:51
-msgid "String expected for variable label."
-msgstr ""
-
-#: src/language/dictionary/variable-label.c:59
+#: src/language/dictionary/variable-label.c:58
 msgid "Truncating variable label to 255 characters."
 msgstr ""
 
@@ -2242,178 +2251,267 @@ msgstr ""
 msgid "Only USE ALL is currently implemented."
 msgstr ""
 
-#: src/language/utilities/title.c:103
+#: src/language/utilities/host.c:85
 #, c-format
-msgid "   (Entered %s)"
+msgid "Couldn't fork: %s."
+msgstr ""
+
+#: src/language/utilities/host.c:100
+msgid "Interactive shell not supported on this platform."
+msgstr ""
+
+#: src/language/utilities/host.c:112
+msgid "Command shell not supported on this platform."
 msgstr ""
 
-#: src/language/utilities/include.c:95
-msgid "Expecting BATCH or INTERACTIVE after SYNTAX."
+#: src/language/utilities/host.c:118
+#, c-format
+msgid "Error executing command: %s."
 msgstr ""
 
-#: src/language/utilities/include.c:112
-msgid "Expecting YES or NO after CD."
+#: src/language/utilities/title.c:103
+#, c-format
+msgid "   (Entered %s)"
 msgstr ""
 
-#: src/language/utilities/include.c:129
-msgid "Expecting CONTINUE or STOP after ERROR."
+#: src/language/utilities/include.c:94 src/language/utilities/include.c:112
+#: src/language/utilities/include.c:130
+#, c-format
+msgid "expecting %s or %s after %s"
 msgstr ""
 
-#: src/language/utilities/include.c:136
+#: src/language/utilities/include.c:138
 #, c-format
 msgid "Unexpected token: `%s'."
-msgstr ""
+msgstr "Unexpected token: ‘%s’."
 
-#: src/language/utilities/include.c:181
+#: src/language/utilities/include.c:183
 msgid "expecting file name"
 msgstr ""
 
-#: src/language/utilities/include.c:193
+#: src/language/utilities/include.c:195
 #, c-format
 msgid "Can't find `%s' in include file search path."
-msgstr ""
+msgstr "Can’t find ‘%s’ in include file search path."
 
-#: src/language/utilities/include.c:201
+#: src/language/utilities/include.c:203
 #, c-format
 msgid "Unable to open `%s': %s."
-msgstr ""
+msgstr "Unable to open ‘%s’: %s."
 
-#: src/language/utilities/permissions.c:73
+#: src/language/utilities/permissions.c:76
 #, c-format
 msgid "Expecting %s or %s."
 msgstr ""
 
-#: src/language/utilities/permissions.c:106
+#: src/language/utilities/permissions.c:109
 #, c-format
 msgid "Cannot stat %s: %s"
 msgstr ""
 
-#: src/language/utilities/permissions.c:119
+#: src/language/utilities/permissions.c:122
 #, c-format
 msgid "Cannot change mode of %s: %s"
 msgstr ""
 
-#: src/language/stats/aggregate.c:220
-msgid "while expecting COLUMNWISE"
+#: src/language/stats/aggregate.c:94
+msgid "Sum of values"
+msgstr ""
+
+#: src/language/stats/aggregate.c:95
+msgid "Mean average"
+msgstr ""
+
+#: src/language/stats/aggregate.c:96
+msgid "Median average"
+msgstr ""
+
+#: src/language/stats/aggregate.c:97 src/ui/gui/descriptives-dialog.c:41
+#: src/ui/gui/frequencies-dialog.c:42
+msgid "Standard deviation"
+msgstr ""
+
+#: src/language/stats/aggregate.c:98
+msgid "Maximum value"
+msgstr ""
+
+#: src/language/stats/aggregate.c:99
+msgid "Minimum value"
+msgstr ""
+
+#: src/language/stats/aggregate.c:100
+msgid "Percentage greater than"
+msgstr ""
+
+#: src/language/stats/aggregate.c:101
+msgid "Percentage less than"
+msgstr ""
+
+#: src/language/stats/aggregate.c:102
+msgid "Percentage included in range"
+msgstr ""
+
+#: src/language/stats/aggregate.c:103
+msgid "Percentage excluded from range"
+msgstr ""
+
+#: src/language/stats/aggregate.c:104
+msgid "Fraction greater than"
+msgstr ""
+
+#: src/language/stats/aggregate.c:105
+msgid "Fraction less than"
+msgstr ""
+
+#: src/language/stats/aggregate.c:106
+msgid "Fraction included in range"
+msgstr ""
+
+#: src/language/stats/aggregate.c:107
+msgid "Fraction excluded from range"
+msgstr ""
+
+#: src/language/stats/aggregate.c:108
+msgid "Number of cases"
+msgstr ""
+
+#: src/language/stats/aggregate.c:109
+msgid "Number of cases (unweighted)"
+msgstr ""
+
+#: src/language/stats/aggregate.c:110
+msgid "Number of missing values"
+msgstr ""
+
+#: src/language/stats/aggregate.c:111
+msgid "Number of missing values (unweighted)"
+msgstr ""
+
+#: src/language/stats/aggregate.c:112
+msgid "First non-missing value"
+msgstr ""
+
+#: src/language/stats/aggregate.c:113
+msgid "Last non-missing value"
 msgstr ""
 
-#: src/language/stats/aggregate.c:247
-msgid "expecting BREAK"
+#: src/language/stats/aggregate.c:225 src/language/data-io/get-data.c:461
+#, c-format
+msgid "expecting %s"
 msgstr ""
 
-#: src/language/stats/aggregate.c:252
+#: src/language/stats/aggregate.c:256
 msgid ""
 "When PRESORTED is specified, specifying sorting directions with (A) or (D) "
 "has no effect.  Output data will be sorted the same way as the input data."
 msgstr ""
 
-#: src/language/stats/aggregate.c:424
+#: src/language/stats/aggregate.c:450
 msgid "expecting aggregation function"
 msgstr ""
 
-#: src/language/stats/aggregate.c:442
+#: src/language/stats/aggregate.c:462
 #, c-format
 msgid "Unknown aggregation function %s."
 msgstr ""
 
-#: src/language/stats/aggregate.c:498
+#: src/language/stats/aggregate.c:514
 #, c-format
 msgid "Missing argument %zu to %s."
 msgstr ""
 
-#: src/language/stats/aggregate.c:507
+#: src/language/stats/aggregate.c:523
 #, c-format
 msgid "Arguments to %s must be of same type as source variables."
 msgstr ""
 
-#: src/language/stats/aggregate.c:517 src/language/expressions/parse.c:885
-msgid "expecting `)'"
-msgstr ""
-
-#: src/language/stats/aggregate.c:529
+#: src/language/stats/aggregate.c:542
 #, c-format
 msgid ""
-"Number of source variables (%zu) does not match number of target variables (%"
-"zu)."
+"Number of source variables (%zu) does not match number of target variables "
+"(%zu)."
 msgstr ""
 
-#: src/language/stats/aggregate.c:545
+#: src/language/stats/aggregate.c:558
 #, c-format
 msgid ""
 "The value arguments passed to the %s function are out-of-order.  They will "
 "be treated as if they had been specified in the correct order."
 msgstr ""
 
-#: src/language/stats/aggregate.c:615
+#: src/language/stats/aggregate.c:632
 #, c-format
 msgid ""
 "Variable name %s is not unique within the aggregate file dictionary, which "
 "contains the aggregate variables and the break variables."
 msgstr ""
 
-#: src/language/stats/autorecode.c:116
+#: src/language/stats/autorecode.c:127
 #, c-format
 msgid "Source variable count (%zu) does not match target variable count (%zu)."
 msgstr ""
 
-#: src/language/stats/autorecode.c:128
+#: src/language/stats/autorecode.c:139
 #, c-format
 msgid "Target variable %s duplicates existing variable %s."
 msgstr ""
 
-#: src/language/stats/binomial.c:141
+#: src/language/stats/binomial.c:139
 #, c-format
 msgid "Variable %s is not dichotomous"
 msgstr ""
 
-#: src/language/stats/binomial.c:192 src/ui/gui/binomial.ui:13
+#: src/language/stats/binomial.c:190 src/ui/gui/binomial.ui:13
 msgid "Binomial Test"
 msgstr ""
 
-#: src/language/stats/binomial.c:222
+#: src/language/stats/binomial.c:220
 msgid "Group1"
 msgstr ""
 
-#: src/language/stats/binomial.c:223
+#: src/language/stats/binomial.c:221
 msgid "Group2"
 msgstr ""
 
-#: src/language/stats/binomial.c:224 src/language/stats/chisquare.c:177
+#: src/language/stats/binomial.c:222 src/language/stats/chisquare.c:177
 #: src/language/stats/chisquare.c:236 src/language/stats/factor.c:1464
-#: src/language/stats/sign.c:92 src/language/stats/wilcoxon.c:260
-#: src/ui/gui/crosstabs-dialog.c:60 src/language/stats/crosstabs.q:823
-#: src/language/stats/crosstabs.q:1151 src/language/stats/crosstabs.q:1528
-#: src/language/stats/examine.q:1105 src/language/stats/frequencies.q:871
-#: src/language/stats/oneway.q:302 src/language/stats/oneway.q:472
-#: src/language/stats/regression.q:291 src/language/stats/reliability.q:702
+#: src/language/stats/glm.c:343 src/language/stats/kruskal-wallis.c:294
+#: src/language/stats/oneway.c:622 src/language/stats/oneway.c:792
+#: src/language/stats/reliability.c:538 src/language/stats/sign.c:93
+#: src/language/stats/wilcoxon.c:255 src/ui/gui/crosstabs-dialog.c:60
+#: src/language/stats/crosstabs.q:815 src/language/stats/crosstabs.q:1143
+#: src/language/stats/crosstabs.q:1522 src/language/stats/examine.q:1105
+#: src/language/stats/frequencies.q:871 src/language/stats/regression.q:291
 msgid "Total"
 msgstr ""
 
-#: src/language/stats/binomial.c:257 src/language/stats/chisquare.c:199
-#: src/language/stats/crosstabs.q:1239 src/language/stats/crosstabs.q:1286
+#: src/language/stats/binomial.c:255 src/language/stats/chisquare.c:199
+#: src/language/stats/crosstabs.q:1231 src/language/stats/crosstabs.q:1278
 msgid "Category"
 msgstr ""
 
-#: src/language/stats/binomial.c:258 src/language/stats/correlations.c:119
-#: src/language/stats/correlations.c:227 src/language/stats/npar-summary.c:122
-#: src/language/stats/sign.c:72 src/language/stats/wilcoxon.c:243
-#: src/language/stats/crosstabs.q:830 src/language/stats/examine.q:1176
-#: src/language/stats/frequencies.q:1034 src/language/stats/oneway.q:385
-#: src/language/stats/reliability.q:705 src/language/stats/t-test.q:505
-#: src/language/stats/t-test.q:525 src/language/stats/t-test.q:625
-#: src/language/stats/t-test.q:1101
+#: src/language/stats/binomial.c:256 src/language/stats/correlations.c:119
+#: src/language/stats/correlations.c:227
+#: src/language/stats/kruskal-wallis.c:259
+#: src/language/stats/npar-summary.c:120 src/language/stats/oneway.c:692
+#: src/language/stats/reliability.c:541 src/language/stats/sign.c:72
+#: src/language/stats/wilcoxon.c:238 src/language/stats/crosstabs.q:822
+#: src/language/stats/examine.q:1176 src/language/stats/frequencies.q:1034
+#: src/language/stats/t-test.q:505 src/language/stats/t-test.q:525
+#: src/language/stats/t-test.q:625 src/language/stats/t-test.q:1101
 msgid "N"
 msgstr ""
 
-#: src/language/stats/binomial.c:259
+#: src/language/stats/binomial.c:257
 msgid "Observed Prop."
 msgstr ""
 
-#: src/language/stats/binomial.c:260
+#: src/language/stats/binomial.c:258
 msgid "Test Prop."
 msgstr ""
 
-#: src/language/stats/binomial.c:263
+#: src/language/stats/binomial.c:261 src/language/stats/crosstabs.q:1211
+#: src/language/stats/crosstabs.q:1213
 #, c-format
 msgid "Exact Sig. (%d-tailed)"
 msgstr ""
@@ -2443,44 +2541,45 @@ msgstr ""
 msgid "Frequencies"
 msgstr ""
 
-#: src/language/stats/chisquare.c:249 src/language/stats/sign.c:111
-#: src/language/stats/wilcoxon.c:309
+#: src/language/stats/chisquare.c:249 src/language/stats/kruskal-wallis.c:312
+#: src/language/stats/sign.c:112 src/language/stats/wilcoxon.c:304
 msgid "Test Statistics"
 msgstr ""
 
-#: src/language/stats/chisquare.c:263
+#: src/language/stats/chisquare.c:263 src/language/stats/kruskal-wallis.c:315
 msgid "Chi-Square"
 msgstr ""
 
-#: src/language/stats/chisquare.c:264 src/language/stats/crosstabs.q:1215
-#: src/language/stats/oneway.q:275 src/language/stats/oneway.q:685
+#: src/language/stats/chisquare.c:264 src/language/stats/glm.c:308
+#: src/language/stats/kruskal-wallis.c:318 src/language/stats/oneway.c:599
+#: src/language/stats/oneway.c:1008 src/language/stats/crosstabs.q:1207
 #: src/language/stats/regression.q:284 src/language/stats/t-test.q:752
 #: src/language/stats/t-test.q:923 src/language/stats/t-test.q:1010
 msgid "df"
 msgstr ""
 
-#: src/language/stats/chisquare.c:265
+#: src/language/stats/chisquare.c:265 src/language/stats/kruskal-wallis.c:321
 msgid "Asymp. Sig."
 msgstr ""
 
-#: src/language/stats/correlations.c:96 src/language/stats/factor.c:1722
-#: src/language/stats/npar-summary.c:108
+#: src/language/stats/correlations.c:96 src/language/stats/factor.c:1728
+#: src/language/stats/npar-summary.c:106
 msgid "Descriptive Statistics"
 msgstr ""
 
 #: src/language/stats/correlations.c:117 src/language/stats/descriptives.c:101
-#: src/language/stats/factor.c:1743 src/language/stats/npar-summary.c:125
-#: src/ui/gui/descriptives-dialog.c:40 src/ui/gui/frequencies-dialog.c:41
-#: src/language/stats/examine.q:1444 src/language/stats/frequencies.q:105
-#: src/language/stats/oneway.q:386 src/language/stats/t-test.q:506
+#: src/language/stats/factor.c:1749 src/language/stats/npar-summary.c:123
+#: src/language/stats/oneway.c:693 src/ui/gui/descriptives-dialog.c:40
+#: src/ui/gui/frequencies-dialog.c:41 src/language/stats/examine.q:1444
+#: src/language/stats/frequencies.q:105 src/language/stats/t-test.q:506
 #: src/language/stats/t-test.q:526 src/language/stats/t-test.q:624
 #: src/language/stats/t-test.q:917
 msgid "Mean"
 msgstr ""
 
-#: src/language/stats/correlations.c:118 src/language/stats/factor.c:1744
-#: src/language/stats/npar-summary.c:128 src/language/stats/examine.q:1479
-#: src/language/stats/oneway.q:387 src/language/stats/t-test.q:507
+#: src/language/stats/correlations.c:118 src/language/stats/factor.c:1750
+#: src/language/stats/npar-summary.c:126 src/language/stats/oneway.c:694
+#: src/language/stats/examine.q:1479 src/language/stats/t-test.q:507
 #: src/language/stats/t-test.q:527 src/language/stats/t-test.q:626
 #: src/language/stats/t-test.q:918
 msgid "Std. Deviation"
@@ -2494,13 +2593,13 @@ msgstr ""
 msgid "Pearson Correlation"
 msgstr ""
 
-#: src/language/stats/correlations.c:218 src/language/stats/oneway.q:686
+#: src/language/stats/correlations.c:218 src/language/stats/oneway.c:1009
 #: src/language/stats/t-test.q:753 src/language/stats/t-test.q:924
 #: src/language/stats/t-test.q:1011
 msgid "Sig. (2-tailed)"
 msgstr ""
 
-#: src/language/stats/correlations.c:218
+#: src/language/stats/correlations.c:218 src/language/stats/factor.c:1634
 msgid "Sig. (1-tailed)"
 msgstr ""
 
@@ -2559,17 +2658,17 @@ msgstr ""
 msgid "Range"
 msgstr ""
 
-#: src/language/stats/descriptives.c:110 src/language/stats/npar-summary.c:131
-#: src/ui/gui/descriptives-dialog.c:42 src/ui/gui/frequencies-dialog.c:43
-#: src/language/stats/examine.q:1484 src/language/stats/frequencies.q:116
-#: src/language/stats/oneway.q:400
+#: src/language/stats/descriptives.c:110 src/language/stats/npar-summary.c:129
+#: src/language/stats/oneway.c:707 src/ui/gui/descriptives-dialog.c:42
+#: src/ui/gui/frequencies-dialog.c:43 src/language/stats/examine.q:1484
+#: src/language/stats/frequencies.q:116
 msgid "Minimum"
 msgstr ""
 
-#: src/language/stats/descriptives.c:111 src/language/stats/npar-summary.c:134
-#: src/ui/gui/descriptives-dialog.c:43 src/ui/gui/frequencies-dialog.c:44
-#: src/language/stats/examine.q:1489 src/language/stats/frequencies.q:117
-#: src/language/stats/oneway.q:401
+#: src/language/stats/descriptives.c:111 src/language/stats/npar-summary.c:132
+#: src/language/stats/oneway.c:708 src/ui/gui/descriptives-dialog.c:43
+#: src/ui/gui/frequencies-dialog.c:44 src/language/stats/examine.q:1489
+#: src/language/stats/frequencies.q:117
 msgid "Maximum"
 msgstr ""
 
@@ -2597,7 +2696,7 @@ msgstr ""
 msgid "Mapping of variables to corresponding Z-scores."
 msgstr ""
 
-#: src/language/stats/descriptives.c:559
+#: src/language/stats/descriptives.c:559 src/language/stats/glm.c:304
 msgid "Source"
 msgstr ""
 
@@ -2623,29 +2722,12 @@ msgstr ""
 msgid "Valid cases = %g; cases with missing value(s) = %g."
 msgstr ""
 
-#: src/language/stats/sort-cases.c:64
-msgid "Buffer limit must be at least 2."
+#: src/language/stats/factor.c:805
+msgid "Factor analysis on a single variable is not useful."
 msgstr ""
 
-#: src/language/stats/sort-criteria.c:74
-msgid "`A' or `D' expected inside parentheses."
-msgstr ""
-
-#: src/language/stats/sort-criteria.c:79
-msgid "`)' expected."
-msgstr ""
-
-#: src/language/stats/sort-criteria.c:92
-#, c-format
-msgid "Variable %s specified twice in sort criteria."
-msgstr ""
-
-#: src/language/stats/factor.c:805
-msgid "Factor analysis on a single variable is not useful."
-msgstr ""
-
-#: src/language/stats/factor.c:1208
-msgid "Component Number"
+#: src/language/stats/factor.c:1208
+msgid "Component Number"
 msgstr ""
 
 #: src/language/stats/factor.c:1208
@@ -2709,43 +2791,44 @@ msgstr ""
 msgid "Correlation Matrix"
 msgstr ""
 
-#: src/language/stats/factor.c:1634
-msgid "Sig. 1-tailed"
-msgstr ""
-
 #: src/language/stats/factor.c:1668
 msgid "Determinant"
 msgstr ""
 
-#: src/language/stats/factor.c:1745
+#: src/language/stats/factor.c:1699
+msgid ""
+"The dataset contains no complete observations. No analysis will be performed."
+msgstr ""
+
+#: src/language/stats/factor.c:1751
 msgid "Analysis N"
 msgstr ""
 
-#: src/language/stats/factor.c:1778
+#: src/language/stats/factor.c:1784
 msgid ""
 "The FACTOR criteria result in zero factors extracted. Therefore no analysis "
 "will be performed."
 msgstr ""
 
-#: src/language/stats/factor.c:1784
+#: src/language/stats/factor.c:1790
 msgid ""
 "The FACTOR criteria result in more factors than variables, which is not "
 "meaningful. No analysis will be performed."
 msgstr ""
 
-#: src/language/stats/factor.c:1867
+#: src/language/stats/factor.c:1873
 msgid "Component Matrix"
 msgstr ""
 
-#: src/language/stats/factor.c:1867
+#: src/language/stats/factor.c:1873
 msgid "Factor Matrix"
 msgstr ""
 
-#: src/language/stats/factor.c:1873
+#: src/language/stats/factor.c:1879
 msgid "Rotated Component Matrix"
 msgstr ""
 
-#: src/language/stats/factor.c:1873
+#: src/language/stats/factor.c:1879
 msgid "Rotated Factor Matrix"
 msgstr ""
 
@@ -2758,211 +2841,474 @@ msgstr ""
 msgid "Could not create temporary file for FLIP."
 msgstr ""
 
-#: src/language/stats/flip.c:327
+#: src/language/stats/flip.c:325
 #, c-format
 msgid "Error rewinding FLIP file: %s."
 msgstr ""
 
-#: src/language/stats/flip.c:334
+#: src/language/stats/flip.c:332
 msgid "Error creating FLIP source file."
 msgstr ""
 
-#: src/language/stats/flip.c:347
+#: src/language/stats/flip.c:345
 #, c-format
 msgid "Error reading FLIP file: %s."
 msgstr ""
 
-#: src/language/stats/flip.c:349
+#: src/language/stats/flip.c:347
 msgid "Unexpected end of file reading FLIP file."
 msgstr ""
 
-#: src/language/stats/flip.c:365
+#: src/language/stats/flip.c:363
 #, c-format
 msgid "Error seeking FLIP source file: %s."
 msgstr ""
 
-#: src/language/stats/flip.c:373
+#: src/language/stats/flip.c:371
 #, c-format
 msgid "Error writing FLIP source file: %s."
 msgstr ""
 
-#: src/language/stats/flip.c:384
-#, c-format
-msgid "Error closing FLIP source file: %s."
-msgstr ""
-
-#: src/language/stats/flip.c:392
+#: src/language/stats/flip.c:386
 #, c-format
 msgid "Error rewinding FLIP source file: %s."
 msgstr ""
 
-#: src/language/stats/flip.c:426
+#: src/language/stats/flip.c:419
 #, c-format
 msgid "Error reading FLIP temporary file: %s."
 msgstr ""
 
-#: src/language/stats/flip.c:429
+#: src/language/stats/flip.c:422
 msgid "Unexpected end of file reading FLIP temporary file."
 msgstr ""
 
-#: src/language/stats/npar-summary.c:141 src/language/stats/examine.q:1996
+#: src/language/stats/glm.c:108
+msgid "Multivariate analysis is not yet implemented"
+msgstr ""
+
+#: src/language/stats/glm.c:291
+msgid "Tests of Between-Subjects Effects"
+msgstr ""
+
+#. TRANSLATORS: The parameter is a roman numeral
+#: src/language/stats/glm.c:307
+#, c-format
+msgid "Type %s Sum of Squares"
+msgstr ""
+
+#: src/language/stats/glm.c:309 src/language/stats/oneway.c:600
+#: src/language/stats/regression.q:285
+msgid "Mean Square"
+msgstr ""
+
+#: src/language/stats/glm.c:310 src/language/stats/oneway.c:601
+#: src/language/stats/regression.q:286 src/language/stats/t-test.q:749
+msgid "F"
+msgstr ""
+
+#: src/language/stats/glm.c:311 src/language/stats/t-test.q:750
+#: src/language/stats/t-test.q:1103
+msgid "Sig."
+msgstr ""
+
+#: src/language/stats/glm.c:314
+msgid "Corrected Model"
+msgstr ""
+
+#: src/language/stats/glm.c:323
+msgid "Intercept"
+msgstr ""
+
+#: src/language/stats/glm.c:337
+msgid "Error"
+msgstr ""
+
+#: src/language/stats/glm.c:350
+msgid "Corrected Total"
+msgstr ""
+
+#: src/language/stats/kruskal-wallis.c:244 src/language/stats/wilcoxon.c:225
+msgid "Ranks"
+msgstr ""
+
+#: src/language/stats/kruskal-wallis.c:258 src/language/stats/wilcoxon.c:239
+msgid "Mean Rank"
+msgstr ""
+
+#: src/language/stats/npar.c:233 src/language/stats/npar.c:260
+#, c-format
+msgid "The %s subcommand may be given only once."
+msgstr ""
+
+#: src/language/stats/npar.c:343
+msgid "NPAR subcommand not currently implemented."
+msgstr ""
+
+#: src/language/stats/npar.c:496
+#, c-format
+msgid ""
+"The specified value of HI (%d) is lower than the specified value of LO (%d)"
+msgstr ""
+
+#: src/language/stats/npar.c:551
+#, c-format
+msgid ""
+"%d expected values were given, but the specified range (%d-%d) requires "
+"exactly %d values."
+msgstr ""
+
+#: src/language/stats/npar.c:690 src/language/stats/t-test.q:380
+#, c-format
+msgid ""
+"PAIRED was specified but the number of variables preceding WITH (%zu) did "
+"not match the number following (%zu)."
+msgstr ""
+
+#: src/language/stats/npar-summary.c:139 src/language/stats/examine.q:1996
 #: src/language/stats/examine.q:2013 src/language/stats/frequencies.q:1050
 #: src/ui/gui/examine.ui:345
 msgid "Percentiles"
 msgstr ""
 
-#: src/language/stats/npar-summary.c:145
+#: src/language/stats/npar-summary.c:143
 msgid "25th"
 msgstr ""
 
-#: src/language/stats/npar-summary.c:148
+#: src/language/stats/npar-summary.c:146
 msgid "50th (Median)"
 msgstr ""
 
-#: src/language/stats/npar-summary.c:151
+#: src/language/stats/npar-summary.c:149
 msgid "75th"
 msgstr ""
 
-#: src/language/stats/roc.c:935
-msgid "Area Under the Curve"
+#: src/language/stats/oneway.c:548
+msgid "Number of contrast coefficients must equal the number of groups"
 msgstr ""
 
-#: src/language/stats/roc.c:937
+#: src/language/stats/oneway.c:557
 #, c-format
-msgid "Area Under the Curve (%s)"
+msgid "Coefficients for contrast %zu do not total zero"
 msgstr ""
 
-#: src/language/stats/roc.c:942
-msgid "Area"
+#: src/language/stats/oneway.c:598 src/language/stats/regression.q:283
+msgid "Sum of Squares"
+msgstr ""
+
+#: src/language/stats/oneway.c:602 src/language/stats/oneway.c:847
+#: src/language/stats/regression.q:201 src/language/stats/regression.q:287
+msgid "Significance"
 msgstr ""
 
-#: src/language/stats/roc.c:955 src/language/stats/examine.q:1641
-#: src/language/stats/oneway.q:388 src/language/stats/oneway.q:683
+#: src/language/stats/oneway.c:620
+msgid "Between Groups"
+msgstr ""
+
+#: src/language/stats/oneway.c:621
+msgid "Within Groups"
+msgstr ""
+
+#: src/language/stats/oneway.c:654 src/language/stats/regression.q:312
+msgid "ANOVA"
+msgstr ""
+
+#: src/language/stats/oneway.c:695 src/language/stats/oneway.c:1006
+#: src/language/stats/roc.c:975 src/language/stats/examine.q:1641
 #: src/language/stats/regression.q:198
 msgid "Std. Error"
 msgstr ""
 
-#: src/language/stats/roc.c:956
-msgid "Asymptotic Sig."
+#: src/language/stats/oneway.c:701 src/language/stats/examine.q:1449
+#, c-format
+msgid "%g%% Confidence Interval for Mean"
 msgstr ""
 
-#: src/language/stats/roc.c:958 src/language/stats/examine.q:1455
-#: src/language/stats/oneway.q:397
+#: src/language/stats/oneway.c:704 src/language/stats/roc.c:978
+#: src/language/stats/examine.q:1455
 msgid "Lower Bound"
 msgstr ""
 
-#: src/language/stats/roc.c:959 src/language/stats/examine.q:1460
-#: src/language/stats/oneway.q:398
+#: src/language/stats/oneway.c:705 src/language/stats/roc.c:979
+#: src/language/stats/examine.q:1460
 msgid "Upper Bound"
 msgstr ""
 
-#: src/language/stats/roc.c:963
+#: src/language/stats/oneway.c:710 src/language/stats/examine.q:1635
+#: src/ui/gui/descriptives.ui:8 src/ui/gui/examine.ui:319
+msgid "Descriptives"
+msgstr ""
+
+#: src/language/stats/oneway.c:844
+msgid "Levene Statistic"
+msgstr ""
+
+#: src/language/stats/oneway.c:845
+msgid "df1"
+msgstr ""
+
+#: src/language/stats/oneway.c:846
+msgid "df2"
+msgstr ""
+
+#: src/language/stats/oneway.c:849
+msgid "Test of Homogeneity of Variances"
+msgstr ""
+
+#: src/language/stats/oneway.c:922
+msgid "Contrast Coefficients"
+msgstr ""
+
+#: src/language/stats/oneway.c:924 src/language/stats/oneway.c:1004
+msgid "Contrast"
+msgstr ""
+
+#: src/language/stats/oneway.c:1002
+msgid "Contrast Tests"
+msgstr ""
+
+#: src/language/stats/oneway.c:1005
+msgid "Value of Contrast"
+msgstr ""
+
+#: src/language/stats/oneway.c:1007 src/language/stats/regression.q:200
+#: src/language/stats/t-test.q:751 src/language/stats/t-test.q:922
+#: src/language/stats/t-test.q:1009
+msgid "t"
+msgstr ""
+
+#: src/language/stats/oneway.c:1059
+msgid "Assume equal variances"
+msgstr ""
+
+#: src/language/stats/oneway.c:1063
+msgid "Does not assume equal"
+msgstr ""
+
+#: src/language/stats/reliability.c:146
+msgid "Reliabilty on a single variable is not useful."
+msgstr ""
+
+#: src/language/stats/reliability.c:506 src/language/stats/examine.q:1159
+msgid "Case Processing Summary"
+msgstr ""
+
+#: src/language/stats/reliability.c:529 src/language/stats/crosstabs.q:812
+#: src/language/stats/examine.q:1164
+msgid "Cases"
+msgstr ""
+
+#: src/language/stats/reliability.c:532 src/language/stats/crosstabs.q:813
+#: src/language/stats/examine.q:1103 src/language/stats/frequencies.q:1035
+msgid "Valid"
+msgstr ""
+
+#: src/language/stats/reliability.c:535
+msgid "Excluded"
+msgstr ""
+
+#: src/language/stats/reliability.c:543
+msgid "%"
+msgstr ""
+
+#: src/language/stats/reliability.c:588
+msgid "Item-Total Statistics"
+msgstr ""
+
+#: src/language/stats/reliability.c:610
+msgid "Scale Mean if Item Deleted"
+msgstr ""
+
+#: src/language/stats/reliability.c:613
+msgid "Scale Variance if Item Deleted"
+msgstr ""
+
+#: src/language/stats/reliability.c:616
+msgid "Corrected Item-Total Correlation"
+msgstr ""
+
+#: src/language/stats/reliability.c:619
+msgid "Cronbach's Alpha if Item Deleted"
+msgstr ""
+
+#: src/language/stats/reliability.c:693
+msgid "Reliability Statistics"
+msgstr ""
+
+#: src/language/stats/reliability.c:733 src/language/stats/reliability.c:752
+msgid "Cronbach's Alpha"
+msgstr ""
+
+#: src/language/stats/reliability.c:736 src/language/stats/reliability.c:761
+#: src/language/stats/reliability.c:772
+msgid "N of Items"
+msgstr ""
+
+#: src/language/stats/reliability.c:755
+msgid "Part 1"
+msgstr ""
+
+#: src/language/stats/reliability.c:766
+msgid "Part 2"
+msgstr ""
+
+#: src/language/stats/reliability.c:777
+msgid "Total N of Items"
+msgstr ""
+
+#: src/language/stats/reliability.c:780
+msgid "Correlation Between Forms"
+msgstr ""
+
+#: src/language/stats/reliability.c:784
+msgid "Spearman-Brown Coefficient"
+msgstr ""
+
+#: src/language/stats/reliability.c:787
+msgid "Equal Length"
+msgstr ""
+
+#: src/language/stats/reliability.c:790
+msgid "Unequal Length"
+msgstr ""
+
+#: src/language/stats/reliability.c:794
+msgid "Guttman Split-Half Coefficient"
+msgstr ""
+
+#: src/language/stats/roc.c:955
+msgid "Area Under the Curve"
+msgstr ""
+
+#: src/language/stats/roc.c:957
+#, c-format
+msgid "Area Under the Curve (%s)"
+msgstr ""
+
+#: src/language/stats/roc.c:962
+msgid "Area"
+msgstr ""
+
+#: src/language/stats/roc.c:976
+msgid "Asymptotic Sig."
+msgstr ""
+
+#: src/language/stats/roc.c:983
 #, c-format
 msgid "Asymp. %g%% Confidence Interval"
 msgstr ""
 
-#: src/language/stats/roc.c:969
+#: src/language/stats/roc.c:989
 msgid "Variable under test"
 msgstr ""
 
-#: src/language/stats/roc.c:1028
+#: src/language/stats/roc.c:1048
 msgid "Case Summary"
 msgstr ""
 
-#: src/language/stats/roc.c:1048
+#: src/language/stats/roc.c:1068
 msgid "Unweighted"
 msgstr ""
 
-#: src/language/stats/roc.c:1049
+#: src/language/stats/roc.c:1069
 msgid "Weighted"
 msgstr ""
 
-#: src/language/stats/roc.c:1053
+#: src/language/stats/roc.c:1073
 msgid "Valid N (listwise)"
 msgstr ""
 
-#: src/language/stats/roc.c:1056
+#: src/language/stats/roc.c:1076
 msgid "Positive"
 msgstr ""
 
-#: src/language/stats/roc.c:1057
+#: src/language/stats/roc.c:1077
 msgid "Negative"
 msgstr ""
 
-#: src/language/stats/roc.c:1085
+#: src/language/stats/roc.c:1105
 msgid "Coordinates of the Curve"
 msgstr ""
 
-#: src/language/stats/roc.c:1087
+#: src/language/stats/roc.c:1107
 #, c-format
 msgid "Coordinates of the Curve (%s)"
 msgstr ""
 
-#: src/language/stats/roc.c:1095
+#: src/language/stats/roc.c:1115
 msgid "Test variable"
 msgstr ""
 
-#: src/language/stats/roc.c:1097
+#: src/language/stats/roc.c:1117
 msgid "Positive if greater than or equal to"
 msgstr ""
 
-#: src/language/stats/roc.c:1098 src/output/charts/roc-chart-cairo.c:38
+#: src/language/stats/roc.c:1118 src/output/charts/roc-chart-cairo.c:38
 msgid "Sensitivity"
 msgstr ""
 
-#: src/language/stats/roc.c:1099 src/output/charts/roc-chart-cairo.c:37
+#: src/language/stats/roc.c:1119 src/output/charts/roc-chart-cairo.c:37
 msgid "1 - Specificity"
 msgstr ""
 
-#: src/language/stats/sign.c:89
+#: src/language/stats/sign.c:90
 msgid "Negative Differences"
 msgstr ""
 
-#: src/language/stats/sign.c:90
+#: src/language/stats/sign.c:91
 msgid "Positive Differences"
 msgstr ""
 
-#: src/language/stats/sign.c:91 src/language/stats/wilcoxon.c:259
+#: src/language/stats/sign.c:92 src/language/stats/wilcoxon.c:254
 msgid "Ties"
 msgstr ""
 
-#: src/language/stats/sign.c:130 src/language/stats/wilcoxon.c:327
+#: src/language/stats/sign.c:131 src/language/stats/wilcoxon.c:322
 msgid "Exact Sig. (2-tailed)"
 msgstr ""
 
-#: src/language/stats/sign.c:133 src/language/stats/wilcoxon.c:328
+#: src/language/stats/sign.c:134 src/language/stats/wilcoxon.c:323
 msgid "Exact Sig. (1-tailed)"
 msgstr ""
 
-#: src/language/stats/sign.c:136 src/language/stats/wilcoxon.c:331
+#: src/language/stats/sign.c:137 src/language/stats/wilcoxon.c:326
 msgid "Point Probability"
 msgstr ""
 
-#: src/language/stats/wilcoxon.c:230
-msgid "Ranks"
+#: src/language/stats/sort-cases.c:64
+msgid "Buffer limit must be at least 2."
 msgstr ""
 
-#: src/language/stats/wilcoxon.c:244
-msgid "Mean Rank"
+#: src/language/stats/sort-criteria.c:74
+msgid "`A' or `D' expected inside parentheses."
+msgstr "‘A’ or ‘D’ expected inside parentheses."
+
+#: src/language/stats/sort-criteria.c:79
+msgid "`)' expected."
+msgstr "‘)’ expected."
+
+#: src/language/stats/sort-criteria.c:92
+#, c-format
+msgid "Variable %s specified twice in sort criteria."
 msgstr ""
 
-#: src/language/stats/wilcoxon.c:245
+#: src/language/stats/wilcoxon.c:240
 msgid "Sum of Ranks"
 msgstr ""
 
-#: src/language/stats/wilcoxon.c:257
+#: src/language/stats/wilcoxon.c:252
 msgid "Negative Ranks"
 msgstr ""
 
-#: src/language/stats/wilcoxon.c:258
+#: src/language/stats/wilcoxon.c:253
 msgid "Positive Ranks"
 msgstr ""
 
-#: src/language/stats/wilcoxon.c:322
+#: src/language/stats/wilcoxon.c:317
 msgid "Z"
 msgstr ""
 
-#: src/language/stats/wilcoxon.c:323
+#: src/language/stats/wilcoxon.c:318 src/language/stats/crosstabs.q:1209
 msgid "Asymp. Sig. (2-tailed)"
 msgstr ""
 
@@ -3070,7 +3416,7 @@ msgid "At least one variable must be specified."
 msgstr ""
 
 #: src/language/data-io/data-list.c:368 src/language/data-io/data-list.c:457
-#: src/language/data-io/get-data.c:530
+#: src/language/data-io/get-data.c:529
 #, c-format
 msgid "%s is a duplicate variable name."
 msgstr ""
@@ -3090,55 +3436,60 @@ msgstr ""
 msgid "Cannot place variable %s on record %d when RECORDS=%d is specified."
 msgstr ""
 
-#: src/language/data-io/data-parser.c:460
-#: src/language/data-io/data-parser.c:469
+#: src/language/data-io/data-parser.c:458
+#: src/language/data-io/data-parser.c:467
 msgid "Quoted string extends beyond end of line."
 msgstr ""
 
-#: src/language/data-io/data-parser.c:525
+#: src/language/data-io/data-parser.c:515
+#, c-format
+msgid "Data for variable %s is not valid as format %s: %s"
+msgstr ""
+
+#: src/language/data-io/data-parser.c:544
 #, c-format
 msgid "Partial case of %d of %d records discarded."
 msgstr ""
 
-#: src/language/data-io/data-parser.c:572
+#: src/language/data-io/data-parser.c:601
 #, c-format
 msgid "Partial case discarded.  The first variable missing was %s."
 msgstr ""
 
-#: src/language/data-io/data-parser.c:610
+#: src/language/data-io/data-parser.c:643
 #, c-format
 msgid ""
 "Missing value(s) for all variables from %s onward.  These will be filled "
 "with the system-missing value or blanks, as appropriate."
 msgstr ""
 
-#: src/language/data-io/data-parser.c:630
+#: src/language/data-io/data-parser.c:663
 msgid "Record ends in data not part of any field."
 msgstr ""
 
-#: src/language/data-io/data-parser.c:650 src/language/data-io/print.c:404
+#: src/language/data-io/data-parser.c:683 src/language/data-io/print.c:404
 msgid "Record"
 msgstr ""
 
-#: src/language/data-io/data-parser.c:651 src/language/data-io/print.c:405
+#: src/language/data-io/data-parser.c:684 src/language/data-io/print.c:405
 #: src/ui/gui/psppire-var-sheet.c:541 src/ui/gui/psppire-var-store.c:839
 #: src/ui/gui/crosstabs.ui:89
 msgid "Columns"
 msgstr ""
 
-#: src/language/data-io/data-parser.c:652
-#: src/language/data-io/data-parser.c:689 src/language/data-io/print.c:406
+#: src/language/data-io/data-parser.c:685
+#: src/language/data-io/data-parser.c:722 src/language/data-io/print.c:406
 msgid "Format"
 msgstr ""
 
-#: src/language/data-io/data-parser.c:670
+#: src/language/data-io/data-parser.c:703
 #, c-format
 msgid "Reading %d record from %s."
 msgid_plural "Reading %d records from %s."
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/language/data-io/data-parser.c:704
+#: src/language/data-io/data-parser.c:737
 #, c-format
 msgid "Reading free-form data from %s."
 msgstr ""
@@ -3152,8 +3503,8 @@ msgstr ""
 
 #: src/language/data-io/data-reader.c:149
 #, c-format
-msgid "Could not open \"%s\" for reading as a data file: %s."
-msgstr ""
+msgid "Could not open `%s' for reading as a data file: %s."
+msgstr "Could not open ‘%s’ for reading as a data file: %s."
 
 #: src/language/data-io/data-reader.c:191
 msgid ""
@@ -3205,69 +3556,57 @@ msgstr ""
 msgid "Attempt to read beyond END DATA."
 msgstr ""
 
-#: src/language/data-io/data-reader.c:707
+#: src/language/data-io/data-reader.c:703
 msgid ""
 "This command is not valid here since the current input program does not "
 "access the inline file."
 msgstr ""
 
-#: src/language/data-io/data-writer.c:74
+#: src/language/data-io/data-writer.c:73
 #, c-format
-msgid "An error occurred while opening \"%s\" for writing as a data file: %s."
-msgstr ""
+msgid "An error occurred while opening `%s' for writing as a data file: %s."
+msgstr "An error occurred while opening ‘%s’ for writing as a data file: %s."
 
-#: src/language/data-io/data-writer.c:191
+#: src/language/data-io/data-writer.c:190
 #, c-format
-msgid "I/O error occurred writing data file \"%s\"."
-msgstr ""
+msgid "I/O error occurred writing data file `%s'."
+msgstr "I/O error occurred writing data file ‘%s’."
 
 #: src/language/data-io/get-data.c:64
 #, c-format
 msgid "Unsupported TYPE %s"
 msgstr ""
 
-#: src/language/data-io/get-data.c:260
+#: src/language/data-io/get-data.c:259
 #, c-format
 msgid ""
 "%s is allowed only with %s arrangement, but %s arrangement was stated or "
 "implied earlier in this command."
 msgstr ""
 
-#: src/language/data-io/get-data.c:315
-msgid "expecting FIXED or DELIMITED"
-msgstr ""
-
-#: src/language/data-io/get-data.c:328
+#: src/language/data-io/get-data.c:327
 msgid "Value of FIRSTCASE must be 1 or greater."
 msgstr ""
 
-#: src/language/data-io/get-data.c:353
-msgid "expecting LINE or VARIABLES"
-msgstr ""
-
-#: src/language/data-io/get-data.c:366
+#: src/language/data-io/get-data.c:365
 msgid "Value of FIXCASE must be at least 1."
 msgstr ""
 
-#: src/language/data-io/get-data.c:386
+#: src/language/data-io/get-data.c:385
 msgid "Value of FIRST must be at least 1."
 msgstr ""
 
-#: src/language/data-io/get-data.c:398
+#: src/language/data-io/get-data.c:397
 msgid "Value of PERCENT must be between 1 and 100."
 msgstr ""
 
-#: src/language/data-io/get-data.c:447
+#: src/language/data-io/get-data.c:446
 msgid ""
 "In compatible syntax mode, the QUALIFIER string must contain exactly one "
 "character."
 msgstr ""
 
-#: src/language/data-io/get-data.c:462
-msgid "expecting VARIABLES"
-msgstr ""
-
-#: src/language/data-io/get-data.c:484
+#: src/language/data-io/get-data.c:483
 #: src/language/data-io/placement-parser.c:378
 #, c-format
 msgid ""
@@ -3275,17 +3614,13 @@ msgid ""
 "Data fields must be listed in order of increasing record number."
 msgstr ""
 
-#: src/language/data-io/get-data.c:493
+#: src/language/data-io/get-data.c:492
 #, c-format
 msgid ""
 "The record number specified, %ld, exceeds the number of records per case "
 "specified on FIXCASE, %d."
 msgstr ""
 
-#: src/language/data-io/get.c:99
-msgid "expecting COMM or TAPE"
-msgstr ""
-
 #: src/language/data-io/inpt-pgm.c:130
 msgid "Unexpected end-of-file within INPUT PROGRAM."
 msgstr ""
@@ -3294,10 +3629,6 @@ msgstr ""
 msgid "Input program did not create any variables."
 msgstr ""
 
-#: src/language/data-io/inpt-pgm.c:288
-msgid "COLUMN subcommand multiply specified."
-msgstr ""
-
 #: src/language/data-io/inpt-pgm.c:338
 msgid ""
 "REREAD: Column numbers must be positive finite numbers.  Column set to 1."
@@ -3364,23 +3695,28 @@ msgid_plural "Writing %zu records."
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/language/data-io/save.c:223 src/language/data-io/save.c:238
-#: src/language/data-io/save.c:266
+#: src/language/data-io/save-translate.c:164
+#: src/language/data-io/save-translate.c:178
 #, c-format
-msgid "expecting %s or %s"
+msgid "The %s string must contain exactly one character."
 msgstr ""
 
+#: src/language/data-io/save-translate.c:248
+#, c-format
+msgid "Output file `%s' exists but REPLACE was not specified."
+msgstr "Output file ‘%s’ exists but REPLACE was not specified."
+
 #: src/language/data-io/trim.c:88
 #, c-format
 msgid ""
 "Cannot rename %s as %s because there already exists a variable named %s.  To "
 "rename variables with overlapping names, use a single RENAME subcommand such "
-"as \"/RENAME (A=B)(B=C)(C=A)\", or equivalently, \"/RENAME (A B C=B C A)\"."
+"as `/RENAME (A=B)(B=C)(C=A)', or equivalently, `/RENAME (A B C=B C A)'."
 msgstr ""
 
 #: src/language/data-io/trim.c:114
 msgid "`=' expected after variable list."
-msgstr ""
+msgstr "‘=’ expected after variable list."
 
 #: src/language/data-io/trim.c:122
 #, c-format
@@ -3402,65 +3738,64 @@ msgstr ""
 msgid "Cannot DROP all variables from dictionary."
 msgstr ""
 
-#: src/language/expressions/evaluate.c:155
+#: src/language/expressions/evaluate.c:149
 msgid "expecting number or string"
 msgstr ""
 
-#: src/language/expressions/evaluate.c:169
+#: src/language/expressions/evaluate.c:163
 #, c-format
 msgid "Duplicate variable name %s."
 msgstr ""
 
-#: src/language/expressions/helpers.c:51
+#: src/language/expressions/helpers.c:38
 msgid ""
 "One of the arguments to a DATE function is not an integer.  The result will "
 "be system-missing."
 msgstr ""
 
-#: src/language/expressions/helpers.c:73
+#: src/language/expressions/helpers.c:66
 msgid ""
 "The week argument to DATE.WKYR is not an integer.  The result will be system-"
 "missing."
 msgstr ""
 
-#: src/language/expressions/helpers.c:79
+#: src/language/expressions/helpers.c:72
 msgid ""
 "The week argument to DATE.WKYR is outside the acceptable range of 1 to 53.  "
 "The result will be system-missing."
 msgstr ""
 
-#: src/language/expressions/helpers.c:101
+#: src/language/expressions/helpers.c:94
 msgid ""
 "The day argument to DATE.YRDAY is not an integer.  The result will be system-"
 "missing."
 msgstr ""
 
-#: src/language/expressions/helpers.c:107
+#: src/language/expressions/helpers.c:100
 msgid ""
 "The day argument to DATE.YRDAY is outside the acceptable range of 1 to 366.  "
 "The result will be system-missing."
 msgstr ""
 
-#: src/language/expressions/helpers.c:129
+#: src/language/expressions/helpers.c:122
 msgid ""
 "The year argument to YRMODA is greater than 47516.  The result will be "
 "system-missing."
 msgstr ""
 
-#: src/language/expressions/helpers.c:182
+#. TRANSLATORS: Don't translate the the actual unit names `weeks', `days' etc
+#. They must remain in their original English.
+#: src/language/expressions/helpers.c:177
 #, c-format
 msgid ""
-"Unrecognized date unit \"%.*s\".  Valid date units are \"years\", \"quarters"
-"\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", and \"seconds\"."
+"Unrecognized date unit `%.*s'.  Valid date units are `years', `quarters', "
+"`months', `weeks', `days', `hours', `minutes', and `seconds'."
 msgstr ""
-"Unrecognised date unit \"%.*s\".  Valid date units are \"years\", \"quarters"
-"\"\n"
-"\"\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", and \"seconds"
-"\"."
+"Unrecognised date unit `%.*s'.  Valid date units are `years', `quarters', "
+"`months', `weeks', `days', `hours', `minutes', and `seconds'."
 
-#: src/language/expressions/helpers.c:332
-msgid ""
-"Invalid DATESUM method.  Valid choices are \"closest\" and \"rollover\"."
+#: src/language/expressions/helpers.c:327
+msgid "Invalid DATESUM method.  Valid choices are `closest' and `rollover'."
 msgstr ""
 
 #: src/language/expressions/parse.c:259
@@ -3475,140 +3810,146 @@ msgid ""
 "Type mismatch: expression has %s type, but a string value is required here."
 msgstr ""
 
-#: src/language/expressions/parse.c:427
+#: src/language/expressions/parse.c:433
 #, c-format
 msgid "Type mismatch while applying %s operator: cannot convert %s to %s."
 msgstr ""
 
-#: src/language/expressions/parse.c:643
+#: src/language/expressions/parse.c:649
 msgid ""
-"Chaining relational operators (e.g. \"a < b < c\") will not produce the "
+"Chaining relational operators (e.g. `a < b < c') will not produce the "
 "mathematically expected result.  Use the AND logical operator to fix the "
-"problem (e.g. \"a < b AND b < c\").  If chaining is really intended, "
-"parentheses will disable this warning (e.g. \"(a < b) < c\".)"
+"problem (e.g. `a < b AND b < c').  If chaining is really intended, "
+"parentheses will disable this warning (e.g. `(a < b) < c'.)"
 msgstr ""
 
-#: src/language/expressions/parse.c:744
+#: src/language/expressions/parse.c:750
 msgid ""
-"The exponentiation operator (\"**\") is left-associative, even though right-"
-"associative semantics are more useful.  That is, \"a**b**c\" equals \"(a**b)"
-"**c\", not as \"a**(b**c)\".  To disable this warning, insert parentheses."
+"The exponentiation operator (`**') is left-associative, even though right-"
+"associative semantics are more useful.  That is, `a**b**c' equals `(a**b)"
+"**c', not as `a**(b**c)'.  To disable this warning, insert parentheses."
 msgstr ""
 
-#: src/language/expressions/parse.c:809
+#: src/language/expressions/parse.c:815
 #, c-format
 msgid "Unknown system variable %s."
 msgstr ""
 
-#: src/language/expressions/parse.c:857
+#: src/language/expressions/parse.c:863
 #, c-format
 msgid "Unknown identifier %s."
 msgstr ""
 
-#: src/language/expressions/parse.c:892
-msgid "in expression"
-msgstr ""
-
-#: src/language/expressions/parse.c:1073
+#: src/language/expressions/parse.c:1076
 #, c-format
 msgid "%s must have at least %d arguments in list."
 msgstr ""
 
-#: src/language/expressions/parse.c:1082
+#: src/language/expressions/parse.c:1085
 #, c-format
-msgid "%s must have even number of arguments in list."
+msgid "%s must have an even number of arguments in list."
 msgstr ""
 
-#: src/language/expressions/parse.c:1085
+#: src/language/expressions/parse.c:1088
 #, c-format
 msgid "%s must have multiple of %d arguments in list."
 msgstr ""
 
-#: src/language/expressions/parse.c:1095
+#: src/language/expressions/parse.c:1098
 #, c-format
 msgid "%s function does not accept a minimum valid argument count."
 msgstr ""
 
-#: src/language/expressions/parse.c:1104
+#: src/language/expressions/parse.c:1107
 #, c-format
 msgid "%s requires at least %d valid arguments in list."
 msgstr ""
 
-#: src/language/expressions/parse.c:1110
+#: src/language/expressions/parse.c:1113
 #, c-format
 msgid ""
 "With %s, using minimum valid argument count of %d does not make sense when "
 "passing only %d arguments in list."
 msgstr ""
 
-#: src/language/expressions/parse.c:1164
+#: src/language/expressions/parse.c:1167
 #, c-format
 msgid "Type mismatch invoking %s as "
 msgstr ""
 
-#: src/language/expressions/parse.c:1169
+#: src/language/expressions/parse.c:1172
 msgid "Function invocation "
 msgstr ""
 
-#: src/language/expressions/parse.c:1171
+#: src/language/expressions/parse.c:1174
 msgid " does not match any known function.  Candidates are:"
 msgstr ""
 
-#: src/language/expressions/parse.c:1201
+#: src/language/expressions/parse.c:1204
 #, c-format
 msgid "No function or vector named %s."
 msgstr ""
 
-#: src/language/expressions/parse.c:1244
+#: src/language/expressions/parse.c:1247
 #, c-format
 msgid "expecting `,' or `)' invoking %s function"
-msgstr ""
+msgstr "expecting ‘,’ or ‘)’ invoking %s function"
 
-#: src/language/expressions/parse.c:1264
+#: src/language/expressions/parse.c:1267
 #, c-format
 msgid "%s is a PSPP extension."
 msgstr ""
 
-#: src/language/expressions/parse.c:1273
+#: src/language/expressions/parse.c:1276
 #, c-format
 msgid "%s may not appear after TEMPORARY."
 msgstr ""
 
-#: src/libpspp/hash.c:545
-#, c-format
-msgid "hash table:"
+#: src/libpspp/ext-array.c:56
+msgid "failed to create temporary file"
 msgstr ""
 
-#: src/libpspp/message.c:128
-msgid "error"
+#: src/libpspp/ext-array.c:96
+msgid "seeking in temporary file"
 msgstr ""
 
-#: src/libpspp/message.c:131
-msgid "warning"
+#: src/libpspp/ext-array.c:115
+msgid "reading temporary file"
 msgstr ""
 
-#: src/libpspp/message.c:135
-msgid "note"
+#: src/libpspp/ext-array.c:117
+msgid "unexpected end of file reading temporary file"
 msgstr ""
 
-#: src/libpspp/tmpfile.c:56
-msgid "failed to create temporary file"
+#: src/libpspp/ext-array.c:136
+msgid "writing to temporary file"
 msgstr ""
 
-#: src/libpspp/tmpfile.c:97
-msgid "seeking in temporary file"
+#: src/libpspp/message.c:145
+msgid "error"
 msgstr ""
 
-#: src/libpspp/tmpfile.c:116
-msgid "reading temporary file"
+#: src/libpspp/message.c:148
+msgid "warning"
 msgstr ""
 
-#: src/libpspp/tmpfile.c:118
-msgid "unexpected end of file reading temporary file"
+#: src/libpspp/message.c:152
+msgid "note"
 msgstr ""
 
-#: src/libpspp/tmpfile.c:137
-msgid "writing to temporary file"
+#: src/libpspp/message.c:251
+#, c-format
+msgid "Notes (%d) exceed limit (%d).  Suppressing further notes."
+msgstr ""
+
+#: src/libpspp/message.c:259
+#, c-format
+msgid "Warnings (%d) exceed limit (%d).  Syntax processing will be halted."
+msgstr ""
+
+#: src/libpspp/message.c:262
+#, c-format
+msgid "Errors (%d) exceed limit (%d).  Syntax processing will be halted."
 msgstr ""
 
 #: src/libpspp/zip-writer.c:91
@@ -3641,34 +3982,34 @@ msgstr ""
 msgid "Empirical with averaging"
 msgstr ""
 
-#: src/output/ascii.c:278
+#: src/output/ascii.c:279
 #, c-format
 msgid "%s: %s must be positive integer or `auto'"
-msgstr ""
+msgstr "%s: %s must be positive integer or ‘auto’"
 
-#: src/output/ascii.c:311
+#: src/output/ascii.c:312
 #, c-format
 msgid ""
 "ascii: page excluding margins and headers must be at least %d characters "
 "wide by %d lines long, but as configured is only %d characters by %d lines"
 msgstr ""
 
-#: src/output/ascii.c:360
+#: src/output/ascii.c:361
 #, c-format
-msgid "ascii: closing output file \"%s\""
-msgstr ""
+msgid "ascii: closing output file `%s'"
+msgstr "ascii: closing output file ‘%s’"
 
-#: src/output/ascii.c:503
+#: src/output/ascii.c:504
 #, c-format
 msgid "See %s for a chart."
 msgstr ""
 
-#: src/output/ascii.c:806
+#: src/output/ascii.c:807
 #, c-format
-msgid "ascii: opening output file \"%s\""
-msgstr ""
+msgid "ascii: opening output file `%s'"
+msgstr "ascii: opening output file ‘%s’"
 
-#: src/output/ascii.c:913 src/output/cairo.c:784
+#: src/output/ascii.c:914
 #, c-format
 msgid "%s - Page %d"
 msgstr ""
@@ -3676,98 +4017,103 @@ msgstr ""
 #: src/output/csv.c:87 src/output/html.c:106 src/output/journal.c:93
 #: src/output/msglog.c:66
 #, c-format
-msgid "error opening output file \"%s\""
-msgstr ""
+msgid "error opening output file `%s'"
+msgstr "error opening output file ‘%s’"
 
-#: src/output/driver.c:330
+#. TRANSLATORS: Don't translate the words `terminal' or `listing'.
+#: src/output/driver.c:331
 #, c-format
 msgid ""
-"%s is not a valid device type (the choices are \"terminal\" and \"listing\")"
+"%s is not a valid device type (the choices are `terminal' and `listing')"
 msgstr ""
 
-#: src/output/driver.c:343
+#: src/output/driver.c:344
 #, c-format
-msgid "%s: unknown option \"%s\""
-msgstr ""
+msgid "%s: unknown option `%s'"
+msgstr "%s: unknown option ‘%s’"
 
 #: src/output/html.c:114
 msgid "PSPP Output"
 msgstr ""
 
+#: src/output/html.c:258
+msgid "No description"
+msgstr ""
+
 #: src/output/journal.c:67
 #, c-format
-msgid "error writing output file \"%s\""
-msgstr ""
+msgid "error writing output file `%s'"
+msgstr "error writing output file ‘%s’"
 
 #: src/output/measure.c:65
 #, c-format
 msgid "`%s' is not a valid length."
-msgstr ""
+msgstr "‘%s’ is not a valid length."
 
 #: src/output/measure.c:93
 #, c-format
 msgid "syntax error in paper size `%s'"
-msgstr ""
+msgstr "syntax error in paper size ‘%s’"
 
 #: src/output/measure.c:230
 #, c-format
 msgid "unknown paper type `%.*s'"
-msgstr ""
+msgstr "unknown paper type ‘%.*s’"
 
 #: src/output/measure.c:248
 #, c-format
-msgid "error opening input file \"%s\""
-msgstr ""
+msgid "error opening input file `%s'"
+msgstr "error opening input file ‘%s’"
 
 #: src/output/measure.c:259
 #, c-format
-msgid "error reading file \"%s\""
-msgstr ""
+msgid "error reading file `%s'"
+msgstr "error reading file ‘%s’"
 
 #: src/output/measure.c:276
 #, c-format
-msgid "paper size file \"%s\" does not state a paper size"
-msgstr ""
+msgid "paper size file `%s' does not state a paper size"
+msgstr "paper size file ‘%s’ does not state a paper size"
 
 #: src/output/options.c:113
 #, c-format
-msgid "%s: \"%s\" is \"%s\" but a Boolean value is required"
-msgstr ""
+msgid "%s: `%s' is `%s' but a Boolean value is required"
+msgstr "%s: ‘%s’ is ‘%s’ but a Boolean value is required"
 
 #: src/output/options.c:188
 #, c-format
-msgid "%s: \"%s\" is \"%s\" but one of the following is required: %s"
-msgstr ""
+msgid "%s: `%s' is `%s' but one of the following is required: %s"
+msgstr "%s: ‘%s’ is ‘%s’ but one of the following is required: %s"
 
 #: src/output/options.c:232
 #, c-format
-msgid "%s: \"%s\" is \"%s\" but a nonnegative integer is required"
-msgstr ""
+msgid "%s: `%s' is `%s' but a nonnegative integer is required"
+msgstr "%s: ‘%s’ is ‘%s’ but a nonnegative integer is required"
 
 #: src/output/options.c:236
 #, c-format
-msgid "%s: \"%s\" is \"%s\" but a positive integer is required"
-msgstr ""
+msgid "%s: `%s' is `%s' but a positive integer is required"
+msgstr "%s: ‘%s’ is ‘%s’ but a positive integer is required"
 
 #: src/output/options.c:239
 #, c-format
-msgid "%s: \"%s\" is \"%s\" but an integer is required"
-msgstr ""
+msgid "%s: `%s' is `%s' but an integer is required"
+msgstr "%s: ‘%s’ is ‘%s’ but an integer is required"
 
 #: src/output/options.c:242
 #, c-format
-msgid "%s: \"%s\" is \"%s\" but an integer greater than %d is required"
-msgstr ""
+msgid "%s: `%s' is `%s' but an integer greater than %d is required"
+msgstr "%s: ‘%s’ is ‘%s’ but an integer greater than %d is required"
 
 #: src/output/options.c:247
 #, c-format
-msgid "%s: \"%s\" is \"%s\"  but an integer between %d and %d is required"
+msgid "%s: `%s' is `%s'  but an integer between %d and %d is required"
 msgstr ""
 
 #: src/output/options.c:326
 #, c-format
-msgid "%s: \"%s\" is \"%s\" but a file name that contains \"#\" is required."
-msgstr ""
+msgid "%s: `%s' is `%s' but a file name that contains `#' is required."
+msgstr "%s: ‘%s’ is ‘%s’ but a file name that contains ‘#’ is required."
 
 #: src/output/tab.c:206
 #, c-format
@@ -3785,39 +4131,39 @@ msgid ""
 "bad box: (%d+%d=%d,%d+%d=%d)-(%d+%d=%d,%d+%d=%d) in table size (%d,%d)\n"
 msgstr ""
 
-#: src/output/cairo.c:295
+#: src/output/cairo.c:193
 #, c-format
-msgid "error opening output file \"%s\": %s"
-msgstr ""
+msgid "`%s': bad font specification"
+msgstr "‘%s’: bad font specification"
+
+#: src/output/cairo.c:357
+#, c-format
+msgid "error opening output file `%s': %s"
+msgstr "error opening output file ‘%s’: %s"
 
-#: src/output/cairo.c:312
+#: src/output/cairo.c:374
 #, c-format
 msgid ""
 "The defined page is not wide enough to hold at least %d characters in the "
 "default font.  In fact, there's only room for %d characters."
 msgstr ""
 
-#: src/output/cairo.c:322
+#: src/output/cairo.c:384
 #, c-format
 msgid ""
-"The defined page is not long enough to hold margins and headers, plus least %"
-"d lines of the default fonts.  In fact, there's only room for %d lines."
+"The defined page is not long enough to hold at least %d lines in the default "
+"font.  In fact, there's only room for %d lines."
 msgstr ""
 
-#: src/output/cairo.c:376
+#: src/output/cairo.c:435
 #, c-format
 msgid "error drawing output for %s driver: %s"
 msgstr ""
 
-#: src/output/cairo.c:864
+#: src/output/cairo.c:1041
 #, c-format
-msgid "\"%s\": bad font specification"
-msgstr ""
-
-#: src/output/cairo.c:1088
-#, c-format
-msgid "error writing output file \"%s\": %s"
-msgstr ""
+msgid "error writing output file `%s': %s"
+msgstr "error writing output file ‘%s’: %s"
 
 #: src/output/charts/np-plot-cairo.c:37
 #, c-format
@@ -3862,57 +4208,93 @@ msgstr ""
 msgid "Eigenvalue"
 msgstr ""
 
-#: src/output/odt.c:93
+#: src/output/odt.c:94
 msgid "error creating temporary file"
 msgstr ""
 
-#: src/ui/source-init-opts.c:78
-msgid "Algorithm must be either \"compatible\" or \"enhanced\"."
-msgstr ""
+#: src/ui/source-init-opts.c:80
+msgid "Algorithm must be either `compatible' or `enhanced'."
+msgstr "Algorithm must be either ‘compatible’ or ‘enhanced’."
 
-#: src/ui/source-init-opts.c:103
-msgid "Syntax must be either \"compatible\" or \"enhanced\"."
-msgstr ""
+#: src/ui/source-init-opts.c:107
+msgid "Syntax must be either `compatible' or `enhanced'."
+msgstr "Syntax must be either ‘compatible’ or ‘enhanced’."
 
-#: src/ui/terminal/main.c:128
+#: src/ui/terminal/main.c:146
 msgid ""
 "Stopping syntax file processing here to avoid a cascade of dependent command "
 "failures."
 msgstr ""
 
-#: src/ui/terminal/msg-ui.c:127
+#: src/ui/terminal/terminal.c:62
 #, c-format
-msgid "Notes (%d) exceed limit (%d).  Suppressing further notes."
-msgstr ""
+msgid "could not access definition for terminal `%s'"
+msgstr "could not access definition for terminal ‘%s’"
 
-#: src/ui/terminal/msg-ui.c:135
+#: src/ui/terminal/terminal-opts.c:120
 #, c-format
-msgid "Warnings (%d) exceed limit (%d)."
-msgstr ""
+msgid "%s: output option missing `='"
+msgstr "%s: output option missing ‘=’"
 
-#: src/ui/terminal/msg-ui.c:138
+#: src/ui/terminal/terminal-opts.c:127
 #, c-format
-msgid "Errors (%d) exceed limit (%d)."
+msgid "%s: output option specified more than once"
 msgstr ""
 
-#: src/ui/terminal/terminal.c:72
+#: src/ui/terminal/terminal-opts.c:187
 #, c-format
-msgid "could not access definition for terminal `%s'"
+msgid ""
+"PSPP, a program for statistical analysis of sample data.\n"
+"Usage: %s [OPTION]... FILE...\n"
+"\n"
+"Arguments to long options also apply to equivalent short options.\n"
+"\n"
+"Output options:\n"
+"  -o, --output=FILE         output to FILE, default format from FILE's name\n"
+"  -O format=FORMAT          override format for previous -o\n"
+"  -O OPTION=VALUE           set output option to customize previous -o\n"
+"  -O device={terminal|listing}  override device type for previous -o\n"
+"  -e, --error-file=FILE     append errors, warnings, and notes to FILE\n"
+"  --no-output               disable default output driver\n"
+"Supported output formats: %s\n"
+"\n"
+"Language options:\n"
+"  -I, --include=DIR         append DIR to search path\n"
+"  -I-, --no-include         clear search path\n"
+"  -r, --no-statrc           disable running rc file at startup\n"
+"  -a, --algorithm={compatible|enhanced}\n"
+"                            set to `compatible' if you want output\n"
+"                            calculated from broken algorithms\n"
+"  -x, --syntax={compatible|enhanced}\n"
+"                            set to `compatible' to disable PSPP extensions\n"
+"  -i, --interactive         interpret syntax in interactive mode\n"
+"  -s, --safer               don't allow some unsafe operations\n"
+"Default search path:%s\n"
+"\n"
+"Informative output:\n"
+"  -h, --help                display this help and exit\n"
+"  -V, --version             output version information and exit\n"
+"\n"
+"Non-option arguments are interpreted as syntax files to execute.\n"
 msgstr ""
 
-#: src/ui/terminal/terminal-opts.c:119
-#, c-format
-msgid "%s: output option missing `='"
+#: src/ui/gui/aggregate-dialog.c:162
+msgid "Aggregate destination file"
 msgstr ""
 
-#: src/ui/terminal/terminal-opts.c:126
-#, c-format
-msgid "%s: output option specified more than once"
+#: src/ui/gui/aggregate-dialog.c:173 src/ui/gui/psppire-data-window.c:403
+#: src/ui/gui/psppire-data-window.c:615
+msgid "System Files (*.sav)"
+msgstr ""
+
+#: src/ui/gui/aggregate-dialog.c:179 src/ui/gui/psppire-data-window.c:409
+#: src/ui/gui/psppire-data-window.c:621
+msgid "Portable Files (*.por) "
 msgstr ""
 
-#: src/ui/gui/checkbox-treeview.c:92 src/language/stats/crosstabs.q:1213
-#: src/language/stats/crosstabs.q:1240 src/language/stats/crosstabs.q:1263
-#: src/language/stats/crosstabs.q:1287 src/language/stats/examine.q:1638
+#: src/ui/gui/checkbox-treeview.c:92 src/language/stats/crosstabs.q:1205
+#: src/language/stats/crosstabs.q:1232 src/language/stats/crosstabs.q:1255
+#: src/language/stats/crosstabs.q:1279 src/language/stats/examine.q:1638
 msgid "Statistic"
 msgstr ""
 
@@ -3925,7 +4307,7 @@ msgstr ""
 msgid "Chisq"
 msgstr ""
 
-#: src/ui/gui/crosstabs-dialog.c:42 src/language/stats/crosstabs.q:1774
+#: src/ui/gui/crosstabs-dialog.c:42 src/language/stats/crosstabs.q:1768
 msgid "Phi"
 msgstr ""
 
@@ -3933,7 +4315,7 @@ msgstr ""
 msgid "CC"
 msgstr ""
 
-#: src/ui/gui/crosstabs-dialog.c:44 src/language/stats/crosstabs.q:1912
+#: src/ui/gui/crosstabs-dialog.c:44 src/language/stats/crosstabs.q:1906
 msgid "Lambda"
 msgstr ""
 
@@ -3953,7 +4335,7 @@ msgstr ""
 msgid "Risk"
 msgstr ""
 
-#: src/ui/gui/crosstabs-dialog.c:49 src/language/stats/crosstabs.q:1779
+#: src/ui/gui/crosstabs-dialog.c:49 src/language/stats/crosstabs.q:1773
 msgid "Gamma"
 msgstr ""
 
@@ -3961,11 +4343,11 @@ msgstr ""
 msgid "D"
 msgstr ""
 
-#: src/ui/gui/crosstabs-dialog.c:51 src/language/stats/crosstabs.q:1782
+#: src/ui/gui/crosstabs-dialog.c:51 src/language/stats/crosstabs.q:1776
 msgid "Kappa"
 msgstr ""
 
-#: src/ui/gui/crosstabs-dialog.c:52 src/language/stats/crosstabs.q:1916
+#: src/ui/gui/crosstabs-dialog.c:52 src/language/stats/crosstabs.q:1910
 msgid "Eta"
 msgstr ""
 
@@ -4004,10 +4386,6 @@ msgstr ""
 msgid "Adjusted Std. Residual"
 msgstr ""
 
-#: src/ui/gui/descriptives-dialog.c:41 src/ui/gui/frequencies-dialog.c:42
-msgid "Standard deviation"
-msgstr ""
-
 #: src/ui/gui/descriptives-dialog.c:46
 msgid "Standard error"
 msgstr ""
@@ -4043,10 +4421,6 @@ msgstr ""
 msgid "Median"
 msgstr ""
 
-#: src/ui/gui/helper.c:197
-msgid "Sorry. The help system hasn't yet been implemented."
-msgstr ""
-
 #: src/ui/gui/help-menu.c:67
 msgid "A program for the analysis of sampled data"
 msgstr ""
@@ -4061,7 +4435,7 @@ msgstr "John Darrington"
 #, c-format
 msgid ""
 "Cannot open reference manual: %s.  The PSPP user manual is also available at "
-"http://www.gnu.org/software/pspp/documentation.html"
+"%s"
 msgstr ""
 
 #: src/ui/gui/help-menu.c:117
@@ -4072,6 +4446,36 @@ msgstr ""
 msgid "_Reference Manual"
 msgstr ""
 
+#: src/ui/gui/main.c:99
+#, c-format
+msgid ""
+"PSPPIRE, a GUI for PSPP, a program for statistical analysis of sample data.\n"
+"Usage: %s [OPTION]... FILE\n"
+"\n"
+"Arguments to long options also apply to equivalent short options.\n"
+"\n"
+"GUI options:\n"
+"  -q, --no-splash           don't show splash screen during startup\n"
+"\n"
+"%sLanguage options:\n"
+"  -I, --include=DIR         append DIR to search path\n"
+"  -I-, --no-include         clear search path\n"
+"  -a, --algorithm={compatible|enhanced}\n"
+"                            set to `compatible' if you want output\n"
+"                            calculated from broken algorithms\n"
+"  -x, --syntax={compatible|enhanced}\n"
+"                            set to `compatible' to disable PSPP extensions\n"
+"  -i, --interactive         interpret syntax in interactive mode\n"
+"  -s, --safer               don't allow some unsafe operations\n"
+"Default search path:%s\n"
+"\n"
+"Informative output:\n"
+"  -h, --help                display this help and exit\n"
+"  -V, --version             output version information and exit\n"
+"\n"
+"A non-option argument is interpreted as a .sav or .por file to load.\n"
+msgstr ""
+
 #: src/ui/gui/missing-val-dialog.c:113 src/ui/gui/missing-val-dialog.c:167
 msgid "Incorrect value for variable type"
 msgstr ""
@@ -4105,138 +4509,161 @@ msgstr ""
 msgid "var"
 msgstr ""
 
-#: src/ui/gui/psppire-data-window.c:212
+#: src/ui/gui/psppire-data-window.c:213
 msgid "Transformations Pending"
 msgstr ""
 
-#: src/ui/gui/psppire-data-window.c:228
+#: src/ui/gui/psppire-data-window.c:229
 msgid "Filter off"
 msgstr ""
 
-#: src/ui/gui/psppire-data-window.c:242
+#: src/ui/gui/psppire-data-window.c:243
 #, c-format
 msgid "Filter by %s"
 msgstr ""
 
-#: src/ui/gui/psppire-data-window.c:263
+#: src/ui/gui/psppire-data-window.c:264
 msgid "No Split"
 msgstr ""
 
-#: src/ui/gui/psppire-data-window.c:272
+#: src/ui/gui/psppire-data-window.c:273
 msgid "Split by "
 msgstr ""
 
-#: src/ui/gui/psppire-data-window.c:300
+#: src/ui/gui/psppire-data-window.c:301
 msgid "Weights off"
 msgstr ""
 
-#: src/ui/gui/psppire-data-window.c:314
+#: src/ui/gui/psppire-data-window.c:315
 #, c-format
 msgid "Weight by %s"
 msgstr ""
 
-#: src/ui/gui/psppire-data-window.c:382
+#: src/ui/gui/psppire-data-window.c:383
 msgid "Open"
 msgstr ""
 
-#: src/ui/gui/psppire-data-window.c:392
+#: src/ui/gui/psppire-data-window.c:393
 msgid "Data and Syntax Files"
 msgstr ""
 
-#: src/ui/gui/psppire-data-window.c:402 src/ui/gui/psppire-data-window.c:614
-msgid "System Files (*.sav)"
-msgstr ""
-
-#: src/ui/gui/psppire-data-window.c:408 src/ui/gui/psppire-data-window.c:620
-msgid "Portable Files (*.por) "
-msgstr ""
-
-#: src/ui/gui/psppire-data-window.c:414 src/ui/gui/psppire-syntax-window.c:292
+#: src/ui/gui/psppire-data-window.c:415 src/ui/gui/psppire-syntax-window.c:501
 msgid "Syntax Files (*.sps) "
 msgstr ""
 
-#: src/ui/gui/psppire-data-window.c:420 src/ui/gui/psppire-data-window.c:626
-#: src/ui/gui/psppire-syntax-window.c:298
+#: src/ui/gui/psppire-data-window.c:421 src/ui/gui/psppire-data-window.c:627
+#: src/ui/gui/psppire-syntax-window.c:507
 msgid "All Files"
 msgstr ""
 
-#: src/ui/gui/psppire-data-window.c:606
+#: src/ui/gui/psppire-data-window.c:607 src/ui/gui/aggregate.ui:448
 msgid "Save"
 msgstr ""
 
-#: src/ui/gui/psppire-data-window.c:639
+#: src/ui/gui/psppire-data-window.c:640
 msgid "Portable File"
 msgstr ""
 
-#: src/ui/gui/psppire-data-window.c:776
+#: src/ui/gui/psppire-data-window.c:777
 msgid "Font Selection"
 msgstr ""
 
-#: src/ui/gui/psppire-data-window.c:1264
+#. TRANSLATORS: This will form a filename.  Please avoid whitespace.
+#: src/ui/gui/psppire-data-window.c:1271
+msgid "PSPP-data"
+msgstr ""
+
+#: src/ui/gui/psppire-data-window.c:1272
 msgid "Data Editor"
 msgstr ""
 
-#: src/ui/gui/psppire-output-window.c:458
-msgid "Infer file type from extention"
+#. TRANSLATORS: This string must be a valid variable name.  That means:
+#. - The string must be at most 64 bytes (not characters) long.
+#. - The string may not contain whitespace.
+#. - The first character may not be '$'
+#. - The first character may not be a digit
+#. - The final charactor may not be '.' or '_'
+#.
+#: src/ui/gui/psppire-dict.c:366
+#, c-format
+msgid "VAR%05d"
 msgstr ""
 
-#: src/ui/gui/psppire-output-window.c:459
+#: src/ui/gui/psppire-output-window.c:456
+msgid "Infer file type from extension"
+msgstr ""
+
+#: src/ui/gui/psppire-output-window.c:457
 msgid "PDF (*.pdf)"
 msgstr ""
 
-#: src/ui/gui/psppire-output-window.c:460
+#: src/ui/gui/psppire-output-window.c:458
 msgid "HTML (*.html)"
 msgstr ""
 
-#: src/ui/gui/psppire-output-window.c:461
+#: src/ui/gui/psppire-output-window.c:459
 msgid "OpenDocument (*.odt)"
 msgstr ""
 
-#: src/ui/gui/psppire-output-window.c:462
+#: src/ui/gui/psppire-output-window.c:460
 msgid "Text (*.txt)"
 msgstr ""
 
-#: src/ui/gui/psppire-output-window.c:463
+#: src/ui/gui/psppire-output-window.c:461
 msgid "PostScript (*.ps)"
 msgstr ""
 
-#: src/ui/gui/psppire-output-window.c:464
+#: src/ui/gui/psppire-output-window.c:462
 msgid "Comma-Separated Values (*.csv)"
 msgstr ""
 
-#: src/ui/gui/psppire-output-window.c:565
+#: src/ui/gui/psppire-output-window.c:563
 msgid "Export Output"
 msgstr ""
 
-#: src/ui/gui/psppire-output-window.c:1042
+#: src/ui/gui/psppire-output-window.c:817
+msgid "failed to create temporary directory"
+msgstr ""
+
+#. TRANSLATORS: This will form a filename.  Please avoid whitespace.
+#: src/ui/gui/psppire-output-window.c:1048
+msgid "Output"
+msgstr ""
+
+#: src/ui/gui/psppire-output-window.c:1049
 msgid "Output Viewer"
 msgstr ""
 
-#: src/ui/gui/psppire-syntax-window.c:265
+#: src/ui/gui/psppire-syntax-window.c:474
 #, c-format
-msgid "Saved file \"%s\""
-msgstr ""
+msgid "Saved file `%s'"
+msgstr "Saved file ‘%s’"
 
-#: src/ui/gui/psppire-syntax-window.c:284
+#: src/ui/gui/psppire-syntax-window.c:493
 msgid "Save Syntax"
 msgstr ""
 
-#: src/ui/gui/psppire-syntax-window.c:496
+#. TRANSLATORS: This will form a filename.  Please avoid whitespace.
+#: src/ui/gui/psppire-syntax-window.c:745
+msgid "Syntax"
+msgstr ""
+
+#: src/ui/gui/psppire-syntax-window.c:746
 msgid "Syntax Editor"
 msgstr ""
 
-#: src/ui/gui/psppire-syntax-window.c:510
+#: src/ui/gui/psppire-syntax-window.c:760
 #, c-format
-msgid "Cannot load syntax file '%s'"
+msgid "Cannot load syntax file `%s'"
 msgstr ""
 
 #: src/ui/gui/psppire-var-sheet.c:535 src/ui/gui/psppire-var-store.c:833
-#: src/language/stats/crosstabs.q:1288 src/ui/gui/psppire.ui:2055
+#: src/language/stats/crosstabs.q:1280 src/ui/gui/compute.ui:599
 msgid "Type"
 msgstr ""
 
 #: src/ui/gui/psppire-var-sheet.c:536 src/ui/gui/psppire-var-store.c:834
-#: src/ui/gui/psppire.ui:1974
+#: src/ui/gui/compute.ui:517
 msgid "Width"
 msgstr ""
 
@@ -4249,7 +4676,7 @@ msgid "Values"
 msgstr ""
 
 #: src/ui/gui/psppire-var-sheet.c:540 src/ui/gui/psppire-var-store.c:838
-#: src/language/stats/crosstabs.q:822 src/language/stats/examine.q:1104
+#: src/language/stats/crosstabs.q:814 src/language/stats/examine.q:1104
 #: src/language/stats/frequencies.q:864 src/language/stats/frequencies.q:1036
 msgid "Missing"
 msgstr ""
@@ -4286,24 +4713,34 @@ msgstr ""
 msgid "Custom"
 msgstr ""
 
+#: src/ui/gui/psppire-var-store.c:755
+#, c-format
+msgid "{%s,`%s'}_"
+msgstr "{%s,‘%s’}_"
+
 #: src/ui/gui/psppire-window.c:97
 #, c-format
 msgid "%s %s PSPPIRE %s"
 msgstr ""
 
-#: src/ui/gui/psppire-window.c:468
-#, c-format
-msgid "Save the changes to \"%s\" before closing?"
+#. TRANSLATORS: This will form a filename.  Please avoid whitespace.
+#: src/ui/gui/psppire-window.c:247
+msgid "Untitled"
 msgstr ""
 
-#: src/ui/gui/psppire-window.c:475
+#: src/ui/gui/psppire-window.c:469
+#, c-format
+msgid "Save the changes to `%s' before closing?"
+msgstr "Save the changes to ‘%s’ before closing?"
+
+#: src/ui/gui/psppire-window.c:476
 #, c-format
 msgid ""
 "If you don't save, changes from the last %ld seconds will be permanently "
 "lost."
 msgstr ""
 
-#: src/ui/gui/psppire-window.c:479
+#: src/ui/gui/psppire-window.c:480
 msgid "Close _without saving"
 msgstr ""
 
@@ -4357,32 +4794,32 @@ msgstr ""
 msgid "Exactly %3d cases from the first %3d cases."
 msgstr ""
 
-#: src/ui/gui/select-cases-dialog.c:223
+#: src/ui/gui/select-cases-dialog.c:222
 #, c-format
 msgid "%d thru %d"
 msgstr ""
 
 #: src/ui/gui/text-data-import-dialog.c:461
 #, c-format
-msgid "Could not open \"%s\": %s"
-msgstr ""
+msgid "Could not open `%s': %s"
+msgstr "Could not open ‘%s’: %s"
 
 #: src/ui/gui/text-data-import-dialog.c:477
 #, c-format
-msgid "Error reading \"%s\": %s"
-msgstr ""
+msgid "Error reading `%s': %s"
+msgstr "Error reading ‘%s’: %s"
 
 #: src/ui/gui/text-data-import-dialog.c:480
 #, c-format
 msgid ""
-"Failed to read \"%s\", because it contains a line over %d bytes long and "
+"Failed to read `%s', because it contains a line over %d bytes long and "
 "therefore appears not to be a text file."
 msgstr ""
 
 #: src/ui/gui/text-data-import-dialog.c:494
 #, c-format
-msgid "\"%s\" is empty."
-msgstr ""
+msgid "`%s' is empty."
+msgstr "‘%s’ is empty."
 
 #: src/ui/gui/text-data-import-dialog.c:539
 msgid "Import Delimited Text Data"
@@ -4392,7 +4829,17 @@ msgstr ""
 msgid "Importing Delimited Text Data"
 msgstr ""
 
+#: src/ui/gui/text-data-import-dialog.c:739
+#, c-format
+msgid "Only the first %4d cases"
+msgstr ""
+
 #: src/ui/gui/text-data-import-dialog.c:749
+#, c-format
+msgid "Only the first %3d %% of file (approximately)"
+msgstr ""
+
+#: src/ui/gui/text-data-import-dialog.c:774
 msgid ""
 "This assistant will guide you through the process of importing data into "
 "PSPP from a text file with one line per case,  in which fields are separated "
@@ -4400,21 +4847,21 @@ msgid ""
 "\n"
 msgstr ""
 
-#: src/ui/gui/text-data-import-dialog.c:755
+#: src/ui/gui/text-data-import-dialog.c:780
 #, c-format
 msgid "The selected file contains %zu line of text.  "
 msgid_plural "The selected file contains %zu lines of text.  "
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/ui/gui/text-data-import-dialog.c:763
+#: src/ui/gui/text-data-import-dialog.c:788
 #, c-format
 msgid "The selected file contains approximately %lu line of text.  "
 msgid_plural "The selected file contains approximately %lu lines of text.  "
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/ui/gui/text-data-import-dialog.c:769
+#: src/ui/gui/text-data-import-dialog.c:794
 #, c-format
 msgid ""
 "Only the first %zu line of the file will be shown for preview purposes in "
@@ -4425,18 +4872,26 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/ui/gui/text-data-import-dialog.c:776
+#: src/ui/gui/text-data-import-dialog.c:801
 msgid "You may choose below how much of the file should actually be imported."
 msgstr ""
 
-#: src/ui/gui/text-data-import-dialog.c:1523
-#: src/ui/gui/text-data-import-dialog.c:1768
+#: src/ui/gui/text-data-import-dialog.c:884
+msgid "Text"
+msgstr ""
+
+#: src/ui/gui/text-data-import-dialog.c:1550
+#: src/ui/gui/text-data-import-dialog.c:1794
 msgid "This input line has too few separators to fill in this field."
 msgstr ""
 
-#: src/ui/gui/text-data-import-dialog.c:1759
+#: src/ui/gui/text-data-import-dialog.c:1785
 #, c-format
-msgid "Field content \"%.*s\" cannot be parsed in format %s."
+msgid "Cannot parse field content `%.*s' as format %s: %s"
+msgstr "Cannot parse field content ‘%.*s’ as format %s: %s"
+
+#: src/ui/gui/text-data-import-dialog.c:1938
+msgid "Line"
 msgstr ""
 
 #: src/ui/gui/t-test-options.c:60
@@ -4444,6 +4899,11 @@ msgstr ""
 msgid "Confidence Interval: %2d %%"
 msgstr ""
 
+#: src/ui/gui/val-labs-dialog.c:515
+#, c-format
+msgid "%s = `%s'"
+msgstr "%s = ‘%s’"
+
 #: src/ui/gui/variable-info-dialog.c:77
 #, c-format
 msgid "Label: %s\n"
@@ -4546,54 +5006,65 @@ msgstr ""
 msgid "WIDTH must be at least 40."
 msgstr ""
 
-#: src/language/utilities/set.q:490
+#: src/language/utilities/set.q:494
 #, c-format
 msgid ""
 "FORMAT requires numeric output format as an argument.  Specified format %s "
 "is of type string."
 msgstr ""
 
-#: src/language/utilities/set.q:707
+#: src/language/utilities/set.q:711
 msgid "ISL (32-bit IEEE 754 single, little-endian)"
 msgstr ""
 
-#: src/language/utilities/set.q:710
+#: src/language/utilities/set.q:714
 msgid "ISB (32-bit IEEE 754 single, big-endian)"
 msgstr ""
 
-#: src/language/utilities/set.q:713
+#: src/language/utilities/set.q:717
 msgid "IDL (64-bit IEEE 754 double, little-endian)"
 msgstr ""
 
-#: src/language/utilities/set.q:716
+#: src/language/utilities/set.q:720
 msgid "IDB (64-bit IEEE 754 double, big-endian)"
 msgstr ""
 
-#: src/language/utilities/set.q:720
+#: src/language/utilities/set.q:724
 msgid "VF (32-bit VAX F, VAX-endian)"
 msgstr ""
 
-#: src/language/utilities/set.q:723
+#: src/language/utilities/set.q:727
 msgid "VD (64-bit VAX D, VAX-endian)"
 msgstr ""
 
-#: src/language/utilities/set.q:726
+#: src/language/utilities/set.q:730
 msgid "VG (64-bit VAX G, VAX-endian)"
 msgstr ""
 
-#: src/language/utilities/set.q:730
+#: src/language/utilities/set.q:734
 msgid "ZS (32-bit IBM Z hexadecimal short, big-endian)"
 msgstr ""
 
-#: src/language/utilities/set.q:733
+#: src/language/utilities/set.q:737
 msgid "ZL (64-bit IBM Z hexadecimal long, big-endian)"
 msgstr ""
 
-#: src/language/utilities/set.q:835
+#: src/language/utilities/set.q:839
 #, c-format
 msgid "%s is %s."
 msgstr ""
 
+#: src/language/utilities/set.q:942
+#, c-format
+msgid ""
+"Too many PRESERVE commands without a RESTORE: at most %d levels of saved "
+"settings are allowed."
+msgstr ""
+
+#: src/language/utilities/set.q:961
+msgid "RESTORE without matching PRESERVE."
+msgstr ""
+
 #: src/language/stats/crosstabs.q:289
 msgid ""
 "Missing mode REPORT not allowed in general mode.  Assuming MISSING=TABLE."
@@ -4603,236 +5074,210 @@ msgstr ""
 msgid "Too many cross-tabulation variables or dimensions."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:409
-msgid "expecting BY"
-msgstr ""
-
 #: src/language/stats/crosstabs.q:466
 msgid "VARIABLES must be specified before TABLES."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:504
+#: src/language/stats/crosstabs.q:500
 #, c-format
 msgid "Maximum value (%ld) less than minimum value (%ld)."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:818
+#: src/language/stats/crosstabs.q:810
 msgid "Summary."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:820 src/language/stats/examine.q:1164
-#: src/language/stats/reliability.q:693
-msgid "Cases"
-msgstr ""
-
-#: src/language/stats/crosstabs.q:821 src/language/stats/examine.q:1103
-#: src/language/stats/frequencies.q:1035 src/language/stats/reliability.q:696
-msgid "Valid"
-msgstr ""
-
-#: src/language/stats/crosstabs.q:831 src/language/stats/examine.q:1179
+#: src/language/stats/crosstabs.q:823 src/language/stats/examine.q:1179
 #: src/language/stats/frequencies.q:815
 msgid "Percent"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1109
+#: src/language/stats/crosstabs.q:1101
 msgid "count"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1110
+#: src/language/stats/crosstabs.q:1102
 msgid "row %"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1111
+#: src/language/stats/crosstabs.q:1103
 msgid "column %"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1112
+#: src/language/stats/crosstabs.q:1104
 msgid "total %"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1113
+#: src/language/stats/crosstabs.q:1105
 msgid "expected"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1114
+#: src/language/stats/crosstabs.q:1106
 msgid "residual"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1115
+#: src/language/stats/crosstabs.q:1107
 msgid "std. resid."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1116
+#: src/language/stats/crosstabs.q:1108
 msgid "adj. resid."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1210
+#: src/language/stats/crosstabs.q:1202
 msgid "Chi-square tests."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1217
-msgid "Asymp. Sig. (2-sided)"
-msgstr ""
-
-#: src/language/stats/crosstabs.q:1219
-msgid "Exact Sig. (2-sided)"
-msgstr ""
-
-#: src/language/stats/crosstabs.q:1221
-msgid "Exact Sig. (1-sided)"
-msgstr ""
-
-#: src/language/stats/crosstabs.q:1236
+#: src/language/stats/crosstabs.q:1228
 msgid "Symmetric measures."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1242 src/language/stats/crosstabs.q:1290
+#: src/language/stats/crosstabs.q:1234 src/language/stats/crosstabs.q:1282
 msgid "Asymp. Std. Error"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1243 src/language/stats/crosstabs.q:1291
+#: src/language/stats/crosstabs.q:1235 src/language/stats/crosstabs.q:1283
 msgid "Approx. T"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1244 src/language/stats/crosstabs.q:1292
+#: src/language/stats/crosstabs.q:1236 src/language/stats/crosstabs.q:1284
 msgid "Approx. Sig."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1258
+#: src/language/stats/crosstabs.q:1250
 msgid "Risk estimate."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1262
+#: src/language/stats/crosstabs.q:1254
 #, c-format
 msgid "95%% Confidence Interval"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1265 src/language/stats/t-test.q:756
+#: src/language/stats/crosstabs.q:1257 src/language/stats/t-test.q:756
 #: src/language/stats/t-test.q:920 src/language/stats/t-test.q:1013
 msgid "Lower"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1266 src/language/stats/t-test.q:757
+#: src/language/stats/crosstabs.q:1258 src/language/stats/t-test.q:757
 #: src/language/stats/t-test.q:921 src/language/stats/t-test.q:1014
 msgid "Upper"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1283
+#: src/language/stats/crosstabs.q:1275
 msgid "Directional measures."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1708
+#: src/language/stats/crosstabs.q:1702
 msgid "Pearson Chi-Square"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1709
+#: src/language/stats/crosstabs.q:1703
 msgid "Likelihood Ratio"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1710
+#: src/language/stats/crosstabs.q:1704
 msgid "Fisher's Exact Test"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1711
+#: src/language/stats/crosstabs.q:1705
 msgid "Continuity Correction"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1712
+#: src/language/stats/crosstabs.q:1706
 msgid "Linear-by-Linear Association"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1747 src/language/stats/crosstabs.q:1822
-#: src/language/stats/crosstabs.q:1887
+#: src/language/stats/crosstabs.q:1741 src/language/stats/crosstabs.q:1816
+#: src/language/stats/crosstabs.q:1881
 msgid "N of Valid Cases"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1766 src/language/stats/crosstabs.q:1905
+#: src/language/stats/crosstabs.q:1760 src/language/stats/crosstabs.q:1899
 msgid "Nominal by Nominal"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1767 src/language/stats/crosstabs.q:1906
+#: src/language/stats/crosstabs.q:1761 src/language/stats/crosstabs.q:1900
 msgid "Ordinal by Ordinal"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1768
+#: src/language/stats/crosstabs.q:1762
 msgid "Interval by Interval"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1769
+#: src/language/stats/crosstabs.q:1763
 msgid "Measure of Agreement"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1775
+#: src/language/stats/crosstabs.q:1769
 msgid "Cramer's V"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1776
+#: src/language/stats/crosstabs.q:1770
 msgid "Contingency Coefficient"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1777
+#: src/language/stats/crosstabs.q:1771
 msgid "Kendall's tau-b"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1778
+#: src/language/stats/crosstabs.q:1772
 msgid "Kendall's tau-c"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1780
+#: src/language/stats/crosstabs.q:1774
 msgid "Spearman Correlation"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1781
+#: src/language/stats/crosstabs.q:1775
 msgid "Pearson's R"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1860
+#: src/language/stats/crosstabs.q:1854
 #, c-format
 msgid "Odds Ratio for %s (%g / %g)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1863
+#: src/language/stats/crosstabs.q:1857
 #, c-format
 msgid "Odds Ratio for %s (%.*s / %.*s)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1871
+#: src/language/stats/crosstabs.q:1865
 #, c-format
 msgid "For cohort %s = %g"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1874
+#: src/language/stats/crosstabs.q:1868
 #, c-format
 msgid "For cohort %s = %.*s"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1907
+#: src/language/stats/crosstabs.q:1901
 msgid "Nominal by Interval"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1913
+#: src/language/stats/crosstabs.q:1907
 msgid "Goodman and Kruskal tau"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1914
+#: src/language/stats/crosstabs.q:1908
 msgid "Uncertainty Coefficient"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1915
+#: src/language/stats/crosstabs.q:1909
 msgid "Somers' d"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1921
+#: src/language/stats/crosstabs.q:1915
 msgid "Symmetric"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1922 src/language/stats/crosstabs.q:1923
+#: src/language/stats/crosstabs.q:1916 src/language/stats/crosstabs.q:1917
 #, c-format
 msgid "%s Dependent"
 msgstr ""
 
-#: src/language/stats/examine.q:357
+#: src/language/stats/examine.q:356
 msgid "Not creating NP plot because data set is empty."
 msgstr ""
 
@@ -4855,15 +5300,6 @@ msgstr ""
 msgid "%s and %s are mutually exclusive"
 msgstr ""
 
-#: src/language/stats/examine.q:1159 src/language/stats/reliability.q:670
-msgid "Case Processing Summary"
-msgstr ""
-
-#: src/language/stats/examine.q:1449 src/language/stats/oneway.q:394
-#, c-format
-msgid "%g%% Confidence Interval for Mean"
-msgstr ""
-
 #: src/language/stats/examine.q:1464
 msgid "5% Trimmed Mean"
 msgstr ""
@@ -4872,11 +5308,6 @@ msgstr ""
 msgid "Interquartile Range"
 msgstr ""
 
-#: src/language/stats/examine.q:1635 src/language/stats/oneway.q:404
-#: src/ui/gui/descriptives.ui:8 src/ui/gui/examine.ui:319
-msgid "Descriptives"
-msgstr ""
-
 #: src/language/stats/examine.q:1821
 msgid "Highest"
 msgstr ""
@@ -4922,7 +5353,7 @@ msgstr ""
 
 #: src/language/stats/frequencies.q:703
 msgid "`)' expected after GROUPED interval list."
-msgstr ""
+msgstr "‘)’ expected after GROUPED interval list."
 
 #: src/language/stats/frequencies.q:723
 #, c-format
@@ -4965,132 +5396,6 @@ msgstr ""
 msgid "Omitting pie chart for %s, which has over 50 unique values."
 msgstr ""
 
-#: src/language/stats/glm.q:247
-msgid "Multivariate GLM not yet supported"
-msgstr ""
-
-#: src/language/stats/means.q:100
-msgid "Missing required subcommand TABLES."
-msgstr ""
-
-#: src/language/stats/means.q:134
-msgid "TABLES subcommand may not appear more than once."
-msgstr ""
-
-#: src/language/stats/npar.q:111
-msgid "NPAR subcommand not currently implemented."
-msgstr ""
-
-#: src/language/stats/npar.q:256
-#, c-format
-msgid ""
-"The specified value of HI (%d) is lower than the specified value of LO (%d)"
-msgstr ""
-
-#: src/language/stats/npar.q:311
-#, c-format
-msgid ""
-"%d expected values were given, but the specified range (%d-%d) requires "
-"exactly %d values."
-msgstr ""
-
-#: src/language/stats/npar.q:453 src/language/stats/t-test.q:380
-#, c-format
-msgid ""
-"PAIRED was specified but the number of variables preceding WITH (%zu) did "
-"not match the number following (%zu)."
-msgstr ""
-
-#: src/language/stats/oneway.q:170
-msgid "Number of contrast coefficients must equal the number of groups"
-msgstr ""
-
-#: src/language/stats/oneway.q:179
-#, c-format
-msgid "Coefficients for contrast %zu do not total zero"
-msgstr ""
-
-#: src/language/stats/oneway.q:242
-#, c-format
-msgid "`%s' is not a variable name"
-msgstr ""
-
-#: src/language/stats/oneway.q:274 src/language/stats/regression.q:283
-msgid "Sum of Squares"
-msgstr ""
-
-#: src/language/stats/oneway.q:276 src/language/stats/regression.q:285
-msgid "Mean Square"
-msgstr ""
-
-#: src/language/stats/oneway.q:277 src/language/stats/regression.q:286
-#: src/language/stats/t-test.q:749
-msgid "F"
-msgstr ""
-
-#: src/language/stats/oneway.q:278 src/language/stats/oneway.q:535
-#: src/language/stats/regression.q:201 src/language/stats/regression.q:287
-msgid "Significance"
-msgstr ""
-
-#: src/language/stats/oneway.q:300
-msgid "Between Groups"
-msgstr ""
-
-#: src/language/stats/oneway.q:301
-msgid "Within Groups"
-msgstr ""
-
-#: src/language/stats/oneway.q:345 src/language/stats/regression.q:312
-msgid "ANOVA"
-msgstr ""
-
-#: src/language/stats/oneway.q:532
-msgid "Levene Statistic"
-msgstr ""
-
-#: src/language/stats/oneway.q:533
-msgid "df1"
-msgstr ""
-
-#: src/language/stats/oneway.q:534
-msgid "df2"
-msgstr ""
-
-#: src/language/stats/oneway.q:537
-msgid "Test of Homogeneity of Variances"
-msgstr ""
-
-#: src/language/stats/oneway.q:603
-msgid "Contrast Coefficients"
-msgstr ""
-
-#: src/language/stats/oneway.q:605 src/language/stats/oneway.q:681
-msgid "Contrast"
-msgstr ""
-
-#: src/language/stats/oneway.q:679
-msgid "Contrast Tests"
-msgstr ""
-
-#: src/language/stats/oneway.q:682
-msgid "Value of Contrast"
-msgstr ""
-
-#: src/language/stats/oneway.q:684 src/language/stats/regression.q:200
-#: src/language/stats/t-test.q:751 src/language/stats/t-test.q:922
-#: src/language/stats/t-test.q:1009
-msgid "t"
-msgstr ""
-
-#: src/language/stats/oneway.q:730
-msgid "Assume equal variances"
-msgstr ""
-
-#: src/language/stats/oneway.q:734
-msgid "Does not assume equal"
-msgstr ""
-
 #: src/language/stats/rank.q:220
 #, c-format
 msgid "%s of %s by %s"
@@ -5199,87 +5504,14 @@ msgid ""
 "meaningless."
 msgstr ""
 
-#: src/language/stats/regression.q:891
+#: src/language/stats/regression.q:940
 msgid "REGRESSION requires numeric variables."
 msgstr ""
 
-#: src/language/stats/regression.q:962
+#: src/language/stats/regression.q:1015
 msgid "No valid data found. This command was skipped."
 msgstr ""
 
-#: src/language/stats/reliability.q:421
-msgid "Reliability Statistics"
-msgstr ""
-
-#: src/language/stats/reliability.q:462
-msgid "Item-Total Statistics"
-msgstr ""
-
-#: src/language/stats/reliability.q:484
-msgid "Scale Mean if Item Deleted"
-msgstr ""
-
-#: src/language/stats/reliability.q:487
-msgid "Scale Variance if Item Deleted"
-msgstr ""
-
-#: src/language/stats/reliability.q:490
-msgid "Corrected Item-Total Correlation"
-msgstr ""
-
-#: src/language/stats/reliability.q:493
-msgid "Cronbach's Alpha if Item Deleted"
-msgstr ""
-
-#: src/language/stats/reliability.q:543 src/language/stats/reliability.q:562
-msgid "Cronbach's Alpha"
-msgstr ""
-
-#: src/language/stats/reliability.q:546 src/language/stats/reliability.q:571
-#: src/language/stats/reliability.q:582
-msgid "N of Items"
-msgstr ""
-
-#: src/language/stats/reliability.q:565
-msgid "Part 1"
-msgstr ""
-
-#: src/language/stats/reliability.q:576
-msgid "Part 2"
-msgstr ""
-
-#: src/language/stats/reliability.q:587
-msgid "Total N of Items"
-msgstr ""
-
-#: src/language/stats/reliability.q:590
-msgid "Correlation Between Forms"
-msgstr ""
-
-#: src/language/stats/reliability.q:594
-msgid "Spearman-Brown Coefficient"
-msgstr ""
-
-#: src/language/stats/reliability.q:597
-msgid "Equal Length"
-msgstr ""
-
-#: src/language/stats/reliability.q:600
-msgid "Unequal Length"
-msgstr ""
-
-#: src/language/stats/reliability.q:604
-msgid "Guttman Split-Half Coefficient"
-msgstr ""
-
-#: src/language/stats/reliability.q:699
-msgid "Excluded"
-msgstr ""
-
-#: src/language/stats/reliability.q:707
-msgid "%"
-msgstr ""
-
 #: src/language/stats/t-test.q:190
 msgid "Exactly one of TESTVAL, GROUPS and PAIRS subcommands must be specified."
 msgstr ""
@@ -5331,10 +5563,6 @@ msgstr ""
 msgid "t-test for Equality of Means"
 msgstr ""
 
-#: src/language/stats/t-test.q:750 src/language/stats/t-test.q:1103
-msgid "Sig."
-msgstr ""
-
 #: src/language/stats/t-test.q:754 src/language/stats/t-test.q:1012
 msgid "Mean Difference"
 msgstr ""
@@ -5451,9 +5679,69 @@ msgid ""
 "The last case (%ld) to list is less than 1.  The value is being reset to 1."
 msgstr ""
 
-#: src/language/data-io/list.q:119
-#, c-format
-msgid "The step value %ld is less than 1.  The value is being reset to 1."
+#: src/language/data-io/list.q:119
+#, c-format
+msgid "The step value %ld is less than 1.  The value is being reset to 1."
+msgstr ""
+
+#: src/ui/gui/aggregate.ui:7
+msgid "Aggregate Data"
+msgstr ""
+
+#: src/ui/gui/aggregate.ui:100
+msgid "_Break variable(s)"
+msgstr ""
+
+#: src/ui/gui/aggregate.ui:136
+msgid "Variable Name: "
+msgstr ""
+
+#: src/ui/gui/aggregate.ui:161
+msgid "Variable Label: "
+msgstr ""
+
+#: src/ui/gui/aggregate.ui:190
+msgid "Function: "
+msgstr ""
+
+#: src/ui/gui/aggregate.ui:253
+msgid "Argument 1: "
+msgstr ""
+
+#: src/ui/gui/aggregate.ui:282
+msgid "Argument 2: "
+msgstr ""
+
+#: src/ui/gui/aggregate.ui:328
+msgid "Aggregated variables"
+msgstr ""
+
+#: src/ui/gui/aggregate.ui:362
+msgid "_Add aggregated variables to the active dataset"
+msgstr ""
+
+#: src/ui/gui/aggregate.ui:376
+msgid "_Replace the current dataset with the aggregated variables"
+msgstr ""
+
+#: src/ui/gui/aggregate.ui:391
+msgid "_Write a new data file containing only the aggregated variables"
+msgstr ""
+
+#: src/ui/gui/aggregate.ui:428
+msgid "label"
+msgstr ""
+
+#: src/ui/gui/aggregate.ui:472
+msgid "File is _already sorted on break variable(s)"
+msgstr ""
+
+#: src/ui/gui/aggregate.ui:487
+msgid "Sort file before a_ggregating"
+msgstr ""
+
+#: src/ui/gui/aggregate.ui:508
+msgid "Options for very large datasets"
 msgstr ""
 
 #: src/ui/gui/binomial.ui:57 src/ui/gui/chi-square.ui:57
@@ -5476,6 +5764,43 @@ msgstr ""
 msgid "Test _Proportion:"
 msgstr ""
 
+#: src/ui/gui/compute.ui:8
+msgid "Compute Variable"
+msgstr ""
+
+#: src/ui/gui/compute.ui:41
+msgid "Target Variable:"
+msgstr ""
+
+#: src/ui/gui/compute.ui:70
+msgid "Type & Label"
+msgstr ""
+
+#: src/ui/gui/compute.ui:117
+msgid "="
+msgstr ""
+
+#: src/ui/gui/compute.ui:171
+msgid "Numeric Expressions:"
+msgstr ""
+
+#: src/ui/gui/compute.ui:233
+msgid "Functions:"
+msgstr ""
+
+#: src/ui/gui/compute.ui:298 src/ui/gui/recode.ui:741
+#: src/ui/gui/select-cases.ui:378
+msgid "If..."
+msgstr ""
+
+#: src/ui/gui/compute.ui:351
+msgid "Compute Variable: Type and Label"
+msgstr ""
+
+#: src/ui/gui/compute.ui:386
+msgid "Use expression as label"
+msgstr ""
+
 #: src/ui/gui/correlation.ui:7
 msgid "Bivariate Correlations"
 msgstr ""
@@ -5680,91 +6005,107 @@ msgstr ""
 msgid "Missing Values"
 msgstr ""
 
-#: src/ui/gui/factor.ui:21
+#: src/ui/gui/goto-case.ui:8
+msgid "Goto Case"
+msgstr ""
+
+#: src/ui/gui/goto-case.ui:26
+msgid "Goto Case Number:"
+msgstr ""
+
+#: src/ui/gui/factor.ui:22
+msgid "Principal Components Analysis"
+msgstr ""
+
+#: src/ui/gui/factor.ui:26
+msgid "Principal Axis Factoring"
+msgstr ""
+
+#: src/ui/gui/factor.ui:29
 msgid "Factor Analysis"
 msgstr ""
 
-#: src/ui/gui/factor.ui:47
+#: src/ui/gui/factor.ui:55
 msgid "_Descriptives..."
 msgstr ""
 
-#: src/ui/gui/factor.ui:60
+#: src/ui/gui/factor.ui:68
 msgid "_Extraction..."
 msgstr ""
 
-#: src/ui/gui/factor.ui:74
+#: src/ui/gui/factor.ui:82
 msgid "_Rotations..."
 msgstr ""
 
-#: src/ui/gui/factor.ui:192
+#: src/ui/gui/factor.ui:200
 msgid "Factor Analysis: Extraction"
 msgstr ""
 
-#: src/ui/gui/factor.ui:216
+#: src/ui/gui/factor.ui:224
 msgid "Method: "
 msgstr ""
 
-#: src/ui/gui/factor.ui:266
+#: src/ui/gui/factor.ui:274
 msgid "Correlation matrix"
 msgstr ""
 
-#: src/ui/gui/factor.ui:280
+#: src/ui/gui/factor.ui:288
 msgid "Covariance matrix"
 msgstr ""
 
-#: src/ui/gui/factor.ui:300
+#: src/ui/gui/factor.ui:308
 msgid "Analyse"
 msgstr ""
 
-#: src/ui/gui/factor.ui:324
+#: src/ui/gui/factor.ui:332
 msgid "Unrotatated factor solution"
 msgstr ""
 
-#: src/ui/gui/factor.ui:338
+#: src/ui/gui/factor.ui:346
 msgid "Scree plot"
 msgstr ""
 
-#: src/ui/gui/factor.ui:357 src/ui/gui/roc.ui:286
+#: src/ui/gui/factor.ui:365 src/ui/gui/roc.ui:286
 msgid "Display"
 msgstr ""
 
-#: src/ui/gui/factor.ui:430
+#: src/ui/gui/factor.ui:438
 msgid "Number of factors:"
 msgstr ""
 
-#: src/ui/gui/factor.ui:460
+#: src/ui/gui/factor.ui:468
 msgid "Extract"
 msgstr ""
 
-#: src/ui/gui/factor.ui:475 src/ui/gui/factor.ui:665
+#: src/ui/gui/factor.ui:483 src/ui/gui/factor.ui:673
 msgid "Maximum iterations for convergence:"
 msgstr ""
 
-#: src/ui/gui/factor.ui:538
+#: src/ui/gui/factor.ui:546
 msgid "Factor Analysis: Rotation"
 msgstr ""
 
-#: src/ui/gui/factor.ui:571
+#: src/ui/gui/factor.ui:579
 msgid "_None"
 msgstr ""
 
-#: src/ui/gui/factor.ui:582
+#: src/ui/gui/factor.ui:590
 msgid "_Varimax"
 msgstr ""
 
-#: src/ui/gui/factor.ui:598
+#: src/ui/gui/factor.ui:606
 msgid "_Quartimax"
 msgstr ""
 
-#: src/ui/gui/factor.ui:614
+#: src/ui/gui/factor.ui:622
 msgid "_Equimax"
 msgstr ""
 
-#: src/ui/gui/factor.ui:637
+#: src/ui/gui/factor.ui:645
 msgid "Method"
 msgstr ""
 
-#: src/ui/gui/factor.ui:648
+#: src/ui/gui/factor.ui:656
 msgid "_Display rotated solution"
 msgstr ""
 
@@ -5922,7 +6263,7 @@ msgstr ""
 msgid "Dependent _Variable(s):"
 msgstr ""
 
-#: src/ui/gui/oneway.ui:184 src/ui/gui/data-editor.ui:329
+#: src/ui/gui/oneway.ui:184 src/ui/gui/data-editor.ui:332
 msgid "_Descriptives"
 msgstr ""
 
@@ -5975,174 +6316,21 @@ msgid "Name Variable:"
 msgstr ""
 
 #: src/ui/gui/psppire.ui:383
-msgid "Split File"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:443
-msgid "Analyze all cases.  Do not create groups."
-msgstr "Analyse all cases.  Do not create groups."
-
-#: src/ui/gui/psppire.ui:459
-msgid "Compare groups."
-msgstr ""
-
-#: src/ui/gui/psppire.ui:475
-msgid "Organize output by groups."
-msgstr "Organise output by groups."
-
-#: src/ui/gui/psppire.ui:533
-msgid "Groups based on:"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:592
-msgid "Sort the file by grouping variables."
-msgstr ""
-
-#: src/ui/gui/psppire.ui:609
-msgid "File is already sorted."
-msgstr ""
-
-#: src/ui/gui/psppire.ui:662
-msgid "Current Status : "
-msgstr ""
-
-#: src/ui/gui/psppire.ui:673
-msgid "Analysis by groups is off"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:709
-msgid "Compute Variable"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:742
-msgid "Target Variable:"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:771
-msgid "Type & Label"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:818
-msgid "="
-msgstr ""
-
-#: src/ui/gui/psppire.ui:872
-msgid "Numeric Expressions:"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:934
-msgid "Functions:"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:999 src/ui/gui/psppire.ui:1422
-#: src/ui/gui/recode.ui:741
-msgid "If..."
-msgstr ""
-
-#: src/ui/gui/psppire.ui:1052
-msgid "Select Cases"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:1240
-msgid "Use filter variable"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:1299
-msgid "Based on time or case range"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:1311
-msgid "Range..."
-msgstr ""
-
-#: src/ui/gui/psppire.ui:1355
-msgid "Random sample of cases"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:1368
-msgid "Sample..."
-msgstr ""
-
-#: src/ui/gui/psppire.ui:1410
-msgid "If condition is satisfied"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:1462
-msgid "All Cases"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:1477
-msgid "Select"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:1504
-msgid "Filtered"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:1520
-msgid "Deleted"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:1543
-msgid "Unselected Cases Are"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:1585
 msgid "Data File Comments"
 msgstr ""
 
-#: src/ui/gui/psppire.ui:1609
+#: src/ui/gui/psppire.ui:407
 msgid "Comments:"
 msgstr ""
 
-#: src/ui/gui/psppire.ui:1650
+#: src/ui/gui/psppire.ui:448
 msgid "Display comments in output"
 msgstr ""
 
-#: src/ui/gui/psppire.ui:1669
+#: src/ui/gui/psppire.ui:467
 msgid "Column Number: 0"
 msgstr ""
 
-#: src/ui/gui/psppire.ui:1703
-msgid "Select Cases: Range"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:1750
-msgid "First case"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:1763
-msgid "Last case"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:1776
-msgid "Observation"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:1808
-msgid "Compute Variable: Type and Label"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:1843
-msgid "Use expression as label"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:2088
-msgid "Goto Case"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:2106
-msgid "Goto Case Number:"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:2149
-msgid "Select Cases: Random Sample"
-msgstr ""
-
-#: src/ui/gui/psppire.ui:2247
-msgid "Sample Size"
-msgstr ""
-
 #: src/ui/gui/rank.ui:8
 msgid "Rank Cases"
 msgstr ""
@@ -6271,6 +6459,42 @@ msgstr ""
 msgid "Sort Order"
 msgstr ""
 
+#: src/ui/gui/split-file.ui:8
+msgid "Split File"
+msgstr ""
+
+#: src/ui/gui/split-file.ui:68
+msgid "Analyze all cases.  Do not create groups."
+msgstr "Analyse all cases.  Do not create groups."
+
+#: src/ui/gui/split-file.ui:84
+msgid "Compare groups."
+msgstr ""
+
+#: src/ui/gui/split-file.ui:100
+msgid "Organize output by groups."
+msgstr "Organise output by groups."
+
+#: src/ui/gui/split-file.ui:158
+msgid "Groups based on:"
+msgstr ""
+
+#: src/ui/gui/split-file.ui:217
+msgid "Sort the file by grouping variables."
+msgstr ""
+
+#: src/ui/gui/split-file.ui:234
+msgid "File is already sorted."
+msgstr ""
+
+#: src/ui/gui/split-file.ui:287
+msgid "Current Status : "
+msgstr ""
+
+#: src/ui/gui/split-file.ui:298
+msgid "Analysis by groups is off"
+msgstr ""
+
 #: src/ui/gui/recode.ui:185 src/ui/gui/recode.ui:467
 msgid "System Missing"
 msgstr ""
@@ -6316,8 +6540,8 @@ msgid "New Value"
 msgstr ""
 
 #: src/ui/gui/recode.ui:596
-msgid "Convert numeric strings to numbers ('5' -> 5)"
-msgstr ""
+msgid "Convert numeric strings to numbers (`5' -> 5)"
+msgstr "Convert numeric strings to numbers (‘5’ -> 5)"
 
 #: src/ui/gui/recode.ui:614
 msgid "Output variables are strings"
@@ -6375,22 +6599,26 @@ msgstr ""
 msgid "Regression: Statistics"
 msgstr ""
 
-#: src/ui/gui/reliability.ui:27
+#: src/ui/gui/reliability.ui:26
 msgid "Reliability Analysis"
 msgstr ""
 
-#: src/ui/gui/reliability.ui:114
+#: src/ui/gui/reliability.ui:124
 msgid "_Items:"
 msgstr ""
 
-#: src/ui/gui/reliability.ui:136
+#: src/ui/gui/reliability.ui:141
 msgid "Model:\t"
 msgstr ""
 
-#: src/ui/gui/reliability.ui:175
+#: src/ui/gui/reliability.ui:180
 msgid "Variables in first split:"
 msgstr ""
 
+#: src/ui/gui/reliability.ui:217
+msgid "Show descriptives for scale if _item is deleted"
+msgstr ""
+
 #: src/ui/gui/roc.ui:115
 msgid "_Test Variable:"
 msgstr ""
@@ -6419,6 +6647,78 @@ msgstr ""
 msgid "_Coordinate points of the ROC Curve"
 msgstr ""
 
+#: src/ui/gui/select-cases.ui:8
+msgid "Select Cases"
+msgstr ""
+
+#: src/ui/gui/select-cases.ui:196
+msgid "Use filter variable"
+msgstr ""
+
+#: src/ui/gui/select-cases.ui:255
+msgid "Based on time or case range"
+msgstr ""
+
+#: src/ui/gui/select-cases.ui:267
+msgid "Range..."
+msgstr ""
+
+#: src/ui/gui/select-cases.ui:311
+msgid "Random sample of cases"
+msgstr ""
+
+#: src/ui/gui/select-cases.ui:324
+msgid "Sample..."
+msgstr ""
+
+#: src/ui/gui/select-cases.ui:366
+msgid "If condition is satisfied"
+msgstr ""
+
+#: src/ui/gui/select-cases.ui:418
+msgid "All Cases"
+msgstr ""
+
+#: src/ui/gui/select-cases.ui:433
+msgid "Select"
+msgstr ""
+
+#: src/ui/gui/select-cases.ui:460
+msgid "Filtered"
+msgstr ""
+
+#: src/ui/gui/select-cases.ui:476
+msgid "Deleted"
+msgstr ""
+
+#: src/ui/gui/select-cases.ui:499
+msgid "Unselected Cases Are"
+msgstr ""
+
+#: src/ui/gui/select-cases.ui:541
+msgid "Select Cases: Range"
+msgstr ""
+
+#: src/ui/gui/select-cases.ui:590
+msgid "First case"
+msgstr ""
+
+#: src/ui/gui/select-cases.ui:603
+msgid "Last case"
+msgstr ""
+
+#: src/ui/gui/select-cases.ui:616
+msgid "Observation"
+msgstr ""
+
+#: src/ui/gui/select-cases.ui:648
+msgid "Select Cases: Random Sample"
+msgstr ""
+
+#: src/ui/gui/select-cases.ui:746
+msgid "Sample Size"
+msgstr ""
+
 #: src/ui/gui/t-test.ui:8
 msgid "Independent-Samples T Test"
 msgstr ""
@@ -6482,117 +6782,105 @@ msgid ""
 "below how much of the file should actually be imported."
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:52
+#: src/ui/gui/text-data-import.ui:95
 msgid "All cases"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:71 src/ui/gui/text-data-import.ui:128
-msgid "Only first "
-msgstr ""
-
-#: src/ui/gui/text-data-import.ui:106
-msgid " cases"
-msgstr ""
-
-#: src/ui/gui/text-data-import.ui:162
-msgid "% of file (approximately)"
-msgstr ""
-
-#: src/ui/gui/text-data-import.ui:183
+#: src/ui/gui/text-data-import.ui:116
 msgid "<b>Amount to Import</b>"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:202
+#: src/ui/gui/text-data-import.ui:135
 msgid "Select Data to Import"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:213
+#: src/ui/gui/text-data-import.ui:146
 msgid "Select the first line of the data file that contains data."
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:241
+#: src/ui/gui/text-data-import.ui:174
 msgid "Line above selected line contains variable names"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:259
+#: src/ui/gui/text-data-import.ui:192
 msgid "Choose Separators"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:305
+#: src/ui/gui/text-data-import.ui:238
 msgid "C_ustom"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:320
+#: src/ui/gui/text-data-import.ui:253
 msgid "Slas_h (/)"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:337
+#: src/ui/gui/text-data-import.ui:270
 msgid "Semicolo_n (;)"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:354
+#: src/ui/gui/text-data-import.ui:287
 msgid "P_ipe (|)"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:369
+#: src/ui/gui/text-data-import.ui:302
 msgid "H_yphen (-)"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:386
+#: src/ui/gui/text-data-import.ui:319
 msgid "Co_mma (,)"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:403
+#: src/ui/gui/text-data-import.ui:336
 msgid "_Colon (:)"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:418
+#: src/ui/gui/text-data-import.ui:351
 msgid "Ban_g (!)"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:433
+#: src/ui/gui/text-data-import.ui:366
 msgid "Ta_b"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:448
+#: src/ui/gui/text-data-import.ui:381
 msgid "_Space"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:465
+#: src/ui/gui/text-data-import.ui:398
 msgid "<b>Separators</b>"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:495
+#: src/ui/gui/text-data-import.ui:428
 msgid "Doubled quote mark treated as escape"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:524
+#: src/ui/gui/text-data-import.ui:457
 msgid "Quote separator characters with"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:544
+#: src/ui/gui/text-data-import.ui:477
 msgid "<b>Quoting</b>"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:592
+#: src/ui/gui/text-data-import.ui:525
 msgid "<b>Fields Preview</b>"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:607
+#: src/ui/gui/text-data-import.ui:540
 msgid "Adjust Variable Formats"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:618
+#: src/ui/gui/text-data-import.ui:551
 msgid ""
 "Check the data formats displayed below and fix any that are incorrect.  You "
 "may set other variable properties now or later."
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:662
+#: src/ui/gui/text-data-import.ui:595
 msgid "<b>Variables</b>"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:705
+#: src/ui/gui/text-data-import.ui:638
 msgid "<b>Data Preview</b>"
 msgstr ""
 
@@ -6664,306 +6952,298 @@ msgstr ""
 msgid "Variable Information:"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:9
-msgid "Sort Ascending"
-msgstr ""
-
-#: src/ui/gui/data-editor.ui:15
-msgid "Sort Descending"
-msgstr ""
-
-#: src/ui/gui/data-editor.ui:26 src/ui/gui/output-viewer.ui:9
+#: src/ui/gui/data-editor.ui:23 src/ui/gui/output-viewer.ui:9
 #: src/ui/gui/syntax-editor.ui:10
 msgid "_File"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:38 src/ui/gui/syntax-editor.ui:22
+#: src/ui/gui/data-editor.ui:35 src/ui/gui/syntax-editor.ui:22
 #: src/ui/gui/syntax-editor.ui:40
 msgid "_Syntax"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:44 src/ui/gui/data-editor.ui:218
-#: src/ui/gui/data-editor.ui:230 src/ui/gui/syntax-editor.ui:28
+#: src/ui/gui/data-editor.ui:41 src/ui/gui/data-editor.ui:214
+#: src/ui/gui/data-editor.ui:226 src/ui/gui/syntax-editor.ui:28
 #: src/ui/gui/syntax-editor.ui:46
 msgid "_Data"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:56
+#: src/ui/gui/data-editor.ui:53
 msgid "_Import Delimited Text Data"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:75
+#: src/ui/gui/data-editor.ui:72
 msgid "D_isplay Data File Information"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:82
+#: src/ui/gui/data-editor.ui:79
 msgid "Working File"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:88
+#: src/ui/gui/data-editor.ui:85
 msgid "External File"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:94
+#: src/ui/gui/data-editor.ui:91
 msgid "Recently Used Da_ta"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:100
+#: src/ui/gui/data-editor.ui:97
 msgid "Recently Used _Files"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:112 src/ui/gui/output-viewer.ui:28
+#: src/ui/gui/data-editor.ui:109 src/ui/gui/output-viewer.ui:28
 #: src/ui/gui/syntax-editor.ui:70
 msgid "_Edit"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:118
+#: src/ui/gui/data-editor.ui:115
 msgid "Insert Variable"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:119
+#: src/ui/gui/data-editor.ui:116
 msgid "Create a new variable at the current position"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:126
+#: src/ui/gui/data-editor.ui:123
 msgid "Insert Cases"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:127
+#: src/ui/gui/data-editor.ui:124
 msgid "Create a new case at the current position"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:133
+#: src/ui/gui/data-editor.ui:130
 msgid "Go To Case"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:135
+#: src/ui/gui/data-editor.ui:132
 msgid "Jump to a case in the data sheet"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:161
+#: src/ui/gui/data-editor.ui:158
 msgid "Cl_ear Variables"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:162
+#: src/ui/gui/data-editor.ui:159
 msgid "Delete the variables at the selected position(s)"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:170
+#: src/ui/gui/data-editor.ui:167
 msgid "_Clear Cases"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:171
+#: src/ui/gui/data-editor.ui:168
 msgid "Delete the cases at the selected position(s)"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:183
+#: src/ui/gui/data-editor.ui:180
 msgid "_View"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:190
+#: src/ui/gui/data-editor.ui:187
 msgid "_Status Bar"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:196
-msgid "_Fonts"
-msgstr ""
-
-#: src/ui/gui/data-editor.ui:204
+#: src/ui/gui/data-editor.ui:200
 msgid "_Grid Lines"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:210
+#: src/ui/gui/data-editor.ui:206
 msgid "Value _Labels"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:211
+#: src/ui/gui/data-editor.ui:207
 msgid "Show/hide value labels"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:224 src/ui/gui/data-editor.ui:431
+#: src/ui/gui/data-editor.ui:220 src/ui/gui/data-editor.ui:434
 msgid "_Variables"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:235
+#: src/ui/gui/data-editor.ui:231
 msgid "_Sort Cases"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:238
+#: src/ui/gui/data-editor.ui:234
 msgid "Sort cases in the active file"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:245
+#: src/ui/gui/data-editor.ui:241
 msgid "_Transpose"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:246
+#: src/ui/gui/data-editor.ui:242
 msgid "Transpose the cases with the variables"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:252
+#: src/ui/gui/data-editor.ui:249
+msgid "_Aggregate"
+msgstr ""
+
+#: src/ui/gui/data-editor.ui:255
 msgid "S_plit File"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:253
+#: src/ui/gui/data-editor.ui:256
 msgid "Split the active file"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:260
+#: src/ui/gui/data-editor.ui:263
 msgid "Select _Cases"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:266
+#: src/ui/gui/data-editor.ui:269
 msgid "_Weight Cases"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:267
+#: src/ui/gui/data-editor.ui:270
 msgid "Weight cases by variable"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:274
+#: src/ui/gui/data-editor.ui:277
 msgid "_Transform"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:280
+#: src/ui/gui/data-editor.ui:283
 msgid "_Compute"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:286
+#: src/ui/gui/data-editor.ui:289
 msgid "Ran_k Cases"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:292
+#: src/ui/gui/data-editor.ui:295
 msgid "Recode into _Same Variables"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:298
+#: src/ui/gui/data-editor.ui:301
 msgid "Recode into _Different Variables"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:304
+#: src/ui/gui/data-editor.ui:307
 msgid "_Run Pending Transforms"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:311
+#: src/ui/gui/data-editor.ui:314
 msgid "_Analyze"
 msgstr "_Analyse"
 
-#: src/ui/gui/data-editor.ui:317
+#: src/ui/gui/data-editor.ui:320
 msgid "_Descriptive Statistics"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:323
+#: src/ui/gui/data-editor.ui:326
 msgid "_Frequencies"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:335
+#: src/ui/gui/data-editor.ui:338
 msgid "_Explore"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:341
+#: src/ui/gui/data-editor.ui:344
 msgid "_Crosstabs"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:347
+#: src/ui/gui/data-editor.ui:350
 msgid "Compare _Means"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:353
+#: src/ui/gui/data-editor.ui:356
 msgid "_One Sample T Test"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:359
+#: src/ui/gui/data-editor.ui:362
 msgid "_Independent Samples T Test"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:365
+#: src/ui/gui/data-editor.ui:368
 msgid "_Paired Samples T Test"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:371
+#: src/ui/gui/data-editor.ui:374
 msgid "One Way _ANOVA"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:377
+#: src/ui/gui/data-editor.ui:380
 msgid "Bivariate _Correlation..."
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:383
+#: src/ui/gui/data-editor.ui:386
 msgid "Factor _Analysis"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:389
+#: src/ui/gui/data-editor.ui:392
 msgid "Re_liability"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:395
+#: src/ui/gui/data-editor.ui:398
 msgid "Linear _Regression"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:401
+#: src/ui/gui/data-editor.ui:404
 msgid "_Non-Parametric Statistics"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:407
+#: src/ui/gui/data-editor.ui:410
 msgid "_Chi-Square"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:413
+#: src/ui/gui/data-editor.ui:416
 msgid "_Binomial"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:419
+#: src/ui/gui/data-editor.ui:422
 msgid "ROC Cur_ve..."
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:425
+#: src/ui/gui/data-editor.ui:428
 msgid "_Utilities"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:432
+#: src/ui/gui/data-editor.ui:435
 msgid "Jump to variable"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:439
+#: src/ui/gui/data-editor.ui:442
 msgid "Data File _Comments"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:445 src/ui/gui/output-viewer.ui:46
-#: src/ui/gui/syntax-editor.ui:131
+#: src/ui/gui/data-editor.ui:448 src/ui/gui/output-viewer.ui:46
+#: src/ui/gui/syntax-editor.ui:135
 msgid "_Windows"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:451 src/ui/gui/output-viewer.ui:52
-#: src/ui/gui/syntax-editor.ui:137
+#: src/ui/gui/data-editor.ui:454 src/ui/gui/output-viewer.ui:52
+#: src/ui/gui/syntax-editor.ui:141
 msgid "_Minimize All Windows"
 msgstr "_Minimise All Windows"
 
-#: src/ui/gui/data-editor.ui:457
+#: src/ui/gui/data-editor.ui:460
 msgid "_Split"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:631
+#: src/ui/gui/data-editor.ui:635
 msgid "Information Area"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:653
+#: src/ui/gui/data-editor.ui:657
 msgid "Processor Area"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:678
+#: src/ui/gui/data-editor.ui:682
 msgid "Case Counter Area"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:703
+#: src/ui/gui/data-editor.ui:707
 msgid "Filter Use Status Area"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:729
+#: src/ui/gui/data-editor.ui:733
 msgid "Weight Status Area"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:755
+#: src/ui/gui/data-editor.ui:759
 msgid "Split File Status Area"
 msgstr ""
 
@@ -6971,61 +7251,22 @@ msgstr ""
 msgid "_Export"
 msgstr ""
 
-#: src/ui/gui/syntax-editor.ui:100
+#: src/ui/gui/syntax-editor.ui:104
 msgid "_Run"
 msgstr ""
 
-#: src/ui/gui/syntax-editor.ui:106
+#: src/ui/gui/syntax-editor.ui:110
 msgid "All"
 msgstr ""
 
-#: src/ui/gui/syntax-editor.ui:112
+#: src/ui/gui/syntax-editor.ui:116
 msgid "Selection"
 msgstr ""
 
-#: src/ui/gui/syntax-editor.ui:118
+#: src/ui/gui/syntax-editor.ui:122
 msgid "Current Line"
 msgstr ""
 
-#: src/ui/gui/syntax-editor.ui:125
+#: src/ui/gui/syntax-editor.ui:129
 msgid "To End"
 msgstr ""
-
-#~ msgid "cannot initialize output driver `%s' of class `%s'"
-#~ msgstr "cannot initialise output driver `%s' of class `%s'"
-
-#~ msgid "Options affecting syntax and behavior:"
-#~ msgstr "Options affecting syntax and behaviour:"
-
-#~ msgid ""
-#~ "   This program is free software: you can redistribute it and/or modify\n"
-#~ "   it under the terms of the GNU General Public License as published by\n"
-#~ "   the Free Software Foundation, either version 3 of the License, or\n"
-#~ "   (at your option) any later version.\n"
-#~ "\n"
-#~ "   This program is distributed in the hope that it will be useful,\n"
-#~ "   but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-#~ "   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
-#~ "   GNU General Public License for more details.\n"
-#~ "\n"
-#~ "   You should have received a copy of the GNU General Public License\n"
-#~ "   along with this program.  If not, see <http://www.gnu.org/licenses/>.\n"
-#~ msgstr ""
-#~ "\"   This program is free software: you can redistribute it and/or modify"
-#~ "\\n\"\n"
-#~ "\"   it under the terms of the GNU General Public License as published by"
-#~ "\\n\"\n"
-#~ "\"   the Free Software Foundation, either version 3 of the Licence, or\\n"
-#~ "\"\n"
-#~ "\"   (at your option) any later version.\\n\"\n"
-#~ "\"\\n\"\n"
-#~ "\"   This program is distributed in the hope that it will be useful,\\n"
-#~ "\"\n"
-#~ "\"   but WITHOUT ANY WARRANTY; without even the implied warranty of\\n\"\n"
-#~ "\"   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\\n\"\n"
-#~ "\"   GNU General Public License for more details.\\n\"\n"
-#~ "\"\\n\"\n"
-#~ "\"   You should have received a copy of the GNU General Public License\\n"
-#~ "\"\n"
-#~ "\"   along with this program.  If not, see <http://www.gnu.org/licenses/>."
-#~ "\\n\"\n"
index b00f742dd4d9bd071b513b21503abf97d391c145..e4d1e2a6213934a5c900d9710893b7ce322b543d 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -1,6 +1,7 @@
 # Spanish messages for PSPP
 # Copyright (C) 2009, 2010 Free Software Foundation, Inc.
 # This file is distributed under the same licence as the pspp package.
+# Francisco J. Miguel Quesada <Miguel.Quesada@uab.cat>, 2009.
 # Palmira Payá Sanchez, 2009.
 # Javier Gómez Serrano, 2009.
 # Francesc Josep Miguel Quesada <Miguel.Quesada@uab.cat>, 2010.
@@ -8,10 +9,10 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: pspp-0.7.2-pre1\n"
+"Project-Id-Version: pspp-0.7.5\n"
 "Report-Msgid-Bugs-To: pspp-dev@gnu.org\n"
-"POT-Creation-Date: 2010-05-21 12:02+0200\n"
-"PO-Revision-Date: 2010-02-03 20:19+0100\n"
+"POT-Creation-Date: 2010-05-21 16:40-0700\n"
+"PO-Revision-Date: 2010-10-13 13:30+0200\n"
 "Last-Translator: Francesc Josep Miguel Quesada <Miguel.Quesada@uab.cat>\n"
 "Language-Team: Spanish <es@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -62,9 +63,9 @@ msgid "Prefer variable labels"
 msgstr "Prefiero las etiquetas de variable"
 
 #: src/ui/gui/psppire-var-view.c:193
-#, fuzzy, c-format
+#, c-format
 msgid "Var%d"
-msgstr "Pareja %d"
+msgstr "Var%d"
 
 #: src/data/any-reader.c:56
 #, c-format
@@ -93,17 +94,11 @@ msgstr "El día %d no está en el intervalo válido de 0 a 31."
 #: src/data/calendar.c:96
 #, c-format
 msgid "Date %04d-%d-%d is before the earliest acceptable date of 1582-10-15."
-msgstr ""
-"La fecha %04d-%d-%d es anterior a la fecha aceptada más antigua, 1582-10-15."
+msgstr "La fecha %04d-%d-%d es anterior a la fecha aceptada más antigua, 1582-10-15."
 
 #: src/data/casereader-filter.c:221
-msgid ""
-"At least one case in the data read had a weight value that was user-missing, "
-"system-missing, zero, or negative.  These case(s) were ignored."
-msgstr ""
-"Al menos un caso en la lectura de datos tenia un valor de ponderación que es "
-"perdido del usuari, del sistema, cero o negativo. Este(os) caso(s) fueron "
-"ignorado(s)."
+msgid "At least one case in the data read had a weight value that was user-missing, system-missing, zero, or negative.  These case(s) were ignored."
+msgstr "Al menos un caso en la lectura de datos tenia un valor de ponderación que es perdido del usuari, del sistema, cero o negativo. Este(os) caso(s) fueron ignorado(s)."
 
 #: src/data/data-in.c:274 src/data/data-in.c:464
 msgid "Field contents are not numeric."
@@ -155,12 +150,8 @@ msgid "Delimiter expected between fields in date."
 msgstr "En la fecha se espera un delimitador entre los campos."
 
 #: src/data/data-in.c:837
-msgid ""
-"Unrecognized month format.  Months may be specified as Arabic or Roman "
-"numerals or as at least 3 letters of their English names."
-msgstr ""
-"Formato de mes no reconocido. Los meses pueden ser especificados como "
-"números Arábicos o Romanos, o como mínimo 3 letras de sus nombres en Inglés."
+msgid "Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names."
+msgstr "Formato de mes no reconocido. Los meses pueden ser especificados como números Arábicos o Romanos, o como mínimo 3 letras de sus nombres en Inglés."
 
 #: src/data/data-in.c:864
 #, c-format
@@ -201,12 +192,8 @@ msgid "Minute (%ld) must be between 0 and 59."
 msgstr "Minuto (%ld) debe estar entre 0 y 59."
 
 #: src/data/data-in.c:1014
-msgid ""
-"Unrecognized weekday name.  At least the first two letters of an English "
-"weekday name must be specified."
-msgstr ""
-"Día de la semana no reconocido. Al menos se deben especificar las dos "
-"primeras letras del nombre en inglés."
+msgid "Unrecognized weekday name.  At least the first two letters of an English weekday name must be specified."
+msgstr "Día de la semana no reconocido. Al menos se deben especificar las dos primeras letras del nombre en inglés."
 
 #: src/data/data-in.c:1152
 #, c-format
@@ -251,12 +238,8 @@ msgid "scratch"
 msgstr "cero"
 
 #: src/data/dictionary.c:980
-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 ""
-"Al menos un caso del archivo de datos tenía un valor de ponderación perdido "
-"de usuario, de sistema, cero o negativo. Estos caso(s) fueron ignorado(s)."
+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 "Al menos un caso del archivo de datos tenía un valor de ponderación perdido de usuario, de sistema, cero o negativo. Estos caso(s) fueron ignorado(s)."
 
 #: src/data/dictionary.c:1283
 #, c-format
@@ -266,15 +249,12 @@ msgstr "Linea de documento truncada a  %d bytes."
 #: src/data/file-handle-def.c:462
 #, c-format
 msgid "Can't read from %s as a %s because it is already being read as a %s."
-msgstr ""
-"No se puede leer de %s como una %s porque ya esta siendo leída como una %s."
+msgstr "No se puede leer de %s como una %s porque ya esta siendo leída como una %s."
 
 #: src/data/file-handle-def.c:466
 #, c-format
 msgid "Can't write to %s as a %s because it is already being written as a %s."
-msgstr ""
-"No se puede escribir en %s como una %s porque ya esta siendo escrita como "
-"una %s."
+msgstr "No se puede escribir en %s como una %s porque ya esta siendo escrita como una %s."
 
 #: src/data/file-handle-def.c:473
 #, c-format
@@ -284,9 +264,7 @@ msgstr "No se puede re-abrir %s como %s."
 #: src/data/file-name.c:168
 #, c-format
 msgid "Not opening pipe file `%s' because SAFER option set."
-msgstr ""
-"No abrir el archivo de transferencia '%s' porque la opción SAFER esta "
-"activada."
+msgstr "No abrir el archivo de transferencia '%s' porque la opción SAFER esta activada."
 
 #: src/data/format.c:235
 msgid "Input format"
@@ -301,7 +279,6 @@ msgstr "Formato de salida"
 msgid "Format %s may not be used for input."
 msgstr "Formato %s no puede ser utilizado como entrada."
 
-# anchura o longitud o..
 #: src/data/format.c:251
 #, c-format
 msgid "%s specifies width %d, but %s requires an even width."
@@ -310,45 +287,28 @@ msgstr "%s especifica %d anchura, pero %s requiere una anchura par."
 #: src/data/format.c:260
 #, c-format
 msgid "%s %s specifies width %d, but %s requires a width between %d and %d."
-msgstr ""
-"%s %s especifica anchura %d, pero %s requiere una anchura entre %d y %d."
+msgstr "%s %s especifica anchura %d, pero %s requiere una anchura entre %d y %d."
 
 #: src/data/format.c:269
 #, c-format
 msgid "%s %s specifies %d decimal place, but %s does not allow any decimals."
-msgid_plural ""
-"%s %s specifies %d decimal places, but %s does not allow any decimals."
+msgid_plural "%s %s specifies %d decimal places, but %s does not allow any decimals."
 msgstr[0] "%s %s especifica %d lugar decimal, pero %s no permite ninguno."
 msgstr[1] "%s %s especifica %d lugares decimales, pero %s no permite ninguno."
 
 #: src/data/format.c:280
 #, c-format
-msgid ""
-"%s %s specifies %d decimal place, but the given width allows at most %d "
-"decimals."
-msgid_plural ""
-"%s %s specifies %d decimal places, but the given width allows at most %d "
-"decimals."
-msgstr[0] ""
-"%s %s especifica %d lugar decimal, pero la anchura dada permite como mucho %"
-"d decimales."
-msgstr[1] ""
-"%s %s especifica %d lugares decimales, pero la anchura dada permite como "
-"mucho %d decimales."
+msgid "%s %s specifies %d decimal place, but the given width allows at most %d decimals."
+msgid_plural "%s %s specifies %d decimal places, but the given width allows at most %d decimals."
+msgstr[0] "%s %s especifica %d lugar decimal, pero la anchura dada permite como mucho %d decimales."
+msgstr[1] "%s %s especifica %d lugares decimales, pero la anchura dada permite como mucho %d decimales."
 
 #: src/data/format.c:287
 #, c-format
-msgid ""
-"%s %s specifies %d decimal place, but the given width does not allow for any "
-"decimals."
-msgid_plural ""
-"%s %s specifies %d decimal places, but the given width does not allow for "
-"any decimals."
-msgstr[0] ""
-"%s %s especifica %d lugar decimal, pero la anchura dada no permite ninguno."
-msgstr[1] ""
-"%s %s especifica %d lugares decimales, pero la anchura dada no permite "
-"ninguno."
+msgid "%s %s specifies %d decimal place, but the given width does not allow for any decimals."
+msgid_plural "%s %s specifies %d decimal places, but the given width does not allow for any decimals."
+msgstr[0] "%s %s especifica %d lugar decimal, pero la anchura dada no permite ninguno."
+msgstr[1] "%s %s especifica %d lugares decimales, pero la anchura dada no permite ninguno."
 
 #: src/data/format.c:326
 #, c-format
@@ -385,17 +345,14 @@ msgstr "numérico"
 msgid "string"
 msgstr "cadena"
 
-# amplitud, ancho?
 #: src/data/format.c:346
 #, c-format
 msgid "String variable with width %d is not compatible with format %s."
 msgstr "Variable de cadena con ancho %d no es compatible con el formato %s."
 
 #: src/data/gnumeric-reader.c:36
-msgid ""
-"Support for Gnumeric files was not compiled into this installation of PSPP"
-msgstr ""
-"Soporte para archivos Gnumeric no fue compilado en esta instalación de PSPP"
+msgid "Support for Gnumeric files was not compiled into this installation of PSPP"
+msgstr "Soporte para archivos Gnumeric no fue compilado en esta instalación de PSPP"
 
 #: src/data/gnumeric-reader.c:364
 #, c-format
@@ -415,8 +372,7 @@ msgstr "No se puede crear el nombre de la variable desde %s"
 #: src/data/gnumeric-reader.c:528
 #, c-format
 msgid "Selected sheet or range of spreadsheet \"%s\" is empty."
-msgstr ""
-"La hoja o el intervalo de hojas de cálculo seleccionadas \"%s\" está vacía."
+msgstr "La hoja o el intervalo de hojas de cálculo seleccionadas \"%s\" está vacía."
 
 #: src/data/make-file.c:68
 #, c-format
@@ -464,14 +420,14 @@ msgid "Removing %s: %s."
 msgstr "Eliminando %s: %s."
 
 #: src/data/por-file-reader.c:99
-#, fuzzy, c-format
+#, c-format
 msgid "portable file %s corrupt at offset 0x%llx: "
-msgstr "archivo portátil %s corrompido a la posición 0x%lx: "
+msgstr "el archivo portátil %s está corrupto en la posición 0x%llx: "
 
 #: src/data/por-file-reader.c:128
-#, fuzzy, c-format
+#, c-format
 msgid "reading portable file %s at offset 0x%llx: "
-msgstr "leyendo el archivo portátil %s en la posición 0x%lx: "
+msgstr "leyendo el archivo portátil %s en la posición 0x%llx: "
 
 #: src/data/por-file-reader.c:156
 #, c-format
@@ -490,8 +446,7 @@ msgstr "archivo portátil"
 
 #: src/data/por-file-reader.c:275
 #, c-format
-msgid ""
-"An error occurred while opening \"%s\" for reading as a portable file: %s."
+msgid "An error occurred while opening \"%s\" for reading as a portable file: %s."
 msgstr "Error en abrir \"%s\" para la lectura como archivo portátil: %s."
 
 #: src/data/por-file-reader.c:296
@@ -502,7 +457,6 @@ msgstr "Registro de datos esperado."
 msgid "Number expected."
 msgstr "Número esperado."
 
-# Falta, ausencia?
 #: src/data/por-file-reader.c:406
 msgid "Missing numeric terminator."
 msgstr "Falta la terminación numérica."
@@ -538,25 +492,18 @@ msgstr "Longitud de cadena de tiempo %zu inválida."
 
 #: src/data/por-file-reader.c:593
 #, c-format
-msgid ""
-"%s: Bad format specifier byte (%d).  Variable will be assigned a default "
-"format."
-msgstr ""
-"%s: Byte especificador de formato inválido (%d). Se asignará formato "
-"predeterminado a la variable."
+msgid "%s: Bad format specifier byte (%d).  Variable will be assigned a default format."
+msgstr "%s: Byte especificador de formato inválido (%d). Se asignará formato predeterminado a la variable."
 
 #: src/data/por-file-reader.c:614
 #, c-format
 msgid "Numeric variable %s has invalid format specifier %s."
-msgstr ""
-"La variable numérica %s tiene una especificación de formato inválida %s."
+msgstr "La variable numérica %s tiene una especificación de formato inválida %s."
 
 #: src/data/por-file-reader.c:618
 #, c-format
 msgid "String variable %s with width %d has invalid format specifier %s."
-msgstr ""
-"La variable en cadena %s con longitud %d tiene una especificación de formato "
-"inválida %s."
+msgstr "La variable en cadena %s con longitud %d tiene una especificación de formato inválida %s."
 
 #: src/data/por-file-reader.c:642
 msgid "Expected variable count record."
@@ -576,7 +523,6 @@ msgstr "Nombre de la variable ponderada (%s) truncado."
 msgid "Expected variable record."
 msgstr "Registro de variable esperado."
 
-# ancho?
 #: src/data/por-file-reader.c:674
 #, c-format
 msgid "Invalid variable width %d."
@@ -600,8 +546,7 @@ msgstr "Nombre de la variable %s duplicado en la posición %d."
 #: src/data/por-file-reader.c:701
 #, c-format
 msgid "Duplicate variable name %s in position %d renamed to %s."
-msgstr ""
-"Nombre de la variable %s duplicado en la posición %d se ha renombrado a %s."
+msgstr "Nombre de la variable %s duplicado en la posición %d se ha renombrado a %s."
 
 #: src/data/por-file-reader.c:750
 #, c-format
@@ -615,11 +560,8 @@ msgstr "Variable %s desconocida mientras se analizaban las etiquetas de valor."
 
 #: src/data/por-file-reader.c:797
 #, c-format
-msgid ""
-"Cannot assign value labels to %s and %s, which have different variable types."
-msgstr ""
-"No se puede asignar etiquetas de valor a %s y %s, que tienen diferentes "
-"tipos de variables."
+msgid "Cannot assign value labels to %s and %s, which have different variable types."
+msgstr "No se puede asignar etiquetas de valor a %s y %s, que tienen diferentes tipos de variables."
 
 #: src/data/por-file-writer.c:141
 #, c-format
@@ -637,12 +579,8 @@ msgid "An I/O error occurred writing portable file \"%s\"."
 msgstr "Error I/O en escribir el archivo portátil \"%s\"."
 
 #: src/data/psql-reader.c:46
-msgid ""
-"Support for reading postgres databases was not compiled into this "
-"installation of PSPP"
-msgstr ""
-"El soporte para la lectura de las bases de datos postgres no fue compilado "
-"en esta instalación de PSPP"
+msgid "Support for reading postgres databases was not compiled into this installation of PSPP"
+msgstr "El soporte para la lectura de las bases de datos postgres no fue compilado en esta instalación de PSPP"
 
 #: src/data/psql-reader.c:242
 msgid "Memory error whilst opening psql source"
@@ -655,20 +593,12 @@ msgstr "Error abriendo la fuente psql: %s."
 
 #: 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 ""
-"La versión del servidor Postgres es la %s. No es posible la lectura desde "
-"versiones anteriores a la 8.0."
+msgid "Postgres server is version %s. Reading from versions earlier than 8.0 is not supported."
+msgstr "La versión del servidor Postgres es la %s. No es posible la lectura desde versiones anteriores a la 8.0."
 
 #: src/data/psql-reader.c:283
-msgid ""
-"Connection is unencrypted, but unencrypted connections have not been "
-"permitted."
-msgstr ""
-"La conexión no está cifrada, pero las conexiones sin cifrar no están "
-"permitidas."
+msgid "Connection is unencrypted, but unencrypted connections have not been permitted."
+msgstr "La conexión no está cifrada, pero las conexiones sin cifrar no están permitidas."
 
 #: src/data/psql-reader.c:322 src/data/psql-reader.c:347
 #: src/data/psql-reader.c:357
@@ -683,12 +613,8 @@ msgstr "OID %d no admitido. Valores SYSMIS serán insertados."
 
 #: src/data/scratch-reader.c:54
 #, c-format
-msgid ""
-"Scratch file handle %s has not yet been written, using SAVE or another "
-"procedure, so it cannot yet be used for reading."
-msgstr ""
-"El manipulador de archivos de trabajo %s aún no se ha escrito, utilizando "
-"SAVE u otro procedimiento, de forma que aún no se puede leer."
+msgid "Scratch file handle %s has not yet been written, using SAVE or another procedure, so it cannot yet be used for reading."
+msgstr "El manipulador de archivos de trabajo %s aún no se ha escrito, utilizando SAVE u otro procedimiento, de forma que aún no se puede leer."
 
 #. TRANSLATORS: this fragment will be interpolated into
 #. messages in fh_lock() that identify types of files.
@@ -698,12 +624,8 @@ msgstr "archivo de trabajo"
 
 #: src/data/settings.c:608
 #, c-format
-msgid ""
-"%s: Custom currency string `%s' does not contain exactly three periods or "
-"commas (or it contains both)."
-msgstr ""
-"%s: La cadena de moneda personalizada '%s' no contiene exactamente tres "
-"puntos o comas (o contiene ambos)."
+msgid "%s: Custom currency string `%s' does not contain exactly three periods or commas (or it contains both)."
+msgstr "%s: La cadena de moneda personalizada '%s' no contiene exactamente tres puntos o comas (o contiene ambos)."
 
 #: src/data/short-names.c:52
 msgid "Variable suffix too large."
@@ -712,9 +634,7 @@ msgstr "Sufijo de la variable demasiado grande."
 #: src/data/sys-file-reader.c:226
 #, c-format
 msgid "Recoded variable name duplicates an existing `%s' within system file."
-msgstr ""
-"El nombre de la variable recodificada duplica `%s' existente dentro del "
-"archivo del sistema."
+msgstr "El nombre de la variable recodificada duplica `%s' existente dentro del archivo del sistema."
 
 #. TRANSLATORS: this fragment will be interpolated into
 #. messages in fh_lock() that identify types of files.
@@ -739,9 +659,7 @@ msgstr "Tipo de registro %d no reconocido."
 #: src/data/sys-file-reader.c:388
 #, c-format
 msgid "File header claims %d variable positions but %d were read from file."
-msgstr ""
-"Cabecera del archivo requiere %d posiciones de variable, per se han leído %d "
-"desde el archivo."
+msgstr "Cabecera del archivo requiere %d posiciones de variable, per se han leído %d desde el archivo."
 
 #: src/data/sys-file-reader.c:428
 #, c-format
@@ -754,12 +672,8 @@ msgid "This is not an SPSS system file."
 msgstr "Esto no es un archivo de sistema de SPSS."
 
 #: src/data/sys-file-reader.c:525 tests/dissect-sysfile.c:227
-msgid ""
-"Compression bias is not the usual value of 100, or system file uses "
-"unrecognized floating-point format."
-msgstr ""
-"El sesgo de compresión no es el valor habitual de 100, o el archivo de "
-"sistema utiliza un formato de punto flotante no reconocido."
+msgid "Compression bias is not the usual value of 100, or system file uses unrecognized floating-point format."
+msgstr "El sesgo de compresión no es el valor habitual de 100, o el archivo de sistema utiliza un formato de punto flotante no reconocido."
 
 #: src/data/sys-file-reader.c:602
 #, c-format
@@ -777,8 +691,7 @@ msgstr "Campo indicador de etiqueta de variable no es 0 o 1."
 
 #: src/data/sys-file-reader.c:649 tests/dissect-sysfile.c:387
 msgid "Numeric missing value indicator field is not -3, -2, 0, 1, 2, or 3."
-msgstr ""
-"Campo de indicador de valores perdidos numéricos no es -3, -2, 0, 1, 2 o 3."
+msgstr "Campo de indicador de valores perdidos numéricos no es -3, -2, 0, 1, 2 o 3."
 
 #: src/data/sys-file-reader.c:667 tests/dissect-sysfile.c:402
 msgid "String missing value indicator field is not 0, 1, 2, or 3."
@@ -829,46 +742,31 @@ msgstr "Una línea del documento contiene un byte nulo."
 
 #: src/data/sys-file-reader.c:893
 #, 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 ""
-"Registro de tipo 7, subtipo %d , no reconocido. Por favor envíe una copia de "
-"este archivo, así como de la sintaxis que lo creó en %s"
+msgid "Unrecognized record type 7, subtype %d.  Please send a copy of this file, and the syntax which created it to %s"
+msgstr "Registro de tipo 7, subtipo %d , no reconocido. Por favor envíe una copia de este archivo, así como de la sintaxis que lo creó en %s"
 
 #: src/data/sys-file-reader.c:920 tests/dissect-sysfile.c:594
 #, c-format
 msgid "Bad size (%zu) or count (%zu) field on record type 7, subtype 3."
-msgstr ""
-"Campo de longitud (%zu) o cantidad (%zu) inválidos en el registro tipo 7, "
-"subtipo 3."
+msgstr "Campo de longitud (%zu) o cantidad (%zu) inválidos en el registro tipo 7, subtipo 3."
 
 #: src/data/sys-file-reader.c:940
 #, c-format
-msgid ""
-"Floating-point representation indicated by system file (%d) differs from "
-"expected (%d)."
-msgstr ""
-"Representación del punto flotante indicado por el archivo de sistema (%d) "
-"difiere de lo esperado (%d)."
+msgid "Floating-point representation indicated by system file (%d) differs from expected (%d)."
+msgstr "Representación del punto flotante indicado por el archivo de sistema (%d) difiere de lo esperado (%d)."
 
 #: src/data/sys-file-reader.c:953 src/language/dictionary/sys-file-info.c:110
-#, fuzzy
 msgid "Little Endian"
-msgstr "Little Endian."
+msgstr "Tipo Little-Endian"
 
 #: src/data/sys-file-reader.c:953 src/language/dictionary/sys-file-info.c:109
-#, fuzzy
 msgid "Big Endian"
-msgstr "Big Endian."
+msgstr "Tipo Big-Endian."
 
 #: src/data/sys-file-reader.c:954
 #, c-format
-msgid ""
-"Integer format indicated by system file (%s) differs from expected (%s)."
-msgstr ""
-"Formato entero indicado por el archivo de sistema  (%s) difiere de lo "
-"esperado (%s)."
+msgid "Integer format indicated by system file (%s) differs from expected (%s)."
+msgstr "Formato entero indicado por el archivo de sistema  (%s) difiere de lo esperado (%s)."
 
 #: src/data/sys-file-reader.c:1011 tests/dissect-sysfile.c:625
 #, c-format
@@ -885,45 +783,42 @@ msgstr "El archivo especifica un valor inesperado %g como %s."
 #: src/data/sys-file-reader.c:1056
 #, c-format
 msgid "Missing space following 'C' at offset %zu in MRSETS record"
-msgstr ""
+msgstr "Espacio perdido tras 'C' en la posición %zu del registro MRSETS"
 
 #: src/data/sys-file-reader.c:1074 tests/dissect-sysfile.c:691
 #, c-format
 msgid "Missing space following 'E' at offset %zu in MRSETS record"
-msgstr ""
+msgstr "Espacio perdido tras 'E' en la posición %zu del registro MRSETS"
 
 #: src/data/sys-file-reader.c:1083 tests/dissect-sysfile.c:700
 #, c-format
-msgid ""
-"Unexpected label source value \"%s\" following 'E' at offset %zu in MRSETS "
-"record"
-msgstr ""
+msgid "Unexpected label source value \"%s\" following 'E' at offset %zu in MRSETS record"
+msgstr "Etiqueta de valor fuente inesperada \"%s\" tras 'E' en la posición %zu del registro MRSETS"
 
 #: src/data/sys-file-reader.c:1089
 #, c-format
 msgid "Missing 'C', 'D', or 'E' at offset %zu in MRSETS record."
-msgstr ""
+msgstr "Falta 'C', 'D' o 'E' en la posición %zu del registro MRSETS"
 
 #: src/data/sys-file-reader.c:1118
 #, c-format
 msgid "Missing new-line parsing variable names at offset %zu in MRSETS record."
-msgstr ""
+msgstr "Falta el nombre de variable de nueva línea en la posición %zu del registro MRSETS"
 
 #: src/data/sys-file-reader.c:1129
-#, fuzzy, c-format
+#, c-format
 msgid "Duplicate variable name %s at offset %zu in MRSETS record."
-msgstr "Nombre de la variable %s duplicado en la posición %d."
+msgstr "Nombre de la variable %s duplicado en la posición %zu en registro MRSETS."
 
 #: src/data/sys-file-reader.c:1142
-#, fuzzy, c-format
+#, c-format
 msgid "MRSET %s contains both string and numeric variables."
-msgstr ""
-"Ignorando el registro del valor de cadena larga para la variable numérica %s."
+msgstr "MRSET %s contiene tanto variables textuales como numéricas."
 
 #: src/data/sys-file-reader.c:1157
 #, c-format
 msgid "MRSET %s has only %zu variables."
-msgstr ""
+msgstr "MRSET %s tiene sólo %zu variables."
 
 #: src/data/sys-file-reader.c:1194 tests/dissect-sysfile.c:758
 #, c-format
@@ -937,41 +832,28 @@ msgstr "Extensión 11 tiene un recuento inválido %zu (para %zu variables)."
 
 #: src/data/sys-file-reader.c:1227
 #, c-format
-msgid ""
-"Invalid variable display parameters for variable %zu (%s).  Default "
-"parameters substituted."
-msgstr ""
-"Parámetros de visualización de variable no válidos para la variable %zu (%"
-"s). Sustitución de parámetros por defecto."
+msgid "Invalid variable display parameters for variable %zu (%s).  Default parameters substituted."
+msgstr "Parámetros de visualización de variable no válidos para la variable %zu (%s). Sustitución de parámetros por defecto."
 
 #: src/data/sys-file-reader.c:1271
 #, c-format
 msgid "Long variable mapping from %s to invalid variable name `%s'."
-msgstr ""
-"Identificación de variable larga desde %s hacia un nombre de variable "
-"inválido '%s'."
+msgstr "Identificación de variable larga desde %s hacia un nombre de variable inválido '%s'."
 
 #: src/data/sys-file-reader.c:1281
 #, c-format
 msgid "Duplicate long variable name `%s' within system file."
-msgstr ""
-"Nombre de la variable larga '%s' duplicada dentro del archivo de sistema."
+msgstr "Nombre de la variable larga '%s' duplicada dentro del archivo de sistema."
 
 #: src/data/sys-file-reader.c:1334
 #, c-format
 msgid "%s listed as string of invalid length %s in very length string record."
-msgstr ""
-"%s figura como cadena de longitud no válida %s en un registro de cadena muy "
-"largo."
+msgstr "%s figura como cadena de longitud no válida %s en un registro de cadena muy largo."
 
 #: src/data/sys-file-reader.c:1344
 #, c-format
-msgid ""
-"%s listed in very long string record with width %s, which requires only one "
-"segment."
-msgstr ""
-"%s figura en el registro de cadena muy larga con longitud %s, que requiere "
-"solo un segmento."
+msgid "%s listed in very long string record with width %s, which requires only one segment."
+msgstr "%s figura en el registro de cadena muy larga con longitud %s, que requiere solo un segmento."
 
 #: src/data/sys-file-reader.c:1350
 #, c-format
@@ -980,11 +862,8 @@ msgstr "Cadena muy larga %s desborda el diccionario."
 
 #: src/data/sys-file-reader.c:1364
 #, c-format
-msgid ""
-"Very long string with width %ld has segment %d of width %d (expected %d)"
-msgstr ""
-"Cadena muy larga con una longitud de %ld tiene un segmento %d de longitud %d "
-"(se espera %d)"
+msgid "Very long string with width %ld has segment %d of width %d (expected %d)"
+msgstr "Cadena muy larga con una longitud de %ld tiene un segmento %d de longitud %d (se espera %d)"
 
 #: src/data/sys-file-reader.c:1410
 #, c-format
@@ -992,39 +871,23 @@ msgid "Invalid number of labels: %d.  Ignoring labels."
 msgstr "Número de etiquetas inválido: %d. Ignorando etiquetas."
 
 #: src/data/sys-file-reader.c:1441 tests/dissect-sysfile.c:468
-msgid ""
-"Variable index record (type 4) does not immediately follow value label "
-"record (type 3) as it should."
-msgstr ""
-"Registro de índice de variable (tipo 4) no está seguido inmediatament, como "
-"debería, por el registro de etiquetas de valores (tipo 3) ."
+msgid "Variable index record (type 4) does not immediately follow value label record (type 3) as it should."
+msgstr "Registro de índice de variable (tipo 4) no está seguido inmediatament, como debería, por el registro de etiquetas de valores (tipo 3) ."
 
 #: src/data/sys-file-reader.c:1448
 #, c-format
-msgid ""
-"Number of variables associated with a value label (%d) is not between 1 and "
-"the number of variables (%zu)."
-msgstr ""
-"Número de variables asociadas con una etiqueta de valores (%d) no está entre "
-"1 y el número de variables (%zu)."
+msgid "Number of variables associated with a value label (%d) is not between 1 and the number of variables (%zu)."
+msgstr "Número de variables asociadas con una etiqueta de valores (%d) no está entre 1 y el número de variables (%zu)."
 
 #: src/data/sys-file-reader.c:1459
 #, c-format
-msgid ""
-"Value labels may not be added to long string variables (e.g. %s) using "
-"records types 3 and 4."
-msgstr ""
-"No se pueden añadir etiquetas de valor a las variables de cadena larga (e.g. "
-"%s) utilizando los tipos de registro 3 y 4."
+msgid "Value labels may not be added to long string variables (e.g. %s) using records types 3 and 4."
+msgstr "No se pueden añadir etiquetas de valor a las variables de cadena larga (e.g. %s) utilizando los tipos de registro 3 y 4."
 
 #: src/data/sys-file-reader.c:1468
 #, c-format
-msgid ""
-"Variables associated with value label are not all of identical type.  "
-"Variable %s is %s, but variable %s is %s."
-msgstr ""
-"Las variables asociadas con etiqueta de valores no son todas del mismo "
-"tipo.  La variable %s es %s, pero la variable %s es %s."
+msgid "Variables associated with value label are not all of identical type.  Variable %s is %s, but variable %s is %s."
+msgstr "Las variables asociadas con etiqueta de valores no son todas del mismo tipo.  La variable %s es %s, pero la variable %s es %s."
 
 #: src/data/sys-file-reader.c:1502
 #, c-format
@@ -1048,43 +911,28 @@ msgstr "El valor del atributo %s[%d] no está entre comillas: %s"
 
 #: src/data/sys-file-reader.c:1620 tests/dissect-sysfile.c:936
 #, c-format
-msgid ""
-"Variable name length in long string value label record (%d) exceeds %d-byte "
-"limit."
-msgstr ""
-"La longitud del nombre de la variable en el registro de la etiqueta del "
-"valor de cadena larga (%d) supera el límite %d-byte."
+msgid "Variable name length in long string value label record (%d) exceeds %d-byte limit."
+msgstr "La longitud del nombre de la variable en el registro de la etiqueta del valor de cadena larga (%d) supera el límite %d-byte."
 
 #: src/data/sys-file-reader.c:1630
 #, c-format
 msgid "Ignoring long string value record for unknown variable %s."
-msgstr ""
-"Ignorando el registro del valor de cadena larga para la variable desconocida "
-"%s."
+msgstr "Ignorando el registro del valor de cadena larga para la variable desconocida %s."
 
 #: src/data/sys-file-reader.c:1637
 #, c-format
 msgid "Ignoring long string value record for numeric variable %s."
-msgstr ""
-"Ignorando el registro del valor de cadena larga para la variable numérica %s."
+msgstr "Ignorando el registro del valor de cadena larga para la variable numérica %s."
 
 #: src/data/sys-file-reader.c:1644
 #, 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 ""
-"Ignorando el registro del valor de cadena larga %s ya que el ancho del "
-"registro (%d) no coincide con el ancho de la variable (%d)"
+msgid "Ignoring long string value record for variable %s because the record's width (%d) does not match the variable's width (%d)"
+msgstr "Ignorando el registro del valor de cadena larga %s ya que el ancho del registro (%d) no coincide con el ancho de la variable (%d)"
 
 #: src/data/sys-file-reader.c:1666
 #, c-format
-msgid ""
-"Ignoring long string value %zu for variable %s, with width %d, that has bad "
-"value width %zu."
-msgstr ""
-"Ignorando el valor de cadena larga %zu para la variable %s, de ancho %d, que "
-"tiene un ancho de valor incorrecto %zu."
+msgid "Ignoring long string value %zu for variable %s, with width %d, that has bad value width %zu."
+msgstr "Ignorando el valor de cadena larga %zu para la variable %s, de ancho %d, que tiene un ancho de valor incorrecto %zu."
 
 #: src/data/sys-file-reader.c:1781
 msgid "File ends in partial case."
@@ -1096,17 +944,13 @@ msgid "Error reading case from file %s."
 msgstr "Error leyendo un caso del archivo %s."
 
 #: src/data/sys-file-reader.c:1890
-msgid ""
-"Possible compressed data corruption: compressed spaces appear in numeric "
-"field."
-msgstr ""
+msgid "Possible compressed data corruption: compressed spaces appear in numeric field."
+msgstr "Posible corrupción de datos comprimidos: aparecen espacios comprimidos en un campo numérico."
 
 #: src/data/sys-file-reader.c:1943
 #, c-format
-msgid ""
-"Possible compressed data corruption: string contains compressed integer "
-"(opcode %d)"
-msgstr ""
+msgid "Possible compressed data corruption: string contains compressed integer (opcode %d)"
+msgstr "Posible corrupción de datos comprimidos: una cadena textual contiene un entero comprimido (opcode %d)."
 
 #: src/data/sys-file-reader.c:2035
 #, c-format
@@ -1116,8 +960,7 @@ msgstr "Índice de la variable %d no en el intervalo válido de 1...%d."
 #: src/data/sys-file-reader.c:2040
 #, c-format
 msgid "Variable index %d refers to long string continuation."
-msgstr ""
-"Índice de la variable %d se refiere a una continuación de cadena larga."
+msgstr "Índice de la variable %d se refiere a una continuación de cadena larga."
 
 #: src/data/sys-file-reader.c:2108
 #, c-format
@@ -1125,29 +968,29 @@ msgid "Suppressed %d additional related warnings."
 msgstr "Suprimidas %d advertencias adicionales."
 
 #: src/data/sys-file-reader.c:2153 src/data/sys-file-reader.c:2170
-#, fuzzy, c-format
+#, c-format
 msgid "Dictionary record refers to unknown variable %s."
-msgstr "Mapa de la variable se refiere a una variable desconocida %s."
+msgstr "El registro diccionario se refiere a una variable desconocida %s."
 
 #: src/data/sys-file-reader.c:2231
 #, c-format
 msgid "Expecting digit at offset %zu in MRSETS record."
-msgstr ""
+msgstr "Se espera un dígito en la posición %zu del registro MRSETS."
 
 #: src/data/sys-file-reader.c:2238
 #, c-format
 msgid "Expecting space at offset %zu in MRSETS record."
-msgstr ""
+msgstr "Se espera un espacio en la posición %zu del registre MRSETS."
 
 #: src/data/sys-file-reader.c:2245
 #, c-format
 msgid "%zu-byte string starting at offset %zu exceeds record length %zu."
-msgstr ""
+msgstr "El texto de %zu-bytes que comienza en la posición %zu excede la longitud del registro %zu. "
 
 #: src/data/sys-file-reader.c:2255
 #, c-format
 msgid "Expecting space at offset %zu following %zu-byte string."
-msgstr ""
+msgstr "Se espera un espacio en la posición %zu tras un texto de %zu-byte."
 
 #: src/data/sys-file-reader.c:2347 tests/dissect-sysfile.c:1341
 #, c-format
@@ -1161,8 +1004,7 @@ msgstr "Final de archivo inesperado."
 #: src/data/sys-file-writer.c:180
 #, c-format
 msgid "Unknown system file version %d. Treating as version %d."
-msgstr ""
-"Versión de archivo de sistema %d desconocida.Se tratará como versión %d."
+msgstr "Versión de archivo de sistema %d desconocida.Se tratará como versión %d."
 
 #: src/data/sys-file-writer.c:219
 #, c-format
@@ -1176,12 +1018,8 @@ msgstr "Error de E/S al guardar el archivo de sistema \"%s\"."
 
 #: src/data/variable.c:206
 #, c-format
-msgid ""
-"Character `%c' (in %s) may not appear as the first character in a variable "
-"name."
-msgstr ""
-"Carácter '%c' (en %s) no puede aparecer como el primer carácter en un nombre "
-"de variable."
+msgid "Character `%c' (in %s) may not appear as the first character in a variable name."
+msgstr "Carácter '%c' (en %s) no puede aparecer como el primer carácter en un nombre de variable."
 
 #: src/data/variable.c:218
 #, c-format
@@ -1200,9 +1038,7 @@ msgstr "El nombre de la variable %s supera el límite de %d caracteres."
 #: src/data/variable.c:258
 #, c-format
 msgid "`%s' may not be used as a variable name because it is a reserved word."
-msgstr ""
-"'%s' no puede ser utilizado como nombre de variable porque es una palabra "
-"reservada."
+msgstr "'%s' no puede ser utilizado como nombre de variable porque es una palabra reservada."
 
 #: src/language/syntax-file.c:95
 #, c-format
@@ -1270,39 +1106,23 @@ msgstr "%s sólo se permite dentro de FILE TYPE."
 
 #: src/language/command.c:642
 #, c-format
-msgid ""
-"%s is allowed only before the active file has been defined or inside INPUT "
-"PROGRAM."
-msgstr ""
-"%s sólo se permite antes que el archivo activo se ha definido, o dentro de "
-"INPUT PROGRAM."
+msgid "%s is allowed only before the active file has been defined or inside INPUT PROGRAM."
+msgstr "%s sólo se permite antes que el archivo activo se ha definido, o dentro de INPUT PROGRAM."
 
 #: src/language/command.c:646
 #, c-format
-msgid ""
-"%s is allowed only before the active file has been defined or inside FILE "
-"TYPE."
-msgstr ""
-"%s sólo se permite antes que el archivo activo se ha definido, o dentro de "
-"FILE TYPE."
+msgid "%s is allowed only before the active file has been defined or inside FILE TYPE."
+msgstr "%s sólo se permite antes que el archivo activo se ha definido, o dentro de FILE TYPE."
 
 #: src/language/command.c:650
 #, c-format
-msgid ""
-"%s is allowed only after the active file has been defined or inside INPUT "
-"PROGRAM."
-msgstr ""
-"%s sólo se permite después que el archivo activo se ha definido, o dentro de "
-"INPUT PROGRAM."
+msgid "%s is allowed only after the active file has been defined or inside INPUT PROGRAM."
+msgstr "%s sólo se permite después que el archivo activo se ha definido, o dentro de INPUT PROGRAM."
 
 #: src/language/command.c:654
 #, c-format
-msgid ""
-"%s is allowed only after the active file has been defined or inside FILE "
-"TYPE."
-msgstr ""
-"%s sólo se permite después que el archivo activo se ha definido, o dentro de "
-"FILE TYPE."
+msgid "%s is allowed only after the active file has been defined or inside FILE TYPE."
+msgstr "%s sólo se permite después que el archivo activo se ha definido, o dentro de FILE TYPE."
 
 #: src/language/command.c:658
 #, c-format
@@ -1311,26 +1131,18 @@ msgstr "%s sólo se permite dentro de INPUT PROGRAM o FILE TYPE."
 
 #: src/language/command.c:664
 #, c-format
-msgid ""
-"%s is allowed only after the active file has been defined, inside INPUT "
-"PROGRAM, or inside FILE TYPE."
-msgstr ""
-"%s sólo se permite después que el archivo activo se ha definido, dentro de "
-"INPUT PROGRAM, o FILE TYPE."
+msgid "%s is allowed only after the active file has been defined, inside INPUT PROGRAM, or inside FILE TYPE."
+msgstr "%s sólo se permite después que el archivo activo se ha definido, dentro de INPUT PROGRAM, o FILE TYPE."
 
 #: src/language/command.c:669
 #, c-format
-msgid ""
-"%s is allowed only before the active file has been defined, inside INPUT "
-"PROGRAM, or inside FILE TYPE."
-msgstr ""
-"%s sólo se permite antes que el archivo activo se ha definido, dentro de "
-"INPUT PROGRAM, o FILE TYPE."
+msgid "%s is allowed only before the active file has been defined, inside INPUT PROGRAM, or inside FILE TYPE."
+msgstr "%s sólo se permite antes que el archivo activo se ha definido, dentro de INPUT PROGRAM, o FILE TYPE."
 
 #: src/language/command.c:687 src/language/command.c:689
-#, fuzzy, c-format
+#, c-format
 msgid "%s is not allowed inside %s."
-msgstr "%s no se permite dentro de FILE TYPE."
+msgstr "%s no está permitido dentro de %s."
 
 #: src/language/command.c:768 src/language/command.c:876
 #: src/language/utilities/permissions.c:98
@@ -1431,8 +1243,7 @@ msgstr "hexadecimal"
 #: src/language/lexer/lexer.c:1085
 #, c-format
 msgid "String of %s digits has %zu characters, which is not a multiple of %d."
-msgstr ""
-"La cadena de %s dígitos tiene %zu caracteres, que no es un múltiplo de %d."
+msgstr "La cadena de %s dígitos tiene %zu caracteres, que no es un múltiplo de %d."
 
 #: src/language/lexer/lexer.c:1114
 #, c-format
@@ -1473,12 +1284,8 @@ msgstr "esperando el tipo de formato"
 
 #: 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 ""
-"El límite inferior del intervalo (%g) está por debajo del límite superior (%"
-"g). El intervalo será invertido."
+msgid "Low end of range (%g) is below high end (%g).  The range will be treated as reversed."
+msgstr "El límite inferior del intervalo (%g) está por debajo del límite superior (%g). El intervalo será invertido."
 
 #: src/language/lexer/value-parser.c:68
 #, c-format
@@ -1508,17 +1315,13 @@ msgstr "%s no es un nombre de variable."
 
 #: src/language/lexer/variable-parser.c:178
 #, c-format
-msgid ""
-"%s is not a numeric variable.  It will not be included in the variable list."
-msgstr ""
-"%s no es una variable numérica. No será incluida en la lista de variables."
+msgid "%s is not a numeric variable.  It will not be included in the variable list."
+msgstr "%s no es una variable numérica. No será incluida en la lista de variables."
 
 #: src/language/lexer/variable-parser.c:181
 #, c-format
-msgid ""
-"%s is not a string variable.  It will not be included in the variable list."
-msgstr ""
-"%s no es una variable de cadena. No será incluida en la lista de variables."
+msgid "%s is not a string variable.  It will not be included in the variable list."
+msgstr "%s no es una variable de cadena. No será incluida en la lista de variables."
 
 #: src/language/lexer/variable-parser.c:185
 #, c-format
@@ -1527,21 +1330,13 @@ msgstr "Las variables de trabajol  (como %s) no están permitidas aquí."
 
 #: src/language/lexer/variable-parser.c:189
 #, c-format
-msgid ""
-"%s and %s are not the same type.  All variables in this variable list must "
-"be of the same type.  %s will be omitted from the list."
-msgstr ""
-"%s y %s no son del mismo tipo. Todas las variables de esta lista tienen que "
-"ser del mismo tipo. %s será omitida de la lista."
+msgid "%s and %s are not the same type.  All variables in this variable list must be of the same type.  %s will be omitted from the list."
+msgstr "%s y %s no son del mismo tipo. Todas las variables de esta lista tienen que ser del mismo tipo. %s será omitida de la lista."
 
 #: src/language/lexer/variable-parser.c:195
 #, c-format
-msgid ""
-"%s and %s are string variables with different widths.  All variables in this "
-"variable list must have the same width.  %s will be omitted from the list."
-msgstr ""
-"%s y %s son variables de cadena con tamaños diferentes. Todas las variables "
-"de esta lista deben tener el mismo tamaño. %s será omitida de la lista."
+msgid "%s and %s are string variables with different widths.  All variables in this variable list must have the same width.  %s will be omitted from the list."
+msgstr "%s y %s son variables de cadena con tamaños diferentes. Todas las variables de esta lista deben tener el mismo tamaño. %s será omitida de la lista."
 
 #: src/language/lexer/variable-parser.c:200
 #: src/language/lexer/variable-parser.c:496
@@ -1552,21 +1347,12 @@ msgstr "La variable %s aparece dos veces en la lista de variables."
 #: src/language/lexer/variable-parser.c:313
 #, c-format
 msgid "%s TO %s is not valid syntax since %s precedes %s in the dictionary."
-msgstr ""
-"%s TO %s no es una sintaxis válida debido a que %s precede %s en el "
-"diccionario."
+msgstr "%s TO %s no es una sintaxis válida debido a que %s precede %s en el diccionario."
 
 #: src/language/lexer/variable-parser.c:321
 #, c-format
-msgid ""
-"When using the TO keyword to specify several variables, both variables must "
-"be from the same variable dictionaries, of either ordinary, scratch, or "
-"system variables.  %s is a %s variable, whereas %s is %s."
-msgstr ""
-"Cuando se utiliza la palabra clave TO para especificar diversas variables, "
-"ambas tienen que ser del mismo diccionario de variables, ya sean ordinales, "
-"scratch, o variables de sistema. %s es una variable %s, debido a que %s es %"
-"s."
+msgid "When using the TO keyword to specify several variables, both variables must be from the same variable dictionaries, of either ordinary, scratch, or system variables.  %s is a %s variable, whereas %s is %s."
+msgstr "Cuando se utiliza la palabra clave TO para especificar diversas variables, ambas tienen que ser del mismo diccionario de variables, ya sean ordinales, scratch, o variables de sistema. %s es una variable %s, debido a que %s es %s."
 
 #: src/language/lexer/variable-parser.c:395
 msgid "incorrect use of TO convention"
@@ -1586,20 +1372,13 @@ msgstr "Límites incorrectos en el uso de la convención TO."
 
 #: src/language/xforms/compute.c:149 src/language/xforms/compute.c:203
 #, c-format
-msgid ""
-"When executing COMPUTE: SYSMIS is not a valid value as an index into vector %"
-"s."
-msgstr ""
-"Cuando se ejecuta COMPUTE: SYSMIS no es un valor válido como índice en el "
-"vector %s."
+msgid "When executing COMPUTE: SYSMIS is not a valid value as an index into vector %s."
+msgstr "Cuando se ejecuta COMPUTE: SYSMIS no es un valor válido como índice en el vector %s."
 
 #: src/language/xforms/compute.c:153 src/language/xforms/compute.c:210
 #, c-format
-msgid ""
-"When executing COMPUTE: %g is not a valid value as an index into vector %s."
-msgstr ""
-"Cuando se ejecuta COMPUTE: %g no es un valor válid como índice en el vector %"
-"s."
+msgid "When executing COMPUTE: %g is not a valid value as an index into vector %s."
+msgstr "Cuando se ejecuta COMPUTE: %g no es un valor válid como índice en el vector %s."
 
 #: src/language/xforms/compute.c:353
 #, c-format
@@ -1617,21 +1396,15 @@ msgstr "El factor de mostreo tiene que estar exclusivamente entre 0 y 1."
 #: src/language/xforms/sample.c:96
 #, c-format
 msgid "Cannot sample %d observations from a population of %d."
-msgstr ""
-"No se puede hacer una muestra de %d observaciones de una población de %d."
+msgstr "No se puede hacer una muestra de %d observaciones de una población de %d."
 
 #: src/language/xforms/recode.c:248
-msgid ""
-"Inconsistent target variable types.  Target variables must be all numeric or "
-"all string."
-msgstr ""
-"Tipo inconsistente de variables objetivo.  Las variables objetivo tienen que "
-"ser todas, o bien de cadena o bien numéricas."
+msgid "Inconsistent target variable types.  Target variables must be all numeric or all string."
+msgstr "Tipo inconsistente de variables objetivo.  Las variables objetivo tienen que ser todas, o bien de cadena o bien numéricas."
 
 #: src/language/xforms/recode.c:269
 msgid "CONVERT requires string input values and numeric output values."
-msgstr ""
-"CONVERT requiere valores de entrada de cadena y valores de salida numéricos."
+msgstr "CONVERT requiere valores de entrada de cadena y valores de salida numéricos."
 
 #: src/language/xforms/recode.c:324
 msgid "THRU is not allowed with string variables."
@@ -1643,22 +1416,13 @@ msgstr "esperando el valor de salida"
 
 #: src/language/xforms/recode.c:460
 #, 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 ""
-"%zu variable(s) no pueden ser recodificadas en %zu variable(s).  Especifique "
-"el mismo número de variables como origen y destino."
+msgid "%zu variable(s) cannot be recoded into %zu variable(s).  Specify the same number of variables as source and target variables."
+msgstr "%zu variable(s) no pueden ser recodificadas en %zu variable(s).  Especifique el mismo número de variables como origen y destino."
 
 #: src/language/xforms/recode.c:475
 #, 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 ""
-"No existe ninguna variable llamada %s. (Todas las variables de cadena "
-"especificadas en INTO tienen que existir. Utilice el comando STRING para "
-"crear una variable de cadena.)"
+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 "No existe ninguna variable llamada %s. (Todas las variables de cadena especificadas en INTO tienen que existir. Utilice el comando STRING para crear una variable de cadena.)"
 
 #: src/language/xforms/recode.c:491
 #, c-format
@@ -1672,8 +1436,7 @@ msgstr "Desajuste de tipo. No se puede almacenar %s datos en %s variable %s."
 
 #: src/language/xforms/select-if.c:100
 msgid "Syntax error expecting OFF or BY.  Turning off case filtering."
-msgstr ""
-"Error de sintaxis esperando OFF o BY. Desactivando el filtraje de casos."
+msgstr "Error de sintaxis esperando OFF o BY. Desactivando el filtraje de casos."
 
 #: src/language/xforms/select-if.c:115
 msgid "The filter variable must be numeric."
@@ -1691,8 +1454,7 @@ msgstr "%s sin %s."
 #: src/language/control/control-stack.c:55
 #, c-format
 msgid "This command must appear inside %s...%s, without intermediate %s...%s."
-msgstr ""
-"Esta orden tiene que aparecer dentro de %s...%s, sin intermediarios %s...%s."
+msgstr "Esta orden tiene que aparecer dentro de %s...%s, sin intermediarios %s...%s."
 
 #: src/language/control/control-stack.c:72
 #, c-format
@@ -1708,19 +1470,13 @@ msgid "Only one index clause may be specified."
 msgstr "Únicamente puede ser especificada una cláusula del índice."
 
 #: src/language/control/temporary.c:46
-msgid ""
-"This command may only appear once between procedures and procedure-like "
-"commands."
-msgstr ""
-"Esta orden únicamente puede aparecer una vez entre las órdenes de "
-"procedimientos y casi-procedimientos."
+msgid "This command may only appear once between procedures and procedure-like commands."
+msgstr "Esta orden únicamente puede aparecer una vez entre las órdenes de procedimientos y casi-procedimientos."
 
 #: src/language/control/repeat.c:172
 #, c-format
 msgid "Dummy variable name \"%s\" hides dictionary variable \"%s\"."
-msgstr ""
-"El nombre de la variable ficticia \"%s\" oculta la variable de diccionario "
-"\"%s\"."
+msgstr "El nombre de la variable ficticia \"%s\" oculta la variable de diccionario \"%s\"."
 
 #: src/language/control/repeat.c:177
 #, c-format
@@ -1729,12 +1485,8 @@ msgstr "El nombre de la variable ficticia \"%s\" se da dos veces."
 
 #: src/language/control/repeat.c:223
 #, c-format
-msgid ""
-"Dummy variable \"%.*s\" had %d substitutions, so \"%.*s\" must also, but %d "
-"were specified."
-msgstr ""
-"Una variable ficticia \"%.*s\" tiene %d substituciones, de forma tal que \"%."
-"*s\" también tendría que tenerlas, pero se especificaron %d."
+msgid "Dummy variable \"%.*s\" had %d substitutions, so \"%.*s\" must also, but %d were specified."
+msgstr "Una variable ficticia \"%.*s\" tiene %d substituciones, de forma tal que \"%.*s\" también tendría que tenerlas, pero se especificaron %d."
 
 # recursivamente? recurridamente? repetidamente?
 #: src/language/control/repeat.c:335
@@ -1769,31 +1521,19 @@ msgstr "esperando ATTRIBUTE= o DELETE="
 #: src/language/dictionary/apply-dictionary.c:75
 #, c-format
 msgid "Variable %s is %s in target file, but %s in source file."
-msgstr ""
-"La variable %s es %s en el archivo de destino, pero %s en el archivo de "
-"origen."
+msgstr "La variable %s es %s en el archivo de destino, pero %s en el archivo de origen."
 
 #: src/language/dictionary/apply-dictionary.c:115
 msgid "No matching variables found between the source and target files."
-msgstr ""
-"No se han encontrado coincidencias de variables entre los archivos de origen "
-"y de destino."
+msgstr "No se han encontrado coincidencias de variables entre los archivos de origen y de destino."
 
 #: src/language/dictionary/delete-variables.c:40
-msgid ""
-"DELETE VARIABLES may not be used after TEMPORARY.  Temporary transformations "
-"will be made permanent."
-msgstr ""
-"DELETE VARIABLES no puede ser utilizado después de TEMPORARY. Las "
-"transformaciones temporales serán permanentes."
+msgid "DELETE VARIABLES may not be used after TEMPORARY.  Temporary transformations will be made permanent."
+msgstr "DELETE VARIABLES no puede ser utilizado después de TEMPORARY. Las transformaciones temporales serán permanentes."
 
 #: src/language/dictionary/delete-variables.c:48
-msgid ""
-"DELETE VARIABLES may not be used to delete all variables from the active "
-"file dictionary.  Use NEW FILE instead."
-msgstr ""
-"DELETE VARIABLES no puede ser utilizado para borrar todas las variables del "
-"archivo de diccionario activo. Utilizar NEW FILE en su lugar."
+msgid "DELETE VARIABLES may not be used to delete all variables from the active file dictionary.  Use NEW FILE instead."
+msgstr "DELETE VARIABLES no puede ser utilizado para borrar todas las variables del archivo de diccionario activo. Utilizar NEW FILE en su lugar."
 
 #: src/language/dictionary/formats.c:90
 msgid "`(' expected after variable list."
@@ -1810,12 +1550,8 @@ msgstr "esperando `('"
 
 #: src/language/dictionary/missing-values.c:72
 #, c-format
-msgid ""
-"Cannot mix numeric variables (e.g. %s) and string variables (e.g. %s) within "
-"a single list."
-msgstr ""
-"No se pueden mezclar las variables numéricas (e.g. %s) y las variables de "
-"cadena (e.g. %s) dentro de una lista única."
+msgid "Cannot mix numeric variables (e.g. %s) and string variables (e.g. %s) within a single list."
+msgstr "No se pueden mezclar las variables numéricas (e.g. %s) y las variables de cadena (e.g. %s) dentro de una lista única."
 
 #: src/language/dictionary/missing-values.c:116
 #, c-format
@@ -1825,80 +1561,53 @@ msgstr "Truncando el valor perdido a la longitud máxima aceptable (%d bytes)."
 #: src/language/dictionary/missing-values.c:138
 #, c-format
 msgid "Missing values provided are too long to assign to variable of width %d."
-msgstr ""
-"Los valores perdidos proporcionados son demasiado largos para asignar a una "
-"variable de ancho %d."
+msgstr "Los valores perdidos proporcionados son demasiado largos para asignar a una variable de ancho %d."
 
 #: src/language/dictionary/modify-variables.c:92
-msgid ""
-"MODIFY VARS may not be used after TEMPORARY.  Temporary transformations will "
-"be made permanent."
-msgstr ""
-"MODIFY VARS no puede ser utilizado después de TEMPORARY. Las "
-"transformaciones temporales serán permanentes."
+msgid "MODIFY VARS may not be used after TEMPORARY.  Temporary transformations will be made permanent."
+msgstr "MODIFY VARS no puede ser utilizado después de TEMPORARY. Las transformaciones temporales serán permanentes."
 
 #: src/language/dictionary/modify-variables.c:114
 #: src/language/dictionary/modify-variables.c:177
-#, fuzzy, c-format
+#, c-format
 msgid "%s subcommand may be given at most once."
-msgstr "El subcomando RENAME puede ser utilizado únicamente una vez."
+msgstr "El subcomando %s sólo puede utilizarse una vez."
 
 #: src/language/dictionary/modify-variables.c:137
 msgid "Cannot specify ALL after specifying a set of variables."
-msgstr ""
-"No se puede especificar ALL después de la especificación de un conjunto de "
-"variables."
+msgstr "No se puede especificar ALL después de la especificación de un conjunto de variables."
 
 #: src/language/dictionary/modify-variables.c:147
 #: src/language/dictionary/modify-variables.c:190
-#, fuzzy, c-format
+#, c-format
 msgid "`(' expected on %s subcommand."
-msgstr "`(' esperado en subcomando RENAME."
+msgstr "Se espera `(' en el subcomando %s."
 
 #: src/language/dictionary/modify-variables.c:159
 msgid "`)' expected following variable names on REORDER subcommand."
-msgstr ""
-"`)' se esperaba seguido de los nombres de la variable en el subcomando "
-"REORDER."
+msgstr "`)' se esperaba seguido de los nombres de la variable en el subcomando REORDER."
 
 #: src/language/dictionary/modify-variables.c:199
-msgid ""
-"`=' expected between lists of new and old variable names on RENAME "
-"subcommand."
-msgstr ""
-"`=' esperado entre las listas de nombres de variables nuevas y viejas en el "
-"subcomando RENAME."
+msgid "`=' expected between lists of new and old variable names on RENAME subcommand."
+msgstr "`=' esperado entre las listas de nombres de variables nuevas y viejas en el subcomando RENAME."
 
 #: src/language/dictionary/modify-variables.c:208
 #: src/language/dictionary/rename-variables.c:77
 #, c-format
-msgid ""
-"Differing number of variables in old name list (%zu) and in new name list (%"
-"zu)."
-msgstr ""
-"Diferente número de variables en la lista de nombres antigua (%zu) y en la "
-"lista de nombres nueva (%zu)."
+msgid "Differing number of variables in old name list (%zu) and in new name list (%zu)."
+msgstr "Diferente número de variables en la lista de nombres antigua (%zu) y en la lista de nombres nueva (%zu)."
 
 #: src/language/dictionary/modify-variables.c:219
 msgid "`)' expected after variable lists on RENAME subcommand."
-msgstr ""
-"`)' esperado después de las listas de variables en el subcomando RENAME."
+msgstr "`)' esperado después de las listas de variables en el subcomando RENAME."
 
 #: src/language/dictionary/modify-variables.c:233
-msgid ""
-"KEEP subcommand may be given at most once.  It may not be given in "
-"conjunction with the DROP subcommand."
-msgstr ""
-"El subcomando KEEP puede ser emitido más de una vez. Puede ser que no sea "
-"facilitado en relación con el subcomando DROP."
+msgid "KEEP subcommand may be given at most once.  It may not be given in conjunction with the DROP subcommand."
+msgstr "El subcomando KEEP puede ser emitido más de una vez. Puede ser que no sea facilitado en relación con el subcomando DROP."
 
 #: src/language/dictionary/modify-variables.c:276
-msgid ""
-"DROP subcommand may be given at most once.  It may not be given in "
-"conjunction with the KEEP subcommand."
-msgstr ""
-"El subcomando DROP puede ser utilizado únicamente una vez. No puede ser "
-"utilizado juntamente con el subcomando KEEP."
+msgid "DROP subcommand may be given at most once.  It may not be given in conjunction with the KEEP subcommand."
+msgstr "El subcomando DROP puede ser utilizado únicamente una vez. No puede ser utilizado juntamente con el subcomando KEEP."
 
 #: src/language/dictionary/modify-variables.c:302
 #, c-format
@@ -1915,103 +1624,76 @@ msgstr "'/' o '.' esperado."
 
 #: src/language/dictionary/mrsets.c:98
 #, c-format
-msgid ""
-"%s is not a valid name for a multiple response set.  Multiple response set "
-"names must begin with `$'."
-msgstr ""
+msgid "%s is not a valid name for a multiple response set.  Multiple response set names must begin with `$'."
+msgstr "%s no es un nombre válido de variable para un conjunto de respuesta múltiple. Los conjuntos de respuesta múltiple han de comenzar con `$'."
 
 #: src/language/dictionary/mrsets.c:120
 #, c-format
-msgid ""
-"VARIABLES specified only variable %s on %s, but at least two variables are "
-"required."
-msgstr ""
+msgid "VARIABLES specified only variable %s on %s, but at least two variables are required."
+msgstr "VARIABLES especifica sólo la variable %s en %s, pero se requieren al menos dos variables."
 
 #: src/language/dictionary/mrsets.c:153
 msgid "Numeric VALUE must be an integer."
-msgstr ""
+msgstr "VALUE numérico debe ser un entero."
 
 #: src/language/dictionary/mrsets.c:207 src/language/dictionary/mrsets.c:213
 #: src/language/dictionary/mrsets.c:223
 #, c-format
 msgid "Required %s specification missing from %s subcommand."
-msgstr ""
+msgstr "Falta la especificación %s requerida para el subcomando %s."
 
 #: src/language/dictionary/mrsets.c:231 src/language/dictionary/mrsets.c:269
 #, c-format
-msgid ""
-"MDGROUP subcommand for group %s specifies a string VALUE, but the variables "
-"specified for this group are numeric."
-msgstr ""
+msgid "MDGROUP subcommand for group %s specifies a string VALUE, but the variables specified for this group are numeric."
+msgstr "El subcomando MDGROUPS para el grupo %s especifica un VALUE textual, pero las variables especificadas por este grupo son numéricas."
 
 #: src/language/dictionary/mrsets.c:255
 #, c-format
-msgid ""
-"VALUE string on MDGROUP subcommand for group %s is %d bytes long, but it "
-"must be no longer than the narrowest variable in the group, which is %s with "
-"a width of %d bytes."
-msgstr ""
+msgid "VALUE string on MDGROUP subcommand for group %s is %d bytes long, but it must be no longer than the narrowest variable in the group, which is %s with a width of %d bytes."
+msgstr "El VALUE textual del subcomando MDGROUP para el grupo %s tiene %d bytes, pero no puede ser más largo que la variable más corta del grupo, que es %s con longitud %d bytes."
 
 #: src/language/dictionary/mrsets.c:281
 #, c-format
-msgid ""
-"MDGROUP subcommand for group %s specifies LABELSOURCE=VARLABEL but not "
-"CATEGORYLABELS=COUNTEDVALUES.  Ignoring LABELSOURCE."
-msgstr ""
+msgid "MDGROUP subcommand for group %s specifies LABELSOURCE=VARLABEL but not CATEGORYLABELS=COUNTEDVALUES.  Ignoring LABELSOURCE."
+msgstr "El subcomando MDGROUP para el grupo %s espeficifica LABELSOURCE=VARLABEL pero no CATEGORYLABELS=COUNTEDVALUES. Se ignorará LABELSOURCE."
 
 #: src/language/dictionary/mrsets.c:287
 #, c-format
-msgid ""
-"MDGROUP subcommand for group %s specifies both LABEL and LABELSOURCE, but "
-"only one of these subcommands may be used at a time.  Ignoring LABELSOURCE."
-msgstr ""
+msgid "MDGROUP subcommand for group %s specifies both LABEL and LABELSOURCE, but only one of these subcommands may be used at a time.  Ignoring LABELSOURCE."
+msgstr "El subcomando MDGROUP para el grupo %s espeficifica LABEL i LABELSOURCE, pero sólo uno de estos subcomandos puede ser utilitzado a la vez. Se ignorará LABELSOURCE."
 
 #: src/language/dictionary/mrsets.c:327
 #, c-format
-msgid ""
-"Variables %s and %s specified as part of multiple dichotomy group %s have "
-"the same variable label.  Categories represented by these variables will not "
-"be distinguishable in output."
-msgstr ""
+msgid "Variables %s and %s specified as part of multiple dichotomy group %s have the same variable label.  Categories represented by these variables will not be distinguishable in output."
+msgstr "Las variables %s y %s especificadas como parte del grupo dicotomico múltiple %s tienen la misma etiqueta de variable. Las categorias representadas por estas variables no seran distingibles en los resultados."
 
 #: src/language/dictionary/mrsets.c:357
 #, c-format
-msgid ""
-"Variable %s specified as part of multiple dichotomy group %s (which has "
-"CATEGORYLABELS=COUNTEDVALUES) has no value label for its counted value.  "
-"This category will not be distinguishable in output."
-msgstr ""
+msgid "Variable %s specified as part of multiple dichotomy group %s (which has CATEGORYLABELS=COUNTEDVALUES) has no value label for its counted value.  This category will not be distinguishable in output."
+msgstr "La variable %s especificada como parte del grupe dicotomico múltiple %s (que tiene CATEGORYLABELS=COUNTEDVALUES) no tiene etiqueta de valor para su valor de recuento. Esta categoria no será distingible en los resultados."
 
 #: src/language/dictionary/mrsets.c:370
 #, c-format
-msgid ""
-"Variables %s and %s specified as part of multiple dichotomy group %s (which "
-"has CATEGORYLABELS=COUNTEDVALUES) have the same value label for the the "
-"group's counted value.  These categories will not be distinguishable in "
-"output."
-msgstr ""
+msgid "Variables %s and %s specified as part of multiple dichotomy group %s (which has CATEGORYLABELS=COUNTEDVALUES) have the same value label for the the group's counted value.  These categories will not be distinguishable in output."
+msgstr "Las variables %s y %s especificadas como parte del grupo dicotomico múltiple %s (que tiene CATEGORYLABELS=COUNTEDVALUES) no tiene etiqueta de valor para su valor de recuento. Esta categoria no será distingible en los resultados."
 
 #: src/language/dictionary/mrsets.c:427
 #, c-format
-msgid ""
-"Variables specified on MCGROUP should have the same categories, but %s and %"
-"s (and possibly others) in multiple category group %s have different value "
-"labels for value %s."
-msgstr ""
+msgid "Variables specified on MCGROUP should have the same categories, but %s and %s (and possibly others) in multiple category group %s have different value labels for value %s."
+msgstr "La variables especificadas en MDGROUP deben tener las mismas categorias, pero %s y %s (y posiblemente otras) del grupo de caterorias múltiples %s tiene diferentes etiquetas de valores para el valor %s."
 
 #: src/language/dictionary/mrsets.c:484
-#, fuzzy, c-format
+#, c-format
 msgid "No multiple response set named %s."
-msgstr "Ninguna función o vector nombrado %s."
+msgstr "Ningún conjunto multirespuesta llamado %s."
 
 #: src/language/dictionary/mrsets.c:538
-#, fuzzy
 msgid "The active file dictionary does not contain any multiple response sets."
-msgstr "El diccionario del archivo activo no contiene ningún documento."
+msgstr "El diccionario del fichero activo no contiene ningún conjunto de multi-respuesta. "
 
 #: src/language/dictionary/mrsets.c:548
 msgid "Multiple Response Sets"
-msgstr ""
+msgstr "Conjuntos Multi-Respuesta"
 
 #: src/language/dictionary/mrsets.c:549 src/ui/gui/psppire-var-sheet.c:534
 #: src/ui/gui/psppire-var-store.c:832
@@ -2023,17 +1705,16 @@ msgid "Variables"
 msgstr "Variables"
 
 #: src/language/dictionary/mrsets.c:551
-#, fuzzy
 msgid "Details"
-msgstr "Decimales"
+msgstr "Detalles"
 
 #: src/language/dictionary/mrsets.c:565
 msgid "Multiple dichotomy set"
-msgstr ""
+msgstr "Conjunto de Dicotomias Múltiples"
 
 #: src/language/dictionary/mrsets.c:566
 msgid "Multiple category set"
-msgstr ""
+msgstr "Conjunto de Categorias Múltiples"
 
 #: src/language/dictionary/mrsets.c:568
 #: src/language/dictionary/split-file.c:84
@@ -2045,36 +1726,32 @@ msgid "Label"
 msgstr "Etiqueta"
 
 #: src/language/dictionary/mrsets.c:572
-#, fuzzy
 msgid "Label source"
-msgstr "Etiqueta: %s\n"
+msgstr "Fuente de etiquetas"
 
 #: src/language/dictionary/mrsets.c:574
-#, fuzzy
 msgid "First variable label among variables"
-msgstr "Duplicar el nombre de la variable %s entre las variables de destino."
+msgstr "Primera etiqueta de variable entre las variables"
 
 #: src/language/dictionary/mrsets.c:575
 msgid "Provided by user"
-msgstr ""
+msgstr "Proporcionado por el usuario"
 
 #: src/language/dictionary/mrsets.c:576
-#, fuzzy
 msgid "Counted value"
-msgstr "Copiar los valores anteriores"
+msgstr "Valor de recuento"
 
 #: src/language/dictionary/mrsets.c:582
 msgid "Category label source"
-msgstr ""
+msgstr "Fuente de etiquetas de categoria"
 
 #: src/language/dictionary/mrsets.c:584
-#, fuzzy
 msgid "Variable labels"
-msgstr "Prefiero las etiquetas de variable"
+msgstr "Etiquetas de variable"
 
 #: src/language/dictionary/mrsets.c:585
 msgid "Value labels of counted value"
-msgstr ""
+msgstr "Etiquetas de valor del valor de recuento"
 
 #: src/language/dictionary/numeric.c:67
 #, c-format
@@ -2092,12 +1769,8 @@ msgid "Format type %s may not be used with a string variable."
 msgstr "El tipo de formato %s no puede utilizarse con variable de cadena."
 
 #: src/language/dictionary/rename-variables.c:49
-msgid ""
-"RENAME VARS may not be used after TEMPORARY.  Temporary transformations will "
-"be made permanent."
-msgstr ""
-"RENAME VARS no puede ser utilizado después de TEMPORARY.  Las "
-"transformaciones temporales serán permanentes."
+msgid "RENAME VARS may not be used after TEMPORARY.  Temporary transformations will be made permanent."
+msgstr "RENAME VARS no puede ser utilizado después de TEMPORARY.  Las transformaciones temporales serán permanentes."
 
 #: src/language/dictionary/rename-variables.c:59
 msgid "`(' expected."
@@ -2192,7 +1865,7 @@ msgid "Type:"
 msgstr "Tipo:"
 
 #: src/language/dictionary/sys-file-info.c:128
-#: src/ui/gui/psppire-data-window.c:631
+#: src/ui/gui/psppire-data-window.c:634
 msgid "System File"
 msgstr "Archivo de Sistema"
 
@@ -2364,9 +2037,7 @@ msgstr "El nombre del vector %s se da dos veces."
 
 #: src/language/dictionary/vector.c:96
 msgid "A slash must separate each vector specification in VECTOR's long form."
-msgstr ""
-"Una barra debe separar cada especificación de vector en la forma larga de "
-"VECTOR."
+msgstr "Una barra debe separar cada especificación de vector en la forma larga de VECTOR."
 
 #: src/language/dictionary/vector.c:129
 msgid "Vectors must have at least one element."
@@ -2409,12 +2080,8 @@ msgstr "Constante hexadecimal flotante demasiado larga."
 
 #: src/language/tests/float-format.c:201
 #, c-format
-msgid ""
-"%s conversion of %s from %s to %s should have produced %s but actually "
-"produced %s."
-msgstr ""
-"conversión %s de %s desde %s en %s debería haber producido %s pero "
-"actualmente ha producido %s."
+msgid "%s conversion of %s from %s to %s should have produced %s but actually produced %s."
+msgstr "conversión %s de %s desde %s en %s debería haber producido %s pero actualmente ha producido %s."
 
 #: src/language/tests/float-format.c:247
 msgid "Too many values in single command."
@@ -2462,8 +2129,7 @@ msgstr "esperando nombre de archivo"
 #: src/language/utilities/include.c:193
 #, c-format
 msgid "Can't find `%s' in include file search path."
-msgstr ""
-"No se puede encontrar `%s' en la ruta de búsqueda del archivo de inclusión."
+msgstr "No se puede encontrar `%s' en la ruta de búsqueda del archivo de inclusión."
 
 #: src/language/utilities/include.c:201
 #, c-format
@@ -2494,13 +2160,8 @@ msgid "expecting BREAK"
 msgstr "esperando BREAK"
 
 #: src/language/stats/aggregate.c:252
-msgid ""
-"When PRESORTED is specified, specifying sorting directions with (A) or (D) "
-"has no effect.  Output data will be sorted the same way as the input data."
-msgstr ""
-"Cuando se especifica PRESORTED, dar directivas de ordenación con (A) o (D) "
-"no tiene efecto. Los datos de salida serán ordenados de la misma manera que "
-"los de entrada."
+msgid "When PRESORTED is specified, specifying sorting directions with (A) or (D) has no effect.  Output data will be sorted the same way as the input data."
+msgstr "Cuando se especifica PRESORTED, dar directivas de ordenación con (A) o (D) no tiene efecto. Los datos de salida serán ordenados de la misma manera que los de entrada."
 
 #: src/language/stats/aggregate.c:424
 msgid "expecting aggregation function"
@@ -2519,8 +2180,7 @@ msgstr "Argumento perdido %zu para %s."
 #: src/language/stats/aggregate.c:507
 #, c-format
 msgid "Arguments to %s must be of same type as source variables."
-msgstr ""
-"Los argumentos para %s deben ser del mismo tipo que las variables de origen."
+msgstr "Los argumentos para %s deben ser del mismo tipo que las variables de origen."
 
 #: src/language/stats/aggregate.c:517 src/language/expressions/parse.c:885
 msgid "expecting `)'"
@@ -2528,37 +2188,23 @@ msgstr "esperando ')'"
 
 #: src/language/stats/aggregate.c:529
 #, c-format
-msgid ""
-"Number of source variables (%zu) does not match number of target variables (%"
-"zu)."
-msgstr ""
-"Número de variables de origen (%zu) no coincide con el número de variables "
-"de destino (%zu)."
+msgid "Number of source variables (%zu) does not match number of target variables (%zu)."
+msgstr "Número de variables de origen (%zu) no coincide con el número de variables de destino (%zu)."
 
 #: src/language/stats/aggregate.c:545
 #, c-format
-msgid ""
-"The value arguments passed to the %s function are out-of-order.  They will "
-"be treated as if they had been specified in the correct order."
-msgstr ""
-"El valor de los argumentos pasados en la función %s están fuera de orden. "
-"Serán tratatos como si hubieran sido especificados en el orden correcto."
+msgid "The value arguments passed to the %s function are out-of-order.  They will be treated as if they had been specified in the correct order."
+msgstr "El valor de los argumentos pasados en la función %s están fuera de orden. Serán tratatos como si hubieran sido especificados en el orden correcto."
 
 #: src/language/stats/aggregate.c:615
 #, c-format
-msgid ""
-"Variable name %s is not unique within the aggregate file dictionary, which "
-"contains the aggregate variables and the break variables."
-msgstr ""
-"El nombre de variable %s no es único dentro del archivo de diccionario "
-"agregado, que contiene las variables agregadas y las variables de corte."
+msgid "Variable name %s is not unique within the aggregate file dictionary, which contains the aggregate variables and the break variables."
+msgstr "El nombre de variable %s no es único dentro del archivo de diccionario agregado, que contiene las variables agregadas y las variables de corte."
 
 #: src/language/stats/autorecode.c:116
 #, c-format
 msgid "Source variable count (%zu) does not match target variable count (%zu)."
-msgstr ""
-"El recuento de la variable de origen (%zu) no coincide con el recuento de la "
-"variable de destino (%zu)."
+msgstr "El recuento de la variable de origen (%zu) no coincide con el recuento de la variable de destino (%zu)."
 
 #: src/language/stats/autorecode.c:128
 #, c-format
@@ -2624,12 +2270,8 @@ msgstr "Sig. Exact.(%d-tailed)"
 
 #: src/language/stats/chisquare.c:150
 #, c-format
-msgid ""
-"CHISQUARE test specified %d expected values, but %d distinct values were "
-"encountered in variable %s."
-msgstr ""
-"Prueba CHISQUARE especifica %d valores esperados, pero %d diferentes valores "
-"se encontraron la variable %s."
+msgid "CHISQUARE test specified %d expected values, but %d distinct values were encountered in variable %s."
+msgstr "Prueba CHISQUARE especifica %d valores esperados, pero %d diferentes valores se encontraron la variable %s."
 
 #: src/language/stats/chisquare.c:161 src/language/stats/chisquare.c:200
 msgid "Observed N"
@@ -2693,14 +2335,12 @@ msgid "Std. Deviation"
 msgstr "Desviación Estándar"
 
 #: src/language/stats/correlations.c:190 src/language/stats/factor.c:1620
-#, fuzzy
 msgid "Correlations"
-msgstr "Correlación"
+msgstr "Correlaciones"
 
 #: src/language/stats/correlations.c:216
-#, fuzzy
 msgid "Pearson Correlation"
-msgstr "Correlación de Spearman"
+msgstr "Correlación de Pearson"
 
 #: src/language/stats/correlations.c:218 src/language/stats/oneway.q:686
 #: src/language/stats/t-test.q:753 src/language/stats/t-test.q:924
@@ -2709,16 +2349,14 @@ msgid "Sig. (2-tailed)"
 msgstr "Sign. (2-colas)"
 
 #: src/language/stats/correlations.c:218
-#, fuzzy
 msgid "Sig. (1-tailed)"
-msgstr "Sign. (2-colas)"
+msgstr "Sig. (1-cola)"
 
 #: src/language/stats/correlations.c:222
 msgid "Cross-products"
-msgstr ""
+msgstr "Productos-cruzados"
 
 #: src/language/stats/correlations.c:223
-#, fuzzy
 msgid "Covariance"
 msgstr "Covarianza"
 
@@ -2798,13 +2436,8 @@ msgid "expecting statistic name: reverting to default"
 msgstr "esperando nombre del estadístico: vuelve a aplicar el defecto"
 
 #: src/language/stats/descriptives.c:523
-msgid ""
-"Ran out of generic names for Z-score variables.  There are only 126 generic "
-"names: ZSC001-ZSC0999, STDZ01-STDZ09, ZZZZ01-ZZZZ09, ZQZQ01-ZQZQ09."
-msgstr ""
-"Se han agotado los nombres genéricos para las variables Z.  Sólo hay 126 "
-"nombres genéricos: ZSC001-ZSC0999, STDZ01-STDZ09, ZZZZ01-ZZZZ09, ZQZQ01-"
-"ZQZQ09."
+msgid "Ran out of generic names for Z-score variables.  There are only 126 generic names: ZSC001-ZSC0999, STDZ01-STDZ09, ZZZZ01-ZZZZ09, ZQZQ01-ZQZQ09."
+msgstr "Se han agotado los nombres genéricos para las variables Z.  Sólo hay 126 nombres genéricos: ZSC001-ZSC0999, STDZ01-STDZ09, ZZZZ01-ZZZZ09, ZQZQ01-ZQZQ09."
 
 #: src/language/stats/descriptives.c:555
 msgid "Mapping of variables to corresponding Z-scores."
@@ -2855,40 +2488,35 @@ msgstr "La variable %s se especifica dos veces en los criterios de ordenación."
 
 #: src/language/stats/factor.c:803
 msgid "Factor analysis on a single variable is not useful."
-msgstr ""
+msgstr "El análisis factorial para una única variable es inútil."
 
 #: src/language/stats/factor.c:1206
-#, fuzzy
 msgid "Component Number"
-msgstr "Columna Número: 0"
+msgstr "Número de Componente"
 
 #: src/language/stats/factor.c:1206
-#, fuzzy
 msgid "Factor Number"
-msgstr "Número de Caso"
+msgstr "Número de Factores"
 
 #: src/language/stats/factor.c:1237
-#, fuzzy
 msgid "Communalities"
-msgstr "Comentarios:"
+msgstr "Comunalidades"
 
 #: src/language/stats/factor.c:1243
 msgid "Initial"
-msgstr ""
+msgstr "Inicial"
 
 #: src/language/stats/factor.c:1246
 msgid "Extraction"
-msgstr ""
+msgstr "Extracción"
 
 #: src/language/stats/factor.c:1310 src/language/stats/factor.c:1437
-#, fuzzy
 msgid "Component"
-msgstr "Comentarios:"
+msgstr "Componente"
 
 #: src/language/stats/factor.c:1315 src/language/stats/factor.c:1439
-#, fuzzy
 msgid "Factor"
-msgstr "_Factor:"
+msgstr "Factor"
 
 #: src/language/stats/factor.c:1347 src/language/stats/factor.c:1495
 #: src/ui/gui/psppire-data-store.c:755 src/ui/gui/psppire-var-store.c:699
@@ -2900,83 +2528,72 @@ msgstr "%d"
 
 #: src/language/stats/factor.c:1412
 msgid "Total Variance Explained"
-msgstr ""
+msgstr "Varianza Total Explicada"
 
 #: src/language/stats/factor.c:1444
 msgid "Initial Eigenvalues"
-msgstr ""
+msgstr "Valores propios Iniciales"
 
 #: src/language/stats/factor.c:1450
 msgid "Extraction Sums of Squared Loadings"
-msgstr ""
+msgstr "Sumas de Pesos al Cuadrado de la Extracción"
 
 #: src/language/stats/factor.c:1456
 msgid "Rotation Sums of Squared Loadings"
-msgstr ""
+msgstr "Rotación: Sumas de Pesos al Cuadrado "
 
 #: src/language/stats/factor.c:1464
-#, fuzzy, no-c-format
+#, no-c-format
 msgid "% of Variance"
-msgstr "Varianza"
+msgstr "% de Varianza"
 
 #: src/language/stats/factor.c:1465
 msgid "Cumulative %"
-msgstr ""
+msgstr "% Acumulado"
 
 #: src/language/stats/factor.c:1578
-#, fuzzy
 msgid "Correlation Matrix"
-msgstr "Correlación"
+msgstr "Matriz de Correlación"
 
 #: src/language/stats/factor.c:1632
-#, fuzzy
 msgid "Sig. 1-tailed"
-msgstr "Sign. (2-colas)"
+msgstr "Sig. (1-cola)"
 
 #: src/language/stats/factor.c:1666
-#, fuzzy
 msgid "Determinant"
-msgstr "Dependiente"
+msgstr "Determinante"
 
 #: src/language/stats/factor.c:1743
 msgid "Analysis N"
-msgstr ""
+msgstr "Análisis N"
 
 #: src/language/stats/factor.c:1776
-msgid ""
-"The FACTOR criteria result in zero factors extracted. Therefore no analysis "
-"will be performed."
-msgstr ""
+msgid "The FACTOR criteria result in zero factors extracted. Therefore no analysis will be performed."
+msgstr "El criterio FACTOR resulta en la extracción de cero factores. No se puede realizar ningún análisis."
 
 #: src/language/stats/factor.c:1782
-msgid ""
-"The FACTOR criteria result in more factors than variables, which is not "
-"meaningful. No analysis will be performed."
-msgstr ""
+msgid "The FACTOR criteria result in more factors than variables, which is not meaningful. No analysis will be performed."
+msgstr "El criterio FACTOR resulta en más factores que variables, y esto no tiene ningún sentido."
 
 #: src/language/stats/factor.c:1865
 msgid "Component Matrix"
-msgstr ""
+msgstr "Matriz de Componentes"
 
 #: src/language/stats/factor.c:1865
-#, fuzzy
 msgid "Factor Matrix"
-msgstr "Lista de Factores:"
+msgstr "Matriz de Factores"
 
 #: src/language/stats/factor.c:1871
 msgid "Rotated Component Matrix"
-msgstr ""
+msgstr "Matriz Rotada de Componentes"
 
 #: src/language/stats/factor.c:1871
-#, fuzzy
 msgid "Rotated Factor Matrix"
-msgstr "Lista de Factores:"
+msgstr "Matriz Rotada de Factores"
 
 #: src/language/stats/flip.c:98
-msgid ""
-"FLIP ignores TEMPORARY.  Temporary transformations will be made permanent."
-msgstr ""
-"FLIP ignora TEMPORARY.  Las transformaciones temporales serán permanentes."
+msgid "FLIP ignores TEMPORARY.  Temporary transformations will be made permanent."
+msgstr "FLIP ignora TEMPORARY.  Las transformaciones temporales serán permanentes."
 
 #: src/language/stats/flip.c:150
 msgid "Could not create temporary file for FLIP."
@@ -3192,18 +2809,11 @@ msgstr "Sig. Asint. (2-colas)"
 
 #: src/language/data-io/combine-files.c:210
 msgid "Cannot specify the active file since no active file has been defined."
-msgstr ""
-"No se puede especificar el fichero activo ya que ningún fichero activo ha "
-"sido definido."
+msgstr "No se puede especificar el fichero activo ya que ningún fichero activo ha sido definido."
 
 #: src/language/data-io/combine-files.c:216
-msgid ""
-"This command may not be used after TEMPORARY when the active file is an "
-"input source.  Temporary transformations will be made permanent."
-msgstr ""
-"Este comando no puede ser utilizado después de TEMPORARY cuando el archivo "
-"activo es una fuente de entrada. Las transformaciones temporales serán "
-"permanentes."
+msgid "This command may not be used after TEMPORARY when the active file is an input source.  Temporary transformations will be made permanent."
+msgstr "Este comando no puede ser utilizado después de TEMPORARY cuando el archivo activo es una fuente de entrada. Las transformaciones temporales serán permanentes."
 
 #: src/language/data-io/combine-files.c:250
 msgid "Multiple IN subcommands for a single FILE or TABLE."
@@ -3225,26 +2835,18 @@ msgstr "Se necesita el subcomando BY."
 
 #: src/language/data-io/combine-files.c:381
 #: src/language/data-io/combine-files.c:386
-#, fuzzy, c-format
+#, c-format
 msgid "BY is required when %s is specified."
-msgstr "BY es necesario cuando SORT se especifica."
+msgstr "BY es necesario cuando se especifica %s."
 
 #: src/language/data-io/combine-files.c:513
-msgid ""
-"Combining files with incompatible encodings. String data may not be "
-"represented correctly."
-msgstr ""
-"Combinando archivos con codificaciones incompatibles. Los datos de la cadena "
-"no podrán estar representados correctamente."
+msgid "Combining files with incompatible encodings. String data may not be represented correctly."
+msgstr "Combinando archivos con codificaciones incompatibles. Los datos de la cadena no podrán estar representados correctamente."
 
 #: src/language/data-io/combine-files.c:545
 #, c-format
-msgid ""
-"Variable %s in file %s has different type or width from the same variable in "
-"earlier file."
-msgstr ""
-"La variable %s en el archivo %s es de tipo o tamaño diferente respecto de la "
-"misma variable en un archivo anterior."
+msgid "Variable %s in file %s has different type or width from the same variable in earlier file."
+msgstr "La variable %s en el archivo %s es de tipo o tamaño diferente respecto de la misma variable en un archivo anterior."
 
 #: src/language/data-io/combine-files.c:551
 #, c-format
@@ -3264,17 +2866,12 @@ msgstr "En un archivo anterior, %s era numérico."
 #: src/language/data-io/combine-files.c:562
 #, c-format
 msgid "In an earlier file, %s was a string variable with width %d."
-msgstr ""
-"En un archivo anterior, %s era una variable de cadena con un tamaño de %d."
+msgstr "En un archivo anterior, %s era una variable de cadena con un tamaño de %d."
 
 #: src/language/data-io/combine-files.c:601
 #, c-format
-msgid ""
-"Variable name %s specified on %s subcommand duplicates an existing variable "
-"name."
-msgstr ""
-"Nombre de la variable %s especificado en el subcomando %s duplica el nombre "
-"de la variable existente."
+msgid "Variable name %s specified on %s subcommand duplicates an existing variable name."
+msgstr "Nombre de la variable %s especificado en el subcomando %s duplica el nombre de la variable existente."
 
 #: src/language/data-io/combine-files.c:762
 #, c-format
@@ -3295,9 +2892,7 @@ msgstr "Sólo uno de FIXED, FREE, o LIST puede ser especificado."
 
 #: src/language/data-io/data-list.c:243
 msgid "Encoding should not be specified for inline data. It will be ignored."
-msgstr ""
-"La codificación no debe ser especificada por los datos en línea. Será "
-"ignorada."
+msgstr "La codificación no debe ser especificada por los datos en línea. Será ignorada."
 
 #: src/language/data-io/data-list.c:254
 msgid "The END subcommand may be used only with DATA LIST FIXED."
@@ -3326,9 +2921,7 @@ msgstr "Existe ya una variable de cadena %s con ancho diferente."
 #: src/language/data-io/data-list.c:390
 #, c-format
 msgid "Cannot place variable %s on record %d when RECORDS=%d is specified."
-msgstr ""
-"No se puede poner la variable %s en el registro %d cuando RECORDS=%d está "
-"especificado."
+msgstr "No se puede poner la variable %s en el registro %d cuando RECORDS=%d está especificado."
 
 #: src/language/data-io/data-parser.c:460
 #: src/language/data-io/data-parser.c:469
@@ -3347,12 +2940,8 @@ msgstr "Caso parcial descartado.  La primera variable que faltaba era %s."
 
 #: src/language/data-io/data-parser.c:610
 #, c-format
-msgid ""
-"Missing value(s) for all variables from %s onward.  These will be filled "
-"with the system-missing value or blanks, as appropriate."
-msgstr ""
-"Valor(es) perdido(s) para todas las variables desde %st.  Éstos se llenan "
-"con el valor perdido del sistema o espacios en blanco, según corresponda."
+msgid "Missing value(s) for all variables from %s onward.  These will be filled with the system-missing value or blanks, as appropriate."
+msgstr "Valor(es) perdido(s) para todas las variables desde %st.  Éstos se llenan con el valor perdido del sistema o espacios en blanco, según corresponda."
 
 #: src/language/data-io/data-parser.c:630
 msgid "Record ends in data not part of any field."
@@ -3395,19 +2984,11 @@ msgstr "archivo de datos"
 #: src/language/data-io/data-reader.c:150
 #, c-format
 msgid "Could not open \"%s\" for reading as a data file: %s."
-msgstr ""
-"No se ha podido abrir \"%s\" para la lectura como un archivo de datos: %s."
+msgstr "No se ha podido abrir \"%s\" para la lectura como un archivo de datos: %s."
 
 #: src/language/data-io/data-reader.c:192
-msgid ""
-"Unexpected end-of-file while reading data in BEGIN DATA.  This probably "
-"indicates a missing or misformatted END DATA command.  END DATA must appear "
-"by itself on a single line with exactly one space between words."
-msgstr ""
-"Final de archivo inesperado durante la lectura de datos en BEGIN DATA.  Esto "
-"probablemente indica una pérdida o formato erróneo del comando END DATA.  "
-"END DATA debe aparecer por sí misma en una sola línea con exactamente un "
-"espacio entre las palabras."
+msgid "Unexpected end-of-file while reading data in BEGIN DATA.  This probably indicates a missing or misformatted END DATA command.  END DATA must appear by itself on a single line with exactly one space between words."
+msgstr "Final de archivo inesperado durante la lectura de datos en BEGIN DATA.  Esto probablemente indica una pérdida o formato erróneo del comando END DATA.  END DATA debe aparecer por sí misma en una sola línea con exactamente un espacio entre las palabras."
 
 #: src/language/data-io/data-reader.c:217
 #, c-format
@@ -3453,19 +3034,13 @@ msgid "Attempt to read beyond END DATA."
 msgstr "Intento de leer más allá de END DATA."
 
 #: src/language/data-io/data-reader.c:708
-msgid ""
-"This command is not valid here since the current input program does not "
-"access the inline file."
-msgstr ""
-"Esta orden no es válida ya que el programa de entrada actual no tiene acceso "
-"al archivo en línea."
+msgid "This command is not valid here since the current input program does not access the inline file."
+msgstr "Esta orden no es válida ya que el programa de entrada actual no tiene acceso al archivo en línea."
 
 #: src/language/data-io/data-writer.c:74
 #, c-format
 msgid "An error occurred while opening \"%s\" for writing as a data file: %s."
-msgstr ""
-"Se ha producido un error al abrir \"%s\" para escribirlo como un archivo de "
-"datos: %s."
+msgstr "Se ha producido un error al abrir \"%s\" para escribirlo como un archivo de datos: %s."
 
 #: src/language/data-io/data-writer.c:191
 #, c-format
@@ -3479,12 +3054,8 @@ msgstr "TYPE %s no admitido"
 
 #: src/language/data-io/get-data.c:260
 #, c-format
-msgid ""
-"%s is allowed only with %s arrangement, but %s arrangement was stated or "
-"implied earlier in this command."
-msgstr ""
-"%s sólo se permite con configuración %s, pero previamente en este comando se "
-"ha establecido la configuración %s."
+msgid "%s is allowed only with %s arrangement, but %s arrangement was stated or implied earlier in this command."
+msgstr "%s sólo se permite con configuración %s, pero previamente en este comando se ha establecido la configuración %s."
 
 #: src/language/data-io/get-data.c:315
 msgid "expecting FIXED or DELIMITED"
@@ -3511,12 +3082,8 @@ msgid "Value of PERCENT must be between 1 and 100."
 msgstr "Valor de PERCENT debe estar entre 1 y 100."
 
 #: src/language/data-io/get-data.c:447
-msgid ""
-"In compatible syntax mode, the QUALIFIER string must contain exactly one "
-"character."
-msgstr ""
-"En el modo de sintaxis compatible, la cadena QUALIFIER debe contener "
-"exactamente un carácter."
+msgid "In compatible syntax mode, the QUALIFIER string must contain exactly one character."
+msgstr "En el modo de sintaxis compatible, la cadena QUALIFIER debe contener exactamente un carácter."
 
 #: src/language/data-io/get-data.c:462
 msgid "expecting VARIABLES"
@@ -3525,22 +3092,13 @@ msgstr "esperando VARIABLES"
 #: src/language/data-io/get-data.c:484
 #: src/language/data-io/placement-parser.c:378
 #, c-format
-msgid ""
-"The record number specified, %ld, is at or before the previous record, %d.  "
-"Data fields must be listed in order of increasing record number."
-msgstr ""
-"El número de registro especificado, %ld, es en o antes del registro "
-"anterior, %d.  Los campos de datos deben ser listados en orden incremental "
-"del número de registro."
+msgid "The record number specified, %ld, is at or before the previous record, %d.  Data fields must be listed in order of increasing record number."
+msgstr "El número de registro especificado, %ld, es en o antes del registro anterior, %d.  Los campos de datos deben ser listados en orden incremental del número de registro."
 
 #: src/language/data-io/get-data.c:493
 #, c-format
-msgid ""
-"The record number specified, %ld, exceeds the number of records per case "
-"specified on FIXCASE, %d."
-msgstr ""
-"El número de registro especificado, %ld, excede el número de registros para "
-"casos especificados en FIXCASE, %d."
+msgid "The record number specified, %ld, exceeds the number of records per case specified on FIXCASE, %d."
+msgstr "El número de registro especificado, %ld, excede el número de registros para casos especificados en FIXCASE, %d."
 
 #: src/language/data-io/get.c:99
 msgid "expecting COMM or TAPE"
@@ -3559,34 +3117,22 @@ msgid "COLUMN subcommand multiply specified."
 msgstr "subcomando COLUMN especificado múltiples veces."
 
 #: src/language/data-io/inpt-pgm.c:338
-msgid ""
-"REREAD: Column numbers must be positive finite numbers.  Column set to 1."
-msgstr ""
-"REREAD: Los números de columna tienen que ser números positivos finitos. La "
-"columna se establece en 1."
+msgid "REREAD: Column numbers must be positive finite numbers.  Column set to 1."
+msgstr "REREAD: Los números de columna tienen que ser números positivos finitos. La columna se establece en 1."
 
 #: src/language/data-io/placement-parser.c:87
 #, c-format
-msgid ""
-"Number of variables specified (%zu) differs from number of variable formats "
-"(%zu)."
-msgstr ""
-"Número de variables especificadas (%zu) difiere del número de formatos de la "
-"variable (%zu)."
+msgid "Number of variables specified (%zu) differs from number of variable formats (%zu)."
+msgstr "Número de variables especificadas (%zu) difiere del número de formatos de la variable (%zu)."
 
 #: src/language/data-io/placement-parser.c:97
-msgid ""
-"SPSS-like or Fortran-like format specification expected after variable names."
-msgstr ""
-"Después del nombre de las variables se esperan especificaciones en formato "
-"tipo-SPSS o tipo-Fortran."
+msgid "SPSS-like or Fortran-like format specification expected after variable names."
+msgstr "Después del nombre de las variables se esperan especificaciones en formato tipo-SPSS o tipo-Fortran."
 
 #: src/language/data-io/placement-parser.c:119
 #, c-format
 msgid "The %d columns %d-%d can't be evenly divided into %zu fields."
-msgstr ""
-"Las %d columnas %d-%d no pueden ser uniformemente dividas entre los campos %"
-"zu."
+msgstr "Las %d columnas %d-%d no pueden ser uniformemente dividas entre los campos %zu."
 
 #: src/language/data-io/placement-parser.c:305
 msgid "Column positions for fields must be positive."
@@ -3598,13 +3144,11 @@ msgstr "Las posiciones de columnas para los campos no pueden ser negativas."
 
 #: src/language/data-io/placement-parser.c:344
 msgid "The ending column for a field must be greater than the starting column."
-msgstr ""
-"La columna final de un campo tiene que ser mayor que la columna de inicio."
+msgstr "La columna final de un campo tiene que ser mayor que la columna de inicio."
 
 #: src/language/data-io/print-space.c:116
 msgid "The expression on PRINT SPACE evaluated to the system-missing value."
-msgstr ""
-"La expresión en PRINT SPACE se evalúa por el sistema de valores perdidos."
+msgstr "La expresión en PRINT SPACE se evalúa por el sistema de valores perdidos."
 
 #: src/language/data-io/print-space.c:119
 #, c-format
@@ -3618,23 +3162,21 @@ msgstr "esperando un subcomando válido"
 #: src/language/data-io/print.c:267
 #, c-format
 msgid "Output calls for %d records but %zu specified on RECORDS subcommand."
-msgstr ""
-"Resultados obtenidos para %d registros, pero %zu especificados en el "
-"subcomando RECORDS."
+msgstr "Resultados obtenidos para %d registros, pero %zu especificados en el subcomando RECORDS."
 
 #: src/language/data-io/print.c:436
-#, fuzzy, c-format
+#, c-format
 msgid "Writing %zu record to %s."
 msgid_plural "Writing %zu records to %s."
-msgstr[0] "Escribiendo %d registro en %s."
-msgstr[1] "Escribiendot %d registros en %s."
+msgstr[0] "Escribiendo el registro %zu en %s."
+msgstr[1] "Escribiendo %zu registros en %s."
 
 #: src/language/data-io/print.c:440
-#, fuzzy, c-format
+#, c-format
 msgid "Writing %zu record."
 msgid_plural "Writing %zu records."
-msgstr[0] "Escribiendo %d registro."
-msgstr[1] "Escribiendo %d registros."
+msgstr[0] "Escribiendo el registro %zu."
+msgstr[1] "Escribiendo %zu registros."
 
 #: src/language/data-io/save.c:223 src/language/data-io/save.c:238
 #: src/language/data-io/save.c:266
@@ -3644,15 +3186,8 @@ msgstr "esperando %s o %s"
 
 #: src/language/data-io/trim.c:88
 #, c-format
-msgid ""
-"Cannot rename %s as %s because there already exists a variable named %s.  To "
-"rename variables with overlapping names, use a single RENAME subcommand such "
-"as \"/RENAME (A=B)(B=C)(C=A)\", or equivalently, \"/RENAME (A B C=B C A)\"."
-msgstr ""
-"No se puede cambiar el nombre %s por %s porque ya hay una variable nombrada %"
-"s.  Para cambiar el nombre de las variables con nombre superpuesto, utilitce "
-"el subcomando RENAME únicamente como \"/RENAME (A=B)(B=C)(C=A)\", o "
-"equivalentemente, \"/RENAME (A B C=B C A)\"."
+msgid "Cannot rename %s as %s because there already exists a variable named %s.  To rename variables with overlapping names, use a single RENAME subcommand such as \"/RENAME (A=B)(B=C)(C=A)\", or equivalently, \"/RENAME (A B C=B C A)\"."
+msgstr "No se puede cambiar el nombre %s por %s porque ya hay una variable nombrada %s.  Para cambiar el nombre de las variables con nombre superpuesto, utilitce el subcomando RENAME únicamente como \"/RENAME (A=B)(B=C)(C=A)\", o equivalentemente, \"/RENAME (A B C=B C A)\"."
 
 #: src/language/data-io/trim.c:114
 msgid "`=' expected after variable list."
@@ -3660,14 +3195,8 @@ msgstr "`=' esperado después de lista de variables."
 
 #: src/language/data-io/trim.c:122
 #, c-format
-msgid ""
-"Number of variables on left side of `=' (%zu) does not match number of "
-"variables on right side (%zu), in parenthesized group %d of RENAME "
-"subcommand."
-msgstr ""
-"El número de variables en el lado izquierdo de `=' (%zu) no coincide con el "
-"número de variables en el lado derecho (%zu), en el grupo entre paréntesis %"
-"d del subcomando RENAME."
+msgid "Number of variables on left side of `=' (%zu) does not match number of variables on right side (%zu), in parenthesized group %d of RENAME subcommand."
+msgstr "El número de variables en el lado izquierdo de `=' (%zu) no coincide con el número de variables en el lado derecho (%zu), en el grupo entre paréntesis %d del subcomando RENAME."
 
 #: src/language/data-io/trim.c:135
 #, c-format
@@ -3688,115 +3217,60 @@ msgid "Duplicate variable name %s."
 msgstr "Nombre de la variable %s duplicado."
 
 #: src/language/expressions/helpers.c:51
-msgid ""
-"One of the arguments to a DATE function is not an integer.  The result will "
-"be system-missing."
-msgstr ""
-"Uno de los argumentos para función DATE no es un entero.  El resultado será "
-"perdido por el sistema."
+msgid "One of the arguments to a DATE function is not an integer.  The result will be system-missing."
+msgstr "Uno de los argumentos para función DATE no es un entero.  El resultado será perdido por el sistema."
 
 #: src/language/expressions/helpers.c:73
-msgid ""
-"The week argument to DATE.WKYR is not an integer.  The result will be system-"
-"missing."
-msgstr ""
-"El argumento de semana para DATE.WKYR no es un entero. El resultado será "
-"perdido del sistema."
+msgid "The week argument to DATE.WKYR is not an integer.  The result will be system-missing."
+msgstr "El argumento de semana para DATE.WKYR no es un entero. El resultado será perdido del sistema."
 
 #: src/language/expressions/helpers.c:79
-msgid ""
-"The week argument to DATE.WKYR is outside the acceptable range of 1 to 53.  "
-"The result will be system-missing."
-msgstr ""
-"El argumento de semana para DATE.WKYR está fuera del intervalo aceptable "
-"entre 1 y 53.  El resultado será perdido del sistema."
+msgid "The week argument to DATE.WKYR is outside the acceptable range of 1 to 53.  The result will be system-missing."
+msgstr "El argumento de semana para DATE.WKYR está fuera del intervalo aceptable entre 1 y 53.  El resultado será perdido del sistema."
 
 #: src/language/expressions/helpers.c:101
-msgid ""
-"The day argument to DATE.YRDAY is not an integer.  The result will be system-"
-"missing."
-msgstr ""
-"El argumento de día para DATE.YRDAY no es un entero.  El resultado será "
-"perdido del sistema."
+msgid "The day argument to DATE.YRDAY is not an integer.  The result will be system-missing."
+msgstr "El argumento de día para DATE.YRDAY no es un entero.  El resultado será perdido del sistema."
 
 #: src/language/expressions/helpers.c:107
-msgid ""
-"The day argument to DATE.YRDAY is outside the acceptable range of 1 to 366.  "
-"The result will be system-missing."
-msgstr ""
-"El argumento de día para DATE.YRDAY está fuera del intervalo aceptable entre "
-"1 y 366. El resultado será perdido del sistema."
+msgid "The day argument to DATE.YRDAY is outside the acceptable range of 1 to 366.  The result will be system-missing."
+msgstr "El argumento de día para DATE.YRDAY está fuera del intervalo aceptable entre 1 y 366. El resultado será perdido del sistema."
 
 #: src/language/expressions/helpers.c:129
-msgid ""
-"The year argument to YRMODA is greater than 47516.  The result will be "
-"system-missing."
-msgstr ""
-"El argumento año para YRMODA es más grande que 47516. El resultado será "
-"perdido del sistema."
+msgid "The year argument to YRMODA is greater than 47516.  The result will be system-missing."
+msgstr "El argumento año para YRMODA es más grande que 47516. El resultado será perdido del sistema."
 
 #: src/language/expressions/helpers.c:182
 #, c-format
-msgid ""
-"Unrecognized date unit \"%.*s\".  Valid date units are \"years\", \"quarters"
-"\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", and \"seconds\"."
-msgstr ""
-"Unidad de fecha \"%.*s\" no reconocida. Las unidades de fecha válidas son "
-"\"años\", \"trimestres\", \"meses\", \"semanas\", \"días\", \"horas\", "
-"\"minutos\", y \"segundos\"."
+msgid "Unrecognized date unit \"%.*s\".  Valid date units are \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", and \"seconds\"."
+msgstr "Unidad de fecha \"%.*s\" no reconocida. Las unidades de fecha válidas son \"años\", \"trimestres\", \"meses\", \"semanas\", \"días\", \"horas\", \"minutos\", y \"segundos\"."
 
 #: src/language/expressions/helpers.c:332
-msgid ""
-"Invalid DATESUM method.  Valid choices are \"closest\" and \"rollover\"."
-msgstr ""
-"Método DATESUM inválido. Las opciones válidas son \"cercana\" y  \"cumplida"
-"\"."
+msgid "Invalid DATESUM method.  Valid choices are \"closest\" and \"rollover\"."
+msgstr "Método DATESUM inválido. Las opciones válidas son \"cercana\" y  \"cumplida\"."
 
 #: src/language/expressions/parse.c:259
 #, c-format
-msgid ""
-"Type mismatch: expression has %s type, but a numeric value is required here."
-msgstr ""
-"Incompatibilidad de tipo: la expresión tiene tipo %s, pero aquí se pide un "
-"valor numérico."
+msgid "Type mismatch: expression has %s type, but a numeric value is required here."
+msgstr "Incompatibilidad de tipo: la expresión tiene tipo %s, pero aquí se pide un valor numérico."
 
 #: src/language/expressions/parse.c:271
 #, c-format
-msgid ""
-"Type mismatch: expression has %s type, but a string value is required here."
-msgstr ""
-"Incompatibilidad de tipo: la expresión tiene tipo %s, pero aquí se pide un "
-"valor de cadena."
+msgid "Type mismatch: expression has %s type, but a string value is required here."
+msgstr "Incompatibilidad de tipo: la expresión tiene tipo %s, pero aquí se pide un valor de cadena."
 
 #: src/language/expressions/parse.c:427
 #, c-format
 msgid "Type mismatch while applying %s operator: cannot convert %s to %s."
-msgstr ""
-"Incompatibilidad de los tipos mientras se aplica el operador %s: no se puede "
-"convertir %s en %s."
+msgstr "Incompatibilidad de los tipos mientras se aplica el operador %s: no se puede convertir %s en %s."
 
 #: src/language/expressions/parse.c:643
-msgid ""
-"Chaining relational operators (e.g. \"a < b < c\") will not produce the "
-"mathematically expected result.  Use the AND logical operator to fix the "
-"problem (e.g. \"a < b AND b < c\").  If chaining is really intended, "
-"parentheses will disable this warning (e.g. \"(a < b) < c\".)"
-msgstr ""
-"El encadenamiento de operadores relacionales (p.e. \"a < b < c\") no "
-"producirà el resultado esperado matemáticamente. Utilizar el operador lógico "
-"AND para solucionar el problema (p.e. \"a < b AND b < c\"). Si el "
-"encadenamiento es realmente intencionado, los paréntesis desactivaran esta "
-"alerta (p.e. \"(a < b) < c\".)"
+msgid "Chaining relational operators (e.g. \"a < b < c\") will not produce the mathematically expected result.  Use the AND logical operator to fix the problem (e.g. \"a < b AND b < c\").  If chaining is really intended, parentheses will disable this warning (e.g. \"(a < b) < c\".)"
+msgstr "El encadenamiento de operadores relacionales (p.e. \"a < b < c\") no producirà el resultado esperado matemáticamente. Utilizar el operador lógico AND para solucionar el problema (p.e. \"a < b AND b < c\"). Si el encadenamiento es realmente intencionado, los paréntesis desactivaran esta alerta (p.e. \"(a < b) < c\".)"
 
 #: src/language/expressions/parse.c:744
-msgid ""
-"The exponentiation operator (\"**\") is left-associative, even though right-"
-"associative semantics are more useful.  That is, \"a**b**c\" equals \"(a**b)"
-"**c\", not as \"a**(b**c)\".  To disable this warning, insert parentheses."
-msgstr ""
-"El operador de exponenciación (\"**\") aparece a la izquierda, aunque si "
-"aparece a la derecha es más útil.  Es decir, \"a**b**c\" es igual a \"(a**b)"
-"**c\", no a \"a**(b**c)\". Para desactivar esta alerta, insertar paréntesis."
+msgid "The exponentiation operator (\"**\") is left-associative, even though right-associative semantics are more useful.  That is, \"a**b**c\" equals \"(a**b)**c\", not as \"a**(b**c)\".  To disable this warning, insert parentheses."
+msgstr "El operador de exponenciación (\"**\") aparece a la izquierda, aunque si aparece a la derecha es más útil.  Es decir, \"a**b**c\" es igual a \"(a**b)**c\", no a \"a**(b**c)\". Para desactivar esta alerta, insertar paréntesis."
 
 #: src/language/expressions/parse.c:809
 #, c-format
@@ -3839,12 +3313,8 @@ msgstr "%s requiere como mínimo %d argumentos válidos en la lista."
 
 #: src/language/expressions/parse.c:1110
 #, c-format
-msgid ""
-"With %s, using minimum valid argument count of %d does not make sense when "
-"passing only %d arguments in list."
-msgstr ""
-"Con %s, no tiene sentido utilizar %d como recuento mínimo de argumento "
-"válido si se pasan únicamente %d argumentos en la lista."
+msgid "With %s, using minimum valid argument count of %d does not make sense when passing only %d arguments in list."
+msgstr "Con %s, no tiene sentido utilizar %d como recuento mínimo de argumento válido si se pasan únicamente %d argumentos en la lista."
 
 #: src/language/expressions/parse.c:1164
 #, c-format
@@ -3893,9 +3363,8 @@ msgid "warning"
 msgstr "aviso"
 
 #: src/libpspp/message.c:135
-#, fuzzy
 msgid "note"
-msgstr "Centro"
+msgstr "anotación"
 
 #: src/libpspp/tmpfile.c:56
 msgid "failed to create temporary file"
@@ -3918,14 +3387,14 @@ msgid "writing to temporary file"
 msgstr "escribiendo en un archivo temporal"
 
 #: src/libpspp/zip-writer.c:91
-#, fuzzy, c-format
+#, c-format
 msgid "%s: error opening output file"
-msgstr "ascii: abriendo el archivo de resultados \"%s\""
+msgstr "%s: error abriendo el archivo de resultados"
 
 #: src/libpspp/zip-writer.c:224
-#, fuzzy, c-format
+#, c-format
 msgid "%s: write failed"
-msgstr "%s: No es un archivo portátil."
+msgstr "%s: error de escritura"
 
 #: src/math/percentiles.c:36
 msgid "HAverage"
@@ -3950,17 +3419,12 @@ msgstr "Empírico promediado"
 #: src/output/ascii.c:278
 #, c-format
 msgid "%s: %s must be positive integer or `auto'"
-msgstr ""
+msgstr "%s: %s debe ser un entero positivo o `auto'"
 
 #: src/output/ascii.c:311
-#, fuzzy, c-format
-msgid ""
-"ascii: page excluding margins and headers must be at least %d characters "
-"wide by %d lines long, but as configured is only %d characters by %d lines"
-msgstr ""
-"ascii: excluyendo los márgenes y encabezamientos la página tiene que ser "
-"como mínimo de 59 carácteres de ancho por 15 líneas de largo, pero tal como "
-"está configurada la página únicamente tiene %d carácteres y %d líneas"
+#, c-format
+msgid "ascii: page excluding margins and headers must be at least %d characters wide by %d lines long, but as configured is only %d characters by %d lines"
+msgstr "ascii: excluyendo los margenes y encabezamientos la página debe tener como mínimo %d caracteres de ancho por %d líneas de largo, pero tal como está configurada, sólo hay %d caracteres y %d líneas"
 
 #: src/output/ascii.c:360
 #, c-format
@@ -3970,7 +3434,7 @@ msgstr "ascii: cerrando el archivo de salida \"%s\""
 #: src/output/ascii.c:503
 #, c-format
 msgid "See %s for a chart."
-msgstr ""
+msgstr "Ver %s para gráfico."
 
 #: src/output/ascii.c:806
 #, c-format
@@ -3984,29 +3448,28 @@ msgstr "%s - Página %d"
 
 #: src/output/csv.c:87 src/output/html.c:106 src/output/journal.c:93
 #: src/output/msglog.c:66
-#, fuzzy, c-format
+#, c-format
 msgid "error opening output file \"%s\""
-msgstr "ascii: abriendo el archivo de resultados \"%s\""
+msgstr "error abriendo el fichero de resultados \"%s\""
 
 #: src/output/driver.c:330
 #, c-format
-msgid ""
-"%s is not a valid device type (the choices are \"terminal\" and \"listing\")"
-msgstr ""
+msgid "%s is not a valid device type (the choices are \"terminal\" and \"listing\")"
+msgstr "%s no es un tipo de dispositivo válido (las opciones son \"terminal\" y \"listing\")"
 
 #: src/output/driver.c:343
-#, fuzzy, c-format
+#, c-format
 msgid "%s: unknown option \"%s\""
-msgstr "ascii: parámetro desconocido `%s'"
+msgstr "%s: opción desconocida \"%s\""
 
 #: src/output/html.c:114
 msgid "PSPP Output"
 msgstr "Resultado de PSPP"
 
 #: src/output/journal.c:67
-#, fuzzy, c-format
+#, c-format
 msgid "error writing output file \"%s\""
-msgstr "error en escribir \"%s\""
+msgstr "error al escribir el fichero de resultados \"%s\""
 
 #: src/output/measure.c:65
 #, c-format
@@ -4024,14 +3487,14 @@ msgid "unknown paper type `%.*s'"
 msgstr "tipo de papel desconocido `%.*s'"
 
 #: src/output/measure.c:248
-#, fuzzy, c-format
+#, c-format
 msgid "error opening input file \"%s\""
-msgstr "error en abrir \"%s\""
+msgstr "error al abrir el fichero de datos \"%s\""
 
 #: src/output/measure.c:259
-#, fuzzy, c-format
+#, c-format
 msgid "error reading file \"%s\""
-msgstr "error de lectura \"%s\""
+msgstr "error leyendo el archivo \"%s\""
 
 #: src/output/measure.c:276
 #, c-format
@@ -4041,91 +3504,77 @@ msgstr "el archivo de medida de papel \"%s\" no indica una medida de papel"
 #: src/output/options.c:113
 #, c-format
 msgid "%s: \"%s\" is \"%s\" but a Boolean value is required"
-msgstr ""
+msgstr "%s: \"%s\" es \"%s\", pero se requiere un valor Booleano"
 
 #: src/output/options.c:188
 #, c-format
 msgid "%s: \"%s\" is \"%s\" but one of the following is required: %s"
-msgstr ""
+msgstr "%s: \"%s\" es \"%s\", pero se requiere uno de los siguientes: %s "
 
 #: src/output/options.c:232
 #, c-format
 msgid "%s: \"%s\" is \"%s\" but a nonnegative integer is required"
-msgstr ""
+msgstr "%s: \"%s\" es \"%s\", pero se requiere un entero no negativo"
 
 #: src/output/options.c:236
 #, c-format
 msgid "%s: \"%s\" is \"%s\" but a positive integer is required"
-msgstr ""
+msgstr "%s: \"%s\" es \"%s\", pero se requiere un entero positivo"
 
 #: src/output/options.c:239
 #, c-format
 msgid "%s: \"%s\" is \"%s\" but an integer is required"
-msgstr ""
+msgstr "%s: \"%s\" es \"%s\", pero se requiere un entero"
 
 #: src/output/options.c:242
 #, c-format
 msgid "%s: \"%s\" is \"%s\" but an integer greater than %d is required"
-msgstr ""
+msgstr "%s: \"%s\" es \"%s\", pero se requiere un entero mayor que %d"
 
 #: src/output/options.c:247
 #, c-format
 msgid "%s: \"%s\" is \"%s\"  but an integer between %d and %d is required"
-msgstr ""
+msgstr "%s: \"%s\" es \"%s\", pero se requiere un entero entre %d y %d"
 
 #: src/output/options.c:326
 #, c-format
 msgid "%s: \"%s\" is \"%s\" but a file name that contains \"#\" is required."
-msgstr ""
+msgstr "%s: \"%s\" es \"%s\", pero se requiere un nombre de fichero que contenga \"#\"."
 
 #: src/output/tab.c:206
 #, c-format
 msgid "bad vline: x=%d+%d=%d y=(%d+%d=%d,%d+%d=%d) in table size (%d,%d)\n"
-msgstr "bad vline: x=%d+%d=%d y=(%d+%d=%d,%d+%d=%d) a taula de mida (%d,%d)\n"
+msgstr "incorrecta vline: x=%d+%d=%d y=(%d+%d=%d,%d+%d=%d) en tabla de medida (%d,%d)\n"
 
 #: src/output/tab.c:244
-#, fuzzy, c-format
+#, c-format
 msgid "bad hline: x=(%d+%d=%d,%d+%d=%d) y=%d+%d=%d in table size (%d,%d)\n"
-msgstr "bad vline: x=%d+%d=%d y=(%d+%d=%d,%d+%d=%d) a taula de mida (%d,%d)\n"
+msgstr "incorrecta hline: x=(%d+%d=%d,%d+%d=%d) y=%d+%d=%d en tabla de medida (%d,%d)\n"
 
 #: src/output/tab.c:288
 #, c-format
-msgid ""
-"bad box: (%d+%d=%d,%d+%d=%d)-(%d+%d=%d,%d+%d=%d) in table size (%d,%d)\n"
-msgstr ""
-"bad box: (%d+%d=%d,%d+%d=%d)-(%d+%d=%d,%d+%d=%d) en taula amb mida (%d,%d)\n"
+msgid "bad box: (%d+%d=%d,%d+%d=%d)-(%d+%d=%d,%d+%d=%d) in table size (%d,%d)\n"
+msgstr "bad box: (%d+%d=%d,%d+%d=%d)-(%d+%d=%d,%d+%d=%d) en taula amb mida (%d,%d)\n"
 
 #: src/output/cairo.c:295
-#, fuzzy, c-format
+#, c-format
 msgid "error opening output file \"%s\": %s"
-msgstr "ascii: abriendo el archivo de resultados \"%s\""
+msgstr "error abriendo el fichero de resultados \"%s\": %s"
 
 #: src/output/cairo.c:312
-#, fuzzy, c-format
-msgid ""
-"The defined page is not wide enough to hold at least %d characters in the "
-"default font.  In fact, there's only room for %d characters."
-msgstr ""
-"La página PostScript definida no es suficientemente extensa como para "
-"contener márgenes y encabezamientos, además de almenos 15 líneas con las "
-"fuentes por defecto.  De hecho, únicamente hay espacio para %d líneas de "
-"cada fuente en la medida por defecto de %d.%03d puntos."
+#, c-format
+msgid "The defined page is not wide enough to hold at least %d characters in the default font.  In fact, there's only room for %d characters."
+msgstr "La página definida no es suficientemente ancha como para contener al menos %d caracteres de la fuente por defecto.  De hecho, sólo hay espacio para %d caracteres."
 
 #: src/output/cairo.c:322
-#, fuzzy, c-format
-msgid ""
-"The defined page is not long enough to hold margins and headers, plus least %"
-"d lines of the default fonts.  In fact, there's only room for %d lines."
-msgstr ""
-"La página PostScript definida no es suficientemente extensa como para "
-"contener márgenes y encabezamientos, además de almenos 15 líneas con las "
-"fuentes por defecto.  De hecho, únicamente hay espacio para %d líneas de "
-"cada fuente en la medida por defecto de %d.%03d puntos."
+#, c-format
+msgid "The defined page is not long enough to hold margins and headers, plus least %d lines of the default fonts.  In fact, there's only room for %d lines."
+msgstr "La página definida no es suficientemente larga como para contener margenes y cabezeras, además de al menos %d líneas de las fuentes por defecto.  De hecho, sólo hay espacio para %d líneas."
 
 #: src/output/cairo.c:376
-#, fuzzy, c-format
+#, c-format
 msgid "error drawing output for %s driver: %s"
-msgstr "error de sintaxis analitzando opciones para el controlador \"%s\""
+msgstr "error dibujando resultados para el controlador %s: %s"
 
 #: src/output/cairo.c:864
 #, c-format
@@ -4133,9 +3582,9 @@ msgid "\"%s\": bad font specification"
 msgstr "\"%s\": especificación de carácter no válida"
 
 #: src/output/cairo.c:1084
-#, fuzzy, c-format
+#, c-format
 msgid "error writing output file \"%s\": %s"
-msgstr "Error en cerrar el archivo portátil \"%s\": %s."
+msgstr "Error escribiendo el fichero de resultados \"%s\": %s."
 
 #: src/output/charts/np-plot-cairo.c:37
 #, c-format
@@ -4174,16 +3623,15 @@ msgstr "Curva ROC"
 
 #: src/output/charts/scree-cairo.c:36
 msgid "Scree Plot"
-msgstr ""
+msgstr "Gráfico de Sedimentación"
 
 #: src/output/charts/scree-cairo.c:38
 msgid "Eigenvalue"
-msgstr ""
+msgstr "Valor-propio"
 
 #: src/output/odt.c:93
-#, fuzzy
 msgid "error creating temporary file"
-msgstr "leyendo archivo temporal"
+msgstr "error creando fichero temporal"
 
 #: src/ui/source-init-opts.c:78
 msgid "Algorithm must be either \"compatible\" or \"enhanced\"."
@@ -4194,17 +3642,13 @@ msgid "Syntax must be either \"compatible\" or \"enhanced\"."
 msgstr "La sintaxis tiene que ser o \"compatible\" o \"ampliada\"."
 
 #: src/ui/terminal/main.c:128
-msgid ""
-"Stopping syntax file processing here to avoid a cascade of dependent command "
-"failures."
-msgstr ""
-"Deteniendo el procesamiento del archivo de sintaxis aquí para evitar una "
-"cascada de errores derivados."
+msgid "Stopping syntax file processing here to avoid a cascade of dependent command failures."
+msgstr "Deteniendo el procesamiento del archivo de sintaxis aquí para evitar una cascada de errores derivados."
 
 #: src/ui/terminal/msg-ui.c:127
 #, c-format
 msgid "Notes (%d) exceed limit (%d).  Suppressing further notes."
-msgstr ""
+msgstr "Las anotaciones (%d) han superado el límite (%d). Se suprimen las posteriores."
 
 #: src/ui/terminal/msg-ui.c:135
 #, c-format
@@ -4212,9 +3656,9 @@ msgid "Warnings (%d) exceed limit (%d)."
 msgstr "Avisos (%d) exceden el límite (%d)."
 
 #: src/ui/terminal/msg-ui.c:138
-#, fuzzy, c-format
+#, c-format
 msgid "Errors (%d) exceed limit (%d)."
-msgstr "Errores (%d) exceden el límite (%d)."
+msgstr "Los errores (%d) exceden el límite (%d)."
 
 #: src/ui/terminal/terminal.c:72
 #, c-format
@@ -4224,12 +3668,12 @@ msgstr "no se puede acceder a la definición para terminal `%s'"
 #: src/ui/terminal/terminal-opts.c:119
 #, c-format
 msgid "%s: output option missing `='"
-msgstr ""
+msgstr "%s: falta una opción de resultado `='"
 
 #: src/ui/terminal/terminal-opts.c:126
 #, c-format
 msgid "%s: output option specified more than once"
-msgstr ""
+msgstr "%s: opción de resultado especificada más de una vez"
 
 #: src/ui/gui/checkbox-treeview.c:92 src/language/stats/crosstabs.q:1213
 #: src/language/stats/crosstabs.q:1240 src/language/stats/crosstabs.q:1263
@@ -4341,7 +3785,7 @@ msgstr "Expresión regular incorrecta: %s"
 #: src/ui/gui/factor-dialog.c:344
 #, c-format
 msgid "Eigenvalues over %4.2f times the mean eigenvalue"
-msgstr ""
+msgstr "Algunos valores propios superan %4.2f veces el valor-propio medio"
 
 #: src/ui/gui/frequencies-dialog.c:45
 msgid "Standard error of the mean"
@@ -4380,10 +3824,8 @@ msgstr "F.J. Miguel, J. Gómez, P. Payà"
 
 #: src/ui/gui/help-menu.c:98
 #, c-format
-msgid ""
-"Cannot open reference manual: %s.  The PSPP user manual is also available at "
-"http://www.gnu.org/software/pspp/documentation.html"
-msgstr ""
+msgid "Cannot open reference manual: %s.  The PSPP user manual is also available at http://www.gnu.org/software/pspp/documentation.html"
+msgstr "No puede abrirse el manual de referencia: %s. El manual del usuario de PSPP también está disponible en http://www.gnu.org/software/pspp/documentation.html"
 
 #: src/ui/gui/help-menu.c:117
 msgid "_Help"
@@ -4461,15 +3903,14 @@ msgid "Open"
 msgstr "Abrir"
 
 #: src/ui/gui/psppire-data-window.c:392
-#, fuzzy
 msgid "Data and Syntax Files"
-msgstr "No se puede abrir el archivo de sintaxis \"%s\""
+msgstr "Ficheros de Datos y Sintaxsi"
 
-#: src/ui/gui/psppire-data-window.c:402 src/ui/gui/psppire-data-window.c:611
+#: src/ui/gui/psppire-data-window.c:402 src/ui/gui/psppire-data-window.c:614
 msgid "System Files (*.sav)"
 msgstr "Archivos de Sistema (*.sav)"
 
-#: src/ui/gui/psppire-data-window.c:408 src/ui/gui/psppire-data-window.c:617
+#: src/ui/gui/psppire-data-window.c:408 src/ui/gui/psppire-data-window.c:620
 msgid "Portable Files (*.por) "
 msgstr "Archivos Portátiles (*.por)"
 
@@ -4477,57 +3918,54 @@ msgstr "Archivos Portátiles (*.por)"
 msgid "Syntax Files (*.sps) "
 msgstr "Archivos de Sintàxis (*.sps) "
 
-#: src/ui/gui/psppire-data-window.c:420 src/ui/gui/psppire-data-window.c:623
+#: src/ui/gui/psppire-data-window.c:420 src/ui/gui/psppire-data-window.c:626
 #: src/ui/gui/psppire-syntax-window.c:298
 msgid "All Files"
 msgstr "Todos los archivos"
 
-#: src/ui/gui/psppire-data-window.c:603
+#: src/ui/gui/psppire-data-window.c:606
 msgid "Save"
 msgstr "Guardar"
 
-#: src/ui/gui/psppire-data-window.c:636
+#: src/ui/gui/psppire-data-window.c:639
 msgid "Portable File"
 msgstr "Archivo Portátil"
 
-#: src/ui/gui/psppire-data-window.c:773
+#: src/ui/gui/psppire-data-window.c:776
 msgid "Font Selection"
 msgstr "Selección de fuente"
 
-#: src/ui/gui/psppire-data-window.c:1261
+#: src/ui/gui/psppire-data-window.c:1264
 msgid "Data Editor"
 msgstr "Editor de Datos"
 
 #: src/ui/gui/psppire-output-window.c:458
 msgid "Export Output"
-msgstr ""
+msgstr "Exporta Resultados"
 
 #: src/ui/gui/psppire-output-window.c:466
-#, fuzzy
 msgid "PDF Files (*.pdf)"
-msgstr "Archivos Portátiles (*.por)"
+msgstr "Ficheros PDF (*.pdf)"
 
 #: src/ui/gui/psppire-output-window.c:467
 msgid "HTML Files (*.html)"
-msgstr ""
+msgstr "Ficheros HTML (*.html)"
 
 #: src/ui/gui/psppire-output-window.c:468
 msgid "OpenDocument Files (*.odt)"
-msgstr ""
+msgstr "Ficheros OpenDocument (*.odt)"
 
 #: src/ui/gui/psppire-output-window.c:469
-#, fuzzy
 msgid "Text Files (*.txt)"
-msgstr "Archivos de Sistema (*.sav)"
+msgstr "Ficheros de Text (*.txt)"
 
 #: src/ui/gui/psppire-output-window.c:470
-#, fuzzy
 msgid "PostScript Files (*.ps)"
-msgstr "Archivos Portátiles (*.por)"
+msgstr "Ficheros PostScript (*.ps)"
 
 #: src/ui/gui/psppire-output-window.c:471
 msgid "Comma-Separated Value Files (*.csv)"
-msgstr ""
+msgstr "Ficheros de Valores Separados por Comas (*.csv)"
 
 #: src/ui/gui/psppire-output-window.c:605
 msgid "Output Viewer"
@@ -4619,12 +4057,8 @@ msgstr "Guarda los cambios en \"%s\" antes de salir?"
 
 #: src/ui/gui/psppire-window.c:475
 #, c-format
-msgid ""
-"If you don't save, changes from the last %ld seconds will be permanently "
-"lost."
-msgstr ""
-"Si no se guarda ahora, los cambios de los últims %ld segundos se perderan "
-"permanentemente."
+msgid "If you don't save, changes from the last %ld seconds will be permanently lost."
+msgstr "Si no se guarda ahora, los cambios de los últims %ld segundos se perderan permanentemente."
 
 #: src/ui/gui/psppire-window.c:479
 msgid "Close _without saving"
@@ -4697,12 +4131,8 @@ msgstr "Error leyendo \"%s\": %s"
 
 #: src/ui/gui/text-data-import-dialog.c:480
 #, c-format
-msgid ""
-"Failed to read \"%s\", because it contains a line over %d bytes long and "
-"therefore appears not to be a text file."
-msgstr ""
-"Error leyendo \"%s\", porque contiene una linea más allá de %d bytes y por "
-"tanto parece que no es un archivo de texto."
+msgid "Failed to read \"%s\", because it contains a line over %d bytes long and therefore appears not to be a text file."
+msgstr "Error leyendo \"%s\", porque contiene una linea más allá de %d bytes y por tanto parece que no es un archivo de texto."
 
 #: src/ui/gui/text-data-import-dialog.c:494
 #, c-format
@@ -4719,14 +4149,10 @@ msgstr "Importando datos de texto delimitado"
 
 #: src/ui/gui/text-data-import-dialog.c:749
 msgid ""
-"This assistant will guide you through the process of importing data into "
-"PSPP from a text file with one line per case,  in which fields are separated "
-"by tabs, commas, or other delimiters.\n"
+"This assistant will guide you through the process of importing data into PSPP from a text file with one line per case,  in which fields are separated by tabs, commas, or other delimiters.\n"
 "\n"
 msgstr ""
-"Este asistente te quiará a lo largo del proceso de importar datos en PSPP "
-"desde un archivo de texto con una línea por caso,  en el que los campos "
-"estan separados por tabuladores, comas, u otros delimitadores.\n"
+"Este asistente te quiará a lo largo del proceso de importar datos en PSPP desde un archivo de texto con una línea por caso,  en el que los campos estan separados por tabuladores, comas, u otros delimitadores.\n"
 "\n"
 
 #: src/ui/gui/text-data-import-dialog.c:755
@@ -4740,36 +4166,24 @@ msgstr[1] "El archivo seleccionado contiene %zu línias de texto.  "
 #, c-format
 msgid "The selected file contains approximately %lu line of text.  "
 msgid_plural "The selected file contains approximately %lu lines of text.  "
-msgstr[0] ""
-"El archivo seleccionado contiene aproximadamente %lu línea de texto.  "
-msgstr[1] ""
-"El archivo seleccionado contiene aproximadamente %lu líneas de texto.  "
+msgstr[0] "El archivo seleccionado contiene aproximadamente %lu línea de texto.  "
+msgstr[1] "El archivo seleccionado contiene aproximadamente %lu líneas de texto.  "
 
 #: src/ui/gui/text-data-import-dialog.c:769
 #, c-format
-msgid ""
-"Only the first %zu line of the file will be shown for preview purposes in "
-"the following screens.  "
-msgid_plural ""
-"Only the first %zu lines of the file will be shown for preview purposes in "
-"the following screens.  "
-msgstr[0] ""
-"Únicamente la primera %zu líneas del archivo se previsualizaran en las "
-"siguientes pantallas.  "
-msgstr[1] ""
-"Únicamente las primeras %zu líneas del archivo se previsualizaran en las "
-"siguientes pantallas.  "
+msgid "Only the first %zu line of the file will be shown for preview purposes in the following screens.  "
+msgid_plural "Only the first %zu lines of the file will be shown for preview purposes in the following screens.  "
+msgstr[0] "Únicamente la primera %zu líneas del archivo se previsualizaran en las siguientes pantallas.  "
+msgstr[1] "Únicamente las primeras %zu líneas del archivo se previsualizaran en las siguientes pantallas.  "
 
 #: src/ui/gui/text-data-import-dialog.c:776
 msgid "You may choose below how much of the file should actually be imported."
-msgstr ""
-"Puedes escoger a continuación que parte del archivo va a ser importado."
+msgstr "Puedes escoger a continuación que parte del archivo va a ser importado."
 
 #: src/ui/gui/text-data-import-dialog.c:1523
 #: src/ui/gui/text-data-import-dialog.c:1768
 msgid "This input line has too few separators to fill in this field."
-msgstr ""
-"Esta línea de entrada no tiene suficientes separadores para llenar el campo."
+msgstr "Esta línea de entrada no tiene suficientes separadores para llenar el campo."
 
 #: src/ui/gui/text-data-import-dialog.c:1759
 #, c-format
@@ -4836,14 +4250,14 @@ msgid "%s: Attribute value %s[%d] is not quoted: %s"
 msgstr "%s: El valor del atributo %s[%d] no está entre comillas: %s"
 
 #: tests/dissect-sysfile.c:880
-#, fuzzy, c-format
+#, c-format
 msgid "Bad size %zu for extended number of cases."
-msgstr "Longitud no válida %zu en la extensión 11."
+msgstr "Longitud no válida %zu para un número extenso de casos."
 
 #: tests/dissect-sysfile.c:886
 #, c-format
 msgid "Bad count %zu for extended number of cases."
-msgstr ""
+msgstr "Recuento incorrecto %zu para un número extenso de casos."
 
 #: src/language/utilities/set.q:188
 msgid "WORKSPACE must be at least 1MB"
@@ -4885,12 +4299,8 @@ msgstr "WIDTH debe ser como mínimo 40."
 
 #: src/language/utilities/set.q:490
 #, c-format
-msgid ""
-"FORMAT requires numeric output format as an argument.  Specified format %s "
-"is of type string."
-msgstr ""
-"FORMAT requiere formato de resultado numérico como argumento.  El formato %s "
-"especificado es de tipo cadena."
+msgid "FORMAT requires numeric output format as an argument.  Specified format %s is of type string."
+msgstr "FORMAT requiere formato de resultado numérico como argumento.  El formato %s especificado es de tipo cadena."
 
 #: src/language/utilities/set.q:707
 msgid "ISL (32-bit IEEE 754 single, little-endian)"
@@ -4934,11 +4344,8 @@ msgid "%s is %s."
 msgstr "%s es %s."
 
 #: src/language/stats/crosstabs.q:289
-msgid ""
-"Missing mode REPORT not allowed in general mode.  Assuming MISSING=TABLE."
-msgstr ""
-"El INFORME de perdidos no está disponible en el modo general.  Se asume "
-"MISSING=TABLE."
+msgid "Missing mode REPORT not allowed in general mode.  Assuming MISSING=TABLE."
+msgstr "El INFORME de perdidos no está disponible en el modo general.  Se asume MISSING=TABLE."
 
 #: src/language/stats/crosstabs.q:399
 msgid "Too many cross-tabulation variables or dimensions."
@@ -5175,9 +4582,8 @@ msgid "%s Dependent"
 msgstr "%s Dependiente"
 
 #: src/language/stats/examine.q:357
-#, fuzzy
 msgid "Not creating NP plot because data set is empty."
-msgstr "No se crea el gráfico porque el conjunto de datos está vacío."
+msgstr "No se creará el gráfico NP porque el conjunto de datos está vacío."
 
 #: src/language/stats/examine.q:442 src/language/stats/examine.q:949
 msgid "Not creating plot because data set is empty."
@@ -5246,27 +4652,18 @@ msgid "%g"
 msgstr "%g"
 
 #: src/language/stats/frequencies.q:382
-#, fuzzy
 msgid "Bar charts are not implemented."
-msgstr "%s no está implementado."
+msgstr "El gráfico de barras no está implementado."
 
 #: src/language/stats/frequencies.q:399
-#, fuzzy, c-format
-msgid ""
-"MAX for histogram must be greater than or equal to MIN, but MIN was "
-"specified as %.15g and MAX as %.15g.  MIN and MAX will be ignored."
-msgstr ""
-"MAX debe ser mayor o igual a MIN, si ambos se especifican.  Pero, MIN se "
-"debe especificar como %g y MAX como %g.  MIN y MAX serán ignorados."
+#, c-format
+msgid "MAX for histogram must be greater than or equal to MIN, but MIN was specified as %.15g and MAX as %.15g.  MIN and MAX will be ignored."
+msgstr "Para el histograma, MAX debe ser mayor o igual a MIN, pero MIN se ha especificado como %15g y MAX como %15g.  MIN y MAX serán ignorados."
 
 #: src/language/stats/frequencies.q:420
-#, fuzzy, c-format
-msgid ""
-"MAX for pie chart must be greater than or equal to MIN, but MIN was "
-"specified as %.15g and MAX as %.15g.  MIN and MAX will be ignored."
-msgstr ""
-"MAX debe ser mayor o igual a MIN, si ambos se especifican.  Pero, MIN se "
-"debe especificar como %g y MAX como %g.  MIN y MAX serán ignorados."
+#, c-format
+msgid "MAX for pie chart must be greater than or equal to MIN, but MIN was specified as %.15g and MAX as %.15g.  MIN and MAX will be ignored."
+msgstr "Para el gráfico de sectores, MAX debe ser mayor o igual a MIN, pero MIN se ha especificado como %15g y MAX como %15g.  MIN y MAX serán ignorados."
 
 #: src/language/stats/frequencies.q:703
 msgid "`)' expected after GROUPED interval list."
@@ -5275,8 +4672,7 @@ msgstr "`)' esperada después de la lista de variables GRUPED."
 #: src/language/stats/frequencies.q:723
 #, c-format
 msgid "Variables %s specified multiple times on GROUPED subcommand."
-msgstr ""
-"La variable %s se ha especificado más de una vez en el subcomando GROUPED."
+msgstr "La variable %s se ha especificado más de una vez en el subcomando GROUPED."
 
 #: src/language/stats/frequencies.q:733
 #, c-format
@@ -5288,14 +4684,12 @@ msgid "Value Label"
 msgstr "Etiqueta de Valor"
 
 #: src/language/stats/frequencies.q:816
-#, fuzzy
 msgid "Valid Percent"
-msgstr "Porcentaje"
+msgstr "Porcentaje Válido"
 
 #: src/language/stats/frequencies.q:817
-#, fuzzy
 msgid "Cum Percent"
-msgstr "Porcentaje"
+msgstr "Porcentaje Acumulado"
 
 #: src/language/stats/frequencies.q:1008
 #, c-format
@@ -5309,14 +4703,14 @@ msgstr "50 (Mediana)"
 #: src/language/stats/frequencies.q:1209
 #, c-format
 msgid "Omitting pie chart for %s, which has only %d unique values."
-msgstr ""
+msgstr "Se omite el gráfico de sectores para %s, que sólo tiene %d valores únicos."
 
 #: src/language/stats/frequencies.q:1212
 #, c-format
 msgid "Omitting pie chart for %s, which has over 50 unique values."
-msgstr ""
+msgstr "Se omite el gráfico de sectores para %s, que tiene más de 50 valores únicos."
 
-#: src/language/stats/glm.q:248
+#: src/language/stats/glm.q:247
 msgid "Multivariate GLM not yet supported"
 msgstr "GLM multivariable todavía no disponible"
 
@@ -5334,33 +4728,22 @@ msgstr "Actualmente no está implementado el subcomando NPAR."
 
 #: src/language/stats/npar.q:256
 #, c-format
-msgid ""
-"The specified value of HI (%d) is lower than the specified value of LO (%d)"
-msgstr ""
-"El valor especificado para HI (%d) es menor que el especificado para LO (%d)"
+msgid "The specified value of HI (%d) is lower than the specified value of LO (%d)"
+msgstr "El valor especificado para HI (%d) es menor que el especificado para LO (%d)"
 
 #: src/language/stats/npar.q:311
 #, c-format
-msgid ""
-"%d expected values were given, but the specified range (%d-%d) requires "
-"exactly %d values."
-msgstr ""
-"Se han proporcionado %d valores esperados, pero el intervalo especificado (%"
-"d-%d) requiere exactamente %d valores."
+msgid "%d expected values were given, but the specified range (%d-%d) requires exactly %d values."
+msgstr "Se han proporcionado %d valores esperados, pero el intervalo especificado (%d-%d) requiere exactamente %d valores."
 
 #: src/language/stats/npar.q:453 src/language/stats/t-test.q:380
 #, c-format
-msgid ""
-"PAIRED was specified but the number of variables preceding WITH (%zu) did "
-"not match the number following (%zu)."
-msgstr ""
-"Se ha especificado PAIRED pero el número de variables antes de WITH (%zu) no "
-"coincide con el número de variables posterior (%zu)."
+msgid "PAIRED was specified but the number of variables preceding WITH (%zu) did not match the number following (%zu)."
+msgstr "Se ha especificado PAIRED pero el número de variables antes de WITH (%zu) no coincide con el número de variables posterior (%zu)."
 
 #: src/language/stats/oneway.q:170
 msgid "Number of contrast coefficients must equal the number of groups"
-msgstr ""
-"El número de coeficientes de contraste debe ser igual al número de grupos"
+msgstr "El número de coeficientes de contraste debe ser igual al número de grupos"
 
 #: src/language/stats/oneway.q:179
 #, c-format
@@ -5460,9 +4843,7 @@ msgstr "%s de %s"
 
 #: src/language/stats/rank.q:600
 msgid "Cannot create new rank variable.  All candidates in use."
-msgstr ""
-"No se puede crear la nueva variable de rangos.  Todos los candidatos están "
-"en uso."
+msgstr "No se puede crear la nueva variable de rangos.  Todos los candidatos están en uso."
 
 #: src/language/stats/rank.q:693
 msgid "Variables Created By RANK"
@@ -5489,12 +4870,8 @@ msgid "%s into %s(%s of %s)"
 msgstr "%s en %s(%s de %s)"
 
 #: src/language/stats/rank.q:761
-msgid ""
-"FRACTION has been specified, but NORMAL and PROPORTION rank functions have "
-"not been requested.  The FRACTION subcommand will be ignored."
-msgstr ""
-"Se ha especificado FRACTION, pero no se han pedido funciones de rango NORMAL "
-"o PROPORTION.  La suborden FRACTION será ignorada."
+msgid "FRACTION has been specified, but NORMAL and PROPORTION rank functions have not been requested.  The FRACTION subcommand will be ignored."
+msgstr "Se ha especificado FRACTION, pero no se han pedido funciones de rango NORMAL o PROPORTION.  La suborden FRACTION será ignorada."
 
 #: src/language/stats/rank.q:852
 #, c-format
@@ -5554,18 +4931,12 @@ msgid "Coefficient Correlations"
 msgstr "Correlaciones de Coeficientes"
 
 #: src/language/stats/regression.q:793
-msgid ""
-"The dependent variable is equal to the independent variable.The least "
-"squares line is therefore Y=X.Standard errors and related statistics may be "
-"meaningless."
-msgstr ""
-"La variable dependiente es igual a la variable independiente. La línea de "
-"minimos cuadrados es por tanto Y=X. Los errores estándard y los estadísticos "
-"relacionados podrian ser irrelevantes."
+msgid "The dependent variable is equal to the independent variable.The least squares line is therefore Y=X.Standard errors and related statistics may be meaningless."
+msgstr "La variable dependiente es igual a la variable independiente. La línea de minimos cuadrados es por tanto Y=X. Los errores estándard y los estadísticos relacionados podrian ser irrelevantes."
 
 #: src/language/stats/regression.q:891
 msgid "REGRESSION requires numeric variables."
-msgstr ""
+msgstr "REGRESSION requiere variables numéricas."
 
 #: src/language/stats/regression.q:962
 msgid "No valid data found. This command was skipped."
@@ -5647,8 +5018,7 @@ msgstr "%"
 
 #: src/language/stats/t-test.q:190
 msgid "Exactly one of TESTVAL, GROUPS and PAIRS subcommands must be specified."
-msgstr ""
-"Debe especificarse sólo uno de los subcomandos TESTVAL, GROUPS y PAIRS."
+msgstr "Debe especificarse sólo uno de los subcomandos TESTVAL, GROUPS y PAIRS."
 
 #: src/language/stats/t-test.q:211
 msgid "VARIABLES subcommand may not be used with PAIRS."
@@ -5659,11 +5029,8 @@ msgid "One or more VARIABLES must be specified."
 msgstr "Una o más VARIABLES deben ser especificadas."
 
 #: src/language/stats/t-test.q:324
-msgid ""
-"When applying GROUPS to a string variable, two values must be specified."
-msgstr ""
-"Cuando se aplica GROUPS a una variable alfabética, se deben especificar dos "
-"valores."
+msgid "When applying GROUPS to a string variable, two values must be specified."
+msgstr "Cuando se aplica GROUPS a una variable alfabética, se deben especificar dos valores."
 
 #: src/language/stats/t-test.q:395
 msgid "At least two variables must be specified on PAIRS."
@@ -5761,33 +5128,22 @@ msgstr "%s & %s"
 
 #: src/language/data-io/file-handle.q:65
 #, c-format
-msgid ""
-"File handle %s is already defined.  Use CLOSE FILE HANDLE before redefining "
-"a file handle."
-msgstr ""
-"El manipulador de archivo %s ya está definido.  Usar CLOSE FILE HANDLE antes "
-"de redefinir un manipulador de archivos."
+msgid "File handle %s is already defined.  Use CLOSE FILE HANDLE before redefining a file handle."
+msgstr "El manipulador de archivo %s ya está definido.  Usar CLOSE FILE HANDLE antes de redefinir un manipulador de archivos."
 
 #: src/language/data-io/file-handle.q:120
 msgid "RECFORM must be specified with MODE=360."
 msgstr "RECFORM debe ser especificado con MODE=360."
 
 #: src/language/data-io/file-handle.q:131
-#, fuzzy, c-format
-msgid ""
-"The specified file mode requires LRECL.  Assuming %zu-character records."
-msgstr ""
-"El modo de archivo especificado requiere LRECL.  Se asume %d-registros de "
-"carácter."
+#, c-format
+msgid "The specified file mode requires LRECL.  Assuming %zu-character records."
+msgstr "El modo de fichero especificado requiere LRECL. Se asumen registros de %zu caracteres."
 
 #: src/language/data-io/file-handle.q:135
 #, c-format
-msgid ""
-"Record length (%ld) must be between 1 and %lu bytes.  Assuming %d-character "
-"records."
-msgstr ""
-"El tamaño de registro (%ld) debe estar entre  1 y %lu bytes.  Se asume %d-"
-"registros de carácter."
+msgid "Record length (%ld) must be between 1 and %lu bytes.  Assuming %d-character records."
+msgstr "El tamaño de registro (%ld) debe estar entre  1 y %lu bytes.  Se asume %d-registros de carácter."
 
 #: src/language/data-io/file-handle.q:177
 msgid "file"
@@ -5808,23 +5164,17 @@ msgstr "Aquí no está permitido un manipulador para %s."
 
 #: src/language/data-io/list.q:99
 #, c-format
-msgid ""
-"The first case (%ld) specified precedes the last case (%ld) specified.  The "
-"values will be swapped."
-msgstr ""
-"El primer caso (%ld) especificado precede al último caso (%ld) "
-"especificado.  Los valores se intercanviarán."
+msgid "The first case (%ld) specified precedes the last case (%ld) specified.  The values will be swapped."
+msgstr "El primer caso (%ld) especificado precede al último caso (%ld) especificado.  Los valores se intercanviarán."
 
 #: src/language/data-io/list.q:107
 #, c-format
-msgid ""
-"The first case (%ld) to list is less than 1.  The value is being reset to 1."
+msgid "The first case (%ld) to list is less than 1.  The value is being reset to 1."
 msgstr "EL primer caso (%ld) a listar es menor que 1.  El valor se ajusta a 1."
 
 #: src/language/data-io/list.q:113
 #, c-format
-msgid ""
-"The last case (%ld) to list is less than 1.  The value is being reset to 1."
+msgid "The last case (%ld) to list is less than 1.  The value is being reset to 1."
 msgstr "El último caso (%ld) a listar es menor que 1.  El valor se ajusta a 1."
 
 #: src/language/data-io/list.q:119
@@ -5833,13 +5183,12 @@ msgid "The step value %ld is less than 1.  The value is being reset to 1."
 msgstr "El valor de paso %ld es menor que 1.  El valor se ajusta a 1."
 
 #: src/ui/gui/binomial.ui:57 src/ui/gui/chi-square.ui:57
-#, fuzzy
 msgid "_Test Variable List:"
-msgstr "Variable(s) de contraste:"
+msgstr "Lista de Variable _Test:"
 
 #: src/ui/gui/binomial.ui:126 src/ui/gui/chi-square.ui:126
 msgid "_Get from data"
-msgstr ""
+msgstr "Obtención de datos"
 
 #: src/ui/gui/binomial.ui:143 src/ui/gui/t-test.ui:333
 msgid "_Cut point:"
@@ -5847,60 +5196,51 @@ msgstr "Punto de corte:"
 
 #: src/ui/gui/binomial.ui:178
 msgid "Define Dichotomy"
-msgstr ""
+msgstr "Definir Dicotomía"
 
 #: src/ui/gui/binomial.ui:197
-#, fuzzy
 msgid "Test _Proportion:"
-msgstr "Prop. Test"
+msgstr "Test _Proporción:"
 
 #: src/ui/gui/correlation.ui:7
-#, fuzzy
 msgid "Bivariate Correlations"
-msgstr "Correlación de Spearman"
+msgstr "Correlaciones Bivariadas"
 
 #: src/ui/gui/correlation.ui:108
-#, fuzzy
 msgid "Pearso_n"
-msgstr "R de Pearson"
+msgstr "Pearso_n"
 
 #: src/ui/gui/correlation.ui:123
-#, fuzzy
 msgid "_Kendall's tau-b"
-msgstr "Tau-B de Kendall"
+msgstr "Tau-b de _Kendall"
 
 #: src/ui/gui/correlation.ui:138
 msgid "_Spearman"
-msgstr ""
+msgstr "_Spearman"
 
 #: src/ui/gui/correlation.ui:158
-#, fuzzy
 msgid "Correlation Coefficients"
-msgstr "Coeficientes de Contraste"
+msgstr "Coeficientes de Correlación"
 
 #: src/ui/gui/correlation.ui:182
-#, fuzzy
 msgid "_Two-tailed"
-msgstr "Total"
+msgstr "Dos colas"
 
 #: src/ui/gui/correlation.ui:198
 msgid "One-tai_led"
-msgstr ""
+msgstr "Una cola"
 
 #: src/ui/gui/correlation.ui:220
-#, fuzzy
 msgid "Test of Significance"
-msgstr "Significatividad"
+msgstr "Test de Significatividad"
 
 #: src/ui/gui/correlation.ui:232
-#, fuzzy
 msgid "_Flag significant correlations"
-msgstr "Correlaciones de Coeficientes"
+msgstr "Marca correlaciones significantes"
 
 #: src/ui/gui/crosstabs.ui:7
-#, fuzzy
 msgid "Crosstabs"
-msgstr "Tablas _Cruzadas"
+msgstr "Tablas _Contingencia"
 
 #: src/ui/gui/crosstabs.ui:50
 msgid "Rows"
@@ -5920,9 +5260,8 @@ msgid "Cells..."
 msgstr "Celdas..."
 
 #: src/ui/gui/crosstabs.ui:227
-#, fuzzy
 msgid "Crosstabs: Format"
-msgstr "Tablas _Cruzadas"
+msgstr "Tablas Contingencia: Formato"
 
 #: src/ui/gui/crosstabs.ui:241
 msgid "Print tables"
@@ -5949,18 +5288,16 @@ msgid "Labeling"
 msgstr "Etiquetando"
 
 #: src/ui/gui/crosstabs.ui:369
-#, fuzzy
 msgid "Crosstabs: Cells"
-msgstr "Tablas _Cruzadas"
+msgstr "Tablas Contingencia: Casillas"
 
 #: src/ui/gui/crosstabs.ui:402
 msgid "Cell Display"
 msgstr "Contenido de celda"
 
 #: src/ui/gui/crosstabs.ui:430
-#, fuzzy
 msgid "Crosstabs: Statistics"
-msgstr "Pruebas Estadísticas"
+msgstr "Tablas Contingencia: Estadísticos"
 
 #: src/ui/gui/crosstabs.ui:463 src/ui/gui/oneway.ui:222
 #: src/ui/gui/regression.ui:340
@@ -5968,43 +5305,36 @@ msgid "Statistics"
 msgstr "Estadísticas"
 
 #: src/ui/gui/chi-square.ui:13
-#, fuzzy
 msgid "Chi-Square Test"
-msgstr "Pruebas Chi-cuadrado."
+msgstr "Test Chi-cuadrado."
 
 #: src/ui/gui/chi-square.ui:140
-#, fuzzy
 msgid "Use _specified range"
-msgstr "Utiliza valores especificados:"
+msgstr "Utiliza rango e_specificado"
 
 #: src/ui/gui/chi-square.ui:162
-#, fuzzy
 msgid "_Lower:"
-msgstr "Inferior"
+msgstr "Mínimo:"
 
 #: src/ui/gui/chi-square.ui:170
-#, fuzzy
 msgid "_Upper:"
-msgstr "Superior"
+msgstr "Máximo:"
 
 #: src/ui/gui/chi-square.ui:214
-#, fuzzy
 msgid "Expected Range:"
-msgstr "N esperado"
+msgstr "Rango esperado:"
 
 #: src/ui/gui/chi-square.ui:240
 msgid "All categor_ies equal"
-msgstr ""
+msgstr "Igual todas las categor_ias"
 
 #: src/ui/gui/chi-square.ui:257
-#, fuzzy
 msgid "_Values"
-msgstr "Valores"
+msgstr "_Valores"
 
 #: src/ui/gui/chi-square.ui:301
-#, fuzzy
 msgid "Expected Values:"
-msgstr "Valores extremos"
+msgstr "Valores Esperados:"
 
 #: src/ui/gui/descriptives.ui:130 src/ui/gui/frequencies.ui:140
 msgid "Statistics:"
@@ -6020,17 +5350,15 @@ msgstr "Incluir los valores perdidos de usuario en el análisis"
 
 #: src/ui/gui/descriptives.ui:222
 msgid "Save Z-scores of selected variables as new variables"
-msgstr ""
-"Guardar puntuaciones-Z de las variables seleccionadas como nuevas variables"
+msgstr "Guardar puntuaciones-Z de las variables seleccionadas como nuevas variables"
 
 #: src/ui/gui/descriptives.ui:243
 msgid "Options:"
 msgstr "Opciones:"
 
 #: src/ui/gui/examine.ui:8
-#, fuzzy
 msgid "Explore"
-msgstr "_Explorar"
+msgstr "Explorar"
 
 #: src/ui/gui/examine.ui:51
 msgid "Label Cases by:"
@@ -6050,9 +5378,8 @@ msgid "Options..."
 msgstr "Opciones..."
 
 #: src/ui/gui/examine.ui:302
-#, fuzzy
 msgid "Explore: Statistics"
-msgstr "Pruebas Estadísticas"
+msgstr "Explorar: Estadísticos"
 
 #: src/ui/gui/examine.ui:332
 msgid "Extremes"
@@ -6060,7 +5387,7 @@ msgstr "Extremos"
 
 #: src/ui/gui/examine.ui:381
 msgid "Explore: Options"
-msgstr ""
+msgstr "Explorar: Opciones"
 
 #: src/ui/gui/examine.ui:405
 msgid "Exclude cases listwise"
@@ -6080,112 +5407,96 @@ msgid "Missing Values"
 msgstr "Valores perdidos"
 
 #: src/ui/gui/factor.ui:21
-#, fuzzy
 msgid "Factor Analysis"
-msgstr "Lista de Factores:"
+msgstr "Análisis Factorial"
 
 #: src/ui/gui/factor.ui:47
-#, fuzzy
 msgid "_Descriptives..."
-msgstr "Descriptivos"
+msgstr "_Descriptivos..."
 
 #: src/ui/gui/factor.ui:60
-#, fuzzy
 msgid "_Extraction..."
-msgstr "Opciones..."
+msgstr "_Extracción..."
 
 #: src/ui/gui/factor.ui:74
-#, fuzzy
 msgid "_Rotations..."
-msgstr "Opciones..."
+msgstr "_Rotaciones..."
 
 #: src/ui/gui/factor.ui:192
 msgid "Factor Analysis: Extraction"
-msgstr ""
+msgstr "Análisis Factorial: Extracción"
 
 #: src/ui/gui/factor.ui:216
-#, fuzzy
 msgid "Method: "
-msgstr "Modo:"
+msgstr "Método: "
 
 #: src/ui/gui/factor.ui:266
-#, fuzzy
 msgid "Correlation matrix"
-msgstr "Correlación"
+msgstr "Matriz de Correlaciones"
 
 #: src/ui/gui/factor.ui:280
-#, fuzzy
 msgid "Covariance matrix"
-msgstr "Covarianza"
+msgstr "Matriz de Covariancias"
 
 #: src/ui/gui/factor.ui:300
-#, fuzzy
 msgid "Analyse"
-msgstr "_Analizar"
+msgstr "Analizar"
 
 #: src/ui/gui/factor.ui:324
 msgid "Unrotatated factor solution"
-msgstr ""
+msgstr "Solución factorial sin rotar"
 
 #: src/ui/gui/factor.ui:338
 msgid "Scree plot"
-msgstr ""
+msgstr "Gráfico de sedimentación"
 
 #: src/ui/gui/factor.ui:357 src/ui/gui/roc.ui:286
-#, fuzzy
 msgid "Display"
-msgstr "Contenido de celda"
+msgstr "Contenido"
 
 #: src/ui/gui/factor.ui:430
 msgid "Number of factors:"
-msgstr ""
+msgstr "Número de factores:"
 
 #: src/ui/gui/factor.ui:460
-#, fuzzy
 msgid "Extract"
-msgstr "Eta"
+msgstr "Extracción"
 
 #: src/ui/gui/factor.ui:475 src/ui/gui/factor.ui:665
 msgid "Maximum iterations for convergence:"
-msgstr ""
+msgstr "Iteraciones máximas para la convergencia:"
 
 #: src/ui/gui/factor.ui:538
-#, fuzzy
 msgid "Factor Analysis: Rotation"
-msgstr "Lista de Factores:"
+msgstr "Análisis Factorial: Rotación"
 
 #: src/ui/gui/factor.ui:571
-#, fuzzy
 msgid "_None"
-msgstr "Ninguno"
+msgstr "_Ninguno"
 
 #: src/ui/gui/factor.ui:582
-#, fuzzy
 msgid "_Varimax"
-msgstr "_Variables"
+msgstr "_Varimax"
 
 #: src/ui/gui/factor.ui:598
 msgid "_Quartimax"
-msgstr ""
+msgstr "_Quartimax"
 
 #: src/ui/gui/factor.ui:614
 msgid "_Equimax"
-msgstr ""
+msgstr "_Equimax"
 
 #: src/ui/gui/factor.ui:637
-#, fuzzy
 msgid "Method"
-msgstr "Modo:"
+msgstr "Método"
 
 #: src/ui/gui/factor.ui:648
-#, fuzzy
 msgid "_Display rotated solution"
-msgstr "Muestra _información del archivo de datos"
+msgstr "Muestra la solución rotada"
 
 #: src/ui/gui/find.ui:8
-#, fuzzy
 msgid "Find Case"
-msgstr "Rango de Casos"
+msgstr "Buscar caso"
 
 #: src/ui/gui/find.ui:88
 msgid "Variable:"
@@ -6222,65 +5533,54 @@ msgid "Variable(s):"
 msgstr "Variable(s):"
 
 #: src/ui/gui/frequencies.ui:151
-#, fuzzy
 msgid "Include missing values"
-msgstr "Si_n valores perdidos"
+msgstr "Incluye valores perdidos"
 
 #: src/ui/gui/frequencies.ui:189
-#, fuzzy
 msgid "Charts..."
-msgstr "_Contrastes..."
+msgstr "Gráficos..."
 
 #: src/ui/gui/frequencies.ui:201
-#, fuzzy
 msgid "Frequency Tables..."
-msgstr "Variable de Frecuencia"
+msgstr "Tablas de Frecuencias..."
 
 #: src/ui/gui/frequencies.ui:251
-#, fuzzy
 msgid "Frequencies: Frequency Tables"
-msgstr "Mostrar la tabla de frecuencias"
+msgstr "Frecuencias: Tablas de frecuencias"
 
 #: src/ui/gui/frequencies.ui:281
 msgid "Always"
-msgstr ""
+msgstr "Siempre"
 
 #: src/ui/gui/frequencies.ui:297
-#, fuzzy
 msgid "Never"
-msgstr "Negativo"
+msgstr "Nunca"
 
 #: src/ui/gui/frequencies.ui:316
 msgid "If no more than "
-msgstr ""
+msgstr "Si no más de "
 
 #: src/ui/gui/frequencies.ui:347
-#, fuzzy
 msgid "values"
 msgstr "Valores"
 
 #: src/ui/gui/frequencies.ui:368
-#, fuzzy
 msgid "Display frequency tables"
-msgstr "Mostrar la tabla de frecuencias"
+msgstr "Mostrar tabla de frecuencias"
 
 #: src/ui/gui/frequencies.ui:396
-#, fuzzy
 msgid "Ascending value"
-msgstr "Ascendente"
+msgstr "Valor Ascendente"
 
 #: src/ui/gui/frequencies.ui:412
-#, fuzzy
 msgid "Descending value"
-msgstr "Descendente"
+msgstr "Valor Descendente"
 
 #: src/ui/gui/frequencies.ui:428
-#, fuzzy
 msgid "Ascending frequency"
 msgstr "Orden Ascendente"
 
 #: src/ui/gui/frequencies.ui:444
-#, fuzzy
 msgid "Descending frequency"
 msgstr "Orden Descendente"
 
@@ -6289,66 +5589,56 @@ msgid "Order by"
 msgstr "Ordenado por"
 
 #: src/ui/gui/frequencies.ui:508
-#, fuzzy
 msgid "Frequencies: Charts"
-msgstr "Frecuencias"
+msgstr "Frecuencias: Gráficos"
 
 #: src/ui/gui/frequencies.ui:536
-#, fuzzy
 msgid "Exclude values below "
-msgstr "Excluir casos según lista"
+msgstr "Excluir valores por debajo "
 
 #: src/ui/gui/frequencies.ui:571
-#, fuzzy
 msgid "Exclude values above "
-msgstr "Excluir casos por parejas"
+msgstr "Excluir valores por encima "
 
 #: src/ui/gui/frequencies.ui:609
-#, fuzzy
 msgid "<b>Chart Formatting</b>"
-msgstr "<b>Comillas</b>"
+msgstr "<b>Formato de Gráficos</b>"
 
 #: src/ui/gui/frequencies.ui:633
 msgid "Draw histograms"
-msgstr ""
+msgstr "Dibujar histogramas"
 
 #: src/ui/gui/frequencies.ui:645
 msgid "Superimpose normal curve"
-msgstr ""
+msgstr "Sobreimprimir curva normal"
 
 #: src/ui/gui/frequencies.ui:661
-#, fuzzy
 msgid "Scale:"
-msgstr "Escala"
+msgstr "Escala:"
 
 #: src/ui/gui/frequencies.ui:682
-#, fuzzy
 msgid "Percentages"
-msgstr "Percentiles"
+msgstr "Porcentajes"
 
 #: src/ui/gui/frequencies.ui:705
-#, fuzzy
 msgid "<b>Histograms</b>"
-msgstr "<b>Separadores</b>"
+msgstr "<b>Histogramas</b>"
 
 #: src/ui/gui/frequencies.ui:729
 msgid "Draw pie charts"
-msgstr ""
+msgstr "Dibuja diagramas de sectores"
 
 #: src/ui/gui/frequencies.ui:741
-#, fuzzy
 msgid "Include slices for missing values"
-msgstr "Valores perdidos _Discretos"
+msgstr "Incluir sectores para los valores perdidos"
 
 #: src/ui/gui/frequencies.ui:758
-#, fuzzy
 msgid "<b>Pie Charts</b>"
-msgstr "<b>Separadores</b>"
+msgstr "<b>Diagramas de Sectores</b>"
 
 #: src/ui/gui/oneway.ui:8
-#, fuzzy
 msgid "One-Way ANOVA"
-msgstr "_ANOVA de un factor"
+msgstr "ANOVA de un factor"
 
 #: src/ui/gui/oneway.ui:31
 msgid "_Factor:"
@@ -6371,9 +5661,8 @@ msgid "_Contrasts..."
 msgstr "_Contrastes..."
 
 #: src/ui/gui/oneway.ui:292
-#, fuzzy
 msgid "One-Way ANOVA: Contrasts"
-msgstr "_ANOVA de un factor"
+msgstr "ANOVA de un factor: Contrastes"
 
 #: src/ui/gui/oneway.ui:369
 msgid "_Coefficients:"
@@ -6404,9 +5693,8 @@ msgid "Current Status: "
 msgstr "Estatus actual: "
 
 #: src/ui/gui/psppire.ui:195
-#, fuzzy
 msgid "Transpose"
-msgstr "_Trasponer"
+msgstr "Transponer"
 
 #: src/ui/gui/psppire.ui:247
 msgid "Name Variable:"
@@ -6449,9 +5737,8 @@ msgid "Analysis by groups is off"
 msgstr "El análisis por grupos está activado"
 
 #: src/ui/gui/psppire.ui:709
-#, fuzzy
 msgid "Compute Variable"
-msgstr "Variables de salida"
+msgstr "Calcular Variable"
 
 #: src/ui/gui/psppire.ui:742
 msgid "Target Variable:"
@@ -6527,9 +5814,8 @@ msgid "Unselected Cases Are"
 msgstr "Los casos no seleccionados són"
 
 #: src/ui/gui/psppire.ui:1585
-#, fuzzy
 msgid "Data File Comments"
-msgstr "_Comentarios al archivo de datos"
+msgstr "Comentarios del fichero de datos"
 
 #: src/ui/gui/psppire.ui:1609
 msgid "Comments:"
@@ -6544,9 +5830,8 @@ msgid "Column Number: 0"
 msgstr "Columna Número: 0"
 
 #: src/ui/gui/psppire.ui:1703
-#, fuzzy
 msgid "Select Cases: Range"
-msgstr "Seleccionar casos"
+msgstr "Seleccionar casos: Rango"
 
 #: src/ui/gui/psppire.ui:1750
 msgid "First case"
@@ -6562,25 +5847,23 @@ msgstr "Observación"
 
 #: src/ui/gui/psppire.ui:1808
 msgid "Compute Variable: Type and Label"
-msgstr ""
+msgstr "Calcular Variable: Tipo y Etiqueta"
 
 #: src/ui/gui/psppire.ui:1843
 msgid "Use expression as label"
 msgstr "Utilizar la expresión como etiqueta"
 
 #: src/ui/gui/psppire.ui:2088
-#, fuzzy
 msgid "Goto Case"
-msgstr "Ir al Caso"
+msgstr "Ir al Cas"
 
 #: src/ui/gui/psppire.ui:2106
 msgid "Goto Case Number:"
 msgstr "Ir al caso número:"
 
 #: src/ui/gui/psppire.ui:2149
-#, fuzzy
 msgid "Select Cases: Random Sample"
-msgstr "Seleccionar casos"
+msgstr "Seleccionar casos: Muestra aleatoria"
 
 #: src/ui/gui/psppire.ui:2247
 msgid "Sample Size"
@@ -6619,9 +5902,8 @@ msgid "_Ties..."
 msgstr "Vínculos..."
 
 #: src/ui/gui/rank.ui:346
-#, fuzzy
 msgid "Rank Cases: Types"
-msgstr "Rango de Casos"
+msgstr "Rango de casos: Tipos"
 
 #: src/ui/gui/rank.ui:366
 msgid "Sum of case weights"
@@ -6676,9 +5958,8 @@ msgid "Proportion Estimation Formula"
 msgstr "Fórmula de estimación de Proporciones"
 
 #: src/ui/gui/rank.ui:625
-#, fuzzy
 msgid "Rank Cases: Ties"
-msgstr "Rango de Casos"
+msgstr "Rango de casos: Vínculos"
 
 #: src/ui/gui/rank.ui:651
 msgid "_Mean"
@@ -6701,9 +5982,8 @@ msgid "Rank Assigned to Ties"
 msgstr "Rango asignado a empates"
 
 #: src/ui/gui/sort.ui:8
-#, fuzzy
 msgid "Sort Cases"
-msgstr "Ordenar Caso_s"
+msgstr "Ordenar Casos"
 
 #: src/ui/gui/sort.ui:79
 msgid "Sort by:"
@@ -6722,9 +6002,8 @@ msgid "System Missing"
 msgstr "Perdido del Sistema"
 
 #: src/ui/gui/recode.ui:199
-#, fuzzy
 msgid "System or User Missing"
-msgstr "Perdido de sistema o de usuario"
+msgstr "Perdido de Sistema o de Usuario"
 
 #: src/ui/gui/recode.ui:237
 msgid "through"
@@ -6807,9 +6086,8 @@ msgid "Independent"
 msgstr "Independiente"
 
 #: src/ui/gui/regression.ui:236
-#, fuzzy
 msgid "Regression: Save"
-msgstr "Regresión"
+msgstr "Regresión: Guardar"
 
 #: src/ui/gui/regression.ui:250
 msgid "Predicted values"
@@ -6820,9 +6098,8 @@ msgid "Residuals"
 msgstr "Residuales"
 
 #: src/ui/gui/regression.ui:298
-#, fuzzy
 msgid "Regression: Statistics"
-msgstr "Pruebas Estadísticas"
+msgstr "Regresión: Estadísticos"
 
 #: src/ui/gui/reliability.ui:27
 msgid "Reliability Analysis"
@@ -6841,43 +6118,36 @@ msgid "Variables in first split:"
 msgstr "Variables a primera división:"
 
 #: src/ui/gui/roc.ui:115
-#, fuzzy
 msgid "_Test Variable:"
-msgstr "Variable(s) de contraste:"
+msgstr "Variable de prueba:"
 
 #: src/ui/gui/roc.ui:147
-#, fuzzy
 msgid "_State Variable:"
-msgstr "Nombre de Variable:"
+msgstr "Variable de Estado:"
 
 #: src/ui/gui/roc.ui:172
-#, fuzzy
 msgid "_Value of state variable:"
-msgstr "Utilizar variable de filtro"
+msgstr "_Valor de la variable de estado:"
 
 #: src/ui/gui/roc.ui:209
-#, fuzzy
 msgid "ROC C_urve"
 msgstr "Curva ROC"
 
 #: src/ui/gui/roc.ui:227
 msgid "_With diagonal reference line"
-msgstr ""
+msgstr "Con línea de referencia diagonal"
 
 #: src/ui/gui/roc.ui:251
-#, fuzzy
 msgid "Standard _Error and Confidence Interval"
-msgstr "Intervalo de Confianza del 95%%"
+msgstr "_Error típico y Intervalo de Confianza"
 
 #: src/ui/gui/roc.ui:266
-#, fuzzy
 msgid "_Coordinate points of the ROC Curve"
-msgstr "Coordenadas de la Curva"
+msgstr "_Coordenadas de la Curva ROC"
 
 #: src/ui/gui/t-test.ui:8
-#, fuzzy
 msgid "Independent-Samples T Test"
-msgstr "Prueba T para muestras _Independientes"
+msgstr "Prueba T para muestras Independientes"
 
 #: src/ui/gui/t-test.ui:54 src/ui/gui/t-test.ui:175 src/ui/gui/t-test.ui:231
 msgid "Define Groups"
@@ -6900,9 +6170,8 @@ msgid "_Use specified values:"
 msgstr "Utiliza valores especificados:"
 
 #: src/ui/gui/t-test.ui:420
-#, fuzzy
 msgid "Options"
-msgstr "Opciones:"
+msgstr "Opciones"
 
 #: src/ui/gui/t-test.ui:452
 msgid "Exclude cases _analysis by analysis"
@@ -6913,7 +6182,6 @@ msgid "Exclude cases _listwise"
 msgstr "Excluir casos según _lista"
 
 #: src/ui/gui/t-test.ui:529
-#, fuzzy
 msgid "One - Sample T Test"
 msgstr "Prueba T para una muestra"
 
@@ -6922,9 +6190,8 @@ msgid "Test Value: "
 msgstr "Valor de Contraste: "
 
 #: src/ui/gui/t-test.ui:704
-#, fuzzy
 msgid "Paired Samples T Test"
-msgstr "Prueba T para muestras Em_parejadas"
+msgstr "Prueba T para muestras Emparejadas"
 
 #: src/ui/gui/text-data-import.ui:8
 msgid "Importing Textual Data"
@@ -6932,21 +6199,13 @@ msgstr "Importando datos textuales"
 
 #: src/ui/gui/text-data-import.ui:19
 msgid ""
-"This assistant will guide you through the process of importing data into "
-"PSPP from a text file with one line per case,  in which fields are separated "
-"by tabs, commas, or other delimiters.\n"
+"This assistant will guide you through the process of importing data into PSPP from a text file with one line per case,  in which fields are separated by tabs, commas, or other delimiters.\n"
 "\n"
-"The selected file contains N lines of text.  Only the first M of these will "
-"be shown for preview purposes in the following screens.  You may choose "
-"below how much of the file should actually be imported."
+"The selected file contains N lines of text.  Only the first M of these will be shown for preview purposes in the following screens.  You may choose below how much of the file should actually be imported."
 msgstr ""
-"Este asistente te quiará a lo largo del proceso de importar datos al PSPP "
-"desde un archivo de texto con una línea por caso,  en el cual los campos "
-"están separados por tabuladores, comas, u otros delimitadores.\n"
+"Este asistente te quiará a lo largo del proceso de importar datos al PSPP desde un archivo de texto con una línea por caso,  en el cual los campos están separados por tabuladores, comas, u otros delimitadores.\n"
 "\n"
-"El archivo seleccionado contiene N líneas de texto.  Solo las primeras M se "
-"mostrarán como previsualización en las pantallas siguientes.  Puedes escoger "
-"a continuación qué parte del archivo ha de ser importado."
+"El archivo seleccionado contiene N líneas de texto.  Solo las primeras M se mostrarán como previsualización en las pantallas siguientes.  Puedes escoger a continuación qué parte del archivo ha de ser importado."
 
 #: src/ui/gui/text-data-import.ui:52
 msgid "All cases"
@@ -6978,8 +6237,7 @@ msgstr "Seleccionar la primera línea del archivo que contiene datos."
 
 #: src/ui/gui/text-data-import.ui:241
 msgid "Line above selected line contains variable names"
-msgstr ""
-"La línea por encima de la seleccionada contiene los nombres de las variables"
+msgstr "La línea por encima de la seleccionada contiene los nombres de las variables"
 
 #: src/ui/gui/text-data-import.ui:259
 msgid "Choose Separators"
@@ -7050,13 +6308,8 @@ msgid "Adjust Variable Formats"
 msgstr "Ajustar formato de variables"
 
 #: src/ui/gui/text-data-import.ui:618
-msgid ""
-"Check the data formats displayed below and fix any that are incorrect.  You "
-"may set other variable properties now or later."
-msgstr ""
-"Comprueba los formatos de los datos mostrados a continuación y corrige los "
-"problemas.  Se pueden asignar propiedades de las variables ahora o más "
-"adelante."
+msgid "Check the data formats displayed below and fix any that are incorrect.  You may set other variable properties now or later."
+msgstr "Comprueba los formatos de los datos mostrados a continuación y corrige los problemas.  Se pueden asignar propiedades de las variables ahora o más adelante."
 
 #: src/ui/gui/text-data-import.ui:662
 msgid "<b>Variables</b>"
@@ -7208,9 +6461,8 @@ msgid "Go To Case"
 msgstr "Ir al Caso"
 
 #: src/ui/gui/data-editor.ui:134
-#, fuzzy
 msgid "Jump to a case in the data sheet"
-msgstr "Ir a un caso en la Matriz de Datos"
+msgstr "Ir a un caso en la matriz de datos"
 
 #: src/ui/gui/data-editor.ui:160
 msgid "Cl_ear Variables"
@@ -7357,14 +6609,12 @@ msgid "One Way _ANOVA"
 msgstr "_ANOVA de un factor"
 
 #: src/ui/gui/data-editor.ui:376
-#, fuzzy
 msgid "Bivariate _Correlation..."
-msgstr "Correlación de Spearman"
+msgstr "_Correlación Bivariada..."
 
 #: src/ui/gui/data-editor.ui:382
-#, fuzzy
 msgid "Factor _Analysis"
-msgstr "Lista de Factores:"
+msgstr "_Análisis Factorial"
 
 #: src/ui/gui/data-editor.ui:388
 msgid "Re_liability"
@@ -7387,7 +6637,6 @@ msgid "_Binomial"
 msgstr "_Binomial"
 
 #: src/ui/gui/data-editor.ui:418
-#, fuzzy
 msgid "ROC Cur_ve..."
 msgstr "Curva ROC"
 
@@ -7442,9 +6691,8 @@ msgid "Split File Status Area"
 msgstr "Área de División de Archivo"
 
 #: src/ui/gui/output-viewer.ui:22
-#, fuzzy
 msgid "_Export"
-msgstr "_Explorar"
+msgstr "_Exportar"
 
 #: src/ui/gui/syntax-editor.ui:100
 msgid "_Run"
@@ -7466,15 +6714,6 @@ msgstr "Línea actual"
 msgid "To End"
 msgstr "Hasta el final"
 
-#~ msgid "Dependent variable must be numeric."
-#~ msgstr "La variable dependiente debe ser numérica."
-
-#~ msgid "Variable %s has label of invalid length %zu."
-#~ msgstr "Variable %s tiene una etiqueta de longitud no válida %zu."
-
-#~ msgid "_About"
-#~ msgstr "Sobre..."
-
 #~ msgid "Buttons"
 #~ msgstr "Botones"
 
@@ -7499,6 +6738,9 @@ msgstr "Hasta el final"
 #~ msgid "...not found"
 #~ msgstr "...no se encuentra"
 
+#~ msgid "Variable %s has label of invalid length %zu."
+#~ msgstr "Variable %s tiene una etiqueta de longitud no válida %zu."
+
 #~ msgid "little-endian"
 #~ msgstr "little-endian"
 
@@ -7589,27 +6831,20 @@ msgstr "Hasta el final"
 #~ msgid "unexpected end of line expecting string"
 #~ msgstr "final de línea inesperado cuando se esperaba una cadena"
 
-#~ msgid ""
-#~ "ascii: bad index value for `box' key: syntax is box[INDEX], 0 <= INDEX < %"
-#~ "d decimal, with INDEX expressed in base 4"
-#~ msgstr ""
-#~ "ascii: índice de valor defectuoso para la clave `box' : la sintaxis es la "
-#~ "box[INDEX], 0 <= INDEX < %d decimal, con INDEX expresado en base 4"
+#~ msgid "ascii: bad index value for `box' key: syntax is box[INDEX], 0 <= INDEX < %d decimal, with INDEX expressed in base 4"
+#~ msgstr "ascii: índice de valor defectuoso para la clave `box' : la sintaxis es la box[INDEX], 0 <= INDEX < %d decimal, con INDEX expresado en base 4"
 
 #~ msgid "ascii: multiple values for %s"
 #~ msgstr "ascii: valores múltiples para %s"
 
 #~ msgid "ascii: only screen devices may have `auto' length or width"
-#~ msgstr ""
-#~ "ascii: únicamente los dispositivos de pantalla pueden tener largo o ancho "
-#~ "`auto'"
+#~ msgstr "ascii: únicamente los dispositivos de pantalla pueden tener largo o ancho `auto'"
 
 #~ msgid "ascii: positive integer required as `%s' value"
 #~ msgstr "ascii: entero positivo requerido como valor `%s'"
 
 #~ msgid "ascii: `emphasis' value must be `bold', `underline', or `none'"
-#~ msgstr ""
-#~ "ascii: el valor de `emphasis' tiene que ser `bold', `underline', o `none'"
+#~ msgstr "ascii: el valor de `emphasis' tiene que ser `bold', `underline', o `none'"
 
 #~ msgid "ascii: zero or positive integer required as `%s' value"
 #~ msgstr "ascii: cero o entero positivo requerido como valor `%s'"
@@ -7627,9 +6862,7 @@ msgstr "Hasta el final"
 #~ msgstr "abriendo archivo de resultado HTML: %s"
 
 #~ msgid "unknown configuration parameter `%s' for HTML device driver"
-#~ msgstr ""
-#~ "parámetro de configuración `%s' desconocido para el dispositivo "
-#~ "controlador HTML"
+#~ msgstr "parámetro de configuración `%s' desconocido para el dispositivo controlador HTML"
 
 #~ msgid "error creating \"%s\""
 #~ msgstr "error en crear \"%s\""
@@ -7643,11 +6876,8 @@ msgstr "Hasta el final"
 #~ msgid "using default output driver configuration"
 #~ msgstr "utilizando driver de configuración de resultados por defecto"
 
-#~ msgid ""
-#~ "cannot find output initialization file (use `-vv' to view search path)"
-#~ msgstr ""
-#~ "no se puede encontrar el archivo de inicialización de resultados "
-#~ "(utilizar `-vv' para ver la ruta de búsqueda)"
+#~ msgid "cannot find output initialization file (use `-vv' to view search path)"
+#~ msgstr "no se puede encontrar el archivo de inicialización de resultados (utilizar `-vv' para ver la ruta de búsqueda)"
 
 #~ msgid "cannot open \"%s\""
 #~ msgstr "no se puede abrir \"%s\""
@@ -7674,22 +6904,14 @@ msgstr "Hasta el final"
 #~ "Clases de controlador:\n"
 #~ "\t"
 
-#~ msgid ""
-#~ "reached end of options inside quoted string parsing options for \"%s\" "
-#~ "driver"
-#~ msgstr ""
-#~ "Llegado al final de opciones dentro de la cadena entre comillas "
-#~ "analitzando opciones para el controlador \"%s\""
+#~ msgid "reached end of options inside quoted string parsing options for \"%s\" driver"
+#~ msgstr "Llegado al final de opciones dentro de la cadena entre comillas analitzando opciones para el controlador \"%s\""
 
 #~ msgid "syntax error in string constant parsing options for \"%s\" driver"
-#~ msgstr ""
-#~ "error de sintaxis en una constante de cadena analizando opciones para el "
-#~ "controlador \"%s\""
+#~ msgstr "error de sintaxis en una constante de cadena analizando opciones para el controlador \"%s\""
 
 #~ msgid "syntax error expecting `=' parsing options for driver \"%s\""
-#~ msgstr ""
-#~ "error de sintaxis cuando se esperaba `=' analizando las opciones para el "
-#~ "controlador \"%s\""
+#~ msgstr "error de sintaxis cuando se esperaba `=' analizando las opciones para el controlador \"%s\""
 
 #~ msgid "unknown output driver class `%.*s'"
 #~ msgstr "controlador de salida de clase desconocida `%.*s'"
@@ -7701,9 +6923,7 @@ msgstr "Hasta el final"
 #~ msgstr "no puede inicializar el controlador de salida `%s' de la clase `%s'"
 
 #~ msgid "driver definition line missing driver name or class name"
-#~ msgstr ""
-#~ "línea de definición del controlador sin nombre del controlador o nombre "
-#~ "de la clase"
+#~ msgstr "línea de definición del controlador sin nombre del controlador o nombre de la clase"
 
 #~ msgid "opening PostScript output file \"%s\""
 #~ msgstr "abriendo el archivo de salida PostScript \"%s\""
@@ -7712,16 +6932,10 @@ msgstr "Hasta el final"
 #~ msgstr "cierre el archivo de salida PostScript \"%s\""
 
 #~ msgid "unknown configuration parameter `%s' for PostScript device driver"
-#~ msgstr ""
-#~ "parámetro de configuración desconocido`%s' para el controlador del "
-#~ "dispositivo PostScript"
+#~ msgstr "parámetro de configuración desconocido`%s' para el controlador del dispositivo PostScript"
 
-#~ msgid ""
-#~ "unknown orientation `%s' (valid orientations are `portrait' and "
-#~ "`landscape')"
-#~ msgstr ""
-#~ "orientación desconocida `%s' (las orientaciones válidas son `retrato' i "
-#~ "`paisaje')"
+#~ msgid "unknown orientation `%s' (valid orientations are `portrait' and `landscape')"
+#~ msgstr "orientación desconocida `%s' (las orientaciones válidas son `retrato' i `paisaje')"
 
 #~ msgid "boolean value expected for %s"
 #~ msgstr "valor booleano esperado para %s"
@@ -7729,11 +6943,8 @@ msgstr "Hasta el final"
 #~ msgid "positive integer value required for `%s'"
 #~ msgstr "valor entero positivo necesario para `%s'"
 
-#~ msgid ""
-#~ "default font size must be at least 1 point (value of 1000 for key `%s')"
-#~ msgstr ""
-#~ "la medida de carácter por defecto tiene que ser como mínimo 1 punto "
-#~ "(valor de 1000 por la clave `%s')"
+#~ msgid "default font size must be at least 1 point (value of 1000 for key `%s')"
+#~ msgstr "la medida de carácter por defecto tiene que ser como mínimo 1 punto (valor de 1000 por la clave `%s')"
 
 #~ msgid "could not find AFM file \"%s\""
 #~ msgstr "no se puede encontrar el archivo AFM \"%s\""
@@ -7762,11 +6973,8 @@ msgstr "Hasta el final"
 #~ msgid "creating \"%s\""
 #~ msgstr "creando \"%s\""
 
-#~ msgid ""
-#~ "set to `compatible' if you want output calculated from broken algorithms"
-#~ msgstr ""
-#~ "active `compatible' si quiere obtener resultados calculados a partir de "
-#~ "algoritmos rotos"
+#~ msgid "set to `compatible' if you want output calculated from broken algorithms"
+#~ msgstr "active `compatible' si quiere obtener resultados calculados a partir de algoritmos rotos"
 
 #~ msgid "Append DIR to include path"
 #~ msgstr "Adjuntar DIR en la ruta de inclusión"
@@ -7783,11 +6991,8 @@ msgstr "Hasta el final"
 #~ msgid "Don't allow some unsafe operations"
 #~ msgstr "No permite algunas operaciones inseguras"
 
-#~ msgid ""
-#~ "Set to `compatible' if you want only to accept SPSS compatible syntax"
-#~ msgstr ""
-#~ "Active `compatible' si únicamente quiere aceptar la sintaxis compatible "
-#~ "de SPSS"
+#~ msgid "Set to `compatible' if you want only to accept SPSS compatible syntax"
+#~ msgstr "Active `compatible' si únicamente quiere aceptar la sintaxis compatible de SPSS"
 
 #~ msgid "PSPP --- A program for statistical analysis"
 #~ msgstr "PSPP ---Un programa de análisis estadístico"
@@ -7805,9 +7010,7 @@ msgstr "Hasta el final"
 #~ msgstr "Opciones que afectan a la sintaxis y al comportamiento:"
 
 #~ msgid "Cannot open %s (%s). Writing errors to stdout instead.\n"
-#~ msgstr ""
-#~ "No se puede abrir %s (%s). Alternativamente, escribiendo errores a "
-#~ "stdout.\n"
+#~ msgstr "No se puede abrir %s (%s). Alternativamente, escribiendo errores a stdout.\n"
 
 #~ msgid "Terminating execution of syntax file due to error."
 #~ msgstr "Finalizando la ejecución del archivo de sintaxis debido a un error."
@@ -7819,13 +7022,10 @@ msgstr "Hasta el final"
 #~ msgstr "Enviar mensajes de error a FILE (anexa)"
 
 #~ msgid "Select output driver DEVICE and disable defaults"
-#~ msgstr ""
-#~ "Seleccionar el controlador de salida DEVICE y desactivar los valores por "
-#~ "defecto"
+#~ msgstr "Seleccionar el controlador de salida DEVICE y desactivar los valores por defecto"
 
 #~ msgid "Print a list of known driver classes, then exit"
-#~ msgstr ""
-#~ "Imprimir una lista de clases de controladores conocidos, después salir"
+#~ msgstr "Imprimir una lista de clases de controladores conocidos, después salir"
 
 #~ msgid "Start an interactive session"
 #~ msgstr "Inicio de una sesión interactiva"
@@ -7960,6 +7160,9 @@ msgstr "Hasta el final"
 #~ msgid "gtk-find"
 #~ msgstr "gtk-find"
 
+#~ msgid "_About"
+#~ msgstr "Sobre..."
+
 #~ msgid "Print"
 #~ msgstr "Imprimir"
 
@@ -7993,12 +7196,8 @@ msgstr "Hasta el final"
 #~ msgid "Messages Reported"
 #~ msgstr "Se han generado mensajes"
 
-#~ msgid ""
-#~ "The PSPP processor reported # errors.  The first # and last # are shown "
-#~ "below:"
-#~ msgstr ""
-#~ "El procesador de PSPP ha generado # errores.  Los # primeros y los # "
-#~ "últimos se muestran a continuación:"
+#~ msgid "The PSPP processor reported # errors.  The first # and last # are shown below:"
+#~ msgstr "El procesador de PSPP ha generado # errores.  Los # primeros y los # últimos se muestran a continuación:"
 
 #~ msgid "gtk-close"
 #~ msgstr "gtk-close"
@@ -8028,19 +7227,11 @@ msgstr "Hasta el final"
 #~ "Alpha\n"
 #~ "Dividido"
 
-#~ 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 ""
-#~ "Al menos se ha de declarar un tipo de entre BARCHART, HISTOGRAM o HBAR.  "
-#~ "Se asume HBAR.  (Argument values will be given precedence increasing "
-#~ "along the order given)."
+#~ 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 "Al menos se ha de declarar un tipo de entre BARCHART, HISTOGRAM o HBAR.  Se asume HBAR.  (Argument values will be given precedence increasing along the order given)."
 
 #~ msgid "Variable %s specified multiple times on VARIABLES subcommand."
-#~ msgstr ""
-#~ "La variable %s se ha especificado más de una vez en el subcomando "
-#~ "VARIABLES."
+#~ msgstr "La variable %s se ha especificado más de una vez en el subcomando VARIABLES."
 
 #~ msgid "Cum"
 #~ msgstr "Acum."
@@ -8051,6 +7242,9 @@ msgstr "Hasta el final"
 #~ msgid "Pct"
 #~ msgstr "Pct"
 
+#~ msgid "Dependent variable must be numeric."
+#~ msgstr "La variable dependiente debe ser numérica."
+
 #~ msgid "N of items"
 #~ msgstr "N de elementos"
 
@@ -8058,8 +7252,7 @@ msgstr "Hasta el final"
 #~ msgstr "Err.Est.Media"
 
 #~ msgid "`/FORMAT WEIGHT' specified, but weighting is not on."
-#~ msgstr ""
-#~ "`/FORMAT WEIGHT' especificado, pero la ponderación no está activada."
+#~ msgstr "`/FORMAT WEIGHT' especificado, pero la ponderación no está activada."
 
 #~ msgid "Line"
 #~ msgstr "Línea"
index 4d1fc8028f66932ac8395437c6c6c71c0bf7e769..81a88adae2f3b3436a6949619b9f6813eba48509 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -1,6 +1,6 @@
-# translation of pspp-0.7.5.po to Dutch
-# Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
-# This file is distributed under the same licence as the PSPP package.#
+# translation of pspp-0.7.6.po to Dutch
+# Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+# This file is distributed under the same licence as the PSPP package.
 #
 # Vertaalde woorden:
 #  Bad        = Foutief
 # Harry Thijssen <pspp@sjpaes.nl>, 2009, 2010.
 msgid ""
 msgstr ""
-"Project-Id-Version: pspp-0.7.5\n"
+"Project-Id-Version: pspp-0.7.6\n"
 "Report-Msgid-Bugs-To: pspp-dev@gnu.org\n"
-"POT-Creation-Date: 2010-05-21 16:40-0700\n"
-"PO-Revision-Date: 2010-05-25 23:08+0200\n"
+"POT-Creation-Date: 2010-10-16 13:02-0700\n"
+"PO-Revision-Date: 2010-10-06 22:27+0200\n"
 "Last-Translator: Harry Thijssen <pspp@sjpaes.nl>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
 "MIME-Version: 1.0\n"
@@ -40,6 +40,10 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
 "X-Generator: Lokalize 1.0\n"
 
+#: src/ui/gui/helper.c:194
+msgid "Sorry. The help system hasn't yet been implemented."
+msgstr "Sorry. Het hulp systeem is nog niet geïmplementeerd."
+
 #: src/ui/gui/psppire-buttonbox.c:275 src/ui/gui/psppire-buttonbox.c:437
 msgid "Continue"
 msgstr "Verder"
@@ -69,12 +73,12 @@ msgid "Paste"
 msgstr "Plak"
 
 #: src/ui/gui/psppire-dictview.c:466 src/language/dictionary/split-file.c:82
-#: src/language/dictionary/sys-file-info.c:150
-#: src/language/dictionary/sys-file-info.c:340
-#: src/language/dictionary/sys-file-info.c:664
+#: src/language/dictionary/sys-file-info.c:149
+#: src/language/dictionary/sys-file-info.c:339
+#: src/language/dictionary/sys-file-info.c:663
 #: src/language/stats/descriptives.c:881
-#: src/language/data-io/data-parser.c:649
-#: src/language/data-io/data-parser.c:688 src/language/data-io/print.c:403
+#: src/language/data-io/data-parser.c:682
+#: src/language/data-io/data-parser.c:721 src/language/data-io/print.c:403
 msgid "Variable"
 msgstr "Variabele"
 
@@ -89,13 +93,13 @@ msgstr "Var%d"
 
 #: src/data/any-reader.c:56
 #, c-format
-msgid "An error occurred while opening \"%s\": %s."
-msgstr "Fout opgetreden bij openen van \"%s\": %s."
+msgid "An error occurred while opening `%s': %s."
+msgstr "Fout opgetreden bij openen van '%s': %s."
 
 #: src/data/any-reader.c:101
 #, c-format
-msgid "\"%s\" is not a system or portable file."
-msgstr "\"%s\" is geen systeem of overdraagbaar bestand."
+msgid "`%s' is not a system or portable file."
+msgstr "'%s' is geen systeem of overdraagbaar bestand."
 
 #: src/data/any-reader.c:107 src/data/any-writer.c:63
 msgid "The inline file is not allowed here."
@@ -106,12 +110,12 @@ msgstr "Het inline-bestand is hier niet toegestaan."
 msgid "Month %d is not in acceptable range of 0 to 13."
 msgstr "Maand %d valt niet in het acceptabele bereik van 0 tot 13."
 
-#: src/data/calendar.c:89
+#: src/data/calendar.c:91
 #, c-format
 msgid "Day %d is not in acceptable range of 0 to 31."
 msgstr "Dag %d valt niet in het acceptabele bereik van 0 tot 31."
 
-#: src/data/calendar.c:96
+#: src/data/calendar.c:100
 #, c-format
 msgid "Date %04d-%d-%d is before the earliest acceptable date of 1582-10-15."
 msgstr "Datum %04d-%d-%d ligt voor de eerste acceptabele datum van 1582-10-15."
@@ -120,121 +124,137 @@ msgstr "Datum %04d-%d-%d ligt voor de eerste acceptabele datum van 1582-10-15."
 msgid "At least one case in the data read had a weight value that was user-missing, system-missing, zero, or negative.  These case(s) were ignored."
 msgstr "Tenminste een case in de gelezen gegevens heeft een gewichtwaarde 'user-missing, system-missing, zero, of negatief.  Deze case(s) zijn genegeerd."
 
-#: src/data/data-in.c:274 src/data/data-in.c:464
+#. TRANSLATORS: this fragment will be interpolated into messages in fh_lock()
+#. that identify types of files.
+#: src/data/csv-file-writer.c:152
+msgid "CSV file"
+msgstr "CSV bestand"
+
+#: src/data/csv-file-writer.c:161 src/data/sys-file-writer.c:218
+#, 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 systeembestand: %s."
+
+#: src/data/csv-file-writer.c:462
+#, c-format
+msgid "An I/O error occurred writing CSV file `%s'."
+msgstr "Een I/O fout is opgetreden tijdens het schrijven van systeembestand '%s'."
+
+#: src/data/data-in.c:172
+#, fuzzy, c-format
+msgid "Data is not valid as format %s: %s"
+msgstr "%s variabele %s heeft ongeldig %s opmaak %s."
+
+#: src/data/data-in.c:377 src/data/data-in.c:553
 msgid "Field contents are not numeric."
 msgstr "Veldinhoud is niet numeriek."
 
-#: src/data/data-in.c:276 src/data/data-in.c:466
+#: src/data/data-in.c:379 src/data/data-in.c:555
 msgid "Number followed by garbage."
 msgstr "Nummer gevolgd door rommel."
 
-#: src/data/data-in.c:287
+#: src/data/data-in.c:392
 msgid "Invalid numeric syntax."
 msgstr "Ongeldige numerieke syntax."
 
-#: src/data/data-in.c:296 src/data/data-in.c:479
+#: src/data/data-in.c:400 src/data/data-in.c:571
 msgid "Too-large number set to system-missing."
 msgstr "Te groot getal, is op system-missing gezet."
 
-#: src/data/data-in.c:301 src/data/data-in.c:484
+#: src/data/data-in.c:406 src/data/data-in.c:577
 msgid "Too-small number set to zero."
 msgstr "Te klein getal, is op nul gezet."
 
-#: src/data/data-in.c:327
+#: src/data/data-in.c:426
 msgid "All characters in field must be digits."
 msgstr "Alle tekens in veld moeten cijfers zijn."
 
-#: src/data/data-in.c:350
+#: src/data/data-in.c:445
 msgid "Unrecognized character in field."
 msgstr "Niet herkenbaar teken in veld."
 
-#: src/data/data-in.c:374 src/data/data-in.c:650
+#: src/data/data-in.c:466 src/data/data-in.c:729
 msgid "Field must have even length."
 msgstr "Veld moet een even lengte hebben."
 
-#: src/data/data-in.c:379 src/data/data-in.c:661
+#: src/data/data-in.c:468 src/data/data-in.c:732
 msgid "Field must contain only hex digits."
 msgstr "Veld mag alleen hexadecimale cijfers bevatten."
 
-#: src/data/data-in.c:700 src/data/data-in.c:747
+#: src/data/data-in.c:544
+#, fuzzy
+msgid "Invalid zoned decimal syntax."
+msgstr "Ongeldige numerieke syntax."
+
+#: src/data/data-in.c:644 src/data/data-in.c:650
+#, fuzzy
+msgid "Invalid syntax for P field."
+msgstr "Ongeldige numerieke syntax."
+
+#: src/data/data-in.c:768 src/data/data-in.c:814
 msgid "Syntax error in date field."
 msgstr "Syntaxfout in datumveld."
 
-#: src/data/data-in.c:716
+#: src/data/data-in.c:783
 #, c-format
 msgid "Day (%ld) must be between 1 and 31."
 msgstr "Dag (%ld) moet tussen 1 en 31 liggen."
 
-#: src/data/data-in.c:763
+#: src/data/data-in.c:828
 msgid "Delimiter expected between fields in date."
 msgstr "Veldscheider verwacht tussen velden in datum."
 
-#: src/data/data-in.c:837
+#: src/data/data-in.c:902
 msgid "Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names."
 msgstr "Niet-herkende maand opmaak.  Maanden mogen gespecificeerd zijn als Arabisch of Romeins numeriek of als tenminste de eerste 3 letters van hun Engelse naam."
 
-#: src/data/data-in.c:864
+#: src/data/data-in.c:929
 #, c-format
 msgid "Year (%ld) must be between 1582 and 19999."
 msgstr "Jaar (%ld) moet tussen 1582 en 19999 liggen."
 
-#: src/data/data-in.c:876
+#: src/data/data-in.c:940
 #, c-format
-msgid "Trailing garbage \"%.*s\" following date."
-msgstr "Afsluitende rommel \"%.*s\" achter datum."
+msgid "Trailing garbage `%.*s' following date."
+msgstr "Afsluitende rommel '%.*s' achter datum."
 
-#: src/data/data-in.c:892
+#: src/data/data-in.c:954
 msgid "Julian day must have exactly three digits."
 msgstr "Juliaanse datum moet bestaan uit precies 3 cijfers."
 
-#: src/data/data-in.c:897
+#: src/data/data-in.c:956
 #, 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:921
+#: src/data/data-in.c:980
 #, 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:941
+#: src/data/data-in.c:1001
 #, 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:954
+#: src/data/data-in.c:1013
 msgid "Delimiter expected between fields in time."
 msgstr "Veldscheider verwacht tussen velden in tijd."
 
-#: src/data/data-in.c:974
+#: src/data/data-in.c:1033
 #, 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:1014
+#: src/data/data-in.c:1071
 msgid "Unrecognized weekday name.  At least the first two letters of an English weekday name must be specified."
 msgstr "Niet-herkende weekdagnaam.  Tenminste de eerste 2 letters van een Engelse weekdagnaam moeten opgegeven worden."
 
-#: src/data/data-in.c:1152
+#: src/data/data-in.c:1197
 #, c-format
 msgid "`%c' expected in date field."
 msgstr "'%c' verwacht in datumveld."
 
-#: src/data/data-in.c:1193
-#, c-format
-msgid "column %d"
-msgstr "kolom %d"
-
-#: src/data/data-in.c:1195
-#, c-format
-msgid "columns %d-%d"
-msgstr "kolommen %d-%d"
-
-#: src/data/data-in.c:1199
-#, c-format
-msgid "%s field) "
-msgstr "%s veld) "
-
 #: src/data/data-out.c:481
 #, c-format
 msgid "Weekday number %f is not between 1 and 7."
@@ -257,26 +277,26 @@ msgstr "systeem"
 msgid "scratch"
 msgstr "scratch"
 
-#: src/data/dictionary.c:980
+#: src/data/dictionary.c:981
 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 "Op zijn minst een case in het gegevensbestand heeft een gewichtwaarde user-missing, system-missing, nul, of negatief.  Deze case(s) zijn genegeerd."
 
-#: src/data/dictionary.c:1283
+#: src/data/dictionary.c:1284
 #, c-format
 msgid "Truncating document line to %d bytes."
 msgstr "Documentregel afgekapt tot %d bytes."
 
-#: src/data/file-handle-def.c:462
+#: src/data/file-handle-def.c:471
 #, c-format
 msgid "Can't read from %s as a %s because it is already being read as a %s."
 msgstr "Kan niet lezen van %s als een %s omdat het al gelezen wordt als een %s."
 
-#: src/data/file-handle-def.c:466
+#: src/data/file-handle-def.c:475
 #, c-format
 msgid "Can't write to %s as a %s because it is already being written as a %s."
 msgstr "Kan niet schrijven naar %s als een %s omdat het al geschreven wordt als een %s."
 
-#: src/data/file-handle-def.c:473
+#: src/data/file-handle-def.c:482
 #, c-format
 msgid "Can't re-open %s as a %s."
 msgstr "Kan %s niet heropenen als een %s."
@@ -286,86 +306,86 @@ msgstr "Kan %s niet heropenen als een %s."
 msgid "Not opening pipe file `%s' because SAFER option set."
 msgstr "Pijpbestand '%s' wordt niet geopend omdat de SAFER optie is gezet."
 
-#: src/data/format.c:235
+#: src/data/format.c:314
 msgid "Input format"
 msgstr "Invoerindeling"
 
-#: src/data/format.c:235
+#: src/data/format.c:314
 msgid "Output format"
 msgstr "Uitvoerindeling"
 
-#: src/data/format.c:244
+#: src/data/format.c:323
 #, c-format
 msgid "Format %s may not be used for input."
 msgstr "Indeling %s mag niet gebruikt worden voor invoer."
 
-#: src/data/format.c:251
+#: src/data/format.c:330
 #, c-format
 msgid "%s specifies width %d, but %s requires an even width."
 msgstr "%s specificeert breedte %d, maar %s vereist een even breedte."
 
-#: src/data/format.c:260
+#: src/data/format.c:339
 #, c-format
 msgid "%s %s specifies width %d, but %s requires a width between %d and %d."
 msgstr "%s %s specificeert breedte %d, maar %s vereist een breedte tussen %d en %d."
 
-#: src/data/format.c:269
+#: src/data/format.c:348
 #, c-format
 msgid "%s %s specifies %d decimal place, but %s does not allow any decimals."
 msgid_plural "%s %s specifies %d decimal places, but %s does not allow any decimals."
 msgstr[0] "%s %s specificeert %d decimaal, maar %s staat geen decimalen toe."
 msgstr[1] "%s %s specificeert %d decimalen, maar %s staat geen decimalen toe."
 
-#: src/data/format.c:280
+#: src/data/format.c:359
 #, c-format
 msgid "%s %s specifies %d decimal place, but the given width allows at most %d decimals."
 msgid_plural "%s %s specifies %d decimal places, but the given width allows at most %d decimals."
 msgstr[0] "%s %s specificeert %d decimaal, maar de opgegeven breedte staat maximaal %d decimalen toe."
 msgstr[1] "%s %s specificeert %d decimalen, maar de opgegeven breedte staat maximaal %d decimalen toe."
 
-#: src/data/format.c:287
+#: src/data/format.c:366
 #, c-format
 msgid "%s %s specifies %d decimal place, but the given width does not allow for any decimals."
 msgid_plural "%s %s specifies %d decimal places, but the given width does not allow for any decimals."
 msgstr[0] "%s %s specificeert %d decimaal, maar de opgegeven breedte staat geen decimalen toe."
 msgstr[1] "%s %s specificeert %d decimalen, maar de opgegeven breedte staat geen decimalen toe."
 
-#: src/data/format.c:326
+#: src/data/format.c:405
 #, c-format
 msgid "%s variables are not compatible with %s format %s."
 msgstr "%s variabelen zijn niet overeenkomstig met %s opmaak %s."
 
-#: src/data/format.c:327 src/data/sys-file-reader.c:752
-#: src/ui/gui/psppire-var-store.c:628 src/ui/gui/psppire.ui:1960
+#: src/data/format.c:406 src/data/sys-file-reader.c:751
+#: src/ui/gui/psppire-var-store.c:628 src/ui/gui/compute.ui:503
 #: src/ui/gui/var-sheet-dialogs.ui:139
 msgid "String"
 msgstr "Tekenreeks"
 
-#: src/data/format.c:327 src/data/sys-file-reader.c:752
-#: src/ui/gui/psppire-var-store.c:621 src/ui/gui/psppire.ui:2040
+#: src/data/format.c:406 src/data/sys-file-reader.c:751
+#: src/ui/gui/psppire-var-store.c:621 src/ui/gui/compute.ui:584
 #: src/ui/gui/var-sheet-dialogs.ui:27
 msgid "Numeric"
 msgstr "Numeriek"
 
-#: src/data/format.c:328 src/data/sys-file-reader.c:1472
-#: src/data/sys-file-reader.c:1474 src/language/xforms/recode.c:493
-#: src/language/xforms/recode.c:494 src/language/xforms/recode.c:506
-#: src/language/xforms/recode.c:507
+#: src/data/format.c:407 src/data/sys-file-reader.c:1472
+#: src/data/sys-file-reader.c:1474 src/language/xforms/recode.c:496
+#: src/language/xforms/recode.c:497 src/language/xforms/recode.c:509
+#: src/language/xforms/recode.c:510
+#: src/language/dictionary/apply-dictionary.c:77
 #: src/language/dictionary/apply-dictionary.c:78
-#: src/language/dictionary/apply-dictionary.c:79
 msgid "numeric"
 msgstr "numeriek"
 
-#: src/data/format.c:328 src/data/sys-file-reader.c:1472
-#: src/data/sys-file-reader.c:1474 src/language/xforms/recode.c:493
-#: src/language/xforms/recode.c:494 src/language/xforms/recode.c:506
-#: src/language/xforms/recode.c:507
+#: src/data/format.c:407 src/data/sys-file-reader.c:1472
+#: src/data/sys-file-reader.c:1474 src/language/xforms/recode.c:496
+#: src/language/xforms/recode.c:497 src/language/xforms/recode.c:509
+#: src/language/xforms/recode.c:510
+#: src/language/dictionary/apply-dictionary.c:77
 #: src/language/dictionary/apply-dictionary.c:78
-#: src/language/dictionary/apply-dictionary.c:79
 msgid "string"
 msgstr "tekenreeks"
 
-#: src/data/format.c:346
+#: src/data/format.c:425
 #, c-format
 msgid "String variable with width %d is not compatible with format %s."
 msgstr "Tekenreeksvariabele met breedte %d is niet overeenkomstig met opmaaak %s."
@@ -376,13 +396,13 @@ msgstr "Ondersteuning voor Gnumeric-bestanden is niet gecompileerd in deze insta
 
 #: src/data/gnumeric-reader.c:364
 #, 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."
+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:384
 #, c-format
-msgid "Invalid cell range \"%s\""
-msgstr "Ongeldig celbereik \"%s\""
+msgid "Invalid cell range `%s'"
+msgstr "Ongeldig celbereik '%s'"
 
 #: src/data/gnumeric-reader.c:516 src/data/psql-reader.c:187
 #, c-format
@@ -391,212 +411,202 @@ msgstr "Kan geen variabelennaam creëren van %s"
 
 #: src/data/gnumeric-reader.c:528
 #, c-format
-msgid "Selected sheet or range of spreadsheet \"%s\" is empty."
-msgstr "Geselecteerd blad of bereik van werkblad \"%s\" is leeg."
-
-#: src/data/make-file.c:68
-#, c-format
-msgid "%s: Creating temporary file: %s."
-msgstr "%s: Aanmaken tijdelijk bestand: %s."
-
-#: src/data/make-file.c:110
-#, c-format
-msgid "%s: Creating file: %s."
-msgstr "%s: Aanmaken bestand: %s."
+msgid "Selected sheet or range of spreadsheet `%s' is empty."
+msgstr "Geselecteerd blad of bereik van werkblad '%s' is leeg."
 
-#: src/data/make-file.c:148
+#: src/data/make-file.c:71
 #, c-format
 msgid "Opening %s for writing: %s."
 msgstr "Openen %s voor schrijven: %s."
 
-#: src/data/make-file.c:157
+#: src/data/make-file.c:80
 #, c-format
 msgid "Opening stream for %s: %s."
 msgstr "Openen stream voor %s: %s."
 
-#: src/data/make-file.c:186
+#: src/data/make-file.c:109
 #, c-format
 msgid "Creating temporary file to replace %s: %s."
 msgstr "Aanmaken tijdelijk bestand voor het vervangen van %s: %s."
 
-#: src/data/make-file.c:197
+#: src/data/make-file.c:120
 #, c-format
 msgid "Creating temporary file %s: %s."
 msgstr "Aanmaken tijdelijk bestand %s: %s."
 
-#: src/data/make-file.c:209
+#: src/data/make-file.c:132
 #, c-format
 msgid "Opening stream for temporary file %s: %s."
 msgstr "Openen stream voor tijdelijk bestand %s: %s."
 
-#: src/data/make-file.c:250
+#: src/data/make-file.c:173
 #, c-format
 msgid "Replacing %s by %s: %s."
 msgstr "Vervangen %s door %s: %s."
 
-#: src/data/make-file.c:278
+#: src/data/make-file.c:201
 #, c-format
 msgid "Removing %s: %s."
 msgstr "Verwijderen %s: %s."
 
-#: src/data/por-file-reader.c:99
+#: src/data/por-file-reader.c:98
 #, c-format
 msgid "portable file %s corrupt at offset 0x%llx: "
 msgstr "overdraagbaar-bestand %s beschadigd op positie 0x%llx: "
 
-#: src/data/por-file-reader.c:128
+#: src/data/por-file-reader.c:129
 #, c-format
 msgid "reading portable file %s at offset 0x%llx: "
 msgstr "lezen overdraagbaar bestand %s op positie 0x%llx: "
 
-#: src/data/por-file-reader.c:156
+#: src/data/por-file-reader.c:159
 #, c-format
-msgid "Error closing portable file \"%s\": %s."
-msgstr "Fout bij het afsluiten van overdraagbaar bestand \"%s\": %s."
+msgid "Error closing portable file `%s': %s."
+msgstr "Fout bij het afsluiten van overdraagbaar bestand '%s': %s."
 
-#: src/data/por-file-reader.c:208
+#: src/data/por-file-reader.c:211
 msgid "unexpected end of file"
 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:267 src/data/por-file-writer.c:149
+#: src/data/por-file-reader.c:270 src/data/por-file-writer.c:148
 msgid "portable file"
 msgstr "overdraagbaar bestand"
 
-#: src/data/por-file-reader.c:275
+#: src/data/por-file-reader.c:278
 #, c-format
-msgid "An error occurred while opening \"%s\" for reading as a portable file: %s."
-msgstr "Fout opgetreden tijdens het openen van \"%s\" voor het lezen als overdraagbaar bestand: %s."
+msgid "An error occurred while opening `%s' for reading as a portable file: %s."
+msgstr "Fout opgetreden tijdens het openen van '%s' voor het lezen als overdraagbaar bestand: %s."
 
-#: src/data/por-file-reader.c:296
+#: src/data/por-file-reader.c:299
 msgid "Data record expected."
 msgstr "Gegevensrecord verwacht."
 
-#: src/data/por-file-reader.c:378
+#: src/data/por-file-reader.c:381
 msgid "Number expected."
 msgstr "Nummer verwacht."
 
-#: src/data/por-file-reader.c:406
+#: src/data/por-file-reader.c:409
 msgid "Missing numeric terminator."
 msgstr "Ontbrekende numerieke afsluiter."
 
-#: src/data/por-file-reader.c:429
+#: src/data/por-file-reader.c:432
 msgid "Invalid integer."
 msgstr "Ongeldige integer."
 
-#: src/data/por-file-reader.c:440 src/data/por-file-reader.c:460
+#: src/data/por-file-reader.c:443 src/data/por-file-reader.c:463
 #, c-format
 msgid "Bad string length %d."
 msgstr "Onjuiste tekenreekslengte %d."
 
-#: src/data/por-file-reader.c:523
+#: src/data/por-file-reader.c:526
 #, c-format
 msgid "%s: Not a portable file."
 msgstr "%s: Geen overdraagbaar bestand."
 
-#: src/data/por-file-reader.c:540
+#: src/data/por-file-reader.c:543
 #, c-format
 msgid "Unrecognized version code `%c'."
 msgstr "Niet-herkende versiecode '%c'."
 
-#: src/data/por-file-reader.c:549
+#: src/data/por-file-reader.c:552
 #, c-format
 msgid "Bad date string length %zu."
 msgstr "Onjuiste datum-tekenreekslengte %zu."
 
-#: src/data/por-file-reader.c:551
+#: src/data/por-file-reader.c:554
 #, c-format
 msgid "Bad time string length %zu."
 msgstr "Onjuiste tijd-tekenreekslengte %zu."
 
-#: src/data/por-file-reader.c:593
+#: src/data/por-file-reader.c:596
 #, c-format
 msgid "%s: Bad format specifier byte (%d).  Variable will be assigned a default format."
 msgstr "%s: Onjuist opmaakspecificatie byte (%d). Variabele krijgt een standaardopmaak."
 
-#: src/data/por-file-reader.c:614
+#: src/data/por-file-reader.c:617
 #, c-format
 msgid "Numeric variable %s has invalid format specifier %s."
 msgstr "Numerieke variabele %s heeft een ongeldig opmaakspecificatie %s."
 
-#: src/data/por-file-reader.c:618
+#: src/data/por-file-reader.c:621
 #, c-format
 msgid "String variable %s with width %d has invalid format specifier %s."
 msgstr "Tekenreeksvariabele %s met breedte %d heeft ongeldig opmaakspecificatie %s."
 
-#: src/data/por-file-reader.c:642
+#: src/data/por-file-reader.c:645
 msgid "Expected variable count record."
 msgstr "Variabelenteller record verwacht."
 
-#: src/data/por-file-reader.c:646
+#: src/data/por-file-reader.c:649
 #, c-format
 msgid "Invalid number of variables %d."
 msgstr "Ongeldig aantal variabelen %d."
 
-#: src/data/por-file-reader.c:655
+#: src/data/por-file-reader.c:658
 #, c-format
 msgid "Weight variable name (%s) truncated."
 msgstr "Wegingsvariabelennaam (%s) is afgekapt."
 
-#: src/data/por-file-reader.c:670
+#: src/data/por-file-reader.c:673
 msgid "Expected variable record."
 msgstr "Variabelenrecord verwacht."
 
-#: src/data/por-file-reader.c:674
+#: src/data/por-file-reader.c:677
 #, c-format
 msgid "Invalid variable width %d."
 msgstr "Ongeldige variabelenbreedte %d."
 
-#: src/data/por-file-reader.c:681
+#: src/data/por-file-reader.c:684
 #, c-format
 msgid "Invalid variable name `%s' in position %d."
 msgstr "Ongeldige variabelennaam '%s' op positie %d."
 
-#: src/data/por-file-reader.c:685 src/data/sys-file-reader.c:606
+#: src/data/por-file-reader.c:688 src/data/sys-file-reader.c:605
 #, c-format
 msgid "Bad width %d for variable %s."
 msgstr "Onjuiste breedte %d voor variabele %s."
 
-#: src/data/por-file-reader.c:700
+#: src/data/por-file-reader.c:703
 #, c-format
 msgid "Duplicate variable name %s in position %d."
 msgstr "Dubbele variabelennaam %s op positie %d."
 
-#: src/data/por-file-reader.c:701
+#: src/data/por-file-reader.c:704
 #, c-format
 msgid "Duplicate variable name %s in position %d renamed to %s."
 msgstr "Dubbele variabelennaam %s op positie %d is hernoemd naar %s."
 
-#: src/data/por-file-reader.c:750
+#: src/data/por-file-reader.c:753
 #, c-format
 msgid "Weighting variable %s not present in dictionary."
 msgstr "Wegingvariabele %s niet aanwezig in woordenboek."
 
-#: src/data/por-file-reader.c:794
+#: src/data/por-file-reader.c:797
 #, c-format
 msgid "Unknown variable %s while parsing value labels."
 msgstr "Onbekende variabele %s tijdens het ontleden van waardelabels."
 
-#: src/data/por-file-reader.c:797
+#: src/data/por-file-reader.c:800
 #, c-format
 msgid "Cannot assign value labels to %s and %s, which have different variable types."
 msgstr "Kan geen waardelabels toekennen aan %s en %s, die verschillende variabelentypes hebben."
 
-#: src/data/por-file-writer.c:141
+#: src/data/por-file-writer.c:140
 #, 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:161
+#: src/data/por-file-writer.c:160
 #, c-format
-msgid "Error opening \"%s\" for writing as a portable file: %s."
-msgstr "Fout tijdens openen \"%s\" voor het schrijven als een overdraagbaar bestand: %s."
+msgid "Error opening `%s' for writing as a portable file: %s."
+msgstr "Fout tijdens openen '%s' voor het schrijven als een overdraagbaar bestand: %s."
 
-#: src/data/por-file-writer.c:506
+#: src/data/por-file-writer.c:505
 #, c-format
-msgid "An I/O error occurred writing portable file \"%s\"."
-msgstr "Een I/O fout opgetreden tijdens het schrijven van overdraagbaar bestand \"%s\"."
+msgid "An I/O error occurred writing portable file `%s'."
+msgstr "Een I/O fout opgetreden tijdens het schrijven van overdraagbaar bestand '%s'."
 
 #: src/data/psql-reader.c:46
 msgid "Support for reading postgres databases was not compiled into this installation of PSPP"
@@ -620,13 +630,13 @@ msgstr "Postgres server is versie %s. Lezen van versies ouder dan 8.0 wordt niet
 msgid "Connection is unencrypted, but unencrypted connections have not been permitted."
 msgstr "Connectie is niet geëncrypt, maar niet geëncrypte connecties zijn niet toegestaan."
 
-#: src/data/psql-reader.c:322 src/data/psql-reader.c:347
-#: src/data/psql-reader.c:357
+#: src/data/psql-reader.c:321 src/data/psql-reader.c:346
+#: src/data/psql-reader.c:356
 #, c-format
 msgid "Error from psql source: %s."
 msgstr "Fout van psql source: %s."
 
-#: src/data/psql-reader.c:452
+#: src/data/psql-reader.c:451
 #, c-format
 msgid "Unsupported OID %d.  SYSMIS values will be inserted."
 msgstr "Niet ondersteunde OID %d. SYSMIS waarde wordt ingevoegd."
@@ -642,7 +652,16 @@ msgstr ""
 msgid "scratch file"
 msgstr "scratchbestand"
 
-#: src/data/settings.c:608
+#: src/data/settings.c:388
+msgid "MXWARNS set to zero.  No further warnings will be given even when potentially problematic situations are encountered."
+msgstr ""
+
+#: src/data/settings.c:395
+#, c-format
+msgid "Warnings re-enabled. %d warnings will be issued before aborting syntax processing."
+msgstr ""
+
+#: src/data/settings.c:639
 #, c-format
 msgid "%s: Custom currency string `%s' does not contain exactly three periods or commas (or it contains both)."
 msgstr "%s: Aangepaste munt-tekenreeks '%s' bevat niet exact drie punten of komma's (of het bevat beiden)."
@@ -651,201 +670,202 @@ msgstr "%s: Aangepaste munt-tekenreeks '%s' bevat niet exact drie punten of komm
 msgid "Variable suffix too large."
 msgstr "Variabelen-achtervoegsel te lang."
 
-#: src/data/sys-file-reader.c:226
+#: src/data/sys-file-reader.c:225
 #, c-format
 msgid "Recoded variable name duplicates an existing `%s' within system file."
 msgstr "Gehercodeerde variabelennaam dupliceert een bestaande '%s' binnen systeembestand."
 
 #. TRANSLATORS: this fragment will be interpolated into
 #. messages in fh_lock() that identify types of files.
-#: src/data/sys-file-reader.c:290 src/data/sys-file-writer.c:207
+#: src/data/sys-file-reader.c:289 src/data/sys-file-writer.c:206
 msgid "system file"
 msgstr "systeembestand"
 
-#: src/data/sys-file-reader.c:297
+#: src/data/sys-file-reader.c:296
 #, 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 systeembestand: %s."
+msgid "Error opening `%s' for reading as a system file: %s."
+msgstr "Fout bij het openen van '%s' voor het lezen als een systeembestand: %s."
 
-#: src/data/sys-file-reader.c:336 tests/dissect-sysfile.c:154
+#: src/data/sys-file-reader.c:335 tests/dissect-sysfile.c:155
 msgid "Misplaced type 4 record."
 msgstr "Verkeerd geplaatst type 4 record."
 
-#: src/data/sys-file-reader.c:347 tests/dissect-sysfile.c:165
+#: src/data/sys-file-reader.c:346 tests/dissect-sysfile.c:166
 #, c-format
 msgid "Unrecognized record type %d."
 msgstr "Niet-herkend recordtype %d."
 
-#: src/data/sys-file-reader.c:388
+#: src/data/sys-file-reader.c:387
 #, c-format
 msgid "File header claims %d variable positions but %d were read from file."
 msgstr "Bestandskop claimt %d variabelenposities maar er zijn er %d gelezen van het bestand."
 
-#: src/data/sys-file-reader.c:428
+#: src/data/sys-file-reader.c:427
 #, c-format
-msgid "Error closing system file \"%s\": %s."
-msgstr "Fout bij het sluiten van systeembestand \"%s\": %s."
+msgid "Error closing system file `%s': %s."
+msgstr "Fout bij het sluiten van systeembestand '%s': %s."
 
-#: src/data/sys-file-reader.c:493 src/data/sys-file-reader.c:503
-#: tests/dissect-sysfile.c:202 tests/dissect-sysfile.c:212
+#: src/data/sys-file-reader.c:492 src/data/sys-file-reader.c:502
+#: tests/dissect-sysfile.c:203 tests/dissect-sysfile.c:213
 msgid "This is not an SPSS system file."
 msgstr "Dit is geen SPSS-systeembestand."
 
-#: src/data/sys-file-reader.c:525 tests/dissect-sysfile.c:227
+#: src/data/sys-file-reader.c:524 tests/dissect-sysfile.c:228
 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:602
+#: src/data/sys-file-reader.c:598
+#, fuzzy, c-format
+msgid "Variable name begins with invalid character `%c'."
+msgstr "Variabele index %d niet in geldig bereik 1...%d."
+
+#: src/data/sys-file-reader.c:601
 #, c-format
 msgid "Invalid variable name `%s'."
 msgstr "Ongeldige variabelennaam '%s'."
 
-#: src/data/sys-file-reader.c:610
+#: src/data/sys-file-reader.c:609
 #, c-format
 msgid "Duplicate variable name `%s' within system file."
 msgstr "Dubbele variabelennaam '%s' binnen systeembestand."
 
-#: src/data/sys-file-reader.c:618 tests/dissect-sysfile.c:356
+#: src/data/sys-file-reader.c:617 tests/dissect-sysfile.c:357
 msgid "Variable label indicator field is not 0 or 1."
 msgstr "Variabelen-labelindicatorveld is niet 0 of 1."
 
-#: src/data/sys-file-reader.c:649 tests/dissect-sysfile.c:387
+#: src/data/sys-file-reader.c:648 tests/dissect-sysfile.c:388
 msgid "Numeric missing value indicator field is not -3, -2, 0, 1, 2, or 3."
 msgstr "Numeriek ontbrekende-waarde indicatorveld is niet -3, -2, 0, 1, 2, of 3."
 
-#: src/data/sys-file-reader.c:667 tests/dissect-sysfile.c:402
+#: src/data/sys-file-reader.c:666 tests/dissect-sysfile.c:403
 msgid "String missing value indicator field is not 0, 1, 2, or 3."
 msgstr "Tekenreeks ontbrekende-waarde indicatorveld is niet 0, 1, 2, of 3."
 
-#: src/data/sys-file-reader.c:699
+#: src/data/sys-file-reader.c:698
 msgid "Missing string continuation record."
 msgstr "Mis tekenreeks continuering record."
 
-#: src/data/sys-file-reader.c:733
+#: src/data/sys-file-reader.c:732
 #, c-format
 msgid "Unknown variable format %<PRIu8>."
 msgstr "Onbekend variabelenopmaak %<PRIu8>."
 
-#: src/data/sys-file-reader.c:751
+#: src/data/sys-file-reader.c:750
 #, c-format
 msgid "%s variable %s has invalid %s format %s."
 msgstr "%s variabele %s heeft ongeldig %s opmaak %s."
 
-#: src/data/sys-file-reader.c:754
+#: src/data/sys-file-reader.c:753
 msgid "print"
 msgstr "afdrukken"
 
-#: src/data/sys-file-reader.c:754
+#: src/data/sys-file-reader.c:753
 msgid "write"
 msgstr "schrijf"
 
-#: src/data/sys-file-reader.c:758
+#: src/data/sys-file-reader.c:757
 msgid "Suppressing further invalid format warnings."
 msgstr "Onderdrukt verdere ongeldig indelingswaarschuwingen."
 
-#: src/data/sys-file-reader.c:776
+#: src/data/sys-file-reader.c:775
 msgid "Weighting variable must be numeric."
 msgstr "Wegingvariabele moet numeriek zijn."
 
-#: src/data/sys-file-reader.c:790
+#: src/data/sys-file-reader.c:789
 msgid "Multiple type 6 (document) records."
 msgstr "Meerdere type 6 (document) records."
 
-#: src/data/sys-file-reader.c:794
+#: src/data/sys-file-reader.c:793
 #, c-format
 msgid "Number of document lines (%d) must be greater than 0."
 msgstr "Aantal documentregels (%d) moet groter dan 0 zijn."
 
-#: src/data/sys-file-reader.c:802
+#: src/data/sys-file-reader.c:801
 msgid "Document line contains null byte."
 msgstr "Documentregel bevat null byte."
 
-#: src/data/sys-file-reader.c:893
+#: src/data/sys-file-reader.c:892
 #, 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 "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:920 tests/dissect-sysfile.c:594
+#: src/data/sys-file-reader.c:919 tests/dissect-sysfile.c:595
 #, c-format
 msgid "Bad size (%zu) or count (%zu) field on record type 7, subtype 3."
 msgstr "Onjuiste lengte (%zu) of aantal (%zu) veld in recordtype 7, subtype 3."
 
-#: src/data/sys-file-reader.c:940
+#: src/data/sys-file-reader.c:939
 #, c-format
 msgid "Floating-point representation indicated by system file (%d) differs from expected (%d)."
 msgstr "Drijvende komma representatie aangegeven door systeembestand %d verschilt van verwachting (%d)."
 
-#: src/data/sys-file-reader.c:953 src/language/dictionary/sys-file-info.c:110
+#: src/data/sys-file-reader.c:952 src/language/dictionary/sys-file-info.c:109
 msgid "Little Endian"
 msgstr "Little Endian"
 
-#: src/data/sys-file-reader.c:953 src/language/dictionary/sys-file-info.c:109
+#: src/data/sys-file-reader.c:952 src/language/dictionary/sys-file-info.c:108
 msgid "Big Endian"
 msgstr "Big Endian"
 
-#: src/data/sys-file-reader.c:954
+#: src/data/sys-file-reader.c:953
 #, c-format
 msgid "Integer format indicated by system file (%s) differs from expected (%s)."
 msgstr "Integer indeling aangegeven door systeembestand (%s) verschilt van verwacht (%s)."
 
-#: src/data/sys-file-reader.c:1011 tests/dissect-sysfile.c:625
+#: src/data/sys-file-reader.c:1010 tests/dissect-sysfile.c:626
 #, c-format
 msgid "Bad size (%zu) or count (%zu) on extension 4."
 msgstr "Onjuiste lengte (%zu) of aantal (%zu) bij extensie 4."
 
-#: src/data/sys-file-reader.c:1015 src/data/sys-file-reader.c:1019
-#: src/data/sys-file-reader.c:1023 tests/dissect-sysfile.c:630
-#: tests/dissect-sysfile.c:635 tests/dissect-sysfile.c:640
+#: src/data/sys-file-reader.c:1014 src/data/sys-file-reader.c:1018
+#: src/data/sys-file-reader.c:1022 tests/dissect-sysfile.c:631
+#: tests/dissect-sysfile.c:636 tests/dissect-sysfile.c:641
 #, c-format
 msgid "File specifies unexpected value %g as %s."
 msgstr "Bestand specificeert onverwachte waarde %g als %s."
 
-#: src/data/sys-file-reader.c:1056
-#, c-format
-msgid "Missing space following 'C' at offset %zu in MRSETS record"
-msgstr ""
-
-#: src/data/sys-file-reader.c:1074 tests/dissect-sysfile.c:691
-#, c-format
-msgid "Missing space following 'E' at offset %zu in MRSETS record"
-msgstr ""
+#: src/data/sys-file-reader.c:1055 src/data/sys-file-reader.c:1073
+#: tests/dissect-sysfile.c:692
+#, fuzzy, c-format
+msgid "Missing space following `%c' at offset %zu in MRSETS record"
+msgstr "Dubbele variabelenaam %s op offset %zu in MRSETS record."
 
-#: src/data/sys-file-reader.c:1083 tests/dissect-sysfile.c:700
-#, c-format
-msgid "Unexpected label source value \"%s\" following 'E' at offset %zu in MRSETS record"
-msgstr ""
+#: src/data/sys-file-reader.c:1082 tests/dissect-sysfile.c:701
+#, fuzzy, c-format
+msgid "Unexpected label source value `%s' following `E' at offset %zu in MRSETS record"
+msgstr "Dubbele variabelenaam %s op offset %zu in MRSETS record."
 
-#: src/data/sys-file-reader.c:1089
+#: src/data/sys-file-reader.c:1088
 #, c-format
-msgid "Missing 'C', 'D', or 'E' at offset %zu in MRSETS record."
-msgstr ""
+msgid "Missing `C', `D', or `E' at offset %zu in MRSETS record."
+msgstr "Ontbrekende `C', `D', of `E' op offset %zu in MRSETS record."
 
-#: src/data/sys-file-reader.c:1118
+#: src/data/sys-file-reader.c:1117
 #, c-format
 msgid "Missing new-line parsing variable names at offset %zu in MRSETS record."
 msgstr ""
 
-#: src/data/sys-file-reader.c:1129
+#: src/data/sys-file-reader.c:1128
 #, c-format
 msgid "Duplicate variable name %s at offset %zu in MRSETS record."
 msgstr "Dubbele variabelenaam %s op offset %zu in MRSETS record."
 
-#: src/data/sys-file-reader.c:1142
+#: src/data/sys-file-reader.c:1141
 #, c-format
 msgid "MRSET %s contains both string and numeric variables."
 msgstr "MRSET %s bevat zowel tekenreeks als numerieke variabelen."
 
-#: src/data/sys-file-reader.c:1157
+#: src/data/sys-file-reader.c:1156
 #, c-format
 msgid "MRSET %s has only %zu variables."
 msgstr "MRSET %s heeft slechts %zu variabelen."
 
-#: src/data/sys-file-reader.c:1194 tests/dissect-sysfile.c:758
+#: src/data/sys-file-reader.c:1194 tests/dissect-sysfile.c:759
 #, c-format
 msgid "Bad size %zu on extension 11."
 msgstr "Onjuiste lengte %zu voor extensie 11."
 
-#: src/data/sys-file-reader.c:1206 tests/dissect-sysfile.c:770
+#: src/data/sys-file-reader.c:1206 tests/dissect-sysfile.c:771
 #, c-format
 msgid "Extension 11 has bad count %zu (for %zu variables)."
 msgstr "Extensie 11 heeft een foutief aantal %zu (voor %zu variabelen)."
@@ -890,7 +910,7 @@ msgstr "Erg lange-tekenreeks met breedte %ld heeft segment %d van breedte %d (ve
 msgid "Invalid number of labels: %d.  Ignoring labels."
 msgstr "Ongeldig aantal labels: %d. Labels worden genegeerd."
 
-#: src/data/sys-file-reader.c:1441 tests/dissect-sysfile.c:468
+#: src/data/sys-file-reader.c:1441 tests/dissect-sysfile.c:469
 msgid "Variable index record (type 4) does not immediately follow value label record (type 3) as it should."
 msgstr "Variabele index record (type 4) volgt niet onmiddellijk waardelabel record (type 3) zoals het moet."
 
@@ -916,8 +936,8 @@ msgstr "Dubbel waardelabel voor %g in %s."
 
 #: src/data/sys-file-reader.c:1505 src/data/sys-file-reader.c:1686
 #, c-format
-msgid "Duplicate value label for \"%.*s\" on %s."
-msgstr "Dubbel waardelabel voor \"%.*s\" in %s."
+msgid "Duplicate value label for `%.*s' on %s."
+msgstr "Dubbel waardelabel voor '%.*s' in %s."
 
 #: src/data/sys-file-reader.c:1543
 #, c-format
@@ -929,7 +949,7 @@ msgstr "Fout tijdens ontleden attribuut waarde %s[%d]"
 msgid "Attribute value %s[%d] is not quoted: %s"
 msgstr "Attribuut waarde %s[%d] is niet geciteerd: %s"
 
-#: src/data/sys-file-reader.c:1620 tests/dissect-sysfile.c:936
+#: src/data/sys-file-reader.c:1620 tests/dissect-sysfile.c:937
 #, c-format
 msgid "Variable name length in long string value label record (%d) exceeds %d-byte limit."
 msgstr ""
@@ -1012,29 +1032,24 @@ msgstr ""
 msgid "Expecting space at offset %zu following %zu-byte string."
 msgstr ""
 
-#: src/data/sys-file-reader.c:2347 tests/dissect-sysfile.c:1341
+#: src/data/sys-file-reader.c:2349 tests/dissect-sysfile.c:1356
 #, c-format
 msgid "System error: %s."
 msgstr "Systeemfout: %s."
 
-#: src/data/sys-file-reader.c:2349 tests/dissect-sysfile.c:1343
+#: src/data/sys-file-reader.c:2351 tests/dissect-sysfile.c:1358
 msgid "Unexpected end of file."
 msgstr "Onverwacht einde-bestand."
 
-#: src/data/sys-file-writer.c:180
+#: src/data/sys-file-writer.c:179
 #, c-format
 msgid "Unknown system file version %d. Treating as version %d."
 msgstr "Onbekende systeembestand versie %d. Behandeld als versie %d."
 
-#: src/data/sys-file-writer.c:219
+#: src/data/sys-file-writer.c:985
 #, 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 systeembestand: %s."
-
-#: src/data/sys-file-writer.c:989
-#, c-format
-msgid "An I/O error occurred writing system file \"%s\"."
-msgstr "Een I/O fout is opgetreden tijdens het schrijven van systeembestand \"%s\"."
+msgid "An I/O error occurred writing system file `%s'."
+msgstr "Een I/O fout is opgetreden tijdens het schrijven van systeembestand '%s'."
 
 #: src/data/variable.c:206
 #, c-format
@@ -1060,233 +1075,216 @@ msgstr "Variabelennaam %s overschrijdt de limiet van %d tekens."
 msgid "`%s' may not be used as a variable name because it is a reserved word."
 msgstr "'%s' mag niet gebruikt worden als variabelennaam omdat het een gereserveerd woord is."
 
-#: src/language/syntax-file.c:95
-#, c-format
-msgid "Opening `%s': %s."
-msgstr "Openen '%s': %s."
-
-#: src/language/syntax-file.c:109
+#: src/language/syntax-file.c:100
 #, c-format
 msgid "Reading `%s': %s."
 msgstr "Lezen '%s': %s."
 
-#: src/language/syntax-file.c:126
+#: src/language/syntax-file.c:117
 #, c-format
 msgid "Closing `%s': %s."
 msgstr "Sluiten '%s': %s."
 
-#: src/language/command.c:205 src/language/expressions/parse.c:1267
+#: src/language/syntax-file.c:138
+#, c-format
+msgid "Opening `%s': %s."
+msgstr "Openen '%s': %s."
+
+#: src/language/command.c:197 src/language/expressions/parse.c:1270
 #: src/language/utilities/set.q:213
 #, c-format
 msgid "%s is not yet implemented."
 msgstr "%s is nog niet geïmplementeerd."
 
-#: src/language/command.c:210
+#: src/language/command.c:202
 #, c-format
 msgid "%s may be used only in testing mode."
 msgstr "%s mag alleen in testmodus gebruikt worden."
 
-#: src/language/command.c:215
+#: src/language/command.c:207
 #, c-format
 msgid "%s may be used only in enhanced syntax mode."
 msgstr "%s mag alleen in uitgebreide syntaxmodus gebruikt worden."
 
-#: src/language/command.c:239
+#: src/language/command.c:231
 msgid "Error encountered while ERROR=STOP is effective."
 msgstr "Fout tegengekomen terwijl ERROR=STOP is actief."
 
-#: src/language/command.c:484
+#: src/language/command.c:476
 msgid "expecting command name"
 msgstr "opdrachtnaam verwacht"
 
-#: src/language/command.c:498
+#: src/language/command.c:490
 #, c-format
 msgid "Unknown command %s."
 msgstr "Onbekende opdracht %s."
 
-#: src/language/command.c:623
+#: src/language/command.c:615
 #, c-format
 msgid "%s is allowed only before the active file has been defined."
 msgstr "%s is alleen toegestaan voordat het actieve bestand is gedefinieerd."
 
-#: src/language/command.c:627
+#: src/language/command.c:619
 #, c-format
 msgid "%s is allowed only after the active file has been defined."
 msgstr "%s is alleen toegestaan nadat het actieve bestand is gedefinieerd."
 
-#: src/language/command.c:631
+#: src/language/command.c:623
 #, c-format
 msgid "%s is allowed only inside INPUT PROGRAM."
 msgstr "%s is alleen toegestaan binnen INPUT PROGRAM."
 
-#: src/language/command.c:635
+#: src/language/command.c:627
 #, c-format
 msgid "%s is allowed only inside FILE TYPE."
 msgstr "%s is alleen toegestaan binnen FILE TYPE."
 
-#: src/language/command.c:642
+#: src/language/command.c:634
 #, c-format
 msgid "%s is allowed only before the active file has been defined or inside INPUT PROGRAM."
 msgstr "%s is alleen toegestaan voordat het actieve bestand is gedefinieerd of binnen INPUT PROGRAMMA."
 
-#: src/language/command.c:646
+#: src/language/command.c:638
 #, c-format
 msgid "%s is allowed only before the active file has been defined or inside FILE TYPE."
 msgstr "%s is alleen toegestaan voordat het actieve bestand is gedefinieerd of binnen FILE TYPE."
 
-#: src/language/command.c:650
+#: src/language/command.c:642
 #, c-format
 msgid "%s is allowed only after the active file has been defined or inside INPUT PROGRAM."
 msgstr "%s is alleen toegestaan nadat het actieve bestand is gedefinieerd of binnen INPUT PROGRAMMA."
 
-#: src/language/command.c:654
+#: src/language/command.c:646
 #, c-format
 msgid "%s is allowed only after the active file has been defined or inside FILE TYPE."
 msgstr "%s is alleen toegestaan nadat het actieve bestand is gedefinieerd of binnen FILE TYPE."
 
-#: src/language/command.c:658
+#: src/language/command.c:650
 #, c-format
 msgid "%s is allowed only inside INPUT PROGRAM or inside FILE TYPE."
 msgstr "%s is alleen toegestaan binnen INPUT PROGRAM of binnen FILE TYPE."
 
-#: src/language/command.c:664
+#: src/language/command.c:656
 #, c-format
 msgid "%s is allowed only after the active file has been defined, inside INPUT PROGRAM, or inside FILE TYPE."
 msgstr "%s is alleen toegestaan nadat het actieve bestand is gedefinieerd, binnen INPUT PROGRAM of binnen FILE TYPE."
 
-#: src/language/command.c:669
+#: src/language/command.c:661
 #, c-format
 msgid "%s is allowed only before the active file has been defined, inside INPUT PROGRAM, or inside FILE TYPE."
 msgstr "%s is alleen toegestaan voordat het actieve bestand is gedefinieerd, binnen INPUT PROGRAM of binnen FILE TYPE."
 
-#: src/language/command.c:687 src/language/command.c:689
+#: src/language/command.c:679 src/language/command.c:681
 #, c-format
 msgid "%s is not allowed inside %s."
 msgstr "%s is niet toegestaan binnen %s."
 
-#: src/language/command.c:768 src/language/command.c:876
-#: src/language/utilities/permissions.c:98
+#: src/language/command.c:760 src/language/utilities/host.c:128
+#: src/language/utilities/permissions.c:101
 msgid "This command not allowed when the SAFER option is set."
 msgstr "Deze opdracht is niet toegestaan als de SAFER optie is gezet."
 
-#: src/language/command.c:780
+#: src/language/command.c:772
 #, c-format
 msgid "Error removing `%s': %s."
 msgstr "Fout bij verwijderen '%s': %s."
 
-#: src/language/command.c:830
-#, c-format
-msgid "Couldn't fork: %s."
-msgstr ""
-
-#: src/language/command.c:845
-msgid "Interactive shell not supported on this platform."
-msgstr "Interactieve-shell niet ondersteund op dit platform."
-
-#: src/language/command.c:857
-msgid "Command shell not supported on this platform."
-msgstr "Opdracht-shell niet ondersteund op dit platform."
-
-#: src/language/command.c:863
-#, c-format
-msgid "Error executing command: %s."
-msgstr "Fout tijdens uitvoeren opdracht: %s."
-
-#: src/language/lexer/lexer.c:284
+#: src/language/lexer/lexer.c:263
 #, c-format
 msgid "%s does not form a valid number."
 msgstr "%s vormt geen geldig nummer."
 
-#: src/language/lexer/lexer.c:390
+#: src/language/lexer/lexer.c:369
 #, c-format
 msgid "Bad character in input: `%s'."
 msgstr "Foutief teken in invoer: '%s'."
 
-#: src/language/lexer/lexer.c:427
+#: src/language/lexer/lexer.c:402
 #, 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:410
 #, c-format
 msgid "missing required subcommand %s"
 msgstr "mis vereiste subopdracht %s"
 
-#: src/language/lexer/lexer.c:464
-#, c-format
-msgid "Syntax error %s at %s."
-msgstr "Syntaxfout %s op %s."
+#: src/language/lexer/lexer.c:423
+#, fuzzy
+msgid "Syntax error at end of file"
+msgstr "Syntaxfout in datumveld."
 
-#: src/language/lexer/lexer.c:467
-#, c-format
-msgid "Syntax error at %s."
+#: src/language/lexer/lexer.c:425
+#, fuzzy
+msgid "Syntax error at end of command"
+msgstr "Syntaxfout in datumveld."
+
+#: src/language/lexer/lexer.c:429
+#, fuzzy, c-format
+msgid "Syntax error at `%s'"
 msgstr "Syntaxfout op %s."
 
-#: src/language/lexer/lexer.c:479 src/language/xforms/select-if.c:60
-#: src/language/stats/autorecode.c:144 src/language/data-io/print-space.c:73
+#: src/language/lexer/lexer.c:457 src/language/xforms/select-if.c:60
+#: src/language/stats/autorecode.c:161 src/language/stats/npar.c:310
+#: src/language/data-io/print-space.c:73
 msgid "expecting end of command"
 msgstr "verwacht einde-van-opdracht "
 
-#: src/language/lexer/lexer.c:601 src/language/lexer/lexer.c:618
+#: src/language/lexer/lexer.c:579 src/language/lexer/lexer.c:596
 #, c-format
 msgid "expecting `%s'"
 msgstr "verwacht '%s'"
 
-#: src/language/lexer/lexer.c:632
+#: src/language/lexer/lexer.c:610
 msgid "expecting string"
 msgstr "tekenreeks verwacht"
 
-#: src/language/lexer/lexer.c:646
+#: src/language/lexer/lexer.c:624
 msgid "expecting integer"
 msgstr "verwacht integer"
 
-#: src/language/lexer/lexer.c:659
+#: src/language/lexer/lexer.c:637
 msgid "expecting number"
 msgstr "nummer verwacht"
 
-#: src/language/lexer/lexer.c:671
+#: src/language/lexer/lexer.c:649
 msgid "expecting identifier"
 msgstr "verwacht herkenningsteken"
 
-#: src/language/lexer/lexer.c:1065
+#: src/language/lexer/lexer.c:1042
 msgid "binary"
 msgstr "binair"
 
-#: src/language/lexer/lexer.c:1070
+#: src/language/lexer/lexer.c:1047
 msgid "octal"
 msgstr "octaal"
 
-#: src/language/lexer/lexer.c:1075
+#: src/language/lexer/lexer.c:1052
 msgid "hex"
 msgstr "hexadecimaal"
 
-#: src/language/lexer/lexer.c:1085
+#: src/language/lexer/lexer.c:1062
 #, c-format
 msgid "String of %s digits has %zu characters, which is not a multiple of %d."
 msgstr "Tekenreeks van %s cijfers bestaat uit %zu tekens, dat geen meervoud van %d is."
 
-#: src/language/lexer/lexer.c:1114
+#: src/language/lexer/lexer.c:1091
 #, 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:1125
 msgid "Unterminated string constant."
 msgstr "Geen einde aan tekenreeksconstante."
 
-#: src/language/lexer/lexer.c:1202
+#: src/language/lexer/lexer.c:1179
 msgid "Unexpected end of file in string concatenation."
 msgstr "Onverwacht bestandseinde in tekenreeks samenvoeging."
 
-#: src/language/lexer/lexer.c:1210
+#: src/language/lexer/lexer.c:1187
 msgid "String expected following `+'."
 msgstr "Tekenreeks verwacht achter '+'."
 
-#: src/language/lexer/lexer.c:1223
-#, c-format
-msgid "String exceeds 255 characters in length (%zu characters)."
-msgstr "Tekenreeks overschrijdt de lengte van 255 tekens (%zu tekens)."
-
 #: src/language/lexer/format-parser.c:88
 msgid "expecting valid format specifier"
 msgstr "verwacht geldige indelingsspecificator"
@@ -1295,32 +1293,32 @@ msgstr "verwacht geldige indelingsspecificator"
 #: src/language/lexer/format-parser.c:126
 #: src/language/data-io/placement-parser.c:226
 #, c-format
-msgid "Unknown format type \"%s\"."
-msgstr "Onbekend opmaaktype \"%s\"."
+msgid "Unknown format type `%s'."
+msgstr "Onbekend opmaaktype '%s'."
 
 #: src/language/lexer/format-parser.c:121
 msgid "expecting format type"
 msgstr "verwacht opmaaktype"
 
-#: src/language/lexer/value-parser.c:60
+#: src/language/lexer/value-parser.c:64
 #, c-format
 msgid "Low end of range (%g) is below high end (%g).  The range will be treated as reversed."
 msgstr "Ondergrens van bereik (%g) is lager dan bovengrens (%g). Het bereik wordt behandeld als omgekeerd."
 
-#: src/language/lexer/value-parser.c:68
+#: src/language/lexer/value-parser.c:72
 #, c-format
 msgid "Ends of range are equal (%g)."
 msgstr "Eindes van bereik zijn gelijk (%g)."
 
-#: src/language/lexer/value-parser.c:76
+#: src/language/lexer/value-parser.c:80
 msgid "LO or LOWEST must be part of a range."
 msgstr "LO of LOWEST moet een onderdeel van een bereik zijn."
 
-#: src/language/lexer/value-parser.c:109
+#: src/language/lexer/value-parser.c:117
 msgid "System-missing value is not valid here."
 msgstr "System-missing waarde is hier niet geldig."
 
-#: src/language/lexer/value-parser.c:117
+#: src/language/lexer/value-parser.c:125
 msgid "expecting number or data string"
 msgstr "nummer of gegevenstekenreeks verwacht"
 
@@ -1390,17 +1388,17 @@ msgstr "Prefixen komen niet overeen in het gebruik van TO conventie."
 msgid "Bad bounds in use of TO convention."
 msgstr "Slechte grenzen in het gebruik van TO conventie."
 
-#: src/language/xforms/compute.c:149 src/language/xforms/compute.c:203
+#: src/language/xforms/compute.c:149 src/language/xforms/compute.c:204
 #, c-format
 msgid "When executing COMPUTE: SYSMIS is not a valid value as an index into vector %s."
 msgstr "Tijdens uitvoeren van COMPUTE: SYSMIS is geen geldige waarde als een index in vector %s."
 
-#: src/language/xforms/compute.c:153 src/language/xforms/compute.c:210
+#: src/language/xforms/compute.c:153 src/language/xforms/compute.c:211
 #, c-format
 msgid "When executing COMPUTE: %g is not a valid value as an index into vector %s."
 msgstr "Tijdens uitvoeren van COMPUTE: %g is geen geldige waarde als een index in vector %s."
 
-#: src/language/xforms/compute.c:353
+#: src/language/xforms/compute.c:355
 #, c-format
 msgid "There is no vector named %s."
 msgstr "Er is geen vector genaamd %s."
@@ -1418,38 +1416,38 @@ msgstr "De steekproef factor moet exclusief tussen 0 en 1 liggen."
 msgid "Cannot sample %d observations from a population of %d."
 msgstr "Kan niet %d observaties bemonsteren van een populatie van %d."
 
-#: src/language/xforms/recode.c:248
+#: src/language/xforms/recode.c:250
 msgid "Inconsistent target variable types.  Target variables must be all numeric or all string."
 msgstr "Inconsistent doelvariabelen-types.  Doelvariabelen moeten allemaal numeriek of allemaal tekenreeks zijn."
 
-#: src/language/xforms/recode.c:269
+#: src/language/xforms/recode.c:271
 msgid "CONVERT requires string input values and numeric output values."
 msgstr "CONVERT vereist tekenreeks invoerwaardes en numerieke uitvoerwaardes."
 
-#: src/language/xforms/recode.c:324
+#: src/language/xforms/recode.c:326
 msgid "THRU is not allowed with string variables."
 msgstr "THRU is niet toegestaan met tekenreeksvariabelen."
 
-#: src/language/xforms/recode.c:403
+#: src/language/xforms/recode.c:406
 msgid "expecting output value"
 msgstr "verwacht uitvoerwaarde"
 
-#: src/language/xforms/recode.c:460
+#: src/language/xforms/recode.c:463
 #, 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 "%zu variabel(en) kunnen niet gehercodeerd worden in %zu variabel(en).  Specificeer hetzelfde aantal variabelen als bron- en als doelvariabelen."
 
-#: src/language/xforms/recode.c:475
+#: src/language/xforms/recode.c:478
 #, 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 "Er is geen variabele genaamd %s.  (Alle tekenreeksvariabelen gespecificeerd bij INTO dienen al te bestaan.  Gebruik de STRING opdracht om een tekenreeks variabele aan te maken.)"
 
-#: src/language/xforms/recode.c:491
+#: src/language/xforms/recode.c:494
 #, c-format
 msgid "INTO is required with %s input values and %s output values."
 msgstr "INTO is vereist met %s invoerwaardes en %s uitvoerwaardes."
 
-#: src/language/xforms/recode.c:504
+#: src/language/xforms/recode.c:507
 #, c-format
 msgid "Type mismatch.  Cannot store %s data in %s variable %s."
 msgstr "Type fout. Kan %s gegevens niet in %s variabele %s opslaan."
@@ -1489,43 +1487,47 @@ msgstr "Deze opdracht mag niet volgen op ELSE in DO IF...END IF."
 msgid "Only one index clause may be specified."
 msgstr "Slechts een index clausule mag gespecificeerd worden."
 
-#: src/language/control/temporary.c:46
+#: src/language/control/temporary.c:45
 msgid "This command may only appear once between procedures and procedure-like commands."
 msgstr "Deze opdracht mag slechts 1 keer voorkomen tussen procedures en procedure-achtige opdrachten."
 
 #: src/language/control/repeat.c:172
 #, c-format
-msgid "Dummy variable name \"%s\" hides dictionary variable \"%s\"."
-msgstr "Dummy-variabelennaam \"%s\" verbergt woordenboekvariabele \"%s\"."
+msgid "Dummy variable name `%s' hides dictionary variable `%s'."
+msgstr "Dummy-variabelennaam '%s' verbergt woordenboekvariabele '%s'."
 
 #: src/language/control/repeat.c:177
 #, c-format
-msgid "Dummy variable name \"%s\" is given twice."
-msgstr "Dummy-variabelennaam \"%s\" is twee keer opgegeven."
+msgid "Dummy variable name `%s' is given twice."
+msgstr "Dummy-variabelennaam '%s' is twee keer opgegeven."
 
 #: src/language/control/repeat.c:223
 #, c-format
-msgid "Dummy variable \"%.*s\" had %d substitutions, so \"%.*s\" must also, but %d were specified."
-msgstr "Dummy variabele \"%.*s\" heeft %d vervangingen, dus \"%.*s\" moet dat ook, maar %d zijn er gespecificeerd."
+msgid "Dummy variable `%.*s' had %d substitutions, so `%.*s' must also, but %d were specified."
+msgstr "Dummy variabele '%.*s' heeft %d vervangingen, dus '%.*s' moet dat ook, maar %d zijn er gespecificeerd."
+
+#: src/language/control/repeat.c:310
+msgid "DO REPEAT without END REPEAT."
+msgstr ""
 
-#: src/language/control/repeat.c:335
+#: src/language/control/repeat.c:338
 msgid "DO REPEAT may not nest in compatibility mode."
 msgstr "DO REPEAT mag niet nesten in compatibiliteitsmodus."
 
-#: src/language/control/repeat.c:437
+#: src/language/control/repeat.c:440
 msgid "Ranges may only have integer bounds"
 msgstr "Bereiken mogen alleen integer grenzen hebben"
 
-#: src/language/control/repeat.c:446
+#: src/language/control/repeat.c:449
 #, c-format
 msgid "%g TO %g is an invalid range."
 msgstr "%g TO %g is een ongeldig bereik."
 
-#: src/language/control/repeat.c:481
+#: src/language/control/repeat.c:484
 msgid "String expected."
 msgstr "Tekenreeks verwacht."
 
-#: src/language/control/repeat.c:500
+#: src/language/control/repeat.c:503
 msgid "No matching DO REPEAT."
 msgstr "Geen overeenkomende DO REPEAT."
 
@@ -1534,15 +1536,24 @@ msgid "Attribute array index must be between 1 and 65535."
 msgstr "Attribuut tabel index moet minimaal 1 en maximaal 65535 zijn."
 
 #: src/language/dictionary/attributes.c:189
-msgid "expecting ATTRIBUTE= or DELETE="
-msgstr "verwacht ATTRIBUTE= of DELETE="
+#: src/language/data-io/get-data.c:314 src/language/data-io/get-data.c:352
+#: src/language/data-io/get.c:99 src/language/data-io/save-translate.c:118
+#: src/language/data-io/save-translate.c:135
+#: src/language/data-io/save-translate.c:148
+#: src/language/data-io/save-translate.c:194
+#: src/language/data-io/save-translate.c:208
+#: src/language/data-io/save-translate.c:226 src/language/data-io/save.c:216
+#: src/language/data-io/save.c:231 src/language/data-io/save.c:259
+#, c-format
+msgid "expecting %s or %s"
+msgstr "%s of %s verwacht"
 
-#: src/language/dictionary/apply-dictionary.c:75
+#: src/language/dictionary/apply-dictionary.c:74
 #, c-format
 msgid "Variable %s is %s in target file, but %s in source file."
 msgstr "Variabele %s is %s in doelbestand, maar %s in bronbestand."
 
-#: src/language/dictionary/apply-dictionary.c:115
+#: src/language/dictionary/apply-dictionary.c:114
 msgid "No matching variables found between the source and target files."
 msgstr "Geen overeenkomende variabelen gevonden tussen het bron- en het doelbestand."
 
@@ -1562,82 +1573,78 @@ msgstr "'(' verwacht na variabelenlijst."
 msgid "`)' expected after output format."
 msgstr "')' verwacht na uitvoerindeling."
 
-#: src/language/dictionary/missing-values.c:56
-#: src/language/stats/aggregate.c:459
-msgid "expecting `('"
-msgstr "'(' verwacht"
-
-#: src/language/dictionary/missing-values.c:72
+#: src/language/dictionary/missing-values.c:69
 #, c-format
 msgid "Cannot mix numeric variables (e.g. %s) and string variables (e.g. %s) within a single list."
 msgstr "Kan numerieke variabelen (b.v. %s) en tekenreeksvariabelen (b.v. %s) niet mixen binnen een enkele lijst."
 
-#: src/language/dictionary/missing-values.c:116
+#: src/language/dictionary/missing-values.c:113
 #, c-format
 msgid "Truncating missing value to maximum acceptable length (%d bytes)."
 msgstr "Afkappen ontbrekende-waarde naar maximale acceptabele lengte (%d bytes)."
 
-#: src/language/dictionary/missing-values.c:138
+#: src/language/dictionary/missing-values.c:135
 #, c-format
 msgid "Missing values provided are too long to assign to variable of width %d."
 msgstr "De opgegeven ontbrekende-waarde zijn te lang om toe te kennen aan een variabele van breedte %d."
 
-#: src/language/dictionary/modify-variables.c:92
+#: src/language/dictionary/modify-variables.c:91
 msgid "MODIFY VARS may not be used after TEMPORARY.  Temporary transformations will be made permanent."
 msgstr "MODIFY VARS mag niet gebruikt worden na TEMPORARY. Tijdelijke transformaties zullen permanent gemaakt worden."
 
-#: src/language/dictionary/modify-variables.c:114
-#: src/language/dictionary/modify-variables.c:177
+#: src/language/dictionary/modify-variables.c:113
+#: src/language/dictionary/modify-variables.c:176
+#: src/language/data-io/inpt-pgm.c:288
 #, c-format
 msgid "%s subcommand may be given at most once."
 msgstr "%s-subopdracht mag maximaal 1 keer gegeven worden."
 
-#: src/language/dictionary/modify-variables.c:137
+#: src/language/dictionary/modify-variables.c:136
 msgid "Cannot specify ALL after specifying a set of variables."
 msgstr "Kan niet ALL opgeven na het specificeren van een set van variabelen."
 
-#: src/language/dictionary/modify-variables.c:147
-#: src/language/dictionary/modify-variables.c:190
+#: src/language/dictionary/modify-variables.c:146
+#: src/language/dictionary/modify-variables.c:189
 #, c-format
 msgid "`(' expected on %s subcommand."
 msgstr "'(' verwacht in %s-subopdracht."
 
-#: src/language/dictionary/modify-variables.c:159
+#: src/language/dictionary/modify-variables.c:158
 msgid "`)' expected following variable names on REORDER subcommand."
 msgstr "')' verwacht achter variabelennamen in REORDER-subopdracht."
 
-#: src/language/dictionary/modify-variables.c:199
+#: src/language/dictionary/modify-variables.c:198
 msgid "`=' expected between lists of new and old variable names on RENAME subcommand."
 msgstr "'=' verwacht tussen lijst van nieuwe en oude variabelennamen in RENAME-subopdracht."
 
-#: src/language/dictionary/modify-variables.c:208
-#: src/language/dictionary/rename-variables.c:77
+#: src/language/dictionary/modify-variables.c:207
+#: src/language/dictionary/rename-variables.c:76
 #, c-format
 msgid "Differing number of variables in old name list (%zu) and in new name list (%zu)."
 msgstr "Verschillend aantal variabelen in oude naamlijst (%zu) en in de nieuwe naamlijst (%zu)."
 
-#: src/language/dictionary/modify-variables.c:219
+#: src/language/dictionary/modify-variables.c:218
 msgid "`)' expected after variable lists on RENAME subcommand."
 msgstr "')' verwacht na variabelenlijst in RENAME-subopdracht."
 
-#: src/language/dictionary/modify-variables.c:233
+#: src/language/dictionary/modify-variables.c:232
 msgid "KEEP subcommand may be given at most once.  It may not be given in conjunction with the DROP subcommand."
 msgstr "KEEP-subopdracht mag slechts eenmaal gegeven worden. Het mag niet gegeven worden in combinatie met de DROP-subopdracht."
 
-#: src/language/dictionary/modify-variables.c:276
+#: src/language/dictionary/modify-variables.c:275
 msgid "DROP subcommand may be given at most once.  It may not be given in conjunction with the KEEP subcommand."
 msgstr "DROP subopdracht mag slechts eenmaal gegeven worden. Het mag niet gegeven worden in combinatie met de KEEP-subopdracht."
 
-#: src/language/dictionary/modify-variables.c:302
+#: src/language/dictionary/modify-variables.c:301
 #, c-format
 msgid "Unrecognized subcommand name `%s'."
 msgstr "Niet-herkende subopdrachtnaam '%s'."
 
-#: src/language/dictionary/modify-variables.c:304
+#: src/language/dictionary/modify-variables.c:303
 msgid "Subcommand name expected."
 msgstr "Subopdrachtnaam verwacht."
 
-#: src/language/dictionary/modify-variables.c:312
+#: src/language/dictionary/modify-variables.c:311
 msgid "`/' or `.' expected."
 msgstr "'/' of '.' verwacht."
 
@@ -1737,10 +1744,10 @@ msgstr ""
 
 #: src/language/dictionary/mrsets.c:568
 #: src/language/dictionary/split-file.c:84
-#: src/language/dictionary/sys-file-info.c:344
-#: src/language/dictionary/sys-file-info.c:583
+#: src/language/dictionary/sys-file-info.c:343
+#: src/language/dictionary/sys-file-info.c:582
 #: src/ui/gui/psppire-var-sheet.c:538 src/ui/gui/psppire-var-store.c:836
-#: src/ui/gui/crosstabs.ui:292 src/ui/gui/psppire.ui:1924
+#: src/ui/gui/compute.ui:467 src/ui/gui/crosstabs.ui:292
 msgid "Label"
 msgstr "Label"
 
@@ -1787,260 +1794,256 @@ msgstr "Er bestaat al een variabele genaamd %s."
 msgid "Format type %s may not be used with a string variable."
 msgstr "Opmaaktype %s mag niet gebruikt worden met een tekenreeksvariabele."
 
-#: src/language/dictionary/rename-variables.c:49
+#: src/language/dictionary/rename-variables.c:48
 msgid "RENAME VARS may not be used after TEMPORARY.  Temporary transformations will be made permanent."
 msgstr "RENAME VARS mag niet gebruikt worden na TEMPORARY. Tijdelijke transformaties zullen permanent gemaakt worden."
 
-#: src/language/dictionary/rename-variables.c:59
+#: src/language/dictionary/rename-variables.c:58
 msgid "`(' expected."
 msgstr "'(' verwacht."
 
-#: src/language/dictionary/rename-variables.c:67
+#: src/language/dictionary/rename-variables.c:66
 msgid "`=' expected between lists of new and old variable names."
 msgstr "'=' verwacht tussen lijst met nieuwe en oude variabelennamen."
 
-#: src/language/dictionary/rename-variables.c:88
+#: src/language/dictionary/rename-variables.c:87
 msgid "`)' expected after variable names."
 msgstr "')' verwacht achter variabelennamen."
 
-#: src/language/dictionary/rename-variables.c:98
+#: src/language/dictionary/rename-variables.c:97
 #, c-format
 msgid "Renaming would duplicate variable name %s."
 msgstr "Hernoemen zou variabelennaam %s dupliceren."
 
 #: src/language/dictionary/split-file.c:83
-#: src/language/dictionary/sys-file-info.c:429
-#: src/language/dictionary/sys-file-info.c:582
-#: src/language/stats/crosstabs.q:1214 src/language/stats/crosstabs.q:1241
-#: src/language/stats/crosstabs.q:1264 src/language/stats/crosstabs.q:1289
+#: src/language/dictionary/sys-file-info.c:428
+#: src/language/dictionary/sys-file-info.c:581
+#: src/language/stats/reliability.c:758 src/language/stats/reliability.c:769
+#: src/language/stats/crosstabs.q:1206 src/language/stats/crosstabs.q:1233
+#: src/language/stats/crosstabs.q:1256 src/language/stats/crosstabs.q:1281
 #: src/language/stats/examine.q:1841 src/language/stats/frequencies.q:813
-#: src/language/stats/reliability.q:568 src/language/stats/reliability.q:579
 msgid "Value"
 msgstr "Waarde"
 
-#: src/language/dictionary/sys-file-info.c:95
+#: src/language/dictionary/sys-file-info.c:94
 msgid "File:"
 msgstr "Bestand:"
 
-#: src/language/dictionary/sys-file-info.c:97 src/ui/gui/psppire.ui:1862
+#: src/language/dictionary/sys-file-info.c:96 src/ui/gui/compute.ui:405
 #: src/ui/gui/recode.ui:859
 msgid "Label:"
 msgstr "Label:"
 
-#: src/language/dictionary/sys-file-info.c:101
+#: src/language/dictionary/sys-file-info.c:100
 msgid "No label."
 msgstr "Geen label."
 
-#: src/language/dictionary/sys-file-info.c:104
+#: src/language/dictionary/sys-file-info.c:103
 msgid "Created:"
 msgstr "Aangemaakt:"
 
-#: src/language/dictionary/sys-file-info.c:107
+#: src/language/dictionary/sys-file-info.c:106
 msgid "Integer Format:"
 msgstr "Integeropmaak"
 
-#: src/language/dictionary/sys-file-info.c:111
-#: src/language/dictionary/sys-file-info.c:119
-#: src/language/dictionary/sys-file-info.c:124
-#: src/language/dictionary/sys-file-info.c:143
+#: src/language/dictionary/sys-file-info.c:110
+#: src/language/dictionary/sys-file-info.c:118
+#: src/language/dictionary/sys-file-info.c:123
+#: src/language/dictionary/sys-file-info.c:142
 msgid "Unknown"
 msgstr "Onbekend"
 
-#: src/language/dictionary/sys-file-info.c:112
+#: src/language/dictionary/sys-file-info.c:111
 msgid "Real Format:"
 msgstr "Realopmaak:"
 
-#: src/language/dictionary/sys-file-info.c:114
+#: src/language/dictionary/sys-file-info.c:113
 msgid "IEEE 754 LE."
 msgstr "IEEE 754 LE."
 
-#: src/language/dictionary/sys-file-info.c:115
+#: src/language/dictionary/sys-file-info.c:114
 msgid "IEEE 754 BE."
 msgstr "IEEE 754 BE."
 
-#: src/language/dictionary/sys-file-info.c:116
+#: src/language/dictionary/sys-file-info.c:115
 msgid "VAX D."
 msgstr "VAX D."
 
-#: src/language/dictionary/sys-file-info.c:117
+#: src/language/dictionary/sys-file-info.c:116
 msgid "VAX G."
 msgstr "VAX G."
 
-#: src/language/dictionary/sys-file-info.c:118
+#: src/language/dictionary/sys-file-info.c:117
 msgid "IBM 390 Hex Long."
 msgstr "IBM 390 Hex Long."
 
-#: src/language/dictionary/sys-file-info.c:120 src/ui/gui/descriptives.ui:85
-#: src/ui/gui/factor.ui:173 src/ui/gui/recode.ui:960
+#: src/language/dictionary/sys-file-info.c:119 src/ui/gui/descriptives.ui:85
+#: src/ui/gui/factor.ui:181 src/ui/gui/recode.ui:960
 msgid "Variables:"
 msgstr "Variabelen:"
 
-#: src/language/dictionary/sys-file-info.c:122
+#: src/language/dictionary/sys-file-info.c:121
 msgid "Cases:"
 msgstr "Cases:"
 
-#: src/language/dictionary/sys-file-info.c:127
+#: src/language/dictionary/sys-file-info.c:126
 msgid "Type:"
 msgstr "Type:"
 
-#: src/language/dictionary/sys-file-info.c:128
-#: src/ui/gui/psppire-data-window.c:634
+#: src/language/dictionary/sys-file-info.c:127
+#: src/ui/gui/psppire-data-window.c:635
 msgid "System File"
 msgstr "Systeembestand"
 
-#: src/language/dictionary/sys-file-info.c:129
+#: src/language/dictionary/sys-file-info.c:128
 msgid "Weight:"
 msgstr "Gewicht:"
 
-#: src/language/dictionary/sys-file-info.c:134
+#: src/language/dictionary/sys-file-info.c:133
 msgid "Not weighted."
 msgstr "Niet gewogen."
 
-#: src/language/dictionary/sys-file-info.c:136
+#: src/language/dictionary/sys-file-info.c:135
 msgid "Mode:"
 msgstr "Modus:"
 
-#: src/language/dictionary/sys-file-info.c:138
+#: src/language/dictionary/sys-file-info.c:137
 #, c-format
 msgid "Compression %s."
 msgstr "Compressie %s."
 
-#: src/language/dictionary/sys-file-info.c:138
+#: src/language/dictionary/sys-file-info.c:137
 msgid "on"
 msgstr "aan"
 
-#: src/language/dictionary/sys-file-info.c:138
+#: src/language/dictionary/sys-file-info.c:137
 msgid "off"
 msgstr "uit"
 
-#: src/language/dictionary/sys-file-info.c:141
+#: src/language/dictionary/sys-file-info.c:140
 msgid "Charset:"
 msgstr "Tekenset:"
 
-#: src/language/dictionary/sys-file-info.c:151
-#: src/language/dictionary/sys-file-info.c:344
+#: src/language/dictionary/sys-file-info.c:150
+#: src/language/dictionary/sys-file-info.c:343
 msgid "Description"
 msgstr "Omschrijving"
 
-#: src/language/dictionary/sys-file-info.c:152
-#: src/language/dictionary/sys-file-info.c:346
-#: src/language/dictionary/sys-file-info.c:663
+#: src/language/dictionary/sys-file-info.c:151
+#: src/language/dictionary/sys-file-info.c:345
+#: src/language/dictionary/sys-file-info.c:662
 msgid "Position"
 msgstr "Positie"
 
-#: src/language/dictionary/sys-file-info.c:199
+#: src/language/dictionary/sys-file-info.c:198
 msgid "The active file does not have a file label."
 msgstr "Het actieve bestand heeft geen bestandlabel."
 
-#: src/language/dictionary/sys-file-info.c:202
+#: src/language/dictionary/sys-file-info.c:201
 msgid "File label:"
 msgstr "Bestandlabel:"
 
-#: src/language/dictionary/sys-file-info.c:277
+#: src/language/dictionary/sys-file-info.c:276
 msgid "No variables to display."
 msgstr "Geen variabelen om te tonen."
 
-#: src/language/dictionary/sys-file-info.c:291
+#: src/language/dictionary/sys-file-info.c:290
 msgid "Macros not supported."
 msgstr "Macro's worden niet ondersteund."
 
-#: src/language/dictionary/sys-file-info.c:300
+#: src/language/dictionary/sys-file-info.c:299
 msgid "The active file dictionary does not contain any documents."
 msgstr "Het actieve bestandwoordenboek bevat geen documenten."
 
-#: src/language/dictionary/sys-file-info.c:308
+#: src/language/dictionary/sys-file-info.c:307
 msgid "Documents in the active file:"
 msgstr "Documenten in het actieve bestand:"
 
-#: src/language/dictionary/sys-file-info.c:428
+#: src/language/dictionary/sys-file-info.c:427
 msgid "Attribute"
 msgstr "Attribuut"
 
-#: src/language/dictionary/sys-file-info.c:484
+#: src/language/dictionary/sys-file-info.c:483
 #, c-format
 msgid "Format: %s"
 msgstr "Indeling: %s"
 
-#: src/language/dictionary/sys-file-info.c:491
+#: src/language/dictionary/sys-file-info.c:490
 #, c-format
 msgid "Print Format: %s"
 msgstr "Afdrukindeling: %s"
 
-#: src/language/dictionary/sys-file-info.c:495
+#: src/language/dictionary/sys-file-info.c:494
 #, c-format
 msgid "Write Format: %s"
 msgstr "Schrijfindeling: %s"
 
-#: src/language/dictionary/sys-file-info.c:508
+#: src/language/dictionary/sys-file-info.c:507
 #, c-format
 msgid "Measure: %s"
 msgstr "Meting: %s"
 
-#: src/language/dictionary/sys-file-info.c:509
+#: src/language/dictionary/sys-file-info.c:508
 #: src/ui/gui/psppire-var-sheet.c:111
 msgid "Nominal"
 msgstr "Nominaal"
 
-#: src/language/dictionary/sys-file-info.c:510
+#: src/language/dictionary/sys-file-info.c:509
 #: src/ui/gui/psppire-var-sheet.c:112
 msgid "Ordinal"
 msgstr "Ordinaal"
 
-#: src/language/dictionary/sys-file-info.c:511
+#: src/language/dictionary/sys-file-info.c:510
 #: src/ui/gui/psppire-var-sheet.c:113
 msgid "Scale"
 msgstr "Schaal"
 
-#: src/language/dictionary/sys-file-info.c:514
+#: src/language/dictionary/sys-file-info.c:513
 #, c-format
 msgid "Display Alignment: %s"
 msgstr "Toongroepering: %s"
 
-#: src/language/dictionary/sys-file-info.c:515
+#: src/language/dictionary/sys-file-info.c:514
 #: src/ui/gui/psppire-var-sheet.c:104
 msgid "Left"
 msgstr "Links"
 
-#: src/language/dictionary/sys-file-info.c:516
+#: src/language/dictionary/sys-file-info.c:515
 #: src/ui/gui/psppire-var-sheet.c:106
 msgid "Center"
 msgstr "Centreer"
 
-#: src/language/dictionary/sys-file-info.c:517
+#: src/language/dictionary/sys-file-info.c:516
 #: src/ui/gui/psppire-var-sheet.c:105
 msgid "Right"
 msgstr "Rechts"
 
-#: src/language/dictionary/sys-file-info.c:520
+#: src/language/dictionary/sys-file-info.c:519
 #, c-format
 msgid "Display Width: %d"
 msgstr "Toonbreedte: %d"
 
-#: src/language/dictionary/sys-file-info.c:534
+#: src/language/dictionary/sys-file-info.c:533
 msgid "Missing Values: "
 msgstr "Ontbrekende waardes: "
 
-#: src/language/dictionary/sys-file-info.c:643
+#: src/language/dictionary/sys-file-info.c:642
 msgid "No vectors defined."
 msgstr "Geen vectoren gedefinieerd."
 
-#: src/language/dictionary/sys-file-info.c:662
+#: src/language/dictionary/sys-file-info.c:661
 msgid "Vector"
 msgstr "Vector"
 
-#: src/language/dictionary/sys-file-info.c:665
+#: src/language/dictionary/sys-file-info.c:664
 msgid "Print Format"
 msgstr "Afdrukindeling"
 
-#: src/language/dictionary/value-labels.c:150
+#: src/language/dictionary/value-labels.c:149
 msgid "Truncating value label to 60 characters."
 msgstr "Waardelabel is afgekapt tot 60 tekens."
 
-#: src/language/dictionary/variable-label.c:51
-msgid "String expected for variable label."
-msgstr "Tekenreeks verwacht voor variabelenlabel."
-
-#: src/language/dictionary/variable-label.c:59
+#: src/language/dictionary/variable-label.c:58
 msgid "Truncating variable label to 255 characters."
 msgstr "Variabelenlabel is afgekapt tot 255 tekens."
 
@@ -2119,170 +2122,259 @@ msgstr "Kan map niet veranderen in %s: %s "
 msgid "Only USE ALL is currently implemented."
 msgstr "Alleen USE ALL is op dit moment geïmplementeerd."
 
+#: src/language/utilities/host.c:85
+#, c-format
+msgid "Couldn't fork: %s."
+msgstr ""
+
+#: src/language/utilities/host.c:100
+msgid "Interactive shell not supported on this platform."
+msgstr "Interactieve-shell niet ondersteund op dit platform."
+
+#: src/language/utilities/host.c:112
+msgid "Command shell not supported on this platform."
+msgstr "Opdracht-shell niet ondersteund op dit platform."
+
+#: src/language/utilities/host.c:118
+#, c-format
+msgid "Error executing command: %s."
+msgstr "Fout tijdens uitvoeren opdracht: %s."
+
 #: src/language/utilities/title.c:103
 #, c-format
 msgid "   (Entered %s)"
 msgstr "   (Ingevoerd %s)"
 
-#: src/language/utilities/include.c:95
-msgid "Expecting BATCH or INTERACTIVE after SYNTAX."
-msgstr "BATCH of INTERACTIVE verwacht na SYNTAX."
-
-#: src/language/utilities/include.c:112
-msgid "Expecting YES or NO after CD."
-msgstr "YES of NO verwacht na CD."
-
-#: src/language/utilities/include.c:129
-msgid "Expecting CONTINUE or STOP after ERROR."
-msgstr "CONTINUE of STOP verwacht na ERROR."
+#: src/language/utilities/include.c:94 src/language/utilities/include.c:112
+#: src/language/utilities/include.c:130
+#, fuzzy, c-format
+msgid "expecting %s or %s after %s"
+msgstr "%s of %s verwacht"
 
-#: src/language/utilities/include.c:136
+#: src/language/utilities/include.c:138
 #, c-format
 msgid "Unexpected token: `%s'."
 msgstr "Onverwacht symbool: '%s'."
 
-#: src/language/utilities/include.c:181
+#: src/language/utilities/include.c:183
 msgid "expecting file name"
 msgstr "bestandsnaam verwacht"
 
-#: src/language/utilities/include.c:193
+#: src/language/utilities/include.c:195
 #, c-format
 msgid "Can't find `%s' in include file search path."
 msgstr "Kan '%s' niet vinden in include-bestand zoekpad."
 
-#: src/language/utilities/include.c:201
+#: src/language/utilities/include.c:203
 #, c-format
 msgid "Unable to open `%s': %s."
 msgstr "Onmogelijk om te openen '%s': %s."
 
-#: src/language/utilities/permissions.c:73
+#: src/language/utilities/permissions.c:76
 #, c-format
 msgid "Expecting %s or %s."
 msgstr "Verwacht %s of %s."
 
-#: src/language/utilities/permissions.c:106
+#: src/language/utilities/permissions.c:109
 #, c-format
 msgid "Cannot stat %s: %s"
 msgstr ""
 
-#: src/language/utilities/permissions.c:119
+#: src/language/utilities/permissions.c:122
 #, c-format
 msgid "Cannot change mode of %s: %s"
 msgstr "Kan modus van %s niet veranderen: %s"
 
-#: src/language/stats/aggregate.c:220
-msgid "while expecting COLUMNWISE"
-msgstr "terwijl COLUMNWISE verwacht werd"
+#: src/language/stats/aggregate.c:94
+msgid "Sum of values"
+msgstr "Som van waardes"
+
+#: src/language/stats/aggregate.c:95
+msgid "Mean average"
+msgstr ""
+
+#: src/language/stats/aggregate.c:96
+msgid "Median average"
+msgstr "Mediaan gemiddelde"
+
+#: src/language/stats/aggregate.c:97 src/ui/gui/descriptives-dialog.c:41
+#: src/ui/gui/frequencies-dialog.c:42
+msgid "Standard deviation"
+msgstr "Standarddeviatie"
+
+#: src/language/stats/aggregate.c:98
+msgid "Maximum value"
+msgstr "Maximum waarde"
+
+#: src/language/stats/aggregate.c:99
+msgid "Minimum value"
+msgstr "Minimum waarde"
+
+#: src/language/stats/aggregate.c:100
+msgid "Percentage greater than"
+msgstr ""
+
+#: src/language/stats/aggregate.c:101
+msgid "Percentage less than"
+msgstr "Percentage kleiner dan"
+
+#: src/language/stats/aggregate.c:102
+msgid "Percentage included in range"
+msgstr ""
+
+#: src/language/stats/aggregate.c:103
+msgid "Percentage excluded from range"
+msgstr ""
+
+#: src/language/stats/aggregate.c:104
+msgid "Fraction greater than"
+msgstr ""
+
+#: src/language/stats/aggregate.c:105
+msgid "Fraction less than"
+msgstr "Fractie kleiner dan"
+
+#: src/language/stats/aggregate.c:106
+msgid "Fraction included in range"
+msgstr ""
+
+#: src/language/stats/aggregate.c:107
+msgid "Fraction excluded from range"
+msgstr ""
+
+#: src/language/stats/aggregate.c:108
+msgid "Number of cases"
+msgstr "Aantal cases"
 
-#: src/language/stats/aggregate.c:247
-msgid "expecting BREAK"
-msgstr "BREAK verwacht"
+#: src/language/stats/aggregate.c:109
+msgid "Number of cases (unweighted)"
+msgstr "Aantal cases (ongewogen)"
 
-#: src/language/stats/aggregate.c:252
+#: src/language/stats/aggregate.c:110
+msgid "Number of missing values"
+msgstr "Aantal missende waardes"
+
+#: src/language/stats/aggregate.c:111
+msgid "Number of missing values (unweighted)"
+msgstr "Aantal ontbrekende waardes (ongewogen)"
+
+#: src/language/stats/aggregate.c:112
+msgid "First non-missing value"
+msgstr "Eerste niet-ontbrekende waarde"
+
+#: src/language/stats/aggregate.c:113
+msgid "Last non-missing value"
+msgstr "Laatste niet-ontbrekende waarde"
+
+#: src/language/stats/aggregate.c:225 src/language/data-io/get-data.c:461
+#, fuzzy, c-format
+msgid "expecting %s"
+msgstr "verwacht '%s'"
+
+#: src/language/stats/aggregate.c:256
 msgid "When PRESORTED is specified, specifying sorting directions with (A) or (D) has no effect.  Output data will be sorted the same way as the input data."
 msgstr "Als PRESORTED is gespecificeerd, heeft specificeren van sorteervolgorde met (A) of (D) geen effect. Uitvoergegevens zullen hetzelfde gesorteerd zijn als de invoergegevens."
 
-#: src/language/stats/aggregate.c:424
+#: src/language/stats/aggregate.c:450
 msgid "expecting aggregation function"
 msgstr "aggregatie-functie verwacht"
 
-#: src/language/stats/aggregate.c:442
+#: src/language/stats/aggregate.c:462
 #, c-format
 msgid "Unknown aggregation function %s."
 msgstr "Onbekende aggregatie functie %s."
 
-#: src/language/stats/aggregate.c:498
+#: src/language/stats/aggregate.c:514
 #, c-format
 msgid "Missing argument %zu to %s."
 msgstr "Mis argument %zu naar %s."
 
-#: src/language/stats/aggregate.c:507
+#: src/language/stats/aggregate.c:523
 #, c-format
 msgid "Arguments to %s must be of same type as source variables."
 msgstr "Argumenten naar %s moeten van hetzelfde type zijn als bronvariabelen."
 
-#: src/language/stats/aggregate.c:517 src/language/expressions/parse.c:885
-msgid "expecting `)'"
-msgstr "')' verwacht"
-
-#: src/language/stats/aggregate.c:529
+#: src/language/stats/aggregate.c:542
 #, c-format
 msgid "Number of source variables (%zu) does not match number of target variables (%zu)."
 msgstr "Aantal bronvariabelen (%zu) komt niet overeen met aantal doelvariabelen (%zu)."
 
-#: src/language/stats/aggregate.c:545
+#: src/language/stats/aggregate.c:558
 #, c-format
 msgid "The value arguments passed to the %s function are out-of-order.  They will be treated as if they had been specified in the correct order."
 msgstr "De volgorde van de geldige argumenten doorgegeven aan de %s functie klopt niet. Ze worden behandeld alsof ze in de correcte volgorde waren opgegeven."
 
-#: src/language/stats/aggregate.c:615
+#: src/language/stats/aggregate.c:632
 #, c-format
 msgid "Variable name %s is not unique within the aggregate file dictionary, which contains the aggregate variables and the break variables."
 msgstr "Variabelennaam %s is niet uniek binnen het aggregate-bestandwoordenboek, dat de aggregate- en break-variabelen bevat."
 
-#: src/language/stats/autorecode.c:116
+#: src/language/stats/autorecode.c:127
 #, c-format
 msgid "Source variable count (%zu) does not match target variable count (%zu)."
 msgstr "Bron-variabelenteller (%zu) komt niet overeen met doel-variabelenteller (%zu)."
 
-#: src/language/stats/autorecode.c:128
+#: src/language/stats/autorecode.c:139
 #, c-format
 msgid "Target variable %s duplicates existing variable %s."
 msgstr "Doelvariabele %s dupliceert bestaande variabele %s."
 
-#: src/language/stats/binomial.c:141
+#: src/language/stats/binomial.c:139
 #, c-format
 msgid "Variable %s is not dichotomous"
 msgstr "Variabele %s is niet dichotomisch "
 
-#: src/language/stats/binomial.c:192 src/ui/gui/binomial.ui:13
+#: src/language/stats/binomial.c:190 src/ui/gui/binomial.ui:13
 msgid "Binomial Test"
 msgstr "Binomiaal Test"
 
-#: src/language/stats/binomial.c:222
+#: src/language/stats/binomial.c:220
 msgid "Group1"
 msgstr "Groep1 "
 
-#: src/language/stats/binomial.c:223
+#: src/language/stats/binomial.c:221
 msgid "Group2"
 msgstr "Groep2"
 
-#: src/language/stats/binomial.c:224 src/language/stats/chisquare.c:177
-#: src/language/stats/chisquare.c:236 src/language/stats/factor.c:1462
-#: src/language/stats/sign.c:92 src/language/stats/wilcoxon.c:260
-#: src/ui/gui/crosstabs-dialog.c:60 src/language/stats/crosstabs.q:823
-#: src/language/stats/crosstabs.q:1151 src/language/stats/crosstabs.q:1528
-#: src/language/stats/examine.q:1105 src/language/stats/frequencies.q:871
-#: src/language/stats/oneway.q:302 src/language/stats/oneway.q:472
-#: src/language/stats/regression.q:291 src/language/stats/reliability.q:702
+#: src/language/stats/binomial.c:222 src/language/stats/chisquare.c:177
+#: src/language/stats/chisquare.c:236 src/language/stats/factor.c:1464
+#: src/language/stats/glm.c:343 src/language/stats/kruskal-wallis.c:294
+#: src/language/stats/oneway.c:776 src/language/stats/oneway.c:946
+#: src/language/stats/reliability.c:538 src/language/stats/sign.c:93
+#: src/language/stats/wilcoxon.c:255 src/ui/gui/crosstabs-dialog.c:60
+#: src/language/stats/crosstabs.q:815 src/language/stats/crosstabs.q:1143
+#: src/language/stats/crosstabs.q:1522 src/language/stats/examine.q:1105
+#: src/language/stats/frequencies.q:871 src/language/stats/regression.q:291
 msgid "Total"
 msgstr "Totaal"
 
-#: src/language/stats/binomial.c:257 src/language/stats/chisquare.c:199
-#: src/language/stats/crosstabs.q:1239 src/language/stats/crosstabs.q:1286
+#: src/language/stats/binomial.c:255 src/language/stats/chisquare.c:199
+#: src/language/stats/crosstabs.q:1231 src/language/stats/crosstabs.q:1278
 msgid "Category"
 msgstr "Categorie"
 
-#: src/language/stats/binomial.c:258 src/language/stats/correlations.c:119
-#: src/language/stats/correlations.c:227 src/language/stats/npar-summary.c:122
-#: src/language/stats/sign.c:72 src/language/stats/wilcoxon.c:243
-#: src/language/stats/crosstabs.q:830 src/language/stats/examine.q:1176
-#: src/language/stats/frequencies.q:1034 src/language/stats/oneway.q:385
-#: src/language/stats/reliability.q:705 src/language/stats/t-test.q:505
-#: src/language/stats/t-test.q:525 src/language/stats/t-test.q:625
-#: src/language/stats/t-test.q:1101
+#: src/language/stats/binomial.c:256 src/language/stats/correlations.c:119
+#: src/language/stats/correlations.c:227
+#: src/language/stats/kruskal-wallis.c:259
+#: src/language/stats/npar-summary.c:120 src/language/stats/oneway.c:846
+#: src/language/stats/reliability.c:541 src/language/stats/sign.c:72
+#: src/language/stats/wilcoxon.c:238 src/language/stats/crosstabs.q:822
+#: src/language/stats/examine.q:1176 src/language/stats/frequencies.q:1034
+#: src/language/stats/t-test.q:505 src/language/stats/t-test.q:525
+#: src/language/stats/t-test.q:625 src/language/stats/t-test.q:1101
 msgid "N"
 msgstr "N"
 
-#: src/language/stats/binomial.c:259
+#: src/language/stats/binomial.c:257
 msgid "Observed Prop."
 msgstr ""
 
-#: src/language/stats/binomial.c:260
+#: src/language/stats/binomial.c:258
 msgid "Test Prop."
 msgstr ""
 
-#: src/language/stats/binomial.c:263
+#: src/language/stats/binomial.c:261 src/language/stats/crosstabs.q:1211
+#: src/language/stats/crosstabs.q:1213
 #, c-format
 msgid "Exact Sig. (%d-tailed)"
 msgstr ""
@@ -2310,50 +2402,51 @@ msgstr "Overblijvend"
 msgid "Frequencies"
 msgstr "Frequenties"
 
-#: src/language/stats/chisquare.c:249 src/language/stats/sign.c:111
-#: src/language/stats/wilcoxon.c:309
+#: src/language/stats/chisquare.c:249 src/language/stats/kruskal-wallis.c:312
+#: src/language/stats/sign.c:112 src/language/stats/wilcoxon.c:304
 msgid "Test Statistics"
 msgstr "Test Statistieken"
 
-#: src/language/stats/chisquare.c:263
+#: src/language/stats/chisquare.c:263 src/language/stats/kruskal-wallis.c:315
 msgid "Chi-Square"
 msgstr "Chi-Square"
 
-#: src/language/stats/chisquare.c:264 src/language/stats/crosstabs.q:1215
-#: src/language/stats/oneway.q:275 src/language/stats/oneway.q:685
+#: src/language/stats/chisquare.c:264 src/language/stats/glm.c:308
+#: src/language/stats/kruskal-wallis.c:318 src/language/stats/oneway.c:753
+#: src/language/stats/oneway.c:1165 src/language/stats/crosstabs.q:1207
 #: src/language/stats/regression.q:284 src/language/stats/t-test.q:752
 #: src/language/stats/t-test.q:923 src/language/stats/t-test.q:1010
 msgid "df"
 msgstr "df"
 
-#: src/language/stats/chisquare.c:265
+#: src/language/stats/chisquare.c:265 src/language/stats/kruskal-wallis.c:321
 msgid "Asymp. Sig."
 msgstr ""
 
-#: src/language/stats/correlations.c:96 src/language/stats/factor.c:1720
-#: src/language/stats/npar-summary.c:108
+#: src/language/stats/correlations.c:96 src/language/stats/factor.c:1728
+#: src/language/stats/npar-summary.c:106
 msgid "Descriptive Statistics"
 msgstr "Descriptieve Statistieken"
 
 #: src/language/stats/correlations.c:117 src/language/stats/descriptives.c:101
-#: src/language/stats/factor.c:1741 src/language/stats/npar-summary.c:125
-#: src/ui/gui/descriptives-dialog.c:40 src/ui/gui/frequencies-dialog.c:41
-#: src/language/stats/examine.q:1444 src/language/stats/frequencies.q:105
-#: src/language/stats/oneway.q:386 src/language/stats/t-test.q:506
+#: src/language/stats/factor.c:1749 src/language/stats/npar-summary.c:123
+#: src/language/stats/oneway.c:847 src/ui/gui/descriptives-dialog.c:40
+#: src/ui/gui/frequencies-dialog.c:41 src/language/stats/examine.q:1444
+#: src/language/stats/frequencies.q:105 src/language/stats/t-test.q:506
 #: src/language/stats/t-test.q:526 src/language/stats/t-test.q:624
 #: src/language/stats/t-test.q:917
 msgid "Mean"
 msgstr "Gemiddelde "
 
-#: src/language/stats/correlations.c:118 src/language/stats/factor.c:1742
-#: src/language/stats/npar-summary.c:128 src/language/stats/examine.q:1479
-#: src/language/stats/oneway.q:387 src/language/stats/t-test.q:507
+#: src/language/stats/correlations.c:118 src/language/stats/factor.c:1750
+#: src/language/stats/npar-summary.c:126 src/language/stats/oneway.c:848
+#: src/language/stats/examine.q:1479 src/language/stats/t-test.q:507
 #: src/language/stats/t-test.q:527 src/language/stats/t-test.q:626
 #: src/language/stats/t-test.q:918
 msgid "Std. Deviation"
 msgstr "Std. Deviatie"
 
-#: src/language/stats/correlations.c:190 src/language/stats/factor.c:1620
+#: src/language/stats/correlations.c:190 src/language/stats/factor.c:1622
 msgid "Correlations"
 msgstr "Correlatie"
 
@@ -2361,13 +2454,13 @@ msgstr "Correlatie"
 msgid "Pearson Correlation"
 msgstr "Pearson Correlatie"
 
-#: src/language/stats/correlations.c:218 src/language/stats/oneway.q:686
+#: src/language/stats/correlations.c:218 src/language/stats/oneway.c:1166
 #: src/language/stats/t-test.q:753 src/language/stats/t-test.q:924
 #: src/language/stats/t-test.q:1011
 msgid "Sig. (2-tailed)"
 msgstr ""
 
-#: src/language/stats/correlations.c:218
+#: src/language/stats/correlations.c:218 src/language/stats/factor.c:1634
 msgid "Sig. (1-tailed)"
 msgstr ""
 
@@ -2426,17 +2519,17 @@ msgstr "S.E. Skew"
 msgid "Range"
 msgstr "Bereik"
 
-#: src/language/stats/descriptives.c:110 src/language/stats/npar-summary.c:131
-#: src/ui/gui/descriptives-dialog.c:42 src/ui/gui/frequencies-dialog.c:43
-#: src/language/stats/examine.q:1484 src/language/stats/frequencies.q:116
-#: src/language/stats/oneway.q:400
+#: src/language/stats/descriptives.c:110 src/language/stats/npar-summary.c:129
+#: src/language/stats/oneway.c:861 src/ui/gui/descriptives-dialog.c:42
+#: src/ui/gui/frequencies-dialog.c:43 src/language/stats/examine.q:1484
+#: src/language/stats/frequencies.q:116
 msgid "Minimum"
 msgstr "Minimum"
 
-#: src/language/stats/descriptives.c:111 src/language/stats/npar-summary.c:134
-#: src/ui/gui/descriptives-dialog.c:43 src/ui/gui/frequencies-dialog.c:44
-#: src/language/stats/examine.q:1489 src/language/stats/frequencies.q:117
-#: src/language/stats/oneway.q:401
+#: src/language/stats/descriptives.c:111 src/language/stats/npar-summary.c:132
+#: src/language/stats/oneway.c:862 src/ui/gui/descriptives-dialog.c:43
+#: src/ui/gui/frequencies-dialog.c:44 src/language/stats/examine.q:1489
+#: src/language/stats/frequencies.q:117
 msgid "Maximum"
 msgstr "Maximum"
 
@@ -2462,7 +2555,7 @@ msgstr "Generieke namen voor Z-score-variabelen zijn uitgeput.  Er zijn slechts
 msgid "Mapping of variables to corresponding Z-scores."
 msgstr "Mappen van variabelen naar corresponderende Z-scores."
 
-#: src/language/stats/descriptives.c:559
+#: src/language/stats/descriptives.c:559 src/language/stats/glm.c:304
 msgid "Source"
 msgstr "Bron"
 
@@ -2488,56 +2581,39 @@ msgstr "Missende N"
 msgid "Valid cases = %g; cases with missing value(s) = %g."
 msgstr "Geldige cases = %g; cases met ontbrekende-waarde(s) = %g."
 
-#: src/language/stats/sort-cases.c:64
-msgid "Buffer limit must be at least 2."
-msgstr "Bufferlimiet moet tenminste 2 zijn."
-
-#: src/language/stats/sort-criteria.c:74
-msgid "`A' or `D' expected inside parentheses."
-msgstr "'A' of 'D' verwacht binnen haakjes."
-
-#: src/language/stats/sort-criteria.c:79
-msgid "`)' expected."
-msgstr "')' verwacht."
-
-#: src/language/stats/sort-criteria.c:92
-#, c-format
-msgid "Variable %s specified twice in sort criteria."
-msgstr "Variabele %s 2 keer opgegeven in sorteer criteria."
-
-#: src/language/stats/factor.c:803
+#: src/language/stats/factor.c:805
 msgid "Factor analysis on a single variable is not useful."
 msgstr "Factor analyse op een enkele variabele is niet zinvol."
 
-#: src/language/stats/factor.c:1206
+#: src/language/stats/factor.c:1208
 msgid "Component Number"
 msgstr "Component-nummer "
 
-#: src/language/stats/factor.c:1206
+#: src/language/stats/factor.c:1208
 msgid "Factor Number"
 msgstr "Factor Nummer"
 
-#: src/language/stats/factor.c:1237
+#: src/language/stats/factor.c:1239
 msgid "Communalities"
 msgstr ""
 
-#: src/language/stats/factor.c:1243
+#: src/language/stats/factor.c:1245
 msgid "Initial"
 msgstr "Initieel "
 
-#: src/language/stats/factor.c:1246
+#: src/language/stats/factor.c:1248
 msgid "Extraction"
 msgstr "Extractie"
 
-#: src/language/stats/factor.c:1310 src/language/stats/factor.c:1437
+#: src/language/stats/factor.c:1312 src/language/stats/factor.c:1439
 msgid "Component"
 msgstr "Component"
 
-#: src/language/stats/factor.c:1315 src/language/stats/factor.c:1439
+#: src/language/stats/factor.c:1317 src/language/stats/factor.c:1441
 msgid "Factor"
 msgstr "Factor"
 
-#: src/language/stats/factor.c:1347 src/language/stats/factor.c:1495
+#: src/language/stats/factor.c:1349 src/language/stats/factor.c:1497
 #: src/ui/gui/psppire-data-store.c:755 src/ui/gui/psppire-var-store.c:699
 #: src/ui/gui/psppire-var-store.c:709 src/ui/gui/psppire-var-store.c:719
 #: src/ui/gui/psppire-var-store.c:825
@@ -2545,68 +2621,68 @@ msgstr "Factor"
 msgid "%d"
 msgstr "%d"
 
-#: src/language/stats/factor.c:1412
+#: src/language/stats/factor.c:1414
 msgid "Total Variance Explained"
 msgstr ""
 
-#: src/language/stats/factor.c:1444
+#: src/language/stats/factor.c:1446
 msgid "Initial Eigenvalues"
 msgstr ""
 
-#: src/language/stats/factor.c:1450
+#: src/language/stats/factor.c:1452
 msgid "Extraction Sums of Squared Loadings"
 msgstr ""
 
-#: src/language/stats/factor.c:1456
+#: src/language/stats/factor.c:1458
 msgid "Rotation Sums of Squared Loadings"
 msgstr ""
 
-#: src/language/stats/factor.c:1464
+#: src/language/stats/factor.c:1466
 #, no-c-format
 msgid "% of Variance"
 msgstr "% van Variatie"
 
-#: src/language/stats/factor.c:1465
+#: src/language/stats/factor.c:1467
 msgid "Cumulative %"
 msgstr "Cumulatieve %"
 
-#: src/language/stats/factor.c:1578
+#: src/language/stats/factor.c:1580
 msgid "Correlation Matrix"
 msgstr "Correlatie-Matrix"
 
-#: src/language/stats/factor.c:1632
-msgid "Sig. 1-tailed"
-msgstr ""
-
-#: src/language/stats/factor.c:1666
+#: src/language/stats/factor.c:1668
 msgid "Determinant"
 msgstr "Determinant"
 
-#: src/language/stats/factor.c:1743
+#: src/language/stats/factor.c:1699
+msgid "The dataset contains no complete observations. No analysis will be performed."
+msgstr ""
+
+#: src/language/stats/factor.c:1751
 msgid "Analysis N"
 msgstr "Analyses N"
 
-#: src/language/stats/factor.c:1776
+#: src/language/stats/factor.c:1784
 msgid "The FACTOR criteria result in zero factors extracted. Therefore no analysis will be performed."
 msgstr ""
 
-#: src/language/stats/factor.c:1782
+#: src/language/stats/factor.c:1790
 msgid "The FACTOR criteria result in more factors than variables, which is not meaningful. No analysis will be performed."
 msgstr ""
 
-#: src/language/stats/factor.c:1865
+#: src/language/stats/factor.c:1873
 msgid "Component Matrix"
 msgstr "Component-Matrix"
 
-#: src/language/stats/factor.c:1865
+#: src/language/stats/factor.c:1873
 msgid "Factor Matrix"
 msgstr "Factor-Matrix:"
 
-#: src/language/stats/factor.c:1871
+#: src/language/stats/factor.c:1879
 msgid "Rotated Component Matrix"
 msgstr "Geroteerde componentmatrix"
 
-#: src/language/stats/factor.c:1871
+#: src/language/stats/factor.c:1879
 msgid "Rotated Factor Matrix"
 msgstr "Geroteerde factormatrix:"
 
@@ -2618,211 +2694,473 @@ msgstr "FLIP negeert TEMPORARY. Tijdelijke transformaties worden permanent gemaa
 msgid "Could not create temporary file for FLIP."
 msgstr "Kon geen tijdelijk bestand voor FLIP aanmaken."
 
-#: src/language/stats/flip.c:327
+#: src/language/stats/flip.c:325
 #, c-format
 msgid "Error rewinding FLIP file: %s."
 msgstr "Fout tijdens terugdraaien FLIP bestand: %s."
 
-#: src/language/stats/flip.c:334
+#: src/language/stats/flip.c:332
 msgid "Error creating FLIP source file."
 msgstr "Fout tijdens het creëren van FLIP bronbestand."
 
-#: src/language/stats/flip.c:347
+#: src/language/stats/flip.c:345
 #, c-format
 msgid "Error reading FLIP file: %s."
 msgstr "Fout tijdens lezen FLIP bestand: %s."
 
-#: src/language/stats/flip.c:349
+#: src/language/stats/flip.c:347
 msgid "Unexpected end of file reading FLIP file."
 msgstr "Onverwacht einde-bestand tijdens lezen FLIP bestand."
 
-#: src/language/stats/flip.c:365
+#: src/language/stats/flip.c:363
 #, c-format
 msgid "Error seeking FLIP source file: %s."
 msgstr "Fout tijdens zoeken FLIP bronbestand: %s."
 
-#: src/language/stats/flip.c:373
+#: src/language/stats/flip.c:371
 #, c-format
 msgid "Error writing FLIP source file: %s."
 msgstr "Fout tijdens schrijven FLIP bronbestand: %s."
 
-#: src/language/stats/flip.c:384
-#, c-format
-msgid "Error closing FLIP source file: %s."
-msgstr "Fout tijdens sluiten FLIP bronbestand: %s."
-
-#: src/language/stats/flip.c:392
+#: src/language/stats/flip.c:386
 #, c-format
 msgid "Error rewinding FLIP source file: %s."
 msgstr "Fout tijdens terugdraaien FLIP bronbestand: %s."
 
-#: src/language/stats/flip.c:426
+#: 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:429
+#: src/language/stats/flip.c:422
 msgid "Unexpected end of file reading FLIP temporary file."
 msgstr "Onverwacht einde-bestand tijdens lezen FLIP tijdelijk bestand."
 
-#: src/language/stats/npar-summary.c:141 src/language/stats/examine.q:1996
-#: src/language/stats/examine.q:2013 src/language/stats/frequencies.q:1050
-#: src/ui/gui/examine.ui:345
-msgid "Percentiles"
-msgstr "Percentiles"
-
-#: src/language/stats/npar-summary.c:145
-msgid "25th"
-msgstr "25ste"
-
-#: src/language/stats/npar-summary.c:148
-msgid "50th (Median)"
-msgstr "50ste (Mediaan)"
-
-#: src/language/stats/npar-summary.c:151
-msgid "75th"
-msgstr "75ste"
+#: src/language/stats/glm.c:108
+#, fuzzy
+msgid "Multivariate analysis is not yet implemented"
+msgstr "%s is nog niet geïmplementeerd."
 
-#: src/language/stats/roc.c:932
-msgid "Area Under the Curve"
+#: src/language/stats/glm.c:291
+msgid "Tests of Between-Subjects Effects"
 msgstr ""
 
-#: src/language/stats/roc.c:934
+#. TRANSLATORS: The parameter is a roman numeral
+#: src/language/stats/glm.c:307
 #, c-format
-msgid "Area Under the Curve (%s)"
+msgid "Type %s Sum of Squares"
 msgstr ""
 
-#: src/language/stats/roc.c:939
-msgid "Area"
+#: src/language/stats/glm.c:309 src/language/stats/oneway.c:754
+#: src/language/stats/regression.q:285
+msgid "Mean Square"
 msgstr ""
 
-#: src/language/stats/roc.c:952 src/language/stats/examine.q:1641
-#: src/language/stats/oneway.q:388 src/language/stats/oneway.q:683
-#: src/language/stats/regression.q:198
-msgid "Std. Error"
-msgstr "Std. Fout"
+#: src/language/stats/glm.c:310 src/language/stats/oneway.c:755
+#: src/language/stats/regression.q:286 src/language/stats/t-test.q:749
+msgid "F"
+msgstr "F"
 
-#: src/language/stats/roc.c:953
-msgid "Asymptotic Sig."
+#: src/language/stats/glm.c:311 src/language/stats/t-test.q:750
+#: src/language/stats/t-test.q:1103
+msgid "Sig."
 msgstr ""
 
-#: src/language/stats/roc.c:955 src/language/stats/examine.q:1455
-#: src/language/stats/oneway.q:397
-msgid "Lower Bound"
-msgstr "Benedengrens"
+#: src/language/stats/glm.c:314
+msgid "Corrected Model"
+msgstr ""
 
-#: src/language/stats/roc.c:956 src/language/stats/examine.q:1460
-#: src/language/stats/oneway.q:398
-msgid "Upper Bound"
-msgstr "Bovengrens"
+#: src/language/stats/glm.c:323
+#, fuzzy
+msgid "Intercept"
+msgstr "Percentage"
 
-#: src/language/stats/roc.c:960
-#, c-format
-msgid "Asymp. %g%% Confidence Interval"
-msgstr "Asymp. %g%% Betrouwbaarheidsinterval"
+#: src/language/stats/glm.c:337
+#, fuzzy
+msgid "Error"
+msgstr "fout"
 
-#: src/language/stats/roc.c:966
-msgid "Variable under test"
-msgstr ""
+#: src/language/stats/glm.c:350
+#, fuzzy
+msgid "Corrected Total"
+msgstr "Coëfficiënt Totaal: "
+
+#: src/language/stats/kruskal-wallis.c:244 src/language/stats/wilcoxon.c:225
+msgid "Ranks"
+msgstr "Rangschikking"
+
+#: src/language/stats/kruskal-wallis.c:258 src/language/stats/wilcoxon.c:239
+msgid "Mean Rank"
+msgstr ""
+
+#: src/language/stats/npar.c:233 src/language/stats/npar.c:260
+#, fuzzy, c-format
+msgid "The %s subcommand may be given only once."
+msgstr "%s-subopdracht mag maximaal 1 keer gegeven worden."
+
+#: src/language/stats/npar.c:343
+msgid "NPAR subcommand not currently implemented."
+msgstr ""
+
+#: src/language/stats/npar.c:496
+#, c-format
+msgid "The specified value of HI (%d) is lower than the specified value of LO (%d)"
+msgstr "De opgegeven waarde van HI (%d) is lager dan de opgegeven waarde van LO (%d)"
+
+#: src/language/stats/npar.c:551
+#, c-format
+msgid "%d expected values were given, but the specified range (%d-%d) requires exactly %d values."
+msgstr "%d verwachte waardes waren opgegeven, maar het opgegeven bereik (%d-%d) vereist precies %d waardes."
+
+#: src/language/stats/npar.c:690 src/language/stats/t-test.q:380
+#, c-format
+msgid "PAIRED was specified but the number of variables preceding WITH (%zu) did not match the number following (%zu)."
+msgstr "PAIRED was opgegeven maar het aantal variabelen voor WITH (%zu) komt niet overeen met het aantal er achter (%zu)."
+
+#: src/language/stats/npar-summary.c:139 src/language/stats/examine.q:1996
+#: src/language/stats/examine.q:2013 src/language/stats/frequencies.q:1050
+#: src/ui/gui/examine.ui:345
+msgid "Percentiles"
+msgstr "Percentiles"
+
+#: src/language/stats/npar-summary.c:143
+msgid "25th"
+msgstr "25ste"
+
+#: src/language/stats/npar-summary.c:146
+msgid "50th (Median)"
+msgstr "50ste (Mediaan)"
+
+#: src/language/stats/npar-summary.c:149
+msgid "75th"
+msgstr "75ste"
+
+#: src/language/stats/oneway.c:692
+msgid "Number of contrast coefficients must equal the number of groups"
+msgstr ""
+
+#: src/language/stats/oneway.c:701
+#, c-format
+msgid "Coefficients for contrast %zu do not total zero"
+msgstr ""
+
+#: src/language/stats/oneway.c:752 src/language/stats/regression.q:283
+msgid "Sum of Squares"
+msgstr ""
+
+#: src/language/stats/oneway.c:756 src/language/stats/oneway.c:1001
+#: src/language/stats/regression.q:201 src/language/stats/regression.q:287
+msgid "Significance"
+msgstr "Significantie "
+
+#: src/language/stats/oneway.c:774
+msgid "Between Groups"
+msgstr "Tussen groepen"
+
+#: src/language/stats/oneway.c:775
+msgid "Within Groups"
+msgstr "Binnen groepen"
+
+#: src/language/stats/oneway.c:808 src/language/stats/regression.q:312
+msgid "ANOVA"
+msgstr "ANOVA"
+
+#: src/language/stats/oneway.c:849 src/language/stats/oneway.c:1163
+#: src/language/stats/roc.c:975 src/language/stats/examine.q:1641
+#: src/language/stats/regression.q:198
+msgid "Std. Error"
+msgstr "Std. Fout"
+
+#: src/language/stats/oneway.c:855 src/language/stats/examine.q:1449
+#, c-format
+msgid "%g%% Confidence Interval for Mean"
+msgstr ""
+
+#: src/language/stats/oneway.c:858 src/language/stats/roc.c:978
+#: src/language/stats/examine.q:1455
+msgid "Lower Bound"
+msgstr "Benedengrens"
+
+#: src/language/stats/oneway.c:859 src/language/stats/roc.c:979
+#: src/language/stats/examine.q:1460
+msgid "Upper Bound"
+msgstr "Bovengrens"
+
+#: src/language/stats/oneway.c:864 src/language/stats/examine.q:1635
+#: src/ui/gui/descriptives.ui:8 src/ui/gui/examine.ui:319
+msgid "Descriptives"
+msgstr "Descriptieve"
+
+#: src/language/stats/oneway.c:998
+msgid "Levene Statistic"
+msgstr ""
+
+#: src/language/stats/oneway.c:999
+msgid "df1"
+msgstr "df1"
+
+#: src/language/stats/oneway.c:1000
+msgid "df2"
+msgstr "df2"
+
+#: src/language/stats/oneway.c:1003
+msgid "Test of Homogeneity of Variances"
+msgstr ""
+
+#: src/language/stats/oneway.c:1079
+msgid "Contrast Coefficients"
+msgstr "Contrastcoëfficiënten"
+
+#: src/language/stats/oneway.c:1081 src/language/stats/oneway.c:1161
+msgid "Contrast"
+msgstr "Contrast"
+
+#: src/language/stats/oneway.c:1159
+msgid "Contrast Tests"
+msgstr "Contrasttesten"
+
+#: src/language/stats/oneway.c:1162
+msgid "Value of Contrast"
+msgstr ""
+
+#: src/language/stats/oneway.c:1164 src/language/stats/regression.q:200
+#: src/language/stats/t-test.q:751 src/language/stats/t-test.q:922
+#: src/language/stats/t-test.q:1009
+msgid "t"
+msgstr "t"
+
+#: src/language/stats/oneway.c:1216
+msgid "Assume equal variances"
+msgstr "Veronderstelt gelijke variantie"
+
+#: src/language/stats/oneway.c:1220
+msgid "Does not assume equal"
+msgstr "Veronderstelt niet gelijk"
+
+#: src/language/stats/reliability.c:146
+msgid "Reliabilty on a single variable is not useful."
+msgstr "betrouwbaarheids analyse op een enkele variabele is niet zinvol."
+
+#: src/language/stats/reliability.c:506 src/language/stats/examine.q:1159
+msgid "Case Processing Summary"
+msgstr "Case Bewerkingsoverzicht"
+
+#: src/language/stats/reliability.c:529 src/language/stats/crosstabs.q:812
+#: src/language/stats/examine.q:1164
+msgid "Cases"
+msgstr "Cases"
+
+#: src/language/stats/reliability.c:532 src/language/stats/crosstabs.q:813
+#: src/language/stats/examine.q:1103 src/language/stats/frequencies.q:1035
+msgid "Valid"
+msgstr "Geldig"
+
+#: src/language/stats/reliability.c:535
+msgid "Excluded"
+msgstr "Uitgesloten"
+
+#: src/language/stats/reliability.c:543
+msgid "%"
+msgstr "%"
+
+#: src/language/stats/reliability.c:588
+msgid "Item-Total Statistics"
+msgstr "Item-Totaal Statistieken"
+
+#: src/language/stats/reliability.c:610
+msgid "Scale Mean if Item Deleted"
+msgstr ""
+
+#: src/language/stats/reliability.c:613
+msgid "Scale Variance if Item Deleted"
+msgstr ""
+
+#: src/language/stats/reliability.c:616
+msgid "Corrected Item-Total Correlation"
+msgstr ""
+
+#: src/language/stats/reliability.c:619
+msgid "Cronbach's Alpha if Item Deleted"
+msgstr ""
+
+#: src/language/stats/reliability.c:693
+msgid "Reliability Statistics"
+msgstr "Betrouwbaarheids Statistieken"
+
+#: src/language/stats/reliability.c:733 src/language/stats/reliability.c:752
+msgid "Cronbach's Alpha"
+msgstr "Cronbach's Alpha"
+
+#: src/language/stats/reliability.c:736 src/language/stats/reliability.c:761
+#: src/language/stats/reliability.c:772
+msgid "N of Items"
+msgstr "N van Items"
+
+#: src/language/stats/reliability.c:755
+msgid "Part 1"
+msgstr "Deel 1"
+
+#: src/language/stats/reliability.c:766
+msgid "Part 2"
+msgstr "Deel 2"
+
+#: src/language/stats/reliability.c:777
+msgid "Total N of Items"
+msgstr "Totaal N van Items"
+
+#: src/language/stats/reliability.c:780
+msgid "Correlation Between Forms"
+msgstr "Correlatie Tussen Formulieren"
+
+#: src/language/stats/reliability.c:784
+msgid "Spearman-Brown Coefficient"
+msgstr "Spearman-Brown Coefficient"
+
+#: src/language/stats/reliability.c:787
+msgid "Equal Length"
+msgstr "Gelijke lengte"
+
+#: src/language/stats/reliability.c:790
+msgid "Unequal Length"
+msgstr "Ongelijke lengte"
+
+#: src/language/stats/reliability.c:794
+msgid "Guttman Split-Half Coefficient"
+msgstr "Guttman Split-Half Coëfficiënt"
+
+#: src/language/stats/roc.c:955
+msgid "Area Under the Curve"
+msgstr ""
+
+#: src/language/stats/roc.c:957
+#, c-format
+msgid "Area Under the Curve (%s)"
+msgstr ""
 
-#: src/language/stats/roc.c:1025
+#: src/language/stats/roc.c:962
+msgid "Area"
+msgstr ""
+
+#: src/language/stats/roc.c:976
+msgid "Asymptotic Sig."
+msgstr ""
+
+#: src/language/stats/roc.c:983
+#, c-format
+msgid "Asymp. %g%% Confidence Interval"
+msgstr "Asymp. %g%% Betrouwbaarheidsinterval"
+
+#: src/language/stats/roc.c:989
+msgid "Variable under test"
+msgstr ""
+
+#: src/language/stats/roc.c:1048
 msgid "Case Summary"
 msgstr "Case Overzicht"
 
-#: src/language/stats/roc.c:1045
+#: src/language/stats/roc.c:1068
 msgid "Unweighted"
 msgstr "Niet gewogen"
 
-#: src/language/stats/roc.c:1046
+#: src/language/stats/roc.c:1069
 msgid "Weighted"
 msgstr "Gewicht"
 
-#: src/language/stats/roc.c:1050
+#: src/language/stats/roc.c:1073
 msgid "Valid N (listwise)"
 msgstr ""
 
-#: src/language/stats/roc.c:1053
+#: src/language/stats/roc.c:1076
 msgid "Positive"
 msgstr "Positief"
 
-#: src/language/stats/roc.c:1054
+#: src/language/stats/roc.c:1077
 msgid "Negative"
 msgstr "Negatief"
 
-#: src/language/stats/roc.c:1082
+#: src/language/stats/roc.c:1105
 msgid "Coordinates of the Curve"
 msgstr ""
 
-#: src/language/stats/roc.c:1084
+#: src/language/stats/roc.c:1107
 #, c-format
 msgid "Coordinates of the Curve (%s)"
 msgstr ""
 
-#: src/language/stats/roc.c:1092
+#: src/language/stats/roc.c:1115
 msgid "Test variable"
 msgstr "Testvariabele(n)"
 
-#: src/language/stats/roc.c:1094
+#: src/language/stats/roc.c:1117
 msgid "Positive if greater than or equal to"
 msgstr "Positief als grote dan of gelijk aan"
 
-#: src/language/stats/roc.c:1095 src/output/charts/roc-chart-cairo.c:38
+#: src/language/stats/roc.c:1118 src/output/charts/roc-chart-cairo.c:38
 msgid "Sensitivity"
 msgstr "Gevoeligheid"
 
-#: src/language/stats/roc.c:1096 src/output/charts/roc-chart-cairo.c:37
+#: src/language/stats/roc.c:1119 src/output/charts/roc-chart-cairo.c:37
 msgid "1 - Specificity"
 msgstr ""
 
-#: src/language/stats/sign.c:89
+#: src/language/stats/sign.c:90
 msgid "Negative Differences"
 msgstr "Negatieve Verschillen"
 
-#: src/language/stats/sign.c:90
+#: src/language/stats/sign.c:91
 msgid "Positive Differences"
 msgstr "Positieve Verschillen"
 
-#: src/language/stats/sign.c:91 src/language/stats/wilcoxon.c:259
+#: src/language/stats/sign.c:92 src/language/stats/wilcoxon.c:254
 msgid "Ties"
 msgstr ""
 
-#: src/language/stats/sign.c:130 src/language/stats/wilcoxon.c:327
+#: src/language/stats/sign.c:131 src/language/stats/wilcoxon.c:322
 msgid "Exact Sig. (2-tailed)"
 msgstr ""
 
-#: src/language/stats/sign.c:133 src/language/stats/wilcoxon.c:328
+#: src/language/stats/sign.c:134 src/language/stats/wilcoxon.c:323
 msgid "Exact Sig. (1-tailed)"
 msgstr ""
 
-#: src/language/stats/sign.c:136 src/language/stats/wilcoxon.c:331
+#: src/language/stats/sign.c:137 src/language/stats/wilcoxon.c:326
 msgid "Point Probability"
 msgstr ""
 
-#: src/language/stats/wilcoxon.c:230
-msgid "Ranks"
-msgstr "Rangschikking"
+#: src/language/stats/sort-cases.c:64
+msgid "Buffer limit must be at least 2."
+msgstr "Bufferlimiet moet tenminste 2 zijn."
 
-#: src/language/stats/wilcoxon.c:244
-msgid "Mean Rank"
-msgstr ""
+#: src/language/stats/sort-criteria.c:74
+msgid "`A' or `D' expected inside parentheses."
+msgstr "'A' of 'D' verwacht binnen haakjes."
 
-#: src/language/stats/wilcoxon.c:245
+#: src/language/stats/sort-criteria.c:79
+msgid "`)' expected."
+msgstr "')' verwacht."
+
+#: src/language/stats/sort-criteria.c:92
+#, c-format
+msgid "Variable %s specified twice in sort criteria."
+msgstr "Variabele %s 2 keer opgegeven in sorteer criteria."
+
+#: src/language/stats/wilcoxon.c:240
 msgid "Sum of Ranks"
 msgstr "Som van Rangen"
 
-#: src/language/stats/wilcoxon.c:257
+#: src/language/stats/wilcoxon.c:252
 msgid "Negative Ranks"
 msgstr "Negatieve Rangen"
 
-#: src/language/stats/wilcoxon.c:258
+#: src/language/stats/wilcoxon.c:253
 msgid "Positive Ranks"
 msgstr "Positieve Rangen"
 
-#: src/language/stats/wilcoxon.c:322
+#: src/language/stats/wilcoxon.c:317
 msgid "Z"
 msgstr "Z"
 
-#: src/language/stats/wilcoxon.c:323
+#: src/language/stats/wilcoxon.c:318 src/language/stats/crosstabs.q:1209
 msgid "Asymp. Sig. (2-tailed)"
 msgstr ""
 
@@ -2922,7 +3260,7 @@ msgid "At least one variable must be specified."
 msgstr "Tenminste 1 variabele moet gespecificeerd worden."
 
 #: src/language/data-io/data-list.c:368 src/language/data-io/data-list.c:457
-#: src/language/data-io/get-data.c:530
+#: src/language/data-io/get-data.c:529
 #, c-format
 msgid "%s is a duplicate variable name."
 msgstr "%s is een dubbele variabelennaam."
@@ -2942,53 +3280,58 @@ msgstr "Er is al een tekenreeksvariabele %s van een andere breedte."
 msgid "Cannot place variable %s on record %d when RECORDS=%d is specified."
 msgstr "Kan variabele %s niet plaatsen in record %d als RECORDS=%d is gespecificeerd."
 
-#: src/language/data-io/data-parser.c:460
-#: src/language/data-io/data-parser.c:469
+#: src/language/data-io/data-parser.c:458
+#: src/language/data-io/data-parser.c:467
 msgid "Quoted string extends beyond end of line."
 msgstr "Geciteerde tekenreeks loopt door na regeleinde."
 
-#: src/language/data-io/data-parser.c:525
+#: src/language/data-io/data-parser.c:515
+#, fuzzy, c-format
+msgid "Data for variable %s is not valid as format %s: %s"
+msgstr "%s variabele %s heeft ongeldig %s opmaak %s."
+
+#: src/language/data-io/data-parser.c:544
 #, c-format
 msgid "Partial case of %d of %d records discarded."
 msgstr "Gedeeltelijke case van %d van %d records genegeerd."
 
-#: src/language/data-io/data-parser.c:572
+#: src/language/data-io/data-parser.c:601
 #, c-format
 msgid "Partial case discarded.  The first variable missing was %s."
 msgstr "Gedeeltelijke case overgeslagen. De eerste gemiste variabele was %s."
 
-#: src/language/data-io/data-parser.c:610
+#: src/language/data-io/data-parser.c:643
 #, c-format
 msgid "Missing value(s) for all variables from %s onward.  These will be filled with the system-missing value or blanks, as appropriate."
 msgstr "Ontbrekende-waarde(s) voor alle variabelen vanaf %s. Deze worden gevuld met de geschikte system-missing waarde of spatie."
 
-#: src/language/data-io/data-parser.c:630
+#: src/language/data-io/data-parser.c:663
 msgid "Record ends in data not part of any field."
 msgstr "Record eindigt in gegeven dat geen onderdeel is van een veld."
 
-#: src/language/data-io/data-parser.c:650 src/language/data-io/print.c:404
+#: src/language/data-io/data-parser.c:683 src/language/data-io/print.c:404
 msgid "Record"
 msgstr "Record"
 
-#: src/language/data-io/data-parser.c:651 src/language/data-io/print.c:405
+#: src/language/data-io/data-parser.c:684 src/language/data-io/print.c:405
 #: src/ui/gui/psppire-var-sheet.c:541 src/ui/gui/psppire-var-store.c:839
 #: src/ui/gui/crosstabs.ui:89
 msgid "Columns"
 msgstr "Kolommen"
 
-#: src/language/data-io/data-parser.c:652
-#: src/language/data-io/data-parser.c:689 src/language/data-io/print.c:406
+#: src/language/data-io/data-parser.c:685
+#: src/language/data-io/data-parser.c:722 src/language/data-io/print.c:406
 msgid "Format"
 msgstr "Indeling"
 
-#: src/language/data-io/data-parser.c:670
+#: src/language/data-io/data-parser.c:703
 #, c-format
 msgid "Reading %d record from %s."
 msgid_plural "Reading %d records from %s."
 msgstr[0] "Lezen %d record van %s."
 msgstr[1] "Lezen %d records van %s."
 
-#: src/language/data-io/data-parser.c:704
+#: src/language/data-io/data-parser.c:737
 #, c-format
 msgid "Reading free-form data from %s."
 msgstr "Lezen vrije-vorm gegeven van %s."
@@ -3000,129 +3343,113 @@ msgstr "Lezen vrije-vorm gegeven van %s."
 msgid "data file"
 msgstr "gegevensbestand"
 
-#: src/language/data-io/data-reader.c:150
+#: src/language/data-io/data-reader.c:149
 #, c-format
-msgid "Could not open \"%s\" for reading as a data file: %s."
-msgstr "Kon \"%s\" niet openen voor het lezen als gegevensbestand: %s."
+msgid "Could not open `%s' for reading as a data file: %s."
+msgstr "Kon '%s' niet openen voor het lezen als gegevensbestand: %s."
 
-#: src/language/data-io/data-reader.c:192
+#: src/language/data-io/data-reader.c:191
 msgid "Unexpected end-of-file while reading data in BEGIN DATA.  This probably indicates a missing or misformatted END DATA command.  END DATA must appear by itself on a single line with exactly one space between words."
 msgstr "Onverwacht einde-bestand tijdens het lezen van gegevens in BEGIN DATA. Dit geeft waarschijnlijk aan dat de END DATA opdracht ontbreekt of verkeerd geschreven is. END DATA dient alleen op één regel met precies één spatie tussen de woorden voor te komen."
 
-#: src/language/data-io/data-reader.c:217
+#: src/language/data-io/data-reader.c:216
 #, c-format
 msgid "Error reading file %s: %s."
 msgstr "Fout tijdens lezen bestand %s: %s."
 
-#: src/language/data-io/data-reader.c:220
+#: src/language/data-io/data-reader.c:219
 #, c-format
 msgid "Unexpected end of file reading %s."
 msgstr "Onverwacht einde tijdens lezen van bestand %s."
 
-#: src/language/data-io/data-reader.c:229
+#: src/language/data-io/data-reader.c:228
 #, c-format
 msgid "Unexpected end of file in partial record reading %s."
 msgstr ""
 
-#: src/language/data-io/data-reader.c:289
+#: src/language/data-io/data-reader.c:288
 #, c-format
 msgid "Corrupt block descriptor word at offset 0x%lx in %s."
 msgstr ""
 
-#: src/language/data-io/data-reader.c:290
+#: src/language/data-io/data-reader.c:289
 #, c-format
 msgid "Corrupt record descriptor word at offset 0x%lx in %s."
 msgstr ""
 
-#: src/language/data-io/data-reader.c:303
+#: src/language/data-io/data-reader.c:302
 #, c-format
 msgid "Corrupt record size at offset 0x%lx in %s."
 msgstr ""
 
-#: src/language/data-io/data-reader.c:445
+#: src/language/data-io/data-reader.c:444
 msgid "Record exceeds remaining block length."
 msgstr "Record overschrijdt resterende bloklengte."
 
-#: src/language/data-io/data-reader.c:519
+#: src/language/data-io/data-reader.c:518
 #, c-format
 msgid "Attempt to read beyond end-of-file on file %s."
 msgstr "Poging om te lezen na einde-bestand in bestand %s."
 
-#: src/language/data-io/data-reader.c:522
+#: src/language/data-io/data-reader.c:521
 msgid "Attempt to read beyond END DATA."
 msgstr "Poging om te lezen na END DATA."
 
-#: src/language/data-io/data-reader.c:708
+#: src/language/data-io/data-reader.c:703
 msgid "This command is not valid here since the current input program does not access the inline file."
 msgstr "Deze opdracht is hier niet geldig omdat het huidige invoerprogramma het inline-bestand niet benaderd."
 
-#: src/language/data-io/data-writer.c:74
+#: src/language/data-io/data-writer.c:73
 #, c-format
-msgid "An error occurred while opening \"%s\" for writing as a data file: %s."
-msgstr "Een fout is opgetreden tijdens het openen van \"%s\" voor schrijven als gegevensbestand: %s."
+msgid "An error occurred while opening `%s' for writing as a data file: %s."
+msgstr "Een fout is opgetreden tijdens het openen van '%s' voor schrijven als gegevensbestand: %s."
 
-#: src/language/data-io/data-writer.c:191
+#: src/language/data-io/data-writer.c:190
 #, c-format
-msgid "I/O error occurred writing data file \"%s\"."
-msgstr "I/O fout opgetreden tijdens schrijven gegevensbestand \"%s\"."
+msgid "I/O error occurred writing data file `%s'."
+msgstr "I/O fout opgetreden tijdens schrijven gegevensbestand '%s'."
 
 #: src/language/data-io/get-data.c:64
 #, c-format
 msgid "Unsupported TYPE %s"
 msgstr "Niet ondersteund TYPE %s"
 
-#: src/language/data-io/get-data.c:260
+#: src/language/data-io/get-data.c:259
 #, c-format
 msgid "%s is allowed only with %s arrangement, but %s arrangement was stated or implied earlier in this command."
 msgstr "%s is alleen toegestaan met %s regeling, maar %s regeling was eerder opgegeven of geïmpliceerd in deze opdracht."
 
-#: src/language/data-io/get-data.c:315
-msgid "expecting FIXED or DELIMITED"
-msgstr "FIXED of DELIMITED verwacht"
-
-#: src/language/data-io/get-data.c:328
+#: src/language/data-io/get-data.c:327
 msgid "Value of FIRSTCASE must be 1 or greater."
 msgstr "Waarde van FIRSTCASE moet 1 of groter zijn."
 
-#: src/language/data-io/get-data.c:353
-msgid "expecting LINE or VARIABLES"
-msgstr "LINE of VARIABLES verwacht"
-
-#: src/language/data-io/get-data.c:366
+#: src/language/data-io/get-data.c:365
 msgid "Value of FIXCASE must be at least 1."
 msgstr "Waarde van FIXCASE moet tenminste 1 zijn."
 
-#: src/language/data-io/get-data.c:386
+#: src/language/data-io/get-data.c:385
 msgid "Value of FIRST must be at least 1."
 msgstr "Waarde van FIRST moet tenminste 1 zijn."
 
-#: src/language/data-io/get-data.c:398
+#: src/language/data-io/get-data.c:397
 msgid "Value of PERCENT must be between 1 and 100."
 msgstr "Waarde van PERCENT moet tussen 1 en 100 zijn."
 
-#: src/language/data-io/get-data.c:447
+#: src/language/data-io/get-data.c:446
 msgid "In compatible syntax mode, the QUALIFIER string must contain exactly one character."
 msgstr "In compatibele syntaxmodus, dient de QUALIFIER tekenreeks precies één teken te bevatten."
 
-#: src/language/data-io/get-data.c:462
-msgid "expecting VARIABLES"
-msgstr "VARIABLES verwacht"
-
-#: src/language/data-io/get-data.c:484
+#: src/language/data-io/get-data.c:483
 #: src/language/data-io/placement-parser.c:378
 #, c-format
 msgid "The record number specified, %ld, is at or before the previous record, %d.  Data fields must be listed in order of increasing record number."
 msgstr "Het opgegeven recordnummer, %ld, is op of voor het huidige record, %d. Gegevensvelden dienen opgegeven te worden in oplopende recordnummer volgorde."
 
-#: src/language/data-io/get-data.c:493
+#: src/language/data-io/get-data.c:492
 #, c-format
 msgid "The record number specified, %ld, exceeds the number of records per case specified on FIXCASE, %d."
 msgstr "Het gespecificeerde recordnummer, %ld, overschrijdt het aantal records per case zoals gespecificeerd in FIXCASE, %d."
 
-#: src/language/data-io/get.c:99
-msgid "expecting COMM or TAPE"
-msgstr "COMM of TAPE verwacht"
-
 #: src/language/data-io/inpt-pgm.c:130
 msgid "Unexpected end-of-file within INPUT PROGRAM."
 msgstr "Onverwacht einde-bestand binnen INPUT PROGRAM."
@@ -3131,10 +3458,6 @@ msgstr "Onverwacht einde-bestand binnen INPUT PROGRAM."
 msgid "Input program did not create any variables."
 msgstr "Invoerprogramma heeft geen variabelen gecreëerd."
 
-#: 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:338
 msgid "REREAD: Column numbers must be positive finite numbers.  Column set to 1."
 msgstr "REREAD: Kolomnummers moeten positieve eindige nummers zijn. Kolom is op 1 gezet."
@@ -3197,16 +3520,21 @@ msgid_plural "Writing %zu records."
 msgstr[0] "Schrijven van %zu record."
 msgstr[1] "Schrijven van %zu records."
 
-#: src/language/data-io/save.c:223 src/language/data-io/save.c:238
-#: src/language/data-io/save.c:266
+#: src/language/data-io/save-translate.c:164
+#: src/language/data-io/save-translate.c:178
 #, c-format
-msgid "expecting %s or %s"
-msgstr "%s of %s verwacht"
+msgid "The %s string must contain exactly one character."
+msgstr "De %s tekenreeks dient exact één teken te bevatten."
+
+#: src/language/data-io/save-translate.c:248
+#, c-format
+msgid "Output file `%s' exists but REPLACE was not specified."
+msgstr ""
 
 #: src/language/data-io/trim.c:88
 #, c-format
-msgid "Cannot rename %s as %s because there already exists a variable named %s.  To rename variables with overlapping names, use a single RENAME subcommand such as \"/RENAME (A=B)(B=C)(C=A)\", or equivalently, \"/RENAME (A B C=B C A)\"."
-msgstr "Kan %s niet hernoemen naar  %s omdat er al een variabele met de naam %s bestaat.  Om variabelen met overlappende naam te hernoemen gebruik een enkel RENAME-subopdracht zoals \"/RENAME (A=B)(B=C)(C=A)\", of equivalent achtig, \"/RENAME (A B C=B C A)\"."
+msgid "Cannot rename %s as %s because there already exists a variable named %s.  To rename variables with overlapping names, use a single RENAME subcommand such as `/RENAME (A=B)(B=C)(C=A)', or equivalently, `/RENAME (A B C=B C A)'."
+msgstr "Kan %s niet hernoemen naar  %s omdat er al een variabele met de naam %s bestaat.  Om variabelen met overlappende naam te hernoemen gebruik een enkel RENAME-subopdracht zoals '/RENAME (A=B)(B=C)(C=A)', of equivalent achtig, '/RENAME (A B C=B C A)'."
 
 #: src/language/data-io/trim.c:114
 msgid "`=' expected after variable list."
@@ -3226,47 +3554,49 @@ msgstr "Gevraagde hernoeming dupliceert variabelennaam %s."
 msgid "Cannot DROP all variables from dictionary."
 msgstr "Kan niet alle variabelen DROP-en uit woordenboek."
 
-#: src/language/expressions/evaluate.c:155
+#: src/language/expressions/evaluate.c:149
 msgid "expecting number or string"
 msgstr "verwacht nummer of tekenreeks"
 
-#: src/language/expressions/evaluate.c:169
+#: src/language/expressions/evaluate.c:163
 #, c-format
 msgid "Duplicate variable name %s."
 msgstr "Dubbele variabelennaam %s."
 
-#: src/language/expressions/helpers.c:51
+#: src/language/expressions/helpers.c:38
 msgid "One of the arguments to a DATE function is not an integer.  The result will be system-missing."
 msgstr "Een van de variabelen voor een DATE functie is geen integer. Het resultaat zal system-missing zijn."
 
-#: src/language/expressions/helpers.c:73
+#: src/language/expressions/helpers.c:66
 msgid "The week argument to DATE.WKYR is not an integer.  The result will be system-missing."
 msgstr "Het week argument voor DATE.WKYR is geen integer.  Het resultaat zal system-missing zijn."
 
-#: src/language/expressions/helpers.c:79
+#: src/language/expressions/helpers.c:72
 msgid "The week argument to DATE.WKYR is outside the acceptable range of 1 to 53.  The result will be system-missing."
 msgstr "Het week argument voor DATE.WKYR is buiten het acceptabele bereik van 1 tot 53.  Het resultaat zal system-missing zijn."
 
-#: src/language/expressions/helpers.c:101
+#: src/language/expressions/helpers.c:94
 msgid "The day argument to DATE.YRDAY is not an integer.  The result will be system-missing."
 msgstr "Het dag argument voor DATE.WKYR is geen integer.  Het resultaat zal system-missing zijn."
 
-#: src/language/expressions/helpers.c:107
+#: src/language/expressions/helpers.c:100
 msgid "The day argument to DATE.YRDAY is outside the acceptable range of 1 to 366.  The result will be system-missing."
 msgstr "Het dag argument voor DATE.WKYR is buiten het acceptabele bereik van 1 tot 366.  Het resultaat zal system-missing zijn."
 
-#: src/language/expressions/helpers.c:129
+#: src/language/expressions/helpers.c:122
 msgid "The year argument to YRMODA is greater than 47516.  The result will be system-missing."
 msgstr "Het jaar argument voor YRMODA is groter dan 47516.  Het resultaat zal system-missing zijn."
 
-#: src/language/expressions/helpers.c:182
+#. TRANSLATORS: Don't translate the the actual unit names `weeks', `days' etc
+#. They must remain in their original English.
+#: src/language/expressions/helpers.c:177
 #, c-format
-msgid "Unrecognized date unit \"%.*s\".  Valid date units are \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", and \"seconds\"."
-msgstr "Niet-herkende datum eenheid \"%.*s\".  Geldige datum eenheden zijn \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", en \"seconds\"."
+msgid "Unrecognized date unit `%.*s'.  Valid date units are `years', `quarters', `months', `weeks', `days', `hours', `minutes', and `seconds'."
+msgstr "Niet-herkende datum eenheid '%.*s'.  Geldige datum eenheden zijn 'years', 'quarters', 'months', 'weeks', 'days', 'hours', 'minutes', en 'seconds'."
 
-#: src/language/expressions/helpers.c:332
-msgid "Invalid DATESUM method.  Valid choices are \"closest\" and \"rollover\"."
-msgstr "Ongeldige DATESUM methode. Geldige keuzes zijn \"closest\" en \"rollover\"."
+#: src/language/expressions/helpers.c:327
+msgid "Invalid DATESUM method.  Valid choices are `closest' and `rollover'."
+msgstr "Ongeldige DATESUM methode. Geldige keuzes zijn 'closest' en 'rollover'."
 
 #: src/language/expressions/parse.c:259
 #, c-format
@@ -3278,133 +3608,139 @@ msgstr "Type ongelijk: expressie heeft type %s, maar een numerieke waarde is hie
 msgid "Type mismatch: expression has %s type, but a string value is required here."
 msgstr "Type ongelijk: expressie heeft type %s, maar een tekenreeks waarde is hier vereist."
 
-#: src/language/expressions/parse.c:427
+#: src/language/expressions/parse.c:433
 #, c-format
 msgid "Type mismatch while applying %s operator: cannot convert %s to %s."
 msgstr "Type ongelijk tijdens het uitvoeren van %s operator: kan %s niet naar %s converteren."
 
-#: src/language/expressions/parse.c:643
-msgid "Chaining relational operators (e.g. \"a < b < c\") will not produce the mathematically expected result.  Use the AND logical operator to fix the problem (e.g. \"a < b AND b < c\").  If chaining is really intended, parentheses will disable this warning (e.g. \"(a < b) < c\".)"
+#: src/language/expressions/parse.c:649
+msgid "Chaining relational operators (e.g. `a < b < c') will not produce the mathematically expected result.  Use the AND logical operator to fix the problem (e.g. `a < b AND b < c').  If chaining is really intended, parentheses will disable this warning (e.g. `(a < b) < c'.)"
 msgstr ""
 
-#: src/language/expressions/parse.c:744
-msgid "The exponentiation operator (\"**\") is left-associative, even though right-associative semantics are more useful.  That is, \"a**b**c\" equals \"(a**b)**c\", not as \"a**(b**c)\".  To disable this warning, insert parentheses."
+#: src/language/expressions/parse.c:750
+msgid "The exponentiation operator (`**') is left-associative, even though right-associative semantics are more useful.  That is, `a**b**c' equals `(a**b)**c', not as `a**(b**c)'.  To disable this warning, insert parentheses."
 msgstr ""
 
-#: src/language/expressions/parse.c:809
+#: src/language/expressions/parse.c:815
 #, c-format
 msgid "Unknown system variable %s."
 msgstr "Onbekende systeemvariabele %s."
 
-#: src/language/expressions/parse.c:857
+#: src/language/expressions/parse.c:863
 #, c-format
 msgid "Unknown identifier %s."
 msgstr "Onbekende herkenningsteken %s."
 
-#: src/language/expressions/parse.c:892
-msgid "in expression"
-msgstr "in expressie"
-
-#: src/language/expressions/parse.c:1073
+#: src/language/expressions/parse.c:1076
 #, c-format
 msgid "%s must have at least %d arguments in list."
 msgstr "%s heeft tenminste %d argumenten nodig in lijst."
 
-#: src/language/expressions/parse.c:1082
+#: src/language/expressions/parse.c:1085
 #, c-format
-msgid "%s must have even number of arguments in list."
+msgid "%s must have an even number of arguments in list."
 msgstr "%s heeft een even aantal argumenten in lijst nodig."
 
-#: src/language/expressions/parse.c:1085
+#: src/language/expressions/parse.c:1088
 #, c-format
 msgid "%s must have multiple of %d arguments in list."
 msgstr "%s heeft meerdere %d argumenten in lijst nodig."
 
-#: src/language/expressions/parse.c:1095
+#: src/language/expressions/parse.c:1098
 #, c-format
 msgid "%s function does not accept a minimum valid argument count."
 msgstr "%s functie accepteert geen minimaal geldige argumenten teller."
 
-#: src/language/expressions/parse.c:1104
+#: src/language/expressions/parse.c:1107
 #, c-format
 msgid "%s requires at least %d valid arguments in list."
 msgstr "%s vereist tenminste %d geldige argumenten in lijst."
 
-#: src/language/expressions/parse.c:1110
+#: src/language/expressions/parse.c:1113
 #, c-format
 msgid "With %s, using minimum valid argument count of %d does not make sense when passing only %d arguments in list."
 msgstr "Met %s, heeft het gebruik van de minimum geldige argumenttelling van %d geen zin wanneer een lijst van slechts %d wordt doorgegeven."
 
-#: src/language/expressions/parse.c:1164
+#: src/language/expressions/parse.c:1167
 #, c-format
 msgid "Type mismatch invoking %s as "
 msgstr "Type ongelijk bij aanroep %s als "
 
-#: src/language/expressions/parse.c:1169
+#: src/language/expressions/parse.c:1172
 msgid "Function invocation "
 msgstr "Functieaanroep "
 
-#: src/language/expressions/parse.c:1171
+#: src/language/expressions/parse.c:1174
 msgid " does not match any known function.  Candidates are:"
 msgstr " komt niet overeen met een geldige functie. Kandidaten zijn:"
 
-#: src/language/expressions/parse.c:1201
+#: src/language/expressions/parse.c:1204
 #, c-format
 msgid "No function or vector named %s."
 msgstr "Geen functie of vector genaamd %s."
 
-#: src/language/expressions/parse.c:1244
+#: src/language/expressions/parse.c:1247
 #, c-format
 msgid "expecting `,' or `)' invoking %s function"
 msgstr "verwacht ',' of ')' bij aanroep %s functie"
 
-#: src/language/expressions/parse.c:1264
+#: src/language/expressions/parse.c:1267
 #, c-format
 msgid "%s is a PSPP extension."
 msgstr "%s is een PSPP extensie."
 
-#: src/language/expressions/parse.c:1273
+#: src/language/expressions/parse.c:1276
 #, c-format
 msgid "%s may not appear after TEMPORARY."
 msgstr "%s mag niet voorkomen na TEMPORARY."
 
-#: src/libpspp/hash.c:545
-#, c-format
-msgid "hash table:"
-msgstr "hash-tabel:"
-
-#: src/libpspp/message.c:128
-msgid "error"
-msgstr "fout"
-
-#: src/libpspp/message.c:131
-msgid "warning"
-msgstr "waarschuwing"
-
-#: src/libpspp/message.c:135
-msgid "note"
-msgstr "aantekening"
-
-#: src/libpspp/tmpfile.c:56
+#: src/libpspp/ext-array.c:56
 msgid "failed to create temporary file"
 msgstr "aanmaken van tijdelijk bestand is mislukt"
 
-#: src/libpspp/tmpfile.c:97
+#: src/libpspp/ext-array.c:96
 msgid "seeking in temporary file"
 msgstr "zoeken in tijdelijk bestand"
 
-#: src/libpspp/tmpfile.c:116
+#: src/libpspp/ext-array.c:115
 msgid "reading temporary file"
 msgstr "lezen tijdelijk bestand"
 
-#: src/libpspp/tmpfile.c:118
+#: src/libpspp/ext-array.c:117
 msgid "unexpected end of file reading temporary file"
 msgstr "onverwacht einde-bestand bij het lezen van tijdelijk bestand"
 
-#: src/libpspp/tmpfile.c:137
+#: src/libpspp/ext-array.c:136
 msgid "writing to temporary file"
 msgstr "schrijven naar tijdelijk bestand"
 
+#: src/libpspp/message.c:145
+msgid "error"
+msgstr "fout"
+
+#: src/libpspp/message.c:148
+msgid "warning"
+msgstr "waarschuwing"
+
+#: src/libpspp/message.c:152
+msgid "note"
+msgstr "aantekening"
+
+#: src/libpspp/message.c:251
+#, c-format
+msgid "Notes (%d) exceed limit (%d).  Suppressing further notes."
+msgstr "Notities (%d) overschrijdt limiet (%d).  Onderdruk verdere notitties."
+
+#: src/libpspp/message.c:259
+#, fuzzy, c-format
+msgid "Warnings (%d) exceed limit (%d).  Syntax processing will be halted."
+msgstr "Notities (%d) overschrijdt limiet (%d).  Onderdruk verdere notitties."
+
+#: src/libpspp/message.c:262
+#, fuzzy, c-format
+msgid "Errors (%d) exceed limit (%d).  Syntax processing will be halted."
+msgstr "Notities (%d) overschrijdt limiet (%d).  Onderdruk verdere notitties."
+
 #: src/libpspp/zip-writer.c:91
 #, c-format
 msgid "%s: error opening output file"
@@ -3435,32 +3771,32 @@ msgstr "Empirisch"
 msgid "Empirical with averaging"
 msgstr "Empirisch met gemiddelde"
 
-#: src/output/ascii.c:278
+#: src/output/ascii.c:279
 #, c-format
 msgid "%s: %s must be positive integer or `auto'"
 msgstr "%s: %s dient positief integer of 'auto' te zijn"
 
-#: src/output/ascii.c:311
+#: src/output/ascii.c:312
 #, c-format
 msgid "ascii: page excluding margins and headers must be at least %d characters wide by %d lines long, but as configured is only %d characters by %d lines"
 msgstr "ascii: pagina exclusief marges en koppen moet tenminste %d tekens breed en %d regels lang zijn, maar geconfigureerd is slechts %d tekens bij %d regels"
 
-#: src/output/ascii.c:360
+#: src/output/ascii.c:361
 #, c-format
-msgid "ascii: closing output file \"%s\""
-msgstr "ascii: sluiten uitvoerbestand \"%s\""
+msgid "ascii: closing output file `%s'"
+msgstr "ascii: sluiten uitvoerbestand '%s'"
 
-#: src/output/ascii.c:503
+#: src/output/ascii.c:504
 #, c-format
 msgid "See %s for a chart."
 msgstr "Zie %s voor een diagram."
 
-#: src/output/ascii.c:806
+#: src/output/ascii.c:807
 #, c-format
-msgid "ascii: opening output file \"%s\""
-msgstr "ascii: openen uitvoerbestand \"%s\""
+msgid "ascii: opening output file `%s'"
+msgstr "ascii: openen uitvoerbestand '%s'"
 
-#: src/output/ascii.c:913 src/output/cairo.c:784
+#: src/output/ascii.c:914
 #, c-format
 msgid "%s - Page %d"
 msgstr "%s - Pagina %d"
@@ -3468,27 +3804,33 @@ msgstr "%s - Pagina %d"
 #: src/output/csv.c:87 src/output/html.c:106 src/output/journal.c:93
 #: src/output/msglog.c:66
 #, c-format
-msgid "error opening output file \"%s\""
-msgstr "fout tijdens openen uitvoerbestand \"%s\""
+msgid "error opening output file `%s'"
+msgstr "fout tijdens openen uitvoerbestand '%s'"
 
-#: src/output/driver.c:330
+#. TRANSLATORS: Don't translate the words `terminal' or `listing'.
+#: src/output/driver.c:331
 #, c-format
-msgid "%s is not a valid device type (the choices are \"terminal\" and \"listing\")"
-msgstr "%s is geen valide apparaattype (de keuzes zijn \"terminal\" en \"listing\")"
+msgid "%s is not a valid device type (the choices are `terminal' and `listing')"
+msgstr "%s is geen valide apparaattype (de keuzes zijn 'terminal' en 'listing')"
 
-#: src/output/driver.c:343
+#: src/output/driver.c:344
 #, c-format
-msgid "%s: unknown option \"%s\""
-msgstr "%s: onbekende optie \"%s\""
+msgid "%s: unknown option `%s'"
+msgstr "%s: onbekende optie '%s'"
 
 #: src/output/html.c:114
 msgid "PSPP Output"
 msgstr "PSPP-uitvoer"
 
+#: src/output/html.c:258
+#, fuzzy
+msgid "No description"
+msgstr "Omschrijving"
+
 #: src/output/journal.c:67
 #, c-format
-msgid "error writing output file \"%s\""
-msgstr "fout bij schrijven van \"%s\""
+msgid "error writing output file `%s'"
+msgstr "fout bij schrijven van '%s'"
 
 #: src/output/measure.c:65
 #, c-format
@@ -3507,58 +3849,58 @@ msgstr "onbekend papiertype '%.*s'"
 
 #: src/output/measure.c:248
 #, c-format
-msgid "error opening input file \"%s\""
-msgstr "fout tijdens openen \"%s\" "
+msgid "error opening input file `%s'"
+msgstr "fout tijdens openen '%s' "
 
 #: src/output/measure.c:259
 #, c-format
-msgid "error reading file \"%s\""
-msgstr "fout tijdens lezen \"%s\""
+msgid "error reading file `%s'"
+msgstr "fout tijdens lezen '%s'"
 
 #: src/output/measure.c:276
 #, c-format
-msgid "paper size file \"%s\" does not state a paper size"
-msgstr "papier grootte bestand \"%s\" geeft geen papier grootte aan"
+msgid "paper size file `%s' does not state a paper size"
+msgstr "papier grootte bestand '%s' geeft geen papier grootte aan"
 
 #: src/output/options.c:113
 #, c-format
-msgid "%s: \"%s\" is \"%s\" but a Boolean value is required"
-msgstr "%s: \"%s\" is \"%s\" maar een Boolean waarde is noodzakelijk"
+msgid "%s: `%s' is `%s' but a Boolean value is required"
+msgstr "%s: '%s' is '%s' maar een Boolean waarde is noodzakelijk"
 
 #: src/output/options.c:188
 #, c-format
-msgid "%s: \"%s\" is \"%s\" but one of the following is required: %s"
-msgstr "%s: \"%s\" is \"%s\" maar een van de volgende is noodzakelijk: %s"
+msgid "%s: `%s' is `%s' but one of the following is required: %s"
+msgstr "%s: '%s' is '%s' maar een van de volgende is noodzakelijk: %s"
 
 #: src/output/options.c:232
 #, c-format
-msgid "%s: \"%s\" is \"%s\" but a nonnegative integer is required"
-msgstr "%s: \"%s\" is \"%s\" maar een niet negatieve integer is noodzakelijk"
+msgid "%s: `%s' is `%s' but a nonnegative integer is required"
+msgstr "%s: '%s' is '%s' maar een niet negatieve integer is noodzakelijk"
 
 #: src/output/options.c:236
 #, c-format
-msgid "%s: \"%s\" is \"%s\" but a positive integer is required"
-msgstr "%s: \"%s\" is \"%s\" maar een positieve integer is noodzakelijk"
+msgid "%s: `%s' is `%s' but a positive integer is required"
+msgstr "%s: '%s' is '%s' maar een positieve integer is noodzakelijk"
 
 #: src/output/options.c:239
 #, c-format
-msgid "%s: \"%s\" is \"%s\" but an integer is required"
-msgstr "%s: \"%s\" is \"%s\" maar een integer is noodzakelijk"
+msgid "%s: `%s' is `%s' but an integer is required"
+msgstr "%s: '%s' is '%s' maar een integer is noodzakelijk"
 
 #: src/output/options.c:242
 #, c-format
-msgid "%s: \"%s\" is \"%s\" but an integer greater than %d is required"
-msgstr "%s: \"%s\" is \"%s\" maar een integer groter dan %d is noodzakelijk"
+msgid "%s: `%s' is `%s' but an integer greater than %d is required"
+msgstr "%s: '%s' is '%s' maar een integer groter dan %d is noodzakelijk"
 
 #: src/output/options.c:247
 #, c-format
-msgid "%s: \"%s\" is \"%s\"  but an integer between %d and %d is required"
-msgstr "%s: \"%s\" is \"%s\"  maar een integer tussen %d en %d is noodzakelijk"
+msgid "%s: `%s' is `%s'  but an integer between %d and %d is required"
+msgstr "%s: '%s' is '%s'  maar een integer tussen %d en %d is noodzakelijk"
 
 #: src/output/options.c:326
 #, c-format
-msgid "%s: \"%s\" is \"%s\" but a file name that contains \"#\" is required."
-msgstr "%s: \"%s\" is \"%s\" maar een bestandsnaam die  \"#\" bevat is noodzakelijk."
+msgid "%s: `%s' is `%s' but a file name that contains `#' is required."
+msgstr "%s: '%s' is '%s' maar een bestandsnaam die  '#' bevat is noodzakelijk."
 
 #: src/output/tab.c:206
 #, c-format
@@ -3575,42 +3917,42 @@ msgstr ""
 msgid "bad box: (%d+%d=%d,%d+%d=%d)-(%d+%d=%d,%d+%d=%d) in table size (%d,%d)\n"
 msgstr ""
 
-#: src/output/cairo.c:295
+#: src/output/cairo.c:193
 #, c-format
-msgid "error opening output file \"%s\": %s"
-msgstr "fout tijdens openen uitvoerbestand \"%s\": %s"
+msgid "`%s': bad font specification"
+msgstr "'%s': slechte fontspecificatie"
 
-#: src/output/cairo.c:312
+#: src/output/cairo.c:357
+#, c-format
+msgid "error opening output file `%s': %s"
+msgstr "fout tijdens openen uitvoerbestand '%s': %s"
+
+#: src/output/cairo.c:374
 #, c-format
 msgid "The defined page is not wide enough to hold at least %d characters in the default font.  In fact, there's only room for %d characters."
 msgstr "De gedefinieerde pagina is niet breed om ten minste %d tekens in het standaard font te bevatten. In feite is er slechts plaats voor %d tekens."
 
-#: src/output/cairo.c:322
+#: src/output/cairo.c:384
 #, c-format
-msgid "The defined page is not long enough to hold margins and headers, plus least %d lines of the default fonts.  In fact, there's only room for %d lines."
-msgstr "De gedefinieerde pagina is niet lang genoeg om marges en koppen, plus tenminste %d regels van het standaard font te bevatten.  In feite is er slechts plaats voor %d regels."
+msgid "The defined page is not long enough to hold at least %d lines in the default font.  In fact, there's only room for %d lines."
+msgstr "De gedefinieerde pagina is niet lang genoeg om tenminste %d regels van het standaard font te bevatten.  In feite is er slechts plaats voor %d regels."
 
-#: src/output/cairo.c:376
+#: src/output/cairo.c:435
 #, c-format
 msgid "error drawing output for %s driver: %s"
 msgstr "fout tijdens tekenen uitvoer voor %s driver: %s "
 
-#: src/output/cairo.c:864
+#: src/output/cairo.c:1041
 #, c-format
-msgid "\"%s\": bad font specification"
-msgstr "\"%s\": slechte fontspecificatie"
-
-#: src/output/cairo.c:1084
-#, c-format
-msgid "error writing output file \"%s\": %s"
-msgstr "fout tijdens schrijven uitvoerbestand \"%s\": %s"
+msgid "error writing output file `%s': %s"
+msgstr "fout tijdens schrijven uitvoerbestand '%s': %s"
 
 #: src/output/charts/np-plot-cairo.c:37
 #, c-format
 msgid "Normal Q-Q Plot of %s"
 msgstr "Normal Q-Q Plot van %s"
 
-#: src/output/charts/np-plot-cairo.c:38 src/output/charts/np-plot-cairo.c:66
+#: src/output/charts/np-plot-cairo.c:38 src/output/charts/np-plot-cairo.c:65
 msgid "Observed Value"
 msgstr "Waargenomen Waarde"
 
@@ -3623,7 +3965,7 @@ msgstr ""
 msgid "Detrended Normal Q-Q Plot of %s"
 msgstr "Detrended Normal Q-Q Plot van %s"
 
-#: src/output/charts/np-plot-cairo.c:67
+#: src/output/charts/np-plot-cairo.c:66
 msgid "Dev from Normal"
 msgstr ""
 
@@ -3648,55 +3990,91 @@ msgstr ""
 msgid "Eigenvalue"
 msgstr ""
 
-#: src/output/odt.c:93
+#: src/output/odt.c:94
 msgid "error creating temporary file"
 msgstr "fout tijdens aanmaken tijdelijk bestand"
 
-#: src/ui/source-init-opts.c:78
-msgid "Algorithm must be either \"compatible\" or \"enhanced\"."
-msgstr "Algoritme moet of \"compatible\" of \"enhanced\" zijn."
+#: src/ui/source-init-opts.c:80
+msgid "Algorithm must be either `compatible' or `enhanced'."
+msgstr "Algoritme moet of 'compatible' of 'enhanced' zijn."
 
-#: src/ui/source-init-opts.c:103
-msgid "Syntax must be either \"compatible\" or \"enhanced\"."
-msgstr "Syntax moet of \"compatible\" of \"enhanced\" zijn."
+#: src/ui/source-init-opts.c:107
+msgid "Syntax must be either `compatible' or `enhanced'."
+msgstr "Syntax moet of 'compatible' of 'enhanced' zijn."
 
-#: src/ui/terminal/main.c:128
+#: src/ui/terminal/main.c:146
 msgid "Stopping syntax file processing here to avoid a cascade of dependent command failures."
 msgstr "Stop syntaxbestand uitvoering hier om een cascade van afhankelijke opdrachtfouten te voorkomen."
 
-#: src/ui/terminal/msg-ui.c:127
-#, c-format
-msgid "Notes (%d) exceed limit (%d).  Suppressing further notes."
-msgstr "Notities (%d) overschrijdt limiet (%d).  Onderdruk verdere notitties."
-
-#: src/ui/terminal/msg-ui.c:135
-#, c-format
-msgid "Warnings (%d) exceed limit (%d)."
-msgstr "Waarschuwingen (%d) overschrijden limiet (%d)."
-
-#: src/ui/terminal/msg-ui.c:138
-#, c-format
-msgid "Errors (%d) exceed limit (%d)."
-msgstr "Fouten (%d) overschrijden limiet (%d)."
-
-#: src/ui/terminal/terminal.c:72
+#: src/ui/terminal/terminal.c:62
 #, c-format
 msgid "could not access definition for terminal `%s'"
 msgstr "kon definitie voor terminal '%s' niet benaderen"
 
-#: src/ui/terminal/terminal-opts.c:119
+#: src/ui/terminal/terminal-opts.c:120
 #, c-format
 msgid "%s: output option missing `='"
 msgstr "%s: ontbrekende uitvoer-optie '='"
 
-#: src/ui/terminal/terminal-opts.c:126
+#: src/ui/terminal/terminal-opts.c:127
 #, c-format
 msgid "%s: output option specified more than once"
 msgstr "%s: uitvoer-optie meer dan 1 keer gespecificeerd"
 
-#: src/ui/gui/checkbox-treeview.c:92 src/language/stats/crosstabs.q:1213
-#: src/language/stats/crosstabs.q:1240 src/language/stats/crosstabs.q:1263
-#: src/language/stats/crosstabs.q:1287 src/language/stats/examine.q:1638
+#: src/ui/terminal/terminal-opts.c:187
+#, c-format
+msgid ""
+"PSPP, a program for statistical analysis of sample data.\n"
+"Usage: %s [OPTION]... FILE...\n"
+"\n"
+"Arguments to long options also apply to equivalent short options.\n"
+"\n"
+"Output options:\n"
+"  -o, --output=FILE         output to FILE, default format from FILE's name\n"
+"  -O format=FORMAT          override format for previous -o\n"
+"  -O OPTION=VALUE           set output option to customize previous -o\n"
+"  -O device={terminal|listing}  override device type for previous -o\n"
+"  -e, --error-file=FILE     append errors, warnings, and notes to FILE\n"
+"  --no-output               disable default output driver\n"
+"Supported output formats: %s\n"
+"\n"
+"Language options:\n"
+"  -I, --include=DIR         append DIR to search path\n"
+"  -I-, --no-include         clear search path\n"
+"  -r, --no-statrc           disable running rc file at startup\n"
+"  -a, --algorithm={compatible|enhanced}\n"
+"                            set to `compatible' if you want output\n"
+"                            calculated from broken algorithms\n"
+"  -x, --syntax={compatible|enhanced}\n"
+"                            set to `compatible' to disable PSPP extensions\n"
+"  -i, --interactive         interpret syntax in interactive mode\n"
+"  -s, --safer               don't allow some unsafe operations\n"
+"Default search path:%s\n"
+"\n"
+"Informative output:\n"
+"  -h, --help                display this help and exit\n"
+"  -V, --version             output version information and exit\n"
+"\n"
+"Non-option arguments are interpreted as syntax files to execute.\n"
+msgstr ""
+
+#: src/ui/gui/aggregate-dialog.c:162
+msgid "Aggregate destination file"
+msgstr "Aggregatie doelbestand"
+
+#: src/ui/gui/aggregate-dialog.c:173 src/ui/gui/psppire-data-window.c:403
+#: src/ui/gui/psppire-data-window.c:615
+msgid "System Files (*.sav)"
+msgstr "Systeembestanden (*.sav)"
+
+#: src/ui/gui/aggregate-dialog.c:179 src/ui/gui/psppire-data-window.c:409
+#: src/ui/gui/psppire-data-window.c:621
+msgid "Portable Files (*.por) "
+msgstr "Overdraagbaar (Portable) bestanden (*.por)"
+
+#: src/ui/gui/checkbox-treeview.c:92 src/language/stats/crosstabs.q:1205
+#: src/language/stats/crosstabs.q:1232 src/language/stats/crosstabs.q:1255
+#: src/language/stats/crosstabs.q:1279 src/language/stats/examine.q:1638
 msgid "Statistic"
 msgstr "Statistiek"
 
@@ -3709,7 +4087,7 @@ msgstr "Kolomnummer: %d"
 msgid "Chisq"
 msgstr "Chisq"
 
-#: src/ui/gui/crosstabs-dialog.c:42 src/language/stats/crosstabs.q:1774
+#: src/ui/gui/crosstabs-dialog.c:42 src/language/stats/crosstabs.q:1768
 msgid "Phi"
 msgstr "Phi"
 
@@ -3717,7 +4095,7 @@ msgstr "Phi"
 msgid "CC"
 msgstr "CC"
 
-#: src/ui/gui/crosstabs-dialog.c:44 src/language/stats/crosstabs.q:1912
+#: src/ui/gui/crosstabs-dialog.c:44 src/language/stats/crosstabs.q:1906
 msgid "Lambda"
 msgstr "Lambda"
 
@@ -3737,7 +4115,7 @@ msgstr "CTau"
 msgid "Risk"
 msgstr ""
 
-#: src/ui/gui/crosstabs-dialog.c:49 src/language/stats/crosstabs.q:1779
+#: src/ui/gui/crosstabs-dialog.c:49 src/language/stats/crosstabs.q:1773
 msgid "Gamma"
 msgstr "Gamma"
 
@@ -3745,11 +4123,11 @@ msgstr "Gamma"
 msgid "D"
 msgstr "D"
 
-#: src/ui/gui/crosstabs-dialog.c:51 src/language/stats/crosstabs.q:1782
+#: src/ui/gui/crosstabs-dialog.c:51 src/language/stats/crosstabs.q:1776
 msgid "Kappa"
 msgstr "Kappa"
 
-#: src/ui/gui/crosstabs-dialog.c:52 src/language/stats/crosstabs.q:1916
+#: src/ui/gui/crosstabs-dialog.c:52 src/language/stats/crosstabs.q:1910
 msgid "Eta"
 msgstr "Eta"
 
@@ -3788,10 +4166,6 @@ msgstr ""
 msgid "Adjusted Std. Residual"
 msgstr ""
 
-#: src/ui/gui/descriptives-dialog.c:41 src/ui/gui/frequencies-dialog.c:42
-msgid "Standard deviation"
-msgstr "Standaarddeviatie"
-
 #: src/ui/gui/descriptives-dialog.c:46
 msgid "Standard error"
 msgstr "Standaardfout"
@@ -3827,10 +4201,6 @@ msgstr ""
 msgid "Median"
 msgstr "Mediaan"
 
-#: src/ui/gui/helper.c:197
-msgid "Sorry. The help system hasn't yet been implemented."
-msgstr "Sorry. Het hulp systeem is nog niet geïmplementeerd."
-
 #: src/ui/gui/help-menu.c:67
 msgid "A program for the analysis of sampled data"
 msgstr "Een programma voor de analyse van bemonsterde gegevens"
@@ -3843,8 +4213,8 @@ msgstr "Harry Thijssen"
 
 #: src/ui/gui/help-menu.c:98
 #, c-format
-msgid "Cannot open reference manual: %s.  The PSPP user manual is also available at http://www.gnu.org/software/pspp/documentation.html"
-msgstr "Kan de handleiding niet openen: %s.  De PSPP gebruikers handleiding is ook beschikbaar op http://www.gnu.org/software/pspp/documentation.html"
+msgid "Cannot open reference manual: %s.  The PSPP user manual is also available at %s"
+msgstr "Kan de handleiding niet openen: %s.  De PSPP gebruikers handleiding is ook beschikbaar op %s"
 
 #: src/ui/gui/help-menu.c:117
 msgid "_Help"
@@ -3854,6 +4224,36 @@ msgstr "_Hulp"
 msgid "_Reference Manual"
 msgstr "_Handleiding"
 
+#: src/ui/gui/main.c:99
+#, c-format
+msgid ""
+"PSPPIRE, a GUI for PSPP, a program for statistical analysis of sample data.\n"
+"Usage: %s [OPTION]... FILE\n"
+"\n"
+"Arguments to long options also apply to equivalent short options.\n"
+"\n"
+"GUI options:\n"
+"  -q, --no-splash           don't show splash screen during startup\n"
+"\n"
+"%sLanguage options:\n"
+"  -I, --include=DIR         append DIR to search path\n"
+"  -I-, --no-include         clear search path\n"
+"  -a, --algorithm={compatible|enhanced}\n"
+"                            set to `compatible' if you want output\n"
+"                            calculated from broken algorithms\n"
+"  -x, --syntax={compatible|enhanced}\n"
+"                            set to `compatible' to disable PSPP extensions\n"
+"  -i, --interactive         interpret syntax in interactive mode\n"
+"  -s, --safer               don't allow some unsafe operations\n"
+"Default search path:%s\n"
+"\n"
+"Informative output:\n"
+"  -h, --help                display this help and exit\n"
+"  -V, --version             output version information and exit\n"
+"\n"
+"A non-option argument is interpreted as a .sav or .por file to load.\n"
+msgstr ""
+
 #: src/ui/gui/missing-val-dialog.c:113 src/ui/gui/missing-val-dialog.c:167
 msgid "Incorrect value for variable type"
 msgstr "Onjuiste waarde voor variabelentype"
@@ -3887,140 +4287,161 @@ msgstr "Variabelenweergave"
 msgid "var"
 msgstr "var"
 
-#: src/ui/gui/psppire-data-window.c:212
+#: src/ui/gui/psppire-data-window.c:213
 msgid "Transformations Pending"
 msgstr "Transformaties uitstaand"
 
-#: src/ui/gui/psppire-data-window.c:228
+#: src/ui/gui/psppire-data-window.c:229
 msgid "Filter off"
 msgstr "Filter uit"
 
-#: src/ui/gui/psppire-data-window.c:242
+#: src/ui/gui/psppire-data-window.c:243
 #, c-format
 msgid "Filter by %s"
 msgstr "Filter op %s"
 
-#: src/ui/gui/psppire-data-window.c:263
+#: src/ui/gui/psppire-data-window.c:264
 msgid "No Split"
 msgstr "Geen splits"
 
-#: src/ui/gui/psppire-data-window.c:272
+#: src/ui/gui/psppire-data-window.c:273
 msgid "Split by "
 msgstr "Splits op "
 
-#: src/ui/gui/psppire-data-window.c:300
+#: src/ui/gui/psppire-data-window.c:301
 msgid "Weights off"
 msgstr "Weging uit"
 
-#: src/ui/gui/psppire-data-window.c:314
+#: src/ui/gui/psppire-data-window.c:315
 #, c-format
 msgid "Weight by %s"
 msgstr "Weeg op %s"
 
-#: src/ui/gui/psppire-data-window.c:382
+#: src/ui/gui/psppire-data-window.c:383
 msgid "Open"
 msgstr "Open"
 
-#: src/ui/gui/psppire-data-window.c:392
+#: src/ui/gui/psppire-data-window.c:393
 msgid "Data and Syntax Files"
 msgstr "Gegevens- en Syntax-bestanden"
 
-#: src/ui/gui/psppire-data-window.c:402 src/ui/gui/psppire-data-window.c:614
-msgid "System Files (*.sav)"
-msgstr "Systeembestanden (*.sav)"
-
-#: src/ui/gui/psppire-data-window.c:408 src/ui/gui/psppire-data-window.c:620
-msgid "Portable Files (*.por) "
-msgstr "Overdraagbaar (Portable) bestanden (*.por)"
-
-#: src/ui/gui/psppire-data-window.c:414 src/ui/gui/psppire-syntax-window.c:292
+#: src/ui/gui/psppire-data-window.c:415 src/ui/gui/psppire-syntax-window.c:501
 msgid "Syntax Files (*.sps) "
 msgstr "Syntaxbestanden (*.sps)"
 
-#: src/ui/gui/psppire-data-window.c:420 src/ui/gui/psppire-data-window.c:626
-#: src/ui/gui/psppire-syntax-window.c:298
+#: src/ui/gui/psppire-data-window.c:421 src/ui/gui/psppire-data-window.c:627
+#: src/ui/gui/psppire-syntax-window.c:507
 msgid "All Files"
 msgstr "Alle bestanden"
 
-#: src/ui/gui/psppire-data-window.c:606
+#: src/ui/gui/psppire-data-window.c:607 src/ui/gui/aggregate.ui:448
 msgid "Save"
 msgstr "Opslaan"
 
-#: src/ui/gui/psppire-data-window.c:639
+#: src/ui/gui/psppire-data-window.c:640
 msgid "Portable File"
 msgstr "Overdraagbaar bestand"
 
-#: src/ui/gui/psppire-data-window.c:776
+#: src/ui/gui/psppire-data-window.c:777
 msgid "Font Selection"
 msgstr "Font selectie"
 
-#: src/ui/gui/psppire-data-window.c:1264
+#. TRANSLATORS: This will form a filename.  Please avoid whitespace.
+#: src/ui/gui/psppire-data-window.c:1271
+msgid "PSPP-data"
+msgstr ""
+
+#: src/ui/gui/psppire-data-window.c:1272
 msgid "Data Editor"
 msgstr "Gegevensbewerker"
 
-#: src/ui/gui/psppire-output-window.c:458
-msgid "Export Output"
-msgstr "Exporteer Uitvoer"
+#. TRANSLATORS: This string must be a valid variable name.  That means:
+#. - The string must be at most 64 bytes (not characters) long.
+#. - The string may not contain whitespace.
+#. - The first character may not be '$'
+#. - The first character may not be a digit
+#. - The final charactor may not be '.' or '_'
+#.
+#: src/ui/gui/psppire-dict.c:366
+#, c-format
+msgid "VAR%05d"
+msgstr ""
 
-#: src/ui/gui/psppire-output-window.c:466
-#, fuzzy
-msgid "PDF Files (*.pdf)"
+#: src/ui/gui/psppire-output-window.c:456
+msgid "Infer file type from extension"
+msgstr ""
+
+#: src/ui/gui/psppire-output-window.c:457
+msgid "PDF (*.pdf)"
 msgstr "PDF (*.pdf)"
 
-#: src/ui/gui/psppire-output-window.c:467
-#, fuzzy
-msgid "HTML Files (*.html)"
+#: src/ui/gui/psppire-output-window.c:458
+msgid "HTML (*.html)"
 msgstr "HTML (*.html)"
 
-#: src/ui/gui/psppire-output-window.c:468
-#, fuzzy
-msgid "OpenDocument Files (*.odt)"
+#: src/ui/gui/psppire-output-window.c:459
+msgid "OpenDocument (*.odt)"
 msgstr "OpenDocument (*.odt)"
 
-#: src/ui/gui/psppire-output-window.c:469
-#, fuzzy
-msgid "Text Files (*.txt)"
+#: src/ui/gui/psppire-output-window.c:460
+msgid "Text (*.txt)"
 msgstr "Text (*.txt)"
 
-#: src/ui/gui/psppire-output-window.c:470
-#, fuzzy
-msgid "PostScript Files (*.ps)"
+#: src/ui/gui/psppire-output-window.c:461
+msgid "PostScript (*.ps)"
 msgstr "PostScript (*.ps)"
 
-#: src/ui/gui/psppire-output-window.c:471
-#, fuzzy
-msgid "Comma-Separated Value Files (*.csv)"
+#: src/ui/gui/psppire-output-window.c:462
+msgid "Comma-Separated Values (*.csv)"
 msgstr "Komma-Gescheiden-Waarde (*.csv)"
 
-#: src/ui/gui/psppire-output-window.c:605
+#: src/ui/gui/psppire-output-window.c:563
+msgid "Export Output"
+msgstr "Exporteer Uitvoer"
+
+#: src/ui/gui/psppire-output-window.c:817
+msgid "failed to create temporary directory"
+msgstr "aanmaken van tijdelijk bestand is mislukt"
+
+#. TRANSLATORS: This will form a filename.  Please avoid whitespace.
+#: src/ui/gui/psppire-output-window.c:1048
+msgid "Output"
+msgstr "Uitvoer"
+
+#: src/ui/gui/psppire-output-window.c:1049
 msgid "Output Viewer"
 msgstr "Uitvoer Viewer"
 
-#: src/ui/gui/psppire-syntax-window.c:265
+#: src/ui/gui/psppire-syntax-window.c:474
 #, c-format
-msgid "Saved file \"%s\""
-msgstr "Opslaan bestand \"%s\""
+msgid "Saved file `%s'"
+msgstr "Opslaan bestand '%s'"
 
-#: src/ui/gui/psppire-syntax-window.c:284
+#: src/ui/gui/psppire-syntax-window.c:493
 msgid "Save Syntax"
 msgstr "Sla Syntax op"
 
-#: src/ui/gui/psppire-syntax-window.c:496
+#. TRANSLATORS: This will form a filename.  Please avoid whitespace.
+#: src/ui/gui/psppire-syntax-window.c:745
+msgid "Syntax"
+msgstr "Syntax"
+
+#: src/ui/gui/psppire-syntax-window.c:746
 msgid "Syntax Editor"
 msgstr "Syntaxbewerker"
 
-#: src/ui/gui/psppire-syntax-window.c:510
+#: src/ui/gui/psppire-syntax-window.c:760
 #, c-format
-msgid "Cannot load syntax file '%s'"
+msgid "Cannot load syntax file `%s'"
 msgstr "Kan syntaxbestand '%s' niet laden"
 
 #: src/ui/gui/psppire-var-sheet.c:535 src/ui/gui/psppire-var-store.c:833
-#: src/language/stats/crosstabs.q:1288 src/ui/gui/psppire.ui:2055
+#: src/language/stats/crosstabs.q:1280 src/ui/gui/compute.ui:599
 msgid "Type"
 msgstr "Type"
 
 #: src/ui/gui/psppire-var-sheet.c:536 src/ui/gui/psppire-var-store.c:834
-#: src/ui/gui/psppire.ui:1974
+#: src/ui/gui/compute.ui:517
 msgid "Width"
 msgstr "Breedte"
 
@@ -4033,7 +4454,7 @@ msgid "Values"
 msgstr "Waardes"
 
 #: src/ui/gui/psppire-var-sheet.c:540 src/ui/gui/psppire-var-store.c:838
-#: src/language/stats/crosstabs.q:822 src/language/stats/examine.q:1104
+#: src/language/stats/crosstabs.q:814 src/language/stats/examine.q:1104
 #: src/language/stats/frequencies.q:864 src/language/stats/frequencies.q:1036
 msgid "Missing"
 msgstr "Ontbrekend"
@@ -4070,46 +4491,56 @@ msgstr "Euro"
 msgid "Custom"
 msgstr "Aangepast"
 
+#: src/ui/gui/psppire-var-store.c:755
+#, c-format
+msgid "{%s,`%s'}_"
+msgstr ""
+
 #: src/ui/gui/psppire-window.c:97
 #, c-format
 msgid "%s %s PSPPIRE %s"
 msgstr "%s %s PSPPIRE %s"
 
-#: src/ui/gui/psppire-window.c:468
+#. TRANSLATORS: This will form a filename.  Please avoid whitespace.
+#: src/ui/gui/psppire-window.c:247
+msgid "Untitled"
+msgstr "Zonder titel"
+
+#: src/ui/gui/psppire-window.c:469
 #, c-format
-msgid "Save the changes to \"%s\" before closing?"
-msgstr "Opslaan van de aanpassingen in \"%s\" voor het afsluiten?"
+msgid "Save the changes to `%s' before closing?"
+msgstr "Opslaan van de aanpassingen in '%s' voor het afsluiten?"
 
-#: src/ui/gui/psppire-window.c:475
+#: src/ui/gui/psppire-window.c:476
 #, c-format
 msgid "If you don't save, changes from the last %ld seconds will be permanently lost."
 msgstr "Als u niet opslaat zullen de aanpassingen van de laatste %ld seconden permanent verloren gaan."
 
-#: src/ui/gui/psppire-window.c:479
+#: src/ui/gui/psppire-window.c:480
 msgid "Close _without saving"
 msgstr "Sluit _zonder opslaan"
 
-#: src/ui/gui/recode-dialog.c:911
+#: src/ui/gui/recode-dialog.c:887
 msgid "Recode into Different Variables"
 msgstr "Hercodeer in Andere Variabelen"
 
-#: src/ui/gui/recode-dialog.c:914 src/ui/gui/recode.ui:692
+#: src/ui/gui/recode-dialog.c:890 src/ui/gui/recode.ui:692
 msgid "Recode into Same Variables"
 msgstr "Hercodeer in Zelfde Variabelen"
 
-#: src/ui/gui/recode-dialog.c:929 src/ui/gui/recode-dialog.c:1025
+#: src/ui/gui/recode-dialog.c:904 src/ui/gui/recode-dialog.c:1000
 msgid "New"
 msgstr "Nieuw"
 
-#: src/ui/gui/recode-dialog.c:944 src/ui/gui/recode-dialog.c:1017
+#: src/ui/gui/recode-dialog.c:919 src/ui/gui/recode-dialog.c:992
 msgid "Old"
 msgstr "Oud"
 
-#: src/ui/gui/recode-dialog.c:1274
+#: src/ui/gui/recode-dialog.c:1249
 msgid "Recode into Different Variables: Old and New Values "
 msgstr "Hercodeer in Andere Variabelen: Oude en Nieuwe Waardes "
 
-#: src/ui/gui/recode-dialog.c:1275
+#: src/ui/gui/recode-dialog.c:1250
 msgid "Recode into Same Variables: Old and New Values"
 msgstr "Hercodeer in Zelfde Variabelen: Oude en Nieuwe Waardes "
 
@@ -4139,30 +4570,30 @@ msgstr "Ongeveer %3d%% van alle cases."
 msgid "Exactly %3d cases from the first %3d cases."
 msgstr "Precies %3d cases van de eerste %3d cases."
 
-#: src/ui/gui/select-cases-dialog.c:223
+#: src/ui/gui/select-cases-dialog.c:222
 #, c-format
 msgid "%d thru %d"
 msgstr "%d tot %d"
 
 #: src/ui/gui/text-data-import-dialog.c:461
 #, c-format
-msgid "Could not open \"%s\": %s"
-msgstr "Kon \"%s\": %s niet openen"
+msgid "Could not open `%s': %s"
+msgstr "Kon '%s': %s niet openen"
 
 #: src/ui/gui/text-data-import-dialog.c:477
 #, c-format
-msgid "Error reading \"%s\": %s"
-msgstr "Fout bij lezen \"%s\": %s"
+msgid "Error reading `%s': %s"
+msgstr "Fout bij lezen '%s': %s"
 
 #: src/ui/gui/text-data-import-dialog.c:480
 #, c-format
-msgid "Failed to read \"%s\", because it contains a line over %d bytes long and therefore appears not to be a text file."
-msgstr "Lezen van \"%s\" mislukt omdat het een regel bevat die meer dan %d bytes lang is en daarom is het geen tekstbestand."
+msgid "Failed to read `%s', because it contains a line over %d bytes long and therefore appears not to be a text file."
+msgstr "Lezen van '%s' mislukt omdat het een regel bevat die meer dan %d bytes lang is en daarom is het geen tekstbestand."
 
 #: src/ui/gui/text-data-import-dialog.c:494
 #, c-format
-msgid "\"%s\" is empty."
-msgstr "\"%s\" is leeg."
+msgid "`%s' is empty."
+msgstr "'%s' is leeg."
 
 #: src/ui/gui/text-data-import-dialog.c:539
 msgid "Import Delimited Text Data"
@@ -4172,52 +4603,75 @@ msgstr "Importeer Gescheiden Tekstgegevens"
 msgid "Importing Delimited Text Data"
 msgstr "Importeren Gescheiden Tekstgegevens"
 
+#: src/ui/gui/text-data-import-dialog.c:739
+#, c-format
+msgid "Only the first %4d cases"
+msgstr "Alleen de eerste %4d cases"
+
 #: src/ui/gui/text-data-import-dialog.c:749
+#, fuzzy, c-format
+msgid "Only the first %3d %% of file (approximately)"
+msgstr "% van bestand (ongeveer)"
+
+#: src/ui/gui/text-data-import-dialog.c:774
 msgid ""
 "This assistant will guide you through the process of importing data into PSPP from a text file with one line per case,  in which fields are separated by tabs, commas, or other delimiters.\n"
 "\n"
 msgstr "De assistent zal je begeleiden door het proces van het importeren van gegevens in PSPP van een tekstbestand met 1 regel per case, waarin velden zijn gescheiden door tabs, komma's of andere scheidingstekens.\n"
 
-#: src/ui/gui/text-data-import-dialog.c:755
+#: src/ui/gui/text-data-import-dialog.c:780
 #, c-format
 msgid "The selected file contains %zu line of text.  "
 msgid_plural "The selected file contains %zu lines of text.  "
 msgstr[0] "Het geselecteerde bestand bevat %zu regel tekst.  "
 msgstr[1] "Het geselecteerde bestand bevat %zu regels tekst. "
 
-#: src/ui/gui/text-data-import-dialog.c:763
+#: src/ui/gui/text-data-import-dialog.c:788
 #, c-format
 msgid "The selected file contains approximately %lu line of text.  "
 msgid_plural "The selected file contains approximately %lu lines of text.  "
 msgstr[0] "Het geselecteerde bestand bevat ongeveer %lu regel tekst. "
 msgstr[1] "Het geselecteerde bestand bevat ongeveer %lu regels tekst. "
 
-#: src/ui/gui/text-data-import-dialog.c:769
+#: src/ui/gui/text-data-import-dialog.c:794
 #, c-format
 msgid "Only the first %zu line of the file will be shown for preview purposes in the following screens.  "
 msgid_plural "Only the first %zu lines of the file will be shown for preview purposes in the following screens.  "
 msgstr[0] "Alleen de eerste %zu regel van het bestand worden getoond voor voorbeeld doeleinden in de volgende schermen.  "
 msgstr[1] "Alleen de eerste %zu regels van het bestand worden getoond voor voorbeeld doeleinden in de volgende schermen.  "
 
-#: src/ui/gui/text-data-import-dialog.c:776
+#: src/ui/gui/text-data-import-dialog.c:801
 msgid "You may choose below how much of the file should actually be imported."
 msgstr "Hieronder kunt u kiezen hoeveel van het bestand daadwerkelijk geïmporteerd moet worden."
 
-#: src/ui/gui/text-data-import-dialog.c:1523
-#: src/ui/gui/text-data-import-dialog.c:1768
+#: src/ui/gui/text-data-import-dialog.c:884
+msgid "Text"
+msgstr "Tekst"
+
+#: src/ui/gui/text-data-import-dialog.c:1550
+#: src/ui/gui/text-data-import-dialog.c:1794
 msgid "This input line has too few separators to fill in this field."
 msgstr "Deze invoerregel heeft te weinig scheidingstekens om dit veld te vullen."
 
-#: src/ui/gui/text-data-import-dialog.c:1759
-#, c-format
-msgid "Field content \"%.*s\" cannot be parsed in format %s."
-msgstr "Veldinhoud \"%.*s\" kan niet opgedeeld worden in opmaak %s."
+#: src/ui/gui/text-data-import-dialog.c:1785
+#, fuzzy, c-format
+msgid "Cannot parse field content `%.*s' as format %s: %s"
+msgstr "Veldinhoud '%.*s' kan niet opgedeeld worden in opmaak %s."
+
+#: src/ui/gui/text-data-import-dialog.c:1938
+msgid "Line"
+msgstr ""
 
 #: src/ui/gui/t-test-options.c:60
 #, c-format
 msgid "Confidence Interval: %2d %%"
 msgstr "Betrouwbaarheidsinterval: %2d %%"
 
+#: src/ui/gui/val-labs-dialog.c:515
+#, fuzzy, c-format
+msgid "%s = `%s'"
+msgstr "%s & %s"
+
 #: src/ui/gui/variable-info-dialog.c:77
 #, c-format
 msgid "Label: %s\n"
@@ -4257,27 +4711,27 @@ msgstr "Weeg cases niet"
 msgid "Weight cases by %s"
 msgstr "Weeg cases per %s"
 
-#: tests/dissect-sysfile.c:571
+#: tests/dissect-sysfile.c:572
 #, c-format
 msgid "Unrecognized record type 7, subtype %d."
 msgstr "Niet-herkend recordtype 7, subtype %d."
 
-#: tests/dissect-sysfile.c:850
+#: tests/dissect-sysfile.c:851
 #, c-format
 msgid "%s: Error parsing attribute value %s[%d]"
 msgstr "%s: Fout bij het ontleden van attribuut waarde %s[%d]"
 
-#: tests/dissect-sysfile.c:856
+#: tests/dissect-sysfile.c:857
 #, c-format
 msgid "%s: Attribute value %s[%d] is not quoted: %s"
 msgstr "%s: Attribuut waarde %s[%d] is niet geciteerd: %s"
 
-#: tests/dissect-sysfile.c:880
+#: tests/dissect-sysfile.c:881
 #, c-format
 msgid "Bad size %zu for extended number of cases."
 msgstr "Onjuiste lengte %zu voor vergroot aantal cases."
 
-#: tests/dissect-sysfile.c:886
+#: tests/dissect-sysfile.c:887
 #, c-format
 msgid "Bad count %zu for extended number of cases."
 msgstr ""
@@ -4320,52 +4774,61 @@ msgstr "%s is geen herkende codering of lokale naam"
 msgid "WIDTH must be at least 40."
 msgstr "WIDTH moet tenminste 40 zijn."
 
-#: src/language/utilities/set.q:490
+#: src/language/utilities/set.q:494
 #, c-format
 msgid "FORMAT requires numeric output format as an argument.  Specified format %s is of type string."
 msgstr "FORMAT vereist numerieke uitvoeropmaak als een argument. Opgegeven opmaak %s is van het type tekenreeks."
 
-#: src/language/utilities/set.q:707
+#: src/language/utilities/set.q:711
 msgid "ISL (32-bit IEEE 754 single, little-endian)"
 msgstr "ISL (32-bit IEEE 754 single, little-endian)"
 
-#: src/language/utilities/set.q:710
+#: src/language/utilities/set.q:714
 msgid "ISB (32-bit IEEE 754 single, big-endian)"
 msgstr "ISB (32-bit IEEE 754 single, big-endian)"
 
-#: src/language/utilities/set.q:713
+#: src/language/utilities/set.q:717
 msgid "IDL (64-bit IEEE 754 double, little-endian)"
 msgstr "IDL (64-bit IEEE 754 double, little-endian)"
 
-#: src/language/utilities/set.q:716
+#: src/language/utilities/set.q:720
 msgid "IDB (64-bit IEEE 754 double, big-endian)"
 msgstr "IDB (64-bit IEEE 754 double, big-endian)"
 
-#: src/language/utilities/set.q:720
+#: src/language/utilities/set.q:724
 msgid "VF (32-bit VAX F, VAX-endian)"
 msgstr "VF (32-bit VAX F, VAX-endian)"
 
-#: src/language/utilities/set.q:723
+#: src/language/utilities/set.q:727
 msgid "VD (64-bit VAX D, VAX-endian)"
 msgstr "VD (64-bit VAX D, VAX-endian)"
 
-#: src/language/utilities/set.q:726
+#: src/language/utilities/set.q:730
 msgid "VG (64-bit VAX G, VAX-endian)"
 msgstr "VG (64-bit VAX G, VAX-endian)"
 
-#: src/language/utilities/set.q:730
+#: src/language/utilities/set.q:734
 msgid "ZS (32-bit IBM Z hexadecimal short, big-endian)"
 msgstr "ZS (32-bit IBM Z hexadecimal short, big-endian)"
 
-#: src/language/utilities/set.q:733
+#: src/language/utilities/set.q:737
 msgid "ZL (64-bit IBM Z hexadecimal long, big-endian)"
 msgstr "ZL (64-bit IBM Z hexadecimal long, big-endian)"
 
-#: src/language/utilities/set.q:835
+#: src/language/utilities/set.q:839
 #, c-format
 msgid "%s is %s."
 msgstr "%s van %s."
 
+#: src/language/utilities/set.q:942
+#, c-format
+msgid "Too many PRESERVE commands without a RESTORE: at most %d levels of saved settings are allowed."
+msgstr ""
+
+#: src/language/utilities/set.q:961
+msgid "RESTORE without matching PRESERVE."
+msgstr ""
+
 #: src/language/stats/crosstabs.q:289
 msgid "Missing mode REPORT not allowed in general mode.  Assuming MISSING=TABLE."
 msgstr "Missing modus REPORT niet toegestaan in algemene modus.  MISSING=TABLE aangenomen."
@@ -4374,236 +4837,210 @@ msgstr "Missing modus REPORT niet toegestaan in algemene modus.  MISSING=TABLE a
 msgid "Too many cross-tabulation variables or dimensions."
 msgstr "Te veel cross-tabulation variabelen of dimensies."
 
-#: src/language/stats/crosstabs.q:409
-msgid "expecting BY"
-msgstr "BY verwacht"
-
 #: src/language/stats/crosstabs.q:466
 msgid "VARIABLES must be specified before TABLES."
 msgstr "VARIABLES dient voor TABLES gespecificeerd te worden."
 
-#: src/language/stats/crosstabs.q:504
+#: src/language/stats/crosstabs.q:500
 #, c-format
 msgid "Maximum value (%ld) less than minimum value (%ld)."
 msgstr "Maximumwaarde (%ld) is kleiner dan minimumwaarde (%ld)."
 
-#: src/language/stats/crosstabs.q:818
+#: src/language/stats/crosstabs.q:810
 msgid "Summary."
 msgstr "Overzicht."
 
-#: src/language/stats/crosstabs.q:820 src/language/stats/examine.q:1164
-#: src/language/stats/reliability.q:693
-msgid "Cases"
-msgstr "Cases"
-
-#: src/language/stats/crosstabs.q:821 src/language/stats/examine.q:1103
-#: src/language/stats/frequencies.q:1035 src/language/stats/reliability.q:696
-msgid "Valid"
-msgstr "Geldig"
-
-#: src/language/stats/crosstabs.q:831 src/language/stats/examine.q:1179
+#: src/language/stats/crosstabs.q:823 src/language/stats/examine.q:1179
 #: src/language/stats/frequencies.q:815
 msgid "Percent"
 msgstr "Percentage"
 
-#: src/language/stats/crosstabs.q:1109
+#: src/language/stats/crosstabs.q:1101
 msgid "count"
 msgstr "aantal"
 
-#: src/language/stats/crosstabs.q:1110
+#: src/language/stats/crosstabs.q:1102
 msgid "row %"
 msgstr "rij %"
 
-#: src/language/stats/crosstabs.q:1111
+#: src/language/stats/crosstabs.q:1103
 msgid "column %"
 msgstr "kolom %"
 
-#: src/language/stats/crosstabs.q:1112
+#: src/language/stats/crosstabs.q:1104
 msgid "total %"
 msgstr "totaal %"
 
-#: src/language/stats/crosstabs.q:1113
+#: src/language/stats/crosstabs.q:1105
 msgid "expected"
 msgstr "verwacht"
 
-#: src/language/stats/crosstabs.q:1114
+#: src/language/stats/crosstabs.q:1106
 msgid "residual"
 msgstr "overblijvend"
 
-#: src/language/stats/crosstabs.q:1115
+#: src/language/stats/crosstabs.q:1107
 msgid "std. resid."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1116
+#: src/language/stats/crosstabs.q:1108
 msgid "adj. resid."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1210
+#: src/language/stats/crosstabs.q:1202
 msgid "Chi-square tests."
 msgstr "Chi-square tests."
 
-#: src/language/stats/crosstabs.q:1217
-msgid "Asymp. Sig. (2-sided)"
-msgstr ""
-
-#: src/language/stats/crosstabs.q:1219
-msgid "Exact Sig. (2-sided)"
-msgstr ""
-
-#: src/language/stats/crosstabs.q:1221
-msgid "Exact Sig. (1-sided)"
-msgstr ""
-
-#: src/language/stats/crosstabs.q:1236
+#: src/language/stats/crosstabs.q:1228
 msgid "Symmetric measures."
 msgstr "Symmetrische metingen."
 
-#: src/language/stats/crosstabs.q:1242 src/language/stats/crosstabs.q:1290
+#: src/language/stats/crosstabs.q:1234 src/language/stats/crosstabs.q:1282
 msgid "Asymp. Std. Error"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1243 src/language/stats/crosstabs.q:1291
+#: src/language/stats/crosstabs.q:1235 src/language/stats/crosstabs.q:1283
 msgid "Approx. T"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1244 src/language/stats/crosstabs.q:1292
+#: src/language/stats/crosstabs.q:1236 src/language/stats/crosstabs.q:1284
 msgid "Approx. Sig."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1258
+#: src/language/stats/crosstabs.q:1250
 msgid "Risk estimate."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1262
+#: src/language/stats/crosstabs.q:1254
 #, c-format
 msgid "95%% Confidence Interval"
 msgstr "95%% Betrouwbaarheidsinterval"
 
-#: src/language/stats/crosstabs.q:1265 src/language/stats/t-test.q:756
+#: src/language/stats/crosstabs.q:1257 src/language/stats/t-test.q:756
 #: src/language/stats/t-test.q:920 src/language/stats/t-test.q:1013
 msgid "Lower"
 msgstr "Lager"
 
-#: src/language/stats/crosstabs.q:1266 src/language/stats/t-test.q:757
+#: src/language/stats/crosstabs.q:1258 src/language/stats/t-test.q:757
 #: src/language/stats/t-test.q:921 src/language/stats/t-test.q:1014
 msgid "Upper"
 msgstr "Hoger"
 
-#: src/language/stats/crosstabs.q:1283
+#: src/language/stats/crosstabs.q:1275
 msgid "Directional measures."
 msgstr "Directionele metingen."
 
-#: src/language/stats/crosstabs.q:1708
+#: src/language/stats/crosstabs.q:1702
 msgid "Pearson Chi-Square"
 msgstr "Pearson Chi-Square"
 
-#: src/language/stats/crosstabs.q:1709
+#: src/language/stats/crosstabs.q:1703
 msgid "Likelihood Ratio"
 msgstr "Waarschijnlijkheidsratio"
 
-#: src/language/stats/crosstabs.q:1710
+#: src/language/stats/crosstabs.q:1704
 msgid "Fisher's Exact Test"
 msgstr "Fisher's Exact Test"
 
-#: src/language/stats/crosstabs.q:1711
+#: src/language/stats/crosstabs.q:1705
 msgid "Continuity Correction"
 msgstr "Continuïteitscorrectie"
 
-#: src/language/stats/crosstabs.q:1712
+#: src/language/stats/crosstabs.q:1706
 msgid "Linear-by-Linear Association"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1747 src/language/stats/crosstabs.q:1822
-#: src/language/stats/crosstabs.q:1887
+#: src/language/stats/crosstabs.q:1741 src/language/stats/crosstabs.q:1816
+#: src/language/stats/crosstabs.q:1881
 msgid "N of Valid Cases"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1766 src/language/stats/crosstabs.q:1905
+#: src/language/stats/crosstabs.q:1760 src/language/stats/crosstabs.q:1899
 msgid "Nominal by Nominal"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1767 src/language/stats/crosstabs.q:1906
+#: src/language/stats/crosstabs.q:1761 src/language/stats/crosstabs.q:1900
 msgid "Ordinal by Ordinal"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1768
+#: src/language/stats/crosstabs.q:1762
 msgid "Interval by Interval"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1769
+#: src/language/stats/crosstabs.q:1763
 msgid "Measure of Agreement"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1775
+#: src/language/stats/crosstabs.q:1769
 msgid "Cramer's V"
 msgstr "Cramer's V"
 
-#: src/language/stats/crosstabs.q:1776
+#: src/language/stats/crosstabs.q:1770
 msgid "Contingency Coefficient"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1777
+#: src/language/stats/crosstabs.q:1771
 msgid "Kendall's tau-b"
 msgstr "Kendall's tau-b"
 
-#: src/language/stats/crosstabs.q:1778
+#: src/language/stats/crosstabs.q:1772
 msgid "Kendall's tau-c"
 msgstr "Kendall's tau-c"
 
-#: src/language/stats/crosstabs.q:1780
+#: src/language/stats/crosstabs.q:1774
 msgid "Spearman Correlation"
 msgstr "Spearman Correlatie"
 
-#: src/language/stats/crosstabs.q:1781
+#: src/language/stats/crosstabs.q:1775
 msgid "Pearson's R"
 msgstr "Pearson's R"
 
-#: src/language/stats/crosstabs.q:1860
+#: src/language/stats/crosstabs.q:1854
 #, c-format
 msgid "Odds Ratio for %s (%g / %g)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1863
+#: src/language/stats/crosstabs.q:1857
 #, c-format
 msgid "Odds Ratio for %s (%.*s / %.*s)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1871
+#: src/language/stats/crosstabs.q:1865
 #, c-format
 msgid "For cohort %s = %g"
 msgstr "Voor cohort %s = %g"
 
-#: src/language/stats/crosstabs.q:1874
+#: src/language/stats/crosstabs.q:1868
 #, c-format
 msgid "For cohort %s = %.*s"
 msgstr "Voor cohort %s = %.*s"
 
-#: src/language/stats/crosstabs.q:1907
+#: src/language/stats/crosstabs.q:1901
 msgid "Nominal by Interval"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1913
+#: src/language/stats/crosstabs.q:1907
 msgid "Goodman and Kruskal tau"
 msgstr "Goodman and Kruskal tau"
 
-#: src/language/stats/crosstabs.q:1914
+#: src/language/stats/crosstabs.q:1908
 msgid "Uncertainty Coefficient"
 msgstr "Onzekerheidscoëfficiënt"
 
-#: src/language/stats/crosstabs.q:1915
+#: src/language/stats/crosstabs.q:1909
 msgid "Somers' d"
 msgstr "Somers' d"
 
-#: src/language/stats/crosstabs.q:1921
+#: src/language/stats/crosstabs.q:1915
 msgid "Symmetric"
 msgstr "Symmetrisch"
 
-#: src/language/stats/crosstabs.q:1922 src/language/stats/crosstabs.q:1923
+#: src/language/stats/crosstabs.q:1916 src/language/stats/crosstabs.q:1917
 #, c-format
 msgid "%s Dependent"
 msgstr "%s Afhankelijk"
 
-#: src/language/stats/examine.q:357
+#: src/language/stats/examine.q:356
 msgid "Not creating NP plot because data set is empty."
 msgstr "Niet aanmaken van NP plot omdat gegevens set leeg is."
 
@@ -4626,15 +5063,6 @@ msgstr ""
 msgid "%s and %s are mutually exclusive"
 msgstr "%s en %s zijn wederzijds exclusief"
 
-#: src/language/stats/examine.q:1159 src/language/stats/reliability.q:670
-msgid "Case Processing Summary"
-msgstr "Case Bewerkingsoverzicht"
-
-#: src/language/stats/examine.q:1449 src/language/stats/oneway.q:394
-#, c-format
-msgid "%g%% Confidence Interval for Mean"
-msgstr ""
-
 #: src/language/stats/examine.q:1464
 msgid "5% Trimmed Mean"
 msgstr ""
@@ -4643,11 +5071,6 @@ msgstr ""
 msgid "Interquartile Range"
 msgstr ""
 
-#: src/language/stats/examine.q:1635 src/language/stats/oneway.q:404
-#: src/ui/gui/descriptives.ui:8 src/ui/gui/examine.ui:319
-msgid "Descriptives"
-msgstr "Descriptieve"
-
 #: src/language/stats/examine.q:1821
 msgid "Highest"
 msgstr "Hoogste"
@@ -4732,127 +5155,6 @@ msgstr ""
 msgid "Omitting pie chart for %s, which has over 50 unique values."
 msgstr ""
 
-#: src/language/stats/glm.q:247
-msgid "Multivariate GLM not yet supported"
-msgstr "Mutivariante GLM wordt nog niet ondersteund"
-
-#: src/language/stats/means.q:100
-msgid "Missing required subcommand TABLES."
-msgstr "Mis vereiste subopdracht TABLES."
-
-#: src/language/stats/means.q:134
-msgid "TABLES subcommand may not appear more than once."
-msgstr "TABLES-subopdracht mag niet meer dan 1 keer voorkomen."
-
-#: src/language/stats/npar.q:111
-msgid "NPAR subcommand not currently implemented."
-msgstr ""
-
-#: src/language/stats/npar.q:256
-#, c-format
-msgid "The specified value of HI (%d) is lower than the specified value of LO (%d)"
-msgstr "De opgegeven waarde van HI (%d) is lager dan de opgegeven waarde van LO (%d)"
-
-#: src/language/stats/npar.q:311
-#, c-format
-msgid "%d expected values were given, but the specified range (%d-%d) requires exactly %d values."
-msgstr "%d verwachte waardes waren opgegeven, maar het opgegeven bereik (%d-%d) vereist precies %d waardes."
-
-#: src/language/stats/npar.q:453 src/language/stats/t-test.q:380
-#, c-format
-msgid "PAIRED was specified but the number of variables preceding WITH (%zu) did not match the number following (%zu)."
-msgstr "PAIRED was opgegeven maar het aantal variabelen voor WITH (%zu) komt niet overeen met het aantal er achter (%zu)."
-
-#: src/language/stats/oneway.q:170
-msgid "Number of contrast coefficients must equal the number of groups"
-msgstr ""
-
-#: src/language/stats/oneway.q:179
-#, c-format
-msgid "Coefficients for contrast %zu do not total zero"
-msgstr ""
-
-#: src/language/stats/oneway.q:242
-#, c-format
-msgid "`%s' is not a variable name"
-msgstr "'%s' is geen variabelennaam"
-
-#: src/language/stats/oneway.q:274 src/language/stats/regression.q:283
-msgid "Sum of Squares"
-msgstr ""
-
-#: src/language/stats/oneway.q:276 src/language/stats/regression.q:285
-msgid "Mean Square"
-msgstr ""
-
-#: src/language/stats/oneway.q:277 src/language/stats/regression.q:286
-#: src/language/stats/t-test.q:749
-msgid "F"
-msgstr "F"
-
-#: src/language/stats/oneway.q:278 src/language/stats/oneway.q:535
-#: src/language/stats/regression.q:201 src/language/stats/regression.q:287
-msgid "Significance"
-msgstr "Significantie "
-
-#: src/language/stats/oneway.q:300
-msgid "Between Groups"
-msgstr "Tussen groepen"
-
-#: src/language/stats/oneway.q:301
-msgid "Within Groups"
-msgstr "Binnen groepen"
-
-#: src/language/stats/oneway.q:345 src/language/stats/regression.q:312
-msgid "ANOVA"
-msgstr "ANOVA"
-
-#: src/language/stats/oneway.q:532
-msgid "Levene Statistic"
-msgstr ""
-
-#: src/language/stats/oneway.q:533
-msgid "df1"
-msgstr "df1"
-
-#: src/language/stats/oneway.q:534
-msgid "df2"
-msgstr "df2"
-
-#: src/language/stats/oneway.q:537
-msgid "Test of Homogeneity of Variances"
-msgstr ""
-
-#: src/language/stats/oneway.q:603
-msgid "Contrast Coefficients"
-msgstr "Contrastcoëfficiënten"
-
-#: src/language/stats/oneway.q:605 src/language/stats/oneway.q:681
-msgid "Contrast"
-msgstr "Contrast"
-
-#: src/language/stats/oneway.q:679
-msgid "Contrast Tests"
-msgstr "Contrasttesten"
-
-#: src/language/stats/oneway.q:682
-msgid "Value of Contrast"
-msgstr ""
-
-#: src/language/stats/oneway.q:684 src/language/stats/regression.q:200
-#: src/language/stats/t-test.q:751 src/language/stats/t-test.q:922
-#: src/language/stats/t-test.q:1009
-msgid "t"
-msgstr "t"
-
-#: src/language/stats/oneway.q:730
-msgid "Assume equal variances"
-msgstr "Veronderstelt gelijke variantie"
-
-#: src/language/stats/oneway.q:734
-msgid "Does not assume equal"
-msgstr "Veronderstelt niet gelijk"
-
 #: src/language/stats/rank.q:220
 #, c-format
 msgid "%s of %s by %s"
@@ -4956,87 +5258,14 @@ msgstr "Coëfficiëntcorrelaties"
 msgid "The dependent variable is equal to the independent variable.The least squares line is therefore Y=X.Standard errors and related statistics may be meaningless."
 msgstr ""
 
-#: src/language/stats/regression.q:891
+#: src/language/stats/regression.q:940
 msgid "REGRESSION requires numeric variables."
-msgstr ""
+msgstr "REGRESSION vereist numerieke variabelen."
 
-#: src/language/stats/regression.q:962
+#: src/language/stats/regression.q:1015
 msgid "No valid data found. This command was skipped."
 msgstr "Geen geldige gegevens gevonden. Deze opdracht is overgeslagen."
 
-#: src/language/stats/reliability.q:421
-msgid "Reliability Statistics"
-msgstr "Betrouwbaarheids Statistieken"
-
-#: src/language/stats/reliability.q:462
-msgid "Item-Total Statistics"
-msgstr "Item-Totaal Statistieken"
-
-#: src/language/stats/reliability.q:484
-msgid "Scale Mean if Item Deleted"
-msgstr ""
-
-#: src/language/stats/reliability.q:487
-msgid "Scale Variance if Item Deleted"
-msgstr ""
-
-#: src/language/stats/reliability.q:490
-msgid "Corrected Item-Total Correlation"
-msgstr ""
-
-#: src/language/stats/reliability.q:493
-msgid "Cronbach's Alpha if Item Deleted"
-msgstr ""
-
-#: src/language/stats/reliability.q:543 src/language/stats/reliability.q:562
-msgid "Cronbach's Alpha"
-msgstr "Cronbach's Alpha"
-
-#: src/language/stats/reliability.q:546 src/language/stats/reliability.q:571
-#: src/language/stats/reliability.q:582
-msgid "N of Items"
-msgstr "N van Items"
-
-#: src/language/stats/reliability.q:565
-msgid "Part 1"
-msgstr "Deel 1"
-
-#: src/language/stats/reliability.q:576
-msgid "Part 2"
-msgstr "Deel 2"
-
-#: src/language/stats/reliability.q:587
-msgid "Total N of Items"
-msgstr "Totaal N van Items"
-
-#: src/language/stats/reliability.q:590
-msgid "Correlation Between Forms"
-msgstr "Correlatie Tussen Formulieren"
-
-#: src/language/stats/reliability.q:594
-msgid "Spearman-Brown Coefficient"
-msgstr "Spearman-Brown Coefficient"
-
-#: src/language/stats/reliability.q:597
-msgid "Equal Length"
-msgstr "Gelijke lengte"
-
-#: src/language/stats/reliability.q:600
-msgid "Unequal Length"
-msgstr "Ongelijke lengte"
-
-#: src/language/stats/reliability.q:604
-msgid "Guttman Split-Half Coefficient"
-msgstr "Guttman Split-Half Coëfficiënt"
-
-#: src/language/stats/reliability.q:699
-msgid "Excluded"
-msgstr "Uitgesloten"
-
-#: src/language/stats/reliability.q:707
-msgid "%"
-msgstr "%"
-
 #: src/language/stats/t-test.q:190
 msgid "Exactly one of TESTVAL, GROUPS and PAIRS subcommands must be specified."
 msgstr "Precies 1 van de TESTVAL-, GROUPS- en PAIRS-subopdrachten moet zijn gespecificeerd."
@@ -5087,10 +5316,6 @@ msgstr ""
 msgid "t-test for Equality of Means"
 msgstr ""
 
-#: src/language/stats/t-test.q:750 src/language/stats/t-test.q:1103
-msgid "Sig."
-msgstr ""
-
 #: src/language/stats/t-test.q:754 src/language/stats/t-test.q:1012
 msgid "Mean Difference"
 msgstr "Gemiddeld verschil"
@@ -5203,6 +5428,66 @@ msgstr "De laatste case (%ld) om weer te geven is kleiner dan 1. De waarde is op
 msgid "The step value %ld is less than 1.  The value is being reset to 1."
 msgstr "De stap waarde %ld is kleiner dan 1. De waarde is op 1 gezet."
 
+#: src/ui/gui/aggregate.ui:7
+msgid "Aggregate Data"
+msgstr ""
+
+#: src/ui/gui/aggregate.ui:100
+msgid "_Break variable(s)"
+msgstr ""
+
+#: src/ui/gui/aggregate.ui:136
+msgid "Variable Name: "
+msgstr "Variabelenaam: "
+
+#: src/ui/gui/aggregate.ui:161
+msgid "Variable Label: "
+msgstr "Variabelelabels: "
+
+#: src/ui/gui/aggregate.ui:190
+msgid "Function: "
+msgstr "Functie: "
+
+#: src/ui/gui/aggregate.ui:253
+msgid "Argument 1: "
+msgstr ""
+
+#: src/ui/gui/aggregate.ui:282
+msgid "Argument 2: "
+msgstr ""
+
+#: src/ui/gui/aggregate.ui:328
+msgid "Aggregated variables"
+msgstr "Geaggregeerde variabele(n)"
+
+#: src/ui/gui/aggregate.ui:362
+msgid "_Add aggregated variables to the active dataset"
+msgstr "_Voeg geaggregeerde variabelen toe aan de actieve dataset "
+
+#: src/ui/gui/aggregate.ui:376
+msgid "_Replace the current dataset with the aggregated variables"
+msgstr "_Vervang de huidige dataset met de geaggregeerde variabelen"
+
+#: src/ui/gui/aggregate.ui:391
+msgid "_Write a new data file containing only the aggregated variables"
+msgstr ""
+
+#: src/ui/gui/aggregate.ui:428
+msgid "label"
+msgstr "label"
+
+#: src/ui/gui/aggregate.ui:472
+msgid "File is _already sorted on break variable(s)"
+msgstr "Bestand is _al gesorteerd op break variabele(n)."
+
+#: src/ui/gui/aggregate.ui:487
+msgid "Sort file before a_ggregating"
+msgstr ""
+
+#: src/ui/gui/aggregate.ui:508
+msgid "Options for very large datasets"
+msgstr ""
+
 #: src/ui/gui/binomial.ui:57 src/ui/gui/chi-square.ui:57
 msgid "_Test Variable List:"
 msgstr "Testvariabelelijst:"
@@ -5223,6 +5508,43 @@ msgstr ""
 msgid "Test _Proportion:"
 msgstr ""
 
+#: src/ui/gui/compute.ui:8
+msgid "Compute Variable"
+msgstr "Berekenvariabele"
+
+#: src/ui/gui/compute.ui:41
+msgid "Target Variable:"
+msgstr "Doelvariabele:"
+
+#: src/ui/gui/compute.ui:70
+msgid "Type & Label"
+msgstr "Type & Label"
+
+#: src/ui/gui/compute.ui:117
+msgid "="
+msgstr "="
+
+#: src/ui/gui/compute.ui:171
+msgid "Numeric Expressions:"
+msgstr "Numerieke Expressies:"
+
+#: src/ui/gui/compute.ui:233
+msgid "Functions:"
+msgstr "Functies:"
+
+#: src/ui/gui/compute.ui:298 src/ui/gui/recode.ui:741
+#: src/ui/gui/select-cases.ui:378
+msgid "If..."
+msgstr "Als..."
+
+#: src/ui/gui/compute.ui:351
+msgid "Compute Variable: Type and Label"
+msgstr "Bereken variabele: Type en Label"
+
+#: src/ui/gui/compute.ui:386
+msgid "Use expression as label"
+msgstr "Gebruik expressie als label"
+
 #: src/ui/gui/correlation.ui:7
 msgid "Bivariate Correlations"
 msgstr "Bivariate Correlaties"
@@ -5427,91 +5749,107 @@ msgstr "Waardes herhalen"
 msgid "Missing Values"
 msgstr "Ontbrekende waardes"
 
-#: src/ui/gui/factor.ui:21
+#: src/ui/gui/goto-case.ui:8
+msgid "Goto Case"
+msgstr "Ga naar case"
+
+#: src/ui/gui/goto-case.ui:26
+msgid "Goto Case Number:"
+msgstr "Ga naar Case Nummer:"
+
+#: src/ui/gui/factor.ui:22
+msgid "Principal Components Analysis"
+msgstr ""
+
+#: src/ui/gui/factor.ui:26
+msgid "Principal Axis Factoring"
+msgstr ""
+
+#: src/ui/gui/factor.ui:29
 msgid "Factor Analysis"
 msgstr "Factoranalyse"
 
-#: src/ui/gui/factor.ui:47
+#: src/ui/gui/factor.ui:55
 msgid "_Descriptives..."
 msgstr "_Descriptieven..."
 
-#: src/ui/gui/factor.ui:60
+#: src/ui/gui/factor.ui:68
 msgid "_Extraction..."
 msgstr "_Extractie..."
 
-#: src/ui/gui/factor.ui:74
+#: src/ui/gui/factor.ui:82
 msgid "_Rotations..."
 msgstr "_Rotaties..."
 
-#: src/ui/gui/factor.ui:192
+#: src/ui/gui/factor.ui:200
 msgid "Factor Analysis: Extraction"
 msgstr ""
 
-#: src/ui/gui/factor.ui:216
+#: src/ui/gui/factor.ui:224
 msgid "Method: "
 msgstr "Methode:"
 
-#: src/ui/gui/factor.ui:266
+#: src/ui/gui/factor.ui:274
 msgid "Correlation matrix"
 msgstr "Correlatie-matrix"
 
-#: src/ui/gui/factor.ui:280
+#: src/ui/gui/factor.ui:288
 msgid "Covariance matrix"
 msgstr "Covariantie-matrix"
 
-#: src/ui/gui/factor.ui:300
+#: src/ui/gui/factor.ui:308
 msgid "Analyse"
 msgstr "Analyseer"
 
-#: src/ui/gui/factor.ui:324
+#: src/ui/gui/factor.ui:332
 msgid "Unrotatated factor solution"
 msgstr ""
 
-#: src/ui/gui/factor.ui:338
+#: src/ui/gui/factor.ui:346
 msgid "Scree plot"
 msgstr ""
 
-#: src/ui/gui/factor.ui:357 src/ui/gui/roc.ui:286
+#: src/ui/gui/factor.ui:365 src/ui/gui/roc.ui:286
 msgid "Display"
 msgstr "Scherm"
 
-#: src/ui/gui/factor.ui:430
+#: src/ui/gui/factor.ui:438
 msgid "Number of factors:"
 msgstr "Aantal factoren:"
 
-#: src/ui/gui/factor.ui:460
+#: src/ui/gui/factor.ui:468
 msgid "Extract"
 msgstr ""
 
-#: src/ui/gui/factor.ui:475 src/ui/gui/factor.ui:665
+#: src/ui/gui/factor.ui:483 src/ui/gui/factor.ui:673
 msgid "Maximum iterations for convergence:"
 msgstr "Maximaal aantal iteraties voor convergentie:"
 
-#: src/ui/gui/factor.ui:538
+#: src/ui/gui/factor.ui:546
 msgid "Factor Analysis: Rotation"
 msgstr "Factoranalyse: Rotatie"
 
-#: src/ui/gui/factor.ui:571
+#: src/ui/gui/factor.ui:579
 msgid "_None"
 msgstr "_Geen"
 
-#: src/ui/gui/factor.ui:582
+#: src/ui/gui/factor.ui:590
 msgid "_Varimax"
 msgstr ""
 
-#: src/ui/gui/factor.ui:598
+#: src/ui/gui/factor.ui:606
 msgid "_Quartimax"
 msgstr ""
 
-#: src/ui/gui/factor.ui:614
+#: src/ui/gui/factor.ui:622
 msgid "_Equimax"
 msgstr ""
 
-#: src/ui/gui/factor.ui:637
+#: src/ui/gui/factor.ui:645
 msgid "Method"
 msgstr "Methode"
 
-#: src/ui/gui/factor.ui:648
+#: src/ui/gui/factor.ui:656
 msgid "_Display rotated solution"
 msgstr "_Toon geroteerde oplossing"
 
@@ -5669,7 +6007,7 @@ msgstr "_Factor:"
 msgid "Dependent _Variable(s):"
 msgstr "Afhankelijke _Variabel(en):"
 
-#: src/ui/gui/oneway.ui:184 src/ui/gui/data-editor.ui:328
+#: src/ui/gui/oneway.ui:184 src/ui/gui/data-editor.ui:332
 msgid "_Descriptives"
 msgstr "_Descriptieven"
 
@@ -5722,174 +6060,21 @@ msgid "Name Variable:"
 msgstr "Naam Variabele:"
 
 #: src/ui/gui/psppire.ui:383
-msgid "Split File"
-msgstr "Splits bestand"
-
-#: src/ui/gui/psppire.ui:443
-msgid "Analyze all cases.  Do not create groups."
-msgstr "Analyseer alle cases.  Creëer geen groepen."
-
-#: src/ui/gui/psppire.ui:459
-msgid "Compare groups."
-msgstr "Vergelijk groepen."
-
-#: src/ui/gui/psppire.ui:475
-msgid "Organize output by groups."
-msgstr "Organiseer uitvoer per groepen."
-
-#: src/ui/gui/psppire.ui:533
-msgid "Groups based on:"
-msgstr "Groepen gebaseerd op:"
-
-#: src/ui/gui/psppire.ui:592
-msgid "Sort the file by grouping variables."
-msgstr "Sorteer bestand op groeperingsvariabelen."
-
-#: src/ui/gui/psppire.ui:609
-msgid "File is already sorted."
-msgstr "Bestand is al gesorteerd."
-
-#: src/ui/gui/psppire.ui:662
-msgid "Current Status : "
-msgstr "Huidige Status : "
-
-#: src/ui/gui/psppire.ui:673
-msgid "Analysis by groups is off"
-msgstr "Analyseer per groep is uit"
-
-#: src/ui/gui/psppire.ui:709
-msgid "Compute Variable"
-msgstr "Berekenvariabele"
-
-#: src/ui/gui/psppire.ui:742
-msgid "Target Variable:"
-msgstr "Doelvariabele:"
-
-#: src/ui/gui/psppire.ui:771
-msgid "Type & Label"
-msgstr "Type & Label"
-
-#: src/ui/gui/psppire.ui:818
-msgid "="
-msgstr "="
-
-#: src/ui/gui/psppire.ui:872
-msgid "Numeric Expressions:"
-msgstr "Numerieke Expressies:"
-
-#: src/ui/gui/psppire.ui:934
-msgid "Functions:"
-msgstr "Functies:"
-
-#: src/ui/gui/psppire.ui:999 src/ui/gui/psppire.ui:1422
-#: src/ui/gui/recode.ui:741
-msgid "If..."
-msgstr "Als..."
-
-#: src/ui/gui/psppire.ui:1052
-msgid "Select Cases"
-msgstr "Selecteer cases"
-
-#: src/ui/gui/psppire.ui:1240
-msgid "Use filter variable"
-msgstr "Gebruik filtervariabele"
-
-#: src/ui/gui/psppire.ui:1299
-msgid "Based on time or case range"
-msgstr "Gebaseerd op tijd of case bereik"
-
-#: src/ui/gui/psppire.ui:1311
-msgid "Range..."
-msgstr "Bereik..."
-
-#: src/ui/gui/psppire.ui:1355
-msgid "Random sample of cases"
-msgstr "Willekeurige steekproef van cases"
-
-#: src/ui/gui/psppire.ui:1368
-msgid "Sample..."
-msgstr "Steekproef..."
-
-#: src/ui/gui/psppire.ui:1410
-msgid "If condition is satisfied"
-msgstr "Aan If conditie is voldaan"
-
-#: src/ui/gui/psppire.ui:1462
-msgid "All Cases"
-msgstr "Alle Cases"
-
-#: src/ui/gui/psppire.ui:1477
-msgid "Select"
-msgstr "Selecteer"
-
-#: src/ui/gui/psppire.ui:1504
-msgid "Filtered"
-msgstr "Gefilterd"
-
-#: src/ui/gui/psppire.ui:1520
-msgid "Deleted"
-msgstr "Verwijderd"
-
-#: src/ui/gui/psppire.ui:1543
-msgid "Unselected Cases Are"
-msgstr "Niet geselecteerde Cases zijn"
-
-#: src/ui/gui/psppire.ui:1585
 msgid "Data File Comments"
 msgstr "Gegevensbestand _commentaren"
 
-#: src/ui/gui/psppire.ui:1609
+#: src/ui/gui/psppire.ui:407
 msgid "Comments:"
 msgstr "Commentaren:"
 
-#: src/ui/gui/psppire.ui:1650
+#: src/ui/gui/psppire.ui:448
 msgid "Display comments in output"
 msgstr "Toon commentaren in uitvoer"
 
-#: src/ui/gui/psppire.ui:1669
+#: src/ui/gui/psppire.ui:467
 msgid "Column Number: 0"
 msgstr "Kolomnummer: 0"
 
-#: src/ui/gui/psppire.ui:1703
-msgid "Select Cases: Range"
-msgstr "Selecteer cases: Reeks"
-
-#: src/ui/gui/psppire.ui:1750
-msgid "First case"
-msgstr "Eerste case"
-
-#: src/ui/gui/psppire.ui:1763
-msgid "Last case"
-msgstr "Laatste case"
-
-#: src/ui/gui/psppire.ui:1776
-msgid "Observation"
-msgstr "Observatie"
-
-#: src/ui/gui/psppire.ui:1808
-msgid "Compute Variable: Type and Label"
-msgstr "Bereken variabele: Type en Label"
-
-#: src/ui/gui/psppire.ui:1843
-msgid "Use expression as label"
-msgstr "Gebruik expressie als label"
-
-#: src/ui/gui/psppire.ui:2088
-msgid "Goto Case"
-msgstr "Ga naar case"
-
-#: src/ui/gui/psppire.ui:2106
-msgid "Goto Case Number:"
-msgstr "Ga naar Case Nummer:"
-
-#: src/ui/gui/psppire.ui:2149
-msgid "Select Cases: Random Sample"
-msgstr "Selecteer cases: Aselecte steekproef"
-
-#: src/ui/gui/psppire.ui:2247
-msgid "Sample Size"
-msgstr "Steekproef Grootte"
-
 #: src/ui/gui/rank.ui:8
 msgid "Rank Cases"
 msgstr "Rangschik Cases"
@@ -6018,6 +6203,42 @@ msgstr "Aflopend"
 msgid "Sort Order"
 msgstr "Sorteervolgorde"
 
+#: src/ui/gui/split-file.ui:8
+msgid "Split File"
+msgstr "Splits bestand"
+
+#: src/ui/gui/split-file.ui:68
+msgid "Analyze all cases.  Do not create groups."
+msgstr "Analyseer alle cases.  Creëer geen groepen."
+
+#: src/ui/gui/split-file.ui:84
+msgid "Compare groups."
+msgstr "Vergelijk groepen."
+
+#: src/ui/gui/split-file.ui:100
+msgid "Organize output by groups."
+msgstr "Organiseer uitvoer per groepen."
+
+#: src/ui/gui/split-file.ui:158
+msgid "Groups based on:"
+msgstr "Groepen gebaseerd op:"
+
+#: src/ui/gui/split-file.ui:217
+msgid "Sort the file by grouping variables."
+msgstr "Sorteer bestand op groeperingsvariabelen."
+
+#: src/ui/gui/split-file.ui:234
+msgid "File is already sorted."
+msgstr "Bestand is al gesorteerd."
+
+#: src/ui/gui/split-file.ui:287
+msgid "Current Status : "
+msgstr "Huidige Status : "
+
+#: src/ui/gui/split-file.ui:298
+msgid "Analysis by groups is off"
+msgstr "Analyseer per groep is uit"
+
 #: src/ui/gui/recode.ui:185 src/ui/gui/recode.ui:467
 msgid "System Missing"
 msgstr "Ontbrekende waarde"
@@ -6063,7 +6284,7 @@ msgid "New Value"
 msgstr "Nieuwe Waarde"
 
 #: src/ui/gui/recode.ui:596
-msgid "Convert numeric strings to numbers ('5' -> 5)"
+msgid "Convert numeric strings to numbers (`5' -> 5)"
 msgstr "Converteer numerieke tekenreeksen naar nummers ('5' -> 5)"
 
 #: src/ui/gui/recode.ui:614
@@ -6122,22 +6343,26 @@ msgstr "Restant"
 msgid "Regression: Statistics"
 msgstr "Regressie: Statistieken"
 
-#: src/ui/gui/reliability.ui:27
+#: src/ui/gui/reliability.ui:26
 msgid "Reliability Analysis"
 msgstr "Betrouwbaarheids Analyses"
 
-#: src/ui/gui/reliability.ui:114
+#: src/ui/gui/reliability.ui:124
 msgid "_Items:"
 msgstr "_Items:"
 
-#: src/ui/gui/reliability.ui:136
+#: src/ui/gui/reliability.ui:141
 msgid "Model:\t"
 msgstr "Model:\t"
 
-#: src/ui/gui/reliability.ui:175
+#: src/ui/gui/reliability.ui:180
 msgid "Variables in first split:"
 msgstr "Variabelen in eerste splitsing:"
 
+#: src/ui/gui/reliability.ui:217
+msgid "Show descriptives for scale if _item is deleted"
+msgstr ""
+
 #: src/ui/gui/roc.ui:115
 msgid "_Test Variable:"
 msgstr "Testvariabele:"
@@ -6166,6 +6391,78 @@ msgstr ""
 msgid "_Coordinate points of the ROC Curve"
 msgstr ""
 
+#: src/ui/gui/select-cases.ui:8
+msgid "Select Cases"
+msgstr "Selecteer cases"
+
+#: src/ui/gui/select-cases.ui:196
+msgid "Use filter variable"
+msgstr "Gebruik filtervariabele"
+
+#: src/ui/gui/select-cases.ui:255
+msgid "Based on time or case range"
+msgstr "Gebaseerd op tijd of case bereik"
+
+#: src/ui/gui/select-cases.ui:267
+msgid "Range..."
+msgstr "Bereik..."
+
+#: src/ui/gui/select-cases.ui:311
+msgid "Random sample of cases"
+msgstr "Willekeurige steekproef van cases"
+
+#: src/ui/gui/select-cases.ui:324
+msgid "Sample..."
+msgstr "Steekproef..."
+
+#: src/ui/gui/select-cases.ui:366
+msgid "If condition is satisfied"
+msgstr "Aan If conditie is voldaan"
+
+#: src/ui/gui/select-cases.ui:418
+msgid "All Cases"
+msgstr "Alle Cases"
+
+#: src/ui/gui/select-cases.ui:433
+msgid "Select"
+msgstr "Selecteer"
+
+#: src/ui/gui/select-cases.ui:460
+msgid "Filtered"
+msgstr "Gefilterd"
+
+#: src/ui/gui/select-cases.ui:476
+msgid "Deleted"
+msgstr "Verwijderd"
+
+#: src/ui/gui/select-cases.ui:499
+msgid "Unselected Cases Are"
+msgstr "Niet geselecteerde Cases zijn"
+
+#: src/ui/gui/select-cases.ui:541
+msgid "Select Cases: Range"
+msgstr "Selecteer cases: Reeks"
+
+#: src/ui/gui/select-cases.ui:590
+msgid "First case"
+msgstr "Eerste case"
+
+#: src/ui/gui/select-cases.ui:603
+msgid "Last case"
+msgstr "Laatste case"
+
+#: src/ui/gui/select-cases.ui:616
+msgid "Observation"
+msgstr "Observatie"
+
+#: src/ui/gui/select-cases.ui:648
+msgid "Select Cases: Random Sample"
+msgstr "Selecteer cases: Aselecte steekproef"
+
+#: src/ui/gui/select-cases.ui:746
+msgid "Sample Size"
+msgstr "Steekproef Grootte"
+
 #: src/ui/gui/t-test.ui:8
 msgid "Independent-Samples T Test"
 msgstr "Independent-Samples T Test"
@@ -6228,115 +6525,103 @@ msgstr ""
 " \n"
 "Het geselecteerde bestand bevat N regels tekst.  Alleen de eerste  M hiervan zullen getoond worden voor voorbeeld doeleinden in de volgende schermen.  Je kunt hieronder kiezen hoeveel van het bestand daadwerkelijk geïmporteerd moet worden."
 
-#: src/ui/gui/text-data-import.ui:52
+#: src/ui/gui/text-data-import.ui:95
 msgid "All cases"
 msgstr "Alle cases"
 
-#: src/ui/gui/text-data-import.ui:71 src/ui/gui/text-data-import.ui:128
-msgid "Only first "
-msgstr "Alleen eerste "
-
-#: src/ui/gui/text-data-import.ui:106
-msgid " cases"
-msgstr " cases"
-
-#: src/ui/gui/text-data-import.ui:162
-msgid "% of file (approximately)"
-msgstr "% van bestand (ongeveer)"
-
-#: src/ui/gui/text-data-import.ui:183
+#: src/ui/gui/text-data-import.ui:116
 msgid "<b>Amount to Import</b>"
 msgstr "<b>Aantal te Importeren</b>"
 
-#: src/ui/gui/text-data-import.ui:202
+#: src/ui/gui/text-data-import.ui:135
 msgid "Select Data to Import"
 msgstr "Selecteer Gegevens om te Importeren"
 
-#: src/ui/gui/text-data-import.ui:213
+#: src/ui/gui/text-data-import.ui:146
 msgid "Select the first line of the data file that contains data."
 msgstr "Selecteer de eerste regel van het gegevensbestand die gegevens bevat."
 
-#: src/ui/gui/text-data-import.ui:241
+#: src/ui/gui/text-data-import.ui:174
 msgid "Line above selected line contains variable names"
 msgstr "De regel boven de geselecteerde gegevensregel bevat de variabelennamen"
 
-#: src/ui/gui/text-data-import.ui:259
+#: src/ui/gui/text-data-import.ui:192
 msgid "Choose Separators"
 msgstr "Kies scheidingstekens"
 
-#: src/ui/gui/text-data-import.ui:305
+#: src/ui/gui/text-data-import.ui:238
 msgid "C_ustom"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:320
+#: src/ui/gui/text-data-import.ui:253
 msgid "Slas_h (/)"
 msgstr "Sc_huine streep (/)"
 
-#: src/ui/gui/text-data-import.ui:337
+#: src/ui/gui/text-data-import.ui:270
 msgid "Semicolo_n (;)"
 msgstr "Pu_ntkomma (;)"
 
-#: src/ui/gui/text-data-import.ui:354
+#: src/ui/gui/text-data-import.ui:287
 msgid "P_ipe (|)"
 msgstr "P_ijp (|)"
 
-#: src/ui/gui/text-data-import.ui:369
+#: src/ui/gui/text-data-import.ui:302
 msgid "H_yphen (-)"
 msgstr "Streep (-)"
 
-#: src/ui/gui/text-data-import.ui:386
+#: src/ui/gui/text-data-import.ui:319
 msgid "Co_mma (,)"
 msgstr "Ko_mma (,)"
 
-#: src/ui/gui/text-data-import.ui:403
+#: src/ui/gui/text-data-import.ui:336
 msgid "_Colon (:)"
 msgstr "_Dubbelepunt (:)"
 
-#: src/ui/gui/text-data-import.ui:418
+#: src/ui/gui/text-data-import.ui:351
 msgid "Ban_g (!)"
 msgstr "Uitroepteken (!)"
 
-#: src/ui/gui/text-data-import.ui:433
+#: src/ui/gui/text-data-import.ui:366
 msgid "Ta_b"
 msgstr "Ta_b"
 
-#: src/ui/gui/text-data-import.ui:448
+#: src/ui/gui/text-data-import.ui:381
 msgid "_Space"
 msgstr "_Spatie"
 
-#: src/ui/gui/text-data-import.ui:465
+#: src/ui/gui/text-data-import.ui:398
 msgid "<b>Separators</b>"
 msgstr "<b>Scheiders</b>"
 
-#: src/ui/gui/text-data-import.ui:495
+#: src/ui/gui/text-data-import.ui:428
 msgid "Doubled quote mark treated as escape"
 msgstr ""
 
-#: src/ui/gui/text-data-import.ui:524
+#: src/ui/gui/text-data-import.ui:457
 msgid "Quote separator characters with"
 msgstr "Citeer scheidingstekens met"
 
-#: src/ui/gui/text-data-import.ui:544
+#: src/ui/gui/text-data-import.ui:477
 msgid "<b>Quoting</b>"
 msgstr "<b>Citeren</b>"
 
-#: src/ui/gui/text-data-import.ui:592
+#: src/ui/gui/text-data-import.ui:525
 msgid "<b>Fields Preview</b>"
 msgstr "<b>Veldenvoorbeeld</b>"
 
-#: src/ui/gui/text-data-import.ui:607
+#: src/ui/gui/text-data-import.ui:540
 msgid "Adjust Variable Formats"
 msgstr "Pas Variabelenopmaak aan"
 
-#: src/ui/gui/text-data-import.ui:618
+#: src/ui/gui/text-data-import.ui:551
 msgid "Check the data formats displayed below and fix any that are incorrect.  You may set other variable properties now or later."
 msgstr "Controleer de gegevensopmaak hieronder en verbeter degene die foutief zijn. Je mag andere variabelenopties nu of later zetten."
 
-#: src/ui/gui/text-data-import.ui:662
+#: src/ui/gui/text-data-import.ui:595
 msgid "<b>Variables</b>"
 msgstr "<b>Variabelen</b>"
 
-#: src/ui/gui/text-data-import.ui:705
+#: src/ui/gui/text-data-import.ui:638
 msgid "<b>Data Preview</b>"
 msgstr "<b>Gegevensvoorbeeld</b>"
 
@@ -6408,307 +6693,299 @@ msgstr ""
 msgid "Variable Information:"
 msgstr "Variabeleninformatie:"
 
-#: src/ui/gui/data-editor.ui:9
-msgid "Sort Ascending"
-msgstr "Sorteer oplopend"
-
-#: src/ui/gui/data-editor.ui:15
-msgid "Sort Descending"
-msgstr "Sorteer aflopend"
-
-#: src/ui/gui/data-editor.ui:26 src/ui/gui/output-viewer.ui:9
+#: src/ui/gui/data-editor.ui:23 src/ui/gui/output-viewer.ui:9
 #: src/ui/gui/syntax-editor.ui:10
 msgid "_File"
 msgstr "_Bestand"
 
-#: src/ui/gui/data-editor.ui:38 src/ui/gui/syntax-editor.ui:22
+#: src/ui/gui/data-editor.ui:35 src/ui/gui/syntax-editor.ui:22
 #: src/ui/gui/syntax-editor.ui:40
 msgid "_Syntax"
 msgstr "_Syntax"
 
-#: src/ui/gui/data-editor.ui:44 src/ui/gui/data-editor.ui:217
-#: src/ui/gui/data-editor.ui:229 src/ui/gui/syntax-editor.ui:28
+#: src/ui/gui/data-editor.ui:41 src/ui/gui/data-editor.ui:214
+#: src/ui/gui/data-editor.ui:226 src/ui/gui/syntax-editor.ui:28
 #: src/ui/gui/syntax-editor.ui:46
 msgid "_Data"
 msgstr "_Gegevens"
 
-#: src/ui/gui/data-editor.ui:56
+#: src/ui/gui/data-editor.ui:53
 msgid "_Import Delimited Text Data"
 msgstr "Gescheiden tekstgegevens _importeren"
 
-#: src/ui/gui/data-editor.ui:75
+#: src/ui/gui/data-editor.ui:72
 msgid "D_isplay Data File Information"
 msgstr "Gegevensbestand_informatie tonen"
 
-#: src/ui/gui/data-editor.ui:81
+#: src/ui/gui/data-editor.ui:79
 msgid "Working File"
 msgstr "Werkbestand"
 
-#: src/ui/gui/data-editor.ui:87
+#: src/ui/gui/data-editor.ui:85
 msgid "External File"
 msgstr "Extern bestand"
 
-#: src/ui/gui/data-editor.ui:93
+#: src/ui/gui/data-editor.ui:91
 msgid "Recently Used Da_ta"
 msgstr "Recent gebruikte _gegevens"
 
-#: src/ui/gui/data-editor.ui:99
+#: src/ui/gui/data-editor.ui:97
 msgid "Recently Used _Files"
 msgstr "Recent gebruikte _bestanden"
 
 # Standaard snelleter voor Bewerken is de w.
-#: src/ui/gui/data-editor.ui:111 src/ui/gui/output-viewer.ui:28
+#: src/ui/gui/data-editor.ui:109 src/ui/gui/output-viewer.ui:28
 #: src/ui/gui/syntax-editor.ui:70
 msgid "_Edit"
 msgstr "Be_werken"
 
-#: src/ui/gui/data-editor.ui:117
+#: src/ui/gui/data-editor.ui:115
 msgid "Insert Variable"
 msgstr "Invoegen variabele"
 
-#: src/ui/gui/data-editor.ui:118
+#: src/ui/gui/data-editor.ui:116
 msgid "Create a new variable at the current position"
 msgstr "Creëer een nieuwe variabele op de huidige positie"
 
-#: src/ui/gui/data-editor.ui:125
+#: src/ui/gui/data-editor.ui:123
 msgid "Insert Cases"
 msgstr "Invoegen cases"
 
-#: src/ui/gui/data-editor.ui:126
+#: src/ui/gui/data-editor.ui:124
 msgid "Create a new case at the current position"
 msgstr "Creëer een nieuwe case op de huidige positie"
 
-#: src/ui/gui/data-editor.ui:132
+#: src/ui/gui/data-editor.ui:130
 msgid "Go To Case"
 msgstr "Ga naar case"
 
-#: src/ui/gui/data-editor.ui:134
+#: src/ui/gui/data-editor.ui:132
 msgid "Jump to a case in the data sheet"
 msgstr "Spring naar een Case in het Gegevensblad"
 
-#: src/ui/gui/data-editor.ui:160
+#: src/ui/gui/data-editor.ui:158
 msgid "Cl_ear Variables"
 msgstr "Wis _variabelen"
 
-#: src/ui/gui/data-editor.ui:161
+#: src/ui/gui/data-editor.ui:159
 msgid "Delete the variables at the selected position(s)"
 msgstr "Verwijder de variabele op de geselecteerde positie(s)"
 
-#: src/ui/gui/data-editor.ui:169
+#: src/ui/gui/data-editor.ui:167
 msgid "_Clear Cases"
 msgstr "Wis _cases"
 
-#: src/ui/gui/data-editor.ui:170
+#: src/ui/gui/data-editor.ui:168
 msgid "Delete the cases at the selected position(s)"
 msgstr "Verwijder de cases op de geselecteerde positie(s)"
 
-#: src/ui/gui/data-editor.ui:182
+#: src/ui/gui/data-editor.ui:180
 msgid "_View"
 msgstr "Beel_d"
 
-#: src/ui/gui/data-editor.ui:189
+#: src/ui/gui/data-editor.ui:187
 msgid "_Status Bar"
 msgstr "_Statusbalk"
 
-#: src/ui/gui/data-editor.ui:195
-msgid "_Fonts"
-msgstr "_Fonts"
-
-#: src/ui/gui/data-editor.ui:203
+#: src/ui/gui/data-editor.ui:200
 msgid "_Grid Lines"
 msgstr "_Rasterlijnen"
 
-#: src/ui/gui/data-editor.ui:209
+#: src/ui/gui/data-editor.ui:206
 msgid "Value _Labels"
 msgstr "Waarde_labels"
 
-#: src/ui/gui/data-editor.ui:210
+#: src/ui/gui/data-editor.ui:207
 msgid "Show/hide value labels"
 msgstr "Toon/verberg waardelabels"
 
-#: src/ui/gui/data-editor.ui:223 src/ui/gui/data-editor.ui:430
+#: src/ui/gui/data-editor.ui:220 src/ui/gui/data-editor.ui:434
 msgid "_Variables"
 msgstr "_Variabelen"
 
-#: src/ui/gui/data-editor.ui:234
+#: src/ui/gui/data-editor.ui:231
 msgid "_Sort Cases"
 msgstr "_Sorteer Cases"
 
-#: src/ui/gui/data-editor.ui:237
+#: src/ui/gui/data-editor.ui:234
 msgid "Sort cases in the active file"
 msgstr "Sorteer cases in het actieve bestand"
 
-#: src/ui/gui/data-editor.ui:244
+#: src/ui/gui/data-editor.ui:241
 msgid "_Transpose"
 msgstr "_Herschikken"
 
-#: src/ui/gui/data-editor.ui:245
+#: src/ui/gui/data-editor.ui:242
 msgid "Transpose the cases with the variables"
 msgstr "Herschik de cases met de variabelen"
 
-#: src/ui/gui/data-editor.ui:251
+#: src/ui/gui/data-editor.ui:249
+msgid "_Aggregate"
+msgstr "_Aggregeer"
+
+#: src/ui/gui/data-editor.ui:255
 msgid "S_plit File"
 msgstr "S_plits bestand"
 
-#: src/ui/gui/data-editor.ui:252
+#: src/ui/gui/data-editor.ui:256
 msgid "Split the active file"
 msgstr "Splits het actieve bestand"
 
-#: src/ui/gui/data-editor.ui:259
+#: src/ui/gui/data-editor.ui:263
 msgid "Select _Cases"
 msgstr "Selecteer _cases"
 
-#: src/ui/gui/data-editor.ui:265
+#: src/ui/gui/data-editor.ui:269
 msgid "_Weight Cases"
 msgstr "_Weeg cases"
 
-#: src/ui/gui/data-editor.ui:266
+#: src/ui/gui/data-editor.ui:270
 msgid "Weight cases by variable"
 msgstr "Weeg cases per variabele"
 
-#: src/ui/gui/data-editor.ui:273
+#: src/ui/gui/data-editor.ui:277
 msgid "_Transform"
 msgstr "_Transformeren"
 
-#: src/ui/gui/data-editor.ui:279
+#: src/ui/gui/data-editor.ui:283
 msgid "_Compute"
 msgstr "_Berekenen"
 
-#: src/ui/gui/data-editor.ui:285
+#: src/ui/gui/data-editor.ui:289
 msgid "Ran_k Cases"
 msgstr "Rangschi_k cases"
 
-#: src/ui/gui/data-editor.ui:291
+#: src/ui/gui/data-editor.ui:295
 msgid "Recode into _Same Variables"
 msgstr "Hercodeer in _Zelfde Variabelen"
 
-#: src/ui/gui/data-editor.ui:297
+#: src/ui/gui/data-editor.ui:301
 msgid "Recode into _Different Variables"
 msgstr "Hercodeer in _Andere Variabelen"
 
-#: src/ui/gui/data-editor.ui:303
+#: src/ui/gui/data-editor.ui:307
 msgid "_Run Pending Transforms"
 msgstr "_uitvoeren uitstaande Transformaties"
 
-#: src/ui/gui/data-editor.ui:310
+#: src/ui/gui/data-editor.ui:314
 msgid "_Analyze"
 msgstr "_Analyseer"
 
-#: src/ui/gui/data-editor.ui:316
+#: src/ui/gui/data-editor.ui:320
 msgid "_Descriptive Statistics"
 msgstr "_Descriptieve statistieken"
 
-#: src/ui/gui/data-editor.ui:322
+#: src/ui/gui/data-editor.ui:326
 msgid "_Frequencies"
 msgstr "_Frequenties"
 
-#: src/ui/gui/data-editor.ui:334
+#: src/ui/gui/data-editor.ui:338
 msgid "_Explore"
 msgstr "_Onderzoek"
 
-#: src/ui/gui/data-editor.ui:340
+#: src/ui/gui/data-editor.ui:344
 msgid "_Crosstabs"
 msgstr "_Kruistabellen"
 
-#: src/ui/gui/data-editor.ui:346
+#: src/ui/gui/data-editor.ui:350
 msgid "Compare _Means"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:352
+#: src/ui/gui/data-editor.ui:356
 msgid "_One Sample T Test"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:358
+#: src/ui/gui/data-editor.ui:362
 msgid "_Independent Samples T Test"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:364
+#: src/ui/gui/data-editor.ui:368
 msgid "_Paired Samples T Test"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:370
+#: src/ui/gui/data-editor.ui:374
 msgid "One Way _ANOVA"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:376
+#: src/ui/gui/data-editor.ui:380
 msgid "Bivariate _Correlation..."
 msgstr "Bivariate _correlatie..."
 
-#: src/ui/gui/data-editor.ui:382
+#: src/ui/gui/data-editor.ui:386
 msgid "Factor _Analysis"
 msgstr "Factor _analyses"
 
-#: src/ui/gui/data-editor.ui:388
+#: src/ui/gui/data-editor.ui:392
 msgid "Re_liability"
 msgstr "Betrouwbaarheid"
 
-#: src/ui/gui/data-editor.ui:394
+#: src/ui/gui/data-editor.ui:398
 msgid "Linear _Regression"
 msgstr "Lineare _regressie"
 
-#: src/ui/gui/data-editor.ui:400
+#: src/ui/gui/data-editor.ui:404
 msgid "_Non-Parametric Statistics"
 msgstr ""
 
-#: src/ui/gui/data-editor.ui:406
+#: src/ui/gui/data-editor.ui:410
 msgid "_Chi-Square"
 msgstr "_Chi-Square"
 
-#: src/ui/gui/data-editor.ui:412
+#: src/ui/gui/data-editor.ui:416
 msgid "_Binomial"
 msgstr "_Binomiaal"
 
-#: src/ui/gui/data-editor.ui:418
+#: src/ui/gui/data-editor.ui:422
 msgid "ROC Cur_ve..."
 msgstr "ROC Cur_ve..."
 
-#: src/ui/gui/data-editor.ui:424
+#: src/ui/gui/data-editor.ui:428
 msgid "_Utilities"
 msgstr "E_xtra"
 
-#: src/ui/gui/data-editor.ui:431
+#: src/ui/gui/data-editor.ui:435
 msgid "Jump to variable"
 msgstr "Spring naar variabele"
 
-#: src/ui/gui/data-editor.ui:438
+#: src/ui/gui/data-editor.ui:442
 msgid "Data File _Comments"
 msgstr "Gegevensbestand _commentaren"
 
-#: src/ui/gui/data-editor.ui:444 src/ui/gui/output-viewer.ui:40
-#: src/ui/gui/syntax-editor.ui:131
+#: src/ui/gui/data-editor.ui:448 src/ui/gui/output-viewer.ui:46
+#: src/ui/gui/syntax-editor.ui:135
 msgid "_Windows"
 msgstr "_Vensters"
 
-#: src/ui/gui/data-editor.ui:450 src/ui/gui/output-viewer.ui:46
-#: src/ui/gui/syntax-editor.ui:137
+#: src/ui/gui/data-editor.ui:454 src/ui/gui/output-viewer.ui:52
+#: src/ui/gui/syntax-editor.ui:141
 msgid "_Minimize All Windows"
 msgstr "_Minimaliseer alle vensters"
 
-#: src/ui/gui/data-editor.ui:456
+#: src/ui/gui/data-editor.ui:460
 msgid "_Split"
 msgstr "_Splitsen"
 
-#: src/ui/gui/data-editor.ui:630
+#: src/ui/gui/data-editor.ui:635
 msgid "Information Area"
 msgstr "Informatiegebied"
 
-#: src/ui/gui/data-editor.ui:652
+#: src/ui/gui/data-editor.ui:657
 msgid "Processor Area"
 msgstr "Processorgebied"
 
-#: src/ui/gui/data-editor.ui:677
+#: src/ui/gui/data-editor.ui:682
 msgid "Case Counter Area"
 msgstr "Case-tellergebied"
 
-#: src/ui/gui/data-editor.ui:702
+#: src/ui/gui/data-editor.ui:707
 msgid "Filter Use Status Area"
 msgstr "Filtergebruik statusgebied"
 
-#: src/ui/gui/data-editor.ui:728
+#: src/ui/gui/data-editor.ui:733
 msgid "Weight Status Area"
 msgstr "Weging statusgebied"
 
-#: src/ui/gui/data-editor.ui:754
+#: src/ui/gui/data-editor.ui:759
 msgid "Split File Status Area"
 msgstr "Splitsbestand statusgebied"
 
@@ -6716,26 +6993,135 @@ msgstr "Splitsbestand statusgebied"
 msgid "_Export"
 msgstr "_Exporteer"
 
-#: src/ui/gui/syntax-editor.ui:100
+#: src/ui/gui/syntax-editor.ui:104
 msgid "_Run"
 msgstr "Uitvoe_ren"
 
-#: src/ui/gui/syntax-editor.ui:106
+#: src/ui/gui/syntax-editor.ui:110
 msgid "All"
 msgstr "Alles"
 
-#: src/ui/gui/syntax-editor.ui:112
+#: src/ui/gui/syntax-editor.ui:116
 msgid "Selection"
 msgstr "Selectie"
 
-#: src/ui/gui/syntax-editor.ui:118
+#: src/ui/gui/syntax-editor.ui:122
 msgid "Current Line"
 msgstr "Huidige regel"
 
-#: src/ui/gui/syntax-editor.ui:125
+#: src/ui/gui/syntax-editor.ui:129
 msgid "To End"
 msgstr "Naar einde"
 
+#~ msgid "column %d"
+#~ msgstr "kolom %d"
+
+#~ msgid "columns %d-%d"
+#~ msgstr "kolommen %d-%d"
+
+#~ msgid "%s field) "
+#~ msgstr "%s veld) "
+
+#~ msgid "Syntax error %s at %s."
+#~ msgstr "Syntaxfout %s op %s."
+
+#~ msgid "expecting ATTRIBUTE= or DELETE="
+#~ msgstr "verwacht ATTRIBUTE= of DELETE="
+
+#~ msgid "expecting `('"
+#~ msgstr "'(' verwacht"
+
+#~ msgid "String expected for variable label."
+#~ msgstr "Tekenreeks verwacht voor variabelenlabel."
+
+#~ msgid "Expecting BATCH or INTERACTIVE after SYNTAX."
+#~ msgstr "BATCH of INTERACTIVE verwacht na SYNTAX."
+
+#~ msgid "Expecting YES or NO after CD."
+#~ msgstr "YES of NO verwacht na CD."
+
+#~ msgid "Expecting CONTINUE or STOP after ERROR."
+#~ msgstr "CONTINUE of STOP verwacht na ERROR."
+
+#~ msgid "while expecting COLUMNWISE"
+#~ msgstr "terwijl COLUMNWISE verwacht werd"
+
+#~ msgid "expecting BREAK"
+#~ msgstr "BREAK verwacht"
+
+#~ msgid "expecting `)'"
+#~ msgstr "')' verwacht"
+
+#~ msgid "expecting VARIABLES"
+#~ msgstr "VARIABLES verwacht"
+
+#~ msgid "in expression"
+#~ msgstr "in expressie"
+
+#, fuzzy
+#~ msgid "Missing space following `E' at offset %zu in MRSETS record"
+#~ msgstr "Dubbele variabelenaam %s op offset %zu in MRSETS record."
+
+#~ msgid "expecting BY"
+#~ msgstr "BY verwacht"
+
+#~ msgid "Multivariate GLM not yet supported"
+#~ msgstr "Mutivariante GLM wordt nog niet ondersteund"
+
+#~ msgid "expecting FIXED or DELIMITED"
+#~ msgstr "FIXED of DELIMITED verwacht"
+
+#~ msgid "expecting LINE or VARIABLES"
+#~ msgstr "LINE of VARIABLES verwacht"
+
+#~ msgid "expecting COMM or TAPE"
+#~ msgstr "COMM of TAPE verwacht"
+
+#~ msgid "COLUMN subcommand multiply specified."
+#~ msgstr "COLUMN-subopdracht meerdere keren gespecificeerd."
+
+#~ msgid "hash table:"
+#~ msgstr "hash-tabel:"
+
+#~ msgid "Warnings (%d) exceed limit (%d)."
+#~ msgstr "Waarschuwingen (%d) overschrijden limiet (%d)."
+
+#~ msgid "Errors (%d) exceed limit (%d)."
+#~ msgstr "Fouten (%d) overschrijden limiet (%d)."
+
+#~ msgid "`%s' is not a variable name"
+#~ msgstr "'%s' is geen variabelennaam"
+
+#~ msgid " cases"
+#~ msgstr " cases"
+
+#~ msgid "Error closing FLIP source file: %s."
+#~ msgstr "Fout tijdens sluiten FLIP bronbestand: %s."
+
+#~ msgid "%s: Creating temporary file: %s."
+#~ msgstr "%s: Aanmaken tijdelijk bestand: %s."
+
+#~ msgid "%s: Creating file: %s."
+#~ msgstr "%s: Aanmaken bestand: %s."
+
+#~ msgid "String exceeds 255 characters in length (%zu characters)."
+#~ msgstr "Tekenreeks overschrijdt de lengte van 255 tekens (%zu tekens)."
+
+#~ msgid "Missing required subcommand TABLES."
+#~ msgstr "Mis vereiste subopdracht TABLES."
+
+#~ msgid "TABLES subcommand may not appear more than once."
+#~ msgstr "TABLES-subopdracht mag niet meer dan 1 keer voorkomen."
+
+#~ msgid "Sort Ascending"
+#~ msgstr "Sorteer oplopend"
+
+#~ msgid "Sort Descending"
+#~ msgstr "Sorteer aflopend"
+
+#~ msgid "_Fonts"
+#~ msgstr "_Fonts"
+
 #~ msgid "Variable %s has label of invalid length %zu."
 #~ msgstr "Variabele %s heeft label van ongeldige lengte %zu."
 
index 731f552a9f9021bf05ffd524c5fbebad11946405..807c4fe90e95aab67a2b91bd0226820feecd462a 100644 (file)
@@ -53,7 +53,7 @@ try_detect (const char *file_name, bool (*detect) (FILE *))
   file = fn_open (file_name, "rb");
   if (file == NULL)
     {
-      msg (ME, _("An error occurred while opening \"%s\": %s."),
+      msg (ME, _("An error occurred while opening `%s': %s."),
            file_name, strerror (errno));
       return IO_ERROR;
     }
@@ -98,7 +98,7 @@ any_reader_open (struct file_handle *handle, struct dictionary **dict)
         else if (result == YES)
           return pfm_open_reader (handle, dict, NULL);
 
-        msg (SE, _("\"%s\" is not a system or portable file."),
+        msg (SE, _("`%s' is not a system or portable file."),
              fh_get_file_name (handle));
         return NULL;
       }
index eb9e67250a733394739f997ab1c7b504627b1b50..ef6aa6755e4a922171fa863020091cf8094e5405 100644 (file)
@@ -52,8 +52,7 @@ raw_gregorian_to_offset (int y, int m, int d)
    Gregorian calendar.  Returns SYSMIS for dates before 14 Oct
    1582. */
 double
-calendar_gregorian_to_offset (int y, int m, int d,
-                              calendar_error_func *error, void *aux)
+calendar_gregorian_to_offset (int y, int m, int d, char **errorp)
 {
   /* Normalize year. */
   if (y >= 0 && y < 100)
@@ -78,7 +77,9 @@ calendar_gregorian_to_offset (int y, int m, int d,
         }
       else
         {
-          error (aux, _("Month %d is not in acceptable range of 0 to 13."), m);
+          if (errorp != NULL)
+            *errorp = xasprintf (_("Month %d is not in acceptable range of "
+                                   "0 to 13."), m);
           return SYSMIS;
         }
     }
@@ -86,19 +87,24 @@ calendar_gregorian_to_offset (int y, int m, int d,
   /* Normalize day. */
   if (d < 0 || d > 31)
     {
-      error (aux, _("Day %d is not in acceptable range of 0 to 31."), d);
+      if (errorp != NULL)
+        *errorp = xasprintf (_("Day %d is not in acceptable range of "
+                               "0 to 31."), d);
       return SYSMIS;
     }
 
   /* Validate date. */
   if (y < 1582 || (y == 1582 && (m < 10 || (m == 10 && d < 15))))
     {
-      error (aux, _("Date %04d-%d-%d is before the earliest acceptable "
-                    "date of 1582-10-15."), y, m, d);
+      if (errorp != NULL)
+        *errorp = xasprintf (_("Date %04d-%d-%d is before the earliest "
+                               "acceptable date of 1582-10-15."), y, m, d);
       return SYSMIS;
     }
 
   /* Calculate offset. */
+  if (errorp != NULL)
+    *errorp = NULL;
   return raw_gregorian_to_offset (y, m, d);
 }
 
index 06d2fd3a49b0f350b1015e05fc8fa41223421304..5535690447ee1c55f24dc3383bca27ddb6aa8931 100644 (file)
@@ -1,10 +1,7 @@
 #ifndef CALENDAR_H
 #define CALENDAR_H 1
 
-typedef void calendar_error_func (void *aux, const char *, ...);
-
-double calendar_gregorian_to_offset (int y, int m, int d,
-                                     calendar_error_func *, void *aux);
+double calendar_gregorian_to_offset (int y, int m, int d, char **errorp);
 void calendar_offset_to_gregorian (int ofs, int *y, int *m, int *d, int *yd);
 int calendar_offset_to_year (int ofs);
 int calendar_offset_to_month (int ofs);
index b2444b9bc5f411ac9d826b9f093972461652b40b..58e437ad1b45686000c0b320e028e0f0d8ad641a 100644 (file)
@@ -52,7 +52,7 @@ width_to_n_bytes (int width)
 static void *
 value_to_data (const union value *value_, int width)
 {
-  union value *value = (union value *) value_;
+  union value *value = CONST_CAST (union value *, value_);
   assert (sizeof value->f == sizeof (double));
   if (width == 0)
     return &value->f;
index 0bfc62cdce96054fe461043ac2cb44bf39436c03..d00c2ad37badd69cc80f9991d99a70bf8d88084c 100644 (file)
@@ -135,7 +135,7 @@ case_unshare (struct ccase *c)
 static inline struct ccase *
 case_ref (const struct ccase *c_)
 {
-  struct ccase *c = (struct ccase *) c_;
+  struct ccase *c = CONST_CAST (struct ccase *, c_);
   c->ref_cnt++;
   return c;
 }
index 9e7ab157e1921057ba8aed5a720658df74677067..dee1488e9e297145f22782518dd16887315c389e 100644 (file)
@@ -91,8 +91,8 @@ casegrouper_get_next_group (struct casegrouper *grouper,
 
       writer = autopaging_writer_create (
         casereader_get_proto (grouper->reader));
-      case_ref (group_case);
-      casewriter_write (writer, group_case);
+
+      casewriter_write (writer, case_ref (group_case));
 
       while ((tmp = casereader_peek (grouper->reader, 0)) != NULL
              && grouper->same_group (group_case, tmp, grouper->aux))
@@ -100,6 +100,7 @@ casegrouper_get_next_group (struct casegrouper *grouper,
           case_unref (casereader_read (grouper->reader));
           casewriter_write (writer, tmp);
         }
+      case_unref (tmp);
       case_unref (group_case);
 
       *reader = casewriter_make_reader (writer);
index 5244202e4fde4c02f3124a1f08ea2e910db15f3f..da515c6dda4152f499a2acac3435c6fa944803ea 100644 (file)
@@ -273,7 +273,7 @@ static bool casereader_filter_missing_destroy (void *);
    when the filtering casereader is destroyed. */
 struct casereader *
 casereader_create_filter_missing (struct casereader *reader,
-                                  const struct variable **vars, size_t var_cnt,
+                                  const struct variable *const*vars, size_t var_cnt,
                                   enum mv_class class,
                                  casenumber *n_missing,
                                   struct casewriter *exclude)
index a26ef67466f0c8c5c58245865ecd50664287866a..d75a605b01349eef258f0fdbe9d04994553e68bc 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2009 Free Software Foundation, Inc.
+   Copyright (C) 2009, 2010 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
@@ -72,7 +72,7 @@ casereader_select (struct casereader *subreader,
     {
       struct casereader_select *cs = xmalloc (sizeof *cs);
       cs->by = by;
-      cs->i = 0;
+      cs->i = by - 1;
       return casereader_create_filter_func (subreader,
                                             casereader_select_include,
                                             casereader_select_destroy,
index 27ea413460aa501a61d4d81ae97a9c9c8f1d50df..fc823049d570df34863291ab4b0650f2cba6d26b 100644 (file)
@@ -490,7 +490,7 @@ uniquify (const struct ccase *c, void *aux)
   const union value *current_value = case_data (c, cdr->key);
   const int key_width = var_get_width (cdr->key);
   const double weight = cdr->weight ? case_data (c, cdr->weight)->f : 1.0;
-  const struct ccase *next_case = casereader_peek (cdr->clone, cdr->n + 1);
+  struct ccase *next_case = casereader_peek (cdr->clone, cdr->n + 1);
   int dir = 0;
 
   cdr->n ++;
@@ -501,6 +501,7 @@ uniquify (const struct ccase *c, void *aux)
   
   dir = value_compare_3way (case_data (next_case, cdr->key),
                            current_value, key_width);
+  case_unref (next_case);
   if ( dir != 0 )
     {
       /* Insist that the data are sorted */
index 98c10273b314dd4bbc4f81170e485136a828a756..9f3d5cf9dbeb25c94683a8f739218d6cb6c0ba0d 100644 (file)
@@ -331,7 +331,7 @@ casereader_advance (struct casereader *reader, casenumber n)
 
 
 /* Copies all the cases in READER to WRITER, propagating errors
-   appropriately. */
+   appropriately. READER is destroyed by this function */
 void
 casereader_transfer (struct casereader *reader, struct casewriter *writer)
 {
index f2231e2d88984576e39e712427d3dfa4e530f889..a2e789ae6f777c8fc3688c3dc9110180434f75f0 100644 (file)
@@ -100,7 +100,7 @@ casereader_create_filter_weight (struct casereader *,
                                  struct casewriter *exclude);
 struct casereader *
 casereader_create_filter_missing (struct casereader *,
-                                  const struct variable **vars, size_t var_cnt,
+                                  const struct variable *const*vars, size_t var_cnt,
                                   enum mv_class,
                                  casenumber *n_missing,
                                   struct casewriter *exclude);
index 7d35b1c2e0757a4ef3d7ea843b2b1b041cfc6037..70568c3e1d4dfe35fc10857d0aaf6ee1fe654c72 100644 (file)
@@ -158,7 +158,7 @@ csv_writer_open (struct file_handle *fh, const struct dictionary *dict,
                               &w->file, NULL);
   if (w->rf == NULL)
     {
-      msg (ME, _("Error opening \"%s\" for writing as a system file: %s."),
+      msg (ME, _("Error opening `%s' for writing as a system file: %s."),
            fh_get_file_name (fh), strerror (errno));
       goto error;
     }
@@ -459,7 +459,7 @@ close_writer (struct csv_writer *w)
         ok = false;
 
       if (!ok)
-        msg (ME, _("An I/O error occurred writing CSV file \"%s\"."),
+        msg (ME, _("An I/O error occurred writing CSV file `%s'."),
              fh_get_file_name (w->fh));
 
       if (ok ? !replace_file_commit (w->rf) : !replace_file_abort (w->rf))
index c105454ae6654ffda20a4e5bbe4ae5a3eadfa28a..d36aefb5e8144bb1e2207fb613d2ec6d897b63c2 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2006, 2009 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2006, 2009, 2010 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
 
 #include <ctype.h>
 #include <errno.h>
+#include <limits.h>
 #include <math.h>
 #include <stdarg.h>
+#include <stdbool.h>
 #include <stddef.h>
 #include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
-#include <stdbool.h>
-#include <limits.h>
 
 #include "calendar.h"
+#include "dictionary.h"
+#include "format.h"
 #include "identifier.h"
+#include "libpspp/assertion.h"
+#include "libpspp/compiler.h"
+#include "libpspp/i18n.h"
+#include "libpspp/integer-format.h"
+#include "libpspp/legacy-encoding.h"
+#include "libpspp/misc.h"
+#include "libpspp/str.h"
 #include "settings.h"
 #include "value.h"
-#include "format.h"
-#include "dictionary.h"
 
-#include <libpspp/assertion.h>
-#include <libpspp/legacy-encoding.h>
-#include <libpspp/i18n.h>
-#include <libpspp/compiler.h>
-#include <libpspp/integer-format.h>
-#include <libpspp/message.h>
-#include <libpspp/misc.h>
-#include <libpspp/str.h>
-#include "c-ctype.h"
-#include "c-strtod.h"
-#include "minmax.h"
-#include "xalloc.h"
+#include "gl/c-ctype.h"
+#include "gl/c-strtod.h"
+#include "gl/minmax.h"
+#include "gl/xalloc.h"
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 /* Information about parsing one data field. */
 struct data_in
   {
-    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. */
 
     union value *output;        /* Destination. */
     int width;                  /* Output width. */
-
-    int first_column;          /* First column of field; 0 if inapplicable. */
-    int last_column;           /* Last column. */
   };
 
-
-
-typedef bool data_in_parser_func (struct data_in *);
+typedef char *data_in_parser_func (struct data_in *);
 #define FMT(NAME, METHOD, IMIN, OMIN, IO, CATEGORY) \
         static data_in_parser_func parse_##METHOD;
 #include "format.def"
 
-static void vdata_warning (const struct data_in *, const char *, va_list)
-     PRINTF_FORMAT (2, 0);
-static void data_warning (const struct data_in *, const char *, ...)
-     PRINTF_FORMAT (2, 3);
-
-static void apply_implied_decimals (struct data_in *);
 static void default_result (struct data_in *);
 static bool trim_spaces_and_check_missing (struct data_in *);
 
 static int hexit_value (int c);
 \f
 /* Parses the characters in INPUT, which are encoded in the given
-   ENCODING, according to FORMAT.  Stores the parsed
-   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
-   decimal places should be implied.
-
-   If FIRST_COLUMN and LAST_COLUMN are nonzero, then they should
-   be the 1-based column number of the first and
-   one-past-the-last-character in INPUT, for use in error
-   messages.  (LAST_COLUMN cannot always be calculated from
-   FIRST_COLUMN plus the length of the input because of the
-   possibility of escaped quotes in strings, etc.) */
-bool
-data_in (struct substring input, const char *encoding,
-         enum fmt_type format, int implied_decimals,
-         int first_column, int last_column,
-        const struct dictionary *dict,
-        union value *output, int width)
+   INPUT_ENCODING, according to FORMAT.
+
+   Stores the parsed representation in OUTPUT, which the caller must have
+   initialized with the given WIDTH (0 for a numeric field, otherwise the
+   string width).  If FORMAT is FMT_A, then OUTPUT_ENCODING must specify the
+   correct encoding for OUTPUT (normally obtained via dict_get_encoding()). */
+char *
+data_in (struct substring input, const char *input_encoding,
+         enum fmt_type format,
+         union value *output, int width, const char *output_encoding)
 {
   static data_in_parser_func *const handlers[FMT_NUMBER_OF_FORMATS] =
     {
@@ -119,60 +91,190 @@ data_in (struct substring input, const char *encoding,
 
   struct data_in i;
 
-  char *s = NULL;
-  bool ok;
+  enum fmt_category cat;
+  const char *dest_encoding;
+  char *s;
+  char *error;
 
   assert ((width != 0) == fmt_is_string (format));
 
   i.format = format;
-  i.implied_decimals = implied_decimals;
 
   i.output = output;
   i.width = width;
 
-  i.first_column = first_column;
-  i.last_column = last_column;
-  i.src_enc = encoding;
-
   if (ss_is_empty (input))
     {
       default_result (&i);
-      return true;
+      return NULL;
     }
 
-  if (fmt_get_category (format) & ( FMT_CAT_BINARY | FMT_CAT_HEXADECIMAL | FMT_CAT_LEGACY))
+  cat = fmt_get_category (format);
+  if (cat & (FMT_CAT_BASIC | FMT_CAT_HEXADECIMAL
+             | FMT_CAT_DATE | FMT_CAT_TIME | FMT_CAT_DATE_COMPONENT))
     {
-      i.input = input;
+      /* We're going to parse these into numbers.  For this purpose we want to
+         deal with them in the local "C" encoding.  Any character not in that
+         encoding wouldn't be valid anyhow. */
+      dest_encoding = LEGACY_NATIVE;
+    }
+  else if (cat & (FMT_CAT_BINARY | FMT_CAT_LEGACY))
+    {
+      /* Don't recode these binary formats at all, since they are not text. */
+      dest_encoding = NULL;
     }
   else
     {
-      const char *dest_encoding;
-
-      if ( dict == NULL)
-       {
-         assert (0 == (fmt_get_category (format) & (FMT_CAT_BINARY | FMT_CAT_STRING)));
-         dest_encoding = LEGACY_NATIVE;
-       }
+      assert (cat == FMT_CAT_STRING);
+      if (format == FMT_AHEX)
+        {
+          /* We want the hex digits in the local "C" encoding, even though the
+             result may not be in that encoding. */
+          dest_encoding = LEGACY_NATIVE;
+        }
       else
-       dest_encoding = dict_get_encoding (dict);
+        {
+          /* Use the final output encoding. */
+          dest_encoding = output_encoding;
+        }
+    }
 
-      s = recode_string (dest_encoding, i.src_enc, ss_data (input), ss_length (input));
-      i.input = ss_cstr (s);
+  if (dest_encoding != NULL)
+    {
+      i.input = recode_substring_pool (dest_encoding, input_encoding, input,
+                                       NULL);
+      s = i.input.string;
+    }
+  else
+    {
+      i.input = input;
+      s = NULL;
     }
 
-  ok = handlers[i.format] (&i);
-  if (!ok)
+  error = handlers[i.format] (&i);
+  if (error != NULL)
     default_result (&i);
 
   free (s);
-  return ok;
+
+  return error;
+}
+
+bool
+data_in_msg (struct substring input, const char *input_encoding,
+             enum fmt_type format,
+             union value *output, int width, const char *output_encoding)
+{
+  char *error = data_in (input, input_encoding, format,
+                         output, width, output_encoding);
+  if (error != NULL)
+    {
+      msg (SW,_("Data is not valid as format %s: %s"),
+           fmt_name (format), error);
+      free (error);
+      return false;
+    }
+  else
+    return true;
+}
+
+static bool
+number_has_implied_decimals (const char *s, enum fmt_type type)
+{
+  int decimal = settings_get_style (type)->decimal;
+  bool got_digit = false;
+  for (;;)
+    {
+      switch (*s)
+        {
+        case '0': case '1': case '2': case '3': case '4':
+        case '5': case '6': case '7': case '8': case '9':
+          got_digit = true;
+          break;
+
+        case '+': case '-':
+          if (got_digit)
+            return false;
+          break;
+
+        case 'e': case 'E': case 'd': case 'D':
+          return false;
+
+        case '.': case ',':
+          if (*s == decimal)
+            return false;
+          break;
+
+        case '\0':
+          return true;
+
+        default:
+          break;
+        }
+
+      s++;
+    }
+}
+
+static bool
+has_implied_decimals (struct substring input, const char *input_encoding,
+                      enum fmt_type format)
+{
+  bool retval;
+  char *s;
+
+  switch (format)
+    {
+    case FMT_F:
+    case FMT_COMMA:
+    case FMT_DOT:
+    case FMT_DOLLAR:
+    case FMT_PCT:
+    case FMT_E:
+    case FMT_Z:
+      break;
+
+    case FMT_N:
+    case FMT_IB:
+    case FMT_PIB:
+    case FMT_P:
+    case FMT_PK:
+      return true;
+
+    default:
+      return false;
+    }
+
+  s = recode_string (LEGACY_NATIVE, input_encoding,
+                     ss_data (input), ss_length (input));
+  retval = (format == FMT_Z
+            ? strchr (s, '.') == NULL
+            : number_has_implied_decimals (s, format));
+  free (s);
+
+  return retval;
 }
 
+/* In some cases, when no decimal point is explicitly included in numeric
+   input, its position is implied by the number of decimal places in the input
+   format.  In such a case, this function may be called just after data_in().
+   Its arguments are a subset of that function's arguments plus D, the number
+   of decimal places associated with FORMAT.
+
+   If it is appropriate, this function modifies the numeric value in OUTPUT. */
+void
+data_in_imply_decimals (struct substring input, const char *input_encoding,
+                        enum fmt_type format, int d, union value *output)
+{
+  if (d > 0 && output->f != SYSMIS
+      && has_implied_decimals (input, input_encoding, format))
+    output->f /= pow (10., d);
+}
 \f
 /* Format parsers. */
 
 /* Parses F, COMMA, DOT, DOLLAR, PCT, and E input formats. */
-static bool
+static char *
 parse_number (struct data_in *i)
 {
   const struct fmt_number_style *style =
@@ -191,7 +293,7 @@ parse_number (struct data_in *i)
 
   /* Trim spaces and check for missing value representation. */
   if (trim_spaces_and_check_missing (i))
-    return true;
+    return NULL;
 
   ds_init_empty (&tmp);
   ds_extend (&tmp, 64);
@@ -270,12 +372,13 @@ parse_number (struct data_in *i)
 
   if (!ss_is_empty (i->input))
     {
+      char *error;
       if (ds_is_empty (&tmp))
-        data_warning (i, _("Field contents are not numeric."));
+        error = xstrdup (_("Field contents are not numeric."));
       else
-        data_warning (i, _("Number followed by garbage."));
+        error = xstrdup (_("Number followed by garbage."));
       ds_destroy (&tmp);
-      return false;
+      return error;
     }
 
   /* Let c_strtod() do the conversion. */
@@ -284,37 +387,34 @@ parse_number (struct data_in *i)
   i->output->f = c_strtod (ds_cstr (&tmp), &tail);
   if (*tail != '\0')
     {
-      data_warning (i, _("Invalid numeric syntax."));
       errno = save_errno;
       ds_destroy (&tmp);
-      return false;
+      return xstrdup (_("Invalid numeric syntax."));
     }
   else if (errno == ERANGE)
     {
       if (fabs (i->output->f) > 1)
         {
-          data_warning (i, _("Too-large number set to system-missing."));
           i->output->f = SYSMIS;
+          ds_destroy (&tmp);
+          return xstrdup (_("Too-large number set to system-missing."));
         }
       else
         {
-          data_warning (i, _("Too-small number set to zero."));
           i->output->f = 0.0;
+          ds_destroy (&tmp);
+          return xstrdup (_("Too-small number set to zero."));
         }
     }
   else
-    {
-      errno = save_errno;
-      if (!explicit_decimals)
-        apply_implied_decimals (i);
-    }
+    errno = save_errno;
 
   ds_destroy (&tmp);
-  return true;
+  return NULL;
 }
 
 /* Parses N format. */
-static bool
+static char *
 parse_N (struct data_in *i)
 {
   int c;
@@ -323,19 +423,15 @@ parse_N (struct data_in *i)
   while ((c = ss_get_char (&i->input)) != EOF)
     {
       if (!c_isdigit (c))
-        {
-          data_warning (i, _("All characters in field must be digits."));
-          return false;
-        }
+        return xstrdup (_("All characters in field must be digits."));
       i->output->f = i->output->f * 10.0 + (c - '0');
     }
 
-  apply_implied_decimals (i);
-  return true;
+  return NULL;
 }
 
 /* Parses PIBHEX format. */
-static bool
+static char *
 parse_PIBHEX (struct data_in *i)
 {
   double n;
@@ -346,19 +442,16 @@ parse_PIBHEX (struct data_in *i)
   while ((c = ss_get_char (&i->input)) != EOF)
     {
       if (!c_isxdigit (c))
-        {
-          data_warning (i, _("Unrecognized character in field."));
-          return false;
-        }
+        return xstrdup (_("Unrecognized character in field."));
       n = n * 16.0 + hexit_value (c);
     }
 
   i->output->f = n;
-  return true;
+  return NULL;
 }
 
 /* Parses RBHEX format. */
-static bool
+static char *
 parse_RBHEX (struct data_in *i)
 {
   double d;
@@ -370,21 +463,15 @@ parse_RBHEX (struct data_in *i)
       int hi = ss_get_char (&i->input);
       int lo = ss_get_char (&i->input);
       if (lo == EOF)
-        {
-          data_warning (i, _("Field must have even length."));
-          return false;
-        }
+        return xstrdup (_("Field must have even length."));
       else if (!c_isxdigit (hi) || !c_isxdigit (lo))
-       {
-         data_warning (i, _("Field must contain only hex digits."));
-         return false;
-       }
+        return xstrdup (_("Field must contain only hex digits."));
       ((unsigned char *) &d)[j] = 16 * hexit_value (hi) + hexit_value (lo);
     }
 
   i->output->f = d;
 
-  return true;
+  return NULL;
 }
 
 /* Digits for Z format. */
@@ -416,7 +503,7 @@ is_negative_z_digit (int c)
 }
 
 /* Parses Z format. */
-static bool
+static char *
 parse_Z (struct data_in *i)
 {
   struct string tmp;
@@ -428,7 +515,7 @@ parse_Z (struct data_in *i)
 
   /* Trim spaces and check for missing value representation. */
   if (trim_spaces_and_check_missing (i))
-    return true;
+    return NULL;
 
   ds_init_empty (&tmp);
   ds_extend (&tmp, 64);
@@ -454,18 +541,21 @@ parse_Z (struct data_in *i)
       else
         {
           ds_destroy (&tmp);
-          return false;
+          return xstrdup (_("Invalid zoned decimal syntax."));
         }
     }
 
   if (!ss_is_empty (i->input))
     {
+      char *error;
+
       if (ds_length (&tmp) == 1)
-        data_warning (i, _("Field contents are not numeric."));
+        error = xstrdup (_("Field contents are not numeric."));
       else
-        data_warning (i, _("Number followed by garbage."));
+        error = xstrdup (_("Number followed by garbage."));
+
       ds_destroy (&tmp);
-      return false;
+      return error;
     }
 
   /* Let c_strtod() do the conversion. */
@@ -476,28 +566,26 @@ parse_Z (struct data_in *i)
     {
       if (fabs (i->output->f) > 1)
         {
-          data_warning (i, _("Too-large number set to system-missing."));
           i->output->f = SYSMIS;
+          ds_destroy (&tmp);
+          return xstrdup (_("Too-large number set to system-missing."));
         }
       else
         {
-          data_warning (i, _("Too-small number set to zero."));
           i->output->f = 0.0;
+          ds_destroy (&tmp);
+          return xstrdup (_("Too-small number set to zero."));
         }
     }
   else
-    {
-      errno = save_errno;
-      if (!got_dot)
-        apply_implied_decimals (i);
-    }
+    errno = save_errno;
 
   ds_destroy (&tmp);
-  return true;
+  return NULL;
 }
 
 /* Parses IB format. */
-static bool
+static char *
 parse_IB (struct data_in *i)
 {
   size_t bytes;
@@ -517,21 +605,17 @@ parse_IB (struct data_in *i)
       i->output->f = -(double) -value;
     }
 
-  apply_implied_decimals (i);
-
-  return true;
+  return NULL;
 }
 
 /* Parses PIB format. */
-static bool
+static char *
 parse_PIB (struct data_in *i)
 {
   i->output->f = integer_get (settings_get_input_integer_format (), ss_data (i->input),
                               MIN (8, ss_length (i->input)));
 
-  apply_implied_decimals (i);
-
-  return true;
+  return NULL;
 }
 
 /* Consumes the first character of S.  Stores its high 4 bits in
@@ -546,7 +630,7 @@ get_nibbles (struct substring *s, int *high_nibble, int *low_nibble)
 }
 
 /* Parses P format. */
-static bool
+static char *
 parse_P (struct data_in *i)
 {
   int high_nibble, low_nibble;
@@ -557,26 +641,24 @@ parse_P (struct data_in *i)
     {
       get_nibbles (&i->input, &high_nibble, &low_nibble);
       if (high_nibble > 9 || low_nibble > 9)
-        return false;
+        return xstrdup (_("Invalid syntax for P field."));
       i->output->f = (100 * i->output->f) + (10 * high_nibble) + low_nibble;
     }
 
   get_nibbles (&i->input, &high_nibble, &low_nibble);
   if (high_nibble > 9)
-    return false;
+    return xstrdup (_("Invalid syntax for P field."));
   i->output->f = (10 * i->output->f) + high_nibble;
   if (low_nibble < 10)
     i->output->f = (10 * i->output->f) + low_nibble;
   else if (low_nibble == 0xb || low_nibble == 0xd)
     i->output->f = -i->output->f;
 
-  apply_implied_decimals (i);
-
-  return true;
+  return NULL;
 }
 
 /* Parses PK format. */
-static bool
+static char *
 parse_PK (struct data_in *i)
 {
   i->output->f = 0.0;
@@ -588,18 +670,16 @@ parse_PK (struct data_in *i)
       if (high_nibble > 9 || low_nibble > 9)
         {
           i->output->f = SYSMIS;
-          return true;
+          return NULL;
         }
       i->output->f = (100 * i->output->f) + (10 * high_nibble) + low_nibble;
     }
 
-  apply_implied_decimals (i);
-
-  return true;
+  return NULL;
 }
 
 /* Parses RB format. */
-static bool
+static char *
 parse_RB (struct data_in *i)
 {
   enum float_format ff = settings_get_input_float_format ();
@@ -610,11 +690,11 @@ parse_RB (struct data_in *i)
   else
     i->output->f = SYSMIS;
 
-  return true;
+  return NULL;
 }
 
 /* Parses A format. */
-static bool
+static char *
 parse_A (struct data_in *i)
 {
   /* This is equivalent to buf_copy_rpad, except that we posibly
@@ -629,11 +709,11 @@ parse_A (struct data_in *i)
   if (dst_size > src_size)
     memset (&dst[src_size], ' ', dst_size - src_size);
 
-  return true;
+  return NULL;
 }
 
 /* Parses AHEX format. */
-static bool
+static char *
 parse_AHEX (struct data_in *i)
 {
   uint8_t *s = value_str_rw (i->output, i->width);
@@ -646,21 +726,10 @@ parse_AHEX (struct data_in *i)
       if (hi == EOF)
         break;
       else if (lo == EOF)
-        {
-          data_warning (i, _("Field must have even length."));
-          return false;
-        }
+        return xstrdup (_("Field must have even length."));
 
-      if (0 != strcmp (i->src_enc, LEGACY_NATIVE))
-        {
-          hi = legacy_to_native (i->src_enc, hi);
-          lo = legacy_to_native (i->src_enc, lo);
-        }
       if (!c_isxdigit (hi) || !c_isxdigit (lo))
-       {
-         data_warning (i, _("Field must contain only hex digits."));
-         return false;
-       }
+        return xstrdup (_("Field must contain only hex digits."));
 
       if (j < i->width)
         s[j] = hexit_value (hi) * 16 + hexit_value (lo);
@@ -668,7 +737,7 @@ parse_AHEX (struct data_in *i)
 
   memset (&s[j], ' ', i->width - j);
 
-  return true;
+  return NULL;
 }
 \f
 /* Date & time format components. */
@@ -685,7 +754,7 @@ enum time_sign
    MAX_DIGITS characters in I, storing the result into *RESULT.
    Returns true if successful, false if no integer was
    present. */
-static bool
+static char * WARN_UNUSED_RESULT
 parse_int (struct data_in *i, long *result, size_t max_digits)
 {
   struct substring head = ss_head (i->input, max_digits);
@@ -693,28 +762,25 @@ parse_int (struct data_in *i, long *result, size_t max_digits)
   if (n)
     {
       ss_advance (&i->input, n);
-      return true;
+      return NULL;
     }
   else
-    {
-      data_warning (i, _("Syntax error in date field."));
-      return false;
-    }
+    return xstrdup (_("Syntax error in date field."));
 }
 
 /* Parses a date integer between 1 and 31 from I, storing it into
    *DAY.
    Returns true if successful, false if no date was present. */
-static bool
+static char *
 parse_day (struct data_in *i, long *day)
 {
-  if (!parse_int (i, day, SIZE_MAX))
-    return false;
+  char *error = parse_int (i, day, SIZE_MAX);
+  if (error != NULL)
+    return error;
   if (*day >= 1 && *day <= 31)
-    return true;
+    return NULL;
 
-  data_warning (i, _("Day (%ld) must be between 1 and 31."), *day);
-  return false;
+  return xasprintf (_("Day (%ld) must be between 1 and 31."), *day);
 }
 
 /* Parses an integer from the beginning of I.
@@ -723,11 +789,12 @@ parse_day (struct data_in *i, long *day)
    If *TIME_SIGN is SIGN_NO_TIME, allows a sign to precede the
    time and sets *TIME_SIGN.  Otherwise, does not allow a sign.
    Returns true if successful, false if no integer was present. */
-static bool
+static char *
 parse_time_units (struct data_in *i, double seconds_per_unit,
                   enum time_sign *time_sign, double *time)
 
 {
+  char *error;
   long units;
 
   if (*time_sign == SIGN_NO_TIME)
@@ -740,28 +807,25 @@ parse_time_units (struct data_in *i, double seconds_per_unit,
           *time_sign = SIGN_POSITIVE;
         }
     }
-  if (!parse_int (i, &units, SIZE_MAX))
-    return false;
+  error = parse_int (i, &units, SIZE_MAX);
+  if (error != NULL)
+    return error;
   if (units < 0)
-    {
-      data_warning (i, _("Syntax error in date field."));
-      return false;
-    }
+    return xstrdup (_("Syntax error in date field."));
   *time += units * seconds_per_unit;
-  return true;
+  return NULL;
 }
 
 /* Parses a data delimiter from the beginning of I.
    Returns true if successful, false if no delimiter was
    present. */
-static bool
+static char *
 parse_date_delimiter (struct data_in *i)
 {
   if (ss_ltrim (&i->input, ss_cstr ("-/.," CC_SPACES)))
-    return true;
+    return NULL;
 
-  data_warning (i, _("Delimiter expected between fields in date."));
-  return false;
+  return xstrdup (_("Delimiter expected between fields in date."));
 }
 
 /* Parses spaces at the beginning of I. */
@@ -802,15 +866,16 @@ match_name (struct substring token, const char *const *names, long *output)
 /* Parses a month name or number from the beginning of I,
    storing the month (in range 1...12) into *MONTH.
    Returns true if successful, false if no month was present. */
-static bool
+static char *
 parse_month (struct data_in *i, long *month)
 {
   if (c_isdigit (ss_first (i->input)))
     {
-      if (!parse_int (i, month, SIZE_MAX))
-       return false;
+      char *error = parse_int (i, month, SIZE_MAX);
+      if (error != NULL)
+       return error;
       if (*month >= 1 && *month <= 12)
-        return true;
+        return NULL;
     }
   else
     {
@@ -831,22 +896,22 @@ parse_month (struct data_in *i, long *month)
       struct substring token = parse_name_token (i);
       if (match_name (ss_head (token, 3), english_names, month)
           || match_name (ss_head (token, 4), roman_names, month))
-        return true;
+        return NULL;
     }
 
-  data_warning (i, _("Unrecognized month format.  Months may be specified "
-                     "as Arabic or Roman numerals or as at least 3 letters "
-                     "of their English names."));
-  return false;
+  return xstrdup (_("Unrecognized month format.  Months may be specified "
+                    "as Arabic or Roman numerals or as at least 3 letters "
+                    "of their English names."));
 }
 
 /* Parses a year of at most MAX_DIGITS from the beginning of I,
    storing a "4-digit" year into *YEAR. */
-static bool
+static char *
 parse_year (struct data_in *i, long *year, size_t max_digits)
 {
-  if (!parse_int (i, year, max_digits))
-    return false;
+  char *error = parse_int (i, year, max_digits);
+  if (error != NULL)
+    return error;
 
   if (*year >= 0 && *year <= 99)
     {
@@ -859,28 +924,26 @@ parse_year (struct data_in *i, long *year, size_t max_digits)
         *year += epoch_century + 100;
     }
   if (*year >= 1582 || *year <= 19999)
-    return true;
+    return NULL;
 
-  data_warning (i, _("Year (%ld) must be between 1582 and 19999."), *year);
-  return false;
+  return xasprintf (_("Year (%ld) must be between 1582 and 19999."), *year);
 }
 
 /* Returns true if input in I has been exhausted,
    false otherwise. */
-static bool
+static char *
 parse_trailer (struct data_in *i)
 {
   if (ss_is_empty (i->input))
-    return true;
+    return NULL;
 
-  data_warning (i, _("Trailing garbage \"%.*s\" following date."),
-              (int) ss_length (i->input), ss_data (i->input));
-  return false;
+  return xasprintf (_("Trailing garbage `%.*s' following date."),
+                    (int) ss_length (i->input), ss_data (i->input));
 }
 
 /* Parses a 3-digit Julian day-of-year value from I into *YDAY.
    Returns true if successful, false on failure. */
-static bool
+static char *
 parse_yday (struct data_in *i, long *yday)
 {
   struct substring num_s;
@@ -888,98 +951,92 @@ parse_yday (struct data_in *i, long *yday)
 
   ss_get_chars (&i->input, 3, &num_s);
   if (ss_span (num_s, ss_cstr (CC_DIGITS)) != 3)
-    {
-      data_warning (i, _("Julian day must have exactly three digits."));
-      return false;
-    }
+    return xstrdup (_("Julian day must have exactly three digits."));
   else if (!ss_get_long (&num_s, &num) || num < 1 || num > 366)
-    {
-      data_warning (i, _("Julian day (%ld) must be between 1 and 366."), num);
-      return false;
-    }
+    return xasprintf (_("Julian day (%ld) must be between 1 and 366."), num);
 
   *yday = num;
-  return true;
+  return NULL;
 }
 
 /* Parses a quarter-of-year integer between 1 and 4 from I.
    Stores the corresponding month into *MONTH.
    Returns true if successful, false if no quarter was present. */
-static bool
+static char *
 parse_quarter (struct data_in *i, long int *month)
 {
   long quarter;
+  char *error;
 
-  if (!parse_int (i, &quarter, SIZE_MAX))
-    return false;
+  error = parse_int (i, &quarter, SIZE_MAX);
+  if (error != NULL)
+    return error;
   if (quarter >= 1 && quarter <= 4)
     {
       *month = (quarter - 1) * 3 + 1;
-      return true;
+      return NULL;
     }
 
-  data_warning (i, _("Quarter (%ld) must be between 1 and 4."), quarter);
-  return false;
+  return xasprintf (_("Quarter (%ld) must be between 1 and 4."), quarter);
 }
 
 /* Parses a week-of-year integer between 1 and 53 from I,
    Stores the corresponding year-of-day into *YDAY.
    Returns true if successful, false if no week was present. */
-static bool
+static char *
 parse_week (struct data_in *i, long int *yday)
 {
+  char *error;
   long week;
 
-  if (!parse_int (i, &week, SIZE_MAX))
-    return false;
+  error = parse_int (i, &week, SIZE_MAX);
+  if (error != NULL)
+    return error;
   if (week >= 1 && week <= 53)
     {
       *yday = (week - 1) * 7 + 1;
-      return true;
+      return NULL;
     }
 
-  data_warning (i, _("Week (%ld) must be between 1 and 53."), week);
-  return false;
+  return xasprintf (_("Week (%ld) must be between 1 and 53."), week);
 }
 
 /* Parses a time delimiter from the beginning of I.
    Returns true if successful, false if no delimiter was
    present. */
-static bool
+static char *
 parse_time_delimiter (struct data_in *i)
 {
   if (ss_ltrim (&i->input, ss_cstr (":" CC_SPACES)) > 0)
-    return true;
+    return NULL;
 
-  data_warning (i, _("Delimiter expected between fields in time."));
-  return false;
+  return xstrdup (_("Delimiter expected between fields in time."));
 }
 
 /* Parses minutes and optional seconds from the beginning of I.
    The time is converted into seconds, which are added to
    *TIME.
    Returns true if successful, false if an error was found. */
-static bool
+static char *
 parse_minute_second (struct data_in *i, double *time)
 {
   long minute;
   char buf[64];
+  char *error;
   char *cp;
 
   /* Parse minutes. */
-  if (!parse_int (i, &minute, SIZE_MAX))
-    return false;
+  error = parse_int (i, &minute, SIZE_MAX);
+  if (error != NULL)
+    return error;
   if (minute < 0 || minute > 59)
-    {
-      data_warning (i, _("Minute (%ld) must be between 0 and 59."), minute);
-      return false;
-    }
+    return xasprintf (_("Minute (%ld) must be between 0 and 59."), minute);
   *time += 60. * minute;
 
   /* Check for seconds. */
   if (ss_ltrim (&i->input, ss_cstr (":" CC_SPACES)) == 0
       || !c_isdigit (ss_first (i->input)))
-   return true;
+   return NULL;
 
   /* Parse seconds. */
   cp = buf;
@@ -993,13 +1050,13 @@ parse_minute_second (struct data_in *i, double *time)
 
   *time += strtod (buf, NULL);
 
-  return true;
+  return NULL;
 }
 
 /* Parses a weekday name from the beginning of I,
    storing a value of 1=Sunday...7=Saturday into *WEEKDAY.
    Returns true if successful, false if an error was found. */
-static bool
+static char *
 parse_weekday (struct data_in *i, long *weekday)
 {
   static const char *const weekday_names[] =
@@ -1011,64 +1068,53 @@ parse_weekday (struct data_in *i, long *weekday)
   struct substring token = parse_name_token (i);
   bool ok = match_name (ss_head (token, 2), weekday_names, weekday);
   if (!ok)
-    data_warning (i, _("Unrecognized weekday name.  At least the first two "
-                       "letters of an English weekday name must be "
-                       "specified."));
-  return ok;
+    return xstrdup (_("Unrecognized weekday name.  At least the first two "
+                      "letters of an English weekday name must be "
+                      "specified."));
+  return NULL;
 }
 \f
 /* Date & time formats. */
 
-/* Helper function for passing to
-   calendar_gregorian_to_offset. */
-static void
-calendar_error (void *i_, const char *format, ...)
-{
-  struct data_in *i = i_;
-  va_list args;
-
-  va_start (args, format);
-  vdata_warning (i, format, args);
-  va_end (args);
-}
-
 /* Parses WKDAY format. */
-static bool
+static char *
 parse_WKDAY (struct data_in *i)
 {
   long weekday;
+  char *error;
 
   if (trim_spaces_and_check_missing (i))
-    return true;
+    return NULL;
 
-  if (!parse_weekday (i, &weekday)
-      || !parse_trailer (i))
-    return false;
+  error = parse_weekday (i, &weekday);
+  if (error == NULL)
+    error = parse_trailer (i);
 
   i->output->f = weekday;
-  return true;
+  return error;
 }
 
 /* Parses MONTH format. */
-static bool
+static char *
 parse_MONTH (struct data_in *i)
 {
   long month;
+  char *error;
 
   if (trim_spaces_and_check_missing (i))
-    return true;
+    return NULL;
 
-  if (!parse_month (i, &month)
-      || !parse_trailer (i))
-    return false;
+  error = parse_month (i, &month);
+  if (error == NULL)
+    error = parse_trailer (i);
 
   i->output->f = month;
-  return true;
+  return error;
 }
 
 /* Parses DATE, ADATE, EDATE, JDATE, SDATE, QYR, MOYR, KWYR,
    DATETIME, TIME and DTIME formats. */
-static bool
+static char *
 parse_date (struct data_in *i)
 {
   long int year = INT_MIN;
@@ -1080,28 +1126,27 @@ parse_date (struct data_in *i)
 
   const char *template = fmt_date_template (i->format);
   size_t template_width = strlen (template);
+  char *error;
 
   if (trim_spaces_and_check_missing (i))
-    return true;
+    return NULL;
 
   while (*template != '\0')
     {
       unsigned char ch = *template;
       int count = 1;
-      bool ok;
 
       while (template[count] == ch)
         count++;
       template += count;
 
-      ok = true;
       switch (ch)
         {
         case 'd':
-          ok = count < 3 ? parse_day (i, &day) : parse_yday (i, &yday);
+          error = count < 3 ? parse_day (i, &day) : parse_yday (i, &yday);
           break;
         case 'm':
-          ok = parse_month (i, &month);
+          error = parse_month (i, &month);
           break;
         case 'y':
           {
@@ -1115,119 +1160,71 @@ parse_date (struct data_in *i)
                 else
                   max_digits = 2;
               }
-            ok = parse_year (i, &year, max_digits);
+            error = parse_year (i, &year, max_digits);
           }
           break;
         case 'q':
-          ok = parse_quarter (i, &month);
+          error = parse_quarter (i, &month);
           break;
         case 'w':
-          ok = parse_week (i, &yday);
+          error = parse_week (i, &yday);
           break;
         case 'D':
-          ok = parse_time_units (i, 60. * 60. * 24., &time_sign, &time);
+          error = parse_time_units (i, 60. * 60. * 24., &time_sign, &time);
           break;
         case 'H':
-          ok = parse_time_units (i, 60. * 60., &time_sign, &time);
+          error = parse_time_units (i, 60. * 60., &time_sign, &time);
           break;
         case 'M':
-          ok = parse_minute_second (i, &time);
+          error = parse_minute_second (i, &time);
           break;
         case '-':
         case '/':
         case '.':
         case 'X':
-          ok = parse_date_delimiter (i);
+          error = parse_date_delimiter (i);
           break;
         case ':':
-          ok = parse_time_delimiter (i);
+          error = parse_time_delimiter (i);
         case ' ':
           parse_spaces (i);
+          error = NULL;
           break;
         default:
           assert (count == 1);
           if (!ss_match_char (&i->input, c_toupper (ch))
               && !ss_match_char (&i->input, c_tolower (ch)))
-            {
-              data_warning (i, _("`%c' expected in date field."), ch);
-              return false;
-            }
+            error = xasprintf (_("`%c' expected in date field."), ch);
+          else
+            error = NULL;
           break;
         }
-      if (!ok)
-        return false;
+      if (error != NULL)
+        return error;
     }
-  if (!parse_trailer (i))
-    return false;
+  error = parse_trailer (i);
+  if (error != NULL)
+    return error;
 
   if (year != INT_MIN)
     {
-      double ofs = calendar_gregorian_to_offset (year, month, day,
-                                                 calendar_error, i);
+      char *error;
+      double ofs;
+
+      ofs = calendar_gregorian_to_offset (year, month, day, &error);
       if (ofs == SYSMIS)
-        return false;
+        return error;
       date = (yday - 1 + ofs) * 60. * 60. * 24.;
     }
   else
     date = 0.;
   i->output->f = date + (time_sign == SIGN_NEGATIVE ? -time : time);
 
-  return true;
+  return NULL;
 }
 \f
 /* Utility functions. */
 
-/* Outputs FORMAT with the given ARGS as a warning for input
-   I. */
-static void
-vdata_warning (const struct data_in *i, const char *format, va_list args)
-{
-  struct msg m;
-  struct string text;
-
-  ds_init_empty (&text);
-  ds_put_char (&text, '(');
-  if (i->first_column != 0)
-    {
-      if (i->first_column == i->last_column - 1)
-        ds_put_format (&text, _("column %d"), i->first_column);
-      else
-        ds_put_format (&text, _("columns %d-%d"),
-                       i->first_column, i->last_column - 1);
-      ds_put_cstr (&text, ", ");
-    }
-  ds_put_format (&text, _("%s field) "), fmt_name (i->format));
-  ds_put_vformat (&text, format, args);
-
-  m.category = MSG_C_DATA;
-  m.severity = MSG_S_WARNING;
-  m.text = ds_cstr (&text);
-  m.where.file_name = NULL;
-  m.where.line_number = -1;
-
-  msg_emit (&m);
-}
-
-/* Outputs FORMAT with the given ARGS as a warning for input
-   I. */
-static void
-data_warning (const struct data_in *i, const char *format, ...)
-{
-  va_list args;
-
-  va_start (args, format);
-  vdata_warning (i, format, args);
-  va_end (args);
-}
-
-/* Apply implied decimal places to output. */
-static void
-apply_implied_decimals (struct data_in *i)
-{
-  if (i->implied_decimals > 0)
-    i->output->f /= pow (10., i->implied_decimals);
-}
-
 /* Sets the default result for I.
    For a numeric format, this is the value set on SET BLANKS
    (typically system-missing); for a string format, it is all
index 3ebd5933c43b0370e29cfd279cd3b22fcdbb0b4d..ceb023e99887a75028a7a6cf3c764face86357f0 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2006, 2010 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
 #define DATA_DATA_IN_H 1
 
 #include <stdbool.h>
-#include <libpspp/legacy-encoding.h>
-#include <libpspp/float-format.h>
-#include <libpspp/integer-format.h>
-#include <libpspp/str.h>
-#include <data/format.h>
+#include "data/format.h"
+#include "libpspp/legacy-encoding.h"
+#include "libpspp/str.h"
 
-enum fmt_type;
 union value;
 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);
+
+char *data_in (struct substring input, const char *input_encoding,
+               enum fmt_type, 
+               union value *output, int width, const char *output_encoding);
+
+bool data_in_msg (struct substring input, const char *input_encoding,
+                  enum fmt_type,
+                  union value *output, int width, const char *output_encoding);
+
+void data_in_imply_decimals (struct substring input, const char *encoding,
+                             enum fmt_type format, int d, union value *output);
 
 #endif /* data/data-in.h */
index beba83d4fba60602d270a0c91bb7ff3c226acf5c..d025ff6a3a35b4a493b7f6b72f0d3ed61ff461e1 100644 (file)
@@ -233,7 +233,7 @@ fh_create_file (const char *id, const char *file_name,
   char *handle_name;
   struct file_handle *handle;
 
-  handle_name = id != NULL ? xstrdup (id) : xasprintf ("\"%s\"", file_name);
+  handle_name = id != NULL ? xstrdup (id) : xasprintf ("`%s'", file_name);
   handle = create_handle (id, handle_name, FH_REF_FILE);
   handle->file_name = xstrdup (file_name);
   handle->mode = properties->mode;
index 3907016cf4dac66ba021694b175e96ef67b2761a..a78ea91c57fe38df914b608ee28e67c6aafa5a67 100644 (file)
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 
-
+struct fmt_settings
+  {
+    struct fmt_number_style styles[FMT_NUMBER_OF_FORMATS];
+  };
 
 bool is_fmt_type (enum fmt_type);
 
@@ -45,35 +48,111 @@ static bool valid_width (enum fmt_type, int width, bool for_input);
 
 static int max_digits_for_bytes (int bytes);
 
-void fmt_number_style_init (struct fmt_number_style *style);
+static void fmt_number_style_init (struct fmt_number_style *);
+static void fmt_number_style_clone (struct fmt_number_style *,
+                                    const struct fmt_number_style *);
+static void fmt_number_style_destroy (struct fmt_number_style *);
 
+/* Creates and returns a new struct fmt_settings with default format styles. */
+struct fmt_settings *
+fmt_settings_create (void)
+{
+  struct fmt_settings *settings;
+  int t;
+
+  settings = xzalloc (sizeof *settings);
+  for (t = 0 ; t < FMT_NUMBER_OF_FORMATS ; ++t )
+    fmt_number_style_init (&settings->styles[t]);
+  fmt_settings_set_decimal (settings, '.');
 
-/* Initialize the format module. */
-struct fmt_number_style *
-fmt_create (void)
+  return settings;
+}
+
+/* Destroys SETTINGS. */
+void
+fmt_settings_destroy (struct fmt_settings *settings)
 {
-  struct fmt_number_style *styles =
-    xcalloc (FMT_NUMBER_OF_FORMATS, sizeof (*styles));
+  if (settings != NULL)
+    {
+      int t;
+
+      for (t = 0 ; t < FMT_NUMBER_OF_FORMATS ; ++t )
+        fmt_number_style_destroy (&settings->styles[t]);
 
+      free (settings->styles);
+    }
+}
+
+/* Returns a copy of SETTINGS. */
+struct fmt_settings *
+fmt_settings_clone (const struct fmt_settings *old)
+{
+  struct fmt_settings *new;
   int t;
+
+  new = xmalloc (sizeof *new);
   for (t = 0 ; t < FMT_NUMBER_OF_FORMATS ; ++t )
-    fmt_number_style_init (&styles[t]);
+    fmt_number_style_clone (&new->styles[t], &old->styles[t]);
+
+  return new;
+}
 
-  fmt_set_decimal (styles, '.');
+/* Returns the number formatting style associated with the given
+   format TYPE. */
+const struct fmt_number_style *
+fmt_settings_get_style (const struct fmt_settings *settings,
+                        enum fmt_type type)
+{
+  assert (is_fmt_type (type));
+  return &settings->styles[type];
+}
 
-  return styles;
+void
+fmt_settings_set_style (struct fmt_settings *settings, enum fmt_type type,
+                        const struct fmt_number_style *style)
+{
+  fmt_check_style (style);
+  fmt_number_style_destroy (&settings->styles[type]);
+  fmt_number_style_clone (&settings->styles[type], style);
 }
 
+/* Sets the number style for TYPE to have the given standard
+   PREFIX and SUFFIX, "-" as prefix suffix, an empty negative
+   suffix, DECIMAL as the decimal point character, and GROUPING
+   as the grouping character. */
+static void
+set_style (struct fmt_settings *settings, enum fmt_type type,
+           const char *prefix, const char *suffix,
+           char decimal, char grouping)
+{
+  struct fmt_number_style *style;
+
+  assert (is_fmt_type (type));
 
-/* Deinitialize the format module. */
+  style = &settings->styles[type];
+
+  fmt_number_style_destroy (style);
+
+  ss_alloc_substring (&style->neg_prefix, ss_cstr ("-"));
+  ss_alloc_substring (&style->prefix, ss_cstr (prefix));
+  ss_alloc_substring (&style->suffix, ss_cstr (suffix));
+  style->decimal = decimal;
+  style->grouping = grouping;
+}
+
+/* Sets the decimal point character for SETTINGS to DECIMAL. */
 void
-fmt_done (struct fmt_number_style *styles)
+fmt_settings_set_decimal (struct fmt_settings *settings, char decimal)
 {
-  int t;
-  for (t = 0 ; t < FMT_NUMBER_OF_FORMATS ; ++t )
-    fmt_number_style_destroy (&styles[t]);
+  int grouping = decimal == '.' ? ',' : '.';
+  assert (decimal == '.' || decimal == ',');
 
-  free (styles);
+  set_style (settings, FMT_F, "", "", decimal, 0);
+  set_style (settings, FMT_E, "", "", decimal, 0);
+  set_style (settings, FMT_COMMA, "", "", decimal, grouping);
+  set_style (settings, FMT_DOT, "", "", grouping, decimal);
+  set_style (settings, FMT_DOLLAR, "$", "", decimal, grouping);
+  set_style (settings, FMT_PCT, "", "%", decimal, 0);
 }
 
 /* Returns an input format specification with type TYPE, width W,
@@ -857,9 +936,7 @@ max_digits_for_bytes (int bytes)
   return map[bytes - 1];
 }
 \f
-
-
-void
+static void
 fmt_number_style_init (struct fmt_number_style *style)
 {
   style->neg_prefix = ss_empty ();
@@ -870,9 +947,20 @@ fmt_number_style_init (struct fmt_number_style *style)
   style->grouping = 0;
 }
 
+static void
+fmt_number_style_clone (struct fmt_number_style *new,
+                        const struct fmt_number_style *old)
+{
+  ss_alloc_substring (&new->neg_prefix, old->neg_prefix);
+  ss_alloc_substring (&new->prefix, old->prefix);
+  ss_alloc_substring (&new->suffix, old->suffix);
+  ss_alloc_substring (&new->neg_suffix, old->neg_suffix);
+  new->decimal = old->decimal;
+  new->grouping = old->grouping;
+}
 
 /* Destroys a struct fmt_number_style. */
-void
+static void
 fmt_number_style_destroy (struct fmt_number_style *style)
 {
   if (style != NULL)
@@ -884,16 +972,6 @@ fmt_number_style_destroy (struct fmt_number_style *style)
     }
 }
 
-/* Returns the number formatting style associated with the given
-   format TYPE. */
-const struct fmt_number_style *
-fmt_get_style (const struct fmt_number_style *styles, enum fmt_type type)
-{
-  assert (is_fmt_type (type));
-  return &styles[type];
-}
-
-
 /* Checks that style is STYLE sane */
 void
 fmt_check_style (const struct fmt_number_style *style)
@@ -925,46 +1003,6 @@ fmt_neg_affix_width (const struct fmt_number_style *style)
   return ss_length (style->neg_prefix) + ss_length (style->neg_suffix);
 }
 
-
-/* Sets the number style for TYPE to have the given standard
-   PREFIX and SUFFIX, "-" as prefix suffix, an empty negative
-   suffix, DECIMAL as the decimal point character, and GROUPING
-   as the grouping character. */
-static void
-set_style (struct fmt_number_style *styles, enum fmt_type type,
-           const char *prefix, const char *suffix,
-           char decimal, char grouping)
-{
-  struct fmt_number_style *style;
-
-  assert (is_fmt_type (type));
-
-  style = &styles[type] ;
-
-  fmt_number_style_destroy (style);
-
-  ss_alloc_substring (&style->neg_prefix, ss_cstr ("-"));
-  ss_alloc_substring (&style->prefix, ss_cstr (prefix));
-  ss_alloc_substring (&style->suffix, ss_cstr (suffix));
-  style->decimal = decimal;
-  style->grouping = grouping;
-}
-
-/* Sets the decimal point character to DECIMAL. */
-void
-fmt_set_decimal (struct fmt_number_style *styles, char decimal)
-{
-  int grouping = decimal == '.' ? ',' : '.';
-  assert (decimal == '.' || decimal == ',');
-
-  set_style (styles, FMT_F, "", "", decimal, 0);
-  set_style (styles, FMT_E, "", "", decimal, 0);
-  set_style (styles, FMT_COMMA, "", "", decimal, grouping);
-  set_style (styles, FMT_DOT, "", "", grouping, decimal);
-  set_style (styles, FMT_DOLLAR, "$", "", decimal, grouping);
-  set_style (styles, FMT_PCT, "", "%", decimal, 0);
-}
-\f
 /* Returns the struct fmt_desc for the given format TYPE. */
 static const struct fmt_desc *
 get_fmt_desc (enum fmt_type type)
index 049ffc6fdc9f7d903af41dad566521f24d287d41..36726542de9e40f5a65dbd131afb2187f527d0a8 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2006, 2010 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
@@ -72,25 +72,6 @@ struct fmt_spec
 /* Maximum width of any numeric format. */
 #define FMT_MAX_NUMERIC_WIDTH 40
 
-/* A numeric output style. */
-struct fmt_number_style
-  {
-    struct substring neg_prefix;      /* Negative prefix. */
-    struct substring prefix;          /* Prefix. */
-    struct substring suffix;          /* Suffix. */
-    struct substring neg_suffix;      /* Negative suffix. */
-    char decimal;                     /* Decimal point: '.' or ','. */
-    char grouping;                    /* Grouping character: ',', '.', or 0. */
-  };
-
-
-extern struct fmt_number_style *the_styles ;
-
-
-/* Initialization. */
-struct fmt_number_style * fmt_create (void);
-void fmt_done (struct fmt_number_style *);
-
 /* Constructing formats. */
 struct fmt_spec fmt_for_input (enum fmt_type, int w, int d) PURE_FUNCTION;
 struct fmt_spec fmt_for_output (enum fmt_type, int w, int d) PURE_FUNCTION;
@@ -115,6 +96,8 @@ void fmt_fix_input (struct fmt_spec *);
 void fmt_fix_output (struct fmt_spec *);
 
 /* Format types. */
+bool is_fmt_type (enum fmt_type);
+
 const char *fmt_name (enum fmt_type) PURE_FUNCTION;
 bool fmt_from_name (const char *name, enum fmt_type *);
 
@@ -143,26 +126,41 @@ bool fmt_from_io (int io, enum fmt_type *);
 
 const char *fmt_date_template (enum fmt_type) PURE_FUNCTION;
 \f
+/* Format settings.
+
+   A fmt_settings is really just a collection of one "struct fmt_number_style"
+   for each format type. */
+struct fmt_settings *fmt_settings_create (void);
+void fmt_settings_destroy (struct fmt_settings *);
+struct fmt_settings *fmt_settings_clone (const struct fmt_settings *);
+
+void fmt_settings_set_decimal (struct fmt_settings *, char);
+
+const struct fmt_number_style *fmt_settings_get_style (
+  const struct fmt_settings *, enum fmt_type);
+void fmt_settings_set_style (struct fmt_settings *, enum fmt_type,
+                             const struct fmt_number_style *);
+\f
+/* A numeric output style. */
+struct fmt_number_style
+  {
+    struct substring neg_prefix;      /* Negative prefix. */
+    struct substring prefix;          /* Prefix. */
+    struct substring suffix;          /* Suffix. */
+    struct substring neg_suffix;      /* Negative suffix. */
+    char decimal;                     /* Decimal point: '.' or ','. */
+    char grouping;                    /* Grouping character: ',', '.', or 0. */
+  };
+
 /* Maximum length of prefix or suffix string in
    struct fmt_number_style. */
 #define FMT_STYLE_AFFIX_MAX 16
 
-
-struct fmt_number_style *fmt_number_style_create (void);
-void fmt_number_style_destroy (struct fmt_number_style *);
-
 int fmt_affix_width (const struct fmt_number_style *);
 int fmt_neg_affix_width (const struct fmt_number_style *);
 
-bool is_fmt_type (enum fmt_type);
-
-const struct fmt_number_style *fmt_get_style (const struct fmt_number_style *,      enum fmt_type);
-
 void fmt_check_style (const struct fmt_number_style *style);
 
-int fmt_grouping_char (const struct fmt_number_style *, enum fmt_type);
-
-void fmt_set_decimal (struct fmt_number_style *, char);
 
 extern const struct fmt_spec F_8_0 ;
 
index 74911c469ea902a916f8b87ab2fd29a20dc425a6..26b90ee8916377d500512b1145422bff1fd9a1d1 100644 (file)
@@ -181,9 +181,9 @@ struct gnumeric_reader
 
 static void process_node (struct gnumeric_reader *r);
 
-#define _xml(X) (const xmlChar *)(X)
+#define _xml(X) (CHAR_CAST (const xmlChar *, X))
 
-#define _xmlchar_to_int(X) atoi((const char *)X)
+#define _xmlchar_to_int(X) (atoi(CHAR_CAST (const char *, X)))
 
 static void
 gnm_file_casereader_destroy (struct casereader *reader UNUSED, void *r_)
@@ -328,7 +328,7 @@ convert_xml_string_to_value (struct ccase *c, const struct variable *var,
     value_copy_str_rpad (v, var_get_width (var), xv, ' ');
   else
     {
-      const char *text = (const char *) xv;
+      const char *text = CHAR_CAST (const char *, xv);
       char *endptr;
 
       errno = 0;
@@ -361,7 +361,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;
@@ -381,7 +381,7 @@ gnumeric_open_reader (struct gnumeric_read_info *gri, struct dictionary **dict)
                               &r->start_col, &r->start_row,
                               &r->stop_col, &r->stop_row))
        {
-         msg (SE, _("Invalid cell range \"%s\""),
+         msg (SE, _("Invalid cell range `%s'"),
               gri->cell_range);
          goto error;
        }
@@ -459,7 +459,7 @@ gnumeric_open_reader (struct gnumeric_read_info *gri, struct dictionary **dict)
       if ( r->node_type == XML_READER_TYPE_TEXT )
        {
          xmlChar *value = xmlTextReaderValue (r->xtr);
-         const char *text  = (const char *) value;
+         const char *text  = CHAR_CAST (const char *, value);
 
          if ( r->row < r->start_row)
            {
@@ -499,7 +499,7 @@ gnumeric_open_reader (struct gnumeric_read_info *gri, struct dictionary **dict)
   /* Create the dictionary and populate it */
   *dict = r->dict = dict_create ();
 
-  dict_set_encoding (r->dict, (const char *) xmlTextReaderConstEncoding (r->xtr));
+  dict_set_encoding (r->dict, CHAR_CAST (const char *, xmlTextReaderConstEncoding (r->xtr)));
 
   for (i = 0 ; i < n_var_specs ; ++i )
     {
@@ -525,7 +525,7 @@ gnumeric_open_reader (struct gnumeric_read_info *gri, struct dictionary **dict)
 
   if ( n_var_specs ==  0 )
     {
-      msg (MW, _("Selected sheet or range of spreadsheet \"%s\" is empty."),
+      msg (MW, _("Selected sheet or range of spreadsheet `%s' is empty."),
            gri->file_name);
       goto error;
     }
index c148a7f09a0792bfe9c964ceb57fea3ffc85d43f..adf177bee71c7db83104a6789ee1b0f5053a0cba 100644 (file)
@@ -105,6 +105,8 @@ error (struct pfm_reader *r, const char *msg, ...)
   m.severity = MSG_S_ERROR;
   m.where.file_name = NULL;
   m.where.line_number = 0;
+  m.where.first_column = 0;
+  m.where.last_column = 0;
   m.text = ds_cstr (&text);
 
   msg_emit (&m);
@@ -134,6 +136,8 @@ warning (struct pfm_reader *r, const char *msg, ...)
   m.severity = MSG_S_WARNING;
   m.where.file_name = NULL;
   m.where.line_number = 0;
+  m.where.first_column = 0;
+  m.where.last_column = 0;
   m.text = ds_cstr (&text);
 
   msg_emit (&m);
@@ -152,7 +156,7 @@ close_reader (struct pfm_reader *r)
     {
       if (fn_close (fh_get_file_name (r->fh), r->file) == EOF)
         {
-          msg (ME, _("Error closing portable file \"%s\": %s."),
+          msg (ME, _("Error closing portable file `%s': %s."),
                fh_get_file_name (r->fh), strerror (errno));
           r->ok = false;
         }
@@ -271,7 +275,7 @@ pfm_open_reader (struct file_handle *fh, struct dictionary **dict,
   r->file = fn_open (fh_get_file_name (r->fh), "rb");
   if (r->file == NULL)
     {
-      msg (ME, _("An error occurred while opening \"%s\" for reading "
+      msg (ME, _("An error occurred while opening `%s' for reading "
                  "as a portable file: %s."),
            fh_get_file_name (r->fh), strerror (errno));
       goto error;
index 9889cfd95378ed7593c1cfbb2ba9ad187427d06f..c5f758a1e5db1a1a16545fdd7cd35cf86e2f322c 100644 (file)
@@ -157,7 +157,7 @@ pfm_open_writer (struct file_handle *fh, struct dictionary *dict,
                               &w->file, NULL);
   if (w->rf == NULL)
     {
-      msg (ME, _("Error opening \"%s\" for writing as a portable file: %s."),
+      msg (ME, _("Error opening `%s' for writing as a portable file: %s."),
            fh_get_file_name (fh), strerror (errno));
       goto error;
     }
@@ -502,7 +502,7 @@ close_writer (struct pfm_writer *w)
         ok = false;
 
       if (!ok)
-        msg (ME, _("An I/O error occurred writing portable file \"%s\"."),
+        msg (ME, _("An I/O error occurred writing portable file `%s'."),
              fh_get_file_name (w->fh));
 
       if (ok ? !replace_file_commit (w->rf) : !replace_file_abort (w->rf))
index 68ea7e5672cea1c483fb356e75b5834852642c1d..76b4674dc9d914cabaadce71aef6512be050e683 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+   Copyright (C) 2008, 2009, 2010 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
@@ -286,8 +286,7 @@ psql_open_reader (struct psql_read_info *info, struct dictionary **dict)
        }
     }
 
-  r->postgres_epoch =
-    calendar_gregorian_to_offset (2000, 1, 1, NULL, NULL);
+  r->postgres_epoch = calendar_gregorian_to_offset (2000, 1, 1, NULL);
 
 
   /* Create the dictionary and populate it */
@@ -838,7 +837,7 @@ set_value (struct psql_reader *r)
            case VARCHAROID:
            case BPCHAROID:
            case BYTEAOID:
-             memcpy (value_str_rw (val, var_width), (char *) vptr,
+             memcpy (value_str_rw (val, var_width), vptr,
                       MIN (length, var_width));
              break;
 
index 10b20f8a352b9b83eec4307c41696f1a180a56bf..13512cc03242f7b7d7d78e6ebf2d0369bb9f13c3 100644 (file)
    along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <config.h>
-#include "settings.h"
+
+#include "data/settings.h"
+
 #include <assert.h>
 #include <stdlib.h>
 #include <time.h>
-#include "format.h"
-#include "value.h"
-#include "xalloc.h"
-#include <data/case.h>
-#include <libpspp/i18n.h>
-#include <libpspp/integer-format.h>
-#include <libpspp/message.h>
 
-#include "error.h"
-#include "minmax.h"
+#include "data/case.h"
+#include "data/format.h"
+#include "data/value.h"
+#include "libpspp/i18n.h"
+#include "libpspp/integer-format.h"
+#include "libpspp/message.h"
+
+#include "gl/error.h"
+#include "gl/minmax.h"
+#include "gl/xalloc.h"
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 
-static int global_algorithm = ENHANCED;
-
 struct settings
 {
   /* Integer format used for IB and PIB input. */
@@ -49,8 +50,8 @@ struct settings
   /* Format of reals in output (SET WRB). */
   enum float_format output_float_format;
 
-  int *viewlength;
-  int *viewwidth;
+  int viewlength;
+  int viewwidth;
   bool safer_mode;
   bool include;
   int epoch;
@@ -70,96 +71,109 @@ struct settings
   bool testing_mode;
 
   int cmd_algorithm;
-  int *algorithm;
+  int global_algorithm;
   int syntax;
 
-  struct fmt_number_style *styles;
+  struct fmt_settings *styles;
 
   enum settings_output_devices output_routing[SETTINGS_N_OUTPUT_TYPES];
 };
 
 static struct settings the_settings = {
-    /* input_integer_format */
-  INTEGER_NATIVE,
-    /* input_float_format */
-  FLOAT_NATIVE_DOUBLE,
-    /* output_integer_format */
-  INTEGER_NATIVE,
-    /* output_float_format */
-  FLOAT_NATIVE_DOUBLE,
-    /* viewlength */
-  NULL,
-    /* viewwidth */
-  NULL,
-    /* safer_mode */
-  false,
-    /* include */
-  true,
-    /* epoch */
-  -1,
-    /* route_errors_to_terminal */
-  true,
-    /* route_errors_to_listing */
-  true,
-    /* scompress */
-  true,
-    /* undefined */
-  true,
-    /* blanks */
-  SYSMIS,
-    /* max_messages */
+  INTEGER_NATIVE,               /* input_integer_format */
+  FLOAT_NATIVE_DOUBLE,          /* input_float_format */
+  INTEGER_NATIVE,               /* output_integer_format */
+  FLOAT_NATIVE_DOUBLE,          /* output_float_format */
+  24,                           /* viewlength */
+  79,                           /* viewwidth */
+  false,                        /* safer_mode */
+  true,                         /* include */
+  -1,                           /* epoch */
+  true,                         /* route_errors_to_terminal */
+  true,                         /* route_errors_to_listing */
+  true,                         /* scompress */
+  true,                         /* undefined */
+  SYSMIS,                       /* blanks */
+
+  /* max_messages */
   {
     100,                        /* MSG_S_ERROR */
     100,                        /* MSG_S_WARNING */
     100                         /* MSG_S_NOTE */
   },
-    /* printback */
-  true,
-    /* mprint */
-  true,
-    /* mxloops */
-  1,
-    /* nulline */
-  true,
-    /* endcmd */
-  '.',
-    /* workspace */
-  64L * 1024 * 1024,
-    /* default_format */
-  {FMT_F, 8, 2},
-    /* testing_mode */
-  false,
-    /* cmd_algorithm */
-  ENHANCED,
-    /* algorithm */
-  &global_algorithm,
-    /* syntax */
-  ENHANCED,
-    /* styles */
-  NULL,
-    /* output devices */
+
+  true,                         /* printback */
+  true,                         /* mprint */
+  1,                            /* mxloops */
+  true,                         /* nulline */
+  '.',                          /* endcmd */
+  64L * 1024 * 1024,            /* workspace */
+  {FMT_F, 8, 2},                /* default_format */
+  false,                        /* testing_mode */
+  ENHANCED,                     /* cmd_algorithm */
+  ENHANCED,                     /* global_algorithm */
+  ENHANCED,                     /* syntax */
+  NULL,                         /* styles */
+
+  /* output_routing */
   {SETTINGS_DEVICE_LISTING | SETTINGS_DEVICE_TERMINAL,
    SETTINGS_DEVICE_LISTING | SETTINGS_DEVICE_TERMINAL,
    0,
    SETTINGS_DEVICE_LISTING | SETTINGS_DEVICE_TERMINAL}
 };
 
-static void init_viewport ( int *, int *);
-
+/* Initializes the settings module. */
 void
-settings_init (int *width, int *length)
+settings_init (void)
 {
-  init_viewport (width, length);
   settings_set_epoch (-1);
-  the_settings.styles = fmt_create ();
+  the_settings.styles = fmt_settings_create ();
 
   settings_set_decimal_char (get_system_decimal ());
 }
 
+/* Cleans up the settings module. */
 void
 settings_done (void)
 {
-  fmt_done (the_settings.styles);
+  settings_destroy (&the_settings);
+}
+
+static void
+settings_copy (struct settings *dst, const struct settings *src)
+{
+  *dst = *src;
+  dst->styles = fmt_settings_clone (src->styles);
+}
+
+/* Returns a copy of the current settings. */
+struct settings *
+settings_get (void)
+{
+  struct settings *s = xmalloc (sizeof *s);
+  settings_copy (s, &the_settings);
+  return s;
+}
+
+/* Replaces the current settings by those in S.  The caller retains ownership
+   of S. */
+void
+settings_set (const struct settings *s)
+{
+  settings_destroy (&the_settings);
+  settings_copy (&the_settings, s);
+}
+
+/* Destroys S. */
+void
+settings_destroy (struct settings *s)
+{
+  if (s != NULL)
+    {
+      fmt_settings_destroy (s->styles);
+      if (s != &the_settings)
+        free (s);
+    }
 }
 
 /* Returns the floating-point format used for RB and RBHEX
@@ -226,35 +240,28 @@ settings_set_output_float_format ( enum float_format float_format)
 int
 settings_get_viewlength (void)
 {
-  return *the_settings.viewlength;
+  return the_settings.viewlength;
 }
 
 /* Sets the view length. */
 void
 settings_set_viewlength ( int viewlength_)
 {
-  *the_settings.viewlength = viewlength_;
+  the_settings.viewlength = viewlength_;
 }
 
 /* Screen width. */
 int
 settings_get_viewwidth(void)
 {
-  return *the_settings.viewwidth;
+  return the_settings.viewwidth;
 }
 
 /* Sets the screen width. */
 void
 settings_set_viewwidth ( int viewwidth_)
 {
-  *the_settings.viewwidth = viewwidth_;
-}
-
-static void
-init_viewport ( int  *width, int *length)
-{
-  the_settings.viewwidth = width;
-  the_settings.viewlength = length;
+  the_settings.viewwidth = viewwidth_;
 }
 
 /* Whether PSPP can erase and overwrite files. */
@@ -511,14 +518,14 @@ settings_set_testing_mode ( bool testing_mode)
 enum behavior_mode
 settings_get_algorithm (void)
 {
-  return *the_settings.algorithm;
+  return the_settings.cmd_algorithm;
 }
 
 /* Set the algorithm option globally. */
 void
 settings_set_algorithm (enum behavior_mode mode)
 {
-  global_algorithm = mode;
+  the_settings.global_algorithm = the_settings.cmd_algorithm = mode;
 }
 
 /* Set the algorithm option for this command only */
@@ -526,14 +533,13 @@ void
 settings_set_cmd_algorithm ( enum behavior_mode mode)
 {
   the_settings.cmd_algorithm = mode;
-  the_settings.algorithm = &the_settings.cmd_algorithm;
 }
 
 /* Unset the algorithm option for this command */
 void
 unset_cmd_algorithm (void)
 {
-  the_settings.algorithm = &global_algorithm;
+  the_settings.cmd_algorithm = the_settings.global_algorithm;
 }
 
 /* Get the current syntax setting */
@@ -589,41 +595,46 @@ find_cc_separators (const char *cc_string, struct fmt_number_style *cc)
   return true;
 }
 
-/* Extracts a token from IN into a newly allocated AFFIX.  Tokens
-   are delimited by GROUPING.  The token is truncated to at most
-   FMT_STYLE_AFFIX_MAX characters.  Returns the first character
-   following the token. */
+/* Extracts a token from IN into AFFIX, using BUFFER for storage.  BUFFER must
+   have at least FMT_STYLE_AFFIX_MAX + 1 bytes of space.  Tokens are delimited
+   by GROUPING.  The token is truncated to at most FMT_STYLE_AFFIX_MAX bytes,
+   followed by a null terminator.  Returns the first character following the
+   token. */
 static const char *
-extract_cc_token (const char *in, int grouping, struct substring *affix)
+extract_cc_token (const char *in, int grouping, struct substring *affix,
+                  char buffer[FMT_STYLE_AFFIX_MAX + 1])
 {
   size_t ofs = 0;
-  ss_alloc_uninit (affix, FMT_STYLE_AFFIX_MAX);
+
   for (; *in != '\0' && *in != grouping; in++)
     {
       if (*in == '\'' && in[1] == grouping)
         in++;
       if (ofs < FMT_STYLE_AFFIX_MAX)
-        ss_data (*affix)[ofs++] = *in;
+        buffer[ofs++] = *in;
     }
-  affix->length = ofs;
+  *affix = ss_buffer (buffer, ofs);
 
   if (*in == grouping)
     in++;
   return in;
 }
 
-
 /* Sets custom currency specifier CC having name CC_NAME ('A' through
    'E') to correspond to the settings in CC_STRING. */
 bool
 settings_set_cc (const char *cc_string, enum fmt_type type)
 {
-  struct fmt_number_style *cc = &the_settings.styles[type];
+  char a[FMT_STYLE_AFFIX_MAX + 1];
+  char b[FMT_STYLE_AFFIX_MAX + 1];
+  char c[FMT_STYLE_AFFIX_MAX + 1];
+  char d[FMT_STYLE_AFFIX_MAX + 1];
+  struct fmt_number_style cc;
 
   assert (fmt_get_category (type) == FMT_CAT_CUSTOM);
 
   /* Determine separators. */
-  if (!find_cc_separators (cc_string, cc))
+  if (!find_cc_separators (cc_string, &cc))
     {
       msg (SE, _("%s: Custom currency string `%s' does not contain "
                  "exactly three periods or commas (or it contains both)."),
@@ -631,12 +642,12 @@ settings_set_cc (const char *cc_string, enum fmt_type type)
       return false;
     }
 
-  cc_string = extract_cc_token (cc_string, cc->grouping, &cc->neg_prefix);
-  cc_string = extract_cc_token (cc_string, cc->grouping, &cc->prefix);
-  cc_string = extract_cc_token (cc_string, cc->grouping, &cc->suffix);
-  cc_string = extract_cc_token (cc_string, cc->grouping, &cc->neg_suffix);
+  cc_string = extract_cc_token (cc_string, cc.grouping, &cc.neg_prefix, a);
+  cc_string = extract_cc_token (cc_string, cc.grouping, &cc.prefix, b);
+  cc_string = extract_cc_token (cc_string, cc.grouping, &cc.suffix, c);
+  cc_string = extract_cc_token (cc_string, cc.grouping, &cc.neg_suffix, d);
 
-  fmt_check_style (cc);
+  fmt_settings_set_style (the_settings.styles, type, &cc);
 
   return true;
 }
@@ -645,41 +656,37 @@ settings_set_cc (const char *cc_string, enum fmt_type type)
 int
 settings_get_decimal_char (enum fmt_type type)
 {
-  return fmt_get_style (the_settings.styles, type)->decimal;
+  return fmt_settings_get_style (the_settings.styles, type)->decimal;
 }
 
 void
 settings_set_decimal_char (char decimal)
 {
-  fmt_set_decimal (the_settings.styles, decimal);
+  fmt_settings_set_decimal (the_settings.styles, decimal);
 }
 
-
-
 /* Returns the number formatting style associated with the given
    format TYPE. */
 const struct fmt_number_style *
 settings_get_style (enum fmt_type type)
 {
   assert (is_fmt_type (type));
-  return &the_settings.styles[type];
+  return fmt_settings_get_style (the_settings.styles, type);
 }
 
-
 /* Returns a string of the form "$#,###.##" according to FMT,
    which must be of type FMT_DOLLAR.  The caller must free the
    string. */
 char *
 settings_dollar_template (const struct fmt_spec *fmt)
 {
-  const struct fmt_number_style *styles = the_settings.styles;
   struct string str = DS_EMPTY_INITIALIZER;
   int c;
   const struct fmt_number_style *fns ;
 
   assert (fmt->type == FMT_DOLLAR);
 
-  fns = fmt_get_style (styles, fmt->type);
+  fns = fmt_settings_get_style (the_settings.styles, fmt->type);
 
   ds_put_char (&str, '$');
   for (c = MAX (fmt->w - fmt->d - 1, 0); c > 0; )
index 7dcb0e34a479c2d5bf18cd431cd810e626decc6f..e68325f7f2bca21aed2ef100420a170b15c2522a 100644 (file)
 struct caseproto;
 struct settings;
 
-void settings_init (int *, int *);
+void settings_init (void);
 void settings_done (void);
 
+struct settings *settings_get (void);
+void settings_set (const struct settings *);
+void settings_destroy (struct settings *);
+
 enum float_format settings_get_input_float_format (void);
 void settings_set_input_float_format ( enum float_format);
 
index b92f42a96c6e159e13bb8c2f0d8a3cf419798923..c9c843dfaf4dd83cee88f7dd510284fa37e516a7 100644 (file)
@@ -293,7 +293,7 @@ sfm_open_reader (struct file_handle *fh, struct dictionary **dict,
   r->file = fn_open (fh_get_file_name (fh), "rb");
   if (r->file == NULL)
     {
-      msg (ME, _("Error opening \"%s\" for reading as a system file: %s."),
+      msg (ME, _("Error opening `%s' for reading as a system file: %s."),
            fh_get_file_name (r->fh), strerror (errno));
       goto error;
     }
@@ -424,7 +424,7 @@ close_reader (struct sfm_reader *r)
     {
       if (fn_close (fh_get_file_name (r->fh), r->file) == EOF)
         {
-          msg (ME, _("Error closing system file \"%s\": %s."),
+          msg (ME, _("Error closing system file `%s': %s."),
                fh_get_file_name (r->fh), strerror (errno));
           r->error = true;
         }
@@ -595,7 +595,7 @@ read_variable_record (struct sfm_reader *r, struct dictionary *dict,
 
   /* Check variable name. */
   if (name[0] == '$' || name[0] == '#')
-    sys_error (r, "Variable name begins with invalid character `%c'.",
+    sys_error (r, _("Variable name begins with invalid character `%c'."),
                name[0]);
   if (!var_is_plausible_name (name, false))
     sys_error (r, _("Invalid variable name `%s'."), name);
@@ -1052,8 +1052,8 @@ read_mrsets (struct sfm_reader *r, size_t size, size_t count,
           mrset->type = MRSET_MC;
           if (!text_match (text, ' '))
             {
-              sys_warn (r, _("Missing space following 'C' at offset %zu "
-                             "in MRSETS record"), text_pos (text));
+              sys_warn (r, _("Missing space following `%c' at offset %zu "
+                             "in MRSETS record"), 'C', text_pos (text));
               break;
             }
         }
@@ -1070,8 +1070,8 @@ read_mrsets (struct sfm_reader *r, size_t size, size_t count,
           mrset->cat_source = MRSET_COUNTEDVALUES;
           if (!text_match (text, ' '))
             {
-              sys_warn (r, _("Missing space following 'E' at offset %zu "
-                             "in MRSETS record"), text_pos (text));
+              sys_warn (r, _("Missing space following `%c' at offset %zu "
+                             "in MRSETS record"), 'E',  text_pos (text));
               break;
             }
 
@@ -1079,13 +1079,13 @@ read_mrsets (struct sfm_reader *r, size_t size, size_t count,
           if (!strcmp (number, "11"))
             mrset->label_from_var_label = true;
           else if (strcmp (number, "1"))
-            sys_warn (r, _("Unexpected label source value \"%s\" "
-                           "following 'E' at offset %zu in MRSETS record"),
+            sys_warn (r, _("Unexpected label source value `%s' "
+                           "following `E' at offset %zu in MRSETS record"),
                       number, text_pos (text));
         }
       else
         {
-          sys_warn (r, _("Missing 'C', 'D', or 'E' at offset %zu "
+          sys_warn (r, _("Missing `C', `D', or `E' at offset %zu "
                          "in MRSETS record."),
                     text_pos (text));
           break;
@@ -1502,7 +1502,7 @@ read_value_labels (struct sfm_reader *r,
                 sys_warn (r, _("Duplicate value label for %g on %s."),
                           label->value.f, var_get_name (v));
               else
-                sys_warn (r, _("Duplicate value label for \"%.*s\" on %s."),
+                sys_warn (r, _("Duplicate value label for `%.*s' on %s."),
                           max_width, value_str (&label->value, max_width),
                           var_get_name (v));
             }
@@ -1683,7 +1683,7 @@ read_long_string_value_labels (struct sfm_reader *r,
             }
 
           if (!skip && !var_add_value_label (v, &value, label))
-            sys_warn (r, _("Duplicate value label for \"%.*s\" on %s."),
+            sys_warn (r, _("Duplicate value label for `%.*s' on %s."),
                       width, value_str (&value, width), var_get_name (v));
         }
     }
@@ -2290,7 +2290,7 @@ sys_msg (struct sfm_reader *r, int class, const char *format, va_list args)
   struct string text;
 
   ds_init_empty (&text);
-  ds_put_format (&text, "\"%s\" near offset 0x%llx: ",
+  ds_put_format (&text, "`%s' near offset 0x%llx: ",
                  fh_get_file_name (r->fh), (long long int) ftello (r->file));
   ds_put_vformat (&text, format, args);
 
@@ -2298,6 +2298,8 @@ sys_msg (struct sfm_reader *r, int class, const char *format, va_list args)
   m.severity = msg_class_to_severity (class);
   m.where.file_name = NULL;
   m.where.line_number = 0;
+  m.where.first_column = 0;
+  m.where.last_column = 0;
   m.text = ds_cstr (&text);
 
   msg_emit (&m);
index ac5f4c903ed0266a4e50bc87a43c9b29e177cf9e..f31bd99a883e395304f1819f61e388871105f63f 100644 (file)
@@ -215,7 +215,7 @@ sfm_open_writer (struct file_handle *fh, struct dictionary *d,
                               &w->file, NULL);
   if (w->rf == NULL)
     {
-      msg (ME, _("Error opening \"%s\" for writing as a system file: %s."),
+      msg (ME, _("Error opening `%s' for writing as a system file: %s."),
            fh_get_file_name (fh), strerror (errno));
       goto error;
     }
@@ -982,7 +982,7 @@ close_writer (struct sfm_writer *w)
         ok = false;
 
       if (!ok)
-        msg (ME, _("An I/O error occurred writing system file \"%s\"."),
+        msg (ME, _("An I/O error occurred writing system file `%s'."),
              fh_get_file_name (w->fh));
 
       if (ok ? !replace_file_commit (w->rf) : !replace_file_abort (w->rf))
index f703722c3f39ec1e02a0691d2b96609fbced4123..707b2813eccb172bdbee017ff92f2bea009ac8f2 100644 (file)
@@ -506,8 +506,8 @@ alloc_value_labels (struct variable *v)
 }
 
 /* Attempts to add a value label with the given VALUE and LABEL
-   to V.  Returns true if successful, false if VALUE has an
-   existing label or if V is a long string variable. */
+   to V.  Returns true if successful, false otherwise (probably
+   due to an existing label). */
 bool
 var_add_value_label (struct variable *v,
                      const union value *value, const char *label)
@@ -518,7 +518,7 @@ var_add_value_label (struct variable *v,
 
 /* Adds or replaces a value label with the given VALUE and LABEL
    to V.
-   Has no effect if V is a long string variable. */
+*/
 void
 var_replace_value_label (struct variable *v,
                          const union value *value, const char *label)
index 448fae7ea803463f11a54edbec50a23c816875a4..9f90db93a941af0762b20e4f02b3f6e4758d8732 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2009 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2009, 2010 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
 
 #include <config.h>
 
-#include <language/command.h>
+#include "language/command.h"
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <ctype.h>
 #include <errno.h>
-#include <unistd.h>
-#if HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-#if HAVE_READLINE
-#include <readline/readline.h>
-#endif
-
-#include <data/casereader.h>
-#include <data/dictionary.h>
-#include <data/procedure.h>
-#include <data/settings.h>
-#include <data/variable.h>
-#include <language/lexer/lexer.h>
-#include <language/prompt.h>
-#include <libpspp/assertion.h>
-#include <libpspp/compiler.h>
-#include <libpspp/message.h>
-#include <libpspp/message.h>
-#include <libpspp/str.h>
-#include <libpspp/getl.h>
-#include <output/text-item.h>
+
+#include "data/casereader.h"
+#include "data/dictionary.h"
+#include "data/procedure.h"
+#include "data/settings.h"
+#include "data/variable.h"
+#include "language/lexer/lexer.h"
+#include "language/prompt.h"
+#include "libpspp/assertion.h"
+#include "libpspp/compiler.h"
+#include "libpspp/message.h"
+#include "libpspp/str.h"
+#include "libpspp/getl.h"
+#include "output/text-item.h"
 
 #include "xalloc.h"
 #include "xmalloca.h"
@@ -785,124 +777,6 @@ cmd_erase (struct lexer *lexer, struct dataset *ds UNUSED)
   return CMD_SUCCESS;
 }
 
-#if HAVE_FORK && HAVE_EXECL
-/* Spawn an interactive shell process. */
-static bool
-shell (void)
-{
-  int pid;
-
-  pid = fork ();
-  switch (pid)
-    {
-    case 0:
-      {
-       const char *shell_fn;
-       char *shell_process;
-
-       {
-         int i;
-
-         for (i = 3; i < 20; i++)
-           close (i);
-       }
-
-       shell_fn = getenv ("SHELL");
-       if (shell_fn == NULL)
-         shell_fn = "/bin/sh";
-
-       {
-         const char *cp = strrchr (shell_fn, '/');
-         cp = cp ? &cp[1] : shell_fn;
-         shell_process = xmalloca (strlen (cp) + 8);
-         strcpy (shell_process, "-");
-         strcat (shell_process, cp);
-         if (strcmp (cp, "sh"))
-           shell_process[0] = '+';
-       }
-
-       execl (shell_fn, shell_process, NULL);
-
-       _exit (1);
-      }
-
-    case -1:
-      msg (SE, _("Couldn't fork: %s."), strerror (errno));
-      return false;
-
-    default:
-      assert (pid > 0);
-      while (wait (NULL) != pid)
-       ;
-      return true;
-    }
-}
-#else /* !(HAVE_FORK && HAVE_EXECL) */
-/* Don't know how to spawn an interactive shell. */
-static bool
-shell (void)
-{
-  msg (SE, _("Interactive shell not supported on this platform."));
-  return false;
-}
-#endif
-
-/* Executes the specified COMMAND in a subshell.  Returns true if
-   successful, false otherwise. */
-static bool
-run_command (const char *command)
-{
-  if (system (NULL) == 0)
-    {
-      msg (SE, _("Command shell not supported on this platform."));
-      return false;
-    }
-
-  /* Execute the command. */
-  if (system (command) == -1)
-    msg (SE, _("Error executing command: %s."), strerror (errno));
-
-  return true;
-}
-
-/* Parses, performs the HOST command. */
-int
-cmd_host (struct lexer *lexer, struct dataset *ds UNUSED)
-{
-  int look_ahead;
-
-  if (settings_get_safer_mode ())
-    {
-      msg (SE, _("This command not allowed when the SAFER option is set."));
-      return CMD_FAILURE;
-    }
-
-  look_ahead = lex_look_ahead (lexer);
-  if (look_ahead == '.')
-    {
-      lex_get (lexer);
-      return shell () ? CMD_SUCCESS : CMD_FAILURE;
-    }
-  else if (look_ahead == '\'' || look_ahead == '"')
-    {
-      bool ok;
-
-      lex_get (lexer);
-      if (!lex_force_string (lexer))
-        NOT_REACHED ();
-      ok = run_command (ds_cstr (lex_tokstr (lexer)));
-
-      lex_get (lexer);
-      return ok ? lex_end_of_command (lexer) : CMD_FAILURE;
-    }
-  else
-    {
-      bool ok = run_command (lex_rest_of_line (lexer));
-      lex_discard_line (lexer);
-      return ok ? CMD_SUCCESS : CMD_FAILURE;
-    }
-}
-
 /* Parses, performs the NEW FILE command. */
 int
 cmd_new_file (struct lexer *lexer, struct dataset *ds)
index 174b80248e49248960c65515124bad634f0e6e7b..adfaa950e1bec95a07bc9f61c0a9b5361c9dcc6e 100644 (file)
@@ -24,15 +24,17 @@ DEF_CMD (S_ANY, 0, "EXIT", cmd_finish)
 DEF_CMD (S_ANY, 0, "FILE HANDLE", cmd_file_handle)
 DEF_CMD (S_ANY, F_KEEP_FINAL_TOKEN, "FILE LABEL", cmd_file_label)
 DEF_CMD (S_ANY, 0, "FINISH", cmd_finish)
-DEF_CMD (S_ANY, F_KEEP_FINAL_TOKEN, "HOST", cmd_host)
+DEF_CMD (S_ANY, 0, "HOST", cmd_host)
 DEF_CMD (S_ANY, 0, "INCLUDE", cmd_include)
 DEF_CMD (S_ANY, 0, "INSERT", cmd_insert)
 DEF_CMD (S_ANY, 0, "N OF CASES", cmd_n_of_cases)
 DEF_CMD (S_ANY, F_ABBREV, "N", cmd_n_of_cases)
 DEF_CMD (S_ANY, 0, "NEW FILE", cmd_new_file)
 DEF_CMD (S_ANY, 0, "PERMISSIONS", cmd_permissions)
+DEF_CMD (S_ANY, 0, "PRESERVE", cmd_preserve)
 DEF_CMD (S_ANY, F_ABBREV, "Q", cmd_finish)
 DEF_CMD (S_ANY, 0, "QUIT", cmd_finish)
+DEF_CMD (S_ANY, 0, "RESTORE", cmd_restore)
 DEF_CMD (S_ANY, 0, "SET", cmd_set)
 DEF_CMD (S_ANY, 0, "SHOW", cmd_show)
 DEF_CMD (S_ANY, F_KEEP_FINAL_TOKEN, "SUBTITLE", cmd_subtitle)
@@ -170,7 +172,12 @@ UNIMPL_CMD ("CSSELECT", "Select complex samples")
 UNIMPL_CMD ("CSTABULATE", "Tabulate complex samples")
 UNIMPL_CMD ("CTABLES", "Display complex samples")
 UNIMPL_CMD ("CURVEFIT", "Fit curve to line plot")
-UNIMPL_CMD ("DATASET", "Alternate data set")
+UNIMPL_CMD ("DATASET ACTIVATE", "Switch to alternate data set")
+UNIMPL_CMD ("DATASET CLOSE", "Delete alternate data set")
+UNIMPL_CMD ("DATASET COPY", "Duplicate alternate data set")
+UNIMPL_CMD ("DATASET DECLARE", "Start alternate data set")
+UNIMPL_CMD ("DATASET DISPLAY", "List alternate data sets")
+UNIMPL_CMD ("DATASET NAME", "Give the current data set a name")
 UNIMPL_CMD ("DATE", "Create time series data")
 UNIMPL_CMD ("DEFINE", "Syntax macros")
 UNIMPL_CMD ("DETECTANOMALY", "Find unusual cases")
@@ -188,7 +195,6 @@ UNIMPL_CMD ("HILOGLINEAR", "Hierarchial loglinear models")
 UNIMPL_CMD ("HOMALS", "Homogeneity analysis")
 UNIMPL_CMD ("IGRAPH", "Interactive graphs")
 UNIMPL_CMD ("INFO", "Local Documentation")
-UNIMPL_CMD ("INSERT", "Insert file")
 UNIMPL_CMD ("KEYED DATA LIST", "Read nonsequential data")
 UNIMPL_CMD ("KM", "Kaplan-Meier")
 UNIMPL_CMD ("LOGISTIC REGRESSION", "Regression Analysis")
@@ -200,10 +206,10 @@ UNIMPL_CMD ("MATRIX DATA", "Matrix data input")
 UNIMPL_CMD ("MCONVERT", "Convert covariance/correlation matrices")
 UNIMPL_CMD ("MEANS", cmd_means)
 UNIMPL_CMD ("MIXED", "Mixed linear models")
-UNIMPL_CMD ("MODEL CLOSE ", "Close server connection")
+UNIMPL_CMD ("MODEL CLOSE", "Close server connection")
 UNIMPL_CMD ("MODEL HANDLE", "Define server connection")
-UNIMPL_CMD ("MODEL LIST ", "Show existing models")
-UNIMPL_CMD ("MODEL NAME ", "Specify model label")
+UNIMPL_CMD ("MODEL LIST", "Show existing models")
+UNIMPL_CMD ("MODEL NAME", "Specify model label")
 UNIMPL_CMD ("MULTIPLE CORRESPONDENCE", "Multiple correspondence analysis")
 UNIMPL_CMD ("MULT RESPONSE", "Multiple reponse analysis")
 UNIMPL_CMD ("MVA", "Missing value analysis")
@@ -224,7 +230,6 @@ UNIMPL_CMD ("POINT", "Marker in keyed file")
 UNIMPL_CMD ("PPLOT", "Plot time series variables")
 UNIMPL_CMD ("PREDICT", "Specify forecast period")
 UNIMPL_CMD ("PREFSCAL", "Multidimensional unfolding")
-UNIMPL_CMD ("PRESERVE", "Push settings")
 UNIMPL_CMD ("PRINCALS", "PCA by alternating least squares")
 UNIMPL_CMD ("PROBIT", "Probit analysis")
 UNIMPL_CMD ("PROCEDURE OUTPUT", "Specify output file")
@@ -237,7 +242,6 @@ UNIMPL_CMD ("RECORD TYPE", "Defines a type of record within FILE TYPE")
 UNIMPL_CMD ("REFORMAT", "Read obsolete files")
 UNIMPL_CMD ("REPEATING DATA", "Specify multiple cases per input record")
 UNIMPL_CMD ("REPORT", "Pretty print working file")
-UNIMPL_CMD ("RESTORE", "Restore settings")
 UNIMPL_CMD ("RMV", "Replace missing values")
 UNIMPL_CMD ("SCRIPT", "Run script file")
 UNIMPL_CMD ("SEASON", "Estimate seasonal factors")
index cb608f769d5d4b91adbb5c21fa5ae3d4403a2c08..69c92ac108c439ebf141242a5565281070d60861 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2007, 2009 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2007, 2009, 2010 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
@@ -169,12 +169,12 @@ parse_specification (struct lexer *lexer, struct repeat_block *block)
       if (!lex_force_id (lexer))
        return false;
       if (dict_lookup_var (dict, lex_tokid (lexer)))
-        msg (SW, _("Dummy variable name \"%s\" hides dictionary "
-                   "variable \"%s\"."),
+        msg (SW, _("Dummy variable name `%s' hides dictionary "
+                   "variable `%s'."),
              lex_tokid (lexer), lex_tokid (lexer));
       if (find_macro (block, ss_cstr (lex_tokid (lexer))))
          {
-           msg (SE, _("Dummy variable name \"%s\" is given twice."),
+           msg (SE, _("Dummy variable name `%s' is given twice."),
                 lex_tokid (lexer));
            return false;
          }
@@ -195,7 +195,7 @@ parse_specification (struct lexer *lexer, struct repeat_block *block)
        count = parse_ids (lexer, dict, macro, block->pool);
       else if (lex_is_number (lexer))
        count = parse_numbers (lexer, macro, block->pool);
-      else if (lex_token (lexer) == T_STRING)
+      else if (lex_is_string (lexer))
        count = parse_strings (lexer, macro, block->pool);
       else
        {
@@ -220,8 +220,8 @@ parse_specification (struct lexer *lexer, struct repeat_block *block)
        }
       else if (block->loop_cnt != count)
        {
-         msg (SE, _("Dummy variable \"%.*s\" had %d "
-                     "substitutions, so \"%.*s\" must also, but %d "
+         msg (SE, _("Dummy variable `%.*s' had %d "
+                     "substitutions, so `%.*s' must also, but %d "
                      "were specified."),
               (int) ss_length (first_name), ss_data (first_name),
                block->loop_cnt,
@@ -306,7 +306,10 @@ parse_lines (struct lexer *lexer, struct repeat_block *block)
 
       /* Retrieve an input line and make a copy of it. */
       if (!lex_get_line_raw (lexer))
-        return false;
+        {
+          msg (SE, _("DO REPEAT without END REPEAT."));
+          return false;
+        }
       ds_init_string (&text, lex_entire_line_ds (lexer));
 
       /* Record file name. */
@@ -476,7 +479,7 @@ parse_strings (struct lexer *lexer, struct repeat_macro *macro, struct pool *poo
     {
       char *string;
 
-      if (lex_token (lexer) != T_STRING)
+      if (!lex_force_string (lexer))
        {
          msg (SE, _("String expected."));
          return 0;
@@ -618,10 +621,10 @@ do_repeat_name (const struct getl_interface *interface)
 }
 
 /* Returns the line number in the source file from which the
-   previous line was originally obtained, or -1 if none. */
+   previous line was originally obtained, or 0 if none. */
 static int
 do_repeat_location (const struct getl_interface *interface)
 {
   struct repeat_line *line = current_line (interface);
-  return line ? line->line_number : -1;
+  return line ? line->line_number : 0;
 }
index d43af347a701693224980ea18281eaf72d6c0e60..80c9849b55b61c9812551278115756135d920813 100644 (file)
@@ -196,7 +196,7 @@ cmd_data_list (struct lexer *lexer, struct dataset *ds)
 
                       if (lex_match_id (lexer, "TAB"))
                         delim = '\t';
-                      else if (lex_token (lexer) == T_STRING
+                      else if (lex_is_string (lexer)
                                && ds_length (lex_tokstr (lexer)) == 1)
                         {
                           delim = ds_first (lex_tokstr (lexer));
index 2d7f9f4cd4a0528ba1131cc51daa7a43f9df13aa..714b2a952e32c8d96d29af7c958e6e2c64e40a79 100644 (file)
@@ -395,7 +395,6 @@ data_parser_parse (struct data_parser *parser, struct dfm_reader *reader,
       && dfm_get_percent_read (reader) >= parser->percent_cases)
     return false;
 
-  dfm_push (reader);
   if (parser->type == DP_DELIMITED)
     {
       if (parser->span)
@@ -405,7 +404,6 @@ data_parser_parse (struct data_parser *parser, struct dfm_reader *reader,
     }
   else
     retval = parse_fixed (parser, reader, c);
-  dfm_pop (reader);
 
   return retval;
 }
@@ -502,6 +500,25 @@ cut_field (const struct data_parser *parser, struct dfm_reader *reader,
   return true;
 }
 
+static void
+parse_error (const struct dfm_reader *reader, const struct field *field,
+             int first_column, int last_column, char *error)
+{
+  struct msg m;
+
+  m.category = MSG_C_DATA;
+  m.severity = MSG_S_WARNING;
+  m.where.file_name = CONST_CAST (char *, dfm_get_file_name (reader));
+  m.where.line_number = dfm_get_line_number (reader);
+  m.where.first_column = first_column;
+  m.where.last_column = last_column;
+  m.text = xasprintf (_("Data for variable %s is not valid as format %s: %s"),
+                      field->name, fmt_name (field->format.type), error);
+  msg_emit (&m);
+
+  free (error);
+}
+
 /* Reads a case from READER into C, parsing it according to
    fixed-format syntax rules in PARSER.
    Returns true if successful, false at end of file or on I/O error. */
@@ -509,7 +526,8 @@ static bool
 parse_fixed (const struct data_parser *parser, struct dfm_reader *reader,
              struct ccase *c)
 {
-  const char *encoding = dfm_reader_get_legacy_encoding (reader);
+  const char *input_encoding = dfm_reader_get_legacy_encoding (reader);
+  const char *output_encoding = dict_get_encoding (parser->dict);
   struct field *f;
   int row;
 
@@ -531,13 +549,21 @@ parse_fixed (const struct data_parser *parser, struct dfm_reader *reader,
       line = dfm_get_record (reader);
 
       for (; f < &parser->fields[parser->field_cnt] && f->record == row; f++)
-        data_in (ss_substr (line, f->first_column - 1,
-                            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));
+        {
+          struct substring s = ss_substr (line, f->first_column - 1,
+                                          f->format.w);
+          union value *value = case_data_rw_idx (c, f->case_idx);
+          char *error = data_in (s, input_encoding, f->format.type,
+                                 value, fmt_var_width (&f->format),
+                                 output_encoding);
+
+          if (error == NULL)
+            data_in_imply_decimals (s, input_encoding, f->format.type,
+                                    f->format.d, value);
+          else
+            parse_error (reader, f, f->first_column,
+                         f->first_column + f->format.w, error);
+        }
 
       dfm_forward_record (reader);
     }
@@ -552,7 +578,8 @@ static bool
 parse_delimited_span (const struct data_parser *parser,
                       struct dfm_reader *reader, struct ccase *c)
 {
-  const char *encoding = dfm_reader_get_legacy_encoding (reader);
+  const char *input_encoding = dfm_reader_get_legacy_encoding (reader);
+  const char *output_encoding = dict_get_encoding (parser->dict);
   struct string tmp = DS_EMPTY_INITIALIZER;
   struct field *f;
 
@@ -560,6 +587,7 @@ parse_delimited_span (const struct data_parser *parser,
     {
       struct substring s;
       int first_column, last_column;
+      char *error;
 
       /* Cut out a field and read in a new record if necessary. */
       while (!cut_field (parser, reader,
@@ -577,11 +605,11 @@ 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));
+      error = data_in (s, input_encoding, f->format.type,
+                       case_data_rw_idx (c, f->case_idx),
+                       fmt_var_width (&f->format), output_encoding);
+      if (error != NULL)
+        parse_error (reader, f, first_column, last_column, error);
     }
   ds_destroy (&tmp);
   return true;
@@ -594,7 +622,8 @@ static bool
 parse_delimited_no_span (const struct data_parser *parser,
                          struct dfm_reader *reader, struct ccase *c)
 {
-  const char *encoding = dfm_reader_get_legacy_encoding (reader);
+  const char *input_encoding = dfm_reader_get_legacy_encoding (reader);
+  const char *output_encoding = dict_get_encoding (parser->dict);
   struct string tmp = DS_EMPTY_INITIALIZER;
   struct substring s;
   struct field *f, *end;
@@ -606,6 +635,8 @@ parse_delimited_no_span (const struct data_parser *parser,
   for (f = parser->fields; f < end; f++)
     {
       int first_column, last_column;
+      char *error;
+
       if (!cut_field (parser, reader, &first_column, &last_column, &tmp, &s))
        {
          if (f < end - 1 && settings_get_undefined ())
@@ -619,11 +650,11 @@ parse_delimited_no_span (const struct data_parser *parser,
           goto exit;
        }
 
-      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));
+      error = data_in (s, input_encoding, f->format.type,
+                       case_data_rw_idx (c, f->case_idx),
+                       fmt_var_width (&f->format), output_encoding);
+      if (error != NULL)
+        parse_error (reader, f, first_column, last_column, error);
     }
 
   s = dfm_get_record (reader);
index 27c8ca68db01bb518578773a4ac0ac62c368c86d..061505f889075cf2ea66d5709c1bc1e5563ad344 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-2004, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1997-2004, 2006, 2010 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
@@ -146,7 +146,7 @@ dfm_open_reader (struct file_handle *fh, struct lexer *lexer)
       r->file = fn_open (fh_get_file_name (fh), "rb");
       if (r->file == NULL)
         {
-          msg (ME, _("Could not open \"%s\" for reading as a data file: %s."),
+          msg (ME, _("Could not open `%s' for reading as a data file: %s."),
                fh_get_file_name (r->fh), strerror (errno));
           fh_unlock (r->lock);
           fh_unref (fh);
@@ -677,20 +677,16 @@ dfm_get_column (const struct dfm_reader *r, const char *p)
   return ds_pointer_to_position (&r->line, p) + 1;
 }
 
-/* Pushes the file name and line number on the fn/ln stack. */
-void
-dfm_push (struct dfm_reader *r)
+const char *
+dfm_get_file_name (const struct dfm_reader *r)
 {
-  if (r->fh != fh_inline_file ())
-    msg_push_msg_locator (&r->where);
+  return fh_get_referent (r->fh) == FH_REF_FILE ? r->where.file_name : NULL;
 }
 
-/* Pops the file name and line number from the fn/ln stack. */
-void
-dfm_pop (struct dfm_reader *r)
+int
+dfm_get_line_number (const struct dfm_reader *r)
 {
-  if (r->fh != fh_inline_file ())
-    msg_pop_msg_locator (&r->where);
+  return fh_get_referent (r->fh) == FH_REF_FILE ? r->where.line_number : -1;
 }
 \f
 /* BEGIN DATA...END DATA procedure. */
index 308701c253147d48863a01bdb159c002e5fbf52a..7f7355da07fef98725608c403ccc01e1790ff288 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2010 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
@@ -49,8 +49,8 @@ size_t dfm_column_start (const struct dfm_reader *);
 size_t dfm_columns_past_end (const struct dfm_reader *);
 size_t dfm_get_column (const struct dfm_reader *, const char *);
 
-/* File stack. */
-void dfm_push (struct dfm_reader *);
-void dfm_pop (struct dfm_reader *);
+/* Information. */
+const char *dfm_get_file_name (const struct dfm_reader *);
+int dfm_get_line_number (const struct dfm_reader *);
 
 #endif /* data-reader.h */
index f736568798f1f4a5c12db763560bb849f42159d2..fd77d504f8f995c3e6cb5894358f1c90f3b44bf8 100644 (file)
@@ -70,7 +70,7 @@ dfm_open_writer (struct file_handle *fh)
                               &w->file, NULL);
   if (w->rf == NULL)
     {
-      msg (ME, _("An error occurred while opening \"%s\" for writing "
+      msg (ME, _("An error occurred while opening `%s' for writing "
                  "as a data file: %s."),
            fh_get_file_name (w->fh), strerror (errno));
       dfm_close_writer (w);
@@ -187,7 +187,7 @@ dfm_close_writer (struct dfm_writer *w)
       ok = !dfm_write_error (w) && !fn_close (file_name, w->file);
 
       if (!ok)
-        msg (ME, _("I/O error occurred writing data file \"%s\"."), file_name);
+        msg (ME, _("I/O error occurred writing data file `%s'."), file_name);
 
       if (ok ? !replace_file_commit (w->rf) : !replace_file_abort (w->rf))
         ok = false;
index 33aa1d168a5c4efce423688b3d8998193b8c7abc..71081b922ac0601835fec8b13a819aa4f2a17dc3 100644 (file)
@@ -200,7 +200,7 @@ fh_parse (struct lexer *lexer, enum fh_referent referent_mask)
     handle = fh_inline_file ();
   else
     {
-      if (lex_token (lexer) != T_ID && lex_token (lexer) != T_STRING)
+      if (lex_token (lexer) != T_ID && !lex_is_string (lexer))
         {
           lex_error (lexer, _("expecting a file name or handle name"));
           return NULL;
index 0039089188d6b131abd77d2802fc9ec4fcdfb862..94fadd604a205663b31261177a7a1789b27fcdaf 100644 (file)
@@ -219,7 +219,6 @@ parse_get_gnm (struct lexer *lexer, struct dataset *ds)
        }
       else
        {
-         printf ("Unknown data file type \"\%s\"\n", lex_tokid (lexer));
          goto error;
        }
       lex_get (lexer);
@@ -459,7 +458,7 @@ parse_get_txt (struct lexer *lexer, struct dataset *ds)
         break;
       else
         {
-          lex_error (lexer, _("expecting VARIABLES"));
+          lex_error (lexer, _("expecting %s"), "VARIABLES");
           goto error;
         }
     }
index 14fb70a40f542c48250fd77b2a79d5499a3a53bd..cf59c8e0fbadc78f904fe9049d84341c5bf04e60 100644 (file)
@@ -77,7 +77,7 @@ parse_read_command (struct lexer *lexer, struct dataset *ds, enum reader_command
     {
       lex_match (lexer, '/');
 
-      if (lex_match_id (lexer, "FILE") || lex_token (lexer) == T_STRING)
+      if (lex_match_id (lexer, "FILE") || lex_is_string (lexer))
        {
          lex_match (lexer, '=');
 
index 60f51b523b0c0250abbe4ae43753880be464ff4b..738b667183523a210d6530b74ef4f15ea2b598e8 100644 (file)
@@ -178,6 +178,7 @@ cmd_list (struct lexer *lexer, struct dataset *ds)
   ok = proc_commit (ds) && ok;
 
   subcase_destroy (&sc);
+  free (cmd.v_variables);
 
   return ok ? CMD_SUCCESS : CMD_CASCADING_FAILURE;
 }
index eee5206b5b3d9775e886471c00e26cda9536cdee..4f1d062cb8d3b18734afacfc427f1bfd5b1b5408 100644 (file)
@@ -223,7 +223,7 @@ fixed_parse_fortran (struct lexer *lexer, struct pool *pool, bool for_input,
                 {
                   if (!fmt_from_name (type, &f.type))
                     {
-                      msg (SE, _("Unknown format type \"%s\"."), type);
+                      msg (SE, _("Unknown format type `%s'."), type);
                       return false;
                     }
                   if (!fmt_check (&f, for_input))
index fd98eaedcc319fe5b44faf0294aa7dce6265a020..164d992759614b421cb72eddee77fc2c6f3254e4 100644 (file)
@@ -252,7 +252,7 @@ parse_specs (struct lexer *lexer, struct pool *tmp_pool, struct print_trns *trns
       if (!parse_record_placement (lexer, &record, &column))
         return false;
 
-      if (lex_token (lexer) == T_STRING)
+      if (lex_is_string (lexer))
        ok = parse_string_argument (lexer, trns, record, &column);
       else
        ok = parse_variable_argument (lexer, dict, trns, tmp_pool, &record, &column,
@@ -412,7 +412,7 @@ dump_table (struct print_trns *trns, const struct file_handle *fh)
       switch (spec->type)
         {
         case PRT_LITERAL:
-          tab_text_format (t, 0, row, TAB_LEFT | TAB_FIX, "\"%.*s\"",
+          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);
index 3e33ff112536c539d94fd1b66844c8e98b67d2f0..4cf5e71eaa18b6c696ed682e925572978f5ec658 100644 (file)
@@ -245,7 +245,7 @@ cmd_save_translate (struct lexer *lexer, struct dataset *ds)
     }
   else if (!replace && fn_exists (fh_get_file_name (handle)))
     {
-      msg (SE, _("Output file \"%s\" exists but REPLACE was not specified."),
+      msg (SE, _("Output file `%s' exists but REPLACE was not specified."),
            fh_get_file_name (handle));
       goto error;
     }
index 921b9c655e9475b916a56823ff34f0fcf1d1d4bd..5817fd02ccb4db835416fd8182b2d469219375a5 100644 (file)
@@ -88,8 +88,8 @@ parse_dict_rename (struct lexer *lexer, struct dictionary *dict)
          msg (SE, _("Cannot rename %s as %s because there already exists "
                     "a variable named %s.  To rename variables with "
                     "overlapping names, use a single RENAME subcommand "
-                    "such as \"/RENAME (A=B)(B=C)(C=A)\", or equivalently, "
-                    "\"/RENAME (A B C=B C A)\"."),
+                    "such as `/RENAME (A=B)(B=C)(C=A)', or equivalently, "
+                    "`/RENAME (A B C=B C A)'."),
                var_get_name (v), lex_tokid (lexer), lex_tokid (lexer));
          return 0;
        }
index 9e9b8085f90dad7c0b834ef3914a31951c06e084..ee309ae31d84e15f40741b8c64fa4af3508eef0d 100644 (file)
@@ -186,7 +186,7 @@ parse_attributes (struct lexer *lexer, struct attrset **sets, size_t n)
         command = DELETE;
       else if (command == UNKNOWN)
         {
-          lex_error (lexer, _("expecting ATTRIBUTE= or DELETE="));
+          lex_error (lexer, _("expecting %s or %s"), "ATTRIBUTE=", "DELETE=");
           return CMD_FAILURE;
         }
 
index 22fe4436f0500e9f93b54b97ae48962c2a2663db..912c58cf5a0bdee053d7adc9adb86ab2cc4d5105 100644 (file)
@@ -51,11 +51,8 @@ cmd_missing_values (struct lexer *lexer, struct dataset *ds)
       if (!parse_variables (lexer, dataset_dict (ds), &v, &nv, PV_NONE))
         goto done;
 
-      if (!lex_match (lexer, '('))
-        {
-          lex_error (lexer, _("expecting `('"));
-          goto done;
-        }
+      if (!lex_force_match (lexer, '('))
+        goto done;
 
       for (i = 0; i < nv; i++)
         var_clear_missing_values (v[i]);
index 6e8a050849e3290c095cbdca36ef1d187f7d70f8..96f1a110f5a5066be42ca24d08b5a48f4761cc3d 100644 (file)
@@ -577,7 +577,7 @@ parse_display (struct lexer *lexer, struct dictionary *dict)
           if (mrset->width == 0)
             ds_put_format (&details, "%.0f\n", mrset->counted.f);
           else
-            ds_put_format (&details, "\"%.*s\"\n", mrset->width,
+            ds_put_format (&details, "`%.*s'\n", mrset->width,
                            value_str (&mrset->counted, mrset->width));
           ds_put_format (&details, "%s: %s\n", _("Category label source"),
                          (mrset->cat_source == MRSET_VARLABELS
index e8abe70dc91fd0c12d1000c5a615e2ce59195604..fbf7e200ee3a4d89876b3b6f1a21e37292923a55 100644 (file)
@@ -46,9 +46,8 @@ cmd_variable_labels (struct lexer *lexer, struct dataset *ds)
       if (!parse_variables (lexer, dataset_dict (ds), &v, &nv, PV_NONE))
         return CMD_FAILURE;
 
-      if (lex_token (lexer) != T_STRING)
+      if (!lex_force_string (lexer))
        {
-         msg (SE, _("String expected for variable label."));
          free (v);
          return CMD_FAILURE;
        }
index 48fc1556cc9c1de26698fb448597bbbbbc089840..65404b43e4d4d6a725a57794811291881890d4c7 100644 (file)
@@ -142,7 +142,7 @@ cmd_debug_evaluate (struct lexer *lexer, struct dataset *dsother UNUSED)
 
           if (lex_is_number (lexer))
             width = 0;
-          else if (lex_token (lexer) == T_STRING)
+          else if (lex_is_string (lexer))
             width = ds_length (lex_tokstr (lexer));
           else
             {
index 7e9e1d6cb542f8b15216c31fe8d9e90788609259..ac17c1cece19ce842bde63ae9495daac3d6e0109 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2008 Free Software Foundation, Inc.
+   Copyright (C) 2008, 2010 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
 
 const struct substring empty_string = {NULL, 0};
 
-static void
-expr_error (void *aux UNUSED, const char *format, ...)
-{
-  struct msg m;
-  va_list args;
-
-  m.category = MSG_C_SYNTAX;
-  m.severity = MSG_S_ERROR;
-  va_start (args, format);
-  m.text = xvasprintf (format, args);
-  va_end (args);
-
-  msg_emit (&m);
-}
-
 double
 expr_ymd_to_ofs (double year, double month, double day)
 {
   int y = year;
   int m = month;
   int d = day;
+  char *error;
+  double ofs;
 
   if (y != year || m != month || d != day)
     {
@@ -53,7 +40,13 @@ expr_ymd_to_ofs (double year, double month, double day)
       return SYSMIS;
     }
 
-  return calendar_gregorian_to_offset (y, m, d, expr_error, NULL);
+  ofs = calendar_gregorian_to_offset (y, m, d, &error);
+  if (error != NULL)
+    {
+      msg (SE, "%s", error);
+      free (error);
+    }
+  return ofs;
 }
 
 double
@@ -179,9 +172,11 @@ recognize_unit (struct substring name, enum date_unit *unit)
         return true;
       }
 
-  msg (SE, _("Unrecognized date unit \"%.*s\".  "
-             "Valid date units are \"years\", \"quarters\", \"months\", "
-             "\"weeks\", \"days\", \"hours\", \"minutes\", and \"seconds\"."),
+  /* TRANSLATORS: Don't translate the the actual unit names `weeks', `days' etc
+       They must remain in their original English. */
+  msg (SE, _("Unrecognized date unit `%.*s'.  "
+             "Valid date units are `years', `quarters', `months', "
+             "`weeks', `days', `hours', `minutes', and `seconds'."),
        (int) ss_length (name), ss_data (name));
   return false;
 }
@@ -330,7 +325,7 @@ recognize_method (struct substring method_name, enum date_sum_method *method)
   else
     {
       msg (SE, _("Invalid DATESUM method.  "
-                 "Valid choices are \"closest\" and \"rollover\"."));
+                 "Valid choices are `closest' and `rollover'."));
       return false;
     }
 }
@@ -342,6 +337,7 @@ add_months (double date, int months, enum date_sum_method method)
 {
   int y, m, d, yd;
   double output;
+  char *error;
 
   calendar_offset_to_gregorian (date / DAY_S, &y, &m, &d, &yd);
   y += months / 12;
@@ -361,9 +357,14 @@ add_months (double date, int months, enum date_sum_method method)
   if (method == SUM_CLOSEST && d > calendar_days_in_month (y, m))
     d = calendar_days_in_month (y, m);
 
-  output = calendar_gregorian_to_offset (y, m, d, expr_error, NULL);
+  output = calendar_gregorian_to_offset (y, m, d, &error);
   if (output != SYSMIS)
     output = (output * DAY_S) + fmod (date, DAY_S);
+  else
+    {
+      msg (SE, "%s", error);
+      free (error);
+    }
   return output;
 }
 
@@ -404,7 +405,7 @@ expr_date_sum (double date, double quantity, struct substring unit_name,
 }
 
 int
-compare_string (const struct substring *a, const struct substring *b)
+compare_string_3way (const struct substring *a, const struct substring *b)
 {
   size_t i;
 
index 895ec49bc90b30eaac7b7a1b208839fc3d6905f0..cb59c206a7599334246402cc26265854562d8483 100644 (file)
@@ -48,7 +48,7 @@ static inline double check_errno (double x)
 
 extern const struct substring empty_string;
 
-int compare_string (const struct substring *, const struct substring *);
+int compare_string_3way (const struct substring *, const struct substring *);
 
 double expr_ymd_to_date (double year, double month, double day);
 double expr_ymd_to_ofs (double year, double month, double day);
index 531d6b312a0284309ef32223fc7cd69271959673..0286acf91e393d917a1259181165d4c8c88c8934 100644 (file)
@@ -63,12 +63,12 @@ boolean operator LT (a, b) = a < b;
 boolean operator NE (a, b) = a != b;
 
 // String relational operators.
-boolean operator EQ_STRING (string a, string b) = compare_string (&a, &b) == 0;
-boolean operator GE_STRING (string a, string b) = compare_string (&a, &b) >= 0;
-boolean operator GT_STRING (string a, string b) = compare_string (&a, &b) > 0;
-boolean operator LE_STRING (string a, string b) = compare_string (&a, &b) <= 0;
-boolean operator LT_STRING (string a, string b) = compare_string (&a, &b) < 0;
-boolean operator NE_STRING (string a, string b) = compare_string (&a, &b) != 0;
+boolean operator EQ_STRING (string a, string b) = compare_string_3way (&a, &b) == 0;
+boolean operator GE_STRING (string a, string b) = compare_string_3way (&a, &b) >= 0;
+boolean operator GT_STRING (string a, string b) = compare_string_3way (&a, &b) > 0;
+boolean operator LE_STRING (string a, string b) = compare_string_3way (&a, &b) <= 0;
+boolean operator LT_STRING (string a, string b) = compare_string_3way (&a, &b) < 0;
+boolean operator NE_STRING (string a, string b) = compare_string_3way (&a, &b) != 0;
 
 // Unary functions.
 function ABS (x) = fabs (x);
@@ -118,7 +118,7 @@ boolean function ANY (string x, string a[n])
   size_t i;
 
   for (i = 0; i < n; i++)
-    if (!compare_string (&x, &a[i]))
+    if (!compare_string_3way (&x, &a[i]))
       return 1.;
   return 0.;
 }
@@ -154,7 +154,7 @@ string function MAX (string a[n])
 
   max = &a[0];
   for (i = 1; i < n; i++)
-    if (compare_string (&a[i], max) > 0)
+    if (compare_string_3way (&a[i], max) > 0)
       max = &a[i];
   return *max;
 }
@@ -185,7 +185,7 @@ string function MIN (string a[n])
 
   min = &a[0];
   for (i = 1; i < n; i++)
-    if (compare_string (&a[i], min) < 0)
+    if (compare_string_3way (&a[i], min) < 0)
       min = &a[i];
   return *min;
 }
@@ -238,7 +238,7 @@ boolean function RANGE (string x, string a[n*2])
     {
       struct substring *w = &a[2 * i];
       struct substring *y = &a[2 * i + 1];
-      if (compare_string (w, &x) <= 0 && compare_string (&x, y) <= 0)
+      if (compare_string_3way (w, &x) <= 0 && compare_string_3way (&x, y) <= 0)
         return 1.;
     }
   return 0.;
@@ -581,7 +581,19 @@ 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, NULL, &out, 0);
+  char *error;
+
+  if (s.length > f->w)
+    s.length = f->w;
+  error = data_in (s, LEGACY_NATIVE, f->type, &out, 0, NULL);
+  if (error == NULL)
+  data_in_imply_decimals (s, LEGACY_NATIVE, f->type, f->d, &out);
+  else
+    {
+      msg (SE, "Cannot parse \"%.*s\" as format %s: %s",
+           (int) s.length, s.string, fmt_name (f->type), error);
+      free (error);
+    }
   return out.f;
 }
 
@@ -961,7 +973,8 @@ absorb_miss no_opt string operator VEC_ELEM_STR (idx)
   if (idx >= 1 && idx <= vector_get_var_cnt (v))
     {
       struct variable *var = vector_get_var (v, (size_t) idx - 1);
-      return copy_string (e, case_str (c, var), var_get_width (var));
+      return copy_string (e, CHAR_CAST_BUG (char *, case_str (c, var)),
+                          var_get_width (var));
     }
   else
     {
@@ -1029,7 +1042,8 @@ no_opt perm_only string function LAG (str_var v, pos_int n_before)
 {
   const struct ccase *c = lagged_case (ds, n_before);
   if (c != NULL)
-    return copy_string (e, case_str (c, v), var_get_width (v));
+    return copy_string (e, CHAR_CAST_BUG (char *, case_str (c, v)),
+                        var_get_width (v));
   else
     return empty_string;
 }
@@ -1040,7 +1054,8 @@ no_opt perm_only string function LAG (str_var v)
 {
   const struct ccase *c = lagged_case (ds, 1);
   if (c != NULL)
-    return copy_string (e, case_str (c, v), var_get_width (v));
+    return copy_string (e, CHAR_CAST_BUG (char *, case_str (c, v)),
+                        var_get_width (v));
   else
     return empty_string;
 }
index 530e272cbed15bb87921f3a38344b7d2f12569c4..f2b4f1c78b4cc2b4a85f6ea752e74990d19c952b 100644 (file)
@@ -616,7 +616,7 @@ static union any_node *
 parse_or (struct lexer *lexer, struct expression *e)
 {
   static const struct operator op =
-    { T_OR, OP_OR, "logical disjunction (\"OR\")" };
+    { T_OR, OP_OR, "logical disjunction (`OR')" };
 
   return parse_binary_operators (lexer, e, parse_and (lexer, e), &op, 1, parse_and, NULL);
 }
@@ -626,7 +626,7 @@ static union any_node *
 parse_and (struct lexer *lexer, struct expression *e)
 {
   static const struct operator op =
-    { T_AND, OP_AND, "logical conjunction (\"AND\")" };
+    { T_AND, OP_AND, "logical conjunction (`AND')" };
 
   return parse_binary_operators (lexer, e, parse_not (lexer, e),
                                 &op, 1, parse_not, NULL);
@@ -637,7 +637,7 @@ static union any_node *
 parse_not (struct lexer *lexer, struct expression *e)
 {
   static const struct operator op
-    = { T_NOT, OP_NOT, "logical negation (\"NOT\")" };
+    = { T_NOT, OP_NOT, "logical negation (`NOT')" };
   return parse_inverting_unary_operator (lexer, e, &op, parse_rel);
 }
 
@@ -646,12 +646,12 @@ static union any_node *
 parse_rel (struct lexer *lexer, struct expression *e)
 {
   const char *chain_warning =
-    _("Chaining relational operators (e.g. \"a < b < c\") will "
+    _("Chaining relational operators (e.g. `a < b < c') will "
       "not produce the mathematically expected result.  "
       "Use the AND logical operator to fix the problem "
-      "(e.g. \"a < b AND b < c\").  "
+      "(e.g. `a < b AND b < c').  "
       "If chaining is really intended, parentheses will disable "
-      "this warning (e.g. \"(a < b) < c\".)");
+      "this warning (e.g. `(a < b) < c'.)");
 
   union any_node *node = parse_add (lexer, e);
 
@@ -665,13 +665,13 @@ parse_rel (struct lexer *lexer, struct expression *e)
       {
         static const struct operator ops[] =
           {
-            { '=', OP_EQ, "numeric equality (\"=\")" },
-            { T_EQ, OP_EQ, "numeric equality (\"EQ\")" },
-            { T_GE, OP_GE, "numeric greater-than-or-equal-to (\">=\")" },
-            { T_GT, OP_GT, "numeric greater than (\">\")" },
-            { T_LE, OP_LE, "numeric less-than-or-equal-to (\"<=\")" },
-            { T_LT, OP_LT, "numeric less than (\"<\")" },
-            { T_NE, OP_NE, "numeric inequality (\"<>\")" },
+            { '=', OP_EQ, "numeric equality (`=')" },
+            { T_EQ, OP_EQ, "numeric equality (`EQ')" },
+            { T_GE, OP_GE, "numeric greater-than-or-equal-to (`>=')" },
+            { T_GT, OP_GT, "numeric greater than (`>')" },
+            { T_LE, OP_LE, "numeric less-than-or-equal-to (`<=')" },
+            { T_LT, OP_LT, "numeric less than (`<')" },
+            { T_NE, OP_NE, "numeric inequality (`<>')" },
           };
 
         return parse_binary_operators (lexer, e, node, ops,
@@ -683,13 +683,13 @@ parse_rel (struct lexer *lexer, struct expression *e)
       {
         static const struct operator ops[] =
           {
-            { '=', OP_EQ_STRING, "string equality (\"=\")" },
-            { T_EQ, OP_EQ_STRING, "string equality (\"EQ\")" },
-            { T_GE, OP_GE_STRING, "string greater-than-or-equal-to (\">=\")" },
-            { T_GT, OP_GT_STRING, "string greater than (\">\")" },
-            { T_LE, OP_LE_STRING, "string less-than-or-equal-to (\"<=\")" },
-            { T_LT, OP_LT_STRING, "string less than (\"<\")" },
-            { T_NE, OP_NE_STRING, "string inequality (\"<>\")" },
+            { '=', OP_EQ_STRING, "string equality (`=')" },
+            { T_EQ, OP_EQ_STRING, "string equality (`EQ')" },
+            { T_GE, OP_GE_STRING, "string greater-than-or-equal-to (`>=')" },
+            { T_GT, OP_GT_STRING, "string greater than (`>')" },
+            { T_LE, OP_LE_STRING, "string less-than-or-equal-to (`<=')" },
+            { T_LT, OP_LT_STRING, "string less than (`<')" },
+            { T_NE, OP_NE_STRING, "string inequality (`<>')" },
           };
 
         return parse_binary_operators (lexer, e, node, ops,
@@ -708,8 +708,8 @@ parse_add (struct lexer *lexer, struct expression *e)
 {
   static const struct operator ops[] =
     {
-      { '+', OP_ADD, "addition (\"+\")" },
-      { '-', OP_SUB, "subtraction (\"-\")" },
+      { '+', OP_ADD, "addition (`+')" },
+      { '-', OP_SUB, "subtraction (`-')" },
     };
 
   return parse_binary_operators (lexer, e, parse_mul (lexer, e),
@@ -723,8 +723,8 @@ parse_mul (struct lexer *lexer, struct expression *e)
 {
   static const struct operator ops[] =
     {
-      { '*', OP_MUL, "multiplication (\"*\")" },
-      { '/', OP_DIV, "division (\"/\")" },
+      { '*', OP_MUL, "multiplication (`*')" },
+      { '/', OP_DIV, "division (`/')" },
     };
 
   return parse_binary_operators (lexer, e, parse_neg (lexer, e),
@@ -736,7 +736,7 @@ parse_mul (struct lexer *lexer, struct expression *e)
 static union any_node *
 parse_neg (struct lexer *lexer, struct expression *e)
 {
-  static const struct operator op = { '-', OP_NEG, "negation (\"-\")" };
+  static const struct operator op = { '-', OP_NEG, "negation (`-')" };
   return parse_inverting_unary_operator (lexer, e, &op, parse_exp);
 }
 
@@ -744,12 +744,12 @@ static union any_node *
 parse_exp (struct lexer *lexer, struct expression *e)
 {
   static const struct operator op =
-    { T_EXP, OP_POW, "exponentiation (\"**\")" };
+    { T_EXP, OP_POW, "exponentiation (`**')" };
 
   const char *chain_warning =
-    _("The exponentiation operator (\"**\") is left-associative, "
+    _("The exponentiation operator (`**') is left-associative, "
       "even though right-associative semantics are more useful.  "
-      "That is, \"a**b**c\" equals \"(a**b)**c\", not as \"a**(b**c)\".  "
+      "That is, `a**b**c' equals `(a**b)**c', not as `a**(b**c)'.  "
       "To disable this warning, insert parentheses.");
 
   return parse_binary_operators (lexer, e, parse_primary (lexer, e), &op, 1,
@@ -886,16 +886,13 @@ parse_primary (struct lexer *lexer, struct expression *e)
         union any_node *node;
        lex_get (lexer);
        node = parse_or (lexer, e);
-       if (node != NULL && !lex_match (lexer, ')'))
-         {
-           lex_error (lexer, _("expecting `)'"));
-            return NULL;
-         }
+       if (node != NULL && !lex_force_match (lexer, ')'))
+          return NULL;
         return node;
       }
 
     default:
-      lex_error (lexer, _("in expression"));
+      lex_error (lexer, NULL);
       return NULL;
     }
 }
index 35e9a991fafbf9a66478584facea9edad818d6bb..39dbacbf238bba69371b6ffc5c803f378dbde454 100644 (file)
@@ -104,7 +104,7 @@ parse_format_specifier (struct lexer *lexer, struct fmt_spec *format)
 
   if (!fmt_from_name (type, &format->type))
     {
-      msg (SE, _("Unknown format type \"%s\"."), type);
+      msg (SE, _("Unknown format type `%s'."), type);
       return false;
     }
 
@@ -123,7 +123,7 @@ parse_format_specifier_name (struct lexer *lexer, enum fmt_type *type)
     }
   if (!fmt_from_name (ds_cstr (lex_tokstr (lexer)), type))
     {
-      msg (SE, _("Unknown format type \"%s\"."), ds_cstr (lex_tokstr (lexer)));
+      msg (SE, _("Unknown format type `%s'."), ds_cstr (lex_tokstr (lexer)));
       return false;
     }
   lex_get (lexer);
index bad35be8a1450b8f381c072cb073e4b9b04d59a1..87fecaa6a92a8281b17df37ada52f7c9addb33fa 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2006, 2009 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2006, 2009, 2010 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
 #define _(msgid) gettext (msgid)
 #define N_(msgid) msgid
 
-
-#define DUMP_TOKENS 0
-
-
-
 struct lexer
 {
   struct string line_buffer;
@@ -83,10 +78,6 @@ enum string_type
   };
 
 static int parse_string (struct lexer *, enum string_type);
-
-#if DUMP_TOKENS
-static void dump_token (struct lexer *);
-#endif
 \f
 /* Initialization. */
 
@@ -180,9 +171,6 @@ lex_get (struct lexer *lexer)
       if (lexer->put_token)
         {
           restore_token (lexer);
-#if DUMP_TOKENS
-         dump_token (lexer);
-#endif
           return;
         }
 
@@ -199,27 +187,18 @@ lex_get (struct lexer *lexer)
            {
              lexer->dot = 0;
              lexer->token = '.';
-#if DUMP_TOKENS
-             dump_token (lexer);
-#endif
              return;
            }
          else if (!lex_get_line (lexer))
            {
              lexer->prog = NULL;
              lexer->token = T_STOP;
-#if DUMP_TOKENS
-             dump_token (lexer);
-#endif
              return;
            }
 
          if (lexer->put_token)
            {
               restore_token (lexer);
-#if DUMP_TOKENS
-             dump_token (lexer);
-#endif
              return;
            }
        }
@@ -394,10 +373,6 @@ lex_get (struct lexer *lexer)
         }
       break;
     }
-
-#if DUMP_TOKENS
-  dump_token (lexer);
-#endif
 }
 
 /* Parses an identifier at the current position into tokid and
@@ -440,31 +415,34 @@ lex_sbc_missing (struct lexer *lexer, const char *sbc)
 void
 lex_error (struct lexer *lexer, const char *message, ...)
 {
-  char *token_rep;
-  char where[128];
+  struct string s;
+
+  ds_init_empty (&s);
 
-  token_rep = lex_token_representation (lexer);
   if (lexer->token == T_STOP)
-    strcpy (where, "end of file");
+    ds_put_cstr (&s, _("Syntax error at end of file"));
   else if (lexer->token == '.')
-    strcpy (where, "end of command");
+    ds_put_cstr (&s, _("Syntax error at end of command"));
   else
-    snprintf (where, sizeof where, "`%s'", token_rep);
-  free (token_rep);
+    {
+      char *token_rep = lex_token_representation (lexer);
+      ds_put_format (&s, _("Syntax error at `%s'"), token_rep);
+      free (token_rep);
+    }
 
   if (message)
     {
-      char buf[1024];
       va_list args;
 
+      ds_put_cstr (&s, ": ");
+
       va_start (args, message);
-      vsnprintf (buf, 1024, message, args);
+      ds_put_vformat (&s, message, args);
       va_end (args);
-
-      msg (SE, _("Syntax error %s at %s."), buf, where);
     }
-  else
-    msg (SE, _("Syntax error at %s."), where);
+
+  msg (SE, "%s.", ds_cstr (&s));
+  ds_destroy (&s);
 }
 
 /* Checks that we're at end of command.
@@ -625,7 +603,7 @@ lex_force_match (struct lexer *lexer, int t)
 bool
 lex_force_string (struct lexer *lexer)
 {
-  if (lexer->token == T_STRING)
+  if (lex_is_string (lexer))
     return true;
   else
     {
@@ -884,6 +862,8 @@ lex_get_line_raw (struct lexer *lexer)
       const char *line = ds_cstr (&lexer->line_buffer);
       text_item_submit (text_item_create (TEXT_ITEM_SYNTAX, line));
     }
+  else
+    lexer->prog = NULL;
   return ok;
 }
 
@@ -896,10 +876,7 @@ lex_get_line (struct lexer *lexer)
   bool line_starts_command;
 
   if (!lex_get_line_raw (lexer))
-    {
-      lexer->prog = NULL;
-      return false;
-    }
+    return false;
 
   lex_preprocess_line (&lexer->line_buffer,
                       lex_current_syntax_mode (lexer),
@@ -1221,60 +1198,6 @@ finish:
   return T_STRING;
 }
 \f
-#if DUMP_TOKENS
-/* Reads one token from the lexer and writes a textual representation
-   on stdout for debugging purposes. */
-static void
-dump_token (struct lexer *lexer)
-{
-  {
-    const char *curfn;
-    int curln;
-
-    curln = getl_source_location (lexer->ss);
-    curfn = getl_source_name (lexer->ss);
-    if (curfn)
-      fprintf (stderr, "%s:%d\t", curfn, curln);
-  }
-
-  switch (lexer->token)
-    {
-    case T_ID:
-      fprintf (stderr, "ID\t%s\n", lexer->tokid);
-      break;
-
-    case T_POS_NUM:
-    case T_NEG_NUM:
-      fprintf (stderr, "NUM\t%f\n", lexer->tokval);
-      break;
-
-    case T_STRING:
-      fprintf (stderr, "STRING\t\"%s\"\n", ds_cstr (&lexer->tokstr));
-      break;
-
-    case T_STOP:
-      fprintf (stderr, "STOP\n");
-      break;
-
-    case T_EXP:
-      fprintf (stderr, "MISC\tEXP\"");
-      break;
-
-    case 0:
-      fprintf (stderr, "MISC\tEOF\n");
-      break;
-
-    default:
-      if (lex_is_keyword (lexer->token))
-       fprintf (stderr, "KEYWORD\t%s\n", lex_token_name (lexer->token));
-      else
-       fprintf (stderr, "PUNCT\t%c\n", lexer->token);
-      break;
-    }
-}
-#endif /* DUMP_TOKENS */
-
-
 /* Token Accessor Functions */
 
 int
index f2617092b3368c6173a4676ee549b3bf7cb320d5..cf8e53ee5cb881529ead693e0328f66e520a300b 100644 (file)
@@ -225,11 +225,11 @@ st_upper (const char *s)
 /* Returns the address of the first non-whitespace character in S, or
    the address of the null terminator if none. */
 static char *
-skip_ws (const char *s)
+skip_ws (char *s)
 {
   while (isspace ((unsigned char) *s))
     s++;
-  return (char *) s;
+  return s;
 }
 
 /* Read one line from the input file into buf.  Lines having special
@@ -1534,7 +1534,7 @@ dump_specifier_parse (const specifier *spec, const subcommand *sbc)
           else if (s->value == VAL_STRING)
             {
               dump (1, "if (lex_token (lexer) != T_ID "
-                    "&& lex_token (lexer) != T_STRING)");
+                    "&& !lex_is_string (lexer))");
               dump (1, "{");
               dump (0, "msg (SE, _(\"%s specifier of %s subcommand "
                     "requires a string argument.\"));",
index c780d86f04e95429bad3ee1004bbf2021ab89884..269d24bca48d04b13da5c7a054b08fcdb281d4fd 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2006, 2009, 2010 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
    along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <config.h>
+
 #include "value-parser.h"
+
 #include <stdbool.h>
-#include <data/data-in.h>
-#include <libpspp/message.h>
-#include "lexer.h"
-#include <libpspp/str.h>
-#include <data/value.h>
-#include <data/format.h>
+
+#include "data/data-in.h"
+#include "data/format.h"
+#include "data/value.h"
+#include "language/lexer/lexer.h"
+#include "libpspp/cast.h"
+#include "libpspp/message.h"
+#include "libpspp/str.h"
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
@@ -96,12 +100,16 @@ parse_number (struct lexer *lexer, double *x, const enum fmt_type *format)
       lex_get (lexer);
       return true;
     }
-  else if (lex_token (lexer) == T_STRING && format != NULL)
+  else if (lex_is_string (lexer) && 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, NULL, &v, 0);
+
+      assert (fmt_get_category (*format) != FMT_CAT_STRING);
+
+      if (!data_in_msg (ds_ss (lex_tokstr (lexer)), LEGACY_NATIVE,
+                        *format, &v, 0, NULL))
+        return false;
+
       lex_get (lexer);
       *x = v.f;
       if (*x == SYSMIS)
@@ -133,12 +141,13 @@ parse_value (struct lexer *lexer, union value *v, int width)
        return false;
       v->f = lex_tokval (lexer);
     }
-  else
+  else if (lex_force_string (lexer))
     {
-      if (!lex_force_string (lexer))
-       return false;
-      value_copy_str_rpad (v, width, ds_cstr (lex_tokstr (lexer)), ' ');
+      const char *s = ds_cstr (lex_tokstr (lexer));
+      value_copy_str_rpad (v, width, CHAR_CAST_BUG (const uint8_t *, s), ' ');
     }
+  else
+    return false;
 
   lex_get (lexer);
 
index c52a3ab9a9a538b1c5d315de39148110ac979271..8b9a1e7580afb395697352613cece550d4429055 100644 (file)
@@ -1,8 +1,6 @@
 crosstabs.c
 examine.c
 frequencies.c
-glm.c
-npar.c
 rank.c
 regression.c
 t-test.c
index bcc8a3be09a9467ebb2bc6cfbd7389f2d67e98ce..a8e3f6d71d267545b1d1d85ef60490433149c0f8 100644 (file)
@@ -222,7 +222,7 @@ cmd_aggregate (struct lexer *lexer, struct dataset *ds)
          lex_match (lexer, '=');
          if (!lex_match_id (lexer, "COLUMNWISE"))
            {
-             lex_error (lexer, _("while expecting COLUMNWISE"));
+             lex_error (lexer, _("expecting %s"), "COLUMNWISE");
               goto error;
            }
          agr.missing = COLUMNWISE;
@@ -231,7 +231,7 @@ cmd_aggregate (struct lexer *lexer, struct dataset *ds)
         copy_documents = true;
       else if (lex_match_id (lexer, "PRESORTED"))
         presorted = true;
-      else if (lex_match_id (lexer, "BREAK"))
+      else if (lex_force_match_id (lexer, "BREAK"))
        {
           int i;
 
@@ -249,10 +249,8 @@ cmd_aggregate (struct lexer *lexer, struct dataset *ds)
           break;
        }
       else
-        {
-          lex_error (lexer, _("expecting BREAK"));
-          goto error;
-        }
+        goto error;
+
     }
   if (presorted && saw_direction)
     msg (SW, _("When PRESORTED is specified, specifying sorting directions "
@@ -434,7 +432,7 @@ parse_aggregate_functions (struct lexer *lexer, const struct dictionary *dict,
 
 
 
-         if (lex_token (lexer) == T_STRING)
+         if (lex_is_string (lexer))
            {
              struct string label;
              ds_init_string (&label, lex_tokstr (lexer));
@@ -453,14 +451,8 @@ parse_aggregate_functions (struct lexer *lexer, const struct dictionary *dict,
          goto error;
        }
 
-      exclude = MV_ANY;
-
       ds_assign_string (&function_name, lex_tokstr (lexer));
-
-      ds_chomp (&function_name, '.');
-
-      if (lex_tokid(lexer)[strlen (lex_tokid (lexer)) - 1] == '.')
-        exclude = MV_SYSTEM;
+      exclude = ds_chomp (&function_name, '.') ? MV_SYSTEM : MV_ANY;
 
       for (function = agr_func_tab; function->name; function++)
        if (!strcasecmp (function->name, ds_cstr (&function_name)))
@@ -480,7 +472,7 @@ parse_aggregate_functions (struct lexer *lexer, const struct dictionary *dict,
        {
          if (function->src_vars == AGR_SV_YES)
            {
-             lex_error (lexer, _("expecting `('"));
+              lex_force_match (lexer, '(');
              goto error;
            }
        }
@@ -507,7 +499,7 @@ parse_aggregate_functions (struct lexer *lexer, const struct dictionary *dict,
                int type;
 
                lex_match (lexer, ',');
-               if (lex_token (lexer) == T_STRING)
+               if (lex_is_string (lexer))
                  {
                    arg[i].c = ds_xstrdup (lex_tokstr (lexer));
                    type = VAL_STRING;
@@ -536,11 +528,8 @@ parse_aggregate_functions (struct lexer *lexer, const struct dictionary *dict,
              }
 
          /* Trailing rparen. */
-         if (!lex_match (lexer, ')'))
-           {
-             lex_error (lexer, _("expecting `)'"));
-             goto error;
-           }
+         if (!lex_force_match (lexer, ')'))
+            goto error;
 
          /* Now check that the number of source variables match
             the number of target variables.  If we check earlier
index 6242d9c0036102a20c1c02147215564c0f514513..fb191d0c274df1f57ceae16e2d1eaff2b3b9b644 100644 (file)
@@ -6,8 +6,6 @@ src_language_stats_built_sources = \
        src/language/stats/crosstabs.c \
        src/language/stats/examine.c \
        src/language/stats/frequencies.c \
-       src/language/stats/glm.c \
-       src/language/stats/npar.c \
        src/language/stats/rank.c \
        src/language/stats/regression.c \
        src/language/stats/t-test.c
@@ -22,14 +20,15 @@ language_stats_sources = \
        src/language/stats/chisquare.h \
        src/language/stats/correlations.c \
        src/language/stats/descriptives.c \
-       src/language/stats/npar.h \
-       src/language/stats/sort-cases.c \
-       src/language/stats/sort-criteria.c \
-       src/language/stats/sort-criteria.h \
        src/language/stats/factor.c \
        src/language/stats/flip.c \
        src/language/stats/freq.c \
        src/language/stats/freq.h \
+       src/language/stats/glm.c \
+       src/language/stats/kruskal-wallis.c \
+       src/language/stats/kruskal-wallis.h \
+       src/language/stats/npar.c \
+       src/language/stats/npar.h \
        src/language/stats/npar-summary.c \
        src/language/stats/npar-summary.h \
        src/language/stats/oneway.c \
@@ -38,6 +37,9 @@ language_stats_sources = \
        src/language/stats/roc.h \
        src/language/stats/sign.c \
        src/language/stats/sign.h \
+       src/language/stats/sort-cases.c \
+       src/language/stats/sort-criteria.c \
+       src/language/stats/sort-criteria.h \
        src/language/stats/wilcoxon.c \
        src/language/stats/wilcoxon.h
 
index 68571cb2ef4d8f96265824c5c9968f47662f7977..2a72aaea82ecd266a1e6a81bbd5857fdecd52e54 100644 (file)
@@ -28,6 +28,7 @@
 #include "language/lexer/lexer.h"
 #include "language/lexer/variable-parser.h"
 #include "libpspp/array.h"
+#include "libpspp/i18n.h"
 #include "libpspp/compiler.h"
 #include "libpspp/hash-functions.h"
 #include "libpspp/hmap.h"
@@ -36,6 +37,7 @@
 #include "libpspp/str.h"
 
 #include "gl/xalloc.h"
+#include "gl/vasnprintf.h"
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
@@ -47,6 +49,8 @@ struct arc_item
   {
     struct hmap_node hmap_node; /* Element in "struct arc_spec" hash table. */
     union value from;           /* Original value. */
+    int width;                  /* Width of the original value */
+
     double to;                 /* Recoded value. */
   };
 
@@ -55,7 +59,7 @@ struct arc_spec
   {
     const struct variable *src;        /* Source variable. */
     struct variable *dst;      /* Target variable. */
-    struct hmap items;          /* Hash table of "struct arc_item"s. */
+    struct hmap *items;         /* Hash table of "struct arc_item"s. */
   };
 
 /* Descending or ascending sort order. */
@@ -67,17 +71,20 @@ enum arc_direction
 
 /* AUTORECODE data. */
 struct autorecode_pgm
-  {
-    struct arc_spec *specs;
-    size_t n_specs;
-  };
+{
+  struct arc_spec *specs;
+  size_t n_specs;
+
+  /* Hash table of "struct arc_item"s. */
+  struct hmap *global_items;
+};
 
 static trns_proc_func autorecode_trns_proc;
 static trns_free_func autorecode_trns_free;
 
-static int compare_arc_items (const void *, const void *, const void *width);
+static int compare_arc_items (const void *, const void *, const void *aux);
 static void arc_free (struct autorecode_pgm *);
-static struct arc_item *find_arc_item (struct arc_spec *, const union value *,
+static struct arc_item *find_arc_item (const struct arc_spec *, const union value *,
                                        size_t hash);
 
 /* Performs the AUTORECODE procedure. */
@@ -85,14 +92,15 @@ int
 cmd_autorecode (struct lexer *lexer, struct dataset *ds)
 {
   struct autorecode_pgm *arc = NULL;
+  struct dictionary *dict = dataset_dict (ds);
 
   const struct variable **src_vars = NULL;
   char **dst_names = NULL;
   size_t n_srcs = 0;
   size_t n_dsts = 0;
 
-  enum arc_direction direction;
-  bool print;
+  enum arc_direction direction = ASCENDING;
+  bool print = true;
 
   struct casereader *input;
   struct ccase *c;
@@ -100,10 +108,13 @@ cmd_autorecode (struct lexer *lexer, struct dataset *ds)
   size_t i;
   bool ok;
 
+  /* Create procedure. */
+  arc = xzalloc (sizeof *arc);
+
   /* Parse variable lists. */
   lex_match_id (lexer, "VARIABLES");
   lex_match (lexer, '=');
-  if (!parse_variables_const (lexer, dataset_dict (ds), &src_vars, &n_srcs,
+  if (!parse_variables_const (lexer, dict, &src_vars, &n_srcs,
                               PV_NO_DUPLICATE))
     goto error;
   if (!lex_force_match_id (lexer, "INTO"))
@@ -123,7 +134,7 @@ cmd_autorecode (struct lexer *lexer, struct dataset *ds)
     {
       const char *name = dst_names[i];
 
-      if (dict_lookup_var (dataset_dict (ds), name) != NULL)
+      if (dict_lookup_var (dict, name) != NULL)
         {
           msg (SE, _("Target variable %s duplicates existing variable %s."),
                name, name);
@@ -132,31 +143,45 @@ cmd_autorecode (struct lexer *lexer, struct dataset *ds)
     }
 
   /* Parse options. */
-  direction = ASCENDING;
-  print = false;
   while (lex_match (lexer, '/'))
-    if (lex_match_id (lexer, "DESCENDING"))
-      direction = DESCENDING;
-    else if (lex_match_id (lexer, "PRINT"))
-      print = true;
+    {
+      if (lex_match_id (lexer, "DESCENDING"))
+       direction = DESCENDING;
+      else if (lex_match_id (lexer, "PRINT"))
+       print = true;
+      else if (lex_match_id (lexer, "GROUP"))
+       {
+         arc->global_items = xmalloc (sizeof (*arc->global_items));
+         hmap_init (arc->global_items);
+       }
+    }
+
   if (lex_token (lexer) != '.')
     {
       lex_error (lexer, _("expecting end of command"));
       goto error;
     }
 
-  /* Create procedure. */
-  arc = xmalloc (sizeof *arc);
   arc->specs = xmalloc (n_dsts * sizeof *arc->specs);
   arc->n_specs = n_dsts;
+
   for (i = 0; i < n_dsts; i++)
     {
       struct arc_spec *spec = &arc->specs[i];
 
       spec->src = src_vars[i];
-      hmap_init (&spec->items);
+      if (arc->global_items)
+       {
+         spec->items = arc->global_items;
+       }
+      else
+       {
+         spec->items = xmalloc (sizeof (*spec->items));
+         hmap_init (spec->items);
+       }
     }
 
+
   /* Execute procedure. */
   input = proc_open (ds);
   for (; (c = casereader_read (input)) != NULL; case_unref (c))
@@ -172,8 +197,9 @@ cmd_autorecode (struct lexer *lexer, struct dataset *ds)
         if (item == NULL)
           {
             item = xmalloc (sizeof *item);
+           item->width = width;
             value_clone (&item->from, value, width);
-            hmap_insert (&spec->items, &item->hmap_node, hash);
+            hmap_insert (spec->items, &item->hmap_node, hash);
           }
       }
   ok = casereader_destroy (input);
@@ -186,27 +212,61 @@ cmd_autorecode (struct lexer *lexer, struct dataset *ds)
       struct arc_item **items;
       struct arc_item *item;
       size_t n_items;
-      int src_width;
       size_t j;
 
       /* Create destination variable. */
-      spec->dst = dict_create_var_assert (dataset_dict (ds), dst_names[i], 0);
+      spec->dst = dict_create_var_assert (dict, dst_names[i], 0);
 
       /* Create array of pointers to items. */
-      n_items = hmap_count (&spec->items);
+      n_items = hmap_count (spec->items);
       items = xmalloc (n_items * sizeof *items);
       j = 0;
-      HMAP_FOR_EACH (item, struct arc_item, hmap_node, &spec->items)
+      HMAP_FOR_EACH (item, struct arc_item, hmap_node, spec->items)
         items[j++] = item;
+
       assert (j == n_items);
 
       /* Sort array by value. */
-      src_width = var_get_width (spec->src);
-      sort (items, n_items, sizeof *items, compare_arc_items, &src_width);
+      sort (items, n_items, sizeof *items, compare_arc_items, NULL);
 
       /* Assign recoded values in sorted order. */
       for (j = 0; j < n_items; j++)
-        items[j]->to = direction == ASCENDING ? j + 1 : n_items - j;
+       {
+         const union value *from = &items[j]->from;
+         size_t len;
+         char *recoded_value  = NULL;
+         char *c;
+         const int src_width = items[j]->width;
+         union value to_val;
+         value_init (&to_val, 0);
+
+         items[j]->to = direction == ASCENDING ? j + 1 : n_items - j;
+         
+         to_val.f = items[j]->to;
+
+         /* Add value labels to the destination variable which indicate
+            the source value from whence the new value comes. */
+         if (src_width > 0)
+           {
+             const char *str = CHAR_CAST_BUG (const char*, value_str (from, src_width));
+
+             recoded_value = recode_string (UTF8, dict_get_encoding (dict), str, src_width);
+           }
+         else
+           recoded_value = asnprintf (NULL, &len, "%g", from->f);
+         
+         /* Remove trailing whitespace */
+         for (c = recoded_value; *c != '\0'; c++)
+           if ( *c == ' ')
+             {
+               *c = '\0';
+               break;
+             }
+
+         var_add_value_label (spec->dst, &to_val, recoded_value);
+         value_destroy (&to_val, 0);
+         free (recoded_value);
+       }
 
       /* Free array. */
       free (items);
@@ -234,44 +294,70 @@ arc_free (struct autorecode_pgm *arc)
       for (i = 0; i < arc->n_specs; i++)
         {
           struct arc_spec *spec = &arc->specs[i];
-          int width = var_get_width (spec->src);
           struct arc_item *item, *next;
 
-          HMAP_FOR_EACH_SAFE (item, next, struct arc_item, hmap_node,
-                              &spec->items)
-            {
-              value_destroy (&item->from, width);
-              hmap_delete (&spec->items, &item->hmap_node);
-              free (item);
-            }
-          hmap_destroy (&spec->items);
+         HMAP_FOR_EACH_SAFE (item, next, struct arc_item, hmap_node,
+                             spec->items)
+           {
+             value_destroy (&item->from, item->width);
+             hmap_delete (spec->items, &item->hmap_node);
+             free (item);
+           }
         }
+
+      if (arc->global_items)
+       {
+         free (arc->global_items);
+       }
+      else
+       {
+         for (i = 0; i < arc->n_specs; i++)
+           {
+             struct arc_spec *spec = &arc->specs[i];
+             if (spec->items)
+               {
+                 hmap_destroy (spec->items);
+                 free (spec->items);
+               }
+           }
+       }
+
       free (arc->specs);
       free (arc);
     }
 }
 
 static struct arc_item *
-find_arc_item (struct arc_spec *spec, const union value *value,
+find_arc_item (const struct arc_spec *spec, const union value *value,
                size_t hash)
 {
   struct arc_item *item;
 
-  HMAP_FOR_EACH_WITH_HASH (item, struct arc_item, hmap_node, hash,
-                           &spec->items)
+  HMAP_FOR_EACH_WITH_HASH (item, struct arc_item, hmap_node, hash, spec->items)
     if (value_equal (value, &item->from, var_get_width (spec->src)))
       return item;
   return NULL;
 }
 
 static int
-compare_arc_items (const void *a_, const void *b_, const void *width_)
+compare_arc_items (const void *a_, const void *b_, const void *aux UNUSED)
 {
   const struct arc_item *const *a = a_;
   const struct arc_item *const *b = b_;
-  const int *width = width_;
+  int width_a = (*a)->width;
+  int width_b = (*b)->width;
+
+  if ( width_a == width_b)
+    return value_compare_3way (&(*a)->from, &(*b)->from, width_a);
+
+  if ( width_a == 0 && width_b != 0)
+    return -1;
 
-  return value_compare_3way (&(*a)->from, &(*b)->from, *width);
+  if ( width_b == 0 && width_a != 0)
+    return +1;
+
+  return buf_compare_rpad (CHAR_CAST_BUG (const char *, value_str (&(*a)->from, width_a)), width_a,
+                          CHAR_CAST_BUG (const char *, value_str (&(*b)->from, width_b)), width_b);
 }
 
 static int
@@ -284,7 +370,7 @@ autorecode_trns_proc (void *arc_, struct ccase **c,
   *c = case_unshare (*c);
   for (i = 0; i < arc->n_specs; i++)
     {
-      struct arc_spec *spec = &arc->specs[i];
+      const struct arc_spec *spec = &arc->specs[i];
       int width = var_get_width (spec->src);
       const union value *value = case_data (*c, spec->src);
       struct arc_item *item;
index 3287509c982c3398dcee96a0e17eea4ea21b929d..8126daf36c725d80652a6add4db7098c35dcdd72 100644 (file)
@@ -88,15 +88,15 @@ calculate_binomial_internal (double n1, double n2, double p)
 static bool
 do_binomial (const struct dictionary *dict,
             struct casereader *input,
-            const struct binomial_test *bst,
+            const struct one_sample_test *ost,
             struct freq *cat1,
             struct freq *cat2,
              enum mv_class exclude
             )
 {
+  const struct binomial_test *bst = UP_CAST (ost, const struct binomial_test, parent);
   bool warn = true;
 
-  const struct one_sample_test *ost = (const struct one_sample_test *) bst;
   struct ccase *c;
 
   for (; (c = casereader_read (input)) != NULL; case_unref (c))
@@ -155,8 +155,8 @@ binomial_execute (const struct dataset *ds,
 {
   int v;
   const struct dictionary *dict = dataset_dict (ds);
-  const struct binomial_test *bst = (const struct binomial_test *) test;
-  const struct one_sample_test *ost = (const struct one_sample_test*) test;
+  const struct one_sample_test *ost = UP_CAST (test, const struct one_sample_test, parent);
+  const struct binomial_test *bst = UP_CAST (ost, const struct binomial_test, parent);
 
   struct freq *cat[2];
   int i;
@@ -179,7 +179,7 @@ binomial_execute (const struct dataset *ds,
         }
     }
 
-  if (do_binomial (dataset_dict (ds), input, bst, cat[0], cat[1], exclude))
+  if (do_binomial (dataset_dict (ds), input, ost, cat[0], cat[1], exclude))
     {
       const struct variable *wvar = dict_get_weight (dict);
       const struct fmt_spec *wfmt = wvar ?
index ea7d6909bb9844e3893ccf343920faa8477dace0..6af8ba32ffd54cc32f8e84baa8f77ee0192eee1d 100644 (file)
@@ -281,7 +281,7 @@ run_corr (struct casereader *r, const struct corr_opts *opts, const struct corr
   const gsl_matrix *cov_matrix;
   gsl_matrix *corr_matrix;
   struct covariance *cov = covariance_2pass_create (corr->n_vars_total, corr->vars,
-                                                   0, NULL,
+                                                   NULL,
                                                    opts->wv, opts->exclude);
 
   struct casereader *rc = casereader_clone (r);
index f75e249e8fdd3bba0363a9a26240aedd30ad16e3..4f93d6f5abf8647a9f8ff88aafdc562b518d6a97 100644 (file)
@@ -49,7 +49,7 @@
 #include <libpspp/array.h>
 #include <libpspp/assertion.h>
 #include <libpspp/compiler.h>
-#include <libpspp/hash.h>
+#include <libpspp/hash-functions.h>
 #include <libpspp/hmap.h>
 #include <libpspp/hmapx.h>
 #include <libpspp/message.h>
@@ -406,7 +406,7 @@ crs_custom_tables (struct lexer *lexer, struct dataset *ds,
        {
          if (n_by < 2)
            {
-             lex_error (lexer, _("expecting BY"));
+              lex_force_match (lexer, T_BY);
              goto done;
            }
          else
@@ -482,12 +482,8 @@ crs_custom_variables (struct lexer *lexer, struct dataset *ds,
                                    | PV_NO_DUPLICATE | PV_NO_SCRATCH)))
        return 0;
 
-      if (lex_token (lexer) != '(')
-       {
-         lex_error (lexer, "expecting `('");
+      if (!lex_force_match (lexer, '('))
          goto lossage;
-       }
-      lex_get (lexer);
 
       if (!lex_force_int (lexer))
        goto lossage;
@@ -507,12 +503,8 @@ crs_custom_variables (struct lexer *lexer, struct dataset *ds,
        }
       lex_get (lexer);
 
-      if (lex_token (lexer) != ')')
-       {
-         lex_error (lexer, "expecting `)'");
-         goto lossage;
-       }
-      lex_get (lexer);
+      if (!lex_force_match (lexer, ')'))
+        goto lossage;
 
       for (i = orig_nv; i < proc->n_variables; i++)
         {
@@ -1215,10 +1207,10 @@ create_chisq_table (struct pivot_table *pt)
   tab_text (chisq, 2, 0, TAB_RIGHT | TAT_TITLE, _("df"));
   tab_text (chisq, 3, 0, TAB_RIGHT | TAT_TITLE,
             _("Asymp. Sig. (2-tailed)"));
-  tab_text (chisq, 4, 0, TAB_RIGHT | TAT_TITLE,
-            _("Exact Sig. (2-tailed)"));
-  tab_text (chisq, 5, 0, TAB_RIGHT | TAT_TITLE,
-            _("Exact Sig. (1-tailed)"));
+  tab_text_format (chisq, 4, 0, TAB_RIGHT | TAT_TITLE,
+            _("Exact Sig. (%d-tailed)"), 2);
+  tab_text_format (chisq, 5, 0, TAB_RIGHT | TAT_TITLE,
+            _("Exact Sig. (%d-tailed)"), 1);
   tab_offset (chisq, 0, 1);
 
   return chisq;
index d50d6ad3fdf2c5b6eb6c86bbbe3e3044a893f4ac..93358373df3eee57684e7d0abdcdefd7f050662c 100644 (file)
@@ -1631,7 +1631,7 @@ show_correlation_matrix (const struct cmd_factor *factor, const struct idata *id
       if (factor->print & PRINT_SIG)
        {
          const double y = heading_rows + y_pos_sig * factor->n_vars;
-         tab_text (t, 0, y, TAT_TITLE, _("Sig. 1-tailed"));
+         tab_text (t, 0, y, TAT_TITLE, _("Sig. (1-tailed)"));
 
          for (i = 0; i < factor->n_vars; ++i)
            {
index de7f52c043bcb4d85fa263d3fc91debd8e916488..77881868b0c3fcc0fd3b8fa29ead25b117882b95 100644 (file)
@@ -186,7 +186,6 @@ cmd_flip (struct lexer *lexer, struct dataset *ds)
             {
               name = data_out_pool (value, dict_get_encoding (flip->dict), var_get_write_format (flip->new_names_var),
                 flip->pool);
-       
             }
           var_names_add (flip->pool, &flip->new_names, name);
         }
@@ -261,7 +260,6 @@ make_new_var (struct dictionary *dict, const char *name_)
           *cp = '_';
       }
   *cp = '\0';
-  str_uppercase (name);
 
   /* Use the mangled name, if it is available, or add numeric
      extensions until we find one that is. */
@@ -399,6 +397,7 @@ static struct ccase *
 flip_casereader_read (struct casereader *reader, void *flip_)
 {
   struct flip_pgm *flip = flip_;
+  const char *encoding;
   struct ccase *c;
   size_t i;
 
@@ -406,12 +405,10 @@ flip_casereader_read (struct casereader *reader, void *flip_)
     return false;
 
   c = case_create (casereader_get_proto (reader));
-  data_in (ss_cstr (flip->old_names.names[flip->cases_read]), dict_get_encoding (flip->dict), 
-       FMT_A, 0,
-       0, 0,
-       flip->dict, 
-       case_data_rw_idx (c, 0), 8);
-       
+  encoding = dict_get_encoding (flip->dict);
+  data_in (ss_cstr (flip->old_names.names[flip->cases_read]), encoding,
+           FMT_A, case_data_rw_idx (c, 0), 8, encoding);
+
   for (i = 0; i < flip->n_cases; i++)
     {
       double in;
diff --git a/src/language/stats/glm.c b/src/language/stats/glm.c
new file mode 100644 (file)
index 0000000..1acf03f
--- /dev/null
@@ -0,0 +1,372 @@
+/* PSPP - a program for statistical analysis.
+   Copyright (C) 2010 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
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include <data/case.h>
+#include <data/casegrouper.h>
+#include <data/casereader.h>
+
+#include <math/covariance.h>
+#include <math/categoricals.h>
+#include <math/moments.h>
+#include <gsl/gsl_matrix.h>
+#include <linreg/sweep.h>
+
+#include <libpspp/ll.h>
+
+#include <language/lexer/lexer.h>
+#include <language/lexer/variable-parser.h>
+#include <language/lexer/value-parser.h>
+#include <language/command.h>
+
+#include <data/procedure.h>
+#include <data/value.h>
+#include <data/dictionary.h>
+
+#include <language/dictionary/split-file.h>
+#include <libpspp/taint.h>
+#include <libpspp/misc.h>
+
+#include <gsl/gsl_cdf.h>
+#include <math.h>
+#include <data/format.h>
+
+#include <libpspp/message.h>
+
+#include <output/tab.h>
+
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+
+struct glm_spec
+{
+  size_t n_dep_vars;
+  const struct variable **dep_vars;
+
+  size_t n_factor_vars;
+  const struct variable **factor_vars;
+
+  enum mv_class exclude;
+
+  /* The weight variable */
+  const struct variable *wv;
+
+  bool intercept;
+};
+
+struct glm_workspace
+{
+  double total_ssq;
+  struct moments *totals;
+};
+
+static void output_glm (const struct glm_spec *, const struct glm_workspace *ws);
+static void run_glm (const struct glm_spec *cmd, struct casereader *input, const struct dataset *ds);
+
+int
+cmd_glm (struct lexer *lexer, struct dataset *ds)
+{
+  const struct dictionary *dict = dataset_dict (ds);  
+  struct glm_spec glm ;
+  glm.n_dep_vars = 0;
+  glm.n_factor_vars = 0;
+  glm.dep_vars = NULL;
+  glm.factor_vars = NULL;
+  glm.exclude = MV_ANY;
+  glm.intercept = true;
+  glm.wv = dict_get_weight (dict);
+
+  
+  if (!parse_variables_const (lexer, dict,
+                             &glm.dep_vars, &glm.n_dep_vars,
+                             PV_NO_DUPLICATE | PV_NUMERIC))
+    goto error;
+
+  lex_force_match (lexer, T_BY);
+
+  if (!parse_variables_const (lexer, dict,
+                             &glm.factor_vars, &glm.n_factor_vars,
+                             PV_NO_DUPLICATE | PV_NUMERIC))
+    goto error;
+
+  if ( glm.n_dep_vars > 1)
+    {
+      msg (ME, _("Multivariate analysis is not yet implemented"));
+      return CMD_FAILURE;
+    }
+
+  struct const_var_set *factors = const_var_set_create_from_array (glm.factor_vars, glm.n_factor_vars);
+
+
+  while (lex_token (lexer) != '.')
+    {
+      lex_match (lexer, '/');
+
+      if (lex_match_id (lexer, "MISSING"))
+        {
+          lex_match (lexer, '=');
+          while (lex_token (lexer) != '.' && lex_token (lexer) != '/')
+            {
+             if (lex_match_id (lexer, "INCLUDE"))
+               {
+                 glm.exclude = MV_SYSTEM;
+               }
+             else if (lex_match_id (lexer, "EXCLUDE"))
+               {
+                 glm.exclude = MV_ANY;
+               }
+             else
+               {
+                  lex_error (lexer, NULL);
+                 goto error;
+               }
+           }
+       }
+      else if (lex_match_id (lexer, "INTERCEPT"))
+        {
+          lex_match (lexer, '=');
+          while (lex_token (lexer) != '.' && lex_token (lexer) != '/')
+            {
+             if (lex_match_id (lexer, "INCLUDE"))
+               {
+                 glm.intercept = true;
+               }
+             else if (lex_match_id (lexer, "EXCLUDE"))
+               {
+                 glm.intercept = false;
+               }
+             else
+               {
+                  lex_error (lexer, NULL);
+                 goto error;
+               }
+           }
+       }
+      else if (lex_match_id (lexer, "DESIGN"))
+        {
+         size_t n_des;
+         const struct variable **des;
+          lex_match (lexer, '=');
+
+         parse_const_var_set_vars (lexer, factors, &des, &n_des, 0);
+       }
+      else
+       {
+         lex_error (lexer, NULL);
+         goto error;
+       }
+    }
+
+
+  {
+    struct casegrouper *grouper;
+    struct casereader *group;
+    bool ok;
+
+    grouper = casegrouper_create_splits (proc_open (ds), dict);
+    while (casegrouper_get_next_group (grouper, &group))
+      run_glm (&glm, group, ds);
+    ok = casegrouper_destroy (grouper);
+    ok = proc_commit (ds) && ok;
+  }
+
+  return CMD_SUCCESS;
+
+ error:
+  return CMD_FAILURE;
+}
+
+static  void dump_matrix (const gsl_matrix *m);
+
+static void
+run_glm (const struct glm_spec *cmd, struct casereader *input, const struct dataset *ds)
+{
+  int v;
+  struct taint *taint;
+  struct dictionary *dict = dataset_dict (ds);
+  struct casereader *reader;
+  struct ccase *c;
+
+  struct glm_workspace ws;
+
+  struct categoricals *cats = categoricals_create (cmd->factor_vars, cmd->n_factor_vars,
+                                                  cmd->wv, cmd->exclude, 
+                                                  NULL, NULL,
+                                                  NULL, NULL);
+  
+  struct covariance *cov = covariance_2pass_create (cmd->n_dep_vars, cmd->dep_vars,
+                                              cats, 
+                                              cmd->wv, cmd->exclude);
+
+
+  c = casereader_peek (input, 0);
+  if (c == NULL)
+    {
+      casereader_destroy (input);
+      return;
+    }
+  output_split_file_values (ds, c);
+  case_unref (c);
+
+  taint = taint_clone (casereader_get_taint (input));
+
+  ws.totals = moments_create (MOMENT_VARIANCE);
+
+  bool warn_bad_weight = true;
+  for (reader = casereader_clone (input);
+       (c = casereader_read (reader)) != NULL; case_unref (c))
+    {
+      double weight = dict_get_case_weight (dict, c, &warn_bad_weight);
+
+      for ( v = 0; v < cmd->n_dep_vars; ++v)
+       moments_pass_one (ws.totals, case_data (c, cmd->dep_vars[v])->f, weight);
+
+      covariance_accumulate_pass1 (cov, c);
+    }
+  casereader_destroy (reader);
+
+  categoricals_done (cats);
+
+  for (reader = casereader_clone (input);
+       (c = casereader_read (reader)) != NULL; case_unref (c))
+    {
+      double weight = dict_get_case_weight (dict, c, &warn_bad_weight);
+
+      for ( v = 0; v < cmd->n_dep_vars; ++v)
+       moments_pass_two (ws.totals, case_data (c, cmd->dep_vars[v])->f, weight);
+
+      covariance_accumulate_pass2 (cov, c);
+    }
+  casereader_destroy (reader);
+
+  {
+    gsl_matrix *cm = covariance_calculate_unnormalized (cov);
+
+    dump_matrix (cm);
+
+    ws.total_ssq = gsl_matrix_get (cm, 0, 0);
+
+    reg_sweep (cm, 0);
+
+    dump_matrix (cm);
+  }
+
+  if (!taint_has_tainted_successor (taint))
+    output_glm (cmd, &ws);
+
+  taint_destroy (taint);
+}
+
+static void
+output_glm (const struct glm_spec *cmd, const struct glm_workspace *ws)
+{
+  const struct fmt_spec *wfmt = cmd->wv ? var_get_print_format (cmd->wv) : &F_8_0;
+
+  int f;
+  int r;
+  const int heading_columns = 1;
+  const int heading_rows = 1;
+  struct tab_table *t ;
+
+  const int nc = 6;
+  int nr = heading_rows + 4 + cmd->n_factor_vars;
+  if (cmd->intercept)
+    nr++;
+
+  t = tab_create (nc, nr);
+  tab_title (t, _("Tests of Between-Subjects Effects"));
+
+  tab_headers (t, heading_columns, 0, heading_rows, 0);
+
+  tab_box (t,
+          TAL_2, TAL_2,
+          -1, TAL_1,
+          0, 0,
+          nc - 1, nr - 1);
+
+  tab_hline (t, TAL_2, 0, nc - 1, heading_rows);
+  tab_vline (t, TAL_2, heading_columns, 0, nr - 1);
+
+  tab_text (t, 0, 0, TAB_CENTER | TAT_TITLE, _("Source"));
+
+  /* TRANSLATORS: The parameter is a roman numeral */
+  tab_text_format (t, 1, 0, TAB_CENTER | TAT_TITLE, _("Type %s Sum of Squares"), "III");
+  tab_text (t, 2, 0, TAB_CENTER | TAT_TITLE, _("df"));
+  tab_text (t, 3, 0, TAB_CENTER | TAT_TITLE, _("Mean Square"));
+  tab_text (t, 4, 0, TAB_CENTER | TAT_TITLE, _("F"));
+  tab_text (t, 5, 0, TAB_CENTER | TAT_TITLE, _("Sig."));
+
+  r = heading_rows;
+  tab_text (t, 0, r++, TAB_LEFT | TAT_TITLE, _("Corrected Model"));
+
+  double intercept, n_total;
+  if (cmd->intercept)
+    {
+      double mean;
+      moments_calculate (ws->totals, &n_total, &mean, NULL, NULL, NULL);
+      intercept = pow2 (mean * n_total) / n_total;
+
+      tab_text (t, 0, r, TAB_LEFT | TAT_TITLE, _("Intercept"));
+      tab_double (t, 1, r, 0, intercept, NULL);
+      tab_double (t, 2, r, 0, 1.00, wfmt);
+
+      tab_double (t, 3, r, 0, intercept / 1.0 , NULL);
+      r++;
+    }
+
+  for (f = 0; f < cmd->n_factor_vars; ++f)
+    {
+      tab_text (t, 0, r++, TAB_LEFT | TAT_TITLE,
+               var_to_string (cmd->factor_vars[f]));
+    }
+
+  tab_text (t, 0, r++, TAB_LEFT | TAT_TITLE, _("Error"));
+
+  if (cmd->intercept)
+    {
+      double ssq = intercept + ws->total_ssq;
+      double mse = ssq / n_total;
+      tab_text (t, 0, r, TAB_LEFT | TAT_TITLE, _("Total"));
+      tab_double (t, 1, r, 0, ssq, NULL);
+      tab_double (t, 2, r, 0, n_total, wfmt);
+
+      r++;
+    }
+
+  tab_text (t, 0, r, TAB_LEFT | TAT_TITLE, _("Corrected Total"));
+
+  tab_double (t, 1, r, 0, ws->total_ssq, NULL);
+  tab_double (t, 2, r, 0, n_total - 1.0, wfmt);
+
+  tab_submit (t);
+}
+
+static 
+void dump_matrix (const gsl_matrix *m)
+{
+  size_t i, j;
+  for (i = 0; i < m->size1; ++i)
+    {
+      for (j = 0; j < m->size2; ++j)
+       {
+         double x = gsl_matrix_get (m, i, j);
+         printf ("%.3f ", x);
+       }
+      printf ("\n");
+    }
+  printf ("\n");
+}
diff --git a/src/language/stats/glm.q b/src/language/stats/glm.q
deleted file mode 100644 (file)
index 5f20a2e..0000000
+++ /dev/null
@@ -1,397 +0,0 @@
-/* PSPP - a program for statistical analysis.
-   Copyright (C) 2007, 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
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>. */
-
-#include <config.h>
-
-#include <gsl/gsl_cdf.h>
-#include <gsl/gsl_matrix.h>
-#include <gsl/gsl_vector.h>
-#include <math.h>
-#include <stdlib.h>
-
-#include <data/case.h>
-#include <data/casegrouper.h>
-#include <data/casereader.h>
-#include <data/dictionary.h>
-#include <data/missing-values.h>
-#include <data/procedure.h>
-#include <data/transformations.h>
-#include <data/value-labels.h>
-#include <data/variable.h>
-#include <language/command.h>
-#include <language/dictionary/split-file.h>
-#include <language/data-io/file-handle.h>
-#include <language/lexer/lexer.h>
-#include <libpspp/compiler.h>
-#include <libpspp/message.h>
-#include <math/covariance.h>
-#include <math/linreg.h>
-#include <math/moments.h>
-#include <output/tab.h>
-
-#include "xalloc.h"
-#include "gettext.h"
-
-/* (headers) */
-
-/* (specification)
-   "GLM" (glm_):
-   *dependent=custom;
-   design=custom;
-   by=varlist;
-   with=varlist.
-*/
-/* (declarations) */
-/* (functions) */
-static struct cmd_glm cmd;
-
-
-/*
-  Moments for each of the variables used.
- */
-struct moments_var
-{
-  struct moments1 *m;
-  double *weight;
-  double *mean;
-  double *variance;
-  const struct variable *v;
-};
-
-
-/*
-  Dependent variable used.
- */
-static const struct variable **v_dependent;
-
-/*
-  Number of dependent variables.
- */
-static size_t n_dependent;
-
-size_t n_inter; /* Number of interactions. */
-size_t n_members; /* Number of memebr variables in an interaction. */ 
-
-struct interaction_variable **interactions;
-
-int cmd_glm (struct lexer *lexer, struct dataset *ds);
-
-static bool run_glm (struct casereader *,
-                    struct cmd_glm *,
-                    const struct dataset *);
-/*
-  If the DESIGN subcommand was not specified, specify all possible
-  two-way interactions.
- */
-static void
-check_interactions (struct dataset *ds, struct cmd_glm *cmd)
-{
-  size_t i;
-  size_t j;
-  size_t k = 0;
-  struct variable **interaction_vars;
-
-  /* 
-     User did not specify the design matrix, so we 
-     specify it here.
-  */
-  n_inter = (cmd->n_by + cmd->n_with) * (cmd->n_by + cmd->n_with - 1) / 2;
-  interactions = xnmalloc (n_inter, sizeof (*interactions));
-  interaction_vars = xnmalloc (2, sizeof (*interaction_vars));
-  for (i = 0; i < cmd->n_by; i++)
-    {
-      for (j = i + 1; j < cmd->n_by; j++)
-       {
-         interaction_vars[0] = cmd->v_by[i];
-         interaction_vars[1] = cmd->v_by[j];
-         interactions[k] = interaction_variable_create (interaction_vars, 2);
-         k++;
-       }
-      for (j = 0; j < cmd->n_with; j++)
-       {
-         interaction_vars[0] = cmd->v_by[i];
-         interaction_vars[1] = cmd->v_with[j];
-         interactions[k] = interaction_variable_create (interaction_vars, 2);
-         k++;
-       }
-    }
-  for (i = 0; i < cmd->n_with; i++)
-    {
-      for (j = i + 1; j < cmd->n_with; j++)
-       {
-         interaction_vars[0] = cmd->v_with[i];
-         interaction_vars[1] = cmd->v_with[j];
-         interactions[k] = interaction_variable_create (interaction_vars, 2);
-         k++;
-       }
-    }
-}
-int
-cmd_glm (struct lexer *lexer, struct dataset *ds)
-{
-  struct casegrouper *grouper;
-  struct casereader *group;
-
-  bool ok;
-
-  if (!parse_glm (lexer, ds, &cmd, NULL))
-    return CMD_FAILURE;
-
-  if (!lex_match_id (lexer, "DESIGN"))
-    {
-      check_interactions (ds, &cmd);
-    }
-   /* Data pass. */
-  grouper = casegrouper_create_splits (proc_open (ds), dataset_dict (ds));
-  while (casegrouper_get_next_group (grouper, &group))
-    {
-      run_glm (group, &cmd, ds);
-    }
-  ok = casegrouper_destroy (grouper);
-  ok = proc_commit (ds) && ok;
-
-  free (v_dependent);
-  return ok ? CMD_SUCCESS : CMD_FAILURE;
-}
-
-static int
-parse_interactions (struct lexer *lexer, const struct variable **interaction_vars, int n_members,
-                   int max_members, struct dataset *ds)
-{
-  if (lex_match (lexer, '*'))
-    {
-      if (n_members > max_members)
-       {
-         max_members *= 2;
-         xnrealloc (interaction_vars, max_members, sizeof (*interaction_vars));
-       }
-      interaction_vars[n_members] = parse_variable (lexer, dataset_dict (ds));
-      parse_interactions (lexer, interaction_vars, n_members++, max_members, ds);
-    }
-  return n_members;
-}
-/* Parser for the design subcommand. */
-static int
-glm_custom_design (struct lexer *lexer, struct dataset *ds,
-                  struct cmd_glm *cmd UNUSED, void *aux UNUSED)
-{
-  size_t n_allocated = 2;
-  size_t n_members;
-  struct variable **interaction_vars;
-  struct variable *this_var;
-
-  interactions = xnmalloc (n_allocated, sizeof (*interactions));
-  n_inter = 1;
-  while (lex_token (lexer) != T_STOP && lex_token (lexer) != '.')
-    {
-      this_var = parse_variable (lexer, dataset_dict (ds));
-      if (lex_match (lexer, '('))
-       {
-         lex_force_match (lexer, ')');
-       }
-      else if (lex_match (lexer, '*'))
-       {
-         interaction_vars = xnmalloc (2 * n_inter, sizeof (*interaction_vars));
-         n_members = parse_interactions (lexer, interaction_vars, 1, 2 * n_inter, ds);
-         if (n_allocated < n_inter)
-           {
-             n_allocated *= 2;
-             xnrealloc (interactions, n_allocated, sizeof (*interactions));
-           }
-         interactions [n_inter - 1] = 
-           interaction_variable_create (interaction_vars, n_members);
-         n_inter++;
-         free (interaction_vars);
-       }
-    }
-  return 1;
-}
-/* Parser for the dependent sub command */
-static int
-glm_custom_dependent (struct lexer *lexer, struct dataset *ds,
-                     struct cmd_glm *cmd UNUSED, void *aux UNUSED)
-{
-  const struct dictionary *dict = dataset_dict (ds);
-  size_t i;
-
-  if ((lex_token (lexer) != T_ID
-       || dict_lookup_var (dict, lex_tokid (lexer)) == NULL)
-      && lex_token (lexer) != T_ALL)
-    return 2;
-
-  if (!parse_variables_const (lexer, dict, &v_dependent, &n_dependent, PV_NONE))
-    {
-      free (v_dependent);
-      return 0;
-    }
-  for (i = 0; i < n_dependent; i++)
-    {
-      assert (var_is_numeric (v_dependent[i]));
-    }
-  assert (n_dependent);
-  if (n_dependent > 1)
-    msg (SE, _("Multivariate GLM not yet supported"));
-  n_dependent = 1;             /* Drop this line after adding support for multivariate GLM. */
-
-  return 1;
-}
-
-static linreg *
-fit_model (const struct covariance *cov,
-          const struct variable *dep_var, 
-          const struct variable ** indep_vars, 
-          size_t n_data, size_t n_indep)
-{
-  linreg *result = NULL;
-  
-  return result;
-}
-
-static bool
-run_glm (struct casereader *input,
-        struct cmd_glm *cmd,
-        const struct dataset *ds)
-{
-  casenumber row;
-  const struct variable **numerics = NULL;
-  const struct variable **categoricals = NULL;
-  int n_indep = 0;
-  linreg *model = NULL; 
-  pspp_linreg_opts lopts;
-  struct ccase *c;
-  size_t i;
-  size_t n_data;               /* Number of valid cases. */
-  size_t n_categoricals = 0;
-  size_t n_numerics;
-  struct casereader *reader;
-  struct covariance *cov;
-
-  c = casereader_peek (input, 0);
-  if (c == NULL)
-    {
-      casereader_destroy (input);
-      return true;
-    }
-  output_split_file_values (ds, c);
-  case_unref (c);
-
-  if (!v_dependent)
-    {
-      dict_get_vars (dataset_dict (ds), &v_dependent, &n_dependent,
-                    1u << DC_SYSTEM);
-    }
-
-  lopts.get_depvar_mean_std = 1;
-
-  lopts.get_indep_mean_std = xnmalloc (n_dependent, sizeof (int));
-
-
-  n_numerics = n_dependent;
-  for (i = 0; i < cmd->n_with; i++)
-    {
-      if (var_is_alpha (cmd->v_with[i]))
-       {
-         n_categoricals++;
-       }
-      else
-       {
-         n_numerics++;
-       }
-    }
-  for (i = 0; i < cmd->n_by; i++)
-    {
-      if (var_is_alpha (cmd->v_by[i]))
-       {
-         n_categoricals++;
-       }
-      else
-       {
-         n_numerics++;
-       }
-    }
-  numerics = xnmalloc (n_numerics, sizeof *numerics);
-  categoricals = xnmalloc (n_categoricals, sizeof (*categoricals));
-  size_t j = 0;
-  size_t k = 0;
-  for (i = 0; i < cmd->n_by; i++)
-    {
-      if (var_is_alpha (cmd->v_by[i]))
-       {
-         categoricals[j] = cmd->v_by[i];
-         j++;
-       }
-      else
-       {
-         numerics[k] = cmd->v_by[i];
-         k++;
-       }
-    }
-  for (i = 0; i < cmd->n_with; i++)
-    {
-      if (var_is_alpha (cmd->v_with[i]))
-       {
-         categoricals[j] = cmd->v_with[i];
-         j++;
-       }
-      else
-       {
-         numerics[k] = cmd->v_with[i];
-         k++;
-       }
-    }
-  for (i = 0; i < n_dependent; i++)
-    {
-      numerics[k] = v_dependent[i];
-      k++;
-    }
-
-  cov = covariance_2pass_create (n_numerics, numerics, n_categoricals, categoricals, NULL, MV_NEVER);
-
-  reader = casereader_clone (input);
-  reader = casereader_create_filter_missing (reader, numerics, n_numerics,
-                                            MV_ANY, NULL, NULL);
-  reader = casereader_create_filter_missing (reader, categoricals, n_categoricals,
-                                            MV_ANY, NULL, NULL);
-  struct casereader *r = casereader_clone (reader);
-
-  reader = casereader_create_counter (reader, &row, -1);
-  
-  for (; (c = casereader_read (reader)) != NULL; case_unref (c))
-    {
-      covariance_accumulate_pass1 (cov, c);
-    }
-  for (; (c = casereader_read (r)) != NULL; case_unref (c))
-    {
-      covariance_accumulate_pass2 (cov, c);
-    }
-
-  covariance_destroy (cov);
-  casereader_destroy (reader);
-  casereader_destroy (r);
-  
-  free (numerics);
-  free (categoricals);
-  free (lopts.get_indep_mean_std);
-  casereader_destroy (input);
-
-  return true;
-}
-
-/*
-  Local Variables:   
-  mode: c
-  End:
-*/
diff --git a/src/language/stats/kruskal-wallis.c b/src/language/stats/kruskal-wallis.c
new file mode 100644 (file)
index 0000000..ea8fe8c
--- /dev/null
@@ -0,0 +1,350 @@
+/* Pspp - a program for statistical analysis.
+   Copyright (C) 2010 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
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>. */
+
+
+#include <config.h>
+
+#include "kruskal-wallis.h"
+
+#include <gsl/gsl_cdf.h>
+#include <math.h>
+
+#include <data/casereader.h>
+#include <data/casewriter.h>
+#include <data/dictionary.h>
+#include <data/format.h>
+#include <data/procedure.h>
+#include <data/subcase.h>
+#include <data/variable.h>
+
+#include <libpspp/assertion.h>
+#include <libpspp/message.h>
+#include <libpspp/misc.h>
+#include <libpspp/hmap.h>
+#include <math/sort.h>
+
+
+#include "minmax.h"
+#include "xalloc.h"
+
+
+/* Returns true iff the independent variable lies in the range [nst->val1, nst->val2] */
+static bool
+include_func (const struct ccase *c, void *aux)
+{
+  const struct n_sample_test *nst = aux;
+
+  if (0 < value_compare_3way (&nst->val1, case_data (c, nst->indep_var), var_get_width (nst->indep_var)))
+    return false;
+
+  if (0 > value_compare_3way (&nst->val2, case_data (c, nst->indep_var), var_get_width (nst->indep_var)))
+    return false;
+
+  return true;
+}
+
+
+struct rank_entry
+{
+  struct hmap_node node;
+  union value group;
+
+  double sum_of_ranks;
+  double n;
+};
+
+/* Return the entry with the key GROUP or null if there is no such entry */
+static struct rank_entry *
+find_rank_entry (const struct hmap *map, const union value *group, size_t width)
+{
+  struct rank_entry *re = NULL;
+  size_t hash  = value_hash (group, width, 0);
+
+  HMAP_FOR_EACH_WITH_HASH (re, struct rank_entry, node, hash, map)
+    {
+      if (0 == value_compare_3way (group, &re->group, width))
+       return re;
+    }
+  
+  return re;
+}
+
+/* Calculates the adjustment necessary for tie compensation */
+static void
+distinct_callback (double v UNUSED, casenumber t, double w UNUSED, void *aux)
+{
+  double *tiebreaker = aux;
+
+  *tiebreaker += pow3 (t) - t;
+}
+
+
+struct kw
+{
+  struct hmap map;
+  double h;
+};
+
+static void show_ranks_box (const struct n_sample_test *nst, const struct kw *kw, int n_groups);
+static void show_sig_box (const struct n_sample_test *nst, const struct kw *kw);
+
+void
+kruskal_wallis_execute (const struct dataset *ds,
+                       struct casereader *input,
+                       enum mv_class exclude,
+                       const struct npar_test *test,
+                       bool exact UNUSED,
+                       double timer UNUSED)
+{
+  int i;
+  struct ccase *c;
+  bool warn = true;
+  const struct dictionary *dict = dataset_dict (ds);
+  const struct n_sample_test *nst = UP_CAST (test, const struct n_sample_test, parent);
+  const struct caseproto *proto ;
+  size_t rank_idx ;
+
+  int total_n_groups = 0.0;
+
+  struct kw *kw = xcalloc (nst->n_vars, sizeof *kw);
+
+  /* If the independent variable is missing, then we ignore the case */
+  input = casereader_create_filter_missing (input, 
+                                           &nst->indep_var, 1,
+                                           exclude,
+                                           NULL, NULL);
+
+  input = casereader_create_filter_weight (input, dict, &warn, NULL);
+
+  /* Remove all those cases which are outside the range (val1, val2) */
+  input = casereader_create_filter_func (input, include_func, NULL, 
+       CONST_CAST (struct n_sample_test *, nst), NULL);
+
+  proto = casereader_get_proto (input);
+  rank_idx = caseproto_get_n_widths (proto);
+
+  /* Rank cases by the v value */
+  for (i = 0; i < nst->n_vars; ++i)
+    {
+      double tiebreaker = 0.0;
+      bool warn = true;
+      enum rank_error rerr = 0;
+      struct casereader *rr;
+      struct casereader *r = casereader_clone (input);
+
+      r = sort_execute_1var (r, nst->vars[i]);
+
+      /* Ignore missings in the test variable */
+      r = casereader_create_filter_missing (r, &nst->vars[i], 1,
+                                           exclude,
+                                           NULL, NULL);
+
+      rr = casereader_create_append_rank (r, 
+                                         nst->vars[i],
+                                         dict_get_weight (dict),
+                                         &rerr,
+                                         distinct_callback, &tiebreaker);
+
+      hmap_init (&kw[i].map);
+      for (; (c = casereader_read (rr)); case_unref (c))
+       {
+         const union value *group = case_data (c, nst->indep_var);
+         const size_t group_var_width = var_get_width (nst->indep_var);
+         struct rank_entry *rank = find_rank_entry (&kw[i].map, group, group_var_width); 
+
+         if ( NULL == rank)
+           {
+             rank = xzalloc (sizeof *rank);
+             value_clone (&rank->group, group, group_var_width);
+
+             hmap_insert (&kw[i].map, &rank->node,
+                          value_hash (&rank->group, group_var_width, 0));
+           }
+
+         rank->sum_of_ranks += case_data_idx (c, rank_idx)->f;
+         rank->n += dict_get_case_weight (dict, c, &warn);
+
+         /* If this assertion fires, then either the data wasn't sorted or some other
+            problem occured */
+         assert (rerr == 0);
+       }
+
+      casereader_destroy (rr);
+
+      /* Calculate the value of h */
+      {
+       struct rank_entry *mre;
+       double n = 0.0;
+
+       HMAP_FOR_EACH (mre, struct rank_entry, node, &kw[i].map)
+         {
+           kw[i].h += pow2 (mre->sum_of_ranks) / mre->n;
+           n += mre->n;
+
+           total_n_groups ++;
+         }
+       kw[i].h *= 12 / (n * ( n + 1));
+       kw[i].h -= 3 * (n + 1) ; 
+
+       kw[i].h /= 1 - tiebreaker/ (pow3 (n) - n);
+      }
+    }
+
+  casereader_destroy (input);
+  
+  show_ranks_box (nst, kw, total_n_groups);
+  show_sig_box (nst, kw);
+
+  /* Cleanup allocated memory */
+  for (i = 0 ; i < nst->n_vars; ++i)
+    {
+      struct rank_entry *mre, *next;
+      HMAP_FOR_EACH_SAFE (mre, next, struct rank_entry, node, &kw[i].map)
+       {
+         hmap_delete (&kw[i].map, &mre->node);
+         free (mre);
+       }
+      hmap_destroy (&kw[i].map);
+    }
+
+  free (kw);
+}
+
+\f
+#include <output/tab.h>
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+
+
+static void
+show_ranks_box (const struct n_sample_test *nst, const struct kw *kw, int n_groups)
+{
+  int row;
+  int i;
+  const int row_headers = 2;
+  const int column_headers = 1;
+  struct tab_table *table =
+    tab_create (row_headers + 2, column_headers + n_groups + nst->n_vars);
+
+  tab_headers (table, row_headers, 0, column_headers, 0);
+
+  tab_title (table, _("Ranks"));
+
+  /* Vertical lines inside the box */
+  tab_box (table, 1, 0, -1, TAL_1,
+          row_headers, 0, tab_nc (table) - 1, tab_nr (table) - 1 );
+
+  /* Box around the table */
+  tab_box (table, TAL_2, TAL_2, -1, -1,
+          0,  0, tab_nc (table) - 1, tab_nr (table) - 1 );
+
+  tab_text (table, 1, 0, TAT_TITLE, 
+           var_to_string (nst->indep_var)
+           );
+
+  tab_text (table, 3, 0, 0, _("Mean Rank"));
+  tab_text (table, 2, 0, 0, _("N"));
+
+  tab_hline (table, TAL_2, 0, tab_nc (table) -1, column_headers);
+  tab_vline (table, TAL_2, row_headers, 0, tab_nr (table) - 1);
+
+
+  row = column_headers;
+  for (i = 0 ; i < nst->n_vars ; ++i)
+    {
+      int tot = 0;
+      const struct rank_entry *re;
+
+      if (i > 0)
+       tab_hline (table, TAL_1, 0, tab_nc (table) -1, row);
+      
+      tab_text (table,  0, row,
+               TAT_TITLE, var_to_string (nst->vars[i]));
+
+      HMAP_FOR_EACH (re, const struct rank_entry, node, &kw[i].map)
+       {
+         struct string str;
+         ds_init_empty (&str);
+
+         var_append_value_name (nst->indep_var, &re->group, &str);
+
+         tab_text   (table, 1, row, TAB_LEFT, ds_cstr (&str));
+         tab_double (table, 2, row, TAB_LEFT, re->n, &F_8_0);
+         tab_double (table, 3, row, TAB_LEFT, re->sum_of_ranks / re->n, 0);
+
+         tot += re->n;
+         row++;
+         ds_destroy (&str);
+       }
+      tab_double (table, 2, row, TAB_LEFT,
+                 tot, &F_8_0);
+      tab_text (table, 1, row++, TAB_LEFT, _("Total"));
+    }
+
+  tab_submit (table);
+}
+
+
+static void
+show_sig_box (const struct n_sample_test *nst, const struct kw *kw)
+{
+  int i;
+  const int row_headers = 1;
+  const int column_headers = 1;
+  struct tab_table *table =
+    tab_create (row_headers + nst->n_vars * 2, column_headers + 3);
+
+  tab_headers (table, row_headers, 0, column_headers, 0);
+
+  tab_title (table, _("Test Statistics"));
+
+  tab_text (table,  0, column_headers,
+           TAT_TITLE | TAB_LEFT , _("Chi-Square"));
+
+  tab_text (table,  0, 1 + column_headers,
+           TAT_TITLE | TAB_LEFT, _("df"));
+
+  tab_text (table,  0, 2 + column_headers,
+           TAT_TITLE | TAB_LEFT, _("Asymp. Sig."));
+
+  /* Box around the table */
+  tab_box (table, TAL_2, TAL_2, -1, -1,
+          0,  0, tab_nc (table) - 1, tab_nr (table) - 1 );
+
+
+  tab_hline (table, TAL_2, 0, tab_nc (table) -1, column_headers);
+  tab_vline (table, TAL_2, row_headers, 0, tab_nr (table) - 1);
+
+  for (i = 0 ; i < nst->n_vars; ++i)
+    {
+      const double df = hmap_count (&kw[i].map) - 1;
+      tab_text (table, column_headers + 1 + i, 0, TAT_TITLE, 
+               var_to_string (nst->vars[i])
+               );
+
+      tab_double (table, column_headers + 1 + i, 1, 0,
+                 kw[i].h, 0);
+
+      tab_double (table, column_headers + 1 + i, 2, 0,
+                 df, &F_8_0);
+
+      tab_double (table, column_headers + 1 + i, 3, 0,
+                 gsl_cdf_chisq_Q (kw[i].h, df),
+                 0);
+    }
+
+  tab_submit (table);
+}
diff --git a/src/language/stats/kruskal-wallis.h b/src/language/stats/kruskal-wallis.h
new file mode 100644 (file)
index 0000000..6194759
--- /dev/null
@@ -0,0 +1,42 @@
+/* PSPP - a program for statistical analysis.
+   Copyright (C) 2010 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
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>. */
+
+#if !kruskal_wallis_h
+#define kruskal_wallis_h 1
+
+#include <stddef.h>
+#include <stdbool.h>
+#include <language/stats/npar.h>
+#include <data/case.h>
+
+
+struct kruskal_wallis_test
+{
+  struct two_sample_test parent;
+};
+
+struct casereader;
+struct dataset;
+
+void kruskal_wallis_execute (const struct dataset *ds,
+                      struct casereader *input,
+                      enum mv_class exclude,
+                      const struct npar_test *test,
+                      bool exact,
+                      double timer
+                      );
+
+#endif
index 4ed897ee3a6e172fbb80ab9fe0c5a90ec738af6c..2341761fd7df3e7e144da7c14b2311bd76a55440 100644 (file)
@@ -36,18 +36,18 @@ npar_summary_calc_descriptives (struct descriptives *desc,
                                struct casereader *input,
                                const struct dictionary *dict,
                                const struct variable *const *vv,
-                               int n_vars UNUSED,
+                               int n_vars,
                                 enum mv_class filter)
 {
   int i = 0;
-  while (*vv)
+  for (i = 0 ; i < n_vars; ++i)
     {
       double minimum = DBL_MAX;
       double maximum = -DBL_MAX;
       double var;
       struct moments1 *moments = moments1_create (MOMENT_VARIANCE);
       struct ccase *c;
-      const struct variable *v = *vv++;
+      const struct variable *v = vv[i];
       struct casereader *pass;
 
       pass = casereader_clone (input);
@@ -78,9 +78,8 @@ npar_summary_calc_descriptives (struct descriptives *desc,
 
       desc[i].min = minimum;
       desc[i].max = maximum;
-
-      i++;
     }
+
   casereader_destroy (input);
 }
 
diff --git a/src/language/stats/npar.c b/src/language/stats/npar.c
new file mode 100644 (file)
index 0000000..5898535
--- /dev/null
@@ -0,0 +1,954 @@
+/* PSPP - a program for statistical analysis. -*-c-*-
+   Copyright (C) 2006, 2008, 2009, 2010 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
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include <language/stats/npar.h>
+#include "npar-summary.h"
+
+#include <stdlib.h>
+#include <math.h>
+
+#include "xalloc.h"
+
+#include <data/case.h>
+#include <data/casegrouper.h>
+#include <data/casereader.h>
+#include <data/dictionary.h>
+#include <data/procedure.h>
+#include <data/settings.h>
+#include <data/variable.h>
+#include <libpspp/assertion.h>
+#include <libpspp/cast.h>
+#include <libpspp/hmapx.h>
+#include <libpspp/hash-functions.h>
+#include <libpspp/message.h>
+#include <libpspp/pool.h>
+#include <libpspp/str.h>
+#include <libpspp/taint.h>
+#include <language/command.h>
+#include <language/lexer/lexer.h>
+#include <language/lexer/variable-parser.h>
+#include <language/lexer/value-parser.h>
+#include <language/stats/binomial.h>
+#include <language/stats/chisquare.h>
+#include <language/stats/kruskal-wallis.h>
+#include <language/stats/wilcoxon.h>
+#include <language/stats/sign.h>
+#include <math/moments.h>
+
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+
+/* Settings for subcommand specifiers. */
+enum missing_type
+  {
+    MISS_ANALYSIS,
+    MISS_LISTWISE,
+  };
+
+/* Array indices for STATISTICS subcommand. */
+enum
+  {
+    NPAR_ST_DESCRIPTIVES = 0,
+    NPAR_ST_QUARTILES = 1,
+    NPAR_ST_ALL = 2,
+    NPAR_ST_count
+  };
+
+/* NPAR TESTS structure. */
+struct cmd_npar_tests
+  {
+    /* Count variables indicating how many
+       of the subcommands have been given. */
+    int chisquare;
+    int binomial;
+    int wilcoxon;
+    int sign;
+    int kruskal_wallis;
+    int missing;
+    int method;
+    int statistics;
+
+    /* How missing values should be treated */
+    long miss;
+
+    /* Which statistics have been requested */
+    int a_statistics[NPAR_ST_count];
+  };
+
+
+struct npar_specs
+{
+  struct pool *pool;
+  struct npar_test **test;
+  size_t n_tests;
+
+  const struct variable **vv; /* Compendium of all variables
+                                 (those mentioned on ANY subcommand */
+  int n_vars; /* Number of variables in vv */
+
+  enum mv_class filter;    /* Missing values to filter. */
+
+  bool descriptives;       /* Descriptive statistics should be calculated */
+  bool quartiles;          /* Quartiles should be calculated */
+
+  bool exact;  /* Whether exact calculations have been requested */
+  double timer;   /* Maximum time (in minutes) to wait for exact calculations */
+};
+
+
+/* Prototype for custom subcommands of NPAR TESTS. */
+static int npar_chisquare (struct lexer *, struct dataset *, struct npar_specs *);
+static int npar_binomial (struct lexer *, struct dataset *,  struct npar_specs *);
+static int npar_wilcoxon (struct lexer *, struct dataset *, struct npar_specs *);
+static int npar_sign (struct lexer *, struct dataset *, struct npar_specs *);
+static int npar_kruskal_wallis (struct lexer *, struct dataset *, struct npar_specs *);
+static int npar_method (struct lexer *, struct npar_specs *);
+
+/* Command parsing functions. */
+static int parse_npar_tests (struct lexer *lexer, struct dataset *ds, struct cmd_npar_tests *p,
+                            struct npar_specs *npar_specs );
+
+static int
+parse_npar_tests (struct lexer *lexer, struct dataset *ds, struct cmd_npar_tests *npt,
+                 struct npar_specs *nps)
+{
+  npt->chisquare = 0;
+  npt->binomial = 0;
+  npt->wilcoxon = 0;
+  npt->sign = 0;
+  npt->missing = 0;
+  npt->miss = MISS_ANALYSIS;
+  npt->method = 0;
+  npt->statistics = 0;
+  memset (npt->a_statistics, 0, sizeof npt->a_statistics);
+  for (;;)
+    {
+      if (lex_match_hyphenated_word (lexer, "CHISQUARE"))
+        {
+          lex_match (lexer, '=');
+          npt->chisquare++;
+          switch (npar_chisquare (lexer, ds, nps))
+            {
+            case 0:
+              goto lossage;
+            case 1:
+              break;
+            case 2:
+              lex_error (lexer, NULL);
+              goto lossage;
+            default:
+              NOT_REACHED ();
+            }
+        }
+      else if (lex_match_hyphenated_word (lexer, "BINOMIAL"))
+        {
+          lex_match (lexer, '=');
+          npt->binomial++;
+          switch (npar_binomial (lexer, ds, nps))
+            {
+            case 0:
+              goto lossage;
+            case 1:
+              break;
+            case 2:
+              lex_error (lexer, NULL);
+              goto lossage;
+            default:
+              NOT_REACHED ();
+            }
+        }
+      else if (lex_match_hyphenated_word (lexer, "K-W") ||
+              lex_match_hyphenated_word (lexer, "KRUSKAL-WALLIS"))
+        {
+          lex_match (lexer, '=');
+          npt->kruskal_wallis++;
+          switch (npar_kruskal_wallis (lexer, ds, nps))
+            {
+            case 0:
+              goto lossage;
+            case 1:
+              break;
+            case 2:
+              lex_error (lexer, NULL);
+              goto lossage;
+            default:
+              NOT_REACHED ();
+            }
+        }
+      else if (lex_match_hyphenated_word (lexer, "WILCOXON"))
+        {
+          lex_match (lexer, '=');
+          npt->wilcoxon++;
+          switch (npar_wilcoxon (lexer, ds, nps))
+            {
+            case 0:
+              goto lossage;
+            case 1:
+              break;
+            case 2:
+              lex_error (lexer, NULL);
+              goto lossage;
+            default:
+              NOT_REACHED ();
+            }
+        }
+      else if (lex_match_hyphenated_word (lexer, "SIGN"))
+        {
+          lex_match (lexer, '=');
+          npt->sign++;
+          switch (npar_sign (lexer, ds, nps))
+            {
+            case 0:
+              goto lossage;
+            case 1:
+              break;
+            case 2:
+              lex_error (lexer, NULL);
+              goto lossage;
+            default:
+              NOT_REACHED ();
+            }
+        }
+      else if (lex_match_hyphenated_word (lexer, "MISSING"))
+        {
+          lex_match (lexer, '=');
+          npt->missing++;
+          if (npt->missing > 1)
+            {
+              msg (SE, _("The %s subcommand may be given only once."), "MISSING");
+              goto lossage;
+            }
+          while (lex_token (lexer) != '/' && lex_token (lexer) != '.')
+            {
+              if (lex_match_hyphenated_word (lexer, "ANALYSIS"))
+                npt->miss = MISS_ANALYSIS;
+              else if (lex_match_hyphenated_word (lexer, "LISTWISE"))
+                npt->miss = MISS_LISTWISE;
+              else if (lex_match_hyphenated_word (lexer, "INCLUDE"))
+                nps->filter = MV_SYSTEM;
+              else if (lex_match_hyphenated_word (lexer, "EXCLUDE"))
+                nps->filter = MV_ANY;
+              else
+                {
+                  lex_error (lexer, NULL);
+                  goto lossage;
+                }
+              lex_match (lexer, ',');
+            }
+        }
+      else if (lex_match_hyphenated_word (lexer, "METHOD"))
+        {
+          lex_match (lexer, '=');
+          npt->method++;
+          if (npt->method > 1)
+            {
+              msg (SE, _("The %s subcommand may be given only once."), "METHOD");
+              goto lossage;
+            }
+          switch (npar_method (lexer, nps))
+            {
+            case 0:
+              goto lossage;
+            case 1:
+              break;
+            case 2:
+              lex_error (lexer, NULL);
+              goto lossage;
+            default:
+              NOT_REACHED ();
+            }
+        }
+      else if (lex_match_hyphenated_word (lexer, "STATISTICS"))
+        {
+          lex_match (lexer, '=');
+          npt->statistics++;
+          while (lex_token (lexer) != '/' && lex_token (lexer) != '.')
+            {
+              if (lex_match_hyphenated_word (lexer, "DESCRIPTIVES"))
+                npt->a_statistics[NPAR_ST_DESCRIPTIVES] = 1;
+              else if (lex_match_hyphenated_word (lexer, "QUARTILES"))
+                npt->a_statistics[NPAR_ST_QUARTILES] = 1;
+              else if (lex_match (lexer, T_ALL))
+                npt->a_statistics[NPAR_ST_ALL] = 1;
+              else
+                {
+                  lex_error (lexer, NULL);
+                  goto lossage;
+                }
+              lex_match (lexer, ',');
+            }
+        }
+      else if ( settings_get_syntax () != COMPATIBLE && lex_match_id (lexer, "ALGORITHM"))
+        {
+          lex_match (lexer, '=');
+          if (lex_match_id (lexer, "COMPATIBLE"))
+            settings_set_cmd_algorithm (COMPATIBLE);
+          else if (lex_match_id (lexer, "ENHANCED"))
+            settings_set_cmd_algorithm (ENHANCED);
+          }
+        if (!lex_match (lexer, '/'))
+          break;
+      }
+
+    if (lex_token (lexer) != '.')
+      {
+        lex_error (lexer, _("expecting end of command"));
+        goto lossage;
+      }
+
+  return true;
+
+lossage:
+  return false;
+}
+
+
+static void one_sample_insert_variables (const struct npar_test *test,
+                                        struct hmapx *);
+
+static void two_sample_insert_variables (const struct npar_test *test,
+                                        struct hmapx *);
+
+static void n_sample_insert_variables (const struct npar_test *test,
+                                      struct hmapx *);
+
+static void
+npar_execute (struct casereader *input,
+             const struct npar_specs *specs,
+            const struct dataset *ds)
+{
+  int t;
+  struct descriptives *summary_descriptives = NULL;
+
+  for ( t = 0 ; t < specs->n_tests; ++t )
+    {
+      const struct npar_test *test = specs->test[t];
+      if ( NULL == test->execute )
+       {
+         msg (SW, _("NPAR subcommand not currently implemented."));
+         continue;
+       }
+      test->execute (ds, casereader_clone (input), specs->filter, test, specs->exact, specs->timer);
+    }
+
+  if ( specs->descriptives )
+    {
+      summary_descriptives = xnmalloc (sizeof (*summary_descriptives),
+                                      specs->n_vars);
+
+      npar_summary_calc_descriptives (summary_descriptives,
+                                      casereader_clone (input),
+                                     dataset_dict (ds),
+                                     specs->vv, specs->n_vars,
+                                      specs->filter);
+    }
+
+  if ( (specs->descriptives || specs->quartiles)
+       && !taint_has_tainted_successor (casereader_get_taint (input)) )
+    do_summary_box (summary_descriptives, specs->vv, specs->n_vars );
+
+  free (summary_descriptives);
+  casereader_destroy (input);
+}
+
+int
+cmd_npar_tests (struct lexer *lexer, struct dataset *ds)
+{
+  struct cmd_npar_tests cmd;
+  bool ok;
+  int i;
+  struct npar_specs npar_specs = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+  struct casegrouper *grouper;
+  struct casereader *input, *group;
+  struct hmapx var_map = HMAPX_INITIALIZER (var_map);
+
+
+  npar_specs.pool = pool_create ();
+  npar_specs.filter = MV_ANY;
+  npar_specs.n_vars = -1;
+  npar_specs.vv = NULL;
+
+  if ( ! parse_npar_tests (lexer, ds, &cmd, &npar_specs) )
+    {
+      pool_destroy (npar_specs.pool);
+      return CMD_FAILURE;
+    }
+
+  for (i = 0; i < npar_specs.n_tests; ++i )
+    {
+      const struct npar_test *test = npar_specs.test[i];
+      test->insert_variables (test, &var_map);
+    }
+
+  {
+    struct hmapx_node *node;
+    struct variable *var;
+    npar_specs.n_vars = 0;
+
+    HMAPX_FOR_EACH (var, node, &var_map)
+      {
+       npar_specs.n_vars ++;
+       npar_specs.vv = pool_nrealloc (npar_specs.pool, npar_specs.vv, npar_specs.n_vars, sizeof (*npar_specs.vv));
+       npar_specs.vv[npar_specs.n_vars - 1] = var;
+      }
+  }
+
+  qsort (npar_specs.vv, npar_specs.n_vars, sizeof (*npar_specs.vv), 
+        compare_var_ptrs_by_name);
+
+  if ( cmd.statistics )
+    {
+      int i;
+
+      for ( i = 0 ; i < NPAR_ST_count; ++i )
+       {
+         if ( cmd.a_statistics[i] )
+           {
+             switch ( i )
+               {
+               case NPAR_ST_DESCRIPTIVES:
+                 npar_specs.descriptives = true;
+                 break;
+               case NPAR_ST_QUARTILES:
+                 npar_specs.quartiles = true;
+                 break;
+               case NPAR_ST_ALL:
+                 npar_specs.quartiles = true;
+                 npar_specs.descriptives = true;
+                 break;
+               default:
+                 NOT_REACHED ();
+               };
+           }
+       }
+    }
+
+  input = proc_open (ds);
+  if ( cmd.miss == MISS_LISTWISE )
+    {
+      input = casereader_create_filter_missing (input,
+                                               npar_specs.vv,
+                                               npar_specs.n_vars,
+                                               npar_specs.filter,
+                                               NULL, NULL);
+    }
+
+
+  grouper = casegrouper_create_splits (input, dataset_dict (ds));
+  while (casegrouper_get_next_group (grouper, &group))
+    npar_execute (group, &npar_specs, ds);
+  ok = casegrouper_destroy (grouper);
+  ok = proc_commit (ds) && ok;
+
+  pool_destroy (npar_specs.pool);
+  hmapx_destroy (&var_map);
+
+  return ok ? CMD_SUCCESS : CMD_CASCADING_FAILURE;
+}
+
+static int
+npar_chisquare (struct lexer *lexer, struct dataset *ds,
+               struct npar_specs *specs)
+{
+  struct chisquare_test *cstp = pool_alloc (specs->pool, sizeof (*cstp));
+  struct one_sample_test *tp = &cstp->parent;
+  struct npar_test *nt = &tp->parent;
+
+  nt->execute = chisquare_execute;
+  nt->insert_variables = one_sample_insert_variables;
+
+  if (!parse_variables_const_pool (lexer, specs->pool, dataset_dict (ds),
+                                  &tp->vars, &tp->n_vars,
+                                  PV_NO_SCRATCH | PV_NO_DUPLICATE))
+    {
+      return 2;
+    }
+
+  cstp->ranged = false;
+
+  if ( lex_match (lexer, '('))
+    {
+      cstp->ranged = true;
+      if ( ! lex_force_num (lexer)) return 0;
+      cstp->lo = lex_integer (lexer);
+      lex_get (lexer);
+      lex_force_match (lexer, ',');
+      if (! lex_force_num (lexer) ) return 0;
+      cstp->hi = lex_integer (lexer);
+      if ( cstp->lo >= cstp->hi )
+       {
+         msg (ME,
+             _("The specified value of HI (%d) is "
+               "lower than the specified value of LO (%d)"),
+             cstp->hi, cstp->lo);
+         return 0;
+       }
+      lex_get (lexer);
+      if (! lex_force_match (lexer, ')')) return 0;
+    }
+
+  cstp->n_expected = 0;
+  cstp->expected = NULL;
+  if ( lex_match (lexer, '/') )
+    {
+      if ( lex_match_id (lexer, "EXPECTED") )
+       {
+         lex_force_match (lexer, '=');
+         if ( ! lex_match_id (lexer, "EQUAL") )
+           {
+             double f;
+             int n;
+             while ( lex_is_number (lexer) )
+               {
+                 int i;
+                 n = 1;
+                 f = lex_number (lexer);
+                 lex_get (lexer);
+                 if ( lex_match (lexer, '*'))
+                   {
+                     n = f;
+                     f = lex_number (lexer);
+                     lex_get (lexer);
+                   }
+                 lex_match (lexer, ',');
+
+                 cstp->n_expected += n;
+                 cstp->expected = pool_realloc (specs->pool,
+                                                cstp->expected,
+                                                sizeof (double) *
+                                                cstp->n_expected);
+                 for ( i = cstp->n_expected - n ;
+                       i < cstp->n_expected;
+                       ++i )
+                   cstp->expected[i] = f;
+
+               }
+           }
+       }
+      else
+       lex_put_back (lexer, '/');
+    }
+
+  if ( cstp->ranged && cstp->n_expected > 0 &&
+       cstp->n_expected != cstp->hi - cstp->lo + 1 )
+    {
+      msg (ME,
+         _("%d expected values were given, but the specified "
+           "range (%d-%d) requires exactly %d values."),
+         cstp->n_expected, cstp->lo, cstp->hi,
+         cstp->hi - cstp->lo +1);
+      return 0;
+    }
+
+  specs->n_tests++;
+  specs->test = pool_realloc (specs->pool,
+                             specs->test,
+                             sizeof (*specs->test) * specs->n_tests);
+
+  specs->test[specs->n_tests - 1] = nt;
+
+  return 1;
+}
+
+
+static int
+npar_binomial (struct lexer *lexer, struct dataset *ds,
+              struct npar_specs *specs)
+{
+  struct binomial_test *btp = pool_alloc (specs->pool, sizeof (*btp));
+  struct one_sample_test *tp = &btp->parent;
+  struct npar_test *nt = &tp->parent;
+
+  nt->execute = binomial_execute;
+  nt->insert_variables = one_sample_insert_variables;
+
+  btp->category1 = btp->category2 = btp->cutpoint = SYSMIS;
+
+  btp->p = 0.5;
+
+  if ( lex_match (lexer, '(') )
+    {
+      if ( lex_force_num (lexer) )
+       {
+         btp->p = lex_number (lexer);
+         lex_get (lexer);
+         lex_force_match (lexer, ')');
+       }
+      else
+       return 0;
+    }
+  else
+    /* Kludge: q2c swallows the '=' so put it back here  */
+     lex_put_back (lexer, '=');
+
+  if (lex_match (lexer, '=') )
+    {
+      if (parse_variables_const_pool (lexer, specs->pool, dataset_dict (ds),
+                                     &tp->vars, &tp->n_vars,
+                                     PV_NUMERIC | PV_NO_SCRATCH | PV_NO_DUPLICATE) )
+       {
+         if (lex_match (lexer, '('))
+           {
+             lex_force_num (lexer);
+             btp->category1 = lex_number (lexer);
+             lex_get (lexer);
+             if ( lex_match (lexer, ','))
+               {
+                 if ( ! lex_force_num (lexer) ) return 2;
+                 btp->category2 = lex_number (lexer);
+                 lex_get (lexer);
+               }
+             else
+               {
+                 btp->cutpoint = btp->category1;
+               }
+
+             lex_force_match (lexer, ')');
+           }
+       }
+      else
+       return 2;
+
+    }
+
+  specs->n_tests++;
+  specs->test = pool_realloc (specs->pool,
+                             specs->test,
+                             sizeof (*specs->test) * specs->n_tests);
+
+  specs->test[specs->n_tests - 1] = nt;
+
+  return 1;
+}
+
+
+static bool
+parse_two_sample_related_test (struct lexer *lexer,
+                                   const struct dictionary *dict,
+                                   struct two_sample_test *test_parameters,
+                                   struct pool *pool
+                                   );
+
+
+static bool
+parse_two_sample_related_test (struct lexer *lexer,
+                              const struct dictionary *dict,
+                              struct two_sample_test *test_parameters,
+                              struct pool *pool
+                              )
+{
+  int n = 0;
+  bool paired = false;
+  bool with = false;
+  const struct variable **vlist1;
+  size_t n_vlist1;
+
+  const struct variable **vlist2;
+  size_t n_vlist2;
+
+  test_parameters->parent.insert_variables = two_sample_insert_variables;
+
+  if (!parse_variables_const_pool (lexer, pool,
+                                  dict,
+                                  &vlist1, &n_vlist1,
+                                  PV_NUMERIC | PV_NO_SCRATCH | PV_NO_DUPLICATE) )
+    return false;
+
+  if ( lex_match (lexer, T_WITH))
+    {
+      with = true;
+      if ( !parse_variables_const_pool (lexer, pool, dict,
+                                       &vlist2, &n_vlist2,
+                                       PV_NUMERIC | PV_NO_SCRATCH | PV_NO_DUPLICATE) )
+       return false;
+
+      paired = (lex_match (lexer, '(') &&
+               lex_match_id (lexer, "PAIRED") && lex_match (lexer, ')'));
+    }
+
+
+  if ( with )
+    {
+      if (paired)
+       {
+         if ( n_vlist1 != n_vlist2)
+           msg (SE, _("PAIRED was specified but the number of variables "
+                      "preceding WITH (%zu) did not match the number "
+                      "following (%zu)."), n_vlist1, n_vlist2);
+
+         test_parameters->n_pairs = n_vlist1 ;
+       }
+      else
+       {
+         test_parameters->n_pairs = n_vlist1 * n_vlist2;
+       }
+    }
+  else
+    {
+      test_parameters->n_pairs = (n_vlist1 * (n_vlist1 - 1)) / 2 ;
+    }
+
+  test_parameters->pairs =
+    pool_alloc (pool, sizeof ( variable_pair) * test_parameters->n_pairs);
+
+  if ( with )
+    {
+      if (paired)
+       {
+         int i;
+         assert (n_vlist1 == n_vlist2);
+         for ( i = 0 ; i < n_vlist1; ++i )
+           {
+             test_parameters->pairs[n][1] = vlist1[i];
+             test_parameters->pairs[n][0] = vlist2[i];
+             n++;
+           }
+       }
+      else
+       {
+         int i,j;
+         for ( i = 0 ; i < n_vlist1; ++i )
+           {
+             for ( j = 0 ; j < n_vlist2; ++j )
+               {
+                 test_parameters->pairs[n][1] = vlist1[i];
+                 test_parameters->pairs[n][0] = vlist2[j];
+                 n++;
+               }
+           }
+       }
+    }
+  else
+    {
+      int i,j;
+      for ( i = 0 ; i < n_vlist1 - 1; ++i )
+       {
+         for ( j = i + 1 ; j < n_vlist1; ++j )
+           {
+             assert ( n < test_parameters->n_pairs);
+             test_parameters->pairs[n][1] = vlist1[i];
+             test_parameters->pairs[n][0] = vlist1[j];
+             n++;
+           }
+       }
+    }
+
+  assert ( n == test_parameters->n_pairs);
+
+  return true;
+}
+
+
+static bool
+parse_n_sample_related_test (struct lexer *lexer,
+                            const struct dictionary *dict,
+                            struct n_sample_test *nst,
+                            struct pool *pool
+                            )
+{
+  if (!parse_variables_const_pool (lexer, pool,
+                                  dict,
+                                  &nst->vars, &nst->n_vars,
+                                  PV_NUMERIC | PV_NO_SCRATCH | PV_NO_DUPLICATE) )
+    return false;
+
+  if ( ! lex_force_match (lexer, T_BY))
+    return false;
+
+  nst->indep_var = parse_variable_const (lexer, dict);
+
+  if ( ! lex_force_match (lexer, '('))
+    return false;
+
+  value_init (&nst->val1, var_get_width (nst->indep_var));
+  if ( ! parse_value (lexer, &nst->val1, var_get_width (nst->indep_var)))
+    {
+      value_destroy (&nst->val1, var_get_width (nst->indep_var));
+      return false;
+    }
+
+  if ( ! lex_force_match (lexer, ','))
+    return false;
+
+  value_init (&nst->val2, var_get_width (nst->indep_var));
+  if ( ! parse_value (lexer, &nst->val2, var_get_width (nst->indep_var)))
+    {
+      value_destroy (&nst->val2, var_get_width (nst->indep_var));
+      return false;
+    }
+
+  if ( ! lex_force_match (lexer, ')'))
+    return false;
+
+  return true;
+}
+
+static int
+npar_wilcoxon (struct lexer *lexer,
+              struct dataset *ds,
+              struct npar_specs *specs )
+{
+
+
+  struct two_sample_test *tp = pool_alloc (specs->pool, sizeof (*tp));
+  struct npar_test *nt = &tp->parent;
+  nt->execute = wilcoxon_execute;
+
+  if (!parse_two_sample_related_test (lexer, dataset_dict (ds),
+                                     tp, specs->pool) )
+    return 0;
+
+  specs->n_tests++;
+  specs->test = pool_realloc (specs->pool,
+                             specs->test,
+                             sizeof (*specs->test) * specs->n_tests);
+  specs->test[specs->n_tests - 1] = nt;
+
+  return 1;
+}
+
+static int
+npar_sign (struct lexer *lexer, struct dataset *ds,
+          struct npar_specs *specs)
+{
+  struct two_sample_test *tp = pool_alloc (specs->pool, sizeof (*tp));
+  struct npar_test *nt = &tp->parent;
+
+  nt->execute = sign_execute;
+
+  if (!parse_two_sample_related_test (lexer, dataset_dict (ds),
+                                     tp, specs->pool) )
+    return 0;
+
+  specs->n_tests++;
+  specs->test = pool_realloc (specs->pool,
+                             specs->test,
+                             sizeof (*specs->test) * specs->n_tests);
+  specs->test[specs->n_tests - 1] = nt;
+
+  return 1;
+}
+
+static int
+npar_kruskal_wallis (struct lexer *lexer, struct dataset *ds,
+                     struct npar_specs *specs)
+{
+  struct n_sample_test *tp = pool_alloc (specs->pool, sizeof (*tp));
+  struct npar_test *nt = &tp->parent;
+
+  nt->insert_variables = n_sample_insert_variables;
+
+  nt->execute = kruskal_wallis_execute;
+
+  if (!parse_n_sample_related_test (lexer, dataset_dict (ds),
+                                     tp, specs->pool) )
+    return 0;
+
+  specs->n_tests++;
+  specs->test = pool_realloc (specs->pool,
+                             specs->test,
+                             sizeof (*specs->test) * specs->n_tests);
+  specs->test[specs->n_tests - 1] = nt;
+
+  return 1;
+}
+
+static void
+insert_variable_into_map (struct hmapx *var_map, const struct variable *var)
+{
+  size_t hash = hash_pointer (var, 0);
+  struct hmapx_node *node;
+  const struct variable *v = NULL;
+      
+  HMAPX_FOR_EACH_WITH_HASH (v, node, hash, var_map)
+    {
+      if ( v == var)
+       return ;
+    }
+
+  hmapx_insert (var_map, CONST_CAST (struct variable *, var), hash);
+}
+
+/* Insert the variables for TEST into VAR_MAP */
+static void
+one_sample_insert_variables (const struct npar_test *test,
+                            struct hmapx *var_map)
+{
+  int i;
+  const struct one_sample_test *ost = UP_CAST (test, const struct one_sample_test, parent);
+
+  for ( i = 0 ; i < ost->n_vars ; ++i )
+    insert_variable_into_map (var_map, ost->vars[i]);
+}
+
+
+static void
+two_sample_insert_variables (const struct npar_test *test,
+                            struct hmapx *var_map)
+{
+  int i;
+  const struct two_sample_test *tst = UP_CAST (test, const struct two_sample_test, parent);
+
+  for ( i = 0 ; i < tst->n_pairs ; ++i )
+    {
+      variable_pair *pair = &tst->pairs[i];
+
+      insert_variable_into_map (var_map, (*pair)[0]);
+      insert_variable_into_map (var_map, (*pair)[1]);
+    }
+}
+
+static void 
+n_sample_insert_variables (const struct npar_test *test,
+                          struct hmapx *var_map)
+{
+  int i;
+  const struct n_sample_test *tst = UP_CAST (test, const struct n_sample_test, parent);
+
+  for ( i = 0 ; i < tst->n_vars ; ++i )
+    insert_variable_into_map (var_map, tst->vars[i]);
+
+  insert_variable_into_map (var_map, tst->indep_var);
+}
+
+
+static int
+npar_method (struct lexer *lexer,  struct npar_specs *specs)
+{
+  if ( lex_match_id (lexer, "EXACT") )
+    {
+      specs->exact = true;
+      specs->timer = 0.0;
+      if (lex_match_id (lexer, "TIMER"))
+       {
+         specs->timer = 5.0;
+
+         if ( lex_match (lexer, '('))
+           {
+             if ( lex_force_num (lexer) )
+               {
+                 specs->timer = lex_number (lexer);
+                 lex_get (lexer);
+               }
+             lex_force_match (lexer, ')');
+           }
+       }
+    }
+
+  return 1;
+}
index 6aed01cf2c3509ff44e25d1a6052f9fc85924de7..af093ffb9993d4711387bc5542ac5a72c5b87d00 100644 (file)
 #include <stddef.h>
 #include <stdbool.h>
 #include <data/missing-values.h>
-
-#include <stddef.h>
-#include <data/missing-values.h>
+#include <data/value.h>
 
 typedef const struct variable *variable_pair[2];
 
-struct hsh_table;
-struct const_hsh_table;
+struct hmapx;
 struct casefilter;
 struct casereader;
 struct dataset;
 
+
 struct npar_test
 {
   void (*execute) (const struct dataset *,
@@ -42,9 +40,10 @@ struct npar_test
                   double);
 
   void (*insert_variables) (const struct npar_test *,
-                           struct const_hsh_table *);
+                           struct hmapx *);
 };
 
+
 struct one_sample_test
 {
   struct npar_test parent;
@@ -60,4 +59,14 @@ struct two_sample_test
 };
 
 
+struct n_sample_test
+{
+  struct npar_test parent;
+  const struct variable **vars;
+  size_t n_vars;
+
+  union value val1, val2;
+  const struct variable *indep_var;
+};
+
 #endif
diff --git a/src/language/stats/npar.q b/src/language/stats/npar.q
deleted file mode 100644 (file)
index 5357972..0000000
+++ /dev/null
@@ -1,650 +0,0 @@
-/* PSPP - a program for statistical analysis. -*-c-*-
-   Copyright (C) 2006, 2008, 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
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>. */
-
-#include <config.h>
-
-
-#include <language/stats/npar.h>
-
-#include <math.h>
-
-#include <data/case.h>
-#include <data/casegrouper.h>
-#include <data/casereader.h>
-#include <data/dictionary.h>
-#include <data/procedure.h>
-#include <language/command.h>
-#include <language/lexer/lexer.h>
-#include <language/lexer/variable-parser.h>
-#include <language/stats/binomial.h>
-#include <language/stats/chisquare.h>
-#include <language/stats/wilcoxon.h>
-#include <language/stats/sign.h>
-#include <libpspp/cast.h>
-#include <libpspp/hash.h>
-#include <libpspp/pool.h>
-#include <libpspp/taint.h>
-#include <math/moments.h>
-
-#include "npar-summary.h"
-
-#include "gettext.h"
-#define _(msgid) gettext (msgid)
-
-/* (headers) */
-
-/* (specification)
-   "NPAR TESTS" (npar_):
-   +chisquare=custom;
-   +binomial=custom;
-   +wilcoxon=custom;
-   +mcnemar=custom;
-   +sign=custom;
-   +cochran=varlist;
-   +friedman=varlist;
-   +kendall=varlist;
-   missing=miss:!analysis/listwise,
-   incl:include/!exclude;
-   method=custom;
-   +statistics[st_]=descriptives,quartiles,all.
-*/
-/* (declarations) */
-/* (functions) */
-
-
-static struct cmd_npar_tests cmd;
-
-
-struct npar_specs
-{
-  struct pool *pool;
-  struct npar_test **test;
-  size_t n_tests;
-
-  const struct variable ** vv; /* Compendium of all variables
-                                 (those mentioned on ANY subcommand */
-  int n_vars; /* Number of variables in vv */
-
-  enum mv_class filter;    /* Missing values to filter. */
-
-  bool descriptives;       /* Descriptive statistics should be calculated */
-  bool quartiles;          /* Quartiles should be calculated */
-
-  bool exact;  /* Whether exact calculations have been requested */
-  double timer;   /* Maximum time (in minutes) to wait for exact calculations */
-};
-
-static void one_sample_insert_variables (const struct npar_test *test,
-                                        struct const_hsh_table *variables);
-
-static void two_sample_insert_variables (const struct npar_test *test,
-                                        struct const_hsh_table *variables);
-
-
-
-static void
-npar_execute(struct casereader *input,
-             const struct npar_specs *specs,
-            const struct dataset *ds)
-{
-  int t;
-  struct descriptives *summary_descriptives = NULL;
-
-  for ( t = 0 ; t < specs->n_tests; ++t )
-    {
-      const struct npar_test *test = specs->test[t];
-      if ( NULL == test->execute )
-       {
-         msg (SW, _("NPAR subcommand not currently implemented."));
-         continue;
-       }
-      test->execute (ds, casereader_clone (input), specs->filter, test, specs->exact, specs->timer);
-    }
-
-  if ( specs->descriptives )
-    {
-      summary_descriptives = xnmalloc (sizeof (*summary_descriptives),
-                                      specs->n_vars);
-
-      npar_summary_calc_descriptives (summary_descriptives,
-                                      casereader_clone (input),
-                                     dataset_dict (ds),
-                                     specs->vv, specs->n_vars,
-                                      specs->filter);
-    }
-
-  if ( (specs->descriptives || specs->quartiles)
-       && !taint_has_tainted_successor (casereader_get_taint (input)) )
-    do_summary_box (summary_descriptives, specs->vv, specs->n_vars );
-
-  free (summary_descriptives);
-  casereader_destroy (input);
-}
-
-
-int
-cmd_npar_tests (struct lexer *lexer, struct dataset *ds)
-{
-  bool ok;
-  int i;
-  struct npar_specs npar_specs = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-  struct const_hsh_table *var_hash;
-  struct casegrouper *grouper;
-  struct casereader *input, *group;
-
-  npar_specs.pool = pool_create ();
-
-  var_hash = const_hsh_create_pool (npar_specs.pool, 0,
-                                   compare_vars_by_name, hash_var_by_name,
-                                   NULL, NULL);
-
-  if ( ! parse_npar_tests (lexer, ds, &cmd, &npar_specs) )
-    {
-      pool_destroy (npar_specs.pool);
-      return CMD_FAILURE;
-    }
-
-  for (i = 0; i < npar_specs.n_tests; ++i )
-    {
-      const struct npar_test *test = npar_specs.test[i];
-      test->insert_variables (test, var_hash);
-    }
-
-  npar_specs.vv = (const struct variable **) const_hsh_sort (var_hash);
-  npar_specs.n_vars = const_hsh_count (var_hash);
-
-  if ( cmd.sbc_statistics )
-    {
-      int i;
-
-      for ( i = 0 ; i < NPAR_ST_count; ++i )
-       {
-         if ( cmd.a_statistics[i] )
-           {
-             switch ( i )
-               {
-               case NPAR_ST_DESCRIPTIVES:
-                 npar_specs.descriptives = true;
-                 break;
-               case NPAR_ST_QUARTILES:
-                 npar_specs.quartiles = true;
-                 break;
-               case NPAR_ST_ALL:
-                 npar_specs.quartiles = true;
-                 npar_specs.descriptives = true;
-                 break;
-               default:
-                 NOT_REACHED();
-               };
-           }
-       }
-    }
-
-  npar_specs.filter = cmd.incl == NPAR_EXCLUDE ? MV_ANY : MV_SYSTEM;
-
-  input = proc_open (ds);
-  if ( cmd.miss == NPAR_LISTWISE )
-    {
-      input = casereader_create_filter_missing (input,
-                                               npar_specs.vv,
-                                               npar_specs.n_vars,
-                                               npar_specs.filter,
-                                               NULL, NULL);
-    }
-
-
-  grouper = casegrouper_create_splits (input, dataset_dict (ds));
-  while (casegrouper_get_next_group (grouper, &group))
-    npar_execute (group, &npar_specs, ds);
-  ok = casegrouper_destroy (grouper);
-  ok = proc_commit (ds) && ok;
-
-  const_hsh_destroy (var_hash);
-
-  pool_destroy (npar_specs.pool);
-
-  return ok ? CMD_SUCCESS : CMD_CASCADING_FAILURE;
-}
-
-int
-npar_custom_chisquare (struct lexer *lexer, struct dataset *ds,
-                      struct cmd_npar_tests *cmd UNUSED, void *aux )
-{
-  struct npar_specs *specs = aux;
-
-  struct chisquare_test *cstp = pool_alloc(specs->pool, sizeof(*cstp));
-  struct one_sample_test *tp = &cstp->parent;
-  struct npar_test *nt = &tp->parent;
-
-  nt->execute = chisquare_execute;
-  nt->insert_variables = one_sample_insert_variables;
-
-  if (!parse_variables_const_pool (lexer, specs->pool, dataset_dict (ds),
-                                  &tp->vars, &tp->n_vars,
-                                  PV_NO_SCRATCH | PV_NO_DUPLICATE))
-    {
-      return 2;
-    }
-
-  cstp->ranged = false;
-
-  if ( lex_match (lexer, '('))
-    {
-      cstp->ranged = true;
-      if ( ! lex_force_num (lexer)) return 0;
-      cstp->lo = lex_integer (lexer);
-      lex_get (lexer);
-      lex_force_match (lexer, ',');
-      if (! lex_force_num (lexer) ) return 0;
-      cstp->hi = lex_integer (lexer);
-      if ( cstp->lo >= cstp->hi )
-       {
-         msg(ME,
-             _("The specified value of HI (%d) is "
-               "lower than the specified value of LO (%d)"),
-             cstp->hi, cstp->lo);
-         return 0;
-       }
-      lex_get (lexer);
-      if (! lex_force_match (lexer, ')')) return 0;
-    }
-
-  cstp->n_expected = 0;
-  cstp->expected = NULL;
-  if ( lex_match (lexer, '/') )
-    {
-      if ( lex_match_id (lexer, "EXPECTED") )
-       {
-         lex_force_match (lexer, '=');
-         if ( ! lex_match_id (lexer, "EQUAL") )
-           {
-             double f;
-             int n;
-             while ( lex_is_number(lexer) )
-               {
-                 int i;
-                 n = 1;
-                 f = lex_number (lexer);
-                 lex_get (lexer);
-                 if ( lex_match (lexer, '*'))
-                   {
-                     n = f;
-                     f = lex_number (lexer);
-                     lex_get (lexer);
-                   }
-                 lex_match (lexer, ',');
-
-                 cstp->n_expected += n;
-                 cstp->expected = pool_realloc (specs->pool,
-                                                cstp->expected,
-                                                sizeof(double) *
-                                                cstp->n_expected);
-                 for ( i = cstp->n_expected - n ;
-                       i < cstp->n_expected;
-                       ++i )
-                   cstp->expected[i] = f;
-
-               }
-           }
-       }
-      else
-       lex_put_back (lexer, '/');
-    }
-
-  if ( cstp->ranged && cstp->n_expected > 0 &&
-       cstp->n_expected != cstp->hi - cstp->lo + 1 )
-    {
-      msg(ME,
-         _("%d expected values were given, but the specified "
-           "range (%d-%d) requires exactly %d values."),
-         cstp->n_expected, cstp->lo, cstp->hi,
-         cstp->hi - cstp->lo +1);
-      return 0;
-    }
-
-  specs->n_tests++;
-  specs->test = pool_realloc (specs->pool,
-                             specs->test,
-                             sizeof(*specs->test) * specs->n_tests);
-
-  specs->test[specs->n_tests - 1] = nt;
-
-  return 1;
-}
-
-
-int
-npar_custom_binomial (struct lexer *lexer, struct dataset *ds,
-                     struct cmd_npar_tests *cmd UNUSED, void *aux)
-{
-  struct npar_specs *specs = aux;
-  struct binomial_test *btp = pool_alloc(specs->pool, sizeof(*btp));
-  struct one_sample_test *tp = &btp->parent;
-  struct npar_test *nt = &tp->parent;
-
-  nt->execute = binomial_execute;
-  nt->insert_variables = one_sample_insert_variables;
-
-  btp->category1 = btp->category2 = btp->cutpoint = SYSMIS;
-
-  btp->p = 0.5;
-
-  if ( lex_match (lexer, '(') )
-    {
-      if ( lex_force_num (lexer) )
-       {
-         btp->p = lex_number (lexer);
-         lex_get (lexer);
-         lex_force_match (lexer, ')');
-       }
-      else
-       return 0;
-    }
-  else
-    /* Kludge: q2c swallows the '=' so put it back here  */
-     lex_put_back (lexer, '=');
-
-
-  if ( lex_match (lexer, '=') )
-    {
-      if (parse_variables_const_pool (lexer, specs->pool, dataset_dict (ds),
-                                     &tp->vars, &tp->n_vars,
-                                     PV_NUMERIC | PV_NO_SCRATCH | PV_NO_DUPLICATE) )
-       {
-         if ( lex_match (lexer, '('))
-           {
-             lex_force_num (lexer);
-             btp->category1 = lex_number (lexer);
-             lex_get (lexer);
-             if ( lex_match (lexer, ','))
-               {
-                 if ( ! lex_force_num (lexer) ) return 2;
-                 btp->category2 = lex_number (lexer);
-                 lex_get (lexer);
-               }
-             else
-               {
-                 btp->cutpoint = btp->category1;
-               }
-
-             lex_force_match (lexer, ')');
-           }
-       }
-      else
-       return 2;
-
-    }
-
-  specs->n_tests++;
-  specs->test = pool_realloc (specs->pool,
-                             specs->test,
-                             sizeof(*specs->test) * specs->n_tests);
-
-  specs->test[specs->n_tests - 1] = nt;
-
-  return 1;
-}
-
-
-bool parse_two_sample_related_test (struct lexer *lexer,
-                                   const struct dictionary *dict,
-                                   struct cmd_npar_tests *cmd,
-                                   struct two_sample_test *test_parameters,
-                                   struct pool *pool
-                                   );
-
-
-bool
-parse_two_sample_related_test (struct lexer *lexer,
-                              const struct dictionary *dict,
-                              struct cmd_npar_tests *cmd UNUSED,
-                              struct two_sample_test *test_parameters,
-                              struct pool *pool
-                              )
-{
-  int n = 0;
-  bool paired = false;
-  bool with = false;
-  const struct variable **vlist1;
-  size_t n_vlist1;
-
-  const struct variable **vlist2;
-  size_t n_vlist2;
-
-  test_parameters->parent.insert_variables = two_sample_insert_variables;
-
-  if (!parse_variables_const_pool (lexer, pool,
-                                  dict,
-                                  &vlist1, &n_vlist1,
-                                  PV_NUMERIC | PV_NO_SCRATCH | PV_NO_DUPLICATE) )
-    return false;
-
-  if ( lex_match(lexer, T_WITH))
-    {
-      with = true;
-      if ( !parse_variables_const_pool (lexer, pool, dict,
-                                       &vlist2, &n_vlist2,
-                                       PV_NUMERIC | PV_NO_SCRATCH | PV_NO_DUPLICATE) )
-       return false;
-
-      paired = (lex_match (lexer, '(') &&
-               lex_match_id (lexer, "PAIRED") && lex_match (lexer, ')'));
-    }
-
-
-  if ( with )
-    {
-      if (paired)
-       {
-         if ( n_vlist1 != n_vlist2)
-           msg (SE, _("PAIRED was specified but the number of variables "
-                      "preceding WITH (%zu) did not match the number "
-                      "following (%zu)."), n_vlist1, n_vlist2);
-
-         test_parameters->n_pairs = n_vlist1 ;
-       }
-      else
-       {
-         test_parameters->n_pairs = n_vlist1 * n_vlist2;
-       }
-    }
-  else
-    {
-      test_parameters->n_pairs = (n_vlist1 * (n_vlist1 - 1)) / 2 ;
-    }
-
-  test_parameters->pairs =
-    pool_alloc (pool, sizeof ( variable_pair) * test_parameters->n_pairs);
-
-  if ( with )
-    {
-      if (paired)
-       {
-         int i;
-         assert (n_vlist1 == n_vlist2);
-         for ( i = 0 ; i < n_vlist1; ++i )
-           {
-             test_parameters->pairs[n][1] = vlist1[i];
-             test_parameters->pairs[n][0] = vlist2[i];
-             n++;
-           }
-       }
-      else
-       {
-         int i,j;
-         for ( i = 0 ; i < n_vlist1; ++i )
-           {
-             for ( j = 0 ; j < n_vlist2; ++j )
-               {
-                 test_parameters->pairs[n][1] = vlist1[i];
-                 test_parameters->pairs[n][0] = vlist2[j];
-                 n++;
-               }
-           }
-       }
-    }
-  else
-    {
-      int i,j;
-      for ( i = 0 ; i < n_vlist1 - 1; ++i )
-       {
-         for ( j = i + 1 ; j < n_vlist1; ++j )
-           {
-             assert ( n < test_parameters->n_pairs);
-             test_parameters->pairs[n][1] = vlist1[i];
-             test_parameters->pairs[n][0] = vlist1[j];
-             n++;
-           }
-       }
-    }
-
-  assert ( n == test_parameters->n_pairs);
-
-  return true;
-}
-
-int
-npar_custom_wilcoxon (struct lexer *lexer,
-                     struct dataset *ds,
-                     struct cmd_npar_tests *cmd, void *aux )
-{
-  struct npar_specs *specs = aux;
-
-  struct two_sample_test *tp = pool_alloc (specs->pool, sizeof(*tp));
-  struct npar_test *nt = &tp->parent;
-  nt->execute = wilcoxon_execute;
-
-  if (!parse_two_sample_related_test (lexer, dataset_dict (ds), cmd,
-                                     tp, specs->pool) )
-    return 0;
-
-  specs->n_tests++;
-  specs->test = pool_realloc (specs->pool,
-                             specs->test,
-                             sizeof(*specs->test) * specs->n_tests);
-  specs->test[specs->n_tests - 1] = nt;
-
-  return 1;
-}
-
-int
-npar_custom_mcnemar (struct lexer *lexer,
-                    struct dataset *ds,
-                    struct cmd_npar_tests *cmd, void *aux )
-{
-  struct npar_specs *specs = aux;
-
-  struct two_sample_test *tp = pool_alloc(specs->pool, sizeof(*tp));
-  struct npar_test *nt = &tp->parent;
-  nt->execute = NULL;
-
-
-  if (!parse_two_sample_related_test (lexer, dataset_dict (ds),
-                                     cmd, tp, specs->pool) )
-    return 0;
-
-  specs->n_tests++;
-  specs->test = pool_realloc (specs->pool,
-                             specs->test,
-                             sizeof(*specs->test) * specs->n_tests);
-  specs->test[specs->n_tests - 1] = nt;
-
-  return 1;
-}
-
-int
-npar_custom_sign (struct lexer *lexer, struct dataset *ds,
-                 struct cmd_npar_tests *cmd, void *aux )
-{
-  struct npar_specs *specs = aux;
-
-  struct two_sample_test *tp = pool_alloc(specs->pool, sizeof(*tp));
-  struct npar_test *nt = &tp->parent;
-
-  nt->execute = sign_execute;
-
-  if (!parse_two_sample_related_test (lexer, dataset_dict (ds), cmd,
-                                     tp, specs->pool) )
-    return 0;
-
-  specs->n_tests++;
-  specs->test = pool_realloc (specs->pool,
-                             specs->test,
-                             sizeof(*specs->test) * specs->n_tests);
-  specs->test[specs->n_tests - 1] = nt;
-
-  return 1;
-}
-
-/* Insert the variables for TEST into VAR_HASH */
-static void
-one_sample_insert_variables (const struct npar_test *test,
-                            struct const_hsh_table *var_hash)
-{
-  int i;
-  struct one_sample_test *ost = UP_CAST (test, struct one_sample_test, parent);
-
-  for ( i = 0 ; i < ost->n_vars ; ++i )
-    const_hsh_insert (var_hash, ost->vars[i]);
-}
-
-static void
-two_sample_insert_variables (const struct npar_test *test,
-                            struct const_hsh_table *var_hash)
-{
-  int i;
-
-  const struct two_sample_test *tst = (const struct two_sample_test *) test;
-
-  for ( i = 0 ; i < tst->n_pairs ; ++i )
-    {
-      variable_pair *pair = &tst->pairs[i];
-
-      const_hsh_insert (var_hash, (*pair)[0]);
-      const_hsh_insert (var_hash, (*pair)[1]);
-    }
-
-}
-
-
-static int
-npar_custom_method (struct lexer *lexer, struct dataset *ds UNUSED,
-                    struct cmd_npar_tests *test UNUSED, void *aux)
-{
-  struct npar_specs *specs = aux;
-
-  if ( lex_match_id (lexer, "EXACT") )
-    {
-      specs->exact = true;
-      specs->timer = 0.0;
-      if (lex_match_id (lexer, "TIMER"))
-       {
-         specs->timer = 5.0;
-
-         if ( lex_match (lexer, '('))
-           {
-             if ( lex_force_num (lexer) )
-               {
-                 specs->timer = lex_number (lexer);
-                 lex_get (lexer);
-               }
-             lex_force_match (lexer, ')');
-           }
-       }
-    }
-
-  return 1;
-}
index 3995a1a4cd81d2c2316afd49ed6ee8603dbe148e..79b40cbd854a1be1d201ab50b8b150c5b740b3f7 100644 (file)
 #include <data/case.h>
 #include <data/casegrouper.h>
 #include <data/casereader.h>
+#include <data/dictionary.h>
+#include <data/procedure.h>
+#include <data/value.h>
+
+
+#include <math/covariance.h>
+#include <math/categoricals.h>
+#include <math/levene.h>
+#include <math/moments.h>
+#include <gsl/gsl_matrix.h>
+#include <linreg/sweep.h>
 
 #include <libpspp/ll.h>
 
 #include <language/lexer/value-parser.h>
 #include <language/command.h>
 
-#include <data/procedure.h>
-#include <data/dictionary.h>
-
 
 #include <language/dictionary/split-file.h>
-#include <libpspp/hash.h>
 #include <libpspp/taint.h>
-#include <math/group-proc.h>
-#include <math/levene.h>
 #include <libpspp/misc.h>
 
 #include <output/tab.h>
@@ -49,6 +54,7 @@
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 
+
 enum missing_type
   {
     MISS_LISTWISE,
@@ -76,7 +82,7 @@ struct contrasts_node
   bool bad_count; /* True if the number of coefficients does not equal the number of groups */
 };
 
-struct oneway 
+struct oneway_spec
 {
   size_t n_vars;
   const struct variable **vars;
@@ -88,40 +94,72 @@ struct oneway
   enum missing_type missing_type;
   enum mv_class exclude;
 
+  /* List of contrasts */
+  struct ll_list contrast_list;
+
+  /* The weight variable */
+  const struct variable *wv;
+
+};
+
+/* Per category data */
+struct descriptive_data
+{
+  const struct variable *var;
+  struct moments1 *mom;
+
+  double minimum;
+  double maximum;
+};
+
+/* Workspace variable for each dependent variable */
+struct per_var_ws
+{
+  struct categoricals *cat;
+  struct covariance *cov;
+
+  double sst;
+  double sse;
+  double ssa;
+
+  int n_groups;
+
+  double mse;
+  double levene_w;
+};
+
+struct oneway_workspace
+{
   /* The number of distinct values of the independent variable, when all
      missing values are disregarded */
   int actual_number_of_groups;
 
-  /* A  hash table containing all the distinct values of the independent
-     variable */
-  struct hsh_table *group_hash;
+  struct per_var_ws *vws;
 
-  /* List of contrasts */
-  struct ll_list contrast_list;
+  /* An array of descriptive data.  One for each dependent variable */
+  struct descriptive_data **dd_total;
 };
 
 /* Routines to show the output tables */
-static void show_anova_table (const struct oneway *);
-static void show_descriptives (const struct oneway *, const struct dictionary *dict);
-static void show_homogeneity (const struct oneway *);
+static void show_anova_table (const struct oneway_spec *, const struct oneway_workspace *);
+static void show_descriptives (const struct oneway_spec *, const struct oneway_workspace *);
+static void show_homogeneity (const struct oneway_spec *, const struct oneway_workspace *);
 
-static void output_oneway (const struct oneway *, const struct dictionary *dict);
-static void run_oneway (struct oneway *cmd, struct casereader *input, const struct dataset *ds);
+static void output_oneway (const struct oneway_spec *, struct oneway_workspace *ws);
+static void run_oneway (const struct oneway_spec *cmd, struct casereader *input, const struct dataset *ds);
 
 int
 cmd_oneway (struct lexer *lexer, struct dataset *ds)
 {
-  const struct dictionary *dict = dataset_dict (ds);
-  
-  struct oneway oneway ;
+  const struct dictionary *dict = dataset_dict (ds);  
+  struct oneway_spec oneway ;
   oneway.n_vars = 0;
   oneway.vars = NULL;
   oneway.indep_var = NULL;
   oneway.stats = 0;
   oneway.missing_type = MISS_ANALYSIS;
   oneway.exclude = MV_ANY;
-  oneway.actual_number_of_groups = 0;
-  oneway.group_hash = NULL;
+  oneway.wv = dict_get_weight (dict);
 
   ll_init (&oneway.contrast_list);
 
@@ -179,13 +217,13 @@ cmd_oneway (struct lexer *lexer, struct dataset *ds)
 
           while (lex_token (lexer) != '.' && lex_token (lexer) != '/')
            {
-             union value val;
-             if ( parse_value (lexer, &val, 0))
+             if ( lex_is_number (lexer))
                {
                  struct coeff_node *cc = xmalloc (sizeof *cc);
-                 cc->coeff = val.f;
+                 cc->coeff = lex_number (lexer);
 
                  ll_push_tail (coefficient_list, &cc->ll);
+                 lex_get (lexer);
                }
              else
                {
@@ -255,61 +293,127 @@ cmd_oneway (struct lexer *lexer, struct dataset *ds)
 
 \f
 
-static int
-compare_double_3way (const void *a_, const void *b_, const void *aux UNUSED)
+
+static struct descriptive_data *
+dd_create (const struct variable *var)
 {
-  const double *a = a_;
-  const double *b = b_;
-  return *a < *b ? -1 : *a > *b;
+  struct descriptive_data *dd = xmalloc (sizeof *dd);
+
+  dd->mom = moments1_create (MOMENT_VARIANCE);
+  dd->minimum = DBL_MAX;
+  dd->maximum = -DBL_MAX;
+  dd->var = var;
+
+  return dd;
 }
 
-static unsigned
-do_hash_double (const void *value_, const void *aux UNUSED)
+static void
+dd_destroy (struct descriptive_data *dd)
 {
-  const double *value = value_;
-  return hash_double (*value, 0);
+  moments1_destroy (dd->mom);
+  free (dd);
 }
 
-static void
-free_double (void *value_, const void *aux UNUSED)
+static void *
+makeit (void *aux1, void *aux2 UNUSED)
 {
-  double *value = value_;
-  free (value);
+  const struct variable *var = aux1;
+
+  struct descriptive_data *dd = dd_create (var);
+
+  return dd;
 }
 
-static void postcalc (const struct oneway *cmd);
-static void  precalc (const struct oneway *cmd);
+static void 
+updateit (void *user_data, 
+         enum mv_class exclude,
+         const struct variable *wv, 
+         const struct variable *catvar UNUSED,
+         const struct ccase *c,
+         void *aux1, void *aux2)
+{
+  struct descriptive_data *dd = user_data;
+
+  const struct variable *varp = aux1;
+
+  const union value *valx = case_data (c, varp);
+
+  struct descriptive_data *dd_total = aux2;
+
+  double weight;
+
+  if ( var_is_value_missing (varp, valx, exclude))
+    return;
+
+  weight = wv != NULL ? case_data (c, wv)->f : 1.0;
 
+  moments1_add (dd->mom, valx->f, weight);
+  if (valx->f < dd->minimum)
+    dd->minimum = valx->f;
+
+  if (valx->f > dd->maximum)
+    dd->maximum = valx->f;
+
+  {
+    const struct variable *var = dd_total->var;
+    const union value *val = case_data (c, var);
+
+    moments1_add (dd_total->mom,
+                 val->f,
+                 weight);
+
+    if (val->f < dd_total->minimum)
+      dd_total->minimum = val->f;
+
+    if (val->f > dd_total->maximum)
+      dd_total->maximum = val->f;
+  }
+}
 
 static void
-run_oneway (struct oneway *cmd,
+run_oneway (const struct oneway_spec *cmd,
             struct casereader *input,
             const struct dataset *ds)
 {
+  int v;
   struct taint *taint;
   struct dictionary *dict = dataset_dict (ds);
   struct casereader *reader;
   struct ccase *c;
 
+  struct oneway_workspace ws;
+
+  ws.actual_number_of_groups = 0;
+  ws.vws = xzalloc (cmd->n_vars * sizeof (*ws.vws));
+  ws.dd_total = xmalloc (sizeof (struct descriptive_data) * cmd->n_vars);
+
+  for (v = 0 ; v < cmd->n_vars; ++v)
+    ws.dd_total[v] = dd_create (cmd->vars[v]);
+
+  for (v = 0; v < cmd->n_vars; ++v)
+    {
+      ws.vws[v].cat = categoricals_create (&cmd->indep_var, 1,
+                                                      cmd->wv, cmd->exclude, 
+                                                      makeit,
+                                                      updateit,
+                                                      cmd->vars[v], ws.dd_total[v]);
+
+      ws.vws[v].cov = covariance_2pass_create (1, &cmd->vars[v],
+                                              ws.vws[v].cat, 
+                                              cmd->wv, cmd->exclude);
+    }
+
   c = casereader_peek (input, 0);
   if (c == NULL)
     {
       casereader_destroy (input);
-      return;
+      goto finish;
     }
   output_split_file_values (ds, c);
   case_unref (c);
 
   taint = taint_clone (casereader_get_taint (input));
 
-  cmd->group_hash = hsh_create (4,
-                                 compare_double_3way,
-                                 do_hash_double,
-                                 free_double,
-                                 cmd->indep_var);
-
-  precalc (cmd);
-
   input = casereader_create_filter_missing (input, &cmd->indep_var, 1,
                                             cmd->exclude, NULL, NULL);
   if (cmd->missing_type == MISS_LISTWISE)
@@ -317,169 +421,115 @@ run_oneway (struct oneway *cmd,
                                               cmd->exclude, NULL, NULL);
   input = casereader_create_filter_weight (input, dict, NULL, NULL);
 
+
+  if (cmd->stats & STATS_HOMOGENEITY)
+    for (v = 0; v < cmd->n_vars; ++v)
+      {
+       struct per_var_ws *pvw = &ws.vws[v];
+
+       pvw->levene_w = levene (input, cmd->indep_var, cmd->vars[v], cmd->wv, cmd->exclude);
+      }
+
   reader = casereader_clone (input);
+
   for (; (c = casereader_read (reader)) != NULL; case_unref (c))
     {
-      size_t i;
-
-      const double weight = dict_get_case_weight (dict, c, NULL);
-
-      const union value *indep_val = case_data (c, cmd->indep_var);
-      void **p = hsh_probe (cmd->group_hash, &indep_val->f);
-      if (*p == NULL)
-        {
-          double *value = *p = xmalloc (sizeof *value);
-          *value = indep_val->f;
-        }
+      int i;
 
       for (i = 0; i < cmd->n_vars; ++i)
        {
+         struct per_var_ws *pvw = &ws.vws[i];
          const struct variable *v = cmd->vars[i];
-
          const union value *val = case_data (c, v);
 
-          struct group_proc *gp = group_proc_get (cmd->vars[i]);
-         struct hsh_table *group_hash = gp->group_hash;
-
-         struct group_statistics *gs;
-
-         gs = hsh_find (group_hash, indep_val );
-
-         if ( ! gs )
+         if ( MISS_ANALYSIS == cmd->missing_type)
            {
-             gs = xmalloc (sizeof *gs);
-             gs->id = *indep_val;
-             gs->sum = 0;
-             gs->n = 0;
-             gs->ssq = 0;
-             gs->sum_diff = 0;
-             gs->minimum = DBL_MAX;
-             gs->maximum = -DBL_MAX;
-
-             hsh_insert ( group_hash, gs );
+             if ( var_is_value_missing (v, val, cmd->exclude))
+               continue;
            }
 
-         if (!var_is_value_missing (v, val, cmd->exclude))
-           {
-             struct group_statistics *totals = &gp->ugs;
-
-             totals->n += weight;
-             totals->sum += weight * val->f;
-             totals->ssq += weight * pow2 (val->f);
-
-             if ( val->f * weight  < totals->minimum )
-               totals->minimum = val->f * weight;
-
-             if ( val->f * weight  > totals->maximum )
-               totals->maximum = val->f * weight;
-
-             gs->n += weight;
-             gs->sum += weight * val->f;
-             gs->ssq += weight * pow2 (val->f);
-
-             if ( val->f * weight  < gs->minimum )
-               gs->minimum = val->f * weight;
+         covariance_accumulate_pass1 (pvw->cov, c);
+       }
+    }
+  casereader_destroy (reader);
+  reader = casereader_clone (input);
+  for ( ; (c = casereader_read (reader) ); case_unref (c))
+    {
+      int i;
+      for (i = 0; i < cmd->n_vars; ++i)
+       {
+         struct per_var_ws *pvw = &ws.vws[i];
+         const struct variable *v = cmd->vars[i];
+         const union value *val = case_data (c, v);
 
-             if ( val->f * weight  > gs->maximum )
-               gs->maximum = val->f * weight;
+         if ( MISS_ANALYSIS == cmd->missing_type)
+           {
+             if ( var_is_value_missing (v, val, cmd->exclude))
+               continue;
            }
 
-         gp->n_groups = hsh_count (group_hash );
+         covariance_accumulate_pass2 (pvw->cov, c);
        }
-
     }
   casereader_destroy (reader);
 
-  postcalc (cmd);
+  for (v = 0; v < cmd->n_vars; ++v)
+    {
+      struct per_var_ws *pvw = &ws.vws[v];
+      gsl_matrix *cm = covariance_calculate_unnormalized (pvw->cov);
+      const struct categoricals *cats = covariance_get_categoricals (pvw->cov);
 
-  if ( cmd->stats & STATS_HOMOGENEITY )
-    levene (dict, casereader_clone (input), cmd->indep_var,
-           cmd->n_vars, cmd->vars, cmd->exclude);
+      double n;
+      moments1_calculate (ws.dd_total[v]->mom, &n, NULL, NULL, NULL, NULL);
 
-  casereader_destroy (input);
+      pvw->sst = gsl_matrix_get (cm, 0, 0);
 
-  cmd->actual_number_of_groups = hsh_count (cmd->group_hash);
+      //      gsl_matrix_fprintf (stdout, cm, "%g ");
 
-  if (!taint_has_tainted_successor (taint))
-    output_oneway (cmd, dict);
+      reg_sweep (cm, 0);
 
-  taint_destroy (taint);
-}
+      pvw->sse = gsl_matrix_get (cm, 0, 0);
 
-/* Pre calculations */
-static void
-precalc (const struct oneway *cmd)
-{
-  size_t i = 0;
+      pvw->ssa = pvw->sst - pvw->sse;
 
-  for (i = 0; i < cmd->n_vars; ++i)
-    {
-      struct group_proc *gp = group_proc_get (cmd->vars[i]);
-      struct group_statistics *totals = &gp->ugs;
-
-      /* Create a hash for each of the dependent variables.
-        The hash contains a group_statistics structure,
-        and is keyed by value of the independent variable */
-
-      gp->group_hash = hsh_create (4, compare_group, hash_group,
-                                  (hsh_free_func *) free_group,
-                                  cmd->indep_var);
-
-      totals->sum = 0;
-      totals->n = 0;
-      totals->ssq = 0;
-      totals->sum_diff = 0;
-      totals->maximum = -DBL_MAX;
-      totals->minimum = DBL_MAX;
-    }
-}
+      pvw->n_groups = categoricals_total (cats);
 
-/* Post calculations for the ONEWAY command */
-static void
-postcalc (const struct oneway *cmd)
-{
-  size_t i = 0;
+      pvw->mse = (pvw->sst - pvw->ssa) / (n - pvw->n_groups);
+    }
 
-  for (i = 0; i < cmd->n_vars; ++i)
+  for (v = 0; v < cmd->n_vars; ++v)
     {
-      struct group_proc *gp = group_proc_get (cmd->vars[i]);
-      struct hsh_table *group_hash = gp->group_hash;
-      struct group_statistics *totals = &gp->ugs;
-
-      struct hsh_iterator g;
-      struct group_statistics *gs;
+      struct categoricals *cats = covariance_get_categoricals (ws.vws[v].cov);
 
-      for (gs =  hsh_first (group_hash, &g);
-          gs != 0;
-          gs = hsh_next (group_hash, &g))
-       {
-         gs->mean = gs->sum / gs->n;
-         gs->s_std_dev = sqrt (gs->ssq / gs->n - pow2 (gs->mean));
+      categoricals_done (cats);
+      
+      if (categoricals_total (cats) > ws.actual_number_of_groups)
+       ws.actual_number_of_groups = categoricals_total (cats);
+    }
 
-         gs->std_dev = sqrt (
-                             gs->n / (gs->n - 1) *
-                             ( gs->ssq / gs->n - pow2 (gs->mean))
-                             );
+  casereader_destroy (input);
 
-         gs->se_mean = gs->std_dev / sqrt (gs->n);
-         gs->mean_diff = gs->sum_diff / gs->n;
-       }
+  if (!taint_has_tainted_successor (taint))
+    output_oneway (cmd, &ws);
 
-      totals->mean = totals->sum / totals->n;
-      totals->std_dev = sqrt (
-                             totals->n / (totals->n - 1) *
-                             (totals->ssq / totals->n - pow2 (totals->mean))
-                             );
+  taint_destroy (taint);
 
-      totals->se_mean = totals->std_dev / sqrt (totals->n);
+ finish:
+  for (v = 0; v < cmd->n_vars; ++v)
+    {
+      covariance_destroy (ws.vws[v].cov);
+      dd_destroy (ws.dd_total[v]);
     }
+  free (ws.vws);
+  free (ws.dd_total);
+
 }
 
-static void show_contrast_coeffs (const struct oneway *cmd);
-static void show_contrast_tests (const struct oneway *cmd);
+static void show_contrast_coeffs (const struct oneway_spec *cmd, const struct oneway_workspace *ws);
+static void show_contrast_tests (const struct oneway_spec *cmd, const struct oneway_workspace *ws);
 
 static void
-output_oneway (const struct oneway *cmd, const struct dictionary *dict)
+output_oneway (const struct oneway_spec *cmd, struct oneway_workspace *ws)
 {
   size_t i = 0;
 
@@ -492,7 +542,7 @@ output_oneway (const struct oneway *cmd, const struct dictionary *dict)
       struct ll_list *cl = &coeff_list->coefficient_list;
       ++i;
 
-      if (ll_count (cl) != cmd->actual_number_of_groups)
+      if (ll_count (cl) != ws->actual_number_of_groups)
        {
          msg (SW,
               _("Number of contrast coefficients must equal the number of groups"));
@@ -508,36 +558,24 @@ output_oneway (const struct oneway *cmd, const struct dictionary *dict)
     }
 
   if (cmd->stats & STATS_DESCRIPTIVES)
-    show_descriptives (cmd, dict);
+    show_descriptives (cmd, ws);
 
   if (cmd->stats & STATS_HOMOGENEITY)
-    show_homogeneity (cmd);
-
-  show_anova_table (cmd);
+    show_homogeneity (cmd, ws);
 
+  show_anova_table (cmd, ws);
 
   if (ll_count (&cmd->contrast_list) > 0)
     {
-      show_contrast_coeffs (cmd);
-      show_contrast_tests (cmd);
+      show_contrast_coeffs (cmd, ws);
+      show_contrast_tests (cmd, ws);
     }
-
-
-  /* Clean up */
-  for (i = 0; i < cmd->n_vars; ++i )
-    {
-      struct hsh_table *group_hash = group_proc_get (cmd->vars[i])->group_hash;
-
-      hsh_destroy (group_hash);
-    }
-
-  hsh_destroy (cmd->group_hash);
 }
 
 
 /* Show the ANOVA table */
 static void
-show_anova_table (const struct oneway *cmd)
+show_anova_table (const struct oneway_spec *cmd, const struct oneway_workspace *ws)
 {
   size_t i;
   int n_cols =7;
@@ -566,21 +604,17 @@ show_anova_table (const struct oneway *cmd)
 
   for (i = 0; i < cmd->n_vars; ++i)
     {
-      struct group_statistics *totals = &group_proc_get (cmd->vars[i])->ugs;
-      struct hsh_table *group_hash = group_proc_get (cmd->vars[i])->group_hash;
-      struct hsh_iterator g;
-      struct group_statistics *gs;
-      double ssa = 0;
+      double n;
+      double df1, df2;
+      double msa;
       const char *s = var_to_string (cmd->vars[i]);
+      const struct per_var_ws *pvw = &ws->vws[i];
 
-      for (gs =  hsh_first (group_hash, &g);
-          gs != 0;
-          gs = hsh_next (group_hash, &g))
-       {
-         ssa += pow2 (gs->sum) / gs->n;
-       }
+      moments1_calculate (ws->dd_total[i]->mom, &n, NULL, NULL, NULL, NULL);
 
-      ssa -= pow2 (totals->sum) / totals->n;
+      df1 = pvw->n_groups - 1;
+      df2 = n - pvw->n_groups;
+      msa = pvw->ssa / df1;
 
       tab_text (t, 0, i * 3 + 1, TAB_LEFT | TAT_TITLE, s);
       tab_text (t, 1, i * 3 + 1, TAB_LEFT | TAT_TITLE, _("Between Groups"));
@@ -590,44 +624,33 @@ show_anova_table (const struct oneway *cmd)
       if (i > 0)
        tab_hline (t, TAL_1, 0, n_cols - 1, i * 3 + 1);
 
-      {
-        struct group_proc *gp = group_proc_get (cmd->vars[i]);
-       const double sst = totals->ssq - pow2 (totals->sum) / totals->n;
-       const double df1 = gp->n_groups - 1;
-       const double df2 = totals->n - gp->n_groups;
-       const double msa = ssa / df1;
 
-       gp->mse  = (sst - ssa) / df2;
+      /* Sums of Squares */
+      tab_double (t, 2, i * 3 + 1, 0, pvw->ssa, NULL);
+      tab_double (t, 2, i * 3 + 3, 0, pvw->sst, NULL);
+      tab_double (t, 2, i * 3 + 2, 0, pvw->sse, NULL);
 
 
-       /* Sums of Squares */
-       tab_double (t, 2, i * 3 + 1, 0, ssa, NULL);
-       tab_double (t, 2, i * 3 + 3, 0, sst, NULL);
-       tab_double (t, 2, i * 3 + 2, 0, sst - ssa, NULL);
+      /* Degrees of freedom */
+      tab_fixed (t, 3, i * 3 + 1, 0, df1, 4, 0);
+      tab_fixed (t, 3, i * 3 + 2, 0, df2, 4, 0);
+      tab_fixed (t, 3, i * 3 + 3, 0, n - 1, 4, 0);
 
+      /* Mean Squares */
+      tab_double (t, 4, i * 3 + 1, TAB_RIGHT, msa, NULL);
+      tab_double (t, 4, i * 3 + 2, TAB_RIGHT, pvw->mse, NULL);
 
-       /* Degrees of freedom */
-       tab_fixed (t, 3, i * 3 + 1, 0, df1, 4, 0);
-       tab_fixed (t, 3, i * 3 + 2, 0, df2, 4, 0);
-       tab_fixed (t, 3, i * 3 + 3, 0, totals->n - 1, 4, 0);
-
-       /* Mean Squares */
-       tab_double (t, 4, i * 3 + 1, TAB_RIGHT, msa, NULL);
-       tab_double (t, 4, i * 3 + 2, TAB_RIGHT, gp->mse, NULL);
-
-       {
-         const double F = msa / gp->mse ;
+      {
+       const double F = msa / pvw->mse ;
 
-         /* The F value */
-         tab_double (t, 5, i * 3 + 1, 0,  F, NULL);
+       /* The F value */
+       tab_double (t, 5, i * 3 + 1, 0,  F, NULL);
 
-         /* The significance */
-         tab_double (t, 6, i * 3 + 1, 0, gsl_cdf_fdist_Q (F, df1, df2), NULL);
-       }
+       /* The significance */
+       tab_double (t, 6, i * 3 + 1, 0, gsl_cdf_fdist_Q (F, df1, df2), NULL);
       }
     }
 
-
   tab_title (t, _("ANOVA"));
   tab_submit (t);
 }
@@ -635,7 +658,7 @@ show_anova_table (const struct oneway *cmd)
 
 /* Show the descriptives table */
 static void
-show_descriptives (const struct oneway *cmd, const struct dictionary *dict)
+show_descriptives (const struct oneway_spec *cmd, const struct oneway_workspace *ws)
 {
   size_t v;
   int n_cols = 10;
@@ -645,18 +668,16 @@ show_descriptives (const struct oneway *cmd, const struct dictionary *dict)
   const double confidence = 0.95;
   const double q = (1.0 - confidence) / 2.0;
 
-  const struct variable *wv = dict_get_weight (dict);
-  const struct fmt_spec *wfmt = wv ? var_get_print_format (wv) : & F_8_0;
+  const struct fmt_spec *wfmt = cmd->wv ? var_get_print_format (cmd->wv) : &F_8_0;
 
   int n_rows = 2;
 
-  for ( v = 0; v < cmd->n_vars; ++v )
-    n_rows += group_proc_get (cmd->vars[v])->n_groups + 1;
+  for (v = 0; v < cmd->n_vars; ++v)
+    n_rows += ws->actual_number_of_groups + 1;
 
   t = tab_create (n_cols, n_rows);
   tab_headers (t, 2, 0, 2, 0);
 
-
   /* Put a frame around the entire box, and vertical lines inside */
   tab_box (t,
           TAL_2, TAL_2,
@@ -686,39 +707,42 @@ show_descriptives (const struct oneway *cmd, const struct dictionary *dict)
   tab_text (t, 8, 1, TAB_CENTER | TAT_TITLE, _("Minimum"));
   tab_text (t, 9, 1, TAB_CENTER | TAT_TITLE, _("Maximum"));
 
-
   tab_title (t, _("Descriptives"));
 
-
   row = 2;
   for (v = 0; v < cmd->n_vars; ++v)
     {
-      double T;
-      double std_error;
-
-      struct group_proc *gp = group_proc_get (cmd->vars[v]);
-
-      struct group_statistics *gs;
-      struct group_statistics *totals = &gp->ugs;
-
       const char *s = var_to_string (cmd->vars[v]);
       const struct fmt_spec *fmt = var_get_print_format (cmd->vars[v]);
 
-      struct group_statistics *const *gs_array =
-       (struct group_statistics *const *) hsh_sort (gp->group_hash);
       int count = 0;
 
+      struct per_var_ws *pvw = &ws->vws[v];
+      const struct categoricals *cats = covariance_get_categoricals (pvw->cov);
+
       tab_text (t, 0, row, TAB_LEFT | TAT_TITLE, s);
       if ( v > 0)
        tab_hline (t, TAL_1, 0, n_cols - 1, row);
 
-      for (count = 0; count < hsh_count (gp->group_hash); ++count)
+      for (count = 0; count < categoricals_total (cats); ++count)
        {
+         double T;
+         double n, mean, variance;
+         double std_dev, std_error ;
+
          struct string vstr;
+
+         const union value *gval = categoricals_get_value_by_subscript (cats, count);
+         const struct descriptive_data *dd = categoricals_get_user_data_by_subscript (cats, count);
+
+         moments1_calculate (dd->mom, &n, &mean, &variance, NULL, NULL);
+
+         std_dev = sqrt (variance);
+         std_error = std_dev / sqrt (n) ;
+
          ds_init_empty (&vstr);
-         gs = gs_array[count];
 
-         var_append_value_name (cmd->indep_var, &gs->id, &vstr);
+         var_append_value_name (cmd->indep_var, gval, &vstr);
 
          tab_text (t, 1, row + count,
                    TAB_LEFT | TAT_TITLE,
@@ -728,61 +752,68 @@ show_descriptives (const struct oneway *cmd, const struct dictionary *dict)
 
          /* Now fill in the numbers ... */
 
-         tab_fixed (t, 2, row + count, 0, gs->n, 8, 0);
+         tab_double (t, 2, row + count, 0, n, wfmt);
 
-         tab_double (t, 3, row + count, 0, gs->mean, NULL);
+         tab_double (t, 3, row + count, 0, mean, NULL);
 
-         tab_double (t, 4, row + count, 0, gs->std_dev, NULL);
+         tab_double (t, 4, row + count, 0, std_dev, NULL);
 
-         std_error = gs->std_dev / sqrt (gs->n) ;
-         tab_double (t, 5, row + count, 0,
-                     std_error, NULL);
+
+         tab_double (t, 5, row + count, 0, std_error, NULL);
 
          /* Now the confidence interval */
 
-         T = gsl_cdf_tdist_Qinv (q, gs->n - 1);
+         T = gsl_cdf_tdist_Qinv (q, n - 1);
 
          tab_double (t, 6, row + count, 0,
-                     gs->mean - T * std_error, NULL);
+                     mean - T * std_error, NULL);
 
          tab_double (t, 7, row + count, 0,
-                     gs->mean + T * std_error, NULL);
+                     mean + T * std_error, NULL);
 
          /* Min and Max */
 
-         tab_double (t, 8, row + count, 0,  gs->minimum, fmt);
-         tab_double (t, 9, row + count, 0,  gs->maximum, fmt);
+         tab_double (t, 8, row + count, 0,  dd->minimum, fmt);
+         tab_double (t, 9, row + count, 0,  dd->maximum, fmt);
        }
 
-      tab_text (t, 1, row + count,
-               TAB_LEFT | TAT_TITLE, _("Total"));
+      {
+       double T;
+       double n, mean, variance;
+       double std_dev;
+       double std_error;
 
-      tab_double (t, 2, row + count, 0, totals->n, wfmt);
+       moments1_calculate (ws->dd_total[v]->mom, &n, &mean, &variance, NULL, NULL);
 
-      tab_double (t, 3, row + count, 0, totals->mean, NULL);
+       std_dev = sqrt (variance);
+       std_error = std_dev / sqrt (n) ;
 
-      tab_double (t, 4, row + count, 0, totals->std_dev, NULL);
+       tab_text (t, 1, row + count,
+                 TAB_LEFT | TAT_TITLE, _("Total"));
 
-      std_error = totals->std_dev / sqrt (totals->n) ;
+       tab_double (t, 2, row + count, 0, n, wfmt);
 
-      tab_double (t, 5, row + count, 0, std_error, NULL);
+       tab_double (t, 3, row + count, 0, mean, NULL);
 
-      /* Now the confidence interval */
+       tab_double (t, 4, row + count, 0, std_dev, NULL);
 
-      T = gsl_cdf_tdist_Qinv (q, totals->n - 1);
+       tab_double (t, 5, row + count, 0, std_error, NULL);
 
-      tab_double (t, 6, row + count, 0,
-                 totals->mean - T * std_error, NULL);
+       /* Now the confidence interval */
+       T = gsl_cdf_tdist_Qinv (q, n - 1);
 
-      tab_double (t, 7, row + count, 0,
-                 totals->mean + T * std_error, NULL);
+       tab_double (t, 6, row + count, 0,
+                   mean - T * std_error, NULL);
 
-      /* Min and Max */
+       tab_double (t, 7, row + count, 0,
+                   mean + T * std_error, NULL);
 
-      tab_double (t, 8, row + count, 0,  totals->minimum, fmt);
-      tab_double (t, 9, row + count, 0,  totals->maximum, fmt);
+       /* Min and Max */
+       tab_double (t, 8, row + count, 0,  ws->dd_total[v]->minimum, fmt);
+       tab_double (t, 9, row + count, 0,  ws->dd_total[v]->maximum, fmt);
+      }
 
-      row += gp->n_groups + 1;
+      row += categoricals_total (cats) + 1;
     }
 
   tab_submit (t);
@@ -790,19 +821,15 @@ show_descriptives (const struct oneway *cmd, const struct dictionary *dict)
 
 /* Show the homogeneity table */
 static void
-show_homogeneity (const struct oneway *cmd)
+show_homogeneity (const struct oneway_spec *cmd, const struct oneway_workspace *ws)
 {
   size_t v;
   int n_cols = 5;
   size_t n_rows = cmd->n_vars + 1;
 
-  struct tab_table *t;
-
-
-  t = tab_create (n_cols, n_rows);
+  struct tab_table *t = tab_create (n_cols, n_rows);
   tab_headers (t, 1, 0, 1, 0);
 
-
   /* Put a frame around the entire box, and vertical lines inside */
   tab_box (t,
           TAL_2, TAL_2,
@@ -814,7 +841,6 @@ show_homogeneity (const struct oneway *cmd)
   tab_hline (t, TAL_2, 0, n_cols - 1, 1);
   tab_vline (t, TAL_2, 1, 0, n_rows - 1);
 
-
   tab_text (t, 1, 0, TAB_CENTER | TAT_TITLE, _("Levene Statistic"));
   tab_text (t, 2, 0, TAB_CENTER | TAT_TITLE, _("df1"));
   tab_text (t, 3, 0, TAB_CENTER | TAT_TITLE, _("df2"));
@@ -824,24 +850,27 @@ show_homogeneity (const struct oneway *cmd)
 
   for (v = 0; v < cmd->n_vars; ++v)
     {
-      double F;
+      double n;
+      const struct per_var_ws *pvw = &ws->vws[v];
+      double F = pvw->levene_w;
+
       const struct variable *var = cmd->vars[v];
-      const struct group_proc *gp = group_proc_get (cmd->vars[v]);
       const char *s = var_to_string (var);
-      const struct group_statistics *totals = &gp->ugs;
+      double df1, df2;
 
-      const double df1 = gp->n_groups - 1;
-      const double df2 = totals->n - gp->n_groups;
+      moments1_calculate (ws->dd_total[v]->mom, &n, NULL, NULL, NULL, NULL);
+
+      df1 = pvw->n_groups - 1;
+      df2 = n - pvw->n_groups;
 
       tab_text (t, 0, v + 1, TAB_LEFT | TAT_TITLE, s);
 
-      F = gp->levene;
       tab_double (t, 1, v + 1, TAB_RIGHT, F, NULL);
       tab_fixed (t, 2, v + 1, TAB_RIGHT, df1, 8, 0);
       tab_fixed (t, 3, v + 1, TAB_RIGHT, df2, 8, 0);
 
       /* Now the significance */
-      tab_double (t, 4, v + 1, TAB_RIGHT,gsl_cdf_fdist_Q (F, df1, df2), NULL);
+      tab_double (t, 4, v + 1, TAB_RIGHT, gsl_cdf_fdist_Q (F, df1, df2), NULL);
     }
 
   tab_submit (t);
@@ -850,19 +879,19 @@ show_homogeneity (const struct oneway *cmd)
 
 /* Show the contrast coefficients table */
 static void
-show_contrast_coeffs (const struct oneway *cmd)
+show_contrast_coeffs (const struct oneway_spec *cmd, const struct oneway_workspace *ws)
 {
   int c_num = 0;
   struct ll *cli;
 
   int n_contrasts = ll_count (&cmd->contrast_list);
-  int n_cols = 2 + cmd->actual_number_of_groups;
+  int n_cols = 2 + ws->actual_number_of_groups;
   int n_rows = 2 + n_contrasts;
 
-  void *const *group_values;
-
   struct tab_table *t;
 
+  const struct covariance *cov = ws->vws[0].cov ;
+
   t = tab_create (n_cols, n_rows);
   tab_headers (t, 2, 0, 2, 0);
 
@@ -898,34 +927,29 @@ show_contrast_coeffs (const struct oneway *cmd)
   tab_joint_text (t, 2, 0, n_cols - 1, 0, TAB_CENTER | TAT_TITLE,
                  var_to_string (cmd->indep_var));
 
-  group_values = hsh_sort (cmd->group_hash);
-
   for ( cli = ll_head (&cmd->contrast_list);
        cli != ll_null (&cmd->contrast_list);
        cli = ll_next (cli))
     {
       int count = 0;
       struct contrasts_node *cn = ll_data (cli, struct contrasts_node, ll);
-      struct ll *coeffi = ll_head (&cn->coefficient_list);
+      struct ll *coeffi ;
 
       tab_text_format (t, 1, c_num + 2, TAB_CENTER, "%d", c_num + 1);
 
-      for (count = 0;
-          count < hsh_count (cmd->group_hash) && coeffi != ll_null (&cn->coefficient_list);
-          ++count)
+      for (coeffi = ll_head (&cn->coefficient_list);
+          coeffi != ll_null (&cn->coefficient_list);
+          ++count, coeffi = ll_next (coeffi))
        {
-         double *group_value_p;
-         union value group_value;
+         const struct categoricals *cats = covariance_get_categoricals (cov);
+         const union value *val = categoricals_get_value_by_subscript (cats, count);
          struct string vstr;
 
          ds_init_empty (&vstr);
 
-         group_value_p = group_values[count];
-         group_value.f = *group_value_p;
-         var_append_value_name (cmd->indep_var, &group_value, &vstr);
+         var_append_value_name (cmd->indep_var, val, &vstr);
 
-         tab_text (t, count + 2, 1, TAB_CENTER | TAT_TITLE,
-                   ds_cstr (&vstr));
+         tab_text (t, count + 2, 1, TAB_CENTER | TAT_TITLE, ds_cstr (&vstr));
 
          ds_destroy (&vstr);
 
@@ -937,8 +961,6 @@ show_contrast_coeffs (const struct oneway *cmd)
 
              tab_text_format (t, count + 2, c_num + 2, TAB_RIGHT, "%g", coeffn->coeff);
            }
-
-         coeffi = ll_next (coeffi);
        }
       ++c_num;
     }
@@ -949,7 +971,7 @@ show_contrast_coeffs (const struct oneway *cmd)
 
 /* Show the results of the contrast tests */
 static void
-show_contrast_tests (const struct oneway *cmd)
+show_contrast_tests (const struct oneway_spec *cmd, const struct oneway_workspace *ws)
 {
   int n_contrasts = ll_count (&cmd->contrast_list);
   size_t v;
@@ -977,7 +999,6 @@ show_contrast_tests (const struct oneway *cmd)
   tab_hline (t, TAL_2, 0, n_cols - 1, 1);
   tab_vline (t, TAL_2, 3, 0, n_rows - 1);
 
-
   tab_title (t, _("Contrast Tests"));
 
   tab_text (t, 2, 0, TAB_CENTER | TAT_TITLE, _("Contrast"));
@@ -989,6 +1010,8 @@ show_contrast_tests (const struct oneway *cmd)
 
   for (v = 0; v < cmd->n_vars; ++v)
     {
+      const struct per_var_ws *pvw = &ws->vws[v];
+      const struct categoricals *cats = covariance_get_categoricals (pvw->cov);
       struct ll *cli;
       int i = 0;
       int lines_per_variable = 2 * n_contrasts;
@@ -1001,14 +1024,10 @@ show_contrast_tests (const struct oneway *cmd)
            ++i, cli = ll_next (cli))
        {
          struct contrasts_node *cn = ll_data (cli, struct contrasts_node, ll);
-         struct ll *coeffi = ll_head (&cn->coefficient_list);
-         int ci;
+         struct ll *coeffi ;
+         int ci = 0;
          double contrast_value = 0.0;
          double coef_msq = 0.0;
-         struct group_proc *grp_data = group_proc_get (cmd->vars[v]);
-         struct hsh_table *group_hash = grp_data->group_hash;
-
-         void *const *group_stat_array;
 
          double T;
          double std_error_contrast;
@@ -1028,6 +1047,11 @@ show_contrast_tests (const struct oneway *cmd)
 
          double df_denominator = 0.0;
          double df_numerator = 0.0;
+
+         double grand_n;
+         moments1_calculate (ws->dd_total[v]->mom, &grand_n, NULL, NULL, NULL, NULL);
+         df = grand_n - pvw->n_groups;
+
          if ( i == 0 )
            {
              tab_text (t,  1, (v * lines_per_variable) + i + 1,
@@ -1050,27 +1074,28 @@ show_contrast_tests (const struct oneway *cmd)
          if (cn->bad_count)
            continue;
 
-         group_stat_array = hsh_sort (group_hash);
-
-         for (ci = 0;
-              coeffi != ll_null (&cn->coefficient_list) && 
-                ci < hsh_count (group_hash);
+         for (coeffi = ll_head (&cn->coefficient_list);
+              coeffi != ll_null (&cn->coefficient_list);
               ++ci, coeffi = ll_next (coeffi))
            {
+             double n, mean, variance;
+             const struct descriptive_data *dd = categoricals_get_user_data_by_subscript (cats, ci);
              struct coeff_node *cn = ll_data (coeffi, struct coeff_node, ll);
              const double coef = cn->coeff; 
-             struct group_statistics *gs = group_stat_array[ci];
+             double winv ;
+
+             moments1_calculate (dd->mom, &n, &mean, &variance, NULL, NULL);
 
-             const double winv = pow2 (gs->std_dev) / gs->n;
+             winv = variance / n;
 
-             contrast_value += coef * gs->mean;
+             contrast_value += coef * mean;
 
-             coef_msq += (coef * coef) / gs->n;
+             coef_msq += (pow2 (coef)) / n;
 
-             sec_vneq += (coef * coef) * pow2 (gs->std_dev) /gs->n;
+             sec_vneq += (pow2 (coef)) * variance / n;
 
-             df_numerator += (coef * coef) * winv;
-             df_denominator += pow2((coef * coef) * winv) / (gs->n - 1);
+             df_numerator += (pow2 (coef)) * winv;
+             df_denominator += pow2((pow2 (coef)) * winv) / (n - 1);
            }
 
          sec_vneq = sqrt (sec_vneq);
@@ -1084,7 +1109,7 @@ show_contrast_tests (const struct oneway *cmd)
                      n_contrasts,
                      TAB_RIGHT, contrast_value, NULL);
 
-         std_error_contrast = sqrt (grp_data->mse * coef_msq);
+         std_error_contrast = sqrt (pvw->mse * coef_msq);
 
          /* Std. Error */
          tab_double (t,  4, (v * lines_per_variable) + i + 1,
@@ -1099,7 +1124,6 @@ show_contrast_tests (const struct oneway *cmd)
                      TAB_RIGHT, T,
                      NULL);
 
-         df = grp_data->ugs.n - grp_data->n_groups;
 
          /* Degrees of Freedom */
          tab_fixed (t,  6, (v * lines_per_variable) + i + 1,
index d1461a599f0724471a37aaf41a1120c336670f52..dd2093674b16c34ecb8db3702687b6b38cd5245e 100644 (file)
@@ -397,19 +397,18 @@ struct roc_state
    WEIGHT is the value of a single count.
  */
 static struct casereader *
-accumulate_counts (struct casereader *cutpoint_rdr, 
+accumulate_counts (struct casereader *input,
                   double result, double weight, 
                   bool (*pos_cond) (double, double),
                   int true_index, int false_index)
 {
-  const struct caseproto *proto = casereader_get_proto (cutpoint_rdr);
+  const struct caseproto *proto = casereader_get_proto (input);
   struct casewriter *w =
     autopaging_writer_create (proto);
-  struct casereader *r = casereader_clone (cutpoint_rdr);
   struct ccase *cpc;
   double prev_cp = SYSMIS;
 
-  for ( ; (cpc = casereader_read (r) ); case_unref (cpc))
+  for ( ; (cpc = casereader_read (input) ); case_unref (cpc))
     {
       struct ccase *new_case;
       const double cp = case_data_idx (cpc, ROC_CUTPOINT)->f;
@@ -431,7 +430,7 @@ accumulate_counts (struct casereader *cutpoint_rdr,
 
       casewriter_write (w, new_case);
     }
-  casereader_destroy (r);
+  casereader_destroy (input);
 
   return casewriter_make_reader (w);
 }
@@ -529,9 +528,12 @@ process_group (const struct variable *var, struct casereader *reader,
       casereader_destroy (r2);
     }
 
+  
   casereader_destroy (r1);
   casereader_destroy (rclone);
 
+  caseproto_unref (proto);
+
   return casewriter_make_reader (wtr);
 }
 
@@ -628,24 +630,29 @@ prepare_cutpoints (struct cmd_roc *roc, struct roc_state *rs, struct casereader
   int i;
   struct casereader *r = casereader_clone (input);
   struct ccase *c;
-  struct caseproto *proto = caseproto_create ();
 
-  struct subcase ordering;
-  subcase_init (&ordering, ROC_CUTPOINT, 0, SC_ASCEND);
+  {
+    struct caseproto *proto = caseproto_create ();
+    struct subcase ordering;
+    subcase_init (&ordering, ROC_CUTPOINT, 0, SC_ASCEND);
 
-  proto = caseproto_add_width (proto, 0); /* cutpoint */
-  proto = caseproto_add_width (proto, 0); /* ROC_TP */
-  proto = caseproto_add_width (proto, 0); /* ROC_FN */
-  proto = caseproto_add_width (proto, 0); /* ROC_TN */
-  proto = caseproto_add_width (proto, 0); /* ROC_FP */
+    proto = caseproto_add_width (proto, 0); /* cutpoint */
+    proto = caseproto_add_width (proto, 0); /* ROC_TP */
+    proto = caseproto_add_width (proto, 0); /* ROC_FN */
+    proto = caseproto_add_width (proto, 0); /* ROC_TN */
+    proto = caseproto_add_width (proto, 0); /* ROC_FP */
 
-  for (i = 0 ; i < roc->n_vars; ++i)
-    {
-      rs[i].cutpoint_wtr = sort_create_writer (&ordering, proto);
-      rs[i].prev_result = SYSMIS;
-      rs[i].max = -DBL_MAX;
-      rs[i].min = DBL_MAX;
-    }
+    for (i = 0 ; i < roc->n_vars; ++i)
+      {
+       rs[i].cutpoint_wtr = sort_create_writer (&ordering, proto);
+       rs[i].prev_result = SYSMIS;
+       rs[i].max = -DBL_MAX;
+       rs[i].min = DBL_MAX;
+      }
+
+    caseproto_unref (proto);
+    subcase_destroy (&ordering);
+  }
 
   for (; (c = casereader_read (r)) != NULL; case_unref (c))
     {
@@ -692,7 +699,7 @@ do_roc (struct cmd_roc *roc, struct casereader *reader, struct dictionary *dict)
   struct casereader *negatives = NULL;
   struct casereader *positives = NULL;
 
-  struct caseproto *n_proto = caseproto_create ();
+  struct caseproto *n_proto = NULL;
 
   struct subcase up_ordering;
   struct subcase down_ordering;
@@ -743,14 +750,13 @@ do_roc (struct cmd_roc *roc, struct casereader *reader, struct dictionary *dict)
       struct ccase *c;
 
       struct ccase *cpos;
-      struct casereader *n_neg ;
+      struct casereader *n_neg_reader ;
       const struct variable *var = roc->vars[i];
 
       struct casereader *neg ;
       struct casereader *pos = casereader_clone (positives);
 
-
-      struct casereader *n_pos =
+      struct casereader *n_pos_reader =
        process_positive_group (var, pos, dict, &rs[i]);
 
       if ( negatives == NULL)
@@ -760,18 +766,17 @@ do_roc (struct cmd_roc *roc, struct casereader *reader, struct dictionary *dict)
 
       neg = casereader_clone (negatives);
 
-      n_neg = process_negative_group (var, neg, dict, &rs[i]);
-
+      n_neg_reader = process_negative_group (var, neg, dict, &rs[i]);
 
       /* Merge the n_pos and n_neg casereaders */
       w = sort_create_writer (&up_ordering, n_proto);
-      for ( ; (cpos = casereader_read (n_pos) ); case_unref (cpos))
+      for ( ; (cpos = casereader_read (n_pos_reader) ); case_unref (cpos))
        {
          struct ccase *pos_case = case_create (n_proto);
          struct ccase *cneg;
          const double jpos = case_data_idx (cpos, VALUE)->f;
 
-         while ((cneg = casereader_read (n_neg)))
+         while ((cneg = casereader_read (n_neg_reader)))
            {
              struct ccase *nc = case_create (n_proto);
 
@@ -801,6 +806,9 @@ do_roc (struct cmd_roc *roc, struct casereader *reader, struct dictionary *dict)
          casewriter_write (w, pos_case);
        }
 
+      casereader_destroy (n_pos_reader);
+      casereader_destroy (n_neg_reader);
+
 /* These aren't used anymore */
 #undef N_EQ
 #undef N_PRED
@@ -828,6 +836,7 @@ do_roc (struct cmd_roc *roc, struct casereader *reader, struct dictionary *dict)
            prev_pos_gt = n_pos_gt;
          }
 
+       casereader_destroy (r);
        r = casewriter_make_reader (w);
       }
 
@@ -852,6 +861,7 @@ do_roc (struct cmd_roc *roc, struct casereader *reader, struct dictionary *dict)
            prev_neg_lt = n_neg_lt;
          }
 
+       casereader_destroy (r);
        r = casewriter_make_reader (w);
       }
 
@@ -859,7 +869,7 @@ do_roc (struct cmd_roc *roc, struct casereader *reader, struct dictionary *dict)
        struct ccase *prev_case = NULL;
        for ( ; (c = casereader_read (r) ); case_unref (c))
          {
-           const struct ccase *next_case = casereader_peek (r, 0);
+           struct ccase *next_case = casereader_peek (r, 0);
 
            const double j = case_data_idx (c, VALUE)->f;
            double n_pos_eq = case_data_idx (c, N_POS_EQ)->f;
@@ -893,9 +903,12 @@ do_roc (struct cmd_roc *roc, struct casereader *reader, struct dictionary *dict)
 
              }
 
+           case_unref (next_case);
            case_unref (prev_case);
            prev_case = case_clone (c);
          }
+       casereader_destroy (r);
+       case_unref (prev_case);
 
        rs[i].auc /=  rs[i].n1 * rs[i].n2; 
        if ( roc->invert ) 
@@ -917,7 +930,14 @@ do_roc (struct cmd_roc *roc, struct casereader *reader, struct dictionary *dict)
   casereader_destroy (positives);
   casereader_destroy (negatives);
 
+  caseproto_unref (n_proto);
+  subcase_destroy (&up_ordering);
+  subcase_destroy (&down_ordering);
+
   output_roc (rs, roc);
+  for (i = 0 ; i < roc->n_vars; ++i)
+    casereader_destroy (rs[i].cutpoint_rdr);
 
   free (rs);
 }
index 754b0d7dfcd6b47c08d62f6f4db05ab8a6e90812..3848911313ed62721eff29b20d6fd9bdf14ca6e9 100644 (file)
@@ -80,6 +80,7 @@ output_frequency_table (const struct two_sample_test *t2s,
       ds_put_cstr (&pair_name, " - ");
       ds_put_cstr (&pair_name, var_to_string ((*vp)[1]));
 
+
       tab_text (table, 0, 1 + i * 4, TAB_LEFT, ds_cstr (&pair_name));
 
       ds_destroy (&pair_name);
@@ -168,7 +169,7 @@ sign_execute (const struct dataset *ds,
   int i;
   bool warn = true;
   const struct dictionary *dict = dataset_dict (ds);
-  const struct two_sample_test *t2s = (const struct two_sample_test *) test;
+  const struct two_sample_test *t2s = UP_CAST (test, const struct two_sample_test, parent);
   struct ccase *c;
 
   struct sign_test_params *stp = xcalloc (sizeof *stp, t2s->n_pairs);
index 8aee3b157992827fa9021c876b39822809ab43b2..9eb2c471356b2daa7a6e94f7a7174aac1c7cb65f 100644 (file)
@@ -1401,6 +1401,23 @@ group_calc (const struct dictionary *dict, struct t_test_proc *proc,
   return 0;
 }
 
+
+static bool
+is_criteria_value (const struct ccase *c, void *aux)
+{
+  const struct t_test_proc *proc = aux;
+  const union value *val = case_data (c, proc->indep_var);
+  int width = var_get_width (proc->indep_var);
+
+  if ( value_equal (val, &proc->g_value[0], width))
+    return true;
+
+  if ( value_equal (val, &proc->g_value[1], width))
+    return true;
+
+  return false;
+}
+
 static void
 calculate (struct t_test_proc *proc,
            struct casereader *input, const struct dataset *ds)
@@ -1410,7 +1427,7 @@ calculate (struct t_test_proc *proc,
   struct trbox test_results_box;
   struct taint *taint;
   struct ccase *c;
-
+  int i;
   c = casereader_peek (input, 0);
   if (c == NULL)
     {
@@ -1439,8 +1456,20 @@ calculate (struct t_test_proc *proc,
       break;
     case T_IND_SAMPLES:
       group_calc (dict, proc, casereader_clone (input));
-      levene (dict, input, proc->indep_var, proc->n_vars, proc->vars,
-              proc->exclude);
+
+      for (i = 0; i < proc->n_vars; ++i)
+       {
+         struct group_proc *grp_data = group_proc_get (proc->vars[i]);
+
+         if ( proc->criterion == CMP_EQ )
+           {
+             input = casereader_create_filter_func (input, is_criteria_value, NULL,
+                                                    proc, 
+                                                    NULL);
+           }
+
+         grp_data->levene = levene ( input, proc->indep_var, proc->vars[i], dict_get_weight (dict), proc->exclude);
+       }
       break;
     default:
       NOT_REACHED ();
index 197124cf6025fbe001a1763360307b80d5ddbda0..268296d7e6ee404f2a6657d7970ec385628ff05e 100644 (file)
@@ -22,8 +22,6 @@
 
 #include <gsl/gsl_cdf.h>
 #include <math.h>
-#include <signal.h>
-#include <unistd.h>
 
 #include <data/casereader.h>
 #include <data/casewriter.h>
 #include <data/procedure.h>
 #include <data/subcase.h>
 #include <data/variable.h>
-#include <gsl/gsl_cdf.h>
 #include <libpspp/assertion.h>
 #include <libpspp/message.h>
 #include <libpspp/misc.h>
 #include <math/sort.h>
 #include <math/wilcoxon-sig.h>
 #include <output/tab.h>
-#include <signal.h>
-#include <unistd.h>
 
 #include "minmax.h"
 #include "xalloc.h"
@@ -84,7 +79,7 @@ wilcoxon_execute (const struct dataset *ds,
   int i;
   bool warn = true;
   const struct dictionary *dict = dataset_dict (ds);
-  const struct two_sample_test *t2s = (struct two_sample_test *) test;
+  const struct two_sample_test *t2s = UP_CAST (test, const struct two_sample_test, parent);
 
   struct wilcoxon_state *ws = xcalloc (sizeof (*ws), t2s->n_pairs);
   const struct variable *weight = dict_get_weight (dict);
index 5521972477f270a1a046b9a99f5b0b3e5a117f69..83bd07b351b9cb2ee9f270ce3eed1534b6ad5982 100644 (file)
@@ -85,17 +85,8 @@ read_syntax_file (struct getl_interface *s,
   struct syntax_file_source *sfs = UP_CAST (s, struct syntax_file_source,
                                             parent);
 
-  /* Open file, if not yet opened. */
   if (sfs->syntax_file == NULL)
-    {
-      sfs->syntax_file = fn_open (sfs->fn, "r");
-
-      if (sfs->syntax_file == NULL)
-        {
-          msg (ME, _("Opening `%s': %s."), sfs->fn, strerror (errno));
-          return false;
-        }
-    }
+    return false;
 
   /* Read line from file and remove new-line.
      Skip initial "#! /usr/bin/pspp" line. */
@@ -142,6 +133,9 @@ create_syntax_file_source (const char *fn)
   struct syntax_file_source *ss = xzalloc (sizeof (*ss));
 
   ss->fn = xstrdup (fn);
+  ss->syntax_file = fn_open (ss->fn, "r");
+  if (ss->syntax_file == NULL)
+    msg (ME, _("Opening `%s': %s."), ss->fn, strerror (errno));
 
   ss->parent.interactive = always_false;
   ss->parent.read = read_syntax_file ;
index 405141cd50a7fd1734f387281b5b344d5a7e74f9..4f3c1c143a76f577e522568b78d869dde9574dd2 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPPIRE - a graphical interface for PSPP.
-   Copyright (C) 2007, 2009 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2009, 2010 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
@@ -54,7 +54,7 @@ name (const struct getl_interface *i UNUSED)
 static int
 location (const struct getl_interface *i UNUSED)
 {
-  return -1;
+  return 0;
 }
 
 
@@ -100,21 +100,13 @@ read_single_line (struct getl_interface *i,
   return true;
 }
 
-struct getl_interface *
-create_syntax_string_source (const char *format, ...)
+static struct syntax_string_source *
+create_syntax_string_source__ (void)
 {
-  va_list args;
-
   struct syntax_string_source *sss = xzalloc (sizeof *sss);
 
   sss->posn = 0;
 
-  ds_init_empty (&sss->buffer);
-
-  va_start (args, format);
-  ds_put_vformat (&sss->buffer, format, args);
-  va_end (args);
-
   sss->parent.interactive = always_false;
   sss->parent.close = do_close;
   sss->parent.read = read_single_line;
@@ -122,6 +114,30 @@ create_syntax_string_source (const char *format, ...)
   sss->parent.name = name;
   sss->parent.location = location;
 
+  return sss;
+}
+
+struct getl_interface *
+create_syntax_string_source (const char *s)
+{
+  struct syntax_string_source *sss = create_syntax_string_source__ ();
+  ds_init_cstr (&sss->buffer, s);
+  return &sss->parent;
+}
+
+struct getl_interface *
+create_syntax_format_source (const char *format, ...)
+{
+  struct syntax_string_source *sss;
+  va_list args;
+
+  sss = create_syntax_string_source__ ();
+
+  ds_init_empty (&sss->buffer);
+
+  va_start (args, format);
+  ds_put_vformat (&sss->buffer, format, args);
+  va_end (args);
 
   return &sss->parent;
 }
index 42d1f4e98db72202c28aee4d26acbba6f8d763b0..d2e1a9ba82c52c781288d491d6d7e1f9c0598739 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPPIRE - a graphical interface for PSPP.
-   Copyright (C) 2007 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2010 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
 #ifndef SYNTAX_STRING_SOURCE_H
 #define SYNTAX_STRING_SOURCE_H
 
+#include "libpspp/compiler.h"
+
 struct getl_interface;
 
 struct syntax_string_source;
 
-struct getl_interface * create_syntax_string_source (const char *fmt, ...);
+struct getl_interface *create_syntax_string_source (const char *);
+struct getl_interface *create_syntax_format_source (const char *, ...)
+  PRINTF_FORMAT (1, 2);
 
 const char * syntax_string_source_get_syntax (const struct syntax_string_source *s);
 
index fed19479d2fe8043ee1a060e88b49b2fc4221c3e..b2d5a1663f0808a8a6b9a6f09a3527eea61c3b24 100644 (file)
@@ -136,7 +136,7 @@ parse_fp (struct lexer *lexer, struct fp *fp)
               msg (SE, _("Hexadecimal floating constant too long."));
               return false;
             }
-          strncpy ((char *) fp->data, ds_cstr (lex_tokstr (lexer)), sizeof fp->data);
+          strncpy (CHAR_CAST_BUG (char *,fp->data), ds_cstr (lex_tokstr (lexer)), sizeof fp->data);
         }
 
       lex_get (lexer);
index 728080153c8565c8f6daf033acf3f6102d446de7..6285fc042c04a07cac583e68a38c814921ab4022 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2008 Free Software Foundation, Inc.
+   Copyright (C) 2008, 2010 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
@@ -33,7 +33,7 @@ cmd_debug_format_guesser (struct lexer *lexer, struct dataset *ds UNUSED)
   char format_string[FMT_STRING_LEN_MAX + 1];
 
   g = fmt_guesser_create ();
-  while (lex_token (lexer) == T_STRING)
+  while (lex_is_string (lexer))
     {
       fprintf (stderr, "\"%s\" ", ds_cstr (lex_tokstr (lexer)));
       fmt_guesser_add (g, ds_ss (lex_tokstr (lexer)));
index c4ca92b0bc54bcbb4a1eb8b69e67a49624bff13f..3a3e16d50af4ab1176215e9246ff9a868ef24751 100644 (file)
@@ -8,6 +8,7 @@ language_utilities_sources = \
        src/language/utilities/cd.c \
        src/language/utilities/date.c \
        src/language/utilities/echo.c \
+       src/language/utilities/host.c \
        src/language/utilities/title.c \
        src/language/utilities/include.c \
        src/language/utilities/permissions.c 
index ebd6a990fc88e1c1c02a48a7562fd91d4fccdc32..b27b40017a367c397901acfb932bb1e81166ad2e 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2005, 2009 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2009, 2010 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
@@ -29,7 +29,7 @@ cmd_echo (struct lexer *lexer, struct dataset *ds UNUSED)
 {
   struct tab_table *tab;
 
-  if (lex_token (lexer) != T_STRING)
+  if (!lex_force_string (lexer))
     return CMD_FAILURE;
 
   tab = tab_create(1, 1);
diff --git a/src/language/utilities/host.c b/src/language/utilities/host.c
new file mode 100644 (file)
index 0000000..ac09145
--- /dev/null
@@ -0,0 +1,167 @@
+/* PSPP - a program for statistical analysis.
+   Copyright (C) 1997-9, 2000, 2009, 2010 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
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <ctype.h>
+#include <errno.h>
+#include <unistd.h>
+#if HAVE_SYS_WAIT_H
+#include <sys/wait.h>
+#endif
+
+#include "data/settings.h"
+#include "language/command.h"
+#include "language/lexer/lexer.h"
+#include "libpspp/assertion.h"
+#include "libpspp/compiler.h"
+#include "libpspp/message.h"
+#include "libpspp/str.h"
+
+#include "gl/xalloc.h"
+#include "gl/xmalloca.h"
+
+#include "gettext.h"
+#define _(msgid) gettext (msgid)
+#define N_(msgid) msgid
+\f
+#if HAVE_FORK && HAVE_EXECL
+/* Spawn an interactive shell process. */
+static bool
+shell (void)
+{
+  int pid;
+
+  pid = fork ();
+  switch (pid)
+    {
+    case 0:
+      {
+       const char *shell_fn;
+       char *shell_process;
+
+       {
+         int i;
+
+         for (i = 3; i < 20; i++)
+           close (i);
+       }
+
+       shell_fn = getenv ("SHELL");
+       if (shell_fn == NULL)
+         shell_fn = "/bin/sh";
+
+       {
+         const char *cp = strrchr (shell_fn, '/');
+         cp = cp ? &cp[1] : shell_fn;
+         shell_process = xmalloca (strlen (cp) + 8);
+         strcpy (shell_process, "-");
+         strcat (shell_process, cp);
+         if (strcmp (cp, "sh"))
+           shell_process[0] = '+';
+       }
+
+       execl (shell_fn, shell_process, NULL);
+
+       _exit (1);
+      }
+
+    case -1:
+      msg (SE, _("Couldn't fork: %s."), strerror (errno));
+      return false;
+
+    default:
+      assert (pid > 0);
+      while (wait (NULL) != pid)
+       ;
+      return true;
+    }
+}
+#else /* !(HAVE_FORK && HAVE_EXECL) */
+/* Don't know how to spawn an interactive shell. */
+static bool
+shell (void)
+{
+  msg (SE, _("Interactive shell not supported on this platform."));
+  return false;
+}
+#endif
+
+/* Executes the specified COMMAND in a subshell.  Returns true if
+   successful, false otherwise. */
+static bool
+run_command (const char *command)
+{
+  if (system (NULL) == 0)
+    {
+      msg (SE, _("Command shell not supported on this platform."));
+      return false;
+    }
+
+  /* Execute the command. */
+  if (system (command) == -1)
+    msg (SE, _("Error executing command: %s."), strerror (errno));
+
+  return true;
+}
+
+int
+cmd_host (struct lexer *lexer, struct dataset *ds UNUSED)
+{
+  if (settings_get_safer_mode ())
+    {
+      msg (SE, _("This command not allowed when the SAFER option is set."));
+      return CMD_FAILURE;
+    }
+
+  if (lex_token (lexer) == '.')
+    return shell () ? CMD_SUCCESS : CMD_FAILURE;
+  else if (lex_match_id (lexer, "COMMAND"))
+    {
+      struct string command;
+      bool ok;
+
+      lex_match (lexer, '=');
+      if (!lex_force_match (lexer, '['))
+        return CMD_FAILURE;
+
+      ds_init_empty (&command);
+      while (lex_is_string (lexer))
+        {
+          if (!ds_is_empty (&command))
+            ds_put_char (&command, '\n');
+          ds_put_substring (&command, ds_ss (lex_tokstr (lexer)));
+          lex_get (lexer);
+        }
+      if (!lex_force_match (lexer, ']'))
+        {
+          ds_destroy (&command);
+          return CMD_FAILURE;
+        }
+
+      ok = run_command (ds_cstr (&command));
+      ds_destroy (&command);
+
+      return ok ? lex_end_of_command (lexer) : CMD_FAILURE;
+    }
+  else
+    {
+      lex_error (lexer, NULL);
+      return CMD_FAILURE;
+    }
+}
index ceb78771d748fb6f18bb8cb79274a23421720eab..52d0e09c91dec5b559e8c86104917f08cad2b5dd 100644 (file)
@@ -91,8 +91,8 @@ cmd_insert (struct lexer *lexer, struct dataset *ds UNUSED)
            syntax_mode = GETL_BATCH;
          else
            {
-             lex_error(lexer,
-                       _("Expecting BATCH or INTERACTIVE after SYNTAX."));
+             lex_error (lexer, _("expecting %s or %s after %s"),
+                         "BATCH", "INTERACTIVE", "SYNTAX");
              return CMD_FAILURE;
            }
        }
@@ -109,7 +109,8 @@ cmd_insert (struct lexer *lexer, struct dataset *ds UNUSED)
            }
          else
            {
-             lex_error (lexer, _("Expecting YES or NO after CD."));
+             lex_error (lexer, _("expecting %s or %s after %s"),
+                         "YES", "NO", "CD");
              return CMD_FAILURE;
            }
        }
@@ -126,7 +127,8 @@ cmd_insert (struct lexer *lexer, struct dataset *ds UNUSED)
            }
          else
            {
-             lex_error (lexer, _("Expecting CONTINUE or STOP after ERROR."));
+             lex_error (lexer, _("expecting %s or %s after %s"),
+                         "CONTINUE", "STOP", "ERROR");
              return CMD_FAILURE;
            }
        }
@@ -176,7 +178,7 @@ parse_insert (struct lexer *lexer, char **filename)
     lex_match (lexer, '=');
 
   /* File name can be identifier or string. */
-  if (lex_token (lexer) != T_ID && lex_token (lexer) != T_STRING)
+  if (lex_token (lexer) != T_ID && !lex_is_string (lexer))
     {
       lex_error (lexer, _("expecting file name"));
       return CMD_FAILURE;
index 03458fcef01671f4ea4b263873ff89ebe86a7a2b..967b1bd2a1c314cca681dd78516084fd30921994 100644 (file)
@@ -47,6 +47,9 @@ cmd_permissions (struct lexer *lexer, struct dataset *ds UNUSED)
   if (lex_match_id (lexer, "FILE"))
     lex_match (lexer, '=');
 
+  if (!lex_force_string (lexer))
+    return CMD_FAILURE;
+
   fn = ds_xstrdup (lex_tokstr (lexer));
   lex_force_match (lexer, T_STRING);
 
index 3c0109cce89b4a1023640b08608a460934597dba..79fe9216b51f715a1e51f60240f60a2d54e8f51a 100644 (file)
@@ -509,7 +509,7 @@ stc_custom_journal (struct lexer *lexer, struct dataset *ds UNUSED, struct cmd_s
     journal_enable ();
   else if (lex_match_id (lexer, "OFF") || lex_match_id (lexer, "NO"))
     journal_disable ();
-  else if (lex_token (lexer) == T_STRING || lex_token (lexer) == T_ID)
+  else if (lex_is_string (lexer) || lex_token (lexer) == T_ID)
     {
       journal_set_file_name (ds_cstr (lex_tokstr (lexer)));
       lex_get (lexer);
@@ -618,13 +618,13 @@ show_cce (const struct dataset *ds UNUSED)
 static char *
 show_decimals (const struct dataset *ds UNUSED)
 {
-  return xasprintf ("\"%c\"", settings_get_decimal_char (FMT_F));
+  return xasprintf ("`%c'", settings_get_decimal_char (FMT_F));
 }
 
 static char *
 show_endcmd (const struct dataset *ds UNUSED)
 {
-  return xasprintf ("\"%c\"", settings_get_endcmd ());
+  return xasprintf ("`%c'", settings_get_endcmd ());
 }
 
 static char *
@@ -923,6 +923,45 @@ cmd_show (struct lexer *lexer, struct dataset *ds)
 
   return CMD_SUCCESS;
 }
+\f
+#define MAX_SAVED_SETTINGS 5
+
+static struct settings *saved_settings[MAX_SAVED_SETTINGS];
+static int n_saved_settings;
+
+int
+cmd_preserve (struct lexer *lexer, struct dataset *ds UNUSED)
+{
+  if (n_saved_settings < MAX_SAVED_SETTINGS)
+    {
+      saved_settings[n_saved_settings++] = settings_get ();
+      return lex_end_of_command (lexer);
+    }
+  else
+    {
+      msg (SE, _("Too many PRESERVE commands without a RESTORE: at most "
+                 "%d levels of saved settings are allowed."),
+           MAX_SAVED_SETTINGS);
+      return CMD_CASCADING_FAILURE;
+    }
+}
+
+int
+cmd_restore (struct lexer *lexer, struct dataset *ds UNUSED)
+{
+  if (n_saved_settings > 0)
+    {
+      struct settings *s = saved_settings[--n_saved_settings];
+      settings_set (s);
+      settings_destroy (s);
+      return lex_end_of_command (lexer);
+    }
+  else
+    {
+      msg (SE, _("RESTORE without matching PRESERVE."));
+      return CMD_FAILURE;
+    }
+}
 
 /*
    Local Variables:
index 09fc2155abc82c0a678364301b1ea0de6b3fa9c9..a508933c68cb7686d2690ec0d75048662b3b4e18 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2009 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2009, 2010 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
@@ -173,10 +173,11 @@ compute_str (void *compute_, struct ccase **c, casenumber case_num)
   if (compute->test == NULL
       || expr_evaluate_num (compute->test, *c, case_num) == 1.0)
     {
+      char *s;
+
       *c = case_unshare (*c);
-      expr_evaluate_str (compute->rvalue, *c, case_num,
-                         case_str_rw (*c, compute->variable),
-                         compute->width);
+      s = CHAR_CAST_BUG (char *, case_str_rw (*c, compute->variable));
+      expr_evaluate_str (compute->rvalue, *c, case_num, s, compute->width);
     }
 
   return TRNS_CONTINUE;
@@ -216,7 +217,8 @@ compute_str_vec (void *compute_, struct ccase **c, casenumber case_num)
       vr = vector_get_var (compute->vector, rindx - 1);
       *c = case_unshare (*c);
       expr_evaluate_str (compute->rvalue, *c, case_num,
-                         case_str_rw (*c, vr), var_get_width (vr));
+                         CHAR_CAST_BUG (char *, case_str_rw (*c, vr)),
+                         var_get_width (vr));
     }
 
   return TRNS_CONTINUE;
index 62b03ba073b9a5f6f6a1c5b282d9c26b0ce286b9..5cfad0ed766ec2376429c32b3dc1bbb83e212271 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2009 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2009, 2010 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
 #include <math.h>
 #include <stdlib.h>
 
-#include <data/case.h>
-#include <data/data-in.h>
-#include <data/format.h>
-#include <data/dictionary.h>
-#include <data/procedure.h>
-#include <data/transformations.h>
-#include <data/variable.h>
-#include <language/command.h>
-#include <language/lexer/lexer.h>
-#include <language/lexer/value-parser.h>
-#include <language/lexer/variable-parser.h>
-#include <libpspp/assertion.h>
-#include <libpspp/compiler.h>
-#include <libpspp/message.h>
-#include <libpspp/pool.h>
-#include <libpspp/str.h>
-
-#include "xalloc.h"
+#include "data/case.h"
+#include "data/data-in.h"
+#include "data/dictionary.h"
+#include "data/format.h"
+#include "data/procedure.h"
+#include "data/transformations.h"
+#include "data/variable.h"
+#include "language/command.h"
+#include "language/lexer/lexer.h"
+#include "language/lexer/value-parser.h"
+#include "language/lexer/variable-parser.h"
+#include "libpspp/assertion.h"
+#include "libpspp/cast.h"
+#include "libpspp/compiler.h"
+#include "libpspp/message.h"
+#include "libpspp/pool.h"
+#include "libpspp/str.h"
+
+#include "gl/xalloc.h"
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
@@ -158,6 +159,7 @@ cmd_recode (struct lexer *lexer, struct dataset *ds)
       /* Create destination variables, if needed.
          This must be the final step; otherwise we'd have to
          delete destination variables on failure. */
+      trns->dst_dict = dataset_dict (ds);
       if (trns->src_vars != trns->dst_vars)
        create_dst_vars (trns, dataset_dict (ds));
 
@@ -373,7 +375,8 @@ set_map_in_str (struct map_in *in, struct pool *pool,
   in->type = MAP_SINGLE;
   value_init_pool (pool, &in->x, width);
   value_copy_buf_rpad (&in->x, width,
-                       ds_data (string), ds_length (string), ' ');
+                       CHAR_CAST_BUG (uint8_t *, ds_data (string)),
+                       ds_length (string), ' ');
 }
 
 /* Parses a mapping output value into OUT, allocating memory from
@@ -388,7 +391,7 @@ parse_map_out (struct lexer *lexer, struct pool *pool, struct map_out *out)
     }
   else if (lex_match_id (lexer, "SYSMIS"))
     set_map_out_num (out, SYSMIS);
-  else if (lex_token (lexer) == T_STRING)
+  else if (lex_is_string (lexer))
     {
       set_map_out_str (out, pool, lex_tokstr (lexer));
       lex_get (lexer);
@@ -543,8 +546,6 @@ 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];
@@ -606,8 +607,9 @@ static const struct map_out *
 find_src_string (struct recode_trns *trns, const uint8_t *value,
                  const struct variable *src_var)
 {
-  struct mapping *m;
+  const char *encoding = dict_get_encoding (trns->dst_dict);
   int width = var_get_width (src_var);
+  struct mapping *m;
 
   for (m = trns->mappings; m < trns->mappings + trns->map_cnt; m++)
     {
@@ -627,11 +629,13 @@ find_src_string (struct recode_trns *trns, const uint8_t *value,
         case MAP_CONVERT:
           {
             union value uv;
+            char *error;
+
+            error = data_in (ss_buffer (CHAR_CAST_BUG (char *, value), width),
+                             LEGACY_NATIVE, FMT_F, &uv, 0, encoding);
+            match = error == NULL;
+            free (error);
 
-            msg_disable ();
-            match = data_in (ss_buffer (value, width), LEGACY_NATIVE,
-                             FMT_F, 0, 0, 0, trns->dst_dict,  &uv, 0);
-            msg_enable ();
             out->value.f = uv.f;
             break;
           }
@@ -678,7 +682,7 @@ recode_trns_proc (void *trns_, struct ccase **c, casenumber case_idx UNUSED)
         }
       else
         {
-          char *dst = case_str_rw (*c, dst_var);
+          char *dst = CHAR_CAST_BUG (char *, case_str_rw (*c, dst_var));
           if (out != NULL)
             {
               if (!out->copy_input)
index 1e33857c1e3afa0a879512378df55694ca3900bc..00e42d6603cc68963f498c6d5ce0ab780c1b19f6 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2009 Free Software Foundation, Inc.
+   Copyright (C) 2009, 2010 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
@@ -18,6 +18,7 @@
 #define LIBPSPP_CAST_H 1
 
 #include <stddef.h>
+#include "gl/verify.h"
 
 /* Expands to a void expression that checks that POINTER is an
    expression whose type is a qualified or unqualified version of
         (CHECK_POINTER_HAS_TYPE (POINTER, TYPE),        \
          (TYPE) (POINTER))
 
+/* Casts POINTER to TYPE.  Yields a compiler diagnostic if either TYPE or
+   POINTER is not a pointer to character type.
+
+   PSPP uses "unsigned char" (actually uint8_t) in "union value" and "char"
+   elsewhere to emphasize that data in union value usually requires reencoding
+   when transferred to and from other string types.  These macros suppress the
+   warning when implicitly converting between pointers to different character
+   types, so their use normally marks a bug that should eventually be fixed.
+   However, until these bugs are fixed, suppressing the warnings is much less
+   annoying.
+
+   Use CHAR_CAST_BUG if you think there is a bug to be fixed, or if you have
+   not yet carefully examined the situation, or if you are not sure.
+   Use CHAR_CAST if you are convinced that this is actually a correct cast. */
+#define CHAR_CAST(TYPE, POINTER)                                \
+        ((void) verify_true (sizeof (*(POINTER)) == 1),         \
+         (void) (sizeof (*(POINTER) + 1)),                      \
+         (void) verify_true (sizeof (*(TYPE) NULL) == 1),       \
+         (void) (sizeof (*(TYPE) NULL + 1)),                    \
+         (TYPE) (POINTER))
+#define CHAR_CAST_BUG(TYPE, POINTER) CHAR_CAST(TYPE, POINTER)
+
 /* Given POINTER, a pointer to the given MEMBER within structure
    STRUCT, returns the address of the STRUCT. */
 #define UP_CAST(POINTER, STRUCT, MEMBER)                                \
         (CHECK_POINTER_COMPATIBILITY (&((STRUCT *) 0)->MEMBER, POINTER), \
          (STRUCT *) ((char *) (POINTER) - offsetof (STRUCT, MEMBER)))
 
+/* A null pointer constant suitable for use in a varargs parameter list.
+
+   This is useful because a literal 0 may not have the same width as a null
+   pointer.  NULL by itself is also insufficient because in C it may expand to
+   simply 0. */
+#define NULL_SENTINEL ((void *) NULL)
+
 #endif /* libpspp/cast.h */
index 43d2a56f460d8f645a61ee86dc5e457c862a9efc..9db6c3ae56260d3be735efd45588622b4eb2077b 100644 (file)
@@ -212,18 +212,18 @@ getl_source_name (const struct source_stream *ss)
   return s->interface->name (s->interface);
 }
 
-/* Returns the location within the current source, or -1 if there is
-   no current source */
+/* Returns the line number within the current source, or 0 if there is no
+   current source. */
 int
 getl_source_location (const struct source_stream *ss)
 {
   const struct getl_source *s = current_source (ss);
 
   if ( ll_is_empty (&ss->sources) )
-    return -1;
+    return 0;
 
   if ( !s->interface->location )
-    return -1;
+    return 0;
 
   return s->interface->location (s->interface);
 }
index eb43b54e7fedf24d7db0dd569cc34d885bb91dd4..9101d1f19eea6574e6a659c94b19b6b4780f9158 100644 (file)
@@ -542,7 +542,7 @@ hsh_dump (struct hsh_table *h)
   void **entry = h->entries;
   int i;
 
-  printf (_("hash table:"));
+  printf ("hash table:");
   for (i = 0; i < h->size; i++)
     printf (" %p", *entry++);
   printf ("\n");
index 02aefb5b51256d201bde172a60bc4b100ccae7f8..4934617121c786f5b19c6db88cc20e6f2033f116 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2006, 2009 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2009, 2010 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
    along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <config.h>
-#include <xalloc.h>
+
+#include "libpspp/i18n.h"
+
 #include <assert.h>
+#include <errno.h>
+#include <iconv.h>
+#include <langinfo.h>
+#include <libintl.h>
 #include <locale.h>
-#include <stdlib.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
-#include <libintl.h>
-#include <iconv.h>
-#include <errno.h>
-#include <relocatable.h>
-#include "assertion.h"
-#include "hmapx.h"
-#include "hash-functions.h"
-#include "pool.h"
-
-#include "i18n.h"
 
-#include "version.h"
+#include "libpspp/assertion.h"
+#include "libpspp/hmapx.h"
+#include "libpspp/hash-functions.h"
+#include "libpspp/pool.h"
+#include "libpspp/str.h"
+#include "libpspp/version.h"
 
-#include <localcharset.h>
-#include "xstrndup.h"
-
-#if HAVE_NL_LANGINFO
-#include <langinfo.h>
-#endif
+#include "gl/localcharset.h"
+#include "gl/xalloc.h"
+#include "gl/relocatable.h"
+#include "gl/xstrndup.h"
 
 struct converter
  {
@@ -79,7 +78,7 @@ create_iconv (const char* tocode, const char* fromcode)
       const int err = errno;
       fprintf (stderr,
                "Warning: "
-               "cannot create a converter for \"%s\" to \"%s\": %s\n",
+               "cannot create a converter for `%s' to `%s': %s\n",
                fromcode, tocode, strerror (err));
     }
 
@@ -87,8 +86,9 @@ create_iconv (const char* tocode, const char* fromcode)
 }
 
 
-/* Similar to recode_string_pool, but allocates the returned value on the heap instead of 
-   in a pool.  It is the caller's responsibility to free the returned value. */
+/* Similar to recode_string_pool, but allocates the returned value on the heap
+   instead of in a pool.  It is the caller's responsibility to free the
+   returned value. */
 char *
 recode_string (const char *to, const char *from,
               const char *text, int length)
@@ -97,117 +97,135 @@ recode_string (const char *to, const char *from,
 }
 
 
-/* 
-Converts the string TEXT, which should be encoded in FROM-encoding, to a
-dynamically allocated string in TO-encoding.   Any characters which cannot
-be converted will be represented by '?'.
+/* Uses CONV to convert the INBYTES starting at IP into the OUTBYTES starting
+   at OP, and appends a null terminator to the output.
+
+   Returns the output length if successful, -1 if the output buffer is too
+   small. */
+static ssize_t
+try_recode (iconv_t conv,
+            const char *ip, size_t inbytes,
+            char *op_, size_t outbytes)
+{
+  /* FIXME: Need to ensure that this char is valid in the target encoding */
+  const char fallbackchar = '?';
+  char *op = op_;
 
-LENGTH should be the length of the string or -1, if null terminated.
+  /* Put the converter into the initial shift state, in case there was any
+     state information left over from its last usage. */
+  iconv (conv, NULL, 0, NULL, 0);
 
-The returned string will be allocated on POOL.
+  while (iconv (conv, (ICONV_CONST char **) &ip, &inbytes,
+                &op, &outbytes) == -1)
+    switch (errno)
+      {
+      case EINVAL:
+        if (outbytes < 2)
+          return -1;
+        *op++ = fallbackchar;
+        *op = '\0';
+        return op - op_;
+
+      case EILSEQ:
+        if (outbytes == 0)
+          return -1;
+        *op++ = fallbackchar;
+        outbytes--;
+        ip++;
+        inbytes--;
+        break;
+
+      case E2BIG:
+        return -1;
+
+      default:
+        /* should never happen */
+        fprintf (stderr, "Character conversion error: %s\n", strerror (errno));
+        NOT_REACHED ();
+        break;
+      }
 
-This function's behaviour differs from that of g_convert_with_fallback provided
-by GLib.  The GLib function will fail (returns NULL) if any part of the input
-string is not valid in the declared input encoding.  This function however perseveres
-even in the presence of badly encoded input.
-*/
+  if (outbytes == 0)
+    return -1;
+
+  *op = '\0';
+  return op - op_;
+}
+
+/* Converts the string TEXT, which should be encoded in FROM-encoding, to a
+   dynamically allocated string in TO-encoding.  Any characters which cannot be
+   converted will be represented by '?'.
+
+   LENGTH should be the length of the string or -1, if null terminated.
+
+   The returned string will be allocated on POOL.
+
+   This function's behaviour differs from that of g_convert_with_fallback
+   provided by GLib.  The GLib function will fail (returns NULL) if any part of
+   the input string is not valid in the declared input encoding.  This function
+   however perseveres even in the presence of badly encoded input. */
 char *
 recode_string_pool (const char *to, const char *from,
-              const char *text, int length, struct pool *pool)
+                    const char *text, int length, struct pool *pool)
 {
-  char *outbuf = 0;
-  size_t outbufferlength;
-  size_t result;
-  char *op ;
-  size_t inbytes = 0;
-  size_t outbytes ;
-  iconv_t conv ;
-
-  /* FIXME: Need to ensure that this char is valid in the target encoding */
-  const char fallbackchar = '?';
+  struct substring out;
 
   if ( text == NULL )
     return NULL;
 
   if ( length == -1 )
-     length = strlen(text);
+     length = strlen (text);
 
-  if (to == NULL)
-    to = default_encoding;
+  out = recode_substring_pool (to, from, ss_buffer (text, length), pool);
+  return out.string;
+}
 
-  if (from == NULL)
-    from = default_encoding;
+/* Converts the string TEXT, which should be encoded in FROM-encoding, to a
+   dynamically allocated string in TO-encoding.  Any characters which cannot be
+   converted will be represented by '?'.
 
-  for ( outbufferlength = 1 ; outbufferlength != 0; outbufferlength <<= 1 )
-    if ( outbufferlength > length)
-      break;
+   The returned string will be null-terminated and allocated on POOL.
 
-  outbuf = pool_malloc (pool, outbufferlength);
-  op = outbuf;
+   This function's behaviour differs from that of g_convert_with_fallback
+   provided by GLib.  The GLib function will fail (returns NULL) if any part of
+   the input string is not valid in the declared input encoding.  This function
+   however perseveres even in the presence of badly encoded input. */
+struct substring
+recode_substring_pool (const char *to, const char *from,
+                       struct substring text, struct pool *pool)
+{
+  size_t outbufferlength;
+  iconv_t conv ;
 
-  outbytes = outbufferlength;
-  inbytes = length;
+  if (to == NULL)
+    to = default_encoding;
 
+  if (from == NULL)
+    from = default_encoding;
 
   conv = create_iconv (to, from);
 
   if ( (iconv_t) -1 == conv )
-       return xstrdup (text);
-
-  do {
-    const char *ip = text;
-    result = iconv (conv, (ICONV_CONST char **) &text, &inbytes,
-                  &op, &outbytes);
-
-    if ( -1 == result )
-      {
-       int the_error = errno;
-
-       switch (the_error)
-         {
-         case EILSEQ:
-         case EINVAL:
-           if ( outbytes > 0 )
-             {
-               *op++ = fallbackchar;
-               outbytes--;
-               text++;
-               inbytes--;
-               break;
-             }
-           /* Fall through */
-         case E2BIG:
-           pool_free (pool, outbuf);
-           outbufferlength <<= 1;
-           outbuf = pool_malloc (pool, outbufferlength);
-           op = outbuf;
-           outbytes = outbufferlength;
-           inbytes = length;
-           text = ip;
-           break;
-         default:
-           /* should never happen */
-            fprintf (stderr, "Character conversion error: %s\n", strerror (the_error));
-           NOT_REACHED ();
-           break;
-         }
-      }
-  } while ( -1 == result );
-
-  if (outbytes == 0 )
     {
-      char *const oldaddr = outbuf;
-      outbuf = pool_realloc (pool, outbuf, outbufferlength + 1);
-
-      op += (outbuf - oldaddr) ;
+      struct substring out;
+      ss_alloc_substring (&out, text);
+      return out;
     }
 
-  *op = '\0';
+  for ( outbufferlength = 1 ; outbufferlength != 0; outbufferlength <<= 1 )
+    if ( outbufferlength > text.length)
+      {
+        char *output = pool_malloc (pool, outbufferlength);
+        ssize_t output_len = try_recode (conv, text.string, text.length,
+                                         output, outbufferlength);
+        if (output_len >= 0)
+          return ss_buffer (output, output_len);
+        pool_free (pool, output);
+      }
 
-  return outbuf;
+  NOT_REACHED ();
 }
 
-
 void
 i18n_init (void)
 {
@@ -311,7 +329,7 @@ i18n_done (void)
 bool
 valid_encoding (const char *enc)
 {
-  iconv_t conv = iconv_open ("UTF8", enc);
+  iconv_t conv = iconv_open (UTF8, enc);
 
   if ( conv == (iconv_t) -1)
     return false;
index e2663a022094b65e5fc5f2aa6e2d303508c2a83b..37bd94406564e13a9282a8fd4d8e76a5e319a3bf 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2006 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2010 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
@@ -26,36 +26,15 @@ void  i18n_init (void);
 
 struct pool;
 
-
-/* 
-Converts the string TEXT, which should be encoded in FROM-encoding, to a
-dynamically allocated string in TO-encoding.   Any characters which cannot
-be converted will be represented by '?'.
-
-LENGTH should be the length of the string or -1, if null terminated.
-
-The returned string will be allocated on POOL.
-
-This function's behaviour differs from that of g_convert_with_fallback provided
-by GLib.  The GLib function will fail (returns NULL) if any part of the input
-string is not valid in the declared input encoding.  This function however perseveres
-even in the presence of badly encoded input.
-*/
-char *recode_string_pool (const char *to, const char *from,
-                         const char *text, int length, struct pool *pool);
-
-
-
-/* Similar to recode_string_pool, but allocates the returned value on the heap instead of 
-   in a pool.  It is the caller's responsibility to free the returned value. */
 char *recode_string (const char *to, const char *from,
-                     const char *text, int len);
-
+                     const char *text, int len);
+char *recode_string_pool (const char *to, const char *from,
+                         const char *text, int length, struct pool *);
+struct substring recode_substring_pool (const char *to, const char *from,
+                                        struct substring text, struct pool *);
 
 bool valid_encoding (const char *enc);
 
-/* Return the decimal separator according to the
-   system locale */
 char get_system_decimal (void);
 
 const char * get_default_encoding (void);
index 4ba8a8f7aca966e5add8671fa31dbd178abfc387..ed6d6e7a9b0cc9b3b10df864ddbc30f57a49d926 100644 (file)
@@ -57,6 +57,10 @@ msg (enum msg_class class, const char *format, ...)
   m.severity = msg_class_to_severity (class);
   va_start (args, format);
   m.text = xvasprintf (format, args);
+  m.where.file_name = NULL;
+  m.where.line_number = 0;
+  m.where.first_column = 0;
+  m.where.last_column = 0;
   va_end (args);
 
   msg_emit (&m);
@@ -114,13 +118,25 @@ msg_to_string (const struct msg *m, const char *command_name)
   ds_init_empty (&s);
 
   if (m->category != MSG_C_GENERAL
-      && (m->where.file_name || m->where.line_number != -1))
+      && (m->where.file_name
+          || m->where.line_number > 0
+          || m->where.first_column > 0))
     {
       if (m->where.file_name)
-        ds_put_format (&s, "%s:", m->where.file_name);
-      if (m->where.line_number != -1)
-        ds_put_format (&s, "%d:", m->where.line_number);
-      ds_put_char (&s, ' ');
+        ds_put_format (&s, "%s", m->where.file_name);
+      if (m->where.line_number > 0)
+        {
+          if (!ds_is_empty (&s))
+            ds_put_char (&s, ':');
+          ds_put_format (&s, "%d", m->where.line_number);
+        }
+      if (m->where.first_column > 0)
+        {
+          ds_put_format (&s, ".%d", m->where.first_column);
+          if (m->where.last_column > m->where.first_column + 1)
+            ds_put_format (&s, "-%d", m->where.last_column - 1);
+        }
+      ds_put_cstr (&s, ": ");
     }
 
   switch (m->severity)
@@ -199,7 +215,9 @@ submit_note (char *s)
   m.category = MSG_C_GENERAL;
   m.severity = MSG_S_NOTE;
   m.where.file_name = NULL;
-  m.where.line_number = -1;
+  m.where.line_number = 0;
+  m.where.first_column = 0;
+  m.where.last_column = 0;
   m.text = s;
   msg_handler (&m);
   free (s);
@@ -253,12 +271,18 @@ process_msg (const struct msg *m)
 void
 msg_emit (struct msg *m)
 {
-  if ( s_stream )
-    get_msg_location (s_stream, &m->where);
+  if ( s_stream && m->where.file_name == NULL )
+    {
+      struct msg_locator loc;
+
+      get_msg_location (s_stream, &loc);
+      m->where.file_name = loc.file_name;
+      m->where.line_number = loc.line_number;
+    }
   else
     {
       m->where.file_name = NULL;
-      m->where.line_number = -1;
+      m->where.line_number = 0;
     }
 
   if (!messages_disabled)
@@ -288,7 +312,7 @@ msg_enable (void)
 /* Private functions. */
 
 void
-request_bug_report_and_abort (const char *msg)
+request_bug_report (const char *msg)
 {
   fprintf (stderr, "******************************************************\n");
   fprintf (stderr, "You have discovered a bug in PSPP.  Please report this\n");
@@ -310,7 +334,5 @@ request_bug_report_and_abort (const char *msg)
 #endif
            );
   fprintf (stderr, "******************************************************\n");
-
-  _exit (EXIT_FAILURE);
 }
 
index bdd27a5e72faac5cc52ee2e85bbd8a992a7c6912..fad7816f19b0c57804248010203fbbda35feb512 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2006, 2010 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
@@ -70,8 +70,10 @@ msg_class_from_category_and_severity (enum msg_category category,
 /* A file location.  */
 struct msg_locator
   {
-    char *file_name;           /* File name. */
-    int line_number;            /* Line number. */
+    char *file_name;           /* File name (NULL if none). */
+    int line_number;           /* Line number (0 if none). */
+    int first_column;          /* 1-based column number (0 if none). */
+    int last_column;           /* 1-based exclusive last column (0 if none). */
   };
 
 /* A message. */
@@ -115,7 +117,7 @@ void msg_ui_disable_warnings (bool);
 
 
 /* Used in panic situations only. */
-void request_bug_report_and_abort (const char *msg) NO_RETURN;
+void request_bug_report (const char *msg);
 
 
 #endif /* message.h */
index 80198f82bc76262b60b2841be92a25e8ce1cc648..940f89aa73495cf80fc4b8e3663cdac15c87273f 100644 (file)
@@ -707,7 +707,7 @@ mc_parser_option_callback (int id, void *mc_options_)
         mc_options_set_strategy (options, MC_RANDOM);
       else
         error (1, 0,
-               "strategy must be \"broad\", \"deep\", or \"random\"");
+               "strategy must be `broad', `deep', or `random'");
       break;
 
     case OPT_MAX_DEPTH:
@@ -756,8 +756,8 @@ mc_parser_option_callback (int id, void *mc_options_)
       else if (!strcmp (optarg, "random"))
         mc_options_set_queue_limit_strategy (options, MC_DROP_RANDOM);
       else
-        error (1, 0, "--queue-drop argument must be \"newest\", "
-               "\"oldest\", or \"random\"");
+        error (1, 0, "--queue-drop argument must be `newest' "
+               "`oldest' or `random'");
       break;
 
     case OPT_SEED:
index 71f54474d57f995f8c5b73572e1d8f761b7e934e..9f0cb6e31463ab5caf319114e43fed26f640ae2b 100644 (file)
@@ -30,6 +30,7 @@
 #include <relocatable.h>
 #include "minmax.h"
 #include "xalloc.h"
+#include "xmemdup0.h"
 #include "xsize.h"
 \f
 /* Reverses the order of NBYTES bytes at address P, thus converting
@@ -379,14 +380,13 @@ ss_tail (struct substring ss, size_t cnt)
     return ss;
 }
 
-/* Makes a malloc()'d copy of the contents of OLD
+/* Makes a malloc()'d, null-terminated copy of the contents of OLD
    and stores it in NEW. */
 void
 ss_alloc_substring (struct substring *new, struct substring old)
 {
-  new->string = xmalloc (old.length);
+  new->string = xmemdup0 (old.string, old.length);
   new->length = old.length;
-  memcpy (new->string, old.string, old.length);
 }
 
 /* Allocates room for a CNT-character string in NEW. */
@@ -1465,7 +1465,9 @@ ds_relocate (struct string *st)
     {
       ds_clear (st);
       ds_put_cstr (st, rel);
-      free ((char *) rel);
+      /* The documentation for relocate says that casting away const
+       and then freeing is appropriate ... */
+      free (CONST_CAST (char *, rel));
     }
 }
 
index 5aba65b78e92d35499a886064edb12e1b81ce39d..c8b337e452012f03c2d16f5229f2253441a16b21 100644 (file)
@@ -26,6 +26,7 @@
 #include <data/value.h>
 #include <libpspp/hmap.h>
 #include <libpspp/pool.h>
+#include <libpspp/array.h>
 
 #include <libpspp/str.h>
 
@@ -34,11 +35,13 @@ struct value_node
   struct hmap_node node;      /* Node in hash map. */
   union value value;          /* The value being labeled. */
   double cc;                  /* The total of the weights of cases with this value */
+
+  void *user_data;            /* A pointer to data which the caller can store stuff */
+
   int subscript;              /* A zero based integer, unique within the variable.
                                 Can be used as an index into an array */
 };
 
-
 struct var_params
 {
   /* A map indexed by a union values */
@@ -59,6 +62,18 @@ struct var_params
 };
 
 
+/* Comparison function to sort the reverse_value_map in ascending order */
+static int
+compare_value_node (const void *vn1_, const void *vn2_, const void *aux)
+{
+  const struct value_node * const *vn1 = vn1_;
+  const struct value_node * const *vn2 = vn2_;
+  const struct var_params *vp = aux;
+
+  return value_compare_3way (&(*vn1)->value, &(*vn2)->value, var_get_width (vp->var));
+}
+
+
 struct categoricals
 {
   /* The weight variable */
@@ -84,6 +99,16 @@ struct categoricals
 
   /* Missing values to be excluded */
   enum mv_class exclude;
+
+  /* Function to be called on each update */
+  update_func *update;
+
+  /* Function specified by the caller to create user_data */
+  user_data_create_func *user_data_create;
+
+  /* Auxilliary data to be passed to update and user_data_create_func*/
+  void *aux1;
+  void *aux2;
 };
 
 
@@ -152,7 +177,7 @@ categoricals_dump (const struct categoricals *cat)
 
   printf ("\nReverse variable map:\n");
 
-  for (v = 0 ; v < cat->n_cats_total - cat->n_vars; ++v)
+  for (v = 0 ; v < cat->n_cats_total; ++v)
     printf ("%d ", cat->reverse_variable_map[v]);
   printf ("\n");
 }
@@ -179,10 +204,12 @@ lookup_value (const struct hmap *map, const struct variable *var, const union va
 }
 
 
-
 struct categoricals *
-categoricals_create (const struct variable **v, size_t n_vars,
-                    const struct variable *wv, enum mv_class exclude)
+categoricals_create (const struct variable *const *v, size_t n_vars,
+                    const struct variable *wv, enum mv_class exclude,
+                    user_data_create_func *udf,
+                    update_func *update, void *aux1, void *aux2
+                    )
 {
   size_t i;
   struct categoricals *cat = xmalloc (sizeof *cat);
@@ -194,6 +221,12 @@ categoricals_create (const struct variable **v, size_t n_vars,
   cat->reverse_variable_map = NULL;
   cat->pool = pool_create ();
   cat->exclude = exclude;
+  cat->update = update;
+  cat->user_data_create = udf;
+
+  cat->aux1 = aux1;
+  cat->aux2 = aux2;
+
 
   cat->vp = pool_calloc (cat->pool, cat->n_vp, sizeof *cat->vp);
 
@@ -246,10 +279,16 @@ categoricals_update (struct categoricals *cat, const struct ccase *c)
            cat->n_vars++;
 
          node->subscript = cat->vp[i].n_cats++ ;
+
+         if (cat->user_data_create)
+           node->user_data = cat->user_data_create (cat->aux1, cat->aux2);
        }
 
       node->cc += weight;
       cat->vp[i].cc += weight;
+
+      if (cat->update)
+       cat->update (node->user_data, cat->exclude, cat->wv, var, c, cat->aux1, cat->aux2);
     }
 }
 
@@ -283,7 +322,7 @@ categoricals_done (struct categoricals *cat)
   int v;
   int idx = 0;
   cat->reverse_variable_map = pool_calloc (cat->pool,
-                                          cat->n_cats_total - cat->n_vars,
+                                          cat->n_cats_total,
                                           sizeof *cat->reverse_variable_map);
   
   for (v = 0 ; v < cat->n_vp; ++v)
@@ -303,14 +342,18 @@ categoricals_done (struct categoricals *cat)
          vp->reverse_value_map[vn->subscript] = vn;
        }
 
+      /* For some purposes (eg CONTRASTS in ONEWAY) the values need to be sorted */
+      sort (vp->reverse_value_map, vp->n_cats, sizeof (const struct value_node *),
+           compare_value_node, vp);
+
       /* Populate the reverse variable map.
-        This implementation considers the first value of each categorical variable
-        as the basis.  Therefore, this loop starts from 1 instead of 0 */
-      for (i = 1; i < vp->n_cats; ++i)
+       */
+      for (i = 0; i < vp->n_cats; ++i)
        cat->reverse_variable_map[idx++] = v;
     }
 
   assert (cat->n_vars <= cat->n_vp);
+
 }
 
 
@@ -319,7 +362,7 @@ reverse_variable_lookup (const struct categoricals *cat, int subscript)
 {
   assert (cat->reverse_variable_map);
   assert (subscript >= 0);
-  assert (subscript < cat->n_cats_total - cat->n_vars);
+  assert (subscript < cat->n_cats_total);
 
   return cat->reverse_variable_map[subscript];
 }
@@ -386,3 +429,15 @@ categoricals_get_n_variables (const struct categoricals *cat)
 {
   return cat->n_vars;
 }
+
+
+
+void *
+categoricals_get_user_data_by_subscript (const struct categoricals *cat, int subscript)
+{
+  int vindex = reverse_variable_lookup (cat, subscript);
+  const struct var_params *vp = &cat->vp[vindex];
+
+  const struct value_node *vn = vp->reverse_value_map [subscript - vp->base_subscript];
+  return vn->user_data;
+}
index 2f86ce1df911f1cfa29c7affc384711f631b1d66..09ced7d7acc2a9900fd67039697b98273aaafe0c 100644 (file)
@@ -27,8 +27,19 @@ struct ccase;
 
 union value ;
 
-struct categoricals *categoricals_create (const struct variable **v, size_t n_vars,
-                                         const struct variable *wv, enum mv_class exclude);
+typedef void update_func (void *user_data,
+                         enum mv_class exclude,
+                         const struct variable *wv, 
+                         const struct variable *catvar,
+                         const struct ccase *c,
+                         void *aux1, void *aux2);
+
+typedef void *user_data_create_func (void *aux1, void *aux2);
+
+struct categoricals *categoricals_create (const struct variable *const *v, size_t n_vars,
+                                         const struct variable *wv, enum mv_class exclude,
+                                         user_data_create_func *udf,
+                                         update_func *update, void *aux1, void *aux2);
 
 void categoricals_destroy (struct categoricals *);
 
@@ -63,6 +74,8 @@ double categoricals_get_sum_by_subscript (const struct categoricals *cat, int su
 double categoricals_get_binary_by_subscript (const struct categoricals *cat, int subscript,
                                             const struct ccase *c);
 
+void * categoricals_get_user_data_by_subscript (const struct categoricals *cat, int subscript);
+
 
 
 
index b5a4166dfa40643c5a71c88f37ceb7b4c604b1d5..aa7f41771c1ac9f3d55ff90d5a418010e5e032a8 100644 (file)
@@ -68,7 +68,7 @@ struct covariance
 {
   /* The variables for which the covariance matrix is to be calculated. */
   size_t n_vars;
-  const struct variable **vars;
+  const struct variable *const *vars;
 
   /* Categorical variables. */
   struct categoricals *categoricals;
@@ -131,7 +131,7 @@ covariance_moments (const struct covariance *cov, int m)
 /* Create a covariance struct.
  */
 struct covariance *
-covariance_1pass_create (size_t n_vars, const struct variable **vars,
+covariance_1pass_create (size_t n_vars, const struct variable *const *vars,
                         const struct variable *weight, enum mv_class exclude)
 {
   size_t i;
@@ -170,8 +170,8 @@ covariance_1pass_create (size_t n_vars, const struct variable **vars,
   until then.
  */
 struct covariance *
-covariance_2pass_create (size_t n_vars, const struct variable **vars,
-                        size_t n_catvars, const struct variable **catvars, 
+covariance_2pass_create (size_t n_vars, const struct variable *const *vars,
+                        struct categoricals *cats,
                         const struct variable *wv, enum mv_class exclude)
 {
   size_t i;
@@ -197,7 +197,7 @@ covariance_2pass_create (size_t n_vars, const struct variable **vars,
   cov->n_cm = -1;
   cov->cm = NULL;
 
-  cov->categoricals = categoricals_create (catvars, n_catvars, wv, exclude);
+  cov->categoricals = cats;
 
   return cov;
 }
@@ -296,7 +296,8 @@ covariance_accumulate_pass1 (struct covariance *cov, const struct ccase *c)
       cov->state = 1;
     }
 
-  categoricals_update (cov->categoricals, c);
+  if (cov->categoricals)
+    categoricals_update (cov->categoricals, c);
 
   for (i = 0 ; i < cov->dim; ++i)
     {
@@ -342,8 +343,11 @@ covariance_accumulate_pass2 (struct covariance *cov, const struct ccase *c)
       assert (cov->state == 1);
       cov->state = 2;
 
-      cov->dim = cov->n_vars +
-       categoricals_total (cov->categoricals) - categoricals_get_n_variables (cov->categoricals);
+      cov->dim = cov->n_vars;
+      
+      if (cov->categoricals)
+       cov->dim += categoricals_total (cov->categoricals) 
+         - categoricals_get_n_variables (cov->categoricals);
 
       cov->n_cm = (cov->dim * (cov->dim - 1)  ) / 2;
       cov->cm = xcalloc (sizeof *cov->cm, cov->n_cm);
@@ -355,7 +359,8 @@ covariance_accumulate_pass2 (struct covariance *cov, const struct ccase *c)
          cov->moments[i] = resize_matrix (cov->moments[i], cov->dim);
        }
 
-      categoricals_done (cov->categoricals);
+      if (cov->categoricals)
+       categoricals_done (cov->categoricals);
 
       /* Populate the moments matrices with the categorical value elements */
       for (i = cov->n_vars; i < cov->dim; ++i)
@@ -698,6 +703,14 @@ covariance_calculate_unnormalized (struct covariance *cov)
     }
 }
 
+/* Function to access the categoricals used by COV
+   The return value is owned by the COV
+*/
+const struct categoricals *
+covariance_get_categoricals (const struct covariance *cov)
+{
+  return cov->categoricals;
+}
 
 
 /* Destroy the COV object */
index 3d29dcea8b0193babed4238ef64a988b7fbb92a3..cb83e151409224d1bf1d982a259179b9e79f5f49 100644 (file)
 struct covariance;
 struct variable;
 struct ccase ;
+struct categoricals;
 
-struct covariance * covariance_1pass_create (size_t n_vars, const struct variable **vars, 
+struct covariance * covariance_1pass_create (size_t n_vars, const struct variable *const *vars, 
                                             const struct variable *wv, enum mv_class excl);
 
 struct covariance *
-covariance_2pass_create (size_t n_vars, const struct variable **vars,
-                        size_t n_catvars, const struct variable **catvars, 
+covariance_2pass_create (size_t n_vars, const struct variable *const *vars,
+                        struct categoricals *cats,
                         const struct variable *wv, enum mv_class excl);
 
 void covariance_accumulate (struct covariance *, const struct ccase *);
@@ -46,4 +47,6 @@ void covariance_destroy (struct covariance *cov);
 
 const gsl_matrix *covariance_moments (const struct covariance *cov, int m);
 
+const struct categoricals * covariance_get_categoricals (const struct covariance *cov);
+
 #endif
index 3c88c3858f61c6b1c2230843a7b9151a47902956..0c641b56e127ddbdf9a180363629101fad746b6c 100644 (file)
@@ -65,7 +65,7 @@ histogram_create (int bins, double min, double max)
 
   int n =  ceil (max / (bin_width_2) ) ;
 
-  assert (max > min);
+  assert (max >= min);
 
   if ( ! (n % 2 ) ) n++;
   upper_limit = n * bin_width_2;
index 5ff474dc4ed5c0c39088a2d1a0affabf676835ce..b92441b37babbf8505a931176aa00e1fd1ab7f89 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2004, 2009, 2010 Free Software Foundation, Inc.
+   Copyright (C) 2010 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
    along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <config.h>
+
 #include "levene.h"
-#include <libpspp/message.h>
-#include <data/case.h>
-#include <data/casereader.h>
-#include <data/dictionary.h>
-#include "group-proc.h"
-#include <libpspp/hash.h>
-#include <libpspp/str.h>
-#include <data/variable.h>
-#include <data/procedure.h>
-#include <libpspp/misc.h>
-#include "group.h"
 
 #include <math.h>
-#include <stdlib.h>
-
-#include "xalloc.h"
-
-
-/* This module calculates the Levene statistic for variables.
-
-   Just for reference, the Levene Statistic is a defines as follows:
-
-   W = \frac{ (n-k)\sum_{i=1}^k n_i(Z_{iL} - Z_{LL})^2}
-            { (k-1)\sum_{i=1}^k \sum_{j=1}^{n_i} (Z_{ij} - Z_{iL})^2}
-
-   where:
-        k is the number of groups
-       n is the total number of samples
-        n_i is the number of samples in the ith group
-        Z_{ij} is | Y_{ij} - Y_{iL} | where Y_{iL} is the mean of the ith group
-       Z_{iL} is the  mean of Z_{ij} over the ith group
-       Z_{LL} is the grand mean of Z_{ij}
-
-   Imagine calculating that with pencil and paper!
 
- */
-
-
-struct levene_info
-{
-
-  /* Per group statistics */
-  struct t_test_proc **group_stats;
-
-  /* The independent variable */
-  const struct variable *v_indep;
-
-  /* Number of dependent variables */
-  size_t n_dep;
-
-  /* The dependent variables */
-  const struct variable  **v_dep;
-
-  /* Filter for missing values */
-  enum mv_class exclude;
+#include <libpspp/misc.h>
 
-  /* An array of lz_stats for each variable */
-  struct lz_stats *lz;
+#include <data/case.h>
+#include <data/casereader.h>
+#include <data/variable.h>
 
-  /* The denominator for the expression for the Levene */
-  double *lz_denominator;
 
-};
+#include <libpspp/hmap.h>
 
-/* Per variable statistics */
-struct lz_stats
+struct lev
 {
-  /* Total of all lz */
-  double grand_total;
-
-  /* Mean of all lz */
-  double grand_mean;
+  struct hmap_node node;
+  union value group;
+  int width;
 
-  /* The total number of cases */
-  double total_n ;
-
-  /* Number of groups */
-  int n_groups;
+  double t_bar;
+  double z_mean;
+  double n;
 };
 
-/* First pass */
-static void  levene_precalc (const struct levene_info *l);
-static int levene_calc (const struct dictionary *dict, const struct ccase *,
-                       const struct levene_info *l);
-static void levene_postcalc (struct levene_info *);
-
-
-/* Second pass */
-static void levene2_precalc (struct levene_info *l);
-static int levene2_calc (const struct dictionary *, const struct ccase *,
-                        struct levene_info *l);
-static void levene2_postcalc (struct levene_info *);
 
-
-void
-levene(const struct dictionary *dict,
-       struct casereader *reader,
-       const struct variable *v_indep, size_t n_dep,
-       const struct variable **v_dep,
-       enum mv_class exclude)
-{
-  struct casereader *pass1, *pass2;
-  struct ccase *c;
-  struct levene_info l;
-
-  l.n_dep      = n_dep;
-  l.v_indep    = v_indep;
-  l.v_dep      = v_dep;
-  l.exclude    = exclude;
-  l.lz         = xnmalloc (l.n_dep, sizeof *l.lz);
-  l.lz_denominator = xnmalloc (l.n_dep, sizeof *l.lz_denominator);
-
-  casereader_split (reader, &pass1, &pass2);
-
-  levene_precalc (&l);
-  for (; (c = casereader_read (pass1)) != NULL; case_unref (c))
-    levene_calc (dict, c, &l);
-  casereader_destroy (pass1);
-  levene_postcalc (&l);
-
-  levene2_precalc(&l);
-  for (; (c = casereader_read (pass2)) != NULL; case_unref (c))
-    levene2_calc (dict, c, &l);
-  casereader_destroy (pass2);
-  levene2_postcalc (&l);
-
-  free (l.lz_denominator);
-  free (l.lz);
-}
-
-static void
-levene_precalc (const struct levene_info *l)
+static struct lev *
+find_group (struct hmap *map, const union value *target, int width)
 {
-  size_t i;
-
-  for(i = 0; i < l->n_dep ; ++i )
+  struct lev *l = NULL;
+  unsigned int hash = value_hash (target, width, 0);
+  HMAP_FOR_EACH_WITH_HASH (l, struct lev, node, hash, map)
     {
-      const struct variable *var = l->v_dep[i];
-      struct group_proc *gp = group_proc_get (var);
-      struct group_statistics *gs;
-      struct hsh_iterator hi;
-
-      l->lz[i].grand_total = 0;
-      l->lz[i].total_n = 0;
-      l->lz[i].n_groups = gp->n_groups ;
-
-
-      for ( gs = hsh_first(gp->group_hash, &hi);
-           gs != NULL;
-           gs = hsh_next(gp->group_hash, &hi))
-       {
-         gs->lz_total = 0;
-       }
-
+      if (value_equal (&l->group, target, width))
+       break;
+      l = NULL;
     }
 
+  return l;
 }
 
-static int
-levene_calc (const struct dictionary *dict, const struct ccase *c,
-            const struct levene_info *l)
-{
-  size_t i;
-  bool warn = false;
-  const union value *gv = case_data (c, l->v_indep);
-  struct group_statistics key;
-  double weight = dict_get_case_weight (dict, c, &warn);
-
-  key.id = *gv;
-
-  for (i = 0; i < l->n_dep; ++i)
-    {
-      const struct variable *var = l->v_dep[i];
-      struct group_proc *gp = group_proc_get (var);
-      double levene_z;
-      const union value *v = case_data (c, var);
-      struct group_statistics *gs;
-
-      gs = hsh_find(gp->group_hash,(void *) &key );
 
-      if ( gs == NULL )
-       continue ;
-
-      if ( !var_is_value_missing (var, v, l->exclude))
-       {
-         levene_z= fabs(v->f - gs->mean);
-         l->lz[i].grand_total += levene_z * weight;
-         l->lz[i].total_n += weight;
-
-         gs->lz_total += levene_z * weight;
-       }
-    }
-  return 0;
-}
-
-
-static void
-levene_postcalc (struct levene_info *l)
+double
+levene (struct casereader *rx, const struct variable *gvar,
+       const struct variable *var, const struct variable *wv,
+       enum mv_class exclude)
 {
-  size_t v;
-
-  for (v = 0; v < l->n_dep; ++v)
-    {
-      /* This is Z_LL */
-      l->lz[v].grand_mean = l->lz[v].grand_total / l->lz[v].total_n ;
-    }
+  double numerator = 0.0;
+  double denominator = 0.0;
+  int n_groups = 0;
+  double z_grand_mean = 0.0;
+  double grand_n = 0.0;
 
+  struct hmap map = HMAP_INITIALIZER (map);
 
-}
-
-
-
-static void
-levene2_precalc (struct levene_info *l)
-{
-  size_t v;
-
+  struct ccase *c;
+  struct casereader *r = casereader_clone (rx);
 
-  /* This stuff could go in the first post calc . . . */
-  for (v = 0;
-       v < l->n_dep;
-       ++v)
+  for (; (c = casereader_read (r)) != NULL; case_unref (c))
     {
-      struct hsh_iterator hi;
-      struct group_statistics *g;
-
-      const struct variable *var = l->v_dep[v] ;
-      struct hsh_table *hash = group_proc_get (var)->group_hash;
-
+      struct lev *l = NULL;
+      const union value *target = case_data (c, gvar);
+      int width = var_get_width (gvar);
+      unsigned int hash = value_hash (target, width, 0);
+      const double x = case_data (c, var)->f;
+      const double weight = wv ? case_data (c, wv)->f : 1.0;
+
+      if (var_is_value_missing (var, case_data (c, var), exclude))
+       continue;
 
-      for (g = hsh_first(hash,&hi); g != NULL; g = hsh_next(hash, &hi))
+      l = find_group (&map, target, width);
+      
+      if (l == NULL)
        {
-         g->lz_mean = g->lz_total / g->n ;
+         l = xzalloc (sizeof *l);
+         value_clone (&l->group, target, width);
+         hmap_insert (&map, &l->node, hash);
        }
-      l->lz_denominator[v] = 0;
-  }
-}
 
-static int
-levene2_calc (const struct dictionary *dict, const struct ccase *c,
-             struct levene_info *l)
-{
-  size_t i;
-  bool warn = false;
-
-  double weight = dict_get_case_weight (dict, c, &warn);
-
-  const union value *gv = case_data (c, l->v_indep);
-  struct group_statistics key;
+      l->n += weight;
+      l->t_bar += x * weight;
+      grand_n += weight;
+    }
+  casereader_destroy (r);
+
+  {
+    struct lev *l;
+    HMAP_FOR_EACH (l, struct lev, node, &map)
+      {
+       l->t_bar /= l->n;
+      }
+  }
 
-  key.id = *gv;
+  n_groups = hmap_count (&map);
 
-  for (i = 0; i < l->n_dep; ++i)
+  r = casereader_clone (rx);
+  for (; (c = casereader_read (r)) != NULL; case_unref (c))
     {
-      double levene_z;
-      const struct variable *var = l->v_dep[i] ;
-      const union value *v = case_data (c, var);
-      struct group_statistics *gs;
-
-      gs = hsh_find(group_proc_get (var)->group_hash,(void *) &key );
+      const union value *target = case_data (c, gvar);
+      int width = var_get_width (gvar);
+      const double x = case_data (c, var)->f;
+      const double weight = wv ? case_data (c, wv)->f : 1.0;
 
-      if ( gs == NULL )
+      if (var_is_value_missing (var, case_data (c, var), exclude))
        continue;
 
-      if ( !var_is_value_missing (var, v, l->exclude))
-       {
-         levene_z = fabs(v->f - gs->mean);
-         l->lz_denominator[i] += weight * pow2 (levene_z - gs->lz_mean);
-       }
-    }
-
-  return 0;
-}
+      struct lev *l = find_group (&map, target, width);
 
+      assert (l);
+      
+      l->z_mean += fabs (x - l->t_bar) * weight;
+      z_grand_mean += fabs (x - l->t_bar) * weight;
+    }
+  casereader_destroy (r);
+
+  {
+    struct lev *l;
+    HMAP_FOR_EACH (l, struct lev, node, &map)
+      {
+       l->z_mean /= l->n;
+      }
+  }
 
-static void
-levene2_postcalc (struct levene_info *l)
-{
-  size_t v;
+  z_grand_mean /= grand_n;
 
-  for (v = 0; v < l->n_dep; ++v)
+  r = casereader_clone (rx);
+  for (; (c = casereader_read (r)) != NULL; case_unref (c))
     {
-      double lz_numerator = 0;
-      struct hsh_iterator hi;
-      struct group_statistics *g;
+      double z;
+      const union value *target = case_data (c, gvar);
+      int width = var_get_width (gvar);
+      const double x = case_data (c, var)->f;
+      const double weight = wv ? case_data (c, wv)->f : 1.0;
 
-      const struct variable *var = l->v_dep[v] ;
-      struct group_proc *gp = group_proc_get (var);
-      struct hsh_table *hash = gp->group_hash;
-
-      for (g = hsh_first(hash, &hi); g != NULL; g = hsh_next(hash, &hi))
-       {
-         lz_numerator += g->n * pow2(g->lz_mean - l->lz[v].grand_mean );
-       }
-      lz_numerator *= ( gp->ugs.n - gp->n_groups );
-
-      l->lz_denominator[v] *= (gp->n_groups - 1);
+      if (var_is_value_missing (var, case_data (c, var), exclude))
+       continue;
 
-      gp->levene = lz_numerator / l->lz_denominator[v] ;
+      struct lev *l = find_group (&map, target, width);
+      assert (l);
+      z = fabs (x - l->t_bar);
 
+      denominator += pow2 (z - l->z_mean) * weight;
     }
-}
+  casereader_destroy (r);
+
+  denominator *= n_groups - 1;
+
+  {
+    double grand_n = 0.0;
+    struct hmap_node *next;
+    struct lev *l;
+    HMAP_FOR_EACH_SAFE (l, next, struct lev, node, &map)
+      {
+       numerator += l->n * pow2 (l->z_mean - z_grand_mean);
+       grand_n += l->n;
+
+       /* We don't need these anymore */
+       free (l);
+      }
+    numerator *= grand_n - n_groups ;
+    hmap_destroy (&map);
+  }
 
+  return numerator/ denominator;
+}
index 67a4a1155b7813d6d84a37fe4987aada81e40f0e..c5e8bc3b4e9a15a49bc97d6837bb680cc06ceb4b 100644 (file)
 #if !levene_h
 #define levene_h 1
 
-#include <data/casereader.h>
-#include <data/missing-values.h>
-#include <data/variable.h>
+struct casereader;
+struct variable;
 
-/* Calculate the Levene statistic
 
-The independent variable :   v_indep;
+enum mv_class;
 
-Number of dependent variables :   n_dep;
+double
+levene (struct casereader *rx, const struct variable *gvar,
+       const struct variable *var, const struct variable *wv,  enum mv_class exclude );
 
-The dependent variables :   v_dep;
 
-*/
-
-
-struct dictionary ;
-struct casefilter ;
-
-void  levene(const struct dictionary *dict, struct casereader *,
-            const struct variable *v_indep, size_t n_dep,
-            const struct variable **v_dep,
-            enum mv_class exclude);
-
-
-
-#endif /* levene_h */
+#endif
index fe01ac39e4941969b8664d0dd8d08f7cf7c57d27..63d1a0f976ee420ca52b476e67aa85cd94ff4a5e 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2005 Free Software Foundation, Inc. 
+   Copyright (C) 2005, 2010 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
@@ -461,9 +461,3 @@ linreg_get_depvar_mean (linreg *c)
 {
   return c->depvar_mean;
 }
-static
-linreg_set_dependent_column (linreg *c, int column)
-{
-  c->dependent_column = column;
-}
-
index e550d2b2eb55f66fd4baea366e7a058abb849443..9f54e8730c9bfda7ce738b5311df3016f3c9cdbf 100644 (file)
@@ -131,8 +131,6 @@ order_stats_accumulate (struct order_stats **os, size_t nos,
       if ( var_is_value_missing (var, case_data (cx, var), exclude))
        continue;
 
-      case_unref (prev_cx);
-
       if ( prev_value == -DBL_MAX || prev_value == this_value)
        c_i += weight;
 
@@ -142,6 +140,7 @@ order_stats_accumulate (struct order_stats **os, size_t nos,
          c_i = weight;
        }
 
+      case_unref (prev_cx);
       cc_i += weight;
       prev_value = this_value;
       prev_cx = case_ref (cx);
index 8719d877e096fcc9fc0d0f911d462d7bd0566725..5b82277cb7b255f25c1663b6bbc1167f8bae72f9 100644 (file)
@@ -169,7 +169,9 @@ static struct casewriter_class sort_casewriter_class =
   };
 \f
 /* Reads all the cases from INPUT.  Sorts the cases according to
-   ORDERING.  Returns the sorted cases in a new casereader. */
+   ORDERING.  Returns the sorted cases in a new casereader.
+   INPUT is destroyed by this function.
+ */
 struct casereader *
 sort_execute (struct casereader *input, const struct subcase *ordering)
 {
@@ -181,7 +183,7 @@ sort_execute (struct casereader *input, const struct subcase *ordering)
 
 /* Reads all the cases from INPUT.  Sorts the cases in ascending
    order according to VARIABLE.  Returns the sorted cases in a
-   new casereader. */
+   new casereader.  INPUT is destroyed by this function. */
 struct casereader *
 sort_execute_1var (struct casereader *input, const struct variable *var)
 {
index 730a82444d35686ffc3821637ad8b770a0ff07de..c9f96b21b58cbd287d2d41152e572ee6a658bd7d 100644 (file)
 #include <stdint.h>
 #include <stdlib.h>
 
-#include <data/file-name.h>
-#include <data/settings.h>
-#include <libpspp/assertion.h>
-#include <libpspp/compiler.h>
-#include <libpspp/message.h>
-#include <libpspp/start-date.h>
-#include <libpspp/string-map.h>
-#include <libpspp/version.h>
-#include <output/cairo.h>
-#include <output/chart-item-provider.h>
-#include <output/message-item.h>
-#include <output/options.h>
-#include <output/tab.h>
-#include <output/text-item.h>
-#include <output/driver-provider.h>
-#include <output/render.h>
-#include <output/table-item.h>
-
-#include "error.h"
-#include "minmax.h"
-#include "xalloc.h"
+#include "data/file-name.h"
+#include "data/settings.h"
+#include "libpspp/assertion.h"
+#include "libpspp/cast.h"
+#include "libpspp/compiler.h"
+#include "libpspp/message.h"
+#include "libpspp/start-date.h"
+#include "libpspp/string-map.h"
+#include "libpspp/version.h"
+#include "output/cairo.h"
+#include "output/chart-item-provider.h"
+#include "output/driver-provider.h"
+#include "output/message-item.h"
+#include "output/options.h"
+#include "output/render.h"
+#include "output/tab.h"
+#include "output/table-item.h"
+#include "output/text-item.h"
+
+#include "gl/error.h"
+#include "gl/minmax.h"
+#include "gl/xalloc.h"
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
@@ -184,7 +185,7 @@ ascii_create (const char *file_name, enum settings_output_devices device_type,
                             "bold", EMPH_BOLD,
                             "underline", EMPH_UNDERLINE,
                             "none", EMPH_NONE,
-                            (char *) NULL);
+                            NULL_SENTINEL);
 
   a->chart_file_name = parse_chart_file_name (opt (d, o, "charts", file_name));
 
@@ -357,7 +358,7 @@ ascii_flush (struct output_driver *driver)
       ascii_close_page (a);
 
       if (fn_close (a->file_name, a->file) != 0)
-        error (0, errno, _("ascii: closing output file \"%s\""),
+        error (0, errno, _("ascii: closing output file `%s'"),
                a->file_name);
       a->file = NULL;
     }
@@ -803,7 +804,7 @@ ascii_open_page (struct ascii_driver *a)
         }
       else
         {
-          error (0, errno, _("ascii: opening output file \"%s\""),
+          error (0, errno, _("ascii: opening output file `%s'"),
                  a->file_name);
           a->error = true;
           return false;
index d4f31aad6a011f2459f941353c7e8f1a64ca8e4c..5a310c610c8ec2f53b6c2ccaf704fee119e8063e 100644 (file)
@@ -190,7 +190,7 @@ parse_font (struct output_driver *d, struct string_map *options,
   desc = pango_font_description_from_string (string);
   if (desc == NULL)
     {
-      error (0, 0, _("\"%s\": bad font specification"), string);
+      error (0, 0, _("`%s': bad font specification"), string);
 
       /* Fall back to DEFAULT_VALUE, which had better be a valid font
          description. */
@@ -354,7 +354,7 @@ xr_create (const char *file_name, enum settings_output_devices device_type,
   status = cairo_surface_status (surface);
   if (status != CAIRO_STATUS_SUCCESS)
     {
-      error (0, 0, _("error opening output file \"%s\": %s"),
+      error (0, 0, _("error opening output file `%s': %s"),
              file_name, cairo_status_to_string (status));
       cairo_surface_destroy (surface);
       goto error;
@@ -1038,7 +1038,7 @@ xr_draw_png_chart (const struct chart_item *item,
 
   status = cairo_surface_write_to_png (surface, file_name);
   if (status != CAIRO_STATUS_SUCCESS)
-    error (0, 0, _("error writing output file \"%s\": %s"),
+    error (0, 0, _("error writing output file `%s': %s"),
            file_name, cairo_status_to_string (status));
 
   cairo_destroy (cr);
index 626dc2fa5ad2c7a7b9a15898908338bed37ba378..c648bfa79c30ae0e9330f3f7bae60290e1d96210 100644 (file)
@@ -84,7 +84,7 @@ csv_create (const char *file_name, enum settings_output_devices device_type,
 
   if (csv->file == NULL)
     {
-      error (0, errno, _("error opening output file \"%s\""), csv->file_name);
+      error (0, errno, _("error opening output file `%s'"), csv->file_name);
       output_driver_destroy (d);
       return NULL;
     }
index 6d836354a16f20b952670ab19a47cac5609707f4..136b4c4f2705cc0a6fbb67f8a9c1281e14d3f2cc 100644 (file)
@@ -327,8 +327,9 @@ output_driver_create (struct string_map *options)
     device_type = SETTINGS_DEVICE_LISTING;
   else
     {
+      /* TRANSLATORS: Don't translate the words `terminal' or `listing'. */
       error (0, 0, _("%s is not a valid device type (the choices are "
-                     "\"terminal\" and \"listing\")"), device_string);
+                     "`terminal' and `listing')"), device_string);
       device_type = default_device_type (file_name);
     }
 
@@ -340,7 +341,7 @@ output_driver_create (struct string_map *options)
       const char *key;
 
       STRING_MAP_FOR_EACH_KEY (key, node, options)
-        error (0, 0, _("%s: unknown option \"%s\""), file_name, key);
+        error (0, 0, _("%s: unknown option `%s'"), file_name, key);
     }
   string_map_clear (options);
 
index 989752b627fc9c54dcbf59410c5729769a96488c..5aec959c740a16a69888d9f5da76ad2d56778528 100644 (file)
@@ -103,7 +103,7 @@ html_create (const char *file_name, enum settings_output_devices device_type,
   html->file = fn_open (html->file_name, "w");
   if (html->file == NULL)
     {
-      error (0, errno, _("error opening output file \"%s\""), html->file_name);
+      error (0, errno, _("error opening output file `%s'"), html->file_name);
       goto error;
     }
 
@@ -116,8 +116,8 @@ html_create (const char *file_name, enum settings_output_devices device_type,
   fputs ("<META http-equiv=\"Content-Style-Type\" content=\"text/css\">\n",
          html->file);
   fputs ("<META HTTP-EQUIV=\"Content-Type\" "
-         "CONTENT=\"text/html; charset=ISO-8859-1\">\n", html->file);
-  fputs ("<STYLE>\n"
+         "CONTENT=\"text/html; charset=utf-8\">\n", html->file);
+  fputs ("<STYLE TYPE=\"text/css\">\n"
          "<!--\n"
          "body {\n"
          "  background: white;\n"
@@ -253,7 +253,9 @@ html_submit (struct output_driver *driver,
                                      html->chart_cnt++);
       if (file_name != NULL)
         {
-          fprintf (html->file, "<IMG SRC=\"%s\"/>", file_name);
+         const char *title = chart_item_get_title (chart_item);
+          fprintf (html->file, "<IMG SRC=\"%s\" ALT=\"Chart: %s\">",
+                  file_name, title ? title : _("No description"));
           free (file_name);
         }
     }
@@ -418,16 +420,16 @@ html_output_table (struct html_driver *html, struct table_item *item)
 
           alignment = cell.options & TAB_ALIGNMENT;
           if (alignment != TAB_LEFT)
-            fprintf (html->file, " ALIGN=%s",
+            fprintf (html->file, " ALIGN=\"%s\"",
                      alignment == TAB_RIGHT ? "RIGHT" : "CENTER");
 
           colspan = table_cell_colspan (&cell);
           if (colspan > 1)
-            fprintf (html->file, " COLSPAN=%d", colspan);
+            fprintf (html->file, " COLSPAN=\"%d\"", colspan);
 
           rowspan = table_cell_rowspan (&cell);
           if (rowspan > 1)
-            fprintf (html->file, " ROWSPAN=%d", rowspan);
+            fprintf (html->file, " ROWSPAN=\"%d\"", rowspan);
 
           /* Cell borders. */
           n_borders = 0;
index 10da4d8485391651bb0a2b90b60afe2b67bba5f7..66c1b77534e98118ca7b300bb523d47b1d4b3493 100644 (file)
@@ -64,7 +64,7 @@ journal_close (void)
   if (journal != NULL && journal->file != NULL)
     {
       if (fwriteerror (journal->file))
-        error (0, errno, _("error writing output file \"%s\""),
+        error (0, errno, _("error writing output file `%s'"),
                journal_file_name);
       journal->file = NULL;
     }
@@ -90,7 +90,7 @@ journal_output (struct journal_driver *j, const char *s)
       j->file = fopen (journal_file_name, "a");
       if (j->file == NULL)
         {
-          error (0, errno, _("error opening output file \"%s\""),
+          error (0, errno, _("error opening output file `%s'"),
                  journal_file_name);
           output_driver_destroy (&j->driver);
           return;
index 2064f45b13e2d69935fc5ea443aaa288b4cec52c..8de7ed1d486bf9ca62a4d399c2b12f4fcb6d8281 100644 (file)
@@ -245,7 +245,7 @@ read_paper_conf (const char *file_name, int *h, int *v)
   file = fopen (file_name, "r");
   if (file == NULL)
     {
-      error (0, errno, _("error opening input file \"%s\""), file_name);
+      error (0, errno, _("error opening input file `%s'"), file_name);
       return false;
     }
 
@@ -256,7 +256,7 @@ read_paper_conf (const char *file_name, int *h, int *v)
       if (!ds_read_config_line (&line, &line_number, file))
        {
          if (ferror (file))
-           error (0, errno, _("error reading file \"%s\""), file_name);
+           error (0, errno, _("error reading file `%s'"), file_name);
          break;
        }
 
@@ -273,7 +273,7 @@ read_paper_conf (const char *file_name, int *h, int *v)
 
   fclose (file);
   ds_destroy (&line);
-  error (0, 0, _("paper size file \"%s\" does not state a paper size"),
+  error (0, 0, _("paper size file `%s' does not state a paper size"),
          file_name);
   return false;
 }
index 70c237c3db45111d5b3912b4afc53271a22f47b7..4042b460e7e9e2b701195240cc1341d41723621b 100644 (file)
@@ -63,7 +63,7 @@ msglog_create (const char *file_name)
   file = fn_open (file_name, "w");
   if (file == NULL)
     {
-      error (0, errno, _("error opening output file \"%s\""), file_name);
+      error (0, errno, _("error opening output file `%s'"), file_name);
       return NULL;
     }
 
index 906323964cb85ca13eddec3d4b8078a194946b9a..721e7c87d9766dec20761e7100aba0ca6b24ea5b 100644 (file)
@@ -49,7 +49,7 @@
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 
-#define _xml(X) (const xmlChar *)(X)
+#define _xml(X) (CHAR_CAST (const xmlChar *, X))
 
 struct odt_driver
 {
index 593adf5af0bd399b9a3d3cd8d3d025fd2901b1d6..694ffc233ebe86aea4b5ba4bcf2b12e4a54f4929 100644 (file)
@@ -110,7 +110,7 @@ do_parse_boolean (const char *driver_name, const char *key,
     return false;
   else
     {
-      error (0, 0, _("%s: \"%s\" is \"%s\" but a Boolean value is required"),
+      error (0, 0, _("%s: `%s' is `%s' but a Boolean value is required"),
              driver_name, value, key);
       return -1;
     }
@@ -145,7 +145,7 @@ parse_boolean (struct driver_option *o)
    O has no user-specified value, then O's default value is treated the same
    way.  If the default value still does not match, parse_enum() returns 0.
 
-   Example: parse_enum (o, "a", 1, "b", 2, (char *) NULL) returns 1 if O's
+   Example: parse_enum (o, "a", 1, "b", 2, NULL_SENTINEL) returns 1 if O's
    value if "a", 2 if O's value is "b".
 
    Destroys O. */
@@ -185,7 +185,7 @@ parse_enum (struct driver_option *o, ...)
                   ds_put_format (&choices, "`%s'", s);
                 }
 
-              error (0, 0, _("%s: \"%s\" is \"%s\" but one of the following "
+              error (0, 0, _("%s: `%s' is `%s' but one of the following "
                              "is required: %s"),
                      o->driver_name, o->name, o->value, ds_cstr (&choices));
               ds_destroy (&choices);
@@ -229,22 +229,22 @@ parse_int (struct driver_option *o, int min_value, int max_value)
       else if (max_value == INT_MAX)
         {
           if (min_value == 0)
-            error (0, 0, _("%s: \"%s\" is \"%s\" but a nonnegative integer "
+            error (0, 0, _("%s: `%s' is `%s' but a nonnegative integer "
                            "is required"),
                    o->driver_name, o->name, o->value);
           else if (min_value == 1)
-            error (0, 0, _("%s: \"%s\" is \"%s\" but a positive integer is "
+            error (0, 0, _("%s: `%s' is `%s' but a positive integer is "
                            "required"), o->driver_name, o->name, o->value);
           else if (min_value == INT_MIN)
-            error (0, 0, _("%s: \"%s\" is \"%s\" but an integer is required"),
+            error (0, 0, _("%s: `%s' is `%s' but an integer is required"),
                    o->driver_name, o->name, o->value);
           else
-            error (0, 0, _("%s: \"%s\" is \"%s\" but an integer greater "
+            error (0, 0, _("%s: `%s' is `%s' but an integer greater "
                            "than %d is required"),
                    o->driver_name, o->name, o->value, min_value - 1);
         }
       else
-        error (0, 0, _("%s: \"%s\" is \"%s\"  but an integer between %d and "
+        error (0, 0, _("%s: `%s' is `%s'  but an integer between %d and "
                        "%d is required"),
                o->driver_name, o->name, o->value, min_value, max_value);
     }
@@ -323,8 +323,8 @@ parse_chart_file_name (struct driver_option *o)
         chart_file_name = xstrdup (o->value);
       else
         {
-          error (0, 0, _("%s: \"%s\" is \"%s\" but a file name that contains "
-                         "\"#\" is required."),
+          error (0, 0, _("%s: `%s' is `%s' but a file name that contains "
+                         "`#' is required."),
                  o->name, o->value, o->driver_name);
           chart_file_name = default_chart_file_name (o->default_value);
         }
index 25dd28b56fde3f46433dfa4a3218a8e9f680c21a..094e68799cf93b7e72be846075f8e04da80ec499 100644 (file)
@@ -778,6 +778,7 @@ render_page_unref (struct render_page *page)
 {
   if (page != NULL && --page->ref_cnt == 0)
     {
+      int i;
       struct render_overflow *overflow, *next;
 
       HMAP_FOR_EACH_SAFE (overflow, next, struct render_overflow, node,
@@ -786,8 +787,13 @@ render_page_unref (struct render_page *page)
       hmap_destroy (&page->overflows);
 
       table_unref (page->table);
-      free (page->cp[H]);
-      free (page->cp[V]);
+      
+      for (i = 0; i < TABLE_N_AXES; ++i)
+       {
+         free (page->join_crossing[i]);
+         free (page->cp[i]);
+       }
+
       free (page);
     }
 }
@@ -1206,7 +1212,7 @@ render_page_select (const struct render_page *page, enum table_axis axis,
   if (z0 == page->h[a][0] && p0 == 0
       && z1 == page->n[a] - page->h[a][1] && p1 == 0)
     {
-      struct render_page *page_rw = (struct render_page *) page;
+      struct render_page *page_rw = CONST_CAST (struct render_page *, page);
       page_rw->ref_cnt++;
       return page_rw;
     }
@@ -1393,4 +1399,3 @@ insert_overflow (struct render_page_selection *s,
 
   return of;
 }
-
index 40a06a9202bf61c79369aa5bf4fdd985e2e79905..9ab455aa72ffa0a050b937f6da924eee0dbeab5c 100644 (file)
@@ -214,7 +214,7 @@ populate_combo_model (GtkComboBox *cb)
 
       gtk_list_store_append (list, &iter);
       gtk_list_store_set (list, &iter,
-                          COMBO_MODEL_COL_DESC, s,
+                          COMBO_MODEL_COL_DESC, gettext (s),
                          COMBO_MODEL_COL_SYNTAX, af->name,
                          COMBO_MODEL_COL_SRC_VARS, af->src_vars,
                          COMBO_MODEL_COL_ARITY, af->n_args,
index f78a7205966c5188f8b6a72cd976d24d8830e109..fd78196df891d92fa48d2345bb61575db8b714b0 100644 (file)
@@ -19,6 +19,7 @@ UI_FILES = \
        src/ui/gui/psppire.ui \
        src/ui/gui/rank.ui \
        src/ui/gui/sort.ui \
+       src/ui/gui/split-file.ui \
        src/ui/gui/recode.ui \
        src/ui/gui/regression.ui \
        src/ui/gui/reliability.ui \
index 4d2c612d7b69cbcc062ccf4a633162d4d92b93a3..1e4125d14e7698dd23e08c9b2a9b2a8cb0b1c293 100644 (file)
       </row>
     </data>
   </object>
+  <object class="GtkLabel" id="bug-workaround1">
+    <property name="sensitive">False</property>
+    <property name="label" translatable="yes">Principal Components Analysis</property>
+  </object>
+  <object class="GtkLabel" id="bug-workaround2">
+    <property name="sensitive">False</property>
+    <property name="label" translatable="yes">Principal Axis Factoring</property>
+  </object>
   <object class="PsppireDialog" id="factor-dialog">
     <property name="title" translatable="yes">Factor Analysis</property>
     <property name="modal">True</property>
index 0dfae65964e47f973e3e0450aa2639b17692dd4b..1ad77bc96ebf0190a633ca02b70179970980e3fb 100644 (file)
@@ -97,11 +97,8 @@ text_to_value (const gchar *text,
     }
 
   value_init (val, width);
-  msg_disable ();
-  data_in (ss_cstr (text), UTF8, format->type, 0, 0, 0,
-               dict->dict,
-                val, width);
-  msg_enable ();
+  free (data_in (ss_cstr (text), UTF8, format->type, val, width,
+                 dict_get_encoding (dict->dict)));
 
   return val;
 }
@@ -132,10 +129,10 @@ get_object_assert (GtkBuilder *builder, const gchar *name, GType type)
   o = gtk_builder_get_object (builder, name);
 
   if ( !o )
-    g_critical ("Object \"%s\" could not be found\n", name);
+    g_critical ("Object `%s' could not be found\n", name);
   else if ( ! g_type_is_a (G_OBJECT_TYPE (o), type))
    {
-     g_critical ("Object \"%s\" was expected to have type %s, but in fact has type %s", 
+     g_critical ("Object `%s' was expected to have type %s, but in fact has type %s", 
        name, g_type_name (type), G_OBJECT_TYPE_NAME (o));
    }
 
index a5e054f02d527d21020257f015eebea1b2b0b2a3..0c88204ae1469347daf7b25347cb4873883f8eec 100644 (file)
@@ -23,6 +23,7 @@
 
 #include "libpspp/argv-parser.h"
 #include "libpspp/assertion.h"
+#include "libpspp/cast.h"
 #include "libpspp/getl.h"
 #include "libpspp/version.h"
 #include "libpspp/copyleft.h"
@@ -145,7 +146,7 @@ startup_option_callback (int id, void *show_splash_)
     case OPT_VERSION:
       version_etc (stdout, "psppire", PACKAGE_NAME, PACKAGE_VERSION,
                    "Ben Pfaff", "John Darrington", "Jason Stover",
-                   (char *) NULL);
+                   NULL_SENTINEL);
       exit (EXIT_SUCCESS);
 
     case OPT_NO_SPLASH:
index 9a59638fc897fe1239fbfacb990f7d1277134391..9b1b26a21748a41ad1b203d182dc370f96bf9327 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPPIRE - a graphical user interface for PSPP.
-   Copyright (C) 2006, 2008, 2009  Free Software Foundation
+   Copyright (C) 2006, 2008, 2009, 2010  Free Software Foundation
 
    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
@@ -879,7 +879,7 @@ psppire_data_store_insert_case (PsppireDataStore *ds,
   g_return_val_if_fail (ds, FALSE);
   g_return_val_if_fail (ds->datasheet, FALSE);
 
-  case_ref (cc);
+  cc = case_ref (cc);
   result = datasheet_insert_rows (ds->datasheet, posn, &cc, 1);
 
   if ( result )
@@ -959,8 +959,8 @@ psppire_data_store_data_in (PsppireDataStore *ds, casenumber casenum, gint idx,
                         FALSE);
   value_init (&value, width);
   ok = (datasheet_get_value (ds->datasheet, casenum, idx, &value)
-        && data_in (input, UTF8, fmt->type, 0, 0, 0,
-                   dict->dict, &value, width)
+        && data_in_msg (input, UTF8, fmt->type, &value, width,
+                        dict_get_encoding (dict->dict))
         && datasheet_put_value (ds->datasheet, casenum, idx, &value));
   value_destroy (&value, width);
 
index a5cd15c0d5ba0dc5021d231b600bc7b8196371e9..aace66fa5a5947138087bd3656d6bc5c1741be77 100644 (file)
@@ -365,7 +365,7 @@ load_file (PsppireWindow *de, const gchar *file_name)
 
   g_free (native_file_name);
 
-  sss = create_syntax_string_source ("GET FILE=%s.",
+  sss = create_syntax_format_source ("GET FILE=%s.",
                                     ds_cstr (&filename));
 
   ds_destroy (&filename);
@@ -530,12 +530,12 @@ save_file (PsppireWindow *w)
 
   if ( de->save_as_portable )
     {
-      sss = create_syntax_string_source ("EXPORT OUTFILE=%s.",
+      sss = create_syntax_format_source ("EXPORT OUTFILE=%s.",
                                         ds_cstr (&filename));
     }
   else
     {
-      sss = create_syntax_string_source ("SAVE OUTFILE=%s.",
+      sss = create_syntax_format_source ("SAVE OUTFILE=%s.",
                                         ds_cstr (&filename));
     }
 
@@ -589,7 +589,7 @@ sysfile_info (PsppireDataWindow *de)
 
       g_free (native_file_name);
 
-      sss = create_syntax_string_source ("SYSFILE INFO %s.",
+      sss = create_syntax_format_source ("SYSFILE INFO %s.",
                                         ds_cstr (&filename));
       execute_syntax (sss);
     }
@@ -1261,6 +1261,8 @@ GtkWidget*
 psppire_data_window_new (void)
 {
   return GTK_WIDGET (g_object_new (psppire_data_window_get_type (),
+                                  /* TRANSLATORS: This will form a filename.  Please avoid whitespace. */
+                                  "filename", _("PSPP-data"),
                                   "description", _("Data Editor"),
                                   NULL));
 }
index bc31022a5d7056876007cb9b95a6f1fa1e2fa48a..d19fc809edccf68c8cde11f01f0c6dc8172030b6 100644 (file)
 #include "ui/gui/psppire-marshal.h"
 #include "ui/gui/psppire-var-ptr.h"
 
+#include <gettext.h>
+#define _(msgid) gettext (msgid)
+#define N_(msgid) msgid
+
 enum  {
   BACKEND_CHANGED,
 
@@ -352,7 +356,14 @@ auto_generate_var_name (PsppireDict *dict)
   gint d = 0;
   static gchar name[10];
 
-  while (g_snprintf (name, 10, "VAR%05d",d++),
+  /* TRANSLATORS: This string must be a valid variable name.  That means:
+     - The string must be at most 64 bytes (not characters) long.
+     - The string may not contain whitespace.
+     - The first character may not be '$'
+     - The first character may not be a digit
+     - The final charactor may not be '.' or '_'
+   */
+  while (g_snprintf (name, 10, _("VAR%05d"), d++),
         psppire_dict_lookup_var (dict, name))
     ;
 
@@ -856,7 +867,7 @@ 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\n",
+      g_print ("`%s' idx=%d, fv=%d\n",
               var_get_name(v),
               di,
               var_get_case_index(v));
index 19744c93012058dcc425d797f4e734f4a5f6ce5e..4bf8ce5b287918488249cd7df3af47448047d89d 100644 (file)
@@ -109,7 +109,8 @@ psppire_output_window_dispose (GObject *obj)
   viewer->items = NULL;
   viewer->n_items = viewer->allocated_items = 0;
 
-  g_object_unref (viewer->print_settings);
+  if (viewer->print_settings != NULL)
+    g_object_unref (viewer->print_settings);
 
   /* Chain up to the parent class */
   G_OBJECT_CLASS (parent_class)->dispose (obj);
@@ -1043,7 +1044,8 @@ GtkWidget*
 psppire_output_window_new (void)
 {
   return GTK_WIDGET (g_object_new (psppire_output_window_get_type (),
-                                  "filename", "Output",
+                                  /* TRANSLATORS: This will form a filename.  Please avoid whitespace. */
+                                  "filename", _("Output"),
                                   "description", _("Output Viewer"),
                                   NULL));
 }
index c162e219d143387a99d28d211a57e6557ace8eb8..c7251a1ab77206c9772df3f377b408708ef67ad3 100644 (file)
@@ -105,9 +105,38 @@ psppire_syntax_window_finalize (GObject *object)
 }
 
 
+static void
+psppire_syntax_window_dispose (GObject *obj)
+{
+  PsppireSyntaxWindow *sw = (PsppireSyntaxWindow *)obj;
+
+  GtkClipboard *clip_selection;
+  GtkClipboard *clip_primary;
+
+  if (sw->dispose_has_run)
+    return;
+
+  clip_selection = gtk_widget_get_clipboard (GTK_WIDGET (sw), GDK_SELECTION_CLIPBOARD);
+  clip_primary =   gtk_widget_get_clipboard (GTK_WIDGET (sw), GDK_SELECTION_PRIMARY);
+
+  g_signal_handler_disconnect (clip_primary, sw->sel_handler);
+
+  g_signal_handler_disconnect (clip_selection, sw->ps_handler);
+
+  /* Make sure dispose does not run twice. */
+  sw->dispose_has_run = TRUE;
+
+  /* Chain up to the parent class */
+  G_OBJECT_CLASS (parent_class)->dispose (obj);
+}
+
+
+
 static void
 psppire_syntax_window_class_init (PsppireSyntaxWindowClass *class)
 {
+  GObjectClass *gobject_class = G_OBJECT_CLASS (class);
+
   GtkSourceLanguageManager *lm = gtk_source_language_manager_get_default ();
 
   const gchar * const *existing_paths =  gtk_source_language_manager_get_search_path (lm);
@@ -129,6 +158,10 @@ psppire_syntax_window_class_init (PsppireSyntaxWindowClass *class)
   parent_class = g_type_class_peek_parent (class);
 
   g_strfreev (new_paths);
+
+  parent_class = g_type_class_peek_parent (class);
+
+  gobject_class->dispose = psppire_syntax_window_dispose;
 }
 
 
@@ -309,8 +342,12 @@ on_edit_paste (PsppireSyntaxWindow *sw)
                                  sw);
 }
 
+
+/* Check to see if CLIP holds a target which we know how to paste,
+   and set the sensitivity of the Paste action accordingly.
+ */
 static void
-on_owner_change (GtkClipboard *clip, GdkEventOwnerChange *event, gpointer data)
+set_paste_sensitivity (GtkClipboard *clip, GdkEventOwnerChange *event, gpointer data)
 {
   gint i;
   gboolean compatible_target = FALSE;
@@ -461,7 +498,7 @@ save_editor_to_file (PsppireSyntaxWindow *se,
   if ( result )
     {
       char *fn = g_filename_display_name (filename);
-      gchar *msg = g_strdup_printf (_("Saved file \"%s\""), fn);
+      gchar *msg = g_strdup_printf (_("Saved file `%s'"), fn);
       g_free (fn);
       gtk_statusbar_push (GTK_STATUSBAR (se->sb), se->text_context, msg);
       gtk_text_buffer_set_modified (buffer, FALSE);
@@ -624,6 +661,7 @@ psppire_syntax_window_init (PsppireSyntaxWindow *window)
   GtkClipboard *clip_selection = gtk_widget_get_clipboard (GTK_WIDGET (window), GDK_SELECTION_CLIPBOARD);
   GtkClipboard *clip_primary =   gtk_widget_get_clipboard (GTK_WIDGET (window), GDK_SELECTION_PRIMARY);
 
+
   window->print_settings = NULL;
   window->undo_menuitem = get_action_assert (xml, "edit_undo");
   window->redo_menuitem = get_action_assert (xml, "edit_redo");
@@ -647,11 +685,8 @@ psppire_syntax_window_init (PsppireSyntaxWindow *window)
                "highlight-current-line", TRUE,
                NULL);
 
-  g_signal_connect_swapped (clip_primary, "owner-change", G_CALLBACK (selection_changed), window);
-
-  g_signal_connect (clip_selection, "owner-change", G_CALLBACK (on_owner_change), window);
-
   window->cliptext = NULL;
+  window->dispose_has_run = FALSE;
 
   window->edit_delete = get_action_assert (xml, "edit_delete");
   window->edit_copy = get_action_assert (xml, "edit_copy");
@@ -663,9 +698,10 @@ psppire_syntax_window_init (PsppireSyntaxWindow *window)
   window->sb = get_widget_assert (xml, "statusbar2");
   window->text_context = gtk_statusbar_get_context_id (GTK_STATUSBAR (window->sb), "Text Context");
 
-  g_signal_connect (window->buffer, "changed", G_CALLBACK (on_text_changed), window);
+  g_signal_connect (window->buffer, "changed", 
+                   G_CALLBACK (on_text_changed), window);
 
-  g_signal_connect (window->buffer, "modified-changed",
+  g_signal_connect (window->buffer, "modified-changed", 
                    G_CALLBACK (on_modified_changed), window);
 
   g_signal_connect_swapped (get_action_assert (xml, "file_print"), "activate",
@@ -684,6 +720,12 @@ psppire_syntax_window_init (PsppireSyntaxWindow *window)
 
   undo_redo_update (window);
 
+  window->sel_handler = g_signal_connect_swapped (clip_primary, "owner-change", 
+                                                  G_CALLBACK (selection_changed), window);
+
+  window->ps_handler = g_signal_connect (clip_selection, "owner-change", 
+                                         G_CALLBACK (set_paste_sensitivity), window);
+
   connect_help (xml);
 
   gtk_container_add (GTK_CONTAINER (window), box);
@@ -694,7 +736,6 @@ psppire_syntax_window_init (PsppireSyntaxWindow *window)
 
   g_object_ref (window->sb);
 
-
   gtk_box_pack_start (GTK_BOX (box), menubar, FALSE, TRUE, 0);
   gtk_box_pack_start (GTK_BOX (box), sw, TRUE, TRUE, 0);
   gtk_box_pack_start (GTK_BOX (box), window->sb, FALSE, TRUE, 0);
@@ -793,7 +834,8 @@ GtkWidget*
 psppire_syntax_window_new (void)
 {
   return GTK_WIDGET (g_object_new (psppire_syntax_window_get_type (),
-                                  "filename", "Syntax",
+                                  /* TRANSLATORS: This will form a filename.  Please avoid whitespace. */
+                                  "filename", _("Syntax"),
                                   "description", _("Syntax Editor"),
                                   NULL));
 }
@@ -808,7 +850,7 @@ error_dialog (GtkWindow *w, const gchar *filename,  GError *err)
                            GTK_DIALOG_DESTROY_WITH_PARENT,
                            GTK_MESSAGE_ERROR,
                            GTK_BUTTONS_CLOSE,
-                           _("Cannot load syntax file '%s'"),
+                           _("Cannot load syntax file `%s'"),
                            fn);
 
   g_free (fn);
@@ -876,6 +918,7 @@ psppire_syntax_window_iface_init (PsppireWindowIface *iface)
   iface->load = syntax_load;
 }
 
+
 \f
 
 static void
index 1f97cbc7e0e4814f5fd7d40ca897b78e352c64ee..df16ed3ba62fd650552c8897c01f1b3d48f925f5 100644 (file)
@@ -68,6 +68,11 @@ struct _PsppireSyntaxWindow
   GtkAction *edit_copy;
   GtkAction *edit_delete;
   GtkAction *edit_paste;
+
+  gulong ps_handler;
+  gulong sel_handler;
+
+  gboolean dispose_has_run;
 };
 
 struct _PsppireSyntaxWindowClass
index 1a2fc1fcee1429d5e83d68f35204b88fca68bef2..a2e6685443e3dd5a525d5f985f8e7acb1f4dd709 100644 (file)
@@ -279,7 +279,7 @@ static void
 psppire_var_store_init (PsppireVarStore *var_store)
 {
   if ( ! gdk_color_parse (DISABLED_COLOR, &var_store->disabled))
-       g_critical ("Could not parse color \"%s\"", DISABLED_COLOR);
+       g_critical ("Could not parse color `%s'", DISABLED_COLOR);
 
   var_store->dictionary = NULL;
   var_store->format_type = PSPPIRE_VAR_STORE_OUTPUT_FORMATS;
@@ -685,7 +685,7 @@ text_for_column (PsppireVarStore *vs,
          default:
             {
               char str[FMT_STRING_LEN_MAX + 1];
-              g_warning ("Unknown format: \"%s\"\n",
+              g_warning ("Unknown format: `%s'\n",
                         fmt_to_string (write_spec, str));
             }
            break;
@@ -752,7 +752,7 @@ text_for_column (PsppireVarStore *vs,
            {
              gchar *const vstr = value_to_text (vl->value, dict, *write_spec);
 
-             return g_strdup_printf ( "{%s,\"%s\"}_", vstr, val_lab_get_label (vl));
+             return g_strdup_printf (_("{%s,`%s'}_"), vstr, val_lab_get_label (vl));
            }
          }
       }
index f7a017b3364698ba3f1e061c9fc10a66a3fbcc96..73bd9d8de225cf33fbe86e5768486e6f9d1edfb9 100644 (file)
@@ -297,7 +297,7 @@ psppire_var_view_get_variable (PsppireVarView *vv, gint column, GtkTreeIter *ite
   if ( G_VALUE_TYPE (&value) == PSPPIRE_VAR_PTR_TYPE)
     var = g_value_get_boxed (&value);
   else
-    g_critical ("Unsupported type \"%s\", in variable name treeview.",
+    g_critical ("Unsupported type `%s', in variable name treeview.",
                G_VALUE_TYPE_NAME (&value));
 
   g_value_unset (&value);
index d3137ff2234d0d036329596a0c8ad0746d72dcd7..e03732fc365c6c555adf0e513454a91e22e66db6 100644 (file)
@@ -243,7 +243,8 @@ psppire_window_class_init (PsppireWindowClass *class)
     g_param_spec_string ("filename",
                       "File name",
                       "The name of the file associated with this window, if any",
-                        "Untitled",
+                        /* TRANSLATORS: This will form a filename.  Please avoid whitespace. */
+                        _("Untitled"),
                         G_PARAM_CONSTRUCT | G_PARAM_READWRITE);
 
   g_unichar_to_utf8 (0x2014, mdash);
@@ -465,7 +466,7 @@ psppire_window_query_save (PsppireWindow *se)
                            GTK_DIALOG_MODAL,
                            GTK_MESSAGE_WARNING,
                            GTK_BUTTONS_NONE,
-                           _("Save the changes to \"%s\" before closing?"),
+                           _("Save the changes to `%s' before closing?"),
                            fn);
   g_free (fn);
 
index d75bff359b1d33aac4b0d8f177a259e47d014903..61042efe546cdedaf59470764312c6fa5e817361 100644 (file)
@@ -96,7 +96,7 @@ initialize (struct source_stream *ss, const char *data_file)
   preregister_widgets ();
 
   gsl_set_error_handler_off ();
-  settings_init (&viewer_width, &viewer_length);
+  settings_init ();
   fh_init ();
 
   the_dataset = create_dataset ();
@@ -268,7 +268,7 @@ load_data_file (const char *arg)
       utf8 = g_locale_to_utf8 (arg, -1, NULL, &written, &err);
       if ( NULL == utf8)
         {
-          g_warning ("Cannot convert filename from local encoding \"%s\" to UTF-8: %s",
+          g_warning ("Cannot convert filename from local encoding `%s' to UTF-8: %s",
                      local_encoding,
                      err->message);
           g_clear_error (&err);
index 8ee81d6481e401c1132fd5df0c63730de066111b..f07fe76540b0652947a33c8c0492396b47e61003 100644 (file)
       </object>
     </child>
   </object>
-  <object class="PsppireDialog" id="split-file-dialog">
-    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-    <property name="title" translatable="yes">Split File</property>
-    <property name="modal">True</property>
-    <child internal-child="hbox">
-      <object class="GtkHBox" id="dialog-hbox3">
-        <property name="visible">True</property>
-        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-        <property name="spacing">2</property>
-        <child>
-          <object class="GtkVBox" id="vbox6">
-            <property name="visible">True</property>
-            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-            <property name="orientation">vertical</property>
-            <child>
-              <object class="GtkHBox" id="hbox5">
-                <property name="visible">True</property>
-                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                <child>
-                  <object class="GtkFrame" id="frame5">
-                    <property name="visible">True</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                    <property name="label_xalign">0</property>
-                    <property name="shadow_type">in</property>
-                    <child>
-                      <object class="GtkScrolledWindow" id="scrolledwindow4">
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <property name="hscrollbar_policy">never</property>
-                        <property name="vscrollbar_policy">automatic</property>
-                        <child>
-                          <object class="PsppireDictView" id="split-file-dict-treeview">
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="headers_visible">False</property>
-                            <property name="fixed_height_mode">True</property>
-                          </object>
-                        </child>
-                      </object>
-                    </child>
-                    <child type="label_item">
-                      <placeholder/>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkVBox" id="vbox7">
-                    <property name="visible">True</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                    <property name="orientation">vertical</property>
-                    <child>
-                      <object class="GtkVButtonBox" id="vbuttonbox2">
-                        <property name="visible">True</property>
-                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <property name="layout_style">spread</property>
-                        <child>
-                          <object class="GtkRadioButton" id="split-radiobutton0">
-                            <property name="label" translatable="yes">Analyze all cases.  Do not create groups.</property>
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">False</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="active">True</property>
-                            <property name="draw_indicator">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkRadioButton" id="split-radiobutton1">
-                            <property name="label" translatable="yes">Compare groups.</property>
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">False</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="draw_indicator">True</property>
-                            <property name="group">split-radiobutton0</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkRadioButton" id="split-radiobutton2">
-                            <property name="label" translatable="yes">Organize output by groups.</property>
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">False</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="draw_indicator">True</property>
-                            <property name="group">split-radiobutton0</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">2</property>
-                          </packing>
-                        </child>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkHBox" id="hbox6">
-                        <property name="visible">True</property>
-                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <child>
-                          <object class="GtkAlignment" id="alignment2">
-                            <property name="visible">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="yscale">0.5</property>
-                            <child>
-                              <object class="PsppireSelector" id="split-file-selector">
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="receives_default">True</property>
-                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                <property name="border_width">5</property>
-                                <property name="source_widget">split-file-dict-treeview</property>
-                                <property name="dest_widget">split-file-grouping-vars</property>
-                              </object>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="padding">18</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkVBox" id="vbox8">
-                            <property name="visible">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="orientation">vertical</property>
-                            <child>
-                              <object class="GtkLabel" id="label5">
-                                <property name="visible">True</property>
-                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Groups based on:</property>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkFrame" id="frame4">
-                                <property name="visible">True</property>
-                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                <property name="label_xalign">0</property>
-                                <property name="label_yalign">0</property>
-                                <property name="shadow_type">in</property>
-                                <child>
-                                  <object class="GtkScrolledWindow" id="scrolledwindow5">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                    <property name="hscrollbar_policy">never</property>
-                                    <property name="vscrollbar_policy">automatic</property>
-                                    <child>
-                                      <object class="PsppireVarView" id="split-file-grouping-vars">
-                                        <property name="visible">True</property>
-                                        <property name="can_focus">True</property>
-                                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                        <property name="headers_visible">False</property>
-                                        <property name="fixed_height_mode">True</property>
-                                      </object>
-                                    </child>
-                                  </object>
-                                </child>
-                                <child type="label_item">
-                                  <placeholder/>
-                                </child>
-                              </object>
-                              <packing>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                      <packing>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <object class="GtkVButtonBox" id="vbuttonbox1">
-                        <property name="visible">True</property>
-                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <property name="homogeneous">True</property>
-                        <property name="layout_style">spread</property>
-                        <child>
-                          <object class="GtkRadioButton" id="split-radiobutton3">
-                            <property name="label" translatable="yes">Sort the file by grouping variables.</property>
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">False</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="use_underline">True</property>
-                            <property name="active">True</property>
-                            <property name="draw_indicator">True</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkRadioButton" id="split-radiobutton4">
-                            <property name="label" translatable="yes">File is already sorted.</property>
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">False</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="use_underline">True</property>
-                            <property name="draw_indicator">True</property>
-                            <property name="group">split-radiobutton3</property>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">2</property>
-                      </packing>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="padding">5</property>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
-              </object>
-              <packing>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkHSeparator" id="hseparator1">
-                <property name="visible">True</property>
-                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkHBox" id="hbox7">
-                <property name="visible">True</property>
-                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                <child>
-                  <object class="GtkLabel" id="label6">
-                    <property name="visible">True</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                    <property name="xalign">1</property>
-                    <property name="label" translatable="yes">Current Status : </property>
-                  </object>
-                  <packing>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkLabel" id="label7">
-                    <property name="visible">True</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                    <property name="xalign">0</property>
-                    <property name="label" translatable="yes">Analysis by groups is off</property>
-                  </object>
-                  <packing>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">2</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="PsppireVButtonBox" id="psppire-buttonbox3">
-            <property name="visible">True</property>
-            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-            <property name="border_width">5</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="pack_type">end</property>
-            <property name="position">1</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-  </object>
   <object class="PsppireDialog" id="comments-dialog">
     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
     <property name="title" translatable="yes">Data File Comments</property>
index af5ebef91c711000240bcf24b35c504c97f3be33..45a3a6cc2c4fea79611996484ae8be214becbefe 100644 (file)
                     <property name="visible">True</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                     <property name="xalign">0</property>
-                    <property name="label" translatable="yes">Convert numeric strings to numbers ('5' -&gt; 5)</property>
+                    <property name="label" translatable="yes">Convert numeric strings to numbers (`5' -&gt; 5)</property>
                   </object>
                   <packing>
                     <property name="left_attach">1</property>
index 5834bcc71f5b733c12f0acb51c26309bb73e59fb..0f50c91a3f96cf8dcbe60049cdfaa4158c74efb1 100644 (file)
@@ -206,9 +206,8 @@ range_subdialog (GtkButton *b, gpointer data)
                                        "range-dialog-last");
 
 
-  gtk_spin_button_set_range (GTK_SPIN_BUTTON (last), 1, n_cases);
-
-  gtk_spin_button_set_range (GTK_SPIN_BUTTON (first), 1, n_cases);
+  gtk_spin_button_set_range (GTK_SPIN_BUTTON (last),  1,  n_cases);
+  gtk_spin_button_set_range (GTK_SPIN_BUTTON (first), 1,  n_cases);
 
   gtk_window_set_transient_for (GTK_WINDOW (dialog),
                                GTK_WINDOW (parent_dialog));
@@ -375,7 +374,118 @@ select_cases_dialog (PsppireDataWindow *de)
 
 
 static gchar *
-generate_syntax (const struct select_cases_dialog *scd)
+generate_syntax_filter (const struct select_cases_dialog *scd)
+{
+  gchar *text = NULL;
+  GString *string = g_string_new ("");
+
+  const gchar filter[]="filter_$";
+  const gchar key[]="case_$";
+
+  if ( gtk_toggle_button_get_active
+       (GTK_TOGGLE_BUTTON (get_widget_assert (scd->xml,
+                                             "radiobutton-range"))))
+    {
+      GtkSpinButton *first =
+       GTK_SPIN_BUTTON (get_widget_assert (scd->xml,
+                                          "range-dialog-first"));
+
+      GtkSpinButton *last =
+       GTK_SPIN_BUTTON (get_widget_assert (scd->xml,
+                                          "range-dialog-last"));
+
+      g_string_append_printf (string,
+                             "COMPUTE filter_$ = ($CASENUM >= %ld "
+                              "AND $CASENUM <= %ld).\n",
+                             (long) gtk_spin_button_get_value (first),
+                             (long) gtk_spin_button_get_value (last)
+                             );
+
+      g_string_append (string, "EXECUTE.\n");
+    }
+  else if ( gtk_toggle_button_get_active
+       (GTK_TOGGLE_BUTTON (get_widget_assert (scd->xml,
+                                             "radiobutton-sample"))))
+    {
+      GtkWidget *random_sample =
+       get_widget_assert (scd->xml,
+                          "radiobutton-sample-percent");
+
+      if ( gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (random_sample)))
+       {
+         const double percentage =
+           gtk_spin_button_get_value (GTK_SPIN_BUTTON (scd->spinbutton));
+
+         g_string_append_printf (string,
+                                 "COMPUTE %s = RV.UNIFORM (0,1) < %g.\n",
+                                 filter,
+                                 percentage / 100.0 );
+       }
+      else
+       {
+         const gint n_cases =
+           gtk_spin_button_get_value (GTK_SPIN_BUTTON (scd->spinbutton1));
+         const gint from_n_cases =
+           gtk_spin_button_get_value (GTK_SPIN_BUTTON (scd->spinbutton2));
+
+
+         const gchar ranvar[]="rv_$";
+
+         g_string_append_printf (string,
+                                 "COMPUTE %s = $CASENUM.\n", key);
+
+         g_string_append_printf (string,
+                                 "COMPUTE %s = %s > %d.\n",
+                                 filter, key, from_n_cases);
+
+         g_string_append_printf (string,
+                                 "COMPUTE %s = RV.UNIFORM (0, 1).\n",
+                                 ranvar);
+
+         g_string_append_printf (string,
+                                 "SORT BY %s, %s.\n",
+                                 filter, ranvar);
+
+         g_string_append (string, "EXECUTE.\n");
+                                 
+
+         g_string_append_printf (string,
+                                 "COMPUTE %s = $CASENUM.\n",
+                                 filter );
+
+         g_string_append_printf (string,
+                                 "COMPUTE %s = %s <= %d\n",
+                                 filter,
+                                 filter,
+                                 n_cases );
+
+         g_string_append (string, "EXECUTE.\n");
+
+
+         g_string_append_printf (string,
+                                 "SORT BY %s.\n",
+                                 key);
+
+         g_string_append_printf (string,
+                                 "DELETE VARIABLES %s, %s.\n",
+                                 key, ranvar);
+
+       }
+
+      g_string_append (string, "EXECUTE.\n");
+
+    }
+
+
+  g_string_append_printf  (string, "FILTER BY %s.\n", filter);
+
+  text  = string->str;
+  g_string_free (string, FALSE);
+  return text;
+}
+
+static gchar *
+generate_syntax_delete (const struct select_cases_dialog *scd)
 {
   gchar *text = NULL;
   GString *string = NULL;
@@ -455,23 +565,38 @@ generate_syntax (const struct select_cases_dialog *scd)
   g_string_append (string, "\n");
 
 
+
+  text  = string->str;
+  g_string_free (string, FALSE);
+  return text;
+}
+
+
+static gchar *
+generate_syntax (const struct select_cases_dialog *scd)
+{
+  /* In the simple case, all we need to do is cancel any existing filter */
+  if ( gtk_toggle_button_get_active
+       (GTK_TOGGLE_BUTTON (get_widget_assert (scd->xml,
+                                             "radiobutton-all"))))
+    {
+      return g_strdup ("FILTER OFF.\n");
+    }
+
+
   /* Are we filtering or deleting ? */
   if ( gtk_toggle_button_get_active
        (GTK_TOGGLE_BUTTON (get_widget_assert (scd->xml,
                                              "radiobutton-delete"))))
     {
-      g_string_append (string, "EXECUTE.\n");
-
-      if ( gtk_toggle_button_get_active
-          (GTK_TOGGLE_BUTTON (get_widget_assert (scd->xml,
-                                                 "radiobutton-range"))))
-       {
-         g_string_append (string, "DELETE VARIABLES filter_$.\n");
-       }
+      return generate_syntax_delete (scd);
+    }
+  else
+    {
+      return generate_syntax_filter (scd);
     }
 
-
-  text  = string->str;
-  g_string_free (string, FALSE);
-  return text;
 }
+
+
+
index 9088046ec29b805c3bfca90158ed5302d747cc4a..1748651a0bcf8e54556e17d90b93ba46fbc3e267 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPPIRE - a graphical user interface for PSPP.
-   Copyright (C) 2007  Free Software Foundation
+   Copyright (C) 2007, 2010  Free Software Foundation
 
    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
@@ -49,7 +49,6 @@ struct split_file_dialog
      upon which the file should be split */
   GtkTreeView *tv;
 
-
   PsppireSelector *selector;
 };
 
@@ -60,9 +59,6 @@ generate_syntax (const struct split_file_dialog *sfd)
   gchar *text;
   GtkWidget *off = get_widget_assert (sfd->xml, "split-radiobutton0");
 
-  GtkWidget *vars =
-    get_widget_assert (sfd->xml, "split-file-grouping-vars");
-
   GString *string = g_string_new ("SPLIT FILE OFF.");
 
   if ( ! gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (off)))
@@ -70,7 +66,7 @@ generate_syntax (const struct split_file_dialog *sfd)
       GString * varlist = g_string_sized_new (80);
       GtkWidget *sort = get_widget_assert (sfd->xml, "split-radiobutton3");
       GtkWidget *layered = get_widget_assert (sfd->xml, "split-radiobutton1");
-      gint n_vars = psppire_var_view_append_names (PSPPIRE_VAR_VIEW (vars), 0, varlist);
+      gint n_vars = psppire_var_view_append_names (PSPPIRE_VAR_VIEW (sfd->tv), 0, varlist);
 
       if ( n_vars > 0 )
        {
@@ -135,7 +131,6 @@ refresh (PsppireDialog *dialog, struct split_file_dialog *d)
 
   gint n_vars = dict_get_split_cnt (d->dict->dict);
 
-
   gtk_list_store_clear (GTK_LIST_STORE (liststore));
 
   if ( n_vars == 0 )
@@ -148,10 +143,11 @@ refresh (PsppireDialog *dialog, struct split_file_dialog *d)
 
       for (i = 0 ; i < n_vars; ++i )
        {
-         gint idx = var_get_dict_index (vars[i]);
-
          gtk_list_store_append (GTK_LIST_STORE (liststore), &iter);
-         gtk_list_store_set (GTK_LIST_STORE (liststore), &iter, 0, idx, -1);
+
+         gtk_list_store_set (GTK_LIST_STORE (liststore), &iter,
+                             0, vars[i],
+                             -1);
        }
 
       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(on), TRUE);
@@ -172,24 +168,23 @@ split_file_dialog (PsppireDataWindow *de)
 
   GtkWidget *dialog   ;
   GtkWidget *source   ;
-  GtkWidget *dest     ;
   GtkWidget *selector ;
   GtkWidget *on_off   ;
 
-  sfd.xml = builder_new ("psppire.ui");
+  sfd.xml = builder_new ("split-file.ui");
 
   dialog = get_widget_assert   (sfd.xml, "split-file-dialog");
   source = get_widget_assert   (sfd.xml, "split-file-dict-treeview");
-  dest =   get_widget_assert   (sfd.xml, "split-file-grouping-vars");
   selector = get_widget_assert (sfd.xml, "split-file-selector");
   on_off = get_widget_assert   (sfd.xml, "split-radiobutton0");
 
+  sfd.tv = GTK_TREE_VIEW (get_widget_assert (sfd.xml, "split-file-grouping-vars"));
+
   g_object_get (de->data_editor, "var-store", &vs, NULL);
 
   g_object_get (vs, "dictionary", &sfd.dict, NULL);
-  sfd.tv = GTK_TREE_VIEW (dest);
-  sfd.selector  = PSPPIRE_SELECTOR (
-                                   get_widget_assert   (sfd.xml, "split-file-selector"));
+
+  sfd.selector = PSPPIRE_SELECTOR (get_widget_assert (sfd.xml, "split-file-selector"));
 
   g_object_set (source, "model", sfd.dict, NULL);
 
diff --git a/src/ui/gui/split-file.ui b/src/ui/gui/split-file.ui
new file mode 100644 (file)
index 0000000..4c9b9fb
--- /dev/null
@@ -0,0 +1,332 @@
+<?xml version="1.0"?>
+<interface>
+  <requires lib="psppire" version="2054.17080"/>
+  <!-- interface-requires gtk+ 2.12 -->
+  <!-- interface-naming-policy project-wide -->
+  <object class="PsppireDialog" id="split-file-dialog">
+    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+    <property name="title" translatable="yes">Split File</property>
+    <property name="modal">True</property>
+    <child internal-child="hbox">
+      <object class="GtkHBox" id="dialog-hbox3">
+        <property name="visible">True</property>
+        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+        <property name="spacing">2</property>
+        <child>
+          <object class="GtkVBox" id="vbox6">
+            <property name="visible">True</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+            <property name="orientation">vertical</property>
+            <child>
+              <object class="GtkHBox" id="hbox5">
+                <property name="visible">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <child>
+                  <object class="GtkFrame" id="frame5">
+                    <property name="visible">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="label_xalign">0</property>
+                    <property name="shadow_type">in</property>
+                    <child>
+                      <object class="GtkScrolledWindow" id="scrolledwindow4">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="hscrollbar_policy">never</property>
+                        <property name="vscrollbar_policy">automatic</property>
+                        <child>
+                          <object class="PsppireDictView" id="split-file-dict-treeview">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                            <property name="headers_visible">False</property>
+                            <property name="fixed_height_mode">True</property>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                    <child type="label_item">
+                      <placeholder/>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkVBox" id="vbox7">
+                    <property name="visible">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="orientation">vertical</property>
+                    <child>
+                      <object class="GtkVButtonBox" id="vbuttonbox2">
+                        <property name="visible">True</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="layout_style">spread</property>
+                        <child>
+                          <object class="GtkRadioButton" id="split-radiobutton0">
+                            <property name="label" translatable="yes">Analyze all cases.  Do not create groups.</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">False</property>
+                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                            <property name="active">True</property>
+                            <property name="draw_indicator">True</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkRadioButton" id="split-radiobutton1">
+                            <property name="label" translatable="yes">Compare groups.</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">False</property>
+                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                            <property name="draw_indicator">True</property>
+                            <property name="group">split-radiobutton0</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkRadioButton" id="split-radiobutton2">
+                            <property name="label" translatable="yes">Organize output by groups.</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">False</property>
+                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                            <property name="draw_indicator">True</property>
+                            <property name="group">split-radiobutton0</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">2</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkHBox" id="hbox6">
+                        <property name="visible">True</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <child>
+                          <object class="GtkAlignment" id="alignment2">
+                            <property name="visible">True</property>
+                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                            <property name="yscale">0.5</property>
+                            <child>
+                              <object class="PsppireSelector" id="split-file-selector">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">True</property>
+                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <property name="border_width">5</property>
+                                <property name="source_widget">split-file-dict-treeview</property>
+                                <property name="dest_widget">split-file-grouping-vars</property>
+                              </object>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="padding">18</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkVBox" id="vbox8">
+                            <property name="visible">True</property>
+                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                            <property name="orientation">vertical</property>
+                            <child>
+                              <object class="GtkLabel" id="label5">
+                                <property name="visible">True</property>
+                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">Groups based on:</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkFrame" id="frame4">
+                                <property name="visible">True</property>
+                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <property name="label_xalign">0</property>
+                                <property name="label_yalign">0</property>
+                                <property name="shadow_type">in</property>
+                                <child>
+                                  <object class="GtkScrolledWindow" id="scrolledwindow5">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                    <property name="hscrollbar_policy">never</property>
+                                    <property name="vscrollbar_policy">automatic</property>
+                                    <child>
+                                      <object class="PsppireVarView" id="split-file-grouping-vars">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                        <property name="headers_visible">False</property>
+                                        <property name="fixed_height_mode">True</property>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child type="label_item">
+                                  <placeholder/>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkVButtonBox" id="vbuttonbox1">
+                        <property name="visible">True</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="homogeneous">True</property>
+                        <property name="layout_style">spread</property>
+                        <child>
+                          <object class="GtkRadioButton" id="split-radiobutton3">
+                            <property name="label" translatable="yes">Sort the file by grouping variables.</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">False</property>
+                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                            <property name="use_underline">True</property>
+                            <property name="active">True</property>
+                            <property name="draw_indicator">True</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkRadioButton" id="split-radiobutton4">
+                            <property name="label" translatable="yes">File is already sorted.</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">False</property>
+                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                            <property name="use_underline">True</property>
+                            <property name="draw_indicator">True</property>
+                            <property name="group">split-radiobutton3</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">2</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="padding">5</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkHSeparator" id="hseparator1">
+                <property name="visible">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkHBox" id="hbox7">
+                <property name="visible">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <child>
+                  <object class="GtkLabel" id="label6">
+                    <property name="visible">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="xalign">1</property>
+                    <property name="label" translatable="yes">Current Status : </property>
+                  </object>
+                  <packing>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkLabel" id="label7">
+                    <property name="visible">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">Analysis by groups is off</property>
+                  </object>
+                  <packing>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="PsppireVButtonBox" id="psppire-buttonbox3">
+            <property name="visible">True</property>
+            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+            <property name="border_width">5</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="pack_type">end</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
+</interface>
index 5add061365a082a2e90ef4f91719d89c6e0f394e..13c6d96804e48903a72cf37e16699c0e788d0e3b 100644 (file)
@@ -458,7 +458,7 @@ init_file (struct import_assistant *ia, GtkWindow *parent_window)
   stream = fopen (file->file_name, "r");
   if (stream == NULL)
     {
-      msg (ME, _("Could not open \"%s\": %s"),
+      msg (ME, _("Could not open `%s': %s"),
            file->file_name, strerror (errno));
       return false;
     }
@@ -474,10 +474,10 @@ init_file (struct import_assistant *ia, GtkWindow *parent_window)
           if (feof (stream))
             break;
           else if (ferror (stream))
-            msg (ME, _("Error reading \"%s\": %s"),
+            msg (ME, _("Error reading `%s': %s"),
                  file->file_name, strerror (errno));
           else
-            msg (ME, _("Failed to read \"%s\", because it contains a line "
+            msg (ME, _("Failed to read `%s', because it contains a line "
                        "over %d bytes long and therefore appears not to be "
                        "a text file."),
                  file->file_name, MAX_LINE_LEN);
@@ -491,7 +491,7 @@ init_file (struct import_assistant *ia, GtkWindow *parent_window)
 
   if (file->line_cnt == 0)
     {
-      msg (ME, _("\"%s\" is empty."), file->file_name);
+      msg (ME, _("`%s' is empty."), file->file_name);
       fclose (stream);
       destroy_file (ia);
       return false;
@@ -1775,20 +1775,19 @@ parse_field (struct import_assistant *ia,
   tooltip = NULL;
   if (field.string != NULL)
     {
-      msg_disable ();
+      char *error;
 
-      if (!data_in (field, LEGACY_NATIVE, in->type, 0, 0, 0,
-                   ia->formats.dict,
-                    &val, var_get_width (var)))
+      error = data_in (field, LEGACY_NATIVE, in->type, &val,
+                       var_get_width (var),
+                       dict_get_encoding (ia->formats.dict));
+      if (error != NULL)
         {
-          char fmt_string[FMT_STRING_LEN_MAX + 1];
-          fmt_to_string (in, fmt_string);
-          tooltip = xasprintf (_("Field content \"%.*s\" cannot be parsed in "
-                                 "format %s."),
+          tooltip = xasprintf (_("Cannot parse field content `%.*s' as "
+                                 "format %s: %s"),
                                (int) field.length, field.string,
-                               fmt_string);
+                               fmt_name (in->type), error);
+          free (error);
         }
-      msg_enable ();
     }
   else
     {
index 5f43ff498f10a6c4910a53bec9fc5bfda82a87fb..efeb548e29d61060c5a781c1057716cff103fdab 100644 (file)
 #include "psppire-var-store.h"
 #include <libpspp/i18n.h>
 
+#include <gettext.h>
+#define _(msgid) gettext (msgid)
+#define N_(msgid) msgid
+
 struct val_labs_dialog
 {
   GtkWidget *window;
@@ -508,7 +512,7 @@ repopulate_dialog (struct val_labs_dialog *dialog)
        value_to_text (vl->value, dialog->dict,
                      *var_get_write_format (dialog->pv));
 
-      gchar *const text = g_strdup_printf ("%s = \"%s\"",
+      gchar *const text = g_strdup_printf (_("%s = `%s'"),
                                           vstr, val_lab_get_label (vl));
 
       gtk_list_store_append (list_store, &iter);
index c91a9fef1a8956c4bd856d58fa26fd998194df69..a984b3d099546d59b09b1487e1ec0e832ed3cb67 100644 (file)
@@ -74,8 +74,10 @@ source_init_option_callback (int id, void *ss_)
       else if (!strcmp (optarg, "enhanced"))
        settings_set_algorithm (ENHANCED);
       else
+        /* TRANSLATORS: Leave the words `compatible' and `enhanced' in their
+       original English. */
         error (1, 0,
-               _("Algorithm must be either \"compatible\" or \"enhanced\"."));
+               _("Algorithm must be either `compatible' or `enhanced'."));
       break;
 
     case OPT_INCLUDE:
@@ -99,8 +101,10 @@ source_init_option_callback (int id, void *ss_)
       else if (!strcmp (optarg, "enhanced"))
        settings_set_syntax (ENHANCED);
       else
+        /* TRANSLATORS: Leave the words `compatible' and `enhanced' in their
+       original English. */
         error (1, 0,
-               _("Syntax must be either \"compatible\" or \"enhanced\"."));
+               _("Syntax must be either `compatible' or `enhanced'."));
       break;
 
     default:
index 22e717ac965903acdb5a8b12f95e5e3dd6492832..b49911f5e8f06fd81a2726a1a0bc67b51e68f558 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPPIRE - a graphical user interface for PSPP.
-   Copyright (C) 2008 Free Software Foundation, Inc.
+   Copyright (C) 2008, 2010 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
 #include <ctype.h>
 #include <mbchar.h>
 
-#include <data/data-in.h>
-#include <data/data-out.h>
-#include <data/format.h>
-#include <data/value.h>
-#include <libpspp/assertion.h>
-#include <libpspp/message.h>
-#include <libpspp/str.h>
+#include "data/data-in.h"
+#include "data/data-out.h"
+#include "data/format.h"
+#include "data/value.h"
+#include "libpspp/assertion.h"
+#include "libpspp/cast.h"
+#include "libpspp/message.h"
+#include "libpspp/str.h"
 
 /* Appends to OUTPUT a pair of hex digits for each byte in IN. */
 static void
@@ -146,16 +147,18 @@ syntax_gen_number (struct string *output,
           & (FMT_CAT_DATE | FMT_CAT_TIME | FMT_CAT_DATE_COMPONENT)))
     {
       union value v_in, v_out;
-      char *s;
+      char *s, *error;
       bool ok;
 
       v_in.f = number;
       s = data_out (&v_in, "FIXME",  format);
-      msg_disable ();
+
       /* 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 ();
+      error = data_in (ss_cstr (s), LEGACY_NATIVE,
+                       format->type, &v_out, 0, NULL);
+      ok = error == NULL;
+      free (error);
+
       if (ok && v_out.f == number)
         {
           syntax_gen_string (output, ss_cstr (s));
@@ -197,7 +200,10 @@ syntax_gen_value (struct string *output, const union value *value, int width,
   if (width == 0)
     syntax_gen_number (output, value->f, format);
   else
-    syntax_gen_string (output, ss_buffer (value_str (value, width), width));
+    {
+      char *s = CHAR_CAST_BUG (char *, value_str (value, width));
+      syntax_gen_string (output, ss_buffer (s, width));
+    }
 }
 
 /* Appends <low> THRU <high> to OUTPUT.  If LOW is LOWEST, then
index 02be4f78c0e777f1e93df1719fc7fc0ed48f13f2..64a7d2ec013e97a732b782570c25869b85fa669b 100644 (file)
@@ -28,6 +28,7 @@
 #if HAVE_IEEEFP_H
 #include <ieeefp.h>
 #endif
+#include <unistd.h>
 
 #include "data/dictionary.h"
 #include "data/file-handle-def.h"
@@ -39,6 +40,7 @@
 #include "language/command.h"
 #include "language/lexer/lexer.h"
 #include "language/prompt.h"
+#include "language/syntax-file.h"
 #include "libpspp/argv-parser.h"
 #include "libpspp/compiler.h"
 #include "libpspp/getl.h"
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 
-
-static void fpu_init (void);
-static void clean_up (void);
-
-/* If a segfault happens, issue a message to that effect and halt */
-void bug_handler(int sig);
-
-/* Handle quit/term/int signals */
-void interrupt_handler(int sig);
 static struct dataset * the_dataset = NULL;
 
 static struct lexer *the_lexer;
 static struct source_stream *the_source_stream ;
 
+static void add_syntax_file (struct source_stream *, enum syntax_mode,
+                             const char *file_name);
+static void bug_handler(int sig);
+static void fpu_init (void);
+
 /* Program entry point. */
 int
 main (int argc, char **argv)
 {
-  int *view_width_p, *view_length_p;
   struct terminal_opts *terminal_opts;
   struct argv_parser *parser;
+  enum syntax_mode syntax_mode;
+  bool process_statrc;
 
   set_program_name (argv[0]);
 
   signal (SIGABRT, bug_handler);
   signal (SIGSEGV, bug_handler);
   signal (SIGFPE, bug_handler);
-  at_fatal_signal (clean_up);
 
   i18n_init ();
   fpu_init ();
@@ -98,14 +96,14 @@ main (int argc, char **argv)
   the_source_stream = create_source_stream ();
   prompt_init ();
   readln_initialize ();
-  terminal_init (&view_width_p, &view_length_p);
-  settings_init (view_width_p, view_length_p);
+  settings_init ();
+  terminal_check_size ();
   random_init ();
 
   the_dataset = create_dataset ();
 
   parser = argv_parser_create ();
-  terminal_opts = terminal_opts_init (parser, the_source_stream);
+  terminal_opts = terminal_opts_init (parser, &syntax_mode, &process_statrc);
   source_init_register_argv_parser (parser, the_source_stream);
   if (!argv_parser_run (parser, argc, argv))
     exit (EXIT_FAILURE);
@@ -114,8 +112,28 @@ main (int argc, char **argv)
 
   msg_ui_init (the_source_stream);
 
-  the_lexer = lex_create (the_source_stream);
+  /* Add syntax files to source stream. */
+  if (process_statrc)
+    {
+      char *rc = fn_search_path ("rc", getl_include_path (the_source_stream));
+      if (rc != NULL)
+        {
+          add_syntax_file (the_source_stream, GETL_BATCH, rc);
+          free (rc);
+        }
+    }
+  if (optind < argc)
+    {
+      int i;
 
+      for (i = optind; i < argc; i++)
+        add_syntax_file (the_source_stream, syntax_mode, argv[i]);
+    }
+  else
+    add_syntax_file (the_source_stream, syntax_mode, "-");
+
+  /* Parse and execute syntax. */
+  the_lexer = lex_create (the_source_stream);
   for (;;)
     {
       int result = cmd_parse (the_lexer, the_dataset);
@@ -134,10 +152,21 @@ main (int argc, char **argv)
     }
 
 
-  clean_up ();
+  destroy_dataset (the_dataset);
+
+  random_done ();
+  settings_done ();
+  fh_done ();
+  lex_destroy (the_lexer);
+  destroy_source_stream (the_source_stream);
+  prompt_done ();
+  readln_uninitialize ();
+  output_close ();
+  msg_ui_done ();
+  i18n_done ();
+
   return msg_ui_any_errors ();
 }
-\f
 
 static void
 fpu_init (void)
@@ -153,45 +182,44 @@ fpu_init (void)
 }
 
 /* If a segfault happens, issue a message to that effect and halt */
-void
+static void
 bug_handler(int sig)
 {
+  /* Reset SIG to its default handling so that if it happens again we won't
+     recurse. */
+  signal (sig, SIG_DFL);
+
 #if DEBUGGING
   connect_debugger ();
 #endif
   switch (sig)
     {
     case SIGABRT:
-      request_bug_report_and_abort("Assertion Failure/Abort");
+      request_bug_report("Assertion Failure/Abort");
+      break;
     case SIGFPE:
-      request_bug_report_and_abort("Floating Point Exception");
+      request_bug_report("Floating Point Exception");
+      break;
     case SIGSEGV:
-      request_bug_report_and_abort("Segmentation Violation");
+      request_bug_report("Segmentation Violation");
+      break;
     default:
-      request_bug_report_and_abort("Unknown");
+      request_bug_report("Unknown");
+      break;
     }
+
+  /* Re-raise the signal so that we terminate with the correct status. */
+  raise (sig);
 }
 
-/* Clean up PSPP in preparation for termination.  */
 static void
-clean_up (void)
+add_syntax_file (struct source_stream *ss, enum syntax_mode syntax_mode,
+                 const char *file_name)
 {
-  static bool terminating = false;
-  if (!terminating)
-    {
-      terminating = true;
-
-      destroy_dataset (the_dataset);
-
-      random_done ();
-      settings_done ();
-      fh_done ();
-      lex_destroy (the_lexer);
-      destroy_source_stream (the_source_stream);
-      prompt_done ();
-      readln_uninitialize ();
-      output_close ();
-      msg_ui_done ();
-      i18n_done ();
-    }
+  struct getl_interface *source;
+
+  source = (!strcmp (file_name, "-") && isatty (STDIN_FILENO)
+           ? create_readln_source ()
+           : create_syntax_file_source (file_name));
+  getl_append_source (ss, source, syntax_mode, ERRMODE_CONTINUE);
 }
index bfda71e66cd2e9dc3750721d1200a5cfd955820f..d55a8a2e9607d5622dcb1f52b192a78263f7f28b 100644 (file)
 #include "terminal-opts.h"
 
 #include <stdbool.h>
-#include <xalloc.h>
 #include <stdlib.h>
-#include <unistd.h>
 
 #include "data/settings.h"
 #include "data/file-name.h"
 #include "language/syntax-file.h"
 #include "libpspp/argv-parser.h"
 #include "libpspp/assertion.h"
+#include "libpspp/cast.h"
 #include "libpspp/compiler.h"
 #include "libpspp/getl.h"
 #include "libpspp/llx.h"
@@ -46,6 +45,7 @@
 #include "gl/progname.h"
 #include "gl/version-etc.h"
 #include "gl/xmemdup0.h"
+#include "gl/xalloc.h"
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 
 struct terminal_opts
   {
-    struct source_stream *source_stream;
-    enum syntax_mode syntax_mode;
+    enum syntax_mode *syntax_mode;
     struct string_map options;  /* Output driver options. */
     bool has_output_driver;
     bool has_terminal_driver;
     bool has_error_file;
-    bool process_statrc;
+    bool *process_statrc;
   };
 
 enum
@@ -259,11 +258,11 @@ terminal_option_callback (int id, void *to_)
       break;
 
     case OPT_INTERACTIVE:
-      to->syntax_mode = GETL_INTERACTIVE;
+      *to->syntax_mode = GETL_INTERACTIVE;
       break;
 
     case OPT_NO_STATRC:
-      to->process_statrc = false;
+      *to->process_statrc = false;
       break;
 
     case OPT_HELP:
@@ -273,7 +272,7 @@ terminal_option_callback (int id, void *to_)
     case OPT_VERSION:
       version_etc (stdout, "pspp", PACKAGE_NAME, PACKAGE_VERSION,
                    "Ben Pfaff", "John Darrington", "Jason Stover",
-                   (char *) NULL);
+                   NULL_SENTINEL);
       exit (EXIT_SUCCESS);
 
     default:
@@ -282,60 +281,29 @@ terminal_option_callback (int id, void *to_)
 }
 
 struct terminal_opts *
-terminal_opts_init (struct argv_parser *ap, struct source_stream *ss)
+terminal_opts_init (struct argv_parser *ap,
+                    enum syntax_mode *syntax_mode, bool *process_statrc)
 {
   struct terminal_opts *to;
 
+  *syntax_mode = GETL_BATCH;
+  *process_statrc = true;
+
   to = xzalloc (sizeof *to);
-  to->source_stream = ss;
-  to->syntax_mode = GETL_BATCH;
+  to->syntax_mode = syntax_mode;
   string_map_init (&to->options);
   to->has_output_driver = false;
   to->has_error_file = false;
-  to->process_statrc = true;
+  to->process_statrc = process_statrc;
 
   argv_parser_add_options (ap, terminal_argv_options, N_TERMINAL_OPTIONS,
                            terminal_option_callback, to);
   return to;
 }
 
-static void
-add_syntax_file (struct terminal_opts *to, const char *file_name)
-{
-  if (!strcmp (file_name, "-") && isatty (STDIN_FILENO))
-    getl_append_source (to->source_stream, create_readln_source (),
-                        GETL_INTERACTIVE, ERRMODE_CONTINUE);
-  else
-    getl_append_source (to->source_stream,
-                        create_syntax_file_source (file_name),
-                        to->syntax_mode, ERRMODE_CONTINUE);
-}
-
 void
 terminal_opts_done (struct terminal_opts *to, int argc, char *argv[])
 {
-  if (to->process_statrc)
-    {
-      char *rc = fn_search_path ("rc", getl_include_path (to->source_stream));
-      if (rc != NULL)
-        {
-          getl_append_source (to->source_stream,
-                              create_syntax_file_source (rc), GETL_BATCH,
-                              ERRMODE_CONTINUE);
-          free (rc);
-        }
-    }
-
-  if (optind < argc)
-    {
-      int i;
-
-      for (i = optind; i < argc; i++)
-        add_syntax_file (to, argv[i]);
-    }
-  else
-    add_syntax_file (to, "-");
-
   register_output_driver (to);
   if (!to->has_output_driver)
     {
index 12251123db3623b71cf65d5745bada2ddc78eb43..50f2319690fb53d32abf074f67cdc80788431ead 100644 (file)
 #ifndef UI_TERMINAL_TERMINAL_OPTS_H
 #define UI_TERMINAL_TERMINAL_OPTS_H 1
 
+#include <stdbool.h>
+#include "libpspp/getl.h"
+
 struct argv_parser;
-struct source_stream;
 struct terminal_opts;
 
 struct terminal_opts *terminal_opts_init (struct argv_parser *,
-                                          struct source_stream *);
+                                          enum syntax_mode *,
+                                          bool *process_statrc);
 void terminal_opts_done (struct terminal_opts *, int argc, char *argv[]);
 
 #endif /* ui/terminal/terminal-opts.h */
index 7360b892ca7c6051a200798da7179f21590aaffd..f387c5112a86efc9b950c2e73aaf6d35431afb23 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2006, 2007 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2006, 2007, 2010 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
 
 #include <config.h>
 
-#include <ui/terminal/terminal.h>
+#include "ui/terminal/terminal.h"
 
 #include <stdbool.h>
 #include <stdlib.h>
 
-#include <libpspp/compiler.h>
+#include "data/settings.h"
+#include "libpspp/compiler.h"
 
-#include "error.h"
+#include "gl/error.h"
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 
-static int view_width = -1;
-static int view_length = -1;
-
-/* Initializes the terminal interface by determining the size of
-   the user's terminal.  Stores a pointer to the size variables
-   in *VIEW_WIDTH_P and *VIEW_LENGTH_P. */
-void
-terminal_init (int **view_width_p, int **view_length_p)
-{
-  *view_width_p = &view_width;
-  *view_length_p = &view_length;
-  terminal_check_size ();
-}
-
 /* Code that interfaces to ncurses.  This must be at the very end
    of this file because curses.h redefines "bool" on some systems
    (e.g. OpenBSD), causing declaration mismatches with functions
@@ -56,6 +43,9 @@ terminal_init (int **view_width_p, int **view_length_p)
 void
 terminal_check_size (void)
 {
+  int view_width = 0;
+  int view_length = 0;
+
 #if LIBNCURSES_USABLE
   if (getenv ("TERM") != NULL)
     {
@@ -74,19 +64,13 @@ terminal_check_size (void)
     }
 #endif
 
-  if (view_width <= 0)
-    {
-      if (getenv ("COLUMNS") != NULL)
-        view_width = atoi (getenv ("COLUMNS"));
-      if (view_width <= 0)
-        view_width = 79;
-    }
+  if (view_width <= 0 && getenv ("COLUMNS") != NULL)
+    view_width = atoi (getenv ("COLUMNS"));
+  if (view_width > 0)
+    settings_set_viewwidth (view_width);
 
-  if (view_length <= 0)
-    {
-      if (getenv ("LINES") != NULL)
-        view_length = atoi (getenv ("LINES"));
-      if (view_length <= 0)
-        view_length = 24;
-    }
+  if (view_length <= 0 && getenv ("LINES") != NULL)
+    view_length = atoi (getenv ("LINES"));
+  if (view_length > 0)
+    settings_set_viewlength (view_length);
 }
diff --git a/tests/Book1.gnm.unzipped b/tests/Book1.gnm.unzipped
deleted file mode 100644 (file)
index 052783e..0000000
+++ /dev/null
@@ -1,535 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<gnm:Workbook xmlns:gnm="http://www.gnumeric.org/v10.dtd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gnumeric.org/v8.xsd">
-  <gnm:Version Epoch="1" Major="6" Minor="3" Full="1.6.3"/>
-  <gnm:Attributes>
-    <gnm:Attribute>
-      <gnm:type>4</gnm:type>
-      <gnm:name>WorkbookView::show_horizontal_scrollbar</gnm:name>
-      <gnm:value>TRUE</gnm:value>
-    </gnm:Attribute>
-    <gnm:Attribute>
-      <gnm:type>4</gnm:type>
-      <gnm:name>WorkbookView::show_vertical_scrollbar</gnm:name>
-      <gnm:value>TRUE</gnm:value>
-    </gnm:Attribute>
-    <gnm:Attribute>
-      <gnm:type>4</gnm:type>
-      <gnm:name>WorkbookView::show_notebook_tabs</gnm:name>
-      <gnm:value>TRUE</gnm:value>
-    </gnm:Attribute>
-    <gnm:Attribute>
-      <gnm:type>4</gnm:type>
-      <gnm:name>WorkbookView::do_auto_completion</gnm:name>
-      <gnm:value>TRUE</gnm:value>
-    </gnm:Attribute>
-    <gnm:Attribute>
-      <gnm:type>4</gnm:type>
-      <gnm:name>WorkbookView::is_protected</gnm:name>
-      <gnm:value>FALSE</gnm:value>
-    </gnm:Attribute>
-  </gnm:Attributes>
-  <gnm:Summary>
-    <gnm:Item>
-      <gnm:name>application</gnm:name>
-      <gnm:val-string>gnumeric</gnm:val-string>
-    </gnm:Item>
-    <gnm:Item>
-      <gnm:name>author</gnm:name>
-      <gnm:val-string>John Darrington</gnm:val-string>
-    </gnm:Item>
-  </gnm:Summary>
-  <gnm:SheetNameIndex>
-    <gnm:SheetName>This</gnm:SheetName>
-    <gnm:SheetName>vars</gnm:SheetName>
-    <gnm:SheetName>That</gnm:SheetName>
-    <gnm:SheetName>Empty</gnm:SheetName>
-    <gnm:SheetName>Blank</gnm:SheetName>
-  </gnm:SheetNameIndex>
-  <gnm:Geometry Width="1278" Height="633"/>
-  <gnm:Sheets>
-    <gnm:Sheet DisplayFormulas="0" HideZero="0" HideGrid="0" HideColHeader="0" HideRowHeader="0" DisplayOutlines="1" OutlineSymbolsBelow="1" OutlineSymbolsRight="1" Visibility="GNM_SHEET_VISIBILITY_VISIBLE">
-      <gnm:Name>This</gnm:Name>
-      <gnm:MaxCol>9</gnm:MaxCol>
-      <gnm:MaxRow>17</gnm:MaxRow>
-      <gnm:Zoom>1</gnm:Zoom>
-      <gnm:PrintInformation>
-        <gnm:Margins>
-          <gnm:top Points="120" PrefUnit="cm"/>
-          <gnm:bottom Points="120" PrefUnit="cm"/>
-        </gnm:Margins>
-        <gnm:Scale type="percentage" percentage="100"/>
-        <gnm:vcenter value="0"/>
-        <gnm:hcenter value="0"/>
-        <gnm:grid value="0"/>
-        <gnm:even_if_only_styles value="0"/>
-        <gnm:monochrome value="0"/>
-        <gnm:draft value="0"/>
-        <gnm:titles value="0"/>
-        <gnm:order>d_then_r</gnm:order>
-        <gnm:orientation>portrait</gnm:orientation>
-        <gnm:Header Left="" Middle="&amp;[TAB]" Right=""/>
-        <gnm:Footer Left="" Middle="Page &amp;[PAGE]" Right=""/>
-      </gnm:PrintInformation>
-      <gnm:Styles>
-        <gnm:StyleRegion startCol="0" startRow="0" endCol="255" endRow="65535">
-          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
-            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
-            <gnm:StyleBorder>
-              <gnm:Top Style="0"/>
-              <gnm:Bottom Style="0"/>
-              <gnm:Left Style="0"/>
-              <gnm:Right Style="0"/>
-              <gnm:Diagonal Style="0"/>
-              <gnm:Rev-Diagonal Style="0"/>
-            </gnm:StyleBorder>
-          </gnm:Style>
-        </gnm:StyleRegion>
-      </gnm:Styles>
-      <gnm:Cols DefaultSizePts="48">
-        <gnm:ColInfo No="0" Unit="48" MarginA="2" MarginB="2" Count="10"/>
-      </gnm:Cols>
-      <gnm:Rows DefaultSizePts="12.75">
-        <gnm:RowInfo No="0" Unit="12.75" MarginA="0" MarginB="0" Count="15"/>
-        <gnm:RowInfo No="15" Unit="9.75" MarginA="0" MarginB="0" HardSize="1"/>
-        <gnm:RowInfo No="17" Unit="12.75" MarginA="0" MarginB="0"/>
-      </gnm:Rows>
-      <gnm:Selections CursorCol="7" CursorRow="7">
-        <gnm:Selection startCol="7" startRow="7" endCol="7" endRow="7"/>
-      </gnm:Selections>
-      <gnm:Cells>
-        <gnm:Cell Col="0" Row="0" ValueType="60">numeral</gnm:Cell>
-        <gnm:Cell Col="1" Row="0" ValueType="60">eng_name</gnm:Cell>
-        <gnm:Cell Col="2" Row="0" ValueType="60">xxx</gnm:Cell>
-        <gnm:Cell Col="0" Row="1" ValueType="30">1</gnm:Cell>
-        <gnm:Cell Col="1" Row="1" ValueType="60">One</gnm:Cell>
-        <gnm:Cell Col="2" Row="1" ValueType="60">Eins</gnm:Cell>
-        <gnm:Cell Col="0" Row="2" ValueType="30">2</gnm:Cell>
-        <gnm:Cell Col="1" Row="2" ValueType="60">Two</gnm:Cell>
-        <gnm:Cell Col="2" Row="2" ValueType="60">Zwei</gnm:Cell>
-        <gnm:Cell Col="0" Row="3" ValueType="30">3</gnm:Cell>
-        <gnm:Cell Col="1" Row="3" ValueType="60">Three</gnm:Cell>
-        <gnm:Cell Col="2" Row="3" ValueType="60">Drei</gnm:Cell>
-        <gnm:Cell Col="2" Row="4" ValueType="60">Vier</gnm:Cell>
-        <gnm:Cell Col="5" Row="6" ValueType="60">XY</gnm:Cell>
-        <gnm:Cell Col="6" Row="6" ValueType="60">xxx</gnm:Cell>
-        <gnm:Cell Col="7" Row="6" ValueType="60">xxxx</gnm:Cell>
-        <gnm:Cell Col="8" Row="6" ValueType="60">xxxx</gnm:Cell>
-        <gnm:Cell Col="5" Row="7" ValueType="60">yyy</gnm:Cell>
-        <gnm:Cell Col="6" Row="7" ValueType="60">V1</gnm:Cell>
-        <gnm:Cell Col="7" Row="7" ValueType="60">V2</gnm:Cell>
-        <gnm:Cell Col="5" Row="8" ValueType="60">yyy</gnm:Cell>
-        <gnm:Cell Col="6" Row="8" ValueType="30">0</gnm:Cell>
-        <gnm:Cell Col="7" Row="8" ValueType="60">fred</gnm:Cell>
-        <gnm:Cell Col="8" Row="8" ValueType="30">20</gnm:Cell>
-        <gnm:Cell Col="9" Row="8" ValueType="60">$$$$</gnm:Cell>
-        <gnm:Cell Col="5" Row="9" ValueType="60">yyy</gnm:Cell>
-        <gnm:Cell Col="6" Row="9" ValueType="30">1</gnm:Cell>
-        <gnm:Cell Col="7" Row="9" ValueType="30">11</gnm:Cell>
-        <gnm:Cell Col="8" Row="9" ValueType="30">21</gnm:Cell>
-        <gnm:Cell Col="9" Row="9" ValueType="60">$$$$</gnm:Cell>
-        <gnm:Cell Col="5" Row="10" ValueType="60">yyyy</gnm:Cell>
-        <gnm:Cell Col="6" Row="10" ValueType="30">2</gnm:Cell>
-        <gnm:Cell Col="7" Row="10" ValueType="60">twelve</gnm:Cell>
-        <gnm:Cell Col="8" Row="10" ValueType="30">22</gnm:Cell>
-        <gnm:Cell Col="9" Row="10" ValueType="60">$$$$</gnm:Cell>
-        <gnm:Cell Col="5" Row="11" ValueType="60">yyyy</gnm:Cell>
-        <gnm:Cell Col="6" Row="11" ValueType="30">3</gnm:Cell>
-        <gnm:Cell Col="7" Row="11" ValueType="30">13</gnm:Cell>
-        <gnm:Cell Col="8" Row="11" ValueType="30">23</gnm:Cell>
-        <gnm:Cell Col="9" Row="11" ValueType="60">$$$$</gnm:Cell>
-        <gnm:Cell Col="1" Row="12" ValueType="60">Eleven</gnm:Cell>
-        <gnm:Cell Col="5" Row="12" ValueType="60">yyyy</gnm:Cell>
-        <gnm:Cell Col="6" Row="12" ValueType="30">4</gnm:Cell>
-        <gnm:Cell Col="7" Row="12" ValueType="30">14</gnm:Cell>
-        <gnm:Cell Col="8" Row="12" ValueType="30">24</gnm:Cell>
-        <gnm:Cell Col="9" Row="12" ValueType="60">$$$$</gnm:Cell>
-        <gnm:Cell Col="5" Row="13" ValueType="60">zzz</gnm:Cell>
-        <gnm:Cell Col="6" Row="13" ValueType="60">zzz</gnm:Cell>
-        <gnm:Cell Col="7" Row="13" ValueType="60">zzz</gnm:Cell>
-        <gnm:Cell Col="8" Row="13" ValueType="60">zzz</gnm:Cell>
-        <gnm:Cell Col="9" Row="13" ValueType="60">zzz</gnm:Cell>
-        <gnm:Cell Col="1" Row="17" ValueType="60">Seventeen</gnm:Cell>
-      </gnm:Cells>
-      <gnm:SheetLayout TopLeft="A1"/>
-      <gnm:Solver ProblemType="1" Inputs="" MaxTime="0" MaxIter="0" NonNeg="1" Discr="0" AutoScale="0" ShowIter="0" AnswerR="0" SensitivityR="0" LimitsR="0" PerformR="0" ProgramR="0"/>
-    </gnm:Sheet>
-    <gnm:Sheet DisplayFormulas="0" HideZero="0" HideGrid="0" HideColHeader="0" HideRowHeader="0" DisplayOutlines="1" OutlineSymbolsBelow="1" OutlineSymbolsRight="1" Visibility="GNM_SHEET_VISIBILITY_VISIBLE">
-      <gnm:Name>vars</gnm:Name>
-      <gnm:MaxCol>4</gnm:MaxCol>
-      <gnm:MaxRow>8</gnm:MaxRow>
-      <gnm:Zoom>1</gnm:Zoom>
-      <gnm:PrintInformation>
-        <gnm:Margins>
-          <gnm:top Points="120" PrefUnit="cm"/>
-          <gnm:bottom Points="120" PrefUnit="cm"/>
-        </gnm:Margins>
-        <gnm:Scale type="percentage" percentage="100"/>
-        <gnm:vcenter value="0"/>
-        <gnm:hcenter value="0"/>
-        <gnm:grid value="0"/>
-        <gnm:even_if_only_styles value="0"/>
-        <gnm:monochrome value="0"/>
-        <gnm:draft value="0"/>
-        <gnm:titles value="0"/>
-        <gnm:order>d_then_r</gnm:order>
-        <gnm:orientation>portrait</gnm:orientation>
-        <gnm:Header Left="" Middle="&amp;[TAB]" Right=""/>
-        <gnm:Footer Left="" Middle="Page &amp;[PAGE]" Right=""/>
-      </gnm:PrintInformation>
-      <gnm:Styles>
-        <gnm:StyleRegion startCol="0" startRow="0" endCol="255" endRow="65535">
-          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
-            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
-            <gnm:StyleBorder>
-              <gnm:Top Style="0"/>
-              <gnm:Bottom Style="0"/>
-              <gnm:Left Style="0"/>
-              <gnm:Right Style="0"/>
-              <gnm:Diagonal Style="0"/>
-              <gnm:Rev-Diagonal Style="0"/>
-            </gnm:StyleBorder>
-          </gnm:Style>
-        </gnm:StyleRegion>
-      </gnm:Styles>
-      <gnm:Cols DefaultSizePts="48">
-        <gnm:ColInfo No="0" Unit="48" MarginA="2" MarginB="2" Count="5"/>
-      </gnm:Cols>
-      <gnm:Rows DefaultSizePts="12.75">
-        <gnm:RowInfo No="0" Unit="12.75" MarginA="0" MarginB="0" Count="5"/>
-      </gnm:Rows>
-      <gnm:Selections CursorCol="0" CursorRow="0">
-        <gnm:Selection startCol="0" startRow="0" endCol="0" endRow="0"/>
-      </gnm:Selections>
-      <gnm:Cells>
-        <gnm:Cell Col="0" Row="0" ValueType="60">1v12</gnm:Cell>
-        <gnm:Cell Col="1" Row="0" ValueType="60">var&amp;x@</gnm:Cell>
-        <gnm:Cell Col="2" Row="0" ValueType="60">a(43)</gnm:Cell>
-        <gnm:Cell Col="3" Row="0" ValueType="60">varx</gnm:Cell>
-        <gnm:Cell Col="4" Row="0" ValueType="60">varx</gnm:Cell>
-        <gnm:Cell Col="0" Row="1" ValueType="30">1</gnm:Cell>
-        <gnm:Cell Col="1" Row="1" ValueType="30">2</gnm:Cell>
-        <gnm:Cell Col="2" Row="1" ValueType="30">23</gnm:Cell>
-        <gnm:Cell Col="3" Row="1" ValueType="30">2</gnm:Cell>
-        <gnm:Cell Col="4" Row="1" ValueType="30">4</gnm:Cell>
-        <gnm:Cell Col="0" Row="2" ValueType="30">3</gnm:Cell>
-        <gnm:Cell Col="1" Row="2" ValueType="30">4</gnm:Cell>
-        <gnm:Cell Col="2" Row="2" ValueType="30">23</gnm:Cell>
-        <gnm:Cell Col="3" Row="2" ValueType="30">3</gnm:Cell>
-        <gnm:Cell Col="4" Row="2" ValueType="30">4</gnm:Cell>
-        <gnm:Cell Col="1" Row="8" ValueType="10"></gnm:Cell>
-      </gnm:Cells>
-      <gnm:SheetLayout TopLeft="A1"/>
-      <gnm:Solver ProblemType="1" Inputs="" MaxTime="0" MaxIter="0" NonNeg="1" Discr="0" AutoScale="0" ShowIter="0" AnswerR="0" SensitivityR="0" LimitsR="0" PerformR="0" ProgramR="0"/>
-    </gnm:Sheet>
-    <gnm:Sheet DisplayFormulas="0" HideZero="0" HideGrid="0" HideColHeader="0" HideRowHeader="0" DisplayOutlines="1" OutlineSymbolsBelow="1" OutlineSymbolsRight="1" Visibility="GNM_SHEET_VISIBILITY_VISIBLE">
-      <gnm:Name>That</gnm:Name>
-      <gnm:MaxCol>3</gnm:MaxCol>
-      <gnm:MaxRow>4</gnm:MaxRow>
-      <gnm:Zoom>1</gnm:Zoom>
-      <gnm:PrintInformation>
-        <gnm:Margins>
-          <gnm:top Points="120" PrefUnit="cm"/>
-          <gnm:bottom Points="120" PrefUnit="cm"/>
-        </gnm:Margins>
-        <gnm:Scale type="percentage" percentage="100"/>
-        <gnm:vcenter value="0"/>
-        <gnm:hcenter value="0"/>
-        <gnm:grid value="0"/>
-        <gnm:even_if_only_styles value="0"/>
-        <gnm:monochrome value="0"/>
-        <gnm:draft value="0"/>
-        <gnm:titles value="0"/>
-        <gnm:order>d_then_r</gnm:order>
-        <gnm:orientation>portrait</gnm:orientation>
-        <gnm:Header Left="" Middle="&amp;[TAB]" Right=""/>
-        <gnm:Footer Left="" Middle="Page &amp;[PAGE]" Right=""/>
-      </gnm:PrintInformation>
-      <gnm:Styles>
-        <gnm:StyleRegion startCol="0" startRow="4096" endCol="63" endRow="65535">
-          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
-            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
-            <gnm:StyleBorder>
-              <gnm:Top Style="0"/>
-              <gnm:Bottom Style="0"/>
-              <gnm:Left Style="0"/>
-              <gnm:Right Style="0"/>
-              <gnm:Diagonal Style="0"/>
-              <gnm:Rev-Diagonal Style="0"/>
-            </gnm:StyleBorder>
-          </gnm:Style>
-        </gnm:StyleRegion>
-        <gnm:StyleRegion startCol="4" startRow="0" endCol="15" endRow="255">
-          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
-            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
-            <gnm:StyleBorder>
-              <gnm:Top Style="0"/>
-              <gnm:Bottom Style="0"/>
-              <gnm:Left Style="0"/>
-              <gnm:Right Style="0"/>
-              <gnm:Diagonal Style="0"/>
-              <gnm:Rev-Diagonal Style="0"/>
-            </gnm:StyleBorder>
-          </gnm:Style>
-        </gnm:StyleRegion>
-        <gnm:StyleRegion startCol="0" startRow="16" endCol="3" endRow="255">
-          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
-            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
-            <gnm:StyleBorder>
-              <gnm:Top Style="0"/>
-              <gnm:Bottom Style="0"/>
-              <gnm:Left Style="0"/>
-              <gnm:Right Style="0"/>
-              <gnm:Diagonal Style="0"/>
-              <gnm:Rev-Diagonal Style="0"/>
-            </gnm:StyleBorder>
-          </gnm:Style>
-        </gnm:StyleRegion>
-        <gnm:StyleRegion startCol="16" startRow="0" endCol="63" endRow="4095">
-          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
-            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
-            <gnm:StyleBorder>
-              <gnm:Top Style="0"/>
-              <gnm:Bottom Style="0"/>
-              <gnm:Left Style="0"/>
-              <gnm:Right Style="0"/>
-              <gnm:Diagonal Style="0"/>
-              <gnm:Rev-Diagonal Style="0"/>
-            </gnm:StyleBorder>
-          </gnm:Style>
-        </gnm:StyleRegion>
-        <gnm:StyleRegion startCol="64" startRow="0" endCol="255" endRow="65535">
-          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
-            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
-            <gnm:StyleBorder>
-              <gnm:Top Style="0"/>
-              <gnm:Bottom Style="0"/>
-              <gnm:Left Style="0"/>
-              <gnm:Right Style="0"/>
-              <gnm:Diagonal Style="0"/>
-              <gnm:Rev-Diagonal Style="0"/>
-            </gnm:StyleBorder>
-          </gnm:Style>
-        </gnm:StyleRegion>
-        <gnm:StyleRegion startCol="3" startRow="0" endCol="3" endRow="15">
-          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
-            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
-            <gnm:StyleBorder>
-              <gnm:Top Style="0"/>
-              <gnm:Bottom Style="0"/>
-              <gnm:Left Style="0"/>
-              <gnm:Right Style="0"/>
-              <gnm:Diagonal Style="0"/>
-              <gnm:Rev-Diagonal Style="0"/>
-            </gnm:StyleBorder>
-          </gnm:Style>
-        </gnm:StyleRegion>
-        <gnm:StyleRegion startCol="2" startRow="5" endCol="2" endRow="15">
-          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
-            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
-            <gnm:StyleBorder>
-              <gnm:Top Style="0"/>
-              <gnm:Bottom Style="0"/>
-              <gnm:Left Style="0"/>
-              <gnm:Right Style="0"/>
-              <gnm:Diagonal Style="0"/>
-              <gnm:Rev-Diagonal Style="0"/>
-            </gnm:StyleBorder>
-          </gnm:Style>
-        </gnm:StyleRegion>
-        <gnm:StyleRegion startCol="2" startRow="1" endCol="2" endRow="4">
-          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="0.00">
-            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
-            <gnm:StyleBorder>
-              <gnm:Top Style="0"/>
-              <gnm:Bottom Style="0"/>
-              <gnm:Left Style="0"/>
-              <gnm:Right Style="0"/>
-              <gnm:Diagonal Style="0"/>
-              <gnm:Rev-Diagonal Style="0"/>
-            </gnm:StyleBorder>
-          </gnm:Style>
-        </gnm:StyleRegion>
-        <gnm:StyleRegion startCol="0" startRow="256" endCol="15" endRow="4095">
-          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
-            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
-            <gnm:StyleBorder>
-              <gnm:Top Style="0"/>
-              <gnm:Bottom Style="0"/>
-              <gnm:Left Style="0"/>
-              <gnm:Right Style="0"/>
-              <gnm:Diagonal Style="0"/>
-              <gnm:Rev-Diagonal Style="0"/>
-            </gnm:StyleBorder>
-          </gnm:Style>
-        </gnm:StyleRegion>
-        <gnm:StyleRegion startCol="0" startRow="0" endCol="1" endRow="15">
-          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
-            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
-            <gnm:StyleBorder>
-              <gnm:Top Style="0"/>
-              <gnm:Bottom Style="0"/>
-              <gnm:Left Style="0"/>
-              <gnm:Right Style="0"/>
-              <gnm:Diagonal Style="0"/>
-              <gnm:Rev-Diagonal Style="0"/>
-            </gnm:StyleBorder>
-          </gnm:Style>
-        </gnm:StyleRegion>
-        <gnm:StyleRegion startCol="2" startRow="0" endCol="2" endRow="0">
-          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
-            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
-            <gnm:StyleBorder>
-              <gnm:Top Style="0"/>
-              <gnm:Bottom Style="0"/>
-              <gnm:Left Style="0"/>
-              <gnm:Right Style="0"/>
-              <gnm:Diagonal Style="0"/>
-              <gnm:Rev-Diagonal Style="0"/>
-            </gnm:StyleBorder>
-          </gnm:Style>
-        </gnm:StyleRegion>
-      </gnm:Styles>
-      <gnm:Cols DefaultSizePts="48">
-        <gnm:ColInfo No="0" Unit="48" MarginA="2" MarginB="2" Count="2"/>
-        <gnm:ColInfo No="2" Unit="90.75" MarginA="2" MarginB="2" HardSize="1"/>
-        <gnm:ColInfo No="3" Unit="81" MarginA="2" MarginB="2" HardSize="1"/>
-      </gnm:Cols>
-      <gnm:Rows DefaultSizePts="12.75">
-        <gnm:RowInfo No="0" Unit="12.75" MarginA="0" MarginB="0" Count="5"/>
-      </gnm:Rows>
-      <gnm:Selections CursorCol="0" CursorRow="5">
-        <gnm:Selection startCol="0" startRow="5" endCol="0" endRow="5"/>
-      </gnm:Selections>
-      <gnm:Cells>
-        <gnm:Cell Col="0" Row="0" ValueType="60">name</gnm:Cell>
-        <gnm:Cell Col="1" Row="0" ValueType="60">id</gnm:Cell>
-        <gnm:Cell Col="2" Row="0" ValueType="60">height</gnm:Cell>
-        <gnm:Cell Col="0" Row="1" ValueType="60">fred</gnm:Cell>
-        <gnm:Cell Col="1" Row="1" ValueType="30">0</gnm:Cell>
-        <gnm:Cell Col="2" Row="1" ValueType="40">23.4</gnm:Cell>
-        <gnm:Cell Col="0" Row="2" ValueType="60">bert </gnm:Cell>
-        <gnm:Cell Col="1" Row="2" ValueType="30">1</gnm:Cell>
-        <gnm:Cell Col="2" Row="2" ValueType="40">0.56</gnm:Cell>
-        <gnm:Cell Col="0" Row="3" ValueType="60">charlie</gnm:Cell>
-        <gnm:Cell Col="1" Row="3" ValueType="30">2</gnm:Cell>
-        <gnm:Cell Col="2" Row="3" ValueType="60">n/a</gnm:Cell>
-        <gnm:Cell Col="0" Row="4" ValueType="60">dick</gnm:Cell>
-        <gnm:Cell Col="1" Row="4" ValueType="30">3</gnm:Cell>
-        <gnm:Cell Col="2" Row="4" ValueType="40" ValueFormat="0.00">-34.09</gnm:Cell>
-      </gnm:Cells>
-      <gnm:SheetLayout TopLeft="A1"/>
-      <gnm:Solver ProblemType="1" Inputs="" MaxTime="0" MaxIter="0" NonNeg="1" Discr="0" AutoScale="0" ShowIter="0" AnswerR="0" SensitivityR="0" LimitsR="0" PerformR="0" ProgramR="0"/>
-    </gnm:Sheet>
-    <gnm:Sheet DisplayFormulas="0" HideZero="0" HideGrid="0" HideColHeader="0" HideRowHeader="0" DisplayOutlines="1" OutlineSymbolsBelow="1" OutlineSymbolsRight="1" Visibility="GNM_SHEET_VISIBILITY_VISIBLE">
-      <gnm:Name>Empty</gnm:Name>
-      <gnm:MaxCol>-1</gnm:MaxCol>
-      <gnm:MaxRow>-1</gnm:MaxRow>
-      <gnm:Zoom>1</gnm:Zoom>
-      <gnm:PrintInformation>
-        <gnm:Margins>
-          <gnm:top Points="120" PrefUnit="cm"/>
-          <gnm:bottom Points="120" PrefUnit="cm"/>
-        </gnm:Margins>
-        <gnm:Scale type="percentage" percentage="100"/>
-        <gnm:vcenter value="0"/>
-        <gnm:hcenter value="0"/>
-        <gnm:grid value="0"/>
-        <gnm:even_if_only_styles value="0"/>
-        <gnm:monochrome value="0"/>
-        <gnm:draft value="0"/>
-        <gnm:titles value="0"/>
-        <gnm:order>d_then_r</gnm:order>
-        <gnm:orientation>portrait</gnm:orientation>
-        <gnm:Header Left="" Middle="&amp;[TAB]" Right=""/>
-        <gnm:Footer Left="" Middle="Page &amp;[PAGE]" Right=""/>
-      </gnm:PrintInformation>
-      <gnm:Styles>
-        <gnm:StyleRegion startCol="0" startRow="0" endCol="255" endRow="65535">
-          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
-            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
-            <gnm:StyleBorder>
-              <gnm:Top Style="0"/>
-              <gnm:Bottom Style="0"/>
-              <gnm:Left Style="0"/>
-              <gnm:Right Style="0"/>
-              <gnm:Diagonal Style="0"/>
-              <gnm:Rev-Diagonal Style="0"/>
-            </gnm:StyleBorder>
-          </gnm:Style>
-        </gnm:StyleRegion>
-      </gnm:Styles>
-      <gnm:Cols DefaultSizePts="48"/>
-      <gnm:Rows DefaultSizePts="12.75"/>
-      <gnm:Selections CursorCol="0" CursorRow="0">
-        <gnm:Selection startCol="0" startRow="0" endCol="0" endRow="0"/>
-      </gnm:Selections>
-      <gnm:Cells/>
-      <gnm:SheetLayout TopLeft="A1"/>
-      <gnm:Solver ProblemType="1" Inputs="" MaxTime="0" MaxIter="0" NonNeg="1" Discr="0" AutoScale="0" ShowIter="0" AnswerR="0" SensitivityR="0" LimitsR="0" PerformR="0" ProgramR="0"/>
-    </gnm:Sheet>
-    <gnm:Sheet DisplayFormulas="0" HideZero="0" HideGrid="0" HideColHeader="0" HideRowHeader="0" DisplayOutlines="1" OutlineSymbolsBelow="1" OutlineSymbolsRight="1" Visibility="GNM_SHEET_VISIBILITY_VISIBLE">
-      <gnm:Name>Blank</gnm:Name>
-      <gnm:MaxCol>3</gnm:MaxCol>
-      <gnm:MaxRow>2</gnm:MaxRow>
-      <gnm:Zoom>1</gnm:Zoom>
-      <gnm:PrintInformation>
-        <gnm:Margins>
-          <gnm:top Points="120" PrefUnit="cm"/>
-          <gnm:bottom Points="120" PrefUnit="cm"/>
-        </gnm:Margins>
-        <gnm:Scale type="percentage" percentage="100"/>
-        <gnm:vcenter value="0"/>
-        <gnm:hcenter value="0"/>
-        <gnm:grid value="0"/>
-        <gnm:even_if_only_styles value="0"/>
-        <gnm:monochrome value="0"/>
-        <gnm:draft value="0"/>
-        <gnm:titles value="0"/>
-        <gnm:order>d_then_r</gnm:order>
-        <gnm:orientation>portrait</gnm:orientation>
-        <gnm:Header Left="" Middle="&amp;[TAB]" Right=""/>
-        <gnm:Footer Left="" Middle="Page &amp;[PAGE]" Right=""/>
-      </gnm:PrintInformation>
-      <gnm:Styles>
-        <gnm:StyleRegion startCol="0" startRow="0" endCol="255" endRow="65535">
-          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
-            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
-            <gnm:StyleBorder>
-              <gnm:Top Style="0"/>
-              <gnm:Bottom Style="0"/>
-              <gnm:Left Style="0"/>
-              <gnm:Right Style="0"/>
-              <gnm:Diagonal Style="0"/>
-              <gnm:Rev-Diagonal Style="0"/>
-            </gnm:StyleBorder>
-          </gnm:Style>
-        </gnm:StyleRegion>
-      </gnm:Styles>
-      <gnm:Cols DefaultSizePts="48">
-        <gnm:ColInfo No="0" Unit="48" MarginA="2" MarginB="2" Count="4"/>
-      </gnm:Cols>
-      <gnm:Rows DefaultSizePts="12.75">
-        <gnm:RowInfo No="0" Unit="12.75" MarginA="0" MarginB="0" Count="3"/>
-      </gnm:Rows>
-      <gnm:Selections CursorCol="3" CursorRow="1">
-        <gnm:Selection startCol="3" startRow="1" endCol="3" endRow="1"/>
-      </gnm:Selections>
-      <gnm:Cells>
-        <gnm:Cell Col="0" Row="0" ValueType="60">vone</gnm:Cell>
-        <gnm:Cell Col="1" Row="0" ValueType="60">vtwo</gnm:Cell>
-        <gnm:Cell Col="2" Row="0" ValueType="60">vthree</gnm:Cell>
-        <gnm:Cell Col="3" Row="0" ValueType="60">v4</gnm:Cell>
-        <gnm:Cell Col="0" Row="1" ValueType="30">1</gnm:Cell>
-        <gnm:Cell Col="1" Row="1" ValueType="30">3</gnm:Cell>
-        <gnm:Cell Col="3" Row="1" ValueType="30">5</gnm:Cell>
-        <gnm:Cell Col="0" Row="2" ValueType="30">2</gnm:Cell>
-        <gnm:Cell Col="1" Row="2" ValueType="30">4</gnm:Cell>
-        <gnm:Cell Col="3" Row="2" ValueType="30">6</gnm:Cell>
-      </gnm:Cells>
-      <gnm:SheetLayout TopLeft="A1"/>
-      <gnm:Solver ProblemType="1" Inputs="" MaxTime="0" MaxIter="0" NonNeg="1" Discr="0" AutoScale="0" ShowIter="0" AnswerR="0" SensitivityR="0" LimitsR="0" PerformR="0" ProgramR="0"/>
-    </gnm:Sheet>
-  </gnm:Sheets>
-  <gnm:UIData SelectedTab="4"/>
-  <gnm:Calculation ManualRecalc="0" EnableIteration="1" MaxIterations="100" IterationTolerance="0.001"/>
-</gnm:Workbook>
index ecfd2d769fb96bfb1b4423d647fb5ffacf2481d8..4c2e0efd7f6b354eef954e5146a44b81f56f888c 100644 (file)
@@ -1,5 +1,26 @@
 # -*- shell-script -*-
+
+# Variables used internally by the testsuite.
+EXEEXT='@EXEEXT@'
+GNM_SUPPORT='@GNM_SUPPORT@'
 PERL='@PERL@'
+WITH_PERL_MODULE='@WITH_PERL_MODULE@'
+host='@host@'
+
+PSQL_SUPPORT='@PSQL_SUPPORT@'
+if test "$PSQL_SUPPORT" = yes; then
+    : ${PG_CONFIG:='@PG_CONFIG@'}
+    : ${PG_DBASE:=pspptest}
+    : ${PG_PORT:=6543}
+    : ${PG_PATH:=`$PG_CONFIG --bindir`}
+fi
+
+# Variables used by programs invoked by the testsuite.
 CHARSETALIASDIR="$abs_top_builddir/gl"
 export CHARSETALIASDIR
-WITH_PERL_MODULE='@WITH_PERL_MODULE@'
+
+GZIP=
+export GZIP
+
+HOME=/nonexistent              # Kluge to make PSPP ignore $HOME/.pspprc.
+export HOME
index f64a66913ec0ddd83039e2d8d373b9ccf45fc1a2..017e573ee39c16e880d839c3f82b50dbe077e1d3 100644 (file)
 ## Process this file with automake to produce Makefile.in  -*- makefile -*-
 
-TESTS_ENVIRONMENT = top_srcdir='$(top_srcdir)' top_builddir='$(top_builddir)'
-TESTS_ENVIRONMENT += PERL='$(PERL)' PG_CONFIG='$(PG_CONFIG)'
-
-# Allow locale_charset to find charset.alias before running "make install".
-TESTS_ENVIRONMENT += CHARSETALIASDIR='$(abs_top_builddir)/gl'
-
-TESTS_ENVIRONMENT += LC_ALL=C
-TESTS_ENVIRONMENT += EXEEXT=$(EXEEXT)
-
-dist_TESTS = \
-       tests/command/bignum.sh \
-       tests/command/correlation.sh \
-       tests/command/do-if.sh \
-       tests/command/do-repeat.sh \
-       tests/command/erase.sh \
-       tests/command/examine.sh \
-       tests/command/examine-extremes.sh \
-       tests/command/examine-percentiles.sh \
-       tests/command/file-label.sh \
-       tests/command/file-handle.sh \
-       tests/command/filter.sh \
-       tests/command/get-data-txt.sh \
-       tests/command/get-data-txt-examples.sh \
-       tests/command/get-data-txt-importcases.sh \
-       tests/command/import-export.sh \
-       tests/command/insert.sh \
-       tests/command/lag.sh \
-       tests/command/line-ends.sh \
-       tests/command/list.sh \
-       tests/command/loop.sh \
-       tests/command/longvars.sh \
-       tests/command/match-files.sh \
-       tests/command/missing-values.sh \
-       tests/command/no_case_size.sh \
-       tests/command/n_of_cases.sh \
-       tests/command/npar-binomial.sh \
-       tests/command/npar-chisquare.sh \
-       tests/command/npar-wilcoxon.sh \
-       tests/command/npar-sign.sh \
-       tests/command/permissions.sh \
-       tests/command/print.sh \
-       tests/command/print-strings.sh \
-       tests/command/rank.sh \
-       tests/command/rename.sh \
-       tests/command/regression.sh \
-       tests/command/regression-qr.sh \
-       tests/command/reliability.sh \
-       tests/command/roc.sh \
-       tests/command/roc2.sh \
-       tests/command/sample.sh \
-       tests/command/sort.sh \
-       tests/command/sysfiles.sh \
-       tests/command/sysfiles-old.sh \
-       tests/command/sysfile-info.sh \
-       tests/command/split-file.sh \
-       tests/command/t-test-1-indep-val.sh \
-       tests/command/t-test-1-sample-missing-anal.sh \
-       tests/command/t-test-1-sample-missing-list.sh \
-       tests/command/t-test-1s.sh \
-       tests/command/t-test-groups.sh \
-       tests/command/t-test-indep-missing-anal.sh \
-       tests/command/t-test-indep-missing-list.sh \
-       tests/command/t-test-paired-missing-anal.sh \
-       tests/command/t-test-paired-missing-list.sh \
-       tests/command/t-test-pairs.sh \
-       tests/command/trimmed-mean.sh \
-       tests/command/tabs.sh \
-       tests/command/update.sh \
-       tests/command/use.sh \
-       tests/command/variable-display.sh \
-       tests/command/vector.sh \
-       tests/command/very-long-strings.sh \
-       tests/command/weight.sh \
-       tests/formats/bcd-in.sh \
-       tests/formats/binhex-out.sh \
-       tests/formats/date-in.sh \
-       tests/formats/date-out.sh \
-       tests/formats/float-format.sh \
-       tests/formats/format-guesser.sh \
-       tests/formats/ib-in.sh \
-       tests/formats/legacy-in.sh \
-       tests/formats/month-in.sh \
-       tests/formats/month-out.sh \
-       tests/formats/num-in.sh \
-       tests/formats/num-out.sh \
-       tests/formats/time-in.sh \
-       tests/formats/time-out.sh \
-       tests/formats/wkday-in.sh \
-       tests/formats/wkday-out.sh \
-       tests/formats/360.sh \
-       tests/bugs/big-input.sh \
-       tests/bugs/big-input-2.sh \
-       tests/bugs/case-map.sh \
-       tests/bugs/comment-at-eof.sh \
-       tests/bugs/compression.sh \
-       tests/bugs/curtailed.sh \
-       tests/bugs/data-crash.sh \
-       tests/bugs/empty-do-repeat.sh \
-       tests/bugs/get.sh \
-       tests/bugs/examine-crash.sh \
-       tests/bugs/examine-crash2.sh \
-       tests/bugs/examine-crash3.sh \
-       tests/bugs/examine-1sample.sh \
-       tests/bugs/examine-missing.sh \
-       tests/bugs/examine-missing2.sh \
-       tests/bugs/get-no-file.sh \
-       tests/bugs/if_crash.sh \
-       tests/bugs/input-crash.sh \
-       tests/bugs/lag_crash.sh \
-       tests/bugs/list-overflow.sh \
-       tests/bugs/match-files-scratch.sh \
-       tests/bugs/multipass.sh \
-       tests/bugs/overwrite-input-file.sh \
-       tests/bugs/overwrite-special-file.sh \
-       tests/bugs/random.sh \
-       tests/bugs/shbang.sh \
-       tests/bugs/signals.sh \
-       tests/bugs/t-test-with-temp.sh \
-       tests/bugs/t-test.sh \
-       tests/bugs/t-test-alpha.sh \
-       tests/bugs/t-test-alpha2.sh \
-       tests/bugs/t-test-alpha3.sh \
-       tests/bugs/t-test-paired.sh \
-       tests/bugs/temporary.sh \
-       tests/bugs/unwritable-dir.sh \
-       tests/bugs/val-labs.sh \
-       tests/bugs/val-labs-trailing-slash.sh \
-       tests/bugs/print-crash.sh \
-       tests/bugs/keep-all.sh \
-       tests/data/datasheet-test.sh \
-       tests/libpspp/sparse-xarray-test.sh \
-       tests/output/paper-size.sh \
-       tests/expressions/randist.sh \
-       tests/expressions/valuelabel.sh \
-       tests/expressions/variables.sh \
-       tests/expressions/vectors.sh
-
-if GNM_SUPPORT
-dist_TESTS += tests/command/get-data-gnm.sh 
-endif
-
-if PSQL_SUPPORT
-dist_TESTS += tests/command/get-data-psql.sh 
-endif
-
-nodist_TESTS = \
+check_PROGRAMS += \
+       tests/data/datasheet-test \
+       tests/data/inexactify \
        tests/libpspp/abt-test \
        tests/libpspp/bt-test \
        tests/libpspp/heap-test \
        tests/libpspp/hmap-test \
        tests/libpspp/hmapx-test \
+       tests/libpspp/i18n-test \
        tests/libpspp/ll-test \
        tests/libpspp/llx-test \
        tests/libpspp/range-map-test \
        tests/libpspp/range-set-test \
        tests/libpspp/sparse-array-test \
+       tests/libpspp/sparse-xarray-test \
        tests/libpspp/str-test \
        tests/libpspp/string-map-test \
        tests/libpspp/stringi-map-test \
        tests/libpspp/string-set-test \
        tests/libpspp/stringi-set-test \
-       tests/libpspp/tower-test
-
-TESTS = $(dist_TESTS) $(nodist_TESTS)
-
-check_PROGRAMS += \
-       $(nodist_TESTS) \
-       tests/data/datasheet-test \
-       tests/formats/inexactify \
-       tests/libpspp/sparse-xarray-test \
+       tests/libpspp/tower-test \
        tests/output/render-test
 
 tests_data_datasheet_test_SOURCES = \
@@ -179,25 +30,20 @@ tests_data_datasheet_test_CFLAGS = $(AM_CFLAGS)
 
 tests_libpspp_ll_test_SOURCES = \
        src/libpspp/ll.c \
-       src/libpspp/ll.h \
        tests/libpspp/ll-test.c
 tests_libpspp_ll_test_LDADD = gl/libgl.la $(LIBINTL)
 tests_libpspp_ll_test_CFLAGS = $(AM_CFLAGS)
 
 tests_libpspp_llx_test_SOURCES = \
        src/libpspp/ll.c \
-       src/libpspp/ll.h \
        src/libpspp/llx.c \
-       src/libpspp/llx.h \
        tests/libpspp/llx-test.c
 tests_libpspp_llx_test_LDADD = gl/libgl.la $(LIBINTL)
 tests_libpspp_llx_test_CFLAGS = $(AM_CFLAGS)
 
 tests_libpspp_heap_test_SOURCES = \
        src/libpspp/heap.c \
-       src/libpspp/heap.h \
        src/libpspp/pool.c \
-       src/libpspp/pool.h \
        src/libpspp/temp-file.c \
        tests/libpspp/heap-test.c
 tests_libpspp_heap_test_LDADD = gl/libgl.la $(LIBINTL) 
@@ -205,50 +51,43 @@ tests_libpspp_heap_test_CPPFLAGS = $(AM_CPPFLAGS) -DASSERT_LEVEL=10
 
 tests_libpspp_hmap_test_SOURCES = \
        src/libpspp/hmap.c \
-       src/libpspp/hmap.h \
        tests/libpspp/hmap-test.c
 tests_libpspp_hmap_test_LDADD = gl/libgl.la $(LIBINTL)
 tests_libpspp_hmap_test_CPPFLAGS = $(AM_CPPFLAGS) -DASSERT_LEVEL=10
 
 tests_libpspp_hmapx_test_SOURCES = \
        src/libpspp/hmap.c \
-       src/libpspp/hmap.h \
        src/libpspp/hmapx.c \
-       src/libpspp/hmapx.h \
        tests/libpspp/hmapx-test.c
 tests_libpspp_hmapx_test_LDADD = gl/libgl.la $(LIBINTL)
 tests_libpspp_hmapx_test_CPPFLAGS = $(AM_CPPFLAGS) -DASSERT_LEVEL=10
 
+tests_libpspp_i18n_test_SOURCES = tests/libpspp/i18n-test.c
+tests_libpspp_i18n_test_LDADD = src/libpspp/libpspp.la gl/libgl.la $(LIBINTL) 
+
 tests_libpspp_abt_test_SOURCES = \
        src/libpspp/abt.c \
-       src/libpspp/abt.h \
        tests/libpspp/abt-test.c
 tests_libpspp_abt_test_LDADD = gl/libgl.la $(LIBINTL)
 tests_libpspp_abt_test_CPPFLAGS = $(AM_CPPFLAGS) -DASSERT_LEVEL=10
 
 tests_libpspp_bt_test_SOURCES = \
        src/libpspp/bt.c \
-       src/libpspp/bt.h \
        tests/libpspp/bt-test.c
 tests_libpspp_bt_test_LDADD = gl/libgl.la
 tests_libpspp_bt_test_CPPFLAGS = $(AM_CPPFLAGS) -DASSERT_LEVEL=10
 
 tests_libpspp_range_map_test_SOURCES = \
        src/libpspp/bt.c \
-       src/libpspp/bt.h \
        src/libpspp/range-map.c \
-       src/libpspp/range-map.h \
        tests/libpspp/range-map-test.c
 tests_libpspp_range_map_test_LDADD = gl/libgl.la $(LIBINTL)
 tests_libpspp_range_map_test_CPPFLAGS = $(AM_CPPFLAGS) -DASSERT_LEVEL=10
 
 tests_libpspp_range_set_test_SOURCES = \
        src/libpspp/bt.c \
-       src/libpspp/bt.h \
        src/libpspp/pool.c \
-       src/libpspp/pool.h \
        src/libpspp/range-set.c \
-       src/libpspp/range-set.h \
        src/libpspp/temp-file.c \
        tests/libpspp/range-set-test.c
 tests_libpspp_range_set_test_LDADD = gl/libgl.la $(LIBINTL) 
@@ -301,21 +140,16 @@ tests_libpspp_stringi_set_test_CPPFLAGS = $(AM_CPPFLAGS) -DASSERT_LEVEL=10
 
 tests_libpspp_tower_test_SOURCES = \
        src/libpspp/abt.c \
-       src/libpspp/abt.h \
        src/libpspp/pool.c \
-       src/libpspp/pool.h \
        src/libpspp/temp-file.c \
        src/libpspp/tower.c \
-       src/libpspp/tower.h \
        tests/libpspp/tower-test.c
 tests_libpspp_tower_test_LDADD = gl/libgl.la $(LIBINTL) 
 tests_libpspp_tower_test_CPPFLAGS = $(AM_CPPFLAGS) -DASSERT_LEVEL=10
 
 tests_libpspp_sparse_array_test_SOURCES = \
        src/libpspp/sparse-array.c \
-       src/libpspp/sparse-array.h \
        src/libpspp/pool.c \
-       src/libpspp/pool.h \
        tests/libpspp/sparse-array-test.c \
        src/libpspp/temp-file.c
 tests_libpspp_sparse_array_test_LDADD = gl/libgl.la $(LIBINTL) 
@@ -337,7 +171,7 @@ tests_libpspp_sparse_xarray_test_SOURCES = \
 tests_libpspp_sparse_xarray_test_LDADD = gl/libgl.la $(LIBINTL) 
 tests_libpspp_sparse_xarray_test_CPPFLAGS = $(AM_CPPFLAGS) -DASSERT_LEVEL=10
 
-tests_formats_inexactify_SOURCES = tests/formats/inexactify.c
+tests_data_inexactify_SOURCES = tests/data/inexactify.c
 
 noinst_PROGRAMS += tests/dissect-sysfile
 tests_dissect_sysfile_SOURCES = \
@@ -357,55 +191,26 @@ tests_output_render_test_LDADD = \
        $(LIBINTL)
 
 EXTRA_DIST += \
-       $(dist_TESTS) \
-        tests/Book1.gnm.unzipped \
-       tests/weighting.data tests/data-list.data tests/list.data \
-       tests/no_case_size.sav \
-       tests/coverage.sh tests/test_template \
-       tests/v13.sav tests/v14.sav \
-       tests/expressions/randist/beta.out \
-       tests/expressions/randist/cauchy.out \
-       tests/expressions/randist/chisq.out \
-       tests/expressions/randist/exp.out \
-       tests/expressions/randist/f.out \
-       tests/expressions/randist/gamma.out \
-       tests/expressions/randist/laplace.out \
-       tests/expressions/randist/lnormal.out \
-       tests/expressions/randist/logistic.out \
-       tests/expressions/randist/normal.out \
-       tests/expressions/randist/pareto.out \
-       tests/expressions/randist/compare.pl \
-       tests/expressions/randist/randist.pl \
-       tests/expressions/randist/randist.txt \
-       tests/expressions/randist/t.out \
-       tests/expressions/randist/uniform.out \
-       tests/expressions/randist/weibull.out \
-       tests/formats/bcd-in.expected.cmp.gz \
-       tests/formats/binhex-out.expected.gz \
-       tests/formats/ib-in.expected.cmp.gz \
-       tests/formats/legacy-in.expected.cmp.gz \
-       tests/formats/num-in.expected.gz \
-       tests/formats/num-out.expected.cmp.gz \
-       tests/formats/num-out-cmp.pl \
-       tests/formats/num-out-compare.pl \
-       tests/formats/num-out-decmp.pl \
-       tests/formats/num-out.pl
+       tests/coverage.sh \
+       tests/data/bcd-in.expected.cmp.gz \
+       tests/data/binhex-in.expected.cmp.gz \
+       tests/data/binhex-out.expected.gz \
+       tests/data/legacy-in.expected.cmp.gz \
+       tests/data/num-in.expected.gz \
+       tests/data/num-out-cmp.pl \
+       tests/data/num-out.expected.cmp.gz \
+       tests/data/v13.sav \
+       tests/data/v14.sav \
+        tests/language/data-io/Book1.gnm.unzipped
 
 CLEANFILES += *.save pspp.* foo*
 
-check-for-export-var-val:
-       @if grep -q 'export .*=' $(dist_TESTS) ; then \
-        echo 'One or more tests contain non-portable "export VAR=val" syntax' ; \
-        false ; \
-       fi
-
-DIST_HOOKS += check-for-export-var-val
-
 EXTRA_DIST += tests/OChangeLog
 \f
 # Autotest testsuite
 
 EXTRA_DIST += \
+       tests/testsuite.in \
        $(TESTSUITE_AT) \
        $(TESTSUITE) \
        tests/atlocal.in \
@@ -414,44 +219,115 @@ EXTRA_DIST += \
 
 TESTSUITE_AT = \
        tests/data/calendar.at \
+       tests/data/data-in.at \
+       tests/data/data-out.at \
+       tests/data/datasheet-test.at \
+       tests/data/format-guesser.at \
+       tests/data/por-file.at \
+       tests/data/sys-file.at \
+       tests/language/command.at \
+       tests/language/control/do-if.at \
+       tests/language/control/do-repeat.at \
+       tests/language/control/loop.at \
+       tests/language/control/temporary.at \
        tests/language/data-io/add-files.at \
        tests/language/data-io/data-list.at \
        tests/language/data-io/data-reader.at \
+       tests/language/data-io/file-handle.at \
+       tests/language/data-io/get-data-gnm.at \
+       tests/language/data-io/get-data-psql.at \
+       tests/language/data-io/get-data-txt.at \
+       tests/language/data-io/get.at \
+       tests/language/data-io/inpt-pgm.at \
+       tests/language/data-io/list.at \
+       tests/language/data-io/match-files.at \
+       tests/language/data-io/print.at \
        tests/language/data-io/save.at \
        tests/language/data-io/save-translate.at \
+       tests/language/data-io/update.at \
        tests/language/dictionary/attributes.at \
+       tests/language/dictionary/missing-values.at \
        tests/language/dictionary/mrsets.at \
+       tests/language/dictionary/rename-variables.at \
+       tests/language/dictionary/split-file.at \
+       tests/language/dictionary/sys-file-info.at \
+       tests/language/dictionary/value-labels.at \
+       tests/language/dictionary/variable-display.at \
+       tests/language/dictionary/vector.at \
+       tests/language/dictionary/weight.at \
        tests/language/expressions/evaluate.at \
+       tests/language/expressions/parse.at \
+       tests/language/lexer/lexer.at \
+       tests/language/lexer/q2c.at \
+       tests/language/lexer/variable-parser.at \
        tests/language/stats/aggregate.at \
        tests/language/stats/autorecode.at \
+       tests/language/stats/correlations.at \
        tests/language/stats/crosstabs.at \
        tests/language/stats/descriptives.at \
+       tests/language/stats/examine.at \
        tests/language/stats/factor.at \
        tests/language/stats/flip.at \
        tests/language/stats/frequencies.at \
+       tests/language/stats/npar.at \
        tests/language/stats/oneway.at \
+       tests/language/stats/rank.at \
+       tests/language/stats/regression.at \
+       tests/language/stats/reliability.at \
+       tests/language/stats/roc.at \
+       tests/language/stats/sort-cases.at \
+       tests/language/stats/t-test.at \
+       tests/language/utilities/date.at \
+       tests/language/utilities/insert.at \
+       tests/language/utilities/permissions.at \
        tests/language/utilities/set.at \
+       tests/language/utilities/title.at \
        tests/language/xforms/compute.at \
        tests/language/xforms/count.at \
        tests/language/xforms/recode.at \
+       tests/language/xforms/sample.at \
+       tests/language/xforms/select-if.at \
+       tests/libpspp/abt.at \
+       tests/libpspp/bt.at \
+       tests/libpspp/float-format.at \
+       tests/libpspp/heap.at \
+       tests/libpspp/hmap.at \
+       tests/libpspp/hmapx.at \
+       tests/libpspp/i18n.at \
+       tests/libpspp/ll.at \
+       tests/libpspp/llx.at \
+       tests/libpspp/range-map.at \
+       tests/libpspp/range-set.at \
+       tests/libpspp/sparse-array.at \
+       tests/libpspp/sparse-xarray-test.at \
+       tests/libpspp/str.at \
+       tests/libpspp/string-map.at \
+       tests/libpspp/stringi-map.at \
+       tests/libpspp/string-set.at \
+       tests/libpspp/stringi-set.at \
+       tests/libpspp/tower.at \
        tests/math/moments.at \
-       tests/output/render.at \
+       tests/math/randist.at \
        tests/output/charts.at \
+       tests/output/output.at \
+       tests/output/paper-size.at \
+       tests/output/render.at \
+       tests/ui/terminal/main.at \
        tests/perl-module.at
 
 TESTSUITE = $(srcdir)/tests/testsuite
 DISTCLEANFILES += tests/atconfig tests/atlocal $(TESTSUITE)
 
-$(srcdir)/tests/testsuite.at: tests/testsuite.in Makefile
+$(srcdir)/tests/testsuite.at: tests/testsuite.in tests/automake.mk
        cp $< $@
        for t in $(TESTSUITE_AT); do \
          echo "m4_include([$$t])" >> $@ ;\
        done
-
+EXTRA_DIST += tests/testsuite.at
 
 CHECK_LOCAL += tests_check
-tests_check: tests/atconfig tests/atlocal $(TESTSUITE)
-       $(SHELL) '$(TESTSUITE)' -C tests AUTOTEST_PATH=tests/output:src/ui/terminal $(TESTSUITEFLAGS)
+tests_check: tests/atconfig tests/atlocal $(TESTSUITE) $(check_PROGRAMS)
+       $(SHELL) '$(TESTSUITE)' -C tests AUTOTEST_PATH=tests/data:tests/libpspp:tests/output:src/ui/terminal $(TESTSUITEFLAGS)
 
 CLEAN_LOCAL += tests_clean
 tests_clean:
diff --git a/tests/bugs/README b/tests/bugs/README
deleted file mode 100644 (file)
index 32ed754..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-This directory contains some tests for bugs which have been 
-experienced in the past and which are (hopefully) now fixed.
diff --git a/tests/bugs/big-input-2.sh b/tests/bugs/big-input-2.sh
deleted file mode 100755 (executable)
index 21e3041..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which caused  a crash when 
-# very large files are presented.
-
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-TESTFILE=$TEMPDIR/`basename $0`.sps
-: ${PERL:=perl}
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="delete data"
-rm -f $TEMPDIR/large.dat
-if [ $? -ne 0 ] ; then no_result ; fi
-
-printf "Creating input data.  Please wait"
-activity="create data"
-$PERL -e 'for ($i=0; $i<100000; $i++) { print "AB12\n" };
-          for ($i=0; $i<100000; $i++) { print "AB04\n" };' > $TEMPDIR/large.dat
-if [ $? -ne 0 ] ; then no_result ; fi
-printf ".\n";
-
-activity="create program"
-cat > $TESTFILE <<EOF
-DATA LIST FILE='$TEMPDIR/large.dat' /S 1-2 (A) X 3 .
-
-
-AGGREGATE OUTFILE=* /BREAK=X /A=N.
-
-
-EXAMINE /A BY /X.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv -e /dev/null $TESTFILE 
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="appending to data"
-# Put another 50,000 cases into large.dat
-$PERL -e 'for ($i=0; $i<25000; $i++) { print "AB04\nAB12\n" };' >> $TEMPDIR/large.dat
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv -e /dev/null $TESTFILE 
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/bugs/big-input.sh b/tests/bugs/big-input.sh
deleted file mode 100755 (executable)
index 11131b2..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which caused a crash when 
-# a large number of cases where presented.
-
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-INPUT PROGRAM.
-       LOOP #I=1 TO 50000.
-               COMPUTE X=NORMAL(10).
-               END CASE.
-       END LOOP.
-       END FILE.
-END INPUT PROGRAM.
-
-
-EXAMINE /x
-       /STATISTICS=DESCRIPTIVES.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv -e /dev/null $TESTFILE
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/bugs/case-map.sh b/tests/bugs/case-map.sh
deleted file mode 100755 (executable)
index ed10bff..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which caused a crash when
-# a non-empty case_map was created in SAVE.
-
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-INPUT PROGRAM.
-    COMPUTE #I = 1.
-    COMPUTE X = #I.
-    END CASE.
-    END FILE.
-END INPUT PROGRAM.
-
-SAVE OUTFILE='tiny.sav'.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv -e /dev/null $TESTFILE
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/bugs/comment-at-eof.sh b/tests/bugs/comment-at-eof.sh
deleted file mode 100755 (executable)
index 23cbcba..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/bin/sh
-
-# Tests for a bug wherein a comment just before end-of-file caused an
-# infinite loop.  Thus, this test passes as long as it completes.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-COMMENT this is a comment at end of file.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then fail; fi
-
-pass;
diff --git a/tests/bugs/compression.sh b/tests/bugs/compression.sh
deleted file mode 100755 (executable)
index dadc883..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/bin/sh
-
-# This program tests that compressed system files can be read and written
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-cat > $TESTFILE <<EOF
-DATA LIST LIST /x * y (a200).
-BEGIN DATA.
-1.2 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-.   yyyyyyyyyyyyyyy
-0   ddddddddddddddddddddddddddddddd
-101 z
-END DATA.
-
-SAVE OUTFILE='$TEMPDIR/com.sav' /COMPRESS .
-
-GET FILE='$TEMPDIR/com.sav'.
-
-LIST.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then fail ; fi
-
-# Make sure the file really was compressed
-activity="inspect system file"
-dd if=$TEMPDIR/com.sav bs=1 skip=72 count=4 2> /dev/null | od > $TEMPDIR/file
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="check compression setting"
-# Big-endian?
-diff -b $TEMPDIR/file - > /dev/null <<EOF
-0000000 000000 000001
-0000004
-EOF
-if [ $? -ne 0 ] ; then pass ; fi
-# Little-endian?
-diff -b $TEMPDIR/file - > /dev/null <<EOF
-0000000 000001 000000
-0000004
-EOF
-if [ $? -ne 0 ] ; then pass ; fi
-# Otherwise error.
-cat $TEMPDIR/file
-fail
diff --git a/tests/bugs/curtailed.sh b/tests/bugs/curtailed.sh
deleted file mode 100755 (executable)
index bbdeb6a..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which crashed pspp when given certain
-# invalid input
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-DATA LIST LIST /x *.
-BEGIN DATA.
-1
-2
-3
-END DATA.
-
-EXAMINE.
-ONEWAY.
-CROSSTABS.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-#This must fail
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv -e /dev/null $TESTFILE
-if [ $? -ne 1 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/bugs/data-crash.sh b/tests/bugs/data-crash.sh
deleted file mode 100755 (executable)
index e00c3d5..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which crashed pspp when given certain
-# invalid input
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TEMPDIR/ct.stat <<EOF
-DATA rubbish.
-EXECUTE.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-#This must fail
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv -e /dev/null $TEMPDIR/ct.stat 
-if [ $? -ne 1 ] ; then fail ; fi
-
-pass;
diff --git a/tests/bugs/empty-do-repeat.sh b/tests/bugs/empty-do-repeat.sh
deleted file mode 100755 (executable)
index 15ef6be..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug that crashed PSPP given an empty DO
-# REPEAT...END REPEAT block.  See bug #18407.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TEMPDIR/repeat.stat <<EOF
-DATA LIST NOTABLE /a 1.
-BEGIN DATA.
-0
-END DATA.
-
-DO REPEAT h = a.
-END REPEAT.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-# Must not crash.
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TEMPDIR/repeat.stat 
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/bugs/examine-1sample.sh b/tests/bugs/examine-1sample.sh
deleted file mode 100755 (executable)
index 62f4e2b..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/bin/sh
-
-# This program tests  for a bug in the EXAMINE command, where it
-# would crash if a data file with only one case was presented
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-DATA LIST LIST /quality * .
-BEGIN DATA
-3  
-END DATA
-
-
-EXAMINE
-       quality 
-       /STATISTICS descriptives 
-       .
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/bugs/examine-crash.sh b/tests/bugs/examine-crash.sh
deleted file mode 100755 (executable)
index a651b62..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which crashed EXAMINE
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-cat <<EOF > $TESTFILE
-data list list /a * x * y *.
-begin data.
-3 1 3
-5 1 4
-7 2 3
-end data.
-
-examine a by x by y
-       /statistics=DESCRIPTIVES
-       . 
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/bugs/examine-crash2.sh b/tests/bugs/examine-crash2.sh
deleted file mode 100755 (executable)
index b92d45f..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which crashed pspp
-# when two consecutive EXAMINE commands are run.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-cat <<EOF > $TESTFILE
-data list list /y * z *.
-begin data.
-6 4
-5 3
-7 6
-end data.
-
-EXAMINE /VARIABLES= z BY y.
-
-EXAMINE /VARIABLES= z. 
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/bugs/examine-crash3.sh b/tests/bugs/examine-crash3.sh
deleted file mode 100755 (executable)
index 3e4e9f6..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which crashed pspp
-# when the /DESCRIPTIVES subcommand of EXAMINE
-# encountered missing values.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat <<EOF > $TESTFILE
-data list list /x * y *.
-begin data.
-1 0
-2 0
-. 0
-3 1
-4 1
-end data.
-examine x by y /statistics=descriptives. 
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/bugs/examine-missing.sh b/tests/bugs/examine-missing.sh
deleted file mode 100755 (executable)
index 16a9414..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which caused EXAMINE to 
-# crash if all its values were SYSMIS
-
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-DATA LIST LIST /x *.
-BEGIN DATA.
-.
-.
-.
-.
-END DATA.
-
-EXAMINE /x PLOT=HISTOGRAM.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv -e /dev/null $TESTFILE 2> /dev/null
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/bugs/examine-missing2.sh b/tests/bugs/examine-missing2.sh
deleted file mode 100755 (executable)
index 9d05436..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug in which examine didn't
-# count missing values.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program 1"
-cat > $TESTFILE << EOF
-DATA LIST LIST /x * y *.
-BEGIN DATA.
-1   1 
-2   1
-3   1
-4   1
-5   2
-6   2
-.   2
-END DATA
-
-EXAMINE /x by y.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program 1"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare results"
-diff -c $TEMPDIR/pspp.csv - <<EOF
-Table: Reading free-form data from INLINE.
-Variable,Format
-x,F8.0
-y,F8.0
-
-Table: Case Processing Summary
-,Cases,,,,,
-,Valid,,Missing,,Total,
-,N,Percent,N,Percent,N,Percent
-x,6,85.7143%,1,14.2857%,7,100%
-
-Table: Case Processing Summary
-,,Cases,,,,,
-,,Valid,,Missing,,Total,
-,y,N,Percent,N,Percent,N,Percent
-x,1.00,4,100%,0,0%,4,100%
-,2.00,2,66.6667%,1,33.3333%,3,100%
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-#Make sure this doesn't interfere with percentiles operation.
-
-activity="create program 2"
-cat > $TESTFILE << EOF
-DATA LIST LIST /X *.
-BEGIN DATA.
-99
-99
-5.00
-END DATA.
-
-MISSING VALUE X (99).
-
-EXAMINE /x
-        /PERCENTILES=HAVERAGE.
-
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program 2"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/bugs/get-no-file.sh b/tests/bugs/get-no-file.sh
deleted file mode 100755 (executable)
index 97fd7b6..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which caused a crash when 
-# GET specified a non-existent file
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-GET /FILE='$TEMPDIR/no-file.xx'.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-# The command should produce a warning.  Not an error.
-# We use the stdinput here, because the bug seems to manifest itself only in 
-# interactive mode.
-activity="run program"
-cat $TESTFILE | $SUPERVISOR $PSPP -o pspp.csv  > /dev/null
-if [ $? -ne 1 ] ; then fail ; fi
-
-pass
diff --git a/tests/bugs/get.sh b/tests/bugs/get.sh
deleted file mode 100755 (executable)
index 3fd6d56..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which caused
-# the second procedure after GET FILE to corrupt its output
-
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-DATA LIST LIST NOTABLE /LOCATION * EDITOR * SHELL * FREQ * .
-BEGIN DATA.
-    1.00     1.00    1.0     2.00
-    1.00     1.00    2.0    30.00
-    1.00     2.00    1.0     8.00
-    1.00     2.00    2.0    20.00
-    2.00     1.00    1.0     2.00
-    2.00     1.00    2.0    22.00
-    2.00     2.00    1.0     1.00
-    2.00     2.00    2.0     3.00
-END DATA.
-
-SAVE /OUTFILE='$TEMPDIR/foo.sav'.
-
-GET /FILE='$TEMPDIR/foo.sav'.
-
-* This one's ok
-LIST.
-
-* But this one get rubbish
-LIST.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-
-
-activity="compare output"
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Data List
-LOCATION,EDITOR,SHELL,FREQ
-1.00,1.00,1.00,2.00
-1.00,1.00,2.00,30.00
-1.00,2.00,1.00,8.00
-1.00,2.00,2.00,20.00
-2.00,1.00,1.00,2.00
-2.00,1.00,2.00,22.00
-2.00,2.00,1.00,1.00
-2.00,2.00,2.00,3.00
-
-Table: Data List
-LOCATION,EDITOR,SHELL,FREQ
-1.00,1.00,1.00,2.00
-1.00,1.00,2.00,30.00
-1.00,2.00,1.00,8.00
-1.00,2.00,2.00,20.00
-2.00,1.00,1.00,2.00
-2.00,1.00,2.00,22.00
-2.00,2.00,1.00,1.00
-2.00,2.00,2.00,3.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/bugs/if_crash.sh b/tests/bugs/if_crash.sh
deleted file mode 100755 (executable)
index 3abe22a..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which crashed pspp when using an expression
-# comprising an unknown variable.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-INPUT PROGRAM.
-LOOP c=1 to 10.
-COMPUTE var1=NORMAL(100).
-END CASE.
-END LOOP.
-END FILE.
-END INPUT PROGRAM.
-
-
-IF ( y > 0 ) .
-COMPUTE x=y.
-END IF.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-# The above input is invalid.
-# So this will have a non zero error status.
-# But it shouldn't crash!
-activity="run_program"
-$SUPERVISOR $PSPP -o pspp.csv -e /dev/null $TESTFILE 
-if [ $? -ne 1 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/bugs/input-crash.sh b/tests/bugs/input-crash.sh
deleted file mode 100755 (executable)
index fd4694d..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which caused a crash when 
-# reading invalid INPUT PROGRAM syntax.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-
-activity="create test program"
-cat > $TESTFILE <<EOF 
-INPUT PROGRAM.
-DATA LIST /a 1-9.
-BEGIN DATA
-123456789
-END DATA.
-END INPUT PROGRAM.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-# The above syntax is invalid, so this program should fail to parse
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv -e /dev/null $TESTFILE 
-if [ $? -ne 1 ] ; then fail ; fi
-
-
-activity="create test program 2"
-cat > $TESTFILE <<EOF
-* From bug #21108.
-input program.
-data list list /x.
-end file.
-end input program.
-
-descriptives x.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-# The above syntax is invalid, so this program should fail to parse
-activity="run program 2"
-$SUPERVISOR $PSPP -o pspp.csv -e /dev/null $TESTFILE
-if [ $? -ne 1 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/bugs/keep-all.sh b/tests/bugs/keep-all.sh
deleted file mode 100755 (executable)
index bbfd707..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/bin/sh
-
-# This program tests for bug #15766 (/KEEP subcommand on SAVE doesn't
-# fully support ALL) and underlying problems.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.pspp
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-for mode in COMPRESSED UNCOMPRESSED; do
-    activity="create program ($mode)"
-    cat > $TESTFILE <<EOF
-DATA LIST LIST NOTABLE 
-       /a b c d e f g h i j k l m n o p q r s t u v w x y z (F2.0).
-BEGIN DATA.
-1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
-END DATA.
-LIST.
-SAVE OUTFILE='test.sav'/$mode.
-GET FILE='test.sav'/KEEP=x y z all.
-LIST.
-EOF
-    if [ $? -ne 0 ] ; then no_result ; fi
-
-    activity="run PSPP ($mode)"
-    $SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-    if [ $? -ne 0 ] ; then no_result ; fi
-
-
-    activity="compare output ($mode)"
-    diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Data List
-a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
-1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26
-
-Table: Data List
-x,y,z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w
-24,25,26,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
-EOF
-    if [ $? -ne 0 ] ; then fail ; fi
-done
-
-pass;
diff --git a/tests/bugs/lag_crash.sh b/tests/bugs/lag_crash.sh
deleted file mode 100755 (executable)
index c98864c..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which crashed pspp when using LAG
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE << EOF
-DATA LIST LIST /x.
-BEGIN DATA
-1 
-2 
-END DATA.
-
-DO IF (x <> LAG(x) ).
-       ECHO 'hello'.
-END IF.
-
-EXECUTE.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run_program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE 
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/bugs/list-overflow.sh b/tests/bugs/list-overflow.sh
deleted file mode 100755 (executable)
index 53b7600..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which caused a buffer overflow
-# when the list command attempted to write very long strings.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-
-activity="create test program"
-cat > $TESTFILE <<EOF 
-INPUT PROGRAM.
-STRING foo (a2000).
-+ COMPUTE foo=CONCAT(RPAD('A',1999, 'x'), 'Z').
-END CASE.
-END FILE.
-END INPUT PROGRAM.
-
-EXECUTE.
-
-DISPLAY VARIABLES.
-
-LIST.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE 
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/bugs/match-files-scratch.sh b/tests/bugs/match-files-scratch.sh
deleted file mode 100755 (executable)
index 5d8df99..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which caused MATCH FILES to crash
-# when used with scratch variables.
-
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.pspp
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-DATA LIST LIST /w * x * y * .
-BEGIN DATA
-4 5 6
-1 2 3
-END DATA.
-
-COMPUTE j=0.
-LOOP #k = 1 to 10.
-COMPUTE j=#k + j.
-END LOOP.
-
-MATCH FILES FILE=* /DROP=w.
-LIST.
-FINISH.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Reading free-form data from INLINE.
-Variable,Format
-w,F8.0
-x,F8.0
-y,F8.0
-
-Table: Data List
-x,y,j
-5.00,6.00,55.00
-2.00,3.00,55.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/bugs/multipass.sh b/tests/bugs/multipass.sh
deleted file mode 100755 (executable)
index dc70544..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which caused UNIFORM(x) to always return zero.
-
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-data list list /ID * ABC *.
-begin data.
-1 3.5
-2 2.0
-3 2.0
-4 3.5
-5 3.0
-6 4.0
-7 5.0
-end data.
-
-TEMPORARY.
-SELECT IF id < 7 .
-
-DESCRIPTIVES
-        /VAR=abc.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Reading free-form data from INLINE.
-Variable,Format
-ID,F8.0
-ABC,F8.0
-
-Table: Valid cases = 6; cases with missing value(s) = 0.
-Variable,N,Mean,Std Dev,Minimum,Maximum
-ABC,6,3.00,.84,2.00,4.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/bugs/overwrite-input-file.sh b/tests/bugs/overwrite-input-file.sh
deleted file mode 100755 (executable)
index cbb29b4..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-#!/bin/sh
-
-# This program tests that simultaneous input and output to a single
-# file properly coexist, with the output atomically replacing the
-# input if successful.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create data file"
-cat > foo.data <<EOF
-1
-2
-3
-4
-5
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="create program 1"
-cat > $TESTFILE <<EOF
-DATA LIST FILE='foo.data' /X 1.
-SAVE OUTFILE='foo.sav'.
-EXPORT OUTFILE='foo.por'.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program 1"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="check and save copy of output files"
-# Check that the files are nonzero length.
-test -s foo.data || fail
-test -s foo.sav || fail
-test -s foo.por || fail
-# Save copies of them.
-cp foo.data foo.data.backup || fail
-cp foo.sav foo.sav.backup || fail
-cp foo.por foo.por.backup || fail
-
-
-activity="create program 2"
-cat > $TESTFILE <<EOF
-GET 'foo.sav'.
-COMPUTE Y = X + 1.
-XSAVE OUTFILE='foo.sav'.
-XEXPORT OUTFILE='foo.por'.
-PRINT OUTFILE='foo.data'.
-HOST kill -TERM \$PPID
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program 2"
-{ $SUPERVISOR $PSPP -o pspp.csv $TESTFILE -e /dev/null; } >/dev/null 2>&1
-# PSPP should have terminated with a signal.  POSIX requires that the exit
-# status of a process terminated by a signal be greater than 128.
-if [ $? -le 128 ] ; then no_result ; fi
-
-activity="check for remaining temporary files"
-if test -e *.tmp*; then fail; fi
-
-activity="compare output 1"
-cmp foo.sav foo.sav.backup
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare output 2"
-cmp foo.por foo.por.backup
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare output 3"
-cmp foo.data foo.data.backup
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-activity="create program 3"
-cat > $TESTFILE <<EOF
-DATA LIST NOTABLE LIST FILE='foo.data'/X.
-COMPUTE Y = X + 1.
-PRINT OUTFILE='foo.data'/X Y.
-EXECUTE.
-
-GET 'foo.sav'.
-COMPUTE Y = X + 2.
-SAVE OUTFILE='foo.sav'.
-
-IMPORT 'foo.por'.
-COMPUTE Y = X + 3.
-EXPORT OUTFILE='foo.por'.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program 3"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE -e /dev/null
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="check for remaining temporary files"
-if test -e *.tmp*; then fail; fi
-
-activity="create program 4"
-cat > $TESTFILE <<EOF
-DATA LIST LIST NOTABLE FILE='foo.data'/X Y.
-LIST.
-
-GET 'foo.sav'.
-LIST.
-
-IMPORT 'foo.por'.
-LIST.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program 4"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE -e /dev/null
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output"
-diff -c pspp.csv - << EOF
-Table: Data List
-X,Y
-1.00,2.00
-2.00,3.00
-3.00,4.00
-4.00,5.00
-5.00,6.00
-
-Table: Data List
-X,Y
-1,3.00
-2,4.00
-3,5.00
-4,6.00
-5,7.00
-
-Table: Data List
-X,Y
-1,4.00
-2,5.00
-3,6.00
-4,7.00
-5,8.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/bugs/overwrite-special-file.sh b/tests/bugs/overwrite-special-file.sh
deleted file mode 100755 (executable)
index dad9157..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/bin/sh
-
-# This program tests that simultaneous input and output to a single
-# file properly coexist, with the output atomically replacing the
-# input if successful.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-# This test only works on systems that have a /dev/null device...
-test -c /dev/null || no_result
-
-# ...and that are able to make a symbolic link to it...
-ln -s /dev/null foo.out || no_result
-
-# ...that is still /dev/null.
-test -c /dev/null || no_result
-
-activity="create program 1"
-cat > $TESTFILE <<EOF
-DATA LIST /x 1.
-BEGIN DATA.
-1
-2
-3
-4
-5
-END DATA.
-PRINT OUTFILE='foo.out'/x.
-PRINT OUTFILE='foo2.out'/x.
-EXECUTE.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program 1"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="check that foo2.out was created"
-diff -b foo2.out - << EOF
- 1
- 2
- 3
- 4
- 5
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="check that foo.out is unchanged"
-test -c /dev/null || fail
-
-pass;
diff --git a/tests/bugs/print-crash.sh b/tests/bugs/print-crash.sh
deleted file mode 100755 (executable)
index 7995e04..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which crashed when deallocating after a bad 
-# PRINT command.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-cat > $TESTFILE << EOF
-DATA LIST LIST /a * b *.
-BEGIN DATA.
-1 2
-3 4
-END DATA.
-
-PRINT F8.2
-LIST.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv -e /dev/null $TESTFILE 
-if [ $? -ne 1 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/bugs/random.sh b/tests/bugs/random.sh
deleted file mode 100755 (executable)
index 716ed33..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which caused UNIFORM(x) to always return zero.
-
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-set seed=10.
-input program.
-+ loop #i = 1 to 20.
-+    do repeat response=R1.
-+       compute response = uniform(10).
-+    end repeat.
-+    end case.
-+ end loop.
-+ end file.
-end input program.
-
-list.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="compare output"
-perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.csv
-diff -b  -w $TEMPDIR/pspp.csv - << EOF
-Table: Data List
-R1
-7.71
-2.99
-.21
-4.95
-6.34
-4.43
-7.49
-8.32
-4.99
-5.83
-2.25
-.25
-1.98
-7.09
-7.61
-2.66
-1.69
-2.64
-.88
-1.50
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/bugs/shbang.sh b/tests/bugs/shbang.sh
deleted file mode 100755 (executable)
index 607e4a7..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-#!/bin/sh
-
-# This program tests that PSPP ignores the first line of a PSPP syntax
-# file that begins with #!, without issuing an error (bug #26518).
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-cat > $TESTFILE << EOF
-#! $PSPP
-DATA LIST LIST NOTABLE /a.
-BEGIN DATA.
-1
-2
-END DATA.
-LIST.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv -e /dev/null $TESTFILE 
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-activity="compare output"
-perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.csv
-diff -b  -w $TEMPDIR/pspp.csv - << EOF
-Table: Data List
-a
-1.00
-2.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/bugs/signals.sh b/tests/bugs/signals.sh
deleted file mode 100755 (executable)
index f46c4de..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/bin/sh
-
-# This program tests that signals are properly caught and handled by PSPP
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="sending SIGINT to pspp"
-echo 'host kill -INT $PPID' | $PSPP -o pspp.csv > /dev/null 2> $TEMPDIR/stderr1
-if [ $? -ne 0 ] ; then no_result ; fi
-
-# SIGINT should have caused a clean shutdown
-activity="checking for absence of error messages 1"
-[ ! -s $TEMPDIR/stderr1 ]  
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="sending SIGSEGV to pspp"
-echo 'host kill -SEGV $PPID' | $PSPP -o pspp.csv > /dev/null 2> $TEMPDIR/stderr2
-if [ $? -eq 0 ] ; then no_result ; fi
-
-# SIGSEGV should have caused an error message
-activity="checking for error messages from pspp 2"
-head -8 $TEMPDIR/stderr2 > $TEMPDIR/stderr-head
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="comparing error messages from pspp 2"
-diff $TEMPDIR/stderr-head  - << EOF
-******************************************************
-You have discovered a bug in PSPP.  Please report this
-to bug-gnu-pspp@gnu.org.  Please include this entire
-message, *plus* several lines of output just above it.
-For the best chance at having the bug fixed, also
-include the syntax file that triggered it and a sample
-of any data file used for input.
-proximate cause:     Segmentation Violation
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/bugs/t-test-alpha.sh b/tests/bugs/t-test-alpha.sh
deleted file mode 100755 (executable)
index a6fd5d9..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-#!/bin/sh
-
-# This program tests that the T-TEST works when the independent
-# variable is alpha
-# BUG #11227
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-data list list /ID * INDEP (a1) DEP1 * DEP2 *.
-begin data.
-1  'a' 1 3
-2  'a' 2 4
-3  'a' 2 4 
-4  'a' 2 4 
-5  'a' 3 5
-6  'b' 3 1
-7  'b' 4 2
-8  'b' 4 2
-9  'b' 4 2
-10 'b' 5 3
-11 'c' 2 2
-end data.
-
-
-t-test /GROUPS=indep('a','b') /var=dep1 dep2.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output"
-diff -c $TEMPDIR/pspp.csv - <<EOF
-Table: Reading free-form data from INLINE.
-Variable,Format
-ID,F8.0
-INDEP,A1
-DEP1,F8.0
-DEP2,F8.0
-
-Table: Group Statistics
-,INDEP,N,Mean,Std. Deviation,S.E. Mean
-DEP1,a,5,2.00,.71,.32
-,b,5,4.00,.71,.32
-DEP2,a,5,4.00,.71,.32
-,b,5,2.00,.71,.32
-
-Table: Independent Samples Test
-,,Levene's Test for Equality of Variances,,t-test for Equality of Means,,,,,,
-,,,,,,,,,95% Confidence Interval of the Difference,
-,,F,Sig.,t,df,Sig. (2-tailed),Mean Difference,Std. Error Difference,Lower,Upper
-DEP1,Equal variances assumed,.00,1.00,-4.47,8.00,.00,-2.00,.45,-3.03,-.97
-,Equal variances not assumed,,,-4.47,8.00,.00,-2.00,.45,-3.03,-.97
-DEP2,Equal variances assumed,.00,1.00,4.47,8.00,.00,2.00,.45,.97,3.03
-,Equal variances not assumed,,,4.47,8.00,.00,2.00,.45,.97,3.03
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass
diff --git a/tests/bugs/t-test-alpha2.sh b/tests/bugs/t-test-alpha2.sh
deleted file mode 100755 (executable)
index 8814560..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-#!/bin/sh
-
-# This program tests that the T-TEST fails gracefully when 
-#  a single alpha variable is specified for the independent variable
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-data list list /id * indep (a1) dep1 * dep2 *.
-begin data.
-1  'a' 1 3
-2  'a' 2 4
-3  'a' 2 4 
-4  'a' 2 4 
-5  'a' 3 5
-6  'b' 3 1
-7  'b' 4 2
-8  'b' 4 2
-9  'b' 4 2
-10 'b' 5 3
-11 'c' 2 2
-end data.
-
-
-t-test /GROUPS=indep('a') /var=dep1 dep2.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE > /dev/null
-#invert  v
-if [ $? -eq 0 ] ; then fail ; fi
-
-
-pass
diff --git a/tests/bugs/t-test-alpha3.sh b/tests/bugs/t-test-alpha3.sh
deleted file mode 100755 (executable)
index ffe142d..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which didn't properly
-# compare string values.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-cat >> $TESTFILE <<EOF
-data list list /x * gv (a8).
-begin data.
-3   One
-2   One
-3   One
-2   One
-3   One
-4   Two
-3.5 Two
-3.0 Two
-end data.
-
-t-test group=gv('One', 'Two')
-       /variables = x.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="compare output"
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Reading free-form data from INLINE.
-Variable,Format
-x,F8.0
-gv,A8
-
-Table: Group Statistics
-,gv,N,Mean,Std. Deviation,S.E. Mean
-x,One     ,5,2.60,.55,.24
-,Two     ,3,3.50,.50,.29
-
-Table: Independent Samples Test
-,,Levene's Test for Equality of Variances,,t-test for Equality of Means,,,,,,
-,,,,,,,,,95% Confidence Interval of the Difference,
-,,F,Sig.,t,df,Sig. (2-tailed),Mean Difference,Std. Error Difference,Lower,Upper
-x,Equal variances assumed,1.13,.33,-2.32,6.00,.06,-.90,.38,-1.83,.03
-,Equal variances not assumed,,,-2.38,4.70,.07,-.90,.38,-1.89,.09
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/bugs/t-test-paired.sh b/tests/bugs/t-test-paired.sh
deleted file mode 100755 (executable)
index 29c556a..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug in the paired samples T test.
-# Thanks to Mike Griffiths for reporting this problem.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-cat >> $TESTFILE <<EOF
-set format f8.3.
-data list list /A * B *.
-begin data.
-11 2
-1  1
-1  1
-end data.
-
-t-test pairs = a with b (paired).
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="compare output"
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Reading free-form data from INLINE.
-Variable,Format
-A,F8.0
-B,F8.0
-
-Table: Paired Sample Statistics
-,,Mean,N,Std. Deviation,S.E. Mean
-Pair 0,A,4.333,3,5.774,3.333
-,B,1.333,3,.577,.333
-
-Table: Paired Samples Correlations
-,,N,Correlation,Sig.
-Pair 0,A & B,3,1.000,.000
-
-Table: Paired Samples Test
-,,Paired Differences,,,,,,,
-,,,,,95% Confidence Interval of the Difference,,,,
-,,Mean,Std. Deviation,Std. Error Mean,Lower,Upper,t,df,Sig. (2-tailed)
-Pair 0,A - B,3.000,5.196,3.000,-9.908,15.908,1.000,2,.423
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/bugs/t-test-with-temp.sh b/tests/bugs/t-test-with-temp.sh
deleted file mode 100755 (executable)
index 2c007ed..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-#!/bin/sh
-
-# This program tests that the T-TEST 
-# works ok with a TEMPORARY transformation
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-data list list /ind * x * .
-begin data.
-1 3.5
-1 2.0
-1 2.0
-2 3.5
-2 3.0
-2 4.0
-end data.
-
-t-test /groups=ind(1,2) /var x.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="copy output"
-cp $TEMPDIR/pspp.csv $TEMPDIR/first.csv
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="create program 2"
-cat > $TESTFILE <<EOF
-data list list /ind * x * .
-begin data.
-1 3.5
-1 2.0
-1 2.0
-2 3.5
-2 3.0
-2 4.0
-2 9.0
-end data.
-
-TEMPORARY.
-SELECT IF ind < 7.
-
-t-test /groups=ind(1,2) /var x.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output"
-perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.csv $TEMPDIR/first.csv
-diff -b $TEMPDIR/pspp.csv $TEMPDIR/first.csv
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass
diff --git a/tests/bugs/t-test.sh b/tests/bugs/t-test.sh
deleted file mode 100755 (executable)
index c0a2377..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which caused T-TEST to 
-# crash when given invalid syntax
-
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-DATA LIST LIST /id * a * .
-BEGIN DATA.
-1 3.5
-2 2.0
-3 2.0
-4 3.5
-5 3.0
-6 4.0
-END DATA.
-
-T-TEST /testval=2.0 .
-T-TEST /groups=id(3) .
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-#The syntax was invalid.  Therefore pspp must return non zero.
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv -e /dev/null $TESTFILE 
-if [ $? -ne 1 ] ; then fail ; fi
-
-pass;
diff --git a/tests/bugs/temporary.sh b/tests/bugs/temporary.sh
deleted file mode 100755 (executable)
index cb00422..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which caused UNIFORM(x) to always return zero.
-
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-DATA LIST LIST NOTABLE /X *.
-begin data.
-1
-2
-3
-4
-5
-6
-7
-8
-9
-end data.
-
-temporary.
-select if x > 5 .
-list.
-
-list.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Data List
-X
-6.00
-7.00
-8.00
-9.00
-
-Table: Data List
-X
-1.00
-2.00
-3.00
-4.00
-5.00
-6.00
-7.00
-8.00
-9.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/bugs/unwritable-dir.sh b/tests/bugs/unwritable-dir.sh
deleted file mode 100755 (executable)
index c7c09f7..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which crashed pspp when output drivers
-# tried to create output files in an unwritable directory.
-
-TEMPDIR=/tmp/pspp-tst-$$
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     chmod u+w $TEMPDIR
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create test syntax"
-cat > test.pspp <<EOF
-* By including at least one command in the input, we can ensure that PSPP
-  also doesn't crash trying to create pspp.jnl in an unwritable directory.
-
-* By outputting a chart, we can check that charts are safe too.
-
-data list /x 1.
-begin data.
-1
-2
-3
-end data.
-frequencies x/histogram.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-# Mark our directory unwritable.
-chmod u-w $TEMPDIR
-
-# Iterate over the various drivers we support.  We could use all of these
-# on a single PSPP invocation, except that charts are only supported for
-# a single driver at a time, and we'd prefer to test chart support for
-# all of our driver types.
-for file in pspp.csv pspp.html pspp.odt pspp.pdf pspp.txt; do
-    # PSPP will fail to create the output file.  Currently this doesn't cause
-    # PSPP's exit status to be nonzero, although this is arguably incorrect.
-    # At any rate, PSPP should not crash.
-    activity="run pspp with $file driver"
-    $SUPERVISOR $PSPP -o $file test.pspp >/dev/null 2>&1
-    if [ $? -ne 0 ] ; then fail ; fi
-done
-
-pass;
diff --git a/tests/bugs/val-labs-trailing-slash.sh b/tests/bugs/val-labs-trailing-slash.sh
deleted file mode 100755 (executable)
index 72dd630..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug in the VALUE LABELS command
-# which caused a crash if it had a trailing /
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-DATA LIST LIST /X * .
-BEGIN DATA.
-1 
-2
-3
-4
-END DATA.
-
-
-VALUE LABELS X 1 'one' 2 'two' 3 'three'/
-
-
-LIST VARIABLES=X.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/bugs/val-labs.sh b/tests/bugs/val-labs.sh
deleted file mode 100755 (executable)
index 7fd457b..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/bin/sh
-
-# This program tests for a bug which caused VALUE LABELS to 
-# crash when given invalid syntax
-
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-DATA LIST LIST /a * pref * .
-BEGIN DATA.
-    1.00     1.00    
-    1.00     2.00    
-    2.00     1.00    
-    2.00     2.00    
-END DATA.
-
-VALUE LABELS /var=a 'label for a'.
-
-
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-#Invalid syntax --- return value is non zero.
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv -e /dev/null $TESTFILE 
-if [ $? -ne 1 ] ; then fail ; fi
-
-pass;
diff --git a/tests/command/bignum.sh b/tests/command/bignum.sh
deleted file mode 100755 (executable)
index d124269..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-#!/bin/sh
-
-# This program tests the use of big numbers
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create data file"
-cat > $TEMPDIR/bignum.data << wizzah
-0
-0.1
-0.5
-0.8
-0.9
-0.999
-1
-2
-3
-4
-5
-12
-123
-1234
-12345
-123456
-1234567
-12345678
-123456789
-1234567890
-19999999999
-199999999999
-1234567890123
-19999999999999
-199999999999999
-1234567890123456
-19999999999999999
-123456789012345678
-1999999999999999999
-12345678901234567890
-199999999999999999999
-1234567890123456789012
-19999999999999999999999
-123456789012345678901234
-1999999999999999999999999
-12345678901234567890123456
-199999999999999999999999999
-1234567890123456789012345678
-19999999999999999999999999999
-123456789012345678901234567890
-1999999999999999999999999999999
-12345678901234567890123456789012
-199999999999999999999999999999999
-1234567890123456789012345678901234
-19999999999999999999999999999999999
-123456789012345678901234567890123456
-1999999999999999999999999999999999999
-12345678901234567890123456789012345678
-199999999999999999999999999999999999999
-1234567890123456789012345678901234567890
-1999999999999999999999999999999999999999
-1e40
-1.1e40
-1.5e40
-1e41
-1e50
-1e100
-1e150
-1e200
-1e250
-1e300
-1.79641e308
-wizzah
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="create program"
-cat > $TESTFILE <<foobar
-title 'Test use of big numbers'.
-
-*** Do the portable output.
-data list file='$TEMPDIR/bignum.data'/BIGNUM 1-40.
-list.
-
-*** Do the nonportable output for fun. 
-descriptives BIGNUM.
-foobar
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-# Like the above comments say ...
-# ... if we get here without crashing, then the test has passed.
-
-pass;
diff --git a/tests/command/correlation.sh b/tests/command/correlation.sh
deleted file mode 100755 (executable)
index d66e52c..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-#!/bin/sh
-
-# This program tests the CORRELATIONS command
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program 1"
-cat << EOF > $TESTFILE
-set format = F11.3.
-data list notable list /foo * bar * wiz * bang *.
-begin data.
-1   0   3   1
-3   9 -50   5
-3   4   3 203
-4  -9   0  -4
-98 78 104   2
-3  50 -49 200
-.   4   4   4
-5   3   0   .
-end data.
-
-correlations 
-       variables = foo bar wiz bang
-       /print nosig
-       /missing = listwise
-       .
-
-correlations 
-       variables = bar wiz
-       /print nosig
-       /missing = listwise
-       .
-
-correlations 
-       variables = foo bar wiz bang
-       /print nosig
-       /missing = pairwise
-       .
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program 1"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare results 1"
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Correlations
-,,foo,bar,wiz,bang
-foo,Pearson Correlation,1.000,.802,.890,-.308
-,Sig. (2-tailed),,.055,.017,.553
-bar,Pearson Correlation,.802,1.000,.519,.118
-,Sig. (2-tailed),.055,,.291,.824
-wiz,Pearson Correlation,.890,.519,1.000,-.344
-,Sig. (2-tailed),.017,.291,,.505
-bang,Pearson Correlation,-.308,.118,-.344,1.000
-,Sig. (2-tailed),.553,.824,.505,
-
-Table: Correlations
-,,bar,wiz
-bar,Pearson Correlation,1.000,.497
-,Sig. (2-tailed),,.210
-wiz,Pearson Correlation,.497,1.000
-,Sig. (2-tailed),.210,
-
-Table: Correlations
-,,foo,bar,wiz,bang
-foo,Pearson Correlation,1.000,.805,.883,-.308
-,Sig. (2-tailed),,.029,.008,.553
-,N,7,7,7,6
-bar,Pearson Correlation,.805,1.000,.497,.164
-,Sig. (2-tailed),.029,,.210,.725
-,N,7,8,8,7
-wiz,Pearson Correlation,.883,.497,1.000,-.337
-,Sig. (2-tailed),.008,.210,,.460
-,N,7,8,8,7
-bang,Pearson Correlation,-.308,.164,-.337,1.000
-,Sig. (2-tailed),.553,.725,.460,
-,N,6,7,7,7
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-# Now test that weights are properly handled.
-
-activity="create program 2"
-cat << EOF > $TESTFILE
-set format = F11.3.
-data list notable list /foo * bar * wiz * bang * w *.
-begin data.
-1   0   3   1  1
-3   9 -50   5  2
-3   4   3 203  1
-4  -9   0  -4  1
-98 78 104   2  3
-3  50 -49 200  1
-end data.
-
-weight by w.
-
-correlations 
-       variables = foo bar wiz bang
-       /statistics=descriptives xprod
-       .
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program 2"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="copy results"
-cp $TEMPDIR/pspp.csv $TEMPDIR/weighted
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="create program 3"
-cat << EOF > $TESTFILE
-set format = F11.3.
-data list notable list /foo * bar * wiz * bang * w *.
-begin data.
-1   0   3   1  1
-3   9 -50   5  1
-3   9 -50   5  1
-3   4   3 203  1
-4  -9   0  -4  1
-98 78 104   2  1
-98 78 104   2  1
-98 78 104   2  1
-3  50 -49 200  1
-end data.
-
-weight by w.
-
-correlations 
-       variables = foo bar wiz bang
-       /statistics=descriptives xprod
-       .
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program 3"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="Compare weighted and unweighted results"
-diff $TEMPDIR/pspp.csv $TEMPDIR/weighted
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/command/do-if.sh b/tests/command/do-if.sh
deleted file mode 100755 (executable)
index f55bcda..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/bin/sh
-
-# This program tests the DO IF command.
-
-TEMPDIR=/tmp/pspp-tst-$$
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="generate input and expected output"
-(for a in 0 1 ' '; do
-    for b in 0 1 ' '; do
-       for c in 0 1 ' '; do
-           for d in 0 1 ' '; do
-               abcd=$a$b$c$d
-               echo "$abcd" 1>&3
-               if test "$a" = "1"; then
-                   echo " $abcd A"
-               elif test "$a" = " "; then
-                   :
-               elif test "$b" = "1"; then
-                   echo " $abcd B"
-               elif test "$b" = " "; then
-                   :
-               elif test "$c" = "1"; then
-                   echo " $abcd C"
-               elif test "$c" = " "; then
-                   :
-               elif test "$d" = "1"; then
-                   echo " $abcd D"
-               elif test "$d" = " "; then
-                   :
-               else
-                   echo " $abcd E"
-               fi
-           done
-       done
-    done
-done) >test1.expected 3>test1.data
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="create test1.pspp"
-cat > test1.pspp <<EOF
-DATA LIST FILE="test1.data"/A B C D 1-4 ABCD 1-4 (A).
-DO IF A.
-PRINT OUTFILE="test1.out"/ABCD 'A'.
-ELSE IF B.
-PRINT OUTFILE="test1.out"/ABCD 'B'.
-ELSE IF C.
-PRINT OUTFILE="test1.out"/ABCD 'C'.
-ELSE IF D.
-PRINT OUTFILE="test1.out"/ABCD 'D'.
-ELSE.
-PRINT OUTFILE="test1.out"/ABCD 'E'.
-END IF.
-EXECUTE.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run test1"
-$SUPERVISOR $PSPP -o pspp.csv test1.pspp
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare test1 results"
-diff -u $TEMPDIR/test1.out $TEMPDIR/test1.expected
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/command/do-repeat.sh b/tests/command/do-repeat.sh
deleted file mode 100755 (executable)
index f5999dc..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/bin/sh
-
-# This program tests the DO REPEAT command.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-
-activity="create program"
-cat > $TESTFILE << EOF
-DATA LIST NOTABLE /a 1.
-BEGIN DATA.
-0
-END DATA.
-
-DO REPEAT h = h0 TO h3 / x = 0 TO 3 / y = 8, 7.5, 6, 5.
-       COMPUTE h = x + y.
-END REPEAT.
-
-VECTOR v(6).
-COMPUTE #idx = 0.
-DO REPEAT i = 1 TO 2.
-       DO REPEAT j = 3 TO 5.
-               COMPUTE #x = i + j.
-               COMPUTE #idx = #idx + 1.
-               COMPUTE v(#idx) = #x.
-       END REPEAT.
-END REPEAT.
-
-LIST.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE 
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare results"
-perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.csv
-diff -b  $TEMPDIR/pspp.csv - <<EOF
-Table: Data List
-a,h0,h1,h2,h3,v1,v2,v3,v4,v5,v6
-0,8.00,8.50,8.00,8.00,4.00,5.00,6.00,5.00,6.00,7.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass
diff --git a/tests/command/erase.sh b/tests/command/erase.sh
deleted file mode 100755 (executable)
index 20fe927..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/bin/sh
-
-# This program tests the ERASE command.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create file"
-cat > $TEMPDIR/foobar <<EOF
-xyzzy
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="check for file 1"
-if [ ! -f $TEMPDIR/foobar ] ; then no_result ; fi 
-
-
-activity="create program 1"
-cat > $TESTFILE <<EOF
-set safer on
-
-erase FILE='foobar'.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-# foobar must still exist
-activity="check for file 2"
-if [ ! -f $TEMPDIR/foobar ] ; then fail ; fi 
-
-# This command must fail
-activity="run prog 1"
-$SUPERVISOR $PSPP -o pspp.csv -e /dev/null $TESTFILE 
-if [ $? -eq 0 ] ; then fail ; fi
-
-
-activity="create program 2"
-cat > $TESTFILE <<EOF
-
-erase FILE='foobar'.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run prog 2"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then fail ; fi
-
-# foobar should now be gone
-if [ -f $TEMPDIR/foobar ] ; then fail ; fi 
-
-
-pass;
diff --git a/tests/command/examine-extremes.sh b/tests/command/examine-extremes.sh
deleted file mode 100755 (executable)
index cd0ad7c..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-#!/bin/sh
-
-# This program tests  the EXTREME subcommand of the EXAMINE command.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-data list free /V1 W
-begin data.
-1  1
-2  1
-3  2
-3  1
-4  1
-5  1
-6  1
-7  1
-8  1
-9  1
-10 1
-11 1
-12 1
-13 1
-14 1
-15 1
-16 1
-17 1
-18 2
-19 1
-20 1
-end data.
-
-weight by w.
-
-examine v1 
- /statistics=extreme(6)
- .
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare results"
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Case Processing Summary
-,Cases,,,,,
-,Valid,,Missing,,Total,
-,N,Percent,N,Percent,N,Percent
-V1,23.00,100%,.00,0%,23.00,100%
-
-Table: Extreme Values
-,,,Case Number,Value
-V1,Highest,1,21,20.00
-,,2,20,19.00
-,,3,19,18.00
-,,4,19,18.00
-,,5,18,17.00
-,,6,17,16.00
-,Lowest,1,1,1.00
-,,2,2,2.00
-,,3,3,3.00
-,,4,3,3.00
-,,5,4,3.00
-,,6,5,4.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/command/examine-percentiles.sh b/tests/command/examine-percentiles.sh
deleted file mode 100755 (executable)
index 92e53c8..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-#!/bin/sh
-
-# This program tests  the PERCENTILES subcommand of the EXAMINE command.
-# In particular it tests that it behaves properly when there are only 
-# a few cases
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-DATA LIST LIST /X *.
-BEGIN DATA.
-2.00 
-8.00 
-5.00 
-END DATA.
-
-EXAMINE /x
-       /PERCENTILES=HAVERAGE.
-
-EXAMINE /x
-       /PERCENTILES=WAVERAGE.
-
-EXAMINE /x
-       /PERCENTILES=ROUND.
-
-EXAMINE /x
-       /PERCENTILES=EMPIRICAL.
-
-EXAMINE /x
-       /PERCENTILES=AEMPIRICAL.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="compare results"
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Reading free-form data from INLINE.
-Variable,Format
-X,F8.0
-
-Table: Case Processing Summary
-,Cases,,,,,
-,Valid,,Missing,,Total,
-,N,Percent,N,Percent,N,Percent
-X,3,100%,0,0%,3,100%
-
-Table: Percentiles
-,,Percentiles,,,,,,
-,,5,10,25,50,75,90,95
-X,HAverage,.40,.80,2.00,5.00,8.00,8.00,8.00
-,Tukey's Hinges,,,3.50,5.00,6.50,,
-
-Table: Case Processing Summary
-,Cases,,,,,
-,Valid,,Missing,,Total,
-,N,Percent,N,Percent,N,Percent
-X,3,100%,0,0%,3,100%
-
-Table: Percentiles
-,,Percentiles,,,,,,
-,,5,10,25,50,75,90,95
-X,Weighted Average,.30,.60,1.50,3.50,5.75,7.10,7.55
-,Tukey's Hinges,,,3.50,5.00,6.50,,
-
-Table: Case Processing Summary
-,Cases,,,,,
-,Valid,,Missing,,Total,
-,N,Percent,N,Percent,N,Percent
-X,3,100%,0,0%,3,100%
-
-Table: Percentiles
-,,Percentiles,,,,,,
-,,5,10,25,50,75,90,95
-X,Rounded,.00,.00,2.00,5.00,5.00,8.00,8.00
-,Tukey's Hinges,,,3.50,5.00,6.50,,
-
-Table: Case Processing Summary
-,Cases,,,,,
-,Valid,,Missing,,Total,
-,N,Percent,N,Percent,N,Percent
-X,3,100%,0,0%,3,100%
-
-Table: Percentiles
-,,Percentiles,,,,,,
-,,5,10,25,50,75,90,95
-X,Empirical,2.00,2.00,2.00,5.00,8.00,8.00,8.00
-,Tukey's Hinges,,,3.50,5.00,6.50,,
-
-Table: Case Processing Summary
-,Cases,,,,,
-,Valid,,Missing,,Total,
-,N,Percent,N,Percent,N,Percent
-X,3,100%,0,0%,3,100%
-
-Table: Percentiles
-,,Percentiles,,,,,,
-,,5,10,25,50,75,90,95
-X,Empirical with averaging,2.00,2.00,2.00,5.00,8.00,8.00,8.00
-,Tukey's Hinges,,,3.50,5.00,6.50,,
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/command/examine.sh b/tests/command/examine.sh
deleted file mode 100755 (executable)
index 663455e..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-#!/bin/sh
-
-# This program tests  the EXAMINE command.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-DATA LIST LIST /QUALITY * W * BRAND * .
-BEGIN DATA
-3  1  1
-2  2  1
-1  2  1
-1  1  1
-4  1  1
-4  1  1
-5  1  2
-2  1  2
-4  4  2
-2  1  2
-3  1  2
-7  1  3
-4  2  3
-5  3  3
-3  1  3
-6  1  3
-END DATA
-
-WEIGHT BY w.
-
-VARIABLE LABELS brand   'Manufacturer'.
-VARIABLE LABELS quality 'Breaking Strain'.
-
-VALUE LABELS /brand 1 'Aspeger' 2 'Bloggs' 3 'Charlies'.
-
-LIST /FORMAT=NUMBERED.
-
-EXAMINE
-       quality BY brand
-       /STATISTICS descriptives extreme(3)
-       .
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-# NOTE:  In the following data: Only the extreme values have been checked
-# The descriptives have been blindly pasted.
-activity="compare results"
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Reading free-form data from INLINE.
-Variable,Format
-QUALITY,F8.0
-W,F8.0
-BRAND,F8.0
-
-Table: Data List
-Case Number,QUALITY,W,BRAND
-1,3.00,1.00,1.00
-2,2.00,2.00,1.00
-3,1.00,2.00,1.00
-4,1.00,1.00,1.00
-5,4.00,1.00,1.00
-6,4.00,1.00,1.00
-7,5.00,1.00,2.00
-8,2.00,1.00,2.00
-9,4.00,4.00,2.00
-10,2.00,1.00,2.00
-11,3.00,1.00,2.00
-12,7.00,1.00,3.00
-13,4.00,2.00,3.00
-14,5.00,3.00,3.00
-15,3.00,1.00,3.00
-16,6.00,1.00,3.00
-
-Table: Case Processing Summary
-,Cases,,,,,
-,Valid,,Missing,,Total,
-,N,Percent,N,Percent,N,Percent
-Breaking Strain,24.00,100%,.00,0%,24.00,100%
-
-Table: Extreme Values
-,,,Case Number,Value
-Breaking Strain,Highest,1,12,7.00
-,,2,16,6.00
-,,3,7,5.00
-,Lowest,1,3,1.00
-,,2,3,1.00
-,,3,4,1.00
-
-Table: Descriptives
-,,,Statistic,Std. Error
-Breaking Strain,Mean,,3.54,.32
-,95% Confidence Interval for Mean,Lower Bound,2.87,
-,,Upper Bound,4.21,
-,5% Trimmed Mean,,3.50,
-,Median,,4.00,
-,Variance,,2.52,
-,Std. Deviation,,1.59,
-,Minimum,,1.00,
-,Maximum,,7.00,
-,Range,,6.00,
-,Interquartile Range,,2.75,
-,Skewness,,.06,.47
-,Kurtosis,,-.36,.92
-
-Table: Case Processing Summary
-,,Cases,,,,,
-,,Valid,,Missing,,Total,
-,Manufacturer,N,Percent,N,Percent,N,Percent
-Breaking Strain,Aspeger,8.00,100%,.00,0%,8.00,100%
-,Bloggs,8.00,100%,.00,0%,8.00,100%
-,Charlies,8.00,100%,.00,0%,8.00,100%
-
-Table: Extreme Values
-,Manufacturer,,,Case Number,Value
-Breaking Strain,Aspeger,Highest,1,5,4.00
-,,,2,6,4.00
-,,,3,1,3.00
-,,Lowest,1,3,1.00
-,,,2,3,1.00
-,,,3,4,1.00
-,Bloggs,Highest,1,7,5.00
-,,,2,9,4.00
-,,,3,9,4.00
-,,Lowest,1,8,2.00
-,,,2,10,2.00
-,,,3,11,3.00
-,Charlies,Highest,1,12,7.00
-,,,2,16,6.00
-,,,3,14,5.00
-,,Lowest,1,15,3.00
-,,,2,13,4.00
-,,,3,13,4.00
-
-Table: Descriptives
-,Manufacturer,,,Statistic,Std. Error
-Breaking Strain,Aspeger,Mean,,2.25,.45
-,,95% Confidence Interval for Mean,Lower Bound,1.18,
-,,,Upper Bound,3.32,
-,,5% Trimmed Mean,,2.22,
-,,Median,,2.00,
-,,Variance,,1.64,
-,,Std. Deviation,,1.28,
-,,Minimum,,1.00,
-,,Maximum,,4.00,
-,,Range,,3.00,
-,,Interquartile Range,,2.75,
-,,Skewness,,.47,.75
-,,Kurtosis,,-1.55,1.48
-,Bloggs,Mean,,3.50,.38
-,,95% Confidence Interval for Mean,Lower Bound,2.61,
-,,,Upper Bound,4.39,
-,,5% Trimmed Mean,,3.50,
-,,Median,,4.00,
-,,Variance,,1.14,
-,,Std. Deviation,,1.07,
-,,Minimum,,2.00,
-,,Maximum,,5.00,
-,,Range,,3.00,
-,,Interquartile Range,,1.75,
-,,Skewness,,-.47,.75
-,,Kurtosis,,-.83,1.48
-,Charlies,Mean,,4.88,.44
-,,95% Confidence Interval for Mean,Lower Bound,3.83,
-,,,Upper Bound,5.92,
-,,5% Trimmed Mean,,4.86,
-,,Median,,5.00,
-,,Variance,,1.55,
-,,Std. Deviation,,1.25,
-,,Minimum,,3.00,
-,,Maximum,,7.00,
-,,Range,,4.00,
-,,Interquartile Range,,1.75,
-,,Skewness,,.30,.75
-,,Kurtosis,,.15,1.48
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/command/file-handle.sh b/tests/command/file-handle.sh
deleted file mode 100755 (executable)
index f63b50a..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/bin/sh
-
-# This program's primary purpose is to  test the FILE HANDLE command
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create file"
-cat > $TEMPDIR/wiggle.txt << EOF
-1
-2
-5
-109
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-
-activity="create program"
-cat > $TESTFILE << EOF
-FILE HANDLE myhandle /NAME='$TEMPDIR/wiggle.txt'.
-DATA LIST LIST FILE=myhandle /x *.
-LIST.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="compare output"
-diff -c $TEMPDIR/pspp.csv - << EOF 
-Table: Reading free-form data from myhandle.
-Variable,Format
-x,F8.0
-
-Table: Data List
-x
-1.00
-2.00
-5.00
-109.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/command/file-label.sh b/tests/command/file-label.sh
deleted file mode 100755 (executable)
index 239a275..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-#!/bin/sh
-
-# This program tests the FILE LABEL and  DOCUMENT, and ADD DOCUMENT commands
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE << EOF
-
-/* Set up a dummy active file in memory.
-data list /X 1 Y 2.
-begin data.
-16
-27
-38
-49
-50
-end data.
-
-/* Add value labels for some further testing of value labels.
-value labels x y 1 'first label' 2 'second label' 3 'third label'.
-add value labels x 1 'first label mark two'.
-
-/* Add a file label and a few documents.
-file label This is a test file label.
-document First line of a document
-Second line of a document
-The last line should end with a period: .
-
-
-/* Display the documents.
-display documents.
-display file label.
-
-ADD DOCUMENT 'Line one' 'Line two'.
-
-/* Save the active file then get it and display the documents again.
-save /OUTFILE='foo.save'.
-get /FILE='foo.save'.
-display documents.
-display file label.
-
-/* There is an interesting interaction that occurs if the 'execute'
-/* command below.  What happens is that an error message is output
-/* at the next 'save' command that 'foo.save' is already open for
-/* input.  This is because the 'get' hasn't been executed yet and
-/* therefore PSPP would be reading from and writing to the same
-/* file at once, which is obviously a Bad Thing.  But 'execute'
-/* here clears up that potential problem.
-execute.
-
-/* Add another (shorter) document and try again.
-document There should be another document now.
-display documents.
-
-/* Save and get.
-save /OUTFILE='foo.save'.
-get /FILE='foo.save'.
-display documents.
-display file label.
-
-/* Done.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-# We need to filter out the dates/times
-activity="date filter"
-sed 's/(Entered [^)]*)/(Entered <date>)/' $TEMPDIR/pspp.csv > $TEMPDIR/pspp.filtered
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="compare results"
-diff -c $TEMPDIR/pspp.filtered - <<EOF
-Table: Reading 1 record from INLINE.
-Variable,Record,Columns,Format
-X,1,1-  1,F1.0
-Y,1,2-  2,F1.0
-
-Documents in the active file:
-
-document First line of a document
-
-Second line of a document
-
-The last line should end with a period: .
-
-(Entered <date>)
-
-File label:
-
-This is a test file label
-
-Documents in the active file:
-
-document First line of a document
-
-Second line of a document
-
-The last line should end with a period: .
-
-(Entered <date>)
-
-Line one
-
-Line two
-
-(Entered <date>)
-
-File label:
-
-This is a test file label
-
-Documents in the active file:
-
-document First line of a document
-
-Second line of a document
-
-The last line should end with a period: .
-
-(Entered <date>)
-
-Line one
-
-Line two
-
-(Entered <date>)
-
-document There should be another document now.
-
-(Entered <date>)
-
-Documents in the active file:
-
-document First line of a document
-
-Second line of a document
-
-The last line should end with a period: .
-
-(Entered <date>)
-
-Line one
-
-Line two
-
-(Entered <date>)
-
-document There should be another document now.
-
-(Entered <date>)
-
-File label:
-
-This is a test file label
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/command/filter.sh b/tests/command/filter.sh
deleted file mode 100755 (executable)
index df331da..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-#!/bin/sh
-
-# This program tests ....
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE << EOF
-data list notable /X 1-2.
-begin data.
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-end data.
-compute FILTER_$ = mod(x,2).
-
-filter by filter_$.
-list.
-filter off.
-list.
-compute filter_$ = 1 - filter_$.
-filter by filter_$.
-list.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="check results"
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Data List
-X,FILTER_$
-1,1.00
-3,1.00
-5,1.00
-7,1.00
-9,1.00
-
-Table: Data List
-X,FILTER_$
-1,1.00
-2,.00
-3,1.00
-4,.00
-5,1.00
-6,.00
-7,1.00
-8,.00
-9,1.00
-10,.00
-
-Table: Data List
-X,FILTER_$
-2,1.00
-4,1.00
-6,1.00
-8,1.00
-10,1.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/command/get-data-gnm.sh b/tests/command/get-data-gnm.sh
deleted file mode 100755 (executable)
index 9927364..0000000
+++ /dev/null
@@ -1,211 +0,0 @@
-#!/bin/sh
-
-# This program tests that pspp can read Gnumeric files
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="zip the gnm file and place it in the test directory"
-gzip -c $top_srcdir/tests/Book1.gnm.unzipped > $TEMPDIR/Book1.gnumeric
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="create program 1"
-cat > $TESTFILE <<EOF
-GET DATA /TYPE=gnm /FILE='$TEMPDIR/Book1.gnumeric'  /READNAMES=off /SHEET=name 'This' /CELLRANGE=range 'g9:i13' .
-DISPLAY VARIABLES.
-LIST.
-
-
-GET DATA /TYPE=gnm /FILE='$TEMPDIR/Book1.gnumeric'  /READNAMES=on /SHEET=name 'This' /CELLRANGE=range 'g8:i13' .
-DISPLAY VARIABLES.
-LIST.
-
-
-GET DATA /TYPE=gnm /FILE='$TEMPDIR/Book1.gnumeric' /SHEET=index 3.
-DISPLAY VARIABLES.
-LIST.
-
-* This sheet has no data in one of its variables
-GET DATA /TYPE=gnm /FILE='$TEMPDIR/Book1.gnumeric' /READNAMES=on /SHEET=index 5.
-DISPLAY VARIABLES.
-LIST.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program 1"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="compare output 1"
-diff -c $TEMPDIR/pspp.csv - <<EOF
-Variable,Description,,Position
-VAR001,Format: F8.2,,1
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-VAR002,Format: A8,,2
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 8,,
-VAR003,Format: F8.2,,3
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-
-Table: Data List
-VAR001,VAR002,VAR003
-.00,fred    ,20.00
-1.00,11      ,21.00
-2.00,twelve  ,22.00
-3.00,13      ,23.00
-4.00,14      ,24.00
-
-Variable,Description,,Position
-V1,Format: F8.2,,1
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-V2,Format: A8,,2
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 8,,
-VAR001,Format: F8.2,,3
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-
-Table: Data List
-V1,V2,VAR001
-.00,fred    ,20.00
-1.00,11      ,21.00
-2.00,twelve  ,22.00
-3.00,13      ,23.00
-4.00,14      ,24.00
-
-Variable,Description,,Position
-name,Format: A8,,1
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 8,,
-id,Format: F8.2,,2
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-height,Format: F8.2,,3
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-
-Table: Data List
-name,id,height
-fred    ,.00,23.40
-bert    ,1.00,.56
-charlie ,2.00,.  
-dick    ,3.00,-34.09
-
-Variable,Description,,Position
-vone,Format: F8.2,,1
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-vtwo,Format: F8.2,,2
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-vthree,Format: A8,,3
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 8,,
-v4,Format: F8.2,,4
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-
-Table: Data List
-vone,vtwo,vthree,v4
-1.00,3.00,,5.00
-2.00,4.00,,6.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-activity="create program 2"
-cat > $TESTFILE <<EOF
-* This sheet is empty
-GET DATA /TYPE=gnm /FILE='$TEMPDIR/Book1.gnumeric' /SHEET=name 'Empty'.
-
-
-* This sheet doesnt exist
-GET DATA /TYPE=gnm /FILE='$TEMPDIR/Book1.gnumeric' /SHEET=name 'foobarxx'.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program 2"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE > /dev/null
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare output 2"
-diff -c $TEMPDIR/pspp.csv - <<EOF
-"warning: Selected sheet or range of spreadsheet ""$TEMPDIR/Book1.gnumeric"" is empty."
-
-"warning: Selected sheet or range of spreadsheet ""$TEMPDIR/Book1.gnumeric"" is empty."
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/command/get-data-psql.sh b/tests/command/get-data-psql.sh
deleted file mode 100755 (executable)
index c71d23a..0000000
+++ /dev/null
@@ -1,438 +0,0 @@
-#!/bin/sh
-
-# This program tests the psql import feature.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-port=6543
-dbase=pspptest
-PG_CONFIG=${PG_CONFIG:=pg_config}
-pgpath=`$PG_CONFIG --bindir`
-
-cleanup()
-{
-    if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-    fi
-    PGHOST=$TEMPDIR $pgpath/pg_ctl -D $TEMPDIR/cluster  stop -W -o "-k $TEMPDIR -h ''"   > /dev/null 2>&1
-    cd /
-    rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-if [ ! -x $pgpath/initdb ] ; then
-  echo 'No Postgres server was found, so the postgres database interface cannot be tested.'  
-  cleanup;
-  exit 77;
-fi
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create cluster"
-$pgpath/initdb  -D $TEMPDIR/cluster -A trust > /dev/null
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run server"
-PGHOST=$TEMPDIR PGPORT=$port $pgpath/pg_ctl -D $TEMPDIR/cluster  start -w -o "-k $TEMPDIR -h ''" > /dev/null
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="create database"
-$pgpath/createdb  -h $TEMPDIR  -p $port $dbase > /dev/null 2> /dev/null
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="populate database"
-$pgpath/psql  -h $TEMPDIR -p $port  $dbase > /dev/null << EOF
-
-CREATE TABLE empty (a int, b date, c numeric(23, 4));
-
--- a largeish table to check big queries work ok.
-CREATE TABLE large (x int);
-INSERT INTO large  (select * from generate_series(1, 1000));
-
-
-CREATE TABLE thing (
- bool    bool                      ,
- bytea   bytea                     ,
- char    char                      ,
- int8    int8                      ,
- int2    int2                      ,
- int4    int4                      ,
- numeric       numeric(50,6)       ,
- text    text                      ,
- oid     oid                       ,
- float4  float4                    ,
- float8  float8                    ,
- money   money                     ,
- pbchar  bpchar                    ,
- varchar varchar                   ,
- date    date                      ,
- time    time                      ,
- timestamp     timestamp           ,
- timestamptz   timestamptz         ,
- interval      interval            ,
- timetz        timetz              
-);
-
-INSERT INTO thing VALUES (
- false,
- '0',
- 'a',
- '0',
- 0,
- 0,
- -256.098,
- 'this-long-text',
- 0,
- 0,
- 0,
- '0.01',
- 'a',
- 'A',
- '1-Jan-2000',
- '00:00',
- 'January 8 04:05:06 1999',
- 'January 8 04:05:06 1999 PST',
- '1 minutes',
- '10:09 UTC+4'
-);
-
-INSERT INTO thing VALUES (
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null,
- null
-);
-
-INSERT INTO thing VALUES (
- true,
- '1',
- 'b',
- '1',
- 1,
- 1,
- 65535.00001,
- 'that-long-text',
- 1,
- 1,
- 1,
- '1.23',
- 'b',
- 'B',
- '10-Jan-1963',
- '01:05:02',
- '10-Jan-1963 23:58:00',
- '10-Jan-1963 23:58:00 CET',
- '2 year 1 month 12 days 1 hours 3 minutes 4 seconds',
- '01:05:02 UTC-7'
-);
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="create program 1"
-cat > $TESTFILE <<EOF
-GET DATA /TYPE=psql 
-       /CONNECT="host=$TEMPDIR port=$port dbname=$dbase"
-       /UNENCRYPTED
-       /SQL="select * from thing".
-
-DISPLAY DICTIONARY.
-
-LIST.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program 1"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output 1"
-diff -c $TEMPDIR/pspp.csv - << 'EOF'
-Variable,Description,,Position
-bool,Format: F8.2,,1
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-bytea,Format: AHEX2,,2
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 1,,
-char,Format: A8,,3
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 8,,
-int8,Format: F8.2,,4
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-int2,Format: F8.2,,5
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-int4,Format: F8.2,,6
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-numeric,Format: E40.6,,7
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-text,Format: A16,,8
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 16,,
-oid,Format: F8.2,,9
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-float4,Format: F8.2,,10
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-float8,Format: F8.2,,11
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-money,Format: DOLLAR8.2,,12
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-pbchar,Format: A8,,13
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 8,,
-varchar,Format: A8,,14
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 8,,
-date,Format: DATE11,,15
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-time,Format: TIME11.0,,16
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-timestamp,Format: DATETIME22.0,,17
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-timestamptz,Format: DATETIME22.0,,18
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-interval,Format: DTIME13.0,,19
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-interval_months,Format: F3.0,,20
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-timetz,Format: TIME11.0,,21
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-timetz_zone,Format: F8.2,,22
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-
-Table: Data List
-bool,bytea,char,int8,int2,int4,numeric,text,oid,float4,float8,money,pbchar,varchar,date,time,timestamp,timestamptz,interval,interval_months,timetz,timetz_zone
-.00,30,a       ,.00,.00,.00,-2.560980E+002,this-long-text  ,.00,.00,.00,$.01,a       ,A       ,01-JAN-2000,0:00:00,08-JAN-1999 04:05:06,08-JAN-1999 12:05:06,0 00:01:00,0,10:09:00,4.00
-.  ,20,,.  ,.  ,.  ,.          ,,.  ,.  ,.  ,.  ,,,.,.,.,.,.,.,.,.  
-1.00,31,b       ,1.00,1.00,1.00,6.553500E+004,that-long-text  ,.00,1.00,1.00,$1.23,b       ,B       ,10-JAN-1963,1:05:02,10-JAN-1963 23:58:00,10-JAN-1963 22:58:00,12 01:03:04,25,1:05:02,-7.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-activity="create program 2"
-cat > $TESTFILE <<EOF
-GET DATA /TYPE=psql 
-       /CONNECT="host=$TEMPDIR port=$port dbname=$dbase"
-       /UNENCRYPTED
-       /SQL="select * from empty".
-
-DISPLAY DICTIONARY.
-
-LIST.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program 2"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output 2"
-diff -c $TEMPDIR/pspp.csv - << 'EOF'
-Variable,Description,,Position
-a,Format: F8.2,,1
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-b,Format: DATE11,,2
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-c,Format: E40.2,,3
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="create program 3"
-cat > $TESTFILE <<EOF
-GET DATA /TYPE=psql 
-       /CONNECT="host=$TEMPDIR port=$port dbname=$dbase"
-       /UNENCRYPTED
-       /BSIZE = 27
-       /SQL="select * from large".
-
-NUMERIC diff.
-COMPUTE diff = x - lag (x).
-
-TEMPORARY.
-SELECT IF (diff <> 1).
-LIST.
-
-TEMPORARY.
-N OF CASES 6.
-LIST.
-
-SORT CASES BY x (D).
-
-TEMPORARY.
-N OF CASES 6.
-LIST.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program 3"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output 3"
-diff -c $TEMPDIR/pspp.csv - << 'EOF'
-Table: Data List
-x,diff
-1.00,.  
-2.00,1.00
-3.00,1.00
-4.00,1.00
-5.00,1.00
-6.00,1.00
-
-Table: Data List
-x,diff
-1000.00,1.00
-999.00,1.00
-998.00,1.00
-997.00,1.00
-996.00,1.00
-995.00,1.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-
-# Check for a bug caused by having string variables in the database,
-# all of which are null.
-
-activity="populate database 4"
-$pgpath/psql  -h $TEMPDIR -p $port  $dbase > /dev/null << EOF
-
--- a table which has a text field containing only null, or zero
--- length entries.
-
-CREATE TABLE foo (int4  int4, text text);
-
-INSERT INTO foo VALUES ('12', '');
-
-INSERT INTO foo VALUES (null, '');
-
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-activity="create program 4"
-cat > $TESTFILE <<EOF
-GET DATA /TYPE=psql 
-       /CONNECT="host=$TEMPDIR port=$port dbname=$dbase"
-       /UNENCRYPTED
-       /SQL="select * from foo".
-
-DISPLAY DICTIONARY.
-
-LIST.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program 4"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-pass;
diff --git a/tests/command/get-data-txt-examples.sh b/tests/command/get-data-txt-examples.sh
deleted file mode 100755 (executable)
index 3900fa4..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-#!/bin/sh
-
-# This program tests the examples for GET DATA/TYPE=TXT given in the
-# PSPP manual.
-
-TEMPDIR=/tmp/pspp-tst-$$
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create passwd.data"
-cat > passwd.data <<'EOF'
-root:$1$nyeSP5gD$pDq/:0:0:,,,:/root:/bin/bash
-blp:$1$BrP/pFg4$g7OG:1000:1000:Ben Pfaff,,,:/home/blp:/bin/bash
-john:$1$JBuq/Fioq$g4A:1001:1001:John Darrington,,,:/home/john:/bin/bash
-jhs:$1$D3li4hPL$88X1:1002:1002:Jason Stover,,,:/home/jhs:/bin/csh
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="create cars.data"
-cat > cars.data <<'EOF'
-model   year    mileage price   type    age
-Civic   2002    29883   15900   Si      2
-Civic   2003    13415   15900   EX      1
-Civic   1992    107000  3800    n/a     12
-Accord  2002    26613   17900   EX      1
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="create pets.data"
-cat > pets.data <<'EOF'
-'Pet''s Name', "Age", "Color", "Date Received", "Price", "Height", "Type"
-, (Years), , , (Dollars), ,
-"Rover", 4.5, Brown, "12 Feb 2004", 80, '1''4"', "Dog"
-"Charlie", , Gold, "5 Apr 2007", 12.3, "3""", "Fish"
-"Molly", 2, Black, "12 Dec 2006", 25, '5"', "Cat"
-"Gilly", , White, "10 Apr 2007", 10, "3""", "Guinea Pig"
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="create test.pspp"
-cat > test.pspp <<'EOF'
-GET DATA /TYPE=TXT /FILE='passwd.data' /DELIMITERS=':'
-        /VARIABLES=username A20
-                   password A40
-                   uid F10
-                   gid F10
-                   gecos A40
-                   home A40
-                   shell A40.
-LIST.
-
-GET DATA /TYPE=TXT /FILE='cars.data' /DELIMITERS=' ' /FIRSTCASE=2
-        /VARIABLES=model A8
-                   year F4
-                   mileage F6
-                   price F5
-                   type A4
-                   age F2.
-LIST.
-
-GET DATA /TYPE=TXT /FILE='cars.data' /ARRANGEMENT=FIXED /FIRSTCASE=2
-        /VARIABLES=model 0-7 A
-                   year 8-15 F
-                   mileage 16-23 F
-                   price 24-31 F
-                   type 32-39 A
-                   age 40-47 F.
-LIST.
-
-GET DATA /TYPE=TXT /FILE='pets.data' /DELIMITERS=', ' /QUALIFIER='''"' /ESCAPE
-        /FIRSTCASE=3
-        /VARIABLES=name A10
-                   age F3.1
-                   color A5
-                   received EDATE10
-                   price F5.2
-                   height a5
-                   type a10.
-LIST.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run test"
-$SUPERVISOR $PSPP -o pspp.csv test.pspp
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare test results"
-diff -c $TEMPDIR/pspp.csv - <<'EOF'
-Table: Data List
-username,password,uid,gid,gecos,home,shell
-root                ,$1$nyeSP5gD$pDq/                        ,0,0,",,,                                     ",/root                                   ,/bin/bash                               
-blp                 ,$1$BrP/pFg4$g7OG                        ,1000,1000,"Ben Pfaff,,,                            ",/home/blp                               ,/bin/bash                               
-john                ,$1$JBuq/Fioq$g4A                        ,1001,1001,"John Darrington,,,                      ",/home/john                              ,/bin/bash                               
-jhs                 ,$1$D3li4hPL$88X1                        ,1002,1002,"Jason Stover,,,                         ",/home/jhs                               ,/bin/csh                                
-
-Table: Data List
-model,year,mileage,price,type,age
-Civic   ,2002,29883,15900,Si  ,2
-Civic   ,2003,13415,15900,EX  ,1
-Civic   ,1992,107000,3800,n/a ,12
-Accord  ,2002,26613,17900,EX  ,1
-
-Table: Data List
-model,year,mileage,price,type,age
-Civic   ,2002,29883,15900,Si      ,2
-Civic   ,2003,13415,15900,EX      ,1
-Civic   ,1992,107000,3800,n/a     ,12
-Accord  ,2002,26613,17900,EX      ,1
-
-Table: Data List
-name,age,color,received,price,height,type
-Rover     ,4.5,Brown,12.02.2004,80.00,"1'4"" ",Dog       
-Charlie   ,. ,Gold ,05.04.2007,12.30,"3""   ",Fish      
-Molly     ,2.0,Black,12.12.2006,25.00,"5""   ",Cat       
-Gilly     ,. ,White,10.04.2007,10.00,"3""   ",Guinea Pig
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-
-pass
diff --git a/tests/command/get-data-txt-importcases.sh b/tests/command/get-data-txt-importcases.sh
deleted file mode 100755 (executable)
index 82742ea..0000000
+++ /dev/null
@@ -1,355 +0,0 @@
-#!/bin/sh
-
-# This program tests the IMPORTCASES feature of GET DATA /TYPE=TXT.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-: ${PERL:=perl}
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create data file using Perl"
-$PERL > test.data <<'EOF'
-for ($i = 1; $i <= 100; $i++) {
-    printf "%02d\n", $i;
-}
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-# Create command file.
-activity="create program"
-cat > $TESTFILE << EOF
-get data /type=txt /file='test.data' /importcases=first 10 /variables x f8.0.
-list.
-
-get data /type=txt /file='test.data' /importcases=percent 1 /variables x f8.0.
-list.
-
-get data /type=txt /file='test.data' /importcases=percent 35 /variables x f8.0.
-list.
-
-get data /type=txt /file='test.data' /importcases=percent 95 /variables x f8.0.
-list.
-
-get data /type=txt /file='test.data' /importcases=percent 100 /variables x f8.0.
-list.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare output"
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Data List
-x
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-
-Table: Data List
-x
-1
-2
-
-Table: Data List
-x
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-
-Table: Data List
-x
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-
-Table: Data List
-x
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-98
-99
-100
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/command/get-data-txt.sh b/tests/command/get-data-txt.sh
deleted file mode 100755 (executable)
index bc56081..0000000
+++ /dev/null
@@ -1,211 +0,0 @@
-#!/bin/sh
-
-# This program tests features of GET DATA /TYPE=TXT input program that
-# it has in common with DATA LIST, using tests drawn from
-# data-list.sh.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-# Create command file.
-activity="create program"
-cat > $TESTFILE << EOF
-get data /type=txt /file=inline /delimiters="|X"
- /variables=A f7.2 B f7.2 C f7.2 D f7.2.
-begin data.
-1|23X45|2.03
-2X22|34|23|
-3|34|34X34
-end data.
-
-list.
-
-get data /type=txt /file=inline /delimiters=', ' /delcase=variables 4
- /firstcase=2 /variables=A f7.2 B f7.2 C f7.2 D f7.2.
-begin data.
-# This record is ignored.
-,1,2,3
-,4,,5
-6
-7,
-8 9
-0,1,,,
-,,,,
-2
-
-3
-4
-5
-end data.
-list.
-
-get data /type=txt /file=inline /delimiters='\t' /delcase=variables 4
- /firstcase=3 /variables=A f7.2 B f7.2 C f7.2 D f7.2.
-begin data.
-# These records
-# are skipped.
-1      2       3       4
-1      2       3       
-1      2               4
-1      2               
-1              3       4
-1              3       
-1                      4
-1                      
-       2       3       4
-       2       3       
-       2               4
-       2               
-               3       4
-               3       
-                       4
-                       
-end data.
-list.
-
-get data /type=txt /file=inline /arrangement=fixed /fixcase=3 /variables=
-       /1 start 0-19 adate
-       /2 end 0-19 adate
-       /3 count 0-2 f.
-begin data.
-07-22-2007
-10-06-2007
-321
-07-14-1789
-08-26-1789
-4
-01-01-1972
-12-31-1999
-682
-end data.
-list.
-
-get data /type=txt /file=inline /arrangement=fixed /fixcase=2 /variables=
-       /1 x 0 f 
-           y 1 f.
-begin data.
-12
-
-34
-
-56
-
-78
-
-90
-
-end data.
-list.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare output"
-diff -b  $TEMPDIR/pspp.csv - << EOF
-Table: Data List
-A,B,C,D
-1.00,23.00,45.00,2.03
-2.00,22.00,34.00,23.00
-3.00,34.00,34.00,34.00
-
-Table: Data List
-A,B,C,D
-.  ,1.00,2.00,3.00
-.  ,4.00,.  ,5.00
-6.00,7.00,.  ,8.00
-9.00,.00,1.00,.
-.  ,.  ,.  ,.
-.  ,.  ,.  ,2.00
-.  ,3.00,4.00,5.00
-
-Table: Data List
-A,B,C,D
-1.00,2.00,3.00,4.00
-1.00,2.00,3.00,.
-1.00,2.00,.  ,4.00
-1.00,2.00,.  ,.
-1.00,.  ,3.00,4.00
-1.00,.  ,3.00,.
-1.00,.  ,.  ,4.00
-1.00,.  ,.  ,.
-.  ,2.00,3.00,4.00
-.  ,2.00,3.00,.
-.  ,2.00,.  ,4.00
-.  ,2.00,.  ,.
-.  ,.  ,3.00,4.00
-.  ,.  ,3.00,.
-.  ,.  ,.  ,4.00
-.  ,.  ,.  ,.
-
-Table: Data List
-start,end,count
-07/22/2007,10/06/2007,321
-07/14/1789,08/26/1789,4
-01/01/1972,12/31/1999,682
-
-Table: Data List
-x,y
-1,2
-3,4
-5,6
-7,8
-9,0
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/command/import-export.sh b/tests/command/import-export.sh
deleted file mode 100755 (executable)
index e63eb2f..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/bin/sh
-
-# This program tests the IMPORT and EXPORT commands
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-DATA LIST LIST NOTABLE /X Y.
-BEGIN DATA.
-1 2
-3 .
-5 6
-END DATA.
-
-EXPORT /OUTFILE='wiz.por'.
-IMPORT /FILE='wiz.por'.
-
-LIST.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output"
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Data List
-X,Y
-1.00,2.00
-3.00,.  
-5.00,6.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/command/input-program.sh b/tests/command/input-program.sh
deleted file mode 100755 (executable)
index dd881e7..0000000
+++ /dev/null
@@ -1,309 +0,0 @@
-#!/bin/sh
-
-# This program tests the INPUT PROGRAM command, specifically all of
-# the examples given in the user manual.
-
-TEMPDIR=/tmp/pspp-tst-$$
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create a.data"
-cat > a.data <<EOF
-1
-2
-3
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="create b.data"
-cat > b.data <<EOF
-4
-5
-6
-7
-8
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="create test1.pspp"
-cat > test1.pspp <<EOF
-INPUT PROGRAM.
-        DATA LIST NOTABLE FILE='a.data'/X 1-10.
-        DATA LIST NOTABLE FILE='b.data'/Y 1-10.
-END INPUT PROGRAM.
-LIST.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run test1"
-$SUPERVISOR $PSPP -o pspp.csv test1.pspp
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare test1 results"
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Data List
-X,Y
-1,4
-2,5
-3,6
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="create test2.pspp"
-cat > test2.pspp <<EOF
-INPUT PROGRAM.
-        NUMERIC #A #B.
-
-        DO IF NOT #A.
-                DATA LIST NOTABLE END=#A FILE='a.data'/X 1-10.
-        END IF.
-        DO IF NOT #B.
-                DATA LIST NOTABLE END=#B FILE='b.data'/Y 1-10.
-        END IF.
-        DO IF #A AND #B.
-                END FILE.
-        END IF.
-        END CASE.
-END INPUT PROGRAM.
-LIST.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run test2"
-$SUPERVISOR $PSPP -o pspp.csv test2.pspp
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare test2 results"
-perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.csv
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Data List
-X,Y
-1,4
-2,5
-3,6
-.,7
-.,8
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="create test3.pspp"
-cat > test3.pspp <<EOF
-INPUT PROGRAM.
-        NUMERIC #A #B.
-
-        DO IF #A.
-                DATA LIST NOTABLE END=#B FILE='b.data'/X 1-10.
-                DO IF #B.
-                        END FILE.
-                ELSE.
-                        END CASE.
-                END IF.
-        ELSE.
-                DATA LIST NOTABLE END=#A FILE='a.data'/X 1-10.
-                DO IF NOT #A.
-                        END CASE.
-                END IF.
-        END IF.
-END INPUT PROGRAM.
-LIST.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run test3"
-$SUPERVISOR $PSPP -o pspp.csv test3.pspp
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare test3 results"
-perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.csv
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Data List
-X
-1
-2
-3
-4
-5
-6
-7
-8
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="create test4.pspp"
-cat > test4.pspp <<EOF
-INPUT PROGRAM.
-        NUMERIC #EOF.
-
-        LOOP IF NOT #EOF.
-                DATA LIST NOTABLE END=#EOF FILE='a.data'/X 1-10.
-                DO IF NOT #EOF.
-                        END CASE.
-                END IF.
-        END LOOP.
-
-        COMPUTE #EOF = 0.
-        LOOP IF NOT #EOF.
-                DATA LIST NOTABLE END=#EOF FILE='b.data'/X 1-10.
-                DO IF NOT #EOF.
-                        END CASE.
-                END IF.
-        END LOOP.
-
-        END FILE.
-END INPUT PROGRAM.
-LIST.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run test4"
-$SUPERVISOR $PSPP -o pspp.csv test4.pspp
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare test4 results"
-perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.csv
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Data List
-X
-1
-2
-3
-4
-5
-6
-7
-8
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-# This example differs slightly from the one in the manual in that
-# it doesn't generate random variates.  There's already a test that
-# checks that random variates are predictable, so we don't need
-# another.
-activity="create test5.pspp"
-cat > test5.pspp <<EOF
-INPUT PROGRAM.
-        LOOP #I=1 TO 50.
-                COMPUTE X=#I * 3.
-                END CASE.
-        END LOOP.
-        END FILE.
-END INPUT PROGRAM.
-LIST/FORMAT=NUMBERED.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run test5"
-$SUPERVISOR $PSPP -o pspp.csv test5.pspp
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare test5 results"
-perl -pi -e 's/^\s*$//g' $TEMPDIR/pspp.csv
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Data List
-Case Number,X
-1,3.00
-2,6.00
-3,9.00
-4,12.00
-5,15.00
-6,18.00
-7,21.00
-8,24.00
-9,27.00
-10,30.00
-11,33.00
-12,36.00
-13,39.00
-14,42.00
-15,45.00
-16,48.00
-17,51.00
-18,54.00
-19,57.00
-20,60.00
-21,63.00
-22,66.00
-23,69.00
-24,72.00
-25,75.00
-26,78.00
-27,81.00
-28,84.00
-29,87.00
-30,90.00
-31,93.00
-32,96.00
-33,99.00
-34,102.00
-35,105.00
-36,108.00
-37,111.00
-38,114.00
-39,117.00
-40,120.00
-41,123.00
-42,126.00
-43,129.00
-44,132.00
-45,135.00
-46,138.00
-47,141.00
-48,144.00
-49,147.00
-50,150.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass
diff --git a/tests/command/insert.sh b/tests/command/insert.sh
deleted file mode 100755 (executable)
index 4bcb96f..0000000
+++ /dev/null
@@ -1,274 +0,0 @@
-#!/bin/sh
-
-# This program tests the INSERT command
-
-BASETEMPDIR=/tmp/pspp-tst-$$
-TEMPDIR=$BASETEMPDIR/link
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $BASETEMPDIR"
-       return ; 
-     fi
-     cd /
-     rm -rf $BASETEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $BASETEMPDIR/target
-
-ln -s $BASETEMPDIR/target $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create wrapper 1"
-cat <<EOF > $TESTFILE
-INSERT 
-  FILE='$TEMPDIR/foo.sps'
-  SYNTAX=INTERACTIVE
-  .
-
-
-LIST.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-#The following syntax intentionally omits periods from some lines
-#It's an example of "batch" syntax
-activity="create insert"
-cat <<EOF > $TEMPDIR/foo.sps
-input program.
-+  loop #i = 1 to 100.
-+    compute z = #i
-+    end case.
-+  end loop
-end file.
-end input program.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-#This command should fail
-activity="run program 1"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE > /dev/null
-if [ $? -eq 0 ] ; then fail ; fi
-
-
-activity="create wrapper 2"
-cat <<EOF > $TESTFILE
-INSERT 
-  FILE='$TEMPDIR/foo.sps'
-  SYNTAX=BATCH
-  .
-
-
-LIST.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program 2"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-# Now test the CD subcommand
-
-activity="mkdir 1"
-mkdir $TEMPDIR/Dir1
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="create wrapper 3"
-cat <<EOF > $TESTFILE
-INSERT 
-  FILE='$TEMPDIR/Dir1/foo.sps'
-  CD=NO
-  .
-
-
-LIST.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="create wrapper 4"
-cat <<EOF > $TEMPDIR/Dir1/foo.sps
-INSERT 
-  FILE='bar.sps'
-  CD=NO
-  .
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="create wrapper 5"
-cat <<EOF > $TEMPDIR/Dir1/bar.sps
-DATA LIST LIST /x *.
-BEGIN DATA.
-1
-2
-3
-END DATA.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-# This command should fail
-activity="run program 3"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE > /dev/null
-if [ $? -eq 0 ] ; then fail ; fi
-
-activity="create wrapper 6"
-cat <<EOF > $TESTFILE
-INSERT 
-  FILE='$TEMPDIR/Dir1/foo.sps'
-  CD=YES
-  .
-
-LIST.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program 4"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-# Now test the ERROR= feature
-
-activity="create wrapper 7"
-cat <<EOF > $TESTFILE
-INSERT 
-  FILE='$TEMPDIR/foo.sps'
-  ERROR=STOP.
-  .
-
-LIST.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="create included file"
-cat <<EOF > $TEMPDIR/foo.sps
-DATA LIST NOTABLE LIST /x *.
-BEGIN DATA.
-1
-2
-3
-END DATA.
-
-* The following line is erroneous
-
-DISPLAY AKSDJ.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program 5"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE > /dev/null
-if [ $? -ne 1 ] ; then no_result ; fi
-
-activity="examine output 1"
-diff -c $TEMPDIR/pspp.csv - <<EOF
-$TEMPDIR/foo.sps:10: error: DISPLAY: AKSDJ is not a variable name.
-
-warning: Error encountered while ERROR=STOP is effective.
-
-$TEMPDIR/foo.sps:10: error: Stopping syntax file processing here to avoid a cascade of dependent command failures.
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-activity="create wrapper 8"
-cat <<EOF > $TESTFILE
-INSERT 
-  FILE='$TEMPDIR/foo.sps'
-  ERROR=CONTINUE.
-  .
-
-LIST.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program 6"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE > /dev/null
-if [ $? -ne 1 ] ; then no_result ; fi
-
-activity="examine output 2"
-diff $TEMPDIR/pspp.csv - <<EOF
-$TEMPDIR/foo.sps:10: error: DISPLAY: AKSDJ is not a variable name.
-
-Table: Data List
-x
-1.00
-2.00
-3.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-# Test for regression against bug #24569 in which PSPP crashed
-# upon attempt to insert a nonexistent file.
-activity="create wrapper 9"
-cat <<EOF > $TESTFILE
-INSERT 
-  FILE='$TEMPDIR/nonexistent'
-  ERROR=CONTINUE.
-  .
-
-LIST.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-#This command should fail
-activity="run program 7"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE > /dev/null
-if [ $? -eq 0 ] ; then no_result ; fi
-
-pass;
diff --git a/tests/command/lag.sh b/tests/command/lag.sh
deleted file mode 100755 (executable)
index 06d8588..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/bin/sh
-
-# This program tests the LAG function
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TEMPDIR/lag.stat <<EOF
-data list /W 1.
-begin data.
-1
-2
-3
-4
-5
-end data.
-
-compute X=lag(w,1).
-compute Y=lag(x).
-compute Z=lag(w,2).
-list.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TEMPDIR/lag.stat
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare result"
-diff -c $TEMPDIR/pspp.csv - <<EOF
-Table: Reading 1 record from INLINE.
-Variable,Record,Columns,Format
-W,1,1-  1,F1.0
-
-Table: Data List
-W,X,Y,Z
-1,.  ,.  ,.  
-2,1.00,.  ,.  
-3,2.00,1.00,1.00
-4,3.00,2.00,2.00
-5,4.00,3.00,3.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/command/line-ends.sh b/tests/command/line-ends.sh
deleted file mode 100755 (executable)
index 7649962..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/bin/sh
-
-# This program tests that DATA LIST can be used to read input files
-# with varying line ends (LF only, CR LF, CR only).
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then
-       echo "NOT cleaning $TEMPDIR"
-       return ;
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-# Create command file.
-activity="create program"
-cat > $TESTFILE << EOF
-data list list notable file='input.txt'/a b c.
-list.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="create input.txt"
-printf '1 2 3\n4 5 6\r\n7\r8\r9\r\n10 11 12\n13 14 15 \r\n16\r\r17\r18\n' > input.txt
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-# Make sure that input.txt actually received the data that we expect.
-# It might not have, if we're running on a system that translates \n
-# into some other sequence.
-activity="check input.txt"
-cksum input.txt > input.cksum
-diff input.cksum - <<EOF
-1732021750 50 input.txt
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-activity="compare output"
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Data List
-a,b,c
-1.00,2.00,3.00
-4.00,5.00,6.00
-7.00,8.00,9.00
-10.00,11.00,12.00
-13.00,14.00,15.00
-16.00,17.00,18.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/command/list.sh b/tests/command/list.sh
deleted file mode 100755 (executable)
index 3bbcf22..0000000
+++ /dev/null
@@ -1,261 +0,0 @@
-#!/bin/sh
-
-# This program tests the LIST command.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-
-activity="create program"
-cat > $TESTFILE << EOF
-*** Single lines.
-data list file='$top_srcdir/tests/weighting.data'/AVAR 1-5 BVAR 6-10.
-weight by BVAR.
-list.
-*list /cases=from 5 to 20 by 2 /format numbered.
-list /format numbered.
-
-*** Multiple lines.
-data list file='$top_srcdir/tests/list.data' notable /X000 to X126 1-127.
-*list /cases=from 1 to 25 by 5 /format numbered.
-list x000 to x030.
-list /cases=from 1 to 25.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="compare results"
-diff -c $TEMPDIR/pspp.csv - <<EOF
-"Table: Reading 1 record from ""$top_srcdir/tests/weighting.data""."
-Variable,Record,Columns,Format
-AVAR,1,1-  5,F5.0
-BVAR,1,6- 10,F5.0
-
-Table: Data List
-AVAR,BVAR
-18,1
-19,7
-20,26
-21,76
-22,57
-23,58
-24,38
-25,38
-26,30
-27,21
-28,23
-29,24
-30,23
-31,14
-32,21
-33,21
-34,14
-35,14
-36,17
-37,11
-38,16
-39,14
-40,15
-41,14
-42,14
-43,8
-44,15
-45,10
-46,12
-47,13
-48,13
-49,5
-50,5
-51,3
-52,7
-53,6
-54,2
-55,2
-56,2
-57,3
-58,1
-59,3
-61,1
-62,3
-63,1
-64,1
-65,2
-70,1
-78,1
-79,1
-80,1
-94,1
-
-Table: Data List
-Case Number,AVAR,BVAR
-1,18,1
-2,19,7
-3,20,26
-4,21,76
-5,22,57
-6,23,58
-7,24,38
-8,25,38
-9,26,30
-10,27,21
-11,28,23
-12,29,24
-13,30,23
-14,31,14
-15,32,21
-16,33,21
-17,34,14
-18,35,14
-19,36,17
-20,37,11
-21,38,16
-22,39,14
-23,40,15
-24,41,14
-25,42,14
-26,43,8
-27,44,15
-28,45,10
-29,46,12
-30,47,13
-31,48,13
-32,49,5
-33,50,5
-34,51,3
-35,52,7
-36,53,6
-37,54,2
-38,55,2
-39,56,2
-40,57,3
-41,58,1
-42,59,3
-43,61,1
-44,62,3
-45,63,1
-46,64,1
-47,65,2
-48,70,1
-49,78,1
-50,79,1
-51,80,1
-52,94,1
-
-Table: Data List
-X000,X001,X002,X003,X004,X005,X006,X007,X008,X009,X010,X011,X012,X013,X014,X015,X016,X017,X018,X019,X020,X021,X022,X023,X024,X025,X026,X027,X028,X029,X030
-7,6,7,5,3,2,4,6,6,3,4,8,5,1,3,7,8,9,0,7,3,4,8,3,1,0,6,4,0,9,1
-8,8,8,6,9,3,0,8,9,4,2,4,1,7,7,5,4,2,3,7,8,3,3,4,1,8,6,7,6,0,3
-4,9,2,6,1,1,5,0,7,9,0,9,1,8,7,1,5,2,7,2,6,4,2,7,8,5,2,2,4,2,4
-8,1,9,8,4,8,8,9,2,0,2,3,1,9,5,8,7,5,8,7,9,3,3,2,0,0,1,4,9,1,7
-4,5,2,7,7,7,8,9,8,7,0,9,5,6,3,7,2,9,8,4,5,5,4,1,5,1,6,6,5,0,6
-2,3,9,9,6,1,9,6,7,0,7,7,7,3,2,7,6,0,6,6,3,5,2,5,1,1,5,0,7,3,5
-1,6,6,7,7,9,9,6,9,1,2,6,6,4,7,6,9,9,4,4,0,4,7,4,3,9,8,9,2,3,7
-1,6,2,3,9,1,4,6,8,4,1,9,6,8,9,2,3,1,6,8,4,7,1,1,7,0,1,1,5,4,3
-3,6,8,1,3,9,3,2,3,3,7,6,0,1,2,9,4,8,9,1,1,3,1,2,1,8,2,9,5,9,9
-6,4,1,8,7,3,1,1,4,5,4,3,1,0,8,2,9,9,4,8,5,6,8,1,6,5,0,5,0,3,5
-2,2,8,4,5,3,4,0,8,3,7,4,9,5,0,7,7,1,6,6,5,1,0,8,6,4,2,9,0,7,1
-6,6,1,7,6,3,7,4,5,2,0,4,0,7,4,9,1,8,1,3,4,9,9,1,1,7,8,8,9,7,4
-9,8,6,5,7,1,3,5,8,2,6,8,6,6,1,2,0,0,7,2,2,2,0,1,0,7,8,2,6,8,2
-1,1,6,3,2,3,4,5,3,7,7,6,2,2,0,0,8,0,7,7,9,4,9,6,0,2,5,2,4,4,7
-9,9,8,1,6,6,3,6,3,7,5,6,3,8,3,3,3,0,0,0,3,5,4,2,6,1,3,6,7,0,2
-6,8,2,1,5,6,7,7,4,6,0,5,9,1,0,3,5,6,5,0,0,5,7,3,8,9,6,0,2,4,8
-0,9,5,2,7,7,4,9,5,2,6,7,5,2,6,1,5,4,5,9,5,5,2,8,0,8,0,5,3,4,0
-1,6,4,1,7,9,0,1,9,3,2,1,1,8,6,1,5,0,9,1,0,6,8,3,9,2,1,7,1,1,9
-3,7,6,3,1,8,2,8,7,1,5,8,0,1,7,4,7,8,9,3,2,8,8,3,7,1,9,4,9,6,8
-2,0,4,6,8,2,0,7,5,3,0,6,2,2,2,4,0,4,5,5,3,5,8,9,0,9,3,2,7,2,1
-7,9,7,0,6,2,0,0,9,1,9,4,0,3,8,5,9,2,8,7,6,2,6,3,2,7,6,4,6,1,8
-4,8,4,1,1,7,6,0,1,7,0,2,5,1,0,5,7,7,4,5,0,6,5,0,0,8,9,6,2,5,2
-6,9,4,9,9,7,3,7,9,7,9,9,0,9,5,6,2,9,1,0,7,2,1,5,8,1,2,3,8,8,7
-1,3,9,6,2,8,5,9,9,6,5,3,5,4,8,9,4,4,0,8,1,6,1,2,4,7,0,0,6,8,2
-0,7,0,0,4,8,9,5,2,4,3,5,8,2,0,8,3,5,8,6,9,7,3,4,9,4,5,0,0,3,6
-
-Table: Data List
-X000,X001,X002,X003,X004,X005,X006,X007,X008,X009,X010,X011,X012,X013,X014,X015,X016,X017,X018,X019,X020,X021,X022,X023,X024,X025,X026,X027,X028,X029,X030,X031,X032,X033,X034,X035,X036,X037,X038,X039,X040,X041,X042,X043,X044,X045,X046,X047,X048,X049,X050,X051,X052,X053,X054,X055,X056,X057,X058,X059,X060,X061,X062,X063,X064,X065,X066,X067,X068,X069,X070,X071,X072,X073,X074,X075,X076,X077,X078,X079,X080,X081,X082,X083,X084,X085,X086,X087,X088,X089,X090,X091,X092,X093,X094,X095,X096,X097,X098,X099,X100,X101,X102,X103,X104,X105,X106,X107,X108,X109,X110,X111,X112,X113,X114,X115,X116,X117,X118,X119,X120,X121,X122,X123,X124,X125,X126
-7,6,7,5,3,2,4,6,6,3,4,8,5,1,3,7,8,9,0,7,3,4,8,3,1,0,6,4,0,9,1,7,5,8,5,9,2,9,5,8,4,2,8,1,5,2,9,5,1,1,3,7,5,3,2,6,5,9,4,1,8,7,5,2,3,3,8,1,5,7,6,7,5,3,2,4,6,6,3,4,8,5,1,3,7,8,9,0,7,3,4,8,3,1,0,6,4,0,9,1,7,5,8,5,9,2,9,5,8,4,2,8,1,5,2,9,5,1,1,3,7,5,3,2,6,5,8
-8,8,8,6,9,3,0,8,9,4,2,4,1,7,7,5,4,2,3,7,8,3,3,4,1,8,6,7,6,0,3,6,8,1,4,7,5,5,8,6,9,0,0,2,7,9,7,3,1,0,2,2,6,6,8,7,4,1,6,8,4,5,5,5,0,6,7,1,4,8,8,8,6,9,3,0,8,9,4,2,4,1,7,7,5,4,2,3,7,8,3,3,4,1,8,6,7,6,0,3,6,8,1,4,7,5,5,8,6,9,0,0,2,7,9,7,3,1,0,2,2,6,6,8,7,4,6
-4,9,2,6,1,1,5,0,7,9,0,9,1,8,7,1,5,2,7,2,6,4,2,7,8,5,2,2,4,2,4,8,3,8,5,6,2,0,6,9,9,8,0,2,7,8,3,4,2,1,8,8,7,2,5,5,8,6,2,6,0,0,4,1,5,2,6,0,2,4,9,2,6,1,1,5,0,7,9,0,9,1,8,7,1,5,2,7,2,6,4,2,7,8,5,2,2,4,2,4,8,3,8,5,6,2,0,6,9,9,8,0,2,7,8,3,4,2,1,8,8,7,2,5,5,8,9
-8,1,9,8,4,8,8,9,2,0,2,3,1,9,5,8,7,5,8,7,9,3,3,2,0,0,1,4,9,1,7,7,3,6,8,9,6,8,8,0,1,3,3,2,2,1,0,1,6,0,8,8,4,4,0,6,4,0,2,3,6,2,6,5,7,2,7,0,0,8,1,9,8,4,8,8,9,2,0,2,3,1,9,5,8,7,5,8,7,9,3,3,2,0,0,1,4,9,1,7,7,3,6,8,9,6,8,8,0,1,3,3,2,2,1,0,1,6,0,8,8,4,4,0,6,4,1
-4,5,2,7,7,7,8,9,8,7,0,9,5,6,3,7,2,9,8,4,5,5,4,1,5,1,6,6,5,0,6,9,5,0,6,4,7,7,4,6,6,4,5,1,2,0,8,4,9,8,8,7,6,4,0,1,6,0,6,5,9,5,0,5,3,9,1,4,9,4,5,2,7,7,7,8,9,8,7,0,9,5,6,3,7,2,9,8,4,5,5,4,1,5,1,6,6,5,0,6,9,5,0,6,4,7,7,4,6,6,4,5,1,2,0,8,4,9,8,8,7,6,4,0,1,6,6
-2,3,9,9,6,1,9,6,7,0,7,7,7,3,2,7,6,0,6,6,3,5,2,5,1,1,5,0,7,3,5,1,8,6,0,5,9,1,1,8,1,8,6,9,1,0,8,8,0,4,6,5,1,9,0,3,2,8,1,9,6,2,4,6,8,9,6,7,5,2,3,9,9,6,1,9,6,7,0,7,7,7,3,2,7,6,0,6,6,3,5,2,5,1,1,5,0,7,3,5,1,8,6,0,5,9,1,1,8,1,8,6,9,1,0,8,8,0,4,6,5,1,9,0,3,2,5
-1,6,6,7,7,9,9,6,9,1,2,6,6,4,7,6,9,9,4,4,0,4,7,4,3,9,8,9,2,3,7,3,1,5,3,9,4,2,7,6,4,1,2,0,7,9,7,6,0,3,1,0,7,0,6,3,9,5,1,0,3,2,9,9,4,4,1,5,7,1,6,6,7,7,9,9,6,9,1,2,6,6,4,7,6,9,9,4,4,0,4,7,4,3,9,8,9,2,3,7,3,1,5,3,9,4,2,7,6,4,1,2,0,7,9,7,6,0,3,1,0,7,0,6,3,9,4
-1,6,2,3,9,1,4,6,8,4,1,9,6,8,9,2,3,1,6,8,4,7,1,1,7,0,1,1,5,4,3,6,2,7,1,1,9,5,9,7,9,0,8,5,9,9,7,4,0,5,2,5,2,4,6,1,6,4,1,9,1,5,0,8,0,1,3,2,0,1,6,2,3,9,1,4,6,8,4,1,9,6,8,9,2,3,1,6,8,4,7,1,1,7,0,1,1,5,4,3,6,2,7,1,1,9,5,9,7,9,0,8,5,9,9,7,4,0,5,2,5,2,4,6,1,6,8
-3,6,8,1,3,9,3,2,3,3,7,6,0,1,2,9,4,8,9,1,1,3,1,2,1,8,2,9,5,9,9,8,5,7,2,8,8,5,0,1,0,9,9,1,2,3,2,8,3,1,9,6,6,2,8,7,1,4,1,4,8,9,6,5,0,8,4,5,7,3,6,8,1,3,9,3,2,3,3,7,6,0,1,2,9,4,8,9,1,1,3,1,2,1,8,2,9,5,9,9,8,5,7,2,8,8,5,0,1,0,9,9,1,2,3,2,8,3,1,9,6,6,2,8,7,1,0
-6,4,1,8,7,3,1,1,4,5,4,3,1,0,8,2,9,9,4,8,5,6,8,1,6,5,0,5,0,3,5,9,9,7,9,8,2,0,9,6,7,3,2,1,5,0,3,5,9,7,5,4,5,4,7,2,9,9,6,1,8,4,8,7,8,8,5,3,0,6,4,1,8,7,3,1,1,4,5,4,3,1,0,8,2,9,9,4,8,5,6,8,1,6,5,0,5,0,3,5,9,9,7,9,8,2,0,9,6,7,3,2,1,5,0,3,5,9,7,5,4,5,4,7,2,9,7
-2,2,8,4,5,3,4,0,8,3,7,4,9,5,0,7,7,1,6,6,5,1,0,8,6,4,2,9,0,7,1,2,1,9,7,6,5,1,6,3,7,5,9,8,2,9,7,9,3,4,7,8,5,8,7,1,4,7,2,3,4,3,4,1,2,3,4,4,2,2,2,8,4,5,3,4,0,8,3,7,4,9,5,0,7,7,1,6,6,5,1,0,8,6,4,2,9,0,7,1,2,1,9,7,6,5,1,6,3,7,5,9,8,2,9,7,9,3,4,7,8,5,8,7,1,4,9
-6,6,1,7,6,3,7,4,5,2,0,4,0,7,4,9,1,8,1,3,4,9,9,1,1,7,8,8,9,7,4,7,5,7,5,2,2,4,6,9,6,6,4,8,3,8,8,6,7,9,0,1,0,1,4,1,8,2,4,8,6,6,9,7,5,7,2,9,5,6,6,1,7,6,3,7,4,5,2,0,4,0,7,4,9,1,8,1,3,4,9,9,1,1,7,8,8,9,7,4,7,5,7,5,2,2,4,6,9,6,6,4,8,3,8,8,6,7,9,0,1,0,1,4,1,8,5
-9,8,6,5,7,1,3,5,8,2,6,8,6,6,1,2,0,0,7,2,2,2,0,1,0,7,8,2,6,8,2,7,7,8,2,6,9,8,3,9,2,9,9,8,7,1,3,9,3,0,1,5,4,3,6,4,0,2,0,2,6,9,8,5,4,0,9,0,8,9,8,6,5,7,1,3,5,8,2,6,8,6,6,1,2,0,0,7,2,2,2,0,1,0,7,8,2,6,8,2,7,7,8,2,6,9,8,3,9,2,9,9,8,7,1,3,9,3,0,1,5,4,3,6,4,0,6
-1,1,6,3,2,3,4,5,3,7,7,6,2,2,0,0,8,0,7,7,9,4,9,6,0,2,5,2,4,4,7,7,7,3,0,9,8,4,4,3,3,4,0,7,6,2,8,4,4,7,3,4,3,5,0,3,7,8,7,5,0,4,4,0,9,0,2,9,5,1,1,6,3,2,3,4,5,3,7,7,6,2,2,0,0,8,0,7,7,9,4,9,6,0,2,5,2,4,4,7,7,7,3,0,9,8,4,4,3,3,4,0,7,6,2,8,4,4,7,3,4,3,5,0,3,7,7
-9,9,8,1,6,6,3,6,3,7,5,6,3,8,3,3,3,0,0,0,3,5,4,2,6,1,3,6,7,0,2,8,9,3,9,8,9,4,6,4,1,2,3,5,2,6,0,8,7,3,8,0,8,3,4,4,4,5,1,3,2,8,0,7,9,0,5,5,4,9,9,8,1,6,6,3,6,3,7,5,6,3,8,3,3,3,0,0,0,3,5,4,2,6,1,3,6,7,0,2,8,9,3,9,8,9,4,6,4,1,2,3,5,2,6,0,8,7,3,8,0,8,3,4,4,4,9
-6,8,2,1,5,6,7,7,4,6,0,5,9,1,0,3,5,6,5,0,0,5,7,3,8,9,6,0,2,4,8,8,4,2,1,9,8,9,9,5,5,9,0,6,0,2,2,8,8,7,0,0,4,7,6,2,8,2,3,0,7,1,1,0,2,9,1,6,8,6,8,2,1,5,6,7,7,4,6,0,5,9,1,0,3,5,6,5,0,0,5,7,3,8,9,6,0,2,4,8,8,4,2,1,9,8,9,9,5,5,9,0,6,0,2,2,8,8,7,0,0,4,7,6,2,8,4
-0,9,5,2,7,7,4,9,5,2,6,7,5,2,6,1,5,4,5,9,5,5,2,8,0,8,0,5,3,4,0,3,5,7,5,4,5,9,4,2,4,0,0,1,5,6,2,0,1,9,1,8,6,3,8,7,4,2,0,8,2,1,3,4,2,4,3,3,3,0,9,5,2,7,7,4,9,5,2,6,7,5,2,6,1,5,4,5,9,5,5,2,8,0,8,0,5,3,4,0,3,5,7,5,4,5,9,4,2,4,0,0,1,5,6,2,0,1,9,1,8,6,3,8,7,4,8
-1,6,4,1,7,9,0,1,9,3,2,1,1,8,6,1,5,0,9,1,0,6,8,3,9,2,1,7,1,1,9,4,9,6,8,6,5,8,7,7,1,1,8,4,0,6,5,7,9,6,1,9,4,9,2,6,1,4,7,4,4,1,1,4,8,6,9,0,2,1,6,4,1,7,9,0,1,9,3,2,1,1,8,6,1,5,0,9,1,0,6,8,3,9,2,1,7,1,1,9,4,9,6,8,6,5,8,7,7,1,1,8,4,0,6,5,7,9,6,1,9,4,9,2,6,1,5
-3,7,6,3,1,8,2,8,7,1,5,8,0,1,7,4,7,8,9,3,2,8,8,3,7,1,9,4,9,6,8,5,3,6,8,7,6,0,7,4,3,4,4,5,6,2,9,3,2,1,8,7,9,6,0,8,9,3,2,7,5,8,8,1,6,5,6,4,4,3,7,6,3,1,8,2,8,7,1,5,8,0,1,7,4,7,8,9,3,2,8,8,3,7,1,9,4,9,6,8,5,3,6,8,7,6,0,7,4,3,4,4,5,6,2,9,3,2,1,8,7,9,6,0,8,9,1
-2,0,4,6,8,2,0,7,5,3,0,6,2,2,2,4,0,4,5,5,3,5,8,9,0,9,3,2,7,2,1,1,3,7,8,1,9,8,0,7,3,3,3,7,5,7,1,7,1,9,2,6,4,2,5,4,4,2,9,7,3,4,3,9,4,2,6,7,9,2,0,4,6,8,2,0,7,5,3,0,6,2,2,2,4,0,4,5,5,3,5,8,9,0,9,3,2,7,2,1,1,3,7,8,1,9,8,0,7,3,3,3,7,5,7,1,7,1,9,2,6,4,2,5,4,4,1
-7,9,7,0,6,2,0,0,9,1,9,4,0,3,8,5,9,2,8,7,6,2,6,3,2,7,6,4,6,1,8,5,2,5,8,9,9,8,9,0,1,8,6,1,3,5,9,2,9,7,9,7,1,7,0,4,5,6,3,3,9,5,8,9,3,1,8,3,4,7,9,7,0,6,2,0,0,9,1,9,4,0,3,8,5,9,2,8,7,6,2,6,3,2,7,6,4,6,1,8,5,2,5,8,9,9,8,9,0,1,8,6,1,3,5,9,2,9,7,9,7,1,7,0,4,5,8
-4,8,4,1,1,7,6,0,1,7,0,2,5,1,0,5,7,7,4,5,0,6,5,0,0,8,9,6,2,5,2,7,5,7,0,7,6,6,9,0,3,9,2,0,3,4,6,0,1,2,8,3,8,3,4,0,4,8,3,0,8,8,4,3,6,3,2,6,4,4,8,4,1,1,7,6,0,1,7,0,2,5,1,0,5,7,7,4,5,0,6,5,0,0,8,9,6,2,5,2,7,5,7,0,7,6,6,9,0,3,9,2,0,3,4,6,0,1,2,8,3,8,3,4,0,4,5
-6,9,4,9,9,7,3,7,9,7,9,9,0,9,5,6,2,9,1,0,7,2,1,5,8,1,2,3,8,8,7,4,7,3,5,8,2,9,6,2,6,7,3,8,7,8,5,1,9,6,1,9,8,3,4,8,6,8,8,0,1,5,6,8,5,3,6,3,2,6,9,4,9,9,7,3,7,9,7,9,9,0,9,5,6,2,9,1,0,7,2,1,5,8,1,2,3,8,8,7,4,7,3,5,8,2,9,6,2,6,7,3,8,7,8,5,1,9,6,1,9,8,3,4,8,6,8
-1,3,9,6,2,8,5,9,9,6,5,3,5,4,8,9,4,4,0,8,1,6,1,2,4,7,0,0,6,8,2,9,3,3,8,7,4,3,6,5,1,2,8,7,8,6,8,2,3,8,2,4,7,5,8,1,3,3,4,6,1,1,5,6,6,4,9,7,2,1,3,9,6,2,8,5,9,9,6,5,3,5,4,8,9,4,4,0,8,1,6,1,2,4,7,0,0,6,8,2,9,3,3,8,7,4,3,6,5,1,2,8,7,8,6,8,2,3,8,2,4,7,5,8,1,3,8
-0,7,0,0,4,8,9,5,2,4,3,5,8,2,0,8,3,5,8,6,9,7,3,4,9,4,5,0,0,3,6,2,0,8,3,7,8,4,2,1,8,7,8,8,0,0,6,3,6,4,2,7,1,5,1,2,1,1,1,8,5,3,2,0,1,9,4,6,6,0,7,0,0,4,8,9,5,2,4,3,5,8,2,0,8,3,5,8,6,9,7,3,4,9,4,5,0,0,3,6,2,0,8,3,7,8,4,2,1,8,7,8,8,0,0,6,3,6,4,2,7,1,5,1,2,1,8
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass
diff --git a/tests/command/longvars.sh b/tests/command/longvars.sh
deleted file mode 100755 (executable)
index acd0de2..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-#!/bin/sh
-
-# This program tests that both long and short variable names are parsed OK.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-# Use crosstabs, since its TABLES subcommand exercises the array var set 
-# feature.
-activity="create program"
-cat > $TESTFILE <<EOF
-DATA LIST LIST /AlphaBetaGamma * B * X * Yabbadabbadoo * .
-BEGIN DATA.
-2 3 4 5
-END DATA.
-
-LIST.
-
-CROSSTABS 
-       VARIABLES X (1,7) Yabbadabbadoo (1,7) 
-       /TABLES X BY Yabbadabbadoo.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output"
-diff -c $TEMPDIR/pspp.csv - <<EOF
-Table: Reading free-form data from INLINE.
-Variable,Format
-AlphaBetaGamma,F8.0
-B,F8.0
-X,F8.0
-Yabbadabbadoo,F8.0
-
-Table: Data List
-AlphaBetaGamma,B,X,Yabbadabbadoo
-2.00,3.00,4.00,5.00
-
-Table: Summary.
-,Cases,,,,,
-,Valid,,Missing,,Total,
-,N,Percent,N,Percent,N,Percent
-X * Yabbadabbadoo,1,100.0%,0,0.0%,1,100.0%
-
-Table: X * Yabbadabbadoo [count].
-,Yabbadabbadoo,,,,,,,
-X,1.00,2.00,3.00,4.00,5.00,6.00,7.00,Total
-1.00,.0,.0,.0,.0,.0,.0,.0,.0
-2.00,.0,.0,.0,.0,.0,.0,.0,.0
-3.00,.0,.0,.0,.0,.0,.0,.0,.0
-4.00,.0,.0,.0,.0,1.0,.0,.0,1.0
-5.00,.0,.0,.0,.0,.0,.0,.0,.0
-6.00,.0,.0,.0,.0,.0,.0,.0,.0
-7.00,.0,.0,.0,.0,.0,.0,.0,.0
-Total,.0,.0,.0,.0,1.0,.0,.0,1.0
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass
diff --git a/tests/command/loop.sh b/tests/command/loop.sh
deleted file mode 100755 (executable)
index 7117375..0000000
+++ /dev/null
@@ -1,298 +0,0 @@
-#!/bin/sh
-
-# This program tests the LOOP command
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create prog"
-cat > $TEMPDIR/loop.stat <<EOF
-data list notable /x 1 y 2 z 3.
-begin data.
-121
-252
-393
-404
-end data.
-
-echo 'Loop with index'.
-loop #i=x to y by z.
-print /#i.
-end loop.
-print/'--------'.
-execute.
-
-echo 'Loop with IF condition'.
-compute #j=x.
-loop if #j <= y.
-print /#j.
-compute #j = #j + z.
-end loop.
-print/'--------'.
-execute.
-
-echo 'Loop with END IF condition'.
-compute #k=x.
-loop.
-print /#k.
-compute #k = #k + z.
-end loop if #k > y.
-print/'--------'.
-execute.
-
-echo 'Loop with index and IF condition based on index'.
-loop #m=x to y by z if #m < 4.
-print /#m.
-end loop.
-print/'--------'.
-execute.
-
-echo 'Loop with index and END IF condition based on index'.
-loop #n=x to y by z.
-print /#n.
-end loop if #n >= 4.
-print/'--------'.
-execute.
-
-echo 'Loop with index and IF and END IF condition based on index'.
-loop #o=x to y by z if mod(#o,2) = 0.
-print /#o.
-end loop if #o >= 4.
-print/'--------'.
-execute.
-
-echo 'Loop with no conditions'.
-set mxloops = 2.
-compute #p = x.
-loop.
-print /#p.
-compute #p = #p + z.
-do if #p >= y.
-break.
-end if.
-end loop.
-print/'--------'.
-execute.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv -e $TEMPDIR/stdout $TEMPDIR/loop.stat 
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare stdout"
-perl -pi -e 's/^\s*$//g' $TEMPDIR/stdout
-diff -b $TEMPDIR/stdout  - <<EOF
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare results"
-diff -c $TEMPDIR/pspp.csv  - <<EOF
-Loop with index
-
-1.00 
-
-2.00 
-
---------
-
-2.00 
-
-4.00 
-
---------
-
-3.00 
-
-6.00 
-
-9.00 
-
---------
-
---------
-
-Loop with IF condition
-
-1.00 
-
-2.00 
-
---------
-
-2.00 
-
-4.00 
-
---------
-
-3.00 
-
-6.00 
-
-9.00 
-
---------
-
---------
-
-Loop with END IF condition
-
-1.00 
-
-2.00 
-
---------
-
-2.00 
-
-4.00 
-
---------
-
-3.00 
-
-6.00 
-
-9.00 
-
---------
-
-4.00 
-
---------
-
-Loop with index and IF condition based on index
-
-1.00 
-
-2.00 
-
---------
-
-2.00 
-
---------
-
-3.00 
-
---------
-
---------
-
-Loop with index and END IF condition based on index
-
-1.00 
-
-2.00 
-
---------
-
-2.00 
-
-4.00 
-
---------
-
-3.00 
-
-6.00 
-
---------
-
---------
-
-Loop with index and IF and END IF condition based on index
-
---------
-
-2.00 
-
-4.00 
-
---------
-
---------
-
---------
-
-Loop with no conditions
-
-1.00 
-
---------
-
-2.00 
-
-4.00 
-
---------
-
-3.00 
-
-6.00 
-
---------
-
-4.00 
-
---------
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/command/match-files.sh b/tests/command/match-files.sh
deleted file mode 100755 (executable)
index 8cc445b..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-#!/bin/sh
-
-# This program tests the MATCH FILES procedure
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/match-files.pspp
-
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-    cd /
-    rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="data create"
-cat > a.data <<EOF
-1aB
-8aM
-3aE
-5aG
-0aA
-5aH
-6aI
-7aJ
-2aD
-7aK
-1aC
-7aL
-4aF
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-cat > b.data <<EOF
-1bN
-3bO
-4bP
-6bQ
-7bR
-9bS
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-cat > ff.out <<EOF
-Table: Data List
-A,B,C,D,INA,INB,FIRST,LAST
-0,a,A,,1,0,1,1
-1,a,B,N,1,1,1,0
-1,a,C,,1,0,0,1
-2,a,D,,1,0,1,1
-3,a,E,O,1,1,1,1
-4,a,F,P,1,1,1,1
-5,a,G,,1,0,1,0
-5,a,H,,1,0,0,1
-6,a,I,Q,1,1,1,1
-7,a,J,R,1,1,1,0
-7,a,K,,1,0,0,0
-7,a,L,,1,0,0,1
-8,a,M,,1,0,1,1
-9,b,,S,0,1,1,1
-EOF
-
-cat > ft.out <<EOF
-Table: Data List
-A,B,C,D,INA,INB,FIRST,LAST
-0,a,A,,1,0,1,1
-1,a,B,N,1,1,1,0
-1,a,C,N,1,1,0,1
-2,a,D,,1,0,1,1
-3,a,E,O,1,1,1,1
-4,a,F,P,1,1,1,1
-5,a,G,,1,0,1,0
-5,a,H,,1,0,0,1
-6,a,I,Q,1,1,1,1
-7,a,J,R,1,1,1,0
-7,a,K,R,1,1,0,0
-7,a,L,R,1,1,0,1
-8,a,M,,1,0,1,1
-EOF
-
-# Test nonparallel match and table lookup.
-dla="data list notable file='a.data' /A B C 1-3 (a)."
-sa="save outfile='a.sys'."
-dlb="data list notable file='b.data' /A B C 1-3 (a)."
-sb="save outfile='b.sys'."
-for types in ff ft; do
-    type1=file
-    if [ $types = ff ]; then 
-       type2=file
-    else
-       type2=table
-    fi
-    for sources in ss sa as; do
-       name="$types-$sources"
-       activity="create $name.pspp"
-       {
-           if [ $sources = ss ]; then
-               cat <<EOF
-$dla
-$sa
-$dlb
-$sb
-match files $type1='a.sys' /in=INA /sort
-           /$type2='b.sys' /in=INB /rename c=D
-           /by a /first=FIRST /last=LAST.
-EOF
-           elif [ $sources = sa ]; then
-               cat <<EOF
-$dla
-$sa
-$dlb
-match files $type1='a.sys' /in=INA /sort
-           /$type2=* /in=INB /rename c=D
-           /by a /first=FIRST /last=LAST.
-EOF
-           elif [ $sources = as ]; then
-               cat <<EOF
-$dlb
-$sb
-$dla
-match files $type1=* /in=INA /sort
-           /$type2='b.sys' /in=INB /rename c=D
-           /by a /first=FIRST /last=LAST.
-EOF
-           else
-               activity="internal error"
-               no_result
-           fi
-           echo 'list.'
-        } > $name.pspp
-       if [ $? -ne 0 ] ; then no_result ; fi
-
-       activity="run $name.pspp"
-       $SUPERVISOR $PSPP -o pspp.csv -e /dev/null $name.pspp 
-       if [ $? -ne 0 ] ; then no_result ; fi
-
-       activity="check $name output"
-       diff -c pspp.csv $types.out
-       if [ $? -ne 0 ] ; then fail ; fi
-    done
-done
-
-# Test parallel match. 
-name="parallel"
-activity="create $name.pspp"
-cat > $name.pspp <<EOF
-$dla
-$sa
-$dlb
-$sb
-match files file='a.sys' /file='b.sys' /rename (a b c=D E F).
-list.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run $name.pspp"
-$SUPERVISOR $PSPP -o pspp.csv -e /dev/null $name.pspp 
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="check $name output"
-diff -c - pspp.csv <<EOF
-Table: Data List
-A,B,C,D,E,F
-1,a,B,1,b,N
-8,a,M,3,b,O
-3,a,E,4,b,P
-5,a,G,6,b,Q
-0,a,A,7,b,R
-5,a,H,9,b,S
-6,a,I,,,
-7,a,J,,,
-2,a,D,,,
-7,a,K,,,
-1,a,C,,,
-7,a,L,,,
-4,a,F,,,
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-# Test bug handling TABLE from active file found by John Darrington.
-name="active-table"
-activity="create $name.pspp"
-cat > $name.pspp <<EOF
-DATA LIST LIST NOTABLE /x * y *.
-BEGIN DATA
-3 30
-2 21
-1 22
-END DATA.
-
-SAVE OUTFILE='bar.sav'.
-
-DATA LIST LIST NOTABLE /x * z *.
-BEGIN DATA
-3 8
-2 9
-END DATA.
-
-MATCH FILES TABLE=* /FILE='bar.sav' /BY=x.
-LIST.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run $name.pspp"
-$SUPERVISOR $PSPP -o pspp.csv -e /dev/null $name.pspp 
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="check $name output"
-diff -c - pspp.csv <<EOF
-Table: Data List
-x,z,y
-3.00,8.00,30.00
-2.00,.  ,21.00
-1.00,.  ,22.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/command/missing-values.sh b/tests/command/missing-values.sh
deleted file mode 100755 (executable)
index 7d567ac..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-#!/bin/sh
-
-# This program tests MISSING VALUES
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-# Copy this file --- it's shared with another test
-activity="create data"
-cp $top_srcdir/tests/data-list.data $TEMPDIR
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="create program"
-cat > $TEMPDIR/missing-values.stat << foobar
-DATA LIST NOTABLE/str1 1-5 (A) str2 6-8 (A) date1 9-19 (DATE) num1 20-25
-                  longstr 26-36 (A).
-
-/* Valid: numeric missing values.
-MISSING VALUES date1 num1 (1).
-MISSING VALUES date1 num1 (1, 2).
-MISSING VALUES date1 num1 (1, 2, 3).
-
-/* Valid: numeric missing values using the first variable's format.
-MISSING VALUES num1 date1 ('1').
-MISSING VALUES num1 date1 ('1', '2').
-MISSING VALUES num1 date1 ('1', '2', '3').
-MISSING VALUES date1 num1 ('06-AUG-05').
-MISSING VALUES date1 num1 ('06-AUG-05', '01-OCT-78').
-MISSING VALUES date1 num1 ('06-AUG-05', '01-OCT-78', '14-FEB-81').
-
-/* Valid: ranges of numeric missing values.
-MISSING VALUES num1 (1 THRU 2).
-MISSING VALUES num1 (LO THRU 2).
-MISSING VALUES num1 (LOWEST THRU 2).
-MISSING VALUES num1 (1 THRU HI).
-MISSING VALUES num1 (1 THRU HIGHEST).
-
-/* Valid: a range of numeric missing values, plus an individual value.
-MISSING VALUES num1 (1 THRU 2, 3).
-MISSING VALUES num1 (LO THRU 2, 3).
-MISSING VALUES num1 (LOWEST THRU 2, 3).
-MISSING VALUES num1 (1 THRU HI, -1).
-MISSING VALUES num1 (1 THRU HIGHEST, -1).
-
-/* Valid: string missing values.
-MISSING VALUES str1 str2 longstr ('abc  ','def').
-
-/* Invalid: too long for str2.
-MISSING VALUES str1 str2 longstr ('abcde').
-
-/* Invalid: long string missing value longer than 8 bytes.
-MISSING VALUES longstr ('abcdefghijk').
-
-/* Invalid: no string ranges.
-MISSING VALUES str1 ('a' THRU 'z').
-
-/* Invalid: mixing string and numeric variables.
-MISSING VALUES str1 num1 ('123').
-
-/* Valid: may mix variable types when clearing missing values.
-MISSING VALUES ALL ().
-
-foobar
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv --error-file=$TEMPDIR/errs $TEMPDIR/missing-values.stat 
-# Note   vv   --- there are errors in input.  Therefore, the  command must FAIL
-if [ $? -eq 0 ] ; then fail ; fi
-
-activity="compare error messages"
-diff -u -w $TEMPDIR/errs - <<EOF
-$TEMPDIR/missing-values.stat:35: error: MISSING VALUES: Missing values provided are too long to assign to variable of width 3.
-$TEMPDIR/missing-values.stat:38: error: MISSING VALUES: Truncating missing value to maximum acceptable length (8 bytes).
-$TEMPDIR/missing-values.stat:41: error: MISSING VALUES: Syntax error expecting string at \`THRU'.
-$TEMPDIR/missing-values.stat:41: error: MISSING VALUES: THRU is not a variable name.
-$TEMPDIR/missing-values.stat:44: error: MISSING VALUES: Cannot mix numeric variables (e.g. num1) and string variables (e.g. str1) within a single list.
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/command/n_of_cases.sh b/tests/command/n_of_cases.sh
deleted file mode 100755 (executable)
index 667162d..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/bin/sh
-
-# This program tests the N OF CASES command to make sure
-# that it actually works.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-cat > $TESTFILE <<EOF
-INPUT PROGRAM.
-LOOP #I = 1 TO 100.
-COMPUTE X=#I.
-END CASE.
-END LOOP.
-END FILE.
-END INPUT PROGRAM.
-
-N OF CASES 15.
-
-LIST.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="compare output"
-diff -c $TEMPDIR/pspp.csv - <<EOF
-Table: Data List
-X
-1.00
-2.00
-3.00
-4.00
-5.00
-6.00
-7.00
-8.00
-9.00
-10.00
-11.00
-12.00
-13.00
-14.00
-15.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/command/no_case_size.sh b/tests/command/no_case_size.sh
deleted file mode 100755 (executable)
index a03c617..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-#!/bin/sh
-
-# This program tests that system files can be read properly, even when the 
-# case_size header value is -1 (Some 3rd party products do this)
-
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat <<EOF > $TESTFILE
-GET FILE='$top_srcdir/tests/no_case_size.sav'.
-DISPLAY DICTIONARY.
-LIST.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output"
-diff -c pspp.csv - <<EOF
-Variable,Description,,Position
-cont,continents of the world,,1
-,Format: A32,,
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 8,,
-size,sq km,,2
-,Format: F8.2,,
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 8,,
-pop,population,,3
-,Format: F8.2,,
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 8,,
-count,number of countries,,4
-,Format: F8.2,,
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 8,,
-
-Table: Data List
-cont,size,pop,count
-Asia                            ,44579000,3.7E+009,44.00
-Africa                          ,30065000,7.8E+008,53.00
-North America                   ,24256000,4.8E+008,23.00
-South America                   ,17819000,3.4E+008,12.00
-Antarctica                      ,13209000,.00,.00
-Europe                          ,9938000,7.3E+008,46.00
-Australia/Oceania               ,7687000,31000000,14.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/command/npar-binomial.sh b/tests/command/npar-binomial.sh
deleted file mode 100755 (executable)
index 050c66b..0000000
+++ /dev/null
@@ -1,346 +0,0 @@
-#!/bin/sh
-
-# This program tests the BINOMIAL subcommand of the NPAR TESTS command.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-
-# Tests for exact calculations
-activity="create file 1"
-cat <<EOF > $TESTFILE
-ECHO 'P < 0.5; N1/N2 < 1' .
-
-NEW FILE.
-
-DATA LIST LIST NOTABLE /x * w *.
-BEGIN DATA.
-1   6
-2   15
-END DATA.
-
-WEIGHT BY w.
-
-SET FORMAT F8.3.
-
-NPAR TESTS
-       /BINOMIAL(0.3) = x
-       .
-
-
-ECHO 'P < 0.5; N1/N2 > 1' .
-
-NEW FILE.
-
-
-
-DATA LIST LIST NOTABLE /x (F8.0) w (F8.0).
-BEGIN DATA.
-1   7
-2   6
-END DATA.
-
-WEIGHT BY w.
-
-NPAR TESTS
-       /BINOMIAL(0.4) = x
-       .
-
-
-
-ECHO 'P < 0.5; N1/N2 = 1' .
-
-NEW FILE.
-
-DATA LIST LIST NOTABLE /x (F8.0) w (F8.0).
-BEGIN DATA.
-1   8
-2   8
-END DATA.
-
-WEIGHT BY w.
-
-NPAR TESTS
-       /BINOMIAL(0.4) = x
-       .
-
-ECHO 'P > 0.5; N1/N2 < 1' .
-
-NEW FILE.
-
-DATA LIST LIST NOTABLE /x (F8.0) w (F8.0).
-BEGIN DATA.
-1   11
-2   12
-END DATA.
-
-WEIGHT BY w.
-
-NPAR TESTS
-       /BINOMIAL(0.6) = x
-       .
-
-
-ECHO 'P > 0.5; N1/N2 > 1' .
-
-NEW FILE.
-
-DATA LIST LIST NOTABLE /x (F8.0) w (F8.0).
-BEGIN DATA.
-1   11
-2   9
-END DATA.
-
-WEIGHT BY w.
-
-NPAR TESTS
-       /BINOMIAL(0.6) = x
-
-ECHO 'P > 0.5; N1/N2 == 1' .
-
-NEW FILE.
-
-DATA LIST LIST NOTABLE /x (F8.0) w (F8.0).
-BEGIN DATA.
-1   11
-2   11
-END DATA.
-
-WEIGHT BY w.
-
-NPAR TESTS
-       /BINOMIAL(0.6) = x
-       .
-
-ECHO 'P == 0.5; N1/N2 < 1' .
-
-NEW FILE.
-
-DATA LIST LIST NOTABLE /x (F8.0) w (F8.0).
-BEGIN DATA.
-1   8
-2   15
-END DATA.
-
-WEIGHT BY w.
-
-NPAR TESTS
-       /BINOMIAL = x
-       .
-
-
-ECHO 'P == 0.5; N1/N2 > 1' .
-
-NEW FILE.
-
-DATA LIST LIST NOTABLE /x (F8.0) w (F8.0).
-BEGIN DATA.
-1   12
-2   6
-END DATA.
-
-WEIGHT BY w.
-
-NPAR TESTS
-       /BINOMIAL(0.5) = x
-
-ECHO 'P == 0.5; N1/N2 == 1' .
-
-NEW FILE.
-
-DATA LIST LIST NOTABLE /x (F8.0) w (F8.0).
-BEGIN DATA.
-1   10
-2   10
-END DATA.
-
-WEIGHT BY w.
-
-NPAR TESTS
-       /BINOMIAL(0.5) = x
-       .
-
-ECHO 'P == 0.5; N1/N2 == 1 Cutpoint' .
-
-DATA LIST LIST NOTABLE /x * w *.
-BEGIN DATA.
-9    3
-10   7
-11   16
-END DATA.
-
-WEIGHT BY w.
-
-NPAR TESTS
-       /BINOMIAL(0.5) = x (10)
-       .
-
-ECHO 'P == 0.5; N1/N2 == 1 Named values' .
-
-DATA LIST LIST NOTABLE /x * w *.
-BEGIN DATA.
-10   10
-15   45
-20   13
-END DATA.
-
-WEIGHT BY w.
-
-NPAR TESTS
-       /BINOMIAL(0.5) = x (10, 20)
-       .
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program 1"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output 1"
-diff -c $TEMPDIR/pspp.csv - << EOF
-P < 0.5; N1/N2 < 1
-
-Table: Binomial Test
-,,Category,N,Observed Prop.,Test Prop.,Exact Sig. (1-tailed)
-x,Group1,1.00,6.00,.286,.300,.551
-,Group2,2.00,15.00,.714,,
-,Total,,21.00,1.000,,
-
-P < 0.5; N1/N2 > 1
-
-Table: Binomial Test
-,,Category,N,Observed Prop.,Test Prop.,Exact Sig. (1-tailed)
-x,Group1,1,7,.538,.400,.229
-,Group2,2,6,.462,,
-,Total,,13,1.000,,
-
-P < 0.5; N1/N2 = 1
-
-Table: Binomial Test
-,,Category,N,Observed Prop.,Test Prop.,Exact Sig. (1-tailed)
-x,Group1,1,8,.500,.400,.284
-,Group2,2,8,.500,,
-,Total,,16,1.000,,
-
-P > 0.5; N1/N2 < 1
-
-Table: Binomial Test
-,,Category,N,Observed Prop.,Test Prop.,Exact Sig. (1-tailed)
-x,Group1,1,11,.478,.600,.164
-,Group2,2,12,.522,,
-,Total,,23,1.000,,
-
-P > 0.5; N1/N2 > 1
-
-Table: Binomial Test
-,,Category,N,Observed Prop.,Test Prop.,Exact Sig. (1-tailed)
-x,Group1,1,11,.550,.600,.404
-,Group2,2,9,.450,,
-,Total,,20,1.000,,
-
-P > 0.5; N1/N2 == 1
-
-Table: Binomial Test
-,,Category,N,Observed Prop.,Test Prop.,Exact Sig. (1-tailed)
-x,Group1,1,11,.500,.600,.228
-,Group2,2,11,.500,,
-,Total,,22,1.000,,
-
-P == 0.5; N1/N2 < 1
-
-Table: Binomial Test
-,,Category,N,Observed Prop.,Test Prop.,Exact Sig. (2-tailed)
-x,Group1,1,8,.348,.500,.210
-,Group2,2,15,.652,,
-,Total,,23,1.000,,
-
-P == 0.5; N1/N2 > 1
-
-Table: Binomial Test
-,,Category,N,Observed Prop.,Test Prop.,Exact Sig. (2-tailed)
-x,Group1,1,12,.667,.500,.238
-,Group2,2,6,.333,,
-,Total,,18,1.000,,
-
-P == 0.5; N1/N2 == 1
-
-Table: Binomial Test
-,,Category,N,Observed Prop.,Test Prop.,Exact Sig. (2-tailed)
-x,Group1,1,10,.500,.500,1.000
-,Group2,2,10,.500,,
-,Total,,20,1.000,,
-
-P == 0.5; N1/N2 == 1 Cutpoint
-
-Table: Binomial Test
-,,Category,N,Observed Prop.,Test Prop.,Exact Sig. (2-tailed)
-x,Group1,<= 10,10.000,.385,.500,.327
-,Group2,,16.000,.615,,
-,Total,,26.000,1.000,,
-
-P == 0.5; N1/N2 == 1 Named values
-
-Table: Binomial Test
-,,Category,N,Observed Prop.,Test Prop.,Exact Sig. (2-tailed)
-x,Group1,10.000,10.000,.435,.500,.678
-,Group2,20.000,13.000,.565,,
-,Total,,23.000,1.000,,
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/command/npar-chisquare.sh b/tests/command/npar-chisquare.sh
deleted file mode 100755 (executable)
index 59aec8a..0000000
+++ /dev/null
@@ -1,314 +0,0 @@
-#!/bin/sh
-
-# This program tests the chisquare subcommand of the NPAR command.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create file 1"
-cat <<EOF > $TESTFILE
-DATA LIST NOTABLE LIST /x * y * w *.
-BEGIN DATA.
-1   2  1
-2   1  3
-3.1 1  4
-3.2 2  1
-4   2  2
-5   3  1
-1   4  2
-END DATA.
-
-WEIGHT BY w.
-
-NPAR TESTS
-  CHISQUARE=x y
-  .
-
-NPAR TESTS
-  CHISQUARE=y
-  /EXPECTED=3 4 5 4
-  .
-
-NPAR TESTS
-  CHISQUARE=x y(2, 4)
-  /EXPECTED = 6 10 3
-  .
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program 1"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output 1"
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: x
-,Observed N,Expected N,Residual
-1.00,3.00,2.33,.67
-2.00,3.00,2.33,.67
-3.10,4.00,2.33,1.67
-3.20,1.00,2.33,-1.33
-4.00,2.00,2.33,-.33
-5.00,1.00,2.33,-1.33
-Total,14.00,,
-
-Table: y
-,Observed N,Expected N,Residual
-1.00,7.00,3.50,3.50
-2.00,4.00,3.50,.50
-3.00,1.00,3.50,-2.50
-4.00,2.00,3.50,-1.50
-Total,14.00,,
-
-Table: Test Statistics
-,x,y
-Chi-Square,3.14,6.00
-df,5,3
-Asymp. Sig.,.68,.11
-
-Table: y
-,Observed N,Expected N,Residual
-1.00,7.00,2.63,4.38
-2.00,4.00,3.50,.50
-3.00,1.00,4.38,-3.38
-4.00,2.00,3.50,-1.50
-Total,14.00,,
-
-Table: Test Statistics
-,y
-Chi-Square,10.61
-df,3
-Asymp. Sig.,.01
-
-Table: Frequencies
-,x,,,,y,,,
-,Category,Observed N,Expected N,Residual,Category,Observed N,Expected N,Residual
-1,2.00,3.00,3.16,-.16,2.00,4.00,2.21,1.79
-2,3.00,5.00,5.26,-.26,3.00,1.00,3.68,-2.68
-3,4.00,2.00,1.58,.42,4.00,2.00,1.11,.89
-Total,,10.00,,,,7.00,,
-
-Table: Test Statistics
-,x,y
-Chi-Square,.13,4.13
-df,2,2
-Asymp. Sig.,.94,.13
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-activity="create file 2"
-cat <<EOF > $TESTFILE
-DATA LIST NOTABLE LIST /x * y * w *.
-BEGIN DATA.
-1   2  1
-2   1  3
-3.1 1  4
-3.2 2  1
-4   2  2
-5   3  1
-1   4  2
-END DATA.
-
-WEIGHT BY w.
-
-NPAR TESTS
-  CHISQUARE=y
-  /EXPECTED = 3 4 5 4 3 1
-  .
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program 2"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE -e $TEMPDIR/output
-if [ $? -eq 0 ] ; then no_result ; fi
-
-activity="compare errors 2"
-perl -pi -e 's/^\s*$//g' $TEMPDIR/output
-diff -b  $TEMPDIR/output - << EOF
-error: CHISQUARE test specified 6 expected values, but 4 distinct values were encountered in variable y.
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-activity="create file 3"
-cat <<EOF > $TESTFILE
-DATA LIST NOTABLE LIST /x * y * w * .
-BEGIN DATA.
-1   2  1 
-2   1  3
-3.1 1  4
-3.2 2  1
-4   2  2
-5   3  1
-1   4  2
-.   5  1
-END DATA.
-
-WEIGHT BY w.
-
-MISSING VALUES x (4).
-
-NPAR TESTS
-  CHISQUARE=x y(-2,5)
-  /MISSING=ANALYSIS
-  /STATISTICS=DESCRIPTIVES
-  .
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program 3"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE 
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="compare output 3"
-diff -c $TEMPDIR/pspp.csv - <<EOF
-Table: Frequencies
-,x,,,,y,,,
-,Category,Observed N,Expected N,Residual,Category,Observed N,Expected N,Residual
-1,-2.00,.00,1.50,-1.50,-2.00,.00,1.88,-1.88
-2,-1.00,.00,1.50,-1.50,-1.00,.00,1.88,-1.88
-3,.00,.00,1.50,-1.50,.00,.00,1.88,-1.88
-4,1.00,3.00,1.50,1.50,1.00,7.00,1.88,5.13
-5,2.00,3.00,1.50,1.50,2.00,4.00,1.88,2.13
-6,3.00,5.00,1.50,3.50,3.00,1.00,1.88,-.88
-7,4.00,.00,1.50,-1.50,4.00,2.00,1.88,.13
-8,5.00,1.00,1.50,-.50,5.00,1.00,1.88,-.88
-Total,,12.00,,,,15.00,,
-
-Table: Test Statistics
-,x,y
-Chi-Square,17.33,22.87
-df,7,7
-Asymp. Sig.,.02,.00
-
-Table: Descriptive Statistics
-,N,Mean,Std. Deviation,Minimum,Maximum
-,,,,,
-x,12.00,2.47,1.19,1.00,5.00
-y,15.00,2.07,1.33,1.00,5.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-activity="create file 4"
-cat <<EOF > $TESTFILE
-DATA LIST NOTABLE LIST /x * y * w * .
-BEGIN DATA.
-1   2  1 
-2   1  3
-3.1 1  4
-3.2 2  1
-4   2  2
-5   3  1
-1   4  2
-.   5  1
-END DATA.
-
-WEIGHT BY w.
-
-* MISSING VALUES x (4).
-
-NPAR TESTS
-  CHISQUARE=x y(-2,5)
-  /MISSING=LISTWISE
-  /STATISTICS=DESCRIPTIVES
-  .
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program 4"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE 
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="compare output 4"
-diff -c $TEMPDIR/pspp.csv - <<EOF
-Table: Frequencies
-,x,,,,y,,,
-,Category,Observed N,Expected N,Residual,Category,Observed N,Expected N,Residual
-1,-2.00,.00,1.75,-1.75,-2.00,.00,1.75,-1.75
-2,-1.00,.00,1.75,-1.75,-1.00,.00,1.75,-1.75
-3,.00,.00,1.75,-1.75,.00,.00,1.75,-1.75
-4,1.00,3.00,1.75,1.25,1.00,7.00,1.75,5.25
-5,2.00,3.00,1.75,1.25,2.00,4.00,1.75,2.25
-6,3.00,5.00,1.75,3.25,3.00,1.00,1.75,-.75
-7,4.00,2.00,1.75,.25,4.00,2.00,1.75,.25
-8,5.00,1.00,1.75,-.75,5.00,.00,1.75,-1.75
-Total,,14.00,,,,14.00,,
-
-Table: Test Statistics
-,x,y
-Chi-Square,13.43,26.00
-df,7,7
-Asymp. Sig.,.06,.00
-
-Table: Descriptive Statistics
-,N,Mean,Std. Deviation,Minimum,Maximum
-,,,,,
-x,14.00,2.69,1.23,1.00,5.00
-y,14.00,1.86,1.10,1.00,4.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/command/npar-sign.sh b/tests/command/npar-sign.sh
deleted file mode 100755 (executable)
index 6b85aef..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/bin/sh
-
-# This program tests the SIGN subcommand of npar tests
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program 1"
-cat > $TESTFILE <<  EOF
-set format = F9.3.
-
-data list notable list /age * height rank *.
-begin data.
-10 12 11
-12 13 13 
-13 14 12
-12 12 10
-9   9 10
-10.3 10.2 12
-end data.
-
-npar tests
-       /sign=age height WITH height rank (PAIRED)
-       /MISSING ANALYSIS
-       /METHOD=EXACT
-       .
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program 1"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output 1"
-diff -b -c - $TEMPDIR/pspp.csv <<EOF
-Table: Frequencies
-,,N
-height - age,Negative Differences,1
-,Positive Differences,3
-,Ties,2
-,Total,6
-rank - height,Negative Differences,3
-,Positive Differences,2
-,Ties,1
-,Total,6
-
-Table: Test Statistics
-,height - age,rank - height
-Exact Sig. (2-tailed),.625,1.000
-Exact Sig. (1-tailed),.312,.500
-Point Probability,.250,.312
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/command/npar-wilcoxon.sh b/tests/command/npar-wilcoxon.sh
deleted file mode 100755 (executable)
index 8c34999..0000000
+++ /dev/null
@@ -1,166 +0,0 @@
-#!/bin/sh
-
-# This program tests the wilcoxon subcommand of npar tests
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program 1"
-cat > $TESTFILE <<  EOF
-data list notable list /foo * bar * w (f8.0).
-begin data.
-1.00     1.00   1
-1.00     2.00   1
-2.00     1.00   1
-1.00     4.00   1
-2.00     5.00   1
-1.00    19.00   1
-2.00     7.00   1
-4.00     5.00   1
-1.00    12.00   1
-2.00    13.00   1
-2.00     2.00   1
-12.00      .00  2
-12.00     1.00  1
-13.00     1.00  1
-end data
-
-variable labels foo "first" bar "second".
-
-weight by w.
-
-npar test
- /wilcoxon=foo with bar (paired)
- /missing analysis
- /method=exact.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program 1"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="generate results"
-cat > $TEMPDIR/results.csv <<EOF
-Table: Ranks
-,,N,Mean Rank,Sum of Ranks
-second - first,Negative Ranks,5,8.60,43.00
-,Positive Ranks,8,6.00,48.00
-,Ties,2,,
-,Total,15,,
-
-Table: Test Statistics
-,second - first
-Z,-.18
-Asymp. Sig. (2-tailed),.86
-Exact Sig. (2-tailed),.89
-Exact Sig. (1-tailed),.45
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="compare output 1"
-diff -b -c pspp.csv $TEMPDIR/results.csv
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-
-# No weights this time. But some missing values
-activity="create program 2"
-cat > $TESTFILE <<  EOF
-data list notable list /foo * bar * dummy *.
-begin data.
-1.00     1.00    1
-1.00     2.00    1
-2.00     1.00    1
-1.00     4.00    .
-2.00     5.00    .
-1.00    19.00    .
-2.00     7.00    1
-4.00     5.00    1
-1.00    12.00    1
-2.00    13.00    1
-2.00     2.00    1
-12.00      .00   1
-12.00      .00   1
-34.2       .     1
-12.00     1.00   1  
-13.00     1.00   1
-end data
-
-variable labels foo "first" bar "second".
-
-npar test
- /wilcoxon=foo with bar (paired)
- /missing analysis
- /method=exact.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program 2"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output 2"
-diff -b pspp.csv $TEMPDIR/results.csv
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-
-pass;
diff --git a/tests/command/permissions.sh b/tests/command/permissions.sh
deleted file mode 100755 (executable)
index 7c4504a..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/bin/sh
-
-# This program tests the PERMISSIONS command
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-
-activity="Create file"
-echo HEllo > foobar
-chmod 777 foobar
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="Create program"
-cat > per.sps <<EOF
-PERMISSIONS /FILE='foobar'
-   PERMISSIONS = READONLY.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TEMPDIR/per.sps
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="Check Permissions"
-ls -l foobar | grep '^-r-xr-xr-x'  > /dev/null
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-activity="Create program"
-cat > per.sps <<EOF
-PERMISSIONS /FILE='foobar'
-   PERMISSIONS = WRITEABLE.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TEMPDIR/per.sps
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="Check Permissions"
-ls -l foobar | grep '^-rwxr-xr-x'  > /dev/null
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-
-pass;
diff --git a/tests/command/print-strings.sh b/tests/command/print-strings.sh
deleted file mode 100755 (executable)
index b6a1ba9..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/bin/sh
-
-# This program tests that the PRINT command properly outputs string variables.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="Create File"
-cat > $TESTFILE <<EOF
-DATA LIST FREE /s8 (a8) s10 (a10) vl255 (a255) vl258 (a258).
-BEGIN DATA.
-12345678
-AaaaaaaaaZ
-AbbbbMaryHadALittleLambbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbZ
-AccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccZ
-87654321
-AnnnnnnnnZ
-AmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmZ
-AoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooWhyIsItSoZ
-END DATA.
-
-print 
-       outfile='foobar'
-       /s10 * vl255 * vl258 *.
-
-EXECUTE.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-diff $TEMPDIR/foobar - <<EOF
- AaaaaaaaaZ AbbbbMaryHadALittleLambbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbZ AccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccZ 
- AnnnnnnnnZ AmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmZ AoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooWhyIsItSoZ 
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/command/print.sh b/tests/command/print.sh
deleted file mode 100755 (executable)
index 9df49c1..0000000
+++ /dev/null
@@ -1,215 +0,0 @@
-#!/bin/sh
-
-# This program tests unusual aspects of the PRINT and WRITE
-# transformations:
-#
-#   - PRINT puts spaces between variables, unless a format 
-#     is specified explicitly.
-#
-#   - WRITE doesn't put space between variables.
-#
-#   - PRINT to an external file prefixes each line with a space.
-#
-#   - PRINT EJECT to an external file indicates a formfeed by a "1"
-#     in the first column.
-#
-#   - WRITE writes out spaces for system-missing values, not a period.
-#
-#   - When no output is specified, an empty record is output.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TEMPDIR/print.stat << foobar
-data list notable /x y 1-2.
-begin data.
-12
-34
- 6 
-7 
-90
-end data.
-
-print /x y.
-print eject /x y 1-2.
-print /x '-' y.
-print.
-
-print outfile='print.out' /x y.
-print eject outfile='print.out' /x y (f1,f1).
-print outfile='print.out' /x '-' y.
-print outfile='print.out'.
-
-write outfile='write.out' /x y.
-write outfile='write.out' /x y (2(f1)).
-write outfile='write.out' /x '-' y.
-write outfile='write.out'.
-
-execute.
-foobar
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv --error-file=$TEMPDIR/errs $TEMPDIR/print.stat 
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare print.out"
-diff -b $TEMPDIR/print.out - <<EOF
- 1 2 
-112
- 1 -2 
- 3 4 
-134
- 3 -4 
- . 6 
-1.6
- . -6 
- 7 . 
-17.
- 7 -. 
- 9 0 
-190
- 9 -0 
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare write.out"
-diff -b $TEMPDIR/write.out - <<EOF
-12
-12
-1-2
-
-34
-34
-3-4
-
- 6
- 6
- -6
-
-7 
-7 
-7- 
-
-90
-90
-9-0
-
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare output"
-diff -b $TEMPDIR/pspp.csv - << EOF
-1 2 
-
-
-
-12
-
-1 -2 
-
-
-
-3 4 
-
-
-
-34
-
-3 -4 
-
-
-
-. 6 
-
-
-
-.6
-
-. -6 
-
-
-
-7 . 
-
-
-
-7.
-
-7 -. 
-
-
-
-9 0 
-
-
-
-90
-
-9 -0 
-
-
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/command/rank.sh b/tests/command/rank.sh
deleted file mode 100755 (executable)
index 8114c43..0000000
+++ /dev/null
@@ -1,670 +0,0 @@
-#!/bin/sh
-
-# This program tests the RANK command.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-
-# Some tests for proper behaviour in the face of invalid input.
-activity="create file 1"
-cat > $TESTFILE <<EOF
-DATA LIST LIST NOTABLE /x * a (a2).
-BEGIN DATA.
--1 s
-0  s
-1  s
-2  s
-2  s
-4  s
-5  s
-END DATA.
-
-DEBUG XFORM FAIL.
-
-RANK x.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-# Check that it properly handles failed transformations.
-activity="run program 1"
-$SUPERVISOR $PSPP --testing-mode -o pspp.csv -e $TEMPDIR/err $TESTFILE 
-if [ $? -ne 1 ] ; then fail ; fi
-
-activity="diff 1"
-perl -pi -e 's/^\s*$//g' $TEMPDIR/err
-diff  -b $TEMPDIR/err - <<EOF
-$TEMPDIR/rank.sh.sps:14: error: Stopping syntax file processing here to avoid a cascade of dependent command failures.
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-#Now for some general error conditions.
-activity="create file 2"
-cat > $TESTFILE <<EOF
-DATA LIST LIST NOTABLE /x * a (a2).
-BEGIN DATA.
--1 s
-0  s
-1  s
-2  s
-2  s
-4  s
-5  s
-END DATA.
-
-* invalid NTILES (no parameter)
-RANK x 
-  /NTILES
-.
-
-* invalid NTILES (not an integer)
-RANK x 
-  /NTILES(d)
-.
-
-
-* destination variable already exists
-RANK x 
- /RANK INTO x.
-
-
-* Too many variables in INTO
-RANK x 
- /RANK INTO foo  bar wiz.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program (syntax errors)"
-$SUPERVISOR $PSPP -o pspp.csv -e $TEMPDIR/errs $TESTFILE 
-if [ $? -ne 1 ] ; then fail ; fi
-
-activity="compare errors"
-perl -pi -e 's/^\s*$//g' $TEMPDIR/errs
-diff -b $TEMPDIR/errs - << EOF
-$TEMPDIR/rank.sh.sps:15: error: RANK: Syntax error expecting \`(' at end of command.
-$TEMPDIR/rank.sh.sps:19: error: RANK: Syntax error expecting integer at \`d'.
-$TEMPDIR/rank.sh.sps:25: error: RANK: Variable x already exists.
-$TEMPDIR/rank.sh.sps:30: error: RANK: Too many variables in INTO clause.
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-# Now some real tests.
-
-activity="create file 3"
-cat > $TESTFILE <<EOF
-DATA LIST LIST NOTABLE /x (f8).
-BEGIN DATA.
--1
-0 
-1 
-2 
-2 
-4 
-5 
-END DATA.
-
-ECHO  'Simple example using defaults'.
-
-RANK x.
-
-LIST.
-
-NEW FILE.
-DATA LIST LIST NOTABLE /a * b *.
-BEGIN DATA.
-0 24
-1 32
-2 31
-2 32
-4 30
-5 29
-6 1
-7 43
-8 .
-9 45
-END DATA.
-
-RANK a b (D)
-   /PRINT=YES 
-   /RANK
-   /TIES=HIGH
-   /RFRACTION
-   /N INTO count
-   .
-
-DISPLAY DICTIONARY.
-
-LIST.
-
-
-ECHO  'Test variable name fallback'.
-
-NEW FILE.
-DATA LIST LIST NOTABLE /foo * rfoo * ran003 *.
-BEGIN DATA.
-0 3 2
-1 3 2
-2 3 2
-2 3 2
-4 3 2
-5 3 2
-6 3 2
-7 3 2
-8 3 2
-9 3 2
-END DATA.
-
-RANK foo.
-
-
-DISPLAY DICTIONARY.
-
-
-NEW FILE.
-DATA LIST LIST NOTABLE /a * b *.
-BEGIN DATA.
-0 24
-1 32
-2 31
-2 32
-4 30
-5 29
-6 1
-7 43
-8 8 
-9 45
-END DATA.
-
-RANK a
-  /PRINT=YES
-  /TIES=CONDENSE
-  /SAVAGE
-  /PERCENT
-  /PROPORTION
-  /NTILES(4)
-  /NORMAL
-.
-
-LIST.
-
-NEW FILE.
-DATA LIST LIST NOTABLE /a * g1 g2 *.
-BEGIN DATA.
-2 1 2
-2 1 2
-3 1 2
-4 1 2
-5 1 2
-1 0 2
-2 0 2
-3 0 2
-4 0 2
-5 0 2
-6 0 2
-7 0 2
-8 0 2
-6 1 2
-7 1 2
-7 1 2
-8 1 2
-9 1 1
-END DATA.
-
-RANK a (D) BY g2 g1
-  /PRINT=YES
-  /TIES=LOW
-  /MISSING=INCLUDE
-  /FRACTION=RANKIT
-  /RANK
-  /NORMAL
-  .
-
-SPLIT FILE BY g1.
-
-RANK a (D) BY g2
-  /PRINT=YES
-  /TIES=LOW
-  /MISSING=INCLUDE
-  /FRACTION=RANKIT
-  /RANK
-  /NORMAL
-  .
-
-SPLIT FILE OFF.
-
-LIST.
-
-
-ECHO 'fractional ranks ( including small ones for special case of SAVAGE ranks)'
-NEW FILE.
-DATA LIST LIST NOTABLE  /a *  w * .
-BEGIN DATA.
-1 1.5
-2 0.2
-3 0.1
-4 1
-5 1
-6 1
-7 1
-8 1
-END DATA.
-
-WEIGHT BY w.
-
-RANK a 
-  /FRACTION=TUKEY
-  /PROPORTION
-  /SAVAGE
-.
-
-LIST.
-
-
-ECHO 'test all the ties cases with low caseweight values'.
-
-NEW FILE.
-DATA LIST LIST NOTABLE /x * w *.
-BEGIN DATA.
-1 0.1
-2 0.1
-3 0.1
-4 0.2
-5 0.1
-6 0.1
-7 0.1
-8 0.1
-END DATA.
-
-WEIGHT BY w.
-
-RANK x
- /TIES=low
- /RANK into xl.
-
-
-RANK x
- /TIES=high
- /RANK into xh.
-
-RANK x
- /TIES=condense
- /RANK into xc.
-
-
-* Test VW fraction
-
-RANK x
- /FRACTION=VW
- /NORMAL.
-
-LIST.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program 3"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="compare output 3"
-diff -c $TEMPDIR/pspp.csv - <<EOF
-Simple example using defaults
-
-Variables Created By RANK
-
-
-
-x into Rx(RANK of x)
-
-Table: Data List
-x,Rx
--1,1.000
-0,2.000
-1,3.000
-2,4.500
-2,4.500
-4,6.000
-5,7.000
-
-Variables Created By RANK
-
-
-
-a into Ra(RANK of a)
-
-b into Rb(RANK of b)
-
-a into RFR001(RFRACTION of a)
-
-b into RFR002(RFRACTION of b)
-
-a into count(N of a)
-
-b into Nb(N of b)
-
-Variable,Description,,Position
-a,Format: F8.2,,1
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-b,Format: F8.2,,2
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-count,N of a,,3
-,Format: F6.0,,
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-Ra,RANK of a,,4
-,Format: F9.3,,
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-Rb,RANK of b,,5
-,Format: F9.3,,
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-RFR001,RFRACTION of a,,6
-,Format: F6.4,,
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-RFR002,RFRACTION of b,,7
-,Format: F6.4,,
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-Nb,N of b,,8
-,Format: F6.0,,
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-
-Table: Data List
-a,b,count,Ra,Rb,RFR001,RFR002,Nb
-.00,24.00,10,10.000,8.000,1.0000,.8889,9
-1.00,32.00,10,9.000,4.000,.9000,.4444,9
-2.00,31.00,10,8.000,5.000,.8000,.5556,9
-2.00,32.00,10,8.000,4.000,.8000,.4444,9
-4.00,30.00,10,6.000,6.000,.6000,.6667,9
-5.00,29.00,10,5.000,7.000,.5000,.7778,9
-6.00,1.00,10,4.000,9.000,.4000,1.0000,9
-7.00,43.00,10,3.000,2.000,.3000,.2222,9
-8.00,.  ,10,2.000,.   ,.2000,.    ,.
-9.00,45.00,10,1.000,1.000,.1000,.1111,9
-
-Test variable name fallback
-
-Variables Created By RANK
-
-
-
-foo into RAN001(RANK of foo)
-
-Variable,Description,,Position
-foo,Format: F8.2,,1
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-rfoo,Format: F8.2,,2
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-ran003,Format: F8.2,,3
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-RAN001,RANK of foo,,4
-,Format: F9.3,,
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-
-Variables Created By RANK
-
-
-
-a into Sa(SAVAGE of a)
-
-a into Pa(PERCENT of a)
-
-a into PRO001(PROPORTION of a using BLOM)
-
-a into Na(NTILES of a)
-
-a into NOR001(NORMAL of a using BLOM)
-
-Table: Data List
-a,b,Sa,Pa,PRO001,Na,NOR001
-.00,24.00,-.9000,10.00,.0610,1,-1.547
-1.00,32.00,-.7889,20.00,.1585,1,-1.000
-2.00,31.00,-.5925,30.00,.2561,2,-.6554
-2.00,32.00,-.5925,30.00,.2561,2,-.6554
-4.00,30.00,-.3544,40.00,.3537,2,-.3755
-5.00,29.00,-.1544,50.00,.4512,2,-.1226
-6.00,1.00,.0956,60.00,.5488,3,.1226
-7.00,43.00,.4290,70.00,.6463,3,.3755
-8.00,8.00,.9290,80.00,.7439,3,.6554
-9.00,45.00,1.9290,90.00,.8415,4,1.0005
-
-Variables Created By RANK
-
-
-
-a into Ra(RANK of a BY g2 g1)
-
-a into Na(NORMAL of a using RANKIT BY g2 g1)
-
-Variables Created By RANK
-
-
-
-a into RAN001(RANK of a BY g2)
-
-a into NOR001(NORMAL of a using RANKIT BY g2)
-
-Table: Data List
-a,g1,g2,Ra,Na,RAN001,NOR001
-2.00,1.00,2.00,8.000,.9674,4.000,.5244
-2.00,1.00,2.00,8.000,.9674,4.000,.5244
-3.00,1.00,2.00,7.000,.5895,3.000,.0000
-4.00,1.00,2.00,6.000,.2822,2.000,-.5244
-5.00,1.00,2.00,5.000,.0000,1.000,-1.282
-1.00,.00,2.00,8.000,1.5341,8.000,1.5341
-2.00,.00,2.00,7.000,.8871,7.000,.8871
-3.00,.00,2.00,6.000,.4888,6.000,.4888
-4.00,.00,2.00,5.000,.1573,5.000,.1573
-5.00,.00,2.00,4.000,-.1573,4.000,-.1573
-6.00,.00,2.00,3.000,-.4888,3.000,-.4888
-7.00,.00,2.00,2.000,-.8871,2.000,-.8871
-8.00,.00,2.00,1.000,-1.534,1.000,-1.534
-6.00,1.00,2.00,4.000,-.2822,4.000,1.1503
-7.00,1.00,2.00,2.000,-.9674,2.000,-.3186
-7.00,1.00,2.00,2.000,-.9674,2.000,-.3186
-8.00,1.00,2.00,1.000,-1.593,1.000,-1.150
-9.00,1.00,1.00,1.000,.0000,1.000,.0000
-
-fractional ranks ( including small ones for special case of SAVAGE ranks)
-
-Variables Created By RANK
-
-
-
-a into Pa(PROPORTION of a using TUKEY)
-
-a into Sa(SAVAGE of a)
-
-Table: Data List
-a,w,Pa,Sa
-1.00,1.50,.1285,-.8016
-2.00,.20,.1776,-.6905
-3.00,.10,.1986,-.6905
-4.00,1.00,.3458,-.5305
-5.00,1.00,.4860,-.2905
-6.00,1.00,.6262,.0262
-7.00,1.00,.7664,.4929
-8.00,1.00,.9065,1.3929
-
-test all the ties cases with low caseweight values
-
-Variables Created By RANK
-
-
-
-x into xl(RANK of x)
-
-Variables Created By RANK
-
-
-
-x into xh(RANK of x)
-
-Variables Created By RANK
-
-
-
-x into xc(RANK of x)
-
-Variables Created By RANK
-
-
-
-x into Nx(NORMAL of x using VW)
-
-Table: Data List
-x,w,xl,xh,xc,Nx
-1.00,.10,.000,.100,1.000,-1.938
-2.00,.10,.100,.200,2.000,-1.412
-3.00,.10,.200,.300,3.000,-1.119
-4.00,.20,.300,.500,4.000,-.8046
-5.00,.10,.500,.600,5.000,-.5549
-6.00,.10,.600,.700,6.000,-.4067
-7.00,.10,.700,.800,7.000,-.2670
-8.00,.10,.800,.900,8.000,-.1323
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-
-# A test to make sure that variable name creation is really robust
-activity="create file 4"
-cat > $TESTFILE <<EOF
-DATA LIST LIST notable /x * rx * ran001 TO ran999.
-BEGIN DATA.
-1
-2
-3
-4
-5
-6
-7
-END DATA.
-
-RANK x.
-
-DELETE VAR ran001 TO ran999.
-
-LIST.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program 4"
-$SUPERVISOR $PSPP -o pspp.csv -e /dev/null $TESTFILE 
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-activity="compare output 4"
-diff -c $TEMPDIR/pspp.csv - << EOF
-"$TEMPDIR/rank.sh.sps:3: warning: BEGIN DATA: Missing value(s) for all variables from rx onward.  These will be filled with the system-missing value or blanks, as appropriate."
-
-"$TEMPDIR/rank.sh.sps:4: warning: BEGIN DATA: Missing value(s) for all variables from rx onward.  These will be filled with the system-missing value or blanks, as appropriate."
-
-"$TEMPDIR/rank.sh.sps:5: warning: BEGIN DATA: Missing value(s) for all variables from rx onward.  These will be filled with the system-missing value or blanks, as appropriate."
-
-"$TEMPDIR/rank.sh.sps:6: warning: BEGIN DATA: Missing value(s) for all variables from rx onward.  These will be filled with the system-missing value or blanks, as appropriate."
-
-"$TEMPDIR/rank.sh.sps:7: warning: BEGIN DATA: Missing value(s) for all variables from rx onward.  These will be filled with the system-missing value or blanks, as appropriate."
-
-"$TEMPDIR/rank.sh.sps:8: warning: BEGIN DATA: Missing value(s) for all variables from rx onward.  These will be filled with the system-missing value or blanks, as appropriate."
-
-"$TEMPDIR/rank.sh.sps:9: warning: BEGIN DATA: Missing value(s) for all variables from rx onward.  These will be filled with the system-missing value or blanks, as appropriate."
-
-Variables Created By RANK
-
-
-
-x into RNKRA01(RANK of x)
-
-Table: Data List
-x,rx,RNKRA01
-1.00,.  ,1.000
-2.00,.  ,2.000
-3.00,.  ,3.000
-4.00,.  ,4.000
-5.00,.  ,5.000
-6.00,.  ,6.000
-7.00,.  ,7.000
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/command/regression-qr.sh b/tests/command/regression-qr.sh
deleted file mode 100755 (executable)
index fd33cb8..0000000
+++ /dev/null
@@ -1,1596 +0,0 @@
-#!/bin/sh
-
-# This program tests that the QR decomposition used by the REGRESSION command works.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-    if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo Not cleaning $TEMPDIR;
-       return ; 
-    fi
-    cd /
-    rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-data list list / v0 to v1.
-begin data
--12.84099361 0.873270778
- 16.64932538 0.371315664
- -1.88061907 0.505503722
- -6.20952354 0.734698282
-  0.33272576 0.891224610
- -5.54912717 0.052318165
-  6.11832417 0.448853404
- 11.78124974 0.470447593
-  0.75960353 0.565082303
-  6.06432768 0.149316743
- -2.64919436 0.752532411
--10.32250712 0.798263603
-  2.06355038 0.469129797
- -9.71851742 0.927162270
-  4.65582553 0.250629262
-  9.54574474 0.847032310
-  7.35544368 0.197028541
- -2.09609740 0.400584261
- 10.30101161 0.671546480
- -5.24501039 0.929962876
-  1.73412473 0.758161354
- -3.12732732 0.569785505
- 12.66261501 0.630640223
- -2.90956805 0.576067804
-  4.89649177 0.624483995
- 13.64613114 0.591089881
- 14.03198397 0.544587572
-  2.23566810 0.967898139
-  5.37367760 0.916246929
-  9.01346888 0.451702743
-  0.75378683 0.235544137
- -3.47470624 0.742668194
- -1.02063266 0.860311687
- -2.67132813 0.082460702
- 23.67661680 0.932553932
-  7.95061359 0.430161125
-  2.05300558 0.066331375
- -2.01332644 0.163705417
- 20.00663784 0.587292630
-  3.06099417 0.161411889
- -3.46115358 0.216684625
- -6.85287183 0.548714855
- -4.27923809 0.630997663
- -0.94863395 0.880612945
-  4.47481747 0.359885215
--12.80962955 0.886070341
-  9.35753086 0.187176558
-  2.81002235 0.063035095
-  0.01532424 0.964327101
-  0.29867732 0.866408063
- -2.89035649 0.812135868
-  4.17352811 0.608884061
- 18.15502183 0.920568258
- -2.92662792 0.550792959
- -6.08090449 0.965036595
- -1.09135397 0.862548019
-  7.02816784 0.042277017
--21.20245068 0.430673493
- -8.83397584 0.724976162
- -0.89055843 0.017934904
-  7.03871587 0.308829557
-  3.84286316 0.685105924
-  4.50280692 0.447635420
- 11.39207346 0.875177896
- 10.86673874 0.518530912
-  7.09853081 0.588367569
--12.82864915 0.184667098
- 13.74888760 0.610891139
-  0.37379146 0.557720134
- -9.79020267 0.942839981
-  0.71574466 0.564570338
--17.56040637 0.182061777
-  2.52620466 0.306875011
-  5.37718673 0.366807049
- -1.83964300 0.465772898
-  6.04848363 0.644501799
-  4.57402403 0.121419591
-  8.55606848 0.373011464
- -8.46827907 0.491176571
- -1.77989798 0.734722847
- -0.68661121 0.540984182
-  1.55798880 0.822587656
-  5.22810831 0.333747878
-  9.50280477 0.068100934
- -3.74521465 0.248537644
-  1.36045068 0.851827791
-  4.41604088 0.197207162
- -3.72568327 0.726916693
- -5.36123334 0.906513529
-  3.61594583 0.414340595
--10.01952852 0.140372658
- 25.48681482 0.354309660
- -3.34529093 0.090075388
--18.00437582 0.461438059
- -5.29782460 0.004362856
-  2.79608522 0.861294398
- -1.64076209 0.345775481
-  6.82802334 0.137933862
- -0.45416818 0.404379208
- -1.66868582 0.797685201
--10.02820292 0.075876582
-  5.68232031 0.404815042
-  8.25113850 0.769173748
- -2.83544237 0.076583474
-  0.87659945 0.092751009
-  6.60270870 0.530444351
--12.63924989 0.362099960
- -6.24451253 0.641993458
-  3.53339015 0.461991892
- -0.74012232 0.437409755
- 15.37311996 0.974913038
- -8.09464797 0.543308711
- -9.61320222 0.221564578
-  0.21843662 0.856512540
- -1.56958954 0.610709221
-  6.44977372 0.200382138
--13.29136274 0.093222309
-  6.46257214 0.024135196
- -3.82727990 0.601335801
-  0.43081953 0.268230667
- 19.06654416 0.219972815
- 17.02906651 0.996849502
--10.18073139 0.012543080
- 12.72088788 0.910600764
- 10.45328185 0.331285901
-  7.14370922 0.896312020
- -2.81754334 0.048741266
-  6.40217095 0.075796756
- -3.18030478 0.666325307
-  8.64585957 0.120549153
-  1.37952764 0.899991932
--11.81143886 0.601949630
-  0.03899706 0.363808260
--10.63828243 0.031092967
- -6.66940972 0.246204205
- -5.07374962 0.951272057
-  4.82281566 0.063928187
--21.93693564 0.050972680
- -4.54569883 0.225839693
- -0.92422779 0.437796785
- -1.11683029 0.740215139
- 16.77765554 0.851072372
-  9.73614597 0.388180586
- 14.05345168 0.063760129
-  1.20512012 0.665964184
-  8.00307080 0.102447114
-  8.01252623 0.580929209
--13.54924183 0.438420739
-  9.87164361 0.970859344
- 17.63437095 0.250501797
- -3.42503574 0.873290220
- -2.45873197 0.847756049
- 17.29212092 0.411683187
-  1.15496098 0.530658504
- -2.14438907 0.592255367
- -1.79942021 0.517773009
- -1.30677990 0.830860762
-  1.70233874 0.291826660
- -3.05532536 0.801767829
- -4.06732625 0.092294501
-  6.34665476 0.270426235
-  9.46946411 0.196915311
- 14.50919907 0.480357167
-  8.93767237 0.778228613
-  1.90298854 0.903146151
- 18.50500507 0.598561307
-  4.45123027 0.555898218
- 11.37344114 0.616557707
--12.14693218 0.409187285
- 18.27198688 0.141619222
- -5.75939569 0.056989619
- -4.05515382 0.369281201
- 16.69882098 0.946885257
-  6.39050536 0.679704228
-  4.04213339 0.662792380
-  6.89608366 0.419877433
-  1.56496633 0.358227958
-  5.16679947 0.095144366
- -3.06280456 0.883265975
-  2.76279175 0.866571973
-  1.84969249 0.264869828
- 21.79840498 0.702650979
-  1.42450528 0.719308635
-  0.96797046 0.111937435
- 18.26840323 0.075621738
- 13.38288377 0.573399086
-  2.41101500 0.766238677
-  3.83866337 0.499888953
- -1.56577367 0.695244089
- -0.90342790 0.671654151
- 10.83775583 0.026041124
- -9.89767935 0.745297991
- 11.74840150 0.309144074
-  1.73069359 0.814063985
- -5.27966183 0.591005828
-  3.33030043 0.559401806
-  1.31427975 0.520950237
--10.04588558 0.507008362
- 10.41228345 0.425867272
-  1.71961097 0.595783108
--17.54904427 0.328788939
- -2.23545419 0.223377350
- -8.68774333 0.980964240
- -3.48048220 0.008877675
- -3.69635326 0.090236718
-  9.76114237 0.769375983
--10.25662038 0.508137553
-  0.11155446 0.468504431
- -8.06824580 0.414098962
-  3.10031660 0.327130207
- -3.33393146 0.756896774
- -3.96276749 0.530956360
- 14.53610268 0.846474699
-  1.70505918 0.754662464
- -1.93495001 0.656650411
-  5.01974522 0.745337633
- 13.41249973 0.489362476
- 11.49288744 0.335924476
- 12.59019763 0.155560469
--10.17947298 0.677318449
-  0.05556115 0.655090105
-  3.82092860 0.051838719
-  8.23041456 0.918272190
- -0.50314649 0.772015826
- 20.05162157 0.880265258
-  8.98816884 0.666646668
- -6.28312120 0.138534416
-  3.68589909 0.274559458
-  0.59699510 0.253180863
- -2.74783135 0.983525221
-  0.32515065 0.839969577
- -3.60606166 0.330646732
- -0.82037740 0.129591173
-  6.12444860 0.098536516
- 10.95671074 0.033546728
- -2.84911174 0.720288722
-  6.04597572 0.577061422
- -0.60147150 0.674096868
- -5.30458364 0.291468008
-  2.68044943 0.379853840
-  0.85986585 0.984214339
--12.77906359 0.882390290
-  7.21420144 0.550884826
-  2.31817022 0.231021556
- 11.60161950 0.888496654
- -0.19346228 0.242609713
-  5.07478120 0.759161318
- 14.54155003 0.040387654
-  3.81039636 0.874572741
-  2.23233049 0.448317248
-  0.19481869 0.201906051
-  2.81530451 0.132131690
- 12.39893259 0.674693704
-  0.47054642 0.632959494
-  2.16152913 0.734480632
-  0.33398836 0.315024718
-  7.35509037 0.304570986
- -2.92336559 0.539062343
-  5.79622573 0.392393310
- -2.37607425 0.403380474
-  0.04498550 0.756875541
- -1.63674414 0.613789514
- 11.80310547 0.832651469
-  6.30630243 0.850689403
-  1.48394652 0.096243229
-  4.03361865 0.799660045
-  3.54707273 0.408520520
-  2.00327040 0.702944912
- 17.30761707 0.380542812
-  5.72738968 0.105447516
--13.64604891 0.328506659
-  8.35976334 0.702173924
- -7.41197443 0.134396488
--15.95683040 0.618526462
-  8.76889573 0.950243069
- -1.13482624 0.113477080
- -0.60311407 0.090444247
-  4.95508365 0.612511543
-  5.36934491 0.979213258
- -0.03554882 0.807185690
--11.58131144 0.183341373
-  4.46809041 0.796330582
- 12.49741067 0.346860912
-  8.63824488 0.073684997
-  0.49990913 0.732519306
- 12.82688360 0.109400213
- 13.20375065 0.850369092
- -8.41110869 0.177717087
- 16.31959963 0.727704840
- 17.59203613 0.235311681
-  0.32148420 0.842195936
-  5.43148331 0.670904647
-  7.14649727 0.028190029
-  0.25410683 0.421535783
--12.41047826 0.086404379
--10.64180909 0.229659236
- -6.40185653 0.876365242
- 15.63063324 0.667672536
-  1.94280423 0.799266628
- -5.76507450 0.367344192
-  8.60895533 0.154109357
-  9.38306751 0.788742770
-  3.43573528 0.284535277
-  4.81848966 0.872283177
- 11.65839314 0.234109111
- -5.57884822 0.030363060
- -3.94238060 0.325320686
-  9.38133340 0.201141788
- -7.65003459 0.647734396
- 11.23091019 0.084927159
- -6.07705432 0.037273791
-  7.46380750 0.506897136
-  7.42034855 0.869351148
- -4.43031973 0.231191152
- -1.07351537 0.480234836
- -1.40653281 0.690620421
- -3.82710168 0.990191328
-  5.04583490 0.543427375
--11.54265099 0.270542185
-  0.49059479 0.991447248
- -1.40871469 0.555998766
-  3.64241437 0.743840673
--18.30031589 0.357478210
-  4.27487959 0.770619738
-  1.28805821 0.654787106
- -3.19542768 0.218110139
- 12.53375654 0.011857644
- 11.78889419 0.054127726
- -5.38392310 0.839309080
- 16.38024181 0.228801038
- -0.59622631 0.134381782
- -0.74107258 0.258146632
--12.31429450 0.020524447
- -0.79785028 0.968028764
-  6.39899711 0.038162566
-  7.42024044 0.716163692
- -3.62470664 0.018201813
- -2.55049724 0.162446610
--10.79888854 0.683070478
- 10.18490144 0.546461234
- -2.76979044 0.198830067
-  4.85164813 0.094100357
-  0.96477200 0.381801756
-  8.13344336 0.639730450
-  9.04684412 0.786084368
- 10.41746272 0.828304181
-  0.94334368 0.798419831
- 10.13116556 0.191715972
- -4.12728628 0.575178239
- -9.59222379 0.876405375
-  1.64680258 0.391003085
- -4.58897613 0.039176486
-  0.38394379 0.511577564
- -4.80428215 0.222785463
-  0.35363661 0.681658725
- -9.63685708 0.183035382
-  3.54363414 0.766127414
-  6.89610808 0.967514568
- -2.03781105 0.464416752
-  8.67956196 0.421424078
- -1.09959038 0.061231448
-  7.12587456 0.028601318
- -6.93064672 0.402561175
-  8.57989199 0.925089270
- -9.55071810 0.454993099
- -8.11914736 0.509644286
- -5.41909698 0.077813151
--17.03336572 0.875713545
- -1.27438609 0.602163625
-  3.09834374 0.105599007
- -1.59865741 0.439939102
- 11.82272089 0.754984309
-  4.30969696 0.483834579
--10.76886192 0.222486992
-  7.05419803 0.903020271
-  7.36096847 0.440357053
- -2.05864869 0.581170147
- -9.08366913 0.318677911
-  8.57119930 0.605668919
-  7.87702340 0.570206991
-  5.22035786 0.542344385
-  2.37238850 0.595969470
- -4.29809941 0.634313781
-  4.51647479 0.796663089
- -0.62478780 0.562099444
-  8.50866078 0.490014249
-  3.46694991 0.122890089
- -7.31956453 0.885170890
-  2.20259268 0.167180856
- -1.81003626 0.702563515
-  8.44526939 0.973495019
-  8.19767069 0.881261264
- -5.92422578 0.686557351
- -0.11826129 0.712798344
-  5.66132869 0.922826429
- -5.40845018 0.642183516
-  6.67839036 0.680978989
- 11.88962825 0.487904896
-  3.32266332 0.931709581
-  0.24234019 0.405641313
--12.79023339 0.361005489
--13.57875491 0.266289733
-  1.81304596 0.775093821
-  0.36755600 0.400225605
- -9.15574205 0.518040748
- -3.90436548 0.396869908
-  9.24764042 0.669374848
-  0.74869385 0.609881390
- -3.62958907 0.928867495
- -0.02527232 0.557679930
-  0.04433418 0.152565816
- 11.76152632 0.865663501
- -4.62181124 0.007000650
-  5.82271403 0.389678502
-  0.33289002 0.532940826
- -7.65647076 0.681574524
- 11.81023732 0.107165912
- 11.42121999 0.989580324
- -5.47120641 0.762285550
-  3.82311561 0.388755074
- 16.91059711 0.461236022
-  4.14012105 0.802420151
- -1.35278659 0.036646959
--12.81733350 0.179096148
- -0.94395134 0.450959878
- -5.39002376 0.264783062
-  4.16227017 0.780743762
-  7.26179625 0.821382454
- 15.10062276 0.469253936
-  1.45877225 0.685434405
- -9.87966760 0.767201511
-  7.03156071 0.195142483
--11.71327419 0.774014869
- -4.55518706 0.973103604
- -1.75221406 0.175172193
- 10.35631400 0.080670414
-  4.97650495 0.597478189
-  2.25703939 0.585949751
- 10.72500409 0.339720931
- -5.02901029 0.997874377
-  6.24398637 0.655067479
- -5.83880059 0.184948259
-  2.17256077 0.746741866
- -5.59809380 0.277523381
-  8.19384177 0.334565607
-  3.35250431 0.952057263
- 16.20874892 0.901400446
-  1.63205839 0.235388475
- -1.07921163 0.608376332
-  0.24315118 0.862639830
- 15.61923078 0.050955422
-  1.99639207 0.358905687
-  8.14825538 0.190069662
-  4.55210835 0.784025901
- 13.51582298 0.973572910
- 15.42415796 0.969080992
-  2.23978124 0.551857514
-  1.00858991 0.919566804
- -2.77293574 0.906998180
-  7.10750420 0.934792213
- -8.01377290 0.682306063
-  9.67873875 0.239576806
-  7.54867950 0.065860266
- 13.85701962 0.733823443
-  8.48212853 0.285731085
-  3.55278843 0.998255904
- 21.94592206 0.205463912
- -2.07957143 0.948665109
-  1.54169997 0.200109744
--11.36934275 0.447122472
-  3.07094572 0.815147945
-  6.45818709 0.007849948
-  1.85594578 0.818796540
- -2.43799564 0.962013689
--17.96539549 0.654190963
- -0.93433746 0.454930236
--11.06904368 0.898560975
- 14.89733742 0.479152492
- -5.72390675 0.136197255
-  9.46781102 0.669006610
-  5.35954546 0.259381138
-  3.78388994 0.933778797
-  1.95373423 0.517555994
- 10.96772341 0.666138826
-  9.40585102 0.779906833
-  0.75347502 0.142656741
-  7.64803672 0.734297119
- -0.40051164 0.362230232
- 10.00747057 0.660820381
--12.86024975 0.072988046
-  1.43515528 0.229672223
- -6.75981709 0.658534537
- -5.61355474 0.795897133
- -4.40596595 0.038787666
- -1.37033650 0.371835229
-  6.66666573 0.560963737
-  8.18430044 0.284787698
- -0.55742330 0.622783662
- -0.39757686 0.673551753
--12.68628005 0.373038561
-  4.06416215 0.760546238
-  4.65859855 0.516761886
-  3.55304076 0.266856843
- -7.35294817 0.615783196
-  1.01222898 0.158266779
-  9.91052610 0.285619547
- -6.42966726 0.573689954
- 10.97425098 0.985095061
-  5.79394599 0.404333309
- 10.09106608 0.441037857
- -1.47295537 0.577661077
- -2.07959719 0.547176133
- -8.76910940 0.498979558
--11.15658312 0.135862745
- -0.88456783 0.326480064
-  9.71607440 0.998076370
- -8.76072622 0.386244511
--19.26823092 0.461833959
- -0.11280313 0.064155908
-  0.64625887 0.172078148
- -5.35323428 0.331153163
- -1.71034509 0.330955888
-  4.27104744 0.590544244
-  7.33843789 0.263171531
- -5.38121637 0.539675802
- -6.87566548 0.127313096
- -2.50161298 0.269417630
- 10.99076986 0.097362729
-  6.34017269 0.318528587
- -4.63672382 0.451038055
--11.55122495 0.987073278
-  4.78618612 0.297342215
-  2.97547390 0.197312152
- -5.54495280 0.499701114
- 17.67606173 0.810316588
- 16.01578815 0.643667608
- -0.16258467 0.228284761
-  7.92123340 0.784289369
- -2.26303900 0.270764770
-  5.84136933 0.437763291
-  4.96955217 0.389720490
- -8.09516710 0.829068548
- 14.59207207 0.513593803
-  2.80954688 0.650799867
-  4.53653552 0.672326278
-  4.49116737 0.807447691
- 18.87549709 0.647303378
-  9.80118464 0.932576117
--13.02124969 0.038651904
- -6.15189291 0.697593318
- 15.81920283 0.249825051
- 10.81503188 0.152372300
--23.58738366 0.593560367
-  8.15716338 0.411680007
-  3.45349379 0.351061414
- -6.39345334 0.374926213
-  8.72924585 0.165759028
- 22.17948804 0.003736780
- -4.73053410 0.582425257
- 16.88289626 0.484899167
- -1.78826142 0.663273340
- -0.78106025 0.337039969
- -2.92461669 0.810174719
--13.89224399 0.177428986
-  4.56809819 0.025010350
- -1.07452825 0.649632933
-  0.58148751 0.829606422
- 12.13329525 0.354819526
- 17.35605568 0.284862590
--12.43678107 0.827661083
- -1.89492796 0.574929572
-  2.18520382 0.846299917
- 18.11449649 0.603173531
-  4.34508582 0.484049042
- 17.49394569 0.094811656
- 10.67752350 0.166176400
- 17.13374502 0.547208197
-  4.42138123 0.768691494
-  5.38445574 0.788597361
-  0.79946671 0.851883720
- -4.67547904 0.995621191
- -5.61496422 0.523793593
--20.52093126 0.881207308
- -8.95996814 0.851078124
- -7.63483710 0.739657373
- 11.02131097 0.678060014
--10.56228517 0.202393048
-  6.48841788 0.143946271
-  3.44853632 0.913249620
- -0.02080024 0.070765134
-  2.08654297 0.032468089
-  8.13415912 0.439470874
- 11.19028936 0.944954026
-  0.26670866 0.492724593
- -9.33692734 0.982611921
- 17.23967092 0.313428994
-  0.36906670 0.660669528
-  7.89735684 0.977628886
- -4.00171487 0.379327632
-  5.01615432 0.735627296
-  0.42214214 0.092461754
- 13.60634772 0.218359635
-  6.57431413 0.067653525
- -1.77668341 0.717799276
-  5.16227422 0.325502093
--15.29091550 0.332815338
-  3.33602480 0.594168551
- 13.80131443 0.817724470
-  5.92111679 0.947854666
-  3.59747624 0.330860216
- -6.79722403 0.093518715
- -1.86606213 0.824179728
- 17.05226458 0.466573672
- 10.39712467 0.409067778
- -4.78536386 0.891470739
- 11.92963128 0.719633060
- -1.44230992 0.232628002
--12.31860616 0.834134222
-  2.93439660 0.957842480
- 14.27963295 0.546264646
-  2.17488820 0.701170328
- 10.78772417 0.612332448
- -0.47049341 0.378564293
- -0.35140634 0.034337429
-  5.04887868 0.211697132
- -3.51562580 0.663243607
- -0.82013387 0.602497174
-  2.78954743 0.325294790
-  8.67905777 0.820296625
--12.70343389 0.315467361
- -2.59373236 0.015571904
- -4.60369241 0.293737716
-  1.58669084 0.671091860
--10.44245103 0.501340276
-  4.85215578 0.141572007
- 10.46303284 0.801814632
-  1.27898298 0.236929983
- -1.72225479 0.608500539
- 20.18685735 0.827124630
-  3.27308817 0.542065179
-  1.01596956 0.254672115
- -8.88872881 0.460876757
--11.31397349 0.636168639
-  0.85294367 0.816417328
-  3.54262337 0.944147626
--10.53603202 0.675775741
-  4.34832198 0.121988381
- 11.56451662 0.283063133
- -7.36454369 0.500596540
- -8.23701113 0.379483261
- -8.36081323 0.219730782
- -6.39158860 0.739171315
- -1.40518544 0.478709398
- -4.01314821 0.460476388
- -7.34814047 0.406242873
- -7.80836711 0.730648091
- -0.57729135 0.152336258
-  4.98352832 0.026424939
- -3.78181635 0.453598432
- 20.16821827 0.845273124
-  5.20758271 0.573569671
- -3.05534245 0.286828574
- -5.31306254 0.961990401
-  1.09307567 0.006478724
- -3.75412572 0.598277695
- -2.38444245 0.777900122
-  2.46837742 0.280363751
-  9.72195519 0.041094463
-  3.96271247 0.604775284
-  2.14105354 0.400315328
-  7.88645912 0.404573389
- -4.03565076 0.798377309
- 10.80180959 0.932152434
--10.89359212 0.446813857
-  1.43144578 0.310194540
-  4.79825196 0.504826858
- 10.73201365 0.384306369
- -4.07526187 0.893893643
- -2.84330198 0.390202663
-  5.81825057 0.830581384
- -2.77842745 0.382966910
- -7.70333673 0.157692966
- -3.25753058 0.726303603
-  8.50032387 0.556524444
-  2.35027236 0.857076526
- -1.70740565 0.194760923
- -3.40693880 0.696420946
- -8.03983352 0.514393263
- -1.85105344 0.609459979
- -9.01148029 0.526019631
- 18.37344635 0.690793045
- 16.46079416 0.811535334
-  4.10224315 0.043403618
-  7.06657672 0.831274577
- 15.31421824 0.434558881
--12.36760970 0.004215634
-  1.95473415 0.277788662
- -0.93207006 0.368433415
- 15.39919341 0.843189783
-  5.23452387 0.626226925
- 11.40805770 0.002417288
- -1.30282837 0.072493756
-  3.92130690 0.675355182
-  2.53148399 0.027222295
-  4.92705318 0.934429364
-  5.54978818 0.042268708
- -2.19608977 0.246743834
- -0.62565550 0.858214200
- -8.98329365 0.646827226
- 12.78468146 0.533966352
-  2.01061290 0.418710227
-  1.03689579 0.019241741
-  8.01166696 0.992268130
- -4.49786437 0.694127903
- -8.15387184 0.066275002
-  2.22256207 0.083301613
--12.27145086 0.535369809
-  9.95709112 0.227692557
- 14.58198717 0.667298058
-  5.98046083 0.922503625
-  1.25640725 0.632933575
-  9.77623752 0.136171032
-  5.57068426 0.374916651
--10.07048336 0.470411379
-  3.69267954 0.897278365
-  2.22185354 0.212539549
-  7.96155623 0.720525208
- -6.21272358 0.771491819
-  2.63054735 0.474989115
- -2.81488890 0.675381020
-  4.52747191 0.118615879
- -3.22975936 0.783991133
- 11.42834761 0.423344824
-  0.26512464 0.617515445
- -5.84322807 0.210915613
-  9.61073028 0.988117333
- -6.11878012 0.492318959
-  5.30581443 0.339379499
- -6.40132703 0.903540026
-  1.22921808 0.122161655
-  8.08547837 0.197296588
- -0.77943801 0.935963718
- 11.43194858 0.828270943
- -5.41689395 0.556863468
- 15.14667847 0.565186375
- -5.15327419 0.542802437
- -3.95903082 0.643379366
-  5.78847793 0.391369361
- 11.54430873 0.158789330
-  1.90340148 0.841316129
- 14.69680285 0.532022770
-  0.68552840 0.367073827
- -8.72287967 0.250127491
-  9.35401445 0.836083158
-  5.32139524 0.996712598
--14.53387897 0.825434481
- -2.93925146 0.513153861
- 12.54386493 0.713306793
-  2.04842442 0.993893406
-  2.87461954 0.049843312
-  4.89765230 0.376710062
- -6.23945314 0.321108142
- -3.45840168 0.854710947
-  9.05807160 0.199992188
-  3.33815006 0.787302467
-  4.22244242 0.351841910
- 15.75879160 0.268699469
-  2.78549859 0.920299974
- -4.46643118 0.727283862
-  0.48021298 0.428672083
-  2.55814938 0.130915212
-  5.00692968 0.062266047
-  4.78801127 0.325124688
-  6.39524485 0.693406744
--10.46792584 0.458128441
- 10.14111908 0.353412759
--10.56424183 0.821588957
-  7.60967746 0.267669137
- -2.34956688 0.434855697
- 23.82269027 0.802311880
-  8.37170447 0.445185000
- 10.05024769 0.778687843
- -9.15753018 0.957292819
- 12.17438228 0.774769426
-  1.57960028 0.783591989
-  0.06719501 0.849073924
- 16.21114558 0.243444943
- -3.79808298 0.842994720
-  8.98927715 0.020537113
-  7.72362992 0.984168340
- 11.25158442 0.152385348
--21.23936903 0.909204114
-  7.34995949 0.987249305
- -7.99435203 0.335456401
- -2.78218185 0.768517548
- 11.59547596 0.466617637
- 15.90870706 0.071892573
-  5.58160897 0.554485703
- 16.05253351 0.815206562
- -3.23103465 0.280495460
- -4.61108636 0.035757819
-  5.41596511 0.746146856
-  2.92445613 0.136743821
- 11.23628254 0.681316365
--12.93714705 0.838791576
-  9.94668264 0.084457395
- -4.56061529 0.983605894
- -4.24795688 0.601732731
- -2.83740044 0.375102341
- -0.43078317 0.403870303
- 15.19689584 0.114826374
--10.29920266 0.731582141
-  6.01686515 0.641655876
-  6.69431335 0.496723697
-  4.62223602 0.328118236
- -1.74309026 0.072604771
- 14.31971261 0.827101483
- -1.86629155 0.613346722
-  8.30971428 0.274948560
-  8.50080711 0.059822908
- -7.94061422 0.121069240
- -2.72096492 0.710791774
-  3.33259421 0.398621625
-  1.73248470 0.488581205
-  9.56008489 0.011104565
- 12.71499762 0.038568985
-  4.11512127 0.219846314
- -0.96707584 0.822646857
-  4.98621667 0.633779997
-  4.69384821 0.295708955
- 10.16008645 0.778287787
- -7.72973800 0.097096969
-  2.87264210 0.796538177
-  4.56095440 0.862952770
-  5.02621658 0.934628629
-  3.18138681 0.805600816
- -1.02245780 0.317640678
- 18.16001652 0.992503640
-  4.13729026 0.941910149
-  1.61211303 0.377271914
-  1.71520009 0.735196094
-  3.26325421 0.514432564
- 12.94663819 0.591190711
- 10.53239931 0.005877708
-  8.06705056 0.340779884
- -5.09007267 0.332516161
- 12.31973355 0.323119296
- -2.69957650 0.633232996
- 12.51207803 0.377641090
-  8.02081444 0.859293157
- -0.13098726 0.099370804
- -0.97757546 0.852873609
- 16.73605399 0.595854575
-  3.63219184 0.329310613
- -4.79105630 0.247760146
- -4.77209495 0.708235587
-  0.92107647 0.924567254
- 12.12724271 0.433550712
- -5.07731478 0.200109463
-  9.16019579 0.897456586
- 18.33260560 0.649877409
-  1.93596773 0.584401505
-  8.51254631 0.283154523
- 11.41092928 0.698703314
- 10.85035748 0.351078210
- 12.62749979 0.570101319
- -2.32028296 0.313842122
- -2.45778301 0.007943144
-  6.93102526 0.108737491
- -0.67304654 0.245399613
-  9.27294774 0.204010286
- 14.29292826 0.396294626
- 14.05843185 0.864613328
- -3.73515954 0.305862948
-  0.36606339 0.116802407
- -5.79235478 0.457308058
-  8.70346900 0.858244380
- -8.91321043 0.077001581
-  0.58499566 0.503209780
-  0.39160153 0.324883353
-  7.46715326 0.343451039
- 12.36256009 0.679483638
-  8.84283689 0.687359177
- -6.39396909 0.113065562
- -3.67844896 0.667335667
-  9.36904962 0.009815419
- -3.25244888 0.213105120
- 19.09389976 0.593130536
-  7.28826611 0.829483570
- -5.44565944 0.956490203
-  7.96993416 0.770961635
-  0.20683778 0.006497153
- -3.73273760 0.037042812
--10.64745846 0.813594448
-  5.70578906 0.157678242
-  4.05282218 0.224663656
- 14.77711159 0.577586777
-  0.89685942 0.297213941
-  3.92600687 0.672347849
--12.29347477 0.367072171
- -9.33603480 0.456544225
- -0.86683190 0.088696811
-  4.65685745 0.779783359
-  1.24438030 0.712958633
- 11.43533814 0.920345548
--10.18380242 0.044456697
- -1.20684029 0.992051648
- -9.78059038 0.611477837
-  3.05588762 0.581933667
-  3.47419279 0.769325101
-  0.87528245 0.455214184
- -3.13185655 0.805887381
- -0.82283965 0.707668384
- -1.86717272 0.984060013
- 16.56357048 0.217369677
- -2.11052646 0.474156371
- -1.39795364 0.958554209
-  4.87468692 0.328779186
-  2.69163553 0.401633221
-  6.08640626 0.599963560
-  7.41420081 0.240202007
-  5.73729928 0.696034193
-  7.31747120 0.569520861
- -6.20465547 0.214005920
- 17.52477873 0.667125450
- 12.97855692 0.796977778
- -3.35883428 0.379721403
- -2.90306972 0.552454626
-  5.31617371 0.401625473
- -3.86414389 0.830986352
--14.94107832 0.702705123
- -5.74060402 0.833328045
- -8.10116203 0.078855027
- 23.48247017 0.568666620
- 20.22005082 0.357069809
- -2.53387193 0.637455425
- 15.72048831 0.845354124
- -4.41494567 0.934471473
- -8.02254420 0.378467959
- -0.13398716 0.489382793
-  0.95967155 0.813667919
-  0.14835664 0.215786848
- 14.31875579 0.675145039
- -6.36589196 0.822037848
-  8.25942906 0.156787526
- -7.33597529 0.051076292
- 12.58936771 0.666507807
-  2.34653798 0.626196518
- -0.69351398 0.050664564
-  7.08738260 0.808776877
-  5.19653521 0.779008623
-  3.20900427 0.197212774
-  7.81171331 0.744975548
-  6.49008186 0.991318119
-  7.27471854 0.839642650
- -7.68367290 0.880500743
- 12.04846713 0.797754890
- 14.93435279 0.190527791
- -3.83641079 0.075995951
-  2.15090497 0.426560973
- -3.61166623 0.777188818
-  8.49333248 0.891445999
- -7.46936100 0.148607446
- 13.85406193 0.983656455
- 12.20477754 0.499345090
- 10.09415710 0.638127733
-  5.37134772 0.110929011
-  8.17660840 0.879411588
- -4.38804367 0.608933700
--11.78145902 0.265134740
-  6.18940186 0.970982743
--16.24831477 0.844983635
-  9.52790402 0.578152651
- 16.44372225 0.264144422
- -2.48286428 0.893865621
-  5.33297280 0.512990215
- -2.68912507 0.851636020
-  9.94607707 0.644483197
- -1.93526852 0.550759844
-  2.34310539 0.787853650
- 11.79131608 0.983668283
-  3.16689104 0.605394987
- 10.47759320 0.919442774
-  2.86973133 0.557835916
- 10.30674302 0.442504870
- 10.92820575 0.976183635
-  7.98050212 0.139334994
- -0.64719705 0.981199028
- -2.63625596 0.341524563
- 11.38799583 0.858987904
-  1.37321916 0.202373294
- 12.66698520 0.142127091
-  5.83599540 0.864497670
-  4.88659560 0.472598564
- 13.00108599 0.961629827
-  5.79514791 0.408377170
- -1.47807631 0.536772872
- -3.38142805 0.288956265
-  6.25154986 0.828695103
-  2.40919373 0.478123848
-  3.72990486 0.056539500
- -9.90915815 0.603356617
-  0.21737084 0.737251896
-  5.36929388 0.026920178
- -1.05027354 0.034992509
- -4.97887624 0.506301429
- -6.40058435 0.014061876
- -0.14610837 0.619699963
-  3.78483619 0.653952701
-  3.84143365 0.162122572
-  2.66030676 0.196542503
--10.56809462 0.386200215
- -5.01140125 0.711703654
- -3.09809005 0.118120179
- -2.76110171 0.118809515
-  2.85825107 0.129646974
-  2.75993661 0.171779333
- 11.55931169 0.372165133
-  9.21211486 0.969079819
-  6.02207148 0.498965865
- -3.52883224 0.954619249
- -2.60190803 0.069405278
-  1.34183694 0.569402487
--11.35155228 0.766344735
-  1.04661568 0.023673810
- -1.90461932 0.179728300
- 13.72465582 0.467775796
- 19.14882438 0.476924297
- -1.07480326 0.944407858
- -8.44289331 0.059804028
-  1.89732882 0.743225795
- -7.87832463 0.672539050
--12.24163608 0.916803014
--12.77212790 0.648129714
-  6.39197262 0.622954436
-  5.26261666 0.494421400
--10.65239640 0.695527931
-  4.63841458 0.499519163
- -2.94276544 0.429201572
-  4.68788953 0.639613685
- -1.03031400 0.349342009
- -2.69946354 0.221796918
--15.32237714 0.631289988
- -8.31962698 0.925363812
- -5.80897714 0.833536878
-  7.16070989 0.832098478
--10.99679727 0.794048223
-  0.84514458 0.748014415
-  2.23308495 0.111176288
-  3.56351018 0.599805508
-  0.88336430 0.746908710
--14.63461670 0.314391808
-  4.39039715 0.079604833
- -7.07001439 0.633705345
-  2.11252583 0.461468123
-  7.60219364 0.497389476
- -4.87713428 0.039952736
-  2.17515292 0.421830084
-  0.64302362 0.267982804
--22.29371533 0.646257366
-  0.31652779 0.060548371
-  7.93445046 0.343570449
-  0.28292029 0.651909785
-  2.77775640 0.637679287
-  6.22941586 0.291132945
- 23.68567532 0.708513840
-  9.49503014 0.645200206
-  0.87405420 0.063154289
- -4.04931224 0.110797498
-  8.91607239 0.732917195
- -5.77728018 0.635435595
--16.37296319 0.343727613
-  9.87409940 0.774177478
- -8.11360210 0.377765616
- 14.54242540 0.204343527
-  0.36239636 0.115528352
- 19.51009176 0.181365423
-  1.23592729 0.011676577
--15.81877035 0.767155028
- -0.05911251 0.737944231
- -6.55395965 0.214062137
- -7.85591487 0.539865054
- -9.73010882 0.730924287
- 11.79433862 0.267116856
- -8.84308360 0.088069165
- -5.56689174 0.405987947
-  7.59010135 0.655631611
- 10.07629305 0.031106157
- -6.19331485 0.052350502
- -4.58626710 0.326901540
- -5.19431549 0.125740555
- -2.08129025 0.034657174
--10.48798034 0.153632237
- 13.04657686 0.317295703
-  1.94142067 0.731437668
- -1.62470735 0.701070475
--12.27046912 0.505781742
- -2.96095228 0.122808075
- -2.91847765 0.372668438
--14.83230131 0.100749725
- 16.57350659 0.707854947
- 10.05473238 0.244046174
-  5.50858969 0.070691273
-  7.65309196 0.245393047
-  7.16359996 0.056261015
-  4.33026356 0.318855549
- -4.65721575 0.271249938
-  2.85909691 0.309377566
-  3.02736080 0.553944209
-  6.22796768 0.763945813
- -4.47036396 0.197721195
-  2.78901176 0.441166128
- -9.94574794 0.964660659
-  1.86451969 0.704635530
--10.38926659 0.772304221
- -5.36565800 0.029527218
-  1.99230152 0.578448308
- 13.65547415 0.936050102
- -2.05229879 0.851521142
-  0.99504588 0.974891334
- -1.46027404 0.320227281
- -8.45614275 0.727910071
- -0.95201934 0.199101032
- -2.46642929 0.462252060
- -6.44060430 0.703637604
- -2.58115910 0.084948525
-  0.76248197 0.125769097
- 12.00603845 0.675927328
-  1.97538215 0.782502470
-  2.23331320 0.870228155
- -3.10226060 0.485056198
- 12.59337170 0.584729095
- -2.42247402 0.387588168
-  9.41981063 0.374604221
-  6.26806243 0.727453335
- -5.30630356 0.427294265
- 13.81542647 0.394246994
-  1.05647858 0.646684666
--12.25005208 0.010531726
- -4.58162076 0.077133994
-  0.58094190 0.400275636
-  5.79443858 0.641731247
-  8.87635216 0.913593476
-  9.71048520 0.955285711
- 13.10563373 0.908471848
-  4.99194220 0.967014095
- 15.88178853 0.041518216
-  9.35962068 0.864770023
- -7.53095731 0.300106124
- 12.18427585 0.248876997
-  9.22034502 0.450149366
- -1.02861237 0.684246939
- -2.98140404 0.326901490
- -4.64316598 0.425381055
- 15.35233259 0.630774937
- -1.85655250 0.226889991
- 15.43748330 0.584219351
- 10.39060893 0.387854461
-  2.80705696 0.564024865
-  3.48201221 0.787103673
-  7.03787977 0.112019552
-  8.41853061 0.798376796
- 15.63925527 0.873984550
- -4.05742183 0.699131238
-  6.56954685 0.720018710
-  2.44007265 0.232697343
-  3.75597926 0.975133449
-  2.92362149 0.290975435
- -4.74372257 0.003738451
-  1.28365940 0.987536495
- 15.65288265 0.179629701
--11.76385004 0.850614822
-  1.56331228 0.592017435
- -9.64774741 0.024951969
- -9.44879860 0.993960270
- 29.33340056 0.913358233
-  7.97233120 0.021820585
--12.10837953 0.401535846
- -1.20729618 0.984977268
-  3.63219301 0.491142613
-  2.79853507 0.663823888
-  3.19584583 0.612511282
- -0.81790885 0.908769330
- -1.67795944 0.611690031
-  2.55137163 0.109447998
-  4.36572889 0.382049700
- -6.35667866 0.162787163
- -0.76239101 0.892383562
- -3.99558996 0.466572017
- -0.47513018 0.457760464
--10.69568261 0.544872910
-  4.30943512 0.982456072
-  2.91825703 0.823403368
-  0.10753188 0.945676881
- -8.38623073 0.923085521
-  4.95690232 0.188128654
-  5.39956649 0.331692462
- -1.47421789 0.327711090
- -1.81689665 0.713285385
-  5.15137860 0.414906436
-  5.68897151 0.110799415
-  0.78825159 0.396824099
- -1.78376652 0.929264595
-  0.76991060 0.950124414
- 15.81469073 0.951245195
- -4.33820920 0.009896093
-  1.67174323 0.821983745
-  0.38997945 0.928857784
-  1.97848484 0.175680230
- -5.81067801 0.772580245
--10.45208478 0.418845035
- 13.34024524 0.905645046
- -8.79585122 0.906516178
-  2.89093397 0.113010960
-  2.22324289 0.799940482
-  8.95497981 0.984663669
-  0.93288527 0.277914575
--17.35306978 0.455587022
- -3.26914604 0.406757639
-  8.75871227 0.067059659
-  1.79914932 0.784879863
- -0.67305388 0.006393497
-  1.66805704 0.039614073
-  9.03868439 0.601066847
-  4.29458670 0.015772820
- -8.15564320 0.939633197
- 12.50538902 0.766347628
- -0.45547258 0.464314122
- -9.47180656 0.640114882
--13.25567198 0.125841930
-  2.87660101 0.381931128
-  7.37834152 0.648958712
- -0.45874073 0.303139498
-  4.87941450 0.500090729
-  4.50344891 0.311329309
- -6.14257896 0.061368838
-  5.98243271 0.873804882
- -2.64694079 0.080493398
--17.79727796 0.188420116
--13.52552336 0.798403568
-  2.29086373 0.518700767
-  5.21493652 0.788828533
- -8.09641615 0.775041349
-  5.87005782 0.079447757
- 10.74795720 0.955691540
- -8.01115709 0.004508053
- -7.53735064 0.054195934
- -6.79130165 0.877193354
- -1.26419539 0.837772170
-  8.31082852 0.967509866
- 21.83090247 0.261529880
- 11.20453234 0.913858875
-  7.19128396 0.541942489
- -2.93623595 0.860095891
- -3.61446403 0.022418065
- -6.59997709 0.532998307
-  3.71486934 0.522669434
- 18.03420874 0.295064126
- -8.75452291 0.390175021
- -7.83680812 0.263760724
- -1.10263921 0.501819826
-  2.05633484 0.338684642
-  5.25636848 0.558667384
- -7.33260497 0.457327559
-  3.86721296 0.612182242
--15.94331373 0.478329365
-  3.71501899 0.264241588
- 18.26175822 0.023212661
- -5.21093378 0.184378036
- -2.44074986 0.297114134
--11.88339919 0.875956945
-  7.52127093 0.927322099
-  5.31597834 0.416344968
- 11.42012314 0.952491078
- 13.64950955 0.794183413
- 12.50861255 0.390723282
- -3.48142207 0.538708662
- 14.32910902 0.085221990
-  5.76196699 0.313860477
-  2.63751452 0.917424732
-  2.99975231 0.208662214
-  7.09852825 0.798246964
- -1.95742636 0.352166210
-  7.80534904 0.386523123
- -4.47229047 0.290188493
- -4.35535158 0.761527294
-  1.47083860 0.447897289
-  3.09504296 0.048513534
-  3.50446804 0.925072429
- 12.00487617 0.574499971
- 10.35171466 0.934193962
- -5.63256003 0.968833982
-  7.15625220 0.467160468
- -7.81378393 0.790220187
-  4.52101003 0.014459969
- 12.90773453 0.990835752
-  7.70737851 0.785329264
- -3.37196794 0.066025357
- -5.12793918 0.347459322
- -7.96083724 0.216608294
- 12.81247279 0.287880308
-  4.63872463 0.426881173
- -3.85439309 0.336532356
-  4.55633320 0.108001536
- -2.40824634 0.135247519
-  1.65932541 0.005108006
-  3.26129578 0.093163961
- -3.52114597 0.544041275
- -9.08479260 0.111212700
-  7.75150456 0.942726234
-  7.44829768 0.396996218
- 14.44430576 0.525470762
- -2.13457508 0.207577358
-  9.74871681 0.537177845
- -4.53338693 0.625854028
- 16.15962824 0.947933141
- -0.17711664 0.480940902
- -7.21470818 0.006952612
- -6.27644212 0.737909602
- -0.81648165 0.230003567
- -2.10429152 0.209671398
-  7.69291241 0.987903443
- -0.32284504 0.183904658
- -0.90833921 0.782169770
- 10.35542238 0.201758865
- 10.40788689 0.540802365
- 10.80011849 0.298263948
-  7.39943598 0.785716539
--12.71674257 0.154135834
- 16.67139866 0.116794235
- 12.47832985 0.998179468
-  3.24041348 0.653080096
- -5.50381593 0.995396942
--10.41952811 0.576472768
-  4.33514092 0.146434686
-  4.41294276 0.507165968
- -0.14746982 0.698144836
- -1.33323051 0.466481571
- -7.01201350 0.797150114
-  6.58669848 0.942287809
-  7.19444974 0.053569397
- -5.66046997 0.435728340
- -5.07828702 0.497727572
- 13.72045272 0.324222944
-  9.99111984 0.355713969
- -4.42363728 0.071790181
- -2.34300923 0.618434528
-  4.98594041 0.605667438
- -2.45307721 0.894546647
- -3.52276424 0.760086779
- -3.69489441 0.960758209
- 13.04792817 0.511273320
- 21.61433486 0.236270637
- -9.57303968 0.964235539
- 11.70400744 0.391045695
-  4.25170422 0.411577090
-  7.87516537 0.952858161
-  9.89202673 0.971106687
-  7.51554467 0.505791978
-  2.17944879 0.893835908
-  0.82420351 0.213912155
-  2.47121932 0.688019842
--14.88503628 0.640950883
-  8.16032283 0.277742858
- -4.65776244 0.129415853
-  7.48274838 0.074213153
-  7.70537066 0.476778957
-  5.88202944 0.351838898
-  1.95618325 0.106331699
-  7.22064623 0.511434587
--18.64632081 0.009314188
- -6.16794611 0.526204245
-  2.14042033 0.675800465
- -1.89535048 0.916845690
- -7.77156605 0.069742819
- -6.84078801 0.865082345
-  8.17539904 0.095895629
- 10.75170309 0.821383078
- 14.31498805 0.117893208
- -2.82264467 0.809086411
-  0.11117380 0.400587471
-  6.43898314 0.333163663
-  9.48110784 0.465173316
-  5.39395511 0.695273081
- -2.05636570 0.508060862
-  0.68666117 0.647109494
- -6.41880322 0.267530762
- -0.12096589 0.986901165
-  6.46062643 0.588580914
- -4.20926136 0.550783675
-  4.07354300 0.907963701
- 10.84045143 0.900920521
-  2.64504664 0.767700269
- 10.34578229 0.197810342
- -0.19222273 0.281932395
-  3.47400952 0.977555902
- 11.04549389 0.694010579
-  6.79729856 0.056652433
-  9.28300628 0.598930531
- -3.53453282 0.183412212
-  8.04028248 0.250746943
-  5.75964045 0.424692336
- -4.98252741 0.867446071
- 12.00352175 0.289615080
-  7.53497791 0.350915526
-  2.54579776 0.655113837
- -9.29572208 0.900136667
-  6.41659249 0.100570650
-  7.37095646 0.907179211
--12.78417775 0.262214556
-  0.87962107 0.624657444
- -5.96939907 0.296725805
- -2.56857339 0.604065931
-  4.27131811 0.962952479
- 21.72603838 0.442485270
-  6.10056565 0.418383130
- 10.48099521 0.333593221
- 19.28363092 0.382408442
-  2.12080726 0.601206970
- -6.82450704 0.740158518
- 11.32395692 0.627015570
-  5.00040701 0.476274658
--11.64750733 0.105099095
-  5.77442654 0.576560214
-  0.31340364 0.516479036
- -2.09881449 0.146089191
-  5.12411327 0.368130477
-  1.70530391 0.621828438
--12.95649749 0.355726301
-  8.43735652 0.275383759
--15.56161079 0.413160084
-  5.28942694 0.069125495
-  5.96040877 0.438716686
- -2.59318107 0.571116303
-  6.95988992 0.650760909
- 14.00074797 0.623645969
-  1.66101456 0.558763985
- -2.57968349 0.648185379
- -5.47584253 0.716901151
-  6.37222581 0.060563130
-  2.83664864 0.842419730
-  1.48926558 0.620280308
-  0.33471689 0.170312461
-  5.21648412 0.317639631
-  0.51733642 0.843867329
-  9.86005834 0.306036746
- -5.81145791 0.975655452
- -5.43219061 0.303385368
-  5.87157118 0.677369776
-  2.08889926 0.310200439
- -2.53433085 0.194730908
-  7.01359575 0.674259533
- -2.00936260 0.682056466
- -2.98240739 0.787899917
- -7.43289210 0.357483044
--12.58905988 0.981387385
-  5.78095517 0.533526274
- -1.23065889 0.687266774
- -6.82309960 0.293249774
-  8.47000829 0.842056399
- -5.81624772 0.303700280
--14.83571031 0.311387926
-  4.66808472 0.091222946
- -2.90144463 0.438301785
- 10.62458662 0.828335698
-  7.88002491 0.990156110
- 10.27680283 0.251087079
- -9.42498970 0.292462244
-  6.73027640 0.213065205
-  1.28169895 0.353152789
--14.29203733 0.264563048
- 20.35772711 0.265208837
-  3.55095071 0.242905653
--17.97067670 0.373951756
- 10.53141139 0.247520698
-  0.05293205 0.579940423
- 12.79674707 0.288031751
- -5.44235185 0.075899079
- 14.29464811 0.960707538
- -1.36753291 0.124265178
- -4.25946974 0.521720352
--12.46519252 0.385503339
- -6.65343143 0.540942219
-  5.55949184 0.143194404
- -1.20480594 0.515905644
- -4.13839908 0.164461445
- -2.21345425 0.812969725
-  3.94223380 0.229238952
--10.78661097 0.395049514
-  3.06997341 0.791234255
- 24.82205477 0.110859039
-  6.28791249 0.867125744
- -2.80296119 0.703583849
- 13.24274039 0.425951975
- -0.19577471 0.361568727
- -2.34894781 0.954814545
- 19.76339577 0.635462177
- -1.87591480 0.149121567
- -7.70962391 0.711708342
- -2.46291902 0.390902746
-end data
-regression /variables=v0 v1 /statistics defaults /dependent=v0 /method=enter.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Reading free-form data from INLINE.
-Variable,Format
-v0,F8.0
-v1,F8.0
-
-Table: Model Summary
-,R,R Square,Adjusted R Square,Std. Error of the Estimate
-,.05,.00,.00,8.11
-
-Table: ANOVA
-,,Sum of Squares,df,Mean Square,F,Significance
-,Regression,235.23,1,235.23,3.58,.06
-,Residual,98438.40,1498,65.71,,
-,Total,98673.63,1499,,,
-
-Table: Coefficients
-,,B,Std. Error,Beta,t,Significance
-,(Constant),1.24,.42,.00,2.95,.21
-,v1,1.37,.72,.05,1.89,.06
-,,,,,,
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/command/regression.sh b/tests/command/regression.sh
deleted file mode 100755 (executable)
index 360115f..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-#!/bin/sh
-
-# This program tests that the REGRESSION command works.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-    if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo Not cleaning $TEMPDIR;
-       return ; 
-    fi
-    cd /
-    rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-data list list / v0 to v2.
-begin data
- 0.65377128  7.735648 -23.97588
--0.13087553  6.142625 -19.63854
- 0.34880368  7.651430 -25.26557
- 0.69249021  6.125125 -16.57090
--0.07368178  8.245789 -25.80001
--0.34404919  6.031540 -17.56743
- 0.75981559  9.832291 -28.35977
--0.46958313  5.343832 -16.79548
--0.06108490  8.838262 -29.25689
- 0.56154863  6.200189 -18.58219
-end data
-regression /variables=v0 v1 v2 /statistics defaults /dependent=v2 /method=enter /save=pred resid.
-list.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Reading free-form data from INLINE.
-Variable,Format
-v0,F8.0
-v1,F8.0
-v2,F8.0
-
-Table: Model Summary
-,R,R Square,Adjusted R Square,Std. Error of the Estimate
-,.97,.94,.93,1.34
-
-Table: ANOVA
-,,Sum of Squares,df,Mean Square,F,Significance
-,Regression,202.75,2,101.38,56.75,.00
-,Residual,12.50,7,1.79,,
-,Total,215.26,9,,,
-
-Table: Coefficients
-,,B,Std. Error,Beta,t,Significance
-,(Constant),2.19,2.36,.00,.93,.52
-,v0,1.81,1.05,.17,1.72,.12
-,v1,-3.43,.33,-1.03,-10.33,.00
-,,,,,,
-
-Table: Data List
-v0,v1,v2,RES1,PRED1
-.65,7.74,-23.98,-.84,-23.13
--.13,6.14,-19.64,-.54,-19.10
-.35,7.65,-25.27,-1.87,-23.40
-.69,6.13,-16.57,.97,-17.54
--.07,8.25,-25.80,.40,-26.20
--.34,6.03,-17.57,1.53,-19.10
-.76,9.83,-28.36,1.77,-30.13
--.47,5.34,-16.80,.18,-16.97
--.06,8.84,-29.26,-1.05,-28.21
-.56,6.20,-18.58,-.54,-18.04
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/command/reliability.sh b/tests/command/reliability.sh
deleted file mode 100755 (executable)
index 7c58145..0000000
+++ /dev/null
@@ -1,318 +0,0 @@
-#!/bin/sh
-
-# This program tests the reliability command.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-
-activity="create program"
-cat > $TESTFILE <<EOF
-
-data list notable list  /var1 *
-       var2  *
-       var6  *
-       var7  *
-       var8  *
-       var9  *
-       var11 *
-       var12 *
-       var15 *
-       var16 *
-       var17 *
-       var19 *
-       .
-
-begin data.
-6 7 7 5 7 7 7 7 7 7 6 6
-6 7 7 6 7 6 7 5 6 5 7 7
-6 6 7 6 5 3 6 4 5 6 4 5
-4 6 5 6 6 5 4 3 5 6 5 6
-5 6 5 5 6 5 4 4 6 6 5 5
-6 6 7 6 6 5 6 5 6 6 5 6
-5 6 6 5 6 5 5 4 6 5 5 5
-5 7 7 7 7 7 6 5 7 7 7 7
-6 6 6 5 5 7 6 5 6 6 5 6
-. . . . . . . . . . . .
-6 6 5 5 5 6 6 4 6 5 5 5
-7 7 7 6 7 6 7 6 6 6 7 6
-4 7 6 6 6 5 5 4 4 5 5 6
-5 6 3 5 4 1 4 6 2 3 3 2
-3 6 6 5 6 2 4 2 2 4 4 5
-6 6 7 5 6 5 7 6 5 6 6 5
-6 5 6 6 5 6 6 6 6 4 5 5
-5 7 7 . 6 6 6 5 6 6 6 6
-5 7 5 5 4 6 7 6 5 4 6 5
-7 7 7 6 7 7 7 6 7 7 7 6
-3 6 5 6 5 7 7 3 4 7 5 7
-6 7 7 6 5 6 5 5 6 6 6 6
-5 5 6 5 5 5 5 4 5 5 5 6
-6 6 7 4 5 6 6 6 6 5 5 6
-6 5 6 6 4 4 5 4 5 6 4 5
-5 6 7 6 6 7 7 5 6 6 6 5
-5 6 5 7 4 6 6 5 7 7 5 6
-. . . . . . . . . . . .
-7 6 6 5 6 6 7 6 6 5 5 6
-6 6 7 7 7 7 7 6 7 6 6 7
-7 5 5 . 5 . 7 3 5 4 5 3
-7 6 7 5 4 5 7 5 7 5 5 6
-6 5 6 6 6 5 5 5 5 6 5 6
-7 7 7 7 7 7 7 7 5 6 7 7
-. . . . . . . . . . . .
-5 5 6 7 5 6 6 4 6 6 6 5
-6 6 5 7 5 6 7 5 6 5 4 6
-7 6 7 6 7 5 6 7 7 6 6 6
-5 6 5 6 5 6 7 2 5 7 3 7
-6 6 5 6 5 6 6 6 6 6 5 6
-7 6 7 6 6 6 6 6 6 7 6 7
-7 7 6 5 6 6 7 7 7 4 6 5
-3 7 7 6 6 7 7 7 6 6 6 4
-3 5 3 4 3 3 3 3 3 3 3 5
-5 7 7 7 5 7 6 2 6 7 6 7
-7 7 7 7 7 7 7 6 7 7 7 6
-6 5 7 4 4 4 5 6 5 5 4 5
-4 7 7 4 4 3 6 3 5 3 4 5
-7 7 7 7 7 7 7 7 7 7 7 5
-3 6 5 5 4 5 4 4 5 5 3 5
-6 7 6 6 6 7 7 6 6 6 7 6
-2 5 4 6 3 2 2 2 2 7 2 2
-4 6 6 5 5 5 6 5 5 6 6 5
-5 7 4 5 6 6 6 5 6 6 5 6
-5 7 7 5 6 5 6 5 5 4 5 4
-4 5 6 5 6 4 5 5 5 4 5 5
-7 6 6 5 5 6 7 5 6 5 7 6
-5 6 6 5 4 5 5 3 4 5 5 5
-5 7 6 4 4 5 6 5 6 4 4 6
-6 6 6 6 5 7 7 6 5 5 6 6
-6 6 7 6 7 6 6 5 6 7 6 5
-7 6 7 6 7 6 7 7 5 5 6 6
-5 6 6 5 5 5 6 5 6 7 7 5
-5 6 6 5 6 5 6 6 6 6 6 6
-5 5 5 5 6 4 5 3 4 7 6 5
-5 7 7 6 6 6 6 5 6 7 6 7
-6 6 7 7 7 5 6 5 5 5 5 4
-2 7 5 4 6 5 5 2 5 6 4 6
-6 7 7 5 6 6 7 6 6 7 5 7
-5 6 7 6 6 3 5 7 6 6 5 6
-6 6 6 3 5 5 5 6 6 6 4 5
-4 7 7 4 7 4 5 5 5 7 4 4
-. . . . . . . . . . . .
-6 6 7 6 7 6 7 7 6 7 7 6
-. . . . . . . . . . . .
-5 6 5 7 6 5 6 6 5 6 4 6
-5 5 5 5 4 5 5 5 7 5 5 5
-6 6 6 4 5 4 6 6 6 4 5 4
-6 5 7 4 6 4 6 5 6 6 6 3
-5 7 6 5 5 5 5 5 6 7 6 6
-5 5 7 7 5 5 6 6 5 5 5 7
-5 6 7 6 7 5 6 4 6 7 6 7
-4 5 5 5 6 5 6 5 6 6 5 6
-6 5 5 5 6 3 4 5 5 4 5 3
-6 6 6 5 5 5 4 3 4 5 5 5
-6 7 7 6 2 3 6 6 6 5 7 7
-6 7 5 5 6 6 6 5 6 6 6 6
-6 7 7 6 7 7 7 5 5 6 6 6
-6 6 6 6 7 6 6 7 6 6 6 6
-5 6 6 6 3 5 6 6 5 5 4 6
-4 6 5 6 6 5 6 5 6 6 5 5
-6 4 6 5 4 6 7 4 5 6 5 5
-6 7 6 4 6 5 7 6 7 7 6 5
-6 7 7 6 7 6 7 7 7 6 6 6
-6 6 6 4 5 6 7 7 5 6 4 4
-3 3 5 3 3 1 5 6 3 2 3 3
-7 7 5 6 6 7 7 6 7 7 7 7
-5 6 6 6 7 5 4 5 4 7 6 7
-3 6 5 4 3 3 3 5 5 6 3 4
-5 7 6 4 6 5 5 6 6 7 5 6
-5 7 6 6 6 6 6 5 6 7 7 6
-7 7 5 6 7 7 7 7 6 5 7 7
-6 7 6 6 5 6 7 7 6 5 6 6
-6 7 7 7 7 6 6 7 6 7 7 7
-4 6 4 7 3 6 5 5 4 3 5 6
-5 5 7 5 4 6 7 5 4 6 6 5
-5 5 6 4 6 5 7 6 5 5 5 6
-. . . . . . . . . . . .
-. . . . . . . . . . . .
-5 7 7 5 6 6 7 7 6 6 6 7
-6 7 7 1 2 1 7 7 5 5 5 2
-. . . . . . . . . . . .
-3 7 4 6 4 7 4 6 4 7 4 7
-5 7 3 5 5 6 7 5 4 7 7 4
-4 7 7 5 4 6 7 7 6 5 4 4
-6 6 2 2 6 4 6 5 5 1 5 2
-5 5 6 4 5 4 6 5 5 6 5 5
-. . . . . . . . . . . .
-5 7 6 6 6 6 6 6 5 6 6 6
-6 6 6 5 6 6 6 6 7 5 6 7
-3 6 3 3 5 3 3 5 3 5 7 4
-4 4 6 3 3 3 4 3 4 2 3 6
-5 7 7 6 5 4 7 5 7 7 3 7
-4 5 4 4 4 4 3 3 3 4 3 3
-6 7 7 5 6 6 7 5 4 5 5 5
-3 5 3 3 1 3 4 3 4 7 6 7
-4 5 4 4 4 3 4 5 6 6 4 5
-5 6 3 4 5 3 5 3 4 5 6 4
-5 5 5 6 6 6 6 4 5 6 6 5
-6 7 7 2 2 6 7 7 7 7 5 7
-5 7 7 4 6 5 7 5 5 5 6 6
-6 6 7 7 5 5 5 7 6 7 7 7
-6 5 7 3 6 5 6 5 5 6 5 4
-5 7 6 5 6 6 6 5 6 5 5 6
-4 5 5 5 6 3 5 3 3 6 5 5
-. . . . . . . . . . . .
-5 6 6 4 4 4 5 3 5 5 2 6
-5 6 7 5 5 6 6 5 5 6 6 6
-6 7 7 6 4 7 7 6 7 5 6 7
-6 6 5 4 5 2 7 6 6 5 6 6
-2 2 2 2 2 2 3 2 3 1 1 2
-end data.
-
-RELIABILITY
-  /VARIABLES=var2 var8 var15 var17 var6
-  /SCALE('Everything') var6 var8 var15 var17
-  /MODEL=ALPHA.
-
-RELIABILITY
-  /VARIABLES=var6 var8 var15 var17
-  /SCALE('Nothing') ALL
-  /MODEL=SPLIT(2)
- .
-
-RELIABILITY
-  /VARIABLES=var2 var6 var8 var15 var17 var19
-  /SCALE('Totals') var6 var8 var15 var17 
-  /SUMMARY = total
- .
-
-
-RELIABILITY
-  /VARIABLES=var6 var8 var15 var17 
-  .
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output"
-diff -c -b pspp.csv - << EOF
-Scale: Everything
-
-Table: Case Processing Summary
-,,N,%
-Cases,Valid,131,92.91
-,Excluded,10,7.09
-,Total,141,100.00
-
-Table: Reliability Statistics
-Cronbach's Alpha,N of Items
-.75,4
-
-Scale: Nothing
-
-Table: Case Processing Summary
-,,N,%
-Cases,Valid,131,92.91
-,Excluded,10,7.09
-,Total,141,100.00
-
-Table: Reliability Statistics
-Cronbach's Alpha,Part 1,Value,.55
-,,N of Items,2
-,Part 2,Value,.63
-,,N of Items,2
-,Total N of Items,,4
-Correlation Between Forms,,,.61
-Spearman-Brown Coefficient,Equal Length,,.75
-,Unequal Length,,.75
-Guttman Split-Half Coefficient,,,.75
-
-Scale: Totals
-
-Table: Case Processing Summary
-,,N,%
-Cases,Valid,131,92.91
-,Excluded,10,7.09
-,Total,141,100.00
-
-Table: Reliability Statistics
-Cronbach's Alpha,N of Items
-.75,4
-
-Table: Item-Total Statistics
-,Scale Mean if Item Deleted,Scale Variance if Item Deleted,Corrected Item-Total Correlation,Cronbach's Alpha if Item Deleted
-var6,15.97,8.43,.51,.71
-var8,16.56,7.86,.53,.70
-var15,16.47,8.45,.56,.68
-var17,16.60,8.00,.57,.67
-
-Scale: ANY
-
-Table: Case Processing Summary
-,,N,%
-Cases,Valid,131,92.91
-,Excluded,10,7.09
-,Total,141,100.00
-
-Table: Reliability Statistics
-Cronbach's Alpha,N of Items
-.75,4
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/command/rename.sh b/tests/command/rename.sh
deleted file mode 100755 (executable)
index cc7a36b..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-#!/bin/sh
-
-# This program tests that the rename command works properly
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-DATA LIST LIST /brakeFluid * y * .
-BEGIN DATA.
-1 3
-2 3
-3 3
-4 3
-END DATA.
-
-LIST.
-
-RENAME VARIABLES (brakeFluid=applecarts).
-
-LIST.
-
-SAVE /OUTFILE='$TEMPDIR/rename.sav'.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="check sysfile"
-grep -i Brake $TEMPDIR/rename.sav
-if [ $? -eq 0 ] ; then fail ; fi
-
-activity="compare output"
-diff -c $TEMPDIR/pspp.csv - <<EOF
-Table: Reading free-form data from INLINE.
-Variable,Format
-brakeFluid,F8.0
-y,F8.0
-
-Table: Data List
-brakeFluid,y
-1.00,3.00
-2.00,3.00
-3.00,3.00
-4.00,3.00
-
-Table: Data List
-applecarts,y
-1.00,3.00
-2.00,3.00
-3.00,3.00
-4.00,3.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/command/roc.sh b/tests/command/roc.sh
deleted file mode 100755 (executable)
index e350585..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-#!/bin/sh
-
-# This program tests  the ROC command.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-set format F10.3.
-data list notable list /x * y * w * a *.
-begin data.
-1 1 2  1
-1 2 28 0
-2 3 4  1
-2 4 14 0
-3 5 10 1
-. . 1  0
-3 1 5  0
-4 2 14 1
-4 3 2  0
-5 4 20 1
-5 4 20 .
-5 5 1  0
-end data.
-
-weight by w.
-
-roc x by a (1)
-       /plot = none
-       /print = se coordinates
-       /criteria = testpos(large) distribution(free) ci(99)
-       /missing = exclude .
-
-roc x y by a (1)
-       /plot = curve(reference)
-        /print = se coordinates
-       /criteria = testpos(large) distribution(negexpo) ci(95)
-       /missing = exclude .
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="compare results"
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Case Summary
-,Valid N (listwise),
-a,Unweighted,Weighted
-Positive,5,50.000
-Negative,5,50.000
-
-Table: Area Under the Curve (x)
-,,,Asymp. 99% Confidence Interval,
-Area,Std. Error,Asymptotic Sig.,Lower Bound,Upper Bound
-.910,.030,.000,.839,.981
-
-Table: Coordinates of the Curve (x)
-Positive if greater than or equal to,Sensitivity,1 - Specificity
-.000,1.000,1.000
-1.500,.960,.440
-2.500,.880,.160
-3.500,.680,.060
-4.500,.400,.020
-6.000,.000,.000
-
-Table: Case Summary
-,Valid N (listwise),
-a,Unweighted,Weighted
-Positive,5,50.000
-Negative,5,50.000
-
-Table: Area Under the Curve
-,,,,Asymp. 95% Confidence Interval,
-Variable under test,Area,Std. Error,Asymptotic Sig.,Lower Bound,Upper Bound
-x,.910,.030,.000,.860,.960
-y,.697,.052,.001,.611,.783
-
-Table: Coordinates of the Curve
-Test variable,Positive if greater than or equal to,Sensitivity,1 - Specificity
-x,.000,1.000,1.000
-,1.500,.960,.440
-,2.500,.880,.160
-,3.500,.680,.060
-,4.500,.400,.020
-,6.000,.000,.000
-y,.000,1.000,1.000
-,1.500,.960,.900
-,2.500,.680,.340
-,3.000,.600,.340
-,3.500,.600,.300
-,4.500,.200,.020
-,6.000,.000,.000
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/command/roc2.sh b/tests/command/roc2.sh
deleted file mode 100755 (executable)
index 6cd9a44..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-#!/bin/sh
-
-# This program tests  the ROC command.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-set format F10.3.
-data list notable list /x * a * comment (a20).
-begin data.
-0  1 ""
-0  0 ""
-1  1 ""
-1  0 ""
-2  1 ""
-2  0 ""
-5  1 ""
-5  0 ""
-10 1 ""
-10 0 ""
-15 1 ""
-15 0 ""
-20 1 ""
-20 1 ""
-22 0 "here and"
-22 0 "here is the anomoly"
-25 1 ""
-25 0 ""
-30 1 ""
-30 0 ""
-35 1 ""
-35 0 ""
-38 1 ""
-38 0 ""
-39 1 ""
-39 0 ""
-40 1 ""
-40 0 ""
-end data.
-
-roc x by a (1)
-       /plot = none
-       print = se 
-       .
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="compare results"
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Case Summary
-,Valid N (listwise),
-a,Unweighted,Weighted
-Positive,14,14.000
-Negative,14,14.000
-
-Table: Area Under the Curve (x)
-,,,Asymp. 95% Confidence Interval,
-Area,Std. Error,Asymptotic Sig.,Lower Bound,Upper Bound
-.490,.111,.927,.307,.673
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/command/sample.sh b/tests/command/sample.sh
deleted file mode 100755 (executable)
index eb58b06..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-#!/bin/sh
-
-# This program tests the SAMPLE function
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-
-activity="create program"
-cat > $TEMPDIR/sample.stat <<EOF
-set seed=3
-
-data list notable /A 1-2.
-begin data.
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-end data.
-sample .5.
-list.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TEMPDIR/sample.stat 
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="create head"
-grep -v '^[ \r]*$' $TEMPDIR/pspp.csv | head -1 > $TEMPDIR/head
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="extract data"
-grep  '[0-9][0-9]*' $TEMPDIR/pspp.csv > $TEMPDIR/data
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="compare head"
-diff -b $TEMPDIR/head - << EOF
-Table: Data List
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare data"
-diff -w $TEMPDIR/data - << EOF > $TEMPDIR/diffs
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-EOF
-# note   vv 
-if [ $? -eq 0 ] ; then fail ; fi
-
-# Check that there was nothing added
-grep '^<' $TEMPDIR/diffs
-# note   vv
-if [ $? -eq 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/command/sort.sh b/tests/command/sort.sh
deleted file mode 100755 (executable)
index ffc55c2..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-#!/bin/sh
-
-# This program tests the sort command
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-: ${PERL:=perl}
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="write perl program for generating data"
-cat > gen-data.pl <<'EOF'
-use strict;
-use warnings;
-
-# Generate shuffled data.
-my (@data);
-for my $i (0...$ARGV[0] - 1) {
-    push (@data, $i) foreach 1...$ARGV[1];
-}
-fisher_yates_shuffle (\@data);
-
-# Output shuffled data.
-my (@shuffled) = map ([$data[$_], $_], 0...$#data);
-open (SHUFFLED, ">sort.in");
-print SHUFFLED "$data[$_] $_\n" foreach 0...$#data;
-
-# Output sorted data.
-my (@sorted) = sort { $a->[0] <=> $b->[0] || $a->[1] <=> $b->[1] } @shuffled;
-open (SORTED, ">sort.exp");
-print SORTED "$_->[0] $_->[1]\n" foreach @sorted;
-
-# From perlfaq4.
-sub fisher_yates_shuffle {
-    my $deck = shift;  # $deck is a reference to an array
-    my $i = @$deck;
-    while ($i--) {
-       my $j = int rand ($i+1);
-       @$deck[$i,$j] = @$deck[$j,$i];
-    }
-}
-EOF
-
-for count_repeat_buffers in \
-    "100 5 2" "100 5 3" "100 5 4" "100 5 5" "100 5 10" "100 5 50" "100 5 100" "100 5" \
-    "100 10 2" "100 10 3" "100 10 5" "100 10" \
-    "1000 5 5" "1000 5 50" "1000 5" \
-    "100 100 3" "100 100 5" "100 100" \
-    "10000 5 500" \
-    "50000 1"; do
-  set $count_repeat_buffers
-  count=$1
-  repeat=$2
-  buffers=$3
-
-  printf .
-
-  activity="generate data for $count_repeat_buffers run"
-  $PERL gen-data.pl $count $repeat > sort.data
-  if [ $? -ne 0 ] ; then no_result ; fi
-  
-  activity="generate test program for $count_repeat_buffers run"
-  {
-      echo "data list list file='sort.in'/x y (f8)."
-      if test "$buffers" != ""; then
-         echo "sort by x/buffers=$buffers."
-      else
-         echo "sort by x."
-      fi
-      echo "print outfile='sort.out'/x y."
-      echo "execute."
-  } > sort.pspp || no_result
-  
-  activity="run program"
-  $SUPERVISOR $PSPP --testing-mode -o pspp.csv sort.pspp
-  if [ $? -ne 0 ] ; then no_result ; fi
-  
-  perl -pi -e 's/^\s*$//g' sort.exp sort.out
-  diff -w sort.exp sort.out
-  if [ $? -ne 0 ] ; then fail ; fi
-done
-echo
-pass;
diff --git a/tests/command/split-file.sh b/tests/command/split-file.sh
deleted file mode 100755 (executable)
index 9762292..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-#!/bin/sh
-
-# This program tests the split file command
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TEMPDIR/split.stat <<EOF
-title 'Test SPLIT FILE utility'.
-
-data list notable /X 1 Y 2.
-begin data.
-12
-16
-17
-19
-15
-14
-27
-20
-26
-25
-28
-29
-24
-end data.
-split file by x.
-list.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TEMPDIR/split.stat
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare results"
-diff -c $TEMPDIR/pspp.csv - <<EOF
-Title: Test SPLIT FILE utility
-
-Variable,Value,Label
-X,1,
-
-Table: Data List
-X,Y
-1,2
-1,6
-1,7
-1,9
-1,5
-1,4
-
-Variable,Value,Label
-X,2,
-
-Table: Data List
-X,Y
-2,7
-2,0
-2,6
-2,5
-2,8
-2,9
-2,4
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/command/sysfile-info.sh b/tests/command/sysfile-info.sh
deleted file mode 100755 (executable)
index ceafcf5..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/bin/sh
-
-# This program tests that SYSFILE INFO works.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="Create test file"
-cat > $TESTFILE << EOF
-DATA LIST LIST /x * name (a10) .
-BEGIN DATA
-1 one
-2 two
-3 three
-END DATA.
-SAVE OUTFILE='pro.sav'.
-
-sysfile info file='pro.sav'.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="filter output"
-egrep -v '^(Created|Endian|Integer Format|Real Format):,' $TEMPDIR/pspp.csv > $TEMPDIR/out-filtered
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output"
-diff -c $TEMPDIR/out-filtered - << EOF
-Table: Reading free-form data from INLINE.
-Variable,Format
-x,F8.0
-name,A10
-
-File:,pro.sav
-Label:,No label.
-Variables:,2
-Cases:,3
-Type:,System File
-Weight:,Not weighted.
-Mode:,Compression on.
-Charset:,Unknown
-
-Variable,Description,,Position
-x,Format: F8.2,,1
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 8,,
-name,Format: A10,,2
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 10,,
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/command/sysfiles-old.sh b/tests/command/sysfiles-old.sh
deleted file mode 100755 (executable)
index 60cce7e..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/bin/sh
-
-# This program tests that system files can be read and written 
-# without the long name tables.
-
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-DATA LIST LIST NOTABLE / X * variable001 * variable002 * variable003 * .
-BEGIN DATA.
-    1.00     1.00    1.0     2.00
-    1.00     1.00    2.0    30.00
-    1.00     2.00    1.0     8.00
-    1.00     2.00    2.0    20.00
-    2.00     1.00    1.0     2.00
-    2.00     1.00    2.0    22.00
-    2.00     2.00    1.0     1.00
-    2.00     2.00    2.0     3.00
-END DATA.
-
-SAVE /OUTFILE='$TEMPDIR/foo.sav'
-     /VERSION=2
-     .
-
-GET /FILE='$TEMPDIR/foo.sav'.
-
-LIST.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="check file exists"
-ls -l $TEMPDIR/foo.sav > /dev/null
-if [ $? -ne 0 ] ; then no_result ; fi
-
-# Ensure that the written file has no long name table
-activity="check sysfile type"
-grep  'X=X' $TEMPDIR/foo.sav
-if [ $? -eq 0 ] ; then fail ; fi
-
-activity="compare output"
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Data List
-x,variable,variab_a,variab_b
-1.00,1.00,1.00,2.00
-1.00,1.00,2.00,30.00
-1.00,2.00,1.00,8.00
-1.00,2.00,2.00,20.00
-2.00,1.00,1.00,2.00
-2.00,1.00,2.00,22.00
-2.00,2.00,1.00,1.00
-2.00,2.00,2.00,3.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/command/sysfiles.sh b/tests/command/sysfiles.sh
deleted file mode 100755 (executable)
index 2cee895..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/bin/sh
-
-# This program tests that system files can be read and written 
-# including the long variable names.
-
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-DATA LIST LIST NOTABLE / variable001 * variable002 * variable003 * variable004 * .
-BEGIN DATA.
-    1.00     1.00    1.0     2.00
-    1.00     1.00    2.0    30.00
-    1.00     2.00    1.0     8.00
-    1.00     2.00    2.0    20.00
-    2.00     1.00    1.0     2.00
-    2.00     1.00    2.0    22.00
-    2.00     2.00    1.0     1.00
-    2.00     2.00    2.0     3.00
-END DATA.
-
-SAVE /OUTFILE='$TEMPDIR/foo.sav'.
-
-GET /FILE='$TEMPDIR/foo.sav'.
-
-LIST.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output"
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Data List
-variable001,variable002,variable003,variable004
-1.00,1.00,1.00,2.00
-1.00,1.00,2.00,30.00
-1.00,2.00,1.00,8.00
-1.00,2.00,2.00,20.00
-2.00,1.00,1.00,2.00
-2.00,1.00,2.00,22.00
-2.00,2.00,1.00,1.00
-2.00,2.00,2.00,3.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/command/t-test-1-indep-val.sh b/tests/command/t-test-1-indep-val.sh
deleted file mode 100755 (executable)
index ab24805..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-#!/bin/sh
-
-# This program tests that the T-TEST /GROUPS command works properly 
-# when a single value in the independent variable is given.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-data list list /INDEP * DEP *.
-begin data.
-       1        6
-       1        6
-       1        7
-       1        6
-       1       13
-       1        4
-       1        7
-       1        9
-       1        7
-       1       12
-       1       11
-       2       11
-       2        9
-       2        8
-       2        4
-       2       16
-       2        9
-       2        9
-       2        5
-       2        4
-       2       10
-       2       14
-end data.
-t-test /groups=indep(1.514) /var=dep.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="compare output"
-diff -c $TEMPDIR/pspp.csv - <<EOF
-Table: Reading free-form data from INLINE.
-Variable,Format
-INDEP,F8.0
-DEP,F8.0
-
-Table: Group Statistics
-,INDEP,N,Mean,Std. Deviation,S.E. Mean
-DEP,>=1.514,11,9.00,3.82,1.15
-,<1.514,11,8.00,2.86,.86
-
-Table: Independent Samples Test
-,,Levene's Test for Equality of Variances,,t-test for Equality of Means,,,,,,
-,,,,,,,,,95% Confidence Interval of the Difference,
-,,F,Sig.,t,df,Sig. (2-tailed),Mean Difference,Std. Error Difference,Lower,Upper
-DEP,Equal variances assumed,.17,.68,-.69,20.00,.50,-1.00,1.44,-4.00,2.00
-,Equal variances not assumed,,,-.69,18.54,.50,-1.00,1.44,-4.02,2.02
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass
diff --git a/tests/command/t-test-1-sample-missing-anal.sh b/tests/command/t-test-1-sample-missing-anal.sh
deleted file mode 100755 (executable)
index 99fed5c..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/bin/sh
-
-# This program tests that the T-TEST /TESTVAL command works OK
-# when there are per analysis missing values involved.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program 1"
-cat > $TESTFILE <<EOF
-data list list /id * x1 * x2.
-begin data.
-1 3.5 34
-2 2.0 10
-3 2.0 23
-4 3.5 98
-5 3.0 23
-67 4.0 8
-end data.
-
-t-test /testval=3.0 /var=x1 x2.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program 1"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="copy output"
-cp $TEMPDIR/pspp.csv $TEMPDIR/ref.csv
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="create program 2"
-cat > $TESTFILE <<EOF
-data list list /id * x1 * x2.
-begin data.
-1 3.5 34
-2 2.0 10
-3 2.0 23
-4 3.5 98
-5 3.0 23
-6 4.0 .
-7  .  8
-end data.
-
-t-test /missing=analysis /testval=3.0 /var=x1 x2.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program 2"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare outputs"
-diff $TEMPDIR/ref.csv $TEMPDIR/pspp.csv
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass
diff --git a/tests/command/t-test-1-sample-missing-list.sh b/tests/command/t-test-1-sample-missing-list.sh
deleted file mode 100755 (executable)
index 558a42a..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/bin/sh
-
-# This program tests that the T-TEST /TESTVAL command works OK
-# when there are listwise missing values involved.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program 1"
-cat > $TESTFILE <<EOF
-data list list /id * x1 * x2.
-begin data.
-1 3.5 34
-2 2.0 10
-3 2.0 23
-4 3.5 98
-5 3.0 23
-end data.
-
-t-test /testval=3.0 /var=x1 x2.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program 1"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="copy output"
-cp $TEMPDIR/pspp.csv $TEMPDIR/ref.csv
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="create program 2"
-cat > $TESTFILE <<EOF
-data list list /id * x1 * x2.
-begin data.
-1 3.5 34
-2 2.0 10
-3 2.0 23
-4 3.5 98
-5 3.0 23
-6 4.0 99
-end data.
-
-MISSING VALUES x2(99).
-
-t-test /missing=listwise /testval=3.0 /var=x1 x2.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program 2"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare outputs"
-diff $TEMPDIR/ref.csv $TEMPDIR/pspp.csv
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass
diff --git a/tests/command/t-test-1s.sh b/tests/command/t-test-1s.sh
deleted file mode 100755 (executable)
index 1692e7f..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/bin/sh
-
-# This program tests that the T-TEST /TESTVAL command works OK
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-data list list /ID * ABC *.
-begin data.
-1 3.5
-2 2.0
-3 2.0
-4 3.5
-5 3.0
-6 4.0
-end data.
-
-t-test /testval=2.0 /var=abc.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output"
-diff -c $TEMPDIR/pspp.csv - <<EOF
-Table: Reading free-form data from INLINE.
-Variable,Format
-ID,F8.0
-ABC,F8.0
-
-Table: One-Sample Statistics
-,N,Mean,Std. Deviation,S.E. Mean
-ABC,6,3.00,.84,.34
-
-Table: One-Sample Test
-,Test Value = 2.000000,,,,,
-,,,,,95% Confidence Interval of the Difference,
-,t,df,Sig. (2-tailed),Mean Difference,Lower,Upper
-ABC,2.93,5,.03,1.00,.12,1.88
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass
diff --git a/tests/command/t-test-groups.sh b/tests/command/t-test-groups.sh
deleted file mode 100755 (executable)
index cd13dee..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-#!/bin/sh
-
-# This program tests that the T-TEST /GROUPS command works
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-data list list /ID * INDEP * DEP1 * DEP2 *.
-begin data.
-1  1.1 1 3
-2  1.1 2 4
-3  1.1 2 4 
-4  1.1 2 4 
-5  1.1 3 5
-6  2.1 3 1
-7  2.1 4 2
-8  2.1 4 2
-9  2.1 4 2
-10 2.1 5 3
-11 3.1 2 2
-end data.
-
-* Note that this last case should be IGNORED since it doesn't have a dependent variable of either 1 or 2
-
-t-test /GROUPS=indep(1.1,2.1) /var=dep1 dep2.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output"
-diff -c $TEMPDIR/pspp.csv - <<EOF
-Table: Reading free-form data from INLINE.
-Variable,Format
-ID,F8.0
-INDEP,F8.0
-DEP1,F8.0
-DEP2,F8.0
-
-Table: Group Statistics
-,INDEP,N,Mean,Std. Deviation,S.E. Mean
-DEP1,1.1,5,2.00,.71,.32
-,2.1,5,4.00,.71,.32
-DEP2,1.1,5,4.00,.71,.32
-,2.1,5,2.00,.71,.32
-
-Table: Independent Samples Test
-,,Levene's Test for Equality of Variances,,t-test for Equality of Means,,,,,,
-,,,,,,,,,95% Confidence Interval of the Difference,
-,,F,Sig.,t,df,Sig. (2-tailed),Mean Difference,Std. Error Difference,Lower,Upper
-DEP1,Equal variances assumed,.00,1.00,-4.47,8.00,.00,-2.00,.45,-3.03,-.97
-,Equal variances not assumed,,,-4.47,8.00,.00,-2.00,.45,-3.03,-.97
-DEP2,Equal variances assumed,.00,1.00,4.47,8.00,.00,2.00,.45,.97,3.03
-,Equal variances not assumed,,,4.47,8.00,.00,2.00,.45,.97,3.03
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass
diff --git a/tests/command/t-test-indep-missing-anal.sh b/tests/command/t-test-indep-missing-anal.sh
deleted file mode 100755 (executable)
index 2813f4b..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/bin/sh
-
-# This program tests that the T-TEST /GROUPS command works OK
-# when ANALYSIS missing values are involved
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program 1"
-cat > $TESTFILE <<EOF
-data list list /id * indep * dep1 * dep2 *.
-begin data.
-1  1.0 3.5 6
-2  1.0 2.0 5
-3  1.0 2.0 4
-4  2.0 3.5 3
-56 2.0 3.0 1
-end data.
-
-t-test /group=indep /var=dep1, dep2.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program 1"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="copy output"
-cp $TEMPDIR/pspp.csv $TEMPDIR/ref.csv
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="create program 2"
-cat > $TESTFILE <<EOF
-data list list /id * indep * dep1 * dep2.
-begin data.
-1 1.0 3.5 6
-2 1.0 2.0 5
-3 1.0 2.0 4
-4 2.0 3.5 3
-5 2.0 3.0 .
-6 2.0 .   1
-7  .  3.1 5
-end data.
-
-* Note that if the independent variable is missing, then it's implicitly 
-* listwise missing.
-
-t-test /missing=analysis /group=indep /var=dep1 dep2.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program 2"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="compare outputs"
-diff $TEMPDIR/ref.csv $TEMPDIR/pspp.csv 
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass
diff --git a/tests/command/t-test-indep-missing-list.sh b/tests/command/t-test-indep-missing-list.sh
deleted file mode 100755 (executable)
index 9820a92..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/bin/sh
-
-# This program tests that the T-TEST /GROUPS command works OK
-# when LISTWISE missing values are involved
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program 1"
-cat > $TESTFILE <<EOF
-data list list /id * indep * dep1 * dep2.
-begin data.
-1 1.0 3.5 6
-2 1.0 2.0 5
-3 1.0 2.0 4
-4 2.0 3.5 3
-5 2.0 3.0 2
-6 2.0 4.0 1
-end data.
-
-t-test /group=indep /var=dep1 dep2.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program 1"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="copy output"
-cp $TEMPDIR/pspp.csv $TEMPDIR/ref.csv
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="create program 2"
-cat > $TESTFILE <<EOF
-data list list /id * indep * dep1 * dep2 *.
-begin data.
-1 1.0 3.5 6
-2 1.0 2.0 5
-3 1.0 2.0 4
-4 2.0 3.5 3
-5 2.0 3.0 2
-6 2.0 4.0 1
-7 2.0 .   0
-end data.
-
-t-test /missing=listwise,exclude /group=indep /var=dep1, dep2.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program 2"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="compare outputs"
-diff $TEMPDIR/ref.csv $TEMPDIR/pspp.csv 
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass
diff --git a/tests/command/t-test-paired-missing-anal.sh b/tests/command/t-test-paired-missing-anal.sh
deleted file mode 100755 (executable)
index d14f812..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/bin/sh
-
-# This program tests that the T-TEST /PAIRS command works OK
-# when there is per ANALYSIS missing data involved.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program 1"
-cat > $TESTFILE <<EOF
-data list list /id * a * b * c * d *.
-begin data.
-1 2.0 3.0 4.0 4.0
-2 1.0 2.0 5.1 3.9
-3 2.0 4.5 5.2 3.8
-4 2.0 4.5 5.3 3.7
-56 3.0 6.0 5.9 3.6
-end data.
-
-t-test /PAIRS a c with b d (PAIRED). 
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program 1"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="copy output"
-mv $TEMPDIR/pspp.csv $TEMPDIR/ref.csv
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="create program 2"
-cat > $TESTFILE <<EOF
-data list list /id * a * b * c * d *.
-begin data.
-1 2.0 3.0 4.0 4.0 
-2 1.0 2.0 5.1 3.9
-3 2.0 4.5 5.2 3.8
-4 2.0 4.5 5.3 3.7
-5 3.0 6.0 5.9 .
-6 3.0  .  5.9 3.6
-end data.
-
-
-t-test /MISSING=analysis /PAIRS a c with b d (PAIRED). 
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program 2"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="compare outputs"
-diff $TEMPDIR/ref.csv $TEMPDIR/pspp.csv
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass
diff --git a/tests/command/t-test-paired-missing-list.sh b/tests/command/t-test-paired-missing-list.sh
deleted file mode 100755 (executable)
index 4773712..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/bin/sh
-
-# This program tests that the T-TEST /PAIRS command works OK
-# when there is listwise missing data involved.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program 1"
-cat > $TESTFILE <<EOF
-data list list /id * a * b * c * d *.
-begin data.
-1 2.0 3.0 4.0 4.0
-2 1.0 2.0 5.1 3.9
-3 2.0 4.5 5.2 3.8
-4 2.0 4.5 5.3 3.7
-5 3.0 6.0 5.9 3.6
-end data.
-
-t-test /PAIRS a b with c d (PAIRED). 
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program 1"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="copy output"
-mv $TEMPDIR/pspp.csv $TEMPDIR/ref.csv
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="create program 2"
-cat > $TESTFILE <<EOF
-data list list /id * a * b * c * d *.
-begin data.
-1 2.0 3.0 4.0 4.0 
-2 1.0 2.0 5.1 3.9
-3 2.0 4.5 5.2 3.8
-4 2.0 4.5 5.3 3.7
-5 3.0 6.0 5.9 3.6
-6 3.0 6.0 5.9  .
-end data.
-
-
-t-test /MISSING=listwise /PAIRS a b with c d (PAIRED). 
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program 2"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="compare outputs"
-diff $TEMPDIR/ref.csv $TEMPDIR/pspp.csv
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass
diff --git a/tests/command/t-test-pairs.sh b/tests/command/t-test-pairs.sh
deleted file mode 100755 (executable)
index f35157a..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/bin/sh
-
-# This program tests that the T-TEST /PAIRS command works OK
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE <<EOF
-data list list /ID * A * B *.
-begin data.
-1 2.0 3.0
-2 1.0 2.0
-3 2.0 4.5
-4 2.0 4.5
-5 3.0 6.0
-end data.
-
-t-test /PAIRS a with b (PAIRED).
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output"
-diff -c $TEMPDIR/pspp.csv - <<EOF
-Table: Reading free-form data from INLINE.
-Variable,Format
-ID,F8.0
-A,F8.0
-B,F8.0
-
-Table: Paired Sample Statistics
-,,Mean,N,Std. Deviation,S.E. Mean
-Pair 0,A,2.00,5,.71,.32
-,B,4.00,5,1.54,.69
-
-Table: Paired Samples Correlations
-,,N,Correlation,Sig.
-Pair 0,A & B,5,.92,.03
-
-Table: Paired Samples Test
-,,Paired Differences,,,,,,,
-,,,,,95% Confidence Interval of the Difference,,,,
-,,Mean,Std. Deviation,Std. Error Mean,Lower,Upper,t,df,Sig. (2-tailed)
-Pair 0,A - B,-2.00,.94,.42,-3.16,-.84,-4.78,4,.01
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass
diff --git a/tests/command/tabs.sh b/tests/command/tabs.sh
deleted file mode 100755 (executable)
index 83b3641..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/bin/sh
-
-# This program tests that tab characters can be used in string input
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program 1"
-cat > $TEMPDIR/tabs.stat <<EOF
-data list /X 1-80 (a).
-begin data.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="create program 2"
-printf  "\t1\t12\t123\t1234\t12345\n" >> $TEMPDIR/tabs.stat
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="create program 3"
-cat >> $TEMPDIR/tabs.stat <<EOF
-end data.
-print /x.
-execute.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TEMPDIR/tabs.stat
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-diff -c $TEMPDIR/pspp.csv - << EOF | perl -e 's/^\s*$//g'
-Table: Reading 1 record from INLINE.
-Variable,Record,Columns,Format
-X,1,1- 80,A80
-
-    1   12  123 1234    12345
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/command/trimmed-mean.sh b/tests/command/trimmed-mean.sh
deleted file mode 100755 (executable)
index 1f3b01a..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-#!/bin/sh
-
-# This program tests  the Trimmed Mean calculation, in the case
-# where the data is weighted towards the centre
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-
-activity="create program"
-cat > $TESTFILE <<EOF
-DATA LIST LIST /X * C *.
-BEGIN DATA.
-1 1
-2 49
-3 2
-END DATA.
-
-WEIGHT BY c.
-
-EXAMINE
-       x
-       /STATISTICS=DESCRIPTIVES
-       .
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="compare results"
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Reading free-form data from INLINE.
-Variable,Format
-X,F8.0
-C,F8.0
-
-Table: Case Processing Summary
-,Cases,,,,,
-,Valid,,Missing,,Total,
-,N,Percent,N,Percent,N,Percent
-X,52.00,100%,.00,0%,52.00,100%
-
-Table: Descriptives
-,,,Statistic,Std. Error
-X,Mean,,2.02,.03
-,95% Confidence Interval for Mean,Lower Bound,1.95,
-,,Upper Bound,2.09,
-,5% Trimmed Mean,,2.00,
-,Median,,2.00,
-,Variance,,.06,
-,Std. Deviation,,.24,
-,Minimum,,1.00,
-,Maximum,,3.00,
-,Range,,2.00,
-,Interquartile Range,,.00,
-,Skewness,,1.19,.33
-,Kurtosis,,15.73,.65
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/command/update.sh b/tests/command/update.sh
deleted file mode 100755 (executable)
index 074776c..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-#!/bin/sh
-
-# This program tests the UPDATE procedure
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/update.pspp
-
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-    cd /
-    rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="data create"
-cat > a.data <<EOF
-1aB
-8aM
-3aE
-5aG
-0aA
-5aH
-6aI
-7aJ
-2aD
-7aK
-1aC
-7aL
-4aF
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-cat > b.data <<EOF
-1bN
-3bO
-4bP
-6bQ
-7bR
-9bS
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-cat > update.csv <<EOF
-Table: Data List
-A,B,C,D,INA,INB
-0,a,A,,1,0
-1,b,B,N,1,1
-1,a,C,,1,0
-2,a,D,,1,0
-3,b,E,O,1,1
-4,b,F,P,1,1
-5,a,G,,1,0
-5,a,H,,1,0
-6,b,I,Q,1,1
-7,b,J,R,1,1
-7,a,K,,1,0
-7,a,L,,1,0
-8,a,M,,1,0
-9,b,,S,0,1
-EOF
-
-# Test UPDATE.
-dla="data list notable file='a.data' /A B C 1-3 (a)."
-sa="save outfile='a.sys'."
-dlb="data list notable file='b.data' /A B C 1-3 (a)."
-sb="save outfile='b.sys'."
-for sources in ss sa as; do
-    name="$sources"
-    activity="create $name.pspp"
-    {
-       if [ $sources = ss ]; then
-           cat <<EOF
-set errors=terminal.
-$dla
-$sa
-$dlb
-$sb
-update file='a.sys' /in=INA /sort
-         /file='b.sys' /in=INB /rename c=D
-         /by a.
-EOF
-       elif [ $sources = sa ]; then
-           cat <<EOF
-set errors=terminal.
-$dla
-$sa
-$dlb
-
-update file='a.sys' /in=INA /sort
-      /file=* /in=INB /rename c=D
-      /by a.
-EOF
-       elif [ $sources = as ]; then
-           cat <<EOF
-set errors=terminal.
-$dlb
-$sb
-$dla
-
-update file=* /in=INA /sort
-      /file='b.sys' /in=INB /rename c=D
-      /by a.
-EOF
-       else
-           activity="internal error"
-           no_result
-       fi
-       echo 'list.'
-    } > $name.pspp
-    if [ $? -ne 0 ] ; then no_result ; fi
-
-    activity="run $name.pspp"
-    rm -f errors
-    $SUPERVISOR $PSPP -o pspp.csv --error-file=errors $name.pspp
-    if [ $? -ne 0 ] ; then no_result ; fi
-
-    activity="check $name output"
-    perl -pi -e 's/^\s*$//g' pspp.csv
-    diff -c pspp.csv update.csv
-    if [ $? -ne 0 ] ; then fail ; fi
-    diff -c -b -w - errors <<EOF
-$name.pspp:8: warning: UPDATE: Encountered 3 sets of duplicate cases in the master file.
-EOF
-    if [ $? -ne 0 ] ; then fail ; fi
-done
-
-pass;
diff --git a/tests/command/use.sh b/tests/command/use.sh
deleted file mode 100755 (executable)
index 070e29e..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/bin/sh
-
-# This program tests USE, just to make sure that USE ALL is accepted silently.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TEMPDIR/filter.stat << EOF
-data list notable /X 1-2.
-begin data.
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-end data.
-use all.
-list.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TEMPDIR/filter.stat
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="check results"
-diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Data List
-X
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/command/variable-display.sh b/tests/command/variable-display.sh
deleted file mode 100755 (executable)
index fece96e..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/bin/sh
-
-# This program tests variable display attribute commands: VARIABLE
-# ALIGNMENT, VARIABLE WIDTH, VARIABLE LEVEL.
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-# Create command file.
-activity="create program"
-cat > $TESTFILE << EOF
-data list free /x y z.
-variable alignment x (left)/y (right)/z (center).
-variable width x (10)/y (12)/z (14).
-variable level x (scale)/y (ordinal)/z (nominal).
-display dictionary.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare output"
-diff -c $TEMPDIR/pspp.csv - << EOF
-Variable,Description,,Position
-x,Format: F8.2,,1
-,Measure: Scale,,
-,Display Alignment: Left,,
-,Display Width: 10,,
-y,Format: F8.2,,2
-,Measure: Ordinal,,
-,Display Alignment: Right,,
-,Display Width: 12,,
-z,Format: F8.2,,3
-,Measure: Nominal,,
-,Display Alignment: Center,,
-,Display Width: 14,,
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
diff --git a/tests/command/vector.sh b/tests/command/vector.sh
deleted file mode 100755 (executable)
index c5d4184..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-#!/bin/sh
-
-# This program tests the VECTOR command
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create prog"
-cat > $TEMPDIR/vector.stat <<EOF
-data list notable/x 1.
-vector v(4).
-display vector.
-
-data list notable/x 1.
-vector #vec(4, comma10.2).
-display vector.
-
-input program.
-vector x(5).
-data list/x5 x2 x3 x1 x4 1-5.
-end input program.
-display vector.
-
-data list notable/u w x y z 1-5.
-vector a=u to y.
-vector b=x to z.
-vector c=all.
-display vector.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv -e $TEMPDIR/stdout $TEMPDIR/vector.stat
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare stdout"
-perl -pi -e 's/^\s*$//g' $TEMPDIR/stdout
-diff -b $TEMPDIR/stdout  - <<EOF
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare results"
-diff -c $TEMPDIR/pspp.csv  - <<EOF
-Vector,Position,Variable,Print Format
-v,1,v1,F8.2
-,2,v2,F8.2
-,3,v3,F8.2
-,4,v4,F8.2
-
-Vector,Position,Variable,Print Format
-#vec,1,#vec1,COMMA10.2
-,2,#vec2,COMMA10.2
-,3,#vec3,COMMA10.2
-,4,#vec4,COMMA10.2
-
-Table: Reading 1 record from INLINE.
-Variable,Record,Columns,Format
-x5,1,1-  1,F1.0
-x2,1,2-  2,F1.0
-x3,1,3-  3,F1.0
-x1,1,4-  4,F1.0
-x4,1,5-  5,F1.0
-
-Vector,Position,Variable,Print Format
-x,1,x1,F8.2
-,2,x2,F8.2
-,3,x3,F8.2
-,4,x4,F8.2
-,5,x5,F8.2
-
-Vector,Position,Variable,Print Format
-a,1,u,F1.0
-,2,w,F1.0
-,3,x,F1.0
-,4,y,F1.0
-b,1,x,F1.0
-,2,y,F1.0
-,3,z,F1.0
-c,1,u,F1.0
-,2,w,F1.0
-,3,x,F1.0
-,4,y,F1.0
-,5,z,F1.0
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/command/very-long-strings.sh b/tests/command/very-long-strings.sh
deleted file mode 100755 (executable)
index eba3782..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-#!/bin/sh
-
-# This program tests that very long strings (up to 32767 bytes) can be
-# read and written, a la spss v13/v14
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-# First check that we can read files created with spss versions 13/14
-
-activity="Create file 0"
-cat > $TESTFILE <<EOF
-GET FILE='$top_srcdir/tests/v13.sav'.
-DISPLAY VARIABLES.
-LIST.
-
-NEW FILE.
-
-GET FILE='$top_srcdir/tests/v14.sav'.
-DISPLAY VARIABLES.
-LIST.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program 0"
-$SUPERVISOR $PSPP -o pspp.csv -e /dev/null $TESTFILE 
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare variable display 0"
-diff -c $TEMPDIR/pspp.csv - <<EOF
-Variable,Description,,Position
-N,Format: F8.2,,1
-,Measure: Scale,,
-,Display Alignment: Right,,
-,Display Width: 10,,
-A255,Format: A255,,2
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 32,,
-A258,Format: A258,,3
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 32,,
-A2000,Format: A2000,,4
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 32,,
-
-Table: Data List
-N,A255,A258,A2000
-1.00,a1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA,b1BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB,c1CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
-2.00,a2XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,b2YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY,c2ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
-
-Variable,Description,,Position
-vl255,Format: A255,,1
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 26,,
-vl256,Format: A256,,2
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 26,,
-vl1335,Format: A1335,,3
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 26,,
-vl2000,Format: A2000,,4
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 26,,
-
-Table: Data List
-vl255,vl256,vl1335,vl2000
-MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM,MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM,MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM,MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-# Now check that we can write files with Very Long Strings
-
-activity="Create data file"
-cat > $TEMPDIR/data <<EOF
- 1xxxxxxxx2aXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXbcYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYdeZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZf
- 1xxxxxxxx2aXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXbcYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYdeZZMaryHadAlittleLambZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZf
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-for options in uncompressed compressed; do
-    activity="Create file1 ($options)"
-    cat > $TESTFILE <<EOF
-DATA LIST FIXED FILE='$TEMPDIR/data'  /a 2-11 (a) 
- b (a256) 
- c (a200) 
- d (a32767)
- .
-
-
-SAVE OUTFILE='$TEMPDIR/foo.sav' /$options.
-
-EOF
-    if [ $? -ne 0 ] ; then no_result ; fi
-
-
-    activity="run program 1 ($options)"
-    $SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-    if [ $? -ne 0 ] ; then no_result ; fi
-
-    activity="Create file2 ($options)"
-    cat > $TESTFILE <<EOF
-
-GET FILE='$TEMPDIR/foo.sav'.
-
-DISPLAY VARIABLES.
-
-PRINT OUTFILE='$TEMPDIR/out.txt'
-       /a (a10) b (a256) c (a200) 
-       d (a32767)
-       .
-
-EXECUTE.
-
-EOF
-    if [ $? -ne 0 ] ; then no_result ; fi
-
-    activity="run program 2 ($options)"
-    $SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-    if [ $? -ne 0 ] ; then no_result ; fi
-
-
-# Check that the file read back in has the same data as what we wrote.
-
-    activity="compare print ($options)"
-    diff -b $TEMPDIR/out.txt $TEMPDIR/data
-    if [ $? -ne 0 ] ; then fail ; fi
-
-
-    activity="compare variable display ($options)"
-    diff -c $TEMPDIR/pspp.csv - <<EOF
-Variable,Description,,Position
-a,Format: A10,,1
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 10,,
-b,Format: A256,,2
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 32,,
-c,Format: A200,,3
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 32,,
-d,Format: A32767,,4
-,Measure: Nominal,,
-,Display Alignment: Left,,
-,Display Width: 32,,
-EOF
-    if [ $? -ne 0 ] ; then fail ; fi
-done
-
-pass;
diff --git a/tests/command/weight.sh b/tests/command/weight.sh
deleted file mode 100755 (executable)
index e105209..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-#!/bin/sh
-
-# This program tests the WEIGHT command
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TESTFILE << EOF
-SET FORMAT F8.3.
-data list file='$top_srcdir/tests/weighting.data'/AVAR 1-5 BVAR 6-10.
-weight by BVAR.
-
-descriptives AVAR /statistics all /format serial.
-frequencies AVAR /statistics all.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare results"
-diff -c $TEMPDIR/pspp.csv - <<EOF
-"Table: Reading 1 record from ""$top_srcdir/tests/weighting.data""."
-Variable,Record,Columns,Format
-AVAR,1,1-  5,F5.0
-BVAR,1,6- 10,F5.0
-
-Table: Valid cases = 730; cases with missing value(s) = 0.
-Variable,Valid N,Missing N,Mean,S.E. Mean,Std Dev,Variance,Kurtosis,S.E. Kurt,Skewness,S.E. Skew,Range,Minimum,Maximum,Sum
-AVAR,730,0,31.515,.405,10.937,119.608,2.411,.181,1.345,.090,76.000,18.000,94.000,23006.00
-
-Table: AVAR
-Value Label,Value,Frequency,Percent,Valid Percent,Cum Percent
-,18,1,.137,.137,.137
-,19,7,.959,.959,1.096
-,20,26,3.562,3.562,4.658
-,21,76,10.411,10.411,15.068
-,22,57,7.808,7.808,22.877
-,23,58,7.945,7.945,30.822
-,24,38,5.205,5.205,36.027
-,25,38,5.205,5.205,41.233
-,26,30,4.110,4.110,45.342
-,27,21,2.877,2.877,48.219
-,28,23,3.151,3.151,51.370
-,29,24,3.288,3.288,54.658
-,30,23,3.151,3.151,57.808
-,31,14,1.918,1.918,59.726
-,32,21,2.877,2.877,62.603
-,33,21,2.877,2.877,65.479
-,34,14,1.918,1.918,67.397
-,35,14,1.918,1.918,69.315
-,36,17,2.329,2.329,71.644
-,37,11,1.507,1.507,73.151
-,38,16,2.192,2.192,75.342
-,39,14,1.918,1.918,77.260
-,40,15,2.055,2.055,79.315
-,41,14,1.918,1.918,81.233
-,42,14,1.918,1.918,83.151
-,43,8,1.096,1.096,84.247
-,44,15,2.055,2.055,86.301
-,45,10,1.370,1.370,87.671
-,46,12,1.644,1.644,89.315
-,47,13,1.781,1.781,91.096
-,48,13,1.781,1.781,92.877
-,49,5,.685,.685,93.562
-,50,5,.685,.685,94.247
-,51,3,.411,.411,94.658
-,52,7,.959,.959,95.616
-,53,6,.822,.822,96.438
-,54,2,.274,.274,96.712
-,55,2,.274,.274,96.986
-,56,2,.274,.274,97.260
-,57,3,.411,.411,97.671
-,58,1,.137,.137,97.808
-,59,3,.411,.411,98.219
-,61,1,.137,.137,98.356
-,62,3,.411,.411,98.767
-,63,1,.137,.137,98.904
-,64,1,.137,.137,99.041
-,65,2,.274,.274,99.315
-,70,1,.137,.137,99.452
-,78,1,.137,.137,99.589
-,79,1,.137,.137,99.726
-,80,1,.137,.137,99.863
-,94,1,.137,.137,100.000
-Total,,730,100.0,100.0,
-
-Table: AVAR
-N,Valid,730
-,Missing,0
-Mean,,31.515
-S.E. Mean,,.405
-Mode,,21.000
-Std Dev,,10.937
-Variance,,119.608
-Kurtosis,,2.411
-S.E. Kurt,,.181
-Skewness,,1.345
-S.E. Skew,,.090
-Range,,76.000
-Minimum,,18.000
-Maximum,,94.000
-Sum,,23006.00
-Percentiles,50 (Median),29
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/data-list.data b/tests/data-list.data
deleted file mode 100644 (file)
index 71ea15d..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-SHORT 2 3 4
-RIGHTLEN 6
-7
-8 TOOLONGLEN
-10 11
-12
diff --git a/tests/data/bcd-in.expected.cmp.gz b/tests/data/bcd-in.expected.cmp.gz
new file mode 100644 (file)
index 0000000..ec1b34b
Binary files /dev/null and b/tests/data/bcd-in.expected.cmp.gz differ
diff --git a/tests/data/binhex-in.expected.cmp.gz b/tests/data/binhex-in.expected.cmp.gz
new file mode 100644 (file)
index 0000000..19e1fa4
Binary files /dev/null and b/tests/data/binhex-in.expected.cmp.gz differ
diff --git a/tests/data/binhex-out.expected.gz b/tests/data/binhex-out.expected.gz
new file mode 100644 (file)
index 0000000..f8fc6e9
Binary files /dev/null and b/tests/data/binhex-out.expected.gz differ
diff --git a/tests/data/data-in.at b/tests/data/data-in.at
new file mode 100644 (file)
index 0000000..bfdf9ef
--- /dev/null
@@ -0,0 +1,3692 @@
+AT_BANNER([data input (data-in)])
+
+m4_divert_push([PREPARE_TESTS])
+[data_in_prng () {
+  cat > my-rand.pl <<'EOF'
+# This random number generator and the test for it below are drawn
+# from Park and Miller, "Random Number Generators: Good Ones are Hard
+# to Come By", Communications of the ACM 31:10 (October 1988).  It is
+# documented to function properly on systems with a 46-bit or longer
+# real significand, which includes systems that have 64-bit IEEE reals
+# (with 53-bit significand).  The test should catch any systems for
+# which this is not true, in any case.
+
+our ($seed) = 1;
+sub my_rand {
+  my ($modulo) = @_;
+  my ($a) = 16807;
+  my ($m) = 2147483647;
+  my ($tmp) = $a * $seed;
+  $seed = $tmp - $m * int ($tmp / $m);
+  return $seed % $modulo;
+}
+EOF
+  cat > test-my-rand.pl <<'EOF'
+#! /usr/bin/perl
+use strict;
+use warnings;
+do 'my-rand.pl';
+my_rand (1) foreach 1...10000;
+our $seed;
+die $seed if $seed != 1043618065;
+EOF
+}
+date_in () {
+  data_in_prng
+  cat > date-in.pl << 'EOF'
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+do 'my-rand.pl';
+
+my ($fmt_name, @templates) = @ARGV;
+
+my @dates = (#yyyy  mm  dd  jjj  HH  MM  SS
+            [1648,  6, 10, 162,  0,  0,  0],
+            [1680,  6, 30, 182,  4, 50, 38],
+            [1716,  7, 24, 206, 12, 31, 35],
+            [1768,  6, 19, 171, 12, 47, 53],
+            [1819,  8,  2, 214,  1, 26,  0],
+            [1839,  3, 27,  86, 20, 58, 11],
+            [1903,  4, 19, 109,  7, 36,  5],
+            [1929,  8, 25, 237, 15, 43, 49],
+            [1941,  9, 29, 272,  4, 25,  9],
+            [1943,  4, 19, 109,  6, 49, 27],
+            [1943, 10,  7, 280,  2, 57, 52],
+            [1992,  3, 17,  77, 16, 45, 44],
+            [1996,  2, 25,  56, 21, 30, 57],
+            [1941,  9, 29, 272,  4, 25,  9],
+            [1943,  4, 19, 109,  6, 49, 27],
+            [1943, 10,  7, 280,  2, 57, 52],
+            [1992,  3, 17,  77, 16, 45, 44],
+            [1996,  2, 25,  56, 21, 30, 57],
+            [2038, 11, 10, 314, 22, 30,  4],
+            [2094,  7, 18, 199,  1, 56, 51]);
+
+open (SYNTAX, '>', "$fmt_name.sps") or die "$fmt_name.sps: create: $!\n";
+print SYNTAX "SET EPOCH 1930.\n";
+print SYNTAX "DATA LIST NOTABLE FILE='$fmt_name.in'/$fmt_name 1-40 ($fmt_name).\n";
+print SYNTAX "PRINT OUTFILE='$fmt_name.out'/$fmt_name (F16.2).\n";
+print SYNTAX "EXECUTE.\n";
+close (SYNTAX);
+
+my ($fn) = "$fmt_name.in";
+open (DATA, '>', $fn) or die "$fn: create: $!\n";
+select DATA;
+for my $template (@templates) {
+    for my $date (@dates) {
+       print_date_with_template ($date, $template) for 1...10;
+    }
+}
+close (DATA);
+
+sub print_date_with_template {
+    my ($date, $template) = @_;
+    my ($year, $month, $day, $julian, $hour, $minute, $second) = @$date;
+    my ($quarter) = int (($month - 1) / 3) + 1;
+    my ($week) = int (($julian - 1) / 7) + 1;
+    my (@year_types) = ('full');
+    push (@year_types, '2digit') if $year >= 1930 && $year < 2030;
+    for my $c (split ('', $template)) {
+       if ($c eq 'd') {
+           printf (+pick ('%d', '%02d'), $day);
+       } elsif ($c eq 'm') {
+           my ($type) = pick ('arabic', 'roman', 'abbrev', 'full');
+           if ($type eq 'arabic') {
+               printf (+pick ('%d', '%02d'), $month);
+           } elsif ($type eq 'roman') {
+               my ($mmm) = ('i', 'ii', 'iii',
+                            'iv', 'v', 'vi',
+                            'vii', 'viii', 'ix',
+                            'x', 'xi', 'xii')[$month - 1];
+               print_rand_case ($mmm);
+           } elsif ($type eq 'abbrev') {
+               my ($mmm) = qw (jan feb mar apr may jun
+                                jul aug sep oct nov dec)[$month - 1];
+               print_rand_case ($mmm);
+           } elsif ($type eq 'full') {
+               my ($mmm) = qw (january february march
+                               april may june
+                               july august september
+                               october november december)[$month - 1];
+               print_rand_case ($mmm);
+           } else {
+               die;
+           }
+       } elsif ($c eq 'y') {
+           my ($type) = pick (@year_types);
+           if ($type eq '2digit') {
+               printf (+pick ('%d', '%02d'), $year % 100);
+           } elsif ($type eq 'full') {
+               print $year;
+           } else {
+               die;
+           }
+       } elsif ($c eq 'j') {
+           my ($type) = pick (@year_types);
+           if ($type eq '2digit') {
+               printf ("%02d%03d", $year % 100, $julian);
+           } elsif ($type eq 'full') {
+               printf ("%04d%03d", $year, $julian);
+           } else {
+               die;
+           }
+       } elsif ($c eq 'q') {
+           print $quarter;
+       } elsif ($c eq 'w') {
+           print $week;
+       } elsif ($c eq 'H') {
+           printf (+pick ('%d', '%02d'), $hour);
+       } elsif ($c eq 'M') {
+           printf (+pick ('%d', '%02d'), $minute);
+       } elsif ($c eq 'S') {
+           printf (+pick ('%d', '%02d'), $second);
+       } elsif ($c eq '-') {
+           print +pick (' ', '-', '.', ',', '/');
+       } elsif ($c eq ':') {
+           print +pick (' ', ':');
+       } elsif ($c eq ' ') {
+           print ' ';
+       } elsif ($c eq 'Q') {
+           maybe_print_space ();
+           print_rand_case ('q');
+           maybe_print_space ();
+       } elsif ($c eq 'W') {
+           maybe_print_space ();
+           print_rand_case ('wk');
+           maybe_print_space ();
+       } elsif ($c eq '+') {
+           print +pick ('', '-', '+');
+       } else {
+           die;
+       }
+    }
+    print "\n";
+}
+
+sub print_rand_case {
+    my ($s) = @_;
+    my ($case) = pick (qw (uc lc tc));
+    if ($case eq 'uc') {
+       print uc ($s);
+    } elsif ($case eq 'lc') {
+       print lc ($s);
+    } elsif ($case eq 'tc') {
+       print ucfirst ($s);
+    } else {
+       die;
+    }
+}
+
+sub maybe_print_space {
+   print +pick ('', ' ');
+}
+
+sub pick {
+   return $_[int (my_rand ($#_
+                           + 1))];
+}
+EOF
+}
+time_in () {
+  data_in_prng
+  cat > time-in.pl << 'EOF'
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+do 'my-rand.pl';
+
+my ($skip, $fmt_name, @templates) = @ARGV;
+
+my_rand (1) foreach 1...$skip;
+
+my @times = (#  D  HH  MM     SS
+            [  0,  0,  0,  0.00],
+            [  1,  4, 50, 38.68],
+            [  5, 12, 31, 35.82],
+            [  0, 12, 47, 53.41],
+            [  3,  1, 26,  0.69],
+            [  1, 20, 58, 11.19],
+            [ 12,  7, 36,  5.98],
+            [ 52, 15, 43, 49.27],
+            [  7,  4, 25,  9.24],
+            [  0,  6, 49, 27.89],
+            [ 20,  2, 57, 52.56],
+            [555, 16, 45, 44.12],
+            [120, 21, 30, 57.27],
+            [  0,  4, 25,  9.98],
+            [  3,  6, 49, 27.24],
+            [  5,  2, 57, 52.13],
+            [  0, 16, 45, 44.35],
+            [  1, 21, 30, 57.32],
+            [ 10, 22, 30,  4.27],
+            [ 22,  1, 56, 51.18]);
+
+open (SYNTAX, '>', "$fmt_name.sps") or die "$fmt_name.sps: create: $!\n";
+print SYNTAX "DATA LIST NOTABLE FILE='$fmt_name.data'/$fmt_name 1-40 ($fmt_name).\n";
+print SYNTAX "PRINT OUTFILE='$fmt_name.out'/$fmt_name (F16.2).\n";
+print SYNTAX "EXECUTE.\n";
+close (SYNTAX);
+
+my ($fn) = "$fmt_name.data";
+open (DATA, '>', $fn) or die "$fn: create: $!\n";
+select DATA;
+for my $template (@templates) {
+    for my $time (@times) {
+       print_time_with_template ($time, $template) for 1...10;
+    }
+}
+close (DATA);
+
+sub print_time_with_template {
+    my ($time, $template) = @_;
+    my ($day, $hour, $minute, $second) = @$time;
+    for my $c (split ('', $template)) {
+       if ($c eq '+') {
+           print +pick ('', '-', '+');
+       } elsif ($c eq 'D') {
+           printf (+pick ('%d', '%02d'), $day);
+           $day = 0;
+       } elsif ($c eq 'H') {
+           printf (+pick ('%d', '%02d'), $hour + 24 * $day);
+       } elsif ($c eq 'M') {
+           printf (+pick ('%d', '%02d'), $minute);
+       } elsif ($c eq 'S') {
+           printf (+pick ('%.0f', '%02.0f', '%.1f', '%.2f'), $second);
+       } elsif ($c eq ':') {
+           print +pick (' ', ':');
+       } elsif ($c eq ' ') {
+           print ' ';
+       } else {
+           die;
+       }
+    }
+    print "\n";
+}
+
+sub pick {
+   return $_[int (my_rand ($#_ 
+                           + 1)) ];
+}
+EOF
+}]
+m4_divert_pop([PREPARE_TESTS])
+
+AT_SETUP([numeric input formats])
+AT_KEYWORDS([data-in])
+data_in_prng
+AT_CHECK([$PERL test-my-rand.pl])
+AT_DATA([num-in.pl],
+[[#! /usr/bin/perl
+
+use POSIX;
+use strict;
+use warnings;
+
+do 'my-rand.pl';
+
+for my $number (0, 1, .5, .015625, 123) {
+    my ($base_exp) = floor ($number ? log10 ($number) : 0);
+    for my $offset (-3...3) {
+       my ($exponent) = $base_exp + $offset;
+       my ($fraction) = $number / 10**$offset;
+
+       permute_zeros ($fraction, $exponent);
+    }
+}
+
+sub permute_zeros {
+    my ($fraction, $exponent) = @_;
+
+    my ($frac_rep) = sprintf ("%f", $fraction);
+    my ($leading_zeros) = length (($frac_rep =~ /^(0*)/)[0]);
+    my ($trailing_zeros) = length (($frac_rep =~ /(\.?0*)$/)[0]);
+    for my $i (0...$leading_zeros) {
+       for my $j (0...$trailing_zeros) {
+           my ($trimmed) = substr ($frac_rep, $i,
+                                   length ($frac_rep) - $i - $j);
+           next if $trimmed eq '.' || $trimmed eq '';
+
+           permute_commas ($trimmed, $exponent);
+       }
+    }
+}
+
+sub permute_commas {
+    my ($frac_rep, $exponent) = @_;
+    permute_dot_comma ($frac_rep, $exponent);
+    my ($pos) = int (my_rand (length ($frac_rep) + 1));
+    $frac_rep = substr ($frac_rep, 0, $pos) . "," . substr ($frac_rep, $pos);
+    permute_dot_comma ($frac_rep, $exponent);
+}
+
+sub permute_dot_comma {
+    my ($frac_rep, $exponent) = @_;
+    permute_exponent_syntax ($frac_rep, $exponent);
+    if ($frac_rep =~ /[,.]/) {
+       $frac_rep =~ tr/.,/,./;
+       permute_exponent_syntax ($frac_rep, $exponent);
+    }
+}
+
+sub permute_exponent_syntax {
+    my ($frac_rep, $exponent) = @_;
+    my (@exp_reps);
+    if ($exponent == 0) {
+       @exp_reps = pick ('', 'e0', 'e-0', 'e+0', '-0', '+0');
+    } elsif ($exponent > 0) {
+       @exp_reps = pick ("e$exponent", "e+$exponent", "+$exponent");
+    } else {
+       my ($abs_exp) = -$exponent;
+       @exp_reps = pick ("e-$abs_exp", , "e-$abs_exp", "-$abs_exp");
+    }
+    permute_sign_and_affix ($frac_rep, $_) foreach @exp_reps;
+}
+
+sub permute_sign_and_affix {
+    my ($frac_rep, $exp_rep) = @_;
+    for my $prefix (pick ('', '$'),
+                   pick ('-', '-$', '$-', '$-$'),
+                   pick ('+', '+$', '$+', '$+$')) {
+       for my $suffix ('', '%') {
+           permute_spaces ("$prefix$frac_rep$exp_rep$suffix");
+       }
+    }
+}
+
+sub permute_spaces {
+    my ($s) = @_;
+    $s =~ s/([-+\$e%])/ $1 /g;
+    my (@fields) = split (' ', $s);
+    print join ('', @fields), "\n";
+
+    if ($#fields > 0) {
+       my ($pos) = int (my_rand ($#fields)) + 1;
+       print join ('', @fields[0...$pos - 1]);
+       print " ";
+       print join ('', @fields[$pos...$#fields]);
+       print "\n";
+    }
+}
+
+sub pick {
+    return $_[int (my_rand ($#_ + 1))];
+}
+]])
+AT_CHECK([$PERL num-in.pl > num-in.data])
+AT_DATA([num-in.sps], [dnl
+SET ERRORS=NONE.
+SET MXERRS=10000000.
+SET MXWARNS=10000000.
+DATA LIST FILE='num-in.data' NOTABLE/
+       f 1-40 (f)
+       comma 1-40 (comma)
+       dot 1-40 (dot)
+       dollar 1-40 (dollar)
+       pct 1-40 (pct)
+       e 1-40 (e).
+PRINT OUTFILE='num-in.out'/all (6f10.4).
+EXECUTE.
+])
+AT_CHECK([pspp -O format=csv num-in.sps])
+AT_CHECK([gzip -cd < $top_srcdir/tests/data/num-in.expected.gz > expout])
+AT_CHECK([cat num-in.out], [0], [expout])
+AT_CLEANUP
+
+dnl Some very old version of PSPP crashed reading big numbers,
+dnl so this checks for regressions.
+AT_SETUP([reading big numbers])
+AT_KEYWORDS([data-in])
+AT_DATA([bignum.txt], [dnl
+0
+0.1
+0.5
+0.8
+0.9
+0.999
+1
+2
+3
+4
+5
+12
+123
+1234
+12345
+123456
+1234567
+12345678
+123456789
+1234567890
+19999999999
+199999999999
+1234567890123
+19999999999999
+199999999999999
+1234567890123456
+19999999999999999
+123456789012345678
+1999999999999999999
+12345678901234567890
+199999999999999999999
+1234567890123456789012
+19999999999999999999999
+123456789012345678901234
+1999999999999999999999999
+12345678901234567890123456
+199999999999999999999999999
+1234567890123456789012345678
+19999999999999999999999999999
+123456789012345678901234567890
+1999999999999999999999999999999
+12345678901234567890123456789012
+199999999999999999999999999999999
+1234567890123456789012345678901234
+19999999999999999999999999999999999
+123456789012345678901234567890123456
+1999999999999999999999999999999999999
+12345678901234567890123456789012345678
+199999999999999999999999999999999999999
+1234567890123456789012345678901234567890
+1999999999999999999999999999999999999999
+1e40
+1.1e40
+1.5e40
+1e41
+1e50
+1e100
+1e150
+1e200
+1e250
+1e300
+1.79641e308
+wizzah
+])
+AT_DATA([bignum.sps], [dnl
+title 'Test use of big numbers'.
+
+*** Do the portable output.
+data list file='bignum.txt'/BIGNUM 1-40.
+list.
+
+*** Do the nonportable output for fun. 
+descriptives BIGNUM.
+])
+AT_CHECK([pspp -o pspp.csv bignum.sps], [0], [ignore])
+AT_CLEANUP
+
+AT_SETUP([DATE input format])
+AT_KEYWORDS([data-in])
+date_in
+AT_CHECK([$PERL test-my-rand.pl])
+AT_CHECK([$PERL date-in.pl date d-m-y])
+AT_CHECK([test -s date.sps])
+AT_CHECK([test -s date.in])
+AT_CHECK([pspp -O format=csv date.sps])
+AT_CHECK([cat date.out], [0], [dnl
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+])
+AT_CLEANUP
+
+AT_SETUP([ADATE input format])
+AT_KEYWORDS([data-in])
+date_in
+AT_CHECK([$PERL test-my-rand.pl])
+AT_CHECK([$PERL date-in.pl adate m-d-y])
+AT_CHECK([test -s adate.sps])
+AT_CHECK([test -s adate.in])
+AT_CHECK([pspp -O format=csv adate.sps])
+AT_CHECK([cat adate.out], [0], [dnl
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+])
+AT_CLEANUP
+
+AT_SETUP([EDATE input format])
+AT_KEYWORDS([data-in])
+date_in
+AT_CHECK([$PERL test-my-rand.pl])
+AT_CHECK([$PERL date-in.pl edate d-m-y])
+AT_CHECK([test -s edate.sps])
+AT_CHECK([test -s edate.in])
+AT_CHECK([pspp -O format=csv edate.sps])
+AT_CHECK([cat edate.out], [0], [dnl
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+])
+AT_CLEANUP
+
+AT_SETUP([JDATE input format])
+AT_KEYWORDS([data-in])
+date_in
+AT_CHECK([$PERL test-my-rand.pl])
+AT_CHECK([$PERL date-in.pl jdate j])
+AT_CHECK([test -s jdate.sps])
+AT_CHECK([test -s jdate.in])
+AT_CHECK([pspp -O format=csv jdate.sps])
+AT_CHECK([cat jdate.out], [0], [dnl
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+])
+AT_CLEANUP
+
+AT_SETUP([SDATE input format])
+AT_KEYWORDS([data-in])
+date_in
+AT_CHECK([$PERL test-my-rand.pl])
+AT_CHECK([$PERL date-in.pl sdate y-m-d])
+AT_CHECK([test -s sdate.sps])
+AT_CHECK([test -s sdate.in])
+AT_CHECK([pspp -O format=csv sdate.sps])
+AT_CHECK([cat sdate.out], [0], [dnl
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    3083529600.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    4221590400.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    5859561600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    7472649600.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+    8092742400.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10114329600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   10945929600.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11327644800.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11376633600.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   11391408000.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   12920169600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   13044585600.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   14392339200.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+   16149628800.00
+])
+AT_CLEANUP
+
+AT_SETUP([QYR input format])
+AT_KEYWORDS([data-in])
+date_in
+AT_CHECK([$PERL test-my-rand.pl])
+AT_CHECK([$PERL date-in.pl qyr qQy])
+AT_CHECK([test -s qyr.sps])
+AT_CHECK([test -s qyr.in])
+AT_CHECK([pspp -O format=csv qyr.sps])
+AT_CHECK([cat qyr.out], [0], [dnl
+    2065910400.00
+    2065910400.00
+    2065910400.00
+    2065910400.00
+    2065910400.00
+    2065910400.00
+    2065910400.00
+    2065910400.00
+    2065910400.00
+    2065910400.00
+    3075753600.00
+    3075753600.00
+    3075753600.00
+    3075753600.00
+    3075753600.00
+    3075753600.00
+    3075753600.00
+    3075753600.00
+    3075753600.00
+    3075753600.00
+    4219603200.00
+    4219603200.00
+    4219603200.00
+    4219603200.00
+    4219603200.00
+    4219603200.00
+    4219603200.00
+    4219603200.00
+    4219603200.00
+    4219603200.00
+    5852736000.00
+    5852736000.00
+    5852736000.00
+    5852736000.00
+    5852736000.00
+    5852736000.00
+    5852736000.00
+    5852736000.00
+    5852736000.00
+    5852736000.00
+    7469884800.00
+    7469884800.00
+    7469884800.00
+    7469884800.00
+    7469884800.00
+    7469884800.00
+    7469884800.00
+    7469884800.00
+    7469884800.00
+    7469884800.00
+    8085398400.00
+    8085398400.00
+    8085398400.00
+    8085398400.00
+    8085398400.00
+    8085398400.00
+    8085398400.00
+    8085398400.00
+    8085398400.00
+    8085398400.00
+   10112774400.00
+   10112774400.00
+   10112774400.00
+   10112774400.00
+   10112774400.00
+   10112774400.00
+   10112774400.00
+   10112774400.00
+   10112774400.00
+   10112774400.00
+   10941177600.00
+   10941177600.00
+   10941177600.00
+   10941177600.00
+   10941177600.00
+   10941177600.00
+   10941177600.00
+   10941177600.00
+   10941177600.00
+   10941177600.00
+   11319868800.00
+   11319868800.00
+   11319868800.00
+   11319868800.00
+   11319868800.00
+   11319868800.00
+   11319868800.00
+   11319868800.00
+   11319868800.00
+   11319868800.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   12913603200.00
+   12913603200.00
+   12913603200.00
+   12913603200.00
+   12913603200.00
+   12913603200.00
+   12913603200.00
+   12913603200.00
+   12913603200.00
+   12913603200.00
+   13039833600.00
+   13039833600.00
+   13039833600.00
+   13039833600.00
+   13039833600.00
+   13039833600.00
+   13039833600.00
+   13039833600.00
+   13039833600.00
+   13039833600.00
+   11319868800.00
+   11319868800.00
+   11319868800.00
+   11319868800.00
+   11319868800.00
+   11319868800.00
+   11319868800.00
+   11319868800.00
+   11319868800.00
+   11319868800.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   12913603200.00
+   12913603200.00
+   12913603200.00
+   12913603200.00
+   12913603200.00
+   12913603200.00
+   12913603200.00
+   12913603200.00
+   12913603200.00
+   12913603200.00
+   13039833600.00
+   13039833600.00
+   13039833600.00
+   13039833600.00
+   13039833600.00
+   13039833600.00
+   13039833600.00
+   13039833600.00
+   13039833600.00
+   13039833600.00
+   14388883200.00
+   14388883200.00
+   14388883200.00
+   14388883200.00
+   14388883200.00
+   14388883200.00
+   14388883200.00
+   14388883200.00
+   14388883200.00
+   14388883200.00
+   16148160000.00
+   16148160000.00
+   16148160000.00
+   16148160000.00
+   16148160000.00
+   16148160000.00
+   16148160000.00
+   16148160000.00
+   16148160000.00
+   16148160000.00
+])
+AT_CLEANUP
+
+AT_SETUP([MOYR input format])
+AT_KEYWORDS([data-in])
+date_in
+AT_CHECK([$PERL test-my-rand.pl])
+AT_CHECK([$PERL date-in.pl moyr m-y])
+AT_CHECK([test -s moyr.sps])
+AT_CHECK([test -s moyr.in])
+AT_CHECK([pspp -O format=csv moyr.sps])
+AT_CHECK([cat moyr.out], [0], [dnl
+    2071180800.00
+    2071180800.00
+    2071180800.00
+    2071180800.00
+    2071180800.00
+    2071180800.00
+    2071180800.00
+    2071180800.00
+    2071180800.00
+    2071180800.00
+    3081024000.00
+    3081024000.00
+    3081024000.00
+    3081024000.00
+    3081024000.00
+    3081024000.00
+    3081024000.00
+    3081024000.00
+    3081024000.00
+    3081024000.00
+    4219603200.00
+    4219603200.00
+    4219603200.00
+    4219603200.00
+    4219603200.00
+    4219603200.00
+    4219603200.00
+    4219603200.00
+    4219603200.00
+    4219603200.00
+    5858006400.00
+    5858006400.00
+    5858006400.00
+    5858006400.00
+    5858006400.00
+    5858006400.00
+    5858006400.00
+    5858006400.00
+    5858006400.00
+    5858006400.00
+    7472563200.00
+    7472563200.00
+    7472563200.00
+    7472563200.00
+    7472563200.00
+    7472563200.00
+    7472563200.00
+    7472563200.00
+    7472563200.00
+    7472563200.00
+    8090496000.00
+    8090496000.00
+    8090496000.00
+    8090496000.00
+    8090496000.00
+    8090496000.00
+    8090496000.00
+    8090496000.00
+    8090496000.00
+    8090496000.00
+   10112774400.00
+   10112774400.00
+   10112774400.00
+   10112774400.00
+   10112774400.00
+   10112774400.00
+   10112774400.00
+   10112774400.00
+   10112774400.00
+   10112774400.00
+   10943856000.00
+   10943856000.00
+   10943856000.00
+   10943856000.00
+   10943856000.00
+   10943856000.00
+   10943856000.00
+   10943856000.00
+   10943856000.00
+   10943856000.00
+   11325225600.00
+   11325225600.00
+   11325225600.00
+   11325225600.00
+   11325225600.00
+   11325225600.00
+   11325225600.00
+   11325225600.00
+   11325225600.00
+   11325225600.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   12918787200.00
+   12918787200.00
+   12918787200.00
+   12918787200.00
+   12918787200.00
+   12918787200.00
+   12918787200.00
+   12918787200.00
+   12918787200.00
+   12918787200.00
+   13042512000.00
+   13042512000.00
+   13042512000.00
+   13042512000.00
+   13042512000.00
+   13042512000.00
+   13042512000.00
+   13042512000.00
+   13042512000.00
+   13042512000.00
+   11325225600.00
+   11325225600.00
+   11325225600.00
+   11325225600.00
+   11325225600.00
+   11325225600.00
+   11325225600.00
+   11325225600.00
+   11325225600.00
+   11325225600.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11375078400.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   12918787200.00
+   12918787200.00
+   12918787200.00
+   12918787200.00
+   12918787200.00
+   12918787200.00
+   12918787200.00
+   12918787200.00
+   12918787200.00
+   12918787200.00
+   13042512000.00
+   13042512000.00
+   13042512000.00
+   13042512000.00
+   13042512000.00
+   13042512000.00
+   13042512000.00
+   13042512000.00
+   13042512000.00
+   13042512000.00
+   14391561600.00
+   14391561600.00
+   14391561600.00
+   14391561600.00
+   14391561600.00
+   14391561600.00
+   14391561600.00
+   14391561600.00
+   14391561600.00
+   14391561600.00
+   16148160000.00
+   16148160000.00
+   16148160000.00
+   16148160000.00
+   16148160000.00
+   16148160000.00
+   16148160000.00
+   16148160000.00
+   16148160000.00
+   16148160000.00
+])
+AT_CLEANUP
+
+AT_SETUP([WKYR input format])
+AT_KEYWORDS([data-in])
+date_in
+AT_CHECK([$PERL test-my-rand.pl])
+AT_CHECK([$PERL date-in.pl wkyr wWy])
+AT_CHECK([test -s wkyr.sps])
+AT_CHECK([test -s wkyr.in])
+AT_CHECK([pspp -O format=csv wkyr.sps])
+AT_CHECK([cat wkyr.out], [0], [dnl
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    3083011200.00
+    3083011200.00
+    3083011200.00
+    3083011200.00
+    3083011200.00
+    3083011200.00
+    3083011200.00
+    3083011200.00
+    3083011200.00
+    3083011200.00
+    4221417600.00
+    4221417600.00
+    4221417600.00
+    4221417600.00
+    4221417600.00
+    4221417600.00
+    4221417600.00
+    4221417600.00
+    4221417600.00
+    4221417600.00
+    5859388800.00
+    5859388800.00
+    5859388800.00
+    5859388800.00
+    5859388800.00
+    5859388800.00
+    5859388800.00
+    5859388800.00
+    5859388800.00
+    5859388800.00
+    7472390400.00
+    7472390400.00
+    7472390400.00
+    7472390400.00
+    7472390400.00
+    7472390400.00
+    7472390400.00
+    7472390400.00
+    7472390400.00
+    7472390400.00
+    8092656000.00
+    8092656000.00
+    8092656000.00
+    8092656000.00
+    8092656000.00
+    8092656000.00
+    8092656000.00
+    8092656000.00
+    8092656000.00
+    8092656000.00
+   10114070400.00
+   10114070400.00
+   10114070400.00
+   10114070400.00
+   10114070400.00
+   10114070400.00
+   10114070400.00
+   10114070400.00
+   10114070400.00
+   10114070400.00
+   10945497600.00
+   10945497600.00
+   10945497600.00
+   10945497600.00
+   10945497600.00
+   10945497600.00
+   10945497600.00
+   10945497600.00
+   10945497600.00
+   10945497600.00
+   11327212800.00
+   11327212800.00
+   11327212800.00
+   11327212800.00
+   11327212800.00
+   11327212800.00
+   11327212800.00
+   11327212800.00
+   11327212800.00
+   11327212800.00
+   11376374400.00
+   11376374400.00
+   11376374400.00
+   11376374400.00
+   11376374400.00
+   11376374400.00
+   11376374400.00
+   11376374400.00
+   11376374400.00
+   11376374400.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   12919651200.00
+   12919651200.00
+   12919651200.00
+   12919651200.00
+   12919651200.00
+   12919651200.00
+   12919651200.00
+   12919651200.00
+   12919651200.00
+   12919651200.00
+   13044067200.00
+   13044067200.00
+   13044067200.00
+   13044067200.00
+   13044067200.00
+   13044067200.00
+   13044067200.00
+   13044067200.00
+   13044067200.00
+   13044067200.00
+   11327212800.00
+   11327212800.00
+   11327212800.00
+   11327212800.00
+   11327212800.00
+   11327212800.00
+   11327212800.00
+   11327212800.00
+   11327212800.00
+   11327212800.00
+   11376374400.00
+   11376374400.00
+   11376374400.00
+   11376374400.00
+   11376374400.00
+   11376374400.00
+   11376374400.00
+   11376374400.00
+   11376374400.00
+   11376374400.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   11390889600.00
+   12919651200.00
+   12919651200.00
+   12919651200.00
+   12919651200.00
+   12919651200.00
+   12919651200.00
+   12919651200.00
+   12919651200.00
+   12919651200.00
+   12919651200.00
+   13044067200.00
+   13044067200.00
+   13044067200.00
+   13044067200.00
+   13044067200.00
+   13044067200.00
+   13044067200.00
+   13044067200.00
+   13044067200.00
+   13044067200.00
+   14391907200.00
+   14391907200.00
+   14391907200.00
+   14391907200.00
+   14391907200.00
+   14391907200.00
+   14391907200.00
+   14391907200.00
+   14391907200.00
+   14391907200.00
+   16149456000.00
+   16149456000.00
+   16149456000.00
+   16149456000.00
+   16149456000.00
+   16149456000.00
+   16149456000.00
+   16149456000.00
+   16149456000.00
+   16149456000.00
+])
+AT_CLEANUP
+
+AT_SETUP([DATETIME input format])
+AT_KEYWORDS([data-in])
+date_in
+AT_CHECK([$PERL test-my-rand.pl])
+AT_CHECK([$PERL date-in.pl datetime "d-m-y +H:M" "d-m-y +H:M:S"])
+AT_CHECK([test -s datetime.sps])
+AT_CHECK([test -s datetime.in])
+AT_CHECK([pspp -O format=csv datetime.sps])
+AT_CHECK([cat datetime.out], [0], [dnl
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    3083512200.00
+    3083512200.00
+    3083547000.00
+    3083547000.00
+    3083547000.00
+    3083512200.00
+    3083547000.00
+    3083547000.00
+    3083512200.00
+    3083512200.00
+    4221545340.00
+    4221635460.00
+    4221545340.00
+    4221545340.00
+    4221635460.00
+    4221635460.00
+    4221545340.00
+    4221635460.00
+    4221545340.00
+    4221635460.00
+    5859607620.00
+    5859607620.00
+    5859515580.00
+    5859515580.00
+    5859607620.00
+    5859607620.00
+    5859607620.00
+    5859607620.00
+    5859515580.00
+    5859607620.00
+    7472644440.00
+    7472654760.00
+    7472654760.00
+    7472654760.00
+    7472654760.00
+    7472654760.00
+    7472654760.00
+    7472654760.00
+    7472644440.00
+    7472654760.00
+    8092817880.00
+    8092666920.00
+    8092817880.00
+    8092666920.00
+    8092817880.00
+    8092817880.00
+    8092666920.00
+    8092817880.00
+    8092666920.00
+    8092817880.00
+   10114302240.00
+   10114356960.00
+   10114302240.00
+   10114302240.00
+   10114302240.00
+   10114356960.00
+   10114302240.00
+   10114302240.00
+   10114302240.00
+   10114356960.00
+   10945873020.00
+   10945986180.00
+   10945986180.00
+   10945986180.00
+   10945873020.00
+   10945986180.00
+   10945986180.00
+   10945873020.00
+   10945986180.00
+   10945873020.00
+   11327628900.00
+   11327660700.00
+   11327660700.00
+   11327660700.00
+   11327660700.00
+   11327628900.00
+   11327628900.00
+   11327660700.00
+   11327660700.00
+   11327660700.00
+   11376658140.00
+   11376609060.00
+   11376658140.00
+   11376658140.00
+   11376609060.00
+   11376658140.00
+   11376609060.00
+   11376658140.00
+   11376658140.00
+   11376658140.00
+   11391418620.00
+   11391418620.00
+   11391397380.00
+   11391397380.00
+   11391418620.00
+   11391418620.00
+   11391397380.00
+   11391418620.00
+   11391418620.00
+   11391418620.00
+   12920229900.00
+   12920229900.00
+   12920229900.00
+   12920229900.00
+   12920229900.00
+   12920109300.00
+   12920229900.00
+   12920109300.00
+   12920229900.00
+   12920229900.00
+   13044508200.00
+   13044663000.00
+   13044508200.00
+   13044663000.00
+   13044508200.00
+   13044508200.00
+   13044663000.00
+   13044663000.00
+   13044663000.00
+   13044663000.00
+   11327660700.00
+   11327628900.00
+   11327628900.00
+   11327660700.00
+   11327628900.00
+   11327628900.00
+   11327628900.00
+   11327628900.00
+   11327628900.00
+   11327628900.00
+   11376609060.00
+   11376658140.00
+   11376658140.00
+   11376609060.00
+   11376658140.00
+   11376609060.00
+   11376658140.00
+   11376609060.00
+   11376658140.00
+   11376658140.00
+   11391397380.00
+   11391397380.00
+   11391418620.00
+   11391397380.00
+   11391418620.00
+   11391418620.00
+   11391418620.00
+   11391418620.00
+   11391418620.00
+   11391397380.00
+   12920229900.00
+   12920229900.00
+   12920229900.00
+   12920229900.00
+   12920229900.00
+   12920229900.00
+   12920109300.00
+   12920229900.00
+   12920229900.00
+   12920229900.00
+   13044508200.00
+   13044663000.00
+   13044508200.00
+   13044508200.00
+   13044508200.00
+   13044663000.00
+   13044663000.00
+   13044663000.00
+   13044508200.00
+   13044508200.00
+   14392420200.00
+   14392258200.00
+   14392420200.00
+   14392420200.00
+   14392420200.00
+   14392420200.00
+   14392258200.00
+   14392420200.00
+   14392420200.00
+   14392420200.00
+   16149635760.00
+   16149635760.00
+   16149635760.00
+   16149635760.00
+   16149635760.00
+   16149635760.00
+   16149635760.00
+   16149635760.00
+   16149621840.00
+   16149635760.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    2071958400.00
+    3083512162.00
+    3083512162.00
+    3083512162.00
+    3083547038.00
+    3083512162.00
+    3083512162.00
+    3083547038.00
+    3083512162.00
+    3083547038.00
+    3083547038.00
+    4221635495.00
+    4221545305.00
+    4221635495.00
+    4221635495.00
+    4221635495.00
+    4221545305.00
+    4221635495.00
+    4221635495.00
+    4221635495.00
+    4221635495.00
+    5859607673.00
+    5859515527.00
+    5859607673.00
+    5859607673.00
+    5859607673.00
+    5859607673.00
+    5859515527.00
+    5859607673.00
+    5859607673.00
+    5859607673.00
+    7472654760.00
+    7472644440.00
+    7472654760.00
+    7472654760.00
+    7472654760.00
+    7472644440.00
+    7472654760.00
+    7472654760.00
+    7472644440.00
+    7472654760.00
+    8092817891.00
+    8092817891.00
+    8092666909.00
+    8092817891.00
+    8092817891.00
+    8092817891.00
+    8092817891.00
+    8092817891.00
+    8092817891.00
+    8092817891.00
+   10114302235.00
+   10114302235.00
+   10114302235.00
+   10114356965.00
+   10114356965.00
+   10114356965.00
+   10114356965.00
+   10114356965.00
+   10114356965.00
+   10114302235.00
+   10945986229.00
+   10945986229.00
+   10945872971.00
+   10945872971.00
+   10945986229.00
+   10945986229.00
+   10945872971.00
+   10945986229.00
+   10945986229.00
+   10945986229.00
+   11327660709.00
+   11327660709.00
+   11327660709.00
+   11327660709.00
+   11327660709.00
+   11327660709.00
+   11327660709.00
+   11327660709.00
+   11327660709.00
+   11327660709.00
+   11376658167.00
+   11376658167.00
+   11376658167.00
+   11376658167.00
+   11376658167.00
+   11376658167.00
+   11376658167.00
+   11376658167.00
+   11376658167.00
+   11376658167.00
+   11391397328.00
+   11391418672.00
+   11391418672.00
+   11391418672.00
+   11391397328.00
+   11391418672.00
+   11391397328.00
+   11391418672.00
+   11391418672.00
+   11391418672.00
+   12920229944.00
+   12920229944.00
+   12920109256.00
+   12920229944.00
+   12920229944.00
+   12920109256.00
+   12920109256.00
+   12920109256.00
+   12920229944.00
+   12920109256.00
+   13044663057.00
+   13044663057.00
+   13044663057.00
+   13044508143.00
+   13044663057.00
+   13044663057.00
+   13044663057.00
+   13044508143.00
+   13044663057.00
+   13044663057.00
+   11327628891.00
+   11327628891.00
+   11327660709.00
+   11327660709.00
+   11327660709.00
+   11327628891.00
+   11327628891.00
+   11327660709.00
+   11327660709.00
+   11327628891.00
+   11376658167.00
+   11376658167.00
+   11376658167.00
+   11376658167.00
+   11376658167.00
+   11376609033.00
+   11376658167.00
+   11376609033.00
+   11376658167.00
+   11376658167.00
+   11391418672.00
+   11391397328.00
+   11391418672.00
+   11391397328.00
+   11391397328.00
+   11391397328.00
+   11391397328.00
+   11391397328.00
+   11391397328.00
+   11391397328.00
+   12920229944.00
+   12920229944.00
+   12920229944.00
+   12920109256.00
+   12920229944.00
+   12920229944.00
+   12920229944.00
+   12920229944.00
+   12920229944.00
+   12920229944.00
+   13044663057.00
+   13044663057.00
+   13044663057.00
+   13044663057.00
+   13044508143.00
+   13044663057.00
+   13044508143.00
+   13044508143.00
+   13044663057.00
+   13044663057.00
+   14392258196.00
+   14392420204.00
+   14392420204.00
+   14392420204.00
+   14392258196.00
+   14392420204.00
+   14392420204.00
+   14392258196.00
+   14392420204.00
+   14392420204.00
+   16149635811.00
+   16149635811.00
+   16149635811.00
+   16149635811.00
+   16149635811.00
+   16149621789.00
+   16149621789.00
+   16149621789.00
+   16149635811.00
+   16149635811.00
+])
+AT_CLEANUP
+
+AT_SETUP([TIME input format])
+AT_KEYWORDS([data-in])
+time_in
+AT_CHECK([$PERL test-my-rand.pl])
+AT_CHECK([$PERL time-in.pl 0 time +H:M +H:M:S])
+AT_CHECK([test -s time.sps])
+AT_CHECK([test -s time.data])
+AT_CHECK([pspp -O format=csv time.sps])
+AT_CHECK([cat time.out], [0], [dnl
+              .00
+              .00
+              .00
+              .00
+              .00
+              .00
+              .00
+              .00
+              .00
+              .00
+       -103800.00
+        103800.00
+        103800.00
+       -103800.00
+        103800.00
+       -103800.00
+        103800.00
+        103800.00
+       -103800.00
+        103800.00
+        477060.00
+        477060.00
+        477060.00
+        477060.00
+       -477060.00
+        477060.00
+        477060.00
+        477060.00
+        477060.00
+       -477060.00
+         46020.00
+        -46020.00
+        -46020.00
+        -46020.00
+         46020.00
+         46020.00
+        -46020.00
+         46020.00
+         46020.00
+        -46020.00
+        264360.00
+        264360.00
+       -264360.00
+       -264360.00
+        264360.00
+       -264360.00
+        264360.00
+       -264360.00
+       -264360.00
+       -264360.00
+        161880.00
+        161880.00
+        161880.00
+        161880.00
+        161880.00
+       -161880.00
+        161880.00
+        161880.00
+        161880.00
+       -161880.00
+       1064160.00
+       1064160.00
+       1064160.00
+       1064160.00
+       1064160.00
+       1064160.00
+      -1064160.00
+       1064160.00
+       1064160.00
+       1064160.00
+      -4549380.00
+       4549380.00
+       4549380.00
+       4549380.00
+       4549380.00
+       4549380.00
+       4549380.00
+      -4549380.00
+       4549380.00
+       4549380.00
+        620700.00
+       -620700.00
+        620700.00
+        620700.00
+       -620700.00
+        620700.00
+       -620700.00
+       -620700.00
+        620700.00
+        620700.00
+         24540.00
+        -24540.00
+         24540.00
+         24540.00
+         24540.00
+         24540.00
+         24540.00
+         24540.00
+         24540.00
+         24540.00
+      -1738620.00
+       1738620.00
+       1738620.00
+       1738620.00
+       1738620.00
+       1738620.00
+       1738620.00
+       1738620.00
+       1738620.00
+       1738620.00
+      48012300.00
+     -48012300.00
+     -48012300.00
+      48012300.00
+      48012300.00
+      48012300.00
+      48012300.00
+      48012300.00
+      48012300.00
+      48012300.00
+      10445400.00
+     -10445400.00
+     -10445400.00
+      10445400.00
+      10445400.00
+      10445400.00
+     -10445400.00
+      10445400.00
+      10445400.00
+     -10445400.00
+         15900.00
+         15900.00
+        -15900.00
+         15900.00
+        -15900.00
+        -15900.00
+         15900.00
+         15900.00
+         15900.00
+         15900.00
+        283740.00
+       -283740.00
+        283740.00
+        283740.00
+        283740.00
+       -283740.00
+        283740.00
+        283740.00
+       -283740.00
+        283740.00
+        442620.00
+        442620.00
+        442620.00
+        442620.00
+        442620.00
+        442620.00
+        442620.00
+        442620.00
+        442620.00
+       -442620.00
+         60300.00
+         60300.00
+         60300.00
+         60300.00
+         60300.00
+        -60300.00
+        -60300.00
+         60300.00
+        -60300.00
+        -60300.00
+        163800.00
+       -163800.00
+       -163800.00
+       -163800.00
+        163800.00
+        163800.00
+        163800.00
+        163800.00
+       -163800.00
+        163800.00
+        945000.00
+       -945000.00
+       -945000.00
+       -945000.00
+        945000.00
+        945000.00
+        945000.00
+       -945000.00
+        945000.00
+        945000.00
+      -1907760.00
+       1907760.00
+      -1907760.00
+       1907760.00
+      -1907760.00
+       1907760.00
+       1907760.00
+       1907760.00
+       1907760.00
+      -1907760.00
+              .00
+              .00
+              .00
+              .00
+              .00
+              .00
+              .00
+              .00
+              .00
+              .00
+        103839.00
+        103838.68
+       -103838.70
+       -103838.68
+        103838.70
+        103838.68
+       -103839.00
+        103838.68
+        103838.70
+       -103839.00
+        477095.82
+        477096.00
+        477096.00
+        477095.82
+        477095.82
+        477095.82
+        477095.80
+       -477095.80
+        477095.82
+       -477095.82
+        -46073.00
+        -46073.40
+         46073.00
+         46073.40
+         46073.40
+         46073.00
+        -46073.00
+         46073.00
+         46073.00
+         46073.00
+        264360.69
+       -264360.70
+        264361.00
+        264360.70
+        264360.69
+        264360.70
+        264361.00
+        264360.70
+       -264361.00
+        264361.00
+        161891.00
+       -161891.20
+       -161891.00
+        161891.00
+       -161891.00
+        161891.20
+       -161891.20
+       -161891.20
+        161891.20
+       -161891.19
+      -1064166.00
+       1064165.98
+      -1064166.00
+      -1064166.00
+      -1064165.98
+       1064166.00
+       1064166.00
+      -1064166.00
+      -1064165.98
+       1064166.00
+       4549429.00
+       4549429.27
+       4549429.27
+      -4549429.30
+       4549429.00
+      -4549429.00
+       4549429.00
+       4549429.27
+       4549429.00
+       4549429.30
+        620709.00
+       -620709.24
+        620709.24
+        620709.24
+        620709.24
+        620709.20
+       -620709.24
+        620709.20
+        620709.24
+        620709.24
+         24567.90
+         24567.89
+         24567.90
+         24568.00
+         24567.90
+         24568.00
+         24568.00
+        -24567.90
+         24567.90
+         24568.00
+       1738672.56
+       1738673.00
+      -1738672.60
+      -1738672.56
+       1738673.00
+       1738673.00
+       1738673.00
+       1738672.60
+      -1738672.56
+       1738672.60
+     -48012344.10
+      48012344.12
+     -48012344.10
+     -48012344.00
+     -48012344.00
+      48012344.00
+     -48012344.00
+     -48012344.00
+     -48012344.00
+      48012344.00
+      10445457.27
+      10445457.00
+      10445457.30
+      10445457.00
+      10445457.27
+      10445457.00
+      10445457.27
+      10445457.00
+      10445457.00
+     -10445457.30
+        -15909.98
+         15910.00
+        -15910.00
+         15910.00
+        -15909.98
+         15910.00
+        -15909.98
+         15909.98
+         15910.00
+         15909.98
+       -283767.00
+        283767.20
+        283767.20
+        283767.00
+       -283767.00
+        283767.00
+        283767.24
+        283767.00
+        283767.24
+        283767.00
+       -442672.00
+        442672.13
+        442672.00
+        442672.13
+        442672.00
+        442672.00
+        442672.00
+        442672.00
+       -442672.00
+        442672.13
+        -60344.40
+        -60344.00
+         60344.00
+         60344.35
+         60344.00
+         60344.40
+         60344.40
+        -60344.00
+         60344.00
+         60344.40
+        163857.00
+        163857.00
+        163857.00
+        163857.00
+        163857.30
+       -163857.30
+        163857.30
+       -163857.00
+       -163857.00
+        163857.30
+        945004.30
+        945004.00
+        945004.27
+        945004.30
+        945004.30
+        945004.00
+        945004.30
+        945004.00
+        945004.00
+        945004.00
+       1907811.00
+       1907811.00
+      -1907811.00
+       1907811.18
+       1907811.20
+       1907811.00
+      -1907811.00
+       1907811.18
+      -1907811.00
+      -1907811.00
+])
+AT_CLEANUP
+
+AT_SETUP([DTIME input format])
+AT_KEYWORDS([data-in])
+time_in
+AT_CHECK([$PERL test-my-rand.pl])
+AT_CHECK([$PERL time-in.pl 2000 dtime '+D H:M' '+D H:M:S'])
+AT_CHECK([test -s dtime.sps])
+AT_CHECK([test -s dtime.data])
+AT_CHECK([pspp -O format=csv dtime.sps])
+AT_CHECK([cat dtime.out], [0], [dnl
+              .00
+              .00
+              .00
+              .00
+              .00
+              .00
+              .00
+              .00
+              .00
+              .00
+        103800.00
+        103800.00
+       -103800.00
+        103800.00
+        103800.00
+       -103800.00
+        103800.00
+       -103800.00
+        103800.00
+       -103800.00
+        477060.00
+        477060.00
+        477060.00
+        477060.00
+        477060.00
+        477060.00
+       -477060.00
+       -477060.00
+       -477060.00
+        477060.00
+         46020.00
+         46020.00
+         46020.00
+         46020.00
+        -46020.00
+        -46020.00
+        -46020.00
+         46020.00
+         46020.00
+         46020.00
+        264360.00
+        264360.00
+       -264360.00
+        264360.00
+        264360.00
+        264360.00
+        264360.00
+       -264360.00
+       -264360.00
+       -264360.00
+       -161880.00
+       -161880.00
+        161880.00
+        161880.00
+        161880.00
+       -161880.00
+        161880.00
+       -161880.00
+        161880.00
+       -161880.00
+       1064160.00
+       1064160.00
+       1064160.00
+       1064160.00
+       1064160.00
+       1064160.00
+      -1064160.00
+       1064160.00
+       1064160.00
+       1064160.00
+      -4549380.00
+       4549380.00
+      -4549380.00
+      -4549380.00
+      -4549380.00
+       4549380.00
+       4549380.00
+       4549380.00
+       4549380.00
+       4549380.00
+       -620700.00
+        620700.00
+        620700.00
+       -620700.00
+        620700.00
+        620700.00
+        620700.00
+       -620700.00
+        620700.00
+        620700.00
+        -24540.00
+         24540.00
+         24540.00
+         24540.00
+        -24540.00
+         24540.00
+         24540.00
+        -24540.00
+         24540.00
+        -24540.00
+       1738620.00
+       1738620.00
+       1738620.00
+      -1738620.00
+      -1738620.00
+      -1738620.00
+       1738620.00
+       1738620.00
+       1738620.00
+       1738620.00
+      48012300.00
+      48012300.00
+      48012300.00
+      48012300.00
+      48012300.00
+     -48012300.00
+     -48012300.00
+      48012300.00
+     -48012300.00
+     -48012300.00
+     -10445400.00
+      10445400.00
+     -10445400.00
+      10445400.00
+      10445400.00
+      10445400.00
+      10445400.00
+      10445400.00
+      10445400.00
+      10445400.00
+         15900.00
+         15900.00
+         15900.00
+         15900.00
+         15900.00
+        -15900.00
+         15900.00
+         15900.00
+         15900.00
+         15900.00
+       -283740.00
+        283740.00
+       -283740.00
+       -283740.00
+        283740.00
+        283740.00
+        283740.00
+        283740.00
+        283740.00
+       -283740.00
+        442620.00
+       -442620.00
+       -442620.00
+        442620.00
+        442620.00
+       -442620.00
+       -442620.00
+       -442620.00
+        442620.00
+        442620.00
+         60300.00
+        -60300.00
+         60300.00
+         60300.00
+         60300.00
+         60300.00
+         60300.00
+         60300.00
+         60300.00
+         60300.00
+        163800.00
+        163800.00
+       -163800.00
+        163800.00
+       -163800.00
+       -163800.00
+       -163800.00
+        163800.00
+        163800.00
+       -163800.00
+        945000.00
+        945000.00
+        945000.00
+        945000.00
+       -945000.00
+        945000.00
+        945000.00
+        945000.00
+        945000.00
+       -945000.00
+      -1907760.00
+       1907760.00
+       1907760.00
+       1907760.00
+      -1907760.00
+      -1907760.00
+      -1907760.00
+       1907760.00
+      -1907760.00
+      -1907760.00
+              .00
+              .00
+              .00
+              .00
+              .00
+              .00
+              .00
+              .00
+              .00
+              .00
+        103838.70
+        103838.70
+        103839.00
+        103838.68
+        103838.70
+        103839.00
+        103838.70
+       -103839.00
+        103839.00
+        103839.00
+        477095.80
+        477095.80
+       -477095.80
+        477095.82
+        477095.82
+        477095.82
+       -477095.82
+        477095.82
+        477096.00
+       -477096.00
+        -46073.00
+         46073.00
+        -46073.00
+         46073.41
+         46073.00
+         46073.40
+         46073.00
+         46073.41
+         46073.41
+        -46073.00
+        264360.70
+        264360.70
+        264360.69
+        264361.00
+       -264360.70
+        264360.69
+       -264360.70
+        264360.69
+       -264361.00
+        264360.69
+        161891.00
+       -161891.20
+       -161891.19
+        161891.19
+        161891.00
+        161891.20
+        161891.20
+        161891.00
+        161891.00
+        161891.20
+      -1064165.98
+       1064166.00
+       1064166.00
+       1064166.00
+       1064165.98
+       1064166.00
+       1064166.00
+      -1064165.98
+       1064165.98
+      -1064166.00
+       4549429.27
+       4549429.27
+       4549429.27
+       4549429.27
+       4549429.00
+       4549429.27
+      -4549429.27
+       4549429.00
+       4549429.27
+       4549429.27
+       -620709.00
+        620709.20
+        620709.00
+       -620709.20
+       -620709.24
+       -620709.00
+        620709.00
+        620709.24
+       -620709.24
+        620709.00
+        -24567.89
+         24567.90
+         24568.00
+         24567.89
+         24568.00
+         24568.00
+         24567.90
+        -24568.00
+        -24567.89
+        -24568.00
+       1738672.56
+      -1738672.56
+       1738672.56
+      -1738672.60
+      -1738673.00
+       1738672.56
+       1738673.00
+      -1738672.60
+       1738672.60
+       1738672.56
+      48012344.00
+     -48012344.12
+     -48012344.00
+      48012344.12
+     -48012344.12
+     -48012344.00
+      48012344.12
+     -48012344.00
+     -48012344.00
+     -48012344.00
+     -10445457.00
+      10445457.00
+      10445457.00
+      10445457.00
+     -10445457.00
+     -10445457.00
+      10445457.00
+      10445457.00
+      10445457.00
+     -10445457.30
+        -15909.98
+         15910.00
+        -15909.98
+         15910.00
+         15910.00
+        -15910.00
+        -15910.00
+        -15910.00
+        -15910.00
+         15909.98
+       -283767.24
+        283767.20
+        283767.24
+        283767.24
+        283767.00
+        283767.20
+        283767.20
+        283767.24
+       -283767.00
+        283767.24
+        442672.13
+       -442672.13
+        442672.00
+        442672.13
+        442672.10
+        442672.00
+        442672.00
+       -442672.10
+        442672.00
+       -442672.10
+        -60344.35
+         60344.00
+         60344.00
+        -60344.00
+         60344.00
+         60344.35
+         60344.00
+         60344.35
+         60344.00
+         60344.00
+       -163857.00
+       -163857.00
+        163857.32
+        163857.00
+       -163857.30
+       -163857.00
+        163857.30
+        163857.00
+        163857.00
+       -163857.00
+       -945004.00
+       -945004.30
+        945004.27
+        945004.27
+       -945004.27
+       -945004.27
+       -945004.00
+       -945004.27
+       -945004.00
+        945004.30
+       1907811.00
+       1907811.00
+       1907811.00
+       1907811.00
+       1907811.20
+       1907811.18
+       1907811.18
+       1907811.18
+       1907811.18
+       1907811.00
+])
+AT_CLEANUP
+
+AT_SETUP([binary and hexadecimal input (IB, PIB, and PIBHEX formats)])
+AT_CHECK([$PERL -e 'print pack "n", $_ foreach 0...65535' > binhex-in.data])
+AT_CHECK([wc -c < binhex-in.data], [0], [131072
+])
+AT_DATA([binhex-in.sps], [dnl
+SET RIB=MSBFIRST.
+SET ERRORS=NONE.
+SET MXWARNS=10000000.
+SET MXERRS=10000000.
+FILE HANDLE data/NAME='binhex-in.data'/MODE=IMAGE/LRECL=2.
+DATA LIST FILE=data NOTABLE/ib 1-2 (IB) pib 1-2 (PIB) pibhex 1-2 (PIBHEX).
+COMPUTE x=$CASENUM - 1.
+PRINT OUTFILE='binhex-in.out'/x (PIBHEX4) ' ' ib pib pibhex.
+EXECUTE.
+])
+AT_CHECK([gzip -cd < $top_srcdir/tests/data/binhex-in.expected.cmp.gz | \
+            $PERL -pe "printf ' %04X ', $.-1" > expout])
+AT_CHECK([pspp -O format=csv binhex-in.sps], [0])
+AT_CHECK([cat binhex-in.out], [0], [expout])
+AT_CLEANUP
+
+AT_SETUP([BCD input (P and PK formats)])
+AT_CHECK([$PERL -e 'print pack "n", $_ foreach 0...65535' > bcd-in.data])
+AT_CHECK([wc -c < bcd-in.data], [0], [131072
+])
+AT_DATA([bcd-in.sps], [dnl
+SET ERRORS=NONE.
+SET MXWARNS=10000000.
+SET MXERRS=10000000.
+FILE HANDLE data/NAME='bcd-in.data'/MODE=IMAGE/LRECL=2.
+DATA LIST FILE=data NOTABLE/p 1-2 (P) pk 1-2 (PK).
+COMPUTE x=$CASENUM - 1.
+PRINT OUTFILE='bcd-in.out'/x (PIBHEX4) ' ' P PK.
+EXECUTE.
+])
+AT_CHECK([gzip -cd < $top_srcdir/tests/data/bcd-in.expected.cmp.gz | \
+            $PERL -pe "printf ' %04X ', $.-1" > expout])
+AT_CHECK([pspp -O format=csv bcd-in.sps])
+AT_CHECK([cat bcd-in.out], [0], [expout])
+AT_CLEANUP
+
+AT_SETUP([legacy input (N and Z formats)])
+AT_CHECK([$PERL -e 'print pack "n", $_ foreach 0...65535' > legacy-in.data])
+AT_CHECK([wc -c < legacy-in.data], [0], [131072
+])
+AT_DATA([legacy-in.sps], [dnl
+SET ERRORS=NONE.
+SET MXWARNS=10000000.
+SET MXERRS=10000000.
+FILE HANDLE data/NAME='legacy-in.data'/MODE=IMAGE/LRECL=2.
+DATA LIST NOTABLE FILE=data/n 1-2 (N) z 1-2 (z).
+COMPUTE x=$CASENUM - 1.
+PRINT OUTFILE='legacy-in.out'/x (PIBHEX4) ' ' N Z.
+EXECUTE.
+])
+AT_CHECK([gzip -cd < $top_srcdir/tests/data/legacy-in.expected.cmp.gz | \
+            $PERL -pe "printf ' %04X ', $.-1" > expout])
+AT_CHECK([pspp -O format=csv legacy-in.sps])
+AT_CHECK([cat legacy-in.out], [0], [expout])
+AT_CLEANUP
+
+AT_SETUP([WKDAY input format])
+AT_DATA([wkday.sps], [dnl
+DATA LIST NOTABLE /wkday2 1-2 (wkday)
+                  wkday3 1-3 (wkday)
+                  wkday4 1-4 (wkday)
+                  wkday5 1-5 (wkday)
+                  wkday6 1-6 (wkday)
+                  wkday7 1-7 (wkday)
+                  wkday8 1-8 (wkday)
+                  wkday9 1-9 (wkday)
+                  wkday10 1-10 (wkday).
+BEGIN DATA.
+
+.
+monady
+tuseday
+WEDENSDAY
+Thurdsay
+fRidya
+SAturady
+sudnay
+sturday
+END DATA.
+FORMATS ALL (WKDAY2).
+PRINT OUTFILE='wkday.out'/ALL.
+EXECUTE.
+])
+AT_CHECK([pspp -O format=csv wkday.sps], [0], [dnl
+wkday.sps:20.1-2: warning: Data for variable wkday2 is not valid as format WKDAY: Unrecognized weekday name.  At least the first two letters of an English weekday name must be specified.
+
+wkday.sps:20.1-3: warning: Data for variable wkday3 is not valid as format WKDAY: Unrecognized weekday name.  At least the first two letters of an English weekday name must be specified.
+
+wkday.sps:20.1-4: warning: Data for variable wkday4 is not valid as format WKDAY: Unrecognized weekday name.  At least the first two letters of an English weekday name must be specified.
+
+wkday.sps:20.1-5: warning: Data for variable wkday5 is not valid as format WKDAY: Unrecognized weekday name.  At least the first two letters of an English weekday name must be specified.
+
+wkday.sps:20.1-6: warning: Data for variable wkday6 is not valid as format WKDAY: Unrecognized weekday name.  At least the first two letters of an English weekday name must be specified.
+
+wkday.sps:20.1-7: warning: Data for variable wkday7 is not valid as format WKDAY: Unrecognized weekday name.  At least the first two letters of an English weekday name must be specified.
+
+wkday.sps:20.1-8: warning: Data for variable wkday8 is not valid as format WKDAY: Unrecognized weekday name.  At least the first two letters of an English weekday name must be specified.
+
+wkday.sps:20.1-9: warning: Data for variable wkday9 is not valid as format WKDAY: Unrecognized weekday name.  At least the first two letters of an English weekday name must be specified.
+
+wkday.sps:20.1-10: warning: Data for variable wkday10 is not valid as format WKDAY: Unrecognized weekday name.  At least the first two letters of an English weekday name must be specified.
+])
+AT_CHECK([cat wkday.out], [0], [dnl
+  .  .  .  .  .  .  .  .  . @&t@
+  .  .  .  .  .  .  .  .  . @&t@
+ MO MO MO MO MO MO MO MO MO @&t@
+ TU TU TU TU TU TU TU TU TU @&t@
+ WE WE WE WE WE WE WE WE WE @&t@
+ TH TH TH TH TH TH TH TH TH @&t@
+ FR FR FR FR FR FR FR FR FR @&t@
+ SA SA SA SA SA SA SA SA SA @&t@
+ SU SU SU SU SU SU SU SU SU @&t@
+  .  .  .  .  .  .  .  .  . @&t@
+])
+AT_CLEANUP
+
+AT_SETUP([MONTH input format])
+AT_DATA([month.sps], [dnl
+DATA LIST NOTABLE /month3 1-3 (MONTH)
+                  month4 1-4 (MONTH)
+                  month5 1-5 (MONTH)
+                  month6 1-6 (MONTH)
+                  month7 1-7 (MONTH)
+                  month8 1-8 (MONTH)
+                  month9 1-9 (MONTH)
+                  month10 1-10 (MONTH).
+BEGIN DATA.
+
+.
+i
+ii
+iii
+iiii
+iv
+v
+vi
+vii
+viii
+ix
+viiii
+x
+xi
+xii
+0
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+january
+JANAURY
+February
+fEbraury
+MArch
+marhc
+apRIL
+may
+june
+july
+august
+september
+october
+november
+decmeber
+december
+END DATA.
+FORMATS ALL (MONTH3).
+PRINT OUTFILE='month.out'/ALL.
+EXECUTE.
+])
+AT_CHECK([pspp -O format=csv month.sps], [0], [dnl
+month.sps:15.1-4: warning: Data for variable month4 is not valid as format MONTH: Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
+
+month.sps:15.1-5: warning: Data for variable month5 is not valid as format MONTH: Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
+
+month.sps:15.1-6: warning: Data for variable month6 is not valid as format MONTH: Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
+
+month.sps:15.1-7: warning: Data for variable month7 is not valid as format MONTH: Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
+
+month.sps:15.1-8: warning: Data for variable month8 is not valid as format MONTH: Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
+
+month.sps:15.1-9: warning: Data for variable month9 is not valid as format MONTH: Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
+
+month.sps:15.1-10: warning: Data for variable month10 is not valid as format MONTH: Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
+
+month.sps:26.1-3: warning: Data for variable month3 is not valid as format MONTH: Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
+
+month.sps:26.1-4: warning: Data for variable month4 is not valid as format MONTH: Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
+
+month.sps:26.1-5: warning: Data for variable month5 is not valid as format MONTH: Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
+
+month.sps:26.1-6: warning: Data for variable month6 is not valid as format MONTH: Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
+
+month.sps:26.1-7: warning: Data for variable month7 is not valid as format MONTH: Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
+
+month.sps:26.1-8: warning: Data for variable month8 is not valid as format MONTH: Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
+
+month.sps:26.1-9: warning: Data for variable month9 is not valid as format MONTH: Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
+
+month.sps:26.1-10: warning: Data for variable month10 is not valid as format MONTH: Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
+
+month.sps:39.1-3: warning: Data for variable month3 is not valid as format MONTH: Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
+
+month.sps:39.1-4: warning: Data for variable month4 is not valid as format MONTH: Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
+
+month.sps:39.1-5: warning: Data for variable month5 is not valid as format MONTH: Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
+
+month.sps:39.1-6: warning: Data for variable month6 is not valid as format MONTH: Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
+
+month.sps:39.1-7: warning: Data for variable month7 is not valid as format MONTH: Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
+
+month.sps:39.1-8: warning: Data for variable month8 is not valid as format MONTH: Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
+
+month.sps:39.1-9: warning: Data for variable month9 is not valid as format MONTH: Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
+
+month.sps:39.1-10: warning: Data for variable month10 is not valid as format MONTH: Unrecognized month format.  Months may be specified as Arabic or Roman numerals or as at least 3 letters of their English names.
+])
+AT_CHECK([cat month.out], [0], [dnl
+   .   .   .   .   .   .   .   . @&t@
+   .   .   .   .   .   .   .   . @&t@
+ JAN JAN JAN JAN JAN JAN JAN JAN @&t@
+ FEB FEB FEB FEB FEB FEB FEB FEB @&t@
+ MAR MAR MAR MAR MAR MAR MAR MAR @&t@
+ MAR   .   .   .   .   .   .   . @&t@
+ APR APR APR APR APR APR APR APR @&t@
+ MAY MAY MAY MAY MAY MAY MAY MAY @&t@
+ JUN JUN JUN JUN JUN JUN JUN JUN @&t@
+ JUL JUL JUL JUL JUL JUL JUL JUL @&t@
+ JUL AUG AUG AUG AUG AUG AUG AUG @&t@
+ SEP SEP SEP SEP SEP SEP SEP SEP @&t@
+ JUL AUG AUG AUG AUG AUG AUG AUG @&t@
+ OCT OCT OCT OCT OCT OCT OCT OCT @&t@
+ NOV NOV NOV NOV NOV NOV NOV NOV @&t@
+ DEC DEC DEC DEC DEC DEC DEC DEC @&t@
+   .   .   .   .   .   .   .   . @&t@
+ JAN JAN JAN JAN JAN JAN JAN JAN @&t@
+ FEB FEB FEB FEB FEB FEB FEB FEB @&t@
+ MAR MAR MAR MAR MAR MAR MAR MAR @&t@
+ APR APR APR APR APR APR APR APR @&t@
+ MAY MAY MAY MAY MAY MAY MAY MAY @&t@
+ JUN JUN JUN JUN JUN JUN JUN JUN @&t@
+ JUL JUL JUL JUL JUL JUL JUL JUL @&t@
+ AUG AUG AUG AUG AUG AUG AUG AUG @&t@
+ SEP SEP SEP SEP SEP SEP SEP SEP @&t@
+ OCT OCT OCT OCT OCT OCT OCT OCT @&t@
+ NOV NOV NOV NOV NOV NOV NOV NOV @&t@
+ DEC DEC DEC DEC DEC DEC DEC DEC @&t@
+   .   .   .   .   .   .   .   . @&t@
+ JAN JAN JAN JAN JAN JAN JAN JAN @&t@
+ JAN JAN JAN JAN JAN JAN JAN JAN @&t@
+ FEB FEB FEB FEB FEB FEB FEB FEB @&t@
+ FEB FEB FEB FEB FEB FEB FEB FEB @&t@
+ MAR MAR MAR MAR MAR MAR MAR MAR @&t@
+ MAR MAR MAR MAR MAR MAR MAR MAR @&t@
+ APR APR APR APR APR APR APR APR @&t@
+ MAY MAY MAY MAY MAY MAY MAY MAY @&t@
+ JUN JUN JUN JUN JUN JUN JUN JUN @&t@
+ JUL JUL JUL JUL JUL JUL JUL JUL @&t@
+ AUG AUG AUG AUG AUG AUG AUG AUG @&t@
+ SEP SEP SEP SEP SEP SEP SEP SEP @&t@
+ OCT OCT OCT OCT OCT OCT OCT OCT @&t@
+ NOV NOV NOV NOV NOV NOV NOV NOV @&t@
+ DEC DEC DEC DEC DEC DEC DEC DEC @&t@
+ DEC DEC DEC DEC DEC DEC DEC DEC @&t@
+])
+AT_CLEANUP
diff --git a/tests/data/data-out.at b/tests/data/data-out.at
new file mode 100644 (file)
index 0000000..9a41a3b
--- /dev/null
@@ -0,0 +1,15637 @@
+AT_BANNER([data output (data-out)])
+
+AT_SETUP([numeric format output])
+AT_DATA([num-out.pl],
+[[use strict;
+use warnings 'all';
+
+my @values = qw(0 2 9.5 27 271 999.95 2718 9999.995 27182 271828
+2718281 2**39 2**333 2**-21 -2 -9.5 -27 -271 -999.95 -2718 -9999.995
+-27182 -271828 -2718281 -2**39 -2**333 -2**-21 -0 3.125 31.25 314.125
+3141.5 31415.875 314159.25 3141592.625 31415926.5 271828182.25
+3214567890.5 31415926535.875 -3.125 -31.375 -314.125 -3141.5
+-31415.875 -314159.25 -3141592.625 -31415926.5 -271828182.25
+-3214567890.5 -31415926535.875);
+
+print "SET CCA=',,,'.\n";
+print "SET CCB='-,[[[,]]],-'.\n";
+print "SET CCC='((,[,],))'.\n";
+print "SET CCD=',XXX,,-'.\n";
+print "SET CCE=',,YYY,-'.\n";
+print "INPUT PROGRAM.\n";
+print "STRING EXPR(A16).\n";
+print map ("COMPUTE NUM=$_.\nCOMPUTE EXPR='$_'.\nEND CASE.\n", @values);
+print "END FILE.\n";
+print "END INPUT PROGRAM.\n";
+
+print "PRINT OUTFILE='output.txt'/EXPR.\n";
+for my $format qw (F COMMA DOT DOLLAR PCT E CCA CCB CCC CCD CCE N Z) {
+    for my $d (0...16) {
+       my ($min_w);
+       if ($format ne 'E') {
+           $min_w = $d + 1;
+           $min_w++ if $format eq 'DOLLAR' || $format eq 'PCT';
+           $min_w = 2 if $min_w == 1 && ($format =~ /^CC/);
+       } else {
+           $min_w = $d + 7;
+       }
+       for my $w ($min_w...40) {
+           my ($f) = "$format$w.$d";
+           print "PRINT OUTFILE='output.txt'/'$f: \"' NUM($f) '\"'.\n";
+       }
+    }
+    print "PRINT SPACE OUTFILE='output.txt'.\n";
+}
+print "EXECUTE.\n";
+]])
+AT_CHECK([$PERL num-out.pl > num-out.sps])
+AT_CHECK([pspp -O format=csv num-out.sps])
+AT_CHECK([inexactify$EXEEXT < output.txt > output.inexact])
+AT_CHECK([gzip -cd < $top_srcdir/tests/data/num-out.expected.cmp.gz > expout.cmp])
+AT_DATA([num-out-decmp.pl],
+[[use strict;
+use warnings 'all';
+
+my (@line);
+while (<>) {
+    if (my ($n) = /^\*(\d+)$/) {
+       for (1...$n) {
+           $line[1]++;
+           $line[3] = " $line[3]";
+           print ' ', join ('', @line), "\n";
+       }
+    } elsif (my ($suffix) = /^\$(.*)$/) {
+       for my $c (split ('', $suffix)) {
+           $line[1]++;
+           $line[4] .= $c;
+           print ' ', join ('', @line), "\n";
+       }
+    } elsif (my ($prefix) = /^\^(.*)$/) {
+       for my $c (split ('', $prefix)) {
+           $line[1]++;
+           $line[4] = "$c$line[4]";
+           print ' ', join ('', @line), "\n";
+       }
+    } else {
+       @line = /^([A-Z]+)(\d+)([^"]+")( *)([^%"]*)(%?")$/;
+       print " $_";
+    }
+}
+]])
+AT_CHECK([$PERL num-out-decmp.pl < expout.cmp > expout.exact])
+AT_CHECK([[inexactify < expout.exact > expout.inexact]])
+AT_DATA([num-out-compare.pl],
+[[#! /usr/bin/perl -w
+
+use strict;
+use warnings 'all';
+use Getopt::Long;
+
+my $exact = 0;
+my $spss = 0;
+my $verbose = 0;
+Getopt::Long::Configure ("bundling");
+GetOptions ("e|exact!" => \$exact,
+           "s|spss!" => \$spss,
+           "v|verbose+" => \$verbose,
+           "h|help" => sub { usage (0) })
+  or usage (1);
+
+sub usage {
+    print "$0: compare expected and actual numeric formatting output\n";
+    print "usage: $0 [OPTION...] EXPECTED ACTUAL\n";
+    print "where EXPECTED is the file containing expected output\n";
+    print "and ACTUAL is the file containing actual output.\n";
+    print "Options:\n";
+    print "  -e, --exact: Require numbers to be exactly equal.\n";
+    print "               (By default, small differences are permitted.)\n";
+    print "  -s, --spss: Ignore most SPSS formatting bugs in EXPECTED.\n";
+    print "              (A few differences are not compensated)\n";
+    print "  -v, --verbose: Use once to summarize errors and differences.\n";
+    print "                 Use twice for details of differences.\n";
+    exit (@_);
+}
+
+open (EXPECTED, '<', $ARGV[0]) or die "$ARGV[0]: open: $!\n";
+open (ACTUAL, '<', $ARGV[1]) or die "$ARGV[1]: open: $!\n";
+my ($expr);
+my ($bad_round) = 0;
+my ($approximate) = 0;
+my ($spss_wtf1) = 0;
+my ($spss_wtf2) = 0;
+my ($lost_sign) = 0;
+my ($errors) = 0;
+while (defined (my $a = <EXPECTED>) && defined (my $b = <ACTUAL>)) {
+    chomp $a;
+    chomp $b;
+    if ($a eq $b) {
+       if ($a !~ /^\s*$/ && $a !~ /:/) {
+           $expr = $a;
+           $expr =~ s/\s*$//;
+           $expr =~ s/^\s*//;
+       }
+    } else {
+       my ($fmt, $a_out) = $a =~ /^ (.*): "(.*)"$/ or die;
+       my ($b_fmt, $b_out) = $b =~ /^ (.*): "(.*)"$/ or die;
+       die if $fmt ne $b_fmt;
+       die if $a_out eq $b_out;
+
+       if (!$exact) {
+           if (increment ($a_out) eq $b_out || increment ($b_out) eq $a_out) {
+               $approximate++;
+               next;
+           }
+       }
+       if ($spss) {
+           if ($a_out =~ /0.*0/ && $a_out !~ /[1-9]/) {
+               $bad_round++;
+               next;
+           } elsif ($a_out =~ /\*/ && $a_out !~ /^\*+$/) {
+               $spss_wtf1++;
+               next;
+           } elsif ($expr =~ /^-/
+                    && $a_out =~ /^\*+$/
+                    && $b_out =~ /-\d(\.\d*#*)?E[-+]\d\d\d/
+                    && $fmt =~ /^E/) {
+               $spss_wtf2++;
+               next;
+           } elsif ($expr =~ /^-/
+                    && (($a_out !~ /-/ && $a_out =~ /[1-9]/ && $b_out =~ /-/)
+                        || ($a_out =~ /^[0-9]+$/ && $b_out =~ /^\*+$/))) {
+               $lost_sign++;
+               next;
+           }
+       }
+       print "$.: $expr in $fmt: expected \"$a_out\", got \"$b_out\"\n"
+         if $verbose > 1;
+       $errors++;
+    }
+}
+while (<EXPECTED>) {
+    print "Extra lines in $ARGV[0]\n";
+    $errors++;
+    last;
+}
+while (<ACTUAL>) {
+    print "Extra lines in $ARGV[1]\n";
+    $errors++;
+    last;
+}
+if ($verbose) {
+    print "$errors errors\n";
+    if (!$exact) {
+       print "$approximate approximate matches\n";
+    }
+    if ($spss) {
+       print "$bad_round bad rounds\n";
+       print "$spss_wtf1 SPSS WTF 1\n";
+       print "$spss_wtf2 SPSS WTF 2\n";
+       print "$lost_sign lost signs\n";
+    }
+}
+exit ($errors > 0);
+
+# Returns the argument value incremented by one unit in its final
+# decimal place.
+sub increment {
+    local ($_) = @_;
+    my ($last_digit, $i);
+    for ($i = 0; $i < length $_; $i++) {
+       my ($c) = substr ($_, $i, 1);
+       last if ($c eq 'E');
+       $last_digit = $i if $c =~ /[0-9]/;
+    }
+    return $_ if !defined $last_digit;
+    for ($i = $last_digit; $i >= 0; $i--) {
+       my ($c) = substr ($_, $i, 1);
+       if ($c eq '9') {
+           substr ($_, $i, 1) = '0';
+       } elsif ($c =~ /[0-8]/) {
+           substr ($_, $i, 1) = chr (ord ($c) + 1);
+           last;
+       }
+    }
+    $_ = "1$_" if $i < 0;
+    return $_;
+}
+]])
+AT_CHECK([$PERL num-out-compare.pl $PSPP_NUM_OUT_COMPARE_FLAGS expout.inexact output.inexact])
+AT_CLEANUP
+
+AT_SETUP([binary and hexadecimal output])
+AT_DATA([binhex-out.sps], [dnl
+SET ERRORS=NONE.
+SET MXWARNS=10000000.
+SET WIB=MSBFIRST.
+DATA LIST NOTABLE/x 1-10.
+BEGIN DATA.
+
+2
+11
+123
+1234
+913
+3.14159
+777
+82
+690
+-2
+-11
+-123
+-1234
+-913
+-3.14159
+-777
+-82
+-690
+-.1
+-.5
+-.9
+9999.1
+9999.5
+9999.9
+10000
+18231237
+-9999.1
+-9999.5
+-9999.9
+-10000
+-8231237
+999.1
+999.5
+999.9
+1000
+8231237
+-999.1
+-999.5
+-999.9
+-1000
+-8231237
+99.1
+99.5
+99.9
+100
+821237
+-99.1
+-99.5
+-99.9
+-100
+-831237
+9.1
+9.5
+9.9
+10
+81237
+-9.1
+-9.5
+-9.9
+-10
+-81237
+1.1
+-1.1
+1.5
+-1.5
+1.9
+-1.9
+END DATA.
+FILE HANDLE output/NAME='binhex.out'/MODE=IMAGE/LRECL=256.
+WRITE OUTFILE=output/
+       x(p1.0) x(p2.0) x(p3.0) x(p4.0)         /* 000
+       x(p2.1) x(p3.1) x(p4.1)                 /* 00a
+       x(p3.2) x(p4.2)                         /* 013
+       x(p4.3)                                 /* 01a
+       x(pk1.0) x(pk2.0) x(pk3.0) x(pk4.0)     /* 01e
+       x(pk2.1) x(pk3.1) x(pk4.1)              /* 028
+       x(pk3.2) x(pk4.2)                       /* 031
+       x(pk4.3)                                /* 038
+       x(ib1.0) x(ib2.0) x(ib3.0) x(ib4.0)     /* 03c
+       x(ib1.1) x(ib2.1) x(ib3.1) x(ib4.1)     /* 046
+       x(ib1.2) x(ib2.2) x(ib3.2) x(ib4.2)     /* 050
+       x(ib1.3) x(ib2.3) x(ib3.3) x(ib4.3)     /* 05a
+       x(ib2.4) x(ib3.4) x(ib4.4)              /* 064
+       x(ib2.5) x(ib3.5) x(ib4.5)              /* 06d
+       x(ib3.6) x(ib4.6)                       /* 076
+       x(ib3.7) x(ib4.7)                       /* 07d
+       x(ib3.8) x(ib4.8)                       /* 084
+       x(ib4.9)                                /* 08b
+       x(ib4.10)                               /* 08f
+       x(pib1.0) x(pib2.0) x(pib3.0) x(pib4.0) /* 093
+       x(pib1.1) x(pib2.1) x(pib3.1) x(pib4.1) /* 09d
+       x(pib1.2) x(pib2.2) x(pib3.2) x(pib4.2) /* 0a7
+       x(pib1.3) x(pib2.3) x(pib3.3) x(pib4.3) /* 0b1
+       x(pib2.4) x(pib3.4) x(pib4.4)           /* 0bb
+       x(pib2.5) x(pib3.5) x(pib4.5)           /* 0c4
+       x(pib3.6) x(pib4.6)                     /* 0cd
+       x(pib3.7) x(pib4.7)                     /* 0d4
+       x(pib3.8) x(pib4.8)                     /* 0db
+       x(pib4.9)                               /* 0e2
+       x(pib4.10)                              /* 0e6
+       x(pibhex2) x(pibhex4)                   /* 0ea
+        x(pibhex6) x(pibhex8).                 /* 0f0
+                                               /* 0fe
+EXECUTE.
+])
+AT_CHECK([pspp -O format=csv binhex-out.sps])
+AT_CHECK([gzip -cd < $top_srcdir/tests/data/binhex-out.expected.gz > expout])
+AT_CHECK([cat binhex.out], [0], [expout])
+AT_CLEANUP
+
+AT_SETUP([output valid dates])
+AT_DATA([date-out.sps], [dnl
+set epoch=1930.
+data list notable /x 1-30 (datetime).
+begin data.
+10-6-1648 0:0:0
+30-6-1680 4:50:38.12301
+24-7-1716 12:31:35.23453
+19-6-1768 12:47:53.34505
+2-8-1819 1:26:0.45615
+27-3-1839 20:58:11.56677
+19-4-1903 7:36:5.18964
+25-8-1929 15:43:49.83132
+29-9-1941 4:25:9.01293
+19-4-1943 6:49:27.52375
+7-10-1943 2:57:52.01565
+17-3-1992 16:45:44.86529
+25-2-1996 21:30:57.82047
+29-9-41 4:25:9.15395
+19-4-43 6:49:27.10533
+7-10-43 2:57:52.48229
+17-3-92 16:45:44.65827
+25-2-96 21:30:57.58219
+10-11-2038 22:30:4.18347
+18-7-2094 1:56:51.59319
+end data.
+print outfile='date-out.out'/x(date9) ' | ' x(date11).
+print outfile='date-out.out'/x(adate8) ' | ' x(adate10).
+print outfile='date-out.out'/x(edate8) ' | ' x(edate10).
+print outfile='date-out.out'/x(jdate5) ' | ' x(jdate7).
+print outfile='date-out.out'/x(sdate8) ' | ' x(sdate10).
+print outfile='date-out.out'/x(qyr6) ' | ' x(qyr8).
+print outfile='date-out.out'/x(moyr6) ' | ' x(moyr8).
+print outfile='date-out.out'/x(wkyr8) ' | ' x(wkyr10).
+print outfile='date-out.out'/x(datetime17).
+print outfile='date-out.out'/x(datetime18).
+print outfile='date-out.out'/x(datetime19).
+print outfile='date-out.out'/x(datetime20).
+print outfile='date-out.out'/x(datetime21).
+print outfile='date-out.out'/x(datetime22).
+print outfile='date-out.out'/x(datetime22.1).
+print outfile='date-out.out'/x(datetime23.2).
+print outfile='date-out.out'/x(datetime24.3).
+print outfile='date-out.out'/x(datetime25.4).
+print outfile='date-out.out'/x(datetime26.5).
+execute.
+])
+AT_CHECK([pspp -O format=csv date-out.sps])
+AT_CHECK([cat date-out.out], [0], [dnl
+ ********* | 10-JUN-1648
+ ******** | 06/10/1648
+ ******** | 10.06.1648
+ ***** | 1648162
+ ******** | 1648/06/10
+ ****** | 2 Q 1648
+ ****** | JUN 1648
+ ******** | 24 WK 1648
+ 10-JUN-1648 00:00
+  10-JUN-1648 00:00
+   10-JUN-1648 00:00
+ 10-JUN-1648 00:00:00
+  10-JUN-1648 00:00:00
+   10-JUN-1648 00:00:00
+ 10-JUN-1648 00:00:00.0
+ 10-JUN-1648 00:00:00.00
+ 10-JUN-1648 00:00:00.000
+ 10-JUN-1648 00:00:00.0000
+ 10-JUN-1648 00:00:00.00000
+ ********* | 30-JUN-1680
+ ******** | 06/30/1680
+ ******** | 30.06.1680
+ ***** | 1680182
+ ******** | 1680/06/30
+ ****** | 2 Q 1680
+ ****** | JUN 1680
+ ******** | 26 WK 1680
+ 30-JUN-1680 04:50
+  30-JUN-1680 04:50
+   30-JUN-1680 04:50
+ 30-JUN-1680 04:50:38
+  30-JUN-1680 04:50:38
+   30-JUN-1680 04:50:38
+ 30-JUN-1680 04:50:38.1
+ 30-JUN-1680 04:50:38.12
+ 30-JUN-1680 04:50:38.123
+ 30-JUN-1680 04:50:38.1230
+ 30-JUN-1680 04:50:38.12301
+ ********* | 24-JUL-1716
+ ******** | 07/24/1716
+ ******** | 24.07.1716
+ ***** | 1716206
+ ******** | 1716/07/24
+ ****** | 3 Q 1716
+ ****** | JUL 1716
+ ******** | 30 WK 1716
+ 24-JUL-1716 12:31
+  24-JUL-1716 12:31
+   24-JUL-1716 12:31
+ 24-JUL-1716 12:31:35
+  24-JUL-1716 12:31:35
+   24-JUL-1716 12:31:35
+ 24-JUL-1716 12:31:35.2
+ 24-JUL-1716 12:31:35.23
+ 24-JUL-1716 12:31:35.235
+ 24-JUL-1716 12:31:35.2345
+ 24-JUL-1716 12:31:35.23453
+ ********* | 19-JUN-1768
+ ******** | 06/19/1768
+ ******** | 19.06.1768
+ ***** | 1768171
+ ******** | 1768/06/19
+ ****** | 2 Q 1768
+ ****** | JUN 1768
+ ******** | 25 WK 1768
+ 19-JUN-1768 12:47
+  19-JUN-1768 12:47
+   19-JUN-1768 12:47
+ 19-JUN-1768 12:47:53
+  19-JUN-1768 12:47:53
+   19-JUN-1768 12:47:53
+ 19-JUN-1768 12:47:53.3
+ 19-JUN-1768 12:47:53.35
+ 19-JUN-1768 12:47:53.345
+ 19-JUN-1768 12:47:53.3450
+ 19-JUN-1768 12:47:53.34505
+ ********* | 02-AUG-1819
+ ******** | 08/02/1819
+ ******** | 02.08.1819
+ ***** | 1819214
+ ******** | 1819/08/02
+ ****** | 3 Q 1819
+ ****** | AUG 1819
+ ******** | 31 WK 1819
+ 02-AUG-1819 01:26
+  02-AUG-1819 01:26
+   02-AUG-1819 01:26
+ 02-AUG-1819 01:26:00
+  02-AUG-1819 01:26:00
+   02-AUG-1819 01:26:00
+ 02-AUG-1819 01:26:00.5
+ 02-AUG-1819 01:26:00.46
+ 02-AUG-1819 01:26:00.456
+ 02-AUG-1819 01:26:00.4562
+ 02-AUG-1819 01:26:00.45615
+ ********* | 27-MAR-1839
+ ******** | 03/27/1839
+ ******** | 27.03.1839
+ ***** | 1839086
+ ******** | 1839/03/27
+ ****** | 1 Q 1839
+ ****** | MAR 1839
+ ******** | 13 WK 1839
+ 27-MAR-1839 20:58
+  27-MAR-1839 20:58
+   27-MAR-1839 20:58
+ 27-MAR-1839 20:58:11
+  27-MAR-1839 20:58:11
+   27-MAR-1839 20:58:11
+ 27-MAR-1839 20:58:11.6
+ 27-MAR-1839 20:58:11.57
+ 27-MAR-1839 20:58:11.567
+ 27-MAR-1839 20:58:11.5668
+ 27-MAR-1839 20:58:11.56677
+ ********* | 19-APR-1903
+ ******** | 04/19/1903
+ ******** | 19.04.1903
+ ***** | 1903109
+ ******** | 1903/04/19
+ ****** | 2 Q 1903
+ ****** | APR 1903
+ ******** | 16 WK 1903
+ 19-APR-1903 07:36
+  19-APR-1903 07:36
+   19-APR-1903 07:36
+ 19-APR-1903 07:36:05
+  19-APR-1903 07:36:05
+   19-APR-1903 07:36:05
+ 19-APR-1903 07:36:05.2
+ 19-APR-1903 07:36:05.19
+ 19-APR-1903 07:36:05.190
+ 19-APR-1903 07:36:05.1896
+ 19-APR-1903 07:36:05.18964
+ ********* | 25-AUG-1929
+ ******** | 08/25/1929
+ ******** | 25.08.1929
+ ***** | 1929237
+ ******** | 1929/08/25
+ ****** | 3 Q 1929
+ ****** | AUG 1929
+ ******** | 34 WK 1929
+ 25-AUG-1929 15:43
+  25-AUG-1929 15:43
+   25-AUG-1929 15:43
+ 25-AUG-1929 15:43:49
+  25-AUG-1929 15:43:49
+   25-AUG-1929 15:43:49
+ 25-AUG-1929 15:43:49.8
+ 25-AUG-1929 15:43:49.83
+ 25-AUG-1929 15:43:49.831
+ 25-AUG-1929 15:43:49.8313
+ 25-AUG-1929 15:43:49.83132
+ 29-SEP-41 | 29-SEP-1941
+ 09/29/41 | 09/29/1941
+ 29.09.41 | 29.09.1941
+ 41272 | 1941272
+ 41/09/29 | 1941/09/29
+ 3 Q 41 | 3 Q 1941
+ SEP 41 | SEP 1941
+ 39 WK 41 | 39 WK 1941
+ 29-SEP-1941 04:25
+  29-SEP-1941 04:25
+   29-SEP-1941 04:25
+ 29-SEP-1941 04:25:09
+  29-SEP-1941 04:25:09
+   29-SEP-1941 04:25:09
+ 29-SEP-1941 04:25:09.0
+ 29-SEP-1941 04:25:09.01
+ 29-SEP-1941 04:25:09.013
+ 29-SEP-1941 04:25:09.0129
+ 29-SEP-1941 04:25:09.01293
+ 19-APR-43 | 19-APR-1943
+ 04/19/43 | 04/19/1943
+ 19.04.43 | 19.04.1943
+ 43109 | 1943109
+ 43/04/19 | 1943/04/19
+ 2 Q 43 | 2 Q 1943
+ APR 43 | APR 1943
+ 16 WK 43 | 16 WK 1943
+ 19-APR-1943 06:49
+  19-APR-1943 06:49
+   19-APR-1943 06:49
+ 19-APR-1943 06:49:27
+  19-APR-1943 06:49:27
+   19-APR-1943 06:49:27
+ 19-APR-1943 06:49:27.5
+ 19-APR-1943 06:49:27.52
+ 19-APR-1943 06:49:27.524
+ 19-APR-1943 06:49:27.5238
+ 19-APR-1943 06:49:27.52375
+ 07-OCT-43 | 07-OCT-1943
+ 10/07/43 | 10/07/1943
+ 07.10.43 | 07.10.1943
+ 43280 | 1943280
+ 43/10/07 | 1943/10/07
+ 4 Q 43 | 4 Q 1943
+ OCT 43 | OCT 1943
+ 40 WK 43 | 40 WK 1943
+ 07-OCT-1943 02:57
+  07-OCT-1943 02:57
+   07-OCT-1943 02:57
+ 07-OCT-1943 02:57:52
+  07-OCT-1943 02:57:52
+   07-OCT-1943 02:57:52
+ 07-OCT-1943 02:57:52.0
+ 07-OCT-1943 02:57:52.02
+ 07-OCT-1943 02:57:52.016
+ 07-OCT-1943 02:57:52.0156
+ 07-OCT-1943 02:57:52.01565
+ 17-MAR-92 | 17-MAR-1992
+ 03/17/92 | 03/17/1992
+ 17.03.92 | 17.03.1992
+ 92077 | 1992077
+ 92/03/17 | 1992/03/17
+ 1 Q 92 | 1 Q 1992
+ MAR 92 | MAR 1992
+ 11 WK 92 | 11 WK 1992
+ 17-MAR-1992 16:45
+  17-MAR-1992 16:45
+   17-MAR-1992 16:45
+ 17-MAR-1992 16:45:44
+  17-MAR-1992 16:45:44
+   17-MAR-1992 16:45:44
+ 17-MAR-1992 16:45:44.9
+ 17-MAR-1992 16:45:44.87
+ 17-MAR-1992 16:45:44.865
+ 17-MAR-1992 16:45:44.8653
+ 17-MAR-1992 16:45:44.86529
+ 25-FEB-96 | 25-FEB-1996
+ 02/25/96 | 02/25/1996
+ 25.02.96 | 25.02.1996
+ 96056 | 1996056
+ 96/02/25 | 1996/02/25
+ 1 Q 96 | 1 Q 1996
+ FEB 96 | FEB 1996
+  8 WK 96 |  8 WK 1996
+ 25-FEB-1996 21:30
+  25-FEB-1996 21:30
+   25-FEB-1996 21:30
+ 25-FEB-1996 21:30:57
+  25-FEB-1996 21:30:57
+   25-FEB-1996 21:30:57
+ 25-FEB-1996 21:30:57.8
+ 25-FEB-1996 21:30:57.82
+ 25-FEB-1996 21:30:57.820
+ 25-FEB-1996 21:30:57.8205
+ 25-FEB-1996 21:30:57.82047
+ 29-SEP-41 | 29-SEP-1941
+ 09/29/41 | 09/29/1941
+ 29.09.41 | 29.09.1941
+ 41272 | 1941272
+ 41/09/29 | 1941/09/29
+ 3 Q 41 | 3 Q 1941
+ SEP 41 | SEP 1941
+ 39 WK 41 | 39 WK 1941
+ 29-SEP-1941 04:25
+  29-SEP-1941 04:25
+   29-SEP-1941 04:25
+ 29-SEP-1941 04:25:09
+  29-SEP-1941 04:25:09
+   29-SEP-1941 04:25:09
+ 29-SEP-1941 04:25:09.2
+ 29-SEP-1941 04:25:09.15
+ 29-SEP-1941 04:25:09.154
+ 29-SEP-1941 04:25:09.1539
+ 29-SEP-1941 04:25:09.15395
+ 19-APR-43 | 19-APR-1943
+ 04/19/43 | 04/19/1943
+ 19.04.43 | 19.04.1943
+ 43109 | 1943109
+ 43/04/19 | 1943/04/19
+ 2 Q 43 | 2 Q 1943
+ APR 43 | APR 1943
+ 16 WK 43 | 16 WK 1943
+ 19-APR-1943 06:49
+  19-APR-1943 06:49
+   19-APR-1943 06:49
+ 19-APR-1943 06:49:27
+  19-APR-1943 06:49:27
+   19-APR-1943 06:49:27
+ 19-APR-1943 06:49:27.1
+ 19-APR-1943 06:49:27.11
+ 19-APR-1943 06:49:27.105
+ 19-APR-1943 06:49:27.1053
+ 19-APR-1943 06:49:27.10533
+ 07-OCT-43 | 07-OCT-1943
+ 10/07/43 | 10/07/1943
+ 07.10.43 | 07.10.1943
+ 43280 | 1943280
+ 43/10/07 | 1943/10/07
+ 4 Q 43 | 4 Q 1943
+ OCT 43 | OCT 1943
+ 40 WK 43 | 40 WK 1943
+ 07-OCT-1943 02:57
+  07-OCT-1943 02:57
+   07-OCT-1943 02:57
+ 07-OCT-1943 02:57:52
+  07-OCT-1943 02:57:52
+   07-OCT-1943 02:57:52
+ 07-OCT-1943 02:57:52.5
+ 07-OCT-1943 02:57:52.48
+ 07-OCT-1943 02:57:52.482
+ 07-OCT-1943 02:57:52.4823
+ 07-OCT-1943 02:57:52.48229
+ 17-MAR-92 | 17-MAR-1992
+ 03/17/92 | 03/17/1992
+ 17.03.92 | 17.03.1992
+ 92077 | 1992077
+ 92/03/17 | 1992/03/17
+ 1 Q 92 | 1 Q 1992
+ MAR 92 | MAR 1992
+ 11 WK 92 | 11 WK 1992
+ 17-MAR-1992 16:45
+  17-MAR-1992 16:45
+   17-MAR-1992 16:45
+ 17-MAR-1992 16:45:44
+  17-MAR-1992 16:45:44
+   17-MAR-1992 16:45:44
+ 17-MAR-1992 16:45:44.7
+ 17-MAR-1992 16:45:44.66
+ 17-MAR-1992 16:45:44.658
+ 17-MAR-1992 16:45:44.6583
+ 17-MAR-1992 16:45:44.65827
+ 25-FEB-96 | 25-FEB-1996
+ 02/25/96 | 02/25/1996
+ 25.02.96 | 25.02.1996
+ 96056 | 1996056
+ 96/02/25 | 1996/02/25
+ 1 Q 96 | 1 Q 1996
+ FEB 96 | FEB 1996
+  8 WK 96 |  8 WK 1996
+ 25-FEB-1996 21:30
+  25-FEB-1996 21:30
+   25-FEB-1996 21:30
+ 25-FEB-1996 21:30:57
+  25-FEB-1996 21:30:57
+   25-FEB-1996 21:30:57
+ 25-FEB-1996 21:30:57.6
+ 25-FEB-1996 21:30:57.58
+ 25-FEB-1996 21:30:57.582
+ 25-FEB-1996 21:30:57.5822
+ 25-FEB-1996 21:30:57.58219
+ ********* | 10-NOV-2038
+ ******** | 11/10/2038
+ ******** | 10.11.2038
+ ***** | 2038314
+ ******** | 2038/11/10
+ ****** | 4 Q 2038
+ ****** | NOV 2038
+ ******** | 45 WK 2038
+ 10-NOV-2038 22:30
+  10-NOV-2038 22:30
+   10-NOV-2038 22:30
+ 10-NOV-2038 22:30:04
+  10-NOV-2038 22:30:04
+   10-NOV-2038 22:30:04
+ 10-NOV-2038 22:30:04.2
+ 10-NOV-2038 22:30:04.18
+ 10-NOV-2038 22:30:04.183
+ 10-NOV-2038 22:30:04.1835
+ 10-NOV-2038 22:30:04.18347
+ ********* | 18-JUL-2094
+ ******** | 07/18/2094
+ ******** | 18.07.2094
+ ***** | 2094199
+ ******** | 2094/07/18
+ ****** | 3 Q 2094
+ ****** | JUL 2094
+ ******** | 29 WK 2094
+ 18-JUL-2094 01:56
+  18-JUL-2094 01:56
+   18-JUL-2094 01:56
+ 18-JUL-2094 01:56:51
+  18-JUL-2094 01:56:51
+   18-JUL-2094 01:56:51
+ 18-JUL-2094 01:56:51.6
+ 18-JUL-2094 01:56:51.59
+ 18-JUL-2094 01:56:51.593
+ 18-JUL-2094 01:56:51.5932
+ 18-JUL-2094 01:56:51.59319
+])
+AT_CLEANUP
+
+AT_SETUP([output invalid dates])
+AT_DATA([bad-date.sps], [dnl
+set epoch=1930.
+set errors=none.
+data list list notable/x.
+begin data.
+0
+-1
+3e11
+end data.
+print outfile='bad-date.out'/x(date9) ' | ' x(date11).
+print outfile='bad-date.out'/x(adate8) ' | ' x(adate10).
+print outfile='bad-date.out'/x(edate8) ' | ' x(edate10).
+print outfile='bad-date.out'/x(jdate5) ' | ' x(jdate7).
+print outfile='bad-date.out'/x(sdate8) ' | ' x(sdate10).
+print outfile='bad-date.out'/x(qyr6) ' | ' x(qyr8).
+print outfile='bad-date.out'/x(moyr6) ' | ' x(moyr8).
+print outfile='bad-date.out'/x(wkyr8) ' | ' x(wkyr10).
+print outfile='bad-date.out'/x(datetime17).
+print outfile='bad-date.out'/x(datetime18).
+print outfile='bad-date.out'/x(datetime19).
+print outfile='bad-date.out'/x(datetime20).
+print outfile='bad-date.out'/x(datetime21).
+print outfile='bad-date.out'/x(datetime22).
+print outfile='bad-date.out'/x(datetime22.1).
+print outfile='bad-date.out'/x(datetime23.2).
+print outfile='bad-date.out'/x(datetime24.3).
+print outfile='bad-date.out'/x(datetime25.4).
+print outfile='bad-date.out'/x(datetime26.5).
+execute.
+])
+AT_CHECK([pspp -O format=csv bad-date.sps])
+AT_CHECK([cat bad-date.out], [0], [dnl
+         . |           .
+        . |          .
+        . |          .
+     . |       .
+        . |          .
+      . |        .
+      . |        .
+        . |          .
+                 .
+                  .
+                   .
+                    .
+                     .
+                      .
+                     . @&t@
+                     .  @&t@
+                     .   @&t@
+                     .    @&t@
+                     .     @&t@
+         . |           .
+        . |          .
+        . |          .
+     . |       .
+        . |          .
+      . |        .
+      . |        .
+        . |          .
+                 .
+                  .
+                   .
+                    .
+                     .
+                      .
+                     . @&t@
+                     .  @&t@
+                     .   @&t@
+                     .    @&t@
+                     .     @&t@
+ ********* | ***********
+ ******** | **********
+ ******** | **********
+ ***** | *******
+ ******** | **********
+ ****** | ********
+ ****** | ********
+ ******** | **********
+ 28-MAY-**** 05:20
+  28-MAY-**** 05:20
+   28-MAY-**** 05:20
+ 28-MAY-**** 05:20:00
+  28-MAY-**** 05:20:00
+   28-MAY-**** 05:20:00
+ 28-MAY-**** 05:20:00.0
+ 28-MAY-**** 05:20:00.00
+ 28-MAY-**** 05:20:00.000
+ 28-MAY-**** 05:20:00.0000
+ 28-MAY-**** 05:20:00.00000
+])
+AT_CLEANUP
+
+AT_SETUP([time output])
+AT_DATA([time-out.sps], [dnl
+set epoch=1930.
+data list notable /x 1-30 (dtime).
+begin data.
+0 0:0:0
+0 4:50:38.12301
+0 12:31:35.23453
+0 12:47:53.34505
+0 1:26:0.45615
+0 20:58:11.56677
+0 7:36:5.18964
+0 15:43:49.83132
+0 4:25:9.01293
+0 6:49:27.52375
+0 2:57:52.01565
+0 16:45:44.86529
+0 21:30:57.82047
+0 4:25:9.15395
+0 6:49:27.10533
+0 2:57:52.48229
+0 16:45:44.65827
+0 21:30:57.58219
+0 22:30:4.18347
+0 1:56:51.59319
+1 0:0:0
+1 4:50:38.12301
+1 12:31:35.23453
+1 12:47:53.34505
+1 1:26:0.45615
+1 20:58:11.56677
+1 7:36:5.18964
+1 15:43:49.83132
+1 4:25:9.01293
+1 6:49:27.52375
+1 2:57:52.01565
+1 16:45:44.86529
+1 21:30:57.82047
+1 4:25:9.15395
+1 6:49:27.10533
+1 2:57:52.48229
+1 16:45:44.65827
+1 21:30:57.58219
+1 22:30:4.18347
+1 1:56:51.59319
+2 0:0:0
+2 4:50:38.12301
+2 12:31:35.23453
+2 12:47:53.34505
+2 1:26:0.45615
+2 20:58:11.56677
+2 7:36:5.18964
+2 15:43:49.83132
+2 4:25:9.01293
+2 6:49:27.52375
+2 2:57:52.01565
+2 16:45:44.86529
+2 21:30:57.82047
+2 4:25:9.15395
+2 6:49:27.10533
+2 2:57:52.48229
+2 16:45:44.65827
+2 21:30:57.58219
+2 22:30:4.18347
+2 1:56:51.59319
+54 0:0:0
+54 4:50:38.12301
+54 12:31:35.23453
+54 12:47:53.34505
+54 1:26:0.45615
+54 20:58:11.56677
+54 7:36:5.18964
+54 15:43:49.83132
+54 4:25:9.01293
+54 6:49:27.52375
+54 2:57:52.01565
+54 16:45:44.86529
+54 21:30:57.82047
+54 4:25:9.15395
+54 6:49:27.10533
+54 2:57:52.48229
+54 16:45:44.65827
+54 21:30:57.58219
+54 22:30:4.18347
+54 1:56:51.59319
+681 0:0:0
+681 4:50:38.12301
+681 12:31:35.23453
+681 12:47:53.34505
+681 1:26:0.45615
+681 20:58:11.56677
+681 7:36:5.18964
+681 15:43:49.83132
+681 4:25:9.01293
+681 6:49:27.52375
+681 2:57:52.01565
+681 16:45:44.86529
+681 21:30:57.82047
+681 4:25:9.15395
+681 6:49:27.10533
+681 2:57:52.48229
+681 16:45:44.65827
+681 21:30:57.58219
+681 22:30:4.18347
+681 1:56:51.59319
+-0 0:0:0
+-0 4:50:38.12301
+-0 12:31:35.23453
+-0 12:47:53.34505
+-0 1:26:0.45615
+-0 20:58:11.56677
+-0 7:36:5.18964
+-0 15:43:49.83132
+-0 4:25:9.01293
+-0 6:49:27.52375
+-0 2:57:52.01565
+-0 16:45:44.86529
+-0 21:30:57.82047
+-0 4:25:9.15395
+-0 6:49:27.10533
+-0 2:57:52.48229
+-0 16:45:44.65827
+-0 21:30:57.58219
+-0 22:30:4.18347
+-0 1:56:51.59319
+-1 0:0:0
+-1 4:50:38.12301
+-1 12:31:35.23453
+-1 12:47:53.34505
+-1 1:26:0.45615
+-1 20:58:11.56677
+-1 7:36:5.18964
+-1 15:43:49.83132
+-1 4:25:9.01293
+-1 6:49:27.52375
+-1 2:57:52.01565
+-1 16:45:44.86529
+-1 21:30:57.82047
+-1 4:25:9.15395
+-1 6:49:27.10533
+-1 2:57:52.48229
+-1 16:45:44.65827
+-1 21:30:57.58219
+-1 22:30:4.18347
+-1 1:56:51.59319
+-2 0:0:0
+-2 4:50:38.12301
+-2 12:31:35.23453
+-2 12:47:53.34505
+-2 1:26:0.45615
+-2 20:58:11.56677
+-2 7:36:5.18964
+-2 15:43:49.83132
+-2 4:25:9.01293
+-2 6:49:27.52375
+-2 2:57:52.01565
+-2 16:45:44.86529
+-2 21:30:57.82047
+-2 4:25:9.15395
+-2 6:49:27.10533
+-2 2:57:52.48229
+-2 16:45:44.65827
+-2 21:30:57.58219
+-2 22:30:4.18347
+-2 1:56:51.59319
+-54 0:0:0
+-54 4:50:38.12301
+-54 12:31:35.23453
+-54 12:47:53.34505
+-54 1:26:0.45615
+-54 20:58:11.56677
+-54 7:36:5.18964
+-54 15:43:49.83132
+-54 4:25:9.01293
+-54 6:49:27.52375
+-54 2:57:52.01565
+-54 16:45:44.86529
+-54 21:30:57.82047
+-54 4:25:9.15395
+-54 6:49:27.10533
+-54 2:57:52.48229
+-54 16:45:44.65827
+-54 21:30:57.58219
+-54 22:30:4.18347
+-54 1:56:51.59319
+-681 0:0:0
+-681 4:50:38.12301
+-681 12:31:35.23453
+-681 12:47:53.34505
+-681 1:26:0.45615
+-681 20:58:11.56677
+-681 7:36:5.18964
+-681 15:43:49.83132
+-681 4:25:9.01293
+-681 6:49:27.52375
+-681 2:57:52.01565
+-681 16:45:44.86529
+-681 21:30:57.82047
+-681 4:25:9.15395
+-681 6:49:27.10533
+-681 2:57:52.48229
+-681 16:45:44.65827
+-681 21:30:57.58219
+-681 22:30:4.18347
+-681 1:56:51.59319
+end data.
+print outfile='time-out.out'/x(time5).
+print outfile='time-out.out'/x(time6).
+print outfile='time-out.out'/x(time7).
+print outfile='time-out.out'/x(time8).
+print outfile='time-out.out'/x(time9).
+print outfile='time-out.out'/x(time10).
+print outfile='time-out.out'/x(time10.1).
+print outfile='time-out.out'/x(time11).
+print outfile='time-out.out'/x(time11.1).
+print outfile='time-out.out'/x(time11.2).
+print outfile='time-out.out'/x(time12).
+print outfile='time-out.out'/x(time12.1).
+print outfile='time-out.out'/x(time12.2).
+print outfile='time-out.out'/x(time12.3).
+print outfile='time-out.out'/x(time13).
+print outfile='time-out.out'/x(time13.1).
+print outfile='time-out.out'/x(time13.2).
+print outfile='time-out.out'/x(time13.3).
+print outfile='time-out.out'/x(time13.4).
+print outfile='time-out.out'/x(time14).
+print outfile='time-out.out'/x(time14.1).
+print outfile='time-out.out'/x(time14.2).
+print outfile='time-out.out'/x(time14.3).
+print outfile='time-out.out'/x(time14.4).
+print outfile='time-out.out'/x(time14.5).
+print outfile='time-out.out'/x(time15).
+print outfile='time-out.out'/x(time15.1).
+print outfile='time-out.out'/x(time15.2).
+print outfile='time-out.out'/x(time15.3).
+print outfile='time-out.out'/x(time15.4).
+print outfile='time-out.out'/x(time15.5).
+print outfile='time-out.out'/x(time15.6).
+print outfile='time-out.out'/x(dtime8).
+print outfile='time-out.out'/x(dtime9).
+print outfile='time-out.out'/x(dtime10).
+print outfile='time-out.out'/x(dtime11).
+print outfile='time-out.out'/x(dtime12).
+print outfile='time-out.out'/x(dtime13).
+print outfile='time-out.out'/x(dtime13.1).
+print outfile='time-out.out'/x(dtime14).
+print outfile='time-out.out'/x(dtime14.1).
+print outfile='time-out.out'/x(dtime14.2).
+print outfile='time-out.out'/x(dtime15).
+print outfile='time-out.out'/x(dtime15.1).
+print outfile='time-out.out'/x(dtime15.2).
+print outfile='time-out.out'/x(dtime15.3).
+print outfile='time-out.out'/x(dtime16).
+print outfile='time-out.out'/x(dtime16.1).
+print outfile='time-out.out'/x(dtime16.2).
+print outfile='time-out.out'/x(dtime16.3).
+print outfile='time-out.out'/x(dtime16.4).
+print outfile='time-out.out'/x(dtime17).
+print outfile='time-out.out'/x(dtime17.1).
+print outfile='time-out.out'/x(dtime17.2).
+print outfile='time-out.out'/x(dtime17.3).
+print outfile='time-out.out'/x(dtime17.4).
+print outfile='time-out.out'/x(dtime17.5).
+print outfile='time-out.out'/x(dtime18).
+print outfile='time-out.out'/x(dtime18.1).
+print outfile='time-out.out'/x(dtime18.2).
+print outfile='time-out.out'/x(dtime18.3).
+print outfile='time-out.out'/x(dtime18.4).
+print outfile='time-out.out'/x(dtime18.5).
+print outfile='time-out.out'/x(dtime18.6).
+execute.
+])
+AT_CHECK([pspp -O format=csv time-out.sps])
+AT_CHECK([cat time-out.out], [0], [dnl
+  0:00
+   0:00
+ 0:00:00
+  0:00:00
+   0:00:00
+    0:00:00
+  0:00:00.0
+     0:00:00
+   0:00:00.0
+  0:00:00.00
+      0:00:00
+    0:00:00.0
+   0:00:00.00
+  0:00:00.000
+       0:00:00
+     0:00:00.0
+    0:00:00.00
+   0:00:00.000
+  0:00:00.0000
+        0:00:00
+      0:00:00.0
+     0:00:00.00
+    0:00:00.000
+   0:00:00.0000
+  0:00:00.00000
+         0:00:00
+       0:00:00.0
+      0:00:00.00
+     0:00:00.000
+    0:00:00.0000
+   0:00:00.00000
+  0:00:00.000000
+  0 00:00
+   0 00:00
+ 0 00:00:00
+  0 00:00:00
+   0 00:00:00
+    0 00:00:00
+  0 00:00:00.0
+     0 00:00:00
+   0 00:00:00.0
+  0 00:00:00.00
+      0 00:00:00
+    0 00:00:00.0
+   0 00:00:00.00
+  0 00:00:00.000
+       0 00:00:00
+     0 00:00:00.0
+    0 00:00:00.00
+   0 00:00:00.000
+  0 00:00:00.0000
+        0 00:00:00
+      0 00:00:00.0
+     0 00:00:00.00
+    0 00:00:00.000
+   0 00:00:00.0000
+  0 00:00:00.00000
+         0 00:00:00
+       0 00:00:00.0
+      0 00:00:00.00
+     0 00:00:00.000
+    0 00:00:00.0000
+   0 00:00:00.00000
+  0 00:00:00.000000
+  4:50
+   4:50
+ 4:50:38
+  4:50:38
+   4:50:38
+    4:50:38
+  4:50:38.1
+     4:50:38
+   4:50:38.1
+  4:50:38.12
+      4:50:38
+    4:50:38.1
+   4:50:38.12
+  4:50:38.123
+       4:50:38
+     4:50:38.1
+    4:50:38.12
+   4:50:38.123
+  4:50:38.1230
+        4:50:38
+      4:50:38.1
+     4:50:38.12
+    4:50:38.123
+   4:50:38.1230
+  4:50:38.12301
+         4:50:38
+       4:50:38.1
+      4:50:38.12
+     4:50:38.123
+    4:50:38.1230
+   4:50:38.12301
+  4:50:38.123010
+  0 04:50
+   0 04:50
+ 0 04:50:38
+  0 04:50:38
+   0 04:50:38
+    0 04:50:38
+  0 04:50:38.1
+     0 04:50:38
+   0 04:50:38.1
+  0 04:50:38.12
+      0 04:50:38
+    0 04:50:38.1
+   0 04:50:38.12
+  0 04:50:38.123
+       0 04:50:38
+     0 04:50:38.1
+    0 04:50:38.12
+   0 04:50:38.123
+  0 04:50:38.1230
+        0 04:50:38
+      0 04:50:38.1
+     0 04:50:38.12
+    0 04:50:38.123
+   0 04:50:38.1230
+  0 04:50:38.12301
+         0 04:50:38
+       0 04:50:38.1
+      0 04:50:38.12
+     0 04:50:38.123
+    0 04:50:38.1230
+   0 04:50:38.12301
+  0 04:50:38.123010
+ 12:31
+  12:31
+   12:31
+ 12:31:35
+  12:31:35
+   12:31:35
+ 12:31:35.2
+    12:31:35
+  12:31:35.2
+ 12:31:35.23
+     12:31:35
+   12:31:35.2
+  12:31:35.23
+ 12:31:35.235
+      12:31:35
+    12:31:35.2
+   12:31:35.23
+  12:31:35.235
+ 12:31:35.2345
+       12:31:35
+     12:31:35.2
+    12:31:35.23
+   12:31:35.235
+  12:31:35.2345
+ 12:31:35.23453
+        12:31:35
+      12:31:35.2
+     12:31:35.23
+    12:31:35.235
+   12:31:35.2345
+  12:31:35.23453
+ 12:31:35.234530
+  0 12:31
+   0 12:31
+ 0 12:31:35
+  0 12:31:35
+   0 12:31:35
+    0 12:31:35
+  0 12:31:35.2
+     0 12:31:35
+   0 12:31:35.2
+  0 12:31:35.23
+      0 12:31:35
+    0 12:31:35.2
+   0 12:31:35.23
+  0 12:31:35.235
+       0 12:31:35
+     0 12:31:35.2
+    0 12:31:35.23
+   0 12:31:35.235
+  0 12:31:35.2345
+        0 12:31:35
+      0 12:31:35.2
+     0 12:31:35.23
+    0 12:31:35.235
+   0 12:31:35.2345
+  0 12:31:35.23453
+         0 12:31:35
+       0 12:31:35.2
+      0 12:31:35.23
+     0 12:31:35.235
+    0 12:31:35.2345
+   0 12:31:35.23453
+  0 12:31:35.234530
+ 12:47
+  12:47
+   12:47
+ 12:47:53
+  12:47:53
+   12:47:53
+ 12:47:53.3
+    12:47:53
+  12:47:53.3
+ 12:47:53.35
+     12:47:53
+   12:47:53.3
+  12:47:53.35
+ 12:47:53.345
+      12:47:53
+    12:47:53.3
+   12:47:53.35
+  12:47:53.345
+ 12:47:53.3451
+       12:47:53
+     12:47:53.3
+    12:47:53.35
+   12:47:53.345
+  12:47:53.3451
+ 12:47:53.34505
+        12:47:53
+      12:47:53.3
+     12:47:53.35
+    12:47:53.345
+   12:47:53.3451
+  12:47:53.34505
+ 12:47:53.345050
+  0 12:47
+   0 12:47
+ 0 12:47:53
+  0 12:47:53
+   0 12:47:53
+    0 12:47:53
+  0 12:47:53.3
+     0 12:47:53
+   0 12:47:53.3
+  0 12:47:53.35
+      0 12:47:53
+    0 12:47:53.3
+   0 12:47:53.35
+  0 12:47:53.345
+       0 12:47:53
+     0 12:47:53.3
+    0 12:47:53.35
+   0 12:47:53.345
+  0 12:47:53.3451
+        0 12:47:53
+      0 12:47:53.3
+     0 12:47:53.35
+    0 12:47:53.345
+   0 12:47:53.3451
+  0 12:47:53.34505
+         0 12:47:53
+       0 12:47:53.3
+      0 12:47:53.35
+     0 12:47:53.345
+    0 12:47:53.3451
+   0 12:47:53.34505
+  0 12:47:53.345050
+  1:26
+   1:26
+ 1:26:00
+  1:26:00
+   1:26:00
+    1:26:00
+  1:26:00.5
+     1:26:00
+   1:26:00.5
+  1:26:00.46
+      1:26:00
+    1:26:00.5
+   1:26:00.46
+  1:26:00.456
+       1:26:00
+     1:26:00.5
+    1:26:00.46
+   1:26:00.456
+  1:26:00.4561
+        1:26:00
+      1:26:00.5
+     1:26:00.46
+    1:26:00.456
+   1:26:00.4561
+  1:26:00.45615
+         1:26:00
+       1:26:00.5
+      1:26:00.46
+     1:26:00.456
+    1:26:00.4561
+   1:26:00.45615
+  1:26:00.456150
+  0 01:26
+   0 01:26
+ 0 01:26:00
+  0 01:26:00
+   0 01:26:00
+    0 01:26:00
+  0 01:26:00.5
+     0 01:26:00
+   0 01:26:00.5
+  0 01:26:00.46
+      0 01:26:00
+    0 01:26:00.5
+   0 01:26:00.46
+  0 01:26:00.456
+       0 01:26:00
+     0 01:26:00.5
+    0 01:26:00.46
+   0 01:26:00.456
+  0 01:26:00.4561
+        0 01:26:00
+      0 01:26:00.5
+     0 01:26:00.46
+    0 01:26:00.456
+   0 01:26:00.4561
+  0 01:26:00.45615
+         0 01:26:00
+       0 01:26:00.5
+      0 01:26:00.46
+     0 01:26:00.456
+    0 01:26:00.4561
+   0 01:26:00.45615
+  0 01:26:00.456150
+ 20:58
+  20:58
+   20:58
+ 20:58:11
+  20:58:11
+   20:58:11
+ 20:58:11.6
+    20:58:11
+  20:58:11.6
+ 20:58:11.57
+     20:58:11
+   20:58:11.6
+  20:58:11.57
+ 20:58:11.567
+      20:58:11
+    20:58:11.6
+   20:58:11.57
+  20:58:11.567
+ 20:58:11.5668
+       20:58:11
+     20:58:11.6
+    20:58:11.57
+   20:58:11.567
+  20:58:11.5668
+ 20:58:11.56677
+        20:58:11
+      20:58:11.6
+     20:58:11.57
+    20:58:11.567
+   20:58:11.5668
+  20:58:11.56677
+ 20:58:11.566770
+  0 20:58
+   0 20:58
+ 0 20:58:11
+  0 20:58:11
+   0 20:58:11
+    0 20:58:11
+  0 20:58:11.6
+     0 20:58:11
+   0 20:58:11.6
+  0 20:58:11.57
+      0 20:58:11
+    0 20:58:11.6
+   0 20:58:11.57
+  0 20:58:11.567
+       0 20:58:11
+     0 20:58:11.6
+    0 20:58:11.57
+   0 20:58:11.567
+  0 20:58:11.5668
+        0 20:58:11
+      0 20:58:11.6
+     0 20:58:11.57
+    0 20:58:11.567
+   0 20:58:11.5668
+  0 20:58:11.56677
+         0 20:58:11
+       0 20:58:11.6
+      0 20:58:11.57
+     0 20:58:11.567
+    0 20:58:11.5668
+   0 20:58:11.56677
+  0 20:58:11.566770
+  7:36
+   7:36
+ 7:36:05
+  7:36:05
+   7:36:05
+    7:36:05
+  7:36:05.2
+     7:36:05
+   7:36:05.2
+  7:36:05.19
+      7:36:05
+    7:36:05.2
+   7:36:05.19
+  7:36:05.190
+       7:36:05
+     7:36:05.2
+    7:36:05.19
+   7:36:05.190
+  7:36:05.1896
+        7:36:05
+      7:36:05.2
+     7:36:05.19
+    7:36:05.190
+   7:36:05.1896
+  7:36:05.18964
+         7:36:05
+       7:36:05.2
+      7:36:05.19
+     7:36:05.190
+    7:36:05.1896
+   7:36:05.18964
+  7:36:05.189640
+  0 07:36
+   0 07:36
+ 0 07:36:05
+  0 07:36:05
+   0 07:36:05
+    0 07:36:05
+  0 07:36:05.2
+     0 07:36:05
+   0 07:36:05.2
+  0 07:36:05.19
+      0 07:36:05
+    0 07:36:05.2
+   0 07:36:05.19
+  0 07:36:05.190
+       0 07:36:05
+     0 07:36:05.2
+    0 07:36:05.19
+   0 07:36:05.190
+  0 07:36:05.1896
+        0 07:36:05
+      0 07:36:05.2
+     0 07:36:05.19
+    0 07:36:05.190
+   0 07:36:05.1896
+  0 07:36:05.18964
+         0 07:36:05
+       0 07:36:05.2
+      0 07:36:05.19
+     0 07:36:05.190
+    0 07:36:05.1896
+   0 07:36:05.18964
+  0 07:36:05.189640
+ 15:43
+  15:43
+   15:43
+ 15:43:49
+  15:43:49
+   15:43:49
+ 15:43:49.8
+    15:43:49
+  15:43:49.8
+ 15:43:49.83
+     15:43:49
+   15:43:49.8
+  15:43:49.83
+ 15:43:49.831
+      15:43:49
+    15:43:49.8
+   15:43:49.83
+  15:43:49.831
+ 15:43:49.8313
+       15:43:49
+     15:43:49.8
+    15:43:49.83
+   15:43:49.831
+  15:43:49.8313
+ 15:43:49.83132
+        15:43:49
+      15:43:49.8
+     15:43:49.83
+    15:43:49.831
+   15:43:49.8313
+  15:43:49.83132
+ 15:43:49.831320
+  0 15:43
+   0 15:43
+ 0 15:43:49
+  0 15:43:49
+   0 15:43:49
+    0 15:43:49
+  0 15:43:49.8
+     0 15:43:49
+   0 15:43:49.8
+  0 15:43:49.83
+      0 15:43:49
+    0 15:43:49.8
+   0 15:43:49.83
+  0 15:43:49.831
+       0 15:43:49
+     0 15:43:49.8
+    0 15:43:49.83
+   0 15:43:49.831
+  0 15:43:49.8313
+        0 15:43:49
+      0 15:43:49.8
+     0 15:43:49.83
+    0 15:43:49.831
+   0 15:43:49.8313
+  0 15:43:49.83132
+         0 15:43:49
+       0 15:43:49.8
+      0 15:43:49.83
+     0 15:43:49.831
+    0 15:43:49.8313
+   0 15:43:49.83132
+  0 15:43:49.831320
+  4:25
+   4:25
+ 4:25:09
+  4:25:09
+   4:25:09
+    4:25:09
+  4:25:09.0
+     4:25:09
+   4:25:09.0
+  4:25:09.01
+      4:25:09
+    4:25:09.0
+   4:25:09.01
+  4:25:09.013
+       4:25:09
+     4:25:09.0
+    4:25:09.01
+   4:25:09.013
+  4:25:09.0129
+        4:25:09
+      4:25:09.0
+     4:25:09.01
+    4:25:09.013
+   4:25:09.0129
+  4:25:09.01293
+         4:25:09
+       4:25:09.0
+      4:25:09.01
+     4:25:09.013
+    4:25:09.0129
+   4:25:09.01293
+  4:25:09.012930
+  0 04:25
+   0 04:25
+ 0 04:25:09
+  0 04:25:09
+   0 04:25:09
+    0 04:25:09
+  0 04:25:09.0
+     0 04:25:09
+   0 04:25:09.0
+  0 04:25:09.01
+      0 04:25:09
+    0 04:25:09.0
+   0 04:25:09.01
+  0 04:25:09.013
+       0 04:25:09
+     0 04:25:09.0
+    0 04:25:09.01
+   0 04:25:09.013
+  0 04:25:09.0129
+        0 04:25:09
+      0 04:25:09.0
+     0 04:25:09.01
+    0 04:25:09.013
+   0 04:25:09.0129
+  0 04:25:09.01293
+         0 04:25:09
+       0 04:25:09.0
+      0 04:25:09.01
+     0 04:25:09.013
+    0 04:25:09.0129
+   0 04:25:09.01293
+  0 04:25:09.012930
+  6:49
+   6:49
+ 6:49:27
+  6:49:27
+   6:49:27
+    6:49:27
+  6:49:27.5
+     6:49:27
+   6:49:27.5
+  6:49:27.52
+      6:49:27
+    6:49:27.5
+   6:49:27.52
+  6:49:27.524
+       6:49:27
+     6:49:27.5
+    6:49:27.52
+   6:49:27.524
+  6:49:27.5238
+        6:49:27
+      6:49:27.5
+     6:49:27.52
+    6:49:27.524
+   6:49:27.5238
+  6:49:27.52375
+         6:49:27
+       6:49:27.5
+      6:49:27.52
+     6:49:27.524
+    6:49:27.5238
+   6:49:27.52375
+  6:49:27.523750
+  0 06:49
+   0 06:49
+ 0 06:49:27
+  0 06:49:27
+   0 06:49:27
+    0 06:49:27
+  0 06:49:27.5
+     0 06:49:27
+   0 06:49:27.5
+  0 06:49:27.52
+      0 06:49:27
+    0 06:49:27.5
+   0 06:49:27.52
+  0 06:49:27.524
+       0 06:49:27
+     0 06:49:27.5
+    0 06:49:27.52
+   0 06:49:27.524
+  0 06:49:27.5238
+        0 06:49:27
+      0 06:49:27.5
+     0 06:49:27.52
+    0 06:49:27.524
+   0 06:49:27.5238
+  0 06:49:27.52375
+         0 06:49:27
+       0 06:49:27.5
+      0 06:49:27.52
+     0 06:49:27.524
+    0 06:49:27.5238
+   0 06:49:27.52375
+  0 06:49:27.523750
+  2:57
+   2:57
+ 2:57:52
+  2:57:52
+   2:57:52
+    2:57:52
+  2:57:52.0
+     2:57:52
+   2:57:52.0
+  2:57:52.02
+      2:57:52
+    2:57:52.0
+   2:57:52.02
+  2:57:52.016
+       2:57:52
+     2:57:52.0
+    2:57:52.02
+   2:57:52.016
+  2:57:52.0156
+        2:57:52
+      2:57:52.0
+     2:57:52.02
+    2:57:52.016
+   2:57:52.0156
+  2:57:52.01565
+         2:57:52
+       2:57:52.0
+      2:57:52.02
+     2:57:52.016
+    2:57:52.0156
+   2:57:52.01565
+  2:57:52.015650
+  0 02:57
+   0 02:57
+ 0 02:57:52
+  0 02:57:52
+   0 02:57:52
+    0 02:57:52
+  0 02:57:52.0
+     0 02:57:52
+   0 02:57:52.0
+  0 02:57:52.02
+      0 02:57:52
+    0 02:57:52.0
+   0 02:57:52.02
+  0 02:57:52.016
+       0 02:57:52
+     0 02:57:52.0
+    0 02:57:52.02
+   0 02:57:52.016
+  0 02:57:52.0156
+        0 02:57:52
+      0 02:57:52.0
+     0 02:57:52.02
+    0 02:57:52.016
+   0 02:57:52.0156
+  0 02:57:52.01565
+         0 02:57:52
+       0 02:57:52.0
+      0 02:57:52.02
+     0 02:57:52.016
+    0 02:57:52.0156
+   0 02:57:52.01565
+  0 02:57:52.015650
+ 16:45
+  16:45
+   16:45
+ 16:45:44
+  16:45:44
+   16:45:44
+ 16:45:44.9
+    16:45:44
+  16:45:44.9
+ 16:45:44.87
+     16:45:44
+   16:45:44.9
+  16:45:44.87
+ 16:45:44.865
+      16:45:44
+    16:45:44.9
+   16:45:44.87
+  16:45:44.865
+ 16:45:44.8653
+       16:45:44
+     16:45:44.9
+    16:45:44.87
+   16:45:44.865
+  16:45:44.8653
+ 16:45:44.86529
+        16:45:44
+      16:45:44.9
+     16:45:44.87
+    16:45:44.865
+   16:45:44.8653
+  16:45:44.86529
+ 16:45:44.865290
+  0 16:45
+   0 16:45
+ 0 16:45:44
+  0 16:45:44
+   0 16:45:44
+    0 16:45:44
+  0 16:45:44.9
+     0 16:45:44
+   0 16:45:44.9
+  0 16:45:44.87
+      0 16:45:44
+    0 16:45:44.9
+   0 16:45:44.87
+  0 16:45:44.865
+       0 16:45:44
+     0 16:45:44.9
+    0 16:45:44.87
+   0 16:45:44.865
+  0 16:45:44.8653
+        0 16:45:44
+      0 16:45:44.9
+     0 16:45:44.87
+    0 16:45:44.865
+   0 16:45:44.8653
+  0 16:45:44.86529
+         0 16:45:44
+       0 16:45:44.9
+      0 16:45:44.87
+     0 16:45:44.865
+    0 16:45:44.8653
+   0 16:45:44.86529
+  0 16:45:44.865290
+ 21:30
+  21:30
+   21:30
+ 21:30:57
+  21:30:57
+   21:30:57
+ 21:30:57.8
+    21:30:57
+  21:30:57.8
+ 21:30:57.82
+     21:30:57
+   21:30:57.8
+  21:30:57.82
+ 21:30:57.820
+      21:30:57
+    21:30:57.8
+   21:30:57.82
+  21:30:57.820
+ 21:30:57.8205
+       21:30:57
+     21:30:57.8
+    21:30:57.82
+   21:30:57.820
+  21:30:57.8205
+ 21:30:57.82047
+        21:30:57
+      21:30:57.8
+     21:30:57.82
+    21:30:57.820
+   21:30:57.8205
+  21:30:57.82047
+ 21:30:57.820470
+  0 21:30
+   0 21:30
+ 0 21:30:57
+  0 21:30:57
+   0 21:30:57
+    0 21:30:57
+  0 21:30:57.8
+     0 21:30:57
+   0 21:30:57.8
+  0 21:30:57.82
+      0 21:30:57
+    0 21:30:57.8
+   0 21:30:57.82
+  0 21:30:57.820
+       0 21:30:57
+     0 21:30:57.8
+    0 21:30:57.82
+   0 21:30:57.820
+  0 21:30:57.8205
+        0 21:30:57
+      0 21:30:57.8
+     0 21:30:57.82
+    0 21:30:57.820
+   0 21:30:57.8205
+  0 21:30:57.82047
+         0 21:30:57
+       0 21:30:57.8
+      0 21:30:57.82
+     0 21:30:57.820
+    0 21:30:57.8205
+   0 21:30:57.82047
+  0 21:30:57.820470
+  4:25
+   4:25
+ 4:25:09
+  4:25:09
+   4:25:09
+    4:25:09
+  4:25:09.2
+     4:25:09
+   4:25:09.2
+  4:25:09.15
+      4:25:09
+    4:25:09.2
+   4:25:09.15
+  4:25:09.154
+       4:25:09
+     4:25:09.2
+    4:25:09.15
+   4:25:09.154
+  4:25:09.1539
+        4:25:09
+      4:25:09.2
+     4:25:09.15
+    4:25:09.154
+   4:25:09.1539
+  4:25:09.15395
+         4:25:09
+       4:25:09.2
+      4:25:09.15
+     4:25:09.154
+    4:25:09.1539
+   4:25:09.15395
+  4:25:09.153950
+  0 04:25
+   0 04:25
+ 0 04:25:09
+  0 04:25:09
+   0 04:25:09
+    0 04:25:09
+  0 04:25:09.2
+     0 04:25:09
+   0 04:25:09.2
+  0 04:25:09.15
+      0 04:25:09
+    0 04:25:09.2
+   0 04:25:09.15
+  0 04:25:09.154
+       0 04:25:09
+     0 04:25:09.2
+    0 04:25:09.15
+   0 04:25:09.154
+  0 04:25:09.1539
+        0 04:25:09
+      0 04:25:09.2
+     0 04:25:09.15
+    0 04:25:09.154
+   0 04:25:09.1539
+  0 04:25:09.15395
+         0 04:25:09
+       0 04:25:09.2
+      0 04:25:09.15
+     0 04:25:09.154
+    0 04:25:09.1539
+   0 04:25:09.15395
+  0 04:25:09.153950
+  6:49
+   6:49
+ 6:49:27
+  6:49:27
+   6:49:27
+    6:49:27
+  6:49:27.1
+     6:49:27
+   6:49:27.1
+  6:49:27.11
+      6:49:27
+    6:49:27.1
+   6:49:27.11
+  6:49:27.105
+       6:49:27
+     6:49:27.1
+    6:49:27.11
+   6:49:27.105
+  6:49:27.1053
+        6:49:27
+      6:49:27.1
+     6:49:27.11
+    6:49:27.105
+   6:49:27.1053
+  6:49:27.10533
+         6:49:27
+       6:49:27.1
+      6:49:27.11
+     6:49:27.105
+    6:49:27.1053
+   6:49:27.10533
+  6:49:27.105330
+  0 06:49
+   0 06:49
+ 0 06:49:27
+  0 06:49:27
+   0 06:49:27
+    0 06:49:27
+  0 06:49:27.1
+     0 06:49:27
+   0 06:49:27.1
+  0 06:49:27.11
+      0 06:49:27
+    0 06:49:27.1
+   0 06:49:27.11
+  0 06:49:27.105
+       0 06:49:27
+     0 06:49:27.1
+    0 06:49:27.11
+   0 06:49:27.105
+  0 06:49:27.1053
+        0 06:49:27
+      0 06:49:27.1
+     0 06:49:27.11
+    0 06:49:27.105
+   0 06:49:27.1053
+  0 06:49:27.10533
+         0 06:49:27
+       0 06:49:27.1
+      0 06:49:27.11
+     0 06:49:27.105
+    0 06:49:27.1053
+   0 06:49:27.10533
+  0 06:49:27.105330
+  2:57
+   2:57
+ 2:57:52
+  2:57:52
+   2:57:52
+    2:57:52
+  2:57:52.5
+     2:57:52
+   2:57:52.5
+  2:57:52.48
+      2:57:52
+    2:57:52.5
+   2:57:52.48
+  2:57:52.482
+       2:57:52
+     2:57:52.5
+    2:57:52.48
+   2:57:52.482
+  2:57:52.4823
+        2:57:52
+      2:57:52.5
+     2:57:52.48
+    2:57:52.482
+   2:57:52.4823
+  2:57:52.48229
+         2:57:52
+       2:57:52.5
+      2:57:52.48
+     2:57:52.482
+    2:57:52.4823
+   2:57:52.48229
+  2:57:52.482290
+  0 02:57
+   0 02:57
+ 0 02:57:52
+  0 02:57:52
+   0 02:57:52
+    0 02:57:52
+  0 02:57:52.5
+     0 02:57:52
+   0 02:57:52.5
+  0 02:57:52.48
+      0 02:57:52
+    0 02:57:52.5
+   0 02:57:52.48
+  0 02:57:52.482
+       0 02:57:52
+     0 02:57:52.5
+    0 02:57:52.48
+   0 02:57:52.482
+  0 02:57:52.4823
+        0 02:57:52
+      0 02:57:52.5
+     0 02:57:52.48
+    0 02:57:52.482
+   0 02:57:52.4823
+  0 02:57:52.48229
+         0 02:57:52
+       0 02:57:52.5
+      0 02:57:52.48
+     0 02:57:52.482
+    0 02:57:52.4823
+   0 02:57:52.48229
+  0 02:57:52.482290
+ 16:45
+  16:45
+   16:45
+ 16:45:44
+  16:45:44
+   16:45:44
+ 16:45:44.7
+    16:45:44
+  16:45:44.7
+ 16:45:44.66
+     16:45:44
+   16:45:44.7
+  16:45:44.66
+ 16:45:44.658
+      16:45:44
+    16:45:44.7
+   16:45:44.66
+  16:45:44.658
+ 16:45:44.6583
+       16:45:44
+     16:45:44.7
+    16:45:44.66
+   16:45:44.658
+  16:45:44.6583
+ 16:45:44.65827
+        16:45:44
+      16:45:44.7
+     16:45:44.66
+    16:45:44.658
+   16:45:44.6583
+  16:45:44.65827
+ 16:45:44.658270
+  0 16:45
+   0 16:45
+ 0 16:45:44
+  0 16:45:44
+   0 16:45:44
+    0 16:45:44
+  0 16:45:44.7
+     0 16:45:44
+   0 16:45:44.7
+  0 16:45:44.66
+      0 16:45:44
+    0 16:45:44.7
+   0 16:45:44.66
+  0 16:45:44.658
+       0 16:45:44
+     0 16:45:44.7
+    0 16:45:44.66
+   0 16:45:44.658
+  0 16:45:44.6583
+        0 16:45:44
+      0 16:45:44.7
+     0 16:45:44.66
+    0 16:45:44.658
+   0 16:45:44.6583
+  0 16:45:44.65827
+         0 16:45:44
+       0 16:45:44.7
+      0 16:45:44.66
+     0 16:45:44.658
+    0 16:45:44.6583
+   0 16:45:44.65827
+  0 16:45:44.658270
+ 21:30
+  21:30
+   21:30
+ 21:30:57
+  21:30:57
+   21:30:57
+ 21:30:57.6
+    21:30:57
+  21:30:57.6
+ 21:30:57.58
+     21:30:57
+   21:30:57.6
+  21:30:57.58
+ 21:30:57.582
+      21:30:57
+    21:30:57.6
+   21:30:57.58
+  21:30:57.582
+ 21:30:57.5822
+       21:30:57
+     21:30:57.6
+    21:30:57.58
+   21:30:57.582
+  21:30:57.5822
+ 21:30:57.58219
+        21:30:57
+      21:30:57.6
+     21:30:57.58
+    21:30:57.582
+   21:30:57.5822
+  21:30:57.58219
+ 21:30:57.582190
+  0 21:30
+   0 21:30
+ 0 21:30:57
+  0 21:30:57
+   0 21:30:57
+    0 21:30:57
+  0 21:30:57.6
+     0 21:30:57
+   0 21:30:57.6
+  0 21:30:57.58
+      0 21:30:57
+    0 21:30:57.6
+   0 21:30:57.58
+  0 21:30:57.582
+       0 21:30:57
+     0 21:30:57.6
+    0 21:30:57.58
+   0 21:30:57.582
+  0 21:30:57.5822
+        0 21:30:57
+      0 21:30:57.6
+     0 21:30:57.58
+    0 21:30:57.582
+   0 21:30:57.5822
+  0 21:30:57.58219
+         0 21:30:57
+       0 21:30:57.6
+      0 21:30:57.58
+     0 21:30:57.582
+    0 21:30:57.5822
+   0 21:30:57.58219
+  0 21:30:57.582190
+ 22:30
+  22:30
+   22:30
+ 22:30:04
+  22:30:04
+   22:30:04
+ 22:30:04.2
+    22:30:04
+  22:30:04.2
+ 22:30:04.18
+     22:30:04
+   22:30:04.2
+  22:30:04.18
+ 22:30:04.183
+      22:30:04
+    22:30:04.2
+   22:30:04.18
+  22:30:04.183
+ 22:30:04.1835
+       22:30:04
+     22:30:04.2
+    22:30:04.18
+   22:30:04.183
+  22:30:04.1835
+ 22:30:04.18347
+        22:30:04
+      22:30:04.2
+     22:30:04.18
+    22:30:04.183
+   22:30:04.1835
+  22:30:04.18347
+ 22:30:04.183470
+  0 22:30
+   0 22:30
+ 0 22:30:04
+  0 22:30:04
+   0 22:30:04
+    0 22:30:04
+  0 22:30:04.2
+     0 22:30:04
+   0 22:30:04.2
+  0 22:30:04.18
+      0 22:30:04
+    0 22:30:04.2
+   0 22:30:04.18
+  0 22:30:04.183
+       0 22:30:04
+     0 22:30:04.2
+    0 22:30:04.18
+   0 22:30:04.183
+  0 22:30:04.1835
+        0 22:30:04
+      0 22:30:04.2
+     0 22:30:04.18
+    0 22:30:04.183
+   0 22:30:04.1835
+  0 22:30:04.18347
+         0 22:30:04
+       0 22:30:04.2
+      0 22:30:04.18
+     0 22:30:04.183
+    0 22:30:04.1835
+   0 22:30:04.18347
+  0 22:30:04.183470
+  1:56
+   1:56
+ 1:56:51
+  1:56:51
+   1:56:51
+    1:56:51
+  1:56:51.6
+     1:56:51
+   1:56:51.6
+  1:56:51.59
+      1:56:51
+    1:56:51.6
+   1:56:51.59
+  1:56:51.593
+       1:56:51
+     1:56:51.6
+    1:56:51.59
+   1:56:51.593
+  1:56:51.5932
+        1:56:51
+      1:56:51.6
+     1:56:51.59
+    1:56:51.593
+   1:56:51.5932
+  1:56:51.59319
+         1:56:51
+       1:56:51.6
+      1:56:51.59
+     1:56:51.593
+    1:56:51.5932
+   1:56:51.59319
+  1:56:51.593190
+  0 01:56
+   0 01:56
+ 0 01:56:51
+  0 01:56:51
+   0 01:56:51
+    0 01:56:51
+  0 01:56:51.6
+     0 01:56:51
+   0 01:56:51.6
+  0 01:56:51.59
+      0 01:56:51
+    0 01:56:51.6
+   0 01:56:51.59
+  0 01:56:51.593
+       0 01:56:51
+     0 01:56:51.6
+    0 01:56:51.59
+   0 01:56:51.593
+  0 01:56:51.5932
+        0 01:56:51
+      0 01:56:51.6
+     0 01:56:51.59
+    0 01:56:51.593
+   0 01:56:51.5932
+  0 01:56:51.59319
+         0 01:56:51
+       0 01:56:51.6
+      0 01:56:51.59
+     0 01:56:51.593
+    0 01:56:51.5932
+   0 01:56:51.59319
+  0 01:56:51.593190
+ 24:00
+  24:00
+   24:00
+ 24:00:00
+  24:00:00
+   24:00:00
+ 24:00:00.0
+    24:00:00
+  24:00:00.0
+ 24:00:00.00
+     24:00:00
+   24:00:00.0
+  24:00:00.00
+ 24:00:00.000
+      24:00:00
+    24:00:00.0
+   24:00:00.00
+  24:00:00.000
+ 24:00:00.0000
+       24:00:00
+     24:00:00.0
+    24:00:00.00
+   24:00:00.000
+  24:00:00.0000
+ 24:00:00.00000
+        24:00:00
+      24:00:00.0
+     24:00:00.00
+    24:00:00.000
+   24:00:00.0000
+  24:00:00.00000
+ 24:00:00.000000
+  1 00:00
+   1 00:00
+ 1 00:00:00
+  1 00:00:00
+   1 00:00:00
+    1 00:00:00
+  1 00:00:00.0
+     1 00:00:00
+   1 00:00:00.0
+  1 00:00:00.00
+      1 00:00:00
+    1 00:00:00.0
+   1 00:00:00.00
+  1 00:00:00.000
+       1 00:00:00
+     1 00:00:00.0
+    1 00:00:00.00
+   1 00:00:00.000
+  1 00:00:00.0000
+        1 00:00:00
+      1 00:00:00.0
+     1 00:00:00.00
+    1 00:00:00.000
+   1 00:00:00.0000
+  1 00:00:00.00000
+         1 00:00:00
+       1 00:00:00.0
+      1 00:00:00.00
+     1 00:00:00.000
+    1 00:00:00.0000
+   1 00:00:00.00000
+  1 00:00:00.000000
+ 28:50
+  28:50
+   28:50
+ 28:50:38
+  28:50:38
+   28:50:38
+ 28:50:38.1
+    28:50:38
+  28:50:38.1
+ 28:50:38.12
+     28:50:38
+   28:50:38.1
+  28:50:38.12
+ 28:50:38.123
+      28:50:38
+    28:50:38.1
+   28:50:38.12
+  28:50:38.123
+ 28:50:38.1230
+       28:50:38
+     28:50:38.1
+    28:50:38.12
+   28:50:38.123
+  28:50:38.1230
+ 28:50:38.12301
+        28:50:38
+      28:50:38.1
+     28:50:38.12
+    28:50:38.123
+   28:50:38.1230
+  28:50:38.12301
+ 28:50:38.123010
+  1 04:50
+   1 04:50
+ 1 04:50:38
+  1 04:50:38
+   1 04:50:38
+    1 04:50:38
+  1 04:50:38.1
+     1 04:50:38
+   1 04:50:38.1
+  1 04:50:38.12
+      1 04:50:38
+    1 04:50:38.1
+   1 04:50:38.12
+  1 04:50:38.123
+       1 04:50:38
+     1 04:50:38.1
+    1 04:50:38.12
+   1 04:50:38.123
+  1 04:50:38.1230
+        1 04:50:38
+      1 04:50:38.1
+     1 04:50:38.12
+    1 04:50:38.123
+   1 04:50:38.1230
+  1 04:50:38.12301
+         1 04:50:38
+       1 04:50:38.1
+      1 04:50:38.12
+     1 04:50:38.123
+    1 04:50:38.1230
+   1 04:50:38.12301
+  1 04:50:38.123010
+ 36:31
+  36:31
+   36:31
+ 36:31:35
+  36:31:35
+   36:31:35
+ 36:31:35.2
+    36:31:35
+  36:31:35.2
+ 36:31:35.23
+     36:31:35
+   36:31:35.2
+  36:31:35.23
+ 36:31:35.235
+      36:31:35
+    36:31:35.2
+   36:31:35.23
+  36:31:35.235
+ 36:31:35.2345
+       36:31:35
+     36:31:35.2
+    36:31:35.23
+   36:31:35.235
+  36:31:35.2345
+ 36:31:35.23453
+        36:31:35
+      36:31:35.2
+     36:31:35.23
+    36:31:35.235
+   36:31:35.2345
+  36:31:35.23453
+ 36:31:35.234530
+  1 12:31
+   1 12:31
+ 1 12:31:35
+  1 12:31:35
+   1 12:31:35
+    1 12:31:35
+  1 12:31:35.2
+     1 12:31:35
+   1 12:31:35.2
+  1 12:31:35.23
+      1 12:31:35
+    1 12:31:35.2
+   1 12:31:35.23
+  1 12:31:35.235
+       1 12:31:35
+     1 12:31:35.2
+    1 12:31:35.23
+   1 12:31:35.235
+  1 12:31:35.2345
+        1 12:31:35
+      1 12:31:35.2
+     1 12:31:35.23
+    1 12:31:35.235
+   1 12:31:35.2345
+  1 12:31:35.23453
+         1 12:31:35
+       1 12:31:35.2
+      1 12:31:35.23
+     1 12:31:35.235
+    1 12:31:35.2345
+   1 12:31:35.23453
+  1 12:31:35.234530
+ 36:47
+  36:47
+   36:47
+ 36:47:53
+  36:47:53
+   36:47:53
+ 36:47:53.3
+    36:47:53
+  36:47:53.3
+ 36:47:53.35
+     36:47:53
+   36:47:53.3
+  36:47:53.35
+ 36:47:53.345
+      36:47:53
+    36:47:53.3
+   36:47:53.35
+  36:47:53.345
+ 36:47:53.3451
+       36:47:53
+     36:47:53.3
+    36:47:53.35
+   36:47:53.345
+  36:47:53.3451
+ 36:47:53.34505
+        36:47:53
+      36:47:53.3
+     36:47:53.35
+    36:47:53.345
+   36:47:53.3451
+  36:47:53.34505
+ 36:47:53.345050
+  1 12:47
+   1 12:47
+ 1 12:47:53
+  1 12:47:53
+   1 12:47:53
+    1 12:47:53
+  1 12:47:53.3
+     1 12:47:53
+   1 12:47:53.3
+  1 12:47:53.35
+      1 12:47:53
+    1 12:47:53.3
+   1 12:47:53.35
+  1 12:47:53.345
+       1 12:47:53
+     1 12:47:53.3
+    1 12:47:53.35
+   1 12:47:53.345
+  1 12:47:53.3451
+        1 12:47:53
+      1 12:47:53.3
+     1 12:47:53.35
+    1 12:47:53.345
+   1 12:47:53.3451
+  1 12:47:53.34505
+         1 12:47:53
+       1 12:47:53.3
+      1 12:47:53.35
+     1 12:47:53.345
+    1 12:47:53.3451
+   1 12:47:53.34505
+  1 12:47:53.345050
+ 25:26
+  25:26
+   25:26
+ 25:26:00
+  25:26:00
+   25:26:00
+ 25:26:00.5
+    25:26:00
+  25:26:00.5
+ 25:26:00.46
+     25:26:00
+   25:26:00.5
+  25:26:00.46
+ 25:26:00.456
+      25:26:00
+    25:26:00.5
+   25:26:00.46
+  25:26:00.456
+ 25:26:00.4561
+       25:26:00
+     25:26:00.5
+    25:26:00.46
+   25:26:00.456
+  25:26:00.4561
+ 25:26:00.45615
+        25:26:00
+      25:26:00.5
+     25:26:00.46
+    25:26:00.456
+   25:26:00.4561
+  25:26:00.45615
+ 25:26:00.456150
+  1 01:26
+   1 01:26
+ 1 01:26:00
+  1 01:26:00
+   1 01:26:00
+    1 01:26:00
+  1 01:26:00.5
+     1 01:26:00
+   1 01:26:00.5
+  1 01:26:00.46
+      1 01:26:00
+    1 01:26:00.5
+   1 01:26:00.46
+  1 01:26:00.456
+       1 01:26:00
+     1 01:26:00.5
+    1 01:26:00.46
+   1 01:26:00.456
+  1 01:26:00.4561
+        1 01:26:00
+      1 01:26:00.5
+     1 01:26:00.46
+    1 01:26:00.456
+   1 01:26:00.4561
+  1 01:26:00.45615
+         1 01:26:00
+       1 01:26:00.5
+      1 01:26:00.46
+     1 01:26:00.456
+    1 01:26:00.4561
+   1 01:26:00.45615
+  1 01:26:00.456150
+ 44:58
+  44:58
+   44:58
+ 44:58:11
+  44:58:11
+   44:58:11
+ 44:58:11.6
+    44:58:11
+  44:58:11.6
+ 44:58:11.57
+     44:58:11
+   44:58:11.6
+  44:58:11.57
+ 44:58:11.567
+      44:58:11
+    44:58:11.6
+   44:58:11.57
+  44:58:11.567
+ 44:58:11.5668
+       44:58:11
+     44:58:11.6
+    44:58:11.57
+   44:58:11.567
+  44:58:11.5668
+ 44:58:11.56677
+        44:58:11
+      44:58:11.6
+     44:58:11.57
+    44:58:11.567
+   44:58:11.5668
+  44:58:11.56677
+ 44:58:11.566770
+  1 20:58
+   1 20:58
+ 1 20:58:11
+  1 20:58:11
+   1 20:58:11
+    1 20:58:11
+  1 20:58:11.6
+     1 20:58:11
+   1 20:58:11.6
+  1 20:58:11.57
+      1 20:58:11
+    1 20:58:11.6
+   1 20:58:11.57
+  1 20:58:11.567
+       1 20:58:11
+     1 20:58:11.6
+    1 20:58:11.57
+   1 20:58:11.567
+  1 20:58:11.5668
+        1 20:58:11
+      1 20:58:11.6
+     1 20:58:11.57
+    1 20:58:11.567
+   1 20:58:11.5668
+  1 20:58:11.56677
+         1 20:58:11
+       1 20:58:11.6
+      1 20:58:11.57
+     1 20:58:11.567
+    1 20:58:11.5668
+   1 20:58:11.56677
+  1 20:58:11.566770
+ 31:36
+  31:36
+   31:36
+ 31:36:05
+  31:36:05
+   31:36:05
+ 31:36:05.2
+    31:36:05
+  31:36:05.2
+ 31:36:05.19
+     31:36:05
+   31:36:05.2
+  31:36:05.19
+ 31:36:05.190
+      31:36:05
+    31:36:05.2
+   31:36:05.19
+  31:36:05.190
+ 31:36:05.1896
+       31:36:05
+     31:36:05.2
+    31:36:05.19
+   31:36:05.190
+  31:36:05.1896
+ 31:36:05.18964
+        31:36:05
+      31:36:05.2
+     31:36:05.19
+    31:36:05.190
+   31:36:05.1896
+  31:36:05.18964
+ 31:36:05.189640
+  1 07:36
+   1 07:36
+ 1 07:36:05
+  1 07:36:05
+   1 07:36:05
+    1 07:36:05
+  1 07:36:05.2
+     1 07:36:05
+   1 07:36:05.2
+  1 07:36:05.19
+      1 07:36:05
+    1 07:36:05.2
+   1 07:36:05.19
+  1 07:36:05.190
+       1 07:36:05
+     1 07:36:05.2
+    1 07:36:05.19
+   1 07:36:05.190
+  1 07:36:05.1896
+        1 07:36:05
+      1 07:36:05.2
+     1 07:36:05.19
+    1 07:36:05.190
+   1 07:36:05.1896
+  1 07:36:05.18964
+         1 07:36:05
+       1 07:36:05.2
+      1 07:36:05.19
+     1 07:36:05.190
+    1 07:36:05.1896
+   1 07:36:05.18964
+  1 07:36:05.189640
+ 39:43
+  39:43
+   39:43
+ 39:43:49
+  39:43:49
+   39:43:49
+ 39:43:49.8
+    39:43:49
+  39:43:49.8
+ 39:43:49.83
+     39:43:49
+   39:43:49.8
+  39:43:49.83
+ 39:43:49.831
+      39:43:49
+    39:43:49.8
+   39:43:49.83
+  39:43:49.831
+ 39:43:49.8313
+       39:43:49
+     39:43:49.8
+    39:43:49.83
+   39:43:49.831
+  39:43:49.8313
+ 39:43:49.83132
+        39:43:49
+      39:43:49.8
+     39:43:49.83
+    39:43:49.831
+   39:43:49.8313
+  39:43:49.83132
+ 39:43:49.831320
+  1 15:43
+   1 15:43
+ 1 15:43:49
+  1 15:43:49
+   1 15:43:49
+    1 15:43:49
+  1 15:43:49.8
+     1 15:43:49
+   1 15:43:49.8
+  1 15:43:49.83
+      1 15:43:49
+    1 15:43:49.8
+   1 15:43:49.83
+  1 15:43:49.831
+       1 15:43:49
+     1 15:43:49.8
+    1 15:43:49.83
+   1 15:43:49.831
+  1 15:43:49.8313
+        1 15:43:49
+      1 15:43:49.8
+     1 15:43:49.83
+    1 15:43:49.831
+   1 15:43:49.8313
+  1 15:43:49.83132
+         1 15:43:49
+       1 15:43:49.8
+      1 15:43:49.83
+     1 15:43:49.831
+    1 15:43:49.8313
+   1 15:43:49.83132
+  1 15:43:49.831320
+ 28:25
+  28:25
+   28:25
+ 28:25:09
+  28:25:09
+   28:25:09
+ 28:25:09.0
+    28:25:09
+  28:25:09.0
+ 28:25:09.01
+     28:25:09
+   28:25:09.0
+  28:25:09.01
+ 28:25:09.013
+      28:25:09
+    28:25:09.0
+   28:25:09.01
+  28:25:09.013
+ 28:25:09.0129
+       28:25:09
+     28:25:09.0
+    28:25:09.01
+   28:25:09.013
+  28:25:09.0129
+ 28:25:09.01293
+        28:25:09
+      28:25:09.0
+     28:25:09.01
+    28:25:09.013
+   28:25:09.0129
+  28:25:09.01293
+ 28:25:09.012930
+  1 04:25
+   1 04:25
+ 1 04:25:09
+  1 04:25:09
+   1 04:25:09
+    1 04:25:09
+  1 04:25:09.0
+     1 04:25:09
+   1 04:25:09.0
+  1 04:25:09.01
+      1 04:25:09
+    1 04:25:09.0
+   1 04:25:09.01
+  1 04:25:09.013
+       1 04:25:09
+     1 04:25:09.0
+    1 04:25:09.01
+   1 04:25:09.013
+  1 04:25:09.0129
+        1 04:25:09
+      1 04:25:09.0
+     1 04:25:09.01
+    1 04:25:09.013
+   1 04:25:09.0129
+  1 04:25:09.01293
+         1 04:25:09
+       1 04:25:09.0
+      1 04:25:09.01
+     1 04:25:09.013
+    1 04:25:09.0129
+   1 04:25:09.01293
+  1 04:25:09.012930
+ 30:49
+  30:49
+   30:49
+ 30:49:27
+  30:49:27
+   30:49:27
+ 30:49:27.5
+    30:49:27
+  30:49:27.5
+ 30:49:27.52
+     30:49:27
+   30:49:27.5
+  30:49:27.52
+ 30:49:27.524
+      30:49:27
+    30:49:27.5
+   30:49:27.52
+  30:49:27.524
+ 30:49:27.5237
+       30:49:27
+     30:49:27.5
+    30:49:27.52
+   30:49:27.524
+  30:49:27.5237
+ 30:49:27.52375
+        30:49:27
+      30:49:27.5
+     30:49:27.52
+    30:49:27.524
+   30:49:27.5237
+  30:49:27.52375
+ 30:49:27.523750
+  1 06:49
+   1 06:49
+ 1 06:49:27
+  1 06:49:27
+   1 06:49:27
+    1 06:49:27
+  1 06:49:27.5
+     1 06:49:27
+   1 06:49:27.5
+  1 06:49:27.52
+      1 06:49:27
+    1 06:49:27.5
+   1 06:49:27.52
+  1 06:49:27.524
+       1 06:49:27
+     1 06:49:27.5
+    1 06:49:27.52
+   1 06:49:27.524
+  1 06:49:27.5237
+        1 06:49:27
+      1 06:49:27.5
+     1 06:49:27.52
+    1 06:49:27.524
+   1 06:49:27.5237
+  1 06:49:27.52375
+         1 06:49:27
+       1 06:49:27.5
+      1 06:49:27.52
+     1 06:49:27.524
+    1 06:49:27.5237
+   1 06:49:27.52375
+  1 06:49:27.523750
+ 26:57
+  26:57
+   26:57
+ 26:57:52
+  26:57:52
+   26:57:52
+ 26:57:52.0
+    26:57:52
+  26:57:52.0
+ 26:57:52.02
+     26:57:52
+   26:57:52.0
+  26:57:52.02
+ 26:57:52.016
+      26:57:52
+    26:57:52.0
+   26:57:52.02
+  26:57:52.016
+ 26:57:52.0157
+       26:57:52
+     26:57:52.0
+    26:57:52.02
+   26:57:52.016
+  26:57:52.0157
+ 26:57:52.01565
+        26:57:52
+      26:57:52.0
+     26:57:52.02
+    26:57:52.016
+   26:57:52.0157
+  26:57:52.01565
+ 26:57:52.015650
+  1 02:57
+   1 02:57
+ 1 02:57:52
+  1 02:57:52
+   1 02:57:52
+    1 02:57:52
+  1 02:57:52.0
+     1 02:57:52
+   1 02:57:52.0
+  1 02:57:52.02
+      1 02:57:52
+    1 02:57:52.0
+   1 02:57:52.02
+  1 02:57:52.016
+       1 02:57:52
+     1 02:57:52.0
+    1 02:57:52.02
+   1 02:57:52.016
+  1 02:57:52.0157
+        1 02:57:52
+      1 02:57:52.0
+     1 02:57:52.02
+    1 02:57:52.016
+   1 02:57:52.0157
+  1 02:57:52.01565
+         1 02:57:52
+       1 02:57:52.0
+      1 02:57:52.02
+     1 02:57:52.016
+    1 02:57:52.0157
+   1 02:57:52.01565
+  1 02:57:52.015650
+ 40:45
+  40:45
+   40:45
+ 40:45:44
+  40:45:44
+   40:45:44
+ 40:45:44.9
+    40:45:44
+  40:45:44.9
+ 40:45:44.87
+     40:45:44
+   40:45:44.9
+  40:45:44.87
+ 40:45:44.865
+      40:45:44
+    40:45:44.9
+   40:45:44.87
+  40:45:44.865
+ 40:45:44.8653
+       40:45:44
+     40:45:44.9
+    40:45:44.87
+   40:45:44.865
+  40:45:44.8653
+ 40:45:44.86529
+        40:45:44
+      40:45:44.9
+     40:45:44.87
+    40:45:44.865
+   40:45:44.8653
+  40:45:44.86529
+ 40:45:44.865290
+  1 16:45
+   1 16:45
+ 1 16:45:44
+  1 16:45:44
+   1 16:45:44
+    1 16:45:44
+  1 16:45:44.9
+     1 16:45:44
+   1 16:45:44.9
+  1 16:45:44.87
+      1 16:45:44
+    1 16:45:44.9
+   1 16:45:44.87
+  1 16:45:44.865
+       1 16:45:44
+     1 16:45:44.9
+    1 16:45:44.87
+   1 16:45:44.865
+  1 16:45:44.8653
+        1 16:45:44
+      1 16:45:44.9
+     1 16:45:44.87
+    1 16:45:44.865
+   1 16:45:44.8653
+  1 16:45:44.86529
+         1 16:45:44
+       1 16:45:44.9
+      1 16:45:44.87
+     1 16:45:44.865
+    1 16:45:44.8653
+   1 16:45:44.86529
+  1 16:45:44.865290
+ 45:30
+  45:30
+   45:30
+ 45:30:57
+  45:30:57
+   45:30:57
+ 45:30:57.8
+    45:30:57
+  45:30:57.8
+ 45:30:57.82
+     45:30:57
+   45:30:57.8
+  45:30:57.82
+ 45:30:57.820
+      45:30:57
+    45:30:57.8
+   45:30:57.82
+  45:30:57.820
+ 45:30:57.8205
+       45:30:57
+     45:30:57.8
+    45:30:57.82
+   45:30:57.820
+  45:30:57.8205
+ 45:30:57.82047
+        45:30:57
+      45:30:57.8
+     45:30:57.82
+    45:30:57.820
+   45:30:57.8205
+  45:30:57.82047
+ 45:30:57.820470
+  1 21:30
+   1 21:30
+ 1 21:30:57
+  1 21:30:57
+   1 21:30:57
+    1 21:30:57
+  1 21:30:57.8
+     1 21:30:57
+   1 21:30:57.8
+  1 21:30:57.82
+      1 21:30:57
+    1 21:30:57.8
+   1 21:30:57.82
+  1 21:30:57.820
+       1 21:30:57
+     1 21:30:57.8
+    1 21:30:57.82
+   1 21:30:57.820
+  1 21:30:57.8205
+        1 21:30:57
+      1 21:30:57.8
+     1 21:30:57.82
+    1 21:30:57.820
+   1 21:30:57.8205
+  1 21:30:57.82047
+         1 21:30:57
+       1 21:30:57.8
+      1 21:30:57.82
+     1 21:30:57.820
+    1 21:30:57.8205
+   1 21:30:57.82047
+  1 21:30:57.820470
+ 28:25
+  28:25
+   28:25
+ 28:25:09
+  28:25:09
+   28:25:09
+ 28:25:09.2
+    28:25:09
+  28:25:09.2
+ 28:25:09.15
+     28:25:09
+   28:25:09.2
+  28:25:09.15
+ 28:25:09.154
+      28:25:09
+    28:25:09.2
+   28:25:09.15
+  28:25:09.154
+ 28:25:09.1540
+       28:25:09
+     28:25:09.2
+    28:25:09.15
+   28:25:09.154
+  28:25:09.1540
+ 28:25:09.15395
+        28:25:09
+      28:25:09.2
+     28:25:09.15
+    28:25:09.154
+   28:25:09.1540
+  28:25:09.15395
+ 28:25:09.153950
+  1 04:25
+   1 04:25
+ 1 04:25:09
+  1 04:25:09
+   1 04:25:09
+    1 04:25:09
+  1 04:25:09.2
+     1 04:25:09
+   1 04:25:09.2
+  1 04:25:09.15
+      1 04:25:09
+    1 04:25:09.2
+   1 04:25:09.15
+  1 04:25:09.154
+       1 04:25:09
+     1 04:25:09.2
+    1 04:25:09.15
+   1 04:25:09.154
+  1 04:25:09.1540
+        1 04:25:09
+      1 04:25:09.2
+     1 04:25:09.15
+    1 04:25:09.154
+   1 04:25:09.1540
+  1 04:25:09.15395
+         1 04:25:09
+       1 04:25:09.2
+      1 04:25:09.15
+     1 04:25:09.154
+    1 04:25:09.1540
+   1 04:25:09.15395
+  1 04:25:09.153950
+ 30:49
+  30:49
+   30:49
+ 30:49:27
+  30:49:27
+   30:49:27
+ 30:49:27.1
+    30:49:27
+  30:49:27.1
+ 30:49:27.11
+     30:49:27
+   30:49:27.1
+  30:49:27.11
+ 30:49:27.105
+      30:49:27
+    30:49:27.1
+   30:49:27.11
+  30:49:27.105
+ 30:49:27.1053
+       30:49:27
+     30:49:27.1
+    30:49:27.11
+   30:49:27.105
+  30:49:27.1053
+ 30:49:27.10533
+        30:49:27
+      30:49:27.1
+     30:49:27.11
+    30:49:27.105
+   30:49:27.1053
+  30:49:27.10533
+ 30:49:27.105330
+  1 06:49
+   1 06:49
+ 1 06:49:27
+  1 06:49:27
+   1 06:49:27
+    1 06:49:27
+  1 06:49:27.1
+     1 06:49:27
+   1 06:49:27.1
+  1 06:49:27.11
+      1 06:49:27
+    1 06:49:27.1
+   1 06:49:27.11
+  1 06:49:27.105
+       1 06:49:27
+     1 06:49:27.1
+    1 06:49:27.11
+   1 06:49:27.105
+  1 06:49:27.1053
+        1 06:49:27
+      1 06:49:27.1
+     1 06:49:27.11
+    1 06:49:27.105
+   1 06:49:27.1053
+  1 06:49:27.10533
+         1 06:49:27
+       1 06:49:27.1
+      1 06:49:27.11
+     1 06:49:27.105
+    1 06:49:27.1053
+   1 06:49:27.10533
+  1 06:49:27.105330
+ 26:57
+  26:57
+   26:57
+ 26:57:52
+  26:57:52
+   26:57:52
+ 26:57:52.5
+    26:57:52
+  26:57:52.5
+ 26:57:52.48
+     26:57:52
+   26:57:52.5
+  26:57:52.48
+ 26:57:52.482
+      26:57:52
+    26:57:52.5
+   26:57:52.48
+  26:57:52.482
+ 26:57:52.4823
+       26:57:52
+     26:57:52.5
+    26:57:52.48
+   26:57:52.482
+  26:57:52.4823
+ 26:57:52.48229
+        26:57:52
+      26:57:52.5
+     26:57:52.48
+    26:57:52.482
+   26:57:52.4823
+  26:57:52.48229
+ 26:57:52.482290
+  1 02:57
+   1 02:57
+ 1 02:57:52
+  1 02:57:52
+   1 02:57:52
+    1 02:57:52
+  1 02:57:52.5
+     1 02:57:52
+   1 02:57:52.5
+  1 02:57:52.48
+      1 02:57:52
+    1 02:57:52.5
+   1 02:57:52.48
+  1 02:57:52.482
+       1 02:57:52
+     1 02:57:52.5
+    1 02:57:52.48
+   1 02:57:52.482
+  1 02:57:52.4823
+        1 02:57:52
+      1 02:57:52.5
+     1 02:57:52.48
+    1 02:57:52.482
+   1 02:57:52.4823
+  1 02:57:52.48229
+         1 02:57:52
+       1 02:57:52.5
+      1 02:57:52.48
+     1 02:57:52.482
+    1 02:57:52.4823
+   1 02:57:52.48229
+  1 02:57:52.482290
+ 40:45
+  40:45
+   40:45
+ 40:45:44
+  40:45:44
+   40:45:44
+ 40:45:44.7
+    40:45:44
+  40:45:44.7
+ 40:45:44.66
+     40:45:44
+   40:45:44.7
+  40:45:44.66
+ 40:45:44.658
+      40:45:44
+    40:45:44.7
+   40:45:44.66
+  40:45:44.658
+ 40:45:44.6583
+       40:45:44
+     40:45:44.7
+    40:45:44.66
+   40:45:44.658
+  40:45:44.6583
+ 40:45:44.65827
+        40:45:44
+      40:45:44.7
+     40:45:44.66
+    40:45:44.658
+   40:45:44.6583
+  40:45:44.65827
+ 40:45:44.658270
+  1 16:45
+   1 16:45
+ 1 16:45:44
+  1 16:45:44
+   1 16:45:44
+    1 16:45:44
+  1 16:45:44.7
+     1 16:45:44
+   1 16:45:44.7
+  1 16:45:44.66
+      1 16:45:44
+    1 16:45:44.7
+   1 16:45:44.66
+  1 16:45:44.658
+       1 16:45:44
+     1 16:45:44.7
+    1 16:45:44.66
+   1 16:45:44.658
+  1 16:45:44.6583
+        1 16:45:44
+      1 16:45:44.7
+     1 16:45:44.66
+    1 16:45:44.658
+   1 16:45:44.6583
+  1 16:45:44.65827
+         1 16:45:44
+       1 16:45:44.7
+      1 16:45:44.66
+     1 16:45:44.658
+    1 16:45:44.6583
+   1 16:45:44.65827
+  1 16:45:44.658270
+ 45:30
+  45:30
+   45:30
+ 45:30:57
+  45:30:57
+   45:30:57
+ 45:30:57.6
+    45:30:57
+  45:30:57.6
+ 45:30:57.58
+     45:30:57
+   45:30:57.6
+  45:30:57.58
+ 45:30:57.582
+      45:30:57
+    45:30:57.6
+   45:30:57.58
+  45:30:57.582
+ 45:30:57.5822
+       45:30:57
+     45:30:57.6
+    45:30:57.58
+   45:30:57.582
+  45:30:57.5822
+ 45:30:57.58219
+        45:30:57
+      45:30:57.6
+     45:30:57.58
+    45:30:57.582
+   45:30:57.5822
+  45:30:57.58219
+ 45:30:57.582190
+  1 21:30
+   1 21:30
+ 1 21:30:57
+  1 21:30:57
+   1 21:30:57
+    1 21:30:57
+  1 21:30:57.6
+     1 21:30:57
+   1 21:30:57.6
+  1 21:30:57.58
+      1 21:30:57
+    1 21:30:57.6
+   1 21:30:57.58
+  1 21:30:57.582
+       1 21:30:57
+     1 21:30:57.6
+    1 21:30:57.58
+   1 21:30:57.582
+  1 21:30:57.5822
+        1 21:30:57
+      1 21:30:57.6
+     1 21:30:57.58
+    1 21:30:57.582
+   1 21:30:57.5822
+  1 21:30:57.58219
+         1 21:30:57
+       1 21:30:57.6
+      1 21:30:57.58
+     1 21:30:57.582
+    1 21:30:57.5822
+   1 21:30:57.58219
+  1 21:30:57.582190
+ 46:30
+  46:30
+   46:30
+ 46:30:04
+  46:30:04
+   46:30:04
+ 46:30:04.2
+    46:30:04
+  46:30:04.2
+ 46:30:04.18
+     46:30:04
+   46:30:04.2
+  46:30:04.18
+ 46:30:04.183
+      46:30:04
+    46:30:04.2
+   46:30:04.18
+  46:30:04.183
+ 46:30:04.1835
+       46:30:04
+     46:30:04.2
+    46:30:04.18
+   46:30:04.183
+  46:30:04.1835
+ 46:30:04.18347
+        46:30:04
+      46:30:04.2
+     46:30:04.18
+    46:30:04.183
+   46:30:04.1835
+  46:30:04.18347
+ 46:30:04.183470
+  1 22:30
+   1 22:30
+ 1 22:30:04
+  1 22:30:04
+   1 22:30:04
+    1 22:30:04
+  1 22:30:04.2
+     1 22:30:04
+   1 22:30:04.2
+  1 22:30:04.18
+      1 22:30:04
+    1 22:30:04.2
+   1 22:30:04.18
+  1 22:30:04.183
+       1 22:30:04
+     1 22:30:04.2
+    1 22:30:04.18
+   1 22:30:04.183
+  1 22:30:04.1835
+        1 22:30:04
+      1 22:30:04.2
+     1 22:30:04.18
+    1 22:30:04.183
+   1 22:30:04.1835
+  1 22:30:04.18347
+         1 22:30:04
+       1 22:30:04.2
+      1 22:30:04.18
+     1 22:30:04.183
+    1 22:30:04.1835
+   1 22:30:04.18347
+  1 22:30:04.183470
+ 25:56
+  25:56
+   25:56
+ 25:56:51
+  25:56:51
+   25:56:51
+ 25:56:51.6
+    25:56:51
+  25:56:51.6
+ 25:56:51.59
+     25:56:51
+   25:56:51.6
+  25:56:51.59
+ 25:56:51.593
+      25:56:51
+    25:56:51.6
+   25:56:51.59
+  25:56:51.593
+ 25:56:51.5932
+       25:56:51
+     25:56:51.6
+    25:56:51.59
+   25:56:51.593
+  25:56:51.5932
+ 25:56:51.59319
+        25:56:51
+      25:56:51.6
+     25:56:51.59
+    25:56:51.593
+   25:56:51.5932
+  25:56:51.59319
+ 25:56:51.593190
+  1 01:56
+   1 01:56
+ 1 01:56:51
+  1 01:56:51
+   1 01:56:51
+    1 01:56:51
+  1 01:56:51.6
+     1 01:56:51
+   1 01:56:51.6
+  1 01:56:51.59
+      1 01:56:51
+    1 01:56:51.6
+   1 01:56:51.59
+  1 01:56:51.593
+       1 01:56:51
+     1 01:56:51.6
+    1 01:56:51.59
+   1 01:56:51.593
+  1 01:56:51.5932
+        1 01:56:51
+      1 01:56:51.6
+     1 01:56:51.59
+    1 01:56:51.593
+   1 01:56:51.5932
+  1 01:56:51.59319
+         1 01:56:51
+       1 01:56:51.6
+      1 01:56:51.59
+     1 01:56:51.593
+    1 01:56:51.5932
+   1 01:56:51.59319
+  1 01:56:51.593190
+ 48:00
+  48:00
+   48:00
+ 48:00:00
+  48:00:00
+   48:00:00
+ 48:00:00.0
+    48:00:00
+  48:00:00.0
+ 48:00:00.00
+     48:00:00
+   48:00:00.0
+  48:00:00.00
+ 48:00:00.000
+      48:00:00
+    48:00:00.0
+   48:00:00.00
+  48:00:00.000
+ 48:00:00.0000
+       48:00:00
+     48:00:00.0
+    48:00:00.00
+   48:00:00.000
+  48:00:00.0000
+ 48:00:00.00000
+        48:00:00
+      48:00:00.0
+     48:00:00.00
+    48:00:00.000
+   48:00:00.0000
+  48:00:00.00000
+ 48:00:00.000000
+  2 00:00
+   2 00:00
+ 2 00:00:00
+  2 00:00:00
+   2 00:00:00
+    2 00:00:00
+  2 00:00:00.0
+     2 00:00:00
+   2 00:00:00.0
+  2 00:00:00.00
+      2 00:00:00
+    2 00:00:00.0
+   2 00:00:00.00
+  2 00:00:00.000
+       2 00:00:00
+     2 00:00:00.0
+    2 00:00:00.00
+   2 00:00:00.000
+  2 00:00:00.0000
+        2 00:00:00
+      2 00:00:00.0
+     2 00:00:00.00
+    2 00:00:00.000
+   2 00:00:00.0000
+  2 00:00:00.00000
+         2 00:00:00
+       2 00:00:00.0
+      2 00:00:00.00
+     2 00:00:00.000
+    2 00:00:00.0000
+   2 00:00:00.00000
+  2 00:00:00.000000
+ 52:50
+  52:50
+   52:50
+ 52:50:38
+  52:50:38
+   52:50:38
+ 52:50:38.1
+    52:50:38
+  52:50:38.1
+ 52:50:38.12
+     52:50:38
+   52:50:38.1
+  52:50:38.12
+ 52:50:38.123
+      52:50:38
+    52:50:38.1
+   52:50:38.12
+  52:50:38.123
+ 52:50:38.1230
+       52:50:38
+     52:50:38.1
+    52:50:38.12
+   52:50:38.123
+  52:50:38.1230
+ 52:50:38.12301
+        52:50:38
+      52:50:38.1
+     52:50:38.12
+    52:50:38.123
+   52:50:38.1230
+  52:50:38.12301
+ 52:50:38.123010
+  2 04:50
+   2 04:50
+ 2 04:50:38
+  2 04:50:38
+   2 04:50:38
+    2 04:50:38
+  2 04:50:38.1
+     2 04:50:38
+   2 04:50:38.1
+  2 04:50:38.12
+      2 04:50:38
+    2 04:50:38.1
+   2 04:50:38.12
+  2 04:50:38.123
+       2 04:50:38
+     2 04:50:38.1
+    2 04:50:38.12
+   2 04:50:38.123
+  2 04:50:38.1230
+        2 04:50:38
+      2 04:50:38.1
+     2 04:50:38.12
+    2 04:50:38.123
+   2 04:50:38.1230
+  2 04:50:38.12301
+         2 04:50:38
+       2 04:50:38.1
+      2 04:50:38.12
+     2 04:50:38.123
+    2 04:50:38.1230
+   2 04:50:38.12301
+  2 04:50:38.123010
+ 60:31
+  60:31
+   60:31
+ 60:31:35
+  60:31:35
+   60:31:35
+ 60:31:35.2
+    60:31:35
+  60:31:35.2
+ 60:31:35.23
+     60:31:35
+   60:31:35.2
+  60:31:35.23
+ 60:31:35.235
+      60:31:35
+    60:31:35.2
+   60:31:35.23
+  60:31:35.235
+ 60:31:35.2345
+       60:31:35
+     60:31:35.2
+    60:31:35.23
+   60:31:35.235
+  60:31:35.2345
+ 60:31:35.23453
+        60:31:35
+      60:31:35.2
+     60:31:35.23
+    60:31:35.235
+   60:31:35.2345
+  60:31:35.23453
+ 60:31:35.234530
+  2 12:31
+   2 12:31
+ 2 12:31:35
+  2 12:31:35
+   2 12:31:35
+    2 12:31:35
+  2 12:31:35.2
+     2 12:31:35
+   2 12:31:35.2
+  2 12:31:35.23
+      2 12:31:35
+    2 12:31:35.2
+   2 12:31:35.23
+  2 12:31:35.235
+       2 12:31:35
+     2 12:31:35.2
+    2 12:31:35.23
+   2 12:31:35.235
+  2 12:31:35.2345
+        2 12:31:35
+      2 12:31:35.2
+     2 12:31:35.23
+    2 12:31:35.235
+   2 12:31:35.2345
+  2 12:31:35.23453
+         2 12:31:35
+       2 12:31:35.2
+      2 12:31:35.23
+     2 12:31:35.235
+    2 12:31:35.2345
+   2 12:31:35.23453
+  2 12:31:35.234530
+ 60:47
+  60:47
+   60:47
+ 60:47:53
+  60:47:53
+   60:47:53
+ 60:47:53.3
+    60:47:53
+  60:47:53.3
+ 60:47:53.35
+     60:47:53
+   60:47:53.3
+  60:47:53.35
+ 60:47:53.345
+      60:47:53
+    60:47:53.3
+   60:47:53.35
+  60:47:53.345
+ 60:47:53.3451
+       60:47:53
+     60:47:53.3
+    60:47:53.35
+   60:47:53.345
+  60:47:53.3451
+ 60:47:53.34505
+        60:47:53
+      60:47:53.3
+     60:47:53.35
+    60:47:53.345
+   60:47:53.3451
+  60:47:53.34505
+ 60:47:53.345050
+  2 12:47
+   2 12:47
+ 2 12:47:53
+  2 12:47:53
+   2 12:47:53
+    2 12:47:53
+  2 12:47:53.3
+     2 12:47:53
+   2 12:47:53.3
+  2 12:47:53.35
+      2 12:47:53
+    2 12:47:53.3
+   2 12:47:53.35
+  2 12:47:53.345
+       2 12:47:53
+     2 12:47:53.3
+    2 12:47:53.35
+   2 12:47:53.345
+  2 12:47:53.3451
+        2 12:47:53
+      2 12:47:53.3
+     2 12:47:53.35
+    2 12:47:53.345
+   2 12:47:53.3451
+  2 12:47:53.34505
+         2 12:47:53
+       2 12:47:53.3
+      2 12:47:53.35
+     2 12:47:53.345
+    2 12:47:53.3451
+   2 12:47:53.34505
+  2 12:47:53.345050
+ 49:26
+  49:26
+   49:26
+ 49:26:00
+  49:26:00
+   49:26:00
+ 49:26:00.5
+    49:26:00
+  49:26:00.5
+ 49:26:00.46
+     49:26:00
+   49:26:00.5
+  49:26:00.46
+ 49:26:00.456
+      49:26:00
+    49:26:00.5
+   49:26:00.46
+  49:26:00.456
+ 49:26:00.4562
+       49:26:00
+     49:26:00.5
+    49:26:00.46
+   49:26:00.456
+  49:26:00.4562
+ 49:26:00.45615
+        49:26:00
+      49:26:00.5
+     49:26:00.46
+    49:26:00.456
+   49:26:00.4562
+  49:26:00.45615
+ 49:26:00.456150
+  2 01:26
+   2 01:26
+ 2 01:26:00
+  2 01:26:00
+   2 01:26:00
+    2 01:26:00
+  2 01:26:00.5
+     2 01:26:00
+   2 01:26:00.5
+  2 01:26:00.46
+      2 01:26:00
+    2 01:26:00.5
+   2 01:26:00.46
+  2 01:26:00.456
+       2 01:26:00
+     2 01:26:00.5
+    2 01:26:00.46
+   2 01:26:00.456
+  2 01:26:00.4562
+        2 01:26:00
+      2 01:26:00.5
+     2 01:26:00.46
+    2 01:26:00.456
+   2 01:26:00.4562
+  2 01:26:00.45615
+         2 01:26:00
+       2 01:26:00.5
+      2 01:26:00.46
+     2 01:26:00.456
+    2 01:26:00.4562
+   2 01:26:00.45615
+  2 01:26:00.456150
+ 68:58
+  68:58
+   68:58
+ 68:58:11
+  68:58:11
+   68:58:11
+ 68:58:11.6
+    68:58:11
+  68:58:11.6
+ 68:58:11.57
+     68:58:11
+   68:58:11.6
+  68:58:11.57
+ 68:58:11.567
+      68:58:11
+    68:58:11.6
+   68:58:11.57
+  68:58:11.567
+ 68:58:11.5668
+       68:58:11
+     68:58:11.6
+    68:58:11.57
+   68:58:11.567
+  68:58:11.5668
+ 68:58:11.56677
+        68:58:11
+      68:58:11.6
+     68:58:11.57
+    68:58:11.567
+   68:58:11.5668
+  68:58:11.56677
+ 68:58:11.566770
+  2 20:58
+   2 20:58
+ 2 20:58:11
+  2 20:58:11
+   2 20:58:11
+    2 20:58:11
+  2 20:58:11.6
+     2 20:58:11
+   2 20:58:11.6
+  2 20:58:11.57
+      2 20:58:11
+    2 20:58:11.6
+   2 20:58:11.57
+  2 20:58:11.567
+       2 20:58:11
+     2 20:58:11.6
+    2 20:58:11.57
+   2 20:58:11.567
+  2 20:58:11.5668
+        2 20:58:11
+      2 20:58:11.6
+     2 20:58:11.57
+    2 20:58:11.567
+   2 20:58:11.5668
+  2 20:58:11.56677
+         2 20:58:11
+       2 20:58:11.6
+      2 20:58:11.57
+     2 20:58:11.567
+    2 20:58:11.5668
+   2 20:58:11.56677
+  2 20:58:11.566770
+ 55:36
+  55:36
+   55:36
+ 55:36:05
+  55:36:05
+   55:36:05
+ 55:36:05.2
+    55:36:05
+  55:36:05.2
+ 55:36:05.19
+     55:36:05
+   55:36:05.2
+  55:36:05.19
+ 55:36:05.190
+      55:36:05
+    55:36:05.2
+   55:36:05.19
+  55:36:05.190
+ 55:36:05.1896
+       55:36:05
+     55:36:05.2
+    55:36:05.19
+   55:36:05.190
+  55:36:05.1896
+ 55:36:05.18964
+        55:36:05
+      55:36:05.2
+     55:36:05.19
+    55:36:05.190
+   55:36:05.1896
+  55:36:05.18964
+ 55:36:05.189640
+  2 07:36
+   2 07:36
+ 2 07:36:05
+  2 07:36:05
+   2 07:36:05
+    2 07:36:05
+  2 07:36:05.2
+     2 07:36:05
+   2 07:36:05.2
+  2 07:36:05.19
+      2 07:36:05
+    2 07:36:05.2
+   2 07:36:05.19
+  2 07:36:05.190
+       2 07:36:05
+     2 07:36:05.2
+    2 07:36:05.19
+   2 07:36:05.190
+  2 07:36:05.1896
+        2 07:36:05
+      2 07:36:05.2
+     2 07:36:05.19
+    2 07:36:05.190
+   2 07:36:05.1896
+  2 07:36:05.18964
+         2 07:36:05
+       2 07:36:05.2
+      2 07:36:05.19
+     2 07:36:05.190
+    2 07:36:05.1896
+   2 07:36:05.18964
+  2 07:36:05.189640
+ 63:43
+  63:43
+   63:43
+ 63:43:49
+  63:43:49
+   63:43:49
+ 63:43:49.8
+    63:43:49
+  63:43:49.8
+ 63:43:49.83
+     63:43:49
+   63:43:49.8
+  63:43:49.83
+ 63:43:49.831
+      63:43:49
+    63:43:49.8
+   63:43:49.83
+  63:43:49.831
+ 63:43:49.8313
+       63:43:49
+     63:43:49.8
+    63:43:49.83
+   63:43:49.831
+  63:43:49.8313
+ 63:43:49.83132
+        63:43:49
+      63:43:49.8
+     63:43:49.83
+    63:43:49.831
+   63:43:49.8313
+  63:43:49.83132
+ 63:43:49.831320
+  2 15:43
+   2 15:43
+ 2 15:43:49
+  2 15:43:49
+   2 15:43:49
+    2 15:43:49
+  2 15:43:49.8
+     2 15:43:49
+   2 15:43:49.8
+  2 15:43:49.83
+      2 15:43:49
+    2 15:43:49.8
+   2 15:43:49.83
+  2 15:43:49.831
+       2 15:43:49
+     2 15:43:49.8
+    2 15:43:49.83
+   2 15:43:49.831
+  2 15:43:49.8313
+        2 15:43:49
+      2 15:43:49.8
+     2 15:43:49.83
+    2 15:43:49.831
+   2 15:43:49.8313
+  2 15:43:49.83132
+         2 15:43:49
+       2 15:43:49.8
+      2 15:43:49.83
+     2 15:43:49.831
+    2 15:43:49.8313
+   2 15:43:49.83132
+  2 15:43:49.831320
+ 52:25
+  52:25
+   52:25
+ 52:25:09
+  52:25:09
+   52:25:09
+ 52:25:09.0
+    52:25:09
+  52:25:09.0
+ 52:25:09.01
+     52:25:09
+   52:25:09.0
+  52:25:09.01
+ 52:25:09.013
+      52:25:09
+    52:25:09.0
+   52:25:09.01
+  52:25:09.013
+ 52:25:09.0129
+       52:25:09
+     52:25:09.0
+    52:25:09.01
+   52:25:09.013
+  52:25:09.0129
+ 52:25:09.01293
+        52:25:09
+      52:25:09.0
+     52:25:09.01
+    52:25:09.013
+   52:25:09.0129
+  52:25:09.01293
+ 52:25:09.012930
+  2 04:25
+   2 04:25
+ 2 04:25:09
+  2 04:25:09
+   2 04:25:09
+    2 04:25:09
+  2 04:25:09.0
+     2 04:25:09
+   2 04:25:09.0
+  2 04:25:09.01
+      2 04:25:09
+    2 04:25:09.0
+   2 04:25:09.01
+  2 04:25:09.013
+       2 04:25:09
+     2 04:25:09.0
+    2 04:25:09.01
+   2 04:25:09.013
+  2 04:25:09.0129
+        2 04:25:09
+      2 04:25:09.0
+     2 04:25:09.01
+    2 04:25:09.013
+   2 04:25:09.0129
+  2 04:25:09.01293
+         2 04:25:09
+       2 04:25:09.0
+      2 04:25:09.01
+     2 04:25:09.013
+    2 04:25:09.0129
+   2 04:25:09.01293
+  2 04:25:09.012930
+ 54:49
+  54:49
+   54:49
+ 54:49:27
+  54:49:27
+   54:49:27
+ 54:49:27.5
+    54:49:27
+  54:49:27.5
+ 54:49:27.52
+     54:49:27
+   54:49:27.5
+  54:49:27.52
+ 54:49:27.524
+      54:49:27
+    54:49:27.5
+   54:49:27.52
+  54:49:27.524
+ 54:49:27.5237
+       54:49:27
+     54:49:27.5
+    54:49:27.52
+   54:49:27.524
+  54:49:27.5237
+ 54:49:27.52375
+        54:49:27
+      54:49:27.5
+     54:49:27.52
+    54:49:27.524
+   54:49:27.5237
+  54:49:27.52375
+ 54:49:27.523750
+  2 06:49
+   2 06:49
+ 2 06:49:27
+  2 06:49:27
+   2 06:49:27
+    2 06:49:27
+  2 06:49:27.5
+     2 06:49:27
+   2 06:49:27.5
+  2 06:49:27.52
+      2 06:49:27
+    2 06:49:27.5
+   2 06:49:27.52
+  2 06:49:27.524
+       2 06:49:27
+     2 06:49:27.5
+    2 06:49:27.52
+   2 06:49:27.524
+  2 06:49:27.5237
+        2 06:49:27
+      2 06:49:27.5
+     2 06:49:27.52
+    2 06:49:27.524
+   2 06:49:27.5237
+  2 06:49:27.52375
+         2 06:49:27
+       2 06:49:27.5
+      2 06:49:27.52
+     2 06:49:27.524
+    2 06:49:27.5237
+   2 06:49:27.52375
+  2 06:49:27.523750
+ 50:57
+  50:57
+   50:57
+ 50:57:52
+  50:57:52
+   50:57:52
+ 50:57:52.0
+    50:57:52
+  50:57:52.0
+ 50:57:52.02
+     50:57:52
+   50:57:52.0
+  50:57:52.02
+ 50:57:52.016
+      50:57:52
+    50:57:52.0
+   50:57:52.02
+  50:57:52.016
+ 50:57:52.0156
+       50:57:52
+     50:57:52.0
+    50:57:52.02
+   50:57:52.016
+  50:57:52.0156
+ 50:57:52.01565
+        50:57:52
+      50:57:52.0
+     50:57:52.02
+    50:57:52.016
+   50:57:52.0156
+  50:57:52.01565
+ 50:57:52.015650
+  2 02:57
+   2 02:57
+ 2 02:57:52
+  2 02:57:52
+   2 02:57:52
+    2 02:57:52
+  2 02:57:52.0
+     2 02:57:52
+   2 02:57:52.0
+  2 02:57:52.02
+      2 02:57:52
+    2 02:57:52.0
+   2 02:57:52.02
+  2 02:57:52.016
+       2 02:57:52
+     2 02:57:52.0
+    2 02:57:52.02
+   2 02:57:52.016
+  2 02:57:52.0156
+        2 02:57:52
+      2 02:57:52.0
+     2 02:57:52.02
+    2 02:57:52.016
+   2 02:57:52.0156
+  2 02:57:52.01565
+         2 02:57:52
+       2 02:57:52.0
+      2 02:57:52.02
+     2 02:57:52.016
+    2 02:57:52.0156
+   2 02:57:52.01565
+  2 02:57:52.015650
+ 64:45
+  64:45
+   64:45
+ 64:45:44
+  64:45:44
+   64:45:44
+ 64:45:44.9
+    64:45:44
+  64:45:44.9
+ 64:45:44.87
+     64:45:44
+   64:45:44.9
+  64:45:44.87
+ 64:45:44.865
+      64:45:44
+    64:45:44.9
+   64:45:44.87
+  64:45:44.865
+ 64:45:44.8653
+       64:45:44
+     64:45:44.9
+    64:45:44.87
+   64:45:44.865
+  64:45:44.8653
+ 64:45:44.86529
+        64:45:44
+      64:45:44.9
+     64:45:44.87
+    64:45:44.865
+   64:45:44.8653
+  64:45:44.86529
+ 64:45:44.865290
+  2 16:45
+   2 16:45
+ 2 16:45:44
+  2 16:45:44
+   2 16:45:44
+    2 16:45:44
+  2 16:45:44.9
+     2 16:45:44
+   2 16:45:44.9
+  2 16:45:44.87
+      2 16:45:44
+    2 16:45:44.9
+   2 16:45:44.87
+  2 16:45:44.865
+       2 16:45:44
+     2 16:45:44.9
+    2 16:45:44.87
+   2 16:45:44.865
+  2 16:45:44.8653
+        2 16:45:44
+      2 16:45:44.9
+     2 16:45:44.87
+    2 16:45:44.865
+   2 16:45:44.8653
+  2 16:45:44.86529
+         2 16:45:44
+       2 16:45:44.9
+      2 16:45:44.87
+     2 16:45:44.865
+    2 16:45:44.8653
+   2 16:45:44.86529
+  2 16:45:44.865290
+ 69:30
+  69:30
+   69:30
+ 69:30:57
+  69:30:57
+   69:30:57
+ 69:30:57.8
+    69:30:57
+  69:30:57.8
+ 69:30:57.82
+     69:30:57
+   69:30:57.8
+  69:30:57.82
+ 69:30:57.820
+      69:30:57
+    69:30:57.8
+   69:30:57.82
+  69:30:57.820
+ 69:30:57.8205
+       69:30:57
+     69:30:57.8
+    69:30:57.82
+   69:30:57.820
+  69:30:57.8205
+ 69:30:57.82047
+        69:30:57
+      69:30:57.8
+     69:30:57.82
+    69:30:57.820
+   69:30:57.8205
+  69:30:57.82047
+ 69:30:57.820470
+  2 21:30
+   2 21:30
+ 2 21:30:57
+  2 21:30:57
+   2 21:30:57
+    2 21:30:57
+  2 21:30:57.8
+     2 21:30:57
+   2 21:30:57.8
+  2 21:30:57.82
+      2 21:30:57
+    2 21:30:57.8
+   2 21:30:57.82
+  2 21:30:57.820
+       2 21:30:57
+     2 21:30:57.8
+    2 21:30:57.82
+   2 21:30:57.820
+  2 21:30:57.8205
+        2 21:30:57
+      2 21:30:57.8
+     2 21:30:57.82
+    2 21:30:57.820
+   2 21:30:57.8205
+  2 21:30:57.82047
+         2 21:30:57
+       2 21:30:57.8
+      2 21:30:57.82
+     2 21:30:57.820
+    2 21:30:57.8205
+   2 21:30:57.82047
+  2 21:30:57.820470
+ 52:25
+  52:25
+   52:25
+ 52:25:09
+  52:25:09
+   52:25:09
+ 52:25:09.2
+    52:25:09
+  52:25:09.2
+ 52:25:09.15
+     52:25:09
+   52:25:09.2
+  52:25:09.15
+ 52:25:09.154
+      52:25:09
+    52:25:09.2
+   52:25:09.15
+  52:25:09.154
+ 52:25:09.1540
+       52:25:09
+     52:25:09.2
+    52:25:09.15
+   52:25:09.154
+  52:25:09.1540
+ 52:25:09.15395
+        52:25:09
+      52:25:09.2
+     52:25:09.15
+    52:25:09.154
+   52:25:09.1540
+  52:25:09.15395
+ 52:25:09.153950
+  2 04:25
+   2 04:25
+ 2 04:25:09
+  2 04:25:09
+   2 04:25:09
+    2 04:25:09
+  2 04:25:09.2
+     2 04:25:09
+   2 04:25:09.2
+  2 04:25:09.15
+      2 04:25:09
+    2 04:25:09.2
+   2 04:25:09.15
+  2 04:25:09.154
+       2 04:25:09
+     2 04:25:09.2
+    2 04:25:09.15
+   2 04:25:09.154
+  2 04:25:09.1540
+        2 04:25:09
+      2 04:25:09.2
+     2 04:25:09.15
+    2 04:25:09.154
+   2 04:25:09.1540
+  2 04:25:09.15395
+         2 04:25:09
+       2 04:25:09.2
+      2 04:25:09.15
+     2 04:25:09.154
+    2 04:25:09.1540
+   2 04:25:09.15395
+  2 04:25:09.153950
+ 54:49
+  54:49
+   54:49
+ 54:49:27
+  54:49:27
+   54:49:27
+ 54:49:27.1
+    54:49:27
+  54:49:27.1
+ 54:49:27.11
+     54:49:27
+   54:49:27.1
+  54:49:27.11
+ 54:49:27.105
+      54:49:27
+    54:49:27.1
+   54:49:27.11
+  54:49:27.105
+ 54:49:27.1053
+       54:49:27
+     54:49:27.1
+    54:49:27.11
+   54:49:27.105
+  54:49:27.1053
+ 54:49:27.10533
+        54:49:27
+      54:49:27.1
+     54:49:27.11
+    54:49:27.105
+   54:49:27.1053
+  54:49:27.10533
+ 54:49:27.105330
+  2 06:49
+   2 06:49
+ 2 06:49:27
+  2 06:49:27
+   2 06:49:27
+    2 06:49:27
+  2 06:49:27.1
+     2 06:49:27
+   2 06:49:27.1
+  2 06:49:27.11
+      2 06:49:27
+    2 06:49:27.1
+   2 06:49:27.11
+  2 06:49:27.105
+       2 06:49:27
+     2 06:49:27.1
+    2 06:49:27.11
+   2 06:49:27.105
+  2 06:49:27.1053
+        2 06:49:27
+      2 06:49:27.1
+     2 06:49:27.11
+    2 06:49:27.105
+   2 06:49:27.1053
+  2 06:49:27.10533
+         2 06:49:27
+       2 06:49:27.1
+      2 06:49:27.11
+     2 06:49:27.105
+    2 06:49:27.1053
+   2 06:49:27.10533
+  2 06:49:27.105330
+ 50:57
+  50:57
+   50:57
+ 50:57:52
+  50:57:52
+   50:57:52
+ 50:57:52.5
+    50:57:52
+  50:57:52.5
+ 50:57:52.48
+     50:57:52
+   50:57:52.5
+  50:57:52.48
+ 50:57:52.482
+      50:57:52
+    50:57:52.5
+   50:57:52.48
+  50:57:52.482
+ 50:57:52.4823
+       50:57:52
+     50:57:52.5
+    50:57:52.48
+   50:57:52.482
+  50:57:52.4823
+ 50:57:52.48229
+        50:57:52
+      50:57:52.5
+     50:57:52.48
+    50:57:52.482
+   50:57:52.4823
+  50:57:52.48229
+ 50:57:52.482290
+  2 02:57
+   2 02:57
+ 2 02:57:52
+  2 02:57:52
+   2 02:57:52
+    2 02:57:52
+  2 02:57:52.5
+     2 02:57:52
+   2 02:57:52.5
+  2 02:57:52.48
+      2 02:57:52
+    2 02:57:52.5
+   2 02:57:52.48
+  2 02:57:52.482
+       2 02:57:52
+     2 02:57:52.5
+    2 02:57:52.48
+   2 02:57:52.482
+  2 02:57:52.4823
+        2 02:57:52
+      2 02:57:52.5
+     2 02:57:52.48
+    2 02:57:52.482
+   2 02:57:52.4823
+  2 02:57:52.48229
+         2 02:57:52
+       2 02:57:52.5
+      2 02:57:52.48
+     2 02:57:52.482
+    2 02:57:52.4823
+   2 02:57:52.48229
+  2 02:57:52.482290
+ 64:45
+  64:45
+   64:45
+ 64:45:44
+  64:45:44
+   64:45:44
+ 64:45:44.7
+    64:45:44
+  64:45:44.7
+ 64:45:44.66
+     64:45:44
+   64:45:44.7
+  64:45:44.66
+ 64:45:44.658
+      64:45:44
+    64:45:44.7
+   64:45:44.66
+  64:45:44.658
+ 64:45:44.6583
+       64:45:44
+     64:45:44.7
+    64:45:44.66
+   64:45:44.658
+  64:45:44.6583
+ 64:45:44.65827
+        64:45:44
+      64:45:44.7
+     64:45:44.66
+    64:45:44.658
+   64:45:44.6583
+  64:45:44.65827
+ 64:45:44.658270
+  2 16:45
+   2 16:45
+ 2 16:45:44
+  2 16:45:44
+   2 16:45:44
+    2 16:45:44
+  2 16:45:44.7
+     2 16:45:44
+   2 16:45:44.7
+  2 16:45:44.66
+      2 16:45:44
+    2 16:45:44.7
+   2 16:45:44.66
+  2 16:45:44.658
+       2 16:45:44
+     2 16:45:44.7
+    2 16:45:44.66
+   2 16:45:44.658
+  2 16:45:44.6583
+        2 16:45:44
+      2 16:45:44.7
+     2 16:45:44.66
+    2 16:45:44.658
+   2 16:45:44.6583
+  2 16:45:44.65827
+         2 16:45:44
+       2 16:45:44.7
+      2 16:45:44.66
+     2 16:45:44.658
+    2 16:45:44.6583
+   2 16:45:44.65827
+  2 16:45:44.658270
+ 69:30
+  69:30
+   69:30
+ 69:30:57
+  69:30:57
+   69:30:57
+ 69:30:57.6
+    69:30:57
+  69:30:57.6
+ 69:30:57.58
+     69:30:57
+   69:30:57.6
+  69:30:57.58
+ 69:30:57.582
+      69:30:57
+    69:30:57.6
+   69:30:57.58
+  69:30:57.582
+ 69:30:57.5822
+       69:30:57
+     69:30:57.6
+    69:30:57.58
+   69:30:57.582
+  69:30:57.5822
+ 69:30:57.58219
+        69:30:57
+      69:30:57.6
+     69:30:57.58
+    69:30:57.582
+   69:30:57.5822
+  69:30:57.58219
+ 69:30:57.582190
+  2 21:30
+   2 21:30
+ 2 21:30:57
+  2 21:30:57
+   2 21:30:57
+    2 21:30:57
+  2 21:30:57.6
+     2 21:30:57
+   2 21:30:57.6
+  2 21:30:57.58
+      2 21:30:57
+    2 21:30:57.6
+   2 21:30:57.58
+  2 21:30:57.582
+       2 21:30:57
+     2 21:30:57.6
+    2 21:30:57.58
+   2 21:30:57.582
+  2 21:30:57.5822
+        2 21:30:57
+      2 21:30:57.6
+     2 21:30:57.58
+    2 21:30:57.582
+   2 21:30:57.5822
+  2 21:30:57.58219
+         2 21:30:57
+       2 21:30:57.6
+      2 21:30:57.58
+     2 21:30:57.582
+    2 21:30:57.5822
+   2 21:30:57.58219
+  2 21:30:57.582190
+ 70:30
+  70:30
+   70:30
+ 70:30:04
+  70:30:04
+   70:30:04
+ 70:30:04.2
+    70:30:04
+  70:30:04.2
+ 70:30:04.18
+     70:30:04
+   70:30:04.2
+  70:30:04.18
+ 70:30:04.183
+      70:30:04
+    70:30:04.2
+   70:30:04.18
+  70:30:04.183
+ 70:30:04.1835
+       70:30:04
+     70:30:04.2
+    70:30:04.18
+   70:30:04.183
+  70:30:04.1835
+ 70:30:04.18347
+        70:30:04
+      70:30:04.2
+     70:30:04.18
+    70:30:04.183
+   70:30:04.1835
+  70:30:04.18347
+ 70:30:04.183470
+  2 22:30
+   2 22:30
+ 2 22:30:04
+  2 22:30:04
+   2 22:30:04
+    2 22:30:04
+  2 22:30:04.2
+     2 22:30:04
+   2 22:30:04.2
+  2 22:30:04.18
+      2 22:30:04
+    2 22:30:04.2
+   2 22:30:04.18
+  2 22:30:04.183
+       2 22:30:04
+     2 22:30:04.2
+    2 22:30:04.18
+   2 22:30:04.183
+  2 22:30:04.1835
+        2 22:30:04
+      2 22:30:04.2
+     2 22:30:04.18
+    2 22:30:04.183
+   2 22:30:04.1835
+  2 22:30:04.18347
+         2 22:30:04
+       2 22:30:04.2
+      2 22:30:04.18
+     2 22:30:04.183
+    2 22:30:04.1835
+   2 22:30:04.18347
+  2 22:30:04.183470
+ 49:56
+  49:56
+   49:56
+ 49:56:51
+  49:56:51
+   49:56:51
+ 49:56:51.6
+    49:56:51
+  49:56:51.6
+ 49:56:51.59
+     49:56:51
+   49:56:51.6
+  49:56:51.59
+ 49:56:51.593
+      49:56:51
+    49:56:51.6
+   49:56:51.59
+  49:56:51.593
+ 49:56:51.5932
+       49:56:51
+     49:56:51.6
+    49:56:51.59
+   49:56:51.593
+  49:56:51.5932
+ 49:56:51.59319
+        49:56:51
+      49:56:51.6
+     49:56:51.59
+    49:56:51.593
+   49:56:51.5932
+  49:56:51.59319
+ 49:56:51.593190
+  2 01:56
+   2 01:56
+ 2 01:56:51
+  2 01:56:51
+   2 01:56:51
+    2 01:56:51
+  2 01:56:51.6
+     2 01:56:51
+   2 01:56:51.6
+  2 01:56:51.59
+      2 01:56:51
+    2 01:56:51.6
+   2 01:56:51.59
+  2 01:56:51.593
+       2 01:56:51
+     2 01:56:51.6
+    2 01:56:51.59
+   2 01:56:51.593
+  2 01:56:51.5932
+        2 01:56:51
+      2 01:56:51.6
+     2 01:56:51.59
+    2 01:56:51.593
+   2 01:56:51.5932
+  2 01:56:51.59319
+         2 01:56:51
+       2 01:56:51.6
+      2 01:56:51.59
+     2 01:56:51.593
+    2 01:56:51.5932
+   2 01:56:51.59319
+  2 01:56:51.593190
+ *****
+ ******
+ 1296:00
+  1296:00
+   1296:00
+ 1296:00:00
+ 1296:00:00
+  1296:00:00
+  1296:00:00
+  1296:00:00
+   1296:00:00
+ 1296:00:00.0
+ 1296:00:00.0
+ 1296:00:00.0
+    1296:00:00
+  1296:00:00.0
+ 1296:00:00.00
+ 1296:00:00.00
+ 1296:00:00.00
+     1296:00:00
+   1296:00:00.0
+  1296:00:00.00
+ 1296:00:00.000
+ 1296:00:00.000
+ 1296:00:00.000
+      1296:00:00
+    1296:00:00.0
+   1296:00:00.00
+  1296:00:00.000
+ 1296:00:00.0000
+ 1296:00:00.0000
+ 1296:00:00.0000
+ 54 00:00
+  54 00:00
+   54 00:00
+ 54 00:00:00
+  54 00:00:00
+   54 00:00:00
+ 54 00:00:00.0
+    54 00:00:00
+  54 00:00:00.0
+ 54 00:00:00.00
+     54 00:00:00
+   54 00:00:00.0
+  54 00:00:00.00
+ 54 00:00:00.000
+      54 00:00:00
+    54 00:00:00.0
+   54 00:00:00.00
+  54 00:00:00.000
+ 54 00:00:00.0000
+       54 00:00:00
+     54 00:00:00.0
+    54 00:00:00.00
+   54 00:00:00.000
+  54 00:00:00.0000
+ 54 00:00:00.00000
+        54 00:00:00
+      54 00:00:00.0
+     54 00:00:00.00
+    54 00:00:00.000
+   54 00:00:00.0000
+  54 00:00:00.00000
+ 54 00:00:00.000000
+ *****
+ ******
+ 1300:50
+  1300:50
+   1300:50
+ 1300:50:38
+ 1300:50:38
+  1300:50:38
+  1300:50:38
+  1300:50:38
+   1300:50:38
+ 1300:50:38.1
+ 1300:50:38.1
+ 1300:50:38.1
+    1300:50:38
+  1300:50:38.1
+ 1300:50:38.12
+ 1300:50:38.12
+ 1300:50:38.12
+     1300:50:38
+   1300:50:38.1
+  1300:50:38.12
+ 1300:50:38.123
+ 1300:50:38.123
+ 1300:50:38.123
+      1300:50:38
+    1300:50:38.1
+   1300:50:38.12
+  1300:50:38.123
+ 1300:50:38.1230
+ 1300:50:38.1230
+ 1300:50:38.1230
+ 54 04:50
+  54 04:50
+   54 04:50
+ 54 04:50:38
+  54 04:50:38
+   54 04:50:38
+ 54 04:50:38.1
+    54 04:50:38
+  54 04:50:38.1
+ 54 04:50:38.12
+     54 04:50:38
+   54 04:50:38.1
+  54 04:50:38.12
+ 54 04:50:38.123
+      54 04:50:38
+    54 04:50:38.1
+   54 04:50:38.12
+  54 04:50:38.123
+ 54 04:50:38.1230
+       54 04:50:38
+     54 04:50:38.1
+    54 04:50:38.12
+   54 04:50:38.123
+  54 04:50:38.1230
+ 54 04:50:38.12301
+        54 04:50:38
+      54 04:50:38.1
+     54 04:50:38.12
+    54 04:50:38.123
+   54 04:50:38.1230
+  54 04:50:38.12301
+ 54 04:50:38.123010
+ *****
+ ******
+ 1308:31
+  1308:31
+   1308:31
+ 1308:31:35
+ 1308:31:35
+  1308:31:35
+  1308:31:35
+  1308:31:35
+   1308:31:35
+ 1308:31:35.2
+ 1308:31:35.2
+ 1308:31:35.2
+    1308:31:35
+  1308:31:35.2
+ 1308:31:35.23
+ 1308:31:35.23
+ 1308:31:35.23
+     1308:31:35
+   1308:31:35.2
+  1308:31:35.23
+ 1308:31:35.235
+ 1308:31:35.235
+ 1308:31:35.235
+      1308:31:35
+    1308:31:35.2
+   1308:31:35.23
+  1308:31:35.235
+ 1308:31:35.2345
+ 1308:31:35.2345
+ 1308:31:35.2345
+ 54 12:31
+  54 12:31
+   54 12:31
+ 54 12:31:35
+  54 12:31:35
+   54 12:31:35
+ 54 12:31:35.2
+    54 12:31:35
+  54 12:31:35.2
+ 54 12:31:35.23
+     54 12:31:35
+   54 12:31:35.2
+  54 12:31:35.23
+ 54 12:31:35.235
+      54 12:31:35
+    54 12:31:35.2
+   54 12:31:35.23
+  54 12:31:35.235
+ 54 12:31:35.2345
+       54 12:31:35
+     54 12:31:35.2
+    54 12:31:35.23
+   54 12:31:35.235
+  54 12:31:35.2345
+ 54 12:31:35.23453
+        54 12:31:35
+      54 12:31:35.2
+     54 12:31:35.23
+    54 12:31:35.235
+   54 12:31:35.2345
+  54 12:31:35.23453
+ 54 12:31:35.234530
+ *****
+ ******
+ 1308:47
+  1308:47
+   1308:47
+ 1308:47:53
+ 1308:47:53
+  1308:47:53
+  1308:47:53
+  1308:47:53
+   1308:47:53
+ 1308:47:53.3
+ 1308:47:53.3
+ 1308:47:53.3
+    1308:47:53
+  1308:47:53.3
+ 1308:47:53.35
+ 1308:47:53.35
+ 1308:47:53.35
+     1308:47:53
+   1308:47:53.3
+  1308:47:53.35
+ 1308:47:53.345
+ 1308:47:53.345
+ 1308:47:53.345
+      1308:47:53
+    1308:47:53.3
+   1308:47:53.35
+  1308:47:53.345
+ 1308:47:53.3450
+ 1308:47:53.3450
+ 1308:47:53.3450
+ 54 12:47
+  54 12:47
+   54 12:47
+ 54 12:47:53
+  54 12:47:53
+   54 12:47:53
+ 54 12:47:53.3
+    54 12:47:53
+  54 12:47:53.3
+ 54 12:47:53.35
+     54 12:47:53
+   54 12:47:53.3
+  54 12:47:53.35
+ 54 12:47:53.345
+      54 12:47:53
+    54 12:47:53.3
+   54 12:47:53.35
+  54 12:47:53.345
+ 54 12:47:53.3450
+       54 12:47:53
+     54 12:47:53.3
+    54 12:47:53.35
+   54 12:47:53.345
+  54 12:47:53.3450
+ 54 12:47:53.34505
+        54 12:47:53
+      54 12:47:53.3
+     54 12:47:53.35
+    54 12:47:53.345
+   54 12:47:53.3450
+  54 12:47:53.34505
+ 54 12:47:53.345050
+ *****
+ ******
+ 1297:26
+  1297:26
+   1297:26
+ 1297:26:00
+ 1297:26:00
+  1297:26:00
+  1297:26:00
+  1297:26:00
+   1297:26:00
+ 1297:26:00.5
+ 1297:26:00.5
+ 1297:26:00.5
+    1297:26:00
+  1297:26:00.5
+ 1297:26:00.46
+ 1297:26:00.46
+ 1297:26:00.46
+     1297:26:00
+   1297:26:00.5
+  1297:26:00.46
+ 1297:26:00.456
+ 1297:26:00.456
+ 1297:26:00.456
+      1297:26:00
+    1297:26:00.5
+   1297:26:00.46
+  1297:26:00.456
+ 1297:26:00.4561
+ 1297:26:00.4561
+ 1297:26:00.4561
+ 54 01:26
+  54 01:26
+   54 01:26
+ 54 01:26:00
+  54 01:26:00
+   54 01:26:00
+ 54 01:26:00.5
+    54 01:26:00
+  54 01:26:00.5
+ 54 01:26:00.46
+     54 01:26:00
+   54 01:26:00.5
+  54 01:26:00.46
+ 54 01:26:00.456
+      54 01:26:00
+    54 01:26:00.5
+   54 01:26:00.46
+  54 01:26:00.456
+ 54 01:26:00.4561
+       54 01:26:00
+     54 01:26:00.5
+    54 01:26:00.46
+   54 01:26:00.456
+  54 01:26:00.4561
+ 54 01:26:00.45615
+        54 01:26:00
+      54 01:26:00.5
+     54 01:26:00.46
+    54 01:26:00.456
+   54 01:26:00.4561
+  54 01:26:00.45615
+ 54 01:26:00.456150
+ *****
+ ******
+ 1316:58
+  1316:58
+   1316:58
+ 1316:58:11
+ 1316:58:11
+  1316:58:11
+  1316:58:11
+  1316:58:11
+   1316:58:11
+ 1316:58:11.6
+ 1316:58:11.6
+ 1316:58:11.6
+    1316:58:11
+  1316:58:11.6
+ 1316:58:11.57
+ 1316:58:11.57
+ 1316:58:11.57
+     1316:58:11
+   1316:58:11.6
+  1316:58:11.57
+ 1316:58:11.567
+ 1316:58:11.567
+ 1316:58:11.567
+      1316:58:11
+    1316:58:11.6
+   1316:58:11.57
+  1316:58:11.567
+ 1316:58:11.5668
+ 1316:58:11.5668
+ 1316:58:11.5668
+ 54 20:58
+  54 20:58
+   54 20:58
+ 54 20:58:11
+  54 20:58:11
+   54 20:58:11
+ 54 20:58:11.6
+    54 20:58:11
+  54 20:58:11.6
+ 54 20:58:11.57
+     54 20:58:11
+   54 20:58:11.6
+  54 20:58:11.57
+ 54 20:58:11.567
+      54 20:58:11
+    54 20:58:11.6
+   54 20:58:11.57
+  54 20:58:11.567
+ 54 20:58:11.5668
+       54 20:58:11
+     54 20:58:11.6
+    54 20:58:11.57
+   54 20:58:11.567
+  54 20:58:11.5668
+ 54 20:58:11.56677
+        54 20:58:11
+      54 20:58:11.6
+     54 20:58:11.57
+    54 20:58:11.567
+   54 20:58:11.5668
+  54 20:58:11.56677
+ 54 20:58:11.566770
+ *****
+ ******
+ 1303:36
+  1303:36
+   1303:36
+ 1303:36:05
+ 1303:36:05
+  1303:36:05
+  1303:36:05
+  1303:36:05
+   1303:36:05
+ 1303:36:05.2
+ 1303:36:05.2
+ 1303:36:05.2
+    1303:36:05
+  1303:36:05.2
+ 1303:36:05.19
+ 1303:36:05.19
+ 1303:36:05.19
+     1303:36:05
+   1303:36:05.2
+  1303:36:05.19
+ 1303:36:05.190
+ 1303:36:05.190
+ 1303:36:05.190
+      1303:36:05
+    1303:36:05.2
+   1303:36:05.19
+  1303:36:05.190
+ 1303:36:05.1896
+ 1303:36:05.1896
+ 1303:36:05.1896
+ 54 07:36
+  54 07:36
+   54 07:36
+ 54 07:36:05
+  54 07:36:05
+   54 07:36:05
+ 54 07:36:05.2
+    54 07:36:05
+  54 07:36:05.2
+ 54 07:36:05.19
+     54 07:36:05
+   54 07:36:05.2
+  54 07:36:05.19
+ 54 07:36:05.190
+      54 07:36:05
+    54 07:36:05.2
+   54 07:36:05.19
+  54 07:36:05.190
+ 54 07:36:05.1896
+       54 07:36:05
+     54 07:36:05.2
+    54 07:36:05.19
+   54 07:36:05.190
+  54 07:36:05.1896
+ 54 07:36:05.18964
+        54 07:36:05
+      54 07:36:05.2
+     54 07:36:05.19
+    54 07:36:05.190
+   54 07:36:05.1896
+  54 07:36:05.18964
+ 54 07:36:05.189640
+ *****
+ ******
+ 1311:43
+  1311:43
+   1311:43
+ 1311:43:49
+ 1311:43:49
+  1311:43:49
+  1311:43:49
+  1311:43:49
+   1311:43:49
+ 1311:43:49.8
+ 1311:43:49.8
+ 1311:43:49.8
+    1311:43:49
+  1311:43:49.8
+ 1311:43:49.83
+ 1311:43:49.83
+ 1311:43:49.83
+     1311:43:49
+   1311:43:49.8
+  1311:43:49.83
+ 1311:43:49.831
+ 1311:43:49.831
+ 1311:43:49.831
+      1311:43:49
+    1311:43:49.8
+   1311:43:49.83
+  1311:43:49.831
+ 1311:43:49.8313
+ 1311:43:49.8313
+ 1311:43:49.8313
+ 54 15:43
+  54 15:43
+   54 15:43
+ 54 15:43:49
+  54 15:43:49
+   54 15:43:49
+ 54 15:43:49.8
+    54 15:43:49
+  54 15:43:49.8
+ 54 15:43:49.83
+     54 15:43:49
+   54 15:43:49.8
+  54 15:43:49.83
+ 54 15:43:49.831
+      54 15:43:49
+    54 15:43:49.8
+   54 15:43:49.83
+  54 15:43:49.831
+ 54 15:43:49.8313
+       54 15:43:49
+     54 15:43:49.8
+    54 15:43:49.83
+   54 15:43:49.831
+  54 15:43:49.8313
+ 54 15:43:49.83132
+        54 15:43:49
+      54 15:43:49.8
+     54 15:43:49.83
+    54 15:43:49.831
+   54 15:43:49.8313
+  54 15:43:49.83132
+ 54 15:43:49.831320
+ *****
+ ******
+ 1300:25
+  1300:25
+   1300:25
+ 1300:25:09
+ 1300:25:09
+  1300:25:09
+  1300:25:09
+  1300:25:09
+   1300:25:09
+ 1300:25:09.0
+ 1300:25:09.0
+ 1300:25:09.0
+    1300:25:09
+  1300:25:09.0
+ 1300:25:09.01
+ 1300:25:09.01
+ 1300:25:09.01
+     1300:25:09
+   1300:25:09.0
+  1300:25:09.01
+ 1300:25:09.013
+ 1300:25:09.013
+ 1300:25:09.013
+      1300:25:09
+    1300:25:09.0
+   1300:25:09.01
+  1300:25:09.013
+ 1300:25:09.0129
+ 1300:25:09.0129
+ 1300:25:09.0129
+ 54 04:25
+  54 04:25
+   54 04:25
+ 54 04:25:09
+  54 04:25:09
+   54 04:25:09
+ 54 04:25:09.0
+    54 04:25:09
+  54 04:25:09.0
+ 54 04:25:09.01
+     54 04:25:09
+   54 04:25:09.0
+  54 04:25:09.01
+ 54 04:25:09.013
+      54 04:25:09
+    54 04:25:09.0
+   54 04:25:09.01
+  54 04:25:09.013
+ 54 04:25:09.0129
+       54 04:25:09
+     54 04:25:09.0
+    54 04:25:09.01
+   54 04:25:09.013
+  54 04:25:09.0129
+ 54 04:25:09.01293
+        54 04:25:09
+      54 04:25:09.0
+     54 04:25:09.01
+    54 04:25:09.013
+   54 04:25:09.0129
+  54 04:25:09.01293
+ 54 04:25:09.012930
+ *****
+ ******
+ 1302:49
+  1302:49
+   1302:49
+ 1302:49:27
+ 1302:49:27
+  1302:49:27
+  1302:49:27
+  1302:49:27
+   1302:49:27
+ 1302:49:27.5
+ 1302:49:27.5
+ 1302:49:27.5
+    1302:49:27
+  1302:49:27.5
+ 1302:49:27.52
+ 1302:49:27.52
+ 1302:49:27.52
+     1302:49:27
+   1302:49:27.5
+  1302:49:27.52
+ 1302:49:27.524
+ 1302:49:27.524
+ 1302:49:27.524
+      1302:49:27
+    1302:49:27.5
+   1302:49:27.52
+  1302:49:27.524
+ 1302:49:27.5237
+ 1302:49:27.5237
+ 1302:49:27.5237
+ 54 06:49
+  54 06:49
+   54 06:49
+ 54 06:49:27
+  54 06:49:27
+   54 06:49:27
+ 54 06:49:27.5
+    54 06:49:27
+  54 06:49:27.5
+ 54 06:49:27.52
+     54 06:49:27
+   54 06:49:27.5
+  54 06:49:27.52
+ 54 06:49:27.524
+      54 06:49:27
+    54 06:49:27.5
+   54 06:49:27.52
+  54 06:49:27.524
+ 54 06:49:27.5237
+       54 06:49:27
+     54 06:49:27.5
+    54 06:49:27.52
+   54 06:49:27.524
+  54 06:49:27.5237
+ 54 06:49:27.52375
+        54 06:49:27
+      54 06:49:27.5
+     54 06:49:27.52
+    54 06:49:27.524
+   54 06:49:27.5237
+  54 06:49:27.52375
+ 54 06:49:27.523750
+ *****
+ ******
+ 1298:57
+  1298:57
+   1298:57
+ 1298:57:52
+ 1298:57:52
+  1298:57:52
+  1298:57:52
+  1298:57:52
+   1298:57:52
+ 1298:57:52.0
+ 1298:57:52.0
+ 1298:57:52.0
+    1298:57:52
+  1298:57:52.0
+ 1298:57:52.02
+ 1298:57:52.02
+ 1298:57:52.02
+     1298:57:52
+   1298:57:52.0
+  1298:57:52.02
+ 1298:57:52.016
+ 1298:57:52.016
+ 1298:57:52.016
+      1298:57:52
+    1298:57:52.0
+   1298:57:52.02
+  1298:57:52.016
+ 1298:57:52.0157
+ 1298:57:52.0157
+ 1298:57:52.0157
+ 54 02:57
+  54 02:57
+   54 02:57
+ 54 02:57:52
+  54 02:57:52
+   54 02:57:52
+ 54 02:57:52.0
+    54 02:57:52
+  54 02:57:52.0
+ 54 02:57:52.02
+     54 02:57:52
+   54 02:57:52.0
+  54 02:57:52.02
+ 54 02:57:52.016
+      54 02:57:52
+    54 02:57:52.0
+   54 02:57:52.02
+  54 02:57:52.016
+ 54 02:57:52.0157
+       54 02:57:52
+     54 02:57:52.0
+    54 02:57:52.02
+   54 02:57:52.016
+  54 02:57:52.0157
+ 54 02:57:52.01565
+        54 02:57:52
+      54 02:57:52.0
+     54 02:57:52.02
+    54 02:57:52.016
+   54 02:57:52.0157
+  54 02:57:52.01565
+ 54 02:57:52.015650
+ *****
+ ******
+ 1312:45
+  1312:45
+   1312:45
+ 1312:45:44
+ 1312:45:44
+  1312:45:44
+  1312:45:44
+  1312:45:44
+   1312:45:44
+ 1312:45:44.9
+ 1312:45:44.9
+ 1312:45:44.9
+    1312:45:44
+  1312:45:44.9
+ 1312:45:44.87
+ 1312:45:44.87
+ 1312:45:44.87
+     1312:45:44
+   1312:45:44.9
+  1312:45:44.87
+ 1312:45:44.865
+ 1312:45:44.865
+ 1312:45:44.865
+      1312:45:44
+    1312:45:44.9
+   1312:45:44.87
+  1312:45:44.865
+ 1312:45:44.8653
+ 1312:45:44.8653
+ 1312:45:44.8653
+ 54 16:45
+  54 16:45
+   54 16:45
+ 54 16:45:44
+  54 16:45:44
+   54 16:45:44
+ 54 16:45:44.9
+    54 16:45:44
+  54 16:45:44.9
+ 54 16:45:44.87
+     54 16:45:44
+   54 16:45:44.9
+  54 16:45:44.87
+ 54 16:45:44.865
+      54 16:45:44
+    54 16:45:44.9
+   54 16:45:44.87
+  54 16:45:44.865
+ 54 16:45:44.8653
+       54 16:45:44
+     54 16:45:44.9
+    54 16:45:44.87
+   54 16:45:44.865
+  54 16:45:44.8653
+ 54 16:45:44.86529
+        54 16:45:44
+      54 16:45:44.9
+     54 16:45:44.87
+    54 16:45:44.865
+   54 16:45:44.8653
+  54 16:45:44.86529
+ 54 16:45:44.865290
+ *****
+ ******
+ 1317:30
+  1317:30
+   1317:30
+ 1317:30:57
+ 1317:30:57
+  1317:30:57
+  1317:30:57
+  1317:30:57
+   1317:30:57
+ 1317:30:57.8
+ 1317:30:57.8
+ 1317:30:57.8
+    1317:30:57
+  1317:30:57.8
+ 1317:30:57.82
+ 1317:30:57.82
+ 1317:30:57.82
+     1317:30:57
+   1317:30:57.8
+  1317:30:57.82
+ 1317:30:57.820
+ 1317:30:57.820
+ 1317:30:57.820
+      1317:30:57
+    1317:30:57.8
+   1317:30:57.82
+  1317:30:57.820
+ 1317:30:57.8205
+ 1317:30:57.8205
+ 1317:30:57.8205
+ 54 21:30
+  54 21:30
+   54 21:30
+ 54 21:30:57
+  54 21:30:57
+   54 21:30:57
+ 54 21:30:57.8
+    54 21:30:57
+  54 21:30:57.8
+ 54 21:30:57.82
+     54 21:30:57
+   54 21:30:57.8
+  54 21:30:57.82
+ 54 21:30:57.820
+      54 21:30:57
+    54 21:30:57.8
+   54 21:30:57.82
+  54 21:30:57.820
+ 54 21:30:57.8205
+       54 21:30:57
+     54 21:30:57.8
+    54 21:30:57.82
+   54 21:30:57.820
+  54 21:30:57.8205
+ 54 21:30:57.82047
+        54 21:30:57
+      54 21:30:57.8
+     54 21:30:57.82
+    54 21:30:57.820
+   54 21:30:57.8205
+  54 21:30:57.82047
+ 54 21:30:57.820470
+ *****
+ ******
+ 1300:25
+  1300:25
+   1300:25
+ 1300:25:09
+ 1300:25:09
+  1300:25:09
+  1300:25:09
+  1300:25:09
+   1300:25:09
+ 1300:25:09.2
+ 1300:25:09.2
+ 1300:25:09.2
+    1300:25:09
+  1300:25:09.2
+ 1300:25:09.15
+ 1300:25:09.15
+ 1300:25:09.15
+     1300:25:09
+   1300:25:09.2
+  1300:25:09.15
+ 1300:25:09.154
+ 1300:25:09.154
+ 1300:25:09.154
+      1300:25:09
+    1300:25:09.2
+   1300:25:09.15
+  1300:25:09.154
+ 1300:25:09.1540
+ 1300:25:09.1540
+ 1300:25:09.1540
+ 54 04:25
+  54 04:25
+   54 04:25
+ 54 04:25:09
+  54 04:25:09
+   54 04:25:09
+ 54 04:25:09.2
+    54 04:25:09
+  54 04:25:09.2
+ 54 04:25:09.15
+     54 04:25:09
+   54 04:25:09.2
+  54 04:25:09.15
+ 54 04:25:09.154
+      54 04:25:09
+    54 04:25:09.2
+   54 04:25:09.15
+  54 04:25:09.154
+ 54 04:25:09.1540
+       54 04:25:09
+     54 04:25:09.2
+    54 04:25:09.15
+   54 04:25:09.154
+  54 04:25:09.1540
+ 54 04:25:09.15395
+        54 04:25:09
+      54 04:25:09.2
+     54 04:25:09.15
+    54 04:25:09.154
+   54 04:25:09.1540
+  54 04:25:09.15395
+ 54 04:25:09.153950
+ *****
+ ******
+ 1302:49
+  1302:49
+   1302:49
+ 1302:49:27
+ 1302:49:27
+  1302:49:27
+  1302:49:27
+  1302:49:27
+   1302:49:27
+ 1302:49:27.1
+ 1302:49:27.1
+ 1302:49:27.1
+    1302:49:27
+  1302:49:27.1
+ 1302:49:27.11
+ 1302:49:27.11
+ 1302:49:27.11
+     1302:49:27
+   1302:49:27.1
+  1302:49:27.11
+ 1302:49:27.105
+ 1302:49:27.105
+ 1302:49:27.105
+      1302:49:27
+    1302:49:27.1
+   1302:49:27.11
+  1302:49:27.105
+ 1302:49:27.1053
+ 1302:49:27.1053
+ 1302:49:27.1053
+ 54 06:49
+  54 06:49
+   54 06:49
+ 54 06:49:27
+  54 06:49:27
+   54 06:49:27
+ 54 06:49:27.1
+    54 06:49:27
+  54 06:49:27.1
+ 54 06:49:27.11
+     54 06:49:27
+   54 06:49:27.1
+  54 06:49:27.11
+ 54 06:49:27.105
+      54 06:49:27
+    54 06:49:27.1
+   54 06:49:27.11
+  54 06:49:27.105
+ 54 06:49:27.1053
+       54 06:49:27
+     54 06:49:27.1
+    54 06:49:27.11
+   54 06:49:27.105
+  54 06:49:27.1053
+ 54 06:49:27.10533
+        54 06:49:27
+      54 06:49:27.1
+     54 06:49:27.11
+    54 06:49:27.105
+   54 06:49:27.1053
+  54 06:49:27.10533
+ 54 06:49:27.105330
+ *****
+ ******
+ 1298:57
+  1298:57
+   1298:57
+ 1298:57:52
+ 1298:57:52
+  1298:57:52
+  1298:57:52
+  1298:57:52
+   1298:57:52
+ 1298:57:52.5
+ 1298:57:52.5
+ 1298:57:52.5
+    1298:57:52
+  1298:57:52.5
+ 1298:57:52.48
+ 1298:57:52.48
+ 1298:57:52.48
+     1298:57:52
+   1298:57:52.5
+  1298:57:52.48
+ 1298:57:52.482
+ 1298:57:52.482
+ 1298:57:52.482
+      1298:57:52
+    1298:57:52.5
+   1298:57:52.48
+  1298:57:52.482
+ 1298:57:52.4823
+ 1298:57:52.4823
+ 1298:57:52.4823
+ 54 02:57
+  54 02:57
+   54 02:57
+ 54 02:57:52
+  54 02:57:52
+   54 02:57:52
+ 54 02:57:52.5
+    54 02:57:52
+  54 02:57:52.5
+ 54 02:57:52.48
+     54 02:57:52
+   54 02:57:52.5
+  54 02:57:52.48
+ 54 02:57:52.482
+      54 02:57:52
+    54 02:57:52.5
+   54 02:57:52.48
+  54 02:57:52.482
+ 54 02:57:52.4823
+       54 02:57:52
+     54 02:57:52.5
+    54 02:57:52.48
+   54 02:57:52.482
+  54 02:57:52.4823
+ 54 02:57:52.48229
+        54 02:57:52
+      54 02:57:52.5
+     54 02:57:52.48
+    54 02:57:52.482
+   54 02:57:52.4823
+  54 02:57:52.48229
+ 54 02:57:52.482290
+ *****
+ ******
+ 1312:45
+  1312:45
+   1312:45
+ 1312:45:44
+ 1312:45:44
+  1312:45:44
+  1312:45:44
+  1312:45:44
+   1312:45:44
+ 1312:45:44.7
+ 1312:45:44.7
+ 1312:45:44.7
+    1312:45:44
+  1312:45:44.7
+ 1312:45:44.66
+ 1312:45:44.66
+ 1312:45:44.66
+     1312:45:44
+   1312:45:44.7
+  1312:45:44.66
+ 1312:45:44.658
+ 1312:45:44.658
+ 1312:45:44.658
+      1312:45:44
+    1312:45:44.7
+   1312:45:44.66
+  1312:45:44.658
+ 1312:45:44.6583
+ 1312:45:44.6583
+ 1312:45:44.6583
+ 54 16:45
+  54 16:45
+   54 16:45
+ 54 16:45:44
+  54 16:45:44
+   54 16:45:44
+ 54 16:45:44.7
+    54 16:45:44
+  54 16:45:44.7
+ 54 16:45:44.66
+     54 16:45:44
+   54 16:45:44.7
+  54 16:45:44.66
+ 54 16:45:44.658
+      54 16:45:44
+    54 16:45:44.7
+   54 16:45:44.66
+  54 16:45:44.658
+ 54 16:45:44.6583
+       54 16:45:44
+     54 16:45:44.7
+    54 16:45:44.66
+   54 16:45:44.658
+  54 16:45:44.6583
+ 54 16:45:44.65827
+        54 16:45:44
+      54 16:45:44.7
+     54 16:45:44.66
+    54 16:45:44.658
+   54 16:45:44.6583
+  54 16:45:44.65827
+ 54 16:45:44.658270
+ *****
+ ******
+ 1317:30
+  1317:30
+   1317:30
+ 1317:30:57
+ 1317:30:57
+  1317:30:57
+  1317:30:57
+  1317:30:57
+   1317:30:57
+ 1317:30:57.6
+ 1317:30:57.6
+ 1317:30:57.6
+    1317:30:57
+  1317:30:57.6
+ 1317:30:57.58
+ 1317:30:57.58
+ 1317:30:57.58
+     1317:30:57
+   1317:30:57.6
+  1317:30:57.58
+ 1317:30:57.582
+ 1317:30:57.582
+ 1317:30:57.582
+      1317:30:57
+    1317:30:57.6
+   1317:30:57.58
+  1317:30:57.582
+ 1317:30:57.5822
+ 1317:30:57.5822
+ 1317:30:57.5822
+ 54 21:30
+  54 21:30
+   54 21:30
+ 54 21:30:57
+  54 21:30:57
+   54 21:30:57
+ 54 21:30:57.6
+    54 21:30:57
+  54 21:30:57.6
+ 54 21:30:57.58
+     54 21:30:57
+   54 21:30:57.6
+  54 21:30:57.58
+ 54 21:30:57.582
+      54 21:30:57
+    54 21:30:57.6
+   54 21:30:57.58
+  54 21:30:57.582
+ 54 21:30:57.5822
+       54 21:30:57
+     54 21:30:57.6
+    54 21:30:57.58
+   54 21:30:57.582
+  54 21:30:57.5822
+ 54 21:30:57.58219
+        54 21:30:57
+      54 21:30:57.6
+     54 21:30:57.58
+    54 21:30:57.582
+   54 21:30:57.5822
+  54 21:30:57.58219
+ 54 21:30:57.582190
+ *****
+ ******
+ 1318:30
+  1318:30
+   1318:30
+ 1318:30:04
+ 1318:30:04
+  1318:30:04
+  1318:30:04
+  1318:30:04
+   1318:30:04
+ 1318:30:04.2
+ 1318:30:04.2
+ 1318:30:04.2
+    1318:30:04
+  1318:30:04.2
+ 1318:30:04.18
+ 1318:30:04.18
+ 1318:30:04.18
+     1318:30:04
+   1318:30:04.2
+  1318:30:04.18
+ 1318:30:04.183
+ 1318:30:04.183
+ 1318:30:04.183
+      1318:30:04
+    1318:30:04.2
+   1318:30:04.18
+  1318:30:04.183
+ 1318:30:04.1835
+ 1318:30:04.1835
+ 1318:30:04.1835
+ 54 22:30
+  54 22:30
+   54 22:30
+ 54 22:30:04
+  54 22:30:04
+   54 22:30:04
+ 54 22:30:04.2
+    54 22:30:04
+  54 22:30:04.2
+ 54 22:30:04.18
+     54 22:30:04
+   54 22:30:04.2
+  54 22:30:04.18
+ 54 22:30:04.183
+      54 22:30:04
+    54 22:30:04.2
+   54 22:30:04.18
+  54 22:30:04.183
+ 54 22:30:04.1835
+       54 22:30:04
+     54 22:30:04.2
+    54 22:30:04.18
+   54 22:30:04.183
+  54 22:30:04.1835
+ 54 22:30:04.18347
+        54 22:30:04
+      54 22:30:04.2
+     54 22:30:04.18
+    54 22:30:04.183
+   54 22:30:04.1835
+  54 22:30:04.18347
+ 54 22:30:04.183470
+ *****
+ ******
+ 1297:56
+  1297:56
+   1297:56
+ 1297:56:51
+ 1297:56:51
+  1297:56:51
+  1297:56:51
+  1297:56:51
+   1297:56:51
+ 1297:56:51.6
+ 1297:56:51.6
+ 1297:56:51.6
+    1297:56:51
+  1297:56:51.6
+ 1297:56:51.59
+ 1297:56:51.59
+ 1297:56:51.59
+     1297:56:51
+   1297:56:51.6
+  1297:56:51.59
+ 1297:56:51.593
+ 1297:56:51.593
+ 1297:56:51.593
+      1297:56:51
+    1297:56:51.6
+   1297:56:51.59
+  1297:56:51.593
+ 1297:56:51.5932
+ 1297:56:51.5932
+ 1297:56:51.5932
+ 54 01:56
+  54 01:56
+   54 01:56
+ 54 01:56:51
+  54 01:56:51
+   54 01:56:51
+ 54 01:56:51.6
+    54 01:56:51
+  54 01:56:51.6
+ 54 01:56:51.59
+     54 01:56:51
+   54 01:56:51.6
+  54 01:56:51.59
+ 54 01:56:51.593
+      54 01:56:51
+    54 01:56:51.6
+   54 01:56:51.59
+  54 01:56:51.593
+ 54 01:56:51.5932
+       54 01:56:51
+     54 01:56:51.6
+    54 01:56:51.59
+   54 01:56:51.593
+  54 01:56:51.5932
+ 54 01:56:51.59319
+        54 01:56:51
+      54 01:56:51.6
+     54 01:56:51.59
+    54 01:56:51.593
+   54 01:56:51.5932
+  54 01:56:51.59319
+ 54 01:56:51.593190
+ *****
+ ******
+ *******
+ 16344:00
+  16344:00
+   16344:00
+   16344:00
+ 16344:00:00
+ 16344:00:00
+ 16344:00:00
+  16344:00:00
+  16344:00:00
+  16344:00:00
+  16344:00:00
+   16344:00:00
+ 16344:00:00.0
+ 16344:00:00.0
+ 16344:00:00.0
+ 16344:00:00.0
+    16344:00:00
+  16344:00:00.0
+ 16344:00:00.00
+ 16344:00:00.00
+ 16344:00:00.00
+ 16344:00:00.00
+     16344:00:00
+   16344:00:00.0
+  16344:00:00.00
+ 16344:00:00.000
+ 16344:00:00.000
+ 16344:00:00.000
+ 16344:00:00.000
+ ********
+ 681 00:00
+  681 00:00
+   681 00:00
+ 681 00:00:00
+  681 00:00:00
+  681 00:00:00
+   681 00:00:00
+ 681 00:00:00.0
+ 681 00:00:00.0
+    681 00:00:00
+  681 00:00:00.0
+ 681 00:00:00.00
+ 681 00:00:00.00
+     681 00:00:00
+   681 00:00:00.0
+  681 00:00:00.00
+ 681 00:00:00.000
+ 681 00:00:00.000
+      681 00:00:00
+    681 00:00:00.0
+   681 00:00:00.00
+  681 00:00:00.000
+ 681 00:00:00.0000
+ 681 00:00:00.0000
+       681 00:00:00
+     681 00:00:00.0
+    681 00:00:00.00
+   681 00:00:00.000
+  681 00:00:00.0000
+ 681 00:00:00.00000
+ 681 00:00:00.00000
+ *****
+ ******
+ *******
+ 16348:50
+  16348:50
+   16348:50
+   16348:50
+ 16348:50:38
+ 16348:50:38
+ 16348:50:38
+  16348:50:38
+  16348:50:38
+  16348:50:38
+  16348:50:38
+   16348:50:38
+ 16348:50:38.1
+ 16348:50:38.1
+ 16348:50:38.1
+ 16348:50:38.1
+    16348:50:38
+  16348:50:38.1
+ 16348:50:38.12
+ 16348:50:38.12
+ 16348:50:38.12
+ 16348:50:38.12
+     16348:50:38
+   16348:50:38.1
+  16348:50:38.12
+ 16348:50:38.123
+ 16348:50:38.123
+ 16348:50:38.123
+ 16348:50:38.123
+ ********
+ 681 04:50
+  681 04:50
+   681 04:50
+ 681 04:50:38
+  681 04:50:38
+  681 04:50:38
+   681 04:50:38
+ 681 04:50:38.1
+ 681 04:50:38.1
+    681 04:50:38
+  681 04:50:38.1
+ 681 04:50:38.12
+ 681 04:50:38.12
+     681 04:50:38
+   681 04:50:38.1
+  681 04:50:38.12
+ 681 04:50:38.123
+ 681 04:50:38.123
+      681 04:50:38
+    681 04:50:38.1
+   681 04:50:38.12
+  681 04:50:38.123
+ 681 04:50:38.1230
+ 681 04:50:38.1230
+       681 04:50:38
+     681 04:50:38.1
+    681 04:50:38.12
+   681 04:50:38.123
+  681 04:50:38.1230
+ 681 04:50:38.12301
+ 681 04:50:38.12301
+ *****
+ ******
+ *******
+ 16356:31
+  16356:31
+   16356:31
+   16356:31
+ 16356:31:35
+ 16356:31:35
+ 16356:31:35
+  16356:31:35
+  16356:31:35
+  16356:31:35
+  16356:31:35
+   16356:31:35
+ 16356:31:35.2
+ 16356:31:35.2
+ 16356:31:35.2
+ 16356:31:35.2
+    16356:31:35
+  16356:31:35.2
+ 16356:31:35.23
+ 16356:31:35.23
+ 16356:31:35.23
+ 16356:31:35.23
+     16356:31:35
+   16356:31:35.2
+  16356:31:35.23
+ 16356:31:35.235
+ 16356:31:35.235
+ 16356:31:35.235
+ 16356:31:35.235
+ ********
+ 681 12:31
+  681 12:31
+   681 12:31
+ 681 12:31:35
+  681 12:31:35
+  681 12:31:35
+   681 12:31:35
+ 681 12:31:35.2
+ 681 12:31:35.2
+    681 12:31:35
+  681 12:31:35.2
+ 681 12:31:35.23
+ 681 12:31:35.23
+     681 12:31:35
+   681 12:31:35.2
+  681 12:31:35.23
+ 681 12:31:35.235
+ 681 12:31:35.235
+      681 12:31:35
+    681 12:31:35.2
+   681 12:31:35.23
+  681 12:31:35.235
+ 681 12:31:35.2345
+ 681 12:31:35.2345
+       681 12:31:35
+     681 12:31:35.2
+    681 12:31:35.23
+   681 12:31:35.235
+  681 12:31:35.2345
+ 681 12:31:35.23453
+ 681 12:31:35.23453
+ *****
+ ******
+ *******
+ 16356:47
+  16356:47
+   16356:47
+   16356:47
+ 16356:47:53
+ 16356:47:53
+ 16356:47:53
+  16356:47:53
+  16356:47:53
+  16356:47:53
+  16356:47:53
+   16356:47:53
+ 16356:47:53.3
+ 16356:47:53.3
+ 16356:47:53.3
+ 16356:47:53.3
+    16356:47:53
+  16356:47:53.3
+ 16356:47:53.35
+ 16356:47:53.35
+ 16356:47:53.35
+ 16356:47:53.35
+     16356:47:53
+   16356:47:53.3
+  16356:47:53.35
+ 16356:47:53.345
+ 16356:47:53.345
+ 16356:47:53.345
+ 16356:47:53.345
+ ********
+ 681 12:47
+  681 12:47
+   681 12:47
+ 681 12:47:53
+  681 12:47:53
+  681 12:47:53
+   681 12:47:53
+ 681 12:47:53.3
+ 681 12:47:53.3
+    681 12:47:53
+  681 12:47:53.3
+ 681 12:47:53.35
+ 681 12:47:53.35
+     681 12:47:53
+   681 12:47:53.3
+  681 12:47:53.35
+ 681 12:47:53.345
+ 681 12:47:53.345
+      681 12:47:53
+    681 12:47:53.3
+   681 12:47:53.35
+  681 12:47:53.345
+ 681 12:47:53.3450
+ 681 12:47:53.3450
+       681 12:47:53
+     681 12:47:53.3
+    681 12:47:53.35
+   681 12:47:53.345
+  681 12:47:53.3450
+ 681 12:47:53.34505
+ 681 12:47:53.34505
+ *****
+ ******
+ *******
+ 16345:26
+  16345:26
+   16345:26
+   16345:26
+ 16345:26:00
+ 16345:26:00
+ 16345:26:00
+  16345:26:00
+  16345:26:00
+  16345:26:00
+  16345:26:00
+   16345:26:00
+ 16345:26:00.5
+ 16345:26:00.5
+ 16345:26:00.5
+ 16345:26:00.5
+    16345:26:00
+  16345:26:00.5
+ 16345:26:00.46
+ 16345:26:00.46
+ 16345:26:00.46
+ 16345:26:00.46
+     16345:26:00
+   16345:26:00.5
+  16345:26:00.46
+ 16345:26:00.456
+ 16345:26:00.456
+ 16345:26:00.456
+ 16345:26:00.456
+ ********
+ 681 01:26
+  681 01:26
+   681 01:26
+ 681 01:26:00
+  681 01:26:00
+  681 01:26:00
+   681 01:26:00
+ 681 01:26:00.5
+ 681 01:26:00.5
+    681 01:26:00
+  681 01:26:00.5
+ 681 01:26:00.46
+ 681 01:26:00.46
+     681 01:26:00
+   681 01:26:00.5
+  681 01:26:00.46
+ 681 01:26:00.456
+ 681 01:26:00.456
+      681 01:26:00
+    681 01:26:00.5
+   681 01:26:00.46
+  681 01:26:00.456
+ 681 01:26:00.4562
+ 681 01:26:00.4562
+       681 01:26:00
+     681 01:26:00.5
+    681 01:26:00.46
+   681 01:26:00.456
+  681 01:26:00.4562
+ 681 01:26:00.45615
+ 681 01:26:00.45615
+ *****
+ ******
+ *******
+ 16364:58
+  16364:58
+   16364:58
+   16364:58
+ 16364:58:11
+ 16364:58:11
+ 16364:58:11
+  16364:58:11
+  16364:58:11
+  16364:58:11
+  16364:58:11
+   16364:58:11
+ 16364:58:11.6
+ 16364:58:11.6
+ 16364:58:11.6
+ 16364:58:11.6
+    16364:58:11
+  16364:58:11.6
+ 16364:58:11.57
+ 16364:58:11.57
+ 16364:58:11.57
+ 16364:58:11.57
+     16364:58:11
+   16364:58:11.6
+  16364:58:11.57
+ 16364:58:11.567
+ 16364:58:11.567
+ 16364:58:11.567
+ 16364:58:11.567
+ ********
+ 681 20:58
+  681 20:58
+   681 20:58
+ 681 20:58:11
+  681 20:58:11
+  681 20:58:11
+   681 20:58:11
+ 681 20:58:11.6
+ 681 20:58:11.6
+    681 20:58:11
+  681 20:58:11.6
+ 681 20:58:11.57
+ 681 20:58:11.57
+     681 20:58:11
+   681 20:58:11.6
+  681 20:58:11.57
+ 681 20:58:11.567
+ 681 20:58:11.567
+      681 20:58:11
+    681 20:58:11.6
+   681 20:58:11.57
+  681 20:58:11.567
+ 681 20:58:11.5668
+ 681 20:58:11.5668
+       681 20:58:11
+     681 20:58:11.6
+    681 20:58:11.57
+   681 20:58:11.567
+  681 20:58:11.5668
+ 681 20:58:11.56677
+ 681 20:58:11.56677
+ *****
+ ******
+ *******
+ 16351:36
+  16351:36
+   16351:36
+   16351:36
+ 16351:36:05
+ 16351:36:05
+ 16351:36:05
+  16351:36:05
+  16351:36:05
+  16351:36:05
+  16351:36:05
+   16351:36:05
+ 16351:36:05.2
+ 16351:36:05.2
+ 16351:36:05.2
+ 16351:36:05.2
+    16351:36:05
+  16351:36:05.2
+ 16351:36:05.19
+ 16351:36:05.19
+ 16351:36:05.19
+ 16351:36:05.19
+     16351:36:05
+   16351:36:05.2
+  16351:36:05.19
+ 16351:36:05.190
+ 16351:36:05.190
+ 16351:36:05.190
+ 16351:36:05.190
+ ********
+ 681 07:36
+  681 07:36
+   681 07:36
+ 681 07:36:05
+  681 07:36:05
+  681 07:36:05
+   681 07:36:05
+ 681 07:36:05.2
+ 681 07:36:05.2
+    681 07:36:05
+  681 07:36:05.2
+ 681 07:36:05.19
+ 681 07:36:05.19
+     681 07:36:05
+   681 07:36:05.2
+  681 07:36:05.19
+ 681 07:36:05.190
+ 681 07:36:05.190
+      681 07:36:05
+    681 07:36:05.2
+   681 07:36:05.19
+  681 07:36:05.190
+ 681 07:36:05.1896
+ 681 07:36:05.1896
+       681 07:36:05
+     681 07:36:05.2
+    681 07:36:05.19
+   681 07:36:05.190
+  681 07:36:05.1896
+ 681 07:36:05.18964
+ 681 07:36:05.18964
+ *****
+ ******
+ *******
+ 16359:43
+  16359:43
+   16359:43
+   16359:43
+ 16359:43:49
+ 16359:43:49
+ 16359:43:49
+  16359:43:49
+  16359:43:49
+  16359:43:49
+  16359:43:49
+   16359:43:49
+ 16359:43:49.8
+ 16359:43:49.8
+ 16359:43:49.8
+ 16359:43:49.8
+    16359:43:49
+  16359:43:49.8
+ 16359:43:49.83
+ 16359:43:49.83
+ 16359:43:49.83
+ 16359:43:49.83
+     16359:43:49
+   16359:43:49.8
+  16359:43:49.83
+ 16359:43:49.831
+ 16359:43:49.831
+ 16359:43:49.831
+ 16359:43:49.831
+ ********
+ 681 15:43
+  681 15:43
+   681 15:43
+ 681 15:43:49
+  681 15:43:49
+  681 15:43:49
+   681 15:43:49
+ 681 15:43:49.8
+ 681 15:43:49.8
+    681 15:43:49
+  681 15:43:49.8
+ 681 15:43:49.83
+ 681 15:43:49.83
+     681 15:43:49
+   681 15:43:49.8
+  681 15:43:49.83
+ 681 15:43:49.831
+ 681 15:43:49.831
+      681 15:43:49
+    681 15:43:49.8
+   681 15:43:49.83
+  681 15:43:49.831
+ 681 15:43:49.8313
+ 681 15:43:49.8313
+       681 15:43:49
+     681 15:43:49.8
+    681 15:43:49.83
+   681 15:43:49.831
+  681 15:43:49.8313
+ 681 15:43:49.83132
+ 681 15:43:49.83132
+ *****
+ ******
+ *******
+ 16348:25
+  16348:25
+   16348:25
+   16348:25
+ 16348:25:09
+ 16348:25:09
+ 16348:25:09
+  16348:25:09
+  16348:25:09
+  16348:25:09
+  16348:25:09
+   16348:25:09
+ 16348:25:09.0
+ 16348:25:09.0
+ 16348:25:09.0
+ 16348:25:09.0
+    16348:25:09
+  16348:25:09.0
+ 16348:25:09.01
+ 16348:25:09.01
+ 16348:25:09.01
+ 16348:25:09.01
+     16348:25:09
+   16348:25:09.0
+  16348:25:09.01
+ 16348:25:09.013
+ 16348:25:09.013
+ 16348:25:09.013
+ 16348:25:09.013
+ ********
+ 681 04:25
+  681 04:25
+   681 04:25
+ 681 04:25:09
+  681 04:25:09
+  681 04:25:09
+   681 04:25:09
+ 681 04:25:09.0
+ 681 04:25:09.0
+    681 04:25:09
+  681 04:25:09.0
+ 681 04:25:09.01
+ 681 04:25:09.01
+     681 04:25:09
+   681 04:25:09.0
+  681 04:25:09.01
+ 681 04:25:09.013
+ 681 04:25:09.013
+      681 04:25:09
+    681 04:25:09.0
+   681 04:25:09.01
+  681 04:25:09.013
+ 681 04:25:09.0129
+ 681 04:25:09.0129
+       681 04:25:09
+     681 04:25:09.0
+    681 04:25:09.01
+   681 04:25:09.013
+  681 04:25:09.0129
+ 681 04:25:09.01293
+ 681 04:25:09.01293
+ *****
+ ******
+ *******
+ 16350:49
+  16350:49
+   16350:49
+   16350:49
+ 16350:49:27
+ 16350:49:27
+ 16350:49:27
+  16350:49:27
+  16350:49:27
+  16350:49:27
+  16350:49:27
+   16350:49:27
+ 16350:49:27.5
+ 16350:49:27.5
+ 16350:49:27.5
+ 16350:49:27.5
+    16350:49:27
+  16350:49:27.5
+ 16350:49:27.52
+ 16350:49:27.52
+ 16350:49:27.52
+ 16350:49:27.52
+     16350:49:27
+   16350:49:27.5
+  16350:49:27.52
+ 16350:49:27.524
+ 16350:49:27.524
+ 16350:49:27.524
+ 16350:49:27.524
+ ********
+ 681 06:49
+  681 06:49
+   681 06:49
+ 681 06:49:27
+  681 06:49:27
+  681 06:49:27
+   681 06:49:27
+ 681 06:49:27.5
+ 681 06:49:27.5
+    681 06:49:27
+  681 06:49:27.5
+ 681 06:49:27.52
+ 681 06:49:27.52
+     681 06:49:27
+   681 06:49:27.5
+  681 06:49:27.52
+ 681 06:49:27.524
+ 681 06:49:27.524
+      681 06:49:27
+    681 06:49:27.5
+   681 06:49:27.52
+  681 06:49:27.524
+ 681 06:49:27.5237
+ 681 06:49:27.5237
+       681 06:49:27
+     681 06:49:27.5
+    681 06:49:27.52
+   681 06:49:27.524
+  681 06:49:27.5237
+ 681 06:49:27.52375
+ 681 06:49:27.52375
+ *****
+ ******
+ *******
+ 16346:57
+  16346:57
+   16346:57
+   16346:57
+ 16346:57:52
+ 16346:57:52
+ 16346:57:52
+  16346:57:52
+  16346:57:52
+  16346:57:52
+  16346:57:52
+   16346:57:52
+ 16346:57:52.0
+ 16346:57:52.0
+ 16346:57:52.0
+ 16346:57:52.0
+    16346:57:52
+  16346:57:52.0
+ 16346:57:52.02
+ 16346:57:52.02
+ 16346:57:52.02
+ 16346:57:52.02
+     16346:57:52
+   16346:57:52.0
+  16346:57:52.02
+ 16346:57:52.016
+ 16346:57:52.016
+ 16346:57:52.016
+ 16346:57:52.016
+ ********
+ 681 02:57
+  681 02:57
+   681 02:57
+ 681 02:57:52
+  681 02:57:52
+  681 02:57:52
+   681 02:57:52
+ 681 02:57:52.0
+ 681 02:57:52.0
+    681 02:57:52
+  681 02:57:52.0
+ 681 02:57:52.02
+ 681 02:57:52.02
+     681 02:57:52
+   681 02:57:52.0
+  681 02:57:52.02
+ 681 02:57:52.016
+ 681 02:57:52.016
+      681 02:57:52
+    681 02:57:52.0
+   681 02:57:52.02
+  681 02:57:52.016
+ 681 02:57:52.0156
+ 681 02:57:52.0156
+       681 02:57:52
+     681 02:57:52.0
+    681 02:57:52.02
+   681 02:57:52.016
+  681 02:57:52.0156
+ 681 02:57:52.01565
+ 681 02:57:52.01565
+ *****
+ ******
+ *******
+ 16360:45
+  16360:45
+   16360:45
+   16360:45
+ 16360:45:44
+ 16360:45:44
+ 16360:45:44
+  16360:45:44
+  16360:45:44
+  16360:45:44
+  16360:45:44
+   16360:45:44
+ 16360:45:44.9
+ 16360:45:44.9
+ 16360:45:44.9
+ 16360:45:44.9
+    16360:45:44
+  16360:45:44.9
+ 16360:45:44.87
+ 16360:45:44.87
+ 16360:45:44.87
+ 16360:45:44.87
+     16360:45:44
+   16360:45:44.9
+  16360:45:44.87
+ 16360:45:44.865
+ 16360:45:44.865
+ 16360:45:44.865
+ 16360:45:44.865
+ ********
+ 681 16:45
+  681 16:45
+   681 16:45
+ 681 16:45:44
+  681 16:45:44
+  681 16:45:44
+   681 16:45:44
+ 681 16:45:44.9
+ 681 16:45:44.9
+    681 16:45:44
+  681 16:45:44.9
+ 681 16:45:44.87
+ 681 16:45:44.87
+     681 16:45:44
+   681 16:45:44.9
+  681 16:45:44.87
+ 681 16:45:44.865
+ 681 16:45:44.865
+      681 16:45:44
+    681 16:45:44.9
+   681 16:45:44.87
+  681 16:45:44.865
+ 681 16:45:44.8653
+ 681 16:45:44.8653
+       681 16:45:44
+     681 16:45:44.9
+    681 16:45:44.87
+   681 16:45:44.865
+  681 16:45:44.8653
+ 681 16:45:44.86529
+ 681 16:45:44.86529
+ *****
+ ******
+ *******
+ 16365:30
+  16365:30
+   16365:30
+   16365:30
+ 16365:30:57
+ 16365:30:57
+ 16365:30:57
+  16365:30:57
+  16365:30:57
+  16365:30:57
+  16365:30:57
+   16365:30:57
+ 16365:30:57.8
+ 16365:30:57.8
+ 16365:30:57.8
+ 16365:30:57.8
+    16365:30:57
+  16365:30:57.8
+ 16365:30:57.82
+ 16365:30:57.82
+ 16365:30:57.82
+ 16365:30:57.82
+     16365:30:57
+   16365:30:57.8
+  16365:30:57.82
+ 16365:30:57.820
+ 16365:30:57.820
+ 16365:30:57.820
+ 16365:30:57.820
+ ********
+ 681 21:30
+  681 21:30
+   681 21:30
+ 681 21:30:57
+  681 21:30:57
+  681 21:30:57
+   681 21:30:57
+ 681 21:30:57.8
+ 681 21:30:57.8
+    681 21:30:57
+  681 21:30:57.8
+ 681 21:30:57.82
+ 681 21:30:57.82
+     681 21:30:57
+   681 21:30:57.8
+  681 21:30:57.82
+ 681 21:30:57.820
+ 681 21:30:57.820
+      681 21:30:57
+    681 21:30:57.8
+   681 21:30:57.82
+  681 21:30:57.820
+ 681 21:30:57.8205
+ 681 21:30:57.8205
+       681 21:30:57
+     681 21:30:57.8
+    681 21:30:57.82
+   681 21:30:57.820
+  681 21:30:57.8205
+ 681 21:30:57.82047
+ 681 21:30:57.82047
+ *****
+ ******
+ *******
+ 16348:25
+  16348:25
+   16348:25
+   16348:25
+ 16348:25:09
+ 16348:25:09
+ 16348:25:09
+  16348:25:09
+  16348:25:09
+  16348:25:09
+  16348:25:09
+   16348:25:09
+ 16348:25:09.2
+ 16348:25:09.2
+ 16348:25:09.2
+ 16348:25:09.2
+    16348:25:09
+  16348:25:09.2
+ 16348:25:09.15
+ 16348:25:09.15
+ 16348:25:09.15
+ 16348:25:09.15
+     16348:25:09
+   16348:25:09.2
+  16348:25:09.15
+ 16348:25:09.154
+ 16348:25:09.154
+ 16348:25:09.154
+ 16348:25:09.154
+ ********
+ 681 04:25
+  681 04:25
+   681 04:25
+ 681 04:25:09
+  681 04:25:09
+  681 04:25:09
+   681 04:25:09
+ 681 04:25:09.2
+ 681 04:25:09.2
+    681 04:25:09
+  681 04:25:09.2
+ 681 04:25:09.15
+ 681 04:25:09.15
+     681 04:25:09
+   681 04:25:09.2
+  681 04:25:09.15
+ 681 04:25:09.154
+ 681 04:25:09.154
+      681 04:25:09
+    681 04:25:09.2
+   681 04:25:09.15
+  681 04:25:09.154
+ 681 04:25:09.1539
+ 681 04:25:09.1539
+       681 04:25:09
+     681 04:25:09.2
+    681 04:25:09.15
+   681 04:25:09.154
+  681 04:25:09.1539
+ 681 04:25:09.15395
+ 681 04:25:09.15395
+ *****
+ ******
+ *******
+ 16350:49
+  16350:49
+   16350:49
+   16350:49
+ 16350:49:27
+ 16350:49:27
+ 16350:49:27
+  16350:49:27
+  16350:49:27
+  16350:49:27
+  16350:49:27
+   16350:49:27
+ 16350:49:27.1
+ 16350:49:27.1
+ 16350:49:27.1
+ 16350:49:27.1
+    16350:49:27
+  16350:49:27.1
+ 16350:49:27.11
+ 16350:49:27.11
+ 16350:49:27.11
+ 16350:49:27.11
+     16350:49:27
+   16350:49:27.1
+  16350:49:27.11
+ 16350:49:27.105
+ 16350:49:27.105
+ 16350:49:27.105
+ 16350:49:27.105
+ ********
+ 681 06:49
+  681 06:49
+   681 06:49
+ 681 06:49:27
+  681 06:49:27
+  681 06:49:27
+   681 06:49:27
+ 681 06:49:27.1
+ 681 06:49:27.1
+    681 06:49:27
+  681 06:49:27.1
+ 681 06:49:27.11
+ 681 06:49:27.11
+     681 06:49:27
+   681 06:49:27.1
+  681 06:49:27.11
+ 681 06:49:27.105
+ 681 06:49:27.105
+      681 06:49:27
+    681 06:49:27.1
+   681 06:49:27.11
+  681 06:49:27.105
+ 681 06:49:27.1053
+ 681 06:49:27.1053
+       681 06:49:27
+     681 06:49:27.1
+    681 06:49:27.11
+   681 06:49:27.105
+  681 06:49:27.1053
+ 681 06:49:27.10533
+ 681 06:49:27.10533
+ *****
+ ******
+ *******
+ 16346:57
+  16346:57
+   16346:57
+   16346:57
+ 16346:57:52
+ 16346:57:52
+ 16346:57:52
+  16346:57:52
+  16346:57:52
+  16346:57:52
+  16346:57:52
+   16346:57:52
+ 16346:57:52.5
+ 16346:57:52.5
+ 16346:57:52.5
+ 16346:57:52.5
+    16346:57:52
+  16346:57:52.5
+ 16346:57:52.48
+ 16346:57:52.48
+ 16346:57:52.48
+ 16346:57:52.48
+     16346:57:52
+   16346:57:52.5
+  16346:57:52.48
+ 16346:57:52.482
+ 16346:57:52.482
+ 16346:57:52.482
+ 16346:57:52.482
+ ********
+ 681 02:57
+  681 02:57
+   681 02:57
+ 681 02:57:52
+  681 02:57:52
+  681 02:57:52
+   681 02:57:52
+ 681 02:57:52.5
+ 681 02:57:52.5
+    681 02:57:52
+  681 02:57:52.5
+ 681 02:57:52.48
+ 681 02:57:52.48
+     681 02:57:52
+   681 02:57:52.5
+  681 02:57:52.48
+ 681 02:57:52.482
+ 681 02:57:52.482
+      681 02:57:52
+    681 02:57:52.5
+   681 02:57:52.48
+  681 02:57:52.482
+ 681 02:57:52.4823
+ 681 02:57:52.4823
+       681 02:57:52
+     681 02:57:52.5
+    681 02:57:52.48
+   681 02:57:52.482
+  681 02:57:52.4823
+ 681 02:57:52.48229
+ 681 02:57:52.48229
+ *****
+ ******
+ *******
+ 16360:45
+  16360:45
+   16360:45
+   16360:45
+ 16360:45:44
+ 16360:45:44
+ 16360:45:44
+  16360:45:44
+  16360:45:44
+  16360:45:44
+  16360:45:44
+   16360:45:44
+ 16360:45:44.7
+ 16360:45:44.7
+ 16360:45:44.7
+ 16360:45:44.7
+    16360:45:44
+  16360:45:44.7
+ 16360:45:44.66
+ 16360:45:44.66
+ 16360:45:44.66
+ 16360:45:44.66
+     16360:45:44
+   16360:45:44.7
+  16360:45:44.66
+ 16360:45:44.658
+ 16360:45:44.658
+ 16360:45:44.658
+ 16360:45:44.658
+ ********
+ 681 16:45
+  681 16:45
+   681 16:45
+ 681 16:45:44
+  681 16:45:44
+  681 16:45:44
+   681 16:45:44
+ 681 16:45:44.7
+ 681 16:45:44.7
+    681 16:45:44
+  681 16:45:44.7
+ 681 16:45:44.66
+ 681 16:45:44.66
+     681 16:45:44
+   681 16:45:44.7
+  681 16:45:44.66
+ 681 16:45:44.658
+ 681 16:45:44.658
+      681 16:45:44
+    681 16:45:44.7
+   681 16:45:44.66
+  681 16:45:44.658
+ 681 16:45:44.6583
+ 681 16:45:44.6583
+       681 16:45:44
+     681 16:45:44.7
+    681 16:45:44.66
+   681 16:45:44.658
+  681 16:45:44.6583
+ 681 16:45:44.65827
+ 681 16:45:44.65827
+ *****
+ ******
+ *******
+ 16365:30
+  16365:30
+   16365:30
+   16365:30
+ 16365:30:57
+ 16365:30:57
+ 16365:30:57
+  16365:30:57
+  16365:30:57
+  16365:30:57
+  16365:30:57
+   16365:30:57
+ 16365:30:57.6
+ 16365:30:57.6
+ 16365:30:57.6
+ 16365:30:57.6
+    16365:30:57
+  16365:30:57.6
+ 16365:30:57.58
+ 16365:30:57.58
+ 16365:30:57.58
+ 16365:30:57.58
+     16365:30:57
+   16365:30:57.6
+  16365:30:57.58
+ 16365:30:57.582
+ 16365:30:57.582
+ 16365:30:57.582
+ 16365:30:57.582
+ ********
+ 681 21:30
+  681 21:30
+   681 21:30
+ 681 21:30:57
+  681 21:30:57
+  681 21:30:57
+   681 21:30:57
+ 681 21:30:57.6
+ 681 21:30:57.6
+    681 21:30:57
+  681 21:30:57.6
+ 681 21:30:57.58
+ 681 21:30:57.58
+     681 21:30:57
+   681 21:30:57.6
+  681 21:30:57.58
+ 681 21:30:57.582
+ 681 21:30:57.582
+      681 21:30:57
+    681 21:30:57.6
+   681 21:30:57.58
+  681 21:30:57.582
+ 681 21:30:57.5822
+ 681 21:30:57.5822
+       681 21:30:57
+     681 21:30:57.6
+    681 21:30:57.58
+   681 21:30:57.582
+  681 21:30:57.5822
+ 681 21:30:57.58219
+ 681 21:30:57.58219
+ *****
+ ******
+ *******
+ 16366:30
+  16366:30
+   16366:30
+   16366:30
+ 16366:30:04
+ 16366:30:04
+ 16366:30:04
+  16366:30:04
+  16366:30:04
+  16366:30:04
+  16366:30:04
+   16366:30:04
+ 16366:30:04.2
+ 16366:30:04.2
+ 16366:30:04.2
+ 16366:30:04.2
+    16366:30:04
+  16366:30:04.2
+ 16366:30:04.18
+ 16366:30:04.18
+ 16366:30:04.18
+ 16366:30:04.18
+     16366:30:04
+   16366:30:04.2
+  16366:30:04.18
+ 16366:30:04.183
+ 16366:30:04.183
+ 16366:30:04.183
+ 16366:30:04.183
+ ********
+ 681 22:30
+  681 22:30
+   681 22:30
+ 681 22:30:04
+  681 22:30:04
+  681 22:30:04
+   681 22:30:04
+ 681 22:30:04.2
+ 681 22:30:04.2
+    681 22:30:04
+  681 22:30:04.2
+ 681 22:30:04.18
+ 681 22:30:04.18
+     681 22:30:04
+   681 22:30:04.2
+  681 22:30:04.18
+ 681 22:30:04.183
+ 681 22:30:04.183
+      681 22:30:04
+    681 22:30:04.2
+   681 22:30:04.18
+  681 22:30:04.183
+ 681 22:30:04.1835
+ 681 22:30:04.1835
+       681 22:30:04
+     681 22:30:04.2
+    681 22:30:04.18
+   681 22:30:04.183
+  681 22:30:04.1835
+ 681 22:30:04.18347
+ 681 22:30:04.18347
+ *****
+ ******
+ *******
+ 16345:56
+  16345:56
+   16345:56
+   16345:56
+ 16345:56:51
+ 16345:56:51
+ 16345:56:51
+  16345:56:51
+  16345:56:51
+  16345:56:51
+  16345:56:51
+   16345:56:51
+ 16345:56:51.6
+ 16345:56:51.6
+ 16345:56:51.6
+ 16345:56:51.6
+    16345:56:51
+  16345:56:51.6
+ 16345:56:51.59
+ 16345:56:51.59
+ 16345:56:51.59
+ 16345:56:51.59
+     16345:56:51
+   16345:56:51.6
+  16345:56:51.59
+ 16345:56:51.593
+ 16345:56:51.593
+ 16345:56:51.593
+ 16345:56:51.593
+ ********
+ 681 01:56
+  681 01:56
+   681 01:56
+ 681 01:56:51
+  681 01:56:51
+  681 01:56:51
+   681 01:56:51
+ 681 01:56:51.6
+ 681 01:56:51.6
+    681 01:56:51
+  681 01:56:51.6
+ 681 01:56:51.59
+ 681 01:56:51.59
+     681 01:56:51
+   681 01:56:51.6
+  681 01:56:51.59
+ 681 01:56:51.593
+ 681 01:56:51.593
+      681 01:56:51
+    681 01:56:51.6
+   681 01:56:51.59
+  681 01:56:51.593
+ 681 01:56:51.5932
+ 681 01:56:51.5932
+       681 01:56:51
+     681 01:56:51.6
+    681 01:56:51.59
+   681 01:56:51.593
+  681 01:56:51.5932
+ 681 01:56:51.59319
+ 681 01:56:51.59319
+  0:00
+   0:00
+ 0:00:00
+  0:00:00
+   0:00:00
+    0:00:00
+  0:00:00.0
+     0:00:00
+   0:00:00.0
+  0:00:00.00
+      0:00:00
+    0:00:00.0
+   0:00:00.00
+  0:00:00.000
+       0:00:00
+     0:00:00.0
+    0:00:00.00
+   0:00:00.000
+  0:00:00.0000
+        0:00:00
+      0:00:00.0
+     0:00:00.00
+    0:00:00.000
+   0:00:00.0000
+  0:00:00.00000
+         0:00:00
+       0:00:00.0
+      0:00:00.00
+     0:00:00.000
+    0:00:00.0000
+   0:00:00.00000
+  0:00:00.000000
+  0 00:00
+   0 00:00
+ 0 00:00:00
+  0 00:00:00
+   0 00:00:00
+    0 00:00:00
+  0 00:00:00.0
+     0 00:00:00
+   0 00:00:00.0
+  0 00:00:00.00
+      0 00:00:00
+    0 00:00:00.0
+   0 00:00:00.00
+  0 00:00:00.000
+       0 00:00:00
+     0 00:00:00.0
+    0 00:00:00.00
+   0 00:00:00.000
+  0 00:00:00.0000
+        0 00:00:00
+      0 00:00:00.0
+     0 00:00:00.00
+    0 00:00:00.000
+   0 00:00:00.0000
+  0 00:00:00.00000
+         0 00:00:00
+       0 00:00:00.0
+      0 00:00:00.00
+     0 00:00:00.000
+    0 00:00:00.0000
+   0 00:00:00.00000
+  0 00:00:00.000000
+ -4:50
+  -4:50
+   -4:50
+ -4:50:38
+  -4:50:38
+   -4:50:38
+ -4:50:38.1
+    -4:50:38
+  -4:50:38.1
+ -4:50:38.12
+     -4:50:38
+   -4:50:38.1
+  -4:50:38.12
+ -4:50:38.123
+      -4:50:38
+    -4:50:38.1
+   -4:50:38.12
+  -4:50:38.123
+ -4:50:38.1230
+       -4:50:38
+     -4:50:38.1
+    -4:50:38.12
+   -4:50:38.123
+  -4:50:38.1230
+ -4:50:38.12301
+        -4:50:38
+      -4:50:38.1
+     -4:50:38.12
+    -4:50:38.123
+   -4:50:38.1230
+  -4:50:38.12301
+ -4:50:38.123010
+ -0 04:50
+  -0 04:50
+   -0 04:50
+ -0 04:50:38
+  -0 04:50:38
+   -0 04:50:38
+ -0 04:50:38.1
+    -0 04:50:38
+  -0 04:50:38.1
+ -0 04:50:38.12
+     -0 04:50:38
+   -0 04:50:38.1
+  -0 04:50:38.12
+ -0 04:50:38.123
+      -0 04:50:38
+    -0 04:50:38.1
+   -0 04:50:38.12
+  -0 04:50:38.123
+ -0 04:50:38.1230
+       -0 04:50:38
+     -0 04:50:38.1
+    -0 04:50:38.12
+   -0 04:50:38.123
+  -0 04:50:38.1230
+ -0 04:50:38.12301
+        -0 04:50:38
+      -0 04:50:38.1
+     -0 04:50:38.12
+    -0 04:50:38.123
+   -0 04:50:38.1230
+  -0 04:50:38.12301
+ -0 04:50:38.123010
+ *****
+ -12:31
+  -12:31
+   -12:31
+ -12:31:35
+  -12:31:35
+  -12:31:35
+   -12:31:35
+ -12:31:35.2
+ -12:31:35.2
+    -12:31:35
+  -12:31:35.2
+ -12:31:35.23
+ -12:31:35.23
+     -12:31:35
+   -12:31:35.2
+  -12:31:35.23
+ -12:31:35.235
+ -12:31:35.235
+      -12:31:35
+    -12:31:35.2
+   -12:31:35.23
+  -12:31:35.235
+ -12:31:35.2345
+ -12:31:35.2345
+       -12:31:35
+     -12:31:35.2
+    -12:31:35.23
+   -12:31:35.235
+  -12:31:35.2345
+ -12:31:35.23453
+ -12:31:35.23453
+ -0 12:31
+  -0 12:31
+   -0 12:31
+ -0 12:31:35
+  -0 12:31:35
+   -0 12:31:35
+ -0 12:31:35.2
+    -0 12:31:35
+  -0 12:31:35.2
+ -0 12:31:35.23
+     -0 12:31:35
+   -0 12:31:35.2
+  -0 12:31:35.23
+ -0 12:31:35.235
+      -0 12:31:35
+    -0 12:31:35.2
+   -0 12:31:35.23
+  -0 12:31:35.235
+ -0 12:31:35.2345
+       -0 12:31:35
+     -0 12:31:35.2
+    -0 12:31:35.23
+   -0 12:31:35.235
+  -0 12:31:35.2345
+ -0 12:31:35.23453
+        -0 12:31:35
+      -0 12:31:35.2
+     -0 12:31:35.23
+    -0 12:31:35.235
+   -0 12:31:35.2345
+  -0 12:31:35.23453
+ -0 12:31:35.234530
+ *****
+ -12:47
+  -12:47
+   -12:47
+ -12:47:53
+  -12:47:53
+  -12:47:53
+   -12:47:53
+ -12:47:53.3
+ -12:47:53.3
+    -12:47:53
+  -12:47:53.3
+ -12:47:53.35
+ -12:47:53.35
+     -12:47:53
+   -12:47:53.3
+  -12:47:53.35
+ -12:47:53.345
+ -12:47:53.345
+      -12:47:53
+    -12:47:53.3
+   -12:47:53.35
+  -12:47:53.345
+ -12:47:53.3451
+ -12:47:53.3451
+       -12:47:53
+     -12:47:53.3
+    -12:47:53.35
+   -12:47:53.345
+  -12:47:53.3451
+ -12:47:53.34505
+ -12:47:53.34505
+ -0 12:47
+  -0 12:47
+   -0 12:47
+ -0 12:47:53
+  -0 12:47:53
+   -0 12:47:53
+ -0 12:47:53.3
+    -0 12:47:53
+  -0 12:47:53.3
+ -0 12:47:53.35
+     -0 12:47:53
+   -0 12:47:53.3
+  -0 12:47:53.35
+ -0 12:47:53.345
+      -0 12:47:53
+    -0 12:47:53.3
+   -0 12:47:53.35
+  -0 12:47:53.345
+ -0 12:47:53.3451
+       -0 12:47:53
+     -0 12:47:53.3
+    -0 12:47:53.35
+   -0 12:47:53.345
+  -0 12:47:53.3451
+ -0 12:47:53.34505
+        -0 12:47:53
+      -0 12:47:53.3
+     -0 12:47:53.35
+    -0 12:47:53.345
+   -0 12:47:53.3451
+  -0 12:47:53.34505
+ -0 12:47:53.345050
+ -1:26
+  -1:26
+   -1:26
+ -1:26:00
+  -1:26:00
+   -1:26:00
+ -1:26:00.5
+    -1:26:00
+  -1:26:00.5
+ -1:26:00.46
+     -1:26:00
+   -1:26:00.5
+  -1:26:00.46
+ -1:26:00.456
+      -1:26:00
+    -1:26:00.5
+   -1:26:00.46
+  -1:26:00.456
+ -1:26:00.4561
+       -1:26:00
+     -1:26:00.5
+    -1:26:00.46
+   -1:26:00.456
+  -1:26:00.4561
+ -1:26:00.45615
+        -1:26:00
+      -1:26:00.5
+     -1:26:00.46
+    -1:26:00.456
+   -1:26:00.4561
+  -1:26:00.45615
+ -1:26:00.456150
+ -0 01:26
+  -0 01:26
+   -0 01:26
+ -0 01:26:00
+  -0 01:26:00
+   -0 01:26:00
+ -0 01:26:00.5
+    -0 01:26:00
+  -0 01:26:00.5
+ -0 01:26:00.46
+     -0 01:26:00
+   -0 01:26:00.5
+  -0 01:26:00.46
+ -0 01:26:00.456
+      -0 01:26:00
+    -0 01:26:00.5
+   -0 01:26:00.46
+  -0 01:26:00.456
+ -0 01:26:00.4561
+       -0 01:26:00
+     -0 01:26:00.5
+    -0 01:26:00.46
+   -0 01:26:00.456
+  -0 01:26:00.4561
+ -0 01:26:00.45615
+        -0 01:26:00
+      -0 01:26:00.5
+     -0 01:26:00.46
+    -0 01:26:00.456
+   -0 01:26:00.4561
+  -0 01:26:00.45615
+ -0 01:26:00.456150
+ *****
+ -20:58
+  -20:58
+   -20:58
+ -20:58:11
+  -20:58:11
+  -20:58:11
+   -20:58:11
+ -20:58:11.6
+ -20:58:11.6
+    -20:58:11
+  -20:58:11.6
+ -20:58:11.57
+ -20:58:11.57
+     -20:58:11
+   -20:58:11.6
+  -20:58:11.57
+ -20:58:11.567
+ -20:58:11.567
+      -20:58:11
+    -20:58:11.6
+   -20:58:11.57
+  -20:58:11.567
+ -20:58:11.5668
+ -20:58:11.5668
+       -20:58:11
+     -20:58:11.6
+    -20:58:11.57
+   -20:58:11.567
+  -20:58:11.5668
+ -20:58:11.56677
+ -20:58:11.56677
+ -0 20:58
+  -0 20:58
+   -0 20:58
+ -0 20:58:11
+  -0 20:58:11
+   -0 20:58:11
+ -0 20:58:11.6
+    -0 20:58:11
+  -0 20:58:11.6
+ -0 20:58:11.57
+     -0 20:58:11
+   -0 20:58:11.6
+  -0 20:58:11.57
+ -0 20:58:11.567
+      -0 20:58:11
+    -0 20:58:11.6
+   -0 20:58:11.57
+  -0 20:58:11.567
+ -0 20:58:11.5668
+       -0 20:58:11
+     -0 20:58:11.6
+    -0 20:58:11.57
+   -0 20:58:11.567
+  -0 20:58:11.5668
+ -0 20:58:11.56677
+        -0 20:58:11
+      -0 20:58:11.6
+     -0 20:58:11.57
+    -0 20:58:11.567
+   -0 20:58:11.5668
+  -0 20:58:11.56677
+ -0 20:58:11.566770
+ -7:36
+  -7:36
+   -7:36
+ -7:36:05
+  -7:36:05
+   -7:36:05
+ -7:36:05.2
+    -7:36:05
+  -7:36:05.2
+ -7:36:05.19
+     -7:36:05
+   -7:36:05.2
+  -7:36:05.19
+ -7:36:05.190
+      -7:36:05
+    -7:36:05.2
+   -7:36:05.19
+  -7:36:05.190
+ -7:36:05.1896
+       -7:36:05
+     -7:36:05.2
+    -7:36:05.19
+   -7:36:05.190
+  -7:36:05.1896
+ -7:36:05.18964
+        -7:36:05
+      -7:36:05.2
+     -7:36:05.19
+    -7:36:05.190
+   -7:36:05.1896
+  -7:36:05.18964
+ -7:36:05.189640
+ -0 07:36
+  -0 07:36
+   -0 07:36
+ -0 07:36:05
+  -0 07:36:05
+   -0 07:36:05
+ -0 07:36:05.2
+    -0 07:36:05
+  -0 07:36:05.2
+ -0 07:36:05.19
+     -0 07:36:05
+   -0 07:36:05.2
+  -0 07:36:05.19
+ -0 07:36:05.190
+      -0 07:36:05
+    -0 07:36:05.2
+   -0 07:36:05.19
+  -0 07:36:05.190
+ -0 07:36:05.1896
+       -0 07:36:05
+     -0 07:36:05.2
+    -0 07:36:05.19
+   -0 07:36:05.190
+  -0 07:36:05.1896
+ -0 07:36:05.18964
+        -0 07:36:05
+      -0 07:36:05.2
+     -0 07:36:05.19
+    -0 07:36:05.190
+   -0 07:36:05.1896
+  -0 07:36:05.18964
+ -0 07:36:05.189640
+ *****
+ -15:43
+  -15:43
+   -15:43
+ -15:43:49
+  -15:43:49
+  -15:43:49
+   -15:43:49
+ -15:43:49.8
+ -15:43:49.8
+    -15:43:49
+  -15:43:49.8
+ -15:43:49.83
+ -15:43:49.83
+     -15:43:49
+   -15:43:49.8
+  -15:43:49.83
+ -15:43:49.831
+ -15:43:49.831
+      -15:43:49
+    -15:43:49.8
+   -15:43:49.83
+  -15:43:49.831
+ -15:43:49.8313
+ -15:43:49.8313
+       -15:43:49
+     -15:43:49.8
+    -15:43:49.83
+   -15:43:49.831
+  -15:43:49.8313
+ -15:43:49.83132
+ -15:43:49.83132
+ -0 15:43
+  -0 15:43
+   -0 15:43
+ -0 15:43:49
+  -0 15:43:49
+   -0 15:43:49
+ -0 15:43:49.8
+    -0 15:43:49
+  -0 15:43:49.8
+ -0 15:43:49.83
+     -0 15:43:49
+   -0 15:43:49.8
+  -0 15:43:49.83
+ -0 15:43:49.831
+      -0 15:43:49
+    -0 15:43:49.8
+   -0 15:43:49.83
+  -0 15:43:49.831
+ -0 15:43:49.8313
+       -0 15:43:49
+     -0 15:43:49.8
+    -0 15:43:49.83
+   -0 15:43:49.831
+  -0 15:43:49.8313
+ -0 15:43:49.83132
+        -0 15:43:49
+      -0 15:43:49.8
+     -0 15:43:49.83
+    -0 15:43:49.831
+   -0 15:43:49.8313
+  -0 15:43:49.83132
+ -0 15:43:49.831320
+ -4:25
+  -4:25
+   -4:25
+ -4:25:09
+  -4:25:09
+   -4:25:09
+ -4:25:09.0
+    -4:25:09
+  -4:25:09.0
+ -4:25:09.01
+     -4:25:09
+   -4:25:09.0
+  -4:25:09.01
+ -4:25:09.013
+      -4:25:09
+    -4:25:09.0
+   -4:25:09.01
+  -4:25:09.013
+ -4:25:09.0129
+       -4:25:09
+     -4:25:09.0
+    -4:25:09.01
+   -4:25:09.013
+  -4:25:09.0129
+ -4:25:09.01293
+        -4:25:09
+      -4:25:09.0
+     -4:25:09.01
+    -4:25:09.013
+   -4:25:09.0129
+  -4:25:09.01293
+ -4:25:09.012930
+ -0 04:25
+  -0 04:25
+   -0 04:25
+ -0 04:25:09
+  -0 04:25:09
+   -0 04:25:09
+ -0 04:25:09.0
+    -0 04:25:09
+  -0 04:25:09.0
+ -0 04:25:09.01
+     -0 04:25:09
+   -0 04:25:09.0
+  -0 04:25:09.01
+ -0 04:25:09.013
+      -0 04:25:09
+    -0 04:25:09.0
+   -0 04:25:09.01
+  -0 04:25:09.013
+ -0 04:25:09.0129
+       -0 04:25:09
+     -0 04:25:09.0
+    -0 04:25:09.01
+   -0 04:25:09.013
+  -0 04:25:09.0129
+ -0 04:25:09.01293
+        -0 04:25:09
+      -0 04:25:09.0
+     -0 04:25:09.01
+    -0 04:25:09.013
+   -0 04:25:09.0129
+  -0 04:25:09.01293
+ -0 04:25:09.012930
+ -6:49
+  -6:49
+   -6:49
+ -6:49:27
+  -6:49:27
+   -6:49:27
+ -6:49:27.5
+    -6:49:27
+  -6:49:27.5
+ -6:49:27.52
+     -6:49:27
+   -6:49:27.5
+  -6:49:27.52
+ -6:49:27.524
+      -6:49:27
+    -6:49:27.5
+   -6:49:27.52
+  -6:49:27.524
+ -6:49:27.5238
+       -6:49:27
+     -6:49:27.5
+    -6:49:27.52
+   -6:49:27.524
+  -6:49:27.5238
+ -6:49:27.52375
+        -6:49:27
+      -6:49:27.5
+     -6:49:27.52
+    -6:49:27.524
+   -6:49:27.5238
+  -6:49:27.52375
+ -6:49:27.523750
+ -0 06:49
+  -0 06:49
+   -0 06:49
+ -0 06:49:27
+  -0 06:49:27
+   -0 06:49:27
+ -0 06:49:27.5
+    -0 06:49:27
+  -0 06:49:27.5
+ -0 06:49:27.52
+     -0 06:49:27
+   -0 06:49:27.5
+  -0 06:49:27.52
+ -0 06:49:27.524
+      -0 06:49:27
+    -0 06:49:27.5
+   -0 06:49:27.52
+  -0 06:49:27.524
+ -0 06:49:27.5238
+       -0 06:49:27
+     -0 06:49:27.5
+    -0 06:49:27.52
+   -0 06:49:27.524
+  -0 06:49:27.5238
+ -0 06:49:27.52375
+        -0 06:49:27
+      -0 06:49:27.5
+     -0 06:49:27.52
+    -0 06:49:27.524
+   -0 06:49:27.5238
+  -0 06:49:27.52375
+ -0 06:49:27.523750
+ -2:57
+  -2:57
+   -2:57
+ -2:57:52
+  -2:57:52
+   -2:57:52
+ -2:57:52.0
+    -2:57:52
+  -2:57:52.0
+ -2:57:52.02
+     -2:57:52
+   -2:57:52.0
+  -2:57:52.02
+ -2:57:52.016
+      -2:57:52
+    -2:57:52.0
+   -2:57:52.02
+  -2:57:52.016
+ -2:57:52.0156
+       -2:57:52
+     -2:57:52.0
+    -2:57:52.02
+   -2:57:52.016
+  -2:57:52.0156
+ -2:57:52.01565
+        -2:57:52
+      -2:57:52.0
+     -2:57:52.02
+    -2:57:52.016
+   -2:57:52.0156
+  -2:57:52.01565
+ -2:57:52.015650
+ -0 02:57
+  -0 02:57
+   -0 02:57
+ -0 02:57:52
+  -0 02:57:52
+   -0 02:57:52
+ -0 02:57:52.0
+    -0 02:57:52
+  -0 02:57:52.0
+ -0 02:57:52.02
+     -0 02:57:52
+   -0 02:57:52.0
+  -0 02:57:52.02
+ -0 02:57:52.016
+      -0 02:57:52
+    -0 02:57:52.0
+   -0 02:57:52.02
+  -0 02:57:52.016
+ -0 02:57:52.0156
+       -0 02:57:52
+     -0 02:57:52.0
+    -0 02:57:52.02
+   -0 02:57:52.016
+  -0 02:57:52.0156
+ -0 02:57:52.01565
+        -0 02:57:52
+      -0 02:57:52.0
+     -0 02:57:52.02
+    -0 02:57:52.016
+   -0 02:57:52.0156
+  -0 02:57:52.01565
+ -0 02:57:52.015650
+ *****
+ -16:45
+  -16:45
+   -16:45
+ -16:45:44
+  -16:45:44
+  -16:45:44
+   -16:45:44
+ -16:45:44.9
+ -16:45:44.9
+    -16:45:44
+  -16:45:44.9
+ -16:45:44.87
+ -16:45:44.87
+     -16:45:44
+   -16:45:44.9
+  -16:45:44.87
+ -16:45:44.865
+ -16:45:44.865
+      -16:45:44
+    -16:45:44.9
+   -16:45:44.87
+  -16:45:44.865
+ -16:45:44.8653
+ -16:45:44.8653
+       -16:45:44
+     -16:45:44.9
+    -16:45:44.87
+   -16:45:44.865
+  -16:45:44.8653
+ -16:45:44.86529
+ -16:45:44.86529
+ -0 16:45
+  -0 16:45
+   -0 16:45
+ -0 16:45:44
+  -0 16:45:44
+   -0 16:45:44
+ -0 16:45:44.9
+    -0 16:45:44
+  -0 16:45:44.9
+ -0 16:45:44.87
+     -0 16:45:44
+   -0 16:45:44.9
+  -0 16:45:44.87
+ -0 16:45:44.865
+      -0 16:45:44
+    -0 16:45:44.9
+   -0 16:45:44.87
+  -0 16:45:44.865
+ -0 16:45:44.8653
+       -0 16:45:44
+     -0 16:45:44.9
+    -0 16:45:44.87
+   -0 16:45:44.865
+  -0 16:45:44.8653
+ -0 16:45:44.86529
+        -0 16:45:44
+      -0 16:45:44.9
+     -0 16:45:44.87
+    -0 16:45:44.865
+   -0 16:45:44.8653
+  -0 16:45:44.86529
+ -0 16:45:44.865290
+ *****
+ -21:30
+  -21:30
+   -21:30
+ -21:30:57
+  -21:30:57
+  -21:30:57
+   -21:30:57
+ -21:30:57.8
+ -21:30:57.8
+    -21:30:57
+  -21:30:57.8
+ -21:30:57.82
+ -21:30:57.82
+     -21:30:57
+   -21:30:57.8
+  -21:30:57.82
+ -21:30:57.820
+ -21:30:57.820
+      -21:30:57
+    -21:30:57.8
+   -21:30:57.82
+  -21:30:57.820
+ -21:30:57.8205
+ -21:30:57.8205
+       -21:30:57
+     -21:30:57.8
+    -21:30:57.82
+   -21:30:57.820
+  -21:30:57.8205
+ -21:30:57.82047
+ -21:30:57.82047
+ -0 21:30
+  -0 21:30
+   -0 21:30
+ -0 21:30:57
+  -0 21:30:57
+   -0 21:30:57
+ -0 21:30:57.8
+    -0 21:30:57
+  -0 21:30:57.8
+ -0 21:30:57.82
+     -0 21:30:57
+   -0 21:30:57.8
+  -0 21:30:57.82
+ -0 21:30:57.820
+      -0 21:30:57
+    -0 21:30:57.8
+   -0 21:30:57.82
+  -0 21:30:57.820
+ -0 21:30:57.8205
+       -0 21:30:57
+     -0 21:30:57.8
+    -0 21:30:57.82
+   -0 21:30:57.820
+  -0 21:30:57.8205
+ -0 21:30:57.82047
+        -0 21:30:57
+      -0 21:30:57.8
+     -0 21:30:57.82
+    -0 21:30:57.820
+   -0 21:30:57.8205
+  -0 21:30:57.82047
+ -0 21:30:57.820470
+ -4:25
+  -4:25
+   -4:25
+ -4:25:09
+  -4:25:09
+   -4:25:09
+ -4:25:09.2
+    -4:25:09
+  -4:25:09.2
+ -4:25:09.15
+     -4:25:09
+   -4:25:09.2
+  -4:25:09.15
+ -4:25:09.154
+      -4:25:09
+    -4:25:09.2
+   -4:25:09.15
+  -4:25:09.154
+ -4:25:09.1539
+       -4:25:09
+     -4:25:09.2
+    -4:25:09.15
+   -4:25:09.154
+  -4:25:09.1539
+ -4:25:09.15395
+        -4:25:09
+      -4:25:09.2
+     -4:25:09.15
+    -4:25:09.154
+   -4:25:09.1539
+  -4:25:09.15395
+ -4:25:09.153950
+ -0 04:25
+  -0 04:25
+   -0 04:25
+ -0 04:25:09
+  -0 04:25:09
+   -0 04:25:09
+ -0 04:25:09.2
+    -0 04:25:09
+  -0 04:25:09.2
+ -0 04:25:09.15
+     -0 04:25:09
+   -0 04:25:09.2
+  -0 04:25:09.15
+ -0 04:25:09.154
+      -0 04:25:09
+    -0 04:25:09.2
+   -0 04:25:09.15
+  -0 04:25:09.154
+ -0 04:25:09.1539
+       -0 04:25:09
+     -0 04:25:09.2
+    -0 04:25:09.15
+   -0 04:25:09.154
+  -0 04:25:09.1539
+ -0 04:25:09.15395
+        -0 04:25:09
+      -0 04:25:09.2
+     -0 04:25:09.15
+    -0 04:25:09.154
+   -0 04:25:09.1539
+  -0 04:25:09.15395
+ -0 04:25:09.153950
+ -6:49
+  -6:49
+   -6:49
+ -6:49:27
+  -6:49:27
+   -6:49:27
+ -6:49:27.1
+    -6:49:27
+  -6:49:27.1
+ -6:49:27.11
+     -6:49:27
+   -6:49:27.1
+  -6:49:27.11
+ -6:49:27.105
+      -6:49:27
+    -6:49:27.1
+   -6:49:27.11
+  -6:49:27.105
+ -6:49:27.1053
+       -6:49:27
+     -6:49:27.1
+    -6:49:27.11
+   -6:49:27.105
+  -6:49:27.1053
+ -6:49:27.10533
+        -6:49:27
+      -6:49:27.1
+     -6:49:27.11
+    -6:49:27.105
+   -6:49:27.1053
+  -6:49:27.10533
+ -6:49:27.105330
+ -0 06:49
+  -0 06:49
+   -0 06:49
+ -0 06:49:27
+  -0 06:49:27
+   -0 06:49:27
+ -0 06:49:27.1
+    -0 06:49:27
+  -0 06:49:27.1
+ -0 06:49:27.11
+     -0 06:49:27
+   -0 06:49:27.1
+  -0 06:49:27.11
+ -0 06:49:27.105
+      -0 06:49:27
+    -0 06:49:27.1
+   -0 06:49:27.11
+  -0 06:49:27.105
+ -0 06:49:27.1053
+       -0 06:49:27
+     -0 06:49:27.1
+    -0 06:49:27.11
+   -0 06:49:27.105
+  -0 06:49:27.1053
+ -0 06:49:27.10533
+        -0 06:49:27
+      -0 06:49:27.1
+     -0 06:49:27.11
+    -0 06:49:27.105
+   -0 06:49:27.1053
+  -0 06:49:27.10533
+ -0 06:49:27.105330
+ -2:57
+  -2:57
+   -2:57
+ -2:57:52
+  -2:57:52
+   -2:57:52
+ -2:57:52.5
+    -2:57:52
+  -2:57:52.5
+ -2:57:52.48
+     -2:57:52
+   -2:57:52.5
+  -2:57:52.48
+ -2:57:52.482
+      -2:57:52
+    -2:57:52.5
+   -2:57:52.48
+  -2:57:52.482
+ -2:57:52.4823
+       -2:57:52
+     -2:57:52.5
+    -2:57:52.48
+   -2:57:52.482
+  -2:57:52.4823
+ -2:57:52.48229
+        -2:57:52
+      -2:57:52.5
+     -2:57:52.48
+    -2:57:52.482
+   -2:57:52.4823
+  -2:57:52.48229
+ -2:57:52.482290
+ -0 02:57
+  -0 02:57
+   -0 02:57
+ -0 02:57:52
+  -0 02:57:52
+   -0 02:57:52
+ -0 02:57:52.5
+    -0 02:57:52
+  -0 02:57:52.5
+ -0 02:57:52.48
+     -0 02:57:52
+   -0 02:57:52.5
+  -0 02:57:52.48
+ -0 02:57:52.482
+      -0 02:57:52
+    -0 02:57:52.5
+   -0 02:57:52.48
+  -0 02:57:52.482
+ -0 02:57:52.4823
+       -0 02:57:52
+     -0 02:57:52.5
+    -0 02:57:52.48
+   -0 02:57:52.482
+  -0 02:57:52.4823
+ -0 02:57:52.48229
+        -0 02:57:52
+      -0 02:57:52.5
+     -0 02:57:52.48
+    -0 02:57:52.482
+   -0 02:57:52.4823
+  -0 02:57:52.48229
+ -0 02:57:52.482290
+ *****
+ -16:45
+  -16:45
+   -16:45
+ -16:45:44
+  -16:45:44
+  -16:45:44
+   -16:45:44
+ -16:45:44.7
+ -16:45:44.7
+    -16:45:44
+  -16:45:44.7
+ -16:45:44.66
+ -16:45:44.66
+     -16:45:44
+   -16:45:44.7
+  -16:45:44.66
+ -16:45:44.658
+ -16:45:44.658
+      -16:45:44
+    -16:45:44.7
+   -16:45:44.66
+  -16:45:44.658
+ -16:45:44.6583
+ -16:45:44.6583
+       -16:45:44
+     -16:45:44.7
+    -16:45:44.66
+   -16:45:44.658
+  -16:45:44.6583
+ -16:45:44.65827
+ -16:45:44.65827
+ -0 16:45
+  -0 16:45
+   -0 16:45
+ -0 16:45:44
+  -0 16:45:44
+   -0 16:45:44
+ -0 16:45:44.7
+    -0 16:45:44
+  -0 16:45:44.7
+ -0 16:45:44.66
+     -0 16:45:44
+   -0 16:45:44.7
+  -0 16:45:44.66
+ -0 16:45:44.658
+      -0 16:45:44
+    -0 16:45:44.7
+   -0 16:45:44.66
+  -0 16:45:44.658
+ -0 16:45:44.6583
+       -0 16:45:44
+     -0 16:45:44.7
+    -0 16:45:44.66
+   -0 16:45:44.658
+  -0 16:45:44.6583
+ -0 16:45:44.65827
+        -0 16:45:44
+      -0 16:45:44.7
+     -0 16:45:44.66
+    -0 16:45:44.658
+   -0 16:45:44.6583
+  -0 16:45:44.65827
+ -0 16:45:44.658270
+ *****
+ -21:30
+  -21:30
+   -21:30
+ -21:30:57
+  -21:30:57
+  -21:30:57
+   -21:30:57
+ -21:30:57.6
+ -21:30:57.6
+    -21:30:57
+  -21:30:57.6
+ -21:30:57.58
+ -21:30:57.58
+     -21:30:57
+   -21:30:57.6
+  -21:30:57.58
+ -21:30:57.582
+ -21:30:57.582
+      -21:30:57
+    -21:30:57.6
+   -21:30:57.58
+  -21:30:57.582
+ -21:30:57.5822
+ -21:30:57.5822
+       -21:30:57
+     -21:30:57.6
+    -21:30:57.58
+   -21:30:57.582
+  -21:30:57.5822
+ -21:30:57.58219
+ -21:30:57.58219
+ -0 21:30
+  -0 21:30
+   -0 21:30
+ -0 21:30:57
+  -0 21:30:57
+   -0 21:30:57
+ -0 21:30:57.6
+    -0 21:30:57
+  -0 21:30:57.6
+ -0 21:30:57.58
+     -0 21:30:57
+   -0 21:30:57.6
+  -0 21:30:57.58
+ -0 21:30:57.582
+      -0 21:30:57
+    -0 21:30:57.6
+   -0 21:30:57.58
+  -0 21:30:57.582
+ -0 21:30:57.5822
+       -0 21:30:57
+     -0 21:30:57.6
+    -0 21:30:57.58
+   -0 21:30:57.582
+  -0 21:30:57.5822
+ -0 21:30:57.58219
+        -0 21:30:57
+      -0 21:30:57.6
+     -0 21:30:57.58
+    -0 21:30:57.582
+   -0 21:30:57.5822
+  -0 21:30:57.58219
+ -0 21:30:57.582190
+ *****
+ -22:30
+  -22:30
+   -22:30
+ -22:30:04
+  -22:30:04
+  -22:30:04
+   -22:30:04
+ -22:30:04.2
+ -22:30:04.2
+    -22:30:04
+  -22:30:04.2
+ -22:30:04.18
+ -22:30:04.18
+     -22:30:04
+   -22:30:04.2
+  -22:30:04.18
+ -22:30:04.183
+ -22:30:04.183
+      -22:30:04
+    -22:30:04.2
+   -22:30:04.18
+  -22:30:04.183
+ -22:30:04.1835
+ -22:30:04.1835
+       -22:30:04
+     -22:30:04.2
+    -22:30:04.18
+   -22:30:04.183
+  -22:30:04.1835
+ -22:30:04.18347
+ -22:30:04.18347
+ -0 22:30
+  -0 22:30
+   -0 22:30
+ -0 22:30:04
+  -0 22:30:04
+   -0 22:30:04
+ -0 22:30:04.2
+    -0 22:30:04
+  -0 22:30:04.2
+ -0 22:30:04.18
+     -0 22:30:04
+   -0 22:30:04.2
+  -0 22:30:04.18
+ -0 22:30:04.183
+      -0 22:30:04
+    -0 22:30:04.2
+   -0 22:30:04.18
+  -0 22:30:04.183
+ -0 22:30:04.1835
+       -0 22:30:04
+     -0 22:30:04.2
+    -0 22:30:04.18
+   -0 22:30:04.183
+  -0 22:30:04.1835
+ -0 22:30:04.18347
+        -0 22:30:04
+      -0 22:30:04.2
+     -0 22:30:04.18
+    -0 22:30:04.183
+   -0 22:30:04.1835
+  -0 22:30:04.18347
+ -0 22:30:04.183470
+ -1:56
+  -1:56
+   -1:56
+ -1:56:51
+  -1:56:51
+   -1:56:51
+ -1:56:51.6
+    -1:56:51
+  -1:56:51.6
+ -1:56:51.59
+     -1:56:51
+   -1:56:51.6
+  -1:56:51.59
+ -1:56:51.593
+      -1:56:51
+    -1:56:51.6
+   -1:56:51.59
+  -1:56:51.593
+ -1:56:51.5932
+       -1:56:51
+     -1:56:51.6
+    -1:56:51.59
+   -1:56:51.593
+  -1:56:51.5932
+ -1:56:51.59319
+        -1:56:51
+      -1:56:51.6
+     -1:56:51.59
+    -1:56:51.593
+   -1:56:51.5932
+  -1:56:51.59319
+ -1:56:51.593190
+ -0 01:56
+  -0 01:56
+   -0 01:56
+ -0 01:56:51
+  -0 01:56:51
+   -0 01:56:51
+ -0 01:56:51.6
+    -0 01:56:51
+  -0 01:56:51.6
+ -0 01:56:51.59
+     -0 01:56:51
+   -0 01:56:51.6
+  -0 01:56:51.59
+ -0 01:56:51.593
+      -0 01:56:51
+    -0 01:56:51.6
+   -0 01:56:51.59
+  -0 01:56:51.593
+ -0 01:56:51.5932
+       -0 01:56:51
+     -0 01:56:51.6
+    -0 01:56:51.59
+   -0 01:56:51.593
+  -0 01:56:51.5932
+ -0 01:56:51.59319
+        -0 01:56:51
+      -0 01:56:51.6
+     -0 01:56:51.59
+    -0 01:56:51.593
+   -0 01:56:51.5932
+  -0 01:56:51.59319
+ -0 01:56:51.593190
+ *****
+ -24:00
+  -24:00
+   -24:00
+ -24:00:00
+  -24:00:00
+  -24:00:00
+   -24:00:00
+ -24:00:00.0
+ -24:00:00.0
+    -24:00:00
+  -24:00:00.0
+ -24:00:00.00
+ -24:00:00.00
+     -24:00:00
+   -24:00:00.0
+  -24:00:00.00
+ -24:00:00.000
+ -24:00:00.000
+      -24:00:00
+    -24:00:00.0
+   -24:00:00.00
+  -24:00:00.000
+ -24:00:00.0000
+ -24:00:00.0000
+       -24:00:00
+     -24:00:00.0
+    -24:00:00.00
+   -24:00:00.000
+  -24:00:00.0000
+ -24:00:00.00000
+ -24:00:00.00000
+ -1 00:00
+  -1 00:00
+   -1 00:00
+ -1 00:00:00
+  -1 00:00:00
+   -1 00:00:00
+ -1 00:00:00.0
+    -1 00:00:00
+  -1 00:00:00.0
+ -1 00:00:00.00
+     -1 00:00:00
+   -1 00:00:00.0
+  -1 00:00:00.00
+ -1 00:00:00.000
+      -1 00:00:00
+    -1 00:00:00.0
+   -1 00:00:00.00
+  -1 00:00:00.000
+ -1 00:00:00.0000
+       -1 00:00:00
+     -1 00:00:00.0
+    -1 00:00:00.00
+   -1 00:00:00.000
+  -1 00:00:00.0000
+ -1 00:00:00.00000
+        -1 00:00:00
+      -1 00:00:00.0
+     -1 00:00:00.00
+    -1 00:00:00.000
+   -1 00:00:00.0000
+  -1 00:00:00.00000
+ -1 00:00:00.000000
+ *****
+ -28:50
+  -28:50
+   -28:50
+ -28:50:38
+  -28:50:38
+  -28:50:38
+   -28:50:38
+ -28:50:38.1
+ -28:50:38.1
+    -28:50:38
+  -28:50:38.1
+ -28:50:38.12
+ -28:50:38.12
+     -28:50:38
+   -28:50:38.1
+  -28:50:38.12
+ -28:50:38.123
+ -28:50:38.123
+      -28:50:38
+    -28:50:38.1
+   -28:50:38.12
+  -28:50:38.123
+ -28:50:38.1230
+ -28:50:38.1230
+       -28:50:38
+     -28:50:38.1
+    -28:50:38.12
+   -28:50:38.123
+  -28:50:38.1230
+ -28:50:38.12301
+ -28:50:38.12301
+ -1 04:50
+  -1 04:50
+   -1 04:50
+ -1 04:50:38
+  -1 04:50:38
+   -1 04:50:38
+ -1 04:50:38.1
+    -1 04:50:38
+  -1 04:50:38.1
+ -1 04:50:38.12
+     -1 04:50:38
+   -1 04:50:38.1
+  -1 04:50:38.12
+ -1 04:50:38.123
+      -1 04:50:38
+    -1 04:50:38.1
+   -1 04:50:38.12
+  -1 04:50:38.123
+ -1 04:50:38.1230
+       -1 04:50:38
+     -1 04:50:38.1
+    -1 04:50:38.12
+   -1 04:50:38.123
+  -1 04:50:38.1230
+ -1 04:50:38.12301
+        -1 04:50:38
+      -1 04:50:38.1
+     -1 04:50:38.12
+    -1 04:50:38.123
+   -1 04:50:38.1230
+  -1 04:50:38.12301
+ -1 04:50:38.123010
+ *****
+ -36:31
+  -36:31
+   -36:31
+ -36:31:35
+  -36:31:35
+  -36:31:35
+   -36:31:35
+ -36:31:35.2
+ -36:31:35.2
+    -36:31:35
+  -36:31:35.2
+ -36:31:35.23
+ -36:31:35.23
+     -36:31:35
+   -36:31:35.2
+  -36:31:35.23
+ -36:31:35.235
+ -36:31:35.235
+      -36:31:35
+    -36:31:35.2
+   -36:31:35.23
+  -36:31:35.235
+ -36:31:35.2345
+ -36:31:35.2345
+       -36:31:35
+     -36:31:35.2
+    -36:31:35.23
+   -36:31:35.235
+  -36:31:35.2345
+ -36:31:35.23453
+ -36:31:35.23453
+ -1 12:31
+  -1 12:31
+   -1 12:31
+ -1 12:31:35
+  -1 12:31:35
+   -1 12:31:35
+ -1 12:31:35.2
+    -1 12:31:35
+  -1 12:31:35.2
+ -1 12:31:35.23
+     -1 12:31:35
+   -1 12:31:35.2
+  -1 12:31:35.23
+ -1 12:31:35.235
+      -1 12:31:35
+    -1 12:31:35.2
+   -1 12:31:35.23
+  -1 12:31:35.235
+ -1 12:31:35.2345
+       -1 12:31:35
+     -1 12:31:35.2
+    -1 12:31:35.23
+   -1 12:31:35.235
+  -1 12:31:35.2345
+ -1 12:31:35.23453
+        -1 12:31:35
+      -1 12:31:35.2
+     -1 12:31:35.23
+    -1 12:31:35.235
+   -1 12:31:35.2345
+  -1 12:31:35.23453
+ -1 12:31:35.234530
+ *****
+ -36:47
+  -36:47
+   -36:47
+ -36:47:53
+  -36:47:53
+  -36:47:53
+   -36:47:53
+ -36:47:53.3
+ -36:47:53.3
+    -36:47:53
+  -36:47:53.3
+ -36:47:53.35
+ -36:47:53.35
+     -36:47:53
+   -36:47:53.3
+  -36:47:53.35
+ -36:47:53.345
+ -36:47:53.345
+      -36:47:53
+    -36:47:53.3
+   -36:47:53.35
+  -36:47:53.345
+ -36:47:53.3451
+ -36:47:53.3451
+       -36:47:53
+     -36:47:53.3
+    -36:47:53.35
+   -36:47:53.345
+  -36:47:53.3451
+ -36:47:53.34505
+ -36:47:53.34505
+ -1 12:47
+  -1 12:47
+   -1 12:47
+ -1 12:47:53
+  -1 12:47:53
+   -1 12:47:53
+ -1 12:47:53.3
+    -1 12:47:53
+  -1 12:47:53.3
+ -1 12:47:53.35
+     -1 12:47:53
+   -1 12:47:53.3
+  -1 12:47:53.35
+ -1 12:47:53.345
+      -1 12:47:53
+    -1 12:47:53.3
+   -1 12:47:53.35
+  -1 12:47:53.345
+ -1 12:47:53.3451
+       -1 12:47:53
+     -1 12:47:53.3
+    -1 12:47:53.35
+   -1 12:47:53.345
+  -1 12:47:53.3451
+ -1 12:47:53.34505
+        -1 12:47:53
+      -1 12:47:53.3
+     -1 12:47:53.35
+    -1 12:47:53.345
+   -1 12:47:53.3451
+  -1 12:47:53.34505
+ -1 12:47:53.345050
+ *****
+ -25:26
+  -25:26
+   -25:26
+ -25:26:00
+  -25:26:00
+  -25:26:00
+   -25:26:00
+ -25:26:00.5
+ -25:26:00.5
+    -25:26:00
+  -25:26:00.5
+ -25:26:00.46
+ -25:26:00.46
+     -25:26:00
+   -25:26:00.5
+  -25:26:00.46
+ -25:26:00.456
+ -25:26:00.456
+      -25:26:00
+    -25:26:00.5
+   -25:26:00.46
+  -25:26:00.456
+ -25:26:00.4561
+ -25:26:00.4561
+       -25:26:00
+     -25:26:00.5
+    -25:26:00.46
+   -25:26:00.456
+  -25:26:00.4561
+ -25:26:00.45615
+ -25:26:00.45615
+ -1 01:26
+  -1 01:26
+   -1 01:26
+ -1 01:26:00
+  -1 01:26:00
+   -1 01:26:00
+ -1 01:26:00.5
+    -1 01:26:00
+  -1 01:26:00.5
+ -1 01:26:00.46
+     -1 01:26:00
+   -1 01:26:00.5
+  -1 01:26:00.46
+ -1 01:26:00.456
+      -1 01:26:00
+    -1 01:26:00.5
+   -1 01:26:00.46
+  -1 01:26:00.456
+ -1 01:26:00.4561
+       -1 01:26:00
+     -1 01:26:00.5
+    -1 01:26:00.46
+   -1 01:26:00.456
+  -1 01:26:00.4561
+ -1 01:26:00.45615
+        -1 01:26:00
+      -1 01:26:00.5
+     -1 01:26:00.46
+    -1 01:26:00.456
+   -1 01:26:00.4561
+  -1 01:26:00.45615
+ -1 01:26:00.456150
+ *****
+ -44:58
+  -44:58
+   -44:58
+ -44:58:11
+  -44:58:11
+  -44:58:11
+   -44:58:11
+ -44:58:11.6
+ -44:58:11.6
+    -44:58:11
+  -44:58:11.6
+ -44:58:11.57
+ -44:58:11.57
+     -44:58:11
+   -44:58:11.6
+  -44:58:11.57
+ -44:58:11.567
+ -44:58:11.567
+      -44:58:11
+    -44:58:11.6
+   -44:58:11.57
+  -44:58:11.567
+ -44:58:11.5668
+ -44:58:11.5668
+       -44:58:11
+     -44:58:11.6
+    -44:58:11.57
+   -44:58:11.567
+  -44:58:11.5668
+ -44:58:11.56677
+ -44:58:11.56677
+ -1 20:58
+  -1 20:58
+   -1 20:58
+ -1 20:58:11
+  -1 20:58:11
+   -1 20:58:11
+ -1 20:58:11.6
+    -1 20:58:11
+  -1 20:58:11.6
+ -1 20:58:11.57
+     -1 20:58:11
+   -1 20:58:11.6
+  -1 20:58:11.57
+ -1 20:58:11.567
+      -1 20:58:11
+    -1 20:58:11.6
+   -1 20:58:11.57
+  -1 20:58:11.567
+ -1 20:58:11.5668
+       -1 20:58:11
+     -1 20:58:11.6
+    -1 20:58:11.57
+   -1 20:58:11.567
+  -1 20:58:11.5668
+ -1 20:58:11.56677
+        -1 20:58:11
+      -1 20:58:11.6
+     -1 20:58:11.57
+    -1 20:58:11.567
+   -1 20:58:11.5668
+  -1 20:58:11.56677
+ -1 20:58:11.566770
+ *****
+ -31:36
+  -31:36
+   -31:36
+ -31:36:05
+  -31:36:05
+  -31:36:05
+   -31:36:05
+ -31:36:05.2
+ -31:36:05.2
+    -31:36:05
+  -31:36:05.2
+ -31:36:05.19
+ -31:36:05.19
+     -31:36:05
+   -31:36:05.2
+  -31:36:05.19
+ -31:36:05.190
+ -31:36:05.190
+      -31:36:05
+    -31:36:05.2
+   -31:36:05.19
+  -31:36:05.190
+ -31:36:05.1896
+ -31:36:05.1896
+       -31:36:05
+     -31:36:05.2
+    -31:36:05.19
+   -31:36:05.190
+  -31:36:05.1896
+ -31:36:05.18964
+ -31:36:05.18964
+ -1 07:36
+  -1 07:36
+   -1 07:36
+ -1 07:36:05
+  -1 07:36:05
+   -1 07:36:05
+ -1 07:36:05.2
+    -1 07:36:05
+  -1 07:36:05.2
+ -1 07:36:05.19
+     -1 07:36:05
+   -1 07:36:05.2
+  -1 07:36:05.19
+ -1 07:36:05.190
+      -1 07:36:05
+    -1 07:36:05.2
+   -1 07:36:05.19
+  -1 07:36:05.190
+ -1 07:36:05.1896
+       -1 07:36:05
+     -1 07:36:05.2
+    -1 07:36:05.19
+   -1 07:36:05.190
+  -1 07:36:05.1896
+ -1 07:36:05.18964
+        -1 07:36:05
+      -1 07:36:05.2
+     -1 07:36:05.19
+    -1 07:36:05.190
+   -1 07:36:05.1896
+  -1 07:36:05.18964
+ -1 07:36:05.189640
+ *****
+ -39:43
+  -39:43
+   -39:43
+ -39:43:49
+  -39:43:49
+  -39:43:49
+   -39:43:49
+ -39:43:49.8
+ -39:43:49.8
+    -39:43:49
+  -39:43:49.8
+ -39:43:49.83
+ -39:43:49.83
+     -39:43:49
+   -39:43:49.8
+  -39:43:49.83
+ -39:43:49.831
+ -39:43:49.831
+      -39:43:49
+    -39:43:49.8
+   -39:43:49.83
+  -39:43:49.831
+ -39:43:49.8313
+ -39:43:49.8313
+       -39:43:49
+     -39:43:49.8
+    -39:43:49.83
+   -39:43:49.831
+  -39:43:49.8313
+ -39:43:49.83132
+ -39:43:49.83132
+ -1 15:43
+  -1 15:43
+   -1 15:43
+ -1 15:43:49
+  -1 15:43:49
+   -1 15:43:49
+ -1 15:43:49.8
+    -1 15:43:49
+  -1 15:43:49.8
+ -1 15:43:49.83
+     -1 15:43:49
+   -1 15:43:49.8
+  -1 15:43:49.83
+ -1 15:43:49.831
+      -1 15:43:49
+    -1 15:43:49.8
+   -1 15:43:49.83
+  -1 15:43:49.831
+ -1 15:43:49.8313
+       -1 15:43:49
+     -1 15:43:49.8
+    -1 15:43:49.83
+   -1 15:43:49.831
+  -1 15:43:49.8313
+ -1 15:43:49.83132
+        -1 15:43:49
+      -1 15:43:49.8
+     -1 15:43:49.83
+    -1 15:43:49.831
+   -1 15:43:49.8313
+  -1 15:43:49.83132
+ -1 15:43:49.831320
+ *****
+ -28:25
+  -28:25
+   -28:25
+ -28:25:09
+  -28:25:09
+  -28:25:09
+   -28:25:09
+ -28:25:09.0
+ -28:25:09.0
+    -28:25:09
+  -28:25:09.0
+ -28:25:09.01
+ -28:25:09.01
+     -28:25:09
+   -28:25:09.0
+  -28:25:09.01
+ -28:25:09.013
+ -28:25:09.013
+      -28:25:09
+    -28:25:09.0
+   -28:25:09.01
+  -28:25:09.013
+ -28:25:09.0129
+ -28:25:09.0129
+       -28:25:09
+     -28:25:09.0
+    -28:25:09.01
+   -28:25:09.013
+  -28:25:09.0129
+ -28:25:09.01293
+ -28:25:09.01293
+ -1 04:25
+  -1 04:25
+   -1 04:25
+ -1 04:25:09
+  -1 04:25:09
+   -1 04:25:09
+ -1 04:25:09.0
+    -1 04:25:09
+  -1 04:25:09.0
+ -1 04:25:09.01
+     -1 04:25:09
+   -1 04:25:09.0
+  -1 04:25:09.01
+ -1 04:25:09.013
+      -1 04:25:09
+    -1 04:25:09.0
+   -1 04:25:09.01
+  -1 04:25:09.013
+ -1 04:25:09.0129
+       -1 04:25:09
+     -1 04:25:09.0
+    -1 04:25:09.01
+   -1 04:25:09.013
+  -1 04:25:09.0129
+ -1 04:25:09.01293
+        -1 04:25:09
+      -1 04:25:09.0
+     -1 04:25:09.01
+    -1 04:25:09.013
+   -1 04:25:09.0129
+  -1 04:25:09.01293
+ -1 04:25:09.012930
+ *****
+ -30:49
+  -30:49
+   -30:49
+ -30:49:27
+  -30:49:27
+  -30:49:27
+   -30:49:27
+ -30:49:27.5
+ -30:49:27.5
+    -30:49:27
+  -30:49:27.5
+ -30:49:27.52
+ -30:49:27.52
+     -30:49:27
+   -30:49:27.5
+  -30:49:27.52
+ -30:49:27.524
+ -30:49:27.524
+      -30:49:27
+    -30:49:27.5
+   -30:49:27.52
+  -30:49:27.524
+ -30:49:27.5237
+ -30:49:27.5237
+       -30:49:27
+     -30:49:27.5
+    -30:49:27.52
+   -30:49:27.524
+  -30:49:27.5237
+ -30:49:27.52375
+ -30:49:27.52375
+ -1 06:49
+  -1 06:49
+   -1 06:49
+ -1 06:49:27
+  -1 06:49:27
+   -1 06:49:27
+ -1 06:49:27.5
+    -1 06:49:27
+  -1 06:49:27.5
+ -1 06:49:27.52
+     -1 06:49:27
+   -1 06:49:27.5
+  -1 06:49:27.52
+ -1 06:49:27.524
+      -1 06:49:27
+    -1 06:49:27.5
+   -1 06:49:27.52
+  -1 06:49:27.524
+ -1 06:49:27.5237
+       -1 06:49:27
+     -1 06:49:27.5
+    -1 06:49:27.52
+   -1 06:49:27.524
+  -1 06:49:27.5237
+ -1 06:49:27.52375
+        -1 06:49:27
+      -1 06:49:27.5
+     -1 06:49:27.52
+    -1 06:49:27.524
+   -1 06:49:27.5237
+  -1 06:49:27.52375
+ -1 06:49:27.523750
+ *****
+ -26:57
+  -26:57
+   -26:57
+ -26:57:52
+  -26:57:52
+  -26:57:52
+   -26:57:52
+ -26:57:52.0
+ -26:57:52.0
+    -26:57:52
+  -26:57:52.0
+ -26:57:52.02
+ -26:57:52.02
+     -26:57:52
+   -26:57:52.0
+  -26:57:52.02
+ -26:57:52.016
+ -26:57:52.016
+      -26:57:52
+    -26:57:52.0
+   -26:57:52.02
+  -26:57:52.016
+ -26:57:52.0157
+ -26:57:52.0157
+       -26:57:52
+     -26:57:52.0
+    -26:57:52.02
+   -26:57:52.016
+  -26:57:52.0157
+ -26:57:52.01565
+ -26:57:52.01565
+ -1 02:57
+  -1 02:57
+   -1 02:57
+ -1 02:57:52
+  -1 02:57:52
+   -1 02:57:52
+ -1 02:57:52.0
+    -1 02:57:52
+  -1 02:57:52.0
+ -1 02:57:52.02
+     -1 02:57:52
+   -1 02:57:52.0
+  -1 02:57:52.02
+ -1 02:57:52.016
+      -1 02:57:52
+    -1 02:57:52.0
+   -1 02:57:52.02
+  -1 02:57:52.016
+ -1 02:57:52.0157
+       -1 02:57:52
+     -1 02:57:52.0
+    -1 02:57:52.02
+   -1 02:57:52.016
+  -1 02:57:52.0157
+ -1 02:57:52.01565
+        -1 02:57:52
+      -1 02:57:52.0
+     -1 02:57:52.02
+    -1 02:57:52.016
+   -1 02:57:52.0157
+  -1 02:57:52.01565
+ -1 02:57:52.015650
+ *****
+ -40:45
+  -40:45
+   -40:45
+ -40:45:44
+  -40:45:44
+  -40:45:44
+   -40:45:44
+ -40:45:44.9
+ -40:45:44.9
+    -40:45:44
+  -40:45:44.9
+ -40:45:44.87
+ -40:45:44.87
+     -40:45:44
+   -40:45:44.9
+  -40:45:44.87
+ -40:45:44.865
+ -40:45:44.865
+      -40:45:44
+    -40:45:44.9
+   -40:45:44.87
+  -40:45:44.865
+ -40:45:44.8653
+ -40:45:44.8653
+       -40:45:44
+     -40:45:44.9
+    -40:45:44.87
+   -40:45:44.865
+  -40:45:44.8653
+ -40:45:44.86529
+ -40:45:44.86529
+ -1 16:45
+  -1 16:45
+   -1 16:45
+ -1 16:45:44
+  -1 16:45:44
+   -1 16:45:44
+ -1 16:45:44.9
+    -1 16:45:44
+  -1 16:45:44.9
+ -1 16:45:44.87
+     -1 16:45:44
+   -1 16:45:44.9
+  -1 16:45:44.87
+ -1 16:45:44.865
+      -1 16:45:44
+    -1 16:45:44.9
+   -1 16:45:44.87
+  -1 16:45:44.865
+ -1 16:45:44.8653
+       -1 16:45:44
+     -1 16:45:44.9
+    -1 16:45:44.87
+   -1 16:45:44.865
+  -1 16:45:44.8653
+ -1 16:45:44.86529
+        -1 16:45:44
+      -1 16:45:44.9
+     -1 16:45:44.87
+    -1 16:45:44.865
+   -1 16:45:44.8653
+  -1 16:45:44.86529
+ -1 16:45:44.865290
+ *****
+ -45:30
+  -45:30
+   -45:30
+ -45:30:57
+  -45:30:57
+  -45:30:57
+   -45:30:57
+ -45:30:57.8
+ -45:30:57.8
+    -45:30:57
+  -45:30:57.8
+ -45:30:57.82
+ -45:30:57.82
+     -45:30:57
+   -45:30:57.8
+  -45:30:57.82
+ -45:30:57.820
+ -45:30:57.820
+      -45:30:57
+    -45:30:57.8
+   -45:30:57.82
+  -45:30:57.820
+ -45:30:57.8205
+ -45:30:57.8205
+       -45:30:57
+     -45:30:57.8
+    -45:30:57.82
+   -45:30:57.820
+  -45:30:57.8205
+ -45:30:57.82047
+ -45:30:57.82047
+ -1 21:30
+  -1 21:30
+   -1 21:30
+ -1 21:30:57
+  -1 21:30:57
+   -1 21:30:57
+ -1 21:30:57.8
+    -1 21:30:57
+  -1 21:30:57.8
+ -1 21:30:57.82
+     -1 21:30:57
+   -1 21:30:57.8
+  -1 21:30:57.82
+ -1 21:30:57.820
+      -1 21:30:57
+    -1 21:30:57.8
+   -1 21:30:57.82
+  -1 21:30:57.820
+ -1 21:30:57.8205
+       -1 21:30:57
+     -1 21:30:57.8
+    -1 21:30:57.82
+   -1 21:30:57.820
+  -1 21:30:57.8205
+ -1 21:30:57.82047
+        -1 21:30:57
+      -1 21:30:57.8
+     -1 21:30:57.82
+    -1 21:30:57.820
+   -1 21:30:57.8205
+  -1 21:30:57.82047
+ -1 21:30:57.820470
+ *****
+ -28:25
+  -28:25
+   -28:25
+ -28:25:09
+  -28:25:09
+  -28:25:09
+   -28:25:09
+ -28:25:09.2
+ -28:25:09.2
+    -28:25:09
+  -28:25:09.2
+ -28:25:09.15
+ -28:25:09.15
+     -28:25:09
+   -28:25:09.2
+  -28:25:09.15
+ -28:25:09.154
+ -28:25:09.154
+      -28:25:09
+    -28:25:09.2
+   -28:25:09.15
+  -28:25:09.154
+ -28:25:09.1540
+ -28:25:09.1540
+       -28:25:09
+     -28:25:09.2
+    -28:25:09.15
+   -28:25:09.154
+  -28:25:09.1540
+ -28:25:09.15395
+ -28:25:09.15395
+ -1 04:25
+  -1 04:25
+   -1 04:25
+ -1 04:25:09
+  -1 04:25:09
+   -1 04:25:09
+ -1 04:25:09.2
+    -1 04:25:09
+  -1 04:25:09.2
+ -1 04:25:09.15
+     -1 04:25:09
+   -1 04:25:09.2
+  -1 04:25:09.15
+ -1 04:25:09.154
+      -1 04:25:09
+    -1 04:25:09.2
+   -1 04:25:09.15
+  -1 04:25:09.154
+ -1 04:25:09.1540
+       -1 04:25:09
+     -1 04:25:09.2
+    -1 04:25:09.15
+   -1 04:25:09.154
+  -1 04:25:09.1540
+ -1 04:25:09.15395
+        -1 04:25:09
+      -1 04:25:09.2
+     -1 04:25:09.15
+    -1 04:25:09.154
+   -1 04:25:09.1540
+  -1 04:25:09.15395
+ -1 04:25:09.153950
+ *****
+ -30:49
+  -30:49
+   -30:49
+ -30:49:27
+  -30:49:27
+  -30:49:27
+   -30:49:27
+ -30:49:27.1
+ -30:49:27.1
+    -30:49:27
+  -30:49:27.1
+ -30:49:27.11
+ -30:49:27.11
+     -30:49:27
+   -30:49:27.1
+  -30:49:27.11
+ -30:49:27.105
+ -30:49:27.105
+      -30:49:27
+    -30:49:27.1
+   -30:49:27.11
+  -30:49:27.105
+ -30:49:27.1053
+ -30:49:27.1053
+       -30:49:27
+     -30:49:27.1
+    -30:49:27.11
+   -30:49:27.105
+  -30:49:27.1053
+ -30:49:27.10533
+ -30:49:27.10533
+ -1 06:49
+  -1 06:49
+   -1 06:49
+ -1 06:49:27
+  -1 06:49:27
+   -1 06:49:27
+ -1 06:49:27.1
+    -1 06:49:27
+  -1 06:49:27.1
+ -1 06:49:27.11
+     -1 06:49:27
+   -1 06:49:27.1
+  -1 06:49:27.11
+ -1 06:49:27.105
+      -1 06:49:27
+    -1 06:49:27.1
+   -1 06:49:27.11
+  -1 06:49:27.105
+ -1 06:49:27.1053
+       -1 06:49:27
+     -1 06:49:27.1
+    -1 06:49:27.11
+   -1 06:49:27.105
+  -1 06:49:27.1053
+ -1 06:49:27.10533
+        -1 06:49:27
+      -1 06:49:27.1
+     -1 06:49:27.11
+    -1 06:49:27.105
+   -1 06:49:27.1053
+  -1 06:49:27.10533
+ -1 06:49:27.105330
+ *****
+ -26:57
+  -26:57
+   -26:57
+ -26:57:52
+  -26:57:52
+  -26:57:52
+   -26:57:52
+ -26:57:52.5
+ -26:57:52.5
+    -26:57:52
+  -26:57:52.5
+ -26:57:52.48
+ -26:57:52.48
+     -26:57:52
+   -26:57:52.5
+  -26:57:52.48
+ -26:57:52.482
+ -26:57:52.482
+      -26:57:52
+    -26:57:52.5
+   -26:57:52.48
+  -26:57:52.482
+ -26:57:52.4823
+ -26:57:52.4823
+       -26:57:52
+     -26:57:52.5
+    -26:57:52.48
+   -26:57:52.482
+  -26:57:52.4823
+ -26:57:52.48229
+ -26:57:52.48229
+ -1 02:57
+  -1 02:57
+   -1 02:57
+ -1 02:57:52
+  -1 02:57:52
+   -1 02:57:52
+ -1 02:57:52.5
+    -1 02:57:52
+  -1 02:57:52.5
+ -1 02:57:52.48
+     -1 02:57:52
+   -1 02:57:52.5
+  -1 02:57:52.48
+ -1 02:57:52.482
+      -1 02:57:52
+    -1 02:57:52.5
+   -1 02:57:52.48
+  -1 02:57:52.482
+ -1 02:57:52.4823
+       -1 02:57:52
+     -1 02:57:52.5
+    -1 02:57:52.48
+   -1 02:57:52.482
+  -1 02:57:52.4823
+ -1 02:57:52.48229
+        -1 02:57:52
+      -1 02:57:52.5
+     -1 02:57:52.48
+    -1 02:57:52.482
+   -1 02:57:52.4823
+  -1 02:57:52.48229
+ -1 02:57:52.482290
+ *****
+ -40:45
+  -40:45
+   -40:45
+ -40:45:44
+  -40:45:44
+  -40:45:44
+   -40:45:44
+ -40:45:44.7
+ -40:45:44.7
+    -40:45:44
+  -40:45:44.7
+ -40:45:44.66
+ -40:45:44.66
+     -40:45:44
+   -40:45:44.7
+  -40:45:44.66
+ -40:45:44.658
+ -40:45:44.658
+      -40:45:44
+    -40:45:44.7
+   -40:45:44.66
+  -40:45:44.658
+ -40:45:44.6583
+ -40:45:44.6583
+       -40:45:44
+     -40:45:44.7
+    -40:45:44.66
+   -40:45:44.658
+  -40:45:44.6583
+ -40:45:44.65827
+ -40:45:44.65827
+ -1 16:45
+  -1 16:45
+   -1 16:45
+ -1 16:45:44
+  -1 16:45:44
+   -1 16:45:44
+ -1 16:45:44.7
+    -1 16:45:44
+  -1 16:45:44.7
+ -1 16:45:44.66
+     -1 16:45:44
+   -1 16:45:44.7
+  -1 16:45:44.66
+ -1 16:45:44.658
+      -1 16:45:44
+    -1 16:45:44.7
+   -1 16:45:44.66
+  -1 16:45:44.658
+ -1 16:45:44.6583
+       -1 16:45:44
+     -1 16:45:44.7
+    -1 16:45:44.66
+   -1 16:45:44.658
+  -1 16:45:44.6583
+ -1 16:45:44.65827
+        -1 16:45:44
+      -1 16:45:44.7
+     -1 16:45:44.66
+    -1 16:45:44.658
+   -1 16:45:44.6583
+  -1 16:45:44.65827
+ -1 16:45:44.658270
+ *****
+ -45:30
+  -45:30
+   -45:30
+ -45:30:57
+  -45:30:57
+  -45:30:57
+   -45:30:57
+ -45:30:57.6
+ -45:30:57.6
+    -45:30:57
+  -45:30:57.6
+ -45:30:57.58
+ -45:30:57.58
+     -45:30:57
+   -45:30:57.6
+  -45:30:57.58
+ -45:30:57.582
+ -45:30:57.582
+      -45:30:57
+    -45:30:57.6
+   -45:30:57.58
+  -45:30:57.582
+ -45:30:57.5822
+ -45:30:57.5822
+       -45:30:57
+     -45:30:57.6
+    -45:30:57.58
+   -45:30:57.582
+  -45:30:57.5822
+ -45:30:57.58219
+ -45:30:57.58219
+ -1 21:30
+  -1 21:30
+   -1 21:30
+ -1 21:30:57
+  -1 21:30:57
+   -1 21:30:57
+ -1 21:30:57.6
+    -1 21:30:57
+  -1 21:30:57.6
+ -1 21:30:57.58
+     -1 21:30:57
+   -1 21:30:57.6
+  -1 21:30:57.58
+ -1 21:30:57.582
+      -1 21:30:57
+    -1 21:30:57.6
+   -1 21:30:57.58
+  -1 21:30:57.582
+ -1 21:30:57.5822
+       -1 21:30:57
+     -1 21:30:57.6
+    -1 21:30:57.58
+   -1 21:30:57.582
+  -1 21:30:57.5822
+ -1 21:30:57.58219
+        -1 21:30:57
+      -1 21:30:57.6
+     -1 21:30:57.58
+    -1 21:30:57.582
+   -1 21:30:57.5822
+  -1 21:30:57.58219
+ -1 21:30:57.582190
+ *****
+ -46:30
+  -46:30
+   -46:30
+ -46:30:04
+  -46:30:04
+  -46:30:04
+   -46:30:04
+ -46:30:04.2
+ -46:30:04.2
+    -46:30:04
+  -46:30:04.2
+ -46:30:04.18
+ -46:30:04.18
+     -46:30:04
+   -46:30:04.2
+  -46:30:04.18
+ -46:30:04.183
+ -46:30:04.183
+      -46:30:04
+    -46:30:04.2
+   -46:30:04.18
+  -46:30:04.183
+ -46:30:04.1835
+ -46:30:04.1835
+       -46:30:04
+     -46:30:04.2
+    -46:30:04.18
+   -46:30:04.183
+  -46:30:04.1835
+ -46:30:04.18347
+ -46:30:04.18347
+ -1 22:30
+  -1 22:30
+   -1 22:30
+ -1 22:30:04
+  -1 22:30:04
+   -1 22:30:04
+ -1 22:30:04.2
+    -1 22:30:04
+  -1 22:30:04.2
+ -1 22:30:04.18
+     -1 22:30:04
+   -1 22:30:04.2
+  -1 22:30:04.18
+ -1 22:30:04.183
+      -1 22:30:04
+    -1 22:30:04.2
+   -1 22:30:04.18
+  -1 22:30:04.183
+ -1 22:30:04.1835
+       -1 22:30:04
+     -1 22:30:04.2
+    -1 22:30:04.18
+   -1 22:30:04.183
+  -1 22:30:04.1835
+ -1 22:30:04.18347
+        -1 22:30:04
+      -1 22:30:04.2
+     -1 22:30:04.18
+    -1 22:30:04.183
+   -1 22:30:04.1835
+  -1 22:30:04.18347
+ -1 22:30:04.183470
+ *****
+ -25:56
+  -25:56
+   -25:56
+ -25:56:51
+  -25:56:51
+  -25:56:51
+   -25:56:51
+ -25:56:51.6
+ -25:56:51.6
+    -25:56:51
+  -25:56:51.6
+ -25:56:51.59
+ -25:56:51.59
+     -25:56:51
+   -25:56:51.6
+  -25:56:51.59
+ -25:56:51.593
+ -25:56:51.593
+      -25:56:51
+    -25:56:51.6
+   -25:56:51.59
+  -25:56:51.593
+ -25:56:51.5932
+ -25:56:51.5932
+       -25:56:51
+     -25:56:51.6
+    -25:56:51.59
+   -25:56:51.593
+  -25:56:51.5932
+ -25:56:51.59319
+ -25:56:51.59319
+ -1 01:56
+  -1 01:56
+   -1 01:56
+ -1 01:56:51
+  -1 01:56:51
+   -1 01:56:51
+ -1 01:56:51.6
+    -1 01:56:51
+  -1 01:56:51.6
+ -1 01:56:51.59
+     -1 01:56:51
+   -1 01:56:51.6
+  -1 01:56:51.59
+ -1 01:56:51.593
+      -1 01:56:51
+    -1 01:56:51.6
+   -1 01:56:51.59
+  -1 01:56:51.593
+ -1 01:56:51.5932
+       -1 01:56:51
+     -1 01:56:51.6
+    -1 01:56:51.59
+   -1 01:56:51.593
+  -1 01:56:51.5932
+ -1 01:56:51.59319
+        -1 01:56:51
+      -1 01:56:51.6
+     -1 01:56:51.59
+    -1 01:56:51.593
+   -1 01:56:51.5932
+  -1 01:56:51.59319
+ -1 01:56:51.593190
+ *****
+ -48:00
+  -48:00
+   -48:00
+ -48:00:00
+  -48:00:00
+  -48:00:00
+   -48:00:00
+ -48:00:00.0
+ -48:00:00.0
+    -48:00:00
+  -48:00:00.0
+ -48:00:00.00
+ -48:00:00.00
+     -48:00:00
+   -48:00:00.0
+  -48:00:00.00
+ -48:00:00.000
+ -48:00:00.000
+      -48:00:00
+    -48:00:00.0
+   -48:00:00.00
+  -48:00:00.000
+ -48:00:00.0000
+ -48:00:00.0000
+       -48:00:00
+     -48:00:00.0
+    -48:00:00.00
+   -48:00:00.000
+  -48:00:00.0000
+ -48:00:00.00000
+ -48:00:00.00000
+ -2 00:00
+  -2 00:00
+   -2 00:00
+ -2 00:00:00
+  -2 00:00:00
+   -2 00:00:00
+ -2 00:00:00.0
+    -2 00:00:00
+  -2 00:00:00.0
+ -2 00:00:00.00
+     -2 00:00:00
+   -2 00:00:00.0
+  -2 00:00:00.00
+ -2 00:00:00.000
+      -2 00:00:00
+    -2 00:00:00.0
+   -2 00:00:00.00
+  -2 00:00:00.000
+ -2 00:00:00.0000
+       -2 00:00:00
+     -2 00:00:00.0
+    -2 00:00:00.00
+   -2 00:00:00.000
+  -2 00:00:00.0000
+ -2 00:00:00.00000
+        -2 00:00:00
+      -2 00:00:00.0
+     -2 00:00:00.00
+    -2 00:00:00.000
+   -2 00:00:00.0000
+  -2 00:00:00.00000
+ -2 00:00:00.000000
+ *****
+ -52:50
+  -52:50
+   -52:50
+ -52:50:38
+  -52:50:38
+  -52:50:38
+   -52:50:38
+ -52:50:38.1
+ -52:50:38.1
+    -52:50:38
+  -52:50:38.1
+ -52:50:38.12
+ -52:50:38.12
+     -52:50:38
+   -52:50:38.1
+  -52:50:38.12
+ -52:50:38.123
+ -52:50:38.123
+      -52:50:38
+    -52:50:38.1
+   -52:50:38.12
+  -52:50:38.123
+ -52:50:38.1230
+ -52:50:38.1230
+       -52:50:38
+     -52:50:38.1
+    -52:50:38.12
+   -52:50:38.123
+  -52:50:38.1230
+ -52:50:38.12301
+ -52:50:38.12301
+ -2 04:50
+  -2 04:50
+   -2 04:50
+ -2 04:50:38
+  -2 04:50:38
+   -2 04:50:38
+ -2 04:50:38.1
+    -2 04:50:38
+  -2 04:50:38.1
+ -2 04:50:38.12
+     -2 04:50:38
+   -2 04:50:38.1
+  -2 04:50:38.12
+ -2 04:50:38.123
+      -2 04:50:38
+    -2 04:50:38.1
+   -2 04:50:38.12
+  -2 04:50:38.123
+ -2 04:50:38.1230
+       -2 04:50:38
+     -2 04:50:38.1
+    -2 04:50:38.12
+   -2 04:50:38.123
+  -2 04:50:38.1230
+ -2 04:50:38.12301
+        -2 04:50:38
+      -2 04:50:38.1
+     -2 04:50:38.12
+    -2 04:50:38.123
+   -2 04:50:38.1230
+  -2 04:50:38.12301
+ -2 04:50:38.123010
+ *****
+ -60:31
+  -60:31
+   -60:31
+ -60:31:35
+  -60:31:35
+  -60:31:35
+   -60:31:35
+ -60:31:35.2
+ -60:31:35.2
+    -60:31:35
+  -60:31:35.2
+ -60:31:35.23
+ -60:31:35.23
+     -60:31:35
+   -60:31:35.2
+  -60:31:35.23
+ -60:31:35.235
+ -60:31:35.235
+      -60:31:35
+    -60:31:35.2
+   -60:31:35.23
+  -60:31:35.235
+ -60:31:35.2345
+ -60:31:35.2345
+       -60:31:35
+     -60:31:35.2
+    -60:31:35.23
+   -60:31:35.235
+  -60:31:35.2345
+ -60:31:35.23453
+ -60:31:35.23453
+ -2 12:31
+  -2 12:31
+   -2 12:31
+ -2 12:31:35
+  -2 12:31:35
+   -2 12:31:35
+ -2 12:31:35.2
+    -2 12:31:35
+  -2 12:31:35.2
+ -2 12:31:35.23
+     -2 12:31:35
+   -2 12:31:35.2
+  -2 12:31:35.23
+ -2 12:31:35.235
+      -2 12:31:35
+    -2 12:31:35.2
+   -2 12:31:35.23
+  -2 12:31:35.235
+ -2 12:31:35.2345
+       -2 12:31:35
+     -2 12:31:35.2
+    -2 12:31:35.23
+   -2 12:31:35.235
+  -2 12:31:35.2345
+ -2 12:31:35.23453
+        -2 12:31:35
+      -2 12:31:35.2
+     -2 12:31:35.23
+    -2 12:31:35.235
+   -2 12:31:35.2345
+  -2 12:31:35.23453
+ -2 12:31:35.234530
+ *****
+ -60:47
+  -60:47
+   -60:47
+ -60:47:53
+  -60:47:53
+  -60:47:53
+   -60:47:53
+ -60:47:53.3
+ -60:47:53.3
+    -60:47:53
+  -60:47:53.3
+ -60:47:53.35
+ -60:47:53.35
+     -60:47:53
+   -60:47:53.3
+  -60:47:53.35
+ -60:47:53.345
+ -60:47:53.345
+      -60:47:53
+    -60:47:53.3
+   -60:47:53.35
+  -60:47:53.345
+ -60:47:53.3451
+ -60:47:53.3451
+       -60:47:53
+     -60:47:53.3
+    -60:47:53.35
+   -60:47:53.345
+  -60:47:53.3451
+ -60:47:53.34505
+ -60:47:53.34505
+ -2 12:47
+  -2 12:47
+   -2 12:47
+ -2 12:47:53
+  -2 12:47:53
+   -2 12:47:53
+ -2 12:47:53.3
+    -2 12:47:53
+  -2 12:47:53.3
+ -2 12:47:53.35
+     -2 12:47:53
+   -2 12:47:53.3
+  -2 12:47:53.35
+ -2 12:47:53.345
+      -2 12:47:53
+    -2 12:47:53.3
+   -2 12:47:53.35
+  -2 12:47:53.345
+ -2 12:47:53.3451
+       -2 12:47:53
+     -2 12:47:53.3
+    -2 12:47:53.35
+   -2 12:47:53.345
+  -2 12:47:53.3451
+ -2 12:47:53.34505
+        -2 12:47:53
+      -2 12:47:53.3
+     -2 12:47:53.35
+    -2 12:47:53.345
+   -2 12:47:53.3451
+  -2 12:47:53.34505
+ -2 12:47:53.345050
+ *****
+ -49:26
+  -49:26
+   -49:26
+ -49:26:00
+  -49:26:00
+  -49:26:00
+   -49:26:00
+ -49:26:00.5
+ -49:26:00.5
+    -49:26:00
+  -49:26:00.5
+ -49:26:00.46
+ -49:26:00.46
+     -49:26:00
+   -49:26:00.5
+  -49:26:00.46
+ -49:26:00.456
+ -49:26:00.456
+      -49:26:00
+    -49:26:00.5
+   -49:26:00.46
+  -49:26:00.456
+ -49:26:00.4562
+ -49:26:00.4562
+       -49:26:00
+     -49:26:00.5
+    -49:26:00.46
+   -49:26:00.456
+  -49:26:00.4562
+ -49:26:00.45615
+ -49:26:00.45615
+ -2 01:26
+  -2 01:26
+   -2 01:26
+ -2 01:26:00
+  -2 01:26:00
+   -2 01:26:00
+ -2 01:26:00.5
+    -2 01:26:00
+  -2 01:26:00.5
+ -2 01:26:00.46
+     -2 01:26:00
+   -2 01:26:00.5
+  -2 01:26:00.46
+ -2 01:26:00.456
+      -2 01:26:00
+    -2 01:26:00.5
+   -2 01:26:00.46
+  -2 01:26:00.456
+ -2 01:26:00.4562
+       -2 01:26:00
+     -2 01:26:00.5
+    -2 01:26:00.46
+   -2 01:26:00.456
+  -2 01:26:00.4562
+ -2 01:26:00.45615
+        -2 01:26:00
+      -2 01:26:00.5
+     -2 01:26:00.46
+    -2 01:26:00.456
+   -2 01:26:00.4562
+  -2 01:26:00.45615
+ -2 01:26:00.456150
+ *****
+ -68:58
+  -68:58
+   -68:58
+ -68:58:11
+  -68:58:11
+  -68:58:11
+   -68:58:11
+ -68:58:11.6
+ -68:58:11.6
+    -68:58:11
+  -68:58:11.6
+ -68:58:11.57
+ -68:58:11.57
+     -68:58:11
+   -68:58:11.6
+  -68:58:11.57
+ -68:58:11.567
+ -68:58:11.567
+      -68:58:11
+    -68:58:11.6
+   -68:58:11.57
+  -68:58:11.567
+ -68:58:11.5668
+ -68:58:11.5668
+       -68:58:11
+     -68:58:11.6
+    -68:58:11.57
+   -68:58:11.567
+  -68:58:11.5668
+ -68:58:11.56677
+ -68:58:11.56677
+ -2 20:58
+  -2 20:58
+   -2 20:58
+ -2 20:58:11
+  -2 20:58:11
+   -2 20:58:11
+ -2 20:58:11.6
+    -2 20:58:11
+  -2 20:58:11.6
+ -2 20:58:11.57
+     -2 20:58:11
+   -2 20:58:11.6
+  -2 20:58:11.57
+ -2 20:58:11.567
+      -2 20:58:11
+    -2 20:58:11.6
+   -2 20:58:11.57
+  -2 20:58:11.567
+ -2 20:58:11.5668
+       -2 20:58:11
+     -2 20:58:11.6
+    -2 20:58:11.57
+   -2 20:58:11.567
+  -2 20:58:11.5668
+ -2 20:58:11.56677
+        -2 20:58:11
+      -2 20:58:11.6
+     -2 20:58:11.57
+    -2 20:58:11.567
+   -2 20:58:11.5668
+  -2 20:58:11.56677
+ -2 20:58:11.566770
+ *****
+ -55:36
+  -55:36
+   -55:36
+ -55:36:05
+  -55:36:05
+  -55:36:05
+   -55:36:05
+ -55:36:05.2
+ -55:36:05.2
+    -55:36:05
+  -55:36:05.2
+ -55:36:05.19
+ -55:36:05.19
+     -55:36:05
+   -55:36:05.2
+  -55:36:05.19
+ -55:36:05.190
+ -55:36:05.190
+      -55:36:05
+    -55:36:05.2
+   -55:36:05.19
+  -55:36:05.190
+ -55:36:05.1896
+ -55:36:05.1896
+       -55:36:05
+     -55:36:05.2
+    -55:36:05.19
+   -55:36:05.190
+  -55:36:05.1896
+ -55:36:05.18964
+ -55:36:05.18964
+ -2 07:36
+  -2 07:36
+   -2 07:36
+ -2 07:36:05
+  -2 07:36:05
+   -2 07:36:05
+ -2 07:36:05.2
+    -2 07:36:05
+  -2 07:36:05.2
+ -2 07:36:05.19
+     -2 07:36:05
+   -2 07:36:05.2
+  -2 07:36:05.19
+ -2 07:36:05.190
+      -2 07:36:05
+    -2 07:36:05.2
+   -2 07:36:05.19
+  -2 07:36:05.190
+ -2 07:36:05.1896
+       -2 07:36:05
+     -2 07:36:05.2
+    -2 07:36:05.19
+   -2 07:36:05.190
+  -2 07:36:05.1896
+ -2 07:36:05.18964
+        -2 07:36:05
+      -2 07:36:05.2
+     -2 07:36:05.19
+    -2 07:36:05.190
+   -2 07:36:05.1896
+  -2 07:36:05.18964
+ -2 07:36:05.189640
+ *****
+ -63:43
+  -63:43
+   -63:43
+ -63:43:49
+  -63:43:49
+  -63:43:49
+   -63:43:49
+ -63:43:49.8
+ -63:43:49.8
+    -63:43:49
+  -63:43:49.8
+ -63:43:49.83
+ -63:43:49.83
+     -63:43:49
+   -63:43:49.8
+  -63:43:49.83
+ -63:43:49.831
+ -63:43:49.831
+      -63:43:49
+    -63:43:49.8
+   -63:43:49.83
+  -63:43:49.831
+ -63:43:49.8313
+ -63:43:49.8313
+       -63:43:49
+     -63:43:49.8
+    -63:43:49.83
+   -63:43:49.831
+  -63:43:49.8313
+ -63:43:49.83132
+ -63:43:49.83132
+ -2 15:43
+  -2 15:43
+   -2 15:43
+ -2 15:43:49
+  -2 15:43:49
+   -2 15:43:49
+ -2 15:43:49.8
+    -2 15:43:49
+  -2 15:43:49.8
+ -2 15:43:49.83
+     -2 15:43:49
+   -2 15:43:49.8
+  -2 15:43:49.83
+ -2 15:43:49.831
+      -2 15:43:49
+    -2 15:43:49.8
+   -2 15:43:49.83
+  -2 15:43:49.831
+ -2 15:43:49.8313
+       -2 15:43:49
+     -2 15:43:49.8
+    -2 15:43:49.83
+   -2 15:43:49.831
+  -2 15:43:49.8313
+ -2 15:43:49.83132
+        -2 15:43:49
+      -2 15:43:49.8
+     -2 15:43:49.83
+    -2 15:43:49.831
+   -2 15:43:49.8313
+  -2 15:43:49.83132
+ -2 15:43:49.831320
+ *****
+ -52:25
+  -52:25
+   -52:25
+ -52:25:09
+  -52:25:09
+  -52:25:09
+   -52:25:09
+ -52:25:09.0
+ -52:25:09.0
+    -52:25:09
+  -52:25:09.0
+ -52:25:09.01
+ -52:25:09.01
+     -52:25:09
+   -52:25:09.0
+  -52:25:09.01
+ -52:25:09.013
+ -52:25:09.013
+      -52:25:09
+    -52:25:09.0
+   -52:25:09.01
+  -52:25:09.013
+ -52:25:09.0129
+ -52:25:09.0129
+       -52:25:09
+     -52:25:09.0
+    -52:25:09.01
+   -52:25:09.013
+  -52:25:09.0129
+ -52:25:09.01293
+ -52:25:09.01293
+ -2 04:25
+  -2 04:25
+   -2 04:25
+ -2 04:25:09
+  -2 04:25:09
+   -2 04:25:09
+ -2 04:25:09.0
+    -2 04:25:09
+  -2 04:25:09.0
+ -2 04:25:09.01
+     -2 04:25:09
+   -2 04:25:09.0
+  -2 04:25:09.01
+ -2 04:25:09.013
+      -2 04:25:09
+    -2 04:25:09.0
+   -2 04:25:09.01
+  -2 04:25:09.013
+ -2 04:25:09.0129
+       -2 04:25:09
+     -2 04:25:09.0
+    -2 04:25:09.01
+   -2 04:25:09.013
+  -2 04:25:09.0129
+ -2 04:25:09.01293
+        -2 04:25:09
+      -2 04:25:09.0
+     -2 04:25:09.01
+    -2 04:25:09.013
+   -2 04:25:09.0129
+  -2 04:25:09.01293
+ -2 04:25:09.012930
+ *****
+ -54:49
+  -54:49
+   -54:49
+ -54:49:27
+  -54:49:27
+  -54:49:27
+   -54:49:27
+ -54:49:27.5
+ -54:49:27.5
+    -54:49:27
+  -54:49:27.5
+ -54:49:27.52
+ -54:49:27.52
+     -54:49:27
+   -54:49:27.5
+  -54:49:27.52
+ -54:49:27.524
+ -54:49:27.524
+      -54:49:27
+    -54:49:27.5
+   -54:49:27.52
+  -54:49:27.524
+ -54:49:27.5237
+ -54:49:27.5237
+       -54:49:27
+     -54:49:27.5
+    -54:49:27.52
+   -54:49:27.524
+  -54:49:27.5237
+ -54:49:27.52375
+ -54:49:27.52375
+ -2 06:49
+  -2 06:49
+   -2 06:49
+ -2 06:49:27
+  -2 06:49:27
+   -2 06:49:27
+ -2 06:49:27.5
+    -2 06:49:27
+  -2 06:49:27.5
+ -2 06:49:27.52
+     -2 06:49:27
+   -2 06:49:27.5
+  -2 06:49:27.52
+ -2 06:49:27.524
+      -2 06:49:27
+    -2 06:49:27.5
+   -2 06:49:27.52
+  -2 06:49:27.524
+ -2 06:49:27.5237
+       -2 06:49:27
+     -2 06:49:27.5
+    -2 06:49:27.52
+   -2 06:49:27.524
+  -2 06:49:27.5237
+ -2 06:49:27.52375
+        -2 06:49:27
+      -2 06:49:27.5
+     -2 06:49:27.52
+    -2 06:49:27.524
+   -2 06:49:27.5237
+  -2 06:49:27.52375
+ -2 06:49:27.523750
+ *****
+ -50:57
+  -50:57
+   -50:57
+ -50:57:52
+  -50:57:52
+  -50:57:52
+   -50:57:52
+ -50:57:52.0
+ -50:57:52.0
+    -50:57:52
+  -50:57:52.0
+ -50:57:52.02
+ -50:57:52.02
+     -50:57:52
+   -50:57:52.0
+  -50:57:52.02
+ -50:57:52.016
+ -50:57:52.016
+      -50:57:52
+    -50:57:52.0
+   -50:57:52.02
+  -50:57:52.016
+ -50:57:52.0156
+ -50:57:52.0156
+       -50:57:52
+     -50:57:52.0
+    -50:57:52.02
+   -50:57:52.016
+  -50:57:52.0156
+ -50:57:52.01565
+ -50:57:52.01565
+ -2 02:57
+  -2 02:57
+   -2 02:57
+ -2 02:57:52
+  -2 02:57:52
+   -2 02:57:52
+ -2 02:57:52.0
+    -2 02:57:52
+  -2 02:57:52.0
+ -2 02:57:52.02
+     -2 02:57:52
+   -2 02:57:52.0
+  -2 02:57:52.02
+ -2 02:57:52.016
+      -2 02:57:52
+    -2 02:57:52.0
+   -2 02:57:52.02
+  -2 02:57:52.016
+ -2 02:57:52.0156
+       -2 02:57:52
+     -2 02:57:52.0
+    -2 02:57:52.02
+   -2 02:57:52.016
+  -2 02:57:52.0156
+ -2 02:57:52.01565
+        -2 02:57:52
+      -2 02:57:52.0
+     -2 02:57:52.02
+    -2 02:57:52.016
+   -2 02:57:52.0156
+  -2 02:57:52.01565
+ -2 02:57:52.015650
+ *****
+ -64:45
+  -64:45
+   -64:45
+ -64:45:44
+  -64:45:44
+  -64:45:44
+   -64:45:44
+ -64:45:44.9
+ -64:45:44.9
+    -64:45:44
+  -64:45:44.9
+ -64:45:44.87
+ -64:45:44.87
+     -64:45:44
+   -64:45:44.9
+  -64:45:44.87
+ -64:45:44.865
+ -64:45:44.865
+      -64:45:44
+    -64:45:44.9
+   -64:45:44.87
+  -64:45:44.865
+ -64:45:44.8653
+ -64:45:44.8653
+       -64:45:44
+     -64:45:44.9
+    -64:45:44.87
+   -64:45:44.865
+  -64:45:44.8653
+ -64:45:44.86529
+ -64:45:44.86529
+ -2 16:45
+  -2 16:45
+   -2 16:45
+ -2 16:45:44
+  -2 16:45:44
+   -2 16:45:44
+ -2 16:45:44.9
+    -2 16:45:44
+  -2 16:45:44.9
+ -2 16:45:44.87
+     -2 16:45:44
+   -2 16:45:44.9
+  -2 16:45:44.87
+ -2 16:45:44.865
+      -2 16:45:44
+    -2 16:45:44.9
+   -2 16:45:44.87
+  -2 16:45:44.865
+ -2 16:45:44.8653
+       -2 16:45:44
+     -2 16:45:44.9
+    -2 16:45:44.87
+   -2 16:45:44.865
+  -2 16:45:44.8653
+ -2 16:45:44.86529
+        -2 16:45:44
+      -2 16:45:44.9
+     -2 16:45:44.87
+    -2 16:45:44.865
+   -2 16:45:44.8653
+  -2 16:45:44.86529
+ -2 16:45:44.865290
+ *****
+ -69:30
+  -69:30
+   -69:30
+ -69:30:57
+  -69:30:57
+  -69:30:57
+   -69:30:57
+ -69:30:57.8
+ -69:30:57.8
+    -69:30:57
+  -69:30:57.8
+ -69:30:57.82
+ -69:30:57.82
+     -69:30:57
+   -69:30:57.8
+  -69:30:57.82
+ -69:30:57.820
+ -69:30:57.820
+      -69:30:57
+    -69:30:57.8
+   -69:30:57.82
+  -69:30:57.820
+ -69:30:57.8205
+ -69:30:57.8205
+       -69:30:57
+     -69:30:57.8
+    -69:30:57.82
+   -69:30:57.820
+  -69:30:57.8205
+ -69:30:57.82047
+ -69:30:57.82047
+ -2 21:30
+  -2 21:30
+   -2 21:30
+ -2 21:30:57
+  -2 21:30:57
+   -2 21:30:57
+ -2 21:30:57.8
+    -2 21:30:57
+  -2 21:30:57.8
+ -2 21:30:57.82
+     -2 21:30:57
+   -2 21:30:57.8
+  -2 21:30:57.82
+ -2 21:30:57.820
+      -2 21:30:57
+    -2 21:30:57.8
+   -2 21:30:57.82
+  -2 21:30:57.820
+ -2 21:30:57.8205
+       -2 21:30:57
+     -2 21:30:57.8
+    -2 21:30:57.82
+   -2 21:30:57.820
+  -2 21:30:57.8205
+ -2 21:30:57.82047
+        -2 21:30:57
+      -2 21:30:57.8
+     -2 21:30:57.82
+    -2 21:30:57.820
+   -2 21:30:57.8205
+  -2 21:30:57.82047
+ -2 21:30:57.820470
+ *****
+ -52:25
+  -52:25
+   -52:25
+ -52:25:09
+  -52:25:09
+  -52:25:09
+   -52:25:09
+ -52:25:09.2
+ -52:25:09.2
+    -52:25:09
+  -52:25:09.2
+ -52:25:09.15
+ -52:25:09.15
+     -52:25:09
+   -52:25:09.2
+  -52:25:09.15
+ -52:25:09.154
+ -52:25:09.154
+      -52:25:09
+    -52:25:09.2
+   -52:25:09.15
+  -52:25:09.154
+ -52:25:09.1540
+ -52:25:09.1540
+       -52:25:09
+     -52:25:09.2
+    -52:25:09.15
+   -52:25:09.154
+  -52:25:09.1540
+ -52:25:09.15395
+ -52:25:09.15395
+ -2 04:25
+  -2 04:25
+   -2 04:25
+ -2 04:25:09
+  -2 04:25:09
+   -2 04:25:09
+ -2 04:25:09.2
+    -2 04:25:09
+  -2 04:25:09.2
+ -2 04:25:09.15
+     -2 04:25:09
+   -2 04:25:09.2
+  -2 04:25:09.15
+ -2 04:25:09.154
+      -2 04:25:09
+    -2 04:25:09.2
+   -2 04:25:09.15
+  -2 04:25:09.154
+ -2 04:25:09.1540
+       -2 04:25:09
+     -2 04:25:09.2
+    -2 04:25:09.15
+   -2 04:25:09.154
+  -2 04:25:09.1540
+ -2 04:25:09.15395
+        -2 04:25:09
+      -2 04:25:09.2
+     -2 04:25:09.15
+    -2 04:25:09.154
+   -2 04:25:09.1540
+  -2 04:25:09.15395
+ -2 04:25:09.153950
+ *****
+ -54:49
+  -54:49
+   -54:49
+ -54:49:27
+  -54:49:27
+  -54:49:27
+   -54:49:27
+ -54:49:27.1
+ -54:49:27.1
+    -54:49:27
+  -54:49:27.1
+ -54:49:27.11
+ -54:49:27.11
+     -54:49:27
+   -54:49:27.1
+  -54:49:27.11
+ -54:49:27.105
+ -54:49:27.105
+      -54:49:27
+    -54:49:27.1
+   -54:49:27.11
+  -54:49:27.105
+ -54:49:27.1053
+ -54:49:27.1053
+       -54:49:27
+     -54:49:27.1
+    -54:49:27.11
+   -54:49:27.105
+  -54:49:27.1053
+ -54:49:27.10533
+ -54:49:27.10533
+ -2 06:49
+  -2 06:49
+   -2 06:49
+ -2 06:49:27
+  -2 06:49:27
+   -2 06:49:27
+ -2 06:49:27.1
+    -2 06:49:27
+  -2 06:49:27.1
+ -2 06:49:27.11
+     -2 06:49:27
+   -2 06:49:27.1
+  -2 06:49:27.11
+ -2 06:49:27.105
+      -2 06:49:27
+    -2 06:49:27.1
+   -2 06:49:27.11
+  -2 06:49:27.105
+ -2 06:49:27.1053
+       -2 06:49:27
+     -2 06:49:27.1
+    -2 06:49:27.11
+   -2 06:49:27.105
+  -2 06:49:27.1053
+ -2 06:49:27.10533
+        -2 06:49:27
+      -2 06:49:27.1
+     -2 06:49:27.11
+    -2 06:49:27.105
+   -2 06:49:27.1053
+  -2 06:49:27.10533
+ -2 06:49:27.105330
+ *****
+ -50:57
+  -50:57
+   -50:57
+ -50:57:52
+  -50:57:52
+  -50:57:52
+   -50:57:52
+ -50:57:52.5
+ -50:57:52.5
+    -50:57:52
+  -50:57:52.5
+ -50:57:52.48
+ -50:57:52.48
+     -50:57:52
+   -50:57:52.5
+  -50:57:52.48
+ -50:57:52.482
+ -50:57:52.482
+      -50:57:52
+    -50:57:52.5
+   -50:57:52.48
+  -50:57:52.482
+ -50:57:52.4823
+ -50:57:52.4823
+       -50:57:52
+     -50:57:52.5
+    -50:57:52.48
+   -50:57:52.482
+  -50:57:52.4823
+ -50:57:52.48229
+ -50:57:52.48229
+ -2 02:57
+  -2 02:57
+   -2 02:57
+ -2 02:57:52
+  -2 02:57:52
+   -2 02:57:52
+ -2 02:57:52.5
+    -2 02:57:52
+  -2 02:57:52.5
+ -2 02:57:52.48
+     -2 02:57:52
+   -2 02:57:52.5
+  -2 02:57:52.48
+ -2 02:57:52.482
+      -2 02:57:52
+    -2 02:57:52.5
+   -2 02:57:52.48
+  -2 02:57:52.482
+ -2 02:57:52.4823
+       -2 02:57:52
+     -2 02:57:52.5
+    -2 02:57:52.48
+   -2 02:57:52.482
+  -2 02:57:52.4823
+ -2 02:57:52.48229
+        -2 02:57:52
+      -2 02:57:52.5
+     -2 02:57:52.48
+    -2 02:57:52.482
+   -2 02:57:52.4823
+  -2 02:57:52.48229
+ -2 02:57:52.482290
+ *****
+ -64:45
+  -64:45
+   -64:45
+ -64:45:44
+  -64:45:44
+  -64:45:44
+   -64:45:44
+ -64:45:44.7
+ -64:45:44.7
+    -64:45:44
+  -64:45:44.7
+ -64:45:44.66
+ -64:45:44.66
+     -64:45:44
+   -64:45:44.7
+  -64:45:44.66
+ -64:45:44.658
+ -64:45:44.658
+      -64:45:44
+    -64:45:44.7
+   -64:45:44.66
+  -64:45:44.658
+ -64:45:44.6583
+ -64:45:44.6583
+       -64:45:44
+     -64:45:44.7
+    -64:45:44.66
+   -64:45:44.658
+  -64:45:44.6583
+ -64:45:44.65827
+ -64:45:44.65827
+ -2 16:45
+  -2 16:45
+   -2 16:45
+ -2 16:45:44
+  -2 16:45:44
+   -2 16:45:44
+ -2 16:45:44.7
+    -2 16:45:44
+  -2 16:45:44.7
+ -2 16:45:44.66
+     -2 16:45:44
+   -2 16:45:44.7
+  -2 16:45:44.66
+ -2 16:45:44.658
+      -2 16:45:44
+    -2 16:45:44.7
+   -2 16:45:44.66
+  -2 16:45:44.658
+ -2 16:45:44.6583
+       -2 16:45:44
+     -2 16:45:44.7
+    -2 16:45:44.66
+   -2 16:45:44.658
+  -2 16:45:44.6583
+ -2 16:45:44.65827
+        -2 16:45:44
+      -2 16:45:44.7
+     -2 16:45:44.66
+    -2 16:45:44.658
+   -2 16:45:44.6583
+  -2 16:45:44.65827
+ -2 16:45:44.658270
+ *****
+ -69:30
+  -69:30
+   -69:30
+ -69:30:57
+  -69:30:57
+  -69:30:57
+   -69:30:57
+ -69:30:57.6
+ -69:30:57.6
+    -69:30:57
+  -69:30:57.6
+ -69:30:57.58
+ -69:30:57.58
+     -69:30:57
+   -69:30:57.6
+  -69:30:57.58
+ -69:30:57.582
+ -69:30:57.582
+      -69:30:57
+    -69:30:57.6
+   -69:30:57.58
+  -69:30:57.582
+ -69:30:57.5822
+ -69:30:57.5822
+       -69:30:57
+     -69:30:57.6
+    -69:30:57.58
+   -69:30:57.582
+  -69:30:57.5822
+ -69:30:57.58219
+ -69:30:57.58219
+ -2 21:30
+  -2 21:30
+   -2 21:30
+ -2 21:30:57
+  -2 21:30:57
+   -2 21:30:57
+ -2 21:30:57.6
+    -2 21:30:57
+  -2 21:30:57.6
+ -2 21:30:57.58
+     -2 21:30:57
+   -2 21:30:57.6
+  -2 21:30:57.58
+ -2 21:30:57.582
+      -2 21:30:57
+    -2 21:30:57.6
+   -2 21:30:57.58
+  -2 21:30:57.582
+ -2 21:30:57.5822
+       -2 21:30:57
+     -2 21:30:57.6
+    -2 21:30:57.58
+   -2 21:30:57.582
+  -2 21:30:57.5822
+ -2 21:30:57.58219
+        -2 21:30:57
+      -2 21:30:57.6
+     -2 21:30:57.58
+    -2 21:30:57.582
+   -2 21:30:57.5822
+  -2 21:30:57.58219
+ -2 21:30:57.582190
+ *****
+ -70:30
+  -70:30
+   -70:30
+ -70:30:04
+  -70:30:04
+  -70:30:04
+   -70:30:04
+ -70:30:04.2
+ -70:30:04.2
+    -70:30:04
+  -70:30:04.2
+ -70:30:04.18
+ -70:30:04.18
+     -70:30:04
+   -70:30:04.2
+  -70:30:04.18
+ -70:30:04.183
+ -70:30:04.183
+      -70:30:04
+    -70:30:04.2
+   -70:30:04.18
+  -70:30:04.183
+ -70:30:04.1835
+ -70:30:04.1835
+       -70:30:04
+     -70:30:04.2
+    -70:30:04.18
+   -70:30:04.183
+  -70:30:04.1835
+ -70:30:04.18347
+ -70:30:04.18347
+ -2 22:30
+  -2 22:30
+   -2 22:30
+ -2 22:30:04
+  -2 22:30:04
+   -2 22:30:04
+ -2 22:30:04.2
+    -2 22:30:04
+  -2 22:30:04.2
+ -2 22:30:04.18
+     -2 22:30:04
+   -2 22:30:04.2
+  -2 22:30:04.18
+ -2 22:30:04.183
+      -2 22:30:04
+    -2 22:30:04.2
+   -2 22:30:04.18
+  -2 22:30:04.183
+ -2 22:30:04.1835
+       -2 22:30:04
+     -2 22:30:04.2
+    -2 22:30:04.18
+   -2 22:30:04.183
+  -2 22:30:04.1835
+ -2 22:30:04.18347
+        -2 22:30:04
+      -2 22:30:04.2
+     -2 22:30:04.18
+    -2 22:30:04.183
+   -2 22:30:04.1835
+  -2 22:30:04.18347
+ -2 22:30:04.183470
+ *****
+ -49:56
+  -49:56
+   -49:56
+ -49:56:51
+  -49:56:51
+  -49:56:51
+   -49:56:51
+ -49:56:51.6
+ -49:56:51.6
+    -49:56:51
+  -49:56:51.6
+ -49:56:51.59
+ -49:56:51.59
+     -49:56:51
+   -49:56:51.6
+  -49:56:51.59
+ -49:56:51.593
+ -49:56:51.593
+      -49:56:51
+    -49:56:51.6
+   -49:56:51.59
+  -49:56:51.593
+ -49:56:51.5932
+ -49:56:51.5932
+       -49:56:51
+     -49:56:51.6
+    -49:56:51.59
+   -49:56:51.593
+  -49:56:51.5932
+ -49:56:51.59319
+ -49:56:51.59319
+ -2 01:56
+  -2 01:56
+   -2 01:56
+ -2 01:56:51
+  -2 01:56:51
+   -2 01:56:51
+ -2 01:56:51.6
+    -2 01:56:51
+  -2 01:56:51.6
+ -2 01:56:51.59
+     -2 01:56:51
+   -2 01:56:51.6
+  -2 01:56:51.59
+ -2 01:56:51.593
+      -2 01:56:51
+    -2 01:56:51.6
+   -2 01:56:51.59
+  -2 01:56:51.593
+ -2 01:56:51.5932
+       -2 01:56:51
+     -2 01:56:51.6
+    -2 01:56:51.59
+   -2 01:56:51.593
+  -2 01:56:51.5932
+ -2 01:56:51.59319
+        -2 01:56:51
+      -2 01:56:51.6
+     -2 01:56:51.59
+    -2 01:56:51.593
+   -2 01:56:51.5932
+  -2 01:56:51.59319
+ -2 01:56:51.593190
+ *****
+ ******
+ *******
+ -1296:00
+  -1296:00
+   -1296:00
+   -1296:00
+ -1296:00:00
+ -1296:00:00
+ -1296:00:00
+  -1296:00:00
+  -1296:00:00
+  -1296:00:00
+  -1296:00:00
+   -1296:00:00
+ -1296:00:00.0
+ -1296:00:00.0
+ -1296:00:00.0
+ -1296:00:00.0
+    -1296:00:00
+  -1296:00:00.0
+ -1296:00:00.00
+ -1296:00:00.00
+ -1296:00:00.00
+ -1296:00:00.00
+     -1296:00:00
+   -1296:00:00.0
+  -1296:00:00.00
+ -1296:00:00.000
+ -1296:00:00.000
+ -1296:00:00.000
+ -1296:00:00.000
+ ********
+ -54 00:00
+  -54 00:00
+   -54 00:00
+ -54 00:00:00
+  -54 00:00:00
+  -54 00:00:00
+   -54 00:00:00
+ -54 00:00:00.0
+ -54 00:00:00.0
+    -54 00:00:00
+  -54 00:00:00.0
+ -54 00:00:00.00
+ -54 00:00:00.00
+     -54 00:00:00
+   -54 00:00:00.0
+  -54 00:00:00.00
+ -54 00:00:00.000
+ -54 00:00:00.000
+      -54 00:00:00
+    -54 00:00:00.0
+   -54 00:00:00.00
+  -54 00:00:00.000
+ -54 00:00:00.0000
+ -54 00:00:00.0000
+       -54 00:00:00
+     -54 00:00:00.0
+    -54 00:00:00.00
+   -54 00:00:00.000
+  -54 00:00:00.0000
+ -54 00:00:00.00000
+ -54 00:00:00.00000
+ *****
+ ******
+ *******
+ -1300:50
+  -1300:50
+   -1300:50
+   -1300:50
+ -1300:50:38
+ -1300:50:38
+ -1300:50:38
+  -1300:50:38
+  -1300:50:38
+  -1300:50:38
+  -1300:50:38
+   -1300:50:38
+ -1300:50:38.1
+ -1300:50:38.1
+ -1300:50:38.1
+ -1300:50:38.1
+    -1300:50:38
+  -1300:50:38.1
+ -1300:50:38.12
+ -1300:50:38.12
+ -1300:50:38.12
+ -1300:50:38.12
+     -1300:50:38
+   -1300:50:38.1
+  -1300:50:38.12
+ -1300:50:38.123
+ -1300:50:38.123
+ -1300:50:38.123
+ -1300:50:38.123
+ ********
+ -54 04:50
+  -54 04:50
+   -54 04:50
+ -54 04:50:38
+  -54 04:50:38
+  -54 04:50:38
+   -54 04:50:38
+ -54 04:50:38.1
+ -54 04:50:38.1
+    -54 04:50:38
+  -54 04:50:38.1
+ -54 04:50:38.12
+ -54 04:50:38.12
+     -54 04:50:38
+   -54 04:50:38.1
+  -54 04:50:38.12
+ -54 04:50:38.123
+ -54 04:50:38.123
+      -54 04:50:38
+    -54 04:50:38.1
+   -54 04:50:38.12
+  -54 04:50:38.123
+ -54 04:50:38.1230
+ -54 04:50:38.1230
+       -54 04:50:38
+     -54 04:50:38.1
+    -54 04:50:38.12
+   -54 04:50:38.123
+  -54 04:50:38.1230
+ -54 04:50:38.12301
+ -54 04:50:38.12301
+ *****
+ ******
+ *******
+ -1308:31
+  -1308:31
+   -1308:31
+   -1308:31
+ -1308:31:35
+ -1308:31:35
+ -1308:31:35
+  -1308:31:35
+  -1308:31:35
+  -1308:31:35
+  -1308:31:35
+   -1308:31:35
+ -1308:31:35.2
+ -1308:31:35.2
+ -1308:31:35.2
+ -1308:31:35.2
+    -1308:31:35
+  -1308:31:35.2
+ -1308:31:35.23
+ -1308:31:35.23
+ -1308:31:35.23
+ -1308:31:35.23
+     -1308:31:35
+   -1308:31:35.2
+  -1308:31:35.23
+ -1308:31:35.235
+ -1308:31:35.235
+ -1308:31:35.235
+ -1308:31:35.235
+ ********
+ -54 12:31
+  -54 12:31
+   -54 12:31
+ -54 12:31:35
+  -54 12:31:35
+  -54 12:31:35
+   -54 12:31:35
+ -54 12:31:35.2
+ -54 12:31:35.2
+    -54 12:31:35
+  -54 12:31:35.2
+ -54 12:31:35.23
+ -54 12:31:35.23
+     -54 12:31:35
+   -54 12:31:35.2
+  -54 12:31:35.23
+ -54 12:31:35.235
+ -54 12:31:35.235
+      -54 12:31:35
+    -54 12:31:35.2
+   -54 12:31:35.23
+  -54 12:31:35.235
+ -54 12:31:35.2345
+ -54 12:31:35.2345
+       -54 12:31:35
+     -54 12:31:35.2
+    -54 12:31:35.23
+   -54 12:31:35.235
+  -54 12:31:35.2345
+ -54 12:31:35.23453
+ -54 12:31:35.23453
+ *****
+ ******
+ *******
+ -1308:47
+  -1308:47
+   -1308:47
+   -1308:47
+ -1308:47:53
+ -1308:47:53
+ -1308:47:53
+  -1308:47:53
+  -1308:47:53
+  -1308:47:53
+  -1308:47:53
+   -1308:47:53
+ -1308:47:53.3
+ -1308:47:53.3
+ -1308:47:53.3
+ -1308:47:53.3
+    -1308:47:53
+  -1308:47:53.3
+ -1308:47:53.35
+ -1308:47:53.35
+ -1308:47:53.35
+ -1308:47:53.35
+     -1308:47:53
+   -1308:47:53.3
+  -1308:47:53.35
+ -1308:47:53.345
+ -1308:47:53.345
+ -1308:47:53.345
+ -1308:47:53.345
+ ********
+ -54 12:47
+  -54 12:47
+   -54 12:47
+ -54 12:47:53
+  -54 12:47:53
+  -54 12:47:53
+   -54 12:47:53
+ -54 12:47:53.3
+ -54 12:47:53.3
+    -54 12:47:53
+  -54 12:47:53.3
+ -54 12:47:53.35
+ -54 12:47:53.35
+     -54 12:47:53
+   -54 12:47:53.3
+  -54 12:47:53.35
+ -54 12:47:53.345
+ -54 12:47:53.345
+      -54 12:47:53
+    -54 12:47:53.3
+   -54 12:47:53.35
+  -54 12:47:53.345
+ -54 12:47:53.3450
+ -54 12:47:53.3450
+       -54 12:47:53
+     -54 12:47:53.3
+    -54 12:47:53.35
+   -54 12:47:53.345
+  -54 12:47:53.3450
+ -54 12:47:53.34505
+ -54 12:47:53.34505
+ *****
+ ******
+ *******
+ -1297:26
+  -1297:26
+   -1297:26
+   -1297:26
+ -1297:26:00
+ -1297:26:00
+ -1297:26:00
+  -1297:26:00
+  -1297:26:00
+  -1297:26:00
+  -1297:26:00
+   -1297:26:00
+ -1297:26:00.5
+ -1297:26:00.5
+ -1297:26:00.5
+ -1297:26:00.5
+    -1297:26:00
+  -1297:26:00.5
+ -1297:26:00.46
+ -1297:26:00.46
+ -1297:26:00.46
+ -1297:26:00.46
+     -1297:26:00
+   -1297:26:00.5
+  -1297:26:00.46
+ -1297:26:00.456
+ -1297:26:00.456
+ -1297:26:00.456
+ -1297:26:00.456
+ ********
+ -54 01:26
+  -54 01:26
+   -54 01:26
+ -54 01:26:00
+  -54 01:26:00
+  -54 01:26:00
+   -54 01:26:00
+ -54 01:26:00.5
+ -54 01:26:00.5
+    -54 01:26:00
+  -54 01:26:00.5
+ -54 01:26:00.46
+ -54 01:26:00.46
+     -54 01:26:00
+   -54 01:26:00.5
+  -54 01:26:00.46
+ -54 01:26:00.456
+ -54 01:26:00.456
+      -54 01:26:00
+    -54 01:26:00.5
+   -54 01:26:00.46
+  -54 01:26:00.456
+ -54 01:26:00.4561
+ -54 01:26:00.4561
+       -54 01:26:00
+     -54 01:26:00.5
+    -54 01:26:00.46
+   -54 01:26:00.456
+  -54 01:26:00.4561
+ -54 01:26:00.45615
+ -54 01:26:00.45615
+ *****
+ ******
+ *******
+ -1316:58
+  -1316:58
+   -1316:58
+   -1316:58
+ -1316:58:11
+ -1316:58:11
+ -1316:58:11
+  -1316:58:11
+  -1316:58:11
+  -1316:58:11
+  -1316:58:11
+   -1316:58:11
+ -1316:58:11.6
+ -1316:58:11.6
+ -1316:58:11.6
+ -1316:58:11.6
+    -1316:58:11
+  -1316:58:11.6
+ -1316:58:11.57
+ -1316:58:11.57
+ -1316:58:11.57
+ -1316:58:11.57
+     -1316:58:11
+   -1316:58:11.6
+  -1316:58:11.57
+ -1316:58:11.567
+ -1316:58:11.567
+ -1316:58:11.567
+ -1316:58:11.567
+ ********
+ -54 20:58
+  -54 20:58
+   -54 20:58
+ -54 20:58:11
+  -54 20:58:11
+  -54 20:58:11
+   -54 20:58:11
+ -54 20:58:11.6
+ -54 20:58:11.6
+    -54 20:58:11
+  -54 20:58:11.6
+ -54 20:58:11.57
+ -54 20:58:11.57
+     -54 20:58:11
+   -54 20:58:11.6
+  -54 20:58:11.57
+ -54 20:58:11.567
+ -54 20:58:11.567
+      -54 20:58:11
+    -54 20:58:11.6
+   -54 20:58:11.57
+  -54 20:58:11.567
+ -54 20:58:11.5668
+ -54 20:58:11.5668
+       -54 20:58:11
+     -54 20:58:11.6
+    -54 20:58:11.57
+   -54 20:58:11.567
+  -54 20:58:11.5668
+ -54 20:58:11.56677
+ -54 20:58:11.56677
+ *****
+ ******
+ *******
+ -1303:36
+  -1303:36
+   -1303:36
+   -1303:36
+ -1303:36:05
+ -1303:36:05
+ -1303:36:05
+  -1303:36:05
+  -1303:36:05
+  -1303:36:05
+  -1303:36:05
+   -1303:36:05
+ -1303:36:05.2
+ -1303:36:05.2
+ -1303:36:05.2
+ -1303:36:05.2
+    -1303:36:05
+  -1303:36:05.2
+ -1303:36:05.19
+ -1303:36:05.19
+ -1303:36:05.19
+ -1303:36:05.19
+     -1303:36:05
+   -1303:36:05.2
+  -1303:36:05.19
+ -1303:36:05.190
+ -1303:36:05.190
+ -1303:36:05.190
+ -1303:36:05.190
+ ********
+ -54 07:36
+  -54 07:36
+   -54 07:36
+ -54 07:36:05
+  -54 07:36:05
+  -54 07:36:05
+   -54 07:36:05
+ -54 07:36:05.2
+ -54 07:36:05.2
+    -54 07:36:05
+  -54 07:36:05.2
+ -54 07:36:05.19
+ -54 07:36:05.19
+     -54 07:36:05
+   -54 07:36:05.2
+  -54 07:36:05.19
+ -54 07:36:05.190
+ -54 07:36:05.190
+      -54 07:36:05
+    -54 07:36:05.2
+   -54 07:36:05.19
+  -54 07:36:05.190
+ -54 07:36:05.1896
+ -54 07:36:05.1896
+       -54 07:36:05
+     -54 07:36:05.2
+    -54 07:36:05.19
+   -54 07:36:05.190
+  -54 07:36:05.1896
+ -54 07:36:05.18964
+ -54 07:36:05.18964
+ *****
+ ******
+ *******
+ -1311:43
+  -1311:43
+   -1311:43
+   -1311:43
+ -1311:43:49
+ -1311:43:49
+ -1311:43:49
+  -1311:43:49
+  -1311:43:49
+  -1311:43:49
+  -1311:43:49
+   -1311:43:49
+ -1311:43:49.8
+ -1311:43:49.8
+ -1311:43:49.8
+ -1311:43:49.8
+    -1311:43:49
+  -1311:43:49.8
+ -1311:43:49.83
+ -1311:43:49.83
+ -1311:43:49.83
+ -1311:43:49.83
+     -1311:43:49
+   -1311:43:49.8
+  -1311:43:49.83
+ -1311:43:49.831
+ -1311:43:49.831
+ -1311:43:49.831
+ -1311:43:49.831
+ ********
+ -54 15:43
+  -54 15:43
+   -54 15:43
+ -54 15:43:49
+  -54 15:43:49
+  -54 15:43:49
+   -54 15:43:49
+ -54 15:43:49.8
+ -54 15:43:49.8
+    -54 15:43:49
+  -54 15:43:49.8
+ -54 15:43:49.83
+ -54 15:43:49.83
+     -54 15:43:49
+   -54 15:43:49.8
+  -54 15:43:49.83
+ -54 15:43:49.831
+ -54 15:43:49.831
+      -54 15:43:49
+    -54 15:43:49.8
+   -54 15:43:49.83
+  -54 15:43:49.831
+ -54 15:43:49.8313
+ -54 15:43:49.8313
+       -54 15:43:49
+     -54 15:43:49.8
+    -54 15:43:49.83
+   -54 15:43:49.831
+  -54 15:43:49.8313
+ -54 15:43:49.83132
+ -54 15:43:49.83132
+ *****
+ ******
+ *******
+ -1300:25
+  -1300:25
+   -1300:25
+   -1300:25
+ -1300:25:09
+ -1300:25:09
+ -1300:25:09
+  -1300:25:09
+  -1300:25:09
+  -1300:25:09
+  -1300:25:09
+   -1300:25:09
+ -1300:25:09.0
+ -1300:25:09.0
+ -1300:25:09.0
+ -1300:25:09.0
+    -1300:25:09
+  -1300:25:09.0
+ -1300:25:09.01
+ -1300:25:09.01
+ -1300:25:09.01
+ -1300:25:09.01
+     -1300:25:09
+   -1300:25:09.0
+  -1300:25:09.01
+ -1300:25:09.013
+ -1300:25:09.013
+ -1300:25:09.013
+ -1300:25:09.013
+ ********
+ -54 04:25
+  -54 04:25
+   -54 04:25
+ -54 04:25:09
+  -54 04:25:09
+  -54 04:25:09
+   -54 04:25:09
+ -54 04:25:09.0
+ -54 04:25:09.0
+    -54 04:25:09
+  -54 04:25:09.0
+ -54 04:25:09.01
+ -54 04:25:09.01
+     -54 04:25:09
+   -54 04:25:09.0
+  -54 04:25:09.01
+ -54 04:25:09.013
+ -54 04:25:09.013
+      -54 04:25:09
+    -54 04:25:09.0
+   -54 04:25:09.01
+  -54 04:25:09.013
+ -54 04:25:09.0129
+ -54 04:25:09.0129
+       -54 04:25:09
+     -54 04:25:09.0
+    -54 04:25:09.01
+   -54 04:25:09.013
+  -54 04:25:09.0129
+ -54 04:25:09.01293
+ -54 04:25:09.01293
+ *****
+ ******
+ *******
+ -1302:49
+  -1302:49
+   -1302:49
+   -1302:49
+ -1302:49:27
+ -1302:49:27
+ -1302:49:27
+  -1302:49:27
+  -1302:49:27
+  -1302:49:27
+  -1302:49:27
+   -1302:49:27
+ -1302:49:27.5
+ -1302:49:27.5
+ -1302:49:27.5
+ -1302:49:27.5
+    -1302:49:27
+  -1302:49:27.5
+ -1302:49:27.52
+ -1302:49:27.52
+ -1302:49:27.52
+ -1302:49:27.52
+     -1302:49:27
+   -1302:49:27.5
+  -1302:49:27.52
+ -1302:49:27.524
+ -1302:49:27.524
+ -1302:49:27.524
+ -1302:49:27.524
+ ********
+ -54 06:49
+  -54 06:49
+   -54 06:49
+ -54 06:49:27
+  -54 06:49:27
+  -54 06:49:27
+   -54 06:49:27
+ -54 06:49:27.5
+ -54 06:49:27.5
+    -54 06:49:27
+  -54 06:49:27.5
+ -54 06:49:27.52
+ -54 06:49:27.52
+     -54 06:49:27
+   -54 06:49:27.5
+  -54 06:49:27.52
+ -54 06:49:27.524
+ -54 06:49:27.524
+      -54 06:49:27
+    -54 06:49:27.5
+   -54 06:49:27.52
+  -54 06:49:27.524
+ -54 06:49:27.5237
+ -54 06:49:27.5237
+       -54 06:49:27
+     -54 06:49:27.5
+    -54 06:49:27.52
+   -54 06:49:27.524
+  -54 06:49:27.5237
+ -54 06:49:27.52375
+ -54 06:49:27.52375
+ *****
+ ******
+ *******
+ -1298:57
+  -1298:57
+   -1298:57
+   -1298:57
+ -1298:57:52
+ -1298:57:52
+ -1298:57:52
+  -1298:57:52
+  -1298:57:52
+  -1298:57:52
+  -1298:57:52
+   -1298:57:52
+ -1298:57:52.0
+ -1298:57:52.0
+ -1298:57:52.0
+ -1298:57:52.0
+    -1298:57:52
+  -1298:57:52.0
+ -1298:57:52.02
+ -1298:57:52.02
+ -1298:57:52.02
+ -1298:57:52.02
+     -1298:57:52
+   -1298:57:52.0
+  -1298:57:52.02
+ -1298:57:52.016
+ -1298:57:52.016
+ -1298:57:52.016
+ -1298:57:52.016
+ ********
+ -54 02:57
+  -54 02:57
+   -54 02:57
+ -54 02:57:52
+  -54 02:57:52
+  -54 02:57:52
+   -54 02:57:52
+ -54 02:57:52.0
+ -54 02:57:52.0
+    -54 02:57:52
+  -54 02:57:52.0
+ -54 02:57:52.02
+ -54 02:57:52.02
+     -54 02:57:52
+   -54 02:57:52.0
+  -54 02:57:52.02
+ -54 02:57:52.016
+ -54 02:57:52.016
+      -54 02:57:52
+    -54 02:57:52.0
+   -54 02:57:52.02
+  -54 02:57:52.016
+ -54 02:57:52.0157
+ -54 02:57:52.0157
+       -54 02:57:52
+     -54 02:57:52.0
+    -54 02:57:52.02
+   -54 02:57:52.016
+  -54 02:57:52.0157
+ -54 02:57:52.01565
+ -54 02:57:52.01565
+ *****
+ ******
+ *******
+ -1312:45
+  -1312:45
+   -1312:45
+   -1312:45
+ -1312:45:44
+ -1312:45:44
+ -1312:45:44
+  -1312:45:44
+  -1312:45:44
+  -1312:45:44
+  -1312:45:44
+   -1312:45:44
+ -1312:45:44.9
+ -1312:45:44.9
+ -1312:45:44.9
+ -1312:45:44.9
+    -1312:45:44
+  -1312:45:44.9
+ -1312:45:44.87
+ -1312:45:44.87
+ -1312:45:44.87
+ -1312:45:44.87
+     -1312:45:44
+   -1312:45:44.9
+  -1312:45:44.87
+ -1312:45:44.865
+ -1312:45:44.865
+ -1312:45:44.865
+ -1312:45:44.865
+ ********
+ -54 16:45
+  -54 16:45
+   -54 16:45
+ -54 16:45:44
+  -54 16:45:44
+  -54 16:45:44
+   -54 16:45:44
+ -54 16:45:44.9
+ -54 16:45:44.9
+    -54 16:45:44
+  -54 16:45:44.9
+ -54 16:45:44.87
+ -54 16:45:44.87
+     -54 16:45:44
+   -54 16:45:44.9
+  -54 16:45:44.87
+ -54 16:45:44.865
+ -54 16:45:44.865
+      -54 16:45:44
+    -54 16:45:44.9
+   -54 16:45:44.87
+  -54 16:45:44.865
+ -54 16:45:44.8653
+ -54 16:45:44.8653
+       -54 16:45:44
+     -54 16:45:44.9
+    -54 16:45:44.87
+   -54 16:45:44.865
+  -54 16:45:44.8653
+ -54 16:45:44.86529
+ -54 16:45:44.86529
+ *****
+ ******
+ *******
+ -1317:30
+  -1317:30
+   -1317:30
+   -1317:30
+ -1317:30:57
+ -1317:30:57
+ -1317:30:57
+  -1317:30:57
+  -1317:30:57
+  -1317:30:57
+  -1317:30:57
+   -1317:30:57
+ -1317:30:57.8
+ -1317:30:57.8
+ -1317:30:57.8
+ -1317:30:57.8
+    -1317:30:57
+  -1317:30:57.8
+ -1317:30:57.82
+ -1317:30:57.82
+ -1317:30:57.82
+ -1317:30:57.82
+     -1317:30:57
+   -1317:30:57.8
+  -1317:30:57.82
+ -1317:30:57.820
+ -1317:30:57.820
+ -1317:30:57.820
+ -1317:30:57.820
+ ********
+ -54 21:30
+  -54 21:30
+   -54 21:30
+ -54 21:30:57
+  -54 21:30:57
+  -54 21:30:57
+   -54 21:30:57
+ -54 21:30:57.8
+ -54 21:30:57.8
+    -54 21:30:57
+  -54 21:30:57.8
+ -54 21:30:57.82
+ -54 21:30:57.82
+     -54 21:30:57
+   -54 21:30:57.8
+  -54 21:30:57.82
+ -54 21:30:57.820
+ -54 21:30:57.820
+      -54 21:30:57
+    -54 21:30:57.8
+   -54 21:30:57.82
+  -54 21:30:57.820
+ -54 21:30:57.8205
+ -54 21:30:57.8205
+       -54 21:30:57
+     -54 21:30:57.8
+    -54 21:30:57.82
+   -54 21:30:57.820
+  -54 21:30:57.8205
+ -54 21:30:57.82047
+ -54 21:30:57.82047
+ *****
+ ******
+ *******
+ -1300:25
+  -1300:25
+   -1300:25
+   -1300:25
+ -1300:25:09
+ -1300:25:09
+ -1300:25:09
+  -1300:25:09
+  -1300:25:09
+  -1300:25:09
+  -1300:25:09
+   -1300:25:09
+ -1300:25:09.2
+ -1300:25:09.2
+ -1300:25:09.2
+ -1300:25:09.2
+    -1300:25:09
+  -1300:25:09.2
+ -1300:25:09.15
+ -1300:25:09.15
+ -1300:25:09.15
+ -1300:25:09.15
+     -1300:25:09
+   -1300:25:09.2
+  -1300:25:09.15
+ -1300:25:09.154
+ -1300:25:09.154
+ -1300:25:09.154
+ -1300:25:09.154
+ ********
+ -54 04:25
+  -54 04:25
+   -54 04:25
+ -54 04:25:09
+  -54 04:25:09
+  -54 04:25:09
+   -54 04:25:09
+ -54 04:25:09.2
+ -54 04:25:09.2
+    -54 04:25:09
+  -54 04:25:09.2
+ -54 04:25:09.15
+ -54 04:25:09.15
+     -54 04:25:09
+   -54 04:25:09.2
+  -54 04:25:09.15
+ -54 04:25:09.154
+ -54 04:25:09.154
+      -54 04:25:09
+    -54 04:25:09.2
+   -54 04:25:09.15
+  -54 04:25:09.154
+ -54 04:25:09.1540
+ -54 04:25:09.1540
+       -54 04:25:09
+     -54 04:25:09.2
+    -54 04:25:09.15
+   -54 04:25:09.154
+  -54 04:25:09.1540
+ -54 04:25:09.15395
+ -54 04:25:09.15395
+ *****
+ ******
+ *******
+ -1302:49
+  -1302:49
+   -1302:49
+   -1302:49
+ -1302:49:27
+ -1302:49:27
+ -1302:49:27
+  -1302:49:27
+  -1302:49:27
+  -1302:49:27
+  -1302:49:27
+   -1302:49:27
+ -1302:49:27.1
+ -1302:49:27.1
+ -1302:49:27.1
+ -1302:49:27.1
+    -1302:49:27
+  -1302:49:27.1
+ -1302:49:27.11
+ -1302:49:27.11
+ -1302:49:27.11
+ -1302:49:27.11
+     -1302:49:27
+   -1302:49:27.1
+  -1302:49:27.11
+ -1302:49:27.105
+ -1302:49:27.105
+ -1302:49:27.105
+ -1302:49:27.105
+ ********
+ -54 06:49
+  -54 06:49
+   -54 06:49
+ -54 06:49:27
+  -54 06:49:27
+  -54 06:49:27
+   -54 06:49:27
+ -54 06:49:27.1
+ -54 06:49:27.1
+    -54 06:49:27
+  -54 06:49:27.1
+ -54 06:49:27.11
+ -54 06:49:27.11
+     -54 06:49:27
+   -54 06:49:27.1
+  -54 06:49:27.11
+ -54 06:49:27.105
+ -54 06:49:27.105
+      -54 06:49:27
+    -54 06:49:27.1
+   -54 06:49:27.11
+  -54 06:49:27.105
+ -54 06:49:27.1053
+ -54 06:49:27.1053
+       -54 06:49:27
+     -54 06:49:27.1
+    -54 06:49:27.11
+   -54 06:49:27.105
+  -54 06:49:27.1053
+ -54 06:49:27.10533
+ -54 06:49:27.10533
+ *****
+ ******
+ *******
+ -1298:57
+  -1298:57
+   -1298:57
+   -1298:57
+ -1298:57:52
+ -1298:57:52
+ -1298:57:52
+  -1298:57:52
+  -1298:57:52
+  -1298:57:52
+  -1298:57:52
+   -1298:57:52
+ -1298:57:52.5
+ -1298:57:52.5
+ -1298:57:52.5
+ -1298:57:52.5
+    -1298:57:52
+  -1298:57:52.5
+ -1298:57:52.48
+ -1298:57:52.48
+ -1298:57:52.48
+ -1298:57:52.48
+     -1298:57:52
+   -1298:57:52.5
+  -1298:57:52.48
+ -1298:57:52.482
+ -1298:57:52.482
+ -1298:57:52.482
+ -1298:57:52.482
+ ********
+ -54 02:57
+  -54 02:57
+   -54 02:57
+ -54 02:57:52
+  -54 02:57:52
+  -54 02:57:52
+   -54 02:57:52
+ -54 02:57:52.5
+ -54 02:57:52.5
+    -54 02:57:52
+  -54 02:57:52.5
+ -54 02:57:52.48
+ -54 02:57:52.48
+     -54 02:57:52
+   -54 02:57:52.5
+  -54 02:57:52.48
+ -54 02:57:52.482
+ -54 02:57:52.482
+      -54 02:57:52
+    -54 02:57:52.5
+   -54 02:57:52.48
+  -54 02:57:52.482
+ -54 02:57:52.4823
+ -54 02:57:52.4823
+       -54 02:57:52
+     -54 02:57:52.5
+    -54 02:57:52.48
+   -54 02:57:52.482
+  -54 02:57:52.4823
+ -54 02:57:52.48229
+ -54 02:57:52.48229
+ *****
+ ******
+ *******
+ -1312:45
+  -1312:45
+   -1312:45
+   -1312:45
+ -1312:45:44
+ -1312:45:44
+ -1312:45:44
+  -1312:45:44
+  -1312:45:44
+  -1312:45:44
+  -1312:45:44
+   -1312:45:44
+ -1312:45:44.7
+ -1312:45:44.7
+ -1312:45:44.7
+ -1312:45:44.7
+    -1312:45:44
+  -1312:45:44.7
+ -1312:45:44.66
+ -1312:45:44.66
+ -1312:45:44.66
+ -1312:45:44.66
+     -1312:45:44
+   -1312:45:44.7
+  -1312:45:44.66
+ -1312:45:44.658
+ -1312:45:44.658
+ -1312:45:44.658
+ -1312:45:44.658
+ ********
+ -54 16:45
+  -54 16:45
+   -54 16:45
+ -54 16:45:44
+  -54 16:45:44
+  -54 16:45:44
+   -54 16:45:44
+ -54 16:45:44.7
+ -54 16:45:44.7
+    -54 16:45:44
+  -54 16:45:44.7
+ -54 16:45:44.66
+ -54 16:45:44.66
+     -54 16:45:44
+   -54 16:45:44.7
+  -54 16:45:44.66
+ -54 16:45:44.658
+ -54 16:45:44.658
+      -54 16:45:44
+    -54 16:45:44.7
+   -54 16:45:44.66
+  -54 16:45:44.658
+ -54 16:45:44.6583
+ -54 16:45:44.6583
+       -54 16:45:44
+     -54 16:45:44.7
+    -54 16:45:44.66
+   -54 16:45:44.658
+  -54 16:45:44.6583
+ -54 16:45:44.65827
+ -54 16:45:44.65827
+ *****
+ ******
+ *******
+ -1317:30
+  -1317:30
+   -1317:30
+   -1317:30
+ -1317:30:57
+ -1317:30:57
+ -1317:30:57
+  -1317:30:57
+  -1317:30:57
+  -1317:30:57
+  -1317:30:57
+   -1317:30:57
+ -1317:30:57.6
+ -1317:30:57.6
+ -1317:30:57.6
+ -1317:30:57.6
+    -1317:30:57
+  -1317:30:57.6
+ -1317:30:57.58
+ -1317:30:57.58
+ -1317:30:57.58
+ -1317:30:57.58
+     -1317:30:57
+   -1317:30:57.6
+  -1317:30:57.58
+ -1317:30:57.582
+ -1317:30:57.582
+ -1317:30:57.582
+ -1317:30:57.582
+ ********
+ -54 21:30
+  -54 21:30
+   -54 21:30
+ -54 21:30:57
+  -54 21:30:57
+  -54 21:30:57
+   -54 21:30:57
+ -54 21:30:57.6
+ -54 21:30:57.6
+    -54 21:30:57
+  -54 21:30:57.6
+ -54 21:30:57.58
+ -54 21:30:57.58
+     -54 21:30:57
+   -54 21:30:57.6
+  -54 21:30:57.58
+ -54 21:30:57.582
+ -54 21:30:57.582
+      -54 21:30:57
+    -54 21:30:57.6
+   -54 21:30:57.58
+  -54 21:30:57.582
+ -54 21:30:57.5822
+ -54 21:30:57.5822
+       -54 21:30:57
+     -54 21:30:57.6
+    -54 21:30:57.58
+   -54 21:30:57.582
+  -54 21:30:57.5822
+ -54 21:30:57.58219
+ -54 21:30:57.58219
+ *****
+ ******
+ *******
+ -1318:30
+  -1318:30
+   -1318:30
+   -1318:30
+ -1318:30:04
+ -1318:30:04
+ -1318:30:04
+  -1318:30:04
+  -1318:30:04
+  -1318:30:04
+  -1318:30:04
+   -1318:30:04
+ -1318:30:04.2
+ -1318:30:04.2
+ -1318:30:04.2
+ -1318:30:04.2
+    -1318:30:04
+  -1318:30:04.2
+ -1318:30:04.18
+ -1318:30:04.18
+ -1318:30:04.18
+ -1318:30:04.18
+     -1318:30:04
+   -1318:30:04.2
+  -1318:30:04.18
+ -1318:30:04.183
+ -1318:30:04.183
+ -1318:30:04.183
+ -1318:30:04.183
+ ********
+ -54 22:30
+  -54 22:30
+   -54 22:30
+ -54 22:30:04
+  -54 22:30:04
+  -54 22:30:04
+   -54 22:30:04
+ -54 22:30:04.2
+ -54 22:30:04.2
+    -54 22:30:04
+  -54 22:30:04.2
+ -54 22:30:04.18
+ -54 22:30:04.18
+     -54 22:30:04
+   -54 22:30:04.2
+  -54 22:30:04.18
+ -54 22:30:04.183
+ -54 22:30:04.183
+      -54 22:30:04
+    -54 22:30:04.2
+   -54 22:30:04.18
+  -54 22:30:04.183
+ -54 22:30:04.1835
+ -54 22:30:04.1835
+       -54 22:30:04
+     -54 22:30:04.2
+    -54 22:30:04.18
+   -54 22:30:04.183
+  -54 22:30:04.1835
+ -54 22:30:04.18347
+ -54 22:30:04.18347
+ *****
+ ******
+ *******
+ -1297:56
+  -1297:56
+   -1297:56
+   -1297:56
+ -1297:56:51
+ -1297:56:51
+ -1297:56:51
+  -1297:56:51
+  -1297:56:51
+  -1297:56:51
+  -1297:56:51
+   -1297:56:51
+ -1297:56:51.6
+ -1297:56:51.6
+ -1297:56:51.6
+ -1297:56:51.6
+    -1297:56:51
+  -1297:56:51.6
+ -1297:56:51.59
+ -1297:56:51.59
+ -1297:56:51.59
+ -1297:56:51.59
+     -1297:56:51
+   -1297:56:51.6
+  -1297:56:51.59
+ -1297:56:51.593
+ -1297:56:51.593
+ -1297:56:51.593
+ -1297:56:51.593
+ ********
+ -54 01:56
+  -54 01:56
+   -54 01:56
+ -54 01:56:51
+  -54 01:56:51
+  -54 01:56:51
+   -54 01:56:51
+ -54 01:56:51.6
+ -54 01:56:51.6
+    -54 01:56:51
+  -54 01:56:51.6
+ -54 01:56:51.59
+ -54 01:56:51.59
+     -54 01:56:51
+   -54 01:56:51.6
+  -54 01:56:51.59
+ -54 01:56:51.593
+ -54 01:56:51.593
+      -54 01:56:51
+    -54 01:56:51.6
+   -54 01:56:51.59
+  -54 01:56:51.593
+ -54 01:56:51.5932
+ -54 01:56:51.5932
+       -54 01:56:51
+     -54 01:56:51.6
+    -54 01:56:51.59
+   -54 01:56:51.593
+  -54 01:56:51.5932
+ -54 01:56:51.59319
+ -54 01:56:51.59319
+ *****
+ ******
+ *******
+ ********
+ -16344:00
+  -16344:00
+  -16344:00
+   -16344:00
+   -16344:00
+   -16344:00
+ -16344:00:00
+ -16344:00:00
+ -16344:00:00
+ -16344:00:00
+  -16344:00:00
+  -16344:00:00
+  -16344:00:00
+  -16344:00:00
+  -16344:00:00
+   -16344:00:00
+ -16344:00:00.0
+ -16344:00:00.0
+ -16344:00:00.0
+ -16344:00:00.0
+ -16344:00:00.0
+    -16344:00:00
+  -16344:00:00.0
+ -16344:00:00.00
+ -16344:00:00.00
+ -16344:00:00.00
+ -16344:00:00.00
+ -16344:00:00.00
+ ********
+ *********
+ -681 00:00
+  -681 00:00
+   -681 00:00
+ -681 00:00:00
+ -681 00:00:00
+  -681 00:00:00
+  -681 00:00:00
+  -681 00:00:00
+   -681 00:00:00
+ -681 00:00:00.0
+ -681 00:00:00.0
+ -681 00:00:00.0
+    -681 00:00:00
+  -681 00:00:00.0
+ -681 00:00:00.00
+ -681 00:00:00.00
+ -681 00:00:00.00
+     -681 00:00:00
+   -681 00:00:00.0
+  -681 00:00:00.00
+ -681 00:00:00.000
+ -681 00:00:00.000
+ -681 00:00:00.000
+      -681 00:00:00
+    -681 00:00:00.0
+   -681 00:00:00.00
+  -681 00:00:00.000
+ -681 00:00:00.0000
+ -681 00:00:00.0000
+ -681 00:00:00.0000
+ *****
+ ******
+ *******
+ ********
+ -16348:50
+  -16348:50
+  -16348:50
+   -16348:50
+   -16348:50
+   -16348:50
+ -16348:50:38
+ -16348:50:38
+ -16348:50:38
+ -16348:50:38
+  -16348:50:38
+  -16348:50:38
+  -16348:50:38
+  -16348:50:38
+  -16348:50:38
+   -16348:50:38
+ -16348:50:38.1
+ -16348:50:38.1
+ -16348:50:38.1
+ -16348:50:38.1
+ -16348:50:38.1
+    -16348:50:38
+  -16348:50:38.1
+ -16348:50:38.12
+ -16348:50:38.12
+ -16348:50:38.12
+ -16348:50:38.12
+ -16348:50:38.12
+ ********
+ *********
+ -681 04:50
+  -681 04:50
+   -681 04:50
+ -681 04:50:38
+ -681 04:50:38
+  -681 04:50:38
+  -681 04:50:38
+  -681 04:50:38
+   -681 04:50:38
+ -681 04:50:38.1
+ -681 04:50:38.1
+ -681 04:50:38.1
+    -681 04:50:38
+  -681 04:50:38.1
+ -681 04:50:38.12
+ -681 04:50:38.12
+ -681 04:50:38.12
+     -681 04:50:38
+   -681 04:50:38.1
+  -681 04:50:38.12
+ -681 04:50:38.123
+ -681 04:50:38.123
+ -681 04:50:38.123
+      -681 04:50:38
+    -681 04:50:38.1
+   -681 04:50:38.12
+  -681 04:50:38.123
+ -681 04:50:38.1230
+ -681 04:50:38.1230
+ -681 04:50:38.1230
+ *****
+ ******
+ *******
+ ********
+ -16356:31
+  -16356:31
+  -16356:31
+   -16356:31
+   -16356:31
+   -16356:31
+ -16356:31:35
+ -16356:31:35
+ -16356:31:35
+ -16356:31:35
+  -16356:31:35
+  -16356:31:35
+  -16356:31:35
+  -16356:31:35
+  -16356:31:35
+   -16356:31:35
+ -16356:31:35.2
+ -16356:31:35.2
+ -16356:31:35.2
+ -16356:31:35.2
+ -16356:31:35.2
+    -16356:31:35
+  -16356:31:35.2
+ -16356:31:35.23
+ -16356:31:35.23
+ -16356:31:35.23
+ -16356:31:35.23
+ -16356:31:35.23
+ ********
+ *********
+ -681 12:31
+  -681 12:31
+   -681 12:31
+ -681 12:31:35
+ -681 12:31:35
+  -681 12:31:35
+  -681 12:31:35
+  -681 12:31:35
+   -681 12:31:35
+ -681 12:31:35.2
+ -681 12:31:35.2
+ -681 12:31:35.2
+    -681 12:31:35
+  -681 12:31:35.2
+ -681 12:31:35.23
+ -681 12:31:35.23
+ -681 12:31:35.23
+     -681 12:31:35
+   -681 12:31:35.2
+  -681 12:31:35.23
+ -681 12:31:35.235
+ -681 12:31:35.235
+ -681 12:31:35.235
+      -681 12:31:35
+    -681 12:31:35.2
+   -681 12:31:35.23
+  -681 12:31:35.235
+ -681 12:31:35.2345
+ -681 12:31:35.2345
+ -681 12:31:35.2345
+ *****
+ ******
+ *******
+ ********
+ -16356:47
+  -16356:47
+  -16356:47
+   -16356:47
+   -16356:47
+   -16356:47
+ -16356:47:53
+ -16356:47:53
+ -16356:47:53
+ -16356:47:53
+  -16356:47:53
+  -16356:47:53
+  -16356:47:53
+  -16356:47:53
+  -16356:47:53
+   -16356:47:53
+ -16356:47:53.3
+ -16356:47:53.3
+ -16356:47:53.3
+ -16356:47:53.3
+ -16356:47:53.3
+    -16356:47:53
+  -16356:47:53.3
+ -16356:47:53.35
+ -16356:47:53.35
+ -16356:47:53.35
+ -16356:47:53.35
+ -16356:47:53.35
+ ********
+ *********
+ -681 12:47
+  -681 12:47
+   -681 12:47
+ -681 12:47:53
+ -681 12:47:53
+  -681 12:47:53
+  -681 12:47:53
+  -681 12:47:53
+   -681 12:47:53
+ -681 12:47:53.3
+ -681 12:47:53.3
+ -681 12:47:53.3
+    -681 12:47:53
+  -681 12:47:53.3
+ -681 12:47:53.35
+ -681 12:47:53.35
+ -681 12:47:53.35
+     -681 12:47:53
+   -681 12:47:53.3
+  -681 12:47:53.35
+ -681 12:47:53.345
+ -681 12:47:53.345
+ -681 12:47:53.345
+      -681 12:47:53
+    -681 12:47:53.3
+   -681 12:47:53.35
+  -681 12:47:53.345
+ -681 12:47:53.3450
+ -681 12:47:53.3450
+ -681 12:47:53.3450
+ *****
+ ******
+ *******
+ ********
+ -16345:26
+  -16345:26
+  -16345:26
+   -16345:26
+   -16345:26
+   -16345:26
+ -16345:26:00
+ -16345:26:00
+ -16345:26:00
+ -16345:26:00
+  -16345:26:00
+  -16345:26:00
+  -16345:26:00
+  -16345:26:00
+  -16345:26:00
+   -16345:26:00
+ -16345:26:00.5
+ -16345:26:00.5
+ -16345:26:00.5
+ -16345:26:00.5
+ -16345:26:00.5
+    -16345:26:00
+  -16345:26:00.5
+ -16345:26:00.46
+ -16345:26:00.46
+ -16345:26:00.46
+ -16345:26:00.46
+ -16345:26:00.46
+ ********
+ *********
+ -681 01:26
+  -681 01:26
+   -681 01:26
+ -681 01:26:00
+ -681 01:26:00
+  -681 01:26:00
+  -681 01:26:00
+  -681 01:26:00
+   -681 01:26:00
+ -681 01:26:00.5
+ -681 01:26:00.5
+ -681 01:26:00.5
+    -681 01:26:00
+  -681 01:26:00.5
+ -681 01:26:00.46
+ -681 01:26:00.46
+ -681 01:26:00.46
+     -681 01:26:00
+   -681 01:26:00.5
+  -681 01:26:00.46
+ -681 01:26:00.456
+ -681 01:26:00.456
+ -681 01:26:00.456
+      -681 01:26:00
+    -681 01:26:00.5
+   -681 01:26:00.46
+  -681 01:26:00.456
+ -681 01:26:00.4562
+ -681 01:26:00.4562
+ -681 01:26:00.4562
+ *****
+ ******
+ *******
+ ********
+ -16364:58
+  -16364:58
+  -16364:58
+   -16364:58
+   -16364:58
+   -16364:58
+ -16364:58:11
+ -16364:58:11
+ -16364:58:11
+ -16364:58:11
+  -16364:58:11
+  -16364:58:11
+  -16364:58:11
+  -16364:58:11
+  -16364:58:11
+   -16364:58:11
+ -16364:58:11.6
+ -16364:58:11.6
+ -16364:58:11.6
+ -16364:58:11.6
+ -16364:58:11.6
+    -16364:58:11
+  -16364:58:11.6
+ -16364:58:11.57
+ -16364:58:11.57
+ -16364:58:11.57
+ -16364:58:11.57
+ -16364:58:11.57
+ ********
+ *********
+ -681 20:58
+  -681 20:58
+   -681 20:58
+ -681 20:58:11
+ -681 20:58:11
+  -681 20:58:11
+  -681 20:58:11
+  -681 20:58:11
+   -681 20:58:11
+ -681 20:58:11.6
+ -681 20:58:11.6
+ -681 20:58:11.6
+    -681 20:58:11
+  -681 20:58:11.6
+ -681 20:58:11.57
+ -681 20:58:11.57
+ -681 20:58:11.57
+     -681 20:58:11
+   -681 20:58:11.6
+  -681 20:58:11.57
+ -681 20:58:11.567
+ -681 20:58:11.567
+ -681 20:58:11.567
+      -681 20:58:11
+    -681 20:58:11.6
+   -681 20:58:11.57
+  -681 20:58:11.567
+ -681 20:58:11.5668
+ -681 20:58:11.5668
+ -681 20:58:11.5668
+ *****
+ ******
+ *******
+ ********
+ -16351:36
+  -16351:36
+  -16351:36
+   -16351:36
+   -16351:36
+   -16351:36
+ -16351:36:05
+ -16351:36:05
+ -16351:36:05
+ -16351:36:05
+  -16351:36:05
+  -16351:36:05
+  -16351:36:05
+  -16351:36:05
+  -16351:36:05
+   -16351:36:05
+ -16351:36:05.2
+ -16351:36:05.2
+ -16351:36:05.2
+ -16351:36:05.2
+ -16351:36:05.2
+    -16351:36:05
+  -16351:36:05.2
+ -16351:36:05.19
+ -16351:36:05.19
+ -16351:36:05.19
+ -16351:36:05.19
+ -16351:36:05.19
+ ********
+ *********
+ -681 07:36
+  -681 07:36
+   -681 07:36
+ -681 07:36:05
+ -681 07:36:05
+  -681 07:36:05
+  -681 07:36:05
+  -681 07:36:05
+   -681 07:36:05
+ -681 07:36:05.2
+ -681 07:36:05.2
+ -681 07:36:05.2
+    -681 07:36:05
+  -681 07:36:05.2
+ -681 07:36:05.19
+ -681 07:36:05.19
+ -681 07:36:05.19
+     -681 07:36:05
+   -681 07:36:05.2
+  -681 07:36:05.19
+ -681 07:36:05.190
+ -681 07:36:05.190
+ -681 07:36:05.190
+      -681 07:36:05
+    -681 07:36:05.2
+   -681 07:36:05.19
+  -681 07:36:05.190
+ -681 07:36:05.1896
+ -681 07:36:05.1896
+ -681 07:36:05.1896
+ *****
+ ******
+ *******
+ ********
+ -16359:43
+  -16359:43
+  -16359:43
+   -16359:43
+   -16359:43
+   -16359:43
+ -16359:43:49
+ -16359:43:49
+ -16359:43:49
+ -16359:43:49
+  -16359:43:49
+  -16359:43:49
+  -16359:43:49
+  -16359:43:49
+  -16359:43:49
+   -16359:43:49
+ -16359:43:49.8
+ -16359:43:49.8
+ -16359:43:49.8
+ -16359:43:49.8
+ -16359:43:49.8
+    -16359:43:49
+  -16359:43:49.8
+ -16359:43:49.83
+ -16359:43:49.83
+ -16359:43:49.83
+ -16359:43:49.83
+ -16359:43:49.83
+ ********
+ *********
+ -681 15:43
+  -681 15:43
+   -681 15:43
+ -681 15:43:49
+ -681 15:43:49
+  -681 15:43:49
+  -681 15:43:49
+  -681 15:43:49
+   -681 15:43:49
+ -681 15:43:49.8
+ -681 15:43:49.8
+ -681 15:43:49.8
+    -681 15:43:49
+  -681 15:43:49.8
+ -681 15:43:49.83
+ -681 15:43:49.83
+ -681 15:43:49.83
+     -681 15:43:49
+   -681 15:43:49.8
+  -681 15:43:49.83
+ -681 15:43:49.831
+ -681 15:43:49.831
+ -681 15:43:49.831
+      -681 15:43:49
+    -681 15:43:49.8
+   -681 15:43:49.83
+  -681 15:43:49.831
+ -681 15:43:49.8313
+ -681 15:43:49.8313
+ -681 15:43:49.8313
+ *****
+ ******
+ *******
+ ********
+ -16348:25
+  -16348:25
+  -16348:25
+   -16348:25
+   -16348:25
+   -16348:25
+ -16348:25:09
+ -16348:25:09
+ -16348:25:09
+ -16348:25:09
+  -16348:25:09
+  -16348:25:09
+  -16348:25:09
+  -16348:25:09
+  -16348:25:09
+   -16348:25:09
+ -16348:25:09.0
+ -16348:25:09.0
+ -16348:25:09.0
+ -16348:25:09.0
+ -16348:25:09.0
+    -16348:25:09
+  -16348:25:09.0
+ -16348:25:09.01
+ -16348:25:09.01
+ -16348:25:09.01
+ -16348:25:09.01
+ -16348:25:09.01
+ ********
+ *********
+ -681 04:25
+  -681 04:25
+   -681 04:25
+ -681 04:25:09
+ -681 04:25:09
+  -681 04:25:09
+  -681 04:25:09
+  -681 04:25:09
+   -681 04:25:09
+ -681 04:25:09.0
+ -681 04:25:09.0
+ -681 04:25:09.0
+    -681 04:25:09
+  -681 04:25:09.0
+ -681 04:25:09.01
+ -681 04:25:09.01
+ -681 04:25:09.01
+     -681 04:25:09
+   -681 04:25:09.0
+  -681 04:25:09.01
+ -681 04:25:09.013
+ -681 04:25:09.013
+ -681 04:25:09.013
+      -681 04:25:09
+    -681 04:25:09.0
+   -681 04:25:09.01
+  -681 04:25:09.013
+ -681 04:25:09.0129
+ -681 04:25:09.0129
+ -681 04:25:09.0129
+ *****
+ ******
+ *******
+ ********
+ -16350:49
+  -16350:49
+  -16350:49
+   -16350:49
+   -16350:49
+   -16350:49
+ -16350:49:27
+ -16350:49:27
+ -16350:49:27
+ -16350:49:27
+  -16350:49:27
+  -16350:49:27
+  -16350:49:27
+  -16350:49:27
+  -16350:49:27
+   -16350:49:27
+ -16350:49:27.5
+ -16350:49:27.5
+ -16350:49:27.5
+ -16350:49:27.5
+ -16350:49:27.5
+    -16350:49:27
+  -16350:49:27.5
+ -16350:49:27.52
+ -16350:49:27.52
+ -16350:49:27.52
+ -16350:49:27.52
+ -16350:49:27.52
+ ********
+ *********
+ -681 06:49
+  -681 06:49
+   -681 06:49
+ -681 06:49:27
+ -681 06:49:27
+  -681 06:49:27
+  -681 06:49:27
+  -681 06:49:27
+   -681 06:49:27
+ -681 06:49:27.5
+ -681 06:49:27.5
+ -681 06:49:27.5
+    -681 06:49:27
+  -681 06:49:27.5
+ -681 06:49:27.52
+ -681 06:49:27.52
+ -681 06:49:27.52
+     -681 06:49:27
+   -681 06:49:27.5
+  -681 06:49:27.52
+ -681 06:49:27.524
+ -681 06:49:27.524
+ -681 06:49:27.524
+      -681 06:49:27
+    -681 06:49:27.5
+   -681 06:49:27.52
+  -681 06:49:27.524
+ -681 06:49:27.5237
+ -681 06:49:27.5237
+ -681 06:49:27.5237
+ *****
+ ******
+ *******
+ ********
+ -16346:57
+  -16346:57
+  -16346:57
+   -16346:57
+   -16346:57
+   -16346:57
+ -16346:57:52
+ -16346:57:52
+ -16346:57:52
+ -16346:57:52
+  -16346:57:52
+  -16346:57:52
+  -16346:57:52
+  -16346:57:52
+  -16346:57:52
+   -16346:57:52
+ -16346:57:52.0
+ -16346:57:52.0
+ -16346:57:52.0
+ -16346:57:52.0
+ -16346:57:52.0
+    -16346:57:52
+  -16346:57:52.0
+ -16346:57:52.02
+ -16346:57:52.02
+ -16346:57:52.02
+ -16346:57:52.02
+ -16346:57:52.02
+ ********
+ *********
+ -681 02:57
+  -681 02:57
+   -681 02:57
+ -681 02:57:52
+ -681 02:57:52
+  -681 02:57:52
+  -681 02:57:52
+  -681 02:57:52
+   -681 02:57:52
+ -681 02:57:52.0
+ -681 02:57:52.0
+ -681 02:57:52.0
+    -681 02:57:52
+  -681 02:57:52.0
+ -681 02:57:52.02
+ -681 02:57:52.02
+ -681 02:57:52.02
+     -681 02:57:52
+   -681 02:57:52.0
+  -681 02:57:52.02
+ -681 02:57:52.016
+ -681 02:57:52.016
+ -681 02:57:52.016
+      -681 02:57:52
+    -681 02:57:52.0
+   -681 02:57:52.02
+  -681 02:57:52.016
+ -681 02:57:52.0156
+ -681 02:57:52.0156
+ -681 02:57:52.0156
+ *****
+ ******
+ *******
+ ********
+ -16360:45
+  -16360:45
+  -16360:45
+   -16360:45
+   -16360:45
+   -16360:45
+ -16360:45:44
+ -16360:45:44
+ -16360:45:44
+ -16360:45:44
+  -16360:45:44
+  -16360:45:44
+  -16360:45:44
+  -16360:45:44
+  -16360:45:44
+   -16360:45:44
+ -16360:45:44.9
+ -16360:45:44.9
+ -16360:45:44.9
+ -16360:45:44.9
+ -16360:45:44.9
+    -16360:45:44
+  -16360:45:44.9
+ -16360:45:44.87
+ -16360:45:44.87
+ -16360:45:44.87
+ -16360:45:44.87
+ -16360:45:44.87
+ ********
+ *********
+ -681 16:45
+  -681 16:45
+   -681 16:45
+ -681 16:45:44
+ -681 16:45:44
+  -681 16:45:44
+  -681 16:45:44
+  -681 16:45:44
+   -681 16:45:44
+ -681 16:45:44.9
+ -681 16:45:44.9
+ -681 16:45:44.9
+    -681 16:45:44
+  -681 16:45:44.9
+ -681 16:45:44.87
+ -681 16:45:44.87
+ -681 16:45:44.87
+     -681 16:45:44
+   -681 16:45:44.9
+  -681 16:45:44.87
+ -681 16:45:44.865
+ -681 16:45:44.865
+ -681 16:45:44.865
+      -681 16:45:44
+    -681 16:45:44.9
+   -681 16:45:44.87
+  -681 16:45:44.865
+ -681 16:45:44.8653
+ -681 16:45:44.8653
+ -681 16:45:44.8653
+ *****
+ ******
+ *******
+ ********
+ -16365:30
+  -16365:30
+  -16365:30
+   -16365:30
+   -16365:30
+   -16365:30
+ -16365:30:57
+ -16365:30:57
+ -16365:30:57
+ -16365:30:57
+  -16365:30:57
+  -16365:30:57
+  -16365:30:57
+  -16365:30:57
+  -16365:30:57
+   -16365:30:57
+ -16365:30:57.8
+ -16365:30:57.8
+ -16365:30:57.8
+ -16365:30:57.8
+ -16365:30:57.8
+    -16365:30:57
+  -16365:30:57.8
+ -16365:30:57.82
+ -16365:30:57.82
+ -16365:30:57.82
+ -16365:30:57.82
+ -16365:30:57.82
+ ********
+ *********
+ -681 21:30
+  -681 21:30
+   -681 21:30
+ -681 21:30:57
+ -681 21:30:57
+  -681 21:30:57
+  -681 21:30:57
+  -681 21:30:57
+   -681 21:30:57
+ -681 21:30:57.8
+ -681 21:30:57.8
+ -681 21:30:57.8
+    -681 21:30:57
+  -681 21:30:57.8
+ -681 21:30:57.82
+ -681 21:30:57.82
+ -681 21:30:57.82
+     -681 21:30:57
+   -681 21:30:57.8
+  -681 21:30:57.82
+ -681 21:30:57.820
+ -681 21:30:57.820
+ -681 21:30:57.820
+      -681 21:30:57
+    -681 21:30:57.8
+   -681 21:30:57.82
+  -681 21:30:57.820
+ -681 21:30:57.8205
+ -681 21:30:57.8205
+ -681 21:30:57.8205
+ *****
+ ******
+ *******
+ ********
+ -16348:25
+  -16348:25
+  -16348:25
+   -16348:25
+   -16348:25
+   -16348:25
+ -16348:25:09
+ -16348:25:09
+ -16348:25:09
+ -16348:25:09
+  -16348:25:09
+  -16348:25:09
+  -16348:25:09
+  -16348:25:09
+  -16348:25:09
+   -16348:25:09
+ -16348:25:09.2
+ -16348:25:09.2
+ -16348:25:09.2
+ -16348:25:09.2
+ -16348:25:09.2
+    -16348:25:09
+  -16348:25:09.2
+ -16348:25:09.15
+ -16348:25:09.15
+ -16348:25:09.15
+ -16348:25:09.15
+ -16348:25:09.15
+ ********
+ *********
+ -681 04:25
+  -681 04:25
+   -681 04:25
+ -681 04:25:09
+ -681 04:25:09
+  -681 04:25:09
+  -681 04:25:09
+  -681 04:25:09
+   -681 04:25:09
+ -681 04:25:09.2
+ -681 04:25:09.2
+ -681 04:25:09.2
+    -681 04:25:09
+  -681 04:25:09.2
+ -681 04:25:09.15
+ -681 04:25:09.15
+ -681 04:25:09.15
+     -681 04:25:09
+   -681 04:25:09.2
+  -681 04:25:09.15
+ -681 04:25:09.154
+ -681 04:25:09.154
+ -681 04:25:09.154
+      -681 04:25:09
+    -681 04:25:09.2
+   -681 04:25:09.15
+  -681 04:25:09.154
+ -681 04:25:09.1539
+ -681 04:25:09.1539
+ -681 04:25:09.1539
+ *****
+ ******
+ *******
+ ********
+ -16350:49
+  -16350:49
+  -16350:49
+   -16350:49
+   -16350:49
+   -16350:49
+ -16350:49:27
+ -16350:49:27
+ -16350:49:27
+ -16350:49:27
+  -16350:49:27
+  -16350:49:27
+  -16350:49:27
+  -16350:49:27
+  -16350:49:27
+   -16350:49:27
+ -16350:49:27.1
+ -16350:49:27.1
+ -16350:49:27.1
+ -16350:49:27.1
+ -16350:49:27.1
+    -16350:49:27
+  -16350:49:27.1
+ -16350:49:27.11
+ -16350:49:27.11
+ -16350:49:27.11
+ -16350:49:27.11
+ -16350:49:27.11
+ ********
+ *********
+ -681 06:49
+  -681 06:49
+   -681 06:49
+ -681 06:49:27
+ -681 06:49:27
+  -681 06:49:27
+  -681 06:49:27
+  -681 06:49:27
+   -681 06:49:27
+ -681 06:49:27.1
+ -681 06:49:27.1
+ -681 06:49:27.1
+    -681 06:49:27
+  -681 06:49:27.1
+ -681 06:49:27.11
+ -681 06:49:27.11
+ -681 06:49:27.11
+     -681 06:49:27
+   -681 06:49:27.1
+  -681 06:49:27.11
+ -681 06:49:27.105
+ -681 06:49:27.105
+ -681 06:49:27.105
+      -681 06:49:27
+    -681 06:49:27.1
+   -681 06:49:27.11
+  -681 06:49:27.105
+ -681 06:49:27.1053
+ -681 06:49:27.1053
+ -681 06:49:27.1053
+ *****
+ ******
+ *******
+ ********
+ -16346:57
+  -16346:57
+  -16346:57
+   -16346:57
+   -16346:57
+   -16346:57
+ -16346:57:52
+ -16346:57:52
+ -16346:57:52
+ -16346:57:52
+  -16346:57:52
+  -16346:57:52
+  -16346:57:52
+  -16346:57:52
+  -16346:57:52
+   -16346:57:52
+ -16346:57:52.5
+ -16346:57:52.5
+ -16346:57:52.5
+ -16346:57:52.5
+ -16346:57:52.5
+    -16346:57:52
+  -16346:57:52.5
+ -16346:57:52.48
+ -16346:57:52.48
+ -16346:57:52.48
+ -16346:57:52.48
+ -16346:57:52.48
+ ********
+ *********
+ -681 02:57
+  -681 02:57
+   -681 02:57
+ -681 02:57:52
+ -681 02:57:52
+  -681 02:57:52
+  -681 02:57:52
+  -681 02:57:52
+   -681 02:57:52
+ -681 02:57:52.5
+ -681 02:57:52.5
+ -681 02:57:52.5
+    -681 02:57:52
+  -681 02:57:52.5
+ -681 02:57:52.48
+ -681 02:57:52.48
+ -681 02:57:52.48
+     -681 02:57:52
+   -681 02:57:52.5
+  -681 02:57:52.48
+ -681 02:57:52.482
+ -681 02:57:52.482
+ -681 02:57:52.482
+      -681 02:57:52
+    -681 02:57:52.5
+   -681 02:57:52.48
+  -681 02:57:52.482
+ -681 02:57:52.4823
+ -681 02:57:52.4823
+ -681 02:57:52.4823
+ *****
+ ******
+ *******
+ ********
+ -16360:45
+  -16360:45
+  -16360:45
+   -16360:45
+   -16360:45
+   -16360:45
+ -16360:45:44
+ -16360:45:44
+ -16360:45:44
+ -16360:45:44
+  -16360:45:44
+  -16360:45:44
+  -16360:45:44
+  -16360:45:44
+  -16360:45:44
+   -16360:45:44
+ -16360:45:44.7
+ -16360:45:44.7
+ -16360:45:44.7
+ -16360:45:44.7
+ -16360:45:44.7
+    -16360:45:44
+  -16360:45:44.7
+ -16360:45:44.66
+ -16360:45:44.66
+ -16360:45:44.66
+ -16360:45:44.66
+ -16360:45:44.66
+ ********
+ *********
+ -681 16:45
+  -681 16:45
+   -681 16:45
+ -681 16:45:44
+ -681 16:45:44
+  -681 16:45:44
+  -681 16:45:44
+  -681 16:45:44
+   -681 16:45:44
+ -681 16:45:44.7
+ -681 16:45:44.7
+ -681 16:45:44.7
+    -681 16:45:44
+  -681 16:45:44.7
+ -681 16:45:44.66
+ -681 16:45:44.66
+ -681 16:45:44.66
+     -681 16:45:44
+   -681 16:45:44.7
+  -681 16:45:44.66
+ -681 16:45:44.658
+ -681 16:45:44.658
+ -681 16:45:44.658
+      -681 16:45:44
+    -681 16:45:44.7
+   -681 16:45:44.66
+  -681 16:45:44.658
+ -681 16:45:44.6583
+ -681 16:45:44.6583
+ -681 16:45:44.6583
+ *****
+ ******
+ *******
+ ********
+ -16365:30
+  -16365:30
+  -16365:30
+   -16365:30
+   -16365:30
+   -16365:30
+ -16365:30:57
+ -16365:30:57
+ -16365:30:57
+ -16365:30:57
+  -16365:30:57
+  -16365:30:57
+  -16365:30:57
+  -16365:30:57
+  -16365:30:57
+   -16365:30:57
+ -16365:30:57.6
+ -16365:30:57.6
+ -16365:30:57.6
+ -16365:30:57.6
+ -16365:30:57.6
+    -16365:30:57
+  -16365:30:57.6
+ -16365:30:57.58
+ -16365:30:57.58
+ -16365:30:57.58
+ -16365:30:57.58
+ -16365:30:57.58
+ ********
+ *********
+ -681 21:30
+  -681 21:30
+   -681 21:30
+ -681 21:30:57
+ -681 21:30:57
+  -681 21:30:57
+  -681 21:30:57
+  -681 21:30:57
+   -681 21:30:57
+ -681 21:30:57.6
+ -681 21:30:57.6
+ -681 21:30:57.6
+    -681 21:30:57
+  -681 21:30:57.6
+ -681 21:30:57.58
+ -681 21:30:57.58
+ -681 21:30:57.58
+     -681 21:30:57
+   -681 21:30:57.6
+  -681 21:30:57.58
+ -681 21:30:57.582
+ -681 21:30:57.582
+ -681 21:30:57.582
+      -681 21:30:57
+    -681 21:30:57.6
+   -681 21:30:57.58
+  -681 21:30:57.582
+ -681 21:30:57.5822
+ -681 21:30:57.5822
+ -681 21:30:57.5822
+ *****
+ ******
+ *******
+ ********
+ -16366:30
+  -16366:30
+  -16366:30
+   -16366:30
+   -16366:30
+   -16366:30
+ -16366:30:04
+ -16366:30:04
+ -16366:30:04
+ -16366:30:04
+  -16366:30:04
+  -16366:30:04
+  -16366:30:04
+  -16366:30:04
+  -16366:30:04
+   -16366:30:04
+ -16366:30:04.2
+ -16366:30:04.2
+ -16366:30:04.2
+ -16366:30:04.2
+ -16366:30:04.2
+    -16366:30:04
+  -16366:30:04.2
+ -16366:30:04.18
+ -16366:30:04.18
+ -16366:30:04.18
+ -16366:30:04.18
+ -16366:30:04.18
+ ********
+ *********
+ -681 22:30
+  -681 22:30
+   -681 22:30
+ -681 22:30:04
+ -681 22:30:04
+  -681 22:30:04
+  -681 22:30:04
+  -681 22:30:04
+   -681 22:30:04
+ -681 22:30:04.2
+ -681 22:30:04.2
+ -681 22:30:04.2
+    -681 22:30:04
+  -681 22:30:04.2
+ -681 22:30:04.18
+ -681 22:30:04.18
+ -681 22:30:04.18
+     -681 22:30:04
+   -681 22:30:04.2
+  -681 22:30:04.18
+ -681 22:30:04.183
+ -681 22:30:04.183
+ -681 22:30:04.183
+      -681 22:30:04
+    -681 22:30:04.2
+   -681 22:30:04.18
+  -681 22:30:04.183
+ -681 22:30:04.1835
+ -681 22:30:04.1835
+ -681 22:30:04.1835
+ *****
+ ******
+ *******
+ ********
+ -16345:56
+  -16345:56
+  -16345:56
+   -16345:56
+   -16345:56
+   -16345:56
+ -16345:56:51
+ -16345:56:51
+ -16345:56:51
+ -16345:56:51
+  -16345:56:51
+  -16345:56:51
+  -16345:56:51
+  -16345:56:51
+  -16345:56:51
+   -16345:56:51
+ -16345:56:51.6
+ -16345:56:51.6
+ -16345:56:51.6
+ -16345:56:51.6
+ -16345:56:51.6
+    -16345:56:51
+  -16345:56:51.6
+ -16345:56:51.59
+ -16345:56:51.59
+ -16345:56:51.59
+ -16345:56:51.59
+ -16345:56:51.59
+ ********
+ *********
+ -681 01:56
+  -681 01:56
+   -681 01:56
+ -681 01:56:51
+ -681 01:56:51
+  -681 01:56:51
+  -681 01:56:51
+  -681 01:56:51
+   -681 01:56:51
+ -681 01:56:51.6
+ -681 01:56:51.6
+ -681 01:56:51.6
+    -681 01:56:51
+  -681 01:56:51.6
+ -681 01:56:51.59
+ -681 01:56:51.59
+ -681 01:56:51.59
+     -681 01:56:51
+   -681 01:56:51.6
+  -681 01:56:51.59
+ -681 01:56:51.593
+ -681 01:56:51.593
+ -681 01:56:51.593
+      -681 01:56:51
+    -681 01:56:51.6
+   -681 01:56:51.59
+  -681 01:56:51.593
+ -681 01:56:51.5932
+ -681 01:56:51.5932
+ -681 01:56:51.5932
+])
+AT_CLEANUP
+
+AT_SETUP([MONTH output])
+AT_DATA([month-out.sps], [dnl
+set mxerr=1000000.
+set mxwarns=10000000.
+data list notable/x 1-10.
+begin data.
+
+0
+0.5
+0.9
+1
+2
+3
+4
+4.1
+4.5
+4.9
+5
+6
+7
+7.1
+7.5
+7.9
+8
+9
+10
+11
+12
+13
+end data.
+print outfile='month-out.out'/x(month3).
+print outfile='month-out.out'/x(month4).
+print outfile='month-out.out'/x(month5).
+print outfile='month-out.out'/x(month6).
+print outfile='month-out.out'/x(month7).
+print outfile='month-out.out'/x(month8).
+print outfile='month-out.out'/x(month9).
+print outfile='month-out.out'/x(month10).
+print outfile='month-out.out'/x(month11).
+print outfile='month-out.out'/x(month12).
+print outfile='month-out.out'/x(month13).
+print outfile='month-out.out'/x(month14).
+print outfile='month-out.out'/x(month15).
+print outfile='month-out.out'/x(month16).
+print outfile='month-out.out'/x(month17).
+print outfile='month-out.out'/x(month18).
+print outfile='month-out.out'/x(month19).
+print outfile='month-out.out'/x(month20).
+print outfile='month-out.out'/x(month21).
+print outfile='month-out.out'/x(month22).
+print outfile='month-out.out'/x(month23).
+print outfile='month-out.out'/x(month24).
+print outfile='month-out.out'/x(month25).
+print outfile='month-out.out'/x(month26).
+print outfile='month-out.out'/x(month27).
+print outfile='month-out.out'/x(month28).
+print outfile='month-out.out'/x(month29).
+print outfile='month-out.out'/x(month30).
+print outfile='month-out.out'/x(month31).
+print outfile='month-out.out'/x(month32).
+print outfile='month-out.out'/x(month33).
+print outfile='month-out.out'/x(month34).
+print outfile='month-out.out'/x(month35).
+print outfile='month-out.out'/x(month36).
+print outfile='month-out.out'/x(month37).
+print outfile='month-out.out'/x(month38).
+print outfile='month-out.out'/x(month39).
+print outfile='month-out.out'/x(month40).
+execute.
+])
+AT_CHECK([pspp -O format=csv month-out.sps], [1], [stdout])
+AT_CHECK([sed '/^$/d' stdout | sort | uniq -c], [0], [dnl
+     38 error: Month number 0.000000 is not between 1 and 12.
+     38 error: Month number 0.500000 is not between 1 and 12.
+     38 error: Month number 0.900000 is not between 1 and 12.
+     38 error: Month number 13.000000 is not between 1 and 12.
+])
+AT_CHECK([cat month-out.out], [0], [dnl
+   .
+    .
+     .
+      .
+       .
+        .
+         .
+          .
+           .
+            .
+             .
+              .
+               .
+                .
+                 .
+                  .
+                   .
+                    .
+                     .
+                      .
+                       .
+                        .
+                         .
+                          .
+                           .
+                            .
+                             .
+                              .
+                               .
+                                .
+                                 .
+                                  .
+                                   .
+                                    .
+                                     .
+                                      .
+                                       .
+                                        .
+   .
+    .
+     .
+      .
+       .
+        .
+         .
+          .
+           .
+            .
+             .
+              .
+               .
+                .
+                 .
+                  .
+                   .
+                    .
+                     .
+                      .
+                       .
+                        .
+                         .
+                          .
+                           .
+                            .
+                             .
+                              .
+                               .
+                                .
+                                 .
+                                  .
+                                   .
+                                    .
+                                     .
+                                      .
+                                       .
+                                        .
+   .
+    .
+     .
+      .
+       .
+        .
+         .
+          .
+           .
+            .
+             .
+              .
+               .
+                .
+                 .
+                  .
+                   .
+                    .
+                     .
+                      .
+                       .
+                        .
+                         .
+                          .
+                           .
+                            .
+                             .
+                              .
+                               .
+                                .
+                                 .
+                                  .
+                                   .
+                                    .
+                                     .
+                                      .
+                                       .
+                                        .
+   .
+    .
+     .
+      .
+       .
+        .
+         .
+          .
+           .
+            .
+             .
+              .
+               .
+                .
+                 .
+                  .
+                   .
+                    .
+                     .
+                      .
+                       .
+                        .
+                         .
+                          .
+                           .
+                            .
+                             .
+                              .
+                               .
+                                .
+                                 .
+                                  .
+                                   .
+                                    .
+                                     .
+                                      .
+                                       .
+                                        .
+ JAN
+ JANU
+ JANUA
+ JANUAR
+ JANUARY
+ JANUARY @&t@
+ JANUARY  @&t@
+ JANUARY   @&t@
+ JANUARY    @&t@
+ JANUARY     @&t@
+ JANUARY      @&t@
+ JANUARY       @&t@
+ JANUARY        @&t@
+ JANUARY         @&t@
+ JANUARY          @&t@
+ JANUARY           @&t@
+ JANUARY            @&t@
+ JANUARY             @&t@
+ JANUARY              @&t@
+ JANUARY               @&t@
+ JANUARY                @&t@
+ JANUARY                 @&t@
+ JANUARY                  @&t@
+ JANUARY                   @&t@
+ JANUARY                    @&t@
+ JANUARY                     @&t@
+ JANUARY                      @&t@
+ JANUARY                       @&t@
+ JANUARY                        @&t@
+ JANUARY                         @&t@
+ JANUARY                          @&t@
+ JANUARY                           @&t@
+ JANUARY                            @&t@
+ JANUARY                             @&t@
+ JANUARY                              @&t@
+ JANUARY                               @&t@
+ JANUARY                                @&t@
+ JANUARY                                 @&t@
+ FEB
+ FEBR
+ FEBRU
+ FEBRUA
+ FEBRUAR
+ FEBRUARY
+ FEBRUARY @&t@
+ FEBRUARY  @&t@
+ FEBRUARY   @&t@
+ FEBRUARY    @&t@
+ FEBRUARY     @&t@
+ FEBRUARY      @&t@
+ FEBRUARY       @&t@
+ FEBRUARY        @&t@
+ FEBRUARY         @&t@
+ FEBRUARY          @&t@
+ FEBRUARY           @&t@
+ FEBRUARY            @&t@
+ FEBRUARY             @&t@
+ FEBRUARY              @&t@
+ FEBRUARY               @&t@
+ FEBRUARY                @&t@
+ FEBRUARY                 @&t@
+ FEBRUARY                  @&t@
+ FEBRUARY                   @&t@
+ FEBRUARY                    @&t@
+ FEBRUARY                     @&t@
+ FEBRUARY                      @&t@
+ FEBRUARY                       @&t@
+ FEBRUARY                        @&t@
+ FEBRUARY                         @&t@
+ FEBRUARY                          @&t@
+ FEBRUARY                           @&t@
+ FEBRUARY                            @&t@
+ FEBRUARY                             @&t@
+ FEBRUARY                              @&t@
+ FEBRUARY                               @&t@
+ FEBRUARY                                @&t@
+ MAR
+ MARC
+ MARCH
+ MARCH @&t@
+ MARCH  @&t@
+ MARCH   @&t@
+ MARCH    @&t@
+ MARCH     @&t@
+ MARCH      @&t@
+ MARCH       @&t@
+ MARCH        @&t@
+ MARCH         @&t@
+ MARCH          @&t@
+ MARCH           @&t@
+ MARCH            @&t@
+ MARCH             @&t@
+ MARCH              @&t@
+ MARCH               @&t@
+ MARCH                @&t@
+ MARCH                 @&t@
+ MARCH                  @&t@
+ MARCH                   @&t@
+ MARCH                    @&t@
+ MARCH                     @&t@
+ MARCH                      @&t@
+ MARCH                       @&t@
+ MARCH                        @&t@
+ MARCH                         @&t@
+ MARCH                          @&t@
+ MARCH                           @&t@
+ MARCH                            @&t@
+ MARCH                             @&t@
+ MARCH                              @&t@
+ MARCH                               @&t@
+ MARCH                                @&t@
+ MARCH                                 @&t@
+ MARCH                                  @&t@
+ MARCH                                   @&t@
+ APR
+ APRI
+ APRIL
+ APRIL @&t@
+ APRIL  @&t@
+ APRIL   @&t@
+ APRIL    @&t@
+ APRIL     @&t@
+ APRIL      @&t@
+ APRIL       @&t@
+ APRIL        @&t@
+ APRIL         @&t@
+ APRIL          @&t@
+ APRIL           @&t@
+ APRIL            @&t@
+ APRIL             @&t@
+ APRIL              @&t@
+ APRIL               @&t@
+ APRIL                @&t@
+ APRIL                 @&t@
+ APRIL                  @&t@
+ APRIL                   @&t@
+ APRIL                    @&t@
+ APRIL                     @&t@
+ APRIL                      @&t@
+ APRIL                       @&t@
+ APRIL                        @&t@
+ APRIL                         @&t@
+ APRIL                          @&t@
+ APRIL                           @&t@
+ APRIL                            @&t@
+ APRIL                             @&t@
+ APRIL                              @&t@
+ APRIL                               @&t@
+ APRIL                                @&t@
+ APRIL                                 @&t@
+ APRIL                                  @&t@
+ APRIL                                   @&t@
+ APR
+ APRI
+ APRIL
+ APRIL @&t@
+ APRIL  @&t@
+ APRIL   @&t@
+ APRIL    @&t@
+ APRIL     @&t@
+ APRIL      @&t@
+ APRIL       @&t@
+ APRIL        @&t@
+ APRIL         @&t@
+ APRIL          @&t@
+ APRIL           @&t@
+ APRIL            @&t@
+ APRIL             @&t@
+ APRIL              @&t@
+ APRIL               @&t@
+ APRIL                @&t@
+ APRIL                 @&t@
+ APRIL                  @&t@
+ APRIL                   @&t@
+ APRIL                    @&t@
+ APRIL                     @&t@
+ APRIL                      @&t@
+ APRIL                       @&t@
+ APRIL                        @&t@
+ APRIL                         @&t@
+ APRIL                          @&t@
+ APRIL                           @&t@
+ APRIL                            @&t@
+ APRIL                             @&t@
+ APRIL                              @&t@
+ APRIL                               @&t@
+ APRIL                                @&t@
+ APRIL                                 @&t@
+ APRIL                                  @&t@
+ APRIL                                   @&t@
+ APR
+ APRI
+ APRIL
+ APRIL @&t@
+ APRIL  @&t@
+ APRIL   @&t@
+ APRIL    @&t@
+ APRIL     @&t@
+ APRIL      @&t@
+ APRIL       @&t@
+ APRIL        @&t@
+ APRIL         @&t@
+ APRIL          @&t@
+ APRIL           @&t@
+ APRIL            @&t@
+ APRIL             @&t@
+ APRIL              @&t@
+ APRIL               @&t@
+ APRIL                @&t@
+ APRIL                 @&t@
+ APRIL                  @&t@
+ APRIL                   @&t@
+ APRIL                    @&t@
+ APRIL                     @&t@
+ APRIL                      @&t@
+ APRIL                       @&t@
+ APRIL                        @&t@
+ APRIL                         @&t@
+ APRIL                          @&t@
+ APRIL                           @&t@
+ APRIL                            @&t@
+ APRIL                             @&t@
+ APRIL                              @&t@
+ APRIL                               @&t@
+ APRIL                                @&t@
+ APRIL                                 @&t@
+ APRIL                                  @&t@
+ APRIL                                   @&t@
+ APR
+ APRI
+ APRIL
+ APRIL @&t@
+ APRIL  @&t@
+ APRIL   @&t@
+ APRIL    @&t@
+ APRIL     @&t@
+ APRIL      @&t@
+ APRIL       @&t@
+ APRIL        @&t@
+ APRIL         @&t@
+ APRIL          @&t@
+ APRIL           @&t@
+ APRIL            @&t@
+ APRIL             @&t@
+ APRIL              @&t@
+ APRIL               @&t@
+ APRIL                @&t@
+ APRIL                 @&t@
+ APRIL                  @&t@
+ APRIL                   @&t@
+ APRIL                    @&t@
+ APRIL                     @&t@
+ APRIL                      @&t@
+ APRIL                       @&t@
+ APRIL                        @&t@
+ APRIL                         @&t@
+ APRIL                          @&t@
+ APRIL                           @&t@
+ APRIL                            @&t@
+ APRIL                             @&t@
+ APRIL                              @&t@
+ APRIL                               @&t@
+ APRIL                                @&t@
+ APRIL                                 @&t@
+ APRIL                                  @&t@
+ APRIL                                   @&t@
+ MAY
+ MAY @&t@
+ MAY  @&t@
+ MAY   @&t@
+ MAY    @&t@
+ MAY     @&t@
+ MAY      @&t@
+ MAY       @&t@
+ MAY        @&t@
+ MAY         @&t@
+ MAY          @&t@
+ MAY           @&t@
+ MAY            @&t@
+ MAY             @&t@
+ MAY              @&t@
+ MAY               @&t@
+ MAY                @&t@
+ MAY                 @&t@
+ MAY                  @&t@
+ MAY                   @&t@
+ MAY                    @&t@
+ MAY                     @&t@
+ MAY                      @&t@
+ MAY                       @&t@
+ MAY                        @&t@
+ MAY                         @&t@
+ MAY                          @&t@
+ MAY                           @&t@
+ MAY                            @&t@
+ MAY                             @&t@
+ MAY                              @&t@
+ MAY                               @&t@
+ MAY                                @&t@
+ MAY                                 @&t@
+ MAY                                  @&t@
+ MAY                                   @&t@
+ MAY                                    @&t@
+ MAY                                     @&t@
+ JUN
+ JUNE
+ JUNE @&t@
+ JUNE  @&t@
+ JUNE   @&t@
+ JUNE    @&t@
+ JUNE     @&t@
+ JUNE      @&t@
+ JUNE       @&t@
+ JUNE        @&t@
+ JUNE         @&t@
+ JUNE          @&t@
+ JUNE           @&t@
+ JUNE            @&t@
+ JUNE             @&t@
+ JUNE              @&t@
+ JUNE               @&t@
+ JUNE                @&t@
+ JUNE                 @&t@
+ JUNE                  @&t@
+ JUNE                   @&t@
+ JUNE                    @&t@
+ JUNE                     @&t@
+ JUNE                      @&t@
+ JUNE                       @&t@
+ JUNE                        @&t@
+ JUNE                         @&t@
+ JUNE                          @&t@
+ JUNE                           @&t@
+ JUNE                            @&t@
+ JUNE                             @&t@
+ JUNE                              @&t@
+ JUNE                               @&t@
+ JUNE                                @&t@
+ JUNE                                 @&t@
+ JUNE                                  @&t@
+ JUNE                                   @&t@
+ JUNE                                    @&t@
+ JUL
+ JULY
+ JULY @&t@
+ JULY  @&t@
+ JULY   @&t@
+ JULY    @&t@
+ JULY     @&t@
+ JULY      @&t@
+ JULY       @&t@
+ JULY        @&t@
+ JULY         @&t@
+ JULY          @&t@
+ JULY           @&t@
+ JULY            @&t@
+ JULY             @&t@
+ JULY              @&t@
+ JULY               @&t@
+ JULY                @&t@
+ JULY                 @&t@
+ JULY                  @&t@
+ JULY                   @&t@
+ JULY                    @&t@
+ JULY                     @&t@
+ JULY                      @&t@
+ JULY                       @&t@
+ JULY                        @&t@
+ JULY                         @&t@
+ JULY                          @&t@
+ JULY                           @&t@
+ JULY                            @&t@
+ JULY                             @&t@
+ JULY                              @&t@
+ JULY                               @&t@
+ JULY                                @&t@
+ JULY                                 @&t@
+ JULY                                  @&t@
+ JULY                                   @&t@
+ JULY                                    @&t@
+ JUL
+ JULY
+ JULY @&t@
+ JULY  @&t@
+ JULY   @&t@
+ JULY    @&t@
+ JULY     @&t@
+ JULY      @&t@
+ JULY       @&t@
+ JULY        @&t@
+ JULY         @&t@
+ JULY          @&t@
+ JULY           @&t@
+ JULY            @&t@
+ JULY             @&t@
+ JULY              @&t@
+ JULY               @&t@
+ JULY                @&t@
+ JULY                 @&t@
+ JULY                  @&t@
+ JULY                   @&t@
+ JULY                    @&t@
+ JULY                     @&t@
+ JULY                      @&t@
+ JULY                       @&t@
+ JULY                        @&t@
+ JULY                         @&t@
+ JULY                          @&t@
+ JULY                           @&t@
+ JULY                            @&t@
+ JULY                             @&t@
+ JULY                              @&t@
+ JULY                               @&t@
+ JULY                                @&t@
+ JULY                                 @&t@
+ JULY                                  @&t@
+ JULY                                   @&t@
+ JULY                                    @&t@
+ JUL
+ JULY
+ JULY @&t@
+ JULY  @&t@
+ JULY   @&t@
+ JULY    @&t@
+ JULY     @&t@
+ JULY      @&t@
+ JULY       @&t@
+ JULY        @&t@
+ JULY         @&t@
+ JULY          @&t@
+ JULY           @&t@
+ JULY            @&t@
+ JULY             @&t@
+ JULY              @&t@
+ JULY               @&t@
+ JULY                @&t@
+ JULY                 @&t@
+ JULY                  @&t@
+ JULY                   @&t@
+ JULY                    @&t@
+ JULY                     @&t@
+ JULY                      @&t@
+ JULY                       @&t@
+ JULY                        @&t@
+ JULY                         @&t@
+ JULY                          @&t@
+ JULY                           @&t@
+ JULY                            @&t@
+ JULY                             @&t@
+ JULY                              @&t@
+ JULY                               @&t@
+ JULY                                @&t@
+ JULY                                 @&t@
+ JULY                                  @&t@
+ JULY                                   @&t@
+ JULY                                    @&t@
+ JUL
+ JULY
+ JULY @&t@
+ JULY  @&t@
+ JULY   @&t@
+ JULY    @&t@
+ JULY     @&t@
+ JULY      @&t@
+ JULY       @&t@
+ JULY        @&t@
+ JULY         @&t@
+ JULY          @&t@
+ JULY           @&t@
+ JULY            @&t@
+ JULY             @&t@
+ JULY              @&t@
+ JULY               @&t@
+ JULY                @&t@
+ JULY                 @&t@
+ JULY                  @&t@
+ JULY                   @&t@
+ JULY                    @&t@
+ JULY                     @&t@
+ JULY                      @&t@
+ JULY                       @&t@
+ JULY                        @&t@
+ JULY                         @&t@
+ JULY                          @&t@
+ JULY                           @&t@
+ JULY                            @&t@
+ JULY                             @&t@
+ JULY                              @&t@
+ JULY                               @&t@
+ JULY                                @&t@
+ JULY                                 @&t@
+ JULY                                  @&t@
+ JULY                                   @&t@
+ JULY                                    @&t@
+ AUG
+ AUGU
+ AUGUS
+ AUGUST
+ AUGUST @&t@
+ AUGUST  @&t@
+ AUGUST   @&t@
+ AUGUST    @&t@
+ AUGUST     @&t@
+ AUGUST      @&t@
+ AUGUST       @&t@
+ AUGUST        @&t@
+ AUGUST         @&t@
+ AUGUST          @&t@
+ AUGUST           @&t@
+ AUGUST            @&t@
+ AUGUST             @&t@
+ AUGUST              @&t@
+ AUGUST               @&t@
+ AUGUST                @&t@
+ AUGUST                 @&t@
+ AUGUST                  @&t@
+ AUGUST                   @&t@
+ AUGUST                    @&t@
+ AUGUST                     @&t@
+ AUGUST                      @&t@
+ AUGUST                       @&t@
+ AUGUST                        @&t@
+ AUGUST                         @&t@
+ AUGUST                          @&t@
+ AUGUST                           @&t@
+ AUGUST                            @&t@
+ AUGUST                             @&t@
+ AUGUST                              @&t@
+ AUGUST                               @&t@
+ AUGUST                                @&t@
+ AUGUST                                 @&t@
+ AUGUST                                  @&t@
+ SEP
+ SEPT
+ SEPTE
+ SEPTEM
+ SEPTEMB
+ SEPTEMBE
+ SEPTEMBER
+ SEPTEMBER @&t@
+ SEPTEMBER  @&t@
+ SEPTEMBER   @&t@
+ SEPTEMBER    @&t@
+ SEPTEMBER     @&t@
+ SEPTEMBER      @&t@
+ SEPTEMBER       @&t@
+ SEPTEMBER        @&t@
+ SEPTEMBER         @&t@
+ SEPTEMBER          @&t@
+ SEPTEMBER           @&t@
+ SEPTEMBER            @&t@
+ SEPTEMBER             @&t@
+ SEPTEMBER              @&t@
+ SEPTEMBER               @&t@
+ SEPTEMBER                @&t@
+ SEPTEMBER                 @&t@
+ SEPTEMBER                  @&t@
+ SEPTEMBER                   @&t@
+ SEPTEMBER                    @&t@
+ SEPTEMBER                     @&t@
+ SEPTEMBER                      @&t@
+ SEPTEMBER                       @&t@
+ SEPTEMBER                        @&t@
+ SEPTEMBER                         @&t@
+ SEPTEMBER                          @&t@
+ SEPTEMBER                           @&t@
+ SEPTEMBER                            @&t@
+ SEPTEMBER                             @&t@
+ SEPTEMBER                              @&t@
+ SEPTEMBER                               @&t@
+ OCT
+ OCTO
+ OCTOB
+ OCTOBE
+ OCTOBER
+ OCTOBER @&t@
+ OCTOBER  @&t@
+ OCTOBER   @&t@
+ OCTOBER    @&t@
+ OCTOBER     @&t@
+ OCTOBER      @&t@
+ OCTOBER       @&t@
+ OCTOBER        @&t@
+ OCTOBER         @&t@
+ OCTOBER          @&t@
+ OCTOBER           @&t@
+ OCTOBER            @&t@
+ OCTOBER             @&t@
+ OCTOBER              @&t@
+ OCTOBER               @&t@
+ OCTOBER                @&t@
+ OCTOBER                 @&t@
+ OCTOBER                  @&t@
+ OCTOBER                   @&t@
+ OCTOBER                    @&t@
+ OCTOBER                     @&t@
+ OCTOBER                      @&t@
+ OCTOBER                       @&t@
+ OCTOBER                        @&t@
+ OCTOBER                         @&t@
+ OCTOBER                          @&t@
+ OCTOBER                           @&t@
+ OCTOBER                            @&t@
+ OCTOBER                             @&t@
+ OCTOBER                              @&t@
+ OCTOBER                               @&t@
+ OCTOBER                                @&t@
+ OCTOBER                                 @&t@
+ NOV
+ NOVE
+ NOVEM
+ NOVEMB
+ NOVEMBE
+ NOVEMBER
+ NOVEMBER @&t@
+ NOVEMBER  @&t@
+ NOVEMBER   @&t@
+ NOVEMBER    @&t@
+ NOVEMBER     @&t@
+ NOVEMBER      @&t@
+ NOVEMBER       @&t@
+ NOVEMBER        @&t@
+ NOVEMBER         @&t@
+ NOVEMBER          @&t@
+ NOVEMBER           @&t@
+ NOVEMBER            @&t@
+ NOVEMBER             @&t@
+ NOVEMBER              @&t@
+ NOVEMBER               @&t@
+ NOVEMBER                @&t@
+ NOVEMBER                 @&t@
+ NOVEMBER                  @&t@
+ NOVEMBER                   @&t@
+ NOVEMBER                    @&t@
+ NOVEMBER                     @&t@
+ NOVEMBER                      @&t@
+ NOVEMBER                       @&t@
+ NOVEMBER                        @&t@
+ NOVEMBER                         @&t@
+ NOVEMBER                          @&t@
+ NOVEMBER                           @&t@
+ NOVEMBER                            @&t@
+ NOVEMBER                             @&t@
+ NOVEMBER                              @&t@
+ NOVEMBER                               @&t@
+ NOVEMBER                                @&t@
+ DEC
+ DECE
+ DECEM
+ DECEMB
+ DECEMBE
+ DECEMBER
+ DECEMBER @&t@
+ DECEMBER  @&t@
+ DECEMBER   @&t@
+ DECEMBER    @&t@
+ DECEMBER     @&t@
+ DECEMBER      @&t@
+ DECEMBER       @&t@
+ DECEMBER        @&t@
+ DECEMBER         @&t@
+ DECEMBER          @&t@
+ DECEMBER           @&t@
+ DECEMBER            @&t@
+ DECEMBER             @&t@
+ DECEMBER              @&t@
+ DECEMBER               @&t@
+ DECEMBER                @&t@
+ DECEMBER                 @&t@
+ DECEMBER                  @&t@
+ DECEMBER                   @&t@
+ DECEMBER                    @&t@
+ DECEMBER                     @&t@
+ DECEMBER                      @&t@
+ DECEMBER                       @&t@
+ DECEMBER                        @&t@
+ DECEMBER                         @&t@
+ DECEMBER                          @&t@
+ DECEMBER                           @&t@
+ DECEMBER                            @&t@
+ DECEMBER                             @&t@
+ DECEMBER                              @&t@
+ DECEMBER                               @&t@
+ DECEMBER                                @&t@
+   .
+    .
+     .
+      .
+       .
+        .
+         .
+          .
+           .
+            .
+             .
+              .
+               .
+                .
+                 .
+                  .
+                   .
+                    .
+                     .
+                      .
+                       .
+                        .
+                         .
+                          .
+                           .
+                            .
+                             .
+                              .
+                               .
+                                .
+                                 .
+                                  .
+                                   .
+                                    .
+                                     .
+                                      .
+                                       .
+                                        .
+])
+AT_CLEANUP
+
+AT_SETUP([WKDAY output])
+AT_DATA([wkday-out.sps], [dnl
+set mxwarns=10000000.
+set mxerrs=10000000.
+data list notable/x 1-10.
+begin data.
+
+0
+0.5
+0.9
+1
+2
+3
+4
+4.1
+4.5
+4.9
+5
+6
+7
+7.1
+7.5
+7.9
+8
+end data.
+do repeat format=wkday2 to wkday40.
+print outfile='wkday-out.out'/x(format).
+end repeat.
+execute.
+])
+AT_CHECK([pspp -O format=csv wkday-out.sps], [1], [stdout])
+AT_CHECK([sed '/^$/d' stdout | sort | uniq -c], [0], [dnl
+     39 error: Weekday number 0.000000 is not between 1 and 7.
+     39 error: Weekday number 0.500000 is not between 1 and 7.
+     39 error: Weekday number 0.900000 is not between 1 and 7.
+     39 error: Weekday number 8.000000 is not between 1 and 7.
+])
+AT_CHECK([cat wkday-out.out], [0], [dnl
+  .
+   .
+    .
+     .
+      .
+       .
+        .
+         .
+          .
+           .
+            .
+             .
+              .
+               .
+                .
+                 .
+                  .
+                   .
+                    .
+                     .
+                      .
+                       .
+                        .
+                         .
+                          .
+                           .
+                            .
+                             .
+                              .
+                               .
+                                .
+                                 .
+                                  .
+                                   .
+                                    .
+                                     .
+                                      .
+                                       .
+                                        .
+  .
+   .
+    .
+     .
+      .
+       .
+        .
+         .
+          .
+           .
+            .
+             .
+              .
+               .
+                .
+                 .
+                  .
+                   .
+                    .
+                     .
+                      .
+                       .
+                        .
+                         .
+                          .
+                           .
+                            .
+                             .
+                              .
+                               .
+                                .
+                                 .
+                                  .
+                                   .
+                                    .
+                                     .
+                                      .
+                                       .
+                                        .
+  .
+   .
+    .
+     .
+      .
+       .
+        .
+         .
+          .
+           .
+            .
+             .
+              .
+               .
+                .
+                 .
+                  .
+                   .
+                    .
+                     .
+                      .
+                       .
+                        .
+                         .
+                          .
+                           .
+                            .
+                             .
+                              .
+                               .
+                                .
+                                 .
+                                  .
+                                   .
+                                    .
+                                     .
+                                      .
+                                       .
+                                        .
+  .
+   .
+    .
+     .
+      .
+       .
+        .
+         .
+          .
+           .
+            .
+             .
+              .
+               .
+                .
+                 .
+                  .
+                   .
+                    .
+                     .
+                      .
+                       .
+                        .
+                         .
+                          .
+                           .
+                            .
+                             .
+                              .
+                               .
+                                .
+                                 .
+                                  .
+                                   .
+                                    .
+                                     .
+                                      .
+                                       .
+                                        .
+ SU
+ SUN
+ SUND
+ SUNDA
+ SUNDAY
+ SUNDAY @&t@
+ SUNDAY  @&t@
+ SUNDAY   @&t@
+ SUNDAY    @&t@
+ SUNDAY     @&t@
+ SUNDAY      @&t@
+ SUNDAY       @&t@
+ SUNDAY        @&t@
+ SUNDAY         @&t@
+ SUNDAY          @&t@
+ SUNDAY           @&t@
+ SUNDAY            @&t@
+ SUNDAY             @&t@
+ SUNDAY              @&t@
+ SUNDAY               @&t@
+ SUNDAY                @&t@
+ SUNDAY                 @&t@
+ SUNDAY                  @&t@
+ SUNDAY                   @&t@
+ SUNDAY                    @&t@
+ SUNDAY                     @&t@
+ SUNDAY                      @&t@
+ SUNDAY                       @&t@
+ SUNDAY                        @&t@
+ SUNDAY                         @&t@
+ SUNDAY                          @&t@
+ SUNDAY                           @&t@
+ SUNDAY                            @&t@
+ SUNDAY                             @&t@
+ SUNDAY                              @&t@
+ SUNDAY                               @&t@
+ SUNDAY                                @&t@
+ SUNDAY                                 @&t@
+ SUNDAY                                  @&t@
+ MO
+ MON
+ MOND
+ MONDA
+ MONDAY
+ MONDAY @&t@
+ MONDAY  @&t@
+ MONDAY   @&t@
+ MONDAY    @&t@
+ MONDAY     @&t@
+ MONDAY      @&t@
+ MONDAY       @&t@
+ MONDAY        @&t@
+ MONDAY         @&t@
+ MONDAY          @&t@
+ MONDAY           @&t@
+ MONDAY            @&t@
+ MONDAY             @&t@
+ MONDAY              @&t@
+ MONDAY               @&t@
+ MONDAY                @&t@
+ MONDAY                 @&t@
+ MONDAY                  @&t@
+ MONDAY                   @&t@
+ MONDAY                    @&t@
+ MONDAY                     @&t@
+ MONDAY                      @&t@
+ MONDAY                       @&t@
+ MONDAY                        @&t@
+ MONDAY                         @&t@
+ MONDAY                          @&t@
+ MONDAY                           @&t@
+ MONDAY                            @&t@
+ MONDAY                             @&t@
+ MONDAY                              @&t@
+ MONDAY                               @&t@
+ MONDAY                                @&t@
+ MONDAY                                 @&t@
+ MONDAY                                  @&t@
+ TU
+ TUE
+ TUES
+ TUESD
+ TUESDA
+ TUESDAY
+ TUESDAY @&t@
+ TUESDAY  @&t@
+ TUESDAY   @&t@
+ TUESDAY    @&t@
+ TUESDAY     @&t@
+ TUESDAY      @&t@
+ TUESDAY       @&t@
+ TUESDAY        @&t@
+ TUESDAY         @&t@
+ TUESDAY          @&t@
+ TUESDAY           @&t@
+ TUESDAY            @&t@
+ TUESDAY             @&t@
+ TUESDAY              @&t@
+ TUESDAY               @&t@
+ TUESDAY                @&t@
+ TUESDAY                 @&t@
+ TUESDAY                  @&t@
+ TUESDAY                   @&t@
+ TUESDAY                    @&t@
+ TUESDAY                     @&t@
+ TUESDAY                      @&t@
+ TUESDAY                       @&t@
+ TUESDAY                        @&t@
+ TUESDAY                         @&t@
+ TUESDAY                          @&t@
+ TUESDAY                           @&t@
+ TUESDAY                            @&t@
+ TUESDAY                             @&t@
+ TUESDAY                              @&t@
+ TUESDAY                               @&t@
+ TUESDAY                                @&t@
+ TUESDAY                                 @&t@
+ WE
+ WED
+ WEDN
+ WEDNE
+ WEDNES
+ WEDNESD
+ WEDNESDA
+ WEDNESDAY
+ WEDNESDAY @&t@
+ WEDNESDAY  @&t@
+ WEDNESDAY   @&t@
+ WEDNESDAY    @&t@
+ WEDNESDAY     @&t@
+ WEDNESDAY      @&t@
+ WEDNESDAY       @&t@
+ WEDNESDAY        @&t@
+ WEDNESDAY         @&t@
+ WEDNESDAY          @&t@
+ WEDNESDAY           @&t@
+ WEDNESDAY            @&t@
+ WEDNESDAY             @&t@
+ WEDNESDAY              @&t@
+ WEDNESDAY               @&t@
+ WEDNESDAY                @&t@
+ WEDNESDAY                 @&t@
+ WEDNESDAY                  @&t@
+ WEDNESDAY                   @&t@
+ WEDNESDAY                    @&t@
+ WEDNESDAY                     @&t@
+ WEDNESDAY                      @&t@
+ WEDNESDAY                       @&t@
+ WEDNESDAY                        @&t@
+ WEDNESDAY                         @&t@
+ WEDNESDAY                          @&t@
+ WEDNESDAY                           @&t@
+ WEDNESDAY                            @&t@
+ WEDNESDAY                             @&t@
+ WEDNESDAY                              @&t@
+ WEDNESDAY                               @&t@
+ WE
+ WED
+ WEDN
+ WEDNE
+ WEDNES
+ WEDNESD
+ WEDNESDA
+ WEDNESDAY
+ WEDNESDAY @&t@
+ WEDNESDAY  @&t@
+ WEDNESDAY   @&t@
+ WEDNESDAY    @&t@
+ WEDNESDAY     @&t@
+ WEDNESDAY      @&t@
+ WEDNESDAY       @&t@
+ WEDNESDAY        @&t@
+ WEDNESDAY         @&t@
+ WEDNESDAY          @&t@
+ WEDNESDAY           @&t@
+ WEDNESDAY            @&t@
+ WEDNESDAY             @&t@
+ WEDNESDAY              @&t@
+ WEDNESDAY               @&t@
+ WEDNESDAY                @&t@
+ WEDNESDAY                 @&t@
+ WEDNESDAY                  @&t@
+ WEDNESDAY                   @&t@
+ WEDNESDAY                    @&t@
+ WEDNESDAY                     @&t@
+ WEDNESDAY                      @&t@
+ WEDNESDAY                       @&t@
+ WEDNESDAY                        @&t@
+ WEDNESDAY                         @&t@
+ WEDNESDAY                          @&t@
+ WEDNESDAY                           @&t@
+ WEDNESDAY                            @&t@
+ WEDNESDAY                             @&t@
+ WEDNESDAY                              @&t@
+ WEDNESDAY                               @&t@
+ WE
+ WED
+ WEDN
+ WEDNE
+ WEDNES
+ WEDNESD
+ WEDNESDA
+ WEDNESDAY
+ WEDNESDAY @&t@
+ WEDNESDAY  @&t@
+ WEDNESDAY   @&t@
+ WEDNESDAY    @&t@
+ WEDNESDAY     @&t@
+ WEDNESDAY      @&t@
+ WEDNESDAY       @&t@
+ WEDNESDAY        @&t@
+ WEDNESDAY         @&t@
+ WEDNESDAY          @&t@
+ WEDNESDAY           @&t@
+ WEDNESDAY            @&t@
+ WEDNESDAY             @&t@
+ WEDNESDAY              @&t@
+ WEDNESDAY               @&t@
+ WEDNESDAY                @&t@
+ WEDNESDAY                 @&t@
+ WEDNESDAY                  @&t@
+ WEDNESDAY                   @&t@
+ WEDNESDAY                    @&t@
+ WEDNESDAY                     @&t@
+ WEDNESDAY                      @&t@
+ WEDNESDAY                       @&t@
+ WEDNESDAY                        @&t@
+ WEDNESDAY                         @&t@
+ WEDNESDAY                          @&t@
+ WEDNESDAY                           @&t@
+ WEDNESDAY                            @&t@
+ WEDNESDAY                             @&t@
+ WEDNESDAY                              @&t@
+ WEDNESDAY                               @&t@
+ WE
+ WED
+ WEDN
+ WEDNE
+ WEDNES
+ WEDNESD
+ WEDNESDA
+ WEDNESDAY
+ WEDNESDAY @&t@
+ WEDNESDAY  @&t@
+ WEDNESDAY   @&t@
+ WEDNESDAY    @&t@
+ WEDNESDAY     @&t@
+ WEDNESDAY      @&t@
+ WEDNESDAY       @&t@
+ WEDNESDAY        @&t@
+ WEDNESDAY         @&t@
+ WEDNESDAY          @&t@
+ WEDNESDAY           @&t@
+ WEDNESDAY            @&t@
+ WEDNESDAY             @&t@
+ WEDNESDAY              @&t@
+ WEDNESDAY               @&t@
+ WEDNESDAY                @&t@
+ WEDNESDAY                 @&t@
+ WEDNESDAY                  @&t@
+ WEDNESDAY                   @&t@
+ WEDNESDAY                    @&t@
+ WEDNESDAY                     @&t@
+ WEDNESDAY                      @&t@
+ WEDNESDAY                       @&t@
+ WEDNESDAY                        @&t@
+ WEDNESDAY                         @&t@
+ WEDNESDAY                          @&t@
+ WEDNESDAY                           @&t@
+ WEDNESDAY                            @&t@
+ WEDNESDAY                             @&t@
+ WEDNESDAY                              @&t@
+ WEDNESDAY                               @&t@
+ TH
+ THU
+ THUR
+ THURS
+ THURSD
+ THURSDA
+ THURSDAY
+ THURSDAY @&t@
+ THURSDAY  @&t@
+ THURSDAY   @&t@
+ THURSDAY    @&t@
+ THURSDAY     @&t@
+ THURSDAY      @&t@
+ THURSDAY       @&t@
+ THURSDAY        @&t@
+ THURSDAY         @&t@
+ THURSDAY          @&t@
+ THURSDAY           @&t@
+ THURSDAY            @&t@
+ THURSDAY             @&t@
+ THURSDAY              @&t@
+ THURSDAY               @&t@
+ THURSDAY                @&t@
+ THURSDAY                 @&t@
+ THURSDAY                  @&t@
+ THURSDAY                   @&t@
+ THURSDAY                    @&t@
+ THURSDAY                     @&t@
+ THURSDAY                      @&t@
+ THURSDAY                       @&t@
+ THURSDAY                        @&t@
+ THURSDAY                         @&t@
+ THURSDAY                          @&t@
+ THURSDAY                           @&t@
+ THURSDAY                            @&t@
+ THURSDAY                             @&t@
+ THURSDAY                              @&t@
+ THURSDAY                               @&t@
+ THURSDAY                                @&t@
+ FR
+ FRI
+ FRID
+ FRIDA
+ FRIDAY
+ FRIDAY @&t@
+ FRIDAY  @&t@
+ FRIDAY   @&t@
+ FRIDAY    @&t@
+ FRIDAY     @&t@
+ FRIDAY      @&t@
+ FRIDAY       @&t@
+ FRIDAY        @&t@
+ FRIDAY         @&t@
+ FRIDAY          @&t@
+ FRIDAY           @&t@
+ FRIDAY            @&t@
+ FRIDAY             @&t@
+ FRIDAY              @&t@
+ FRIDAY               @&t@
+ FRIDAY                @&t@
+ FRIDAY                 @&t@
+ FRIDAY                  @&t@
+ FRIDAY                   @&t@
+ FRIDAY                    @&t@
+ FRIDAY                     @&t@
+ FRIDAY                      @&t@
+ FRIDAY                       @&t@
+ FRIDAY                        @&t@
+ FRIDAY                         @&t@
+ FRIDAY                          @&t@
+ FRIDAY                           @&t@
+ FRIDAY                            @&t@
+ FRIDAY                             @&t@
+ FRIDAY                              @&t@
+ FRIDAY                               @&t@
+ FRIDAY                                @&t@
+ FRIDAY                                 @&t@
+ FRIDAY                                  @&t@
+ SA
+ SAT
+ SATU
+ SATUR
+ SATURD
+ SATURDA
+ SATURDAY
+ SATURDAY @&t@
+ SATURDAY  @&t@
+ SATURDAY   @&t@
+ SATURDAY    @&t@
+ SATURDAY     @&t@
+ SATURDAY      @&t@
+ SATURDAY       @&t@
+ SATURDAY        @&t@
+ SATURDAY         @&t@
+ SATURDAY          @&t@
+ SATURDAY           @&t@
+ SATURDAY            @&t@
+ SATURDAY             @&t@
+ SATURDAY              @&t@
+ SATURDAY               @&t@
+ SATURDAY                @&t@
+ SATURDAY                 @&t@
+ SATURDAY                  @&t@
+ SATURDAY                   @&t@
+ SATURDAY                    @&t@
+ SATURDAY                     @&t@
+ SATURDAY                      @&t@
+ SATURDAY                       @&t@
+ SATURDAY                        @&t@
+ SATURDAY                         @&t@
+ SATURDAY                          @&t@
+ SATURDAY                           @&t@
+ SATURDAY                            @&t@
+ SATURDAY                             @&t@
+ SATURDAY                              @&t@
+ SATURDAY                               @&t@
+ SATURDAY                                @&t@
+ SA
+ SAT
+ SATU
+ SATUR
+ SATURD
+ SATURDA
+ SATURDAY
+ SATURDAY @&t@
+ SATURDAY  @&t@
+ SATURDAY   @&t@
+ SATURDAY    @&t@
+ SATURDAY     @&t@
+ SATURDAY      @&t@
+ SATURDAY       @&t@
+ SATURDAY        @&t@
+ SATURDAY         @&t@
+ SATURDAY          @&t@
+ SATURDAY           @&t@
+ SATURDAY            @&t@
+ SATURDAY             @&t@
+ SATURDAY              @&t@
+ SATURDAY               @&t@
+ SATURDAY                @&t@
+ SATURDAY                 @&t@
+ SATURDAY                  @&t@
+ SATURDAY                   @&t@
+ SATURDAY                    @&t@
+ SATURDAY                     @&t@
+ SATURDAY                      @&t@
+ SATURDAY                       @&t@
+ SATURDAY                        @&t@
+ SATURDAY                         @&t@
+ SATURDAY                          @&t@
+ SATURDAY                           @&t@
+ SATURDAY                            @&t@
+ SATURDAY                             @&t@
+ SATURDAY                              @&t@
+ SATURDAY                               @&t@
+ SATURDAY                                @&t@
+ SA
+ SAT
+ SATU
+ SATUR
+ SATURD
+ SATURDA
+ SATURDAY
+ SATURDAY @&t@
+ SATURDAY  @&t@
+ SATURDAY   @&t@
+ SATURDAY    @&t@
+ SATURDAY     @&t@
+ SATURDAY      @&t@
+ SATURDAY       @&t@
+ SATURDAY        @&t@
+ SATURDAY         @&t@
+ SATURDAY          @&t@
+ SATURDAY           @&t@
+ SATURDAY            @&t@
+ SATURDAY             @&t@
+ SATURDAY              @&t@
+ SATURDAY               @&t@
+ SATURDAY                @&t@
+ SATURDAY                 @&t@
+ SATURDAY                  @&t@
+ SATURDAY                   @&t@
+ SATURDAY                    @&t@
+ SATURDAY                     @&t@
+ SATURDAY                      @&t@
+ SATURDAY                       @&t@
+ SATURDAY                        @&t@
+ SATURDAY                         @&t@
+ SATURDAY                          @&t@
+ SATURDAY                           @&t@
+ SATURDAY                            @&t@
+ SATURDAY                             @&t@
+ SATURDAY                              @&t@
+ SATURDAY                               @&t@
+ SATURDAY                                @&t@
+ SA
+ SAT
+ SATU
+ SATUR
+ SATURD
+ SATURDA
+ SATURDAY
+ SATURDAY @&t@
+ SATURDAY  @&t@
+ SATURDAY   @&t@
+ SATURDAY    @&t@
+ SATURDAY     @&t@
+ SATURDAY      @&t@
+ SATURDAY       @&t@
+ SATURDAY        @&t@
+ SATURDAY         @&t@
+ SATURDAY          @&t@
+ SATURDAY           @&t@
+ SATURDAY            @&t@
+ SATURDAY             @&t@
+ SATURDAY              @&t@
+ SATURDAY               @&t@
+ SATURDAY                @&t@
+ SATURDAY                 @&t@
+ SATURDAY                  @&t@
+ SATURDAY                   @&t@
+ SATURDAY                    @&t@
+ SATURDAY                     @&t@
+ SATURDAY                      @&t@
+ SATURDAY                       @&t@
+ SATURDAY                        @&t@
+ SATURDAY                         @&t@
+ SATURDAY                          @&t@
+ SATURDAY                           @&t@
+ SATURDAY                            @&t@
+ SATURDAY                             @&t@
+ SATURDAY                              @&t@
+ SATURDAY                               @&t@
+ SATURDAY                                @&t@
+  .
+   .
+    .
+     .
+      .
+       .
+        .
+         .
+          .
+           .
+            .
+             .
+              .
+               .
+                .
+                 .
+                  .
+                   .
+                    .
+                     .
+                      .
+                       .
+                        .
+                         .
+                          .
+                           .
+                            .
+                             .
+                              .
+                               .
+                                .
+                                 .
+                                  .
+                                   .
+                                    .
+                                     .
+                                      .
+                                       .
+                                        .
+])
+AT_CLEANUP
diff --git a/tests/data/datasheet-test.at b/tests/data/datasheet-test.at
new file mode 100644 (file)
index 0000000..06f4ae5
--- /dev/null
@@ -0,0 +1,16 @@
+AT_BANNER([datasheet])
+
+m4_define([DATASHEET_TEST],
+  [AT_SETUP([$1x$2, $3 backing rows, backing widths $4])
+   AT_KEYWORDS([datasheet])
+   AT_CHECK(
+     [datasheet-test$EXEEXT --verbosity=0 --max-rows=$1 --max-columns=$2 \
+                           --backing-rows=$3 --backing-widths=$4],
+     [0], [ignore], [ignore])
+   AT_CLEANUP])
+
+DATASHEET_TEST([3], [3], [0], [])
+DATASHEET_TEST([3], [3], [3], [0,0,0])
+DATASHEET_TEST([3], [3], [3], [0])
+DATASHEET_TEST([3], [3], [3], [5])
+DATASHEET_TEST([3], [3], [1], [0,9,0])
diff --git a/tests/data/datasheet-test.sh b/tests/data/datasheet-test.sh
deleted file mode 100755 (executable)
index 41630b1..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-
-# This program tests the datasheet implementation.
-
-set -e
-
-: ${top_builddir:=.}
-RUN_TEST="${top_builddir}/tests/data/datasheet-test$EXEEXT --verbosity=0"
-
-$RUN_TEST --max-rows=3 --max-columns=3 --backing-rows=0 --backing-widths=
-$RUN_TEST --max-rows=3 --max-columns=3 --backing-rows=3 --backing-widths=0,0,0
-$RUN_TEST --max-rows=3 --max-columns=3 --backing-rows=3 --backing-widths=0
-$RUN_TEST --max-rows=3 --max-columns=3 --backing-rows=3 --backing-widths=5
-$RUN_TEST --max-rows=3 --max-columns=3 --backing-rows=1 --backing-widths=0,9,0
diff --git a/tests/data/format-guesser.at b/tests/data/format-guesser.at
new file mode 100644 (file)
index 0000000..764d0f1
--- /dev/null
@@ -0,0 +1,137 @@
+AT_BANNER([format guesser])
+
+AT_SETUP([format guesser])
+AT_DATA([format-guesser.txt], [dnl
+# No data.
+=> F8.2
+"" => F8.2
+"." => F8.2
+
+# Numeric formats.
+"1.2" => F3.1
+"$1.2" => DOLLAR4.1
+"1.2%" => PCT4.1
+"$1.2%" => A5
+"1e5" => E3.0
+"1e+5" => E4.0
+"1+5" => E3.0
+"1-5" => E3.0
+"1.2e5" => E5.1
+"1.3e+5" => E6.1
+"1.4+5" => E5.1
+"1e" => A2
+"1e+" => A3
+"1+" => A2
+"1-" => A2
+"1.5-5" => E5.1
+"1,123" => COMMA5.0         # Is , is grouping or decimal? Assume grouping.
+"1.123" => F5.3                    # Ditto.
+"1,12" => F4.2             # Not a group of 3, so last delim must be decimal.
+"1.12" => F4.2             # Ditto.
+"1,1234" => F6.4           # Not a group of 3, so last delim must be decimal.
+"1.1234" => F6.4           # Ditto.
+"$1.234" => DOLLAR6.3       # Dollar sign means decimal has to be '.'.
+"$1,234" => DOLLAR6.0       # Ditto.
+"1.234%" => PCT6.3          # Percent sign means decimal has to be '.'.
+"1,234%" => PCT6.0          # Ditto.
+"1,123.456" => COMMA9.3            # Both '.' and ',', so last delim must be decimal.
+"1.123,456" => DOT9.3      # Ditto.
+"1,123,456.45" => COMMA12.2 # Ditto.
+"1.123.456,45" => DOT12.2   # Ditto.
+"1,123,456" => COMMA9.0            # Ditto.
+"1.123.456" => DOT9.0      # Ditto.
+
+# Date and time formats.
+"01-OCT-1978" => DATE11
+"01-x-1978" => EDATE9          # Roman numeral for month.
+"01-13-99" => ADATE8
+"1-13-99" => ADATE7 (ADATE8)
+"13-01-99" => EDATE8
+"13-1-99" => EDATE7 (EDATE8)
+"32-1-1" => SDATE6 (SDATE8)
+"1q01" => QYR4
+"1Q01" => QYR4
+"1 q 01" => QYR6
+"1 Q 01" => QYR6
+"1q2001" => QYR6
+"1Q2001" => QYR6
+"1 q 2001" => QYR8
+"1 Q 2001" => QYR8
+"oct 05" => MOYR6
+"oct 2005" => MOYR8
+"1-1-01 1:2" => A10            # Minute needs at least two digits.
+"1-1-01 1:02" => DATETIME11.0 (DATETIME17.0)
+"1-1-01 1:02:3" => A13         # Second needs at least two digits.
+"1-1-01 1:02:03" => DATETIME20.0
+"1-1-01 1:02:03.1" => DATETIME20.1 (DATETIME22.1)
+"1-1-01 +1:02:03.1" => DATETIME20.1 (DATETIME22.1)
+"1-1-01 -1:02:03.1" => DATETIME20.1 (DATETIME22.1)
+"1:30" => TIME4.0 (TIME5.0)
+"1:30:05" => TIME8.0
+"-1:30" => TIME5.0
+"+1:30" => TIME5.0
+"-1:30:15" => TIME8.0
+"+1:30:15" => TIME8.0
+"-1:30:15.5" => TIME10.1
+"+1:30:15.75" => TIME11.2
+"1 1:30" => DTIME6.0 (DTIME8.0)
+"+1 1:30" => DTIME7.0 (DTIME8.0)
+"-1 1:30" => DTIME7.0 (DTIME8.0)
+"-1-13-99" => A8
+"+1-13-99" => A8
+"1+13+99" => A7
+"1:00:01.03" => TIME10.2 (TIME11.2)
+"12 1:00:01.3" => DTIME12.1 (DTIME13.1)
+"jan" => MONTH3
+"Feb" => MONTH3
+"MAR" => MONTH3
+"i" => A1                      # Not detected as MONTH format.
+"v" => A1
+"ix" => A2
+"x" => A1
+"january" => MONTH7
+"janaury" => MONTH7            # Only first three letters are significant.
+"february" => MONTH8
+"febraury" => MONTH8
+"march" => MONTH5
+"marhc" => MONTH5
+"april" => MONTH5
+"may" => MONTH3
+"june" => MONTH4
+"july" => MONTH4
+"august" => MONTH6
+"september" => MONTH9
+"october" => MONTH7
+"november" => MONTH8
+"decmeber" => MONTH8
+"december" => MONTH8
+"monady" => WKDAY6
+"tuseday" => WKDAY7
+"wedensday" => WKDAY9
+"thurdsay" => WKDAY8
+"fridya" => WKDAY6
+"saturady" => WKDAY8
+"sudnay" => WKDAY6
+
+# Ambiguous; bias in favor of more sensible DD/MM/YY format:
+"1/1/1978" => EDATE8
+"01/01/01" => EDATE8
+
+# Several ambiguous dates can be clarified by one unambiguous example:
+"1/1/1978" "1/2/1978" "1/3/1978" "1/13/1978" => ADATE9 # MM/DD/YY
+"01/01/01" "02/01/01" "03/01/01" "13/01/01" => EDATE8  # DD/MM/YY
+"01/01/01" "02/01/01" "03/01/01" "2013/01/01" => SDATE10 # YY/MM/DD
+])
+AT_CHECK([[(echo "SET DECIMAL=DOT."
+           sed -e 's/#.*//
+s/[    ]*$//
+/^$/d
+s,^\(.*\)=> \(.*\)$,DEBUG FORMAT GUESSER \1.,') \
+           < format-guesser.txt > format-guesser.sps]])
+AT_CHECK([pspp --testing-mode -O format=csv format-guesser.sps],
+  [0], [], [stderr])
+AT_CHECK([[sed -e 's/#.*//
+s/[    ]*$//
+/^$/d' < format-guesser.txt > expout]])
+AT_CHECK([cat stderr], [0], [expout])
+AT_CLEANUP
diff --git a/tests/data/inexactify.c b/tests/data/inexactify.c
new file mode 100644 (file)
index 0000000..3b94d15
--- /dev/null
@@ -0,0 +1,64 @@
+/* PSPP - a program for statistical analysis.
+   Copyright (C) 2006, 2010 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
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Replaces insignificant digits by # to facilitate textual
+   comparisons.  Not a perfect solution to the general-purpose
+   comparison problem, because rounding that affects earlier
+   digits can still cause differences. */
+int
+main (void)
+{
+  bool in_quotes = false;
+  bool in_exponent = false;
+  int digits = 0;
+
+  for (;;)
+    {
+      int c = getchar ();
+      if (c == EOF)
+        break;
+      else if (c == '\n')
+        in_quotes = false;
+      else if (c == '"')
+        {
+          in_quotes = !in_quotes;
+          in_exponent = false;
+          digits = 0;
+        }
+      else if (in_quotes && !in_exponent)
+        {
+          if (strchr ("+dDeE", c) != NULL || (c == '-' && digits))
+            in_exponent = true;
+          else if (strchr ("0123456789}JKLMNOPQR", c) != NULL)
+            {
+              if (digits || c >= '1')
+                digits++;
+              if (digits > 13)
+                c = isdigit (c) ? '#' : '@';
+            }
+        }
+      putchar (c);
+    }
+  return EXIT_SUCCESS;
+}
diff --git a/tests/data/legacy-in.expected.cmp.gz b/tests/data/legacy-in.expected.cmp.gz
new file mode 100644 (file)
index 0000000..952f9b5
Binary files /dev/null and b/tests/data/legacy-in.expected.cmp.gz differ
diff --git a/tests/data/num-in.expected.gz b/tests/data/num-in.expected.gz
new file mode 100644 (file)
index 0000000..40a617d
Binary files /dev/null and b/tests/data/num-in.expected.gz differ
diff --git a/tests/data/num-out-cmp.pl b/tests/data/num-out-cmp.pl
new file mode 100644 (file)
index 0000000..8e83f50
--- /dev/null
@@ -0,0 +1,74 @@
+use strict;
+use warnings 'all';
+
+my (@prev) = ();
+our ($n) = 0;
+our ($suffix) = '';
+our ($prefix) = '';
+while (<>) {
+    s/^ //;
+    if (scalar (my (@line) = /^([A-Z]+)(\d+)([^"]+")( *)([^%"]*)(%?")$/) == 6) {
+       if (defined ($prev[0])
+           && $line[0] eq $prev[0]
+           && $line[1] == $prev[1] + 1
+           && $line[2] eq $prev[2]
+           && $line[5] eq $prev[5]) {
+           if ($line[3] eq " $prev[3]"
+               && $line[4] eq $prev[4]) {
+               flush_prefix ();
+               flush_suffix ();
+               $n++;
+           } elsif ($line[3] eq $prev[3]
+                    && length ($line[4]) == length ($prev[4]) + 1
+                    && $prev[4] eq substr ($line[4], 0, length ($line[4]) - 1)) {
+               flush_n ();
+               flush_prefix ();
+               $suffix .= substr ($line[4], -1);
+           } elsif ($line[3] eq $prev[3]
+                    && $prev[4] eq substr ($line[4], 1)) {
+               flush_n ();
+               flush_suffix ();
+               $prefix .= substr ($line[4], 0, 1);
+           } else {
+               flush ();
+               print $_;
+           }
+       } else {
+           flush ();
+           print $_;
+       }
+       @prev = @line;
+    } else {
+       flush ();
+       print $_;
+       @prev = ();
+    }
+}
+flush ();
+
+sub flush_suffix {
+    if ($suffix ne '') {
+       print "\$$suffix\n";
+       $suffix = '';
+    }
+}
+
+sub flush_prefix {
+    if ($prefix ne '') {
+       print "^$prefix\n";
+       $prefix = '';
+    }
+}
+
+sub flush_n {
+    if ($n) {
+       print "*$n\n";
+       $n = 0;
+    }
+}
+
+sub flush {
+    flush_prefix ();
+    flush_suffix ();
+    flush_n ();
+}
diff --git a/tests/data/num-out.expected.cmp.gz b/tests/data/num-out.expected.cmp.gz
new file mode 100644 (file)
index 0000000..21caf25
Binary files /dev/null and b/tests/data/num-out.expected.cmp.gz differ
diff --git a/tests/data/por-file.at b/tests/data/por-file.at
new file mode 100644 (file)
index 0000000..e3ddab4
--- /dev/null
@@ -0,0 +1,65 @@
+AT_BANNER([portable files])
+
+AT_SETUP([overwriting portable file])
+AT_DATA([output.por], [abcdef
+])
+cp output.por output.por.backup
+AT_DATA([porfile.sps], [dnl
+DATA LIST NOTABLE/x 1.
+BEGIN DATA.
+5
+END DATA.
+EXPORT OUTFILE='output.por'.
+])
+AT_CHECK([pspp -O format=csv porfile.sps])
+AT_CHECK([cmp output.por output.por.backup], [1], [ignore])
+AT_CLEANUP
+
+AT_SETUP([overwriting portable file atomically])
+AT_DATA([output.por], [abcdef
+])
+cp output.por output.por.backup
+AT_DATA([porfile.sps],
+[[DATA LIST NOTABLE/x 1.
+BEGIN DATA.
+5
+END DATA.
+XEXPORT OUTFILE='output.por'.
+HOST COMMAND=['kill -TERM $PPID'].
+]])
+AT_CHECK([pspp -O format=csv porfile.sps], [143], [], [ignore])
+AT_CHECK([cmp output.por output.por.backup])
+AT_CHECK(
+  [for file in *.tmp*; do if test -e $file; then echo $file; exit 1; fi; done])
+AT_CLEANUP
+
+AT_SETUP([write to same portable file being read])
+AT_DATA([export.sps], [dnl
+DATA LIST NOTABLE/x 1.
+BEGIN DATA.
+2
+END DATA.
+EXPORT OUTFILE='data.por'.
+])
+AT_CHECK([pspp -O format=csv export.sps])
+AT_CHECK([test -s data.por])
+AT_CHECK(
+  [for file in *.tmp*; do if test -e $file; then echo $file; exit 1; fi; done])
+AT_DATA([export2.sps], [dnl
+IMPORT FILE='data.por'.
+COMPUTE y = x * 2.
+EXPORT OUTFILE='data.por'.
+])
+AT_CHECK([pspp -O format=csv export2.sps])
+AT_CHECK(
+  [for file in *.tmp*; do if test -e $file; then echo $file; exit 1; fi; done])
+AT_DATA([export3.sps], [dnl
+IMPORT FILE='data.por'.
+LIST.
+])
+AT_CHECK([pspp -O format=csv export3.sps], [0], [dnl
+Table: Data List
+X,Y
+2,4.00
+])
+AT_CLEANUP
diff --git a/tests/data/sys-file.at b/tests/data/sys-file.at
new file mode 100644 (file)
index 0000000..721578e
--- /dev/null
@@ -0,0 +1,382 @@
+AT_BANNER([system files])
+
+# Also tests that long variable names are preserved by SAVE and GET.
+AT_SETUP([write and read numeric data])
+AT_KEYWORDS([SAVE GET system file])
+AT_DATA([sysfile.sps], [dnl
+DATA LIST LIST NOTABLE / variable001 * variable002 * variable003 * variable004 * .
+BEGIN DATA.
+    1.00     1.00    1.0     2.00
+    1.00     1.00    2.0    30.00
+    1.00     2.00    1.0     8.00
+    1.00     2.00    2.0    20.00
+    2.00     1.00    1.0     2.00
+    2.00     1.00    2.0    22.00
+    2.00     2.00    1.0     1.00
+    2.00     2.00    2.0     3.00
+END DATA.
+
+SAVE /OUTFILE='foo.sav'.
+
+GET /FILE='foo.sav'.
+
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv sysfile.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+variable001,variable002,variable003,variable004
+1.00,1.00,1.00,2.00
+1.00,1.00,2.00,30.00
+1.00,2.00,1.00,8.00
+1.00,2.00,2.00,20.00
+2.00,1.00,1.00,2.00
+2.00,1.00,2.00,22.00
+2.00,2.00,1.00,1.00
+2.00,2.00,2.00,3.00
+])
+AT_CLEANUP
+
+AT_SETUP([write and read compressed files])
+AT_KEYWORDS([SAVE GET system file])
+AT_DATA([sysfile.sps], [dnl
+DATA LIST LIST NOTABLE /x * y (a200).
+BEGIN DATA.
+1.2 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+.   yyyyyyyyyyyyyyy
+0   ddddddddddddddddddddddddddddddd
+101 z
+END DATA.
+
+SAVE OUTFILE='com.sav' /COMPRESS .
+
+GET FILE='com.sav'.
+
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv sysfile.sps])
+dnl Make sure file really was compressd.
+AT_CHECK([dd if=com.sav bs=1 skip=72 count=4 2> /dev/null | od | sed '1q' > com.txt])
+dnl Allow big- or little-endian format.
+AT_CHECK(
+  [(echo '0000000 000000 000001' | diff com.txt -) ||
+   (echo '0000000 000001 000000' | diff com.txt -)], [0],
+  [ignore])
+AT_CAPTURE_FILE([com.txt])
+AT_CLEANUP
+
+AT_SETUP([overwriting system file])
+AT_DATA([output.sav], [abcdef
+])
+cp output.sav output.sav.backup
+AT_DATA([sysfile.sps], [dnl
+DATA LIST NOTABLE/x 1.
+BEGIN DATA.
+5
+END DATA.
+SAVE OUTFILE='output.sav'.
+])
+AT_CHECK([pspp -O format=csv sysfile.sps])
+AT_CHECK([cmp output.sav output.sav.backup], [1], [ignore])
+AT_CLEANUP
+
+AT_SETUP([overwriting system file atomically])
+AT_DATA([output.sav], [abcdef
+])
+cp output.sav output.sav.backup
+AT_DATA([sysfile.sps],
+[[DATA LIST NOTABLE/x 1.
+BEGIN DATA.
+5
+END DATA.
+XSAVE OUTFILE='output.sav'.
+HOST COMMAND=['kill -TERM $PPID'].
+]])
+AT_CHECK([pspp -O format=csv sysfile.sps], [143], [], [ignore])
+AT_CHECK([cmp output.sav output.sav.backup])
+AT_CHECK(
+  [for file in *.tmp*; do if test -e $file; then echo $file; exit 1; fi; done])
+AT_CLEANUP
+
+
+AT_SETUP([write to same system file being read])
+AT_DATA([save.sps], [dnl
+DATA LIST NOTABLE/x 1.
+BEGIN DATA.
+3
+END DATA.
+SAVE OUTFILE='data.sav'.
+])
+AT_CHECK([pspp -O format=csv save.sps])
+AT_CHECK([test -s data.sav])
+AT_CHECK(
+  [for file in *.tmp*; do if test -e $file; then echo $file; exit 1; fi; done])
+AT_DATA([save2.sps], [dnl
+GET FILE='data.sav'.
+COMPUTE y = x * 3.
+SAVE OUTFILE='data.sav'.
+])
+AT_CHECK([pspp -O format=csv save2.sps])
+AT_CHECK(
+  [for file in *.tmp*; do if test -e $file; then echo $file; exit 1; fi; done])
+AT_DATA([save3.sps], [dnl
+GET FILE='data.sav'.
+LIST.
+])
+AT_CHECK([pspp -O format=csv save3.sps], [0], [dnl
+Table: Data List
+x,y
+3,9.00
+])
+AT_CLEANUP
+
+AT_SETUP([nonempty case_map doesn't crash])
+AT_KEYWORDS([SAVE system file])
+AT_DATA([save.sps], [dnl
+INPUT PROGRAM.
+    COMPUTE #I = 1.
+    COMPUTE X = #I + 1.
+    END CASE.
+    END FILE.
+END INPUT PROGRAM.
+
+SAVE OUTFILE='tiny.sav'.
+])
+AT_CHECK([pspp -O format=csv save.sps])
+AT_DATA([get.sps], [dnl
+GET FILE='tiny.sav'.
+LIST.
+])
+AT_CHECK([pspp -O format=csv get.sps], [0], [dnl
+Table: Data List
+X
+2.00
+])
+AT_CLEANUP
+
+# Test that system files can be read properly, even when the case_size
+# header value is -1 (Some 3rd party products do this).
+AT_SETUP([system files with -1 case_size])
+AT_KEYWORDS([SAVE GET])
+AT_DATA([save.sps], [dnl
+DATA LIST LIST NOTABLE /cont (A32) size pop count.
+VAR LABEL
+    cont 'continents of the world'
+    size 'sq km'
+    pop 'population'
+    count 'number of countries'.
+SAVE OUTFILE='cont.sav'.
+BEGIN DATA.
+Asia, 44579000, 3.7E+009, 44.00
+Africa, 30065000, 7.8E+008, 53.00
+"North America", 24256000, 4.8E+008, 23.00
+"South America", 17819000, 3.4E+008, 12.00
+Antarctica, 13209000, .00, .00
+Europe, 9938000, 7.3E+008, 46.00
+Australia/Oceania, 7687000, 31000000, 14.00
+END DATA.
+])
+AT_CHECK([pspp -O format=csv save.sps])
+AT_CHECK([test -f cont.sav])
+
+dnl case_size is a 4-byte field at offset 68.
+dnl Make a new copy with its value changed to -1.
+AT_CHECK(
+  [(dd if=cont.sav bs=1 count=68;
+    printf '\377\377\377\377';
+    dd if=cont.sav bs=1 skip=72) > cont2.sav], [0], [], [ignore])
+AT_CHECK([cmp cont.sav cont2.sav], [1],
+  [cont.sav cont2.sav differ: char 69, line 1
+])
+
+AT_DATA([get.sps], [dnl
+GET FILE='cont2.sav'.
+DISPLAY LABELS.
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv get.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Variable,Label,,Position
+cont,continents of the world,,1
+size,sq km,,2
+pop,population,,3
+count,number of countries,,4
+
+Table: Data List
+cont,size,pop,count
+Asia                            ,44579000,3.7E+009,44.00
+Africa                          ,30065000,7.8E+008,53.00
+North America                   ,24256000,4.8E+008,23.00
+South America                   ,17819000,3.4E+008,12.00
+Antarctica                      ,13209000,.00,.00
+Europe                          ,9938000,7.3E+008,46.00
+Australia/Oceania               ,7687000,31000000,14.00
+])
+AT_CLEANUP
+
+AT_SETUP([write v2 system file])
+AT_KEYWORDS([SAVE])
+AT_DATA([sysfile.sps], [dnl
+DATA LIST LIST NOTABLE / X * variable001 * variable002 * variable003 * .
+BEGIN DATA.
+    1.00     1.00    1.0     2.00
+    1.00     1.00    2.0    30.00
+    1.00     2.00    1.0     8.00
+    1.00     2.00    2.0    20.00
+    2.00     1.00    1.0     2.00
+    2.00     1.00    2.0    22.00
+    2.00     2.00    1.0     1.00
+    2.00     2.00    2.0     3.00
+END DATA.
+
+SAVE /OUTFILE='foo.sav'
+     /VERSION=2
+     .
+
+GET /FILE='foo.sav'.
+
+LIST.
+])
+AT_CHECK([pspp -O format=csv sysfile.sps], [0], [dnl
+Table: Data List
+x,variable,variab_a,variab_b
+1.00,1.00,1.00,2.00
+1.00,1.00,2.00,30.00
+1.00,2.00,1.00,8.00
+1.00,2.00,2.00,20.00
+2.00,1.00,1.00,2.00
+2.00,1.00,2.00,22.00
+2.00,2.00,1.00,1.00
+2.00,2.00,2.00,3.00
+])
+dnl Ensure that the written file has no long name table
+AT_CHECK([grep 'X=X' foo.sav], [1], [ignore-nolog])
+AT_CLEANUP
+\f
+AT_BANNER([system files -- very long strings])
+
+AT_SETUP([read very long strings written by SPSS 13])
+AT_CHECK([cp $top_srcdir/tests/data/v13.sav .])
+AT_DATA([sys-file.sps], [dnl
+GET FILE='v13.sav'.
+DISPLAY VARIABLES.
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv sys-file.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Variable,Description,,Position
+N,Format: F8.2,,1
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 10,,
+A255,Format: A255,,2
+,Measure: Nominal,,
+,Display Alignment: Left,,
+,Display Width: 32,,
+A258,Format: A258,,3
+,Measure: Nominal,,
+,Display Alignment: Left,,
+,Display Width: 32,,
+A2000,Format: A2000,,4
+,Measure: Nominal,,
+,Display Alignment: Left,,
+,Display Width: 32,,
+
+Table: Data List
+N,A255,A258,A2000
+1.00,a1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA,b1BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB,c1CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
+2.00,a2XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,b2YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY,c2ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
+])
+AT_CLEANUP
+
+AT_SETUP([read very long strings written by SPSS 14])
+AT_CHECK([cp $top_srcdir/tests/data/v14.sav .])
+AT_DATA([sys-file.sps], [dnl
+GET FILE='v14.sav'.
+DISPLAY VARIABLES.
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv sys-file.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Variable,Description,,Position
+vl255,Format: A255,,1
+,Measure: Nominal,,
+,Display Alignment: Left,,
+,Display Width: 26,,
+vl256,Format: A256,,2
+,Measure: Nominal,,
+,Display Alignment: Left,,
+,Display Width: 26,,
+vl1335,Format: A1335,,3
+,Measure: Nominal,,
+,Display Alignment: Left,,
+,Display Width: 26,,
+vl2000,Format: A2000,,4
+,Measure: Nominal,,
+,Display Alignment: Left,,
+,Display Width: 26,,
+
+Table: Data List
+vl255,vl256,vl1335,vl2000
+MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM,MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM,MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM,MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
+])
+AT_CLEANUP
+
+m4_divert_push([PREPARE_TESTS])
+vls_gen_data () {
+cat > data.txt <<EOF
+ 1xxxxxxxx2aXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXbcYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYdeZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZf
+ 1xxxxxxxx2aXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXbcYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYdeZZMaryHadAlittleLambZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZf
+EOF
+}
+m4_divert_pop([PREPARE_TESTS])
+
+m4_define([VLS_WRITE],
+  [AT_SETUP([save very long string -- m4_tolower([$1])])
+   vls_gen_data
+   AT_DATA([save.sps], [dnl
+DATA LIST FIXED NOTABLE FILE='data.txt'
+    /a 2-11 (a) 
+     b (a256) 
+     c (a200) 
+     d (a32767).
+
+SAVE OUTFILE='foo.sav' /$1.
+])
+   AT_CHECK([pspp -O format=csv save.sps])
+   AT_DATA([get.sps], [dnl
+GET FILE='foo.sav'.
+
+DISPLAY VARIABLES.
+
+PRINT OUTFILE='out.txt'
+       /a (a10) b (a256) c (a200) 
+       d (a32767)
+       .
+
+EXECUTE.
+])
+   AT_CHECK([pspp -o pspp.csv get.sps])
+   AT_CHECK([cat pspp.csv], [0], [dnl
+Variable,Description,,Position
+a,Format: A10,,1
+,Measure: Nominal,,
+,Display Alignment: Left,,
+,Display Width: 10,,
+b,Format: A256,,2
+,Measure: Nominal,,
+,Display Alignment: Left,,
+,Display Width: 32,,
+c,Format: A200,,3
+,Measure: Nominal,,
+,Display Alignment: Left,,
+,Display Width: 32,,
+d,Format: A32767,,4
+,Measure: Nominal,,
+,Display Alignment: Left,,
+,Display Width: 32,,
+])
+   AT_CLEANUP])
+
+VLS_WRITE([UNCOMPRESSED])
+VLS_WRITE([COMPRESSED])
diff --git a/tests/data/v13.sav b/tests/data/v13.sav
new file mode 100755 (executable)
index 0000000..916cc73
Binary files /dev/null and b/tests/data/v13.sav differ
diff --git a/tests/data/v14.sav b/tests/data/v14.sav
new file mode 100644 (file)
index 0000000..d4aa1df
Binary files /dev/null and b/tests/data/v14.sav differ
index 8aadc319445ed7f6e02b4ba169f7ceddc30e8bd2..fda3b385200c605e2a69c16f331b02f2d9b64276 100644 (file)
@@ -127,7 +127,7 @@ main (int argc, char *argv[])
       r.file_name = argv[i];
       r.file = fopen (r.file_name, "rb");
       if (r.file == NULL)
-        error (EXIT_FAILURE, errno, "error opening \"%s\"", r.file_name);
+        error (EXIT_FAILURE, errno, "error opening `%s'", r.file_name);
       r.n_variable_records = 0;
       r.n_variables = 0;
       r.n_var_widths = 0;
@@ -689,8 +689,8 @@ read_mrsets (struct sfm_reader *r, size_t size, size_t count)
 
           if (!text_match (text, ' '))
             {
-              sys_warn (r, _("Missing space following 'E' at offset %zu "
-                             "in MRSETS record"), text_pos (text));
+              sys_warn (r, _("Missing space following `%c' at offset %zu "
+                             "in MRSETS record"), 'E', text_pos (text));
               break;
             }
 
@@ -698,14 +698,14 @@ read_mrsets (struct sfm_reader *r, size_t size, size_t count)
           if (!strcmp (number, "11"))
             label_from_var_label = true;
           else if (strcmp (number, "1"))
-            sys_warn (r, _("Unexpected label source value \"%s\" "
-                           "following 'E' at offset %zu in MRSETS record"),
+            sys_warn (r, _("Unexpected label source value `%s' "
+                           "following `E' at offset %zu in MRSETS record"),
                       number, text_pos (text));
 
         }
       else
         {
-          sys_warn (r, "missing 'C', 'D', or 'E' at offset %zu "
+          sys_warn (r, "missing `C', `D', or `E' at offset %zu "
                     "in mrsets record", text_pos (text));
           break;
         }
diff --git a/tests/expressions/randist.sh b/tests/expressions/randist.sh
deleted file mode 100755 (executable)
index d740497..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-#! /bin/sh
-
-# Tests random distribution functions.
-
-TEMPDIR=/tmp/pspp-tst-$$
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-cd $TEMPDIR
-
-activity="run script to generate random distribution test command file"
-perl $top_srcdir/tests/expressions/randist/randist.pl \
-    < $top_srcdir/tests/expressions/randist/randist.txt \
-    > randist.pspp
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run command file"
-$SUPERVISOR $PSPP -o pspp.csv \
-    $TEMPDIR/randist.pspp >$TEMPDIR/randist.err 2> $TEMPDIR/randist.out
-if [ $? -ne 0 ] ; then fail ; fi
-
-for d in beta cauchy chisq exp f gamma laplace logistic lnormal \
-        normal pareto t uniform weibull; do
-    activity="compare output for $d distribution"
-    perl $top_srcdir/tests/expressions/randist/compare.pl \
-       $top_srcdir/tests/expressions/randist/$d.out $TEMPDIR/$d.out
-    if [ $? -ne 0 ] ; then fail ; fi
-done
-
-pass
diff --git a/tests/expressions/randist/beta.out b/tests/expressions/randist/beta.out
deleted file mode 100644 (file)
index f5a2d57..0000000
+++ /dev/null
@@ -1,232 +0,0 @@
-       P        a        b          x        cdf        pdf 
-     .01      .75      .25      .0107      .0100      .7059 
-     .01      .75      .50      .0047      .0100     1.5975 
-     .01      .75     1.00      .0022      .0100     3.4812 
-     .01      .75     1.50      .0014      .0100     5.4014 
-     .01      .75     2.00      .0010      .0100     7.3328 
-     .01      .75     2.50      .0008      .0100     9.2691 
-     .01      .75     3.00      .0007      .0100    11.2077 
-     .01     1.00      .25      .0394      .0100      .2577 
-     .01     1.00      .50      .0199      .0100      .5051 
-     .01     1.00     1.00      .0100      .0100     1.0000 
-     .01     1.00     1.50      .0067      .0100     1.4950 
-     .01     1.00     2.00      .0050      .0100     1.9900 
-     .01     1.00     2.50      .0040      .0100     2.4850 
-     .01     1.00     3.00      .0033      .0100     2.9800 
-     .01     1.50      .25      .1343      .0100      .1168 
-     .01     1.50      .50      .0808      .0100      .1888 
-     .01     1.50     1.00      .0464      .0100      .3232 
-     .01     1.50     1.50      .0328      .0100      .4538 
-     .01     1.50     2.00      .0255      .0100      .5831 
-     .01     1.50     2.50      .0208      .0100      .7118 
-     .01     1.50     3.00      .0176      .0100      .8402 
-     .10      .75      .25      .2094      .1000      .3968 
-     .10      .75      .50      .0985      .1000      .7845 
-     .10      .75     1.00      .0464      .1000     1.6158 
-     .10      .75     1.50      .0302      .1000     2.4656 
-     .10      .75     2.00      .0223      .1000     3.3210 
-     .10      .75     2.50      .0177      .1000     4.1787 
-     .10      .75     3.00      .0146      .1000     5.0376 
-     .10     1.00      .25      .3439      .1000      .3429 
-     .10     1.00      .50      .1900      .1000      .5556 
-     .10     1.00     1.00      .1000      .1000     1.0000 
-     .10     1.00     1.50      .0678      .1000     1.4482 
-     .10     1.00     2.00      .0513      .1000     1.8974 
-     .10     1.00     2.50      .0413      .1000     2.3469 
-     .10     1.00     3.00      .0345      .1000     2.7965 
-     .10     1.50      .25      .5280      .1000      .3650 
-     .10     1.50      .50      .3514      .1000      .4685 
-     .10     1.50     1.00      .2154      .1000      .6962 
-     .10     1.50     1.50      .1565      .1000      .9252 
-     .10     1.50     2.00      .1231      .1000     1.1537 
-     .10     1.50     2.50      .1015      .1000     1.3821 
-     .10     1.50     3.00      .0864      .1000     1.6102 
-     .20      .75      .25      .4559      .2000      .4324 
-     .20      .75      .50      .2372      .2000      .6847 
-     .20      .75     1.00      .1170      .2000     1.2825 
-     .20      .75     1.50      .0770      .2000     1.9025 
-     .20      .75     2.00      .0573      .2000     2.5285 
-     .20      .75     2.50      .0456      .2000     3.1569 
-     .20      .75     3.00      .0379      .2000     3.7865 
-     .20     1.00      .25      .5904      .2000      .4883 
-     .20     1.00      .50      .3600      .2000      .6250 
-     .20     1.00     1.00      .2000      .2000     1.0000 
-     .20     1.00     1.50      .1382      .2000     1.3925 
-     .20     1.00     2.00      .1056      .2000     1.7889 
-     .20     1.00     2.50      .0854      .2000     2.1867 
-     .20     1.00     3.00      .0717      .2000     2.5853 
-     .20     1.50      .25      .7324      .2000      .6579 
-     .20     1.50      .50      .5280      .2000      .6733 
-     .20     1.50     1.00      .3420      .2000      .8772 
-     .20     1.50     1.50      .2541      .2000     1.1086 
-     .20     1.50     2.00      .2024      .2000     1.3456 
-     .20     1.50     2.50      .1683      .2000     1.5847 
-     .20     1.50     3.00      .1441      .2000     1.8249 
-     .30      .75      .25      .6615      .3000      .5624 
-     .30      .75      .50      .3852      .3000      .6756 
-     .30      .75     1.00      .2008      .3000     1.1204 
-     .30      .75     1.50      .1346      .3000     1.6023 
-     .30      .75     2.00      .1010      .3000     2.0929 
-     .30      .75     2.50      .0808      .3000     2.5868 
-     .30      .75     3.00      .0673      .3000     3.0823 
-     .30     1.00      .25      .7599      .3000      .7289 
-     .30     1.00      .50      .5100      .3000      .7143 
-     .30     1.00     1.00      .3000      .3000     1.0000 
-     .30     1.00     1.50      .2116      .3000     1.3319 
-     .30     1.00     2.00      .1633      .3000     1.6733 
-     .30     1.00     2.50      .1330      .3000     2.0184 
-     .30     1.00     3.00      .1121      .3000     2.3651 
-     .30     1.50      .25      .8510      .3000     1.1004 
-     .30     1.50      .50      .6576      .3000      .8823 
-     .30     1.50     1.00      .4481      .3000     1.0041 
-     .30     1.50     1.50      .3402      .3000     1.2064 
-     .30     1.50     2.00      .2743      .3000     1.4253 
-     .30     1.50     2.50      .2298      .3000     1.6503 
-     .30     1.50     3.00      .1978      .3000     1.8782 
-     .40      .75      .25      .8106      .4000      .8261 
-     .40      .75      .50      .5300      .4000      .7134 
-     .40      .75     1.00      .2947      .4000     1.0179 
-     .40      .75     1.50      .2017      .4000     1.3908 
-     .40      .75     2.00      .1530      .4000     1.7776 
-     .40      .75     2.50      .1231      .4000     2.1695 
-     .40      .75     3.00      .1029      .4000     2.5638 
-     .40     1.00      .25      .8704      .4000     1.1574 
-     .40     1.00      .50      .6400      .4000      .8333 
-     .40     1.00     1.00      .4000      .4000     1.0000 
-     .40     1.00     1.50      .2886      .4000     1.2651 
-     .40     1.00     2.00      .2254      .4000     1.5492 
-     .40     1.00     2.50      .1848      .4000     1.8401 
-     .40     1.00     3.00      .1566      .4000     2.1341 
-     .40     1.50      .25      .9219      .4000     1.8596 
-     .40     1.50      .50      .7581      .4000     1.1269 
-     .40     1.50     1.00      .5429      .4000     1.1052 
-     .40     1.50     1.50      .4211      .4000     1.2573 
-     .40     1.50     2.00      .3438      .4000     1.4428 
-     .40     1.50     2.50      .2904      .4000     1.6405 
-     .40     1.50     3.00      .2514      .4000     1.8440 
-     .50      .75      .25      .9067      .5000     1.3662 
-     .50      .75      .50      .6633      .5000      .7969 
-     .50      .75     1.00      .3969      .5000      .9449 
-     .50      .75     1.50      .2786      .5000     1.2197 
-     .50      .75     2.00      .2139      .5000     1.5170 
-     .50      .75     2.50      .1734      .5000     1.8224 
-     .50      .75     3.00      .1458      .5000     2.1314 
-     .50     1.00      .25      .9375      .5000     2.0000 
-     .50     1.00      .50      .7500      .5000     1.0000 
-     .50     1.00     1.00      .5000      .5000     1.0000 
-     .50     1.00     1.50      .3700      .5000     1.1906 
-     .50     1.00     2.00      .2929      .5000     1.4142 
-     .50     1.00     2.50      .2421      .5000     1.6494 
-     .50     1.00     3.00      .2063      .5000     1.8899 
-     .50     1.50      .25      .9630      .5000     3.3258 
-     .50     1.50      .50      .8368      .5000     1.4416 
-     .50     1.50     1.00      .6300      .5000     1.1906 
-     .50     1.50     1.50      .5000      .5000     1.2732 
-     .50     1.50     2.00      .4136      .5000     1.4142 
-     .50     1.50     2.50      .3525      .5000     1.5755 
-     .50     1.50     3.00      .3069      .5000     1.7464 
-     .60      .75      .25      .9613      .6000     2.6072 
-     .60      .75      .50      .7793      .6000      .9454 
-     .60      .75     1.00      .5061      .6000      .8892 
-     .60      .75     1.50      .3662      .6000     1.0676 
-     .60      .75     2.00      .2856      .6000     1.2826 
-     .60      .75     2.50      .2337      .6000     1.5099 
-     .60      .75     3.00      .1976      .6000     1.7426 
-     .60     1.00      .25      .9744      .6000     3.9063 
-     .60     1.00      .50      .8400      .6000     1.2500 
-     .60     1.00     1.00      .6000      .6000     1.0000 
-     .60     1.00     1.50      .4571      .6000     1.1052 
-     .60     1.00     2.00      .3675      .6000     1.2649 
-     .60     1.00     2.50      .3069      .6000     1.4427 
-     .60     1.00     3.00      .2632      .6000     1.6287 
-     .60     1.50      .25      .9850      .6000     6.6134 
-     .60     1.50      .50      .8978      .6000     1.8869 
-     .60     1.50     1.00      .7114      .6000     1.2651 
-     .60     1.50     1.50      .5789      .6000     1.2573 
-     .60     1.50     2.00      .4860      .6000     1.3438 
-     .60     1.50     2.50      .4182      .6000     1.4617 
-     .60     1.50     3.00      .3667      .6000     1.5938 
-     .70      .75      .25      .9877      .7000     6.1137 
-     .70      .75      .50      .8736      .7000     1.2142 
-     .70      .75     1.00      .6215      .7000      .8447 
-     .70      .75     1.50      .4670      .7000      .9214 
-     .70      .75     2.00      .3714      .7000     1.0570 
-     .70      .75     2.50      .3075      .7000     1.2110 
-     .70      .75     3.00      .2622      .7000     1.3731 
-     .70     1.00      .25      .9919      .7000     9.2593 
-     .70     1.00      .50      .9100      .7000     1.6667 
-     .70     1.00     1.00      .7000      .7000     1.0000 
-     .70     1.00     1.50      .5519      .7000     1.0041 
-     .70     1.00     2.00      .4523      .7000     1.0954 
-     .70     1.00     2.50      .3822      .7000     1.2140 
-     .70     1.00     3.00      .3306      .7000     1.3444 
-     .70     1.50      .25      .9953      .7000    15.8068 
-     .70     1.50      .50      .9434      .7000     2.5994 
-     .70     1.50     1.00      .7884      .7000     1.3319 
-     .70     1.50     1.50      .6598      .7000     1.2064 
-     .70     1.50     2.00      .5635      .7000     1.2287 
-     .70     1.50     2.50      .4905      .7000     1.2972 
-     .70     1.50     3.00      .4337      .7000     1.3859 
-     .80      .75      .25      .9976      .8000    20.5520 
-     .80      .75      .50      .9431      .8000     1.7757 
-     .80      .75     1.00      .7427      .8000      .8079 
-     .80      .75     1.50      .5855      .8000      .7679 
-     .80      .75     2.00      .4781      .8000      .8238 
-     .80      .75     2.50      .4025      .8000      .9075 
-     .80      .75     3.00      .3469      .8000     1.0028 
-     .80     1.00      .25      .9984      .8000    31.2500 
-     .80     1.00      .50      .9600      .8000     2.5000 
-     .80     1.00     1.00      .8000      .8000     1.0000 
-     .80     1.00     1.50      .6580      .8000      .8772 
-     .80     1.00     2.00      .5528      .8000      .8944 
-     .80     1.00     2.50      .4747      .8000      .9518 
-     .80     1.00     3.00      .4152      .8000     1.0260 
-     .80     1.50      .25      .9991      .8000    53.5108 
-     .80     1.50      .50      .9751      .8000     3.9855 
-     .80     1.50     1.00      .8618      .8000     1.3925 
-     .80     1.50     1.50      .7459      .8000     1.1086 
-     .80     1.50     2.00      .6508      .8000     1.0564 
-     .80     1.50     2.50      .5748      .8000     1.0706 
-     .80     1.50     3.00      .5137      .8000     1.1124 
-     .90      .75      .25      .9998      .9000   164.2657 
-     .90      .75      .50      .9857      .9000     3.4998 
-     .90      .75     1.00      .8689      .9000      .7768 
-     .90      .75     1.50      .7336      .9000      .5818 
-     .90      .75     2.00      .6239      .9000      .5555 
-     .90      .75     2.50      .5392      .9000      .5712 
-     .90      .75     3.00      .4734      .9000      .6033 
-     .90     1.00      .25      .9999      .9000   250.0000 
-     .90     1.00      .50      .9900      .9000     5.0000 
-     .90     1.00     1.00      .9000      .9000     1.0000 
-     .90     1.00     1.50      .7846      .9000      .6962 
-     .90     1.00     2.00      .6838      .9000      .6325 
-     .90     1.00     2.50      .6019      .9000      .6280 
-     .90     1.00     3.00      .5358      .9000      .6463 
-     .90     1.50      .25      .9999      .9000   428.3866 
-     .90     1.50      .50      .9938      .9000     8.0723 
-     .90     1.50     1.00      .9322      .9000     1.4482 
-     .90     1.50     1.50      .8435      .9000      .9252 
-     .90     1.50     2.00      .7586      .9000      .7883 
-     .90     1.50     2.50      .6847      .9000      .7461 
-     .90     1.50     3.00      .6218      .9000      .7400 
-     .99      .75      .25     1.0000      .9900 164255.717 
-     .99      .75      .50      .9999      .9900    34.8318 
-     .99      .75     1.00      .9867      .9900      .7525 
-     .99      .75     1.50      .9412      .9900      .2568 
-     .99      .75     2.00      .8779      .9900      .1656 
-     .99      .75     2.50      .8116      .9900      .1348 
-     .99      .75     3.00      .7492      .9900      .1220 
-     .99     1.00      .25     1.0000      .9900 249999.999 
-     .99     1.00      .50      .9999      .9900    50.0000 
-     .99     1.00     1.00      .9900      .9900     1.0000 
-     .99     1.00     1.50      .9536      .9900      .3232 
-     .99     1.00     2.00      .9000      .9900      .2000 
-     .99     1.00     2.50      .8415      .9900      .1577 
-     .99     1.00     3.00      .7846      .9900      .1392 
-     .99     1.50      .25     1.0000      .9900 428406.592 
-     .99     1.50      .50      .9999      .9900    81.0536 
-     .99     1.50     1.00      .9933      .9900     1.4950 
-     .99     1.50     1.50      .9672      .9900      .4538 
-     .99     1.50     2.00      .9260      .9900      .2669 
-     .99     1.50     2.50      .8786      .9900      .2020 
-     .99     1.50     3.00      .8302      .9900      .1724 
diff --git a/tests/expressions/randist/cauchy.out b/tests/expressions/randist/cauchy.out
deleted file mode 100644 (file)
index 17fa254..0000000
+++ /dev/null
@@ -1,606 +0,0 @@
-       P        a        b          x        cdf        pdf 
-     .01    -5.00      .50   -20.9103      .0100      .0006 
-     .01    -5.00      .75   -28.8654      .0100      .0004 
-     .01    -5.00     1.00   -36.8205      .0100      .0003 
-     .01    -5.00     1.25   -44.7756      .0100      .0003 
-     .01    -5.00     1.50   -52.7308      .0100      .0002 
-     .01    -4.00      .50   -19.9103      .0100      .0006 
-     .01    -4.00      .75   -27.8654      .0100      .0004 
-     .01    -4.00     1.00   -35.8205      .0100      .0003 
-     .01    -4.00     1.25   -43.7756      .0100      .0003 
-     .01    -4.00     1.50   -51.7308      .0100      .0002 
-     .01    -3.00      .50   -18.9103      .0100      .0006 
-     .01    -3.00      .75   -26.8654      .0100      .0004 
-     .01    -3.00     1.00   -34.8205      .0100      .0003 
-     .01    -3.00     1.25   -42.7756      .0100      .0003 
-     .01    -3.00     1.50   -50.7308      .0100      .0002 
-     .01    -2.00      .50   -17.9103      .0100      .0006 
-     .01    -2.00      .75   -25.8654      .0100      .0004 
-     .01    -2.00     1.00   -33.8205      .0100      .0003 
-     .01    -2.00     1.25   -41.7756      .0100      .0003 
-     .01    -2.00     1.50   -49.7308      .0100      .0002 
-     .01    -1.00      .50   -16.9103      .0100      .0006 
-     .01    -1.00      .75   -24.8654      .0100      .0004 
-     .01    -1.00     1.00   -32.8205      .0100      .0003 
-     .01    -1.00     1.25   -40.7756      .0100      .0003 
-     .01    -1.00     1.50   -48.7308      .0100      .0002 
-     .01      .00      .50   -15.9103      .0100      .0006 
-     .01      .00      .75   -23.8654      .0100      .0004 
-     .01      .00     1.00   -31.8205      .0100      .0003 
-     .01      .00     1.25   -39.7756      .0100      .0003 
-     .01      .00     1.50   -47.7308      .0100      .0002 
-     .01     1.00      .50   -14.9103      .0100      .0006 
-     .01     1.00      .75   -22.8654      .0100      .0004 
-     .01     1.00     1.00   -30.8205      .0100      .0003 
-     .01     1.00     1.25   -38.7756      .0100      .0003 
-     .01     1.00     1.50   -46.7308      .0100      .0002 
-     .01     2.00      .50   -13.9103      .0100      .0006 
-     .01     2.00      .75   -21.8654      .0100      .0004 
-     .01     2.00     1.00   -29.8205      .0100      .0003 
-     .01     2.00     1.25   -37.7756      .0100      .0003 
-     .01     2.00     1.50   -45.7308      .0100      .0002 
-     .01     3.00      .50   -12.9103      .0100      .0006 
-     .01     3.00      .75   -20.8654      .0100      .0004 
-     .01     3.00     1.00   -28.8205      .0100      .0003 
-     .01     3.00     1.25   -36.7756      .0100      .0003 
-     .01     3.00     1.50   -44.7308      .0100      .0002 
-     .01     4.00      .50   -11.9103      .0100      .0006 
-     .01     4.00      .75   -19.8654      .0100      .0004 
-     .01     4.00     1.00   -27.8205      .0100      .0003 
-     .01     4.00     1.25   -35.7756      .0100      .0003 
-     .01     4.00     1.50   -43.7308      .0100      .0002 
-     .01     5.00      .50   -10.9103      .0100      .0006 
-     .01     5.00      .75   -18.8654      .0100      .0004 
-     .01     5.00     1.00   -26.8205      .0100      .0003 
-     .01     5.00     1.25   -34.7756      .0100      .0003 
-     .01     5.00     1.50   -42.7308      .0100      .0002 
-     .10    -5.00      .50    -6.5388      .1000      .0608 
-     .10    -5.00      .75    -7.3083      .1000      .0405 
-     .10    -5.00     1.00    -8.0777      .1000      .0304 
-     .10    -5.00     1.25    -8.8471      .1000      .0243 
-     .10    -5.00     1.50    -9.6165      .1000      .0203 
-     .10    -4.00      .50    -5.5388      .1000      .0608 
-     .10    -4.00      .75    -6.3083      .1000      .0405 
-     .10    -4.00     1.00    -7.0777      .1000      .0304 
-     .10    -4.00     1.25    -7.8471      .1000      .0243 
-     .10    -4.00     1.50    -8.6165      .1000      .0203 
-     .10    -3.00      .50    -4.5388      .1000      .0608 
-     .10    -3.00      .75    -5.3083      .1000      .0405 
-     .10    -3.00     1.00    -6.0777      .1000      .0304 
-     .10    -3.00     1.25    -6.8471      .1000      .0243 
-     .10    -3.00     1.50    -7.6165      .1000      .0203 
-     .10    -2.00      .50    -3.5388      .1000      .0608 
-     .10    -2.00      .75    -4.3083      .1000      .0405 
-     .10    -2.00     1.00    -5.0777      .1000      .0304 
-     .10    -2.00     1.25    -5.8471      .1000      .0243 
-     .10    -2.00     1.50    -6.6165      .1000      .0203 
-     .10    -1.00      .50    -2.5388      .1000      .0608 
-     .10    -1.00      .75    -3.3083      .1000      .0405 
-     .10    -1.00     1.00    -4.0777      .1000      .0304 
-     .10    -1.00     1.25    -4.8471      .1000      .0243 
-     .10    -1.00     1.50    -5.6165      .1000      .0203 
-     .10      .00      .50    -1.5388      .1000      .0608 
-     .10      .00      .75    -2.3083      .1000      .0405 
-     .10      .00     1.00    -3.0777      .1000      .0304 
-     .10      .00     1.25    -3.8471      .1000      .0243 
-     .10      .00     1.50    -4.6165      .1000      .0203 
-     .10     1.00      .50     -.5388      .1000      .0608 
-     .10     1.00      .75    -1.3083      .1000      .0405 
-     .10     1.00     1.00    -2.0777      .1000      .0304 
-     .10     1.00     1.25    -2.8471      .1000      .0243 
-     .10     1.00     1.50    -3.6165      .1000      .0203 
-     .10     2.00      .50      .4612      .1000      .0608 
-     .10     2.00      .75     -.3083      .1000      .0405 
-     .10     2.00     1.00    -1.0777      .1000      .0304 
-     .10     2.00     1.25    -1.8471      .1000      .0243 
-     .10     2.00     1.50    -2.6165      .1000      .0203 
-     .10     3.00      .50     1.4612      .1000      .0608 
-     .10     3.00      .75      .6917      .1000      .0405 
-     .10     3.00     1.00     -.0777      .1000      .0304 
-     .10     3.00     1.25     -.8471      .1000      .0243 
-     .10     3.00     1.50    -1.6165      .1000      .0203 
-     .10     4.00      .50     2.4612      .1000      .0608 
-     .10     4.00      .75     1.6917      .1000      .0405 
-     .10     4.00     1.00      .9223      .1000      .0304 
-     .10     4.00     1.25      .1529      .1000      .0243 
-     .10     4.00     1.50     -.6165      .1000      .0203 
-     .10     5.00      .50     3.4612      .1000      .0608 
-     .10     5.00      .75     2.6917      .1000      .0405 
-     .10     5.00     1.00     1.9223      .1000      .0304 
-     .10     5.00     1.25     1.1529      .1000      .0243 
-     .10     5.00     1.50      .3835      .1000      .0203 
-     .20    -5.00      .50    -5.6882      .2000      .2199 
-     .20    -5.00      .75    -6.0323      .2000      .1466 
-     .20    -5.00     1.00    -6.3764      .2000      .1100 
-     .20    -5.00     1.25    -6.7205      .2000      .0880 
-     .20    -5.00     1.50    -7.0646      .2000      .0733 
-     .20    -4.00      .50    -4.6882      .2000      .2199 
-     .20    -4.00      .75    -5.0323      .2000      .1466 
-     .20    -4.00     1.00    -5.3764      .2000      .1100 
-     .20    -4.00     1.25    -5.7205      .2000      .0880 
-     .20    -4.00     1.50    -6.0646      .2000      .0733 
-     .20    -3.00      .50    -3.6882      .2000      .2199 
-     .20    -3.00      .75    -4.0323      .2000      .1466 
-     .20    -3.00     1.00    -4.3764      .2000      .1100 
-     .20    -3.00     1.25    -4.7205      .2000      .0880 
-     .20    -3.00     1.50    -5.0646      .2000      .0733 
-     .20    -2.00      .50    -2.6882      .2000      .2199 
-     .20    -2.00      .75    -3.0323      .2000      .1466 
-     .20    -2.00     1.00    -3.3764      .2000      .1100 
-     .20    -2.00     1.25    -3.7205      .2000      .0880 
-     .20    -2.00     1.50    -4.0646      .2000      .0733 
-     .20    -1.00      .50    -1.6882      .2000      .2199 
-     .20    -1.00      .75    -2.0323      .2000      .1466 
-     .20    -1.00     1.00    -2.3764      .2000      .1100 
-     .20    -1.00     1.25    -2.7205      .2000      .0880 
-     .20    -1.00     1.50    -3.0646      .2000      .0733 
-     .20      .00      .50     -.6882      .2000      .2199 
-     .20      .00      .75    -1.0323      .2000      .1466 
-     .20      .00     1.00    -1.3764      .2000      .1100 
-     .20      .00     1.25    -1.7205      .2000      .0880 
-     .20      .00     1.50    -2.0646      .2000      .0733 
-     .20     1.00      .50      .3118      .2000      .2199 
-     .20     1.00      .75     -.0323      .2000      .1466 
-     .20     1.00     1.00     -.3764      .2000      .1100 
-     .20     1.00     1.25     -.7205      .2000      .0880 
-     .20     1.00     1.50    -1.0646      .2000      .0733 
-     .20     2.00      .50     1.3118      .2000      .2199 
-     .20     2.00      .75      .9677      .2000      .1466 
-     .20     2.00     1.00      .6236      .2000      .1100 
-     .20     2.00     1.25      .2795      .2000      .0880 
-     .20     2.00     1.50     -.0646      .2000      .0733 
-     .20     3.00      .50     2.3118      .2000      .2199 
-     .20     3.00      .75     1.9677      .2000      .1466 
-     .20     3.00     1.00     1.6236      .2000      .1100 
-     .20     3.00     1.25     1.2795      .2000      .0880 
-     .20     3.00     1.50      .9354      .2000      .0733 
-     .20     4.00      .50     3.3118      .2000      .2199 
-     .20     4.00      .75     2.9677      .2000      .1466 
-     .20     4.00     1.00     2.6236      .2000      .1100 
-     .20     4.00     1.25     2.2795      .2000      .0880 
-     .20     4.00     1.50     1.9354      .2000      .0733 
-     .20     5.00      .50     4.3118      .2000      .2199 
-     .20     5.00      .75     3.9677      .2000      .1466 
-     .20     5.00     1.00     3.6236      .2000      .1100 
-     .20     5.00     1.25     3.2795      .2000      .0880 
-     .20     5.00     1.50     2.9354      .2000      .0733 
-     .30    -5.00      .50    -5.3633      .3000      .4167 
-     .30    -5.00      .75    -5.5449      .3000      .2778 
-     .30    -5.00     1.00    -5.7265      .3000      .2083 
-     .30    -5.00     1.25    -5.9082      .3000      .1667 
-     .30    -5.00     1.50    -6.0898      .3000      .1389 
-     .30    -4.00      .50    -4.3633      .3000      .4167 
-     .30    -4.00      .75    -4.5449      .3000      .2778 
-     .30    -4.00     1.00    -4.7265      .3000      .2083 
-     .30    -4.00     1.25    -4.9082      .3000      .1667 
-     .30    -4.00     1.50    -5.0898      .3000      .1389 
-     .30    -3.00      .50    -3.3633      .3000      .4167 
-     .30    -3.00      .75    -3.5449      .3000      .2778 
-     .30    -3.00     1.00    -3.7265      .3000      .2083 
-     .30    -3.00     1.25    -3.9082      .3000      .1667 
-     .30    -3.00     1.50    -4.0898      .3000      .1389 
-     .30    -2.00      .50    -2.3633      .3000      .4167 
-     .30    -2.00      .75    -2.5449      .3000      .2778 
-     .30    -2.00     1.00    -2.7265      .3000      .2083 
-     .30    -2.00     1.25    -2.9082      .3000      .1667 
-     .30    -2.00     1.50    -3.0898      .3000      .1389 
-     .30    -1.00      .50    -1.3633      .3000      .4167 
-     .30    -1.00      .75    -1.5449      .3000      .2778 
-     .30    -1.00     1.00    -1.7265      .3000      .2083 
-     .30    -1.00     1.25    -1.9082      .3000      .1667 
-     .30    -1.00     1.50    -2.0898      .3000      .1389 
-     .30      .00      .50     -.3633      .3000      .4167 
-     .30      .00      .75     -.5449      .3000      .2778 
-     .30      .00     1.00     -.7265      .3000      .2083 
-     .30      .00     1.25     -.9082      .3000      .1667 
-     .30      .00     1.50    -1.0898      .3000      .1389 
-     .30     1.00      .50      .6367      .3000      .4167 
-     .30     1.00      .75      .4551      .3000      .2778 
-     .30     1.00     1.00      .2735      .3000      .2083 
-     .30     1.00     1.25      .0918      .3000      .1667 
-     .30     1.00     1.50     -.0898      .3000      .1389 
-     .30     2.00      .50     1.6367      .3000      .4167 
-     .30     2.00      .75     1.4551      .3000      .2778 
-     .30     2.00     1.00     1.2735      .3000      .2083 
-     .30     2.00     1.25     1.0918      .3000      .1667 
-     .30     2.00     1.50      .9102      .3000      .1389 
-     .30     3.00      .50     2.6367      .3000      .4167 
-     .30     3.00      .75     2.4551      .3000      .2778 
-     .30     3.00     1.00     2.2735      .3000      .2083 
-     .30     3.00     1.25     2.0918      .3000      .1667 
-     .30     3.00     1.50     1.9102      .3000      .1389 
-     .30     4.00      .50     3.6367      .3000      .4167 
-     .30     4.00      .75     3.4551      .3000      .2778 
-     .30     4.00     1.00     3.2735      .3000      .2083 
-     .30     4.00     1.25     3.0918      .3000      .1667 
-     .30     4.00     1.50     2.9102      .3000      .1389 
-     .30     5.00      .50     4.6367      .3000      .4167 
-     .30     5.00      .75     4.4551      .3000      .2778 
-     .30     5.00     1.00     4.2735      .3000      .2083 
-     .30     5.00     1.25     4.0918      .3000      .1667 
-     .30     5.00     1.50     3.9102      .3000      .1389 
-     .40    -5.00      .50    -5.1625      .4000      .5758 
-     .40    -5.00      .75    -5.2437      .4000      .3839 
-     .40    -5.00     1.00    -5.3249      .4000      .2879 
-     .40    -5.00     1.25    -5.4061      .4000      .2303 
-     .40    -5.00     1.50    -5.4874      .4000      .1919 
-     .40    -4.00      .50    -4.1625      .4000      .5758 
-     .40    -4.00      .75    -4.2437      .4000      .3839 
-     .40    -4.00     1.00    -4.3249      .4000      .2879 
-     .40    -4.00     1.25    -4.4061      .4000      .2303 
-     .40    -4.00     1.50    -4.4874      .4000      .1919 
-     .40    -3.00      .50    -3.1625      .4000      .5758 
-     .40    -3.00      .75    -3.2437      .4000      .3839 
-     .40    -3.00     1.00    -3.3249      .4000      .2879 
-     .40    -3.00     1.25    -3.4061      .4000      .2303 
-     .40    -3.00     1.50    -3.4874      .4000      .1919 
-     .40    -2.00      .50    -2.1625      .4000      .5758 
-     .40    -2.00      .75    -2.2437      .4000      .3839 
-     .40    -2.00     1.00    -2.3249      .4000      .2879 
-     .40    -2.00     1.25    -2.4061      .4000      .2303 
-     .40    -2.00     1.50    -2.4874      .4000      .1919 
-     .40    -1.00      .50    -1.1625      .4000      .5758 
-     .40    -1.00      .75    -1.2437      .4000      .3839 
-     .40    -1.00     1.00    -1.3249      .4000      .2879 
-     .40    -1.00     1.25    -1.4061      .4000      .2303 
-     .40    -1.00     1.50    -1.4874      .4000      .1919 
-     .40      .00      .50     -.1625      .4000      .5758 
-     .40      .00      .75     -.2437      .4000      .3839 
-     .40      .00     1.00     -.3249      .4000      .2879 
-     .40      .00     1.25     -.4061      .4000      .2303 
-     .40      .00     1.50     -.4874      .4000      .1919 
-     .40     1.00      .50      .8375      .4000      .5758 
-     .40     1.00      .75      .7563      .4000      .3839 
-     .40     1.00     1.00      .6751      .4000      .2879 
-     .40     1.00     1.25      .5939      .4000      .2303 
-     .40     1.00     1.50      .5126      .4000      .1919 
-     .40     2.00      .50     1.8375      .4000      .5758 
-     .40     2.00      .75     1.7563      .4000      .3839 
-     .40     2.00     1.00     1.6751      .4000      .2879 
-     .40     2.00     1.25     1.5939      .4000      .2303 
-     .40     2.00     1.50     1.5126      .4000      .1919 
-     .40     3.00      .50     2.8375      .4000      .5758 
-     .40     3.00      .75     2.7563      .4000      .3839 
-     .40     3.00     1.00     2.6751      .4000      .2879 
-     .40     3.00     1.25     2.5939      .4000      .2303 
-     .40     3.00     1.50     2.5126      .4000      .1919 
-     .40     4.00      .50     3.8375      .4000      .5758 
-     .40     4.00      .75     3.7563      .4000      .3839 
-     .40     4.00     1.00     3.6751      .4000      .2879 
-     .40     4.00     1.25     3.5939      .4000      .2303 
-     .40     4.00     1.50     3.5126      .4000      .1919 
-     .40     5.00      .50     4.8375      .4000      .5758 
-     .40     5.00      .75     4.7563      .4000      .3839 
-     .40     5.00     1.00     4.6751      .4000      .2879 
-     .40     5.00     1.25     4.5939      .4000      .2303 
-     .40     5.00     1.50     4.5126      .4000      .1919 
-     .50    -5.00      .50    -5.0000      .5000      .6366 
-     .50    -5.00      .75    -5.0000      .5000      .4244 
-     .50    -5.00     1.00    -5.0000      .5000      .3183 
-     .50    -5.00     1.25    -5.0000      .5000      .2546 
-     .50    -5.00     1.50    -5.0000      .5000      .2122 
-     .50    -4.00      .50    -4.0000      .5000      .6366 
-     .50    -4.00      .75    -4.0000      .5000      .4244 
-     .50    -4.00     1.00    -4.0000      .5000      .3183 
-     .50    -4.00     1.25    -4.0000      .5000      .2546 
-     .50    -4.00     1.50    -4.0000      .5000      .2122 
-     .50    -3.00      .50    -3.0000      .5000      .6366 
-     .50    -3.00      .75    -3.0000      .5000      .4244 
-     .50    -3.00     1.00    -3.0000      .5000      .3183 
-     .50    -3.00     1.25    -3.0000      .5000      .2546 
-     .50    -3.00     1.50    -3.0000      .5000      .2122 
-     .50    -2.00      .50    -2.0000      .5000      .6366 
-     .50    -2.00      .75    -2.0000      .5000      .4244 
-     .50    -2.00     1.00    -2.0000      .5000      .3183 
-     .50    -2.00     1.25    -2.0000      .5000      .2546 
-     .50    -2.00     1.50    -2.0000      .5000      .2122 
-     .50    -1.00      .50    -1.0000      .5000      .6366 
-     .50    -1.00      .75    -1.0000      .5000      .4244 
-     .50    -1.00     1.00    -1.0000      .5000      .3183 
-     .50    -1.00     1.25    -1.0000      .5000      .2546 
-     .50    -1.00     1.50    -1.0000      .5000      .2122 
-     .50      .00      .50      .0000      .5000      .6366 
-     .50      .00      .75      .0000      .5000      .4244 
-     .50      .00     1.00      .0000      .5000      .3183 
-     .50      .00     1.25      .0000      .5000      .2546 
-     .50      .00     1.50      .0000      .5000      .2122 
-     .50     1.00      .50     1.0000      .5000      .6366 
-     .50     1.00      .75     1.0000      .5000      .4244 
-     .50     1.00     1.00     1.0000      .5000      .3183 
-     .50     1.00     1.25     1.0000      .5000      .2546 
-     .50     1.00     1.50     1.0000      .5000      .2122 
-     .50     2.00      .50     2.0000      .5000      .6366 
-     .50     2.00      .75     2.0000      .5000      .4244 
-     .50     2.00     1.00     2.0000      .5000      .3183 
-     .50     2.00     1.25     2.0000      .5000      .2546 
-     .50     2.00     1.50     2.0000      .5000      .2122 
-     .50     3.00      .50     3.0000      .5000      .6366 
-     .50     3.00      .75     3.0000      .5000      .4244 
-     .50     3.00     1.00     3.0000      .5000      .3183 
-     .50     3.00     1.25     3.0000      .5000      .2546 
-     .50     3.00     1.50     3.0000      .5000      .2122 
-     .50     4.00      .50     4.0000      .5000      .6366 
-     .50     4.00      .75     4.0000      .5000      .4244 
-     .50     4.00     1.00     4.0000      .5000      .3183 
-     .50     4.00     1.25     4.0000      .5000      .2546 
-     .50     4.00     1.50     4.0000      .5000      .2122 
-     .50     5.00      .50     5.0000      .5000      .6366 
-     .50     5.00      .75     5.0000      .5000      .4244 
-     .50     5.00     1.00     5.0000      .5000      .3183 
-     .50     5.00     1.25     5.0000      .5000      .2546 
-     .50     5.00     1.50     5.0000      .5000      .2122 
-     .60    -5.00      .50    -4.8375      .6000      .5758 
-     .60    -5.00      .75    -4.7563      .6000      .3839 
-     .60    -5.00     1.00    -4.6751      .6000      .2879 
-     .60    -5.00     1.25    -4.5939      .6000      .2303 
-     .60    -5.00     1.50    -4.5126      .6000      .1919 
-     .60    -4.00      .50    -3.8375      .6000      .5758 
-     .60    -4.00      .75    -3.7563      .6000      .3839 
-     .60    -4.00     1.00    -3.6751      .6000      .2879 
-     .60    -4.00     1.25    -3.5939      .6000      .2303 
-     .60    -4.00     1.50    -3.5126      .6000      .1919 
-     .60    -3.00      .50    -2.8375      .6000      .5758 
-     .60    -3.00      .75    -2.7563      .6000      .3839 
-     .60    -3.00     1.00    -2.6751      .6000      .2879 
-     .60    -3.00     1.25    -2.5939      .6000      .2303 
-     .60    -3.00     1.50    -2.5126      .6000      .1919 
-     .60    -2.00      .50    -1.8375      .6000      .5758 
-     .60    -2.00      .75    -1.7563      .6000      .3839 
-     .60    -2.00     1.00    -1.6751      .6000      .2879 
-     .60    -2.00     1.25    -1.5939      .6000      .2303 
-     .60    -2.00     1.50    -1.5126      .6000      .1919 
-     .60    -1.00      .50     -.8375      .6000      .5758 
-     .60    -1.00      .75     -.7563      .6000      .3839 
-     .60    -1.00     1.00     -.6751      .6000      .2879 
-     .60    -1.00     1.25     -.5939      .6000      .2303 
-     .60    -1.00     1.50     -.5126      .6000      .1919 
-     .60      .00      .50      .1625      .6000      .5758 
-     .60      .00      .75      .2437      .6000      .3839 
-     .60      .00     1.00      .3249      .6000      .2879 
-     .60      .00     1.25      .4061      .6000      .2303 
-     .60      .00     1.50      .4874      .6000      .1919 
-     .60     1.00      .50     1.1625      .6000      .5758 
-     .60     1.00      .75     1.2437      .6000      .3839 
-     .60     1.00     1.00     1.3249      .6000      .2879 
-     .60     1.00     1.25     1.4061      .6000      .2303 
-     .60     1.00     1.50     1.4874      .6000      .1919 
-     .60     2.00      .50     2.1625      .6000      .5758 
-     .60     2.00      .75     2.2437      .6000      .3839 
-     .60     2.00     1.00     2.3249      .6000      .2879 
-     .60     2.00     1.25     2.4061      .6000      .2303 
-     .60     2.00     1.50     2.4874      .6000      .1919 
-     .60     3.00      .50     3.1625      .6000      .5758 
-     .60     3.00      .75     3.2437      .6000      .3839 
-     .60     3.00     1.00     3.3249      .6000      .2879 
-     .60     3.00     1.25     3.4061      .6000      .2303 
-     .60     3.00     1.50     3.4874      .6000      .1919 
-     .60     4.00      .50     4.1625      .6000      .5758 
-     .60     4.00      .75     4.2437      .6000      .3839 
-     .60     4.00     1.00     4.3249      .6000      .2879 
-     .60     4.00     1.25     4.4061      .6000      .2303 
-     .60     4.00     1.50     4.4874      .6000      .1919 
-     .60     5.00      .50     5.1625      .6000      .5758 
-     .60     5.00      .75     5.2437      .6000      .3839 
-     .60     5.00     1.00     5.3249      .6000      .2879 
-     .60     5.00     1.25     5.4061      .6000      .2303 
-     .60     5.00     1.50     5.4874      .6000      .1919 
-     .70    -5.00      .50    -4.6367      .7000      .4167 
-     .70    -5.00      .75    -4.4551      .7000      .2778 
-     .70    -5.00     1.00    -4.2735      .7000      .2083 
-     .70    -5.00     1.25    -4.0918      .7000      .1667 
-     .70    -5.00     1.50    -3.9102      .7000      .1389 
-     .70    -4.00      .50    -3.6367      .7000      .4167 
-     .70    -4.00      .75    -3.4551      .7000      .2778 
-     .70    -4.00     1.00    -3.2735      .7000      .2083 
-     .70    -4.00     1.25    -3.0918      .7000      .1667 
-     .70    -4.00     1.50    -2.9102      .7000      .1389 
-     .70    -3.00      .50    -2.6367      .7000      .4167 
-     .70    -3.00      .75    -2.4551      .7000      .2778 
-     .70    -3.00     1.00    -2.2735      .7000      .2083 
-     .70    -3.00     1.25    -2.0918      .7000      .1667 
-     .70    -3.00     1.50    -1.9102      .7000      .1389 
-     .70    -2.00      .50    -1.6367      .7000      .4167 
-     .70    -2.00      .75    -1.4551      .7000      .2778 
-     .70    -2.00     1.00    -1.2735      .7000      .2083 
-     .70    -2.00     1.25    -1.0918      .7000      .1667 
-     .70    -2.00     1.50     -.9102      .7000      .1389 
-     .70    -1.00      .50     -.6367      .7000      .4167 
-     .70    -1.00      .75     -.4551      .7000      .2778 
-     .70    -1.00     1.00     -.2735      .7000      .2083 
-     .70    -1.00     1.25     -.0918      .7000      .1667 
-     .70    -1.00     1.50      .0898      .7000      .1389 
-     .70      .00      .50      .3633      .7000      .4167 
-     .70      .00      .75      .5449      .7000      .2778 
-     .70      .00     1.00      .7265      .7000      .2083 
-     .70      .00     1.25      .9082      .7000      .1667 
-     .70      .00     1.50     1.0898      .7000      .1389 
-     .70     1.00      .50     1.3633      .7000      .4167 
-     .70     1.00      .75     1.5449      .7000      .2778 
-     .70     1.00     1.00     1.7265      .7000      .2083 
-     .70     1.00     1.25     1.9082      .7000      .1667 
-     .70     1.00     1.50     2.0898      .7000      .1389 
-     .70     2.00      .50     2.3633      .7000      .4167 
-     .70     2.00      .75     2.5449      .7000      .2778 
-     .70     2.00     1.00     2.7265      .7000      .2083 
-     .70     2.00     1.25     2.9082      .7000      .1667 
-     .70     2.00     1.50     3.0898      .7000      .1389 
-     .70     3.00      .50     3.3633      .7000      .4167 
-     .70     3.00      .75     3.5449      .7000      .2778 
-     .70     3.00     1.00     3.7265      .7000      .2083 
-     .70     3.00     1.25     3.9082      .7000      .1667 
-     .70     3.00     1.50     4.0898      .7000      .1389 
-     .70     4.00      .50     4.3633      .7000      .4167 
-     .70     4.00      .75     4.5449      .7000      .2778 
-     .70     4.00     1.00     4.7265      .7000      .2083 
-     .70     4.00     1.25     4.9082      .7000      .1667 
-     .70     4.00     1.50     5.0898      .7000      .1389 
-     .70     5.00      .50     5.3633      .7000      .4167 
-     .70     5.00      .75     5.5449      .7000      .2778 
-     .70     5.00     1.00     5.7265      .7000      .2083 
-     .70     5.00     1.25     5.9082      .7000      .1667 
-     .70     5.00     1.50     6.0898      .7000      .1389 
-     .80    -5.00      .50    -4.3118      .8000      .2199 
-     .80    -5.00      .75    -3.9677      .8000      .1466 
-     .80    -5.00     1.00    -3.6236      .8000      .1100 
-     .80    -5.00     1.25    -3.2795      .8000      .0880 
-     .80    -5.00     1.50    -2.9354      .8000      .0733 
-     .80    -4.00      .50    -3.3118      .8000      .2199 
-     .80    -4.00      .75    -2.9677      .8000      .1466 
-     .80    -4.00     1.00    -2.6236      .8000      .1100 
-     .80    -4.00     1.25    -2.2795      .8000      .0880 
-     .80    -4.00     1.50    -1.9354      .8000      .0733 
-     .80    -3.00      .50    -2.3118      .8000      .2199 
-     .80    -3.00      .75    -1.9677      .8000      .1466 
-     .80    -3.00     1.00    -1.6236      .8000      .1100 
-     .80    -3.00     1.25    -1.2795      .8000      .0880 
-     .80    -3.00     1.50     -.9354      .8000      .0733 
-     .80    -2.00      .50    -1.3118      .8000      .2199 
-     .80    -2.00      .75     -.9677      .8000      .1466 
-     .80    -2.00     1.00     -.6236      .8000      .1100 
-     .80    -2.00     1.25     -.2795      .8000      .0880 
-     .80    -2.00     1.50      .0646      .8000      .0733 
-     .80    -1.00      .50     -.3118      .8000      .2199 
-     .80    -1.00      .75      .0323      .8000      .1466 
-     .80    -1.00     1.00      .3764      .8000      .1100 
-     .80    -1.00     1.25      .7205      .8000      .0880 
-     .80    -1.00     1.50     1.0646      .8000      .0733 
-     .80      .00      .50      .6882      .8000      .2199 
-     .80      .00      .75     1.0323      .8000      .1466 
-     .80      .00     1.00     1.3764      .8000      .1100 
-     .80      .00     1.25     1.7205      .8000      .0880 
-     .80      .00     1.50     2.0646      .8000      .0733 
-     .80     1.00      .50     1.6882      .8000      .2199 
-     .80     1.00      .75     2.0323      .8000      .1466 
-     .80     1.00     1.00     2.3764      .8000      .1100 
-     .80     1.00     1.25     2.7205      .8000      .0880 
-     .80     1.00     1.50     3.0646      .8000      .0733 
-     .80     2.00      .50     2.6882      .8000      .2199 
-     .80     2.00      .75     3.0323      .8000      .1466 
-     .80     2.00     1.00     3.3764      .8000      .1100 
-     .80     2.00     1.25     3.7205      .8000      .0880 
-     .80     2.00     1.50     4.0646      .8000      .0733 
-     .80     3.00      .50     3.6882      .8000      .2199 
-     .80     3.00      .75     4.0323      .8000      .1466 
-     .80     3.00     1.00     4.3764      .8000      .1100 
-     .80     3.00     1.25     4.7205      .8000      .0880 
-     .80     3.00     1.50     5.0646      .8000      .0733 
-     .80     4.00      .50     4.6882      .8000      .2199 
-     .80     4.00      .75     5.0323      .8000      .1466 
-     .80     4.00     1.00     5.3764      .8000      .1100 
-     .80     4.00     1.25     5.7205      .8000      .0880 
-     .80     4.00     1.50     6.0646      .8000      .0733 
-     .80     5.00      .50     5.6882      .8000      .2199 
-     .80     5.00      .75     6.0323      .8000      .1466 
-     .80     5.00     1.00     6.3764      .8000      .1100 
-     .80     5.00     1.25     6.7205      .8000      .0880 
-     .80     5.00     1.50     7.0646      .8000      .0733 
-     .90    -5.00      .50    -3.4612      .9000      .0608 
-     .90    -5.00      .75    -2.6917      .9000      .0405 
-     .90    -5.00     1.00    -1.9223      .9000      .0304 
-     .90    -5.00     1.25    -1.1529      .9000      .0243 
-     .90    -5.00     1.50     -.3835      .9000      .0203 
-     .90    -4.00      .50    -2.4612      .9000      .0608 
-     .90    -4.00      .75    -1.6917      .9000      .0405 
-     .90    -4.00     1.00     -.9223      .9000      .0304 
-     .90    -4.00     1.25     -.1529      .9000      .0243 
-     .90    -4.00     1.50      .6165      .9000      .0203 
-     .90    -3.00      .50    -1.4612      .9000      .0608 
-     .90    -3.00      .75     -.6917      .9000      .0405 
-     .90    -3.00     1.00      .0777      .9000      .0304 
-     .90    -3.00     1.25      .8471      .9000      .0243 
-     .90    -3.00     1.50     1.6165      .9000      .0203 
-     .90    -2.00      .50     -.4612      .9000      .0608 
-     .90    -2.00      .75      .3083      .9000      .0405 
-     .90    -2.00     1.00     1.0777      .9000      .0304 
-     .90    -2.00     1.25     1.8471      .9000      .0243 
-     .90    -2.00     1.50     2.6165      .9000      .0203 
-     .90    -1.00      .50      .5388      .9000      .0608 
-     .90    -1.00      .75     1.3083      .9000      .0405 
-     .90    -1.00     1.00     2.0777      .9000      .0304 
-     .90    -1.00     1.25     2.8471      .9000      .0243 
-     .90    -1.00     1.50     3.6165      .9000      .0203 
-     .90      .00      .50     1.5388      .9000      .0608 
-     .90      .00      .75     2.3083      .9000      .0405 
-     .90      .00     1.00     3.0777      .9000      .0304 
-     .90      .00     1.25     3.8471      .9000      .0243 
-     .90      .00     1.50     4.6165      .9000      .0203 
-     .90     1.00      .50     2.5388      .9000      .0608 
-     .90     1.00      .75     3.3083      .9000      .0405 
-     .90     1.00     1.00     4.0777      .9000      .0304 
-     .90     1.00     1.25     4.8471      .9000      .0243 
-     .90     1.00     1.50     5.6165      .9000      .0203 
-     .90     2.00      .50     3.5388      .9000      .0608 
-     .90     2.00      .75     4.3083      .9000      .0405 
-     .90     2.00     1.00     5.0777      .9000      .0304 
-     .90     2.00     1.25     5.8471      .9000      .0243 
-     .90     2.00     1.50     6.6165      .9000      .0203 
-     .90     3.00      .50     4.5388      .9000      .0608 
-     .90     3.00      .75     5.3083      .9000      .0405 
-     .90     3.00     1.00     6.0777      .9000      .0304 
-     .90     3.00     1.25     6.8471      .9000      .0243 
-     .90     3.00     1.50     7.6165      .9000      .0203 
-     .90     4.00      .50     5.5388      .9000      .0608 
-     .90     4.00      .75     6.3083      .9000      .0405 
-     .90     4.00     1.00     7.0777      .9000      .0304 
-     .90     4.00     1.25     7.8471      .9000      .0243 
-     .90     4.00     1.50     8.6165      .9000      .0203 
-     .90     5.00      .50     6.5388      .9000      .0608 
-     .90     5.00      .75     7.3083      .9000      .0405 
-     .90     5.00     1.00     8.0777      .9000      .0304 
-     .90     5.00     1.25     8.8471      .9000      .0243 
-     .90     5.00     1.50     9.6165      .9000      .0203 
-     .99    -5.00      .50    10.9103      .9900      .0006 
-     .99    -5.00      .75    18.8654      .9900      .0004 
-     .99    -5.00     1.00    26.8205      .9900      .0003 
-     .99    -5.00     1.25    34.7756      .9900      .0003 
-     .99    -5.00     1.50    42.7308      .9900      .0002 
-     .99    -4.00      .50    11.9103      .9900      .0006 
-     .99    -4.00      .75    19.8654      .9900      .0004 
-     .99    -4.00     1.00    27.8205      .9900      .0003 
-     .99    -4.00     1.25    35.7756      .9900      .0003 
-     .99    -4.00     1.50    43.7308      .9900      .0002 
-     .99    -3.00      .50    12.9103      .9900      .0006 
-     .99    -3.00      .75    20.8654      .9900      .0004 
-     .99    -3.00     1.00    28.8205      .9900      .0003 
-     .99    -3.00     1.25    36.7756      .9900      .0003 
-     .99    -3.00     1.50    44.7308      .9900      .0002 
-     .99    -2.00      .50    13.9103      .9900      .0006 
-     .99    -2.00      .75    21.8654      .9900      .0004 
-     .99    -2.00     1.00    29.8205      .9900      .0003 
-     .99    -2.00     1.25    37.7756      .9900      .0003 
-     .99    -2.00     1.50    45.7308      .9900      .0002 
-     .99    -1.00      .50    14.9103      .9900      .0006 
-     .99    -1.00      .75    22.8654      .9900      .0004 
-     .99    -1.00     1.00    30.8205      .9900      .0003 
-     .99    -1.00     1.25    38.7756      .9900      .0003 
-     .99    -1.00     1.50    46.7308      .9900      .0002 
-     .99      .00      .50    15.9103      .9900      .0006 
-     .99      .00      .75    23.8654      .9900      .0004 
-     .99      .00     1.00    31.8205      .9900      .0003 
-     .99      .00     1.25    39.7756      .9900      .0003 
-     .99      .00     1.50    47.7308      .9900      .0002 
-     .99     1.00      .50    16.9103      .9900      .0006 
-     .99     1.00      .75    24.8654      .9900      .0004 
-     .99     1.00     1.00    32.8205      .9900      .0003 
-     .99     1.00     1.25    40.7756      .9900      .0003 
-     .99     1.00     1.50    48.7308      .9900      .0002 
-     .99     2.00      .50    17.9103      .9900      .0006 
-     .99     2.00      .75    25.8654      .9900      .0004 
-     .99     2.00     1.00    33.8205      .9900      .0003 
-     .99     2.00     1.25    41.7756      .9900      .0003 
-     .99     2.00     1.50    49.7308      .9900      .0002 
-     .99     3.00      .50    18.9103      .9900      .0006 
-     .99     3.00      .75    26.8654      .9900      .0004 
-     .99     3.00     1.00    34.8205      .9900      .0003 
-     .99     3.00     1.25    42.7756      .9900      .0003 
-     .99     3.00     1.50    50.7308      .9900      .0002 
-     .99     4.00      .50    19.9103      .9900      .0006 
-     .99     4.00      .75    27.8654      .9900      .0004 
-     .99     4.00     1.00    35.8205      .9900      .0003 
-     .99     4.00     1.25    43.7756      .9900      .0003 
-     .99     4.00     1.50    51.7308      .9900      .0002 
-     .99     5.00      .50    20.9103      .9900      .0006 
-     .99     5.00      .75    28.8654      .9900      .0004 
-     .99     5.00     1.00    36.8205      .9900      .0003 
-     .99     5.00     1.25    44.7756      .9900      .0003 
-     .99     5.00     1.50    52.7308      .9900      .0002 
diff --git a/tests/expressions/randist/chisq.out b/tests/expressions/randist/chisq.out
deleted file mode 100644 (file)
index 41f78d2..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-       P       df          x        cdf        pdf        sig 
-     .01     1.00      .0002      .0100    31.8277      .9900 
-     .01     2.00      .0201      .0100      .4950      .9900 
-     .01     5.00      .5543      .0100      .0416      .9900 
-     .01    10.00     2.5582      .0100      .0155      .9900 
-     .10     1.00      .0158      .1000     3.1498      .9000 
-     .10     2.00      .2107      .1000      .4500      .9000 
-     .10     5.00     1.6103      .1000      .1215      .9000 
-     .10    10.00     4.8652      .1000      .0641      .9000 
-     .20     1.00      .0642      .2000     1.5250      .8000 
-     .20     2.00      .4463      .2000      .4000      .8000 
-     .20     5.00     2.3425      .2000      .1478      .8000 
-     .20    10.00     6.1791      .2000      .0864      .8000 
-     .30     1.00      .1485      .3000      .9613      .7000 
-     .30     2.00      .7133      .3000      .3500      .7000 
-     .30     5.00     2.9999      .3000      .1542      .7000 
-     .30    10.00     7.2672      .3000      .0960      .7000 
-     .40     1.00      .2750      .4000      .6630      .6000 
-     .40     2.00     1.0217      .4000      .3000      .6000 
-     .40     5.00     3.6555      .4000      .1494      .6000 
-     .40    10.00     8.2955      .4000      .0974      .6000 
-     .50     1.00      .4549      .5000      .4711      .5000 
-     .50     2.00     1.3863      .5000      .2500      .5000 
-     .50     5.00     4.3515      .5000      .1370      .5000 
-     .50    10.00     9.3418      .5000      .0929      .5000 
-     .60     1.00      .7083      .6000      .3326      .4000 
-     .60     2.00     1.8326      .6000      .2000      .4000 
-     .60     5.00     5.1319      .6000      .1188      .4000 
-     .60    10.00    10.4732      .6000      .0833      .4000 
-     .70     1.00     1.0742      .7000      .2250      .3000 
-     .70     2.00     2.4079      .7000      .1500      .3000 
-     .70     5.00     6.0644      .7000      .0957      .3000 
-     .70    10.00    11.7807      .7000      .0694      .3000 
-     .80     1.00     1.6424      .8000      .1369      .2000 
-     .80     2.00     3.2189      .8000      .1000      .2000 
-     .80     5.00     7.2893      .8000      .0684      .2000 
-     .80    10.00    13.4420      .8000      .0512      .2000 
-     .90     1.00     2.7055      .9000      .0627      .1000 
-     .90     2.00     4.6052      .9000      .0500      .1000 
-     .90     5.00     9.2364      .9000      .0368      .1000 
-     .90    10.00    15.9872      .9000      .0287      .1000 
-     .99     1.00     6.6349      .9900      .0056      .0100 
-     .99     2.00     9.2103      .9900      .0050      .0100 
-     .99     5.00    15.0863      .9900      .0041      .0100 
-     .99    10.00    23.2093      .9900      .0034      .0100 
diff --git a/tests/expressions/randist/compare.pl b/tests/expressions/randist/compare.pl
deleted file mode 100755 (executable)
index 7b516f9..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-#! /usr/bin/perl -w
-
-use strict;
-use warnings 'all';
-
-my ($epsilon) = 1;
-
-open (EXPECTED, '<', $ARGV[0]) or die "$ARGV[0]: open: $!\n";
-open (ACTUAL, '<', $ARGV[1]) or die "$ARGV[1]: open: $!\n";
-
-my ($errors) = 0;
-LINE: for (;;) {
-    my $a = <EXPECTED>;
-    my $b = <ACTUAL>;
-
-    last if !defined $a && !defined $b;
-    die "$ARGV[0]:$.: unexpected end of file\n" if !defined $a;
-    die "$ARGV[1]:$.: unexpected end of file\n" if !defined $b;
-
-    my (@a) = split (' ', $a);
-    my (@b) = split (' ', $b);
-    die "$ARGV[1]:$.: contains ". scalar (@b) . " fields but should "
-      . "contain " . scalar (@a) . "\n"
-       if $#a != $#b;
-    foreach my $i (0...$#a) {
-       die "$ARGV[1]:$.: unexpected number of decimals\n"
-         if count_decimals ($a[$i]) != count_decimals ($b[$i]);
-
-       my ($an) = to_int ($a[$i]);
-       my ($bn) = to_int ($b[$i]);
-       if ($an ne $bn && ($bn < $an - $epsilon || $bn > $an + $epsilon)) {
-           $errors++;
-           if ($errors > 5) {
-               print "$ARGV[1]: Additional differences suppressed.\n";
-               last LINE;
-           }
-           print "$ARGV[1]:$.: Values differ from $ARGV[0]:$.\n";
-           print "Expected:\n", $a;
-           print "Calculated:\n", $b;
-       }
-    }
-}
-exit ($errors > 0);
-
-sub count_decimals {
-    my ($s) = @_;
-    return length (substr ($s, index ($s, '.')));
-}
-
-sub to_int {
-    local ($_) = @_;
-    s/\.//;
-    return $_;
-}
diff --git a/tests/expressions/randist/exp.out b/tests/expressions/randist/exp.out
deleted file mode 100644 (file)
index b0abeac..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-       P        a          x        cdf        pdf 
-     .01     1.00      .0101      .0100      .9900 
-     .01     2.00      .0050      .0100     1.9800 
-     .01     5.00      .0020      .0100     4.9500 
-     .01    10.00      .0010      .0100     9.9000 
-     .10     1.00      .1054      .1000      .9000 
-     .10     2.00      .0527      .1000     1.8000 
-     .10     5.00      .0211      .1000     4.5000 
-     .10    10.00      .0105      .1000     9.0000 
-     .20     1.00      .2231      .2000      .8000 
-     .20     2.00      .1116      .2000     1.6000 
-     .20     5.00      .0446      .2000     4.0000 
-     .20    10.00      .0223      .2000     8.0000 
-     .30     1.00      .3567      .3000      .7000 
-     .30     2.00      .1783      .3000     1.4000 
-     .30     5.00      .0713      .3000     3.5000 
-     .30    10.00      .0357      .3000     7.0000 
-     .40     1.00      .5108      .4000      .6000 
-     .40     2.00      .2554      .4000     1.2000 
-     .40     5.00      .1022      .4000     3.0000 
-     .40    10.00      .0511      .4000     6.0000 
-     .50     1.00      .6931      .5000      .5000 
-     .50     2.00      .3466      .5000     1.0000 
-     .50     5.00      .1386      .5000     2.5000 
-     .50    10.00      .0693      .5000     5.0000 
-     .60     1.00      .9163      .6000      .4000 
-     .60     2.00      .4581      .6000      .8000 
-     .60     5.00      .1833      .6000     2.0000 
-     .60    10.00      .0916      .6000     4.0000 
-     .70     1.00     1.2040      .7000      .3000 
-     .70     2.00      .6020      .7000      .6000 
-     .70     5.00      .2408      .7000     1.5000 
-     .70    10.00      .1204      .7000     3.0000 
-     .80     1.00     1.6094      .8000      .2000 
-     .80     2.00      .8047      .8000      .4000 
-     .80     5.00      .3219      .8000     1.0000 
-     .80    10.00      .1609      .8000     2.0000 
-     .90     1.00     2.3026      .9000      .1000 
-     .90     2.00     1.1513      .9000      .2000 
-     .90     5.00      .4605      .9000      .5000 
-     .90    10.00      .2303      .9000     1.0000 
-     .99     1.00     4.6052      .9900      .0100 
-     .99     2.00     2.3026      .9900      .0200 
-     .99     5.00      .9210      .9900      .0500 
-     .99    10.00      .4605      .9900      .1000 
diff --git a/tests/expressions/randist/f.out b/tests/expressions/randist/f.out
deleted file mode 100644 (file)
index 527d78c..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-       P      df1      df2          x        cdf        pdf 
-     .01     1.00     1.00      .0002      .0100    20.2576 
-     .01     1.00     2.00      .0002      .0100    24.9950 
-     .01     1.00     5.00      .0002      .0100    28.8162 
-     .01     1.00    10.00      .0002      .0100    30.2774 
-     .01     2.00     1.00      .0102      .0100      .9703 
-     .01     2.00     2.00      .0101      .0100      .9801 
-     .01     2.00     5.00      .0101      .0100      .9860 
-     .01     2.00    10.00      .0101      .0100      .9880 
-     .01     5.00     1.00      .0615      .0100      .3238 
-     .01     5.00     2.00      .0753      .0100      .2793 
-     .01     5.00     5.00      .0912      .0100      .2417 
-     .01     5.00    10.00      .0995      .0100      .2261 
-     .01    10.00     1.00      .0996      .0100      .2704 
-     .01    10.00     2.00      .1323      .0100      .2275 
-     .01    10.00     5.00      .1774      .0100      .1907 
-     .01    10.00    10.00      .2062      .0100      .1747 
-     .10     1.00     1.00      .0251      .1000     1.9605 
-     .10     1.00     2.00      .0202      .1000     2.4503 
-     .10     1.00     5.00      .0175      .1000     2.8421 
-     .10     1.00    10.00      .0166      .1000     2.9915 
-     .10     2.00     1.00      .1173      .1000      .7290 
-     .10     2.00     2.00      .1111      .1000      .8100 
-     .10     2.00     5.00      .1076      .1000      .8629 
-     .10     2.00    10.00      .1065      .1000      .8812 
-     .10     5.00     1.00      .2463      .1000      .5220 
-     .10     5.00     2.00      .2646      .1000      .5687 
-     .10     5.00     5.00      .2896      .1000      .5934 
-     .10     5.00    10.00      .3033      .1000      .6006 
-     .10    10.00     1.00      .3044      .1000      .4857 
-     .10    10.00     2.00      .3419      .1000      .5396 
-     .10    10.00     5.00      .3966      .1000      .5816 
-     .10    10.00    10.00      .4306      .1000      .6031 
-     .20     1.00     1.00      .1056      .2000      .8861 
-     .20     1.00     2.00      .0833      .2000     1.1520 
-     .20     1.00     5.00      .0714      .2000     1.3616 
-     .20     1.00    10.00      .0677      .2000     1.4410 
-     .20     2.00     1.00      .2812      .2000      .5120 
-     .20     2.00     2.00      .2500      .2000      .6400 
-     .20     2.00     5.00      .2334      .2000      .7317 
-     .20     2.00    10.00      .2282      .2000      .7651 
-     .20     5.00     1.00      .4591      .2000      .4124 
-     .20     5.00     2.00      .4426      .2000      .5362 
-     .20     5.00     5.00      .4489      .2000      .6397 
-     .20     5.00    10.00      .4563      .2000      .6842 
-     .20    10.00     1.00      .5311      .2000      .3893 
-     .20    10.00     2.00      .5267      .2000      .5225 
-     .20    10.00     5.00      .5547      .2000      .6584 
-     .20    10.00    10.00      .5775      .2000      .7343 
-     .30     1.00     1.00      .2596      .3000      .4960 
-     .30     1.00     2.00      .1978      .3000      .6901 
-     .30     1.00     5.00      .1667      .3000      .8428 
-     .30     1.00    10.00      .1573      .3000      .9004 
-     .30     2.00     1.00      .5204      .3000      .3430 
-     .30     2.00     2.00      .4286      .3000      .4900 
-     .30     2.00     5.00      .3834      .3000      .6069 
-     .30     2.00    10.00      .3697      .3000      .6518 
-     .30     5.00     1.00      .7486      .3000      .2880 
-     .30     5.00     2.00      .6466      .3000      .4433 
-     .30     5.00     5.00      .6094      .3000      .5984 
-     .30     5.00    10.00      .6026      .3000      .6729 
-     .30    10.00     1.00      .8370      .3000      .2732 
-     .30    10.00     2.00      .7346      .3000      .4370 
-     .30    10.00     5.00      .7085      .3000      .6313 
-     .30    10.00    10.00      .7112      .3000      .7487 
-     .40     1.00     1.00      .5279      .4000      .2868 
-     .40     1.00     2.00      .3810      .4000      .4410 
-     .40     1.00     5.00      .3130      .4000      .5656 
-     .40     1.00    10.00      .2933      .4000      .6129 
-     .40     2.00     1.00      .8889      .4000      .2160 
-     .40     2.00     2.00      .6667      .4000      .3600 
-     .40     2.00     5.00      .5668      .4000      .4891 
-     .40     2.00    10.00      .5378      .4000      .5417 
-     .40     5.00     1.00     1.1826      .4000      .1847 
-     .40     5.00     2.00      .9035      .4000      .3396 
-     .40     5.00     5.00      .7879      .4000      .5199 
-     .40     5.00    10.00      .7573      .4000      .6147 
-     .40    10.00     1.00     1.2941      .4000      .1755 
-     .40    10.00     2.00      .9944      .4000      .3368 
-     .40    10.00     5.00      .8763      .4000      .5572 
-     .40    10.00    10.00      .8484      .4000      .7011 
-     .50     1.00     1.00     1.0000      .5000      .1592 
-     .50     1.00     2.00      .6667      .5000      .2813 
-     .50     1.00     5.00      .5281      .5000      .3865 
-     .50     1.00    10.00      .4897      .5000      .4274 
-     .50     2.00     1.00     1.5000      .5000      .1250 
-     .50     2.00     2.00     1.0000      .5000      .2500 
-     .50     2.00     5.00      .7988      .5000      .3789 
-     .50     2.00    10.00      .7435      .5000      .4353 
-     .50     5.00     1.00     1.8937      .5000      .1078 
-     .50     5.00     2.00     1.2519      .5000      .2418 
-     .50     5.00     5.00     1.0000      .5000      .4244 
-     .50     5.00    10.00      .9319      .5000      .5295 
-     .50    10.00     1.00     2.0419      .5000      .1025 
-     .50    10.00     2.00     1.3450      .5000      .2406 
-     .50    10.00     5.00     1.0730      .5000      .4599 
-     .50    10.00    10.00     1.0000      .5000      .6152 
-     .60     1.00     1.00     1.8944      .6000      .0799 
-     .60     1.00     2.00     1.1250      .6000      .1707 
-     .60     1.00     5.00      .8456      .6000      .2583 
-     .60     1.00    10.00      .7727      .6000      .2939 
-     .60     2.00     1.00     2.6250      .6000      .0640 
-     .60     2.00     2.00     1.5000      .6000      .1600 
-     .60     2.00     5.00     1.1067      .6000      .2773 
-     .60     2.00    10.00     1.0056      .6000      .3330 
-     .60     5.00     1.00     3.1953      .6000      .0554 
-     .60     5.00     2.00     1.7644      .6000      .1571 
-     .60     5.00     5.00     1.2692      .6000      .3227 
-     .60     5.00    10.00     1.1412      .6000      .4278 
-     .60    10.00     1.00     3.4100      .6000      .0527 
-     .60    10.00     2.00     1.8593      .6000      .1567 
-     .60    10.00     5.00     1.3204      .6000      .3526 
-     .60    10.00    10.00     1.1787      .6000      .5047 
-     .70     1.00     1.00     3.8518      .7000      .0334 
-     .70     1.00     2.00     1.9216      .7000      .0929 
-     .70     1.00     5.00     1.3358      .7000      .1614 
-     .70     1.00    10.00     1.1948      .7000      .1914 
-     .70     2.00     1.00     5.0556      .7000      .0270 
-     .70     2.00     2.00     2.3333      .7000      .0900 
-     .70     2.00     5.00     1.5466      .7000      .1853 
-     .70     2.00    10.00     1.3613      .7000      .2358 
-     .70     5.00     1.00     6.0006      .7000      .0234 
-     .70     5.00     2.00     2.6084      .7000      .0892 
-     .70     5.00     5.00     1.6410      .7000      .2222 
-     .70     5.00    10.00     1.4114      .7000      .3169 
-     .70    10.00     1.00     6.3579      .7000      .0223 
-     .70    10.00     2.00     2.7049      .7000      .0891 
-     .70    10.00     5.00     1.6595      .7000      .2443 
-     .70    10.00    10.00     1.4061      .7000      .3787 
-     .80     1.00     1.00     9.4721      .8000      .0099 
-     .80     1.00     2.00     3.5556      .8000      .0405 
-     .80     1.00     5.00     2.1782      .8000      .0869 
-     .80     1.00    10.00     1.8829      .8000      .1098 
-     .80     2.00     1.00    12.0000      .8000      .0080 
-     .80     2.00     2.00     4.0000      .8000      .0400 
-     .80     2.00     5.00     2.2591      .8000      .1051 
-     .80     2.00    10.00     1.8986      .8000      .1450 
-     .80     5.00     1.00    14.0084      .8000      .0069 
-     .80     5.00     2.00     4.2844      .8000      .0399 
-     .80     5.00     5.00     2.2275      .8000      .1289 
-     .80     5.00    10.00     1.8027      .8000      .2026 
-     .80    10.00     1.00    14.7719      .8000      .0066 
-     .80    10.00     2.00     4.3822      .8000      .0398 
-     .80    10.00     5.00     2.1914      .8000      .1425 
-     .80    10.00    10.00     1.7316      .8000      .2449 
-     .90     1.00     1.00    39.8635      .9000      .0012 
-     .90     1.00     2.00     8.5263      .9000      .0100 
-     .90     1.00     5.00     4.0604      .9000      .0317 
-     .90     1.00    10.00     3.2850      .9000      .0450 
-     .90     2.00     1.00    49.5000      .9000      .0010 
-     .90     2.00     2.00     9.0000      .9000      .0100 
-     .90     2.00     5.00     3.7797      .9000      .0398 
-     .90     2.00    10.00     2.9245      .9000      .0631 
-     .90     5.00     1.00    57.2401      .9000      .0009 
-     .90     5.00     2.00     9.2926      .9000      .0100 
-     .90     5.00     5.00     3.4530      .9000      .0498 
-     .90     5.00    10.00     2.5216      .9000      .0915 
-     .90    10.00     1.00    60.1950      .9000      .0008 
-     .90    10.00     2.00     9.3916      .9000      .0100 
-     .90    10.00     5.00     3.2974      .9000      .0552 
-     .90    10.00    10.00     2.3226      .9000      .1118 
-     .99     1.00     1.00  4052.1807      .9900      .0000 
-     .99     1.00     2.00    98.5025      .9900      .0001 
-     .99     1.00     5.00    16.2582      .9900      .0012 
-     .99     1.00    10.00    10.0443      .9900      .0027 
-     .99     2.00     1.00  4999.5000      .9900      .0000 
-     .99     2.00     2.00    99.0000      .9900      .0001 
-     .99     2.00     5.00    13.2739      .9900      .0016 
-     .99     2.00    10.00     7.5594      .9900      .0040 
-     .99     5.00     1.00  5763.6496      .9900      .0000 
-     .99     5.00     2.00    99.2993      .9900      .0001 
-     .99     5.00     5.00    10.9670      .9900      .0020 
-     .99     5.00    10.00     5.6363      .9900      .0060 
-     .99    10.00     1.00  6055.8467      .9900      .0000 
-     .99    10.00     2.00    99.3992      .9900      .0001 
-     .99    10.00     5.00    10.0510      .9900      .0022 
-     .99    10.00    10.00     4.8491      .9900      .0074 
diff --git a/tests/expressions/randist/gamma.out b/tests/expressions/randist/gamma.out
deleted file mode 100644 (file)
index 0d9e77f..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-       P        a        b          x        cdf        pdf 
-     .01      .50   -10.00      .          .          .     
-     .01      .50    -5.00      .          .          .     
-     .01      .50      .00      .          .          .     
-     .01      .50     5.00      .0000      .0100   318.2766 
-     .01      .50    10.00      .0000      .0100   636.5531 
-     .01     1.00   -10.00      .          .          .     
-     .01     1.00    -5.00      .          .          .     
-     .01     1.00      .00      .          .          .     
-     .01     1.00     5.00      .0020      .0100     4.9500 
-     .01     1.00    10.00      .0010      .0100     9.9000 
-     .01     2.00   -10.00      .          .          .     
-     .01     2.00    -5.00      .          .          .     
-     .01     2.00      .00      .          .          .     
-     .01     2.00     5.00      .0297      .0100      .6402 
-     .01     2.00    10.00      .0149      .0100     1.2805 
-     .01     5.00   -10.00      .          .          .     
-     .01     5.00    -5.00      .          .          .     
-     .01     5.00      .00      .          .          .     
-     .01     5.00     5.00      .2558      .0100      .1552 
-     .01     5.00    10.00      .1279      .0100      .3104 
-     .10      .50   -10.00      .          .          .     
-     .10      .50    -5.00      .          .          .     
-     .10      .50      .00      .          .          .     
-     .10      .50     5.00      .0016      .1000    31.4977 
-     .10      .50    10.00      .0008      .1000    62.9955 
-     .10     1.00   -10.00      .          .          .     
-     .10     1.00    -5.00      .          .          .     
-     .10     1.00      .00      .          .          .     
-     .10     1.00     5.00      .0211      .1000     4.5000 
-     .10     1.00    10.00      .0105      .1000     9.0000 
-     .10     2.00   -10.00      .          .          .     
-     .10     2.00    -5.00      .          .          .     
-     .10     2.00      .00      .          .          .     
-     .10     2.00     5.00      .1064      .1000     1.5623 
-     .10     2.00    10.00      .0532      .1000     3.1246 
-     .10     5.00   -10.00      .          .          .     
-     .10     5.00    -5.00      .          .          .     
-     .10     5.00      .00      .          .          .     
-     .10     5.00     5.00      .4865      .1000      .6406 
-     .10     5.00    10.00      .2433      .1000     1.2812 
-     .20      .50   -10.00      .          .          .     
-     .20      .50    -5.00      .          .          .     
-     .20      .50      .00      .          .          .     
-     .20      .50     5.00      .0064      .2000    15.2495 
-     .20      .50    10.00      .0032      .2000    30.4991 
-     .20     1.00   -10.00      .          .          .     
-     .20     1.00    -5.00      .          .          .     
-     .20     1.00      .00      .          .          .     
-     .20     1.00     5.00      .0446      .2000     4.0000 
-     .20     1.00    10.00      .0223      .2000     8.0000 
-     .20     2.00   -10.00      .          .          .     
-     .20     2.00    -5.00      .          .          .     
-     .20     2.00      .00      .          .          .     
-     .20     2.00     5.00      .1649      .2000     1.8075 
-     .20     2.00    10.00      .0824      .2000     3.6150 
-     .20     5.00   -10.00      .          .          .     
-     .20     5.00    -5.00      .          .          .     
-     .20     5.00      .00      .          .          .     
-     .20     5.00     5.00      .6179      .2000      .8641 
-     .20     5.00    10.00      .3090      .2000     1.7282 
-     .30      .50   -10.00      .          .          .     
-     .30      .50    -5.00      .          .          .     
-     .30      .50      .00      .          .          .     
-     .30      .50     5.00      .0148      .3000     9.6128 
-     .30      .50    10.00      .0074      .3000    19.2255 
-     .30     1.00   -10.00      .          .          .     
-     .30     1.00    -5.00      .          .          .     
-     .30     1.00      .00      .          .          .     
-     .30     1.00     5.00      .0713      .3000     3.5000 
-     .30     1.00    10.00      .0357      .3000     7.0000 
-     .30     2.00   -10.00      .          .          .     
-     .30     2.00    -5.00      .          .          .     
-     .30     2.00      .00      .          .          .     
-     .30     2.00     5.00      .2195      .3000     1.8312 
-     .30     2.00    10.00      .1097      .3000     3.6625 
-     .30     5.00   -10.00      .          .          .     
-     .30     5.00    -5.00      .          .          .     
-     .30     5.00      .00      .          .          .     
-     .30     5.00     5.00      .7267      .3000      .9595 
-     .30     5.00    10.00      .3634      .3000     1.9190 
-     .40      .50   -10.00      .          .          .     
-     .40      .50    -5.00      .          .          .     
-     .40      .50      .00      .          .          .     
-     .40      .50     5.00      .0275      .4000     6.6303 
-     .40      .50    10.00      .0137      .4000    13.2606 
-     .40     1.00   -10.00      .          .          .     
-     .40     1.00    -5.00      .          .          .     
-     .40     1.00      .00      .          .          .     
-     .40     1.00     5.00      .1022      .4000     3.0000 
-     .40     1.00    10.00      .0511      .4000     6.0000 
-     .40     2.00   -10.00      .          .          .     
-     .40     2.00    -5.00      .          .          .     
-     .40     2.00      .00      .          .          .     
-     .40     2.00     5.00      .2753      .4000     1.7376 
-     .40     2.00    10.00      .1376      .4000     3.4752 
-     .40     5.00   -10.00      .          .          .     
-     .40     5.00    -5.00      .          .          .     
-     .40     5.00      .00      .          .          .     
-     .40     5.00     5.00      .8295      .4000      .9742 
-     .40     5.00    10.00      .4148      .4000     1.9485 
-     .50      .50   -10.00      .          .          .     
-     .50      .50    -5.00      .          .          .     
-     .50      .50      .00      .          .          .     
-     .50      .50     5.00      .0455      .5000     4.7114 
-     .50      .50    10.00      .0227      .5000     9.4227 
-     .50     1.00   -10.00      .          .          .     
-     .50     1.00    -5.00      .          .          .     
-     .50     1.00      .00      .          .          .     
-     .50     1.00     5.00      .1386      .5000     2.5000 
-     .50     1.00    10.00      .0693      .5000     5.0000 
-     .50     2.00   -10.00      .          .          .     
-     .50     2.00    -5.00      .          .          .     
-     .50     2.00      .00      .          .          .     
-     .50     2.00     5.00      .3357      .5000     1.5666 
-     .50     2.00    10.00      .1678      .5000     3.1332 
-     .50     5.00   -10.00      .          .          .     
-     .50     5.00    -5.00      .          .          .     
-     .50     5.00      .00      .          .          .     
-     .50     5.00     5.00      .9342      .5000      .9286 
-     .50     5.00    10.00      .4671      .5000     1.8571 
-     .60      .50   -10.00      .          .          .     
-     .60      .50    -5.00      .          .          .     
-     .60      .50      .00      .          .          .     
-     .60      .50     5.00      .0708      .6000     3.3265 
-     .60      .50    10.00      .0354      .6000     6.6529 
-     .60     1.00   -10.00      .          .          .     
-     .60     1.00    -5.00      .          .          .     
-     .60     1.00      .00      .          .          .     
-     .60     1.00     5.00      .1833      .6000     2.0000 
-     .60     1.00    10.00      .0916      .6000     4.0000 
-     .60     2.00   -10.00      .          .          .     
-     .60     2.00    -5.00      .          .          .     
-     .60     2.00      .00      .          .          .     
-     .60     2.00     5.00      .4045      .6000     1.3383 
-     .60     2.00    10.00      .2022      .6000     2.6765 
-     .60     5.00   -10.00      .          .          .     
-     .60     5.00    -5.00      .          .          .     
-     .60     5.00      .00      .          .          .     
-     .60     5.00     5.00     1.0473      .6000      .8332 
-     .60     5.00    10.00      .5237      .6000     1.6663 
-     .70      .50   -10.00      .          .          .     
-     .70      .50    -5.00      .          .          .     
-     .70      .50      .00      .          .          .     
-     .70      .50     5.00      .1074      .7000     2.2496 
-     .70      .50    10.00      .0537      .7000     4.4993 
-     .70     1.00   -10.00      .          .          .     
-     .70     1.00    -5.00      .          .          .     
-     .70     1.00      .00      .          .          .     
-     .70     1.00     5.00      .2408      .7000     1.5000 
-     .70     1.00    10.00      .1204      .7000     3.0000 
-     .70     2.00   -10.00      .          .          .     
-     .70     2.00    -5.00      .          .          .     
-     .70     2.00      .00      .          .          .     
-     .70     2.00     5.00      .4878      .7000     1.0639 
-     .70     2.00    10.00      .2439      .7000     2.1277 
-     .70     5.00   -10.00      .          .          .     
-     .70     5.00    -5.00      .          .          .     
-     .70     5.00      .00      .          .          .     
-     .70     5.00     5.00     1.1781      .7000      .6937 
-     .70     5.00    10.00      .5890      .7000     1.3874 
-     .80      .50   -10.00      .          .          .     
-     .80      .50    -5.00      .          .          .     
-     .80      .50      .00      .          .          .     
-     .80      .50     5.00      .1642      .8000     1.3694 
-     .80      .50    10.00      .0821      .8000     2.7388 
-     .80     1.00   -10.00      .          .          .     
-     .80     1.00    -5.00      .          .          .     
-     .80     1.00      .00      .          .          .     
-     .80     1.00     5.00      .3219      .8000     1.0000 
-     .80     1.00    10.00      .1609      .8000     2.0000 
-     .80     2.00   -10.00      .          .          .     
-     .80     2.00    -5.00      .          .          .     
-     .80     2.00      .00      .          .          .     
-     .80     2.00     5.00      .5989      .8000      .7496 
-     .80     2.00    10.00      .2994      .8000     1.4993 
-     .80     5.00   -10.00      .          .          .     
-     .80     5.00    -5.00      .          .          .     
-     .80     5.00      .00      .          .          .     
-     .80     5.00     5.00     1.3442      .8000      .5124 
-     .80     5.00    10.00      .6721      .8000     1.0248 
-     .90      .50   -10.00      .          .          .     
-     .90      .50    -5.00      .          .          .     
-     .90      .50      .00      .          .          .     
-     .90      .50     5.00      .2706      .9000      .6270 
-     .90      .50    10.00      .1353      .9000     1.2540 
-     .90     1.00   -10.00      .          .          .     
-     .90     1.00    -5.00      .          .          .     
-     .90     1.00      .00      .          .          .     
-     .90     1.00     5.00      .4605      .9000      .5000 
-     .90     1.00    10.00      .2303      .9000     1.0000 
-     .90     2.00   -10.00      .          .          .     
-     .90     2.00    -5.00      .          .          .     
-     .90     2.00      .00      .          .          .     
-     .90     2.00     5.00      .7779      .9000      .3977 
-     .90     2.00    10.00      .3890      .9000      .7955 
-     .90     5.00   -10.00      .          .          .     
-     .90     5.00    -5.00      .          .          .     
-     .90     5.00      .00      .          .          .     
-     .90     5.00     5.00     1.5987      .9000      .2872 
-     .90     5.00    10.00      .7994      .9000      .5744 
-     .99      .50   -10.00      .          .          .     
-     .99      .50    -5.00      .          .          .     
-     .99      .50      .00      .          .          .     
-     .99      .50     5.00      .6635      .9900      .0561 
-     .99      .50    10.00      .3317      .9900      .1123 
-     .99     1.00   -10.00      .          .          .     
-     .99     1.00    -5.00      .          .          .     
-     .99     1.00      .00      .          .          .     
-     .99     1.00     5.00      .9210      .9900      .0500 
-     .99     1.00    10.00      .4605      .9900      .1000 
-     .99     2.00   -10.00      .          .          .     
-     .99     2.00    -5.00      .          .          .     
-     .99     2.00      .00      .          .          .     
-     .99     2.00     5.00     1.3277      .9900      .0435 
-     .99     2.00    10.00      .6638      .9900      .0869 
-     .99     5.00   -10.00      .          .          .     
-     .99     5.00    -5.00      .          .          .     
-     .99     5.00      .00      .          .          .     
-     .99     5.00     5.00     2.3209      .9900      .0345 
-     .99     5.00    10.00     1.1605      .9900      .0689 
diff --git a/tests/expressions/randist/laplace.out b/tests/expressions/randist/laplace.out
deleted file mode 100644 (file)
index 95cb0fd..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-       P        a        b          x        cdf        pdf 
-     .01   -10.00      .50   -11.9560      .0100      .0200 
-     .01   -10.00     1.00   -13.9120      .0100      .0100 
-     .01   -10.00     2.00   -17.8240      .0100      .0050 
-     .01   -10.00     5.00   -29.5601      .0100      .0020 
-     .01    -5.00      .50    -6.9560      .0100      .0200 
-     .01    -5.00     1.00    -8.9120      .0100      .0100 
-     .01    -5.00     2.00   -12.8240      .0100      .0050 
-     .01    -5.00     5.00   -24.5601      .0100      .0020 
-     .01      .00      .50    -1.9560      .0100      .0200 
-     .01      .00     1.00    -3.9120      .0100      .0100 
-     .01      .00     2.00    -7.8240      .0100      .0050 
-     .01      .00     5.00   -19.5601      .0100      .0020 
-     .01     5.00      .50     3.0440      .0100      .0200 
-     .01     5.00     1.00     1.0880      .0100      .0100 
-     .01     5.00     2.00    -2.8240      .0100      .0050 
-     .01     5.00     5.00   -14.5601      .0100      .0020 
-     .01    10.00      .50     8.0440      .0100      .0200 
-     .01    10.00     1.00     6.0880      .0100      .0100 
-     .01    10.00     2.00     2.1760      .0100      .0050 
-     .01    10.00     5.00    -9.5601      .0100      .0020 
-     .10   -10.00      .50   -10.8047      .1000      .2000 
-     .10   -10.00     1.00   -11.6094      .1000      .1000 
-     .10   -10.00     2.00   -13.2189      .1000      .0500 
-     .10   -10.00     5.00   -18.0472      .1000      .0200 
-     .10    -5.00      .50    -5.8047      .1000      .2000 
-     .10    -5.00     1.00    -6.6094      .1000      .1000 
-     .10    -5.00     2.00    -8.2189      .1000      .0500 
-     .10    -5.00     5.00   -13.0472      .1000      .0200 
-     .10      .00      .50     -.8047      .1000      .2000 
-     .10      .00     1.00    -1.6094      .1000      .1000 
-     .10      .00     2.00    -3.2189      .1000      .0500 
-     .10      .00     5.00    -8.0472      .1000      .0200 
-     .10     5.00      .50     4.1953      .1000      .2000 
-     .10     5.00     1.00     3.3906      .1000      .1000 
-     .10     5.00     2.00     1.7811      .1000      .0500 
-     .10     5.00     5.00    -3.0472      .1000      .0200 
-     .10    10.00      .50     9.1953      .1000      .2000 
-     .10    10.00     1.00     8.3906      .1000      .1000 
-     .10    10.00     2.00     6.7811      .1000      .0500 
-     .10    10.00     5.00     1.9528      .1000      .0200 
-     .20   -10.00      .50   -10.4581      .2000      .4000 
-     .20   -10.00     1.00   -10.9163      .2000      .2000 
-     .20   -10.00     2.00   -11.8326      .2000      .1000 
-     .20   -10.00     5.00   -14.5815      .2000      .0400 
-     .20    -5.00      .50    -5.4581      .2000      .4000 
-     .20    -5.00     1.00    -5.9163      .2000      .2000 
-     .20    -5.00     2.00    -6.8326      .2000      .1000 
-     .20    -5.00     5.00    -9.5815      .2000      .0400 
-     .20      .00      .50     -.4581      .2000      .4000 
-     .20      .00     1.00     -.9163      .2000      .2000 
-     .20      .00     2.00    -1.8326      .2000      .1000 
-     .20      .00     5.00    -4.5815      .2000      .0400 
-     .20     5.00      .50     4.5419      .2000      .4000 
-     .20     5.00     1.00     4.0837      .2000      .2000 
-     .20     5.00     2.00     3.1674      .2000      .1000 
-     .20     5.00     5.00      .4185      .2000      .0400 
-     .20    10.00      .50     9.5419      .2000      .4000 
-     .20    10.00     1.00     9.0837      .2000      .2000 
-     .20    10.00     2.00     8.1674      .2000      .1000 
-     .20    10.00     5.00     5.4185      .2000      .0400 
-     .30   -10.00      .50   -10.2554      .3000      .6000 
-     .30   -10.00     1.00   -10.5108      .3000      .3000 
-     .30   -10.00     2.00   -11.0217      .3000      .1500 
-     .30   -10.00     5.00   -12.5541      .3000      .0600 
-     .30    -5.00      .50    -5.2554      .3000      .6000 
-     .30    -5.00     1.00    -5.5108      .3000      .3000 
-     .30    -5.00     2.00    -6.0217      .3000      .1500 
-     .30    -5.00     5.00    -7.5541      .3000      .0600 
-     .30      .00      .50     -.2554      .3000      .6000 
-     .30      .00     1.00     -.5108      .3000      .3000 
-     .30      .00     2.00    -1.0217      .3000      .1500 
-     .30      .00     5.00    -2.5541      .3000      .0600 
-     .30     5.00      .50     4.7446      .3000      .6000 
-     .30     5.00     1.00     4.4892      .3000      .3000 
-     .30     5.00     2.00     3.9783      .3000      .1500 
-     .30     5.00     5.00     2.4459      .3000      .0600 
-     .30    10.00      .50     9.7446      .3000      .6000 
-     .30    10.00     1.00     9.4892      .3000      .3000 
-     .30    10.00     2.00     8.9783      .3000      .1500 
-     .30    10.00     5.00     7.4459      .3000      .0600 
-     .40   -10.00      .50   -10.1116      .4000      .8000 
-     .40   -10.00     1.00   -10.2231      .4000      .4000 
-     .40   -10.00     2.00   -10.4463      .4000      .2000 
-     .40   -10.00     5.00   -11.1157      .4000      .0800 
-     .40    -5.00      .50    -5.1116      .4000      .8000 
-     .40    -5.00     1.00    -5.2231      .4000      .4000 
-     .40    -5.00     2.00    -5.4463      .4000      .2000 
-     .40    -5.00     5.00    -6.1157      .4000      .0800 
-     .40      .00      .50     -.1116      .4000      .8000 
-     .40      .00     1.00     -.2231      .4000      .4000 
-     .40      .00     2.00     -.4463      .4000      .2000 
-     .40      .00     5.00    -1.1157      .4000      .0800 
-     .40     5.00      .50     4.8884      .4000      .8000 
-     .40     5.00     1.00     4.7769      .4000      .4000 
-     .40     5.00     2.00     4.5537      .4000      .2000 
-     .40     5.00     5.00     3.8843      .4000      .0800 
-     .40    10.00      .50     9.8884      .4000      .8000 
-     .40    10.00     1.00     9.7769      .4000      .4000 
-     .40    10.00     2.00     9.5537      .4000      .2000 
-     .40    10.00     5.00     8.8843      .4000      .0800 
-     .50   -10.00      .50   -10.0000      .5000     1.0000 
-     .50   -10.00     1.00   -10.0000      .5000      .5000 
-     .50   -10.00     2.00   -10.0000      .5000      .2500 
-     .50   -10.00     5.00   -10.0000      .5000      .1000 
-     .50    -5.00      .50    -5.0000      .5000     1.0000 
-     .50    -5.00     1.00    -5.0000      .5000      .5000 
-     .50    -5.00     2.00    -5.0000      .5000      .2500 
-     .50    -5.00     5.00    -5.0000      .5000      .1000 
-     .50      .00      .50      .0000      .5000     1.0000 
-     .50      .00     1.00      .0000      .5000      .5000 
-     .50      .00     2.00      .0000      .5000      .2500 
-     .50      .00     5.00      .0000      .5000      .1000 
-     .50     5.00      .50     5.0000      .5000     1.0000 
-     .50     5.00     1.00     5.0000      .5000      .5000 
-     .50     5.00     2.00     5.0000      .5000      .2500 
-     .50     5.00     5.00     5.0000      .5000      .1000 
-     .50    10.00      .50    10.0000      .5000     1.0000 
-     .50    10.00     1.00    10.0000      .5000      .5000 
-     .50    10.00     2.00    10.0000      .5000      .2500 
-     .50    10.00     5.00    10.0000      .5000      .1000 
-     .60   -10.00      .50    -9.8884      .6000      .8000 
-     .60   -10.00     1.00    -9.7769      .6000      .4000 
-     .60   -10.00     2.00    -9.5537      .6000      .2000 
-     .60   -10.00     5.00    -8.8843      .6000      .0800 
-     .60    -5.00      .50    -4.8884      .6000      .8000 
-     .60    -5.00     1.00    -4.7769      .6000      .4000 
-     .60    -5.00     2.00    -4.5537      .6000      .2000 
-     .60    -5.00     5.00    -3.8843      .6000      .0800 
-     .60      .00      .50      .1116      .6000      .8000 
-     .60      .00     1.00      .2231      .6000      .4000 
-     .60      .00     2.00      .4463      .6000      .2000 
-     .60      .00     5.00     1.1157      .6000      .0800 
-     .60     5.00      .50     5.1116      .6000      .8000 
-     .60     5.00     1.00     5.2231      .6000      .4000 
-     .60     5.00     2.00     5.4463      .6000      .2000 
-     .60     5.00     5.00     6.1157      .6000      .0800 
-     .60    10.00      .50    10.1116      .6000      .8000 
-     .60    10.00     1.00    10.2231      .6000      .4000 
-     .60    10.00     2.00    10.4463      .6000      .2000 
-     .60    10.00     5.00    11.1157      .6000      .0800 
-     .70   -10.00      .50    -9.7446      .7000      .6000 
-     .70   -10.00     1.00    -9.4892      .7000      .3000 
-     .70   -10.00     2.00    -8.9783      .7000      .1500 
-     .70   -10.00     5.00    -7.4459      .7000      .0600 
-     .70    -5.00      .50    -4.7446      .7000      .6000 
-     .70    -5.00     1.00    -4.4892      .7000      .3000 
-     .70    -5.00     2.00    -3.9783      .7000      .1500 
-     .70    -5.00     5.00    -2.4459      .7000      .0600 
-     .70      .00      .50      .2554      .7000      .6000 
-     .70      .00     1.00      .5108      .7000      .3000 
-     .70      .00     2.00     1.0217      .7000      .1500 
-     .70      .00     5.00     2.5541      .7000      .0600 
-     .70     5.00      .50     5.2554      .7000      .6000 
-     .70     5.00     1.00     5.5108      .7000      .3000 
-     .70     5.00     2.00     6.0217      .7000      .1500 
-     .70     5.00     5.00     7.5541      .7000      .0600 
-     .70    10.00      .50    10.2554      .7000      .6000 
-     .70    10.00     1.00    10.5108      .7000      .3000 
-     .70    10.00     2.00    11.0217      .7000      .1500 
-     .70    10.00     5.00    12.5541      .7000      .0600 
-     .80   -10.00      .50    -9.5419      .8000      .4000 
-     .80   -10.00     1.00    -9.0837      .8000      .2000 
-     .80   -10.00     2.00    -8.1674      .8000      .1000 
-     .80   -10.00     5.00    -5.4185      .8000      .0400 
-     .80    -5.00      .50    -4.5419      .8000      .4000 
-     .80    -5.00     1.00    -4.0837      .8000      .2000 
-     .80    -5.00     2.00    -3.1674      .8000      .1000 
-     .80    -5.00     5.00     -.4185      .8000      .0400 
-     .80      .00      .50      .4581      .8000      .4000 
-     .80      .00     1.00      .9163      .8000      .2000 
-     .80      .00     2.00     1.8326      .8000      .1000 
-     .80      .00     5.00     4.5815      .8000      .0400 
-     .80     5.00      .50     5.4581      .8000      .4000 
-     .80     5.00     1.00     5.9163      .8000      .2000 
-     .80     5.00     2.00     6.8326      .8000      .1000 
-     .80     5.00     5.00     9.5815      .8000      .0400 
-     .80    10.00      .50    10.4581      .8000      .4000 
-     .80    10.00     1.00    10.9163      .8000      .2000 
-     .80    10.00     2.00    11.8326      .8000      .1000 
-     .80    10.00     5.00    14.5815      .8000      .0400 
-     .90   -10.00      .50    -9.1953      .9000      .2000 
-     .90   -10.00     1.00    -8.3906      .9000      .1000 
-     .90   -10.00     2.00    -6.7811      .9000      .0500 
-     .90   -10.00     5.00    -1.9528      .9000      .0200 
-     .90    -5.00      .50    -4.1953      .9000      .2000 
-     .90    -5.00     1.00    -3.3906      .9000      .1000 
-     .90    -5.00     2.00    -1.7811      .9000      .0500 
-     .90    -5.00     5.00     3.0472      .9000      .0200 
-     .90      .00      .50      .8047      .9000      .2000 
-     .90      .00     1.00     1.6094      .9000      .1000 
-     .90      .00     2.00     3.2189      .9000      .0500 
-     .90      .00     5.00     8.0472      .9000      .0200 
-     .90     5.00      .50     5.8047      .9000      .2000 
-     .90     5.00     1.00     6.6094      .9000      .1000 
-     .90     5.00     2.00     8.2189      .9000      .0500 
-     .90     5.00     5.00    13.0472      .9000      .0200 
-     .90    10.00      .50    10.8047      .9000      .2000 
-     .90    10.00     1.00    11.6094      .9000      .1000 
-     .90    10.00     2.00    13.2189      .9000      .0500 
-     .90    10.00     5.00    18.0472      .9000      .0200 
-     .99   -10.00      .50    -8.0440      .9900      .0200 
-     .99   -10.00     1.00    -6.0880      .9900      .0100 
-     .99   -10.00     2.00    -2.1760      .9900      .0050 
-     .99   -10.00     5.00     9.5601      .9900      .0020 
-     .99    -5.00      .50    -3.0440      .9900      .0200 
-     .99    -5.00     1.00    -1.0880      .9900      .0100 
-     .99    -5.00     2.00     2.8240      .9900      .0050 
-     .99    -5.00     5.00    14.5601      .9900      .0020 
-     .99      .00      .50     1.9560      .9900      .0200 
-     .99      .00     1.00     3.9120      .9900      .0100 
-     .99      .00     2.00     7.8240      .9900      .0050 
-     .99      .00     5.00    19.5601      .9900      .0020 
-     .99     5.00      .50     6.9560      .9900      .0200 
-     .99     5.00     1.00     8.9120      .9900      .0100 
-     .99     5.00     2.00    12.8240      .9900      .0050 
-     .99     5.00     5.00    24.5601      .9900      .0020 
-     .99    10.00      .50    11.9560      .9900      .0200 
-     .99    10.00     1.00    13.9120      .9900      .0100 
-     .99    10.00     2.00    17.8240      .9900      .0050 
-     .99    10.00     5.00    29.5601      .9900      .0020 
diff --git a/tests/expressions/randist/lnormal.out b/tests/expressions/randist/lnormal.out
deleted file mode 100644 (file)
index bfd37a3..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-       P        z        s          x        cdf        pdf 
-     .01      .50      .50      .1562      .0100      .3412 
-     .01      .50     1.00      .0488      .0100      .5459 
-     .01      .50     2.00      .0048      .0100     2.7949 
-     .01      .50     5.00      .0000      .0100  1200.5834 
-     .01     1.00      .50      .3125      .0100      .1706 
-     .01     1.00     1.00      .0977      .0100      .2729 
-     .01     1.00     2.00      .0095      .0100     1.3975 
-     .01     1.00     5.00      .0000      .0100   600.2917 
-     .01     2.00      .50      .6250      .0100      .0853 
-     .01     2.00     1.00      .1953      .0100      .1365 
-     .01     2.00     2.00      .0191      .0100      .6987 
-     .01     2.00     5.00      .0000      .0100   300.1459 
-     .01     5.00      .50     1.5625      .0100      .0341 
-     .01     5.00     1.00      .4883      .0100      .0546 
-     .01     5.00     2.00      .0477      .0100      .2795 
-     .01     5.00     5.00      .0000      .0100   120.0583 
-     .10      .50      .50      .2634      .1000     1.3324 
-     .10      .50     1.00      .1388      .1000     1.2644 
-     .10      .50     2.00      .0385      .1000     2.2773 
-     .10      .50     5.00      .0008      .1000    42.5782 
-     .10     1.00      .50      .5269      .1000      .6662 
-     .10     1.00     1.00      .2776      .1000      .6322 
-     .10     1.00     2.00      .0771      .1000     1.1386 
-     .10     1.00     5.00      .0016      .1000    21.2891 
-     .10     2.00      .50     1.0538      .1000      .3331 
-     .10     2.00     1.00      .5552      .1000      .3161 
-     .10     2.00     2.00      .1541      .1000      .5693 
-     .10     2.00     5.00      .0033      .1000    10.6445 
-     .10     5.00      .50     2.6344      .1000      .1332 
-     .10     5.00     1.00     1.3880      .1000      .1264 
-     .10     5.00     2.00      .3853      .1000      .2277 
-     .10     5.00     5.00      .0082      .1000     4.2578 
-     .20      .50      .50      .3283      .2000     1.7057 
-     .20      .50     1.00      .2155      .2000     1.2991 
-     .20      .50     2.00      .0929      .2000     1.5070 
-     .20      .50     5.00      .0074      .2000     7.5286 
-     .20     1.00      .50      .6565      .2000      .8529 
-     .20     1.00     1.00      .4310      .2000      .6495 
-     .20     1.00     2.00      .1858      .2000      .7535 
-     .20     1.00     5.00      .0149      .2000     3.7643 
-     .20     2.00      .50     1.3130      .2000      .4264 
-     .20     2.00     1.00      .8620      .2000      .3248 
-     .20     2.00     2.00      .3715      .2000      .3768 
-     .20     2.00     5.00      .0297      .2000     1.8822 
-     .20     5.00      .50     3.2826      .2000      .1706 
-     .20     5.00     1.00     2.1551      .2000      .1299 
-     .20     5.00     2.00      .9289      .2000      .1507 
-     .20     5.00     5.00      .0744      .2000      .7529 
-     .30      .50      .50      .3847      .3000     1.8077 
-     .30      .50     1.00      .2960      .3000     1.1748 
-     .30      .50     2.00      .1752      .3000      .9924 
-     .30      .50     5.00      .0363      .3000     1.9142 
-     .30     1.00      .50      .7694      .3000      .9039 
-     .30     1.00     1.00      .5919      .3000      .5874 
-     .30     1.00     2.00      .3504      .3000      .4962 
-     .30     1.00     5.00      .0727      .3000      .9571 
-     .30     2.00      .50     1.5387      .3000      .4519 
-     .30     2.00     1.00     1.1838      .3000      .2937 
-     .30     2.00     2.00      .7007      .3000      .2481 
-     .30     2.00     5.00      .1453      .3000      .4785 
-     .30     5.00      .50     3.8468      .3000      .1808 
-     .30     5.00     1.00     2.9596      .3000      .1175 
-     .30     5.00     2.00     1.7518      .3000      .0992 
-     .30     5.00     5.00      .3633      .3000      .1914 
-     .40      .50      .50      .4405      .4000     1.7541 
-     .40      .50     1.00      .3881      .4000      .9955 
-     .40      .50     2.00      .3012      .4000      .6412 
-     .40      .50     5.00      .1409      .4000      .5485 
-     .40     1.00      .50      .8810      .4000      .8770 
-     .40     1.00     1.00      .7762      .4000      .4977 
-     .40     1.00     2.00      .6025      .4000      .3206 
-     .40     1.00     5.00      .2817      .4000      .2742 
-     .40     2.00      .50     1.7620      .4000      .4385 
-     .40     2.00     1.00     1.5524      .4000      .2489 
-     .40     2.00     2.00     1.2050      .4000      .1603 
-     .40     2.00     5.00      .5635      .4000      .1371 
-     .40     5.00      .50     4.4051      .4000      .1754 
-     .40     5.00     1.00     3.8810      .4000      .0995 
-     .40     5.00     2.00     3.0124      .4000      .0641 
-     .40     5.00     5.00     1.4087      .4000      .0548 
-     .50      .50      .50      .5000      .5000     1.5958 
-     .50      .50     1.00      .5000      .5000      .7979 
-     .50      .50     2.00      .5000      .5000      .3989 
-     .50      .50     5.00      .5000      .5000      .1596 
-     .50     1.00      .50     1.0000      .5000      .7979 
-     .50     1.00     1.00     1.0000      .5000      .3989 
-     .50     1.00     2.00     1.0000      .5000      .1995 
-     .50     1.00     5.00     1.0000      .5000      .0798 
-     .50     2.00      .50     2.0000      .5000      .3989 
-     .50     2.00     1.00     2.0000      .5000      .1995 
-     .50     2.00     2.00     2.0000      .5000      .0997 
-     .50     2.00     5.00     2.0000      .5000      .0399 
-     .50     5.00      .50     5.0000      .5000      .1596 
-     .50     5.00     1.00     5.0000      .5000      .0798 
-     .50     5.00     2.00     5.0000      .5000      .0399 
-     .50     5.00     5.00     5.0000      .5000      .0160 
-     .60      .50      .50      .5675      .6000     1.3615 
-     .60      .50     1.00      .6442      .6000      .5998 
-     .60      .50     2.00      .8299      .6000      .2328 
-     .60      .50     5.00     1.7746      .6000      .0435 
-     .60     1.00      .50     1.1350      .6000      .6808 
-     .60     1.00     1.00     1.2883      .6000      .2999 
-     .60     1.00     2.00     1.6598      .6000      .1164 
-     .60     1.00     5.00     3.5492      .6000      .0218 
-     .60     2.00      .50     2.2701      .6000      .3404 
-     .60     2.00     1.00     2.5767      .6000      .1499 
-     .60     2.00     2.00     3.3196      .6000      .0582 
-     .60     2.00     5.00     7.0985      .6000      .0109 
-     .60     5.00      .50     5.6752      .6000      .1362 
-     .60     5.00     1.00     6.4417      .6000      .0600 
-     .60     5.00     2.00     8.2990      .6000      .0233 
-     .60     5.00     5.00    17.7462      .6000      .0044 
-     .70      .50      .50      .6499      .7000     1.0700 
-     .70      .50     1.00      .8447      .7000      .4116 
-     .70      .50     2.00     1.4271      .7000      .1218 
-     .70      .50     5.00     6.8816      .7000      .0101 
-     .70     1.00      .50     1.2998      .7000      .5350 
-     .70     1.00     1.00     1.6894      .7000      .2058 
-     .70     1.00     2.00     2.8542      .7000      .0609 
-     .70     1.00     5.00    13.7633      .7000      .0051 
-     .70     2.00      .50     2.5996      .7000      .2675 
-     .70     2.00     1.00     3.3789      .7000      .1029 
-     .70     2.00     2.00     5.7085      .7000      .0305 
-     .70     2.00     5.00    27.5265      .7000      .0025 
-     .70     5.00      .50     6.4989      .7000      .1070 
-     .70     5.00     1.00     8.4472      .7000      .0412 
-     .70     5.00     2.00    14.2711      .7000      .0122 
-     .70     5.00     5.00    68.8163      .7000      .0010 
-     .80      .50      .50      .7616      .8000      .7352 
-     .80      .50     1.00     1.1601      .8000      .2413 
-     .80      .50     2.00     2.6915      .8000      .0520 
-     .80      .50     5.00    33.6145      .8000      .0017 
-     .80     1.00      .50     1.5232      .8000      .3676 
-     .80     1.00     1.00     2.3201      .8000      .1207 
-     .80     1.00     2.00     5.3830      .8000      .0260 
-     .80     1.00     5.00    67.2291      .8000      .0008 
-     .80     2.00      .50     3.0464      .8000      .1838 
-     .80     2.00     1.00     4.6403      .8000      .0603 
-     .80     2.00     2.00    10.7660      .8000      .0130 
-     .80     2.00     5.00   134.4582      .8000      .0004 
-     .80     5.00      .50     7.6160      .8000      .0735 
-     .80     5.00     1.00    11.6006      .8000      .0241 
-     .80     5.00     2.00    26.9149      .8000      .0052 
-     .80     5.00     5.00   336.1455      .8000      .0002 
-     .90      .50      .50      .9490      .9000      .3699 
-     .90      .50     1.00     1.8011      .9000      .0974 
-     .90      .50     2.00     6.4880      .9000      .0135 
-     .90      .50     5.00   303.2661      .9000      .0001 
-     .90     1.00      .50     1.8980      .9000      .1849 
-     .90     1.00     1.00     3.6022      .9000      .0487 
-     .90     1.00     2.00    12.9760      .9000      .0068 
-     .90     1.00     5.00   606.5322      .9000      .0001 
-     .90     2.00      .50     3.7959      .9000      .0925 
-     .90     2.00     1.00     7.2044      .9000      .0244 
-     .90     2.00     2.00    25.9520      .9000      .0034 
-     .90     2.00     5.00  1213.0644      .9000      .0000 
-     .90     5.00      .50     9.4898      .9000      .0370 
-     .90     5.00     1.00    18.0111      .9000      .0097 
-     .90     5.00     2.00    64.8801      .9000      .0014 
-     .90     5.00     5.00  3032.6610      .9000      .0000 
-     .99      .50      .50     1.6000      .9900      .0333 
-     .99      .50     1.00     5.1202      .9900      .0052 
-     .99      .50     2.00    52.4337      .9900      .0003 
-     .99      .50     5.00 56308.0163      .9900      .0000 
-     .99     1.00      .50     3.2001      .9900      .0167 
-     .99     1.00     1.00    10.2405      .9900      .0026 
-     .99     1.00     2.00   104.8673      .9900      .0001 
-     .99     1.00     5.00 112616.033      .9900      .0000 
-     .99     2.00      .50     6.4001      .9900      .0083 
-     .99     2.00     1.00    20.4809      .9900      .0013 
-     .99     2.00     2.00   209.7346      .9900      .0001 
-     .99     2.00     5.00 225232.065      .9900      .0000 
-     .99     5.00      .50    16.0004      .9900      .0033 
-     .99     5.00     1.00    51.2024      .9900      .0005 
-     .99     5.00     2.00   524.3365      .9900      .0000 
-     .99     5.00     5.00 563080.163      .9900      .0000 
diff --git a/tests/expressions/randist/logistic.out b/tests/expressions/randist/logistic.out
deleted file mode 100644 (file)
index d2b5d6e..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-       P        a        b          x        cdf        pdf 
-     .01   -10.00      .50   -12.2976      .0100      .0198 
-     .01   -10.00     1.00   -14.5951      .0100      .0099 
-     .01   -10.00     2.00   -19.1902      .0100      .0049 
-     .01   -10.00     5.00   -32.9756      .0100      .0020 
-     .01    -5.00      .50    -7.2976      .0100      .0198 
-     .01    -5.00     1.00    -9.5951      .0100      .0099 
-     .01    -5.00     2.00   -14.1902      .0100      .0050 
-     .01    -5.00     5.00   -27.9756      .0100      .0020 
-     .01      .00      .50    -2.2976      .0100      .0198 
-     .01      .00     1.00    -4.5951      .0100      .0099 
-     .01      .00     2.00    -9.1902      .0100      .0050 
-     .01      .00     5.00   -22.9756      .0100      .0020 
-     .01     5.00      .50     2.7024      .0100      .0198 
-     .01     5.00     1.00      .4049      .0100      .0099 
-     .01     5.00     2.00    -4.1902      .0100      .0050 
-     .01     5.00     5.00   -17.9756      .0100      .0020 
-     .01    10.00      .50     7.7024      .0100      .0198 
-     .01    10.00     1.00     5.4049      .0100      .0099 
-     .01    10.00     2.00      .8098      .0100      .0050 
-     .01    10.00     5.00   -12.9756      .0100      .0020 
-     .10   -10.00      .50   -11.0986      .1000      .1800 
-     .10   -10.00     1.00   -12.1972      .1000      .0900 
-     .10   -10.00     2.00   -14.3944      .1000      .0450 
-     .10   -10.00     5.00   -20.9861      .1000      .0180 
-     .10    -5.00      .50    -6.0986      .1000      .1800 
-     .10    -5.00     1.00    -7.1972      .1000      .0900 
-     .10    -5.00     2.00    -9.3944      .1000      .0450 
-     .10    -5.00     5.00   -15.9861      .1000      .0180 
-     .10      .00      .50    -1.0986      .1000      .1800 
-     .10      .00     1.00    -2.1972      .1000      .0900 
-     .10      .00     2.00    -4.3944      .1000      .0450 
-     .10      .00     5.00   -10.9861      .1000      .0180 
-     .10     5.00      .50     3.9014      .1000      .1800 
-     .10     5.00     1.00     2.8028      .1000      .0900 
-     .10     5.00     2.00      .6056      .1000      .0450 
-     .10     5.00     5.00    -5.9861      .1000      .0180 
-     .10    10.00      .50     8.9014      .1000      .1800 
-     .10    10.00     1.00     7.8028      .1000      .0900 
-     .10    10.00     2.00     5.6056      .1000      .0450 
-     .10    10.00     5.00     -.9861      .1000      .0180 
-     .20   -10.00      .50   -10.6931      .2000      .3200 
-     .20   -10.00     1.00   -11.3863      .2000      .1600 
-     .20   -10.00     2.00   -12.7726      .2000      .0800 
-     .20   -10.00     5.00   -16.9315      .2000      .0320 
-     .20    -5.00      .50    -5.6931      .2000      .3200 
-     .20    -5.00     1.00    -6.3863      .2000      .1600 
-     .20    -5.00     2.00    -7.7726      .2000      .0800 
-     .20    -5.00     5.00   -11.9315      .2000      .0320 
-     .20      .00      .50     -.6931      .2000      .3200 
-     .20      .00     1.00    -1.3863      .2000      .1600 
-     .20      .00     2.00    -2.7726      .2000      .0800 
-     .20      .00     5.00    -6.9315      .2000      .0320 
-     .20     5.00      .50     4.3069      .2000      .3200 
-     .20     5.00     1.00     3.6137      .2000      .1600 
-     .20     5.00     2.00     2.2274      .2000      .0800 
-     .20     5.00     5.00    -1.9315      .2000      .0320 
-     .20    10.00      .50     9.3069      .2000      .3200 
-     .20    10.00     1.00     8.6137      .2000      .1600 
-     .20    10.00     2.00     7.2274      .2000      .0800 
-     .20    10.00     5.00     3.0685      .2000      .0320 
-     .30   -10.00      .50   -10.4236      .3000      .4200 
-     .30   -10.00     1.00   -10.8473      .3000      .2100 
-     .30   -10.00     2.00   -11.6946      .3000      .1050 
-     .30   -10.00     5.00   -14.2365      .3000      .0420 
-     .30    -5.00      .50    -5.4236      .3000      .4200 
-     .30    -5.00     1.00    -5.8473      .3000      .2100 
-     .30    -5.00     2.00    -6.6946      .3000      .1050 
-     .30    -5.00     5.00    -9.2365      .3000      .0420 
-     .30      .00      .50     -.4236      .3000      .4200 
-     .30      .00     1.00     -.8473      .3000      .2100 
-     .30      .00     2.00    -1.6946      .3000      .1050 
-     .30      .00     5.00    -4.2365      .3000      .0420 
-     .30     5.00      .50     4.5764      .3000      .4200 
-     .30     5.00     1.00     4.1527      .3000      .2100 
-     .30     5.00     2.00     3.3054      .3000      .1050 
-     .30     5.00     5.00      .7635      .3000      .0420 
-     .30    10.00      .50     9.5764      .3000      .4200 
-     .30    10.00     1.00     9.1527      .3000      .2100 
-     .30    10.00     2.00     8.3054      .3000      .1050 
-     .30    10.00     5.00     5.7635      .3000      .0420 
-     .40   -10.00      .50   -10.2027      .4000      .4800 
-     .40   -10.00     1.00   -10.4055      .4000      .2400 
-     .40   -10.00     2.00   -10.8109      .4000      .1200 
-     .40   -10.00     5.00   -12.0273      .4000      .0480 
-     .40    -5.00      .50    -5.2027      .4000      .4800 
-     .40    -5.00     1.00    -5.4055      .4000      .2400 
-     .40    -5.00     2.00    -5.8109      .4000      .1200 
-     .40    -5.00     5.00    -7.0273      .4000      .0480 
-     .40      .00      .50     -.2027      .4000      .4800 
-     .40      .00     1.00     -.4055      .4000      .2400 
-     .40      .00     2.00     -.8109      .4000      .1200 
-     .40      .00     5.00    -2.0273      .4000      .0480 
-     .40     5.00      .50     4.7973      .4000      .4800 
-     .40     5.00     1.00     4.5945      .4000      .2400 
-     .40     5.00     2.00     4.1891      .4000      .1200 
-     .40     5.00     5.00     2.9727      .4000      .0480 
-     .40    10.00      .50     9.7973      .4000      .4800 
-     .40    10.00     1.00     9.5945      .4000      .2400 
-     .40    10.00     2.00     9.1891      .4000      .1200 
-     .40    10.00     5.00     7.9727      .4000      .0480 
-     .50   -10.00      .50   -10.0000      .5000      .5000 
-     .50   -10.00     1.00   -10.0000      .5000      .2500 
-     .50   -10.00     2.00   -10.0000      .5000      .1250 
-     .50   -10.00     5.00   -10.0000      .5000      .0500 
-     .50    -5.00      .50    -5.0000      .5000      .5000 
-     .50    -5.00     1.00    -5.0000      .5000      .2500 
-     .50    -5.00     2.00    -5.0000      .5000      .1250 
-     .50    -5.00     5.00    -5.0000      .5000      .0500 
-     .50      .00      .50      .0000      .5000      .5000 
-     .50      .00     1.00      .0000      .5000      .2500 
-     .50      .00     2.00      .0000      .5000      .1250 
-     .50      .00     5.00      .0000      .5000      .0500 
-     .50     5.00      .50     5.0000      .5000      .5000 
-     .50     5.00     1.00     5.0000      .5000      .2500 
-     .50     5.00     2.00     5.0000      .5000      .1250 
-     .50     5.00     5.00     5.0000      .5000      .0500 
-     .50    10.00      .50    10.0000      .5000      .5000 
-     .50    10.00     1.00    10.0000      .5000      .2500 
-     .50    10.00     2.00    10.0000      .5000      .1250 
-     .50    10.00     5.00    10.0000      .5000      .0500 
-     .60   -10.00      .50    -9.7973      .6000      .4800 
-     .60   -10.00     1.00    -9.5945      .6000      .2400 
-     .60   -10.00     2.00    -9.1891      .6000      .1200 
-     .60   -10.00     5.00    -7.9727      .6000      .0480 
-     .60    -5.00      .50    -4.7973      .6000      .4800 
-     .60    -5.00     1.00    -4.5945      .6000      .2400 
-     .60    -5.00     2.00    -4.1891      .6000      .1200 
-     .60    -5.00     5.00    -2.9727      .6000      .0480 
-     .60      .00      .50      .2027      .6000      .4800 
-     .60      .00     1.00      .4055      .6000      .2400 
-     .60      .00     2.00      .8109      .6000      .1200 
-     .60      .00     5.00     2.0273      .6000      .0480 
-     .60     5.00      .50     5.2027      .6000      .4800 
-     .60     5.00     1.00     5.4055      .6000      .2400 
-     .60     5.00     2.00     5.8109      .6000      .1200 
-     .60     5.00     5.00     7.0273      .6000      .0480 
-     .60    10.00      .50    10.2027      .6000      .4800 
-     .60    10.00     1.00    10.4055      .6000      .2400 
-     .60    10.00     2.00    10.8109      .6000      .1200 
-     .60    10.00     5.00    12.0273      .6000      .0480 
-     .70   -10.00      .50    -9.5764      .7000      .4200 
-     .70   -10.00     1.00    -9.1527      .7000      .2100 
-     .70   -10.00     2.00    -8.3054      .7000      .1050 
-     .70   -10.00     5.00    -5.7635      .7000      .0420 
-     .70    -5.00      .50    -4.5764      .7000      .4200 
-     .70    -5.00     1.00    -4.1527      .7000      .2100 
-     .70    -5.00     2.00    -3.3054      .7000      .1050 
-     .70    -5.00     5.00     -.7635      .7000      .0420 
-     .70      .00      .50      .4236      .7000      .4200 
-     .70      .00     1.00      .8473      .7000      .2100 
-     .70      .00     2.00     1.6946      .7000      .1050 
-     .70      .00     5.00     4.2365      .7000      .0420 
-     .70     5.00      .50     5.4236      .7000      .4200 
-     .70     5.00     1.00     5.8473      .7000      .2100 
-     .70     5.00     2.00     6.6946      .7000      .1050 
-     .70     5.00     5.00     9.2365      .7000      .0420 
-     .70    10.00      .50    10.4236      .7000      .4200 
-     .70    10.00     1.00    10.8473      .7000      .2100 
-     .70    10.00     2.00    11.6946      .7000      .1050 
-     .70    10.00     5.00    14.2365      .7000      .0420 
-     .80   -10.00      .50    -9.3069      .8000      .3200 
-     .80   -10.00     1.00    -8.6137      .8000      .1600 
-     .80   -10.00     2.00    -7.2274      .8000      .0800 
-     .80   -10.00     5.00    -3.0685      .8000      .0320 
-     .80    -5.00      .50    -4.3069      .8000      .3200 
-     .80    -5.00     1.00    -3.6137      .8000      .1600 
-     .80    -5.00     2.00    -2.2274      .8000      .0800 
-     .80    -5.00     5.00     1.9315      .8000      .0320 
-     .80      .00      .50      .6931      .8000      .3200 
-     .80      .00     1.00     1.3863      .8000      .1600 
-     .80      .00     2.00     2.7726      .8000      .0800 
-     .80      .00     5.00     6.9315      .8000      .0320 
-     .80     5.00      .50     5.6931      .8000      .3200 
-     .80     5.00     1.00     6.3863      .8000      .1600 
-     .80     5.00     2.00     7.7726      .8000      .0800 
-     .80     5.00     5.00    11.9315      .8000      .0320 
-     .80    10.00      .50    10.6931      .8000      .3200 
-     .80    10.00     1.00    11.3863      .8000      .1600 
-     .80    10.00     2.00    12.7726      .8000      .0800 
-     .80    10.00     5.00    16.9315      .8000      .0320 
-     .90   -10.00      .50    -8.9014      .9000      .1800 
-     .90   -10.00     1.00    -7.8028      .9000      .0900 
-     .90   -10.00     2.00    -5.6056      .9000      .0450 
-     .90   -10.00     5.00      .9861      .9000      .0180 
-     .90    -5.00      .50    -3.9014      .9000      .1800 
-     .90    -5.00     1.00    -2.8028      .9000      .0900 
-     .90    -5.00     2.00     -.6056      .9000      .0450 
-     .90    -5.00     5.00     5.9861      .9000      .0180 
-     .90      .00      .50     1.0986      .9000      .1800 
-     .90      .00     1.00     2.1972      .9000      .0900 
-     .90      .00     2.00     4.3944      .9000      .0450 
-     .90      .00     5.00    10.9861      .9000      .0180 
-     .90     5.00      .50     6.0986      .9000      .1800 
-     .90     5.00     1.00     7.1972      .9000      .0900 
-     .90     5.00     2.00     9.3944      .9000      .0450 
-     .90     5.00     5.00    15.9861      .9000      .0180 
-     .90    10.00      .50    11.0986      .9000      .1800 
-     .90    10.00     1.00    12.1972      .9000      .0900 
-     .90    10.00     2.00    14.3944      .9000      .0450 
-     .90    10.00     5.00    20.9861      .9000      .0180 
-     .99   -10.00      .50    -7.7024      .9900      .0198 
-     .99   -10.00     1.00    -5.4049      .9900      .0099 
-     .99   -10.00     2.00     -.8098      .9900      .0050 
-     .99   -10.00     5.00    12.9756      .9900      .0020 
-     .99    -5.00      .50    -2.7024      .9900      .0198 
-     .99    -5.00     1.00     -.4049      .9900      .0099 
-     .99    -5.00     2.00     4.1902      .9900      .0050 
-     .99    -5.00     5.00    17.9756      .9900      .0020 
-     .99      .00      .50     2.2976      .9900      .0198 
-     .99      .00     1.00     4.5951      .9900      .0099 
-     .99      .00     2.00     9.1902      .9900      .0050 
-     .99      .00     5.00    22.9756      .9900      .0020 
-     .99     5.00      .50     7.2976      .9900      .0198 
-     .99     5.00     1.00     9.5951      .9900      .0099 
-     .99     5.00     2.00    14.1902      .9900      .0050 
-     .99     5.00     5.00    27.9756      .9900      .0020 
-     .99    10.00      .50    12.2976      .9900      .0198 
-     .99    10.00     1.00    14.5951      .9900      .0099 
-     .99    10.00     2.00    19.1902      .9900      .0050 
-     .99    10.00     5.00    32.9756      .9900      .0020 
diff --git a/tests/expressions/randist/normal.out b/tests/expressions/randist/normal.out
deleted file mode 100644 (file)
index 78a8e37..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-       P        u        s          x        cdf        pdf 
-     .01   -10.00      .50   -11.1632      .0100      .0533 
-     .01   -10.00     1.00   -12.3263      .0100      .0267 
-     .01   -10.00     2.00   -14.6527      .0100      .0133 
-     .01   -10.00     5.00   -21.6317      .0100      .0053 
-     .01    -5.00      .50    -6.1632      .0100      .0533 
-     .01    -5.00     1.00    -7.3263      .0100      .0267 
-     .01    -5.00     2.00    -9.6527      .0100      .0133 
-     .01    -5.00     5.00   -16.6317      .0100      .0053 
-     .01      .00      .50    -1.1632      .0100      .0533 
-     .01      .00     1.00    -2.3263      .0100      .0267 
-     .01      .00     2.00    -4.6527      .0100      .0133 
-     .01      .00     5.00   -11.6317      .0100      .0053 
-     .01     5.00      .50     3.8368      .0100      .0533 
-     .01     5.00     1.00     2.6737      .0100      .0267 
-     .01     5.00     2.00      .3473      .0100      .0133 
-     .01     5.00     5.00    -6.6317      .0100      .0053 
-     .01    10.00      .50     8.8368      .0100      .0533 
-     .01    10.00     1.00     7.6737      .0100      .0267 
-     .01    10.00     2.00     5.3473      .0100      .0133 
-     .01    10.00     5.00    -1.6317      .0100      .0053 
-     .10   -10.00      .50   -10.6408      .1000      .3510 
-     .10   -10.00     1.00   -11.2816      .1000      .1755 
-     .10   -10.00     2.00   -12.5631      .1000      .0877 
-     .10   -10.00     5.00   -16.4078      .1000      .0351 
-     .10    -5.00      .50    -5.6408      .1000      .3510 
-     .10    -5.00     1.00    -6.2816      .1000      .1755 
-     .10    -5.00     2.00    -7.5631      .1000      .0877 
-     .10    -5.00     5.00   -11.4078      .1000      .0351 
-     .10      .00      .50     -.6408      .1000      .3510 
-     .10      .00     1.00    -1.2816      .1000      .1755 
-     .10      .00     2.00    -2.5631      .1000      .0877 
-     .10      .00     5.00    -6.4078      .1000      .0351 
-     .10     5.00      .50     4.3592      .1000      .3510 
-     .10     5.00     1.00     3.7184      .1000      .1755 
-     .10     5.00     2.00     2.4369      .1000      .0877 
-     .10     5.00     5.00    -1.4078      .1000      .0351 
-     .10    10.00      .50     9.3592      .1000      .3510 
-     .10    10.00     1.00     8.7184      .1000      .1755 
-     .10    10.00     2.00     7.4369      .1000      .0877 
-     .10    10.00     5.00     3.5922      .1000      .0351 
-     .20   -10.00      .50   -10.4208      .2000      .5599 
-     .20   -10.00     1.00   -10.8416      .2000      .2800 
-     .20   -10.00     2.00   -11.6832      .2000      .1400 
-     .20   -10.00     5.00   -14.2081      .2000      .0560 
-     .20    -5.00      .50    -5.4208      .2000      .5599 
-     .20    -5.00     1.00    -5.8416      .2000      .2800 
-     .20    -5.00     2.00    -6.6832      .2000      .1400 
-     .20    -5.00     5.00    -9.2081      .2000      .0560 
-     .20      .00      .50     -.4208      .2000      .5599 
-     .20      .00     1.00     -.8416      .2000      .2800 
-     .20      .00     2.00    -1.6832      .2000      .1400 
-     .20      .00     5.00    -4.2081      .2000      .0560 
-     .20     5.00      .50     4.5792      .2000      .5599 
-     .20     5.00     1.00     4.1584      .2000      .2800 
-     .20     5.00     2.00     3.3168      .2000      .1400 
-     .20     5.00     5.00      .7919      .2000      .0560 
-     .20    10.00      .50     9.5792      .2000      .5599 
-     .20    10.00     1.00     9.1584      .2000      .2800 
-     .20    10.00     2.00     8.3168      .2000      .1400 
-     .20    10.00     5.00     5.7919      .2000      .0560 
-     .30   -10.00      .50   -10.2622      .3000      .6954 
-     .30   -10.00     1.00   -10.5244      .3000      .3477 
-     .30   -10.00     2.00   -11.0488      .3000      .1738 
-     .30   -10.00     5.00   -12.6220      .3000      .0695 
-     .30    -5.00      .50    -5.2622      .3000      .6954 
-     .30    -5.00     1.00    -5.5244      .3000      .3477 
-     .30    -5.00     2.00    -6.0488      .3000      .1738 
-     .30    -5.00     5.00    -7.6220      .3000      .0695 
-     .30      .00      .50     -.2622      .3000      .6954 
-     .30      .00     1.00     -.5244      .3000      .3477 
-     .30      .00     2.00    -1.0488      .3000      .1738 
-     .30      .00     5.00    -2.6220      .3000      .0695 
-     .30     5.00      .50     4.7378      .3000      .6954 
-     .30     5.00     1.00     4.4756      .3000      .3477 
-     .30     5.00     2.00     3.9512      .3000      .1738 
-     .30     5.00     5.00     2.3780      .3000      .0695 
-     .30    10.00      .50     9.7378      .3000      .6954 
-     .30    10.00     1.00     9.4756      .3000      .3477 
-     .30    10.00     2.00     8.9512      .3000      .1738 
-     .30    10.00     5.00     7.3780      .3000      .0695 
-     .40   -10.00      .50   -10.1267      .4000      .7727 
-     .40   -10.00     1.00   -10.2533      .4000      .3863 
-     .40   -10.00     2.00   -10.5067      .4000      .1932 
-     .40   -10.00     5.00   -11.2667      .4000      .0773 
-     .40    -5.00      .50    -5.1267      .4000      .7727 
-     .40    -5.00     1.00    -5.2533      .4000      .3863 
-     .40    -5.00     2.00    -5.5067      .4000      .1932 
-     .40    -5.00     5.00    -6.2667      .4000      .0773 
-     .40      .00      .50     -.1267      .4000      .7727 
-     .40      .00     1.00     -.2533      .4000      .3863 
-     .40      .00     2.00     -.5067      .4000      .1932 
-     .40      .00     5.00    -1.2667      .4000      .0773 
-     .40     5.00      .50     4.8733      .4000      .7727 
-     .40     5.00     1.00     4.7467      .4000      .3863 
-     .40     5.00     2.00     4.4933      .4000      .1932 
-     .40     5.00     5.00     3.7333      .4000      .0773 
-     .40    10.00      .50     9.8733      .4000      .7727 
-     .40    10.00     1.00     9.7467      .4000      .3863 
-     .40    10.00     2.00     9.4933      .4000      .1932 
-     .40    10.00     5.00     8.7333      .4000      .0773 
-     .50   -10.00      .50   -10.0000      .5000      .7979 
-     .50   -10.00     1.00   -10.0000      .5000      .3989 
-     .50   -10.00     2.00   -10.0000      .5000      .1995 
-     .50   -10.00     5.00   -10.0000      .5000      .0798 
-     .50    -5.00      .50    -5.0000      .5000      .7979 
-     .50    -5.00     1.00    -5.0000      .5000      .3989 
-     .50    -5.00     2.00    -5.0000      .5000      .1995 
-     .50    -5.00     5.00    -5.0000      .5000      .0798 
-     .50      .00      .50      .0000      .5000      .7979 
-     .50      .00     1.00      .0000      .5000      .3989 
-     .50      .00     2.00      .0000      .5000      .1995 
-     .50      .00     5.00      .0000      .5000      .0798 
-     .50     5.00      .50     5.0000      .5000      .7979 
-     .50     5.00     1.00     5.0000      .5000      .3989 
-     .50     5.00     2.00     5.0000      .5000      .1995 
-     .50     5.00     5.00     5.0000      .5000      .0798 
-     .50    10.00      .50    10.0000      .5000      .7979 
-     .50    10.00     1.00    10.0000      .5000      .3989 
-     .50    10.00     2.00    10.0000      .5000      .1995 
-     .50    10.00     5.00    10.0000      .5000      .0798 
-     .60   -10.00      .50    -9.8733      .6000      .7727 
-     .60   -10.00     1.00    -9.7467      .6000      .3863 
-     .60   -10.00     2.00    -9.4933      .6000      .1932 
-     .60   -10.00     5.00    -8.7333      .6000      .0773 
-     .60    -5.00      .50    -4.8733      .6000      .7727 
-     .60    -5.00     1.00    -4.7467      .6000      .3863 
-     .60    -5.00     2.00    -4.4933      .6000      .1932 
-     .60    -5.00     5.00    -3.7333      .6000      .0773 
-     .60      .00      .50      .1267      .6000      .7727 
-     .60      .00     1.00      .2533      .6000      .3863 
-     .60      .00     2.00      .5067      .6000      .1932 
-     .60      .00     5.00     1.2667      .6000      .0773 
-     .60     5.00      .50     5.1267      .6000      .7727 
-     .60     5.00     1.00     5.2533      .6000      .3863 
-     .60     5.00     2.00     5.5067      .6000      .1932 
-     .60     5.00     5.00     6.2667      .6000      .0773 
-     .60    10.00      .50    10.1267      .6000      .7727 
-     .60    10.00     1.00    10.2533      .6000      .3863 
-     .60    10.00     2.00    10.5067      .6000      .1932 
-     .60    10.00     5.00    11.2667      .6000      .0773 
-     .70   -10.00      .50    -9.7378      .7000      .6954 
-     .70   -10.00     1.00    -9.4756      .7000      .3477 
-     .70   -10.00     2.00    -8.9512      .7000      .1738 
-     .70   -10.00     5.00    -7.3780      .7000      .0695 
-     .70    -5.00      .50    -4.7378      .7000      .6954 
-     .70    -5.00     1.00    -4.4756      .7000      .3477 
-     .70    -5.00     2.00    -3.9512      .7000      .1738 
-     .70    -5.00     5.00    -2.3780      .7000      .0695 
-     .70      .00      .50      .2622      .7000      .6954 
-     .70      .00     1.00      .5244      .7000      .3477 
-     .70      .00     2.00     1.0488      .7000      .1738 
-     .70      .00     5.00     2.6220      .7000      .0695 
-     .70     5.00      .50     5.2622      .7000      .6954 
-     .70     5.00     1.00     5.5244      .7000      .3477 
-     .70     5.00     2.00     6.0488      .7000      .1738 
-     .70     5.00     5.00     7.6220      .7000      .0695 
-     .70    10.00      .50    10.2622      .7000      .6954 
-     .70    10.00     1.00    10.5244      .7000      .3477 
-     .70    10.00     2.00    11.0488      .7000      .1738 
-     .70    10.00     5.00    12.6220      .7000      .0695 
-     .80   -10.00      .50    -9.5792      .8000      .5599 
-     .80   -10.00     1.00    -9.1584      .8000      .2800 
-     .80   -10.00     2.00    -8.3168      .8000      .1400 
-     .80   -10.00     5.00    -5.7919      .8000      .0560 
-     .80    -5.00      .50    -4.5792      .8000      .5599 
-     .80    -5.00     1.00    -4.1584      .8000      .2800 
-     .80    -5.00     2.00    -3.3168      .8000      .1400 
-     .80    -5.00     5.00     -.7919      .8000      .0560 
-     .80      .00      .50      .4208      .8000      .5599 
-     .80      .00     1.00      .8416      .8000      .2800 
-     .80      .00     2.00     1.6832      .8000      .1400 
-     .80      .00     5.00     4.2081      .8000      .0560 
-     .80     5.00      .50     5.4208      .8000      .5599 
-     .80     5.00     1.00     5.8416      .8000      .2800 
-     .80     5.00     2.00     6.6832      .8000      .1400 
-     .80     5.00     5.00     9.2081      .8000      .0560 
-     .80    10.00      .50    10.4208      .8000      .5599 
-     .80    10.00     1.00    10.8416      .8000      .2800 
-     .80    10.00     2.00    11.6832      .8000      .1400 
-     .80    10.00     5.00    14.2081      .8000      .0560 
-     .90   -10.00      .50    -9.3592      .9000      .3510 
-     .90   -10.00     1.00    -8.7184      .9000      .1755 
-     .90   -10.00     2.00    -7.4369      .9000      .0877 
-     .90   -10.00     5.00    -3.5922      .9000      .0351 
-     .90    -5.00      .50    -4.3592      .9000      .3510 
-     .90    -5.00     1.00    -3.7184      .9000      .1755 
-     .90    -5.00     2.00    -2.4369      .9000      .0877 
-     .90    -5.00     5.00     1.4078      .9000      .0351 
-     .90      .00      .50      .6408      .9000      .3510 
-     .90      .00     1.00     1.2816      .9000      .1755 
-     .90      .00     2.00     2.5631      .9000      .0877 
-     .90      .00     5.00     6.4078      .9000      .0351 
-     .90     5.00      .50     5.6408      .9000      .3510 
-     .90     5.00     1.00     6.2816      .9000      .1755 
-     .90     5.00     2.00     7.5631      .9000      .0877 
-     .90     5.00     5.00    11.4078      .9000      .0351 
-     .90    10.00      .50    10.6408      .9000      .3510 
-     .90    10.00     1.00    11.2816      .9000      .1755 
-     .90    10.00     2.00    12.5631      .9000      .0877 
-     .90    10.00     5.00    16.4078      .9000      .0351 
-     .99   -10.00      .50    -8.8368      .9900      .0533 
-     .99   -10.00     1.00    -7.6737      .9900      .0267 
-     .99   -10.00     2.00    -5.3473      .9900      .0133 
-     .99   -10.00     5.00     1.6317      .9900      .0053 
-     .99    -5.00      .50    -3.8368      .9900      .0533 
-     .99    -5.00     1.00    -2.6737      .9900      .0267 
-     .99    -5.00     2.00     -.3473      .9900      .0133 
-     .99    -5.00     5.00     6.6317      .9900      .0053 
-     .99      .00      .50     1.1632      .9900      .0533 
-     .99      .00     1.00     2.3263      .9900      .0267 
-     .99      .00     2.00     4.6527      .9900      .0133 
-     .99      .00     5.00    11.6317      .9900      .0053 
-     .99     5.00      .50     6.1632      .9900      .0533 
-     .99     5.00     1.00     7.3263      .9900      .0267 
-     .99     5.00     2.00     9.6527      .9900      .0133 
-     .99     5.00     5.00    16.6317      .9900      .0053 
-     .99    10.00      .50    11.1632      .9900      .0533 
-     .99    10.00     1.00    12.3263      .9900      .0267 
-     .99    10.00     2.00    14.6527      .9900      .0133 
-     .99    10.00     5.00    21.6317      .9900      .0053 
diff --git a/tests/expressions/randist/pareto.out b/tests/expressions/randist/pareto.out
deleted file mode 100644 (file)
index 3e152aa..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-       P        a        b          x        cdf        pdf 
-     .01     1.00     1.00     1.0101      .0100      .9801 
-     .01     1.00     2.00     1.0050      .0100     1.9701 
-     .01     1.00     5.00     1.0020      .0100     4.9401 
-     .01     1.00    10.00     1.0010      .0100     9.8901 
-     .01     5.00     1.00     5.0505      .0100      .1960 
-     .01     5.00     2.00     5.0252      .0100      .3940 
-     .01     5.00     5.00     5.0101      .0100      .9880 
-     .01     5.00    10.00     5.0050      .0100     1.9780 
-     .01    10.00     1.00    10.1010      .0100      .0980 
-     .01    10.00     2.00    10.0504      .0100      .1970 
-     .01    10.00     5.00    10.0201      .0100      .4940 
-     .01    10.00    10.00    10.0101      .0100      .9890 
-     .10     1.00     1.00     1.1111      .1000      .8100 
-     .10     1.00     2.00     1.0541      .1000     1.7076 
-     .10     1.00     5.00     1.0213      .1000     4.4062 
-     .10     1.00    10.00     1.0106      .1000     8.9057 
-     .10     5.00     1.00     5.5556      .1000      .1620 
-     .10     5.00     2.00     5.2705      .1000      .3415 
-     .10     5.00     5.00     5.1065      .1000      .8812 
-     .10     5.00    10.00     5.0530      .1000     1.7811 
-     .10    10.00     1.00    11.1111      .1000      .0810 
-     .10    10.00     2.00    10.5409      .1000      .1708 
-     .10    10.00     5.00    10.2130      .1000      .4406 
-     .10    10.00    10.00    10.1059      .1000      .8906 
-     .20     1.00     1.00     1.2500      .2000      .6400 
-     .20     1.00     2.00     1.1180      .2000     1.4311 
-     .20     1.00     5.00     1.0456      .2000     3.8254 
-     .20     1.00    10.00     1.0226      .2000     7.8235 
-     .20     5.00     1.00     6.2500      .2000      .1280 
-     .20     5.00     2.00     5.5902      .2000      .2862 
-     .20     5.00     5.00     5.2282      .2000      .7651 
-     .20     5.00    10.00     5.1128      .2000     1.5647 
-     .20    10.00     1.00    12.5000      .2000      .0640 
-     .20    10.00     2.00    11.1803      .2000      .1431 
-     .20    10.00     5.00    10.4564      .2000      .3825 
-     .20    10.00    10.00    10.2257      .2000      .7823 
-     .30     1.00     1.00     1.4286      .3000      .4900 
-     .30     1.00     2.00     1.1952      .3000     1.1713 
-     .30     1.00     5.00     1.0739      .3000     3.2590 
-     .30     1.00    10.00     1.0363      .3000     6.7547 
-     .30     5.00     1.00     7.1429      .3000      .0980 
-     .30     5.00     2.00     5.9761      .3000      .2343 
-     .30     5.00     5.00     5.3697      .3000      .6518 
-     .30     5.00    10.00     5.1816      .3000     1.3509 
-     .30    10.00     1.00    14.2857      .3000      .0490 
-     .30    10.00     2.00    11.9523      .3000      .1171 
-     .30    10.00     5.00    10.7394      .3000      .3259 
-     .30    10.00    10.00    10.3631      .3000      .6755 
-     .40     1.00     1.00     1.6667      .4000      .3600 
-     .40     1.00     2.00     1.2910      .4000      .9295 
-     .40     1.00     5.00     1.1076      .4000     2.7086 
-     .40     1.00    10.00     1.0524      .4000     5.7012 
-     .40     5.00     1.00     8.3333      .4000      .0720 
-     .40     5.00     2.00     6.4550      .4000      .1859 
-     .40     5.00     5.00     5.5378      .4000      .5417 
-     .40     5.00    10.00     5.2620      .4000     1.1402 
-     .40    10.00     1.00    16.6667      .4000      .0360 
-     .40    10.00     2.00    12.9099      .4000      .0930 
-     .40    10.00     5.00    11.0757      .4000      .2709 
-     .40    10.00    10.00    10.5241      .4000      .5701 
-     .50     1.00     1.00     2.0000      .5000      .2500 
-     .50     1.00     2.00     1.4142      .5000      .7071 
-     .50     1.00     5.00     1.1487      .5000     2.1764 
-     .50     1.00    10.00     1.0718      .5000     4.6652 
-     .50     5.00     1.00    10.0000      .5000      .0500 
-     .50     5.00     2.00     7.0711      .5000      .1414 
-     .50     5.00     5.00     5.7435      .5000      .4353 
-     .50     5.00    10.00     5.3589      .5000      .9330 
-     .50    10.00     1.00    20.0000      .5000      .0250 
-     .50    10.00     2.00    14.1421      .5000      .0707 
-     .50    10.00     5.00    11.4870      .5000      .2176 
-     .50    10.00    10.00    10.7177      .5000      .4665 
-     .60     1.00     1.00     2.5000      .6000      .1600 
-     .60     1.00     2.00     1.5811      .6000      .5060 
-     .60     1.00     5.00     1.2011      .6000     1.6651 
-     .60     1.00    10.00     1.0960      .6000     3.6498 
-     .60     5.00     1.00    12.5000      .6000      .0320 
-     .60     5.00     2.00     7.9057      .6000      .1012 
-     .60     5.00     5.00     6.0056      .6000      .3330 
-     .60     5.00    10.00     5.4798      .6000      .7300 
-     .60    10.00     1.00    25.0000      .6000      .0160 
-     .60    10.00     2.00    15.8114      .6000      .0506 
-     .60    10.00     5.00    12.0112      .6000      .1665 
-     .60    10.00    10.00    10.9596      .6000      .3650 
-     .70     1.00     1.00     3.3333      .7000      .0900 
-     .70     1.00     2.00     1.8257      .7000      .3286 
-     .70     1.00     5.00     1.2723      .7000     1.1790 
-     .70     1.00    10.00     1.1279      .7000     2.6597 
-     .70     5.00     1.00    16.6667      .7000      .0180 
-     .70     5.00     2.00     9.1287      .7000      .0657 
-     .70     5.00     5.00     6.3613      .7000      .2358 
-     .70     5.00    10.00     5.6397      .7000      .5319 
-     .70    10.00     1.00    33.3333      .7000      .0090 
-     .70    10.00     2.00    18.2574      .7000      .0329 
-     .70    10.00     5.00    12.7226      .7000      .1179 
-     .70    10.00    10.00    11.2794      .7000      .2660 
-     .80     1.00     1.00     5.0000      .8000      .0400 
-     .80     1.00     2.00     2.2361      .8000      .1789 
-     .80     1.00     5.00     1.3797      .8000      .7248 
-     .80     1.00    10.00     1.1746      .8000     1.7027 
-     .80     5.00     1.00    25.0000      .8000      .0080 
-     .80     5.00     2.00    11.1803      .8000      .0358 
-     .80     5.00     5.00     6.8986      .8000      .1450 
-     .80     5.00    10.00     5.8731      .8000      .3405 
-     .80    10.00     1.00    50.0000      .8000      .0040 
-     .80    10.00     2.00    22.3607      .8000      .0179 
-     .80    10.00     5.00    13.7973      .8000      .0725 
-     .80    10.00    10.00    11.7462      .8000      .1703 
-     .90     1.00     1.00    10.0000      .9000      .0100 
-     .90     1.00     2.00     3.1623      .9000      .0632 
-     .90     1.00     5.00     1.5849      .9000      .3155 
-     .90     1.00    10.00     1.2589      .9000      .7943 
-     .90     5.00     1.00    50.0000      .9000      .0020 
-     .90     5.00     2.00    15.8114      .9000      .0126 
-     .90     5.00     5.00     7.9245      .9000      .0631 
-     .90     5.00    10.00     6.2946      .9000      .1589 
-     .90    10.00     1.00   100.0000      .9000      .0010 
-     .90    10.00     2.00    31.6228      .9000      .0063 
-     .90    10.00     5.00    15.8489      .9000      .0315 
-     .90    10.00    10.00    12.5893      .9000      .0794 
-     .99     1.00     1.00   100.0000      .9900      .0001 
-     .99     1.00     2.00    10.0000      .9900      .0020 
-     .99     1.00     5.00     2.5119      .9900      .0199 
-     .99     1.00    10.00     1.5849      .9900      .0631 
-     .99     5.00     1.00   500.0000      .9900      .0000 
-     .99     5.00     2.00    50.0000      .9900      .0004 
-     .99     5.00     5.00    12.5594      .9900      .0040 
-     .99     5.00    10.00     7.9245      .9900      .0126 
-     .99    10.00     1.00  1000.0000      .9900      .0000 
-     .99    10.00     2.00   100.0000      .9900      .0002 
-     .99    10.00     5.00    25.1189      .9900      .0020 
-     .99    10.00    10.00    15.8489      .9900      .0063 
diff --git a/tests/expressions/randist/randist.pl b/tests/expressions/randist/randist.pl
deleted file mode 100755 (executable)
index 212b222..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-use strict;
-use warnings 'all';
-
-our (@funcs);
-our (@vars);
-our (%values);
-
-while (<>) {
-    chomp;
-    s/#.*//;
-    next if /^\s*$/;
-    my ($dist) = /^(.+):\s*$/ or die;
-
-    @funcs = ();
-    @vars = ();
-    %values = ('P' => [.01, .1, .2, .3, .4, .5, .6, .7, .8, .9, .99]);
-    while (<>) {
-       last if /^\s*$/;
-
-       my ($key, $value) = /^\s*(\w+)\s*=\s*(.*)$/;
-       my (@values);
-       foreach my $s (split (/\s+/, $value)) {
-           if (my ($from, $to, $by) = $s =~ /^(.*):(.*):(.*)$/) {
-               for (my ($x) = $from; $x <= $to; $x += $by) {
-                   push (@values, sprintf ("%.2f", $x) + 0);
-               }
-           } else {
-               push (@values, $s);
-           }
-       }
-
-       if ($key eq 'funcs') {
-           @funcs = @values;
-       } else {
-           push (@vars, $key);
-           $values{$key} = \@values;
-       }
-    }
-
-    print "DATA LIST LIST/", join (' ', 'P', @vars), ".\n";
-    print "NUMERIC ", join (' ', 'x', @funcs), " (F10.4)\n";
-    print "COMPUTE x = IDF.$dist (", join (', ', 'P', @vars), ").\n";
-    foreach my $func (@funcs) {
-       print "COMPUTE $func = $func.$dist (",
-         join (', ', 'x', @vars), ").\n";
-    }
-    my (@print) = ('P', @vars, 'x', @funcs);
-    print "DO IF \$CASENUM = 1.\n";
-    print "PRINT OUTFILE='$dist.out'/'", heading (@print), "'\n";
-    print "END IF.\n";
-    print "PRINT OUTFILE='$dist.out'/",
-      join (' ', @print), ".\n";
-    print "BEGIN DATA.\n";
-    print_all_values (['P', @vars], []);
-    print "END DATA.\n";
-}
-
-sub print_all_values {
-    my (@vars) = @{$_[0]};
-    my (@assign) = @{$_[1]};
-    if (@vars == @assign) {
-       print join (' ', @assign), "\n";
-    } else {
-       push (@assign, 0);
-       my ($var) = $vars[$#assign];
-       foreach my $value (@{$values{$var}}) {
-           $assign[$#assign] = $value;
-           print_all_values (\@vars, \@assign);
-       }
-    }
-}
-
-sub heading {
-    my (@names) = @_;
-    my ($out);
-    $out .= pad_to (shift (@names), 8) while $names[0] ne 'x';
-    $out .= pad_to (shift (@names), 10) while @names;
-    return $out;
-}
-
-sub pad_to {
-    my ($s, $n) = @_;
-    return (' ' x ($n - length ($s))) . $s . ' ';
-}
diff --git a/tests/expressions/randist/randist.txt b/tests/expressions/randist/randist.txt
deleted file mode 100644 (file)
index b757d49..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-beta: 
-  funcs = cdf pdf
-  a = .75 1 1.5
-  b = .25 .5 1 1.5 2 2.5 3
-
-cauchy:
-  funcs = cdf pdf
-  a = -5:5:1
-  b = .5:1.5:.25
-
-chisq:
-  funcs = cdf pdf sig
-  df = 1 2 5 10
-
-exp:
-  funcs = cdf pdf
-  a = 1 2 5 10
-
-f:
-  funcs = cdf pdf
-  df1 = 1 2 5 10
-  df2 = 1 2 5 10
-
-gamma:
-  funcs = cdf pdf
-  a = .5 1 2 5
-  b = -10:10:5
-
-laplace:
-  funcs = cdf pdf
-  a = -10:10:5
-  b = .5 1 2 5
-
-logistic:
-  funcs = cdf pdf
-  a = -10:10:5
-  b = .5 1 2 5
-
-lnormal:
-  funcs = cdf pdf
-  z = .5 1 2 5
-  s = .5 1 2 5
-
-normal:
-  funcs = cdf pdf
-  u = -10:10:5
-  s = .5 1 2 5
-
-pareto:
-  funcs = cdf pdf
-  a = 1 5 10
-  b = 1 2 5 10
-
-t:
-  funcs = cdf pdf
-  df = 1 2 3 4 5 10 30 100
-
-uniform:
-  funcs = cdf pdf
-  a = -10 0 20 30
-  b = 40 41 45 50
-
-weibull:
-  funcs = cdf pdf
-  a = .5 1 2 5
-  b = 1 2 4 8
diff --git a/tests/expressions/randist/t.out b/tests/expressions/randist/t.out
deleted file mode 100644 (file)
index 6236bd2..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-       P       df          x        cdf        pdf 
-     .01     1.00   -31.8205      .0100      .0003 
-     .01     2.00    -6.9646      .0100      .0028 
-     .01     3.00    -4.5407      .0100      .0059 
-     .01     4.00    -3.7469      .0100      .0087 
-     .01     5.00    -3.3649      .0100      .0109 
-     .01    10.00    -2.7638      .0100      .0172 
-     .01    30.00    -2.4573      .0100      .0231 
-     .01   100.00    -2.3642      .0100      .0255 
-     .10     1.00    -3.0777      .1000      .0304 
-     .10     2.00    -1.8856      .1000      .0764 
-     .10     3.00    -1.6377      .1000      .1025 
-     .10     4.00    -1.5332      .1000      .1181 
-     .10     5.00    -1.4759      .1000      .1283 
-     .10    10.00    -1.3722      .1000      .1507 
-     .10    30.00    -1.3104      .1000      .1670 
-     .10   100.00    -1.2901      .1000      .1729 
-     .20     1.00    -1.3764      .2000      .1100 
-     .20     2.00    -1.0607      .2000      .1810 
-     .20     3.00     -.9785      .2000      .2112 
-     .20     4.00     -.9410      .2000      .2275 
-     .20     5.00     -.9195      .2000      .2376 
-     .20    10.00     -.8791      .2000      .2584 
-     .20    30.00     -.8538      .2000      .2727 
-     .20   100.00     -.8452      .2000      .2778 
-     .30     1.00     -.7265      .3000      .2083 
-     .30     2.00     -.6172      .3000      .2722 
-     .30     3.00     -.5844      .3000      .2963 
-     .30     4.00     -.5686      .3000      .3088 
-     .30     5.00     -.5594      .3000      .3164 
-     .30    10.00     -.5415      .3000      .3319 
-     .30    30.00     -.5300      .3000      .3424 
-     .30   100.00     -.5261      .3000      .3461 
-     .40     1.00     -.3249      .4000      .2879 
-     .40     2.00     -.2887      .4000      .3326 
-     .40     3.00     -.2767      .4000      .3495 
-     .40     4.00     -.2707      .4000      .3584 
-     .40     5.00     -.2672      .4000      .3638 
-     .40    10.00     -.2602      .4000      .3749 
-     .40    30.00     -.2556      .4000      .3825 
-     .40   100.00     -.2540      .4000      .3852 
-     .50     1.00      .0000      .5000      .3183 
-     .50     2.00      .0000      .5000      .3536 
-     .50     3.00      .0000      .5000      .3676 
-     .50     4.00      .0000      .5000      .3750 
-     .50     5.00      .0000      .5000      .3796 
-     .50    10.00      .0000      .5000      .3891 
-     .50    30.00      .0000      .5000      .3956 
-     .50   100.00      .0000      .5000      .3979 
-     .60     1.00      .3249      .6000      .2879 
-     .60     2.00      .2887      .6000      .3326 
-     .60     3.00      .2767      .6000      .3495 
-     .60     4.00      .2707      .6000      .3584 
-     .60     5.00      .2672      .6000      .3638 
-     .60    10.00      .2602      .6000      .3749 
-     .60    30.00      .2556      .6000      .3825 
-     .60   100.00      .2540      .6000      .3852 
-     .70     1.00      .7265      .7000      .2083 
-     .70     2.00      .6172      .7000      .2722 
-     .70     3.00      .5844      .7000      .2963 
-     .70     4.00      .5686      .7000      .3088 
-     .70     5.00      .5594      .7000      .3164 
-     .70    10.00      .5415      .7000      .3319 
-     .70    30.00      .5300      .7000      .3424 
-     .70   100.00      .5261      .7000      .3461 
-     .80     1.00     1.3764      .8000      .1100 
-     .80     2.00     1.0607      .8000      .1810 
-     .80     3.00      .9785      .8000      .2112 
-     .80     4.00      .9410      .8000      .2275 
-     .80     5.00      .9195      .8000      .2376 
-     .80    10.00      .8791      .8000      .2584 
-     .80    30.00      .8538      .8000      .2727 
-     .80   100.00      .8452      .8000      .2778 
-     .90     1.00     3.0777      .9000      .0304 
-     .90     2.00     1.8856      .9000      .0764 
-     .90     3.00     1.6377      .9000      .1025 
-     .90     4.00     1.5332      .9000      .1181 
-     .90     5.00     1.4759      .9000      .1283 
-     .90    10.00     1.3722      .9000      .1507 
-     .90    30.00     1.3104      .9000      .1670 
-     .90   100.00     1.2901      .9000      .1729 
-     .99     1.00    31.8205      .9900      .0003 
-     .99     2.00     6.9646      .9900      .0028 
-     .99     3.00     4.5407      .9900      .0059 
-     .99     4.00     3.7469      .9900      .0087 
-     .99     5.00     3.3649      .9900      .0109 
-     .99    10.00     2.7638      .9900      .0172 
-     .99    30.00     2.4573      .9900      .0231 
-     .99   100.00     2.3642      .9900      .0255 
diff --git a/tests/expressions/randist/uniform.out b/tests/expressions/randist/uniform.out
deleted file mode 100644 (file)
index 643a70e..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-       P        a        b          x        cdf        pdf 
-     .01   -10.00    40.00    -9.5000      .0100      .0200 
-     .01   -10.00    41.00    -9.4900      .0100      .0196 
-     .01   -10.00    45.00    -9.4500      .0100      .0182 
-     .01   -10.00    50.00    -9.4000      .0100      .0167 
-     .01      .00    40.00      .4000      .0100      .0250 
-     .01      .00    41.00      .4100      .0100      .0244 
-     .01      .00    45.00      .4500      .0100      .0222 
-     .01      .00    50.00      .5000      .0100      .0200 
-     .01    20.00    40.00    20.2000      .0100      .0500 
-     .01    20.00    41.00    20.2100      .0100      .0476 
-     .01    20.00    45.00    20.2500      .0100      .0400 
-     .01    20.00    50.00    20.3000      .0100      .0333 
-     .01    30.00    40.00    30.1000      .0100      .1000 
-     .01    30.00    41.00    30.1100      .0100      .0909 
-     .01    30.00    45.00    30.1500      .0100      .0667 
-     .01    30.00    50.00    30.2000      .0100      .0500 
-     .10   -10.00    40.00    -5.0000      .1000      .0200 
-     .10   -10.00    41.00    -4.9000      .1000      .0196 
-     .10   -10.00    45.00    -4.5000      .1000      .0182 
-     .10   -10.00    50.00    -4.0000      .1000      .0167 
-     .10      .00    40.00     4.0000      .1000      .0250 
-     .10      .00    41.00     4.1000      .1000      .0244 
-     .10      .00    45.00     4.5000      .1000      .0222 
-     .10      .00    50.00     5.0000      .1000      .0200 
-     .10    20.00    40.00    22.0000      .1000      .0500 
-     .10    20.00    41.00    22.1000      .1000      .0476 
-     .10    20.00    45.00    22.5000      .1000      .0400 
-     .10    20.00    50.00    23.0000      .1000      .0333 
-     .10    30.00    40.00    31.0000      .1000      .1000 
-     .10    30.00    41.00    31.1000      .1000      .0909 
-     .10    30.00    45.00    31.5000      .1000      .0667 
-     .10    30.00    50.00    32.0000      .1000      .0500 
-     .20   -10.00    40.00      .0000      .2000      .0200 
-     .20   -10.00    41.00      .2000      .2000      .0196 
-     .20   -10.00    45.00     1.0000      .2000      .0182 
-     .20   -10.00    50.00     2.0000      .2000      .0167 
-     .20      .00    40.00     8.0000      .2000      .0250 
-     .20      .00    41.00     8.2000      .2000      .0244 
-     .20      .00    45.00     9.0000      .2000      .0222 
-     .20      .00    50.00    10.0000      .2000      .0200 
-     .20    20.00    40.00    24.0000      .2000      .0500 
-     .20    20.00    41.00    24.2000      .2000      .0476 
-     .20    20.00    45.00    25.0000      .2000      .0400 
-     .20    20.00    50.00    26.0000      .2000      .0333 
-     .20    30.00    40.00    32.0000      .2000      .1000 
-     .20    30.00    41.00    32.2000      .2000      .0909 
-     .20    30.00    45.00    33.0000      .2000      .0667 
-     .20    30.00    50.00    34.0000      .2000      .0500 
-     .30   -10.00    40.00     5.0000      .3000      .0200 
-     .30   -10.00    41.00     5.3000      .3000      .0196 
-     .30   -10.00    45.00     6.5000      .3000      .0182 
-     .30   -10.00    50.00     8.0000      .3000      .0167 
-     .30      .00    40.00    12.0000      .3000      .0250 
-     .30      .00    41.00    12.3000      .3000      .0244 
-     .30      .00    45.00    13.5000      .3000      .0222 
-     .30      .00    50.00    15.0000      .3000      .0200 
-     .30    20.00    40.00    26.0000      .3000      .0500 
-     .30    20.00    41.00    26.3000      .3000      .0476 
-     .30    20.00    45.00    27.5000      .3000      .0400 
-     .30    20.00    50.00    29.0000      .3000      .0333 
-     .30    30.00    40.00    33.0000      .3000      .1000 
-     .30    30.00    41.00    33.3000      .3000      .0909 
-     .30    30.00    45.00    34.5000      .3000      .0667 
-     .30    30.00    50.00    36.0000      .3000      .0500 
-     .40   -10.00    40.00    10.0000      .4000      .0200 
-     .40   -10.00    41.00    10.4000      .4000      .0196 
-     .40   -10.00    45.00    12.0000      .4000      .0182 
-     .40   -10.00    50.00    14.0000      .4000      .0167 
-     .40      .00    40.00    16.0000      .4000      .0250 
-     .40      .00    41.00    16.4000      .4000      .0244 
-     .40      .00    45.00    18.0000      .4000      .0222 
-     .40      .00    50.00    20.0000      .4000      .0200 
-     .40    20.00    40.00    28.0000      .4000      .0500 
-     .40    20.00    41.00    28.4000      .4000      .0476 
-     .40    20.00    45.00    30.0000      .4000      .0400 
-     .40    20.00    50.00    32.0000      .4000      .0333 
-     .40    30.00    40.00    34.0000      .4000      .1000 
-     .40    30.00    41.00    34.4000      .4000      .0909 
-     .40    30.00    45.00    36.0000      .4000      .0667 
-     .40    30.00    50.00    38.0000      .4000      .0500 
-     .50   -10.00    40.00    15.0000      .5000      .0200 
-     .50   -10.00    41.00    15.5000      .5000      .0196 
-     .50   -10.00    45.00    17.5000      .5000      .0182 
-     .50   -10.00    50.00    20.0000      .5000      .0167 
-     .50      .00    40.00    20.0000      .5000      .0250 
-     .50      .00    41.00    20.5000      .5000      .0244 
-     .50      .00    45.00    22.5000      .5000      .0222 
-     .50      .00    50.00    25.0000      .5000      .0200 
-     .50    20.00    40.00    30.0000      .5000      .0500 
-     .50    20.00    41.00    30.5000      .5000      .0476 
-     .50    20.00    45.00    32.5000      .5000      .0400 
-     .50    20.00    50.00    35.0000      .5000      .0333 
-     .50    30.00    40.00    35.0000      .5000      .1000 
-     .50    30.00    41.00    35.5000      .5000      .0909 
-     .50    30.00    45.00    37.5000      .5000      .0667 
-     .50    30.00    50.00    40.0000      .5000      .0500 
-     .60   -10.00    40.00    20.0000      .6000      .0200 
-     .60   -10.00    41.00    20.6000      .6000      .0196 
-     .60   -10.00    45.00    23.0000      .6000      .0182 
-     .60   -10.00    50.00    26.0000      .6000      .0167 
-     .60      .00    40.00    24.0000      .6000      .0250 
-     .60      .00    41.00    24.6000      .6000      .0244 
-     .60      .00    45.00    27.0000      .6000      .0222 
-     .60      .00    50.00    30.0000      .6000      .0200 
-     .60    20.00    40.00    32.0000      .6000      .0500 
-     .60    20.00    41.00    32.6000      .6000      .0476 
-     .60    20.00    45.00    35.0000      .6000      .0400 
-     .60    20.00    50.00    38.0000      .6000      .0333 
-     .60    30.00    40.00    36.0000      .6000      .1000 
-     .60    30.00    41.00    36.6000      .6000      .0909 
-     .60    30.00    45.00    39.0000      .6000      .0667 
-     .60    30.00    50.00    42.0000      .6000      .0500 
-     .70   -10.00    40.00    25.0000      .7000      .0200 
-     .70   -10.00    41.00    25.7000      .7000      .0196 
-     .70   -10.00    45.00    28.5000      .7000      .0182 
-     .70   -10.00    50.00    32.0000      .7000      .0167 
-     .70      .00    40.00    28.0000      .7000      .0250 
-     .70      .00    41.00    28.7000      .7000      .0244 
-     .70      .00    45.00    31.5000      .7000      .0222 
-     .70      .00    50.00    35.0000      .7000      .0200 
-     .70    20.00    40.00    34.0000      .7000      .0500 
-     .70    20.00    41.00    34.7000      .7000      .0476 
-     .70    20.00    45.00    37.5000      .7000      .0400 
-     .70    20.00    50.00    41.0000      .7000      .0333 
-     .70    30.00    40.00    37.0000      .7000      .1000 
-     .70    30.00    41.00    37.7000      .7000      .0909 
-     .70    30.00    45.00    40.5000      .7000      .0667 
-     .70    30.00    50.00    44.0000      .7000      .0500 
-     .80   -10.00    40.00    30.0000      .8000      .0200 
-     .80   -10.00    41.00    30.8000      .8000      .0196 
-     .80   -10.00    45.00    34.0000      .8000      .0182 
-     .80   -10.00    50.00    38.0000      .8000      .0167 
-     .80      .00    40.00    32.0000      .8000      .0250 
-     .80      .00    41.00    32.8000      .8000      .0244 
-     .80      .00    45.00    36.0000      .8000      .0222 
-     .80      .00    50.00    40.0000      .8000      .0200 
-     .80    20.00    40.00    36.0000      .8000      .0500 
-     .80    20.00    41.00    36.8000      .8000      .0476 
-     .80    20.00    45.00    40.0000      .8000      .0400 
-     .80    20.00    50.00    44.0000      .8000      .0333 
-     .80    30.00    40.00    38.0000      .8000      .1000 
-     .80    30.00    41.00    38.8000      .8000      .0909 
-     .80    30.00    45.00    42.0000      .8000      .0667 
-     .80    30.00    50.00    46.0000      .8000      .0500 
-     .90   -10.00    40.00    35.0000      .9000      .0200 
-     .90   -10.00    41.00    35.9000      .9000      .0196 
-     .90   -10.00    45.00    39.5000      .9000      .0182 
-     .90   -10.00    50.00    44.0000      .9000      .0167 
-     .90      .00    40.00    36.0000      .9000      .0250 
-     .90      .00    41.00    36.9000      .9000      .0244 
-     .90      .00    45.00    40.5000      .9000      .0222 
-     .90      .00    50.00    45.0000      .9000      .0200 
-     .90    20.00    40.00    38.0000      .9000      .0500 
-     .90    20.00    41.00    38.9000      .9000      .0476 
-     .90    20.00    45.00    42.5000      .9000      .0400 
-     .90    20.00    50.00    47.0000      .9000      .0333 
-     .90    30.00    40.00    39.0000      .9000      .1000 
-     .90    30.00    41.00    39.9000      .9000      .0909 
-     .90    30.00    45.00    43.5000      .9000      .0667 
-     .90    30.00    50.00    48.0000      .9000      .0500 
-     .99   -10.00    40.00    39.5000      .9900      .0200 
-     .99   -10.00    41.00    40.4900      .9900      .0196 
-     .99   -10.00    45.00    44.4500      .9900      .0182 
-     .99   -10.00    50.00    49.4000      .9900      .0167 
-     .99      .00    40.00    39.6000      .9900      .0250 
-     .99      .00    41.00    40.5900      .9900      .0244 
-     .99      .00    45.00    44.5500      .9900      .0222 
-     .99      .00    50.00    49.5000      .9900      .0200 
-     .99    20.00    40.00    39.8000      .9900      .0500 
-     .99    20.00    41.00    40.7900      .9900      .0476 
-     .99    20.00    45.00    44.7500      .9900      .0400 
-     .99    20.00    50.00    49.7000      .9900      .0333 
-     .99    30.00    40.00    39.9000      .9900      .1000 
-     .99    30.00    41.00    40.8900      .9900      .0909 
-     .99    30.00    45.00    44.8500      .9900      .0667 
-     .99    30.00    50.00    49.8000      .9900      .0500 
diff --git a/tests/expressions/randist/weibull.out b/tests/expressions/randist/weibull.out
deleted file mode 100644 (file)
index 000d4c9..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-       P        a        b          x        cdf        pdf 
-     .01      .50     1.00      .0050      .0100     1.9800 
-     .01      .50     2.00      .0501      .0100      .3970 
-     .01      .50     4.00      .1583      .0100      .2514 
-     .01      .50     8.00      .2813      .0100      .2829 
-     .01     1.00     1.00      .0101      .0100      .9900 
-     .01     1.00     2.00      .1003      .0100      .1985 
-     .01     1.00     4.00      .3166      .0100      .1257 
-     .01     1.00     8.00      .5627      .0100      .1415 
-     .01     2.00     1.00      .0201      .0100      .4950 
-     .01     2.00     2.00      .2005      .0100      .0992 
-     .01     2.00     4.00      .6332      .0100      .0628 
-     .01     2.00     8.00     1.1254      .0100      .0707 
-     .01     5.00     1.00      .0503      .0100      .1980 
-     .01     5.00     2.00      .5013      .0100      .0397 
-     .01     5.00     4.00     1.5831      .0100      .0251 
-     .01     5.00     8.00     2.8135      .0100      .0283 
-     .10      .50     1.00      .0527      .1000     1.8000 
-     .10      .50     2.00      .1623      .1000     1.1685 
-     .10      .50     4.00      .2849      .1000     1.3315 
-     .10      .50     8.00      .3774      .1000     2.0100 
-     .10     1.00     1.00      .1054      .1000      .9000 
-     .10     1.00     2.00      .3246      .1000      .5843 
-     .10     1.00     4.00      .5697      .1000      .6657 
-     .10     1.00     8.00      .7548      .1000     1.0050 
-     .10     2.00     1.00      .2107      .1000      .4500 
-     .10     2.00     2.00      .6492      .1000      .2921 
-     .10     2.00     4.00     1.1395      .1000      .3329 
-     .10     2.00     8.00     1.5096      .1000      .5025 
-     .10     5.00     1.00      .5268      .1000      .1800 
-     .10     5.00     2.00     1.6230      .1000      .1169 
-     .10     5.00     4.00     2.8487      .1000      .1331 
-     .10     5.00     8.00     3.7740      .1000      .2010 
-     .20      .50     1.00      .1116      .2000     1.6000 
-     .20      .50     2.00      .2362      .2000     1.5116 
-     .20      .50     4.00      .3436      .2000     2.0779 
-     .20      .50     8.00      .4145      .2000     3.4453 
-     .20     1.00     1.00      .2231      .2000      .8000 
-     .20     1.00     2.00      .4724      .2000      .7558 
-     .20     1.00     4.00      .6873      .2000     1.0389 
-     .20     1.00     8.00      .8290      .2000     1.7226 
-     .20     2.00     1.00      .4463      .2000      .4000 
-     .20     2.00     2.00      .9448      .2000      .3779 
-     .20     2.00     4.00     1.3746      .2000      .5195 
-     .20     2.00     8.00     1.6581      .2000      .8613 
-     .20     5.00     1.00     1.1157      .2000      .1600 
-     .20     5.00     2.00     2.3619      .2000      .1512 
-     .20     5.00     4.00     3.4365      .2000      .2078 
-     .20     5.00     8.00     4.1452      .2000      .3445 
-     .30      .50     1.00      .1783      .3000     1.4000 
-     .30      .50     2.00      .2986      .3000     1.6722 
-     .30      .50     4.00      .3864      .3000     2.5846 
-     .30      .50     8.00      .4395      .3000     4.5442 
-     .30     1.00     1.00      .3567      .3000      .7000 
-     .30     1.00     2.00      .5972      .3000      .8361 
-     .30     1.00     4.00      .7728      .3000     1.2923 
-     .30     1.00     8.00      .8791      .3000     2.2721 
-     .30     2.00     1.00      .7133      .3000      .3500 
-     .30     2.00     2.00     1.1944      .3000      .4181 
-     .30     2.00     4.00     1.5456      .3000      .6461 
-     .30     2.00     8.00     1.7582      .3000     1.1360 
-     .30     5.00     1.00     1.7834      .3000      .1400 
-     .30     5.00     2.00     2.9861      .3000      .1672 
-     .30     5.00     4.00     3.8640      .3000      .2585 
-     .30     5.00     8.00     4.3955      .3000      .4544 
-     .40      .50     1.00      .2554      .4000     1.2000 
-     .40      .50     2.00      .3574      .4000     1.7153 
-     .40      .50     4.00      .4227      .4000     2.9003 
-     .40      .50     8.00      .4597      .4000     5.3335 
-     .40     1.00     1.00      .5108      .4000      .6000 
-     .40     1.00     2.00      .7147      .4000      .8577 
-     .40     1.00     4.00      .8454      .4000     1.4502 
-     .40     1.00     8.00      .9195      .4000     2.6667 
-     .40     2.00     1.00     1.0217      .4000      .3000 
-     .40     2.00     2.00     1.4294      .4000      .4288 
-     .40     2.00     4.00     1.6908      .4000      .7251 
-     .40     2.00     8.00     1.8389      .4000     1.3334 
-     .40     5.00     1.00     2.5541      .4000      .1200 
-     .40     5.00     2.00     3.5736      .4000      .1715 
-     .40     5.00     4.00     4.2271      .4000      .2900 
-     .40     5.00     8.00     4.5973      .4000      .5333 
-     .50      .50     1.00      .3466      .5000     1.0000 
-     .50      .50     2.00      .4163      .5000     1.6651 
-     .50      .50     4.00      .4562      .5000     3.0386 
-     .50      .50     8.00      .4776      .5000     5.8051 
-     .50     1.00     1.00      .6931      .5000      .5000 
-     .50     1.00     2.00      .8326      .5000      .8326 
-     .50     1.00     4.00      .9124      .5000     1.5193 
-     .50     1.00     8.00      .9552      .5000     2.9026 
-     .50     2.00     1.00     1.3863      .5000      .2500 
-     .50     2.00     2.00     1.6651      .5000      .4163 
-     .50     2.00     4.00     1.8249      .5000      .7597 
-     .50     2.00     8.00     1.9104      .5000     1.4513 
-     .50     5.00     1.00     3.4657      .5000      .1000 
-     .50     5.00     2.00     4.1628      .5000      .1665 
-     .50     5.00     4.00     4.5622      .5000      .3039 
-     .50     5.00     8.00     4.7761      .5000      .5805 
-     .60      .50     1.00      .4581      .6000      .8000 
-     .60      .50     2.00      .4786      .6000     1.5316 
-     .60      .50     4.00      .4892      .6000     2.9969 
-     .60      .50     8.00      .4946      .6000     5.9287 
-     .60     1.00     1.00      .9163      .6000      .4000 
-     .60     1.00     2.00      .9572      .6000      .7658 
-     .60     1.00     4.00      .9784      .6000     1.4985 
-     .60     1.00     8.00      .9891      .6000     2.9643 
-     .60     2.00     1.00     1.8326      .6000      .2000 
-     .60     2.00     2.00     1.9145      .6000      .3829 
-     .60     2.00     4.00     1.9568      .6000      .7492 
-     .60     2.00     8.00     1.9783      .6000     1.4822 
-     .60     5.00     1.00     4.5815      .6000      .0800 
-     .60     5.00     2.00     4.7862      .6000      .1532 
-     .60     5.00     4.00     4.8919      .6000      .2997 
-     .60     5.00     8.00     4.9457      .6000      .5929 
-     .70      .50     1.00      .6020      .7000      .6000 
-     .70      .50     2.00      .5486      .7000     1.3167 
-     .70      .50     4.00      .5238      .7000     2.7585 
-     .70      .50     8.00      .5117      .7000     5.6465 
-     .70     1.00     1.00     1.2040      .7000      .3000 
-     .70     1.00     2.00     1.0973      .7000      .6584 
-     .70     1.00     4.00     1.0475      .7000     1.3793 
-     .70     1.00     8.00     1.0235      .7000     2.8233 
-     .70     2.00     1.00     2.4079      .7000      .1500 
-     .70     2.00     2.00     2.1945      .7000      .3292 
-     .70     2.00     4.00     2.0950      .7000      .6896 
-     .70     2.00     8.00     2.0469      .7000     1.4116 
-     .70     5.00     1.00     6.0199      .7000      .0600 
-     .70     5.00     2.00     5.4863      .7000      .1317 
-     .70     5.00     4.00     5.2375      .7000      .2759 
-     .70     5.00     8.00     5.1174      .7000      .5647 
-     .80      .50     1.00      .8047      .8000      .4000 
-     .80      .50     2.00      .6343      .8000     1.0149 
-     .80      .50     4.00      .5632      .8000     2.2863 
-     .80      .50     8.00      .5306      .8000     4.8528 
-     .80     1.00     1.00     1.6094      .8000      .2000 
-     .80     1.00     2.00     1.2686      .8000      .5075 
-     .80     1.00     4.00     1.1263      .8000     1.1431 
-     .80     1.00     8.00     1.0613      .8000     2.4264 
-     .80     2.00     1.00     3.2189      .8000      .1000 
-     .80     2.00     2.00     2.5373      .8000      .2537 
-     .80     2.00     4.00     2.2527      .8000      .5716 
-     .80     2.00     8.00     2.1226      .8000     1.2132 
-     .80     5.00     1.00     8.0472      .8000      .0400 
-     .80     5.00     2.00     6.3432      .8000      .1015 
-     .80     5.00     4.00     5.6317      .8000      .2286 
-     .80     5.00     8.00     5.3065      .8000      .4853 
-     .90      .50     1.00     1.1513      .9000      .2000 
-     .90      .50     2.00      .7587      .9000      .6070 
-     .90      .50     4.00      .6159      .9000     1.4954 
-     .90      .50     8.00      .5549      .9000     3.3194 
-     .90     1.00     1.00     2.3026      .9000      .1000 
-     .90     1.00     2.00     1.5174      .9000      .3035 
-     .90     1.00     4.00     1.2318      .9000      .7477 
-     .90     1.00     8.00     1.1099      .9000     1.6597 
-     .90     2.00     1.00     4.6052      .9000      .0500 
-     .90     2.00     2.00     3.0349      .9000      .1517 
-     .90     2.00     4.00     2.4637      .9000      .3738 
-     .90     2.00     8.00     2.2198      .9000      .8298 
-     .90     5.00     1.00    11.5129      .9000      .0200 
-     .90     5.00     2.00     7.5871      .9000      .0607 
-     .90     5.00     4.00     6.1592      .9000      .1495 
-     .90     5.00     8.00     5.5494      .9000      .3319 
-     .99      .50     1.00     2.3026      .9900      .0200 
-     .99      .50     2.00     1.0730      .9900      .0858 
-     .99      .50     4.00      .7325      .9900      .2515 
-     .99      .50     8.00      .6052      .9900      .6088 
-     .99     1.00     1.00     4.6052      .9900      .0100 
-     .99     1.00     2.00     2.1460      .9900      .0429 
-     .99     1.00     4.00     1.4649      .9900      .1257 
-     .99     1.00     8.00     1.2103      .9900      .3044 
-     .99     2.00     1.00     9.2103      .9900      .0050 
-     .99     2.00     2.00     4.2919      .9900      .0215 
-     .99     2.00     4.00     2.9298      .9900      .0629 
-     .99     2.00     8.00     2.4207      .9900      .1522 
-     .99     5.00     1.00    23.0259      .9900      .0020 
-     .99     5.00     2.00    10.7298      .9900      .0086 
-     .99     5.00     4.00     7.3246      .9900      .0251 
-     .99     5.00     8.00     6.0517      .9900      .0609 
diff --git a/tests/expressions/valuelabel.sh b/tests/expressions/valuelabel.sh
deleted file mode 100755 (executable)
index d4fa74f..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-#!/bin/sh
-
-# This program tests use of the VALUELABEL function in expressions.
-
-TEMPDIR=/tmp/pspp-tst-$$
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TEMPDIR/valuelabel.stat <<EOF
-DATA LIST notable /n 1 s 2(a).
-VALUE LABELS /n 0 'Very dissatisfied'
-                1 'Dissatisfied'
-               1.5 'Slightly Peeved'
-                2 'Neutral'
-                3 'Satisfied'
-                4 'Very satisfied'.
-VALUE LABELS /s 'a' 'Wouldn''t buy again'
-                'b' 'Unhappy'
-                'c' 'Bored'
-                'd' 'Satiated'
-                'e' 'Elated'.
-STRING nlabel slabel(a10).
-COMPUTE nlabel = VALUELABEL(n).
-COMPUTE slabel = VALUELABEL(s).
-LIST.
-BEGIN DATA.
-
-0a
-1b
-2c
-3d
-4e
-5f
-6g
-END DATA.
-
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TEMPDIR/valuelabel.stat
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare results"
-diff -c $TEMPDIR/pspp.csv - <<EOF
-Table: Data List
-n,s,nlabel,slabel
-.,,,
-0,a,Very dissa,Wouldn't b
-1,b,Dissatisfi,Unhappy   
-2,c,Neutral   ,Bored     
-3,d,Satisfied ,Satiated  
-4,e,Very satis,Elated    
-5,f,,
-6,g,,
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-
-pass;
diff --git a/tests/expressions/variables.sh b/tests/expressions/variables.sh
deleted file mode 100755 (executable)
index 5d09849..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-#!/bin/sh
-
-# This program tests use of variables in expressions.
-
-TEMPDIR=/tmp/pspp-tst-$$
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TEMPDIR/variables.stat <<EOF
-SET MXERR 1000.
-SET MXWARN 1000.
-
-DATA LIST /N1 TO N5 1-5.
-MISSING VALUES N1 TO N5 (3 THRU 5, 1).
-BEGIN DATA.
-12345
-6789 
-END DATA.
-
-COMPUTE P1=N1.
-COMPUTE P2=N2.
-COMPUTE P3=N3.
-COMPUTE P4=N4.
-COMPUTE P5=N5.
-
-COMPUTE MC=NMISS(N1 TO N5).
-COMPUTE VC=NVALID(N1 TO N5).
-
-COMPUTE S1=SYSMIS(N1).
-COMPUTE S2=SYSMIS(N2).
-COMPUTE S3=SYSMIS(N3).
-COMPUTE S4=SYSMIS(N4).
-COMPUTE S5=SYSMIS(N5).
-
-COMPUTE M1=MISSING(N1).
-COMPUTE M2=MISSING(N2).
-COMPUTE M3=MISSING(N3).
-COMPUTE M4=MISSING(N4).
-COMPUTE M5=MISSING(N5).
-
-COMPUTE V1=VALUE(N1).
-COMPUTE V2=VALUE(N2).
-COMPUTE V3=VALUE(N3).
-COMPUTE V4=VALUE(N4).
-COMPUTE V5=VALUE(N5).
-
-FORMATS ALL (F1).
-
-LIST.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TEMPDIR/variables.stat > $TEMPDIR/variables.err 2> $TEMPDIR/variables.out
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare results"
-diff -c $TEMPDIR/pspp.csv - <<EOF
-Table: Reading 1 record from INLINE.
-Variable,Record,Columns,Format
-N1,1,1-  1,F1.0
-N2,1,2-  2,F1.0
-N3,1,3-  3,F1.0
-N4,1,4-  4,F1.0
-N5,1,5-  5,F1.0
-
-Table: Data List
-N1,N2,N3,N4,N5,P1,P2,P3,P4,P5,MC,VC,S1,S2,S3,S4,S5,M1,M2,M3,M4,M5,V1,V2,V3,V4,V5
-1,2,3,4,5,.,2,.,.,.,4,1,0,0,0,0,0,1,0,1,1,1,1,2,3,4,5
-6,7,8,9,.,6,7,8,9,.,1,4,0,0,0,0,1,0,0,0,0,1,6,7,8,9,.
-EOF
-
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-
-pass;
diff --git a/tests/expressions/vectors.sh b/tests/expressions/vectors.sh
deleted file mode 100755 (executable)
index 967dec5..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-#!/bin/sh
-
-# This program tests use of vectors in expressions.
-
-TEMPDIR=/tmp/pspp-tst-$$
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="create program"
-cat > $TEMPDIR/vectors.stat <<EOF
-DATA LIST /N1 TO N5 1-5.
-MISSING VALUES N1 TO N5 (3 THRU 5, 1).
-BEGIN DATA.
-12345
-6789 
-END DATA.
-
-VECTOR N=N1 TO N5.
-VECTOR X(5).
-LOOP I=1 TO 5.
-COMPUTE X(I)=N(I) + 1.
-END LOOP.
-
-FORMATS ALL (F2).
-
-LIST.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TEMPDIR/vectors.stat > $TEMPDIR/vectors.err 2> $TEMPDIR/vectors.out
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare results"
-diff -c $TEMPDIR/pspp.csv - <<EOF
-Table: Reading 1 record from INLINE.
-Variable,Record,Columns,Format
-N1,1,1-  1,F1.0
-N2,1,2-  2,F1.0
-N3,1,3-  3,F1.0
-N4,1,4-  4,F1.0
-N5,1,5-  5,F1.0
-
-Table: Data List
-N1,N2,N3,N4,N5,X1,X2,X3,X4,X5,I
-1,2,3,4,5,.,3,.,.,.,5
-6,7,8,9,.,7,8,9,10,.,5
-EOF
-
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-
-pass;
diff --git a/tests/formats/360.sh b/tests/formats/360.sh
deleted file mode 100755 (executable)
index e646968..0000000
+++ /dev/null
@@ -1,258 +0,0 @@
-#! /bin/sh
-
-# Tests BINARY and 360 data file formats.
-
-TEMPDIR=/tmp/pspp-tst-$$
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-: ${PERL:=perl}
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-
-
-cd $TEMPDIR
-
-activity="create data file"
-cat > $TEMPDIR/input.data <<EOF
-07-22-2007
-10-06-2007
-321
-07-14-1789
-08-26-1789
-4
-01-01-1972
-12-31-1999
-682
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="create program to transform data into 360 formats"
-cat > $TEMPDIR/make-360.pl <<'EOF'
-use strict;
-use warnings;
-
-# ASCII to EBCDIC translation table
-our ($ascii2ebcdic) = ""
-. "\x00\x01\x02\x03\x37\x2d\x2e\x2f"
-. "\x16\x05\x25\x0b\x0c\x0d\x0e\x0f"
-. "\x10\x11\x12\x13\x3c\x3d\x32\x26"
-. "\x18\x19\x3f\x27\x1c\x1d\x1e\x1f"
-. "\x40\x5a\x7f\x7b\x5b\x6c\x50\x7d"
-. "\x4d\x5d\x5c\x4e\x6b\x60\x4b\x61"
-. "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
-. "\xf8\xf9\x7a\x5e\x4c\x7e\x6e\x6f"
-. "\x7c\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
-. "\xc8\xc9\xd1\xd2\xd3\xd4\xd5\xd6"
-. "\xd7\xd8\xd9\xe2\xe3\xe4\xe5\xe6"
-. "\xe7\xe8\xe9\xad\xe0\xbd\x9a\x6d"
-. "\x79\x81\x82\x83\x84\x85\x86\x87"
-. "\x88\x89\x91\x92\x93\x94\x95\x96"
-. "\x97\x98\x99\xa2\xa3\xa4\xa5\xa6"
-. "\xa7\xa8\xa9\xc0\x4f\xd0\x5f\x07"
-. "\x20\x21\x22\x23\x24\x15\x06\x17"
-. "\x28\x29\x2a\x2b\x2c\x09\x0a\x1b"
-. "\x30\x31\x1a\x33\x34\x35\x36\x08"
-. "\x38\x39\x3a\x3b\x04\x14\x3e\xe1"
-. "\x41\x42\x43\x44\x45\x46\x47\x48"
-. "\x49\x51\x52\x53\x54\x55\x56\x57"
-. "\x58\x59\x62\x63\x64\x65\x66\x67"
-. "\x68\x69\x70\x71\x72\x73\x74\x75"
-. "\x76\x77\x78\x80\x8a\x8b\x8c\x8d"
-. "\x8e\x8f\x90\x6a\x9b\x9c\x9d\x9e"
-. "\x9f\xa0\xaa\xab\xac\x4a\xae\xaf"
-. "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
-. "\xb8\xb9\xba\xbb\xbc\xa1\xbe\xbf"
-. "\xca\xcb\xcc\xcd\xce\xcf\xda\xdb"
-. "\xdc\xdd\xde\xdf\xea\xeb\xec\xed"
-. "\xee\xef\xfa\xfb\xfc\xfd\xfe\xff";
-length ($ascii2ebcdic) == 256 || die;
-
-open (INPUT, '<', 'input.data') or die "input.data: open: $!\n";
-my (@data) = <INPUT> or die;
-close (INPUT) or die;
-chomp $_ foreach @data;
-
-# Binary mode.
-open (OUTPUT, '>', 'binary.bin') or die "binary.bin: create: $!\n";
-for $_ (@data) {
-    my ($reclen) = pack ("V", length);
-    print OUTPUT $reclen, $_, $reclen;
-}
-close (OUTPUT) or die;
-
-# Fixed mode.
-open (OUTPUT, '>', 'fixed.bin') or die "fixed.bin: create: $!\n";
-my ($lrecl) = 32;
-for $_ (@data) {
-    my ($out) = substr ($_, 0, $lrecl);
-    $out .= ' ' x ($lrecl - length ($out));
-    length ($out) == 32 or die;
-    print OUTPUT a2e ($out);
-}
-close (OUTPUT) or die;
-
-# Variable mode.
-open (OUTPUT, '>', 'variable.bin') or die "variable.bin: create: $!\n";
-our (@records);
-for $_ (@data) {
-    push (@records, pack ("n xx", length ($_) + 4) . a2e ($_));
-}
-dump_records ();
-close (OUTPUT) or die;
-
-# Spanned mode.
-open (OUTPUT, '>', 'spanned.bin') or die "spanned.bin: create: $!\n";
-for my $line (@data) {
-    local ($_) = $line;
-    my (@r);
-    while (length) {
-       my ($n) = min (int (rand (5)), length);
-       push (@r, substr ($_, 0, $n, ''));
-    }
-    foreach my $i (0...$#r) {
-       my $scc = ($#r == 0 ? 0
-                  : $i == 0 ? 1
-                  : $i == $#r ? 2
-                  : 3);
-       push (@records,
-             pack ("nCx", length ($r[$i]) + 4, $scc) . a2e ($r[$i]));
-    }
-}
-dump_records ();
-close (OUTPUT) or die;
-
-sub a2e {
-    local ($_) = @_;
-    my ($s) = "";
-    foreach (split (//)) {
-        $s .= substr ($ascii2ebcdic, ord, 1);
-    }
-    return $s;
-}
-
-sub min {
-    my ($a, $b) = @_;
-    return $a < $b ? $a : $b
-}
-
-sub dump_records {
-    while (@records) {
-       my ($n) = min (int (rand (5)) + 1, scalar (@records));
-       my (@r) = splice (@records, 0, $n);
-       my ($len) = 0;
-       $len += length foreach @r;
-       print OUTPUT pack ("n xx", $len + 4);
-       print OUTPUT foreach @r;
-    }
-}
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="running make-360.pl"
-$PERL make-360.pl
-if [ $? -ne 0 ] ; then no_result ; fi
-
-binary_fh='mode=binary'
-fixed_fh='mode=360 /recform=fixed /lrecl=32'
-variable_fh='mode=360 /recform=variable'
-spanned_fh='mode=360 /recform=spanned'
-
-for type in binary fixed variable spanned; do
-    activity="create $type.pspp"
-    eval fh=\$${type}_fh
-    cat > $type.pspp <<EOF
-* Read the original file and list its data, to test reading these formats.
-file handle input/name='$type.bin'/$fh.
-data list fixed file=input notable
-       /1 start 1-10 (adate)
-       /2 end 1-10 (adate)
-       /3 count 1-3.
-list.
-
-* Output the data to a new file in the same format.
-file handle output/name='${type}2.bin'/$fh.
-compute count=count + 1.
-print outfile=output/start end count.
-execute.
-
-* Re-read the new data and list it, to verify that it was written correctly.
-data list fixed file=output notable/
-       start 2-11 (adate)
-       end 13-22 (adate)
-       count 24-26.
-list.
-
-EOF
-    if [ $? -ne 0 ] ; then no_result ; fi
-
-    # Make sure that pspp.csv isn't left over from another run.
-    rm -f pspp.csv
-
-    activity="run $type.pspp"
-    $SUPERVISOR $PSPP -o pspp.csv $type.pspp
-    if [ $? -ne 0 ] ; then fail ; fi
-
-    activity="compare $type.pspp output"
-    diff -c $TEMPDIR/pspp.csv - << EOF
-Table: Data List
-start,end,count
-07/22/2007,10/06/2007,321
-07/14/1789,08/26/1789,4
-01/01/1972,12/31/1999,682
-
-Table: Data List
-start,end,count
-07/22/2007,10/06/2007,322
-07/14/1789,08/26/1789,5
-01/01/1972,12/31/1999,683
-EOF
-    if [ $? -ne 0 ] ; then fail ; fi
-done
-
-pass
diff --git a/tests/formats/bcd-in.expected.cmp.gz b/tests/formats/bcd-in.expected.cmp.gz
deleted file mode 100644 (file)
index ec1b34b..0000000
Binary files a/tests/formats/bcd-in.expected.cmp.gz and /dev/null differ
diff --git a/tests/formats/bcd-in.sh b/tests/formats/bcd-in.sh
deleted file mode 100755 (executable)
index b21b209..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-#! /bin/sh
-
-TEMPDIR=/tmp/pspp-tst-$$
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-: ${PERL:=perl}
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="generate data input file"
-$PERL -e 'print pack "n", $_ foreach 0...65535' > bcd-in.data
-
-activity="write pspp syntax"
-cat > bcd-in.pspp <<'EOF'
-SET ERRORS=NONE.
-SET MXWARNS=10000000.
-SET MXERRS=10000000.
-FILE HANDLE data/NAME='bcd-in.data'/MODE=IMAGE/LRECL=2.
-DATA LIST FILE=data/p 1-2 (P) pk 1-2 (PK).
-COMPUTE x=$CASENUM - 1.
-PRINT OUTFILE='bcd-in.out'/x (PIBHEX4) ' ' P PK.
-EXECUTE.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv bcd-in.pspp
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="gunzip expected results"
-gzip -cd < $top_srcdir/tests/formats/bcd-in.expected.cmp.gz > bcd-in.expected.cmp
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="decompress expected results"
-$PERL -pe "printf ' %04X ', $.-1" < bcd-in.expected.cmp > bcd-in.expected
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output"
-diff -u bcd-in.expected bcd-in.out
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/formats/binhex-out.expected.gz b/tests/formats/binhex-out.expected.gz
deleted file mode 100644 (file)
index f8fc6e9..0000000
Binary files a/tests/formats/binhex-out.expected.gz and /dev/null differ
diff --git a/tests/formats/binhex-out.sh b/tests/formats/binhex-out.sh
deleted file mode 100755 (executable)
index 04e0cdc..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-#! /bin/sh
-
-TEMPDIR=/tmp/pspp-tst-$$
-mkdir -p $TEMPDIR
-trap 'cd /; rm -rf $TEMPDIR' 0
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    exit 2;
-}
-
-pass()
-{
-    exit 0;
-}
-
-cd $TEMPDIR
-
-activity="write pspp syntax"
-cat > binhex-out.pspp <<EOF
-set errors=none.
-set mxwarns=10000000.
-set wib=msbfirst.
-data list /x 1-10.
-begin data.
-
-2
-11
-123
-1234
-913
-3.14159
-777
-82
-690
--2
--11
--123
--1234
--913
--3.14159
--777
--82
--690
--.1
--.5
--.9
-9999.1
-9999.5
-9999.9
-10000
-18231237
--9999.1
--9999.5
--9999.9
--10000
--8231237
-999.1
-999.5
-999.9
-1000
-8231237
--999.1
--999.5
--999.9
--1000
--8231237
-99.1
-99.5
-99.9
-100
-821237
--99.1
--99.5
--99.9
--100
--831237
-9.1
-9.5
-9.9
-10
-81237
--9.1
--9.5
--9.9
--10
--81237
-1.1
--1.1
-1.5
--1.5
-1.9
--1.9
-end data.
-file handle output/name='binhex.out'/mode=image/lrecl=256.
-write outfile=output/
-       x(p1.0) x(p2.0) x(p3.0) x(p4.0)         /* 000
-       x(p2.1) x(p3.1) x(p4.1)                 /* 00a
-       x(p3.2) x(p4.2)                         /* 013
-       x(p4.3)                                 /* 01a
-       x(pk1.0) x(pk2.0) x(pk3.0) x(pk4.0)     /* 01e
-       x(pk2.1) x(pk3.1) x(pk4.1)              /* 028
-       x(pk3.2) x(pk4.2)                       /* 031
-       x(pk4.3)                                /* 038
-       x(ib1.0) x(ib2.0) x(ib3.0) x(ib4.0)     /* 03c
-       x(ib1.1) x(ib2.1) x(ib3.1) x(ib4.1)     /* 046
-       x(ib1.2) x(ib2.2) x(ib3.2) x(ib4.2)     /* 050
-       x(ib1.3) x(ib2.3) x(ib3.3) x(ib4.3)     /* 05a
-       x(ib2.4) x(ib3.4) x(ib4.4)              /* 064
-       x(ib2.5) x(ib3.5) x(ib4.5)              /* 06d
-       x(ib3.6) x(ib4.6)                       /* 076
-       x(ib3.7) x(ib4.7)                       /* 07d
-       x(ib3.8) x(ib4.8)                       /* 084
-       x(ib4.9)                                /* 08b
-       x(ib4.10)                               /* 08f
-       x(pib1.0) x(pib2.0) x(pib3.0) x(pib4.0) /* 093
-       x(pib1.1) x(pib2.1) x(pib3.1) x(pib4.1) /* 09d
-       x(pib1.2) x(pib2.2) x(pib3.2) x(pib4.2) /* 0a7
-       x(pib1.3) x(pib2.3) x(pib3.3) x(pib4.3) /* 0b1
-       x(pib2.4) x(pib3.4) x(pib4.4)           /* 0bb
-       x(pib2.5) x(pib3.5) x(pib4.5)           /* 0c4
-       x(pib3.6) x(pib4.6)                     /* 0cd
-       x(pib3.7) x(pib4.7)                     /* 0d4
-       x(pib3.8) x(pib4.8)                     /* 0db
-       x(pib4.9)                               /* 0e2
-       x(pib4.10)                              /* 0e6
-       x(pibhex2) x(pibhex4)                   /* 0ea
-        x(pibhex6) x(pibhex8).                 /* 0f0
-                                               /* 0fe
-execute.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv binhex-out.pspp
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="gunzip expected results"
-gzip -cd < $top_srcdir/tests/formats/binhex-out.expected.gz > expected.out
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output"
-cmp expected.out binhex.out
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/formats/date-in.sh b/tests/formats/date-in.sh
deleted file mode 100755 (executable)
index 859283d..0000000
+++ /dev/null
@@ -1,2305 +0,0 @@
-#! /bin/sh
-
-TEMPDIR=/tmp/pspp-tst-$$
-mkdir -p $TEMPDIR
-trap 'cd /; rm -rf $TEMPDIR' 0
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-: ${PERL:=perl}
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    exit 2;
-}
-
-pass()
-{
-    exit 0;
-}
-
-cd $TEMPDIR
-
-activity="write PRNG fragment"
-cat > my-rand.pl <<'EOF'
-# This random number generator and the test for it below are drawn
-# from Park and Miller, "Random Number Generators: Good Ones are Hard
-# to Come By", Communications of the ACM 31:10 (October 1988).  It is
-# documented to function properly on systems with a 46-bit or longer
-# real significand, which includes systems that have 64-bit IEEE reals
-# (with 53-bit significand).  The test should catch any systems for
-# which this is not true, in any case.
-
-our ($seed) = 1;
-sub my_rand {
-  my ($modulo) = @_;
-  my ($a) = 16807;
-  my ($m) = 2147483647;
-  my ($tmp) = $a * $seed;
-  $seed = $tmp - $m * int ($tmp / $m);
-  return $seed % $modulo;
-}
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="write PRNG test program"
-cat > test-my-rand.pl <<'EOF'
-#! /usr/bin/perl
-use strict;
-use warnings;
-do 'my-rand.pl';
-my_rand (1) foreach 1...10000;
-our $seed;
-die $seed if $seed != 1043618065;
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="test PRNG"
-$PERL test-my-rand.pl
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="write program to generate PSPP syntax and data"
-cat > date-in.pl <<'EOF'
-#! /usr/bin/perl
-
-use strict;
-use warnings;
-
-do 'my-rand.pl';
-
-my @formats = (['date', 'd-m-y'],
-              ['adate', 'm-d-y'],
-              ['edate', 'd-m-y'],
-              ['jdate', 'j'],
-              ['sdate', 'y-m-d'],
-              ['qyr', 'qQy'],
-              ['moyr', 'm-y'],
-              ['wkyr', 'wWy'],
-              ['datetime', 'd-m-y +H:M', 'd-m-y +H:M:S']);
-
-my @dates = (#yyyy  mm  dd  jjj  HH  MM  SS
-            [1648,  6, 10, 162,  0,  0,  0],
-            [1680,  6, 30, 182,  4, 50, 38],
-            [1716,  7, 24, 206, 12, 31, 35],
-            [1768,  6, 19, 171, 12, 47, 53],
-            [1819,  8,  2, 214,  1, 26,  0],
-            [1839,  3, 27,  86, 20, 58, 11],
-            [1903,  4, 19, 109,  7, 36,  5],
-            [1929,  8, 25, 237, 15, 43, 49],
-            [1941,  9, 29, 272,  4, 25,  9],
-            [1943,  4, 19, 109,  6, 49, 27],
-            [1943, 10,  7, 280,  2, 57, 52],
-            [1992,  3, 17,  77, 16, 45, 44],
-            [1996,  2, 25,  56, 21, 30, 57],
-            [1941,  9, 29, 272,  4, 25,  9],
-            [1943,  4, 19, 109,  6, 49, 27],
-            [1943, 10,  7, 280,  2, 57, 52],
-            [1992,  3, 17,  77, 16, 45, 44],
-            [1996,  2, 25,  56, 21, 30, 57],
-            [2038, 11, 10, 314, 22, 30,  4],
-            [2094,  7, 18, 199,  1, 56, 51]);
-
-open (SYNTAX, '>', 'date-in.pspp') or die "date-in.pspp: create: $!\n";
-print SYNTAX "SET EPOCH 1930.\n";
-for my $format (@formats) {
-    my ($name) = @$format;
-    print SYNTAX "DATA LIST file='$name.data'/$name 1-40 ($name).\n";
-    print SYNTAX "PRINT OUTFILE='$name.out'/$name (F16.2).\n";
-    print SYNTAX "EXECUTE.\n";
-}
-close (SYNTAX);
-
-for my $format (@formats) {
-    my ($fmt_name, @templates) = @$format;
-    my ($fn) = "$fmt_name.data";
-    open (DATA, '>', $fn) or die "$fn: create: $!\n";
-    select DATA;
-    for my $template (@templates) {
-       for my $date (@dates) {
-           print_date_with_template ($date, $template) for 1...10;
-       }
-    }
-    close (DATA);
-}
-
-sub print_date_with_template {
-    my ($date, $template) = @_;
-    my ($year, $month, $day, $julian, $hour, $minute, $second) = @$date;
-    my ($quarter) = int (($month - 1) / 3) + 1;
-    my ($week) = int (($julian - 1) / 7) + 1;
-    my (@year_types) = ('full');
-    push (@year_types, '2digit') if $year >= 1930 && $year < 2030;
-    for my $c (split ('', $template)) {
-       if ($c eq 'd') {
-           printf (+pick ('%d', '%02d'), $day);
-       } elsif ($c eq 'm') {
-           my ($type) = pick ('arabic', 'roman', 'abbrev', 'full');
-           if ($type eq 'arabic') {
-               printf (+pick ('%d', '%02d'), $month);
-           } elsif ($type eq 'roman') {
-               my ($mmm) = ('i', 'ii', 'iii',
-                            'iv', 'v', 'vi',
-                            'vii', 'viii', 'ix',
-                            'x', 'xi', 'xii')[$month - 1];
-               print_rand_case ($mmm);
-           } elsif ($type eq 'abbrev') {
-               my ($mmm) = qw (jan feb mar apr may jun
-                                jul aug sep oct nov dec)[$month - 1];
-               print_rand_case ($mmm);
-           } elsif ($type eq 'full') {
-               my ($mmm) = qw (january february march
-                               april may june
-                               july august september
-                               october november december)[$month - 1];
-               print_rand_case ($mmm);
-           } else {
-               die;
-           }
-       } elsif ($c eq 'y') {
-           my ($type) = pick (@year_types);
-           if ($type eq '2digit') {
-               printf (+pick ('%d', '%02d'), $year % 100);
-           } elsif ($type eq 'full') {
-               print $year;
-           } else {
-               die;
-           }
-       } elsif ($c eq 'j') {
-           my ($type) = pick (@year_types);
-           if ($type eq '2digit') {
-               printf ("%02d%03d", $year % 100, $julian);
-           } elsif ($type eq 'full') {
-               printf ("%04d%03d", $year, $julian);
-           } else {
-               die;
-           }
-       } elsif ($c eq 'q') {
-           print $quarter;
-       } elsif ($c eq 'w') {
-           print $week;
-       } elsif ($c eq 'H') {
-           printf (+pick ('%d', '%02d'), $hour);
-       } elsif ($c eq 'M') {
-           printf (+pick ('%d', '%02d'), $minute);
-       } elsif ($c eq 'S') {
-           printf (+pick ('%d', '%02d'), $second);
-       } elsif ($c eq '-') {
-           print +pick (' ', '-', '.', ',', '/');
-       } elsif ($c eq ':') {
-           print +pick (' ', ':');
-       } elsif ($c eq ' ') {
-           print ' ';
-       } elsif ($c eq 'Q') {
-           maybe_print_space ();
-           print_rand_case ('q');
-           maybe_print_space ();
-       } elsif ($c eq 'W') {
-           maybe_print_space ();
-           print_rand_case ('wk');
-           maybe_print_space ();
-       } elsif ($c eq '+') {
-           print +pick ('', '-', '+');
-       } else {
-           die;
-       }
-    }
-    print "\n";
-}
-
-sub print_rand_case {
-    my ($s) = @_;
-    my ($case) = pick (qw (uc lc tc));
-    if ($case eq 'uc') {
-       print uc ($s);
-    } elsif ($case eq 'lc') {
-       print lc ($s);
-    } elsif ($case eq 'tc') {
-       print ucfirst ($s);
-    } else {
-       die;
-    }
-}
-
-sub maybe_print_space {
-   print +pick ('', ' ');
-}
-
-sub pick {
-   return $_[int (my_rand ($#_ + 1))];
-}
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="generate PSPP syntax and data"
-$PERL date-in.pl
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv date-in.pspp
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare adate.out output"
-diff -u adate.out - <<EOF
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare date.out output"
-diff -u date.out - <<EOF
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare datetime.out output"
-diff -u datetime.out - <<EOF
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    3083512200.00
-    3083512200.00
-    3083512200.00
-    3083512200.00
-    3083547000.00
-    3083547000.00
-    3083547000.00
-    3083547000.00
-    3083512200.00
-    3083547000.00
-    4221635460.00
-    4221635460.00
-    4221545340.00
-    4221635460.00
-    4221545340.00
-    4221635460.00
-    4221545340.00
-    4221635460.00
-    4221545340.00
-    4221635460.00
-    5859607620.00
-    5859607620.00
-    5859607620.00
-    5859607620.00
-    5859515580.00
-    5859607620.00
-    5859607620.00
-    5859515580.00
-    5859607620.00
-    5859607620.00
-    7472644440.00
-    7472654760.00
-    7472654760.00
-    7472654760.00
-    7472644440.00
-    7472654760.00
-    7472644440.00
-    7472644440.00
-    7472654760.00
-    7472654760.00
-    8092817880.00
-    8092817880.00
-    8092817880.00
-    8092817880.00
-    8092666920.00
-    8092817880.00
-    8092817880.00
-    8092817880.00
-    8092817880.00
-    8092817880.00
-   10114356960.00
-   10114302240.00
-   10114302240.00
-   10114356960.00
-   10114356960.00
-   10114356960.00
-   10114356960.00
-   10114356960.00
-   10114356960.00
-   10114302240.00
-   10945873020.00
-   10945873020.00
-   10945873020.00
-   10945986180.00
-   10945873020.00
-   10945986180.00
-   10945873020.00
-   10945986180.00
-   10945986180.00
-   10945873020.00
-   11327660700.00
-   11327628900.00
-   11327660700.00
-   11327660700.00
-   11327628900.00
-   11327628900.00
-   11327660700.00
-   11327660700.00
-   11327660700.00
-   11327660700.00
-   11376658140.00
-   11376658140.00
-   11376658140.00
-   11376658140.00
-   11376658140.00
-   11376658140.00
-   11376609060.00
-   11376658140.00
-   11376658140.00
-   11376609060.00
-   11391418620.00
-   11391418620.00
-   11391418620.00
-   11391397380.00
-   11391418620.00
-   11391418620.00
-   11391397380.00
-   11391418620.00
-   11391397380.00
-   11391397380.00
-   12920229900.00
-   12920109300.00
-   12920109300.00
-   12920109300.00
-   12920229900.00
-   12920229900.00
-   12920229900.00
-   12920229900.00
-   12920109300.00
-   12920109300.00
-   13044508200.00
-   13044663000.00
-   13044663000.00
-   13044508200.00
-   13044508200.00
-   13044663000.00
-   13044663000.00
-   13044508200.00
-   13044663000.00
-   13044663000.00
-   11327628900.00
-   11327660700.00
-   11327660700.00
-   11327628900.00
-   11327660700.00
-   11327660700.00
-   11327628900.00
-   11327660700.00
-   11327628900.00
-   11327628900.00
-   11376658140.00
-   11376658140.00
-   11376658140.00
-   11376658140.00
-   11376658140.00
-   11376609060.00
-   11376609060.00
-   11376658140.00
-   11376609060.00
-   11376658140.00
-   11391418620.00
-   11391397380.00
-   11391418620.00
-   11391397380.00
-   11391397380.00
-   11391397380.00
-   11391418620.00
-   11391418620.00
-   11391418620.00
-   11391397380.00
-   12920229900.00
-   12920229900.00
-   12920229900.00
-   12920229900.00
-   12920229900.00
-   12920229900.00
-   12920109300.00
-   12920229900.00
-   12920109300.00
-   12920229900.00
-   13044508200.00
-   13044663000.00
-   13044508200.00
-   13044663000.00
-   13044663000.00
-   13044663000.00
-   13044663000.00
-   13044663000.00
-   13044663000.00
-   13044508200.00
-   14392420200.00
-   14392420200.00
-   14392258200.00
-   14392258200.00
-   14392420200.00
-   14392258200.00
-   14392258200.00
-   14392420200.00
-   14392420200.00
-   14392420200.00
-   16149635760.00
-   16149621840.00
-   16149635760.00
-   16149635760.00
-   16149635760.00
-   16149635760.00
-   16149635760.00
-   16149621840.00
-   16149621840.00
-   16149635760.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    3083547038.00
-    3083512162.00
-    3083512162.00
-    3083512162.00
-    3083547038.00
-    3083512162.00
-    3083547038.00
-    3083547038.00
-    3083547038.00
-    3083512162.00
-    4221635495.00
-    4221635495.00
-    4221545305.00
-    4221635495.00
-    4221635495.00
-    4221635495.00
-    4221545305.00
-    4221545305.00
-    4221545305.00
-    4221635495.00
-    5859607673.00
-    5859607673.00
-    5859515527.00
-    5859607673.00
-    5859607673.00
-    5859607673.00
-    5859607673.00
-    5859607673.00
-    5859515527.00
-    5859607673.00
-    7472654760.00
-    7472654760.00
-    7472654760.00
-    7472654760.00
-    7472654760.00
-    7472654760.00
-    7472654760.00
-    7472644440.00
-    7472644440.00
-    7472654760.00
-    8092817891.00
-    8092666909.00
-    8092817891.00
-    8092817891.00
-    8092666909.00
-    8092817891.00
-    8092817891.00
-    8092817891.00
-    8092817891.00
-    8092817891.00
-   10114356965.00
-   10114356965.00
-   10114302235.00
-   10114356965.00
-   10114356965.00
-   10114356965.00
-   10114356965.00
-   10114356965.00
-   10114356965.00
-   10114356965.00
-   10945986229.00
-   10945986229.00
-   10945872971.00
-   10945986229.00
-   10945872971.00
-   10945986229.00
-   10945986229.00
-   10945986229.00
-   10945986229.00
-   10945986229.00
-   11327628891.00
-   11327660709.00
-   11327660709.00
-   11327660709.00
-   11327660709.00
-   11327660709.00
-   11327628891.00
-   11327628891.00
-   11327660709.00
-   11327628891.00
-   11376658167.00
-   11376609033.00
-   11376609033.00
-   11376609033.00
-   11376658167.00
-   11376609033.00
-   11376658167.00
-   11376609033.00
-   11376609033.00
-   11376658167.00
-   11391397328.00
-   11391418672.00
-   11391397328.00
-   11391418672.00
-   11391397328.00
-   11391397328.00
-   11391418672.00
-   11391418672.00
-   11391418672.00
-   11391418672.00
-   12920229944.00
-   12920229944.00
-   12920109256.00
-   12920109256.00
-   12920229944.00
-   12920109256.00
-   12920109256.00
-   12920229944.00
-   12920229944.00
-   12920109256.00
-   13044663057.00
-   13044508143.00
-   13044663057.00
-   13044663057.00
-   13044508143.00
-   13044663057.00
-   13044663057.00
-   13044663057.00
-   13044508143.00
-   13044663057.00
-   11327660709.00
-   11327660709.00
-   11327628891.00
-   11327660709.00
-   11327628891.00
-   11327628891.00
-   11327660709.00
-   11327660709.00
-   11327660709.00
-   11327628891.00
-   11376658167.00
-   11376658167.00
-   11376609033.00
-   11376609033.00
-   11376609033.00
-   11376658167.00
-   11376609033.00
-   11376658167.00
-   11376609033.00
-   11376658167.00
-   11391418672.00
-   11391418672.00
-   11391418672.00
-   11391397328.00
-   11391418672.00
-   11391418672.00
-   11391397328.00
-   11391418672.00
-   11391418672.00
-   11391418672.00
-   12920229944.00
-   12920229944.00
-   12920229944.00
-   12920109256.00
-   12920229944.00
-   12920229944.00
-   12920229944.00
-   12920109256.00
-   12920229944.00
-   12920229944.00
-   13044508143.00
-   13044663057.00
-   13044663057.00
-   13044663057.00
-   13044508143.00
-   13044663057.00
-   13044508143.00
-   13044508143.00
-   13044663057.00
-   13044508143.00
-   14392420204.00
-   14392420204.00
-   14392258196.00
-   14392420204.00
-   14392420204.00
-   14392258196.00
-   14392258196.00
-   14392420204.00
-   14392258196.00
-   14392420204.00
-   16149621789.00
-   16149635811.00
-   16149621789.00
-   16149635811.00
-   16149635811.00
-   16149621789.00
-   16149621789.00
-   16149635811.00
-   16149621789.00
-   16149635811.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare edate.out output"
-diff -u edate.out - <<EOF
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare jdate.out output"
-diff -u jdate.out - <<EOF
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare moyr.out output"
-diff -u moyr.out - <<EOF
-    2071180800.00
-    2071180800.00
-    2071180800.00
-    2071180800.00
-    2071180800.00
-    2071180800.00
-    2071180800.00
-    2071180800.00
-    2071180800.00
-    2071180800.00
-    3081024000.00
-    3081024000.00
-    3081024000.00
-    3081024000.00
-    3081024000.00
-    3081024000.00
-    3081024000.00
-    3081024000.00
-    3081024000.00
-    3081024000.00
-    4219603200.00
-    4219603200.00
-    4219603200.00
-    4219603200.00
-    4219603200.00
-    4219603200.00
-    4219603200.00
-    4219603200.00
-    4219603200.00
-    4219603200.00
-    5858006400.00
-    5858006400.00
-    5858006400.00
-    5858006400.00
-    5858006400.00
-    5858006400.00
-    5858006400.00
-    5858006400.00
-    5858006400.00
-    5858006400.00
-    7472563200.00
-    7472563200.00
-    7472563200.00
-    7472563200.00
-    7472563200.00
-    7472563200.00
-    7472563200.00
-    7472563200.00
-    7472563200.00
-    7472563200.00
-    8090496000.00
-    8090496000.00
-    8090496000.00
-    8090496000.00
-    8090496000.00
-    8090496000.00
-    8090496000.00
-    8090496000.00
-    8090496000.00
-    8090496000.00
-   10112774400.00
-   10112774400.00
-   10112774400.00
-   10112774400.00
-   10112774400.00
-   10112774400.00
-   10112774400.00
-   10112774400.00
-   10112774400.00
-   10112774400.00
-   10943856000.00
-   10943856000.00
-   10943856000.00
-   10943856000.00
-   10943856000.00
-   10943856000.00
-   10943856000.00
-   10943856000.00
-   10943856000.00
-   10943856000.00
-   11325225600.00
-   11325225600.00
-   11325225600.00
-   11325225600.00
-   11325225600.00
-   11325225600.00
-   11325225600.00
-   11325225600.00
-   11325225600.00
-   11325225600.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   12918787200.00
-   12918787200.00
-   12918787200.00
-   12918787200.00
-   12918787200.00
-   12918787200.00
-   12918787200.00
-   12918787200.00
-   12918787200.00
-   12918787200.00
-   13042512000.00
-   13042512000.00
-   13042512000.00
-   13042512000.00
-   13042512000.00
-   13042512000.00
-   13042512000.00
-   13042512000.00
-   13042512000.00
-   13042512000.00
-   11325225600.00
-   11325225600.00
-   11325225600.00
-   11325225600.00
-   11325225600.00
-   11325225600.00
-   11325225600.00
-   11325225600.00
-   11325225600.00
-   11325225600.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   12918787200.00
-   12918787200.00
-   12918787200.00
-   12918787200.00
-   12918787200.00
-   12918787200.00
-   12918787200.00
-   12918787200.00
-   12918787200.00
-   12918787200.00
-   13042512000.00
-   13042512000.00
-   13042512000.00
-   13042512000.00
-   13042512000.00
-   13042512000.00
-   13042512000.00
-   13042512000.00
-   13042512000.00
-   13042512000.00
-   14391561600.00
-   14391561600.00
-   14391561600.00
-   14391561600.00
-   14391561600.00
-   14391561600.00
-   14391561600.00
-   14391561600.00
-   14391561600.00
-   14391561600.00
-   16148160000.00
-   16148160000.00
-   16148160000.00
-   16148160000.00
-   16148160000.00
-   16148160000.00
-   16148160000.00
-   16148160000.00
-   16148160000.00
-   16148160000.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare qyr.out output"
-diff -u qyr.out - <<EOF
-    2065910400.00
-    2065910400.00
-    2065910400.00
-    2065910400.00
-    2065910400.00
-    2065910400.00
-    2065910400.00
-    2065910400.00
-    2065910400.00
-    2065910400.00
-    3075753600.00
-    3075753600.00
-    3075753600.00
-    3075753600.00
-    3075753600.00
-    3075753600.00
-    3075753600.00
-    3075753600.00
-    3075753600.00
-    3075753600.00
-    4219603200.00
-    4219603200.00
-    4219603200.00
-    4219603200.00
-    4219603200.00
-    4219603200.00
-    4219603200.00
-    4219603200.00
-    4219603200.00
-    4219603200.00
-    5852736000.00
-    5852736000.00
-    5852736000.00
-    5852736000.00
-    5852736000.00
-    5852736000.00
-    5852736000.00
-    5852736000.00
-    5852736000.00
-    5852736000.00
-    7469884800.00
-    7469884800.00
-    7469884800.00
-    7469884800.00
-    7469884800.00
-    7469884800.00
-    7469884800.00
-    7469884800.00
-    7469884800.00
-    7469884800.00
-    8085398400.00
-    8085398400.00
-    8085398400.00
-    8085398400.00
-    8085398400.00
-    8085398400.00
-    8085398400.00
-    8085398400.00
-    8085398400.00
-    8085398400.00
-   10112774400.00
-   10112774400.00
-   10112774400.00
-   10112774400.00
-   10112774400.00
-   10112774400.00
-   10112774400.00
-   10112774400.00
-   10112774400.00
-   10112774400.00
-   10941177600.00
-   10941177600.00
-   10941177600.00
-   10941177600.00
-   10941177600.00
-   10941177600.00
-   10941177600.00
-   10941177600.00
-   10941177600.00
-   10941177600.00
-   11319868800.00
-   11319868800.00
-   11319868800.00
-   11319868800.00
-   11319868800.00
-   11319868800.00
-   11319868800.00
-   11319868800.00
-   11319868800.00
-   11319868800.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   12913603200.00
-   12913603200.00
-   12913603200.00
-   12913603200.00
-   12913603200.00
-   12913603200.00
-   12913603200.00
-   12913603200.00
-   12913603200.00
-   12913603200.00
-   13039833600.00
-   13039833600.00
-   13039833600.00
-   13039833600.00
-   13039833600.00
-   13039833600.00
-   13039833600.00
-   13039833600.00
-   13039833600.00
-   13039833600.00
-   11319868800.00
-   11319868800.00
-   11319868800.00
-   11319868800.00
-   11319868800.00
-   11319868800.00
-   11319868800.00
-   11319868800.00
-   11319868800.00
-   11319868800.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11375078400.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   12913603200.00
-   12913603200.00
-   12913603200.00
-   12913603200.00
-   12913603200.00
-   12913603200.00
-   12913603200.00
-   12913603200.00
-   12913603200.00
-   12913603200.00
-   13039833600.00
-   13039833600.00
-   13039833600.00
-   13039833600.00
-   13039833600.00
-   13039833600.00
-   13039833600.00
-   13039833600.00
-   13039833600.00
-   13039833600.00
-   14388883200.00
-   14388883200.00
-   14388883200.00
-   14388883200.00
-   14388883200.00
-   14388883200.00
-   14388883200.00
-   14388883200.00
-   14388883200.00
-   14388883200.00
-   16148160000.00
-   16148160000.00
-   16148160000.00
-   16148160000.00
-   16148160000.00
-   16148160000.00
-   16148160000.00
-   16148160000.00
-   16148160000.00
-   16148160000.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare sdate.out output"
-diff -u sdate.out - <<EOF
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    3083529600.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    4221590400.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    5859561600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    7472649600.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-    8092742400.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10114329600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   10945929600.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11327644800.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11376633600.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   11391408000.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   12920169600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   13044585600.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   14392339200.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-   16149628800.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare wkyr.out output"
-diff -u wkyr.out - <<EOF
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    2071958400.00
-    3083011200.00
-    3083011200.00
-    3083011200.00
-    3083011200.00
-    3083011200.00
-    3083011200.00
-    3083011200.00
-    3083011200.00
-    3083011200.00
-    3083011200.00
-    4221417600.00
-    4221417600.00
-    4221417600.00
-    4221417600.00
-    4221417600.00
-    4221417600.00
-    4221417600.00
-    4221417600.00
-    4221417600.00
-    4221417600.00
-    5859388800.00
-    5859388800.00
-    5859388800.00
-    5859388800.00
-    5859388800.00
-    5859388800.00
-    5859388800.00
-    5859388800.00
-    5859388800.00
-    5859388800.00
-    7472390400.00
-    7472390400.00
-    7472390400.00
-    7472390400.00
-    7472390400.00
-    7472390400.00
-    7472390400.00
-    7472390400.00
-    7472390400.00
-    7472390400.00
-    8092656000.00
-    8092656000.00
-    8092656000.00
-    8092656000.00
-    8092656000.00
-    8092656000.00
-    8092656000.00
-    8092656000.00
-    8092656000.00
-    8092656000.00
-   10114070400.00
-   10114070400.00
-   10114070400.00
-   10114070400.00
-   10114070400.00
-   10114070400.00
-   10114070400.00
-   10114070400.00
-   10114070400.00
-   10114070400.00
-   10945497600.00
-   10945497600.00
-   10945497600.00
-   10945497600.00
-   10945497600.00
-   10945497600.00
-   10945497600.00
-   10945497600.00
-   10945497600.00
-   10945497600.00
-   11327212800.00
-   11327212800.00
-   11327212800.00
-   11327212800.00
-   11327212800.00
-   11327212800.00
-   11327212800.00
-   11327212800.00
-   11327212800.00
-   11327212800.00
-   11376374400.00
-   11376374400.00
-   11376374400.00
-   11376374400.00
-   11376374400.00
-   11376374400.00
-   11376374400.00
-   11376374400.00
-   11376374400.00
-   11376374400.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   12919651200.00
-   12919651200.00
-   12919651200.00
-   12919651200.00
-   12919651200.00
-   12919651200.00
-   12919651200.00
-   12919651200.00
-   12919651200.00
-   12919651200.00
-   13044067200.00
-   13044067200.00
-   13044067200.00
-   13044067200.00
-   13044067200.00
-   13044067200.00
-   13044067200.00
-   13044067200.00
-   13044067200.00
-   13044067200.00
-   11327212800.00
-   11327212800.00
-   11327212800.00
-   11327212800.00
-   11327212800.00
-   11327212800.00
-   11327212800.00
-   11327212800.00
-   11327212800.00
-   11327212800.00
-   11376374400.00
-   11376374400.00
-   11376374400.00
-   11376374400.00
-   11376374400.00
-   11376374400.00
-   11376374400.00
-   11376374400.00
-   11376374400.00
-   11376374400.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   11390889600.00
-   12919651200.00
-   12919651200.00
-   12919651200.00
-   12919651200.00
-   12919651200.00
-   12919651200.00
-   12919651200.00
-   12919651200.00
-   12919651200.00
-   12919651200.00
-   13044067200.00
-   13044067200.00
-   13044067200.00
-   13044067200.00
-   13044067200.00
-   13044067200.00
-   13044067200.00
-   13044067200.00
-   13044067200.00
-   13044067200.00
-   14391907200.00
-   14391907200.00
-   14391907200.00
-   14391907200.00
-   14391907200.00
-   14391907200.00
-   14391907200.00
-   14391907200.00
-   14391907200.00
-   14391907200.00
-   16149456000.00
-   16149456000.00
-   16149456000.00
-   16149456000.00
-   16149456000.00
-   16149456000.00
-   16149456000.00
-   16149456000.00
-   16149456000.00
-   16149456000.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/formats/date-out.sh b/tests/formats/date-out.sh
deleted file mode 100755 (executable)
index fcc1fc7..0000000
+++ /dev/null
@@ -1,578 +0,0 @@
-#! /bin/sh
-
-TEMPDIR=/tmp/pspp-tst-$$
-mkdir -p $TEMPDIR
-trap 'cd /; rm -rf $TEMPDIR' 0
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    exit 2;
-}
-
-pass()
-{
-    exit 0;
-}
-
-cd $TEMPDIR
-
-activity="write pspp syntax"
-cat > date-out.pspp <<EOF
-set epoch=1930.
-data list /x 1-30 (datetime).
-begin data.
-10-6-1648 0:0:0
-30-6-1680 4:50:38.12301
-24-7-1716 12:31:35.23453
-19-6-1768 12:47:53.34505
-2-8-1819 1:26:0.45615
-27-3-1839 20:58:11.56677
-19-4-1903 7:36:5.18964
-25-8-1929 15:43:49.83132
-29-9-1941 4:25:9.01293
-19-4-1943 6:49:27.52375
-7-10-1943 2:57:52.01565
-17-3-1992 16:45:44.86529
-25-2-1996 21:30:57.82047
-29-9-41 4:25:9.15395
-19-4-43 6:49:27.10533
-7-10-43 2:57:52.48229
-17-3-92 16:45:44.65827
-25-2-96 21:30:57.58219
-10-11-2038 22:30:4.18347
-18-7-2094 1:56:51.59319
-end data.
-print outfile='date-out.out'/x(date9) ' | ' x(date11).
-print outfile='date-out.out'/x(adate8) ' | ' x(adate10).
-print outfile='date-out.out'/x(edate8) ' | ' x(edate10).
-print outfile='date-out.out'/x(jdate5) ' | ' x(jdate7).
-print outfile='date-out.out'/x(sdate8) ' | ' x(sdate10).
-print outfile='date-out.out'/x(qyr6) ' | ' x(qyr8).
-print outfile='date-out.out'/x(moyr6) ' | ' x(moyr8).
-print outfile='date-out.out'/x(wkyr8) ' | ' x(wkyr10).
-print outfile='date-out.out'/x(datetime17).
-print outfile='date-out.out'/x(datetime18).
-print outfile='date-out.out'/x(datetime19).
-print outfile='date-out.out'/x(datetime20).
-print outfile='date-out.out'/x(datetime21).
-print outfile='date-out.out'/x(datetime22).
-print outfile='date-out.out'/x(datetime22.1).
-print outfile='date-out.out'/x(datetime23.2).
-print outfile='date-out.out'/x(datetime24.3).
-print outfile='date-out.out'/x(datetime25.4).
-print outfile='date-out.out'/x(datetime26.5).
-execute.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv date-out.pspp
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output"
-diff -u date-out.out - <<EOF 
- ********* | 10-JUN-1648
- ******** | 06/10/1648
- ******** | 10.06.1648
- ***** | 1648162
- ******** | 1648/06/10
- ****** | 2 Q 1648
- ****** | JUN 1648
- ******** | 24 WK 1648
- 10-JUN-1648 00:00
-  10-JUN-1648 00:00
-   10-JUN-1648 00:00
- 10-JUN-1648 00:00:00
-  10-JUN-1648 00:00:00
-   10-JUN-1648 00:00:00
- 10-JUN-1648 00:00:00.0
- 10-JUN-1648 00:00:00.00
- 10-JUN-1648 00:00:00.000
- 10-JUN-1648 00:00:00.0000
- 10-JUN-1648 00:00:00.00000
- ********* | 30-JUN-1680
- ******** | 06/30/1680
- ******** | 30.06.1680
- ***** | 1680182
- ******** | 1680/06/30
- ****** | 2 Q 1680
- ****** | JUN 1680
- ******** | 26 WK 1680
- 30-JUN-1680 04:50
-  30-JUN-1680 04:50
-   30-JUN-1680 04:50
- 30-JUN-1680 04:50:38
-  30-JUN-1680 04:50:38
-   30-JUN-1680 04:50:38
- 30-JUN-1680 04:50:38.1
- 30-JUN-1680 04:50:38.12
- 30-JUN-1680 04:50:38.123
- 30-JUN-1680 04:50:38.1230
- 30-JUN-1680 04:50:38.12301
- ********* | 24-JUL-1716
- ******** | 07/24/1716
- ******** | 24.07.1716
- ***** | 1716206
- ******** | 1716/07/24
- ****** | 3 Q 1716
- ****** | JUL 1716
- ******** | 30 WK 1716
- 24-JUL-1716 12:31
-  24-JUL-1716 12:31
-   24-JUL-1716 12:31
- 24-JUL-1716 12:31:35
-  24-JUL-1716 12:31:35
-   24-JUL-1716 12:31:35
- 24-JUL-1716 12:31:35.2
- 24-JUL-1716 12:31:35.23
- 24-JUL-1716 12:31:35.235
- 24-JUL-1716 12:31:35.2345
- 24-JUL-1716 12:31:35.23453
- ********* | 19-JUN-1768
- ******** | 06/19/1768
- ******** | 19.06.1768
- ***** | 1768171
- ******** | 1768/06/19
- ****** | 2 Q 1768
- ****** | JUN 1768
- ******** | 25 WK 1768
- 19-JUN-1768 12:47
-  19-JUN-1768 12:47
-   19-JUN-1768 12:47
- 19-JUN-1768 12:47:53
-  19-JUN-1768 12:47:53
-   19-JUN-1768 12:47:53
- 19-JUN-1768 12:47:53.3
- 19-JUN-1768 12:47:53.35
- 19-JUN-1768 12:47:53.345
- 19-JUN-1768 12:47:53.3450
- 19-JUN-1768 12:47:53.34505
- ********* | 02-AUG-1819
- ******** | 08/02/1819
- ******** | 02.08.1819
- ***** | 1819214
- ******** | 1819/08/02
- ****** | 3 Q 1819
- ****** | AUG 1819
- ******** | 31 WK 1819
- 02-AUG-1819 01:26
-  02-AUG-1819 01:26
-   02-AUG-1819 01:26
- 02-AUG-1819 01:26:00
-  02-AUG-1819 01:26:00
-   02-AUG-1819 01:26:00
- 02-AUG-1819 01:26:00.5
- 02-AUG-1819 01:26:00.46
- 02-AUG-1819 01:26:00.456
- 02-AUG-1819 01:26:00.4562
- 02-AUG-1819 01:26:00.45615
- ********* | 27-MAR-1839
- ******** | 03/27/1839
- ******** | 27.03.1839
- ***** | 1839086
- ******** | 1839/03/27
- ****** | 1 Q 1839
- ****** | MAR 1839
- ******** | 13 WK 1839
- 27-MAR-1839 20:58
-  27-MAR-1839 20:58
-   27-MAR-1839 20:58
- 27-MAR-1839 20:58:11
-  27-MAR-1839 20:58:11
-   27-MAR-1839 20:58:11
- 27-MAR-1839 20:58:11.6
- 27-MAR-1839 20:58:11.57
- 27-MAR-1839 20:58:11.567
- 27-MAR-1839 20:58:11.5668
- 27-MAR-1839 20:58:11.56677
- ********* | 19-APR-1903
- ******** | 04/19/1903
- ******** | 19.04.1903
- ***** | 1903109
- ******** | 1903/04/19
- ****** | 2 Q 1903
- ****** | APR 1903
- ******** | 16 WK 1903
- 19-APR-1903 07:36
-  19-APR-1903 07:36
-   19-APR-1903 07:36
- 19-APR-1903 07:36:05
-  19-APR-1903 07:36:05
-   19-APR-1903 07:36:05
- 19-APR-1903 07:36:05.2
- 19-APR-1903 07:36:05.19
- 19-APR-1903 07:36:05.190
- 19-APR-1903 07:36:05.1896
- 19-APR-1903 07:36:05.18964
- ********* | 25-AUG-1929
- ******** | 08/25/1929
- ******** | 25.08.1929
- ***** | 1929237
- ******** | 1929/08/25
- ****** | 3 Q 1929
- ****** | AUG 1929
- ******** | 34 WK 1929
- 25-AUG-1929 15:43
-  25-AUG-1929 15:43
-   25-AUG-1929 15:43
- 25-AUG-1929 15:43:49
-  25-AUG-1929 15:43:49
-   25-AUG-1929 15:43:49
- 25-AUG-1929 15:43:49.8
- 25-AUG-1929 15:43:49.83
- 25-AUG-1929 15:43:49.831
- 25-AUG-1929 15:43:49.8313
- 25-AUG-1929 15:43:49.83132
- 29-SEP-41 | 29-SEP-1941
- 09/29/41 | 09/29/1941
- 29.09.41 | 29.09.1941
- 41272 | 1941272
- 41/09/29 | 1941/09/29
- 3 Q 41 | 3 Q 1941
- SEP 41 | SEP 1941
- 39 WK 41 | 39 WK 1941
- 29-SEP-1941 04:25
-  29-SEP-1941 04:25
-   29-SEP-1941 04:25
- 29-SEP-1941 04:25:09
-  29-SEP-1941 04:25:09
-   29-SEP-1941 04:25:09
- 29-SEP-1941 04:25:09.0
- 29-SEP-1941 04:25:09.01
- 29-SEP-1941 04:25:09.013
- 29-SEP-1941 04:25:09.0129
- 29-SEP-1941 04:25:09.01293
- 19-APR-43 | 19-APR-1943
- 04/19/43 | 04/19/1943
- 19.04.43 | 19.04.1943
- 43109 | 1943109
- 43/04/19 | 1943/04/19
- 2 Q 43 | 2 Q 1943
- APR 43 | APR 1943
- 16 WK 43 | 16 WK 1943
- 19-APR-1943 06:49
-  19-APR-1943 06:49
-   19-APR-1943 06:49
- 19-APR-1943 06:49:27
-  19-APR-1943 06:49:27
-   19-APR-1943 06:49:27
- 19-APR-1943 06:49:27.5
- 19-APR-1943 06:49:27.52
- 19-APR-1943 06:49:27.524
- 19-APR-1943 06:49:27.5238
- 19-APR-1943 06:49:27.52375
- 07-OCT-43 | 07-OCT-1943
- 10/07/43 | 10/07/1943
- 07.10.43 | 07.10.1943
- 43280 | 1943280
- 43/10/07 | 1943/10/07
- 4 Q 43 | 4 Q 1943
- OCT 43 | OCT 1943
- 40 WK 43 | 40 WK 1943
- 07-OCT-1943 02:57
-  07-OCT-1943 02:57
-   07-OCT-1943 02:57
- 07-OCT-1943 02:57:52
-  07-OCT-1943 02:57:52
-   07-OCT-1943 02:57:52
- 07-OCT-1943 02:57:52.0
- 07-OCT-1943 02:57:52.02
- 07-OCT-1943 02:57:52.016
- 07-OCT-1943 02:57:52.0156
- 07-OCT-1943 02:57:52.01565
- 17-MAR-92 | 17-MAR-1992
- 03/17/92 | 03/17/1992
- 17.03.92 | 17.03.1992
- 92077 | 1992077
- 92/03/17 | 1992/03/17
- 1 Q 92 | 1 Q 1992
- MAR 92 | MAR 1992
- 11 WK 92 | 11 WK 1992
- 17-MAR-1992 16:45
-  17-MAR-1992 16:45
-   17-MAR-1992 16:45
- 17-MAR-1992 16:45:44
-  17-MAR-1992 16:45:44
-   17-MAR-1992 16:45:44
- 17-MAR-1992 16:45:44.9
- 17-MAR-1992 16:45:44.87
- 17-MAR-1992 16:45:44.865
- 17-MAR-1992 16:45:44.8653
- 17-MAR-1992 16:45:44.86529
- 25-FEB-96 | 25-FEB-1996
- 02/25/96 | 02/25/1996
- 25.02.96 | 25.02.1996
- 96056 | 1996056
- 96/02/25 | 1996/02/25
- 1 Q 96 | 1 Q 1996
- FEB 96 | FEB 1996
-  8 WK 96 |  8 WK 1996
- 25-FEB-1996 21:30
-  25-FEB-1996 21:30
-   25-FEB-1996 21:30
- 25-FEB-1996 21:30:57
-  25-FEB-1996 21:30:57
-   25-FEB-1996 21:30:57
- 25-FEB-1996 21:30:57.8
- 25-FEB-1996 21:30:57.82
- 25-FEB-1996 21:30:57.820
- 25-FEB-1996 21:30:57.8205
- 25-FEB-1996 21:30:57.82047
- 29-SEP-41 | 29-SEP-1941
- 09/29/41 | 09/29/1941
- 29.09.41 | 29.09.1941
- 41272 | 1941272
- 41/09/29 | 1941/09/29
- 3 Q 41 | 3 Q 1941
- SEP 41 | SEP 1941
- 39 WK 41 | 39 WK 1941
- 29-SEP-1941 04:25
-  29-SEP-1941 04:25
-   29-SEP-1941 04:25
- 29-SEP-1941 04:25:09
-  29-SEP-1941 04:25:09
-   29-SEP-1941 04:25:09
- 29-SEP-1941 04:25:09.2
- 29-SEP-1941 04:25:09.15
- 29-SEP-1941 04:25:09.154
- 29-SEP-1941 04:25:09.1539
- 29-SEP-1941 04:25:09.15395
- 19-APR-43 | 19-APR-1943
- 04/19/43 | 04/19/1943
- 19.04.43 | 19.04.1943
- 43109 | 1943109
- 43/04/19 | 1943/04/19
- 2 Q 43 | 2 Q 1943
- APR 43 | APR 1943
- 16 WK 43 | 16 WK 1943
- 19-APR-1943 06:49
-  19-APR-1943 06:49
-   19-APR-1943 06:49
- 19-APR-1943 06:49:27
-  19-APR-1943 06:49:27
-   19-APR-1943 06:49:27
- 19-APR-1943 06:49:27.1
- 19-APR-1943 06:49:27.11
- 19-APR-1943 06:49:27.105
- 19-APR-1943 06:49:27.1053
- 19-APR-1943 06:49:27.10533
- 07-OCT-43 | 07-OCT-1943
- 10/07/43 | 10/07/1943
- 07.10.43 | 07.10.1943
- 43280 | 1943280
- 43/10/07 | 1943/10/07
- 4 Q 43 | 4 Q 1943
- OCT 43 | OCT 1943
- 40 WK 43 | 40 WK 1943
- 07-OCT-1943 02:57
-  07-OCT-1943 02:57
-   07-OCT-1943 02:57
- 07-OCT-1943 02:57:52
-  07-OCT-1943 02:57:52
-   07-OCT-1943 02:57:52
- 07-OCT-1943 02:57:52.5
- 07-OCT-1943 02:57:52.48
- 07-OCT-1943 02:57:52.482
- 07-OCT-1943 02:57:52.4823
- 07-OCT-1943 02:57:52.48229
- 17-MAR-92 | 17-MAR-1992
- 03/17/92 | 03/17/1992
- 17.03.92 | 17.03.1992
- 92077 | 1992077
- 92/03/17 | 1992/03/17
- 1 Q 92 | 1 Q 1992
- MAR 92 | MAR 1992
- 11 WK 92 | 11 WK 1992
- 17-MAR-1992 16:45
-  17-MAR-1992 16:45
-   17-MAR-1992 16:45
- 17-MAR-1992 16:45:44
-  17-MAR-1992 16:45:44
-   17-MAR-1992 16:45:44
- 17-MAR-1992 16:45:44.7
- 17-MAR-1992 16:45:44.66
- 17-MAR-1992 16:45:44.658
- 17-MAR-1992 16:45:44.6583
- 17-MAR-1992 16:45:44.65827
- 25-FEB-96 | 25-FEB-1996
- 02/25/96 | 02/25/1996
- 25.02.96 | 25.02.1996
- 96056 | 1996056
- 96/02/25 | 1996/02/25
- 1 Q 96 | 1 Q 1996
- FEB 96 | FEB 1996
-  8 WK 96 |  8 WK 1996
- 25-FEB-1996 21:30
-  25-FEB-1996 21:30
-   25-FEB-1996 21:30
- 25-FEB-1996 21:30:57
-  25-FEB-1996 21:30:57
-   25-FEB-1996 21:30:57
- 25-FEB-1996 21:30:57.6
- 25-FEB-1996 21:30:57.58
- 25-FEB-1996 21:30:57.582
- 25-FEB-1996 21:30:57.5822
- 25-FEB-1996 21:30:57.58219
- ********* | 10-NOV-2038
- ******** | 11/10/2038
- ******** | 10.11.2038
- ***** | 2038314
- ******** | 2038/11/10
- ****** | 4 Q 2038
- ****** | NOV 2038
- ******** | 45 WK 2038
- 10-NOV-2038 22:30
-  10-NOV-2038 22:30
-   10-NOV-2038 22:30
- 10-NOV-2038 22:30:04
-  10-NOV-2038 22:30:04
-   10-NOV-2038 22:30:04
- 10-NOV-2038 22:30:04.2
- 10-NOV-2038 22:30:04.18
- 10-NOV-2038 22:30:04.183
- 10-NOV-2038 22:30:04.1835
- 10-NOV-2038 22:30:04.18347
- ********* | 18-JUL-2094
- ******** | 07/18/2094
- ******** | 18.07.2094
- ***** | 2094199
- ******** | 2094/07/18
- ****** | 3 Q 2094
- ****** | JUL 2094
- ******** | 29 WK 2094
- 18-JUL-2094 01:56
-  18-JUL-2094 01:56
-   18-JUL-2094 01:56
- 18-JUL-2094 01:56:51
-  18-JUL-2094 01:56:51
-   18-JUL-2094 01:56:51
- 18-JUL-2094 01:56:51.6
- 18-JUL-2094 01:56:51.59
- 18-JUL-2094 01:56:51.593
- 18-JUL-2094 01:56:51.5932
- 18-JUL-2094 01:56:51.59319
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="write pspp syntax"
-cat > bad-date-out.pspp <<EOF
-set epoch=1930.
-set errors=none.
-data list list /x.
-begin data.
-0
--1
-3e11
-end data.
-print outfile='bad-date.out'/x(date9) ' | ' x(date11).
-print outfile='bad-date.out'/x(adate8) ' | ' x(adate10).
-print outfile='bad-date.out'/x(edate8) ' | ' x(edate10).
-print outfile='bad-date.out'/x(jdate5) ' | ' x(jdate7).
-print outfile='bad-date.out'/x(sdate8) ' | ' x(sdate10).
-print outfile='bad-date.out'/x(qyr6) ' | ' x(qyr8).
-print outfile='bad-date.out'/x(moyr6) ' | ' x(moyr8).
-print outfile='bad-date.out'/x(wkyr8) ' | ' x(wkyr10).
-print outfile='bad-date.out'/x(datetime17).
-print outfile='bad-date.out'/x(datetime18).
-print outfile='bad-date.out'/x(datetime19).
-print outfile='bad-date.out'/x(datetime20).
-print outfile='bad-date.out'/x(datetime21).
-print outfile='bad-date.out'/x(datetime22).
-print outfile='bad-date.out'/x(datetime22.1).
-print outfile='bad-date.out'/x(datetime23.2).
-print outfile='bad-date.out'/x(datetime24.3).
-print outfile='bad-date.out'/x(datetime25.4).
-print outfile='bad-date.out'/x(datetime26.5).
-execute.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv bad-date-out.pspp
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output"
-diff -u bad-date.out - <<EOF 
-         . |           .
-        . |          .
-        . |          .
-     . |       .
-        . |          .
-      . |        .
-      . |        .
-        . |          .
-                 .
-                  .
-                   .
-                    .
-                     .
-                      .
-                     . 
-                     .  
-                     .   
-                     .    
-                     .     
-         . |           .
-        . |          .
-        . |          .
-     . |       .
-        . |          .
-      . |        .
-      . |        .
-        . |          .
-                 .
-                  .
-                   .
-                    .
-                     .
-                      .
-                     . 
-                     .  
-                     .   
-                     .    
-                     .     
- ********* | ***********
- ******** | **********
- ******** | **********
- ***** | *******
- ******** | **********
- ****** | ********
- ****** | ********
- ******** | **********
- 28-MAY-**** 05:20
-  28-MAY-**** 05:20
-   28-MAY-**** 05:20
- 28-MAY-**** 05:20:00
-  28-MAY-**** 05:20:00
-   28-MAY-**** 05:20:00
- 28-MAY-**** 05:20:00.0
- 28-MAY-**** 05:20:00.00
- 28-MAY-**** 05:20:00.000
- 28-MAY-**** 05:20:00.0000
- 28-MAY-**** 05:20:00.00000
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/formats/float-format.sh b/tests/formats/float-format.sh
deleted file mode 100755 (executable)
index 5fbc28b..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-#! /bin/sh
-
-# Tests floating-point format conversions.
-
-TEMPDIR=/tmp/pspp-tst-$$
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-activity="create test program"
-sed -e 's/#.*//' \
-    -e 's/^[   ]*//' \
-    -e 's/[    ]*$//' \
-    -e 's/^\(..*\)$/DEBUG FLOAT FORMAT \1./' \
-    > $TEMPDIR/float-format.pspp <<'EOF'
-# Each of the tests below checks that conversion between
-# floating-point formats works correctly.  Comparisons that use ==
-# require that conversion from any format on the line to any other
-# format on the line work losslessly.  Comparisons that use => only
-# check that conversions work losslessly in the given direction.
-
-# Key to format names:
-# isl: IEEE single-precision, little endian
-# isb: IEEE single-precision, big endian
-# idl: IEEE double-precision, little endian
-# idb: IEEE double-precision, big endian
-# vf: VAX F
-# vd: VAX D
-# vg: VAX G
-# zs: Z architecture short
-# zl: Z architecture long
-# x: hexadecimal digits
-
-# IEEE special values.
- 0 == isb(x'00000000')
-x('Infinity') == isb(x'7f800000')
-x('-Infinity') == isb(x'ff800000')
-x('NaN:') => isb(x'7f800001')          # NaN requires nonzero fraction.
-x('NaN:e000000000000000') == isb(x'7ff00000') == idb(x'7ffe000000000000')
-x('NaN:5a5a5e0000000000') == isb(x'7fad2d2f') == idb(x'7ff5a5a5e0000000')
-x('NaN:975612abcdef4000') == idb(x'7ff975612abcdef4')
-x('-NaN:e000000000000000') == isb(x'fff00000') == idb(x'fffe000000000000')
-x('-NaN:5a5a5e0000000000') == isb(x'ffad2d2f') == idb(x'fff5a5a5e0000000')
-x('-NaN:975612abcdef4000') == idb(x'fff975612abcdef4')
-
-# PSPP special values.
-x('Missing') == isb(x'ff7fffff') == idb(x'ffefffffffffffff') == isl(x'ffff7fff') == idl(x'ffffffffffffefff') == vf(x'ffffffff') == vd(x'ffffffffffffffff') == vg(x'ffffffffffffffff') == zs(x'ffffffff') == zl(x'ffffffffffffffff')
-x('Lowest') == isb(x'ff7ffffe') == idb(x'ffeffffffffffffe') == isl(x'feff7fff') == idl(x'feffffffffffefff') == vf(x'fffffeff') == vd(x'fffffeffffffffff') == vg(x'fffffeffffffffff') == zs(x'fffffffe') == zl(x'fffffffffffffffe')
-x('Highest') == isb(x'7f7fffff') == idb(x'7fefffffffffffff') == isl(x'ffff7f7f') == idl(x'ffffffffffffef7f') == vf(x'ff7fffff') == vd(x'ffffffffff7fffff') == vg(x'ffffffffff7fffff') == zs(x'7fffffff') == zl(x'7fffffffffffffff')
-
-# From Wikipedia.
-0.15625 == isb(b'00111110001000000000000000000000')
--118.625 == isb(b'11000010111011010100000000000000')
-
-# http://www.psc.edu/general/software/packages/ieee/ieee.html
-x('NaN:0400000000000000') == isb(b'01111111100000100000000000000000')
-x('-NaN:2225540000000000') == isb(b'11111111100100010001001010101010')
-2 == isb(b'01000000000000000000000000000000')
-6.5 == isb(b'01000000110100000000000000000000')
--6.5 == isb(b'11000000110100000000000000000000')
-x('.4p-124') == isb(b'00000000100000000000000000000000')
-x('.2p-124') == isb(b'00000000010000000000000000000000')
-
-# Using converter at http://babbage.cs.qc.edu/IEEE-754/Decimal.html
-# plus Emacs 'calc' to convert decimal to hexadecimal
-x('.7b74bc6a7ef9db23p8') => isb(x'42f6e979')           # 123.456
-x('.7b74bc6a7ef9db23p8') => idb(x'405edd2f1a9fbe77')
-x('.817427d2d4642004p-12') => isb(x'39017428')         # .0001234567
-x('.817427d2d4642004p-12') => idb(x'3f202e84fa5a8c84')
-x('.446c3b15f9926688p168') => isb(x'7f800000')         # 1e50; overflow
-x('.446c3b15f9926688p168') => idb(x'4a511b0ec57e649a')
-
-# From multiple editions of the z/Architecture Principles of Operation
-# manual.
-             1.0 == zs(x'41100000') == isb(x'3f800000')
-             0.5 == zs(x'40800000') == isb(x'3f000000')
-       x('.4p-4') == zs(x'3f400000') == isb(x'3c800000')
-               0 == zs(x'00000000') == isb(x'00000000')
-                    zs(x'80000000') == isb(x'80000000')
-             -15 == zs(x'c1f00000') == isb(x'c1700000')
-# x('.ffffffp252') == zs(x'7fffffff')
-      x('.3b4p8') == zs(x'423b4000')
-     x('.1p-256') == zs(x'00100000')
-     x('.4p-124') == zs(x'21400000') == isb(x'00800000')
-     x('.8p-148') == zs(x'1b800000') == isb(x'00000001')
-# x('.ffffffp128') == zs(x'60ffffff') == isb(x'7f7fffff')
-     x('.1p-256') == zs(x'00100000')
-     x('.1p-256') => isb(x'00000000')              # Underflow to zero.
- x('.ffffffp248') == zs(x'7effffff')
- x('.ffffffp248') => isb(x'7f800000')              # Overflow to +Infinity.
-
-            x('.4p-1020') => zl(x'0000000000000000')     # Underflow to zero.
-            x('.4p-1020') == idb(x'0010000000000000')
-            x('.4p-1072') => zl(x'0000000000000000')     # Underflow to zero.
-            x('.4p-1072') => idb(x'0000000000000001')
-x('.fffffffffffff8p1024') => zl(x'7fffffffffffffff')     # Overflow to maxval.
-x('.fffffffffffff8p1024') => idb(x'7fefffffffffffff')
-            x('.1p-256') == zl(x'0010000000000000') == idb(x'2fb0000000000000')
- x('.ffffffffffffffp248') == zl(x'7effffffffffffff')
- x('.ffffffffffffffp248') => idb(x'4f70000000000000')  # Loses precision.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP --testing-mode -o pspp.csv $TEMPDIR/float-format.pspp
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/formats/format-guesser.sh b/tests/formats/format-guesser.sh
deleted file mode 100755 (executable)
index cf7bdb7..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-#! /bin/sh
-
-# Tests guessing of data formats from data.
-
-TEMPDIR=/tmp/pspp-tst-$$
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-activity="create test data"
-sed -ne 's/#.*//;/^[   ]*$/!p' > $TEMPDIR/test-list <<'EOF'
-# No data.
-=> F8.2
-"" => F8.2
-"." => F8.2
-
-# Numeric formats.
-"1.2" => F3.1
-"$1.2" => DOLLAR4.1
-"1.2%" => PCT4.1
-"$1.2%" => A5
-"1e5" => E3.0
-"1e+5" => E4.0
-"1+5" => E3.0
-"1-5" => E3.0
-"1.2e5" => E5.1
-"1.3e+5" => E6.1
-"1.4+5" => E5.1
-"1e" => A2
-"1e+" => A3
-"1+" => A2
-"1-" => A2
-"1.5-5" => E5.1
-"1,123" => COMMA5.0         # Is , is grouping or decimal? Assume grouping.
-"1.123" => F5.3                    # Ditto.
-"1,12" => F4.2             # Not a group of 3, so last delim must be decimal.
-"1.12" => F4.2             # Ditto.
-"1,1234" => F6.4           # Not a group of 3, so last delim must be decimal.
-"1.1234" => F6.4           # Ditto.
-"$1.234" => DOLLAR6.3       # Dollar sign means decimal has to be '.'.
-"$1,234" => DOLLAR6.0       # Ditto.
-"1.234%" => PCT6.3          # Percent sign means decimal has to be '.'.
-"1,234%" => PCT6.0          # Ditto.
-"1,123.456" => COMMA9.3            # Both '.' and ',', so last delim must be decimal.
-"1.123,456" => DOT9.3      # Ditto.
-"1,123,456.45" => COMMA12.2 # Ditto.
-"1.123.456,45" => DOT12.2   # Ditto.
-"1,123,456" => COMMA9.0            # Ditto.
-"1.123.456" => DOT9.0      # Ditto.
-
-# Date and time formats.
-"01-OCT-1978" => DATE11
-"01-x-1978" => EDATE9          # Roman numeral for month.
-"01-13-99" => ADATE8
-"1-13-99" => ADATE7 (ADATE8)
-"13-01-99" => EDATE8
-"13-1-99" => EDATE7 (EDATE8)
-"32-1-1" => SDATE6 (SDATE8)
-"1q01" => QYR4
-"1Q01" => QYR4
-"1 q 01" => QYR6
-"1 Q 01" => QYR6
-"1q2001" => QYR6
-"1Q2001" => QYR6
-"1 q 2001" => QYR8
-"1 Q 2001" => QYR8
-"oct 05" => MOYR6
-"oct 2005" => MOYR8
-"1-1-01 1:2" => A10            # Minute needs at least two digits.
-"1-1-01 1:02" => DATETIME11.0 (DATETIME17.0)
-"1-1-01 1:02:3" => A13         # Second needs at least two digits.
-"1-1-01 1:02:03" => DATETIME20.0
-"1-1-01 1:02:03.1" => DATETIME20.1 (DATETIME22.1)
-"1-1-01 +1:02:03.1" => DATETIME20.1 (DATETIME22.1)
-"1-1-01 -1:02:03.1" => DATETIME20.1 (DATETIME22.1)
-"1:30" => TIME4.0 (TIME5.0)
-"1:30:05" => TIME8.0
-"-1:30" => TIME5.0
-"+1:30" => TIME5.0
-"-1:30:15" => TIME8.0
-"+1:30:15" => TIME8.0
-"-1:30:15.5" => TIME10.1
-"+1:30:15.75" => TIME11.2
-"1 1:30" => DTIME6.0 (DTIME8.0)
-"+1 1:30" => DTIME7.0 (DTIME8.0)
-"-1 1:30" => DTIME7.0 (DTIME8.0)
-"-1-13-99" => A8
-"+1-13-99" => A8
-"1+13+99" => A7
-"1:00:01.03" => TIME10.2 (TIME11.2)
-"12 1:00:01.3" => DTIME12.1 (DTIME13.1)
-"jan" => MONTH3
-"Feb" => MONTH3
-"MAR" => MONTH3
-"i" => A1                      # Not detected as MONTH format.
-"v" => A1
-"ix" => A2
-"x" => A1
-"january" => MONTH7
-"janaury" => MONTH7
-"february" => MONTH8
-"febraury" => MONTH8
-"march" => MONTH5
-"marhc" => MONTH5
-"april" => MONTH5
-"may" => MONTH3
-"june" => MONTH4
-"july" => MONTH4
-"august" => MONTH6
-"september" => MONTH9
-"october" => MONTH7
-"november" => MONTH8
-"decmeber" => MONTH8
-"december" => MONTH8
-"monady" => WKDAY6
-"tuseday" => WKDAY7
-"wedensday" => WKDAY9
-"thurdsay" => WKDAY8
-"fridya" => WKDAY6
-"saturady" => WKDAY8
-"sudnay" => WKDAY6
-
-# Ambiguous; bias in favor of more sensible DD/MM/YY format:
-"1/1/1978" => EDATE8
-"01/01/01" => EDATE8
-
-# Several ambiguous dates can be clarified by one unambiguous example:
-"1/1/1978" "1/2/1978" "1/3/1978" "1/13/1978" => ADATE9 # MM/DD/YY
-"01/01/01" "02/01/01" "03/01/01" "13/01/01" => EDATE8  # DD/MM/YY
-"01/01/01" "02/01/01" "03/01/01" "2013/01/01" => SDATE10 # YY/MM/DD
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="create syntax file"
-{
-  echo "SET DECIMAL=DOT." &&
-  sed < $TEMPDIR/test-list -e 's#^\(.*\)=> \(.*\)$#DEBUG FORMAT GUESSER \1.#'
-} > $TEMPDIR/test.stat
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP --testing-mode -o pspp.csv \
-        $TEMPDIR/test.stat >$TEMPDIR/test.err 2> $TEMPDIR/test.out
-
-activity="compare output"
-perl -pi -e 's/^\s*$//g' $TEMPDIR/test-list $TEMPDIR/test.out
-diff -b $TEMPDIR/test-list $TEMPDIR/test.out
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/formats/ib-in.expected.cmp.gz b/tests/formats/ib-in.expected.cmp.gz
deleted file mode 100644 (file)
index 19e1fa4..0000000
Binary files a/tests/formats/ib-in.expected.cmp.gz and /dev/null differ
diff --git a/tests/formats/ib-in.sh b/tests/formats/ib-in.sh
deleted file mode 100755 (executable)
index f91915b..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-#! /bin/sh
-
-TEMPDIR=/tmp/pspp-tst-$$
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-: ${PERL:=perl}
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="generate data input file"
-$PERL -e 'print pack "n", $_ foreach 0...65535' > ib-in.data
-
-activity="write pspp syntax"
-cat > ib-in.pspp <<'EOF'
-SET RIB=MSBFIRST.
-SET ERRORS=NONE.
-SET MXWARNS=10000000.
-SET MXERRS=10000000.
-FILE HANDLE data/NAME='ib-in.data'/MODE=IMAGE/LRECL=2.
-DATA LIST FILE=data/ib 1-2 (IB) pib 1-2 (PIB) pibhex 1-2 (PIBHEX).
-COMPUTE x=$CASENUM - 1.
-PRINT OUTFILE='ib-in.out'/x (PIBHEX4) ' ' ib pib pibhex.
-EXECUTE.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv ib-in.pspp
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="gunzip expected results"
-gzip -cd < $top_srcdir/tests/formats/ib-in.expected.cmp.gz > ib-in.expected.cmp
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="decompress expected results"
-$PERL -pe "printf ' %04X ', $.-1" < ib-in.expected.cmp > ib-in.expected
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output"
-diff -u ib-in.expected ib-in.out
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/formats/inexactify.c b/tests/formats/inexactify.c
deleted file mode 100644 (file)
index 3b94d15..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/* PSPP - a program for statistical analysis.
-   Copyright (C) 2006, 2010 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
-   the Free Software Foundation, either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>. */
-
-#include <config.h>
-
-#include <ctype.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Replaces insignificant digits by # to facilitate textual
-   comparisons.  Not a perfect solution to the general-purpose
-   comparison problem, because rounding that affects earlier
-   digits can still cause differences. */
-int
-main (void)
-{
-  bool in_quotes = false;
-  bool in_exponent = false;
-  int digits = 0;
-
-  for (;;)
-    {
-      int c = getchar ();
-      if (c == EOF)
-        break;
-      else if (c == '\n')
-        in_quotes = false;
-      else if (c == '"')
-        {
-          in_quotes = !in_quotes;
-          in_exponent = false;
-          digits = 0;
-        }
-      else if (in_quotes && !in_exponent)
-        {
-          if (strchr ("+dDeE", c) != NULL || (c == '-' && digits))
-            in_exponent = true;
-          else if (strchr ("0123456789}JKLMNOPQR", c) != NULL)
-            {
-              if (digits || c >= '1')
-                digits++;
-              if (digits > 13)
-                c = isdigit (c) ? '#' : '@';
-            }
-        }
-      putchar (c);
-    }
-  return EXIT_SUCCESS;
-}
diff --git a/tests/formats/legacy-in.expected.cmp.gz b/tests/formats/legacy-in.expected.cmp.gz
deleted file mode 100644 (file)
index 952f9b5..0000000
Binary files a/tests/formats/legacy-in.expected.cmp.gz and /dev/null differ
diff --git a/tests/formats/legacy-in.sh b/tests/formats/legacy-in.sh
deleted file mode 100755 (executable)
index bdf41c5..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-#! /bin/sh
-
-TEMPDIR=/tmp/pspp-tst-$$
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-: ${PERL:=perl}
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="generate data input file"
-$PERL -e 'print pack "n", $_ foreach 0...65535' > legacy-in.data
-
-activity="write pspp syntax"
-cat > legacy-in.pspp <<'EOF'
-SET ERRORS=NONE.
-SET MXWARNS=10000000.
-SET MXERRS=10000000.
-FILE HANDLE data/NAME='legacy-in.data'/MODE=IMAGE/LRECL=2.
-DATA LIST FILE=data/n 1-2 (N) z 1-2 (z).
-COMPUTE x=$CASENUM - 1.
-PRINT OUTFILE='legacy-in.out'/x (PIBHEX4) ' ' N Z.
-EXECUTE.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv legacy-in.pspp
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="gunzip expected results"
-gzip -cd < $top_srcdir/tests/formats/legacy-in.expected.cmp.gz > legacy-in.expected.cmp
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="decompress expected results"
-$PERL -pe "printf ' %04X ', $.-1" < legacy-in.expected.cmp > legacy-in.expected
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output"
-diff -u legacy-in.expected legacy-in.out
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/formats/month-in.sh b/tests/formats/month-in.sh
deleted file mode 100755 (executable)
index 1627c70..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-#! /bin/sh
-
-TEMPDIR=/tmp/pspp-tst-$$
-mkdir -p $TEMPDIR
-trap 'cd /; rm -rf $TEMPDIR' 0
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    exit 2;
-}
-
-pass()
-{
-    exit 0;
-}
-
-cd $TEMPDIR
-
-activity="write pspp syntax"
-cat > month-in.pspp <<EOF
-set errors=none.
-set mxwarns=10000000.
-data list /month3 1-3 (month)
-           month4 1-4 (month)
-           month5 1-5 (month)
-           month6 1-6 (month)
-           month7 1-7 (month)
-           month8 1-8 (month)
-           month9 1-9 (month)
-           month10 1-10 (month).
-begin data.
-
-.
-i
-ii
-iii
-iiii
-iv
-v
-vi
-vii
-viii
-ix
-viiii
-x
-xi
-xii
-0
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-january
-janaury
-february
-febraury
-march
-marhc
-april
-may
-june
-july
-august
-september
-october
-november
-decmeber
-december
-end data.
-formats all (month3).
-print outfile='month-in.out'/all.
-execute.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv month-in.pspp
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output"
-diff -u month-in.out - <<EOF
-   .   .   .   .   .   .   .   . 
-   .   .   .   .   .   .   .   . 
- JAN JAN JAN JAN JAN JAN JAN JAN 
- FEB FEB FEB FEB FEB FEB FEB FEB 
- MAR MAR MAR MAR MAR MAR MAR MAR 
- MAR   .   .   .   .   .   .   . 
- APR APR APR APR APR APR APR APR 
- MAY MAY MAY MAY MAY MAY MAY MAY 
- JUN JUN JUN JUN JUN JUN JUN JUN 
- JUL JUL JUL JUL JUL JUL JUL JUL 
- JUL AUG AUG AUG AUG AUG AUG AUG 
- SEP SEP SEP SEP SEP SEP SEP SEP 
- JUL AUG AUG AUG AUG AUG AUG AUG 
- OCT OCT OCT OCT OCT OCT OCT OCT 
- NOV NOV NOV NOV NOV NOV NOV NOV 
- DEC DEC DEC DEC DEC DEC DEC DEC 
-   .   .   .   .   .   .   .   . 
- JAN JAN JAN JAN JAN JAN JAN JAN 
- FEB FEB FEB FEB FEB FEB FEB FEB 
- MAR MAR MAR MAR MAR MAR MAR MAR 
- APR APR APR APR APR APR APR APR 
- MAY MAY MAY MAY MAY MAY MAY MAY 
- JUN JUN JUN JUN JUN JUN JUN JUN 
- JUL JUL JUL JUL JUL JUL JUL JUL 
- AUG AUG AUG AUG AUG AUG AUG AUG 
- SEP SEP SEP SEP SEP SEP SEP SEP 
- OCT OCT OCT OCT OCT OCT OCT OCT 
- NOV NOV NOV NOV NOV NOV NOV NOV 
- DEC DEC DEC DEC DEC DEC DEC DEC 
-   .   .   .   .   .   .   .   . 
- JAN JAN JAN JAN JAN JAN JAN JAN 
- JAN JAN JAN JAN JAN JAN JAN JAN 
- FEB FEB FEB FEB FEB FEB FEB FEB 
- FEB FEB FEB FEB FEB FEB FEB FEB 
- MAR MAR MAR MAR MAR MAR MAR MAR 
- MAR MAR MAR MAR MAR MAR MAR MAR 
- APR APR APR APR APR APR APR APR 
- MAY MAY MAY MAY MAY MAY MAY MAY 
- JUN JUN JUN JUN JUN JUN JUN JUN 
- JUL JUL JUL JUL JUL JUL JUL JUL 
- AUG AUG AUG AUG AUG AUG AUG AUG 
- SEP SEP SEP SEP SEP SEP SEP SEP 
- OCT OCT OCT OCT OCT OCT OCT OCT 
- NOV NOV NOV NOV NOV NOV NOV NOV 
- DEC DEC DEC DEC DEC DEC DEC DEC 
- DEC DEC DEC DEC DEC DEC DEC DEC 
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/formats/month-out.sh b/tests/formats/month-out.sh
deleted file mode 100755 (executable)
index 67a773a..0000000
+++ /dev/null
@@ -1,997 +0,0 @@
-#! /bin/sh
-
-TEMPDIR=/tmp/pspp-tst-$$
-mkdir -p $TEMPDIR
-trap 'cd /; rm -rf $TEMPDIR' 0
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    exit 2;
-}
-
-pass()
-{
-    exit 0;
-}
-
-cd $TEMPDIR
-
-activity="write pspp syntax"
-cat > month-out.pspp <<EOF
-set errors=none.
-set mxerr=1000000.
-set mxwarns=10000000.
-data list /x 1-10.
-begin data.
-
-0
-0.5
-0.9
-1
-2
-3
-4
-4.1
-4.5
-4.9
-5
-6
-7
-7.1
-7.5
-7.9
-8
-9
-10
-11
-12
-13
-end data.
-print outfile='month-out.out'/x(month3).
-print outfile='month-out.out'/x(month4).
-print outfile='month-out.out'/x(month5).
-print outfile='month-out.out'/x(month6).
-print outfile='month-out.out'/x(month7).
-print outfile='month-out.out'/x(month8).
-print outfile='month-out.out'/x(month9).
-print outfile='month-out.out'/x(month10).
-print outfile='month-out.out'/x(month11).
-print outfile='month-out.out'/x(month12).
-print outfile='month-out.out'/x(month13).
-print outfile='month-out.out'/x(month14).
-print outfile='month-out.out'/x(month15).
-print outfile='month-out.out'/x(month16).
-print outfile='month-out.out'/x(month17).
-print outfile='month-out.out'/x(month18).
-print outfile='month-out.out'/x(month19).
-print outfile='month-out.out'/x(month20).
-print outfile='month-out.out'/x(month21).
-print outfile='month-out.out'/x(month22).
-print outfile='month-out.out'/x(month23).
-print outfile='month-out.out'/x(month24).
-print outfile='month-out.out'/x(month25).
-print outfile='month-out.out'/x(month26).
-print outfile='month-out.out'/x(month27).
-print outfile='month-out.out'/x(month28).
-print outfile='month-out.out'/x(month29).
-print outfile='month-out.out'/x(month30).
-print outfile='month-out.out'/x(month31).
-print outfile='month-out.out'/x(month32).
-print outfile='month-out.out'/x(month33).
-print outfile='month-out.out'/x(month34).
-print outfile='month-out.out'/x(month35).
-print outfile='month-out.out'/x(month36).
-print outfile='month-out.out'/x(month37).
-print outfile='month-out.out'/x(month38).
-print outfile='month-out.out'/x(month39).
-print outfile='month-out.out'/x(month40).
-execute.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv month-out.pspp
-if [ $? -eq 0 ] ; then no_result ; fi
-
-activity="compare output"
-diff -u month-out.out - <<EOF 
-   .
-    .
-     .
-      .
-       .
-        .
-         .
-          .
-           .
-            .
-             .
-              .
-               .
-                .
-                 .
-                  .
-                   .
-                    .
-                     .
-                      .
-                       .
-                        .
-                         .
-                          .
-                           .
-                            .
-                             .
-                              .
-                               .
-                                .
-                                 .
-                                  .
-                                   .
-                                    .
-                                     .
-                                      .
-                                       .
-                                        .
-   .
-    .
-     .
-      .
-       .
-        .
-         .
-          .
-           .
-            .
-             .
-              .
-               .
-                .
-                 .
-                  .
-                   .
-                    .
-                     .
-                      .
-                       .
-                        .
-                         .
-                          .
-                           .
-                            .
-                             .
-                              .
-                               .
-                                .
-                                 .
-                                  .
-                                   .
-                                    .
-                                     .
-                                      .
-                                       .
-                                        .
-   .
-    .
-     .
-      .
-       .
-        .
-         .
-          .
-           .
-            .
-             .
-              .
-               .
-                .
-                 .
-                  .
-                   .
-                    .
-                     .
-                      .
-                       .
-                        .
-                         .
-                          .
-                           .
-                            .
-                             .
-                              .
-                               .
-                                .
-                                 .
-                                  .
-                                   .
-                                    .
-                                     .
-                                      .
-                                       .
-                                        .
-   .
-    .
-     .
-      .
-       .
-        .
-         .
-          .
-           .
-            .
-             .
-              .
-               .
-                .
-                 .
-                  .
-                   .
-                    .
-                     .
-                      .
-                       .
-                        .
-                         .
-                          .
-                           .
-                            .
-                             .
-                              .
-                               .
-                                .
-                                 .
-                                  .
-                                   .
-                                    .
-                                     .
-                                      .
-                                       .
-                                        .
- JAN
- JANU
- JANUA
- JANUAR
- JANUARY
- JANUARY 
- JANUARY  
- JANUARY   
- JANUARY    
- JANUARY     
- JANUARY      
- JANUARY       
- JANUARY        
- JANUARY         
- JANUARY          
- JANUARY           
- JANUARY            
- JANUARY             
- JANUARY              
- JANUARY               
- JANUARY                
- JANUARY                 
- JANUARY                  
- JANUARY                   
- JANUARY                    
- JANUARY                     
- JANUARY                      
- JANUARY                       
- JANUARY                        
- JANUARY                         
- JANUARY                          
- JANUARY                           
- JANUARY                            
- JANUARY                             
- JANUARY                              
- JANUARY                               
- JANUARY                                
- JANUARY                                 
- FEB
- FEBR
- FEBRU
- FEBRUA
- FEBRUAR
- FEBRUARY
- FEBRUARY 
- FEBRUARY  
- FEBRUARY   
- FEBRUARY    
- FEBRUARY     
- FEBRUARY      
- FEBRUARY       
- FEBRUARY        
- FEBRUARY         
- FEBRUARY          
- FEBRUARY           
- FEBRUARY            
- FEBRUARY             
- FEBRUARY              
- FEBRUARY               
- FEBRUARY                
- FEBRUARY                 
- FEBRUARY                  
- FEBRUARY                   
- FEBRUARY                    
- FEBRUARY                     
- FEBRUARY                      
- FEBRUARY                       
- FEBRUARY                        
- FEBRUARY                         
- FEBRUARY                          
- FEBRUARY                           
- FEBRUARY                            
- FEBRUARY                             
- FEBRUARY                              
- FEBRUARY                               
- FEBRUARY                                
- MAR
- MARC
- MARCH
- MARCH 
- MARCH  
- MARCH   
- MARCH    
- MARCH     
- MARCH      
- MARCH       
- MARCH        
- MARCH         
- MARCH          
- MARCH           
- MARCH            
- MARCH             
- MARCH              
- MARCH               
- MARCH                
- MARCH                 
- MARCH                  
- MARCH                   
- MARCH                    
- MARCH                     
- MARCH                      
- MARCH                       
- MARCH                        
- MARCH                         
- MARCH                          
- MARCH                           
- MARCH                            
- MARCH                             
- MARCH                              
- MARCH                               
- MARCH                                
- MARCH                                 
- MARCH                                  
- MARCH                                   
- APR
- APRI
- APRIL
- APRIL 
- APRIL  
- APRIL   
- APRIL    
- APRIL     
- APRIL      
- APRIL       
- APRIL        
- APRIL         
- APRIL          
- APRIL           
- APRIL            
- APRIL             
- APRIL              
- APRIL               
- APRIL                
- APRIL                 
- APRIL                  
- APRIL                   
- APRIL                    
- APRIL                     
- APRIL                      
- APRIL                       
- APRIL                        
- APRIL                         
- APRIL                          
- APRIL                           
- APRIL                            
- APRIL                             
- APRIL                              
- APRIL                               
- APRIL                                
- APRIL                                 
- APRIL                                  
- APRIL                                   
- APR
- APRI
- APRIL
- APRIL 
- APRIL  
- APRIL   
- APRIL    
- APRIL     
- APRIL      
- APRIL       
- APRIL        
- APRIL         
- APRIL          
- APRIL           
- APRIL            
- APRIL             
- APRIL              
- APRIL               
- APRIL                
- APRIL                 
- APRIL                  
- APRIL                   
- APRIL                    
- APRIL                     
- APRIL                      
- APRIL                       
- APRIL                        
- APRIL                         
- APRIL                          
- APRIL                           
- APRIL                            
- APRIL                             
- APRIL                              
- APRIL                               
- APRIL                                
- APRIL                                 
- APRIL                                  
- APRIL                                   
- APR
- APRI
- APRIL
- APRIL 
- APRIL  
- APRIL   
- APRIL    
- APRIL     
- APRIL      
- APRIL       
- APRIL        
- APRIL         
- APRIL          
- APRIL           
- APRIL            
- APRIL             
- APRIL              
- APRIL               
- APRIL                
- APRIL                 
- APRIL                  
- APRIL                   
- APRIL                    
- APRIL                     
- APRIL                      
- APRIL                       
- APRIL                        
- APRIL                         
- APRIL                          
- APRIL                           
- APRIL                            
- APRIL                             
- APRIL                              
- APRIL                               
- APRIL                                
- APRIL                                 
- APRIL                                  
- APRIL                                   
- APR
- APRI
- APRIL
- APRIL 
- APRIL  
- APRIL   
- APRIL    
- APRIL     
- APRIL      
- APRIL       
- APRIL        
- APRIL         
- APRIL          
- APRIL           
- APRIL            
- APRIL             
- APRIL              
- APRIL               
- APRIL                
- APRIL                 
- APRIL                  
- APRIL                   
- APRIL                    
- APRIL                     
- APRIL                      
- APRIL                       
- APRIL                        
- APRIL                         
- APRIL                          
- APRIL                           
- APRIL                            
- APRIL                             
- APRIL                              
- APRIL                               
- APRIL                                
- APRIL                                 
- APRIL                                  
- APRIL                                   
- MAY
- MAY 
- MAY  
- MAY   
- MAY    
- MAY     
- MAY      
- MAY       
- MAY        
- MAY         
- MAY          
- MAY           
- MAY            
- MAY             
- MAY              
- MAY               
- MAY                
- MAY                 
- MAY                  
- MAY                   
- MAY                    
- MAY                     
- MAY                      
- MAY                       
- MAY                        
- MAY                         
- MAY                          
- MAY                           
- MAY                            
- MAY                             
- MAY                              
- MAY                               
- MAY                                
- MAY                                 
- MAY                                  
- MAY                                   
- MAY                                    
- MAY                                     
- JUN
- JUNE
- JUNE 
- JUNE  
- JUNE   
- JUNE    
- JUNE     
- JUNE      
- JUNE       
- JUNE        
- JUNE         
- JUNE          
- JUNE           
- JUNE            
- JUNE             
- JUNE              
- JUNE               
- JUNE                
- JUNE                 
- JUNE                  
- JUNE                   
- JUNE                    
- JUNE                     
- JUNE                      
- JUNE                       
- JUNE                        
- JUNE                         
- JUNE                          
- JUNE                           
- JUNE                            
- JUNE                             
- JUNE                              
- JUNE                               
- JUNE                                
- JUNE                                 
- JUNE                                  
- JUNE                                   
- JUNE                                    
- JUL
- JULY
- JULY 
- JULY  
- JULY   
- JULY    
- JULY     
- JULY      
- JULY       
- JULY        
- JULY         
- JULY          
- JULY           
- JULY            
- JULY             
- JULY              
- JULY               
- JULY                
- JULY                 
- JULY                  
- JULY                   
- JULY                    
- JULY                     
- JULY                      
- JULY                       
- JULY                        
- JULY                         
- JULY                          
- JULY                           
- JULY                            
- JULY                             
- JULY                              
- JULY                               
- JULY                                
- JULY                                 
- JULY                                  
- JULY                                   
- JULY                                    
- JUL
- JULY
- JULY 
- JULY  
- JULY   
- JULY    
- JULY     
- JULY      
- JULY       
- JULY        
- JULY         
- JULY          
- JULY           
- JULY            
- JULY             
- JULY              
- JULY               
- JULY                
- JULY                 
- JULY                  
- JULY                   
- JULY                    
- JULY                     
- JULY                      
- JULY                       
- JULY                        
- JULY                         
- JULY                          
- JULY                           
- JULY                            
- JULY                             
- JULY                              
- JULY                               
- JULY                                
- JULY                                 
- JULY                                  
- JULY                                   
- JULY                                    
- JUL
- JULY
- JULY 
- JULY  
- JULY   
- JULY    
- JULY     
- JULY      
- JULY       
- JULY        
- JULY         
- JULY          
- JULY           
- JULY            
- JULY             
- JULY              
- JULY               
- JULY                
- JULY                 
- JULY                  
- JULY                   
- JULY                    
- JULY                     
- JULY                      
- JULY                       
- JULY                        
- JULY                         
- JULY                          
- JULY                           
- JULY                            
- JULY                             
- JULY                              
- JULY                               
- JULY                                
- JULY                                 
- JULY                                  
- JULY                                   
- JULY                                    
- JUL
- JULY
- JULY 
- JULY  
- JULY   
- JULY    
- JULY     
- JULY      
- JULY       
- JULY        
- JULY         
- JULY          
- JULY           
- JULY            
- JULY             
- JULY              
- JULY               
- JULY                
- JULY                 
- JULY                  
- JULY                   
- JULY                    
- JULY                     
- JULY                      
- JULY                       
- JULY                        
- JULY                         
- JULY                          
- JULY                           
- JULY                            
- JULY                             
- JULY                              
- JULY                               
- JULY                                
- JULY                                 
- JULY                                  
- JULY                                   
- JULY                                    
- AUG
- AUGU
- AUGUS
- AUGUST
- AUGUST 
- AUGUST  
- AUGUST   
- AUGUST    
- AUGUST     
- AUGUST      
- AUGUST       
- AUGUST        
- AUGUST         
- AUGUST          
- AUGUST           
- AUGUST            
- AUGUST             
- AUGUST              
- AUGUST               
- AUGUST                
- AUGUST                 
- AUGUST                  
- AUGUST                   
- AUGUST                    
- AUGUST                     
- AUGUST                      
- AUGUST                       
- AUGUST                        
- AUGUST                         
- AUGUST                          
- AUGUST                           
- AUGUST                            
- AUGUST                             
- AUGUST                              
- AUGUST                               
- AUGUST                                
- AUGUST                                 
- AUGUST                                  
- SEP
- SEPT
- SEPTE
- SEPTEM
- SEPTEMB
- SEPTEMBE
- SEPTEMBER
- SEPTEMBER 
- SEPTEMBER  
- SEPTEMBER   
- SEPTEMBER    
- SEPTEMBER     
- SEPTEMBER      
- SEPTEMBER       
- SEPTEMBER        
- SEPTEMBER         
- SEPTEMBER          
- SEPTEMBER           
- SEPTEMBER            
- SEPTEMBER             
- SEPTEMBER              
- SEPTEMBER               
- SEPTEMBER                
- SEPTEMBER                 
- SEPTEMBER                  
- SEPTEMBER                   
- SEPTEMBER                    
- SEPTEMBER                     
- SEPTEMBER                      
- SEPTEMBER                       
- SEPTEMBER                        
- SEPTEMBER                         
- SEPTEMBER                          
- SEPTEMBER                           
- SEPTEMBER                            
- SEPTEMBER                             
- SEPTEMBER                              
- SEPTEMBER                               
- OCT
- OCTO
- OCTOB
- OCTOBE
- OCTOBER
- OCTOBER 
- OCTOBER  
- OCTOBER   
- OCTOBER    
- OCTOBER     
- OCTOBER      
- OCTOBER       
- OCTOBER        
- OCTOBER         
- OCTOBER          
- OCTOBER           
- OCTOBER            
- OCTOBER             
- OCTOBER              
- OCTOBER               
- OCTOBER                
- OCTOBER                 
- OCTOBER                  
- OCTOBER                   
- OCTOBER                    
- OCTOBER                     
- OCTOBER                      
- OCTOBER                       
- OCTOBER                        
- OCTOBER                         
- OCTOBER                          
- OCTOBER                           
- OCTOBER                            
- OCTOBER                             
- OCTOBER                              
- OCTOBER                               
- OCTOBER                                
- OCTOBER                                 
- NOV
- NOVE
- NOVEM
- NOVEMB
- NOVEMBE
- NOVEMBER
- NOVEMBER 
- NOVEMBER  
- NOVEMBER   
- NOVEMBER    
- NOVEMBER     
- NOVEMBER      
- NOVEMBER       
- NOVEMBER        
- NOVEMBER         
- NOVEMBER          
- NOVEMBER           
- NOVEMBER            
- NOVEMBER             
- NOVEMBER              
- NOVEMBER               
- NOVEMBER                
- NOVEMBER                 
- NOVEMBER                  
- NOVEMBER                   
- NOVEMBER                    
- NOVEMBER                     
- NOVEMBER                      
- NOVEMBER                       
- NOVEMBER                        
- NOVEMBER                         
- NOVEMBER                          
- NOVEMBER                           
- NOVEMBER                            
- NOVEMBER                             
- NOVEMBER                              
- NOVEMBER                               
- NOVEMBER                                
- DEC
- DECE
- DECEM
- DECEMB
- DECEMBE
- DECEMBER
- DECEMBER 
- DECEMBER  
- DECEMBER   
- DECEMBER    
- DECEMBER     
- DECEMBER      
- DECEMBER       
- DECEMBER        
- DECEMBER         
- DECEMBER          
- DECEMBER           
- DECEMBER            
- DECEMBER             
- DECEMBER              
- DECEMBER               
- DECEMBER                
- DECEMBER                 
- DECEMBER                  
- DECEMBER                   
- DECEMBER                    
- DECEMBER                     
- DECEMBER                      
- DECEMBER                       
- DECEMBER                        
- DECEMBER                         
- DECEMBER                          
- DECEMBER                           
- DECEMBER                            
- DECEMBER                             
- DECEMBER                              
- DECEMBER                               
- DECEMBER                                
-   .
-    .
-     .
-      .
-       .
-        .
-         .
-          .
-           .
-            .
-             .
-              .
-               .
-                .
-                 .
-                  .
-                   .
-                    .
-                     .
-                      .
-                       .
-                        .
-                         .
-                          .
-                           .
-                            .
-                             .
-                              .
-                               .
-                                .
-                                 .
-                                  .
-                                   .
-                                    .
-                                     .
-                                      .
-                                       .
-                                        .
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/formats/num-in.expected.gz b/tests/formats/num-in.expected.gz
deleted file mode 100644 (file)
index 40a617d..0000000
Binary files a/tests/formats/num-in.expected.gz and /dev/null differ
diff --git a/tests/formats/num-in.sh b/tests/formats/num-in.sh
deleted file mode 100755 (executable)
index 0461a6b..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-#! /bin/sh
-
-TEMPDIR=/tmp/pspp-tst-$$
-mkdir -p $TEMPDIR
-trap 'cd /; rm -rf $TEMPDIR' 0
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-: ${PERL:=perl}
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    exit 2;
-}
-
-pass()
-{
-    exit 0;
-}
-
-cd $TEMPDIR
-
-activity="write PRNG fragment"
-cat > my-rand.pl <<'EOF'
-# This random number generator and the test for it below are drawn
-# from Park and Miller, "Random Number Generators: Good Ones are Hard
-# to Come By", Communications of the ACM 31:10 (October 1988).  It is
-# documented to function properly on systems with a 46-bit or longer
-# real significand, which includes systems that have 64-bit IEEE reals
-# (with 53-bit significand).  The test should catch any systems for
-# which this is not true, in any case.
-
-our ($seed) = 1;
-sub my_rand {
-  my ($modulo) = @_;
-  my ($a) = 16807;
-  my ($m) = 2147483647;
-  my ($tmp) = $a * $seed;
-  $seed = $tmp - $m * int ($tmp / $m);
-  return $seed % $modulo;
-}
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="write PRNG test program"
-cat > test-my-rand.pl <<'EOF'
-#! /usr/bin/perl
-use strict;
-use warnings;
-do 'my-rand.pl';
-my_rand (1) foreach 1...10000;
-our $seed;
-die $seed if $seed != 1043618065;
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="test PRNG"
-$PERL test-my-rand.pl
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="write Perl program"
-cat > num-in.pl <<'EOF'
-#! /usr/bin/perl
-
-use POSIX;
-use strict;
-use warnings;
-
-do 'my-rand.pl';
-
-for my $number (0, 1, .5, .015625, 123) {
-    my ($base_exp) = floor ($number ? log10 ($number) : 0);
-    for my $offset (-3...3) {
-       my ($exponent) = $base_exp + $offset;
-       my ($fraction) = $number / 10**$offset;
-
-       permute_zeros ($fraction, $exponent);
-    }
-}
-
-sub permute_zeros {
-    my ($fraction, $exponent) = @_;
-
-    my ($frac_rep) = sprintf ("%f", $fraction);
-    my ($leading_zeros) = length (($frac_rep =~ /^(0*)/)[0]);
-    my ($trailing_zeros) = length (($frac_rep =~ /(\.?0*)$/)[0]);
-    for my $i (0...$leading_zeros) {
-       for my $j (0...$trailing_zeros) {
-           my ($trimmed) = substr ($frac_rep, $i,
-                                   length ($frac_rep) - $i - $j);
-           next if $trimmed eq '.' || $trimmed eq '';
-
-           permute_commas ($trimmed, $exponent);
-       }
-    }
-}
-
-sub permute_commas {
-    my ($frac_rep, $exponent) = @_;
-    permute_dot_comma ($frac_rep, $exponent);
-    my ($pos) = int (my_rand (length ($frac_rep) + 1));
-    $frac_rep = substr ($frac_rep, 0, $pos) . "," . substr ($frac_rep, $pos);
-    permute_dot_comma ($frac_rep, $exponent);
-}
-
-sub permute_dot_comma {
-    my ($frac_rep, $exponent) = @_;
-    permute_exponent_syntax ($frac_rep, $exponent);
-    if ($frac_rep =~ /[,.]/) {
-       $frac_rep =~ tr/.,/,./;
-       permute_exponent_syntax ($frac_rep, $exponent);
-    }
-}
-
-sub permute_exponent_syntax {
-    my ($frac_rep, $exponent) = @_;
-    my (@exp_reps);
-    if ($exponent == 0) {
-       @exp_reps = pick ('', 'e0', 'e-0', 'e+0', '-0', '+0');
-    } elsif ($exponent > 0) {
-       @exp_reps = pick ("e$exponent", "e+$exponent", "+$exponent");
-    } else {
-       my ($abs_exp) = -$exponent;
-       @exp_reps = pick ("e-$abs_exp", , "e-$abs_exp", "-$abs_exp");
-    }
-    permute_sign_and_affix ($frac_rep, $_) foreach @exp_reps;
-}
-
-sub permute_sign_and_affix {
-    my ($frac_rep, $exp_rep) = @_;
-    for my $prefix (pick ('', '$'),
-                   pick ('-', '-$', '$-', '$-$'),
-                   pick ('+', '+$', '$+', '$+$')) {
-       for my $suffix ('', '%') {
-           permute_spaces ("$prefix$frac_rep$exp_rep$suffix");
-       }
-    }
-}
-
-sub permute_spaces {
-    my ($s) = @_;
-    $s =~ s/([-+\$e%])/ $1 /g;
-    my (@fields) = split (' ', $s);
-    print join ('', @fields), "\n";
-
-    if ($#fields > 0) {
-       my ($pos) = int (my_rand ($#fields)) + 1;
-       print join ('', @fields[0...$pos - 1]);
-       print " ";
-       print join ('', @fields[$pos...$#fields]);
-       print "\n";
-    }
-}
-
-sub pick {
-    return $_[int (my_rand ($#_ + 1))];
-}
-EOF
-
-activity="generate data"
-$PERL num-in.pl > num-in.data
-if [ $? -ne 0 ] ; then no_result ; fi
-echo -n .
-
-activity="generate pspp syntax"
-cat > num-in.pspp <<EOF
-SET ERRORS=NONE.
-SET MXERRS=10000000.
-SET MXWARNS=10000000.
-DATA LIST FILE='num-in.data' /
-       f 1-40 (f)
-       comma 1-40 (comma)
-       dot 1-40 (dot)
-       dollar 1-40 (dollar)
-       pct 1-40 (pct)
-       e 1-40 (e).
-PRINT OUTFILE='num-in.out'/all (6f10.4).
-EXECUTE.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-echo -n .
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv num-in.pspp
-if [ $? -ne 0 ] ; then no_result ; fi
-echo -n .
-
-activity="gunzip expected results"
-gzip -cd < $top_srcdir/tests/formats/num-in.expected.gz > num-in.expected
-if [ $? -ne 0 ] ; then no_result ; fi
-echo -n .
-
-activity="compare output"
-diff -u num-in.expected num-in.out
-if [ $? -ne 0 ] ; then fail ; fi
-
-echo .
-
-pass
diff --git a/tests/formats/num-out-cmp.pl b/tests/formats/num-out-cmp.pl
deleted file mode 100644 (file)
index 8e83f50..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-use strict;
-use warnings 'all';
-
-my (@prev) = ();
-our ($n) = 0;
-our ($suffix) = '';
-our ($prefix) = '';
-while (<>) {
-    s/^ //;
-    if (scalar (my (@line) = /^([A-Z]+)(\d+)([^"]+")( *)([^%"]*)(%?")$/) == 6) {
-       if (defined ($prev[0])
-           && $line[0] eq $prev[0]
-           && $line[1] == $prev[1] + 1
-           && $line[2] eq $prev[2]
-           && $line[5] eq $prev[5]) {
-           if ($line[3] eq " $prev[3]"
-               && $line[4] eq $prev[4]) {
-               flush_prefix ();
-               flush_suffix ();
-               $n++;
-           } elsif ($line[3] eq $prev[3]
-                    && length ($line[4]) == length ($prev[4]) + 1
-                    && $prev[4] eq substr ($line[4], 0, length ($line[4]) - 1)) {
-               flush_n ();
-               flush_prefix ();
-               $suffix .= substr ($line[4], -1);
-           } elsif ($line[3] eq $prev[3]
-                    && $prev[4] eq substr ($line[4], 1)) {
-               flush_n ();
-               flush_suffix ();
-               $prefix .= substr ($line[4], 0, 1);
-           } else {
-               flush ();
-               print $_;
-           }
-       } else {
-           flush ();
-           print $_;
-       }
-       @prev = @line;
-    } else {
-       flush ();
-       print $_;
-       @prev = ();
-    }
-}
-flush ();
-
-sub flush_suffix {
-    if ($suffix ne '') {
-       print "\$$suffix\n";
-       $suffix = '';
-    }
-}
-
-sub flush_prefix {
-    if ($prefix ne '') {
-       print "^$prefix\n";
-       $prefix = '';
-    }
-}
-
-sub flush_n {
-    if ($n) {
-       print "*$n\n";
-       $n = 0;
-    }
-}
-
-sub flush {
-    flush_prefix ();
-    flush_suffix ();
-    flush_n ();
-}
diff --git a/tests/formats/num-out-compare.pl b/tests/formats/num-out-compare.pl
deleted file mode 100644 (file)
index be3c623..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-#! /usr/bin/perl -w
-
-use strict;
-use warnings 'all';
-use Getopt::Long;
-
-my $exact = 0;
-my $spss = 0;
-my $verbose = 0;
-Getopt::Long::Configure ("bundling");
-GetOptions ("e|exact!" => \$exact,
-           "s|spss!" => \$spss,
-           "v|verbose+" => \$verbose,
-           "h|help" => sub { usage (0) })
-  or usage (1);
-
-sub usage {
-    print "$0: compare expected and actual numeric formatting output\n";
-    print "usage: $0 [OPTION...] EXPECTED ACTUAL\n";
-    print "where EXPECTED is the file containing expected output\n";
-    print "and ACTUAL is the file containing actual output.\n";
-    print "Options:\n";
-    print "  -e, --exact: Require numbers to be exactly equal.\n";
-    print "               (By default, small differences are permitted.)\n";
-    print "  -s, --spss: Ignore most SPSS formatting bugs in EXPECTED.\n";
-    print "              (A few differences are not compensated)\n";
-    print "  -v, --verbose: Use once to summarize errors and differences.\n";
-    print "                 Use twice for details of differences.\n";
-    exit (@_);
-}
-
-open (EXPECTED, '<', $ARGV[0]) or die "$ARGV[0]: open: $!\n";
-open (ACTUAL, '<', $ARGV[1]) or die "$ARGV[1]: open: $!\n";
-my ($expr);
-my ($bad_round) = 0;
-my ($approximate) = 0;
-my ($spss_wtf1) = 0;
-my ($spss_wtf2) = 0;
-my ($lost_sign) = 0;
-my ($errors) = 0;
-while (defined (my $a = <EXPECTED>) && defined (my $b = <ACTUAL>)) {
-    chomp $a;
-    chomp $b;
-    if ($a eq $b) {
-       if ($a !~ /^\s*$/ && $a !~ /:/) {
-           $expr = $a;
-           $expr =~ s/\s*$//;
-           $expr =~ s/^\s*//;
-       }
-    } else {
-       my ($fmt, $a_out) = $a =~ /^ (.*): "(.*)"$/ or die;
-       my ($b_fmt, $b_out) = $b =~ /^ (.*): "(.*)"$/ or die;
-       die if $fmt ne $b_fmt;
-       die if $a_out eq $b_out;
-
-       if (!$exact) {
-           if (increment ($a_out) eq $b_out || increment ($b_out) eq $a_out) {
-               $approximate++;
-               next;
-           }
-       }
-       if ($spss) {
-           if ($a_out =~ /0.*0/ && $a_out !~ /[1-9]/) {
-               $bad_round++;
-               next;
-           } elsif ($a_out =~ /\*/ && $a_out !~ /^\*+$/) {
-               $spss_wtf1++;
-               next;
-           } elsif ($expr =~ /^-/
-                    && $a_out =~ /^\*+$/
-                    && $b_out =~ /-\d(\.\d*#*)?E[-+]\d\d\d/
-                    && $fmt =~ /^E/) {
-               $spss_wtf2++;
-               next;
-           } elsif ($expr =~ /^-/
-                    && (($a_out !~ /-/ && $a_out =~ /[1-9]/ && $b_out =~ /-/)
-                        || ($a_out =~ /^[0-9]+$/ && $b_out =~ /^\*+$/))) {
-               $lost_sign++;
-               next;
-           }
-       }
-       print "$.: $expr in $fmt: expected \"$a_out\", got \"$b_out\"\n"
-         if $verbose > 1;
-       $errors++;
-    }
-}
-while (<EXPECTED>) {
-    print "Extra lines in $ARGV[0]\n";
-    $errors++;
-    last;
-}
-while (<ACTUAL>) {
-    print "Extra lines in $ARGV[1]\n";
-    $errors++;
-    last;
-}
-if ($verbose) {
-    print "$errors errors\n";
-    if (!$exact) {
-       print "$approximate approximate matches\n";
-    }
-    if ($spss) {
-       print "$bad_round bad rounds\n";
-       print "$spss_wtf1 SPSS WTF 1\n";
-       print "$spss_wtf2 SPSS WTF 2\n";
-       print "$lost_sign lost signs\n";
-    }
-}
-exit ($errors > 0);
-
-# Returns the argument value incremented by one unit in its final
-# decimal place.
-sub increment {
-    local ($_) = @_;
-    my ($last_digit, $i);
-    for ($i = 0; $i < length $_; $i++) {
-       my ($c) = substr ($_, $i, 1);
-       last if ($c eq 'E');
-       $last_digit = $i if $c =~ /[0-9]/;
-    }
-    return $_ if !defined $last_digit;
-    for ($i = $last_digit; $i >= 0; $i--) {
-       my ($c) = substr ($_, $i, 1);
-       if ($c eq '9') {
-           substr ($_, $i, 1) = '0';
-       } elsif ($c =~ /[0-8]/) {
-           substr ($_, $i, 1) = chr (ord ($c) + 1);
-           last;
-       }
-    }
-    $_ = "1$_" if $i < 0;
-    return $_;
-}
diff --git a/tests/formats/num-out-decmp.pl b/tests/formats/num-out-decmp.pl
deleted file mode 100644 (file)
index 11007c0..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-use strict;
-use warnings 'all';
-
-my (@line);
-while (<>) {
-    if (my ($n) = /^\*(\d+)$/) {
-       for (1...$n) {
-           $line[1]++;
-           $line[3] = " $line[3]";
-           print ' ', join ('', @line), "\n";
-       }
-    } elsif (my ($suffix) = /^\$(.*)$/) {
-       for my $c (split ('', $suffix)) {
-           $line[1]++;
-           $line[4] .= $c;
-           print ' ', join ('', @line), "\n";
-       }
-    } elsif (my ($prefix) = /^\^(.*)$/) {
-       for my $c (split ('', $prefix)) {
-           $line[1]++;
-           $line[4] = "$c$line[4]";
-           print ' ', join ('', @line), "\n";
-       }
-    } else {
-       @line = /^([A-Z]+)(\d+)([^"]+")( *)([^%"]*)(%?")$/;
-       print " $_";
-    }
-}
diff --git a/tests/formats/num-out.expected.cmp.gz b/tests/formats/num-out.expected.cmp.gz
deleted file mode 100644 (file)
index 21caf25..0000000
Binary files a/tests/formats/num-out.expected.cmp.gz and /dev/null differ
diff --git a/tests/formats/num-out.pl b/tests/formats/num-out.pl
deleted file mode 100644 (file)
index 86da406..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-use strict;
-use warnings 'all';
-
-my @values = qw(0 2 9.5 27 271 999.95 2718 9999.995 27182 271828
-2718281 2**39 2**333 2**-21 -2 -9.5 -27 -271 -999.95 -2718 -9999.995
--27182 -271828 -2718281 -2**39 -2**333 -2**-21 -0 3.125 31.25 314.125
-3141.5 31415.875 314159.25 3141592.625 31415926.5 271828182.25
-3214567890.5 31415926535.875 -3.125 -31.375 -314.125 -3141.5
--31415.875 -314159.25 -3141592.625 -31415926.5 -271828182.25
--3214567890.5 -31415926535.875);
-
-print "SET CCA=',,,'.\n";
-print "SET CCB='-,[[[,]]],-'.\n";
-print "SET CCC='((,[,],))'.\n";
-print "SET CCD=',XXX,,-'.\n";
-print "SET CCE=',,YYY,-'.\n";
-print "INPUT PROGRAM.\n";
-print "STRING EXPR(A16).\n";
-print map ("COMPUTE NUM=$_.\nCOMPUTE EXPR='$_'.\nEND CASE.\n", @values);
-print "END FILE.\n";
-print "END INPUT PROGRAM.\n";
-
-print "PRINT OUTFILE='output.txt'/EXPR.\n";
-for my $format qw (F COMMA DOT DOLLAR PCT E CCA CCB CCC CCD CCE N Z) {
-    for my $d (0...16) {
-       my ($min_w);
-       if ($format ne 'E') {
-           $min_w = $d + 1;
-           $min_w++ if $format eq 'DOLLAR' || $format eq 'PCT';
-           $min_w = 2 if $min_w == 1 && ($format =~ /^CC/);
-       } else {
-           $min_w = $d + 7;
-       }
-       for my $w ($min_w...40) {
-           my ($f) = "$format$w.$d";
-           print "PRINT OUTFILE='output.txt'/'$f: \"' NUM($f) '\"'.\n";
-       }
-    }
-    print "PRINT SPACE OUTFILE='output.txt'.\n";
-}
-print "EXECUTE.\n";
diff --git a/tests/formats/num-out.sh b/tests/formats/num-out.sh
deleted file mode 100755 (executable)
index 2d0932f..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-#! /bin/sh
-
-TEMPDIR=/tmp/pspp-tst-$$
-mkdir -p $TEMPDIR
-trap 'cd /; rm -rf $TEMPDIR' 0
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-: ${PERL:=perl}
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    exit 2;
-}
-
-pass()
-{
-    exit 0;
-}
-
-cd $TEMPDIR
-
-activity="generate pspp syntax"
-$PERL $top_srcdir/tests/formats/num-out.pl > num-out.pspp
-if [ $? -ne 0 ] ; then no_result ; fi
-echo -n .
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv num-out.pspp
-if [ $? -ne 0 ] ; then no_result ; fi
-echo -n .
-
-activity="inexactify results"
-$top_builddir/tests/formats/inexactify$EXEEXT < output.txt > output.inexact
-if [ $? -ne 0 ] ; then no_result ; fi
-echo -n .
-
-activity="gunzip expected results"
-gzip -cd < $top_srcdir/tests/formats/num-out.expected.cmp.gz > expected.txt.cmp
-if [ $? -ne 0 ] ; then no_result ; fi
-echo -n .
-
-activity="decompress expected results"
-$PERL $top_srcdir/tests/formats/num-out-decmp.pl < expected.txt.cmp > expected.txt
-if [ $? -ne 0 ] ; then no_result ; fi
-echo -n .
-
-activity="inexactify expected results"
-$top_builddir/tests/formats/inexactify$EXEEXT < expected.txt > expected.inexact
-if [ $? -ne 0 ] ; then no_result ; fi
-echo -n .
-
-activity="compare output"
-$PERL $top_srcdir/tests/formats/num-out-compare.pl \
-       $PSPP_NUM_OUT_COMPARE_FLAGS expected.inexact output.inexact
-if [ $? -ne 0 ] ; then fail ; fi
-
-echo .
-
-pass
diff --git a/tests/formats/time-in.sh b/tests/formats/time-in.sh
deleted file mode 100755 (executable)
index 0c9a719..0000000
+++ /dev/null
@@ -1,986 +0,0 @@
-#! /bin/sh
-
-TEMPDIR=/tmp/pspp-tst-$$
-mkdir -p $TEMPDIR
-trap 'cd /; rm -rf $TEMPDIR' 0
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-: ${PERL:=perl}
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    exit 2;
-}
-
-pass()
-{
-    exit 0;
-}
-
-cd $TEMPDIR
-
-activity="write PRNG fragment"
-cat > my-rand.pl <<'EOF'
-# This random number generator and the test for it below are drawn
-# from Park and Miller, "Random Number Generators: Good Ones are Hard
-# to Come By", Communications of the ACM 31:10 (October 1988).  It is
-# documented to function properly on systems with a 46-bit or longer
-# real significand, which includes systems that have 64-bit IEEE reals
-# (with 53-bit significand).  The test should catch any systems for
-# which this is not true, in any case.
-
-our ($seed) = 1;
-sub my_rand {
-  my ($modulo) = @_;
-  my ($a) = 16807;
-  my ($m) = 2147483647;
-  my ($tmp) = $a * $seed;
-  $seed = $tmp - $m * int ($tmp / $m);
-  return $seed % $modulo;
-}
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="write PRNG test program"
-cat > test-my-rand.pl <<'EOF'
-#! /usr/bin/perl
-use strict;
-use warnings;
-do 'my-rand.pl';
-my_rand (1) foreach 1...10000;
-our $seed;
-die $seed if $seed != 1043618065;
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="test PRNG"
-$PERL test-my-rand.pl
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="write program to generate PSPP syntax and data"
-cat > time-in.pl <<'EOF'
-#! /usr/bin/perl
-
-use strict;
-use warnings;
-
-do 'my-rand.pl';
-
-my @formats = (["time", "+H:M", "+H:M:S"],
-              ["dtime", "+D H:M", "+D H:M:S"]);
-
-my @times = (#  D  HH  MM     SS
-            [  0,  0,  0,  0.00],
-            [  1,  4, 50, 38.68],
-            [  5, 12, 31, 35.82],
-            [  0, 12, 47, 53.41],
-            [  3,  1, 26,  0.69],
-            [  1, 20, 58, 11.19],
-            [ 12,  7, 36,  5.98],
-            [ 52, 15, 43, 49.27],
-            [  7,  4, 25,  9.24],
-            [  0,  6, 49, 27.89],
-            [ 20,  2, 57, 52.56],
-            [555, 16, 45, 44.12],
-            [120, 21, 30, 57.27],
-            [  0,  4, 25,  9.98],
-            [  3,  6, 49, 27.24],
-            [  5,  2, 57, 52.13],
-            [  0, 16, 45, 44.35],
-            [  1, 21, 30, 57.32],
-            [ 10, 22, 30,  4.27],
-            [ 22,  1, 56, 51.18]);
-
-open (SYNTAX, '>', 'time-in.pspp') or die "time-in.pspp: create: $!\n";
-for my $format (@formats) {
-    my ($name) = @$format;
-    print SYNTAX "DATA LIST file='$name.data'/$name 1-40 ($name).\n";
-    print SYNTAX "PRINT OUTFILE='$name.out'/$name (F16.2).\n";
-    print SYNTAX "EXECUTE.\n";
-}
-close (SYNTAX);
-
-for my $format (@formats) {
-    my ($fmt_name, @templates) = @$format;
-    my ($fn) = "$fmt_name.data";
-    open (DATA, '>', $fn) or die "$fn: create: $!\n";
-    select DATA;
-    for my $template (@templates) {
-       for my $time (@times) {
-           print_time_with_template ($time, $template) for 1...10;
-       }
-    }
-    close (DATA);
-}
-
-sub print_time_with_template {
-    my ($time, $template) = @_;
-    my ($day, $hour, $minute, $second) = @$time;
-    for my $c (split ('', $template)) {
-       if ($c eq '+') {
-           print +pick ('', '-', '+');
-       } elsif ($c eq 'D') {
-           printf (+pick ('%d', '%02d'), $day);
-           $day = 0;
-       } elsif ($c eq 'H') {
-           printf (+pick ('%d', '%02d'), $hour + 24 * $day);
-       } elsif ($c eq 'M') {
-           printf (+pick ('%d', '%02d'), $minute);
-       } elsif ($c eq 'S') {
-           printf (+pick ('%.0f', '%02.0f', '%.1f', '%.2f'), $second);
-       } elsif ($c eq ':') {
-           print +pick (' ', ':');
-       } elsif ($c eq ' ') {
-           print ' ';
-       } else {
-           die;
-       }
-    }
-    print "\n";
-}
-
-sub pick {
-   return $_[int (my_rand ($#_ + 1))];
-}
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="generate PSPP syntax and data"
-$PERL time-in.pl
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv time-in.pspp
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare time.out output"
-diff -u time.out - <<EOF
-              .00
-              .00
-              .00
-              .00
-              .00
-              .00
-              .00
-              .00
-              .00
-              .00
-       -103800.00
-        103800.00
-        103800.00
-       -103800.00
-        103800.00
-       -103800.00
-        103800.00
-        103800.00
-       -103800.00
-        103800.00
-        477060.00
-        477060.00
-        477060.00
-        477060.00
-       -477060.00
-        477060.00
-        477060.00
-        477060.00
-        477060.00
-       -477060.00
-         46020.00
-        -46020.00
-        -46020.00
-        -46020.00
-         46020.00
-         46020.00
-        -46020.00
-         46020.00
-         46020.00
-        -46020.00
-        264360.00
-        264360.00
-       -264360.00
-       -264360.00
-        264360.00
-       -264360.00
-        264360.00
-       -264360.00
-       -264360.00
-       -264360.00
-        161880.00
-        161880.00
-        161880.00
-        161880.00
-        161880.00
-       -161880.00
-        161880.00
-        161880.00
-        161880.00
-       -161880.00
-       1064160.00
-       1064160.00
-       1064160.00
-       1064160.00
-       1064160.00
-       1064160.00
-      -1064160.00
-       1064160.00
-       1064160.00
-       1064160.00
-      -4549380.00
-       4549380.00
-       4549380.00
-       4549380.00
-       4549380.00
-       4549380.00
-       4549380.00
-      -4549380.00
-       4549380.00
-       4549380.00
-        620700.00
-       -620700.00
-        620700.00
-        620700.00
-       -620700.00
-        620700.00
-       -620700.00
-       -620700.00
-        620700.00
-        620700.00
-         24540.00
-        -24540.00
-         24540.00
-         24540.00
-         24540.00
-         24540.00
-         24540.00
-         24540.00
-         24540.00
-         24540.00
-      -1738620.00
-       1738620.00
-       1738620.00
-       1738620.00
-       1738620.00
-       1738620.00
-       1738620.00
-       1738620.00
-       1738620.00
-       1738620.00
-      48012300.00
-     -48012300.00
-     -48012300.00
-      48012300.00
-      48012300.00
-      48012300.00
-      48012300.00
-      48012300.00
-      48012300.00
-      48012300.00
-      10445400.00
-     -10445400.00
-     -10445400.00
-      10445400.00
-      10445400.00
-      10445400.00
-     -10445400.00
-      10445400.00
-      10445400.00
-     -10445400.00
-         15900.00
-         15900.00
-        -15900.00
-         15900.00
-        -15900.00
-        -15900.00
-         15900.00
-         15900.00
-         15900.00
-         15900.00
-        283740.00
-       -283740.00
-        283740.00
-        283740.00
-        283740.00
-       -283740.00
-        283740.00
-        283740.00
-       -283740.00
-        283740.00
-        442620.00
-        442620.00
-        442620.00
-        442620.00
-        442620.00
-        442620.00
-        442620.00
-        442620.00
-        442620.00
-       -442620.00
-         60300.00
-         60300.00
-         60300.00
-         60300.00
-         60300.00
-        -60300.00
-        -60300.00
-         60300.00
-        -60300.00
-        -60300.00
-        163800.00
-       -163800.00
-       -163800.00
-       -163800.00
-        163800.00
-        163800.00
-        163800.00
-        163800.00
-       -163800.00
-        163800.00
-        945000.00
-       -945000.00
-       -945000.00
-       -945000.00
-        945000.00
-        945000.00
-        945000.00
-       -945000.00
-        945000.00
-        945000.00
-      -1907760.00
-       1907760.00
-      -1907760.00
-       1907760.00
-      -1907760.00
-       1907760.00
-       1907760.00
-       1907760.00
-       1907760.00
-      -1907760.00
-              .00
-              .00
-              .00
-              .00
-              .00
-              .00
-              .00
-              .00
-              .00
-              .00
-        103839.00
-        103838.68
-       -103838.70
-       -103838.68
-        103838.70
-        103838.68
-       -103839.00
-        103838.68
-        103838.70
-       -103839.00
-        477095.82
-        477096.00
-        477096.00
-        477095.82
-        477095.82
-        477095.82
-        477095.80
-       -477095.80
-        477095.82
-       -477095.82
-        -46073.00
-        -46073.40
-         46073.00
-         46073.40
-         46073.40
-         46073.00
-        -46073.00
-         46073.00
-         46073.00
-         46073.00
-        264360.69
-       -264360.70
-        264361.00
-        264360.70
-        264360.69
-        264360.70
-        264361.00
-        264360.70
-       -264361.00
-        264361.00
-        161891.00
-       -161891.20
-       -161891.00
-        161891.00
-       -161891.00
-        161891.20
-       -161891.20
-       -161891.20
-        161891.20
-       -161891.19
-      -1064166.00
-       1064165.98
-      -1064166.00
-      -1064166.00
-      -1064165.98
-       1064166.00
-       1064166.00
-      -1064166.00
-      -1064165.98
-       1064166.00
-       4549429.00
-       4549429.27
-       4549429.27
-      -4549429.30
-       4549429.00
-      -4549429.00
-       4549429.00
-       4549429.27
-       4549429.00
-       4549429.30
-        620709.00
-       -620709.24
-        620709.24
-        620709.24
-        620709.24
-        620709.20
-       -620709.24
-        620709.20
-        620709.24
-        620709.24
-         24567.90
-         24567.89
-         24567.90
-         24568.00
-         24567.90
-         24568.00
-         24568.00
-        -24567.90
-         24567.90
-         24568.00
-       1738672.56
-       1738673.00
-      -1738672.60
-      -1738672.56
-       1738673.00
-       1738673.00
-       1738673.00
-       1738672.60
-      -1738672.56
-       1738672.60
-     -48012344.10
-      48012344.12
-     -48012344.10
-     -48012344.00
-     -48012344.00
-      48012344.00
-     -48012344.00
-     -48012344.00
-     -48012344.00
-      48012344.00
-      10445457.27
-      10445457.00
-      10445457.30
-      10445457.00
-      10445457.27
-      10445457.00
-      10445457.27
-      10445457.00
-      10445457.00
-     -10445457.30
-        -15909.98
-         15910.00
-        -15910.00
-         15910.00
-        -15909.98
-         15910.00
-        -15909.98
-         15909.98
-         15910.00
-         15909.98
-       -283767.00
-        283767.20
-        283767.20
-        283767.00
-       -283767.00
-        283767.00
-        283767.24
-        283767.00
-        283767.24
-        283767.00
-       -442672.00
-        442672.13
-        442672.00
-        442672.13
-        442672.00
-        442672.00
-        442672.00
-        442672.00
-       -442672.00
-        442672.13
-        -60344.40
-        -60344.00
-         60344.00
-         60344.35
-         60344.00
-         60344.40
-         60344.40
-        -60344.00
-         60344.00
-         60344.40
-        163857.00
-        163857.00
-        163857.00
-        163857.00
-        163857.30
-       -163857.30
-        163857.30
-       -163857.00
-       -163857.00
-        163857.30
-        945004.30
-        945004.00
-        945004.27
-        945004.30
-        945004.30
-        945004.00
-        945004.30
-        945004.00
-        945004.00
-        945004.00
-       1907811.00
-       1907811.00
-      -1907811.00
-       1907811.18
-       1907811.20
-       1907811.00
-      -1907811.00
-       1907811.18
-      -1907811.00
-      -1907811.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="compare dtime.out output"
-diff -u dtime.out - <<EOF
-              .00
-              .00
-              .00
-              .00
-              .00
-              .00
-              .00
-              .00
-              .00
-              .00
-        103800.00
-        103800.00
-       -103800.00
-        103800.00
-        103800.00
-       -103800.00
-        103800.00
-       -103800.00
-        103800.00
-       -103800.00
-        477060.00
-        477060.00
-        477060.00
-        477060.00
-        477060.00
-        477060.00
-       -477060.00
-       -477060.00
-       -477060.00
-        477060.00
-         46020.00
-         46020.00
-         46020.00
-         46020.00
-        -46020.00
-        -46020.00
-        -46020.00
-         46020.00
-         46020.00
-         46020.00
-        264360.00
-        264360.00
-       -264360.00
-        264360.00
-        264360.00
-        264360.00
-        264360.00
-       -264360.00
-       -264360.00
-       -264360.00
-       -161880.00
-       -161880.00
-        161880.00
-        161880.00
-        161880.00
-       -161880.00
-        161880.00
-       -161880.00
-        161880.00
-       -161880.00
-       1064160.00
-       1064160.00
-       1064160.00
-       1064160.00
-       1064160.00
-       1064160.00
-      -1064160.00
-       1064160.00
-       1064160.00
-       1064160.00
-      -4549380.00
-       4549380.00
-      -4549380.00
-      -4549380.00
-      -4549380.00
-       4549380.00
-       4549380.00
-       4549380.00
-       4549380.00
-       4549380.00
-       -620700.00
-        620700.00
-        620700.00
-       -620700.00
-        620700.00
-        620700.00
-        620700.00
-       -620700.00
-        620700.00
-        620700.00
-        -24540.00
-         24540.00
-         24540.00
-         24540.00
-        -24540.00
-         24540.00
-         24540.00
-        -24540.00
-         24540.00
-        -24540.00
-       1738620.00
-       1738620.00
-       1738620.00
-      -1738620.00
-      -1738620.00
-      -1738620.00
-       1738620.00
-       1738620.00
-       1738620.00
-       1738620.00
-      48012300.00
-      48012300.00
-      48012300.00
-      48012300.00
-      48012300.00
-     -48012300.00
-     -48012300.00
-      48012300.00
-     -48012300.00
-     -48012300.00
-     -10445400.00
-      10445400.00
-     -10445400.00
-      10445400.00
-      10445400.00
-      10445400.00
-      10445400.00
-      10445400.00
-      10445400.00
-      10445400.00
-         15900.00
-         15900.00
-         15900.00
-         15900.00
-         15900.00
-        -15900.00
-         15900.00
-         15900.00
-         15900.00
-         15900.00
-       -283740.00
-        283740.00
-       -283740.00
-       -283740.00
-        283740.00
-        283740.00
-        283740.00
-        283740.00
-        283740.00
-       -283740.00
-        442620.00
-       -442620.00
-       -442620.00
-        442620.00
-        442620.00
-       -442620.00
-       -442620.00
-       -442620.00
-        442620.00
-        442620.00
-         60300.00
-        -60300.00
-         60300.00
-         60300.00
-         60300.00
-         60300.00
-         60300.00
-         60300.00
-         60300.00
-         60300.00
-        163800.00
-        163800.00
-       -163800.00
-        163800.00
-       -163800.00
-       -163800.00
-       -163800.00
-        163800.00
-        163800.00
-       -163800.00
-        945000.00
-        945000.00
-        945000.00
-        945000.00
-       -945000.00
-        945000.00
-        945000.00
-        945000.00
-        945000.00
-       -945000.00
-      -1907760.00
-       1907760.00
-       1907760.00
-       1907760.00
-      -1907760.00
-      -1907760.00
-      -1907760.00
-       1907760.00
-      -1907760.00
-      -1907760.00
-              .00
-              .00
-              .00
-              .00
-              .00
-              .00
-              .00
-              .00
-              .00
-              .00
-        103838.70
-        103838.70
-        103839.00
-        103838.68
-        103838.70
-        103839.00
-        103838.70
-       -103839.00
-        103839.00
-        103839.00
-        477095.80
-        477095.80
-       -477095.80
-        477095.82
-        477095.82
-        477095.82
-       -477095.82
-        477095.82
-        477096.00
-       -477096.00
-        -46073.00
-         46073.00
-        -46073.00
-         46073.41
-         46073.00
-         46073.40
-         46073.00
-         46073.41
-         46073.41
-        -46073.00
-        264360.70
-        264360.70
-        264360.69
-        264361.00
-       -264360.70
-        264360.69
-       -264360.70
-        264360.69
-       -264361.00
-        264360.69
-        161891.00
-       -161891.20
-       -161891.19
-        161891.19
-        161891.00
-        161891.20
-        161891.20
-        161891.00
-        161891.00
-        161891.20
-      -1064165.98
-       1064166.00
-       1064166.00
-       1064166.00
-       1064165.98
-       1064166.00
-       1064166.00
-      -1064165.98
-       1064165.98
-      -1064166.00
-       4549429.27
-       4549429.27
-       4549429.27
-       4549429.27
-       4549429.00
-       4549429.27
-      -4549429.27
-       4549429.00
-       4549429.27
-       4549429.27
-       -620709.00
-        620709.20
-        620709.00
-       -620709.20
-       -620709.24
-       -620709.00
-        620709.00
-        620709.24
-       -620709.24
-        620709.00
-        -24567.89
-         24567.90
-         24568.00
-         24567.89
-         24568.00
-         24568.00
-         24567.90
-        -24568.00
-        -24567.89
-        -24568.00
-       1738672.56
-      -1738672.56
-       1738672.56
-      -1738672.60
-      -1738673.00
-       1738672.56
-       1738673.00
-      -1738672.60
-       1738672.60
-       1738672.56
-      48012344.00
-     -48012344.12
-     -48012344.00
-      48012344.12
-     -48012344.12
-     -48012344.00
-      48012344.12
-     -48012344.00
-     -48012344.00
-     -48012344.00
-     -10445457.00
-      10445457.00
-      10445457.00
-      10445457.00
-     -10445457.00
-     -10445457.00
-      10445457.00
-      10445457.00
-      10445457.00
-     -10445457.30
-        -15909.98
-         15910.00
-        -15909.98
-         15910.00
-         15910.00
-        -15910.00
-        -15910.00
-        -15910.00
-        -15910.00
-         15909.98
-       -283767.24
-        283767.20
-        283767.24
-        283767.24
-        283767.00
-        283767.20
-        283767.20
-        283767.24
-       -283767.00
-        283767.24
-        442672.13
-       -442672.13
-        442672.00
-        442672.13
-        442672.10
-        442672.00
-        442672.00
-       -442672.10
-        442672.00
-       -442672.10
-        -60344.35
-         60344.00
-         60344.00
-        -60344.00
-         60344.00
-         60344.35
-         60344.00
-         60344.35
-         60344.00
-         60344.00
-       -163857.00
-       -163857.00
-        163857.32
-        163857.00
-       -163857.30
-       -163857.00
-        163857.30
-        163857.00
-        163857.00
-       -163857.00
-       -945004.00
-       -945004.30
-        945004.27
-        945004.27
-       -945004.27
-       -945004.27
-       -945004.00
-       -945004.27
-       -945004.00
-        945004.30
-       1907811.00
-       1907811.00
-       1907811.00
-       1907811.00
-       1907811.20
-       1907811.18
-       1907811.18
-       1907811.18
-       1907811.18
-       1907811.00
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/formats/time-out.sh b/tests/formats/time-out.sh
deleted file mode 100755 (executable)
index cebb13c..0000000
+++ /dev/null
@@ -1,13124 +0,0 @@
-#! /bin/sh
-
-TEMPDIR=/tmp/pspp-tst-$$
-mkdir -p $TEMPDIR
-trap 'cd /; rm -rf $TEMPDIR' 0
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    exit 2;
-}
-
-pass()
-{
-    exit 0;
-}
-
-cd $TEMPDIR
-
-activity="write pspp syntax"
-cat > time-out.pspp <<EOF
-set epoch=1930.
-data list /x 1-30 (dtime).
-begin data.
-0 0:0:0
-0 4:50:38.12301
-0 12:31:35.23453
-0 12:47:53.34505
-0 1:26:0.45615
-0 20:58:11.56677
-0 7:36:5.18964
-0 15:43:49.83132
-0 4:25:9.01293
-0 6:49:27.52375
-0 2:57:52.01565
-0 16:45:44.86529
-0 21:30:57.82047
-0 4:25:9.15395
-0 6:49:27.10533
-0 2:57:52.48229
-0 16:45:44.65827
-0 21:30:57.58219
-0 22:30:4.18347
-0 1:56:51.59319
-1 0:0:0
-1 4:50:38.12301
-1 12:31:35.23453
-1 12:47:53.34505
-1 1:26:0.45615
-1 20:58:11.56677
-1 7:36:5.18964
-1 15:43:49.83132
-1 4:25:9.01293
-1 6:49:27.52375
-1 2:57:52.01565
-1 16:45:44.86529
-1 21:30:57.82047
-1 4:25:9.15395
-1 6:49:27.10533
-1 2:57:52.48229
-1 16:45:44.65827
-1 21:30:57.58219
-1 22:30:4.18347
-1 1:56:51.59319
-2 0:0:0
-2 4:50:38.12301
-2 12:31:35.23453
-2 12:47:53.34505
-2 1:26:0.45615
-2 20:58:11.56677
-2 7:36:5.18964
-2 15:43:49.83132
-2 4:25:9.01293
-2 6:49:27.52375
-2 2:57:52.01565
-2 16:45:44.86529
-2 21:30:57.82047
-2 4:25:9.15395
-2 6:49:27.10533
-2 2:57:52.48229
-2 16:45:44.65827
-2 21:30:57.58219
-2 22:30:4.18347
-2 1:56:51.59319
-54 0:0:0
-54 4:50:38.12301
-54 12:31:35.23453
-54 12:47:53.34505
-54 1:26:0.45615
-54 20:58:11.56677
-54 7:36:5.18964
-54 15:43:49.83132
-54 4:25:9.01293
-54 6:49:27.52375
-54 2:57:52.01565
-54 16:45:44.86529
-54 21:30:57.82047
-54 4:25:9.15395
-54 6:49:27.10533
-54 2:57:52.48229
-54 16:45:44.65827
-54 21:30:57.58219
-54 22:30:4.18347
-54 1:56:51.59319
-681 0:0:0
-681 4:50:38.12301
-681 12:31:35.23453
-681 12:47:53.34505
-681 1:26:0.45615
-681 20:58:11.56677
-681 7:36:5.18964
-681 15:43:49.83132
-681 4:25:9.01293
-681 6:49:27.52375
-681 2:57:52.01565
-681 16:45:44.86529
-681 21:30:57.82047
-681 4:25:9.15395
-681 6:49:27.10533
-681 2:57:52.48229
-681 16:45:44.65827
-681 21:30:57.58219
-681 22:30:4.18347
-681 1:56:51.59319
--0 0:0:0
--0 4:50:38.12301
--0 12:31:35.23453
--0 12:47:53.34505
--0 1:26:0.45615
--0 20:58:11.56677
--0 7:36:5.18964
--0 15:43:49.83132
--0 4:25:9.01293
--0 6:49:27.52375
--0 2:57:52.01565
--0 16:45:44.86529
--0 21:30:57.82047
--0 4:25:9.15395
--0 6:49:27.10533
--0 2:57:52.48229
--0 16:45:44.65827
--0 21:30:57.58219
--0 22:30:4.18347
--0 1:56:51.59319
--1 0:0:0
--1 4:50:38.12301
--1 12:31:35.23453
--1 12:47:53.34505
--1 1:26:0.45615
--1 20:58:11.56677
--1 7:36:5.18964
--1 15:43:49.83132
--1 4:25:9.01293
--1 6:49:27.52375
--1 2:57:52.01565
--1 16:45:44.86529
--1 21:30:57.82047
--1 4:25:9.15395
--1 6:49:27.10533
--1 2:57:52.48229
--1 16:45:44.65827
--1 21:30:57.58219
--1 22:30:4.18347
--1 1:56:51.59319
--2 0:0:0
--2 4:50:38.12301
--2 12:31:35.23453
--2 12:47:53.34505
--2 1:26:0.45615
--2 20:58:11.56677
--2 7:36:5.18964
--2 15:43:49.83132
--2 4:25:9.01293
--2 6:49:27.52375
--2 2:57:52.01565
--2 16:45:44.86529
--2 21:30:57.82047
--2 4:25:9.15395
--2 6:49:27.10533
--2 2:57:52.48229
--2 16:45:44.65827
--2 21:30:57.58219
--2 22:30:4.18347
--2 1:56:51.59319
--54 0:0:0
--54 4:50:38.12301
--54 12:31:35.23453
--54 12:47:53.34505
--54 1:26:0.45615
--54 20:58:11.56677
--54 7:36:5.18964
--54 15:43:49.83132
--54 4:25:9.01293
--54 6:49:27.52375
--54 2:57:52.01565
--54 16:45:44.86529
--54 21:30:57.82047
--54 4:25:9.15395
--54 6:49:27.10533
--54 2:57:52.48229
--54 16:45:44.65827
--54 21:30:57.58219
--54 22:30:4.18347
--54 1:56:51.59319
--681 0:0:0
--681 4:50:38.12301
--681 12:31:35.23453
--681 12:47:53.34505
--681 1:26:0.45615
--681 20:58:11.56677
--681 7:36:5.18964
--681 15:43:49.83132
--681 4:25:9.01293
--681 6:49:27.52375
--681 2:57:52.01565
--681 16:45:44.86529
--681 21:30:57.82047
--681 4:25:9.15395
--681 6:49:27.10533
--681 2:57:52.48229
--681 16:45:44.65827
--681 21:30:57.58219
--681 22:30:4.18347
--681 1:56:51.59319
-end data.
-print outfile='time-out.out'/x(time5).
-print outfile='time-out.out'/x(time6).
-print outfile='time-out.out'/x(time7).
-print outfile='time-out.out'/x(time8).
-print outfile='time-out.out'/x(time9).
-print outfile='time-out.out'/x(time10).
-print outfile='time-out.out'/x(time10.1).
-print outfile='time-out.out'/x(time11).
-print outfile='time-out.out'/x(time11.1).
-print outfile='time-out.out'/x(time11.2).
-print outfile='time-out.out'/x(time12).
-print outfile='time-out.out'/x(time12.1).
-print outfile='time-out.out'/x(time12.2).
-print outfile='time-out.out'/x(time12.3).
-print outfile='time-out.out'/x(time13).
-print outfile='time-out.out'/x(time13.1).
-print outfile='time-out.out'/x(time13.2).
-print outfile='time-out.out'/x(time13.3).
-print outfile='time-out.out'/x(time13.4).
-print outfile='time-out.out'/x(time14).
-print outfile='time-out.out'/x(time14.1).
-print outfile='time-out.out'/x(time14.2).
-print outfile='time-out.out'/x(time14.3).
-print outfile='time-out.out'/x(time14.4).
-print outfile='time-out.out'/x(time14.5).
-print outfile='time-out.out'/x(time15).
-print outfile='time-out.out'/x(time15.1).
-print outfile='time-out.out'/x(time15.2).
-print outfile='time-out.out'/x(time15.3).
-print outfile='time-out.out'/x(time15.4).
-print outfile='time-out.out'/x(time15.5).
-print outfile='time-out.out'/x(time15.6).
-print outfile='time-out.out'/x(dtime8).
-print outfile='time-out.out'/x(dtime9).
-print outfile='time-out.out'/x(dtime10).
-print outfile='time-out.out'/x(dtime11).
-print outfile='time-out.out'/x(dtime12).
-print outfile='time-out.out'/x(dtime13).
-print outfile='time-out.out'/x(dtime13.1).
-print outfile='time-out.out'/x(dtime14).
-print outfile='time-out.out'/x(dtime14.1).
-print outfile='time-out.out'/x(dtime14.2).
-print outfile='time-out.out'/x(dtime15).
-print outfile='time-out.out'/x(dtime15.1).
-print outfile='time-out.out'/x(dtime15.2).
-print outfile='time-out.out'/x(dtime15.3).
-print outfile='time-out.out'/x(dtime16).
-print outfile='time-out.out'/x(dtime16.1).
-print outfile='time-out.out'/x(dtime16.2).
-print outfile='time-out.out'/x(dtime16.3).
-print outfile='time-out.out'/x(dtime16.4).
-print outfile='time-out.out'/x(dtime17).
-print outfile='time-out.out'/x(dtime17.1).
-print outfile='time-out.out'/x(dtime17.2).
-print outfile='time-out.out'/x(dtime17.3).
-print outfile='time-out.out'/x(dtime17.4).
-print outfile='time-out.out'/x(dtime17.5).
-print outfile='time-out.out'/x(dtime18).
-print outfile='time-out.out'/x(dtime18.1).
-print outfile='time-out.out'/x(dtime18.2).
-print outfile='time-out.out'/x(dtime18.3).
-print outfile='time-out.out'/x(dtime18.4).
-print outfile='time-out.out'/x(dtime18.5).
-print outfile='time-out.out'/x(dtime18.6).
-execute.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv time-out.pspp
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output"
-diff -u time-out.out - <<EOF 
-  0:00
-   0:00
- 0:00:00
-  0:00:00
-   0:00:00
-    0:00:00
-  0:00:00.0
-     0:00:00
-   0:00:00.0
-  0:00:00.00
-      0:00:00
-    0:00:00.0
-   0:00:00.00
-  0:00:00.000
-       0:00:00
-     0:00:00.0
-    0:00:00.00
-   0:00:00.000
-  0:00:00.0000
-        0:00:00
-      0:00:00.0
-     0:00:00.00
-    0:00:00.000
-   0:00:00.0000
-  0:00:00.00000
-         0:00:00
-       0:00:00.0
-      0:00:00.00
-     0:00:00.000
-    0:00:00.0000
-   0:00:00.00000
-  0:00:00.000000
-  0 00:00
-   0 00:00
- 0 00:00:00
-  0 00:00:00
-   0 00:00:00
-    0 00:00:00
-  0 00:00:00.0
-     0 00:00:00
-   0 00:00:00.0
-  0 00:00:00.00
-      0 00:00:00
-    0 00:00:00.0
-   0 00:00:00.00
-  0 00:00:00.000
-       0 00:00:00
-     0 00:00:00.0
-    0 00:00:00.00
-   0 00:00:00.000
-  0 00:00:00.0000
-        0 00:00:00
-      0 00:00:00.0
-     0 00:00:00.00
-    0 00:00:00.000
-   0 00:00:00.0000
-  0 00:00:00.00000
-         0 00:00:00
-       0 00:00:00.0
-      0 00:00:00.00
-     0 00:00:00.000
-    0 00:00:00.0000
-   0 00:00:00.00000
-  0 00:00:00.000000
-  4:50
-   4:50
- 4:50:38
-  4:50:38
-   4:50:38
-    4:50:38
-  4:50:38.1
-     4:50:38
-   4:50:38.1
-  4:50:38.12
-      4:50:38
-    4:50:38.1
-   4:50:38.12
-  4:50:38.123
-       4:50:38
-     4:50:38.1
-    4:50:38.12
-   4:50:38.123
-  4:50:38.1230
-        4:50:38
-      4:50:38.1
-     4:50:38.12
-    4:50:38.123
-   4:50:38.1230
-  4:50:38.12301
-         4:50:38
-       4:50:38.1
-      4:50:38.12
-     4:50:38.123
-    4:50:38.1230
-   4:50:38.12301
-  4:50:38.123010
-  0 04:50
-   0 04:50
- 0 04:50:38
-  0 04:50:38
-   0 04:50:38
-    0 04:50:38
-  0 04:50:38.1
-     0 04:50:38
-   0 04:50:38.1
-  0 04:50:38.12
-      0 04:50:38
-    0 04:50:38.1
-   0 04:50:38.12
-  0 04:50:38.123
-       0 04:50:38
-     0 04:50:38.1
-    0 04:50:38.12
-   0 04:50:38.123
-  0 04:50:38.1230
-        0 04:50:38
-      0 04:50:38.1
-     0 04:50:38.12
-    0 04:50:38.123
-   0 04:50:38.1230
-  0 04:50:38.12301
-         0 04:50:38
-       0 04:50:38.1
-      0 04:50:38.12
-     0 04:50:38.123
-    0 04:50:38.1230
-   0 04:50:38.12301
-  0 04:50:38.123010
- 12:31
-  12:31
-   12:31
- 12:31:35
-  12:31:35
-   12:31:35
- 12:31:35.2
-    12:31:35
-  12:31:35.2
- 12:31:35.23
-     12:31:35
-   12:31:35.2
-  12:31:35.23
- 12:31:35.235
-      12:31:35
-    12:31:35.2
-   12:31:35.23
-  12:31:35.235
- 12:31:35.2345
-       12:31:35
-     12:31:35.2
-    12:31:35.23
-   12:31:35.235
-  12:31:35.2345
- 12:31:35.23453
-        12:31:35
-      12:31:35.2
-     12:31:35.23
-    12:31:35.235
-   12:31:35.2345
-  12:31:35.23453
- 12:31:35.234530
-  0 12:31
-   0 12:31
- 0 12:31:35
-  0 12:31:35
-   0 12:31:35
-    0 12:31:35
-  0 12:31:35.2
-     0 12:31:35
-   0 12:31:35.2
-  0 12:31:35.23
-      0 12:31:35
-    0 12:31:35.2
-   0 12:31:35.23
-  0 12:31:35.235
-       0 12:31:35
-     0 12:31:35.2
-    0 12:31:35.23
-   0 12:31:35.235
-  0 12:31:35.2345
-        0 12:31:35
-      0 12:31:35.2
-     0 12:31:35.23
-    0 12:31:35.235
-   0 12:31:35.2345
-  0 12:31:35.23453
-         0 12:31:35
-       0 12:31:35.2
-      0 12:31:35.23
-     0 12:31:35.235
-    0 12:31:35.2345
-   0 12:31:35.23453
-  0 12:31:35.234530
- 12:47
-  12:47
-   12:47
- 12:47:53
-  12:47:53
-   12:47:53
- 12:47:53.3
-    12:47:53
-  12:47:53.3
- 12:47:53.35
-     12:47:53
-   12:47:53.3
-  12:47:53.35
- 12:47:53.345
-      12:47:53
-    12:47:53.3
-   12:47:53.35
-  12:47:53.345
- 12:47:53.3451
-       12:47:53
-     12:47:53.3
-    12:47:53.35
-   12:47:53.345
-  12:47:53.3451
- 12:47:53.34505
-        12:47:53
-      12:47:53.3
-     12:47:53.35
-    12:47:53.345
-   12:47:53.3451
-  12:47:53.34505
- 12:47:53.345050
-  0 12:47
-   0 12:47
- 0 12:47:53
-  0 12:47:53
-   0 12:47:53
-    0 12:47:53
-  0 12:47:53.3
-     0 12:47:53
-   0 12:47:53.3
-  0 12:47:53.35
-      0 12:47:53
-    0 12:47:53.3
-   0 12:47:53.35
-  0 12:47:53.345
-       0 12:47:53
-     0 12:47:53.3
-    0 12:47:53.35
-   0 12:47:53.345
-  0 12:47:53.3451
-        0 12:47:53
-      0 12:47:53.3
-     0 12:47:53.35
-    0 12:47:53.345
-   0 12:47:53.3451
-  0 12:47:53.34505
-         0 12:47:53
-       0 12:47:53.3
-      0 12:47:53.35
-     0 12:47:53.345
-    0 12:47:53.3451
-   0 12:47:53.34505
-  0 12:47:53.345050
-  1:26
-   1:26
- 1:26:00
-  1:26:00
-   1:26:00
-    1:26:00
-  1:26:00.5
-     1:26:00
-   1:26:00.5
-  1:26:00.46
-      1:26:00
-    1:26:00.5
-   1:26:00.46
-  1:26:00.456
-       1:26:00
-     1:26:00.5
-    1:26:00.46
-   1:26:00.456
-  1:26:00.4561
-        1:26:00
-      1:26:00.5
-     1:26:00.46
-    1:26:00.456
-   1:26:00.4561
-  1:26:00.45615
-         1:26:00
-       1:26:00.5
-      1:26:00.46
-     1:26:00.456
-    1:26:00.4561
-   1:26:00.45615
-  1:26:00.456150
-  0 01:26
-   0 01:26
- 0 01:26:00
-  0 01:26:00
-   0 01:26:00
-    0 01:26:00
-  0 01:26:00.5
-     0 01:26:00
-   0 01:26:00.5
-  0 01:26:00.46
-      0 01:26:00
-    0 01:26:00.5
-   0 01:26:00.46
-  0 01:26:00.456
-       0 01:26:00
-     0 01:26:00.5
-    0 01:26:00.46
-   0 01:26:00.456
-  0 01:26:00.4561
-        0 01:26:00
-      0 01:26:00.5
-     0 01:26:00.46
-    0 01:26:00.456
-   0 01:26:00.4561
-  0 01:26:00.45615
-         0 01:26:00
-       0 01:26:00.5
-      0 01:26:00.46
-     0 01:26:00.456
-    0 01:26:00.4561
-   0 01:26:00.45615
-  0 01:26:00.456150
- 20:58
-  20:58
-   20:58
- 20:58:11
-  20:58:11
-   20:58:11
- 20:58:11.6
-    20:58:11
-  20:58:11.6
- 20:58:11.57
-     20:58:11
-   20:58:11.6
-  20:58:11.57
- 20:58:11.567
-      20:58:11
-    20:58:11.6
-   20:58:11.57
-  20:58:11.567
- 20:58:11.5668
-       20:58:11
-     20:58:11.6
-    20:58:11.57
-   20:58:11.567
-  20:58:11.5668
- 20:58:11.56677
-        20:58:11
-      20:58:11.6
-     20:58:11.57
-    20:58:11.567
-   20:58:11.5668
-  20:58:11.56677
- 20:58:11.566770
-  0 20:58
-   0 20:58
- 0 20:58:11
-  0 20:58:11
-   0 20:58:11
-    0 20:58:11
-  0 20:58:11.6
-     0 20:58:11
-   0 20:58:11.6
-  0 20:58:11.57
-      0 20:58:11
-    0 20:58:11.6
-   0 20:58:11.57
-  0 20:58:11.567
-       0 20:58:11
-     0 20:58:11.6
-    0 20:58:11.57
-   0 20:58:11.567
-  0 20:58:11.5668
-        0 20:58:11
-      0 20:58:11.6
-     0 20:58:11.57
-    0 20:58:11.567
-   0 20:58:11.5668
-  0 20:58:11.56677
-         0 20:58:11
-       0 20:58:11.6
-      0 20:58:11.57
-     0 20:58:11.567
-    0 20:58:11.5668
-   0 20:58:11.56677
-  0 20:58:11.566770
-  7:36
-   7:36
- 7:36:05
-  7:36:05
-   7:36:05
-    7:36:05
-  7:36:05.2
-     7:36:05
-   7:36:05.2
-  7:36:05.19
-      7:36:05
-    7:36:05.2
-   7:36:05.19
-  7:36:05.190
-       7:36:05
-     7:36:05.2
-    7:36:05.19
-   7:36:05.190
-  7:36:05.1896
-        7:36:05
-      7:36:05.2
-     7:36:05.19
-    7:36:05.190
-   7:36:05.1896
-  7:36:05.18964
-         7:36:05
-       7:36:05.2
-      7:36:05.19
-     7:36:05.190
-    7:36:05.1896
-   7:36:05.18964
-  7:36:05.189640
-  0 07:36
-   0 07:36
- 0 07:36:05
-  0 07:36:05
-   0 07:36:05
-    0 07:36:05
-  0 07:36:05.2
-     0 07:36:05
-   0 07:36:05.2
-  0 07:36:05.19
-      0 07:36:05
-    0 07:36:05.2
-   0 07:36:05.19
-  0 07:36:05.190
-       0 07:36:05
-     0 07:36:05.2
-    0 07:36:05.19
-   0 07:36:05.190
-  0 07:36:05.1896
-        0 07:36:05
-      0 07:36:05.2
-     0 07:36:05.19
-    0 07:36:05.190
-   0 07:36:05.1896
-  0 07:36:05.18964
-         0 07:36:05
-       0 07:36:05.2
-      0 07:36:05.19
-     0 07:36:05.190
-    0 07:36:05.1896
-   0 07:36:05.18964
-  0 07:36:05.189640
- 15:43
-  15:43
-   15:43
- 15:43:49
-  15:43:49
-   15:43:49
- 15:43:49.8
-    15:43:49
-  15:43:49.8
- 15:43:49.83
-     15:43:49
-   15:43:49.8
-  15:43:49.83
- 15:43:49.831
-      15:43:49
-    15:43:49.8
-   15:43:49.83
-  15:43:49.831
- 15:43:49.8313
-       15:43:49
-     15:43:49.8
-    15:43:49.83
-   15:43:49.831
-  15:43:49.8313
- 15:43:49.83132
-        15:43:49
-      15:43:49.8
-     15:43:49.83
-    15:43:49.831
-   15:43:49.8313
-  15:43:49.83132
- 15:43:49.831320
-  0 15:43
-   0 15:43
- 0 15:43:49
-  0 15:43:49
-   0 15:43:49
-    0 15:43:49
-  0 15:43:49.8
-     0 15:43:49
-   0 15:43:49.8
-  0 15:43:49.83
-      0 15:43:49
-    0 15:43:49.8
-   0 15:43:49.83
-  0 15:43:49.831
-       0 15:43:49
-     0 15:43:49.8
-    0 15:43:49.83
-   0 15:43:49.831
-  0 15:43:49.8313
-        0 15:43:49
-      0 15:43:49.8
-     0 15:43:49.83
-    0 15:43:49.831
-   0 15:43:49.8313
-  0 15:43:49.83132
-         0 15:43:49
-       0 15:43:49.8
-      0 15:43:49.83
-     0 15:43:49.831
-    0 15:43:49.8313
-   0 15:43:49.83132
-  0 15:43:49.831320
-  4:25
-   4:25
- 4:25:09
-  4:25:09
-   4:25:09
-    4:25:09
-  4:25:09.0
-     4:25:09
-   4:25:09.0
-  4:25:09.01
-      4:25:09
-    4:25:09.0
-   4:25:09.01
-  4:25:09.013
-       4:25:09
-     4:25:09.0
-    4:25:09.01
-   4:25:09.013
-  4:25:09.0129
-        4:25:09
-      4:25:09.0
-     4:25:09.01
-    4:25:09.013
-   4:25:09.0129
-  4:25:09.01293
-         4:25:09
-       4:25:09.0
-      4:25:09.01
-     4:25:09.013
-    4:25:09.0129
-   4:25:09.01293
-  4:25:09.012930
-  0 04:25
-   0 04:25
- 0 04:25:09
-  0 04:25:09
-   0 04:25:09
-    0 04:25:09
-  0 04:25:09.0
-     0 04:25:09
-   0 04:25:09.0
-  0 04:25:09.01
-      0 04:25:09
-    0 04:25:09.0
-   0 04:25:09.01
-  0 04:25:09.013
-       0 04:25:09
-     0 04:25:09.0
-    0 04:25:09.01
-   0 04:25:09.013
-  0 04:25:09.0129
-        0 04:25:09
-      0 04:25:09.0
-     0 04:25:09.01
-    0 04:25:09.013
-   0 04:25:09.0129
-  0 04:25:09.01293
-         0 04:25:09
-       0 04:25:09.0
-      0 04:25:09.01
-     0 04:25:09.013
-    0 04:25:09.0129
-   0 04:25:09.01293
-  0 04:25:09.012930
-  6:49
-   6:49
- 6:49:27
-  6:49:27
-   6:49:27
-    6:49:27
-  6:49:27.5
-     6:49:27
-   6:49:27.5
-  6:49:27.52
-      6:49:27
-    6:49:27.5
-   6:49:27.52
-  6:49:27.524
-       6:49:27
-     6:49:27.5
-    6:49:27.52
-   6:49:27.524
-  6:49:27.5238
-        6:49:27
-      6:49:27.5
-     6:49:27.52
-    6:49:27.524
-   6:49:27.5238
-  6:49:27.52375
-         6:49:27
-       6:49:27.5
-      6:49:27.52
-     6:49:27.524
-    6:49:27.5238
-   6:49:27.52375
-  6:49:27.523750
-  0 06:49
-   0 06:49
- 0 06:49:27
-  0 06:49:27
-   0 06:49:27
-    0 06:49:27
-  0 06:49:27.5
-     0 06:49:27
-   0 06:49:27.5
-  0 06:49:27.52
-      0 06:49:27
-    0 06:49:27.5
-   0 06:49:27.52
-  0 06:49:27.524
-       0 06:49:27
-     0 06:49:27.5
-    0 06:49:27.52
-   0 06:49:27.524
-  0 06:49:27.5238
-        0 06:49:27
-      0 06:49:27.5
-     0 06:49:27.52
-    0 06:49:27.524
-   0 06:49:27.5238
-  0 06:49:27.52375
-         0 06:49:27
-       0 06:49:27.5
-      0 06:49:27.52
-     0 06:49:27.524
-    0 06:49:27.5238
-   0 06:49:27.52375
-  0 06:49:27.523750
-  2:57
-   2:57
- 2:57:52
-  2:57:52
-   2:57:52
-    2:57:52
-  2:57:52.0
-     2:57:52
-   2:57:52.0
-  2:57:52.02
-      2:57:52
-    2:57:52.0
-   2:57:52.02
-  2:57:52.016
-       2:57:52
-     2:57:52.0
-    2:57:52.02
-   2:57:52.016
-  2:57:52.0156
-        2:57:52
-      2:57:52.0
-     2:57:52.02
-    2:57:52.016
-   2:57:52.0156
-  2:57:52.01565
-         2:57:52
-       2:57:52.0
-      2:57:52.02
-     2:57:52.016
-    2:57:52.0156
-   2:57:52.01565
-  2:57:52.015650
-  0 02:57
-   0 02:57
- 0 02:57:52
-  0 02:57:52
-   0 02:57:52
-    0 02:57:52
-  0 02:57:52.0
-     0 02:57:52
-   0 02:57:52.0
-  0 02:57:52.02
-      0 02:57:52
-    0 02:57:52.0
-   0 02:57:52.02
-  0 02:57:52.016
-       0 02:57:52
-     0 02:57:52.0
-    0 02:57:52.02
-   0 02:57:52.016
-  0 02:57:52.0156
-        0 02:57:52
-      0 02:57:52.0
-     0 02:57:52.02
-    0 02:57:52.016
-   0 02:57:52.0156
-  0 02:57:52.01565
-         0 02:57:52
-       0 02:57:52.0
-      0 02:57:52.02
-     0 02:57:52.016
-    0 02:57:52.0156
-   0 02:57:52.01565
-  0 02:57:52.015650
- 16:45
-  16:45
-   16:45
- 16:45:44
-  16:45:44
-   16:45:44
- 16:45:44.9
-    16:45:44
-  16:45:44.9
- 16:45:44.87
-     16:45:44
-   16:45:44.9
-  16:45:44.87
- 16:45:44.865
-      16:45:44
-    16:45:44.9
-   16:45:44.87
-  16:45:44.865
- 16:45:44.8653
-       16:45:44
-     16:45:44.9
-    16:45:44.87
-   16:45:44.865
-  16:45:44.8653
- 16:45:44.86529
-        16:45:44
-      16:45:44.9
-     16:45:44.87
-    16:45:44.865
-   16:45:44.8653
-  16:45:44.86529
- 16:45:44.865290
-  0 16:45
-   0 16:45
- 0 16:45:44
-  0 16:45:44
-   0 16:45:44
-    0 16:45:44
-  0 16:45:44.9
-     0 16:45:44
-   0 16:45:44.9
-  0 16:45:44.87
-      0 16:45:44
-    0 16:45:44.9
-   0 16:45:44.87
-  0 16:45:44.865
-       0 16:45:44
-     0 16:45:44.9
-    0 16:45:44.87
-   0 16:45:44.865
-  0 16:45:44.8653
-        0 16:45:44
-      0 16:45:44.9
-     0 16:45:44.87
-    0 16:45:44.865
-   0 16:45:44.8653
-  0 16:45:44.86529
-         0 16:45:44
-       0 16:45:44.9
-      0 16:45:44.87
-     0 16:45:44.865
-    0 16:45:44.8653
-   0 16:45:44.86529
-  0 16:45:44.865290
- 21:30
-  21:30
-   21:30
- 21:30:57
-  21:30:57
-   21:30:57
- 21:30:57.8
-    21:30:57
-  21:30:57.8
- 21:30:57.82
-     21:30:57
-   21:30:57.8
-  21:30:57.82
- 21:30:57.820
-      21:30:57
-    21:30:57.8
-   21:30:57.82
-  21:30:57.820
- 21:30:57.8205
-       21:30:57
-     21:30:57.8
-    21:30:57.82
-   21:30:57.820
-  21:30:57.8205
- 21:30:57.82047
-        21:30:57
-      21:30:57.8
-     21:30:57.82
-    21:30:57.820
-   21:30:57.8205
-  21:30:57.82047
- 21:30:57.820470
-  0 21:30
-   0 21:30
- 0 21:30:57
-  0 21:30:57
-   0 21:30:57
-    0 21:30:57
-  0 21:30:57.8
-     0 21:30:57
-   0 21:30:57.8
-  0 21:30:57.82
-      0 21:30:57
-    0 21:30:57.8
-   0 21:30:57.82
-  0 21:30:57.820
-       0 21:30:57
-     0 21:30:57.8
-    0 21:30:57.82
-   0 21:30:57.820
-  0 21:30:57.8205
-        0 21:30:57
-      0 21:30:57.8
-     0 21:30:57.82
-    0 21:30:57.820
-   0 21:30:57.8205
-  0 21:30:57.82047
-         0 21:30:57
-       0 21:30:57.8
-      0 21:30:57.82
-     0 21:30:57.820
-    0 21:30:57.8205
-   0 21:30:57.82047
-  0 21:30:57.820470
-  4:25
-   4:25
- 4:25:09
-  4:25:09
-   4:25:09
-    4:25:09
-  4:25:09.2
-     4:25:09
-   4:25:09.2
-  4:25:09.15
-      4:25:09
-    4:25:09.2
-   4:25:09.15
-  4:25:09.154
-       4:25:09
-     4:25:09.2
-    4:25:09.15
-   4:25:09.154
-  4:25:09.1539
-        4:25:09
-      4:25:09.2
-     4:25:09.15
-    4:25:09.154
-   4:25:09.1539
-  4:25:09.15395
-         4:25:09
-       4:25:09.2
-      4:25:09.15
-     4:25:09.154
-    4:25:09.1539
-   4:25:09.15395
-  4:25:09.153950
-  0 04:25
-   0 04:25
- 0 04:25:09
-  0 04:25:09
-   0 04:25:09
-    0 04:25:09
-  0 04:25:09.2
-     0 04:25:09
-   0 04:25:09.2
-  0 04:25:09.15
-      0 04:25:09
-    0 04:25:09.2
-   0 04:25:09.15
-  0 04:25:09.154
-       0 04:25:09
-     0 04:25:09.2
-    0 04:25:09.15
-   0 04:25:09.154
-  0 04:25:09.1539
-        0 04:25:09
-      0 04:25:09.2
-     0 04:25:09.15
-    0 04:25:09.154
-   0 04:25:09.1539
-  0 04:25:09.15395
-         0 04:25:09
-       0 04:25:09.2
-      0 04:25:09.15
-     0 04:25:09.154
-    0 04:25:09.1539
-   0 04:25:09.15395
-  0 04:25:09.153950
-  6:49
-   6:49
- 6:49:27
-  6:49:27
-   6:49:27
-    6:49:27
-  6:49:27.1
-     6:49:27
-   6:49:27.1
-  6:49:27.11
-      6:49:27
-    6:49:27.1
-   6:49:27.11
-  6:49:27.105
-       6:49:27
-     6:49:27.1
-    6:49:27.11
-   6:49:27.105
-  6:49:27.1053
-        6:49:27
-      6:49:27.1
-     6:49:27.11
-    6:49:27.105
-   6:49:27.1053
-  6:49:27.10533
-         6:49:27
-       6:49:27.1
-      6:49:27.11
-     6:49:27.105
-    6:49:27.1053
-   6:49:27.10533
-  6:49:27.105330
-  0 06:49
-   0 06:49
- 0 06:49:27
-  0 06:49:27
-   0 06:49:27
-    0 06:49:27
-  0 06:49:27.1
-     0 06:49:27
-   0 06:49:27.1
-  0 06:49:27.11
-      0 06:49:27
-    0 06:49:27.1
-   0 06:49:27.11
-  0 06:49:27.105
-       0 06:49:27
-     0 06:49:27.1
-    0 06:49:27.11
-   0 06:49:27.105
-  0 06:49:27.1053
-        0 06:49:27
-      0 06:49:27.1
-     0 06:49:27.11
-    0 06:49:27.105
-   0 06:49:27.1053
-  0 06:49:27.10533
-         0 06:49:27
-       0 06:49:27.1
-      0 06:49:27.11
-     0 06:49:27.105
-    0 06:49:27.1053
-   0 06:49:27.10533
-  0 06:49:27.105330
-  2:57
-   2:57
- 2:57:52
-  2:57:52
-   2:57:52
-    2:57:52
-  2:57:52.5
-     2:57:52
-   2:57:52.5
-  2:57:52.48
-      2:57:52
-    2:57:52.5
-   2:57:52.48
-  2:57:52.482
-       2:57:52
-     2:57:52.5
-    2:57:52.48
-   2:57:52.482
-  2:57:52.4823
-        2:57:52
-      2:57:52.5
-     2:57:52.48
-    2:57:52.482
-   2:57:52.4823
-  2:57:52.48229
-         2:57:52
-       2:57:52.5
-      2:57:52.48
-     2:57:52.482
-    2:57:52.4823
-   2:57:52.48229
-  2:57:52.482290
-  0 02:57
-   0 02:57
- 0 02:57:52
-  0 02:57:52
-   0 02:57:52
-    0 02:57:52
-  0 02:57:52.5
-     0 02:57:52
-   0 02:57:52.5
-  0 02:57:52.48
-      0 02:57:52
-    0 02:57:52.5
-   0 02:57:52.48
-  0 02:57:52.482
-       0 02:57:52
-     0 02:57:52.5
-    0 02:57:52.48
-   0 02:57:52.482
-  0 02:57:52.4823
-        0 02:57:52
-      0 02:57:52.5
-     0 02:57:52.48
-    0 02:57:52.482
-   0 02:57:52.4823
-  0 02:57:52.48229
-         0 02:57:52
-       0 02:57:52.5
-      0 02:57:52.48
-     0 02:57:52.482
-    0 02:57:52.4823
-   0 02:57:52.48229
-  0 02:57:52.482290
- 16:45
-  16:45
-   16:45
- 16:45:44
-  16:45:44
-   16:45:44
- 16:45:44.7
-    16:45:44
-  16:45:44.7
- 16:45:44.66
-     16:45:44
-   16:45:44.7
-  16:45:44.66
- 16:45:44.658
-      16:45:44
-    16:45:44.7
-   16:45:44.66
-  16:45:44.658
- 16:45:44.6583
-       16:45:44
-     16:45:44.7
-    16:45:44.66
-   16:45:44.658
-  16:45:44.6583
- 16:45:44.65827
-        16:45:44
-      16:45:44.7
-     16:45:44.66
-    16:45:44.658
-   16:45:44.6583
-  16:45:44.65827
- 16:45:44.658270
-  0 16:45
-   0 16:45
- 0 16:45:44
-  0 16:45:44
-   0 16:45:44
-    0 16:45:44
-  0 16:45:44.7
-     0 16:45:44
-   0 16:45:44.7
-  0 16:45:44.66
-      0 16:45:44
-    0 16:45:44.7
-   0 16:45:44.66
-  0 16:45:44.658
-       0 16:45:44
-     0 16:45:44.7
-    0 16:45:44.66
-   0 16:45:44.658
-  0 16:45:44.6583
-        0 16:45:44
-      0 16:45:44.7
-     0 16:45:44.66
-    0 16:45:44.658
-   0 16:45:44.6583
-  0 16:45:44.65827
-         0 16:45:44
-       0 16:45:44.7
-      0 16:45:44.66
-     0 16:45:44.658
-    0 16:45:44.6583
-   0 16:45:44.65827
-  0 16:45:44.658270
- 21:30
-  21:30
-   21:30
- 21:30:57
-  21:30:57
-   21:30:57
- 21:30:57.6
-    21:30:57
-  21:30:57.6
- 21:30:57.58
-     21:30:57
-   21:30:57.6
-  21:30:57.58
- 21:30:57.582
-      21:30:57
-    21:30:57.6
-   21:30:57.58
-  21:30:57.582
- 21:30:57.5822
-       21:30:57
-     21:30:57.6
-    21:30:57.58
-   21:30:57.582
-  21:30:57.5822
- 21:30:57.58219
-        21:30:57
-      21:30:57.6
-     21:30:57.58
-    21:30:57.582
-   21:30:57.5822
-  21:30:57.58219
- 21:30:57.582190
-  0 21:30
-   0 21:30
- 0 21:30:57
-  0 21:30:57
-   0 21:30:57
-    0 21:30:57
-  0 21:30:57.6
-     0 21:30:57
-   0 21:30:57.6
-  0 21:30:57.58
-      0 21:30:57
-    0 21:30:57.6
-   0 21:30:57.58
-  0 21:30:57.582
-       0 21:30:57
-     0 21:30:57.6
-    0 21:30:57.58
-   0 21:30:57.582
-  0 21:30:57.5822
-        0 21:30:57
-      0 21:30:57.6
-     0 21:30:57.58
-    0 21:30:57.582
-   0 21:30:57.5822
-  0 21:30:57.58219
-         0 21:30:57
-       0 21:30:57.6
-      0 21:30:57.58
-     0 21:30:57.582
-    0 21:30:57.5822
-   0 21:30:57.58219
-  0 21:30:57.582190
- 22:30
-  22:30
-   22:30
- 22:30:04
-  22:30:04
-   22:30:04
- 22:30:04.2
-    22:30:04
-  22:30:04.2
- 22:30:04.18
-     22:30:04
-   22:30:04.2
-  22:30:04.18
- 22:30:04.183
-      22:30:04
-    22:30:04.2
-   22:30:04.18
-  22:30:04.183
- 22:30:04.1835
-       22:30:04
-     22:30:04.2
-    22:30:04.18
-   22:30:04.183
-  22:30:04.1835
- 22:30:04.18347
-        22:30:04
-      22:30:04.2
-     22:30:04.18
-    22:30:04.183
-   22:30:04.1835
-  22:30:04.18347
- 22:30:04.183470
-  0 22:30
-   0 22:30
- 0 22:30:04
-  0 22:30:04
-   0 22:30:04
-    0 22:30:04
-  0 22:30:04.2
-     0 22:30:04
-   0 22:30:04.2
-  0 22:30:04.18
-      0 22:30:04
-    0 22:30:04.2
-   0 22:30:04.18
-  0 22:30:04.183
-       0 22:30:04
-     0 22:30:04.2
-    0 22:30:04.18
-   0 22:30:04.183
-  0 22:30:04.1835
-        0 22:30:04
-      0 22:30:04.2
-     0 22:30:04.18
-    0 22:30:04.183
-   0 22:30:04.1835
-  0 22:30:04.18347
-         0 22:30:04
-       0 22:30:04.2
-      0 22:30:04.18
-     0 22:30:04.183
-    0 22:30:04.1835
-   0 22:30:04.18347
-  0 22:30:04.183470
-  1:56
-   1:56
- 1:56:51
-  1:56:51
-   1:56:51
-    1:56:51
-  1:56:51.6
-     1:56:51
-   1:56:51.6
-  1:56:51.59
-      1:56:51
-    1:56:51.6
-   1:56:51.59
-  1:56:51.593
-       1:56:51
-     1:56:51.6
-    1:56:51.59
-   1:56:51.593
-  1:56:51.5932
-        1:56:51
-      1:56:51.6
-     1:56:51.59
-    1:56:51.593
-   1:56:51.5932
-  1:56:51.59319
-         1:56:51
-       1:56:51.6
-      1:56:51.59
-     1:56:51.593
-    1:56:51.5932
-   1:56:51.59319
-  1:56:51.593190
-  0 01:56
-   0 01:56
- 0 01:56:51
-  0 01:56:51
-   0 01:56:51
-    0 01:56:51
-  0 01:56:51.6
-     0 01:56:51
-   0 01:56:51.6
-  0 01:56:51.59
-      0 01:56:51
-    0 01:56:51.6
-   0 01:56:51.59
-  0 01:56:51.593
-       0 01:56:51
-     0 01:56:51.6
-    0 01:56:51.59
-   0 01:56:51.593
-  0 01:56:51.5932
-        0 01:56:51
-      0 01:56:51.6
-     0 01:56:51.59
-    0 01:56:51.593
-   0 01:56:51.5932
-  0 01:56:51.59319
-         0 01:56:51
-       0 01:56:51.6
-      0 01:56:51.59
-     0 01:56:51.593
-    0 01:56:51.5932
-   0 01:56:51.59319
-  0 01:56:51.593190
- 24:00
-  24:00
-   24:00
- 24:00:00
-  24:00:00
-   24:00:00
- 24:00:00.0
-    24:00:00
-  24:00:00.0
- 24:00:00.00
-     24:00:00
-   24:00:00.0
-  24:00:00.00
- 24:00:00.000
-      24:00:00
-    24:00:00.0
-   24:00:00.00
-  24:00:00.000
- 24:00:00.0000
-       24:00:00
-     24:00:00.0
-    24:00:00.00
-   24:00:00.000
-  24:00:00.0000
- 24:00:00.00000
-        24:00:00
-      24:00:00.0
-     24:00:00.00
-    24:00:00.000
-   24:00:00.0000
-  24:00:00.00000
- 24:00:00.000000
-  1 00:00
-   1 00:00
- 1 00:00:00
-  1 00:00:00
-   1 00:00:00
-    1 00:00:00
-  1 00:00:00.0
-     1 00:00:00
-   1 00:00:00.0
-  1 00:00:00.00
-      1 00:00:00
-    1 00:00:00.0
-   1 00:00:00.00
-  1 00:00:00.000
-       1 00:00:00
-     1 00:00:00.0
-    1 00:00:00.00
-   1 00:00:00.000
-  1 00:00:00.0000
-        1 00:00:00
-      1 00:00:00.0
-     1 00:00:00.00
-    1 00:00:00.000
-   1 00:00:00.0000
-  1 00:00:00.00000
-         1 00:00:00
-       1 00:00:00.0
-      1 00:00:00.00
-     1 00:00:00.000
-    1 00:00:00.0000
-   1 00:00:00.00000
-  1 00:00:00.000000
- 28:50
-  28:50
-   28:50
- 28:50:38
-  28:50:38
-   28:50:38
- 28:50:38.1
-    28:50:38
-  28:50:38.1
- 28:50:38.12
-     28:50:38
-   28:50:38.1
-  28:50:38.12
- 28:50:38.123
-      28:50:38
-    28:50:38.1
-   28:50:38.12
-  28:50:38.123
- 28:50:38.1230
-       28:50:38
-     28:50:38.1
-    28:50:38.12
-   28:50:38.123
-  28:50:38.1230
- 28:50:38.12301
-        28:50:38
-      28:50:38.1
-     28:50:38.12
-    28:50:38.123
-   28:50:38.1230
-  28:50:38.12301
- 28:50:38.123010
-  1 04:50
-   1 04:50
- 1 04:50:38
-  1 04:50:38
-   1 04:50:38
-    1 04:50:38
-  1 04:50:38.1
-     1 04:50:38
-   1 04:50:38.1
-  1 04:50:38.12
-      1 04:50:38
-    1 04:50:38.1
-   1 04:50:38.12
-  1 04:50:38.123
-       1 04:50:38
-     1 04:50:38.1
-    1 04:50:38.12
-   1 04:50:38.123
-  1 04:50:38.1230
-        1 04:50:38
-      1 04:50:38.1
-     1 04:50:38.12
-    1 04:50:38.123
-   1 04:50:38.1230
-  1 04:50:38.12301
-         1 04:50:38
-       1 04:50:38.1
-      1 04:50:38.12
-     1 04:50:38.123
-    1 04:50:38.1230
-   1 04:50:38.12301
-  1 04:50:38.123010
- 36:31
-  36:31
-   36:31
- 36:31:35
-  36:31:35
-   36:31:35
- 36:31:35.2
-    36:31:35
-  36:31:35.2
- 36:31:35.23
-     36:31:35
-   36:31:35.2
-  36:31:35.23
- 36:31:35.235
-      36:31:35
-    36:31:35.2
-   36:31:35.23
-  36:31:35.235
- 36:31:35.2345
-       36:31:35
-     36:31:35.2
-    36:31:35.23
-   36:31:35.235
-  36:31:35.2345
- 36:31:35.23453
-        36:31:35
-      36:31:35.2
-     36:31:35.23
-    36:31:35.235
-   36:31:35.2345
-  36:31:35.23453
- 36:31:35.234530
-  1 12:31
-   1 12:31
- 1 12:31:35
-  1 12:31:35
-   1 12:31:35
-    1 12:31:35
-  1 12:31:35.2
-     1 12:31:35
-   1 12:31:35.2
-  1 12:31:35.23
-      1 12:31:35
-    1 12:31:35.2
-   1 12:31:35.23
-  1 12:31:35.235
-       1 12:31:35
-     1 12:31:35.2
-    1 12:31:35.23
-   1 12:31:35.235
-  1 12:31:35.2345
-        1 12:31:35
-      1 12:31:35.2
-     1 12:31:35.23
-    1 12:31:35.235
-   1 12:31:35.2345
-  1 12:31:35.23453
-         1 12:31:35
-       1 12:31:35.2
-      1 12:31:35.23
-     1 12:31:35.235
-    1 12:31:35.2345
-   1 12:31:35.23453
-  1 12:31:35.234530
- 36:47
-  36:47
-   36:47
- 36:47:53
-  36:47:53
-   36:47:53
- 36:47:53.3
-    36:47:53
-  36:47:53.3
- 36:47:53.35
-     36:47:53
-   36:47:53.3
-  36:47:53.35
- 36:47:53.345
-      36:47:53
-    36:47:53.3
-   36:47:53.35
-  36:47:53.345
- 36:47:53.3451
-       36:47:53
-     36:47:53.3
-    36:47:53.35
-   36:47:53.345
-  36:47:53.3451
- 36:47:53.34505
-        36:47:53
-      36:47:53.3
-     36:47:53.35
-    36:47:53.345
-   36:47:53.3451
-  36:47:53.34505
- 36:47:53.345050
-  1 12:47
-   1 12:47
- 1 12:47:53
-  1 12:47:53
-   1 12:47:53
-    1 12:47:53
-  1 12:47:53.3
-     1 12:47:53
-   1 12:47:53.3
-  1 12:47:53.35
-      1 12:47:53
-    1 12:47:53.3
-   1 12:47:53.35
-  1 12:47:53.345
-       1 12:47:53
-     1 12:47:53.3
-    1 12:47:53.35
-   1 12:47:53.345
-  1 12:47:53.3451
-        1 12:47:53
-      1 12:47:53.3
-     1 12:47:53.35
-    1 12:47:53.345
-   1 12:47:53.3451
-  1 12:47:53.34505
-         1 12:47:53
-       1 12:47:53.3
-      1 12:47:53.35
-     1 12:47:53.345
-    1 12:47:53.3451
-   1 12:47:53.34505
-  1 12:47:53.345050
- 25:26
-  25:26
-   25:26
- 25:26:00
-  25:26:00
-   25:26:00
- 25:26:00.5
-    25:26:00
-  25:26:00.5
- 25:26:00.46
-     25:26:00
-   25:26:00.5
-  25:26:00.46
- 25:26:00.456
-      25:26:00
-    25:26:00.5
-   25:26:00.46
-  25:26:00.456
- 25:26:00.4561
-       25:26:00
-     25:26:00.5
-    25:26:00.46
-   25:26:00.456
-  25:26:00.4561
- 25:26:00.45615
-        25:26:00
-      25:26:00.5
-     25:26:00.46
-    25:26:00.456
-   25:26:00.4561
-  25:26:00.45615
- 25:26:00.456150
-  1 01:26
-   1 01:26
- 1 01:26:00
-  1 01:26:00
-   1 01:26:00
-    1 01:26:00
-  1 01:26:00.5
-     1 01:26:00
-   1 01:26:00.5
-  1 01:26:00.46
-      1 01:26:00
-    1 01:26:00.5
-   1 01:26:00.46
-  1 01:26:00.456
-       1 01:26:00
-     1 01:26:00.5
-    1 01:26:00.46
-   1 01:26:00.456
-  1 01:26:00.4561
-        1 01:26:00
-      1 01:26:00.5
-     1 01:26:00.46
-    1 01:26:00.456
-   1 01:26:00.4561
-  1 01:26:00.45615
-         1 01:26:00
-       1 01:26:00.5
-      1 01:26:00.46
-     1 01:26:00.456
-    1 01:26:00.4561
-   1 01:26:00.45615
-  1 01:26:00.456150
- 44:58
-  44:58
-   44:58
- 44:58:11
-  44:58:11
-   44:58:11
- 44:58:11.6
-    44:58:11
-  44:58:11.6
- 44:58:11.57
-     44:58:11
-   44:58:11.6
-  44:58:11.57
- 44:58:11.567
-      44:58:11
-    44:58:11.6
-   44:58:11.57
-  44:58:11.567
- 44:58:11.5668
-       44:58:11
-     44:58:11.6
-    44:58:11.57
-   44:58:11.567
-  44:58:11.5668
- 44:58:11.56677
-        44:58:11
-      44:58:11.6
-     44:58:11.57
-    44:58:11.567
-   44:58:11.5668
-  44:58:11.56677
- 44:58:11.566770
-  1 20:58
-   1 20:58
- 1 20:58:11
-  1 20:58:11
-   1 20:58:11
-    1 20:58:11
-  1 20:58:11.6
-     1 20:58:11
-   1 20:58:11.6
-  1 20:58:11.57
-      1 20:58:11
-    1 20:58:11.6
-   1 20:58:11.57
-  1 20:58:11.567
-       1 20:58:11
-     1 20:58:11.6
-    1 20:58:11.57
-   1 20:58:11.567
-  1 20:58:11.5668
-        1 20:58:11
-      1 20:58:11.6
-     1 20:58:11.57
-    1 20:58:11.567
-   1 20:58:11.5668
-  1 20:58:11.56677
-         1 20:58:11
-       1 20:58:11.6
-      1 20:58:11.57
-     1 20:58:11.567
-    1 20:58:11.5668
-   1 20:58:11.56677
-  1 20:58:11.566770
- 31:36
-  31:36
-   31:36
- 31:36:05
-  31:36:05
-   31:36:05
- 31:36:05.2
-    31:36:05
-  31:36:05.2
- 31:36:05.19
-     31:36:05
-   31:36:05.2
-  31:36:05.19
- 31:36:05.190
-      31:36:05
-    31:36:05.2
-   31:36:05.19
-  31:36:05.190
- 31:36:05.1896
-       31:36:05
-     31:36:05.2
-    31:36:05.19
-   31:36:05.190
-  31:36:05.1896
- 31:36:05.18964
-        31:36:05
-      31:36:05.2
-     31:36:05.19
-    31:36:05.190
-   31:36:05.1896
-  31:36:05.18964
- 31:36:05.189640
-  1 07:36
-   1 07:36
- 1 07:36:05
-  1 07:36:05
-   1 07:36:05
-    1 07:36:05
-  1 07:36:05.2
-     1 07:36:05
-   1 07:36:05.2
-  1 07:36:05.19
-      1 07:36:05
-    1 07:36:05.2
-   1 07:36:05.19
-  1 07:36:05.190
-       1 07:36:05
-     1 07:36:05.2
-    1 07:36:05.19
-   1 07:36:05.190
-  1 07:36:05.1896
-        1 07:36:05
-      1 07:36:05.2
-     1 07:36:05.19
-    1 07:36:05.190
-   1 07:36:05.1896
-  1 07:36:05.18964
-         1 07:36:05
-       1 07:36:05.2
-      1 07:36:05.19
-     1 07:36:05.190
-    1 07:36:05.1896
-   1 07:36:05.18964
-  1 07:36:05.189640
- 39:43
-  39:43
-   39:43
- 39:43:49
-  39:43:49
-   39:43:49
- 39:43:49.8
-    39:43:49
-  39:43:49.8
- 39:43:49.83
-     39:43:49
-   39:43:49.8
-  39:43:49.83
- 39:43:49.831
-      39:43:49
-    39:43:49.8
-   39:43:49.83
-  39:43:49.831
- 39:43:49.8313
-       39:43:49
-     39:43:49.8
-    39:43:49.83
-   39:43:49.831
-  39:43:49.8313
- 39:43:49.83132
-        39:43:49
-      39:43:49.8
-     39:43:49.83
-    39:43:49.831
-   39:43:49.8313
-  39:43:49.83132
- 39:43:49.831320
-  1 15:43
-   1 15:43
- 1 15:43:49
-  1 15:43:49
-   1 15:43:49
-    1 15:43:49
-  1 15:43:49.8
-     1 15:43:49
-   1 15:43:49.8
-  1 15:43:49.83
-      1 15:43:49
-    1 15:43:49.8
-   1 15:43:49.83
-  1 15:43:49.831
-       1 15:43:49
-     1 15:43:49.8
-    1 15:43:49.83
-   1 15:43:49.831
-  1 15:43:49.8313
-        1 15:43:49
-      1 15:43:49.8
-     1 15:43:49.83
-    1 15:43:49.831
-   1 15:43:49.8313
-  1 15:43:49.83132
-         1 15:43:49
-       1 15:43:49.8
-      1 15:43:49.83
-     1 15:43:49.831
-    1 15:43:49.8313
-   1 15:43:49.83132
-  1 15:43:49.831320
- 28:25
-  28:25
-   28:25
- 28:25:09
-  28:25:09
-   28:25:09
- 28:25:09.0
-    28:25:09
-  28:25:09.0
- 28:25:09.01
-     28:25:09
-   28:25:09.0
-  28:25:09.01
- 28:25:09.013
-      28:25:09
-    28:25:09.0
-   28:25:09.01
-  28:25:09.013
- 28:25:09.0129
-       28:25:09
-     28:25:09.0
-    28:25:09.01
-   28:25:09.013
-  28:25:09.0129
- 28:25:09.01293
-        28:25:09
-      28:25:09.0
-     28:25:09.01
-    28:25:09.013
-   28:25:09.0129
-  28:25:09.01293
- 28:25:09.012930
-  1 04:25
-   1 04:25
- 1 04:25:09
-  1 04:25:09
-   1 04:25:09
-    1 04:25:09
-  1 04:25:09.0
-     1 04:25:09
-   1 04:25:09.0
-  1 04:25:09.01
-      1 04:25:09
-    1 04:25:09.0
-   1 04:25:09.01
-  1 04:25:09.013
-       1 04:25:09
-     1 04:25:09.0
-    1 04:25:09.01
-   1 04:25:09.013
-  1 04:25:09.0129
-        1 04:25:09
-      1 04:25:09.0
-     1 04:25:09.01
-    1 04:25:09.013
-   1 04:25:09.0129
-  1 04:25:09.01293
-         1 04:25:09
-       1 04:25:09.0
-      1 04:25:09.01
-     1 04:25:09.013
-    1 04:25:09.0129
-   1 04:25:09.01293
-  1 04:25:09.012930
- 30:49
-  30:49
-   30:49
- 30:49:27
-  30:49:27
-   30:49:27
- 30:49:27.5
-    30:49:27
-  30:49:27.5
- 30:49:27.52
-     30:49:27
-   30:49:27.5
-  30:49:27.52
- 30:49:27.524
-      30:49:27
-    30:49:27.5
-   30:49:27.52
-  30:49:27.524
- 30:49:27.5237
-       30:49:27
-     30:49:27.5
-    30:49:27.52
-   30:49:27.524
-  30:49:27.5237
- 30:49:27.52375
-        30:49:27
-      30:49:27.5
-     30:49:27.52
-    30:49:27.524
-   30:49:27.5237
-  30:49:27.52375
- 30:49:27.523750
-  1 06:49
-   1 06:49
- 1 06:49:27
-  1 06:49:27
-   1 06:49:27
-    1 06:49:27
-  1 06:49:27.5
-     1 06:49:27
-   1 06:49:27.5
-  1 06:49:27.52
-      1 06:49:27
-    1 06:49:27.5
-   1 06:49:27.52
-  1 06:49:27.524
-       1 06:49:27
-     1 06:49:27.5
-    1 06:49:27.52
-   1 06:49:27.524
-  1 06:49:27.5237
-        1 06:49:27
-      1 06:49:27.5
-     1 06:49:27.52
-    1 06:49:27.524
-   1 06:49:27.5237
-  1 06:49:27.52375
-         1 06:49:27
-       1 06:49:27.5
-      1 06:49:27.52
-     1 06:49:27.524
-    1 06:49:27.5237
-   1 06:49:27.52375
-  1 06:49:27.523750
- 26:57
-  26:57
-   26:57
- 26:57:52
-  26:57:52
-   26:57:52
- 26:57:52.0
-    26:57:52
-  26:57:52.0
- 26:57:52.02
-     26:57:52
-   26:57:52.0
-  26:57:52.02
- 26:57:52.016
-      26:57:52
-    26:57:52.0
-   26:57:52.02
-  26:57:52.016
- 26:57:52.0157
-       26:57:52
-     26:57:52.0
-    26:57:52.02
-   26:57:52.016
-  26:57:52.0157
- 26:57:52.01565
-        26:57:52
-      26:57:52.0
-     26:57:52.02
-    26:57:52.016
-   26:57:52.0157
-  26:57:52.01565
- 26:57:52.015650
-  1 02:57
-   1 02:57
- 1 02:57:52
-  1 02:57:52
-   1 02:57:52
-    1 02:57:52
-  1 02:57:52.0
-     1 02:57:52
-   1 02:57:52.0
-  1 02:57:52.02
-      1 02:57:52
-    1 02:57:52.0
-   1 02:57:52.02
-  1 02:57:52.016
-       1 02:57:52
-     1 02:57:52.0
-    1 02:57:52.02
-   1 02:57:52.016
-  1 02:57:52.0157
-        1 02:57:52
-      1 02:57:52.0
-     1 02:57:52.02
-    1 02:57:52.016
-   1 02:57:52.0157
-  1 02:57:52.01565
-         1 02:57:52
-       1 02:57:52.0
-      1 02:57:52.02
-     1 02:57:52.016
-    1 02:57:52.0157
-   1 02:57:52.01565
-  1 02:57:52.015650
- 40:45
-  40:45
-   40:45
- 40:45:44
-  40:45:44
-   40:45:44
- 40:45:44.9
-    40:45:44
-  40:45:44.9
- 40:45:44.87
-     40:45:44
-   40:45:44.9
-  40:45:44.87
- 40:45:44.865
-      40:45:44
-    40:45:44.9
-   40:45:44.87
-  40:45:44.865
- 40:45:44.8653
-       40:45:44
-     40:45:44.9
-    40:45:44.87
-   40:45:44.865
-  40:45:44.8653
- 40:45:44.86529
-        40:45:44
-      40:45:44.9
-     40:45:44.87
-    40:45:44.865
-   40:45:44.8653
-  40:45:44.86529
- 40:45:44.865290
-  1 16:45
-   1 16:45
- 1 16:45:44
-  1 16:45:44
-   1 16:45:44
-    1 16:45:44
-  1 16:45:44.9
-     1 16:45:44
-   1 16:45:44.9
-  1 16:45:44.87
-      1 16:45:44
-    1 16:45:44.9
-   1 16:45:44.87
-  1 16:45:44.865
-       1 16:45:44
-     1 16:45:44.9
-    1 16:45:44.87
-   1 16:45:44.865
-  1 16:45:44.8653
-        1 16:45:44
-      1 16:45:44.9
-     1 16:45:44.87
-    1 16:45:44.865
-   1 16:45:44.8653
-  1 16:45:44.86529
-         1 16:45:44
-       1 16:45:44.9
-      1 16:45:44.87
-     1 16:45:44.865
-    1 16:45:44.8653
-   1 16:45:44.86529
-  1 16:45:44.865290
- 45:30
-  45:30
-   45:30
- 45:30:57
-  45:30:57
-   45:30:57
- 45:30:57.8
-    45:30:57
-  45:30:57.8
- 45:30:57.82
-     45:30:57
-   45:30:57.8
-  45:30:57.82
- 45:30:57.820
-      45:30:57
-    45:30:57.8
-   45:30:57.82
-  45:30:57.820
- 45:30:57.8205
-       45:30:57
-     45:30:57.8
-    45:30:57.82
-   45:30:57.820
-  45:30:57.8205
- 45:30:57.82047
-        45:30:57
-      45:30:57.8
-     45:30:57.82
-    45:30:57.820
-   45:30:57.8205
-  45:30:57.82047
- 45:30:57.820470
-  1 21:30
-   1 21:30
- 1 21:30:57
-  1 21:30:57
-   1 21:30:57
-    1 21:30:57
-  1 21:30:57.8
-     1 21:30:57
-   1 21:30:57.8
-  1 21:30:57.82
-      1 21:30:57
-    1 21:30:57.8
-   1 21:30:57.82
-  1 21:30:57.820
-       1 21:30:57
-     1 21:30:57.8
-    1 21:30:57.82
-   1 21:30:57.820
-  1 21:30:57.8205
-        1 21:30:57
-      1 21:30:57.8
-     1 21:30:57.82
-    1 21:30:57.820
-   1 21:30:57.8205
-  1 21:30:57.82047
-         1 21:30:57
-       1 21:30:57.8
-      1 21:30:57.82
-     1 21:30:57.820
-    1 21:30:57.8205
-   1 21:30:57.82047
-  1 21:30:57.820470
- 28:25
-  28:25
-   28:25
- 28:25:09
-  28:25:09
-   28:25:09
- 28:25:09.2
-    28:25:09
-  28:25:09.2
- 28:25:09.15
-     28:25:09
-   28:25:09.2
-  28:25:09.15
- 28:25:09.154
-      28:25:09
-    28:25:09.2
-   28:25:09.15
-  28:25:09.154
- 28:25:09.1540
-       28:25:09
-     28:25:09.2
-    28:25:09.15
-   28:25:09.154
-  28:25:09.1540
- 28:25:09.15395
-        28:25:09
-      28:25:09.2
-     28:25:09.15
-    28:25:09.154
-   28:25:09.1540
-  28:25:09.15395
- 28:25:09.153950
-  1 04:25
-   1 04:25
- 1 04:25:09
-  1 04:25:09
-   1 04:25:09
-    1 04:25:09
-  1 04:25:09.2
-     1 04:25:09
-   1 04:25:09.2
-  1 04:25:09.15
-      1 04:25:09
-    1 04:25:09.2
-   1 04:25:09.15
-  1 04:25:09.154
-       1 04:25:09
-     1 04:25:09.2
-    1 04:25:09.15
-   1 04:25:09.154
-  1 04:25:09.1540
-        1 04:25:09
-      1 04:25:09.2
-     1 04:25:09.15
-    1 04:25:09.154
-   1 04:25:09.1540
-  1 04:25:09.15395
-         1 04:25:09
-       1 04:25:09.2
-      1 04:25:09.15
-     1 04:25:09.154
-    1 04:25:09.1540
-   1 04:25:09.15395
-  1 04:25:09.153950
- 30:49
-  30:49
-   30:49
- 30:49:27
-  30:49:27
-   30:49:27
- 30:49:27.1
-    30:49:27
-  30:49:27.1
- 30:49:27.11
-     30:49:27
-   30:49:27.1
-  30:49:27.11
- 30:49:27.105
-      30:49:27
-    30:49:27.1
-   30:49:27.11
-  30:49:27.105
- 30:49:27.1053
-       30:49:27
-     30:49:27.1
-    30:49:27.11
-   30:49:27.105
-  30:49:27.1053
- 30:49:27.10533
-        30:49:27
-      30:49:27.1
-     30:49:27.11
-    30:49:27.105
-   30:49:27.1053
-  30:49:27.10533
- 30:49:27.105330
-  1 06:49
-   1 06:49
- 1 06:49:27
-  1 06:49:27
-   1 06:49:27
-    1 06:49:27
-  1 06:49:27.1
-     1 06:49:27
-   1 06:49:27.1
-  1 06:49:27.11
-      1 06:49:27
-    1 06:49:27.1
-   1 06:49:27.11
-  1 06:49:27.105
-       1 06:49:27
-     1 06:49:27.1
-    1 06:49:27.11
-   1 06:49:27.105
-  1 06:49:27.1053
-        1 06:49:27
-      1 06:49:27.1
-     1 06:49:27.11
-    1 06:49:27.105
-   1 06:49:27.1053
-  1 06:49:27.10533
-         1 06:49:27
-       1 06:49:27.1
-      1 06:49:27.11
-     1 06:49:27.105
-    1 06:49:27.1053
-   1 06:49:27.10533
-  1 06:49:27.105330
- 26:57
-  26:57
-   26:57
- 26:57:52
-  26:57:52
-   26:57:52
- 26:57:52.5
-    26:57:52
-  26:57:52.5
- 26:57:52.48
-     26:57:52
-   26:57:52.5
-  26:57:52.48
- 26:57:52.482
-      26:57:52
-    26:57:52.5
-   26:57:52.48
-  26:57:52.482
- 26:57:52.4823
-       26:57:52
-     26:57:52.5
-    26:57:52.48
-   26:57:52.482
-  26:57:52.4823
- 26:57:52.48229
-        26:57:52
-      26:57:52.5
-     26:57:52.48
-    26:57:52.482
-   26:57:52.4823
-  26:57:52.48229
- 26:57:52.482290
-  1 02:57
-   1 02:57
- 1 02:57:52
-  1 02:57:52
-   1 02:57:52
-    1 02:57:52
-  1 02:57:52.5
-     1 02:57:52
-   1 02:57:52.5
-  1 02:57:52.48
-      1 02:57:52
-    1 02:57:52.5
-   1 02:57:52.48
-  1 02:57:52.482
-       1 02:57:52
-     1 02:57:52.5
-    1 02:57:52.48
-   1 02:57:52.482
-  1 02:57:52.4823
-        1 02:57:52
-      1 02:57:52.5
-     1 02:57:52.48
-    1 02:57:52.482
-   1 02:57:52.4823
-  1 02:57:52.48229
-         1 02:57:52
-       1 02:57:52.5
-      1 02:57:52.48
-     1 02:57:52.482
-    1 02:57:52.4823
-   1 02:57:52.48229
-  1 02:57:52.482290
- 40:45
-  40:45
-   40:45
- 40:45:44
-  40:45:44
-   40:45:44
- 40:45:44.7
-    40:45:44
-  40:45:44.7
- 40:45:44.66
-     40:45:44
-   40:45:44.7
-  40:45:44.66
- 40:45:44.658
-      40:45:44
-    40:45:44.7
-   40:45:44.66
-  40:45:44.658
- 40:45:44.6583
-       40:45:44
-     40:45:44.7
-    40:45:44.66
-   40:45:44.658
-  40:45:44.6583
- 40:45:44.65827
-        40:45:44
-      40:45:44.7
-     40:45:44.66
-    40:45:44.658
-   40:45:44.6583
-  40:45:44.65827
- 40:45:44.658270
-  1 16:45
-   1 16:45
- 1 16:45:44
-  1 16:45:44
-   1 16:45:44
-    1 16:45:44
-  1 16:45:44.7
-     1 16:45:44
-   1 16:45:44.7
-  1 16:45:44.66
-      1 16:45:44
-    1 16:45:44.7
-   1 16:45:44.66
-  1 16:45:44.658
-       1 16:45:44
-     1 16:45:44.7
-    1 16:45:44.66
-   1 16:45:44.658
-  1 16:45:44.6583
-        1 16:45:44
-      1 16:45:44.7
-     1 16:45:44.66
-    1 16:45:44.658
-   1 16:45:44.6583
-  1 16:45:44.65827
-         1 16:45:44
-       1 16:45:44.7
-      1 16:45:44.66
-     1 16:45:44.658
-    1 16:45:44.6583
-   1 16:45:44.65827
-  1 16:45:44.658270
- 45:30
-  45:30
-   45:30
- 45:30:57
-  45:30:57
-   45:30:57
- 45:30:57.6
-    45:30:57
-  45:30:57.6
- 45:30:57.58
-     45:30:57
-   45:30:57.6
-  45:30:57.58
- 45:30:57.582
-      45:30:57
-    45:30:57.6
-   45:30:57.58
-  45:30:57.582
- 45:30:57.5822
-       45:30:57
-     45:30:57.6
-    45:30:57.58
-   45:30:57.582
-  45:30:57.5822
- 45:30:57.58219
-        45:30:57
-      45:30:57.6
-     45:30:57.58
-    45:30:57.582
-   45:30:57.5822
-  45:30:57.58219
- 45:30:57.582190
-  1 21:30
-   1 21:30
- 1 21:30:57
-  1 21:30:57
-   1 21:30:57
-    1 21:30:57
-  1 21:30:57.6
-     1 21:30:57
-   1 21:30:57.6
-  1 21:30:57.58
-      1 21:30:57
-    1 21:30:57.6
-   1 21:30:57.58
-  1 21:30:57.582
-       1 21:30:57
-     1 21:30:57.6
-    1 21:30:57.58
-   1 21:30:57.582
-  1 21:30:57.5822
-        1 21:30:57
-      1 21:30:57.6
-     1 21:30:57.58
-    1 21:30:57.582
-   1 21:30:57.5822
-  1 21:30:57.58219
-         1 21:30:57
-       1 21:30:57.6
-      1 21:30:57.58
-     1 21:30:57.582
-    1 21:30:57.5822
-   1 21:30:57.58219
-  1 21:30:57.582190
- 46:30
-  46:30
-   46:30
- 46:30:04
-  46:30:04
-   46:30:04
- 46:30:04.2
-    46:30:04
-  46:30:04.2
- 46:30:04.18
-     46:30:04
-   46:30:04.2
-  46:30:04.18
- 46:30:04.183
-      46:30:04
-    46:30:04.2
-   46:30:04.18
-  46:30:04.183
- 46:30:04.1835
-       46:30:04
-     46:30:04.2
-    46:30:04.18
-   46:30:04.183
-  46:30:04.1835
- 46:30:04.18347
-        46:30:04
-      46:30:04.2
-     46:30:04.18
-    46:30:04.183
-   46:30:04.1835
-  46:30:04.18347
- 46:30:04.183470
-  1 22:30
-   1 22:30
- 1 22:30:04
-  1 22:30:04
-   1 22:30:04
-    1 22:30:04
-  1 22:30:04.2
-     1 22:30:04
-   1 22:30:04.2
-  1 22:30:04.18
-      1 22:30:04
-    1 22:30:04.2
-   1 22:30:04.18
-  1 22:30:04.183
-       1 22:30:04
-     1 22:30:04.2
-    1 22:30:04.18
-   1 22:30:04.183
-  1 22:30:04.1835
-        1 22:30:04
-      1 22:30:04.2
-     1 22:30:04.18
-    1 22:30:04.183
-   1 22:30:04.1835
-  1 22:30:04.18347
-         1 22:30:04
-       1 22:30:04.2
-      1 22:30:04.18
-     1 22:30:04.183
-    1 22:30:04.1835
-   1 22:30:04.18347
-  1 22:30:04.183470
- 25:56
-  25:56
-   25:56
- 25:56:51
-  25:56:51
-   25:56:51
- 25:56:51.6
-    25:56:51
-  25:56:51.6
- 25:56:51.59
-     25:56:51
-   25:56:51.6
-  25:56:51.59
- 25:56:51.593
-      25:56:51
-    25:56:51.6
-   25:56:51.59
-  25:56:51.593
- 25:56:51.5932
-       25:56:51
-     25:56:51.6
-    25:56:51.59
-   25:56:51.593
-  25:56:51.5932
- 25:56:51.59319
-        25:56:51
-      25:56:51.6
-     25:56:51.59
-    25:56:51.593
-   25:56:51.5932
-  25:56:51.59319
- 25:56:51.593190
-  1 01:56
-   1 01:56
- 1 01:56:51
-  1 01:56:51
-   1 01:56:51
-    1 01:56:51
-  1 01:56:51.6
-     1 01:56:51
-   1 01:56:51.6
-  1 01:56:51.59
-      1 01:56:51
-    1 01:56:51.6
-   1 01:56:51.59
-  1 01:56:51.593
-       1 01:56:51
-     1 01:56:51.6
-    1 01:56:51.59
-   1 01:56:51.593
-  1 01:56:51.5932
-        1 01:56:51
-      1 01:56:51.6
-     1 01:56:51.59
-    1 01:56:51.593
-   1 01:56:51.5932
-  1 01:56:51.59319
-         1 01:56:51
-       1 01:56:51.6
-      1 01:56:51.59
-     1 01:56:51.593
-    1 01:56:51.5932
-   1 01:56:51.59319
-  1 01:56:51.593190
- 48:00
-  48:00
-   48:00
- 48:00:00
-  48:00:00
-   48:00:00
- 48:00:00.0
-    48:00:00
-  48:00:00.0
- 48:00:00.00
-     48:00:00
-   48:00:00.0
-  48:00:00.00
- 48:00:00.000
-      48:00:00
-    48:00:00.0
-   48:00:00.00
-  48:00:00.000
- 48:00:00.0000
-       48:00:00
-     48:00:00.0
-    48:00:00.00
-   48:00:00.000
-  48:00:00.0000
- 48:00:00.00000
-        48:00:00
-      48:00:00.0
-     48:00:00.00
-    48:00:00.000
-   48:00:00.0000
-  48:00:00.00000
- 48:00:00.000000
-  2 00:00
-   2 00:00
- 2 00:00:00
-  2 00:00:00
-   2 00:00:00
-    2 00:00:00
-  2 00:00:00.0
-     2 00:00:00
-   2 00:00:00.0
-  2 00:00:00.00
-      2 00:00:00
-    2 00:00:00.0
-   2 00:00:00.00
-  2 00:00:00.000
-       2 00:00:00
-     2 00:00:00.0
-    2 00:00:00.00
-   2 00:00:00.000
-  2 00:00:00.0000
-        2 00:00:00
-      2 00:00:00.0
-     2 00:00:00.00
-    2 00:00:00.000
-   2 00:00:00.0000
-  2 00:00:00.00000
-         2 00:00:00
-       2 00:00:00.0
-      2 00:00:00.00
-     2 00:00:00.000
-    2 00:00:00.0000
-   2 00:00:00.00000
-  2 00:00:00.000000
- 52:50
-  52:50
-   52:50
- 52:50:38
-  52:50:38
-   52:50:38
- 52:50:38.1
-    52:50:38
-  52:50:38.1
- 52:50:38.12
-     52:50:38
-   52:50:38.1
-  52:50:38.12
- 52:50:38.123
-      52:50:38
-    52:50:38.1
-   52:50:38.12
-  52:50:38.123
- 52:50:38.1230
-       52:50:38
-     52:50:38.1
-    52:50:38.12
-   52:50:38.123
-  52:50:38.1230
- 52:50:38.12301
-        52:50:38
-      52:50:38.1
-     52:50:38.12
-    52:50:38.123
-   52:50:38.1230
-  52:50:38.12301
- 52:50:38.123010
-  2 04:50
-   2 04:50
- 2 04:50:38
-  2 04:50:38
-   2 04:50:38
-    2 04:50:38
-  2 04:50:38.1
-     2 04:50:38
-   2 04:50:38.1
-  2 04:50:38.12
-      2 04:50:38
-    2 04:50:38.1
-   2 04:50:38.12
-  2 04:50:38.123
-       2 04:50:38
-     2 04:50:38.1
-    2 04:50:38.12
-   2 04:50:38.123
-  2 04:50:38.1230
-        2 04:50:38
-      2 04:50:38.1
-     2 04:50:38.12
-    2 04:50:38.123
-   2 04:50:38.1230
-  2 04:50:38.12301
-         2 04:50:38
-       2 04:50:38.1
-      2 04:50:38.12
-     2 04:50:38.123
-    2 04:50:38.1230
-   2 04:50:38.12301
-  2 04:50:38.123010
- 60:31
-  60:31
-   60:31
- 60:31:35
-  60:31:35
-   60:31:35
- 60:31:35.2
-    60:31:35
-  60:31:35.2
- 60:31:35.23
-     60:31:35
-   60:31:35.2
-  60:31:35.23
- 60:31:35.235
-      60:31:35
-    60:31:35.2
-   60:31:35.23
-  60:31:35.235
- 60:31:35.2345
-       60:31:35
-     60:31:35.2
-    60:31:35.23
-   60:31:35.235
-  60:31:35.2345
- 60:31:35.23453
-        60:31:35
-      60:31:35.2
-     60:31:35.23
-    60:31:35.235
-   60:31:35.2345
-  60:31:35.23453
- 60:31:35.234530
-  2 12:31
-   2 12:31
- 2 12:31:35
-  2 12:31:35
-   2 12:31:35
-    2 12:31:35
-  2 12:31:35.2
-     2 12:31:35
-   2 12:31:35.2
-  2 12:31:35.23
-      2 12:31:35
-    2 12:31:35.2
-   2 12:31:35.23
-  2 12:31:35.235
-       2 12:31:35
-     2 12:31:35.2
-    2 12:31:35.23
-   2 12:31:35.235
-  2 12:31:35.2345
-        2 12:31:35
-      2 12:31:35.2
-     2 12:31:35.23
-    2 12:31:35.235
-   2 12:31:35.2345
-  2 12:31:35.23453
-         2 12:31:35
-       2 12:31:35.2
-      2 12:31:35.23
-     2 12:31:35.235
-    2 12:31:35.2345
-   2 12:31:35.23453
-  2 12:31:35.234530
- 60:47
-  60:47
-   60:47
- 60:47:53
-  60:47:53
-   60:47:53
- 60:47:53.3
-    60:47:53
-  60:47:53.3
- 60:47:53.35
-     60:47:53
-   60:47:53.3
-  60:47:53.35
- 60:47:53.345
-      60:47:53
-    60:47:53.3
-   60:47:53.35
-  60:47:53.345
- 60:47:53.3451
-       60:47:53
-     60:47:53.3
-    60:47:53.35
-   60:47:53.345
-  60:47:53.3451
- 60:47:53.34505
-        60:47:53
-      60:47:53.3
-     60:47:53.35
-    60:47:53.345
-   60:47:53.3451
-  60:47:53.34505
- 60:47:53.345050
-  2 12:47
-   2 12:47
- 2 12:47:53
-  2 12:47:53
-   2 12:47:53
-    2 12:47:53
-  2 12:47:53.3
-     2 12:47:53
-   2 12:47:53.3
-  2 12:47:53.35
-      2 12:47:53
-    2 12:47:53.3
-   2 12:47:53.35
-  2 12:47:53.345
-       2 12:47:53
-     2 12:47:53.3
-    2 12:47:53.35
-   2 12:47:53.345
-  2 12:47:53.3451
-        2 12:47:53
-      2 12:47:53.3
-     2 12:47:53.35
-    2 12:47:53.345
-   2 12:47:53.3451
-  2 12:47:53.34505
-         2 12:47:53
-       2 12:47:53.3
-      2 12:47:53.35
-     2 12:47:53.345
-    2 12:47:53.3451
-   2 12:47:53.34505
-  2 12:47:53.345050
- 49:26
-  49:26
-   49:26
- 49:26:00
-  49:26:00
-   49:26:00
- 49:26:00.5
-    49:26:00
-  49:26:00.5
- 49:26:00.46
-     49:26:00
-   49:26:00.5
-  49:26:00.46
- 49:26:00.456
-      49:26:00
-    49:26:00.5
-   49:26:00.46
-  49:26:00.456
- 49:26:00.4562
-       49:26:00
-     49:26:00.5
-    49:26:00.46
-   49:26:00.456
-  49:26:00.4562
- 49:26:00.45615
-        49:26:00
-      49:26:00.5
-     49:26:00.46
-    49:26:00.456
-   49:26:00.4562
-  49:26:00.45615
- 49:26:00.456150
-  2 01:26
-   2 01:26
- 2 01:26:00
-  2 01:26:00
-   2 01:26:00
-    2 01:26:00
-  2 01:26:00.5
-     2 01:26:00
-   2 01:26:00.5
-  2 01:26:00.46
-      2 01:26:00
-    2 01:26:00.5
-   2 01:26:00.46
-  2 01:26:00.456
-       2 01:26:00
-     2 01:26:00.5
-    2 01:26:00.46
-   2 01:26:00.456
-  2 01:26:00.4562
-        2 01:26:00
-      2 01:26:00.5
-     2 01:26:00.46
-    2 01:26:00.456
-   2 01:26:00.4562
-  2 01:26:00.45615
-         2 01:26:00
-       2 01:26:00.5
-      2 01:26:00.46
-     2 01:26:00.456
-    2 01:26:00.4562
-   2 01:26:00.45615
-  2 01:26:00.456150
- 68:58
-  68:58
-   68:58
- 68:58:11
-  68:58:11
-   68:58:11
- 68:58:11.6
-    68:58:11
-  68:58:11.6
- 68:58:11.57
-     68:58:11
-   68:58:11.6
-  68:58:11.57
- 68:58:11.567
-      68:58:11
-    68:58:11.6
-   68:58:11.57
-  68:58:11.567
- 68:58:11.5668
-       68:58:11
-     68:58:11.6
-    68:58:11.57
-   68:58:11.567
-  68:58:11.5668
- 68:58:11.56677
-        68:58:11
-      68:58:11.6
-     68:58:11.57
-    68:58:11.567
-   68:58:11.5668
-  68:58:11.56677
- 68:58:11.566770
-  2 20:58
-   2 20:58
- 2 20:58:11
-  2 20:58:11
-   2 20:58:11
-    2 20:58:11
-  2 20:58:11.6
-     2 20:58:11
-   2 20:58:11.6
-  2 20:58:11.57
-      2 20:58:11
-    2 20:58:11.6
-   2 20:58:11.57
-  2 20:58:11.567
-       2 20:58:11
-     2 20:58:11.6
-    2 20:58:11.57
-   2 20:58:11.567
-  2 20:58:11.5668
-        2 20:58:11
-      2 20:58:11.6
-     2 20:58:11.57
-    2 20:58:11.567
-   2 20:58:11.5668
-  2 20:58:11.56677
-         2 20:58:11
-       2 20:58:11.6
-      2 20:58:11.57
-     2 20:58:11.567
-    2 20:58:11.5668
-   2 20:58:11.56677
-  2 20:58:11.566770
- 55:36
-  55:36
-   55:36
- 55:36:05
-  55:36:05
-   55:36:05
- 55:36:05.2
-    55:36:05
-  55:36:05.2
- 55:36:05.19
-     55:36:05
-   55:36:05.2
-  55:36:05.19
- 55:36:05.190
-      55:36:05
-    55:36:05.2
-   55:36:05.19
-  55:36:05.190
- 55:36:05.1896
-       55:36:05
-     55:36:05.2
-    55:36:05.19
-   55:36:05.190
-  55:36:05.1896
- 55:36:05.18964
-        55:36:05
-      55:36:05.2
-     55:36:05.19
-    55:36:05.190
-   55:36:05.1896
-  55:36:05.18964
- 55:36:05.189640
-  2 07:36
-   2 07:36
- 2 07:36:05
-  2 07:36:05
-   2 07:36:05
-    2 07:36:05
-  2 07:36:05.2
-     2 07:36:05
-   2 07:36:05.2
-  2 07:36:05.19
-      2 07:36:05
-    2 07:36:05.2
-   2 07:36:05.19
-  2 07:36:05.190
-       2 07:36:05
-     2 07:36:05.2
-    2 07:36:05.19
-   2 07:36:05.190
-  2 07:36:05.1896
-        2 07:36:05
-      2 07:36:05.2
-     2 07:36:05.19
-    2 07:36:05.190
-   2 07:36:05.1896
-  2 07:36:05.18964
-         2 07:36:05
-       2 07:36:05.2
-      2 07:36:05.19
-     2 07:36:05.190
-    2 07:36:05.1896
-   2 07:36:05.18964
-  2 07:36:05.189640
- 63:43
-  63:43
-   63:43
- 63:43:49
-  63:43:49
-   63:43:49
- 63:43:49.8
-    63:43:49
-  63:43:49.8
- 63:43:49.83
-     63:43:49
-   63:43:49.8
-  63:43:49.83
- 63:43:49.831
-      63:43:49
-    63:43:49.8
-   63:43:49.83
-  63:43:49.831
- 63:43:49.8313
-       63:43:49
-     63:43:49.8
-    63:43:49.83
-   63:43:49.831
-  63:43:49.8313
- 63:43:49.83132
-        63:43:49
-      63:43:49.8
-     63:43:49.83
-    63:43:49.831
-   63:43:49.8313
-  63:43:49.83132
- 63:43:49.831320
-  2 15:43
-   2 15:43
- 2 15:43:49
-  2 15:43:49
-   2 15:43:49
-    2 15:43:49
-  2 15:43:49.8
-     2 15:43:49
-   2 15:43:49.8
-  2 15:43:49.83
-      2 15:43:49
-    2 15:43:49.8
-   2 15:43:49.83
-  2 15:43:49.831
-       2 15:43:49
-     2 15:43:49.8
-    2 15:43:49.83
-   2 15:43:49.831
-  2 15:43:49.8313
-        2 15:43:49
-      2 15:43:49.8
-     2 15:43:49.83
-    2 15:43:49.831
-   2 15:43:49.8313
-  2 15:43:49.83132
-         2 15:43:49
-       2 15:43:49.8
-      2 15:43:49.83
-     2 15:43:49.831
-    2 15:43:49.8313
-   2 15:43:49.83132
-  2 15:43:49.831320
- 52:25
-  52:25
-   52:25
- 52:25:09
-  52:25:09
-   52:25:09
- 52:25:09.0
-    52:25:09
-  52:25:09.0
- 52:25:09.01
-     52:25:09
-   52:25:09.0
-  52:25:09.01
- 52:25:09.013
-      52:25:09
-    52:25:09.0
-   52:25:09.01
-  52:25:09.013
- 52:25:09.0129
-       52:25:09
-     52:25:09.0
-    52:25:09.01
-   52:25:09.013
-  52:25:09.0129
- 52:25:09.01293
-        52:25:09
-      52:25:09.0
-     52:25:09.01
-    52:25:09.013
-   52:25:09.0129
-  52:25:09.01293
- 52:25:09.012930
-  2 04:25
-   2 04:25
- 2 04:25:09
-  2 04:25:09
-   2 04:25:09
-    2 04:25:09
-  2 04:25:09.0
-     2 04:25:09
-   2 04:25:09.0
-  2 04:25:09.01
-      2 04:25:09
-    2 04:25:09.0
-   2 04:25:09.01
-  2 04:25:09.013
-       2 04:25:09
-     2 04:25:09.0
-    2 04:25:09.01
-   2 04:25:09.013
-  2 04:25:09.0129
-        2 04:25:09
-      2 04:25:09.0
-     2 04:25:09.01
-    2 04:25:09.013
-   2 04:25:09.0129
-  2 04:25:09.01293
-         2 04:25:09
-       2 04:25:09.0
-      2 04:25:09.01
-     2 04:25:09.013
-    2 04:25:09.0129
-   2 04:25:09.01293
-  2 04:25:09.012930
- 54:49
-  54:49
-   54:49
- 54:49:27
-  54:49:27
-   54:49:27
- 54:49:27.5
-    54:49:27
-  54:49:27.5
- 54:49:27.52
-     54:49:27
-   54:49:27.5
-  54:49:27.52
- 54:49:27.524
-      54:49:27
-    54:49:27.5
-   54:49:27.52
-  54:49:27.524
- 54:49:27.5237
-       54:49:27
-     54:49:27.5
-    54:49:27.52
-   54:49:27.524
-  54:49:27.5237
- 54:49:27.52375
-        54:49:27
-      54:49:27.5
-     54:49:27.52
-    54:49:27.524
-   54:49:27.5237
-  54:49:27.52375
- 54:49:27.523750
-  2 06:49
-   2 06:49
- 2 06:49:27
-  2 06:49:27
-   2 06:49:27
-    2 06:49:27
-  2 06:49:27.5
-     2 06:49:27
-   2 06:49:27.5
-  2 06:49:27.52
-      2 06:49:27
-    2 06:49:27.5
-   2 06:49:27.52
-  2 06:49:27.524
-       2 06:49:27
-     2 06:49:27.5
-    2 06:49:27.52
-   2 06:49:27.524
-  2 06:49:27.5237
-        2 06:49:27
-      2 06:49:27.5
-     2 06:49:27.52
-    2 06:49:27.524
-   2 06:49:27.5237
-  2 06:49:27.52375
-         2 06:49:27
-       2 06:49:27.5
-      2 06:49:27.52
-     2 06:49:27.524
-    2 06:49:27.5237
-   2 06:49:27.52375
-  2 06:49:27.523750
- 50:57
-  50:57
-   50:57
- 50:57:52
-  50:57:52
-   50:57:52
- 50:57:52.0
-    50:57:52
-  50:57:52.0
- 50:57:52.02
-     50:57:52
-   50:57:52.0
-  50:57:52.02
- 50:57:52.016
-      50:57:52
-    50:57:52.0
-   50:57:52.02
-  50:57:52.016
- 50:57:52.0156
-       50:57:52
-     50:57:52.0
-    50:57:52.02
-   50:57:52.016
-  50:57:52.0156
- 50:57:52.01565
-        50:57:52
-      50:57:52.0
-     50:57:52.02
-    50:57:52.016
-   50:57:52.0156
-  50:57:52.01565
- 50:57:52.015650
-  2 02:57
-   2 02:57
- 2 02:57:52
-  2 02:57:52
-   2 02:57:52
-    2 02:57:52
-  2 02:57:52.0
-     2 02:57:52
-   2 02:57:52.0
-  2 02:57:52.02
-      2 02:57:52
-    2 02:57:52.0
-   2 02:57:52.02
-  2 02:57:52.016
-       2 02:57:52
-     2 02:57:52.0
-    2 02:57:52.02
-   2 02:57:52.016
-  2 02:57:52.0156
-        2 02:57:52
-      2 02:57:52.0
-     2 02:57:52.02
-    2 02:57:52.016
-   2 02:57:52.0156
-  2 02:57:52.01565
-         2 02:57:52
-       2 02:57:52.0
-      2 02:57:52.02
-     2 02:57:52.016
-    2 02:57:52.0156
-   2 02:57:52.01565
-  2 02:57:52.015650
- 64:45
-  64:45
-   64:45
- 64:45:44
-  64:45:44
-   64:45:44
- 64:45:44.9
-    64:45:44
-  64:45:44.9
- 64:45:44.87
-     64:45:44
-   64:45:44.9
-  64:45:44.87
- 64:45:44.865
-      64:45:44
-    64:45:44.9
-   64:45:44.87
-  64:45:44.865
- 64:45:44.8653
-       64:45:44
-     64:45:44.9
-    64:45:44.87
-   64:45:44.865
-  64:45:44.8653
- 64:45:44.86529
-        64:45:44
-      64:45:44.9
-     64:45:44.87
-    64:45:44.865
-   64:45:44.8653
-  64:45:44.86529
- 64:45:44.865290
-  2 16:45
-   2 16:45
- 2 16:45:44
-  2 16:45:44
-   2 16:45:44
-    2 16:45:44
-  2 16:45:44.9
-     2 16:45:44
-   2 16:45:44.9
-  2 16:45:44.87
-      2 16:45:44
-    2 16:45:44.9
-   2 16:45:44.87
-  2 16:45:44.865
-       2 16:45:44
-     2 16:45:44.9
-    2 16:45:44.87
-   2 16:45:44.865
-  2 16:45:44.8653
-        2 16:45:44
-      2 16:45:44.9
-     2 16:45:44.87
-    2 16:45:44.865
-   2 16:45:44.8653
-  2 16:45:44.86529
-         2 16:45:44
-       2 16:45:44.9
-      2 16:45:44.87
-     2 16:45:44.865
-    2 16:45:44.8653
-   2 16:45:44.86529
-  2 16:45:44.865290
- 69:30
-  69:30
-   69:30
- 69:30:57
-  69:30:57
-   69:30:57
- 69:30:57.8
-    69:30:57
-  69:30:57.8
- 69:30:57.82
-     69:30:57
-   69:30:57.8
-  69:30:57.82
- 69:30:57.820
-      69:30:57
-    69:30:57.8
-   69:30:57.82
-  69:30:57.820
- 69:30:57.8205
-       69:30:57
-     69:30:57.8
-    69:30:57.82
-   69:30:57.820
-  69:30:57.8205
- 69:30:57.82047
-        69:30:57
-      69:30:57.8
-     69:30:57.82
-    69:30:57.820
-   69:30:57.8205
-  69:30:57.82047
- 69:30:57.820470
-  2 21:30
-   2 21:30
- 2 21:30:57
-  2 21:30:57
-   2 21:30:57
-    2 21:30:57
-  2 21:30:57.8
-     2 21:30:57
-   2 21:30:57.8
-  2 21:30:57.82
-      2 21:30:57
-    2 21:30:57.8
-   2 21:30:57.82
-  2 21:30:57.820
-       2 21:30:57
-     2 21:30:57.8
-    2 21:30:57.82
-   2 21:30:57.820
-  2 21:30:57.8205
-        2 21:30:57
-      2 21:30:57.8
-     2 21:30:57.82
-    2 21:30:57.820
-   2 21:30:57.8205
-  2 21:30:57.82047
-         2 21:30:57
-       2 21:30:57.8
-      2 21:30:57.82
-     2 21:30:57.820
-    2 21:30:57.8205
-   2 21:30:57.82047
-  2 21:30:57.820470
- 52:25
-  52:25
-   52:25
- 52:25:09
-  52:25:09
-   52:25:09
- 52:25:09.2
-    52:25:09
-  52:25:09.2
- 52:25:09.15
-     52:25:09
-   52:25:09.2
-  52:25:09.15
- 52:25:09.154
-      52:25:09
-    52:25:09.2
-   52:25:09.15
-  52:25:09.154
- 52:25:09.1540
-       52:25:09
-     52:25:09.2
-    52:25:09.15
-   52:25:09.154
-  52:25:09.1540
- 52:25:09.15395
-        52:25:09
-      52:25:09.2
-     52:25:09.15
-    52:25:09.154
-   52:25:09.1540
-  52:25:09.15395
- 52:25:09.153950
-  2 04:25
-   2 04:25
- 2 04:25:09
-  2 04:25:09
-   2 04:25:09
-    2 04:25:09
-  2 04:25:09.2
-     2 04:25:09
-   2 04:25:09.2
-  2 04:25:09.15
-      2 04:25:09
-    2 04:25:09.2
-   2 04:25:09.15
-  2 04:25:09.154
-       2 04:25:09
-     2 04:25:09.2
-    2 04:25:09.15
-   2 04:25:09.154
-  2 04:25:09.1540
-        2 04:25:09
-      2 04:25:09.2
-     2 04:25:09.15
-    2 04:25:09.154
-   2 04:25:09.1540
-  2 04:25:09.15395
-         2 04:25:09
-       2 04:25:09.2
-      2 04:25:09.15
-     2 04:25:09.154
-    2 04:25:09.1540
-   2 04:25:09.15395
-  2 04:25:09.153950
- 54:49
-  54:49
-   54:49
- 54:49:27
-  54:49:27
-   54:49:27
- 54:49:27.1
-    54:49:27
-  54:49:27.1
- 54:49:27.11
-     54:49:27
-   54:49:27.1
-  54:49:27.11
- 54:49:27.105
-      54:49:27
-    54:49:27.1
-   54:49:27.11
-  54:49:27.105
- 54:49:27.1053
-       54:49:27
-     54:49:27.1
-    54:49:27.11
-   54:49:27.105
-  54:49:27.1053
- 54:49:27.10533
-        54:49:27
-      54:49:27.1
-     54:49:27.11
-    54:49:27.105
-   54:49:27.1053
-  54:49:27.10533
- 54:49:27.105330
-  2 06:49
-   2 06:49
- 2 06:49:27
-  2 06:49:27
-   2 06:49:27
-    2 06:49:27
-  2 06:49:27.1
-     2 06:49:27
-   2 06:49:27.1
-  2 06:49:27.11
-      2 06:49:27
-    2 06:49:27.1
-   2 06:49:27.11
-  2 06:49:27.105
-       2 06:49:27
-     2 06:49:27.1
-    2 06:49:27.11
-   2 06:49:27.105
-  2 06:49:27.1053
-        2 06:49:27
-      2 06:49:27.1
-     2 06:49:27.11
-    2 06:49:27.105
-   2 06:49:27.1053
-  2 06:49:27.10533
-         2 06:49:27
-       2 06:49:27.1
-      2 06:49:27.11
-     2 06:49:27.105
-    2 06:49:27.1053
-   2 06:49:27.10533
-  2 06:49:27.105330
- 50:57
-  50:57
-   50:57
- 50:57:52
-  50:57:52
-   50:57:52
- 50:57:52.5
-    50:57:52
-  50:57:52.5
- 50:57:52.48
-     50:57:52
-   50:57:52.5
-  50:57:52.48
- 50:57:52.482
-      50:57:52
-    50:57:52.5
-   50:57:52.48
-  50:57:52.482
- 50:57:52.4823
-       50:57:52
-     50:57:52.5
-    50:57:52.48
-   50:57:52.482
-  50:57:52.4823
- 50:57:52.48229
-        50:57:52
-      50:57:52.5
-     50:57:52.48
-    50:57:52.482
-   50:57:52.4823
-  50:57:52.48229
- 50:57:52.482290
-  2 02:57
-   2 02:57
- 2 02:57:52
-  2 02:57:52
-   2 02:57:52
-    2 02:57:52
-  2 02:57:52.5
-     2 02:57:52
-   2 02:57:52.5
-  2 02:57:52.48
-      2 02:57:52
-    2 02:57:52.5
-   2 02:57:52.48
-  2 02:57:52.482
-       2 02:57:52
-     2 02:57:52.5
-    2 02:57:52.48
-   2 02:57:52.482
-  2 02:57:52.4823
-        2 02:57:52
-      2 02:57:52.5
-     2 02:57:52.48
-    2 02:57:52.482
-   2 02:57:52.4823
-  2 02:57:52.48229
-         2 02:57:52
-       2 02:57:52.5
-      2 02:57:52.48
-     2 02:57:52.482
-    2 02:57:52.4823
-   2 02:57:52.48229
-  2 02:57:52.482290
- 64:45
-  64:45
-   64:45
- 64:45:44
-  64:45:44
-   64:45:44
- 64:45:44.7
-    64:45:44
-  64:45:44.7
- 64:45:44.66
-     64:45:44
-   64:45:44.7
-  64:45:44.66
- 64:45:44.658
-      64:45:44
-    64:45:44.7
-   64:45:44.66
-  64:45:44.658
- 64:45:44.6583
-       64:45:44
-     64:45:44.7
-    64:45:44.66
-   64:45:44.658
-  64:45:44.6583
- 64:45:44.65827
-        64:45:44
-      64:45:44.7
-     64:45:44.66
-    64:45:44.658
-   64:45:44.6583
-  64:45:44.65827
- 64:45:44.658270
-  2 16:45
-   2 16:45
- 2 16:45:44
-  2 16:45:44
-   2 16:45:44
-    2 16:45:44
-  2 16:45:44.7
-     2 16:45:44
-   2 16:45:44.7
-  2 16:45:44.66
-      2 16:45:44
-    2 16:45:44.7
-   2 16:45:44.66
-  2 16:45:44.658
-       2 16:45:44
-     2 16:45:44.7
-    2 16:45:44.66
-   2 16:45:44.658
-  2 16:45:44.6583
-        2 16:45:44
-      2 16:45:44.7
-     2 16:45:44.66
-    2 16:45:44.658
-   2 16:45:44.6583
-  2 16:45:44.65827
-         2 16:45:44
-       2 16:45:44.7
-      2 16:45:44.66
-     2 16:45:44.658
-    2 16:45:44.6583
-   2 16:45:44.65827
-  2 16:45:44.658270
- 69:30
-  69:30
-   69:30
- 69:30:57
-  69:30:57
-   69:30:57
- 69:30:57.6
-    69:30:57
-  69:30:57.6
- 69:30:57.58
-     69:30:57
-   69:30:57.6
-  69:30:57.58
- 69:30:57.582
-      69:30:57
-    69:30:57.6
-   69:30:57.58
-  69:30:57.582
- 69:30:57.5822
-       69:30:57
-     69:30:57.6
-    69:30:57.58
-   69:30:57.582
-  69:30:57.5822
- 69:30:57.58219
-        69:30:57
-      69:30:57.6
-     69:30:57.58
-    69:30:57.582
-   69:30:57.5822
-  69:30:57.58219
- 69:30:57.582190
-  2 21:30
-   2 21:30
- 2 21:30:57
-  2 21:30:57
-   2 21:30:57
-    2 21:30:57
-  2 21:30:57.6
-     2 21:30:57
-   2 21:30:57.6
-  2 21:30:57.58
-      2 21:30:57
-    2 21:30:57.6
-   2 21:30:57.58
-  2 21:30:57.582
-       2 21:30:57
-     2 21:30:57.6
-    2 21:30:57.58
-   2 21:30:57.582
-  2 21:30:57.5822
-        2 21:30:57
-      2 21:30:57.6
-     2 21:30:57.58
-    2 21:30:57.582
-   2 21:30:57.5822
-  2 21:30:57.58219
-         2 21:30:57
-       2 21:30:57.6
-      2 21:30:57.58
-     2 21:30:57.582
-    2 21:30:57.5822
-   2 21:30:57.58219
-  2 21:30:57.582190
- 70:30
-  70:30
-   70:30
- 70:30:04
-  70:30:04
-   70:30:04
- 70:30:04.2
-    70:30:04
-  70:30:04.2
- 70:30:04.18
-     70:30:04
-   70:30:04.2
-  70:30:04.18
- 70:30:04.183
-      70:30:04
-    70:30:04.2
-   70:30:04.18
-  70:30:04.183
- 70:30:04.1835
-       70:30:04
-     70:30:04.2
-    70:30:04.18
-   70:30:04.183
-  70:30:04.1835
- 70:30:04.18347
-        70:30:04
-      70:30:04.2
-     70:30:04.18
-    70:30:04.183
-   70:30:04.1835
-  70:30:04.18347
- 70:30:04.183470
-  2 22:30
-   2 22:30
- 2 22:30:04
-  2 22:30:04
-   2 22:30:04
-    2 22:30:04
-  2 22:30:04.2
-     2 22:30:04
-   2 22:30:04.2
-  2 22:30:04.18
-      2 22:30:04
-    2 22:30:04.2
-   2 22:30:04.18
-  2 22:30:04.183
-       2 22:30:04
-     2 22:30:04.2
-    2 22:30:04.18
-   2 22:30:04.183
-  2 22:30:04.1835
-        2 22:30:04
-      2 22:30:04.2
-     2 22:30:04.18
-    2 22:30:04.183
-   2 22:30:04.1835
-  2 22:30:04.18347
-         2 22:30:04
-       2 22:30:04.2
-      2 22:30:04.18
-     2 22:30:04.183
-    2 22:30:04.1835
-   2 22:30:04.18347
-  2 22:30:04.183470
- 49:56
-  49:56
-   49:56
- 49:56:51
-  49:56:51
-   49:56:51
- 49:56:51.6
-    49:56:51
-  49:56:51.6
- 49:56:51.59
-     49:56:51
-   49:56:51.6
-  49:56:51.59
- 49:56:51.593
-      49:56:51
-    49:56:51.6
-   49:56:51.59
-  49:56:51.593
- 49:56:51.5932
-       49:56:51
-     49:56:51.6
-    49:56:51.59
-   49:56:51.593
-  49:56:51.5932
- 49:56:51.59319
-        49:56:51
-      49:56:51.6
-     49:56:51.59
-    49:56:51.593
-   49:56:51.5932
-  49:56:51.59319
- 49:56:51.593190
-  2 01:56
-   2 01:56
- 2 01:56:51
-  2 01:56:51
-   2 01:56:51
-    2 01:56:51
-  2 01:56:51.6
-     2 01:56:51
-   2 01:56:51.6
-  2 01:56:51.59
-      2 01:56:51
-    2 01:56:51.6
-   2 01:56:51.59
-  2 01:56:51.593
-       2 01:56:51
-     2 01:56:51.6
-    2 01:56:51.59
-   2 01:56:51.593
-  2 01:56:51.5932
-        2 01:56:51
-      2 01:56:51.6
-     2 01:56:51.59
-    2 01:56:51.593
-   2 01:56:51.5932
-  2 01:56:51.59319
-         2 01:56:51
-       2 01:56:51.6
-      2 01:56:51.59
-     2 01:56:51.593
-    2 01:56:51.5932
-   2 01:56:51.59319
-  2 01:56:51.593190
- *****
- ******
- 1296:00
-  1296:00
-   1296:00
- 1296:00:00
- 1296:00:00
-  1296:00:00
-  1296:00:00
-  1296:00:00
-   1296:00:00
- 1296:00:00.0
- 1296:00:00.0
- 1296:00:00.0
-    1296:00:00
-  1296:00:00.0
- 1296:00:00.00
- 1296:00:00.00
- 1296:00:00.00
-     1296:00:00
-   1296:00:00.0
-  1296:00:00.00
- 1296:00:00.000
- 1296:00:00.000
- 1296:00:00.000
-      1296:00:00
-    1296:00:00.0
-   1296:00:00.00
-  1296:00:00.000
- 1296:00:00.0000
- 1296:00:00.0000
- 1296:00:00.0000
- 54 00:00
-  54 00:00
-   54 00:00
- 54 00:00:00
-  54 00:00:00
-   54 00:00:00
- 54 00:00:00.0
-    54 00:00:00
-  54 00:00:00.0
- 54 00:00:00.00
-     54 00:00:00
-   54 00:00:00.0
-  54 00:00:00.00
- 54 00:00:00.000
-      54 00:00:00
-    54 00:00:00.0
-   54 00:00:00.00
-  54 00:00:00.000
- 54 00:00:00.0000
-       54 00:00:00
-     54 00:00:00.0
-    54 00:00:00.00
-   54 00:00:00.000
-  54 00:00:00.0000
- 54 00:00:00.00000
-        54 00:00:00
-      54 00:00:00.0
-     54 00:00:00.00
-    54 00:00:00.000
-   54 00:00:00.0000
-  54 00:00:00.00000
- 54 00:00:00.000000
- *****
- ******
- 1300:50
-  1300:50
-   1300:50
- 1300:50:38
- 1300:50:38
-  1300:50:38
-  1300:50:38
-  1300:50:38
-   1300:50:38
- 1300:50:38.1
- 1300:50:38.1
- 1300:50:38.1
-    1300:50:38
-  1300:50:38.1
- 1300:50:38.12
- 1300:50:38.12
- 1300:50:38.12
-     1300:50:38
-   1300:50:38.1
-  1300:50:38.12
- 1300:50:38.123
- 1300:50:38.123
- 1300:50:38.123
-      1300:50:38
-    1300:50:38.1
-   1300:50:38.12
-  1300:50:38.123
- 1300:50:38.1230
- 1300:50:38.1230
- 1300:50:38.1230
- 54 04:50
-  54 04:50
-   54 04:50
- 54 04:50:38
-  54 04:50:38
-   54 04:50:38
- 54 04:50:38.1
-    54 04:50:38
-  54 04:50:38.1
- 54 04:50:38.12
-     54 04:50:38
-   54 04:50:38.1
-  54 04:50:38.12
- 54 04:50:38.123
-      54 04:50:38
-    54 04:50:38.1
-   54 04:50:38.12
-  54 04:50:38.123
- 54 04:50:38.1230
-       54 04:50:38
-     54 04:50:38.1
-    54 04:50:38.12
-   54 04:50:38.123
-  54 04:50:38.1230
- 54 04:50:38.12301
-        54 04:50:38
-      54 04:50:38.1
-     54 04:50:38.12
-    54 04:50:38.123
-   54 04:50:38.1230
-  54 04:50:38.12301
- 54 04:50:38.123010
- *****
- ******
- 1308:31
-  1308:31
-   1308:31
- 1308:31:35
- 1308:31:35
-  1308:31:35
-  1308:31:35
-  1308:31:35
-   1308:31:35
- 1308:31:35.2
- 1308:31:35.2
- 1308:31:35.2
-    1308:31:35
-  1308:31:35.2
- 1308:31:35.23
- 1308:31:35.23
- 1308:31:35.23
-     1308:31:35
-   1308:31:35.2
-  1308:31:35.23
- 1308:31:35.235
- 1308:31:35.235
- 1308:31:35.235
-      1308:31:35
-    1308:31:35.2
-   1308:31:35.23
-  1308:31:35.235
- 1308:31:35.2345
- 1308:31:35.2345
- 1308:31:35.2345
- 54 12:31
-  54 12:31
-   54 12:31
- 54 12:31:35
-  54 12:31:35
-   54 12:31:35
- 54 12:31:35.2
-    54 12:31:35
-  54 12:31:35.2
- 54 12:31:35.23
-     54 12:31:35
-   54 12:31:35.2
-  54 12:31:35.23
- 54 12:31:35.235
-      54 12:31:35
-    54 12:31:35.2
-   54 12:31:35.23
-  54 12:31:35.235
- 54 12:31:35.2345
-       54 12:31:35
-     54 12:31:35.2
-    54 12:31:35.23
-   54 12:31:35.235
-  54 12:31:35.2345
- 54 12:31:35.23453
-        54 12:31:35
-      54 12:31:35.2
-     54 12:31:35.23
-    54 12:31:35.235
-   54 12:31:35.2345
-  54 12:31:35.23453
- 54 12:31:35.234530
- *****
- ******
- 1308:47
-  1308:47
-   1308:47
- 1308:47:53
- 1308:47:53
-  1308:47:53
-  1308:47:53
-  1308:47:53
-   1308:47:53
- 1308:47:53.3
- 1308:47:53.3
- 1308:47:53.3
-    1308:47:53
-  1308:47:53.3
- 1308:47:53.35
- 1308:47:53.35
- 1308:47:53.35
-     1308:47:53
-   1308:47:53.3
-  1308:47:53.35
- 1308:47:53.345
- 1308:47:53.345
- 1308:47:53.345
-      1308:47:53
-    1308:47:53.3
-   1308:47:53.35
-  1308:47:53.345
- 1308:47:53.3450
- 1308:47:53.3450
- 1308:47:53.3450
- 54 12:47
-  54 12:47
-   54 12:47
- 54 12:47:53
-  54 12:47:53
-   54 12:47:53
- 54 12:47:53.3
-    54 12:47:53
-  54 12:47:53.3
- 54 12:47:53.35
-     54 12:47:53
-   54 12:47:53.3
-  54 12:47:53.35
- 54 12:47:53.345
-      54 12:47:53
-    54 12:47:53.3
-   54 12:47:53.35
-  54 12:47:53.345
- 54 12:47:53.3450
-       54 12:47:53
-     54 12:47:53.3
-    54 12:47:53.35
-   54 12:47:53.345
-  54 12:47:53.3450
- 54 12:47:53.34505
-        54 12:47:53
-      54 12:47:53.3
-     54 12:47:53.35
-    54 12:47:53.345
-   54 12:47:53.3450
-  54 12:47:53.34505
- 54 12:47:53.345050
- *****
- ******
- 1297:26
-  1297:26
-   1297:26
- 1297:26:00
- 1297:26:00
-  1297:26:00
-  1297:26:00
-  1297:26:00
-   1297:26:00
- 1297:26:00.5
- 1297:26:00.5
- 1297:26:00.5
-    1297:26:00
-  1297:26:00.5
- 1297:26:00.46
- 1297:26:00.46
- 1297:26:00.46
-     1297:26:00
-   1297:26:00.5
-  1297:26:00.46
- 1297:26:00.456
- 1297:26:00.456
- 1297:26:00.456
-      1297:26:00
-    1297:26:00.5
-   1297:26:00.46
-  1297:26:00.456
- 1297:26:00.4561
- 1297:26:00.4561
- 1297:26:00.4561
- 54 01:26
-  54 01:26
-   54 01:26
- 54 01:26:00
-  54 01:26:00
-   54 01:26:00
- 54 01:26:00.5
-    54 01:26:00
-  54 01:26:00.5
- 54 01:26:00.46
-     54 01:26:00
-   54 01:26:00.5
-  54 01:26:00.46
- 54 01:26:00.456
-      54 01:26:00
-    54 01:26:00.5
-   54 01:26:00.46
-  54 01:26:00.456
- 54 01:26:00.4561
-       54 01:26:00
-     54 01:26:00.5
-    54 01:26:00.46
-   54 01:26:00.456
-  54 01:26:00.4561
- 54 01:26:00.45615
-        54 01:26:00
-      54 01:26:00.5
-     54 01:26:00.46
-    54 01:26:00.456
-   54 01:26:00.4561
-  54 01:26:00.45615
- 54 01:26:00.456150
- *****
- ******
- 1316:58
-  1316:58
-   1316:58
- 1316:58:11
- 1316:58:11
-  1316:58:11
-  1316:58:11
-  1316:58:11
-   1316:58:11
- 1316:58:11.6
- 1316:58:11.6
- 1316:58:11.6
-    1316:58:11
-  1316:58:11.6
- 1316:58:11.57
- 1316:58:11.57
- 1316:58:11.57
-     1316:58:11
-   1316:58:11.6
-  1316:58:11.57
- 1316:58:11.567
- 1316:58:11.567
- 1316:58:11.567
-      1316:58:11
-    1316:58:11.6
-   1316:58:11.57
-  1316:58:11.567
- 1316:58:11.5668
- 1316:58:11.5668
- 1316:58:11.5668
- 54 20:58
-  54 20:58
-   54 20:58
- 54 20:58:11
-  54 20:58:11
-   54 20:58:11
- 54 20:58:11.6
-    54 20:58:11
-  54 20:58:11.6
- 54 20:58:11.57
-     54 20:58:11
-   54 20:58:11.6
-  54 20:58:11.57
- 54 20:58:11.567
-      54 20:58:11
-    54 20:58:11.6
-   54 20:58:11.57
-  54 20:58:11.567
- 54 20:58:11.5668
-       54 20:58:11
-     54 20:58:11.6
-    54 20:58:11.57
-   54 20:58:11.567
-  54 20:58:11.5668
- 54 20:58:11.56677
-        54 20:58:11
-      54 20:58:11.6
-     54 20:58:11.57
-    54 20:58:11.567
-   54 20:58:11.5668
-  54 20:58:11.56677
- 54 20:58:11.566770
- *****
- ******
- 1303:36
-  1303:36
-   1303:36
- 1303:36:05
- 1303:36:05
-  1303:36:05
-  1303:36:05
-  1303:36:05
-   1303:36:05
- 1303:36:05.2
- 1303:36:05.2
- 1303:36:05.2
-    1303:36:05
-  1303:36:05.2
- 1303:36:05.19
- 1303:36:05.19
- 1303:36:05.19
-     1303:36:05
-   1303:36:05.2
-  1303:36:05.19
- 1303:36:05.190
- 1303:36:05.190
- 1303:36:05.190
-      1303:36:05
-    1303:36:05.2
-   1303:36:05.19
-  1303:36:05.190
- 1303:36:05.1896
- 1303:36:05.1896
- 1303:36:05.1896
- 54 07:36
-  54 07:36
-   54 07:36
- 54 07:36:05
-  54 07:36:05
-   54 07:36:05
- 54 07:36:05.2
-    54 07:36:05
-  54 07:36:05.2
- 54 07:36:05.19
-     54 07:36:05
-   54 07:36:05.2
-  54 07:36:05.19
- 54 07:36:05.190
-      54 07:36:05
-    54 07:36:05.2
-   54 07:36:05.19
-  54 07:36:05.190
- 54 07:36:05.1896
-       54 07:36:05
-     54 07:36:05.2
-    54 07:36:05.19
-   54 07:36:05.190
-  54 07:36:05.1896
- 54 07:36:05.18964
-        54 07:36:05
-      54 07:36:05.2
-     54 07:36:05.19
-    54 07:36:05.190
-   54 07:36:05.1896
-  54 07:36:05.18964
- 54 07:36:05.189640
- *****
- ******
- 1311:43
-  1311:43
-   1311:43
- 1311:43:49
- 1311:43:49
-  1311:43:49
-  1311:43:49
-  1311:43:49
-   1311:43:49
- 1311:43:49.8
- 1311:43:49.8
- 1311:43:49.8
-    1311:43:49
-  1311:43:49.8
- 1311:43:49.83
- 1311:43:49.83
- 1311:43:49.83
-     1311:43:49
-   1311:43:49.8
-  1311:43:49.83
- 1311:43:49.831
- 1311:43:49.831
- 1311:43:49.831
-      1311:43:49
-    1311:43:49.8
-   1311:43:49.83
-  1311:43:49.831
- 1311:43:49.8313
- 1311:43:49.8313
- 1311:43:49.8313
- 54 15:43
-  54 15:43
-   54 15:43
- 54 15:43:49
-  54 15:43:49
-   54 15:43:49
- 54 15:43:49.8
-    54 15:43:49
-  54 15:43:49.8
- 54 15:43:49.83
-     54 15:43:49
-   54 15:43:49.8
-  54 15:43:49.83
- 54 15:43:49.831
-      54 15:43:49
-    54 15:43:49.8
-   54 15:43:49.83
-  54 15:43:49.831
- 54 15:43:49.8313
-       54 15:43:49
-     54 15:43:49.8
-    54 15:43:49.83
-   54 15:43:49.831
-  54 15:43:49.8313
- 54 15:43:49.83132
-        54 15:43:49
-      54 15:43:49.8
-     54 15:43:49.83
-    54 15:43:49.831
-   54 15:43:49.8313
-  54 15:43:49.83132
- 54 15:43:49.831320
- *****
- ******
- 1300:25
-  1300:25
-   1300:25
- 1300:25:09
- 1300:25:09
-  1300:25:09
-  1300:25:09
-  1300:25:09
-   1300:25:09
- 1300:25:09.0
- 1300:25:09.0
- 1300:25:09.0
-    1300:25:09
-  1300:25:09.0
- 1300:25:09.01
- 1300:25:09.01
- 1300:25:09.01
-     1300:25:09
-   1300:25:09.0
-  1300:25:09.01
- 1300:25:09.013
- 1300:25:09.013
- 1300:25:09.013
-      1300:25:09
-    1300:25:09.0
-   1300:25:09.01
-  1300:25:09.013
- 1300:25:09.0129
- 1300:25:09.0129
- 1300:25:09.0129
- 54 04:25
-  54 04:25
-   54 04:25
- 54 04:25:09
-  54 04:25:09
-   54 04:25:09
- 54 04:25:09.0
-    54 04:25:09
-  54 04:25:09.0
- 54 04:25:09.01
-     54 04:25:09
-   54 04:25:09.0
-  54 04:25:09.01
- 54 04:25:09.013
-      54 04:25:09
-    54 04:25:09.0
-   54 04:25:09.01
-  54 04:25:09.013
- 54 04:25:09.0129
-       54 04:25:09
-     54 04:25:09.0
-    54 04:25:09.01
-   54 04:25:09.013
-  54 04:25:09.0129
- 54 04:25:09.01293
-        54 04:25:09
-      54 04:25:09.0
-     54 04:25:09.01
-    54 04:25:09.013
-   54 04:25:09.0129
-  54 04:25:09.01293
- 54 04:25:09.012930
- *****
- ******
- 1302:49
-  1302:49
-   1302:49
- 1302:49:27
- 1302:49:27
-  1302:49:27
-  1302:49:27
-  1302:49:27
-   1302:49:27
- 1302:49:27.5
- 1302:49:27.5
- 1302:49:27.5
-    1302:49:27
-  1302:49:27.5
- 1302:49:27.52
- 1302:49:27.52
- 1302:49:27.52
-     1302:49:27
-   1302:49:27.5
-  1302:49:27.52
- 1302:49:27.524
- 1302:49:27.524
- 1302:49:27.524
-      1302:49:27
-    1302:49:27.5
-   1302:49:27.52
-  1302:49:27.524
- 1302:49:27.5237
- 1302:49:27.5237
- 1302:49:27.5237
- 54 06:49
-  54 06:49
-   54 06:49
- 54 06:49:27
-  54 06:49:27
-   54 06:49:27
- 54 06:49:27.5
-    54 06:49:27
-  54 06:49:27.5
- 54 06:49:27.52
-     54 06:49:27
-   54 06:49:27.5
-  54 06:49:27.52
- 54 06:49:27.524
-      54 06:49:27
-    54 06:49:27.5
-   54 06:49:27.52
-  54 06:49:27.524
- 54 06:49:27.5237
-       54 06:49:27
-     54 06:49:27.5
-    54 06:49:27.52
-   54 06:49:27.524
-  54 06:49:27.5237
- 54 06:49:27.52375
-        54 06:49:27
-      54 06:49:27.5
-     54 06:49:27.52
-    54 06:49:27.524
-   54 06:49:27.5237
-  54 06:49:27.52375
- 54 06:49:27.523750
- *****
- ******
- 1298:57
-  1298:57
-   1298:57
- 1298:57:52
- 1298:57:52
-  1298:57:52
-  1298:57:52
-  1298:57:52
-   1298:57:52
- 1298:57:52.0
- 1298:57:52.0
- 1298:57:52.0
-    1298:57:52
-  1298:57:52.0
- 1298:57:52.02
- 1298:57:52.02
- 1298:57:52.02
-     1298:57:52
-   1298:57:52.0
-  1298:57:52.02
- 1298:57:52.016
- 1298:57:52.016
- 1298:57:52.016
-      1298:57:52
-    1298:57:52.0
-   1298:57:52.02
-  1298:57:52.016
- 1298:57:52.0157
- 1298:57:52.0157
- 1298:57:52.0157
- 54 02:57
-  54 02:57
-   54 02:57
- 54 02:57:52
-  54 02:57:52
-   54 02:57:52
- 54 02:57:52.0
-    54 02:57:52
-  54 02:57:52.0
- 54 02:57:52.02
-     54 02:57:52
-   54 02:57:52.0
-  54 02:57:52.02
- 54 02:57:52.016
-      54 02:57:52
-    54 02:57:52.0
-   54 02:57:52.02
-  54 02:57:52.016
- 54 02:57:52.0157
-       54 02:57:52
-     54 02:57:52.0
-    54 02:57:52.02
-   54 02:57:52.016
-  54 02:57:52.0157
- 54 02:57:52.01565
-        54 02:57:52
-      54 02:57:52.0
-     54 02:57:52.02
-    54 02:57:52.016
-   54 02:57:52.0157
-  54 02:57:52.01565
- 54 02:57:52.015650
- *****
- ******
- 1312:45
-  1312:45
-   1312:45
- 1312:45:44
- 1312:45:44
-  1312:45:44
-  1312:45:44
-  1312:45:44
-   1312:45:44
- 1312:45:44.9
- 1312:45:44.9
- 1312:45:44.9
-    1312:45:44
-  1312:45:44.9
- 1312:45:44.87
- 1312:45:44.87
- 1312:45:44.87
-     1312:45:44
-   1312:45:44.9
-  1312:45:44.87
- 1312:45:44.865
- 1312:45:44.865
- 1312:45:44.865
-      1312:45:44
-    1312:45:44.9
-   1312:45:44.87
-  1312:45:44.865
- 1312:45:44.8653
- 1312:45:44.8653
- 1312:45:44.8653
- 54 16:45
-  54 16:45
-   54 16:45
- 54 16:45:44
-  54 16:45:44
-   54 16:45:44
- 54 16:45:44.9
-    54 16:45:44
-  54 16:45:44.9
- 54 16:45:44.87
-     54 16:45:44
-   54 16:45:44.9
-  54 16:45:44.87
- 54 16:45:44.865
-      54 16:45:44
-    54 16:45:44.9
-   54 16:45:44.87
-  54 16:45:44.865
- 54 16:45:44.8653
-       54 16:45:44
-     54 16:45:44.9
-    54 16:45:44.87
-   54 16:45:44.865
-  54 16:45:44.8653
- 54 16:45:44.86529
-        54 16:45:44
-      54 16:45:44.9
-     54 16:45:44.87
-    54 16:45:44.865
-   54 16:45:44.8653
-  54 16:45:44.86529
- 54 16:45:44.865290
- *****
- ******
- 1317:30
-  1317:30
-   1317:30
- 1317:30:57
- 1317:30:57
-  1317:30:57
-  1317:30:57
-  1317:30:57
-   1317:30:57
- 1317:30:57.8
- 1317:30:57.8
- 1317:30:57.8
-    1317:30:57
-  1317:30:57.8
- 1317:30:57.82
- 1317:30:57.82
- 1317:30:57.82
-     1317:30:57
-   1317:30:57.8
-  1317:30:57.82
- 1317:30:57.820
- 1317:30:57.820
- 1317:30:57.820
-      1317:30:57
-    1317:30:57.8
-   1317:30:57.82
-  1317:30:57.820
- 1317:30:57.8205
- 1317:30:57.8205
- 1317:30:57.8205
- 54 21:30
-  54 21:30
-   54 21:30
- 54 21:30:57
-  54 21:30:57
-   54 21:30:57
- 54 21:30:57.8
-    54 21:30:57
-  54 21:30:57.8
- 54 21:30:57.82
-     54 21:30:57
-   54 21:30:57.8
-  54 21:30:57.82
- 54 21:30:57.820
-      54 21:30:57
-    54 21:30:57.8
-   54 21:30:57.82
-  54 21:30:57.820
- 54 21:30:57.8205
-       54 21:30:57
-     54 21:30:57.8
-    54 21:30:57.82
-   54 21:30:57.820
-  54 21:30:57.8205
- 54 21:30:57.82047
-        54 21:30:57
-      54 21:30:57.8
-     54 21:30:57.82
-    54 21:30:57.820
-   54 21:30:57.8205
-  54 21:30:57.82047
- 54 21:30:57.820470
- *****
- ******
- 1300:25
-  1300:25
-   1300:25
- 1300:25:09
- 1300:25:09
-  1300:25:09
-  1300:25:09
-  1300:25:09
-   1300:25:09
- 1300:25:09.2
- 1300:25:09.2
- 1300:25:09.2
-    1300:25:09
-  1300:25:09.2
- 1300:25:09.15
- 1300:25:09.15
- 1300:25:09.15
-     1300:25:09
-   1300:25:09.2
-  1300:25:09.15
- 1300:25:09.154
- 1300:25:09.154
- 1300:25:09.154
-      1300:25:09
-    1300:25:09.2
-   1300:25:09.15
-  1300:25:09.154
- 1300:25:09.1540
- 1300:25:09.1540
- 1300:25:09.1540
- 54 04:25
-  54 04:25
-   54 04:25
- 54 04:25:09
-  54 04:25:09
-   54 04:25:09
- 54 04:25:09.2
-    54 04:25:09
-  54 04:25:09.2
- 54 04:25:09.15
-     54 04:25:09
-   54 04:25:09.2
-  54 04:25:09.15
- 54 04:25:09.154
-      54 04:25:09
-    54 04:25:09.2
-   54 04:25:09.15
-  54 04:25:09.154
- 54 04:25:09.1540
-       54 04:25:09
-     54 04:25:09.2
-    54 04:25:09.15
-   54 04:25:09.154
-  54 04:25:09.1540
- 54 04:25:09.15395
-        54 04:25:09
-      54 04:25:09.2
-     54 04:25:09.15
-    54 04:25:09.154
-   54 04:25:09.1540
-  54 04:25:09.15395
- 54 04:25:09.153950
- *****
- ******
- 1302:49
-  1302:49
-   1302:49
- 1302:49:27
- 1302:49:27
-  1302:49:27
-  1302:49:27
-  1302:49:27
-   1302:49:27
- 1302:49:27.1
- 1302:49:27.1
- 1302:49:27.1
-    1302:49:27
-  1302:49:27.1
- 1302:49:27.11
- 1302:49:27.11
- 1302:49:27.11
-     1302:49:27
-   1302:49:27.1
-  1302:49:27.11
- 1302:49:27.105
- 1302:49:27.105
- 1302:49:27.105
-      1302:49:27
-    1302:49:27.1
-   1302:49:27.11
-  1302:49:27.105
- 1302:49:27.1053
- 1302:49:27.1053
- 1302:49:27.1053
- 54 06:49
-  54 06:49
-   54 06:49
- 54 06:49:27
-  54 06:49:27
-   54 06:49:27
- 54 06:49:27.1
-    54 06:49:27
-  54 06:49:27.1
- 54 06:49:27.11
-     54 06:49:27
-   54 06:49:27.1
-  54 06:49:27.11
- 54 06:49:27.105
-      54 06:49:27
-    54 06:49:27.1
-   54 06:49:27.11
-  54 06:49:27.105
- 54 06:49:27.1053
-       54 06:49:27
-     54 06:49:27.1
-    54 06:49:27.11
-   54 06:49:27.105
-  54 06:49:27.1053
- 54 06:49:27.10533
-        54 06:49:27
-      54 06:49:27.1
-     54 06:49:27.11
-    54 06:49:27.105
-   54 06:49:27.1053
-  54 06:49:27.10533
- 54 06:49:27.105330
- *****
- ******
- 1298:57
-  1298:57
-   1298:57
- 1298:57:52
- 1298:57:52
-  1298:57:52
-  1298:57:52
-  1298:57:52
-   1298:57:52
- 1298:57:52.5
- 1298:57:52.5
- 1298:57:52.5
-    1298:57:52
-  1298:57:52.5
- 1298:57:52.48
- 1298:57:52.48
- 1298:57:52.48
-     1298:57:52
-   1298:57:52.5
-  1298:57:52.48
- 1298:57:52.482
- 1298:57:52.482
- 1298:57:52.482
-      1298:57:52
-    1298:57:52.5
-   1298:57:52.48
-  1298:57:52.482
- 1298:57:52.4823
- 1298:57:52.4823
- 1298:57:52.4823
- 54 02:57
-  54 02:57
-   54 02:57
- 54 02:57:52
-  54 02:57:52
-   54 02:57:52
- 54 02:57:52.5
-    54 02:57:52
-  54 02:57:52.5
- 54 02:57:52.48
-     54 02:57:52
-   54 02:57:52.5
-  54 02:57:52.48
- 54 02:57:52.482
-      54 02:57:52
-    54 02:57:52.5
-   54 02:57:52.48
-  54 02:57:52.482
- 54 02:57:52.4823
-       54 02:57:52
-     54 02:57:52.5
-    54 02:57:52.48
-   54 02:57:52.482
-  54 02:57:52.4823
- 54 02:57:52.48229
-        54 02:57:52
-      54 02:57:52.5
-     54 02:57:52.48
-    54 02:57:52.482
-   54 02:57:52.4823
-  54 02:57:52.48229
- 54 02:57:52.482290
- *****
- ******
- 1312:45
-  1312:45
-   1312:45
- 1312:45:44
- 1312:45:44
-  1312:45:44
-  1312:45:44
-  1312:45:44
-   1312:45:44
- 1312:45:44.7
- 1312:45:44.7
- 1312:45:44.7
-    1312:45:44
-  1312:45:44.7
- 1312:45:44.66
- 1312:45:44.66
- 1312:45:44.66
-     1312:45:44
-   1312:45:44.7
-  1312:45:44.66
- 1312:45:44.658
- 1312:45:44.658
- 1312:45:44.658
-      1312:45:44
-    1312:45:44.7
-   1312:45:44.66
-  1312:45:44.658
- 1312:45:44.6583
- 1312:45:44.6583
- 1312:45:44.6583
- 54 16:45
-  54 16:45
-   54 16:45
- 54 16:45:44
-  54 16:45:44
-   54 16:45:44
- 54 16:45:44.7
-    54 16:45:44
-  54 16:45:44.7
- 54 16:45:44.66
-     54 16:45:44
-   54 16:45:44.7
-  54 16:45:44.66
- 54 16:45:44.658
-      54 16:45:44
-    54 16:45:44.7
-   54 16:45:44.66
-  54 16:45:44.658
- 54 16:45:44.6583
-       54 16:45:44
-     54 16:45:44.7
-    54 16:45:44.66
-   54 16:45:44.658
-  54 16:45:44.6583
- 54 16:45:44.65827
-        54 16:45:44
-      54 16:45:44.7
-     54 16:45:44.66
-    54 16:45:44.658
-   54 16:45:44.6583
-  54 16:45:44.65827
- 54 16:45:44.658270
- *****
- ******
- 1317:30
-  1317:30
-   1317:30
- 1317:30:57
- 1317:30:57
-  1317:30:57
-  1317:30:57
-  1317:30:57
-   1317:30:57
- 1317:30:57.6
- 1317:30:57.6
- 1317:30:57.6
-    1317:30:57
-  1317:30:57.6
- 1317:30:57.58
- 1317:30:57.58
- 1317:30:57.58
-     1317:30:57
-   1317:30:57.6
-  1317:30:57.58
- 1317:30:57.582
- 1317:30:57.582
- 1317:30:57.582
-      1317:30:57
-    1317:30:57.6
-   1317:30:57.58
-  1317:30:57.582
- 1317:30:57.5822
- 1317:30:57.5822
- 1317:30:57.5822
- 54 21:30
-  54 21:30
-   54 21:30
- 54 21:30:57
-  54 21:30:57
-   54 21:30:57
- 54 21:30:57.6
-    54 21:30:57
-  54 21:30:57.6
- 54 21:30:57.58
-     54 21:30:57
-   54 21:30:57.6
-  54 21:30:57.58
- 54 21:30:57.582
-      54 21:30:57
-    54 21:30:57.6
-   54 21:30:57.58
-  54 21:30:57.582
- 54 21:30:57.5822
-       54 21:30:57
-     54 21:30:57.6
-    54 21:30:57.58
-   54 21:30:57.582
-  54 21:30:57.5822
- 54 21:30:57.58219
-        54 21:30:57
-      54 21:30:57.6
-     54 21:30:57.58
-    54 21:30:57.582
-   54 21:30:57.5822
-  54 21:30:57.58219
- 54 21:30:57.582190
- *****
- ******
- 1318:30
-  1318:30
-   1318:30
- 1318:30:04
- 1318:30:04
-  1318:30:04
-  1318:30:04
-  1318:30:04
-   1318:30:04
- 1318:30:04.2
- 1318:30:04.2
- 1318:30:04.2
-    1318:30:04
-  1318:30:04.2
- 1318:30:04.18
- 1318:30:04.18
- 1318:30:04.18
-     1318:30:04
-   1318:30:04.2
-  1318:30:04.18
- 1318:30:04.183
- 1318:30:04.183
- 1318:30:04.183
-      1318:30:04
-    1318:30:04.2
-   1318:30:04.18
-  1318:30:04.183
- 1318:30:04.1835
- 1318:30:04.1835
- 1318:30:04.1835
- 54 22:30
-  54 22:30
-   54 22:30
- 54 22:30:04
-  54 22:30:04
-   54 22:30:04
- 54 22:30:04.2
-    54 22:30:04
-  54 22:30:04.2
- 54 22:30:04.18
-     54 22:30:04
-   54 22:30:04.2
-  54 22:30:04.18
- 54 22:30:04.183
-      54 22:30:04
-    54 22:30:04.2
-   54 22:30:04.18
-  54 22:30:04.183
- 54 22:30:04.1835
-       54 22:30:04
-     54 22:30:04.2
-    54 22:30:04.18
-   54 22:30:04.183
-  54 22:30:04.1835
- 54 22:30:04.18347
-        54 22:30:04
-      54 22:30:04.2
-     54 22:30:04.18
-    54 22:30:04.183
-   54 22:30:04.1835
-  54 22:30:04.18347
- 54 22:30:04.183470
- *****
- ******
- 1297:56
-  1297:56
-   1297:56
- 1297:56:51
- 1297:56:51
-  1297:56:51
-  1297:56:51
-  1297:56:51
-   1297:56:51
- 1297:56:51.6
- 1297:56:51.6
- 1297:56:51.6
-    1297:56:51
-  1297:56:51.6
- 1297:56:51.59
- 1297:56:51.59
- 1297:56:51.59
-     1297:56:51
-   1297:56:51.6
-  1297:56:51.59
- 1297:56:51.593
- 1297:56:51.593
- 1297:56:51.593
-      1297:56:51
-    1297:56:51.6
-   1297:56:51.59
-  1297:56:51.593
- 1297:56:51.5932
- 1297:56:51.5932
- 1297:56:51.5932
- 54 01:56
-  54 01:56
-   54 01:56
- 54 01:56:51
-  54 01:56:51
-   54 01:56:51
- 54 01:56:51.6
-    54 01:56:51
-  54 01:56:51.6
- 54 01:56:51.59
-     54 01:56:51
-   54 01:56:51.6
-  54 01:56:51.59
- 54 01:56:51.593
-      54 01:56:51
-    54 01:56:51.6
-   54 01:56:51.59
-  54 01:56:51.593
- 54 01:56:51.5932
-       54 01:56:51
-     54 01:56:51.6
-    54 01:56:51.59
-   54 01:56:51.593
-  54 01:56:51.5932
- 54 01:56:51.59319
-        54 01:56:51
-      54 01:56:51.6
-     54 01:56:51.59
-    54 01:56:51.593
-   54 01:56:51.5932
-  54 01:56:51.59319
- 54 01:56:51.593190
- *****
- ******
- *******
- 16344:00
-  16344:00
-   16344:00
-   16344:00
- 16344:00:00
- 16344:00:00
- 16344:00:00
-  16344:00:00
-  16344:00:00
-  16344:00:00
-  16344:00:00
-   16344:00:00
- 16344:00:00.0
- 16344:00:00.0
- 16344:00:00.0
- 16344:00:00.0
-    16344:00:00
-  16344:00:00.0
- 16344:00:00.00
- 16344:00:00.00
- 16344:00:00.00
- 16344:00:00.00
-     16344:00:00
-   16344:00:00.0
-  16344:00:00.00
- 16344:00:00.000
- 16344:00:00.000
- 16344:00:00.000
- 16344:00:00.000
- ********
- 681 00:00
-  681 00:00
-   681 00:00
- 681 00:00:00
-  681 00:00:00
-  681 00:00:00
-   681 00:00:00
- 681 00:00:00.0
- 681 00:00:00.0
-    681 00:00:00
-  681 00:00:00.0
- 681 00:00:00.00
- 681 00:00:00.00
-     681 00:00:00
-   681 00:00:00.0
-  681 00:00:00.00
- 681 00:00:00.000
- 681 00:00:00.000
-      681 00:00:00
-    681 00:00:00.0
-   681 00:00:00.00
-  681 00:00:00.000
- 681 00:00:00.0000
- 681 00:00:00.0000
-       681 00:00:00
-     681 00:00:00.0
-    681 00:00:00.00
-   681 00:00:00.000
-  681 00:00:00.0000
- 681 00:00:00.00000
- 681 00:00:00.00000
- *****
- ******
- *******
- 16348:50
-  16348:50
-   16348:50
-   16348:50
- 16348:50:38
- 16348:50:38
- 16348:50:38
-  16348:50:38
-  16348:50:38
-  16348:50:38
-  16348:50:38
-   16348:50:38
- 16348:50:38.1
- 16348:50:38.1
- 16348:50:38.1
- 16348:50:38.1
-    16348:50:38
-  16348:50:38.1
- 16348:50:38.12
- 16348:50:38.12
- 16348:50:38.12
- 16348:50:38.12
-     16348:50:38
-   16348:50:38.1
-  16348:50:38.12
- 16348:50:38.123
- 16348:50:38.123
- 16348:50:38.123
- 16348:50:38.123
- ********
- 681 04:50
-  681 04:50
-   681 04:50
- 681 04:50:38
-  681 04:50:38
-  681 04:50:38
-   681 04:50:38
- 681 04:50:38.1
- 681 04:50:38.1
-    681 04:50:38
-  681 04:50:38.1
- 681 04:50:38.12
- 681 04:50:38.12
-     681 04:50:38
-   681 04:50:38.1
-  681 04:50:38.12
- 681 04:50:38.123
- 681 04:50:38.123
-      681 04:50:38
-    681 04:50:38.1
-   681 04:50:38.12
-  681 04:50:38.123
- 681 04:50:38.1230
- 681 04:50:38.1230
-       681 04:50:38
-     681 04:50:38.1
-    681 04:50:38.12
-   681 04:50:38.123
-  681 04:50:38.1230
- 681 04:50:38.12301
- 681 04:50:38.12301
- *****
- ******
- *******
- 16356:31
-  16356:31
-   16356:31
-   16356:31
- 16356:31:35
- 16356:31:35
- 16356:31:35
-  16356:31:35
-  16356:31:35
-  16356:31:35
-  16356:31:35
-   16356:31:35
- 16356:31:35.2
- 16356:31:35.2
- 16356:31:35.2
- 16356:31:35.2
-    16356:31:35
-  16356:31:35.2
- 16356:31:35.23
- 16356:31:35.23
- 16356:31:35.23
- 16356:31:35.23
-     16356:31:35
-   16356:31:35.2
-  16356:31:35.23
- 16356:31:35.235
- 16356:31:35.235
- 16356:31:35.235
- 16356:31:35.235
- ********
- 681 12:31
-  681 12:31
-   681 12:31
- 681 12:31:35
-  681 12:31:35
-  681 12:31:35
-   681 12:31:35
- 681 12:31:35.2
- 681 12:31:35.2
-    681 12:31:35
-  681 12:31:35.2
- 681 12:31:35.23
- 681 12:31:35.23
-     681 12:31:35
-   681 12:31:35.2
-  681 12:31:35.23
- 681 12:31:35.235
- 681 12:31:35.235
-      681 12:31:35
-    681 12:31:35.2
-   681 12:31:35.23
-  681 12:31:35.235
- 681 12:31:35.2345
- 681 12:31:35.2345
-       681 12:31:35
-     681 12:31:35.2
-    681 12:31:35.23
-   681 12:31:35.235
-  681 12:31:35.2345
- 681 12:31:35.23453
- 681 12:31:35.23453
- *****
- ******
- *******
- 16356:47
-  16356:47
-   16356:47
-   16356:47
- 16356:47:53
- 16356:47:53
- 16356:47:53
-  16356:47:53
-  16356:47:53
-  16356:47:53
-  16356:47:53
-   16356:47:53
- 16356:47:53.3
- 16356:47:53.3
- 16356:47:53.3
- 16356:47:53.3
-    16356:47:53
-  16356:47:53.3
- 16356:47:53.35
- 16356:47:53.35
- 16356:47:53.35
- 16356:47:53.35
-     16356:47:53
-   16356:47:53.3
-  16356:47:53.35
- 16356:47:53.345
- 16356:47:53.345
- 16356:47:53.345
- 16356:47:53.345
- ********
- 681 12:47
-  681 12:47
-   681 12:47
- 681 12:47:53
-  681 12:47:53
-  681 12:47:53
-   681 12:47:53
- 681 12:47:53.3
- 681 12:47:53.3
-    681 12:47:53
-  681 12:47:53.3
- 681 12:47:53.35
- 681 12:47:53.35
-     681 12:47:53
-   681 12:47:53.3
-  681 12:47:53.35
- 681 12:47:53.345
- 681 12:47:53.345
-      681 12:47:53
-    681 12:47:53.3
-   681 12:47:53.35
-  681 12:47:53.345
- 681 12:47:53.3450
- 681 12:47:53.3450
-       681 12:47:53
-     681 12:47:53.3
-    681 12:47:53.35
-   681 12:47:53.345
-  681 12:47:53.3450
- 681 12:47:53.34505
- 681 12:47:53.34505
- *****
- ******
- *******
- 16345:26
-  16345:26
-   16345:26
-   16345:26
- 16345:26:00
- 16345:26:00
- 16345:26:00
-  16345:26:00
-  16345:26:00
-  16345:26:00
-  16345:26:00
-   16345:26:00
- 16345:26:00.5
- 16345:26:00.5
- 16345:26:00.5
- 16345:26:00.5
-    16345:26:00
-  16345:26:00.5
- 16345:26:00.46
- 16345:26:00.46
- 16345:26:00.46
- 16345:26:00.46
-     16345:26:00
-   16345:26:00.5
-  16345:26:00.46
- 16345:26:00.456
- 16345:26:00.456
- 16345:26:00.456
- 16345:26:00.456
- ********
- 681 01:26
-  681 01:26
-   681 01:26
- 681 01:26:00
-  681 01:26:00
-  681 01:26:00
-   681 01:26:00
- 681 01:26:00.5
- 681 01:26:00.5
-    681 01:26:00
-  681 01:26:00.5
- 681 01:26:00.46
- 681 01:26:00.46
-     681 01:26:00
-   681 01:26:00.5
-  681 01:26:00.46
- 681 01:26:00.456
- 681 01:26:00.456
-      681 01:26:00
-    681 01:26:00.5
-   681 01:26:00.46
-  681 01:26:00.456
- 681 01:26:00.4562
- 681 01:26:00.4562
-       681 01:26:00
-     681 01:26:00.5
-    681 01:26:00.46
-   681 01:26:00.456
-  681 01:26:00.4562
- 681 01:26:00.45615
- 681 01:26:00.45615
- *****
- ******
- *******
- 16364:58
-  16364:58
-   16364:58
-   16364:58
- 16364:58:11
- 16364:58:11
- 16364:58:11
-  16364:58:11
-  16364:58:11
-  16364:58:11
-  16364:58:11
-   16364:58:11
- 16364:58:11.6
- 16364:58:11.6
- 16364:58:11.6
- 16364:58:11.6
-    16364:58:11
-  16364:58:11.6
- 16364:58:11.57
- 16364:58:11.57
- 16364:58:11.57
- 16364:58:11.57
-     16364:58:11
-   16364:58:11.6
-  16364:58:11.57
- 16364:58:11.567
- 16364:58:11.567
- 16364:58:11.567
- 16364:58:11.567
- ********
- 681 20:58
-  681 20:58
-   681 20:58
- 681 20:58:11
-  681 20:58:11
-  681 20:58:11
-   681 20:58:11
- 681 20:58:11.6
- 681 20:58:11.6
-    681 20:58:11
-  681 20:58:11.6
- 681 20:58:11.57
- 681 20:58:11.57
-     681 20:58:11
-   681 20:58:11.6
-  681 20:58:11.57
- 681 20:58:11.567
- 681 20:58:11.567
-      681 20:58:11
-    681 20:58:11.6
-   681 20:58:11.57
-  681 20:58:11.567
- 681 20:58:11.5668
- 681 20:58:11.5668
-       681 20:58:11
-     681 20:58:11.6
-    681 20:58:11.57
-   681 20:58:11.567
-  681 20:58:11.5668
- 681 20:58:11.56677
- 681 20:58:11.56677
- *****
- ******
- *******
- 16351:36
-  16351:36
-   16351:36
-   16351:36
- 16351:36:05
- 16351:36:05
- 16351:36:05
-  16351:36:05
-  16351:36:05
-  16351:36:05
-  16351:36:05
-   16351:36:05
- 16351:36:05.2
- 16351:36:05.2
- 16351:36:05.2
- 16351:36:05.2
-    16351:36:05
-  16351:36:05.2
- 16351:36:05.19
- 16351:36:05.19
- 16351:36:05.19
- 16351:36:05.19
-     16351:36:05
-   16351:36:05.2
-  16351:36:05.19
- 16351:36:05.190
- 16351:36:05.190
- 16351:36:05.190
- 16351:36:05.190
- ********
- 681 07:36
-  681 07:36
-   681 07:36
- 681 07:36:05
-  681 07:36:05
-  681 07:36:05
-   681 07:36:05
- 681 07:36:05.2
- 681 07:36:05.2
-    681 07:36:05
-  681 07:36:05.2
- 681 07:36:05.19
- 681 07:36:05.19
-     681 07:36:05
-   681 07:36:05.2
-  681 07:36:05.19
- 681 07:36:05.190
- 681 07:36:05.190
-      681 07:36:05
-    681 07:36:05.2
-   681 07:36:05.19
-  681 07:36:05.190
- 681 07:36:05.1896
- 681 07:36:05.1896
-       681 07:36:05
-     681 07:36:05.2
-    681 07:36:05.19
-   681 07:36:05.190
-  681 07:36:05.1896
- 681 07:36:05.18964
- 681 07:36:05.18964
- *****
- ******
- *******
- 16359:43
-  16359:43
-   16359:43
-   16359:43
- 16359:43:49
- 16359:43:49
- 16359:43:49
-  16359:43:49
-  16359:43:49
-  16359:43:49
-  16359:43:49
-   16359:43:49
- 16359:43:49.8
- 16359:43:49.8
- 16359:43:49.8
- 16359:43:49.8
-    16359:43:49
-  16359:43:49.8
- 16359:43:49.83
- 16359:43:49.83
- 16359:43:49.83
- 16359:43:49.83
-     16359:43:49
-   16359:43:49.8
-  16359:43:49.83
- 16359:43:49.831
- 16359:43:49.831
- 16359:43:49.831
- 16359:43:49.831
- ********
- 681 15:43
-  681 15:43
-   681 15:43
- 681 15:43:49
-  681 15:43:49
-  681 15:43:49
-   681 15:43:49
- 681 15:43:49.8
- 681 15:43:49.8
-    681 15:43:49
-  681 15:43:49.8
- 681 15:43:49.83
- 681 15:43:49.83
-     681 15:43:49
-   681 15:43:49.8
-  681 15:43:49.83
- 681 15:43:49.831
- 681 15:43:49.831
-      681 15:43:49
-    681 15:43:49.8
-   681 15:43:49.83
-  681 15:43:49.831
- 681 15:43:49.8313
- 681 15:43:49.8313
-       681 15:43:49
-     681 15:43:49.8
-    681 15:43:49.83
-   681 15:43:49.831
-  681 15:43:49.8313
- 681 15:43:49.83132
- 681 15:43:49.83132
- *****
- ******
- *******
- 16348:25
-  16348:25
-   16348:25
-   16348:25
- 16348:25:09
- 16348:25:09
- 16348:25:09
-  16348:25:09
-  16348:25:09
-  16348:25:09
-  16348:25:09
-   16348:25:09
- 16348:25:09.0
- 16348:25:09.0
- 16348:25:09.0
- 16348:25:09.0
-    16348:25:09
-  16348:25:09.0
- 16348:25:09.01
- 16348:25:09.01
- 16348:25:09.01
- 16348:25:09.01
-     16348:25:09
-   16348:25:09.0
-  16348:25:09.01
- 16348:25:09.013
- 16348:25:09.013
- 16348:25:09.013
- 16348:25:09.013
- ********
- 681 04:25
-  681 04:25
-   681 04:25
- 681 04:25:09
-  681 04:25:09
-  681 04:25:09
-   681 04:25:09
- 681 04:25:09.0
- 681 04:25:09.0
-    681 04:25:09
-  681 04:25:09.0
- 681 04:25:09.01
- 681 04:25:09.01
-     681 04:25:09
-   681 04:25:09.0
-  681 04:25:09.01
- 681 04:25:09.013
- 681 04:25:09.013
-      681 04:25:09
-    681 04:25:09.0
-   681 04:25:09.01
-  681 04:25:09.013
- 681 04:25:09.0129
- 681 04:25:09.0129
-       681 04:25:09
-     681 04:25:09.0
-    681 04:25:09.01
-   681 04:25:09.013
-  681 04:25:09.0129
- 681 04:25:09.01293
- 681 04:25:09.01293
- *****
- ******
- *******
- 16350:49
-  16350:49
-   16350:49
-   16350:49
- 16350:49:27
- 16350:49:27
- 16350:49:27
-  16350:49:27
-  16350:49:27
-  16350:49:27
-  16350:49:27
-   16350:49:27
- 16350:49:27.5
- 16350:49:27.5
- 16350:49:27.5
- 16350:49:27.5
-    16350:49:27
-  16350:49:27.5
- 16350:49:27.52
- 16350:49:27.52
- 16350:49:27.52
- 16350:49:27.52
-     16350:49:27
-   16350:49:27.5
-  16350:49:27.52
- 16350:49:27.524
- 16350:49:27.524
- 16350:49:27.524
- 16350:49:27.524
- ********
- 681 06:49
-  681 06:49
-   681 06:49
- 681 06:49:27
-  681 06:49:27
-  681 06:49:27
-   681 06:49:27
- 681 06:49:27.5
- 681 06:49:27.5
-    681 06:49:27
-  681 06:49:27.5
- 681 06:49:27.52
- 681 06:49:27.52
-     681 06:49:27
-   681 06:49:27.5
-  681 06:49:27.52
- 681 06:49:27.524
- 681 06:49:27.524
-      681 06:49:27
-    681 06:49:27.5
-   681 06:49:27.52
-  681 06:49:27.524
- 681 06:49:27.5237
- 681 06:49:27.5237
-       681 06:49:27
-     681 06:49:27.5
-    681 06:49:27.52
-   681 06:49:27.524
-  681 06:49:27.5237
- 681 06:49:27.52375
- 681 06:49:27.52375
- *****
- ******
- *******
- 16346:57
-  16346:57
-   16346:57
-   16346:57
- 16346:57:52
- 16346:57:52
- 16346:57:52
-  16346:57:52
-  16346:57:52
-  16346:57:52
-  16346:57:52
-   16346:57:52
- 16346:57:52.0
- 16346:57:52.0
- 16346:57:52.0
- 16346:57:52.0
-    16346:57:52
-  16346:57:52.0
- 16346:57:52.02
- 16346:57:52.02
- 16346:57:52.02
- 16346:57:52.02
-     16346:57:52
-   16346:57:52.0
-  16346:57:52.02
- 16346:57:52.016
- 16346:57:52.016
- 16346:57:52.016
- 16346:57:52.016
- ********
- 681 02:57
-  681 02:57
-   681 02:57
- 681 02:57:52
-  681 02:57:52
-  681 02:57:52
-   681 02:57:52
- 681 02:57:52.0
- 681 02:57:52.0
-    681 02:57:52
-  681 02:57:52.0
- 681 02:57:52.02
- 681 02:57:52.02
-     681 02:57:52
-   681 02:57:52.0
-  681 02:57:52.02
- 681 02:57:52.016
- 681 02:57:52.016
-      681 02:57:52
-    681 02:57:52.0
-   681 02:57:52.02
-  681 02:57:52.016
- 681 02:57:52.0156
- 681 02:57:52.0156
-       681 02:57:52
-     681 02:57:52.0
-    681 02:57:52.02
-   681 02:57:52.016
-  681 02:57:52.0156
- 681 02:57:52.01565
- 681 02:57:52.01565
- *****
- ******
- *******
- 16360:45
-  16360:45
-   16360:45
-   16360:45
- 16360:45:44
- 16360:45:44
- 16360:45:44
-  16360:45:44
-  16360:45:44
-  16360:45:44
-  16360:45:44
-   16360:45:44
- 16360:45:44.9
- 16360:45:44.9
- 16360:45:44.9
- 16360:45:44.9
-    16360:45:44
-  16360:45:44.9
- 16360:45:44.87
- 16360:45:44.87
- 16360:45:44.87
- 16360:45:44.87
-     16360:45:44
-   16360:45:44.9
-  16360:45:44.87
- 16360:45:44.865
- 16360:45:44.865
- 16360:45:44.865
- 16360:45:44.865
- ********
- 681 16:45
-  681 16:45
-   681 16:45
- 681 16:45:44
-  681 16:45:44
-  681 16:45:44
-   681 16:45:44
- 681 16:45:44.9
- 681 16:45:44.9
-    681 16:45:44
-  681 16:45:44.9
- 681 16:45:44.87
- 681 16:45:44.87
-     681 16:45:44
-   681 16:45:44.9
-  681 16:45:44.87
- 681 16:45:44.865
- 681 16:45:44.865
-      681 16:45:44
-    681 16:45:44.9
-   681 16:45:44.87
-  681 16:45:44.865
- 681 16:45:44.8653
- 681 16:45:44.8653
-       681 16:45:44
-     681 16:45:44.9
-    681 16:45:44.87
-   681 16:45:44.865
-  681 16:45:44.8653
- 681 16:45:44.86529
- 681 16:45:44.86529
- *****
- ******
- *******
- 16365:30
-  16365:30
-   16365:30
-   16365:30
- 16365:30:57
- 16365:30:57
- 16365:30:57
-  16365:30:57
-  16365:30:57
-  16365:30:57
-  16365:30:57
-   16365:30:57
- 16365:30:57.8
- 16365:30:57.8
- 16365:30:57.8
- 16365:30:57.8
-    16365:30:57
-  16365:30:57.8
- 16365:30:57.82
- 16365:30:57.82
- 16365:30:57.82
- 16365:30:57.82
-     16365:30:57
-   16365:30:57.8
-  16365:30:57.82
- 16365:30:57.820
- 16365:30:57.820
- 16365:30:57.820
- 16365:30:57.820
- ********
- 681 21:30
-  681 21:30
-   681 21:30
- 681 21:30:57
-  681 21:30:57
-  681 21:30:57
-   681 21:30:57
- 681 21:30:57.8
- 681 21:30:57.8
-    681 21:30:57
-  681 21:30:57.8
- 681 21:30:57.82
- 681 21:30:57.82
-     681 21:30:57
-   681 21:30:57.8
-  681 21:30:57.82
- 681 21:30:57.820
- 681 21:30:57.820
-      681 21:30:57
-    681 21:30:57.8
-   681 21:30:57.82
-  681 21:30:57.820
- 681 21:30:57.8205
- 681 21:30:57.8205
-       681 21:30:57
-     681 21:30:57.8
-    681 21:30:57.82
-   681 21:30:57.820
-  681 21:30:57.8205
- 681 21:30:57.82047
- 681 21:30:57.82047
- *****
- ******
- *******
- 16348:25
-  16348:25
-   16348:25
-   16348:25
- 16348:25:09
- 16348:25:09
- 16348:25:09
-  16348:25:09
-  16348:25:09
-  16348:25:09
-  16348:25:09
-   16348:25:09
- 16348:25:09.2
- 16348:25:09.2
- 16348:25:09.2
- 16348:25:09.2
-    16348:25:09
-  16348:25:09.2
- 16348:25:09.15
- 16348:25:09.15
- 16348:25:09.15
- 16348:25:09.15
-     16348:25:09
-   16348:25:09.2
-  16348:25:09.15
- 16348:25:09.154
- 16348:25:09.154
- 16348:25:09.154
- 16348:25:09.154
- ********
- 681 04:25
-  681 04:25
-   681 04:25
- 681 04:25:09
-  681 04:25:09
-  681 04:25:09
-   681 04:25:09
- 681 04:25:09.2
- 681 04:25:09.2
-    681 04:25:09
-  681 04:25:09.2
- 681 04:25:09.15
- 681 04:25:09.15
-     681 04:25:09
-   681 04:25:09.2
-  681 04:25:09.15
- 681 04:25:09.154
- 681 04:25:09.154
-      681 04:25:09
-    681 04:25:09.2
-   681 04:25:09.15
-  681 04:25:09.154
- 681 04:25:09.1539
- 681 04:25:09.1539
-       681 04:25:09
-     681 04:25:09.2
-    681 04:25:09.15
-   681 04:25:09.154
-  681 04:25:09.1539
- 681 04:25:09.15395
- 681 04:25:09.15395
- *****
- ******
- *******
- 16350:49
-  16350:49
-   16350:49
-   16350:49
- 16350:49:27
- 16350:49:27
- 16350:49:27
-  16350:49:27
-  16350:49:27
-  16350:49:27
-  16350:49:27
-   16350:49:27
- 16350:49:27.1
- 16350:49:27.1
- 16350:49:27.1
- 16350:49:27.1
-    16350:49:27
-  16350:49:27.1
- 16350:49:27.11
- 16350:49:27.11
- 16350:49:27.11
- 16350:49:27.11
-     16350:49:27
-   16350:49:27.1
-  16350:49:27.11
- 16350:49:27.105
- 16350:49:27.105
- 16350:49:27.105
- 16350:49:27.105
- ********
- 681 06:49
-  681 06:49
-   681 06:49
- 681 06:49:27
-  681 06:49:27
-  681 06:49:27
-   681 06:49:27
- 681 06:49:27.1
- 681 06:49:27.1
-    681 06:49:27
-  681 06:49:27.1
- 681 06:49:27.11
- 681 06:49:27.11
-     681 06:49:27
-   681 06:49:27.1
-  681 06:49:27.11
- 681 06:49:27.105
- 681 06:49:27.105
-      681 06:49:27
-    681 06:49:27.1
-   681 06:49:27.11
-  681 06:49:27.105
- 681 06:49:27.1053
- 681 06:49:27.1053
-       681 06:49:27
-     681 06:49:27.1
-    681 06:49:27.11
-   681 06:49:27.105
-  681 06:49:27.1053
- 681 06:49:27.10533
- 681 06:49:27.10533
- *****
- ******
- *******
- 16346:57
-  16346:57
-   16346:57
-   16346:57
- 16346:57:52
- 16346:57:52
- 16346:57:52
-  16346:57:52
-  16346:57:52
-  16346:57:52
-  16346:57:52
-   16346:57:52
- 16346:57:52.5
- 16346:57:52.5
- 16346:57:52.5
- 16346:57:52.5
-    16346:57:52
-  16346:57:52.5
- 16346:57:52.48
- 16346:57:52.48
- 16346:57:52.48
- 16346:57:52.48
-     16346:57:52
-   16346:57:52.5
-  16346:57:52.48
- 16346:57:52.482
- 16346:57:52.482
- 16346:57:52.482
- 16346:57:52.482
- ********
- 681 02:57
-  681 02:57
-   681 02:57
- 681 02:57:52
-  681 02:57:52
-  681 02:57:52
-   681 02:57:52
- 681 02:57:52.5
- 681 02:57:52.5
-    681 02:57:52
-  681 02:57:52.5
- 681 02:57:52.48
- 681 02:57:52.48
-     681 02:57:52
-   681 02:57:52.5
-  681 02:57:52.48
- 681 02:57:52.482
- 681 02:57:52.482
-      681 02:57:52
-    681 02:57:52.5
-   681 02:57:52.48
-  681 02:57:52.482
- 681 02:57:52.4823
- 681 02:57:52.4823
-       681 02:57:52
-     681 02:57:52.5
-    681 02:57:52.48
-   681 02:57:52.482
-  681 02:57:52.4823
- 681 02:57:52.48229
- 681 02:57:52.48229
- *****
- ******
- *******
- 16360:45
-  16360:45
-   16360:45
-   16360:45
- 16360:45:44
- 16360:45:44
- 16360:45:44
-  16360:45:44
-  16360:45:44
-  16360:45:44
-  16360:45:44
-   16360:45:44
- 16360:45:44.7
- 16360:45:44.7
- 16360:45:44.7
- 16360:45:44.7
-    16360:45:44
-  16360:45:44.7
- 16360:45:44.66
- 16360:45:44.66
- 16360:45:44.66
- 16360:45:44.66
-     16360:45:44
-   16360:45:44.7
-  16360:45:44.66
- 16360:45:44.658
- 16360:45:44.658
- 16360:45:44.658
- 16360:45:44.658
- ********
- 681 16:45
-  681 16:45
-   681 16:45
- 681 16:45:44
-  681 16:45:44
-  681 16:45:44
-   681 16:45:44
- 681 16:45:44.7
- 681 16:45:44.7
-    681 16:45:44
-  681 16:45:44.7
- 681 16:45:44.66
- 681 16:45:44.66
-     681 16:45:44
-   681 16:45:44.7
-  681 16:45:44.66
- 681 16:45:44.658
- 681 16:45:44.658
-      681 16:45:44
-    681 16:45:44.7
-   681 16:45:44.66
-  681 16:45:44.658
- 681 16:45:44.6583
- 681 16:45:44.6583
-       681 16:45:44
-     681 16:45:44.7
-    681 16:45:44.66
-   681 16:45:44.658
-  681 16:45:44.6583
- 681 16:45:44.65827
- 681 16:45:44.65827
- *****
- ******
- *******
- 16365:30
-  16365:30
-   16365:30
-   16365:30
- 16365:30:57
- 16365:30:57
- 16365:30:57
-  16365:30:57
-  16365:30:57
-  16365:30:57
-  16365:30:57
-   16365:30:57
- 16365:30:57.6
- 16365:30:57.6
- 16365:30:57.6
- 16365:30:57.6
-    16365:30:57
-  16365:30:57.6
- 16365:30:57.58
- 16365:30:57.58
- 16365:30:57.58
- 16365:30:57.58
-     16365:30:57
-   16365:30:57.6
-  16365:30:57.58
- 16365:30:57.582
- 16365:30:57.582
- 16365:30:57.582
- 16365:30:57.582
- ********
- 681 21:30
-  681 21:30
-   681 21:30
- 681 21:30:57
-  681 21:30:57
-  681 21:30:57
-   681 21:30:57
- 681 21:30:57.6
- 681 21:30:57.6
-    681 21:30:57
-  681 21:30:57.6
- 681 21:30:57.58
- 681 21:30:57.58
-     681 21:30:57
-   681 21:30:57.6
-  681 21:30:57.58
- 681 21:30:57.582
- 681 21:30:57.582
-      681 21:30:57
-    681 21:30:57.6
-   681 21:30:57.58
-  681 21:30:57.582
- 681 21:30:57.5822
- 681 21:30:57.5822
-       681 21:30:57
-     681 21:30:57.6
-    681 21:30:57.58
-   681 21:30:57.582
-  681 21:30:57.5822
- 681 21:30:57.58219
- 681 21:30:57.58219
- *****
- ******
- *******
- 16366:30
-  16366:30
-   16366:30
-   16366:30
- 16366:30:04
- 16366:30:04
- 16366:30:04
-  16366:30:04
-  16366:30:04
-  16366:30:04
-  16366:30:04
-   16366:30:04
- 16366:30:04.2
- 16366:30:04.2
- 16366:30:04.2
- 16366:30:04.2
-    16366:30:04
-  16366:30:04.2
- 16366:30:04.18
- 16366:30:04.18
- 16366:30:04.18
- 16366:30:04.18
-     16366:30:04
-   16366:30:04.2
-  16366:30:04.18
- 16366:30:04.183
- 16366:30:04.183
- 16366:30:04.183
- 16366:30:04.183
- ********
- 681 22:30
-  681 22:30
-   681 22:30
- 681 22:30:04
-  681 22:30:04
-  681 22:30:04
-   681 22:30:04
- 681 22:30:04.2
- 681 22:30:04.2
-    681 22:30:04
-  681 22:30:04.2
- 681 22:30:04.18
- 681 22:30:04.18
-     681 22:30:04
-   681 22:30:04.2
-  681 22:30:04.18
- 681 22:30:04.183
- 681 22:30:04.183
-      681 22:30:04
-    681 22:30:04.2
-   681 22:30:04.18
-  681 22:30:04.183
- 681 22:30:04.1835
- 681 22:30:04.1835
-       681 22:30:04
-     681 22:30:04.2
-    681 22:30:04.18
-   681 22:30:04.183
-  681 22:30:04.1835
- 681 22:30:04.18347
- 681 22:30:04.18347
- *****
- ******
- *******
- 16345:56
-  16345:56
-   16345:56
-   16345:56
- 16345:56:51
- 16345:56:51
- 16345:56:51
-  16345:56:51
-  16345:56:51
-  16345:56:51
-  16345:56:51
-   16345:56:51
- 16345:56:51.6
- 16345:56:51.6
- 16345:56:51.6
- 16345:56:51.6
-    16345:56:51
-  16345:56:51.6
- 16345:56:51.59
- 16345:56:51.59
- 16345:56:51.59
- 16345:56:51.59
-     16345:56:51
-   16345:56:51.6
-  16345:56:51.59
- 16345:56:51.593
- 16345:56:51.593
- 16345:56:51.593
- 16345:56:51.593
- ********
- 681 01:56
-  681 01:56
-   681 01:56
- 681 01:56:51
-  681 01:56:51
-  681 01:56:51
-   681 01:56:51
- 681 01:56:51.6
- 681 01:56:51.6
-    681 01:56:51
-  681 01:56:51.6
- 681 01:56:51.59
- 681 01:56:51.59
-     681 01:56:51
-   681 01:56:51.6
-  681 01:56:51.59
- 681 01:56:51.593
- 681 01:56:51.593
-      681 01:56:51
-    681 01:56:51.6
-   681 01:56:51.59
-  681 01:56:51.593
- 681 01:56:51.5932
- 681 01:56:51.5932
-       681 01:56:51
-     681 01:56:51.6
-    681 01:56:51.59
-   681 01:56:51.593
-  681 01:56:51.5932
- 681 01:56:51.59319
- 681 01:56:51.59319
-  0:00
-   0:00
- 0:00:00
-  0:00:00
-   0:00:00
-    0:00:00
-  0:00:00.0
-     0:00:00
-   0:00:00.0
-  0:00:00.00
-      0:00:00
-    0:00:00.0
-   0:00:00.00
-  0:00:00.000
-       0:00:00
-     0:00:00.0
-    0:00:00.00
-   0:00:00.000
-  0:00:00.0000
-        0:00:00
-      0:00:00.0
-     0:00:00.00
-    0:00:00.000
-   0:00:00.0000
-  0:00:00.00000
-         0:00:00
-       0:00:00.0
-      0:00:00.00
-     0:00:00.000
-    0:00:00.0000
-   0:00:00.00000
-  0:00:00.000000
-  0 00:00
-   0 00:00
- 0 00:00:00
-  0 00:00:00
-   0 00:00:00
-    0 00:00:00
-  0 00:00:00.0
-     0 00:00:00
-   0 00:00:00.0
-  0 00:00:00.00
-      0 00:00:00
-    0 00:00:00.0
-   0 00:00:00.00
-  0 00:00:00.000
-       0 00:00:00
-     0 00:00:00.0
-    0 00:00:00.00
-   0 00:00:00.000
-  0 00:00:00.0000
-        0 00:00:00
-      0 00:00:00.0
-     0 00:00:00.00
-    0 00:00:00.000
-   0 00:00:00.0000
-  0 00:00:00.00000
-         0 00:00:00
-       0 00:00:00.0
-      0 00:00:00.00
-     0 00:00:00.000
-    0 00:00:00.0000
-   0 00:00:00.00000
-  0 00:00:00.000000
- -4:50
-  -4:50
-   -4:50
- -4:50:38
-  -4:50:38
-   -4:50:38
- -4:50:38.1
-    -4:50:38
-  -4:50:38.1
- -4:50:38.12
-     -4:50:38
-   -4:50:38.1
-  -4:50:38.12
- -4:50:38.123
-      -4:50:38
-    -4:50:38.1
-   -4:50:38.12
-  -4:50:38.123
- -4:50:38.1230
-       -4:50:38
-     -4:50:38.1
-    -4:50:38.12
-   -4:50:38.123
-  -4:50:38.1230
- -4:50:38.12301
-        -4:50:38
-      -4:50:38.1
-     -4:50:38.12
-    -4:50:38.123
-   -4:50:38.1230
-  -4:50:38.12301
- -4:50:38.123010
- -0 04:50
-  -0 04:50
-   -0 04:50
- -0 04:50:38
-  -0 04:50:38
-   -0 04:50:38
- -0 04:50:38.1
-    -0 04:50:38
-  -0 04:50:38.1
- -0 04:50:38.12
-     -0 04:50:38
-   -0 04:50:38.1
-  -0 04:50:38.12
- -0 04:50:38.123
-      -0 04:50:38
-    -0 04:50:38.1
-   -0 04:50:38.12
-  -0 04:50:38.123
- -0 04:50:38.1230
-       -0 04:50:38
-     -0 04:50:38.1
-    -0 04:50:38.12
-   -0 04:50:38.123
-  -0 04:50:38.1230
- -0 04:50:38.12301
-        -0 04:50:38
-      -0 04:50:38.1
-     -0 04:50:38.12
-    -0 04:50:38.123
-   -0 04:50:38.1230
-  -0 04:50:38.12301
- -0 04:50:38.123010
- *****
- -12:31
-  -12:31
-   -12:31
- -12:31:35
-  -12:31:35
-  -12:31:35
-   -12:31:35
- -12:31:35.2
- -12:31:35.2
-    -12:31:35
-  -12:31:35.2
- -12:31:35.23
- -12:31:35.23
-     -12:31:35
-   -12:31:35.2
-  -12:31:35.23
- -12:31:35.235
- -12:31:35.235
-      -12:31:35
-    -12:31:35.2
-   -12:31:35.23
-  -12:31:35.235
- -12:31:35.2345
- -12:31:35.2345
-       -12:31:35
-     -12:31:35.2
-    -12:31:35.23
-   -12:31:35.235
-  -12:31:35.2345
- -12:31:35.23453
- -12:31:35.23453
- -0 12:31
-  -0 12:31
-   -0 12:31
- -0 12:31:35
-  -0 12:31:35
-   -0 12:31:35
- -0 12:31:35.2
-    -0 12:31:35
-  -0 12:31:35.2
- -0 12:31:35.23
-     -0 12:31:35
-   -0 12:31:35.2
-  -0 12:31:35.23
- -0 12:31:35.235
-      -0 12:31:35
-    -0 12:31:35.2
-   -0 12:31:35.23
-  -0 12:31:35.235
- -0 12:31:35.2345
-       -0 12:31:35
-     -0 12:31:35.2
-    -0 12:31:35.23
-   -0 12:31:35.235
-  -0 12:31:35.2345
- -0 12:31:35.23453
-        -0 12:31:35
-      -0 12:31:35.2
-     -0 12:31:35.23
-    -0 12:31:35.235
-   -0 12:31:35.2345
-  -0 12:31:35.23453
- -0 12:31:35.234530
- *****
- -12:47
-  -12:47
-   -12:47
- -12:47:53
-  -12:47:53
-  -12:47:53
-   -12:47:53
- -12:47:53.3
- -12:47:53.3
-    -12:47:53
-  -12:47:53.3
- -12:47:53.35
- -12:47:53.35
-     -12:47:53
-   -12:47:53.3
-  -12:47:53.35
- -12:47:53.345
- -12:47:53.345
-      -12:47:53
-    -12:47:53.3
-   -12:47:53.35
-  -12:47:53.345
- -12:47:53.3451
- -12:47:53.3451
-       -12:47:53
-     -12:47:53.3
-    -12:47:53.35
-   -12:47:53.345
-  -12:47:53.3451
- -12:47:53.34505
- -12:47:53.34505
- -0 12:47
-  -0 12:47
-   -0 12:47
- -0 12:47:53
-  -0 12:47:53
-   -0 12:47:53
- -0 12:47:53.3
-    -0 12:47:53
-  -0 12:47:53.3
- -0 12:47:53.35
-     -0 12:47:53
-   -0 12:47:53.3
-  -0 12:47:53.35
- -0 12:47:53.345
-      -0 12:47:53
-    -0 12:47:53.3
-   -0 12:47:53.35
-  -0 12:47:53.345
- -0 12:47:53.3451
-       -0 12:47:53
-     -0 12:47:53.3
-    -0 12:47:53.35
-   -0 12:47:53.345
-  -0 12:47:53.3451
- -0 12:47:53.34505
-        -0 12:47:53
-      -0 12:47:53.3
-     -0 12:47:53.35
-    -0 12:47:53.345
-   -0 12:47:53.3451
-  -0 12:47:53.34505
- -0 12:47:53.345050
- -1:26
-  -1:26
-   -1:26
- -1:26:00
-  -1:26:00
-   -1:26:00
- -1:26:00.5
-    -1:26:00
-  -1:26:00.5
- -1:26:00.46
-     -1:26:00
-   -1:26:00.5
-  -1:26:00.46
- -1:26:00.456
-      -1:26:00
-    -1:26:00.5
-   -1:26:00.46
-  -1:26:00.456
- -1:26:00.4561
-       -1:26:00
-     -1:26:00.5
-    -1:26:00.46
-   -1:26:00.456
-  -1:26:00.4561
- -1:26:00.45615
-        -1:26:00
-      -1:26:00.5
-     -1:26:00.46
-    -1:26:00.456
-   -1:26:00.4561
-  -1:26:00.45615
- -1:26:00.456150
- -0 01:26
-  -0 01:26
-   -0 01:26
- -0 01:26:00
-  -0 01:26:00
-   -0 01:26:00
- -0 01:26:00.5
-    -0 01:26:00
-  -0 01:26:00.5
- -0 01:26:00.46
-     -0 01:26:00
-   -0 01:26:00.5
-  -0 01:26:00.46
- -0 01:26:00.456
-      -0 01:26:00
-    -0 01:26:00.5
-   -0 01:26:00.46
-  -0 01:26:00.456
- -0 01:26:00.4561
-       -0 01:26:00
-     -0 01:26:00.5
-    -0 01:26:00.46
-   -0 01:26:00.456
-  -0 01:26:00.4561
- -0 01:26:00.45615
-        -0 01:26:00
-      -0 01:26:00.5
-     -0 01:26:00.46
-    -0 01:26:00.456
-   -0 01:26:00.4561
-  -0 01:26:00.45615
- -0 01:26:00.456150
- *****
- -20:58
-  -20:58
-   -20:58
- -20:58:11
-  -20:58:11
-  -20:58:11
-   -20:58:11
- -20:58:11.6
- -20:58:11.6
-    -20:58:11
-  -20:58:11.6
- -20:58:11.57
- -20:58:11.57
-     -20:58:11
-   -20:58:11.6
-  -20:58:11.57
- -20:58:11.567
- -20:58:11.567
-      -20:58:11
-    -20:58:11.6
-   -20:58:11.57
-  -20:58:11.567
- -20:58:11.5668
- -20:58:11.5668
-       -20:58:11
-     -20:58:11.6
-    -20:58:11.57
-   -20:58:11.567
-  -20:58:11.5668
- -20:58:11.56677
- -20:58:11.56677
- -0 20:58
-  -0 20:58
-   -0 20:58
- -0 20:58:11
-  -0 20:58:11
-   -0 20:58:11
- -0 20:58:11.6
-    -0 20:58:11
-  -0 20:58:11.6
- -0 20:58:11.57
-     -0 20:58:11
-   -0 20:58:11.6
-  -0 20:58:11.57
- -0 20:58:11.567
-      -0 20:58:11
-    -0 20:58:11.6
-   -0 20:58:11.57
-  -0 20:58:11.567
- -0 20:58:11.5668
-       -0 20:58:11
-     -0 20:58:11.6
-    -0 20:58:11.57
-   -0 20:58:11.567
-  -0 20:58:11.5668
- -0 20:58:11.56677
-        -0 20:58:11
-      -0 20:58:11.6
-     -0 20:58:11.57
-    -0 20:58:11.567
-   -0 20:58:11.5668
-  -0 20:58:11.56677
- -0 20:58:11.566770
- -7:36
-  -7:36
-   -7:36
- -7:36:05
-  -7:36:05
-   -7:36:05
- -7:36:05.2
-    -7:36:05
-  -7:36:05.2
- -7:36:05.19
-     -7:36:05
-   -7:36:05.2
-  -7:36:05.19
- -7:36:05.190
-      -7:36:05
-    -7:36:05.2
-   -7:36:05.19
-  -7:36:05.190
- -7:36:05.1896
-       -7:36:05
-     -7:36:05.2
-    -7:36:05.19
-   -7:36:05.190
-  -7:36:05.1896
- -7:36:05.18964
-        -7:36:05
-      -7:36:05.2
-     -7:36:05.19
-    -7:36:05.190
-   -7:36:05.1896
-  -7:36:05.18964
- -7:36:05.189640
- -0 07:36
-  -0 07:36
-   -0 07:36
- -0 07:36:05
-  -0 07:36:05
-   -0 07:36:05
- -0 07:36:05.2
-    -0 07:36:05
-  -0 07:36:05.2
- -0 07:36:05.19
-     -0 07:36:05
-   -0 07:36:05.2
-  -0 07:36:05.19
- -0 07:36:05.190
-      -0 07:36:05
-    -0 07:36:05.2
-   -0 07:36:05.19
-  -0 07:36:05.190
- -0 07:36:05.1896
-       -0 07:36:05
-     -0 07:36:05.2
-    -0 07:36:05.19
-   -0 07:36:05.190
-  -0 07:36:05.1896
- -0 07:36:05.18964
-        -0 07:36:05
-      -0 07:36:05.2
-     -0 07:36:05.19
-    -0 07:36:05.190
-   -0 07:36:05.1896
-  -0 07:36:05.18964
- -0 07:36:05.189640
- *****
- -15:43
-  -15:43
-   -15:43
- -15:43:49
-  -15:43:49
-  -15:43:49
-   -15:43:49
- -15:43:49.8
- -15:43:49.8
-    -15:43:49
-  -15:43:49.8
- -15:43:49.83
- -15:43:49.83
-     -15:43:49
-   -15:43:49.8
-  -15:43:49.83
- -15:43:49.831
- -15:43:49.831
-      -15:43:49
-    -15:43:49.8
-   -15:43:49.83
-  -15:43:49.831
- -15:43:49.8313
- -15:43:49.8313
-       -15:43:49
-     -15:43:49.8
-    -15:43:49.83
-   -15:43:49.831
-  -15:43:49.8313
- -15:43:49.83132
- -15:43:49.83132
- -0 15:43
-  -0 15:43
-   -0 15:43
- -0 15:43:49
-  -0 15:43:49
-   -0 15:43:49
- -0 15:43:49.8
-    -0 15:43:49
-  -0 15:43:49.8
- -0 15:43:49.83
-     -0 15:43:49
-   -0 15:43:49.8
-  -0 15:43:49.83
- -0 15:43:49.831
-      -0 15:43:49
-    -0 15:43:49.8
-   -0 15:43:49.83
-  -0 15:43:49.831
- -0 15:43:49.8313
-       -0 15:43:49
-     -0 15:43:49.8
-    -0 15:43:49.83
-   -0 15:43:49.831
-  -0 15:43:49.8313
- -0 15:43:49.83132
-        -0 15:43:49
-      -0 15:43:49.8
-     -0 15:43:49.83
-    -0 15:43:49.831
-   -0 15:43:49.8313
-  -0 15:43:49.83132
- -0 15:43:49.831320
- -4:25
-  -4:25
-   -4:25
- -4:25:09
-  -4:25:09
-   -4:25:09
- -4:25:09.0
-    -4:25:09
-  -4:25:09.0
- -4:25:09.01
-     -4:25:09
-   -4:25:09.0
-  -4:25:09.01
- -4:25:09.013
-      -4:25:09
-    -4:25:09.0
-   -4:25:09.01
-  -4:25:09.013
- -4:25:09.0129
-       -4:25:09
-     -4:25:09.0
-    -4:25:09.01
-   -4:25:09.013
-  -4:25:09.0129
- -4:25:09.01293
-        -4:25:09
-      -4:25:09.0
-     -4:25:09.01
-    -4:25:09.013
-   -4:25:09.0129
-  -4:25:09.01293
- -4:25:09.012930
- -0 04:25
-  -0 04:25
-   -0 04:25
- -0 04:25:09
-  -0 04:25:09
-   -0 04:25:09
- -0 04:25:09.0
-    -0 04:25:09
-  -0 04:25:09.0
- -0 04:25:09.01
-     -0 04:25:09
-   -0 04:25:09.0
-  -0 04:25:09.01
- -0 04:25:09.013
-      -0 04:25:09
-    -0 04:25:09.0
-   -0 04:25:09.01
-  -0 04:25:09.013
- -0 04:25:09.0129
-       -0 04:25:09
-     -0 04:25:09.0
-    -0 04:25:09.01
-   -0 04:25:09.013
-  -0 04:25:09.0129
- -0 04:25:09.01293
-        -0 04:25:09
-      -0 04:25:09.0
-     -0 04:25:09.01
-    -0 04:25:09.013
-   -0 04:25:09.0129
-  -0 04:25:09.01293
- -0 04:25:09.012930
- -6:49
-  -6:49
-   -6:49
- -6:49:27
-  -6:49:27
-   -6:49:27
- -6:49:27.5
-    -6:49:27
-  -6:49:27.5
- -6:49:27.52
-     -6:49:27
-   -6:49:27.5
-  -6:49:27.52
- -6:49:27.524
-      -6:49:27
-    -6:49:27.5
-   -6:49:27.52
-  -6:49:27.524
- -6:49:27.5238
-       -6:49:27
-     -6:49:27.5
-    -6:49:27.52
-   -6:49:27.524
-  -6:49:27.5238
- -6:49:27.52375
-        -6:49:27
-      -6:49:27.5
-     -6:49:27.52
-    -6:49:27.524
-   -6:49:27.5238
-  -6:49:27.52375
- -6:49:27.523750
- -0 06:49
-  -0 06:49
-   -0 06:49
- -0 06:49:27
-  -0 06:49:27
-   -0 06:49:27
- -0 06:49:27.5
-    -0 06:49:27
-  -0 06:49:27.5
- -0 06:49:27.52
-     -0 06:49:27
-   -0 06:49:27.5
-  -0 06:49:27.52
- -0 06:49:27.524
-      -0 06:49:27
-    -0 06:49:27.5
-   -0 06:49:27.52
-  -0 06:49:27.524
- -0 06:49:27.5238
-       -0 06:49:27
-     -0 06:49:27.5
-    -0 06:49:27.52
-   -0 06:49:27.524
-  -0 06:49:27.5238
- -0 06:49:27.52375
-        -0 06:49:27
-      -0 06:49:27.5
-     -0 06:49:27.52
-    -0 06:49:27.524
-   -0 06:49:27.5238
-  -0 06:49:27.52375
- -0 06:49:27.523750
- -2:57
-  -2:57
-   -2:57
- -2:57:52
-  -2:57:52
-   -2:57:52
- -2:57:52.0
-    -2:57:52
-  -2:57:52.0
- -2:57:52.02
-     -2:57:52
-   -2:57:52.0
-  -2:57:52.02
- -2:57:52.016
-      -2:57:52
-    -2:57:52.0
-   -2:57:52.02
-  -2:57:52.016
- -2:57:52.0156
-       -2:57:52
-     -2:57:52.0
-    -2:57:52.02
-   -2:57:52.016
-  -2:57:52.0156
- -2:57:52.01565
-        -2:57:52
-      -2:57:52.0
-     -2:57:52.02
-    -2:57:52.016
-   -2:57:52.0156
-  -2:57:52.01565
- -2:57:52.015650
- -0 02:57
-  -0 02:57
-   -0 02:57
- -0 02:57:52
-  -0 02:57:52
-   -0 02:57:52
- -0 02:57:52.0
-    -0 02:57:52
-  -0 02:57:52.0
- -0 02:57:52.02
-     -0 02:57:52
-   -0 02:57:52.0
-  -0 02:57:52.02
- -0 02:57:52.016
-      -0 02:57:52
-    -0 02:57:52.0
-   -0 02:57:52.02
-  -0 02:57:52.016
- -0 02:57:52.0156
-       -0 02:57:52
-     -0 02:57:52.0
-    -0 02:57:52.02
-   -0 02:57:52.016
-  -0 02:57:52.0156
- -0 02:57:52.01565
-        -0 02:57:52
-      -0 02:57:52.0
-     -0 02:57:52.02
-    -0 02:57:52.016
-   -0 02:57:52.0156
-  -0 02:57:52.01565
- -0 02:57:52.015650
- *****
- -16:45
-  -16:45
-   -16:45
- -16:45:44
-  -16:45:44
-  -16:45:44
-   -16:45:44
- -16:45:44.9
- -16:45:44.9
-    -16:45:44
-  -16:45:44.9
- -16:45:44.87
- -16:45:44.87
-     -16:45:44
-   -16:45:44.9
-  -16:45:44.87
- -16:45:44.865
- -16:45:44.865
-      -16:45:44
-    -16:45:44.9
-   -16:45:44.87
-  -16:45:44.865
- -16:45:44.8653
- -16:45:44.8653
-       -16:45:44
-     -16:45:44.9
-    -16:45:44.87
-   -16:45:44.865
-  -16:45:44.8653
- -16:45:44.86529
- -16:45:44.86529
- -0 16:45
-  -0 16:45
-   -0 16:45
- -0 16:45:44
-  -0 16:45:44
-   -0 16:45:44
- -0 16:45:44.9
-    -0 16:45:44
-  -0 16:45:44.9
- -0 16:45:44.87
-     -0 16:45:44
-   -0 16:45:44.9
-  -0 16:45:44.87
- -0 16:45:44.865
-      -0 16:45:44
-    -0 16:45:44.9
-   -0 16:45:44.87
-  -0 16:45:44.865
- -0 16:45:44.8653
-       -0 16:45:44
-     -0 16:45:44.9
-    -0 16:45:44.87
-   -0 16:45:44.865
-  -0 16:45:44.8653
- -0 16:45:44.86529
-        -0 16:45:44
-      -0 16:45:44.9
-     -0 16:45:44.87
-    -0 16:45:44.865
-   -0 16:45:44.8653
-  -0 16:45:44.86529
- -0 16:45:44.865290
- *****
- -21:30
-  -21:30
-   -21:30
- -21:30:57
-  -21:30:57
-  -21:30:57
-   -21:30:57
- -21:30:57.8
- -21:30:57.8
-    -21:30:57
-  -21:30:57.8
- -21:30:57.82
- -21:30:57.82
-     -21:30:57
-   -21:30:57.8
-  -21:30:57.82
- -21:30:57.820
- -21:30:57.820
-      -21:30:57
-    -21:30:57.8
-   -21:30:57.82
-  -21:30:57.820
- -21:30:57.8205
- -21:30:57.8205
-       -21:30:57
-     -21:30:57.8
-    -21:30:57.82
-   -21:30:57.820
-  -21:30:57.8205
- -21:30:57.82047
- -21:30:57.82047
- -0 21:30
-  -0 21:30
-   -0 21:30
- -0 21:30:57
-  -0 21:30:57
-   -0 21:30:57
- -0 21:30:57.8
-    -0 21:30:57
-  -0 21:30:57.8
- -0 21:30:57.82
-     -0 21:30:57
-   -0 21:30:57.8
-  -0 21:30:57.82
- -0 21:30:57.820
-      -0 21:30:57
-    -0 21:30:57.8
-   -0 21:30:57.82
-  -0 21:30:57.820
- -0 21:30:57.8205
-       -0 21:30:57
-     -0 21:30:57.8
-    -0 21:30:57.82
-   -0 21:30:57.820
-  -0 21:30:57.8205
- -0 21:30:57.82047
-        -0 21:30:57
-      -0 21:30:57.8
-     -0 21:30:57.82
-    -0 21:30:57.820
-   -0 21:30:57.8205
-  -0 21:30:57.82047
- -0 21:30:57.820470
- -4:25
-  -4:25
-   -4:25
- -4:25:09
-  -4:25:09
-   -4:25:09
- -4:25:09.2
-    -4:25:09
-  -4:25:09.2
- -4:25:09.15
-     -4:25:09
-   -4:25:09.2
-  -4:25:09.15
- -4:25:09.154
-      -4:25:09
-    -4:25:09.2
-   -4:25:09.15
-  -4:25:09.154
- -4:25:09.1539
-       -4:25:09
-     -4:25:09.2
-    -4:25:09.15
-   -4:25:09.154
-  -4:25:09.1539
- -4:25:09.15395
-        -4:25:09
-      -4:25:09.2
-     -4:25:09.15
-    -4:25:09.154
-   -4:25:09.1539
-  -4:25:09.15395
- -4:25:09.153950
- -0 04:25
-  -0 04:25
-   -0 04:25
- -0 04:25:09
-  -0 04:25:09
-   -0 04:25:09
- -0 04:25:09.2
-    -0 04:25:09
-  -0 04:25:09.2
- -0 04:25:09.15
-     -0 04:25:09
-   -0 04:25:09.2
-  -0 04:25:09.15
- -0 04:25:09.154
-      -0 04:25:09
-    -0 04:25:09.2
-   -0 04:25:09.15
-  -0 04:25:09.154
- -0 04:25:09.1539
-       -0 04:25:09
-     -0 04:25:09.2
-    -0 04:25:09.15
-   -0 04:25:09.154
-  -0 04:25:09.1539
- -0 04:25:09.15395
-        -0 04:25:09
-      -0 04:25:09.2
-     -0 04:25:09.15
-    -0 04:25:09.154
-   -0 04:25:09.1539
-  -0 04:25:09.15395
- -0 04:25:09.153950
- -6:49
-  -6:49
-   -6:49
- -6:49:27
-  -6:49:27
-   -6:49:27
- -6:49:27.1
-    -6:49:27
-  -6:49:27.1
- -6:49:27.11
-     -6:49:27
-   -6:49:27.1
-  -6:49:27.11
- -6:49:27.105
-      -6:49:27
-    -6:49:27.1
-   -6:49:27.11
-  -6:49:27.105
- -6:49:27.1053
-       -6:49:27
-     -6:49:27.1
-    -6:49:27.11
-   -6:49:27.105
-  -6:49:27.1053
- -6:49:27.10533
-        -6:49:27
-      -6:49:27.1
-     -6:49:27.11
-    -6:49:27.105
-   -6:49:27.1053
-  -6:49:27.10533
- -6:49:27.105330
- -0 06:49
-  -0 06:49
-   -0 06:49
- -0 06:49:27
-  -0 06:49:27
-   -0 06:49:27
- -0 06:49:27.1
-    -0 06:49:27
-  -0 06:49:27.1
- -0 06:49:27.11
-     -0 06:49:27
-   -0 06:49:27.1
-  -0 06:49:27.11
- -0 06:49:27.105
-      -0 06:49:27
-    -0 06:49:27.1
-   -0 06:49:27.11
-  -0 06:49:27.105
- -0 06:49:27.1053
-       -0 06:49:27
-     -0 06:49:27.1
-    -0 06:49:27.11
-   -0 06:49:27.105
-  -0 06:49:27.1053
- -0 06:49:27.10533
-        -0 06:49:27
-      -0 06:49:27.1
-     -0 06:49:27.11
-    -0 06:49:27.105
-   -0 06:49:27.1053
-  -0 06:49:27.10533
- -0 06:49:27.105330
- -2:57
-  -2:57
-   -2:57
- -2:57:52
-  -2:57:52
-   -2:57:52
- -2:57:52.5
-    -2:57:52
-  -2:57:52.5
- -2:57:52.48
-     -2:57:52
-   -2:57:52.5
-  -2:57:52.48
- -2:57:52.482
-      -2:57:52
-    -2:57:52.5
-   -2:57:52.48
-  -2:57:52.482
- -2:57:52.4823
-       -2:57:52
-     -2:57:52.5
-    -2:57:52.48
-   -2:57:52.482
-  -2:57:52.4823
- -2:57:52.48229
-        -2:57:52
-      -2:57:52.5
-     -2:57:52.48
-    -2:57:52.482
-   -2:57:52.4823
-  -2:57:52.48229
- -2:57:52.482290
- -0 02:57
-  -0 02:57
-   -0 02:57
- -0 02:57:52
-  -0 02:57:52
-   -0 02:57:52
- -0 02:57:52.5
-    -0 02:57:52
-  -0 02:57:52.5
- -0 02:57:52.48
-     -0 02:57:52
-   -0 02:57:52.5
-  -0 02:57:52.48
- -0 02:57:52.482
-      -0 02:57:52
-    -0 02:57:52.5
-   -0 02:57:52.48
-  -0 02:57:52.482
- -0 02:57:52.4823
-       -0 02:57:52
-     -0 02:57:52.5
-    -0 02:57:52.48
-   -0 02:57:52.482
-  -0 02:57:52.4823
- -0 02:57:52.48229
-        -0 02:57:52
-      -0 02:57:52.5
-     -0 02:57:52.48
-    -0 02:57:52.482
-   -0 02:57:52.4823
-  -0 02:57:52.48229
- -0 02:57:52.482290
- *****
- -16:45
-  -16:45
-   -16:45
- -16:45:44
-  -16:45:44
-  -16:45:44
-   -16:45:44
- -16:45:44.7
- -16:45:44.7
-    -16:45:44
-  -16:45:44.7
- -16:45:44.66
- -16:45:44.66
-     -16:45:44
-   -16:45:44.7
-  -16:45:44.66
- -16:45:44.658
- -16:45:44.658
-      -16:45:44
-    -16:45:44.7
-   -16:45:44.66
-  -16:45:44.658
- -16:45:44.6583
- -16:45:44.6583
-       -16:45:44
-     -16:45:44.7
-    -16:45:44.66
-   -16:45:44.658
-  -16:45:44.6583
- -16:45:44.65827
- -16:45:44.65827
- -0 16:45
-  -0 16:45
-   -0 16:45
- -0 16:45:44
-  -0 16:45:44
-   -0 16:45:44
- -0 16:45:44.7
-    -0 16:45:44
-  -0 16:45:44.7
- -0 16:45:44.66
-     -0 16:45:44
-   -0 16:45:44.7
-  -0 16:45:44.66
- -0 16:45:44.658
-      -0 16:45:44
-    -0 16:45:44.7
-   -0 16:45:44.66
-  -0 16:45:44.658
- -0 16:45:44.6583
-       -0 16:45:44
-     -0 16:45:44.7
-    -0 16:45:44.66
-   -0 16:45:44.658
-  -0 16:45:44.6583
- -0 16:45:44.65827
-        -0 16:45:44
-      -0 16:45:44.7
-     -0 16:45:44.66
-    -0 16:45:44.658
-   -0 16:45:44.6583
-  -0 16:45:44.65827
- -0 16:45:44.658270
- *****
- -21:30
-  -21:30
-   -21:30
- -21:30:57
-  -21:30:57
-  -21:30:57
-   -21:30:57
- -21:30:57.6
- -21:30:57.6
-    -21:30:57
-  -21:30:57.6
- -21:30:57.58
- -21:30:57.58
-     -21:30:57
-   -21:30:57.6
-  -21:30:57.58
- -21:30:57.582
- -21:30:57.582
-      -21:30:57
-    -21:30:57.6
-   -21:30:57.58
-  -21:30:57.582
- -21:30:57.5822
- -21:30:57.5822
-       -21:30:57
-     -21:30:57.6
-    -21:30:57.58
-   -21:30:57.582
-  -21:30:57.5822
- -21:30:57.58219
- -21:30:57.58219
- -0 21:30
-  -0 21:30
-   -0 21:30
- -0 21:30:57
-  -0 21:30:57
-   -0 21:30:57
- -0 21:30:57.6
-    -0 21:30:57
-  -0 21:30:57.6
- -0 21:30:57.58
-     -0 21:30:57
-   -0 21:30:57.6
-  -0 21:30:57.58
- -0 21:30:57.582
-      -0 21:30:57
-    -0 21:30:57.6
-   -0 21:30:57.58
-  -0 21:30:57.582
- -0 21:30:57.5822
-       -0 21:30:57
-     -0 21:30:57.6
-    -0 21:30:57.58
-   -0 21:30:57.582
-  -0 21:30:57.5822
- -0 21:30:57.58219
-        -0 21:30:57
-      -0 21:30:57.6
-     -0 21:30:57.58
-    -0 21:30:57.582
-   -0 21:30:57.5822
-  -0 21:30:57.58219
- -0 21:30:57.582190
- *****
- -22:30
-  -22:30
-   -22:30
- -22:30:04
-  -22:30:04
-  -22:30:04
-   -22:30:04
- -22:30:04.2
- -22:30:04.2
-    -22:30:04
-  -22:30:04.2
- -22:30:04.18
- -22:30:04.18
-     -22:30:04
-   -22:30:04.2
-  -22:30:04.18
- -22:30:04.183
- -22:30:04.183
-      -22:30:04
-    -22:30:04.2
-   -22:30:04.18
-  -22:30:04.183
- -22:30:04.1835
- -22:30:04.1835
-       -22:30:04
-     -22:30:04.2
-    -22:30:04.18
-   -22:30:04.183
-  -22:30:04.1835
- -22:30:04.18347
- -22:30:04.18347
- -0 22:30
-  -0 22:30
-   -0 22:30
- -0 22:30:04
-  -0 22:30:04
-   -0 22:30:04
- -0 22:30:04.2
-    -0 22:30:04
-  -0 22:30:04.2
- -0 22:30:04.18
-     -0 22:30:04
-   -0 22:30:04.2
-  -0 22:30:04.18
- -0 22:30:04.183
-      -0 22:30:04
-    -0 22:30:04.2
-   -0 22:30:04.18
-  -0 22:30:04.183
- -0 22:30:04.1835
-       -0 22:30:04
-     -0 22:30:04.2
-    -0 22:30:04.18
-   -0 22:30:04.183
-  -0 22:30:04.1835
- -0 22:30:04.18347
-        -0 22:30:04
-      -0 22:30:04.2
-     -0 22:30:04.18
-    -0 22:30:04.183
-   -0 22:30:04.1835
-  -0 22:30:04.18347
- -0 22:30:04.183470
- -1:56
-  -1:56
-   -1:56
- -1:56:51
-  -1:56:51
-   -1:56:51
- -1:56:51.6
-    -1:56:51
-  -1:56:51.6
- -1:56:51.59
-     -1:56:51
-   -1:56:51.6
-  -1:56:51.59
- -1:56:51.593
-      -1:56:51
-    -1:56:51.6
-   -1:56:51.59
-  -1:56:51.593
- -1:56:51.5932
-       -1:56:51
-     -1:56:51.6
-    -1:56:51.59
-   -1:56:51.593
-  -1:56:51.5932
- -1:56:51.59319
-        -1:56:51
-      -1:56:51.6
-     -1:56:51.59
-    -1:56:51.593
-   -1:56:51.5932
-  -1:56:51.59319
- -1:56:51.593190
- -0 01:56
-  -0 01:56
-   -0 01:56
- -0 01:56:51
-  -0 01:56:51
-   -0 01:56:51
- -0 01:56:51.6
-    -0 01:56:51
-  -0 01:56:51.6
- -0 01:56:51.59
-     -0 01:56:51
-   -0 01:56:51.6
-  -0 01:56:51.59
- -0 01:56:51.593
-      -0 01:56:51
-    -0 01:56:51.6
-   -0 01:56:51.59
-  -0 01:56:51.593
- -0 01:56:51.5932
-       -0 01:56:51
-     -0 01:56:51.6
-    -0 01:56:51.59
-   -0 01:56:51.593
-  -0 01:56:51.5932
- -0 01:56:51.59319
-        -0 01:56:51
-      -0 01:56:51.6
-     -0 01:56:51.59
-    -0 01:56:51.593
-   -0 01:56:51.5932
-  -0 01:56:51.59319
- -0 01:56:51.593190
- *****
- -24:00
-  -24:00
-   -24:00
- -24:00:00
-  -24:00:00
-  -24:00:00
-   -24:00:00
- -24:00:00.0
- -24:00:00.0
-    -24:00:00
-  -24:00:00.0
- -24:00:00.00
- -24:00:00.00
-     -24:00:00
-   -24:00:00.0
-  -24:00:00.00
- -24:00:00.000
- -24:00:00.000
-      -24:00:00
-    -24:00:00.0
-   -24:00:00.00
-  -24:00:00.000
- -24:00:00.0000
- -24:00:00.0000
-       -24:00:00
-     -24:00:00.0
-    -24:00:00.00
-   -24:00:00.000
-  -24:00:00.0000
- -24:00:00.00000
- -24:00:00.00000
- -1 00:00
-  -1 00:00
-   -1 00:00
- -1 00:00:00
-  -1 00:00:00
-   -1 00:00:00
- -1 00:00:00.0
-    -1 00:00:00
-  -1 00:00:00.0
- -1 00:00:00.00
-     -1 00:00:00
-   -1 00:00:00.0
-  -1 00:00:00.00
- -1 00:00:00.000
-      -1 00:00:00
-    -1 00:00:00.0
-   -1 00:00:00.00
-  -1 00:00:00.000
- -1 00:00:00.0000
-       -1 00:00:00
-     -1 00:00:00.0
-    -1 00:00:00.00
-   -1 00:00:00.000
-  -1 00:00:00.0000
- -1 00:00:00.00000
-        -1 00:00:00
-      -1 00:00:00.0
-     -1 00:00:00.00
-    -1 00:00:00.000
-   -1 00:00:00.0000
-  -1 00:00:00.00000
- -1 00:00:00.000000
- *****
- -28:50
-  -28:50
-   -28:50
- -28:50:38
-  -28:50:38
-  -28:50:38
-   -28:50:38
- -28:50:38.1
- -28:50:38.1
-    -28:50:38
-  -28:50:38.1
- -28:50:38.12
- -28:50:38.12
-     -28:50:38
-   -28:50:38.1
-  -28:50:38.12
- -28:50:38.123
- -28:50:38.123
-      -28:50:38
-    -28:50:38.1
-   -28:50:38.12
-  -28:50:38.123
- -28:50:38.1230
- -28:50:38.1230
-       -28:50:38
-     -28:50:38.1
-    -28:50:38.12
-   -28:50:38.123
-  -28:50:38.1230
- -28:50:38.12301
- -28:50:38.12301
- -1 04:50
-  -1 04:50
-   -1 04:50
- -1 04:50:38
-  -1 04:50:38
-   -1 04:50:38
- -1 04:50:38.1
-    -1 04:50:38
-  -1 04:50:38.1
- -1 04:50:38.12
-     -1 04:50:38
-   -1 04:50:38.1
-  -1 04:50:38.12
- -1 04:50:38.123
-      -1 04:50:38
-    -1 04:50:38.1
-   -1 04:50:38.12
-  -1 04:50:38.123
- -1 04:50:38.1230
-       -1 04:50:38
-     -1 04:50:38.1
-    -1 04:50:38.12
-   -1 04:50:38.123
-  -1 04:50:38.1230
- -1 04:50:38.12301
-        -1 04:50:38
-      -1 04:50:38.1
-     -1 04:50:38.12
-    -1 04:50:38.123
-   -1 04:50:38.1230
-  -1 04:50:38.12301
- -1 04:50:38.123010
- *****
- -36:31
-  -36:31
-   -36:31
- -36:31:35
-  -36:31:35
-  -36:31:35
-   -36:31:35
- -36:31:35.2
- -36:31:35.2
-    -36:31:35
-  -36:31:35.2
- -36:31:35.23
- -36:31:35.23
-     -36:31:35
-   -36:31:35.2
-  -36:31:35.23
- -36:31:35.235
- -36:31:35.235
-      -36:31:35
-    -36:31:35.2
-   -36:31:35.23
-  -36:31:35.235
- -36:31:35.2345
- -36:31:35.2345
-       -36:31:35
-     -36:31:35.2
-    -36:31:35.23
-   -36:31:35.235
-  -36:31:35.2345
- -36:31:35.23453
- -36:31:35.23453
- -1 12:31
-  -1 12:31
-   -1 12:31
- -1 12:31:35
-  -1 12:31:35
-   -1 12:31:35
- -1 12:31:35.2
-    -1 12:31:35
-  -1 12:31:35.2
- -1 12:31:35.23
-     -1 12:31:35
-   -1 12:31:35.2
-  -1 12:31:35.23
- -1 12:31:35.235
-      -1 12:31:35
-    -1 12:31:35.2
-   -1 12:31:35.23
-  -1 12:31:35.235
- -1 12:31:35.2345
-       -1 12:31:35
-     -1 12:31:35.2
-    -1 12:31:35.23
-   -1 12:31:35.235
-  -1 12:31:35.2345
- -1 12:31:35.23453
-        -1 12:31:35
-      -1 12:31:35.2
-     -1 12:31:35.23
-    -1 12:31:35.235
-   -1 12:31:35.2345
-  -1 12:31:35.23453
- -1 12:31:35.234530
- *****
- -36:47
-  -36:47
-   -36:47
- -36:47:53
-  -36:47:53
-  -36:47:53
-   -36:47:53
- -36:47:53.3
- -36:47:53.3
-    -36:47:53
-  -36:47:53.3
- -36:47:53.35
- -36:47:53.35
-     -36:47:53
-   -36:47:53.3
-  -36:47:53.35
- -36:47:53.345
- -36:47:53.345
-      -36:47:53
-    -36:47:53.3
-   -36:47:53.35
-  -36:47:53.345
- -36:47:53.3451
- -36:47:53.3451
-       -36:47:53
-     -36:47:53.3
-    -36:47:53.35
-   -36:47:53.345
-  -36:47:53.3451
- -36:47:53.34505
- -36:47:53.34505
- -1 12:47
-  -1 12:47
-   -1 12:47
- -1 12:47:53
-  -1 12:47:53
-   -1 12:47:53
- -1 12:47:53.3
-    -1 12:47:53
-  -1 12:47:53.3
- -1 12:47:53.35
-     -1 12:47:53
-   -1 12:47:53.3
-  -1 12:47:53.35
- -1 12:47:53.345
-      -1 12:47:53
-    -1 12:47:53.3
-   -1 12:47:53.35
-  -1 12:47:53.345
- -1 12:47:53.3451
-       -1 12:47:53
-     -1 12:47:53.3
-    -1 12:47:53.35
-   -1 12:47:53.345
-  -1 12:47:53.3451
- -1 12:47:53.34505
-        -1 12:47:53
-      -1 12:47:53.3
-     -1 12:47:53.35
-    -1 12:47:53.345
-   -1 12:47:53.3451
-  -1 12:47:53.34505
- -1 12:47:53.345050
- *****
- -25:26
-  -25:26
-   -25:26
- -25:26:00
-  -25:26:00
-  -25:26:00
-   -25:26:00
- -25:26:00.5
- -25:26:00.5
-    -25:26:00
-  -25:26:00.5
- -25:26:00.46
- -25:26:00.46
-     -25:26:00
-   -25:26:00.5
-  -25:26:00.46
- -25:26:00.456
- -25:26:00.456
-      -25:26:00
-    -25:26:00.5
-   -25:26:00.46
-  -25:26:00.456
- -25:26:00.4561
- -25:26:00.4561
-       -25:26:00
-     -25:26:00.5
-    -25:26:00.46
-   -25:26:00.456
-  -25:26:00.4561
- -25:26:00.45615
- -25:26:00.45615
- -1 01:26
-  -1 01:26
-   -1 01:26
- -1 01:26:00
-  -1 01:26:00
-   -1 01:26:00
- -1 01:26:00.5
-    -1 01:26:00
-  -1 01:26:00.5
- -1 01:26:00.46
-     -1 01:26:00
-   -1 01:26:00.5
-  -1 01:26:00.46
- -1 01:26:00.456
-      -1 01:26:00
-    -1 01:26:00.5
-   -1 01:26:00.46
-  -1 01:26:00.456
- -1 01:26:00.4561
-       -1 01:26:00
-     -1 01:26:00.5
-    -1 01:26:00.46
-   -1 01:26:00.456
-  -1 01:26:00.4561
- -1 01:26:00.45615
-        -1 01:26:00
-      -1 01:26:00.5
-     -1 01:26:00.46
-    -1 01:26:00.456
-   -1 01:26:00.4561
-  -1 01:26:00.45615
- -1 01:26:00.456150
- *****
- -44:58
-  -44:58
-   -44:58
- -44:58:11
-  -44:58:11
-  -44:58:11
-   -44:58:11
- -44:58:11.6
- -44:58:11.6
-    -44:58:11
-  -44:58:11.6
- -44:58:11.57
- -44:58:11.57
-     -44:58:11
-   -44:58:11.6
-  -44:58:11.57
- -44:58:11.567
- -44:58:11.567
-      -44:58:11
-    -44:58:11.6
-   -44:58:11.57
-  -44:58:11.567
- -44:58:11.5668
- -44:58:11.5668
-       -44:58:11
-     -44:58:11.6
-    -44:58:11.57
-   -44:58:11.567
-  -44:58:11.5668
- -44:58:11.56677
- -44:58:11.56677
- -1 20:58
-  -1 20:58
-   -1 20:58
- -1 20:58:11
-  -1 20:58:11
-   -1 20:58:11
- -1 20:58:11.6
-    -1 20:58:11
-  -1 20:58:11.6
- -1 20:58:11.57
-     -1 20:58:11
-   -1 20:58:11.6
-  -1 20:58:11.57
- -1 20:58:11.567
-      -1 20:58:11
-    -1 20:58:11.6
-   -1 20:58:11.57
-  -1 20:58:11.567
- -1 20:58:11.5668
-       -1 20:58:11
-     -1 20:58:11.6
-    -1 20:58:11.57
-   -1 20:58:11.567
-  -1 20:58:11.5668
- -1 20:58:11.56677
-        -1 20:58:11
-      -1 20:58:11.6
-     -1 20:58:11.57
-    -1 20:58:11.567
-   -1 20:58:11.5668
-  -1 20:58:11.56677
- -1 20:58:11.566770
- *****
- -31:36
-  -31:36
-   -31:36
- -31:36:05
-  -31:36:05
-  -31:36:05
-   -31:36:05
- -31:36:05.2
- -31:36:05.2
-    -31:36:05
-  -31:36:05.2
- -31:36:05.19
- -31:36:05.19
-     -31:36:05
-   -31:36:05.2
-  -31:36:05.19
- -31:36:05.190
- -31:36:05.190
-      -31:36:05
-    -31:36:05.2
-   -31:36:05.19
-  -31:36:05.190
- -31:36:05.1896
- -31:36:05.1896
-       -31:36:05
-     -31:36:05.2
-    -31:36:05.19
-   -31:36:05.190
-  -31:36:05.1896
- -31:36:05.18964
- -31:36:05.18964
- -1 07:36
-  -1 07:36
-   -1 07:36
- -1 07:36:05
-  -1 07:36:05
-   -1 07:36:05
- -1 07:36:05.2
-    -1 07:36:05
-  -1 07:36:05.2
- -1 07:36:05.19
-     -1 07:36:05
-   -1 07:36:05.2
-  -1 07:36:05.19
- -1 07:36:05.190
-      -1 07:36:05
-    -1 07:36:05.2
-   -1 07:36:05.19
-  -1 07:36:05.190
- -1 07:36:05.1896
-       -1 07:36:05
-     -1 07:36:05.2
-    -1 07:36:05.19
-   -1 07:36:05.190
-  -1 07:36:05.1896
- -1 07:36:05.18964
-        -1 07:36:05
-      -1 07:36:05.2
-     -1 07:36:05.19
-    -1 07:36:05.190
-   -1 07:36:05.1896
-  -1 07:36:05.18964
- -1 07:36:05.189640
- *****
- -39:43
-  -39:43
-   -39:43
- -39:43:49
-  -39:43:49
-  -39:43:49
-   -39:43:49
- -39:43:49.8
- -39:43:49.8
-    -39:43:49
-  -39:43:49.8
- -39:43:49.83
- -39:43:49.83
-     -39:43:49
-   -39:43:49.8
-  -39:43:49.83
- -39:43:49.831
- -39:43:49.831
-      -39:43:49
-    -39:43:49.8
-   -39:43:49.83
-  -39:43:49.831
- -39:43:49.8313
- -39:43:49.8313
-       -39:43:49
-     -39:43:49.8
-    -39:43:49.83
-   -39:43:49.831
-  -39:43:49.8313
- -39:43:49.83132
- -39:43:49.83132
- -1 15:43
-  -1 15:43
-   -1 15:43
- -1 15:43:49
-  -1 15:43:49
-   -1 15:43:49
- -1 15:43:49.8
-    -1 15:43:49
-  -1 15:43:49.8
- -1 15:43:49.83
-     -1 15:43:49
-   -1 15:43:49.8
-  -1 15:43:49.83
- -1 15:43:49.831
-      -1 15:43:49
-    -1 15:43:49.8
-   -1 15:43:49.83
-  -1 15:43:49.831
- -1 15:43:49.8313
-       -1 15:43:49
-     -1 15:43:49.8
-    -1 15:43:49.83
-   -1 15:43:49.831
-  -1 15:43:49.8313
- -1 15:43:49.83132
-        -1 15:43:49
-      -1 15:43:49.8
-     -1 15:43:49.83
-    -1 15:43:49.831
-   -1 15:43:49.8313
-  -1 15:43:49.83132
- -1 15:43:49.831320
- *****
- -28:25
-  -28:25
-   -28:25
- -28:25:09
-  -28:25:09
-  -28:25:09
-   -28:25:09
- -28:25:09.0
- -28:25:09.0
-    -28:25:09
-  -28:25:09.0
- -28:25:09.01
- -28:25:09.01
-     -28:25:09
-   -28:25:09.0
-  -28:25:09.01
- -28:25:09.013
- -28:25:09.013
-      -28:25:09
-    -28:25:09.0
-   -28:25:09.01
-  -28:25:09.013
- -28:25:09.0129
- -28:25:09.0129
-       -28:25:09
-     -28:25:09.0
-    -28:25:09.01
-   -28:25:09.013
-  -28:25:09.0129
- -28:25:09.01293
- -28:25:09.01293
- -1 04:25
-  -1 04:25
-   -1 04:25
- -1 04:25:09
-  -1 04:25:09
-   -1 04:25:09
- -1 04:25:09.0
-    -1 04:25:09
-  -1 04:25:09.0
- -1 04:25:09.01
-     -1 04:25:09
-   -1 04:25:09.0
-  -1 04:25:09.01
- -1 04:25:09.013
-      -1 04:25:09
-    -1 04:25:09.0
-   -1 04:25:09.01
-  -1 04:25:09.013
- -1 04:25:09.0129
-       -1 04:25:09
-     -1 04:25:09.0
-    -1 04:25:09.01
-   -1 04:25:09.013
-  -1 04:25:09.0129
- -1 04:25:09.01293
-        -1 04:25:09
-      -1 04:25:09.0
-     -1 04:25:09.01
-    -1 04:25:09.013
-   -1 04:25:09.0129
-  -1 04:25:09.01293
- -1 04:25:09.012930
- *****
- -30:49
-  -30:49
-   -30:49
- -30:49:27
-  -30:49:27
-  -30:49:27
-   -30:49:27
- -30:49:27.5
- -30:49:27.5
-    -30:49:27
-  -30:49:27.5
- -30:49:27.52
- -30:49:27.52
-     -30:49:27
-   -30:49:27.5
-  -30:49:27.52
- -30:49:27.524
- -30:49:27.524
-      -30:49:27
-    -30:49:27.5
-   -30:49:27.52
-  -30:49:27.524
- -30:49:27.5237
- -30:49:27.5237
-       -30:49:27
-     -30:49:27.5
-    -30:49:27.52
-   -30:49:27.524
-  -30:49:27.5237
- -30:49:27.52375
- -30:49:27.52375
- -1 06:49
-  -1 06:49
-   -1 06:49
- -1 06:49:27
-  -1 06:49:27
-   -1 06:49:27
- -1 06:49:27.5
-    -1 06:49:27
-  -1 06:49:27.5
- -1 06:49:27.52
-     -1 06:49:27
-   -1 06:49:27.5
-  -1 06:49:27.52
- -1 06:49:27.524
-      -1 06:49:27
-    -1 06:49:27.5
-   -1 06:49:27.52
-  -1 06:49:27.524
- -1 06:49:27.5237
-       -1 06:49:27
-     -1 06:49:27.5
-    -1 06:49:27.52
-   -1 06:49:27.524
-  -1 06:49:27.5237
- -1 06:49:27.52375
-        -1 06:49:27
-      -1 06:49:27.5
-     -1 06:49:27.52
-    -1 06:49:27.524
-   -1 06:49:27.5237
-  -1 06:49:27.52375
- -1 06:49:27.523750
- *****
- -26:57
-  -26:57
-   -26:57
- -26:57:52
-  -26:57:52
-  -26:57:52
-   -26:57:52
- -26:57:52.0
- -26:57:52.0
-    -26:57:52
-  -26:57:52.0
- -26:57:52.02
- -26:57:52.02
-     -26:57:52
-   -26:57:52.0
-  -26:57:52.02
- -26:57:52.016
- -26:57:52.016
-      -26:57:52
-    -26:57:52.0
-   -26:57:52.02
-  -26:57:52.016
- -26:57:52.0157
- -26:57:52.0157
-       -26:57:52
-     -26:57:52.0
-    -26:57:52.02
-   -26:57:52.016
-  -26:57:52.0157
- -26:57:52.01565
- -26:57:52.01565
- -1 02:57
-  -1 02:57
-   -1 02:57
- -1 02:57:52
-  -1 02:57:52
-   -1 02:57:52
- -1 02:57:52.0
-    -1 02:57:52
-  -1 02:57:52.0
- -1 02:57:52.02
-     -1 02:57:52
-   -1 02:57:52.0
-  -1 02:57:52.02
- -1 02:57:52.016
-      -1 02:57:52
-    -1 02:57:52.0
-   -1 02:57:52.02
-  -1 02:57:52.016
- -1 02:57:52.0157
-       -1 02:57:52
-     -1 02:57:52.0
-    -1 02:57:52.02
-   -1 02:57:52.016
-  -1 02:57:52.0157
- -1 02:57:52.01565
-        -1 02:57:52
-      -1 02:57:52.0
-     -1 02:57:52.02
-    -1 02:57:52.016
-   -1 02:57:52.0157
-  -1 02:57:52.01565
- -1 02:57:52.015650
- *****
- -40:45
-  -40:45
-   -40:45
- -40:45:44
-  -40:45:44
-  -40:45:44
-   -40:45:44
- -40:45:44.9
- -40:45:44.9
-    -40:45:44
-  -40:45:44.9
- -40:45:44.87
- -40:45:44.87
-     -40:45:44
-   -40:45:44.9
-  -40:45:44.87
- -40:45:44.865
- -40:45:44.865
-      -40:45:44
-    -40:45:44.9
-   -40:45:44.87
-  -40:45:44.865
- -40:45:44.8653
- -40:45:44.8653
-       -40:45:44
-     -40:45:44.9
-    -40:45:44.87
-   -40:45:44.865
-  -40:45:44.8653
- -40:45:44.86529
- -40:45:44.86529
- -1 16:45
-  -1 16:45
-   -1 16:45
- -1 16:45:44
-  -1 16:45:44
-   -1 16:45:44
- -1 16:45:44.9
-    -1 16:45:44
-  -1 16:45:44.9
- -1 16:45:44.87
-     -1 16:45:44
-   -1 16:45:44.9
-  -1 16:45:44.87
- -1 16:45:44.865
-      -1 16:45:44
-    -1 16:45:44.9
-   -1 16:45:44.87
-  -1 16:45:44.865
- -1 16:45:44.8653
-       -1 16:45:44
-     -1 16:45:44.9
-    -1 16:45:44.87
-   -1 16:45:44.865
-  -1 16:45:44.8653
- -1 16:45:44.86529
-        -1 16:45:44
-      -1 16:45:44.9
-     -1 16:45:44.87
-    -1 16:45:44.865
-   -1 16:45:44.8653
-  -1 16:45:44.86529
- -1 16:45:44.865290
- *****
- -45:30
-  -45:30
-   -45:30
- -45:30:57
-  -45:30:57
-  -45:30:57
-   -45:30:57
- -45:30:57.8
- -45:30:57.8
-    -45:30:57
-  -45:30:57.8
- -45:30:57.82
- -45:30:57.82
-     -45:30:57
-   -45:30:57.8
-  -45:30:57.82
- -45:30:57.820
- -45:30:57.820
-      -45:30:57
-    -45:30:57.8
-   -45:30:57.82
-  -45:30:57.820
- -45:30:57.8205
- -45:30:57.8205
-       -45:30:57
-     -45:30:57.8
-    -45:30:57.82
-   -45:30:57.820
-  -45:30:57.8205
- -45:30:57.82047
- -45:30:57.82047
- -1 21:30
-  -1 21:30
-   -1 21:30
- -1 21:30:57
-  -1 21:30:57
-   -1 21:30:57
- -1 21:30:57.8
-    -1 21:30:57
-  -1 21:30:57.8
- -1 21:30:57.82
-     -1 21:30:57
-   -1 21:30:57.8
-  -1 21:30:57.82
- -1 21:30:57.820
-      -1 21:30:57
-    -1 21:30:57.8
-   -1 21:30:57.82
-  -1 21:30:57.820
- -1 21:30:57.8205
-       -1 21:30:57
-     -1 21:30:57.8
-    -1 21:30:57.82
-   -1 21:30:57.820
-  -1 21:30:57.8205
- -1 21:30:57.82047
-        -1 21:30:57
-      -1 21:30:57.8
-     -1 21:30:57.82
-    -1 21:30:57.820
-   -1 21:30:57.8205
-  -1 21:30:57.82047
- -1 21:30:57.820470
- *****
- -28:25
-  -28:25
-   -28:25
- -28:25:09
-  -28:25:09
-  -28:25:09
-   -28:25:09
- -28:25:09.2
- -28:25:09.2
-    -28:25:09
-  -28:25:09.2
- -28:25:09.15
- -28:25:09.15
-     -28:25:09
-   -28:25:09.2
-  -28:25:09.15
- -28:25:09.154
- -28:25:09.154
-      -28:25:09
-    -28:25:09.2
-   -28:25:09.15
-  -28:25:09.154
- -28:25:09.1540
- -28:25:09.1540
-       -28:25:09
-     -28:25:09.2
-    -28:25:09.15
-   -28:25:09.154
-  -28:25:09.1540
- -28:25:09.15395
- -28:25:09.15395
- -1 04:25
-  -1 04:25
-   -1 04:25
- -1 04:25:09
-  -1 04:25:09
-   -1 04:25:09
- -1 04:25:09.2
-    -1 04:25:09
-  -1 04:25:09.2
- -1 04:25:09.15
-     -1 04:25:09
-   -1 04:25:09.2
-  -1 04:25:09.15
- -1 04:25:09.154
-      -1 04:25:09
-    -1 04:25:09.2
-   -1 04:25:09.15
-  -1 04:25:09.154
- -1 04:25:09.1540
-       -1 04:25:09
-     -1 04:25:09.2
-    -1 04:25:09.15
-   -1 04:25:09.154
-  -1 04:25:09.1540
- -1 04:25:09.15395
-        -1 04:25:09
-      -1 04:25:09.2
-     -1 04:25:09.15
-    -1 04:25:09.154
-   -1 04:25:09.1540
-  -1 04:25:09.15395
- -1 04:25:09.153950
- *****
- -30:49
-  -30:49
-   -30:49
- -30:49:27
-  -30:49:27
-  -30:49:27
-   -30:49:27
- -30:49:27.1
- -30:49:27.1
-    -30:49:27
-  -30:49:27.1
- -30:49:27.11
- -30:49:27.11
-     -30:49:27
-   -30:49:27.1
-  -30:49:27.11
- -30:49:27.105
- -30:49:27.105
-      -30:49:27
-    -30:49:27.1
-   -30:49:27.11
-  -30:49:27.105
- -30:49:27.1053
- -30:49:27.1053
-       -30:49:27
-     -30:49:27.1
-    -30:49:27.11
-   -30:49:27.105
-  -30:49:27.1053
- -30:49:27.10533
- -30:49:27.10533
- -1 06:49
-  -1 06:49
-   -1 06:49
- -1 06:49:27
-  -1 06:49:27
-   -1 06:49:27
- -1 06:49:27.1
-    -1 06:49:27
-  -1 06:49:27.1
- -1 06:49:27.11
-     -1 06:49:27
-   -1 06:49:27.1
-  -1 06:49:27.11
- -1 06:49:27.105
-      -1 06:49:27
-    -1 06:49:27.1
-   -1 06:49:27.11
-  -1 06:49:27.105
- -1 06:49:27.1053
-       -1 06:49:27
-     -1 06:49:27.1
-    -1 06:49:27.11
-   -1 06:49:27.105
-  -1 06:49:27.1053
- -1 06:49:27.10533
-        -1 06:49:27
-      -1 06:49:27.1
-     -1 06:49:27.11
-    -1 06:49:27.105
-   -1 06:49:27.1053
-  -1 06:49:27.10533
- -1 06:49:27.105330
- *****
- -26:57
-  -26:57
-   -26:57
- -26:57:52
-  -26:57:52
-  -26:57:52
-   -26:57:52
- -26:57:52.5
- -26:57:52.5
-    -26:57:52
-  -26:57:52.5
- -26:57:52.48
- -26:57:52.48
-     -26:57:52
-   -26:57:52.5
-  -26:57:52.48
- -26:57:52.482
- -26:57:52.482
-      -26:57:52
-    -26:57:52.5
-   -26:57:52.48
-  -26:57:52.482
- -26:57:52.4823
- -26:57:52.4823
-       -26:57:52
-     -26:57:52.5
-    -26:57:52.48
-   -26:57:52.482
-  -26:57:52.4823
- -26:57:52.48229
- -26:57:52.48229
- -1 02:57
-  -1 02:57
-   -1 02:57
- -1 02:57:52
-  -1 02:57:52
-   -1 02:57:52
- -1 02:57:52.5
-    -1 02:57:52
-  -1 02:57:52.5
- -1 02:57:52.48
-     -1 02:57:52
-   -1 02:57:52.5
-  -1 02:57:52.48
- -1 02:57:52.482
-      -1 02:57:52
-    -1 02:57:52.5
-   -1 02:57:52.48
-  -1 02:57:52.482
- -1 02:57:52.4823
-       -1 02:57:52
-     -1 02:57:52.5
-    -1 02:57:52.48
-   -1 02:57:52.482
-  -1 02:57:52.4823
- -1 02:57:52.48229
-        -1 02:57:52
-      -1 02:57:52.5
-     -1 02:57:52.48
-    -1 02:57:52.482
-   -1 02:57:52.4823
-  -1 02:57:52.48229
- -1 02:57:52.482290
- *****
- -40:45
-  -40:45
-   -40:45
- -40:45:44
-  -40:45:44
-  -40:45:44
-   -40:45:44
- -40:45:44.7
- -40:45:44.7
-    -40:45:44
-  -40:45:44.7
- -40:45:44.66
- -40:45:44.66
-     -40:45:44
-   -40:45:44.7
-  -40:45:44.66
- -40:45:44.658
- -40:45:44.658
-      -40:45:44
-    -40:45:44.7
-   -40:45:44.66
-  -40:45:44.658
- -40:45:44.6583
- -40:45:44.6583
-       -40:45:44
-     -40:45:44.7
-    -40:45:44.66
-   -40:45:44.658
-  -40:45:44.6583
- -40:45:44.65827
- -40:45:44.65827
- -1 16:45
-  -1 16:45
-   -1 16:45
- -1 16:45:44
-  -1 16:45:44
-   -1 16:45:44
- -1 16:45:44.7
-    -1 16:45:44
-  -1 16:45:44.7
- -1 16:45:44.66
-     -1 16:45:44
-   -1 16:45:44.7
-  -1 16:45:44.66
- -1 16:45:44.658
-      -1 16:45:44
-    -1 16:45:44.7
-   -1 16:45:44.66
-  -1 16:45:44.658
- -1 16:45:44.6583
-       -1 16:45:44
-     -1 16:45:44.7
-    -1 16:45:44.66
-   -1 16:45:44.658
-  -1 16:45:44.6583
- -1 16:45:44.65827
-        -1 16:45:44
-      -1 16:45:44.7
-     -1 16:45:44.66
-    -1 16:45:44.658
-   -1 16:45:44.6583
-  -1 16:45:44.65827
- -1 16:45:44.658270
- *****
- -45:30
-  -45:30
-   -45:30
- -45:30:57
-  -45:30:57
-  -45:30:57
-   -45:30:57
- -45:30:57.6
- -45:30:57.6
-    -45:30:57
-  -45:30:57.6
- -45:30:57.58
- -45:30:57.58
-     -45:30:57
-   -45:30:57.6
-  -45:30:57.58
- -45:30:57.582
- -45:30:57.582
-      -45:30:57
-    -45:30:57.6
-   -45:30:57.58
-  -45:30:57.582
- -45:30:57.5822
- -45:30:57.5822
-       -45:30:57
-     -45:30:57.6
-    -45:30:57.58
-   -45:30:57.582
-  -45:30:57.5822
- -45:30:57.58219
- -45:30:57.58219
- -1 21:30
-  -1 21:30
-   -1 21:30
- -1 21:30:57
-  -1 21:30:57
-   -1 21:30:57
- -1 21:30:57.6
-    -1 21:30:57
-  -1 21:30:57.6
- -1 21:30:57.58
-     -1 21:30:57
-   -1 21:30:57.6
-  -1 21:30:57.58
- -1 21:30:57.582
-      -1 21:30:57
-    -1 21:30:57.6
-   -1 21:30:57.58
-  -1 21:30:57.582
- -1 21:30:57.5822
-       -1 21:30:57
-     -1 21:30:57.6
-    -1 21:30:57.58
-   -1 21:30:57.582
-  -1 21:30:57.5822
- -1 21:30:57.58219
-        -1 21:30:57
-      -1 21:30:57.6
-     -1 21:30:57.58
-    -1 21:30:57.582
-   -1 21:30:57.5822
-  -1 21:30:57.58219
- -1 21:30:57.582190
- *****
- -46:30
-  -46:30
-   -46:30
- -46:30:04
-  -46:30:04
-  -46:30:04
-   -46:30:04
- -46:30:04.2
- -46:30:04.2
-    -46:30:04
-  -46:30:04.2
- -46:30:04.18
- -46:30:04.18
-     -46:30:04
-   -46:30:04.2
-  -46:30:04.18
- -46:30:04.183
- -46:30:04.183
-      -46:30:04
-    -46:30:04.2
-   -46:30:04.18
-  -46:30:04.183
- -46:30:04.1835
- -46:30:04.1835
-       -46:30:04
-     -46:30:04.2
-    -46:30:04.18
-   -46:30:04.183
-  -46:30:04.1835
- -46:30:04.18347
- -46:30:04.18347
- -1 22:30
-  -1 22:30
-   -1 22:30
- -1 22:30:04
-  -1 22:30:04
-   -1 22:30:04
- -1 22:30:04.2
-    -1 22:30:04
-  -1 22:30:04.2
- -1 22:30:04.18
-     -1 22:30:04
-   -1 22:30:04.2
-  -1 22:30:04.18
- -1 22:30:04.183
-      -1 22:30:04
-    -1 22:30:04.2
-   -1 22:30:04.18
-  -1 22:30:04.183
- -1 22:30:04.1835
-       -1 22:30:04
-     -1 22:30:04.2
-    -1 22:30:04.18
-   -1 22:30:04.183
-  -1 22:30:04.1835
- -1 22:30:04.18347
-        -1 22:30:04
-      -1 22:30:04.2
-     -1 22:30:04.18
-    -1 22:30:04.183
-   -1 22:30:04.1835
-  -1 22:30:04.18347
- -1 22:30:04.183470
- *****
- -25:56
-  -25:56
-   -25:56
- -25:56:51
-  -25:56:51
-  -25:56:51
-   -25:56:51
- -25:56:51.6
- -25:56:51.6
-    -25:56:51
-  -25:56:51.6
- -25:56:51.59
- -25:56:51.59
-     -25:56:51
-   -25:56:51.6
-  -25:56:51.59
- -25:56:51.593
- -25:56:51.593
-      -25:56:51
-    -25:56:51.6
-   -25:56:51.59
-  -25:56:51.593
- -25:56:51.5932
- -25:56:51.5932
-       -25:56:51
-     -25:56:51.6
-    -25:56:51.59
-   -25:56:51.593
-  -25:56:51.5932
- -25:56:51.59319
- -25:56:51.59319
- -1 01:56
-  -1 01:56
-   -1 01:56
- -1 01:56:51
-  -1 01:56:51
-   -1 01:56:51
- -1 01:56:51.6
-    -1 01:56:51
-  -1 01:56:51.6
- -1 01:56:51.59
-     -1 01:56:51
-   -1 01:56:51.6
-  -1 01:56:51.59
- -1 01:56:51.593
-      -1 01:56:51
-    -1 01:56:51.6
-   -1 01:56:51.59
-  -1 01:56:51.593
- -1 01:56:51.5932
-       -1 01:56:51
-     -1 01:56:51.6
-    -1 01:56:51.59
-   -1 01:56:51.593
-  -1 01:56:51.5932
- -1 01:56:51.59319
-        -1 01:56:51
-      -1 01:56:51.6
-     -1 01:56:51.59
-    -1 01:56:51.593
-   -1 01:56:51.5932
-  -1 01:56:51.59319
- -1 01:56:51.593190
- *****
- -48:00
-  -48:00
-   -48:00
- -48:00:00
-  -48:00:00
-  -48:00:00
-   -48:00:00
- -48:00:00.0
- -48:00:00.0
-    -48:00:00
-  -48:00:00.0
- -48:00:00.00
- -48:00:00.00
-     -48:00:00
-   -48:00:00.0
-  -48:00:00.00
- -48:00:00.000
- -48:00:00.000
-      -48:00:00
-    -48:00:00.0
-   -48:00:00.00
-  -48:00:00.000
- -48:00:00.0000
- -48:00:00.0000
-       -48:00:00
-     -48:00:00.0
-    -48:00:00.00
-   -48:00:00.000
-  -48:00:00.0000
- -48:00:00.00000
- -48:00:00.00000
- -2 00:00
-  -2 00:00
-   -2 00:00
- -2 00:00:00
-  -2 00:00:00
-   -2 00:00:00
- -2 00:00:00.0
-    -2 00:00:00
-  -2 00:00:00.0
- -2 00:00:00.00
-     -2 00:00:00
-   -2 00:00:00.0
-  -2 00:00:00.00
- -2 00:00:00.000
-      -2 00:00:00
-    -2 00:00:00.0
-   -2 00:00:00.00
-  -2 00:00:00.000
- -2 00:00:00.0000
-       -2 00:00:00
-     -2 00:00:00.0
-    -2 00:00:00.00
-   -2 00:00:00.000
-  -2 00:00:00.0000
- -2 00:00:00.00000
-        -2 00:00:00
-      -2 00:00:00.0
-     -2 00:00:00.00
-    -2 00:00:00.000
-   -2 00:00:00.0000
-  -2 00:00:00.00000
- -2 00:00:00.000000
- *****
- -52:50
-  -52:50
-   -52:50
- -52:50:38
-  -52:50:38
-  -52:50:38
-   -52:50:38
- -52:50:38.1
- -52:50:38.1
-    -52:50:38
-  -52:50:38.1
- -52:50:38.12
- -52:50:38.12
-     -52:50:38
-   -52:50:38.1
-  -52:50:38.12
- -52:50:38.123
- -52:50:38.123
-      -52:50:38
-    -52:50:38.1
-   -52:50:38.12
-  -52:50:38.123
- -52:50:38.1230
- -52:50:38.1230
-       -52:50:38
-     -52:50:38.1
-    -52:50:38.12
-   -52:50:38.123
-  -52:50:38.1230
- -52:50:38.12301
- -52:50:38.12301
- -2 04:50
-  -2 04:50
-   -2 04:50
- -2 04:50:38
-  -2 04:50:38
-   -2 04:50:38
- -2 04:50:38.1
-    -2 04:50:38
-  -2 04:50:38.1
- -2 04:50:38.12
-     -2 04:50:38
-   -2 04:50:38.1
-  -2 04:50:38.12
- -2 04:50:38.123
-      -2 04:50:38
-    -2 04:50:38.1
-   -2 04:50:38.12
-  -2 04:50:38.123
- -2 04:50:38.1230
-       -2 04:50:38
-     -2 04:50:38.1
-    -2 04:50:38.12
-   -2 04:50:38.123
-  -2 04:50:38.1230
- -2 04:50:38.12301
-        -2 04:50:38
-      -2 04:50:38.1
-     -2 04:50:38.12
-    -2 04:50:38.123
-   -2 04:50:38.1230
-  -2 04:50:38.12301
- -2 04:50:38.123010
- *****
- -60:31
-  -60:31
-   -60:31
- -60:31:35
-  -60:31:35
-  -60:31:35
-   -60:31:35
- -60:31:35.2
- -60:31:35.2
-    -60:31:35
-  -60:31:35.2
- -60:31:35.23
- -60:31:35.23
-     -60:31:35
-   -60:31:35.2
-  -60:31:35.23
- -60:31:35.235
- -60:31:35.235
-      -60:31:35
-    -60:31:35.2
-   -60:31:35.23
-  -60:31:35.235
- -60:31:35.2345
- -60:31:35.2345
-       -60:31:35
-     -60:31:35.2
-    -60:31:35.23
-   -60:31:35.235
-  -60:31:35.2345
- -60:31:35.23453
- -60:31:35.23453
- -2 12:31
-  -2 12:31
-   -2 12:31
- -2 12:31:35
-  -2 12:31:35
-   -2 12:31:35
- -2 12:31:35.2
-    -2 12:31:35
-  -2 12:31:35.2
- -2 12:31:35.23
-     -2 12:31:35
-   -2 12:31:35.2
-  -2 12:31:35.23
- -2 12:31:35.235
-      -2 12:31:35
-    -2 12:31:35.2
-   -2 12:31:35.23
-  -2 12:31:35.235
- -2 12:31:35.2345
-       -2 12:31:35
-     -2 12:31:35.2
-    -2 12:31:35.23
-   -2 12:31:35.235
-  -2 12:31:35.2345
- -2 12:31:35.23453
-        -2 12:31:35
-      -2 12:31:35.2
-     -2 12:31:35.23
-    -2 12:31:35.235
-   -2 12:31:35.2345
-  -2 12:31:35.23453
- -2 12:31:35.234530
- *****
- -60:47
-  -60:47
-   -60:47
- -60:47:53
-  -60:47:53
-  -60:47:53
-   -60:47:53
- -60:47:53.3
- -60:47:53.3
-    -60:47:53
-  -60:47:53.3
- -60:47:53.35
- -60:47:53.35
-     -60:47:53
-   -60:47:53.3
-  -60:47:53.35
- -60:47:53.345
- -60:47:53.345
-      -60:47:53
-    -60:47:53.3
-   -60:47:53.35
-  -60:47:53.345
- -60:47:53.3451
- -60:47:53.3451
-       -60:47:53
-     -60:47:53.3
-    -60:47:53.35
-   -60:47:53.345
-  -60:47:53.3451
- -60:47:53.34505
- -60:47:53.34505
- -2 12:47
-  -2 12:47
-   -2 12:47
- -2 12:47:53
-  -2 12:47:53
-   -2 12:47:53
- -2 12:47:53.3
-    -2 12:47:53
-  -2 12:47:53.3
- -2 12:47:53.35
-     -2 12:47:53
-   -2 12:47:53.3
-  -2 12:47:53.35
- -2 12:47:53.345
-      -2 12:47:53
-    -2 12:47:53.3
-   -2 12:47:53.35
-  -2 12:47:53.345
- -2 12:47:53.3451
-       -2 12:47:53
-     -2 12:47:53.3
-    -2 12:47:53.35
-   -2 12:47:53.345
-  -2 12:47:53.3451
- -2 12:47:53.34505
-        -2 12:47:53
-      -2 12:47:53.3
-     -2 12:47:53.35
-    -2 12:47:53.345
-   -2 12:47:53.3451
-  -2 12:47:53.34505
- -2 12:47:53.345050
- *****
- -49:26
-  -49:26
-   -49:26
- -49:26:00
-  -49:26:00
-  -49:26:00
-   -49:26:00
- -49:26:00.5
- -49:26:00.5
-    -49:26:00
-  -49:26:00.5
- -49:26:00.46
- -49:26:00.46
-     -49:26:00
-   -49:26:00.5
-  -49:26:00.46
- -49:26:00.456
- -49:26:00.456
-      -49:26:00
-    -49:26:00.5
-   -49:26:00.46
-  -49:26:00.456
- -49:26:00.4562
- -49:26:00.4562
-       -49:26:00
-     -49:26:00.5
-    -49:26:00.46
-   -49:26:00.456
-  -49:26:00.4562
- -49:26:00.45615
- -49:26:00.45615
- -2 01:26
-  -2 01:26
-   -2 01:26
- -2 01:26:00
-  -2 01:26:00
-   -2 01:26:00
- -2 01:26:00.5
-    -2 01:26:00
-  -2 01:26:00.5
- -2 01:26:00.46
-     -2 01:26:00
-   -2 01:26:00.5
-  -2 01:26:00.46
- -2 01:26:00.456
-      -2 01:26:00
-    -2 01:26:00.5
-   -2 01:26:00.46
-  -2 01:26:00.456
- -2 01:26:00.4562
-       -2 01:26:00
-     -2 01:26:00.5
-    -2 01:26:00.46
-   -2 01:26:00.456
-  -2 01:26:00.4562
- -2 01:26:00.45615
-        -2 01:26:00
-      -2 01:26:00.5
-     -2 01:26:00.46
-    -2 01:26:00.456
-   -2 01:26:00.4562
-  -2 01:26:00.45615
- -2 01:26:00.456150
- *****
- -68:58
-  -68:58
-   -68:58
- -68:58:11
-  -68:58:11
-  -68:58:11
-   -68:58:11
- -68:58:11.6
- -68:58:11.6
-    -68:58:11
-  -68:58:11.6
- -68:58:11.57
- -68:58:11.57
-     -68:58:11
-   -68:58:11.6
-  -68:58:11.57
- -68:58:11.567
- -68:58:11.567
-      -68:58:11
-    -68:58:11.6
-   -68:58:11.57
-  -68:58:11.567
- -68:58:11.5668
- -68:58:11.5668
-       -68:58:11
-     -68:58:11.6
-    -68:58:11.57
-   -68:58:11.567
-  -68:58:11.5668
- -68:58:11.56677
- -68:58:11.56677
- -2 20:58
-  -2 20:58
-   -2 20:58
- -2 20:58:11
-  -2 20:58:11
-   -2 20:58:11
- -2 20:58:11.6
-    -2 20:58:11
-  -2 20:58:11.6
- -2 20:58:11.57
-     -2 20:58:11
-   -2 20:58:11.6
-  -2 20:58:11.57
- -2 20:58:11.567
-      -2 20:58:11
-    -2 20:58:11.6
-   -2 20:58:11.57
-  -2 20:58:11.567
- -2 20:58:11.5668
-       -2 20:58:11
-     -2 20:58:11.6
-    -2 20:58:11.57
-   -2 20:58:11.567
-  -2 20:58:11.5668
- -2 20:58:11.56677
-        -2 20:58:11
-      -2 20:58:11.6
-     -2 20:58:11.57
-    -2 20:58:11.567
-   -2 20:58:11.5668
-  -2 20:58:11.56677
- -2 20:58:11.566770
- *****
- -55:36
-  -55:36
-   -55:36
- -55:36:05
-  -55:36:05
-  -55:36:05
-   -55:36:05
- -55:36:05.2
- -55:36:05.2
-    -55:36:05
-  -55:36:05.2
- -55:36:05.19
- -55:36:05.19
-     -55:36:05
-   -55:36:05.2
-  -55:36:05.19
- -55:36:05.190
- -55:36:05.190
-      -55:36:05
-    -55:36:05.2
-   -55:36:05.19
-  -55:36:05.190
- -55:36:05.1896
- -55:36:05.1896
-       -55:36:05
-     -55:36:05.2
-    -55:36:05.19
-   -55:36:05.190
-  -55:36:05.1896
- -55:36:05.18964
- -55:36:05.18964
- -2 07:36
-  -2 07:36
-   -2 07:36
- -2 07:36:05
-  -2 07:36:05
-   -2 07:36:05
- -2 07:36:05.2
-    -2 07:36:05
-  -2 07:36:05.2
- -2 07:36:05.19
-     -2 07:36:05
-   -2 07:36:05.2
-  -2 07:36:05.19
- -2 07:36:05.190
-      -2 07:36:05
-    -2 07:36:05.2
-   -2 07:36:05.19
-  -2 07:36:05.190
- -2 07:36:05.1896
-       -2 07:36:05
-     -2 07:36:05.2
-    -2 07:36:05.19
-   -2 07:36:05.190
-  -2 07:36:05.1896
- -2 07:36:05.18964
-        -2 07:36:05
-      -2 07:36:05.2
-     -2 07:36:05.19
-    -2 07:36:05.190
-   -2 07:36:05.1896
-  -2 07:36:05.18964
- -2 07:36:05.189640
- *****
- -63:43
-  -63:43
-   -63:43
- -63:43:49
-  -63:43:49
-  -63:43:49
-   -63:43:49
- -63:43:49.8
- -63:43:49.8
-    -63:43:49
-  -63:43:49.8
- -63:43:49.83
- -63:43:49.83
-     -63:43:49
-   -63:43:49.8
-  -63:43:49.83
- -63:43:49.831
- -63:43:49.831
-      -63:43:49
-    -63:43:49.8
-   -63:43:49.83
-  -63:43:49.831
- -63:43:49.8313
- -63:43:49.8313
-       -63:43:49
-     -63:43:49.8
-    -63:43:49.83
-   -63:43:49.831
-  -63:43:49.8313
- -63:43:49.83132
- -63:43:49.83132
- -2 15:43
-  -2 15:43
-   -2 15:43
- -2 15:43:49
-  -2 15:43:49
-   -2 15:43:49
- -2 15:43:49.8
-    -2 15:43:49
-  -2 15:43:49.8
- -2 15:43:49.83
-     -2 15:43:49
-   -2 15:43:49.8
-  -2 15:43:49.83
- -2 15:43:49.831
-      -2 15:43:49
-    -2 15:43:49.8
-   -2 15:43:49.83
-  -2 15:43:49.831
- -2 15:43:49.8313
-       -2 15:43:49
-     -2 15:43:49.8
-    -2 15:43:49.83
-   -2 15:43:49.831
-  -2 15:43:49.8313
- -2 15:43:49.83132
-        -2 15:43:49
-      -2 15:43:49.8
-     -2 15:43:49.83
-    -2 15:43:49.831
-   -2 15:43:49.8313
-  -2 15:43:49.83132
- -2 15:43:49.831320
- *****
- -52:25
-  -52:25
-   -52:25
- -52:25:09
-  -52:25:09
-  -52:25:09
-   -52:25:09
- -52:25:09.0
- -52:25:09.0
-    -52:25:09
-  -52:25:09.0
- -52:25:09.01
- -52:25:09.01
-     -52:25:09
-   -52:25:09.0
-  -52:25:09.01
- -52:25:09.013
- -52:25:09.013
-      -52:25:09
-    -52:25:09.0
-   -52:25:09.01
-  -52:25:09.013
- -52:25:09.0129
- -52:25:09.0129
-       -52:25:09
-     -52:25:09.0
-    -52:25:09.01
-   -52:25:09.013
-  -52:25:09.0129
- -52:25:09.01293
- -52:25:09.01293
- -2 04:25
-  -2 04:25
-   -2 04:25
- -2 04:25:09
-  -2 04:25:09
-   -2 04:25:09
- -2 04:25:09.0
-    -2 04:25:09
-  -2 04:25:09.0
- -2 04:25:09.01
-     -2 04:25:09
-   -2 04:25:09.0
-  -2 04:25:09.01
- -2 04:25:09.013
-      -2 04:25:09
-    -2 04:25:09.0
-   -2 04:25:09.01
-  -2 04:25:09.013
- -2 04:25:09.0129
-       -2 04:25:09
-     -2 04:25:09.0
-    -2 04:25:09.01
-   -2 04:25:09.013
-  -2 04:25:09.0129
- -2 04:25:09.01293
-        -2 04:25:09
-      -2 04:25:09.0
-     -2 04:25:09.01
-    -2 04:25:09.013
-   -2 04:25:09.0129
-  -2 04:25:09.01293
- -2 04:25:09.012930
- *****
- -54:49
-  -54:49
-   -54:49
- -54:49:27
-  -54:49:27
-  -54:49:27
-   -54:49:27
- -54:49:27.5
- -54:49:27.5
-    -54:49:27
-  -54:49:27.5
- -54:49:27.52
- -54:49:27.52
-     -54:49:27
-   -54:49:27.5
-  -54:49:27.52
- -54:49:27.524
- -54:49:27.524
-      -54:49:27
-    -54:49:27.5
-   -54:49:27.52
-  -54:49:27.524
- -54:49:27.5237
- -54:49:27.5237
-       -54:49:27
-     -54:49:27.5
-    -54:49:27.52
-   -54:49:27.524
-  -54:49:27.5237
- -54:49:27.52375
- -54:49:27.52375
- -2 06:49
-  -2 06:49
-   -2 06:49
- -2 06:49:27
-  -2 06:49:27
-   -2 06:49:27
- -2 06:49:27.5
-    -2 06:49:27
-  -2 06:49:27.5
- -2 06:49:27.52
-     -2 06:49:27
-   -2 06:49:27.5
-  -2 06:49:27.52
- -2 06:49:27.524
-      -2 06:49:27
-    -2 06:49:27.5
-   -2 06:49:27.52
-  -2 06:49:27.524
- -2 06:49:27.5237
-       -2 06:49:27
-     -2 06:49:27.5
-    -2 06:49:27.52
-   -2 06:49:27.524
-  -2 06:49:27.5237
- -2 06:49:27.52375
-        -2 06:49:27
-      -2 06:49:27.5
-     -2 06:49:27.52
-    -2 06:49:27.524
-   -2 06:49:27.5237
-  -2 06:49:27.52375
- -2 06:49:27.523750
- *****
- -50:57
-  -50:57
-   -50:57
- -50:57:52
-  -50:57:52
-  -50:57:52
-   -50:57:52
- -50:57:52.0
- -50:57:52.0
-    -50:57:52
-  -50:57:52.0
- -50:57:52.02
- -50:57:52.02
-     -50:57:52
-   -50:57:52.0
-  -50:57:52.02
- -50:57:52.016
- -50:57:52.016
-      -50:57:52
-    -50:57:52.0
-   -50:57:52.02
-  -50:57:52.016
- -50:57:52.0156
- -50:57:52.0156
-       -50:57:52
-     -50:57:52.0
-    -50:57:52.02
-   -50:57:52.016
-  -50:57:52.0156
- -50:57:52.01565
- -50:57:52.01565
- -2 02:57
-  -2 02:57
-   -2 02:57
- -2 02:57:52
-  -2 02:57:52
-   -2 02:57:52
- -2 02:57:52.0
-    -2 02:57:52
-  -2 02:57:52.0
- -2 02:57:52.02
-     -2 02:57:52
-   -2 02:57:52.0
-  -2 02:57:52.02
- -2 02:57:52.016
-      -2 02:57:52
-    -2 02:57:52.0
-   -2 02:57:52.02
-  -2 02:57:52.016
- -2 02:57:52.0156
-       -2 02:57:52
-     -2 02:57:52.0
-    -2 02:57:52.02
-   -2 02:57:52.016
-  -2 02:57:52.0156
- -2 02:57:52.01565
-        -2 02:57:52
-      -2 02:57:52.0
-     -2 02:57:52.02
-    -2 02:57:52.016
-   -2 02:57:52.0156
-  -2 02:57:52.01565
- -2 02:57:52.015650
- *****
- -64:45
-  -64:45
-   -64:45
- -64:45:44
-  -64:45:44
-  -64:45:44
-   -64:45:44
- -64:45:44.9
- -64:45:44.9
-    -64:45:44
-  -64:45:44.9
- -64:45:44.87
- -64:45:44.87
-     -64:45:44
-   -64:45:44.9
-  -64:45:44.87
- -64:45:44.865
- -64:45:44.865
-      -64:45:44
-    -64:45:44.9
-   -64:45:44.87
-  -64:45:44.865
- -64:45:44.8653
- -64:45:44.8653
-       -64:45:44
-     -64:45:44.9
-    -64:45:44.87
-   -64:45:44.865
-  -64:45:44.8653
- -64:45:44.86529
- -64:45:44.86529
- -2 16:45
-  -2 16:45
-   -2 16:45
- -2 16:45:44
-  -2 16:45:44
-   -2 16:45:44
- -2 16:45:44.9
-    -2 16:45:44
-  -2 16:45:44.9
- -2 16:45:44.87
-     -2 16:45:44
-   -2 16:45:44.9
-  -2 16:45:44.87
- -2 16:45:44.865
-      -2 16:45:44
-    -2 16:45:44.9
-   -2 16:45:44.87
-  -2 16:45:44.865
- -2 16:45:44.8653
-       -2 16:45:44
-     -2 16:45:44.9
-    -2 16:45:44.87
-   -2 16:45:44.865
-  -2 16:45:44.8653
- -2 16:45:44.86529
-        -2 16:45:44
-      -2 16:45:44.9
-     -2 16:45:44.87
-    -2 16:45:44.865
-   -2 16:45:44.8653
-  -2 16:45:44.86529
- -2 16:45:44.865290
- *****
- -69:30
-  -69:30
-   -69:30
- -69:30:57
-  -69:30:57
-  -69:30:57
-   -69:30:57
- -69:30:57.8
- -69:30:57.8
-    -69:30:57
-  -69:30:57.8
- -69:30:57.82
- -69:30:57.82
-     -69:30:57
-   -69:30:57.8
-  -69:30:57.82
- -69:30:57.820
- -69:30:57.820
-      -69:30:57
-    -69:30:57.8
-   -69:30:57.82
-  -69:30:57.820
- -69:30:57.8205
- -69:30:57.8205
-       -69:30:57
-     -69:30:57.8
-    -69:30:57.82
-   -69:30:57.820
-  -69:30:57.8205
- -69:30:57.82047
- -69:30:57.82047
- -2 21:30
-  -2 21:30
-   -2 21:30
- -2 21:30:57
-  -2 21:30:57
-   -2 21:30:57
- -2 21:30:57.8
-    -2 21:30:57
-  -2 21:30:57.8
- -2 21:30:57.82
-     -2 21:30:57
-   -2 21:30:57.8
-  -2 21:30:57.82
- -2 21:30:57.820
-      -2 21:30:57
-    -2 21:30:57.8
-   -2 21:30:57.82
-  -2 21:30:57.820
- -2 21:30:57.8205
-       -2 21:30:57
-     -2 21:30:57.8
-    -2 21:30:57.82
-   -2 21:30:57.820
-  -2 21:30:57.8205
- -2 21:30:57.82047
-        -2 21:30:57
-      -2 21:30:57.8
-     -2 21:30:57.82
-    -2 21:30:57.820
-   -2 21:30:57.8205
-  -2 21:30:57.82047
- -2 21:30:57.820470
- *****
- -52:25
-  -52:25
-   -52:25
- -52:25:09
-  -52:25:09
-  -52:25:09
-   -52:25:09
- -52:25:09.2
- -52:25:09.2
-    -52:25:09
-  -52:25:09.2
- -52:25:09.15
- -52:25:09.15
-     -52:25:09
-   -52:25:09.2
-  -52:25:09.15
- -52:25:09.154
- -52:25:09.154
-      -52:25:09
-    -52:25:09.2
-   -52:25:09.15
-  -52:25:09.154
- -52:25:09.1540
- -52:25:09.1540
-       -52:25:09
-     -52:25:09.2
-    -52:25:09.15
-   -52:25:09.154
-  -52:25:09.1540
- -52:25:09.15395
- -52:25:09.15395
- -2 04:25
-  -2 04:25
-   -2 04:25
- -2 04:25:09
-  -2 04:25:09
-   -2 04:25:09
- -2 04:25:09.2
-    -2 04:25:09
-  -2 04:25:09.2
- -2 04:25:09.15
-     -2 04:25:09
-   -2 04:25:09.2
-  -2 04:25:09.15
- -2 04:25:09.154
-      -2 04:25:09
-    -2 04:25:09.2
-   -2 04:25:09.15
-  -2 04:25:09.154
- -2 04:25:09.1540
-       -2 04:25:09
-     -2 04:25:09.2
-    -2 04:25:09.15
-   -2 04:25:09.154
-  -2 04:25:09.1540
- -2 04:25:09.15395
-        -2 04:25:09
-      -2 04:25:09.2
-     -2 04:25:09.15
-    -2 04:25:09.154
-   -2 04:25:09.1540
-  -2 04:25:09.15395
- -2 04:25:09.153950
- *****
- -54:49
-  -54:49
-   -54:49
- -54:49:27
-  -54:49:27
-  -54:49:27
-   -54:49:27
- -54:49:27.1
- -54:49:27.1
-    -54:49:27
-  -54:49:27.1
- -54:49:27.11
- -54:49:27.11
-     -54:49:27
-   -54:49:27.1
-  -54:49:27.11
- -54:49:27.105
- -54:49:27.105
-      -54:49:27
-    -54:49:27.1
-   -54:49:27.11
-  -54:49:27.105
- -54:49:27.1053
- -54:49:27.1053
-       -54:49:27
-     -54:49:27.1
-    -54:49:27.11
-   -54:49:27.105
-  -54:49:27.1053
- -54:49:27.10533
- -54:49:27.10533
- -2 06:49
-  -2 06:49
-   -2 06:49
- -2 06:49:27
-  -2 06:49:27
-   -2 06:49:27
- -2 06:49:27.1
-    -2 06:49:27
-  -2 06:49:27.1
- -2 06:49:27.11
-     -2 06:49:27
-   -2 06:49:27.1
-  -2 06:49:27.11
- -2 06:49:27.105
-      -2 06:49:27
-    -2 06:49:27.1
-   -2 06:49:27.11
-  -2 06:49:27.105
- -2 06:49:27.1053
-       -2 06:49:27
-     -2 06:49:27.1
-    -2 06:49:27.11
-   -2 06:49:27.105
-  -2 06:49:27.1053
- -2 06:49:27.10533
-        -2 06:49:27
-      -2 06:49:27.1
-     -2 06:49:27.11
-    -2 06:49:27.105
-   -2 06:49:27.1053
-  -2 06:49:27.10533
- -2 06:49:27.105330
- *****
- -50:57
-  -50:57
-   -50:57
- -50:57:52
-  -50:57:52
-  -50:57:52
-   -50:57:52
- -50:57:52.5
- -50:57:52.5
-    -50:57:52
-  -50:57:52.5
- -50:57:52.48
- -50:57:52.48
-     -50:57:52
-   -50:57:52.5
-  -50:57:52.48
- -50:57:52.482
- -50:57:52.482
-      -50:57:52
-    -50:57:52.5
-   -50:57:52.48
-  -50:57:52.482
- -50:57:52.4823
- -50:57:52.4823
-       -50:57:52
-     -50:57:52.5
-    -50:57:52.48
-   -50:57:52.482
-  -50:57:52.4823
- -50:57:52.48229
- -50:57:52.48229
- -2 02:57
-  -2 02:57
-   -2 02:57
- -2 02:57:52
-  -2 02:57:52
-   -2 02:57:52
- -2 02:57:52.5
-    -2 02:57:52
-  -2 02:57:52.5
- -2 02:57:52.48
-     -2 02:57:52
-   -2 02:57:52.5
-  -2 02:57:52.48
- -2 02:57:52.482
-      -2 02:57:52
-    -2 02:57:52.5
-   -2 02:57:52.48
-  -2 02:57:52.482
- -2 02:57:52.4823
-       -2 02:57:52
-     -2 02:57:52.5
-    -2 02:57:52.48
-   -2 02:57:52.482
-  -2 02:57:52.4823
- -2 02:57:52.48229
-        -2 02:57:52
-      -2 02:57:52.5
-     -2 02:57:52.48
-    -2 02:57:52.482
-   -2 02:57:52.4823
-  -2 02:57:52.48229
- -2 02:57:52.482290
- *****
- -64:45
-  -64:45
-   -64:45
- -64:45:44
-  -64:45:44
-  -64:45:44
-   -64:45:44
- -64:45:44.7
- -64:45:44.7
-    -64:45:44
-  -64:45:44.7
- -64:45:44.66
- -64:45:44.66
-     -64:45:44
-   -64:45:44.7
-  -64:45:44.66
- -64:45:44.658
- -64:45:44.658
-      -64:45:44
-    -64:45:44.7
-   -64:45:44.66
-  -64:45:44.658
- -64:45:44.6583
- -64:45:44.6583
-       -64:45:44
-     -64:45:44.7
-    -64:45:44.66
-   -64:45:44.658
-  -64:45:44.6583
- -64:45:44.65827
- -64:45:44.65827
- -2 16:45
-  -2 16:45
-   -2 16:45
- -2 16:45:44
-  -2 16:45:44
-   -2 16:45:44
- -2 16:45:44.7
-    -2 16:45:44
-  -2 16:45:44.7
- -2 16:45:44.66
-     -2 16:45:44
-   -2 16:45:44.7
-  -2 16:45:44.66
- -2 16:45:44.658
-      -2 16:45:44
-    -2 16:45:44.7
-   -2 16:45:44.66
-  -2 16:45:44.658
- -2 16:45:44.6583
-       -2 16:45:44
-     -2 16:45:44.7
-    -2 16:45:44.66
-   -2 16:45:44.658
-  -2 16:45:44.6583
- -2 16:45:44.65827
-        -2 16:45:44
-      -2 16:45:44.7
-     -2 16:45:44.66
-    -2 16:45:44.658
-   -2 16:45:44.6583
-  -2 16:45:44.65827
- -2 16:45:44.658270
- *****
- -69:30
-  -69:30
-   -69:30
- -69:30:57
-  -69:30:57
-  -69:30:57
-   -69:30:57
- -69:30:57.6
- -69:30:57.6
-    -69:30:57
-  -69:30:57.6
- -69:30:57.58
- -69:30:57.58
-     -69:30:57
-   -69:30:57.6
-  -69:30:57.58
- -69:30:57.582
- -69:30:57.582
-      -69:30:57
-    -69:30:57.6
-   -69:30:57.58
-  -69:30:57.582
- -69:30:57.5822
- -69:30:57.5822
-       -69:30:57
-     -69:30:57.6
-    -69:30:57.58
-   -69:30:57.582
-  -69:30:57.5822
- -69:30:57.58219
- -69:30:57.58219
- -2 21:30
-  -2 21:30
-   -2 21:30
- -2 21:30:57
-  -2 21:30:57
-   -2 21:30:57
- -2 21:30:57.6
-    -2 21:30:57
-  -2 21:30:57.6
- -2 21:30:57.58
-     -2 21:30:57
-   -2 21:30:57.6
-  -2 21:30:57.58
- -2 21:30:57.582
-      -2 21:30:57
-    -2 21:30:57.6
-   -2 21:30:57.58
-  -2 21:30:57.582
- -2 21:30:57.5822
-       -2 21:30:57
-     -2 21:30:57.6
-    -2 21:30:57.58
-   -2 21:30:57.582
-  -2 21:30:57.5822
- -2 21:30:57.58219
-        -2 21:30:57
-      -2 21:30:57.6
-     -2 21:30:57.58
-    -2 21:30:57.582
-   -2 21:30:57.5822
-  -2 21:30:57.58219
- -2 21:30:57.582190
- *****
- -70:30
-  -70:30
-   -70:30
- -70:30:04
-  -70:30:04
-  -70:30:04
-   -70:30:04
- -70:30:04.2
- -70:30:04.2
-    -70:30:04
-  -70:30:04.2
- -70:30:04.18
- -70:30:04.18
-     -70:30:04
-   -70:30:04.2
-  -70:30:04.18
- -70:30:04.183
- -70:30:04.183
-      -70:30:04
-    -70:30:04.2
-   -70:30:04.18
-  -70:30:04.183
- -70:30:04.1835
- -70:30:04.1835
-       -70:30:04
-     -70:30:04.2
-    -70:30:04.18
-   -70:30:04.183
-  -70:30:04.1835
- -70:30:04.18347
- -70:30:04.18347
- -2 22:30
-  -2 22:30
-   -2 22:30
- -2 22:30:04
-  -2 22:30:04
-   -2 22:30:04
- -2 22:30:04.2
-    -2 22:30:04
-  -2 22:30:04.2
- -2 22:30:04.18
-     -2 22:30:04
-   -2 22:30:04.2
-  -2 22:30:04.18
- -2 22:30:04.183
-      -2 22:30:04
-    -2 22:30:04.2
-   -2 22:30:04.18
-  -2 22:30:04.183
- -2 22:30:04.1835
-       -2 22:30:04
-     -2 22:30:04.2
-    -2 22:30:04.18
-   -2 22:30:04.183
-  -2 22:30:04.1835
- -2 22:30:04.18347
-        -2 22:30:04
-      -2 22:30:04.2
-     -2 22:30:04.18
-    -2 22:30:04.183
-   -2 22:30:04.1835
-  -2 22:30:04.18347
- -2 22:30:04.183470
- *****
- -49:56
-  -49:56
-   -49:56
- -49:56:51
-  -49:56:51
-  -49:56:51
-   -49:56:51
- -49:56:51.6
- -49:56:51.6
-    -49:56:51
-  -49:56:51.6
- -49:56:51.59
- -49:56:51.59
-     -49:56:51
-   -49:56:51.6
-  -49:56:51.59
- -49:56:51.593
- -49:56:51.593
-      -49:56:51
-    -49:56:51.6
-   -49:56:51.59
-  -49:56:51.593
- -49:56:51.5932
- -49:56:51.5932
-       -49:56:51
-     -49:56:51.6
-    -49:56:51.59
-   -49:56:51.593
-  -49:56:51.5932
- -49:56:51.59319
- -49:56:51.59319
- -2 01:56
-  -2 01:56
-   -2 01:56
- -2 01:56:51
-  -2 01:56:51
-   -2 01:56:51
- -2 01:56:51.6
-    -2 01:56:51
-  -2 01:56:51.6
- -2 01:56:51.59
-     -2 01:56:51
-   -2 01:56:51.6
-  -2 01:56:51.59
- -2 01:56:51.593
-      -2 01:56:51
-    -2 01:56:51.6
-   -2 01:56:51.59
-  -2 01:56:51.593
- -2 01:56:51.5932
-       -2 01:56:51
-     -2 01:56:51.6
-    -2 01:56:51.59
-   -2 01:56:51.593
-  -2 01:56:51.5932
- -2 01:56:51.59319
-        -2 01:56:51
-      -2 01:56:51.6
-     -2 01:56:51.59
-    -2 01:56:51.593
-   -2 01:56:51.5932
-  -2 01:56:51.59319
- -2 01:56:51.593190
- *****
- ******
- *******
- -1296:00
-  -1296:00
-   -1296:00
-   -1296:00
- -1296:00:00
- -1296:00:00
- -1296:00:00
-  -1296:00:00
-  -1296:00:00
-  -1296:00:00
-  -1296:00:00
-   -1296:00:00
- -1296:00:00.0
- -1296:00:00.0
- -1296:00:00.0
- -1296:00:00.0
-    -1296:00:00
-  -1296:00:00.0
- -1296:00:00.00
- -1296:00:00.00
- -1296:00:00.00
- -1296:00:00.00
-     -1296:00:00
-   -1296:00:00.0
-  -1296:00:00.00
- -1296:00:00.000
- -1296:00:00.000
- -1296:00:00.000
- -1296:00:00.000
- ********
- -54 00:00
-  -54 00:00
-   -54 00:00
- -54 00:00:00
-  -54 00:00:00
-  -54 00:00:00
-   -54 00:00:00
- -54 00:00:00.0
- -54 00:00:00.0
-    -54 00:00:00
-  -54 00:00:00.0
- -54 00:00:00.00
- -54 00:00:00.00
-     -54 00:00:00
-   -54 00:00:00.0
-  -54 00:00:00.00
- -54 00:00:00.000
- -54 00:00:00.000
-      -54 00:00:00
-    -54 00:00:00.0
-   -54 00:00:00.00
-  -54 00:00:00.000
- -54 00:00:00.0000
- -54 00:00:00.0000
-       -54 00:00:00
-     -54 00:00:00.0
-    -54 00:00:00.00
-   -54 00:00:00.000
-  -54 00:00:00.0000
- -54 00:00:00.00000
- -54 00:00:00.00000
- *****
- ******
- *******
- -1300:50
-  -1300:50
-   -1300:50
-   -1300:50
- -1300:50:38
- -1300:50:38
- -1300:50:38
-  -1300:50:38
-  -1300:50:38
-  -1300:50:38
-  -1300:50:38
-   -1300:50:38
- -1300:50:38.1
- -1300:50:38.1
- -1300:50:38.1
- -1300:50:38.1
-    -1300:50:38
-  -1300:50:38.1
- -1300:50:38.12
- -1300:50:38.12
- -1300:50:38.12
- -1300:50:38.12
-     -1300:50:38
-   -1300:50:38.1
-  -1300:50:38.12
- -1300:50:38.123
- -1300:50:38.123
- -1300:50:38.123
- -1300:50:38.123
- ********
- -54 04:50
-  -54 04:50
-   -54 04:50
- -54 04:50:38
-  -54 04:50:38
-  -54 04:50:38
-   -54 04:50:38
- -54 04:50:38.1
- -54 04:50:38.1
-    -54 04:50:38
-  -54 04:50:38.1
- -54 04:50:38.12
- -54 04:50:38.12
-     -54 04:50:38
-   -54 04:50:38.1
-  -54 04:50:38.12
- -54 04:50:38.123
- -54 04:50:38.123
-      -54 04:50:38
-    -54 04:50:38.1
-   -54 04:50:38.12
-  -54 04:50:38.123
- -54 04:50:38.1230
- -54 04:50:38.1230
-       -54 04:50:38
-     -54 04:50:38.1
-    -54 04:50:38.12
-   -54 04:50:38.123
-  -54 04:50:38.1230
- -54 04:50:38.12301
- -54 04:50:38.12301
- *****
- ******
- *******
- -1308:31
-  -1308:31
-   -1308:31
-   -1308:31
- -1308:31:35
- -1308:31:35
- -1308:31:35
-  -1308:31:35
-  -1308:31:35
-  -1308:31:35
-  -1308:31:35
-   -1308:31:35
- -1308:31:35.2
- -1308:31:35.2
- -1308:31:35.2
- -1308:31:35.2
-    -1308:31:35
-  -1308:31:35.2
- -1308:31:35.23
- -1308:31:35.23
- -1308:31:35.23
- -1308:31:35.23
-     -1308:31:35
-   -1308:31:35.2
-  -1308:31:35.23
- -1308:31:35.235
- -1308:31:35.235
- -1308:31:35.235
- -1308:31:35.235
- ********
- -54 12:31
-  -54 12:31
-   -54 12:31
- -54 12:31:35
-  -54 12:31:35
-  -54 12:31:35
-   -54 12:31:35
- -54 12:31:35.2
- -54 12:31:35.2
-    -54 12:31:35
-  -54 12:31:35.2
- -54 12:31:35.23
- -54 12:31:35.23
-     -54 12:31:35
-   -54 12:31:35.2
-  -54 12:31:35.23
- -54 12:31:35.235
- -54 12:31:35.235
-      -54 12:31:35
-    -54 12:31:35.2
-   -54 12:31:35.23
-  -54 12:31:35.235
- -54 12:31:35.2345
- -54 12:31:35.2345
-       -54 12:31:35
-     -54 12:31:35.2
-    -54 12:31:35.23
-   -54 12:31:35.235
-  -54 12:31:35.2345
- -54 12:31:35.23453
- -54 12:31:35.23453
- *****
- ******
- *******
- -1308:47
-  -1308:47
-   -1308:47
-   -1308:47
- -1308:47:53
- -1308:47:53
- -1308:47:53
-  -1308:47:53
-  -1308:47:53
-  -1308:47:53
-  -1308:47:53
-   -1308:47:53
- -1308:47:53.3
- -1308:47:53.3
- -1308:47:53.3
- -1308:47:53.3
-    -1308:47:53
-  -1308:47:53.3
- -1308:47:53.35
- -1308:47:53.35
- -1308:47:53.35
- -1308:47:53.35
-     -1308:47:53
-   -1308:47:53.3
-  -1308:47:53.35
- -1308:47:53.345
- -1308:47:53.345
- -1308:47:53.345
- -1308:47:53.345
- ********
- -54 12:47
-  -54 12:47
-   -54 12:47
- -54 12:47:53
-  -54 12:47:53
-  -54 12:47:53
-   -54 12:47:53
- -54 12:47:53.3
- -54 12:47:53.3
-    -54 12:47:53
-  -54 12:47:53.3
- -54 12:47:53.35
- -54 12:47:53.35
-     -54 12:47:53
-   -54 12:47:53.3
-  -54 12:47:53.35
- -54 12:47:53.345
- -54 12:47:53.345
-      -54 12:47:53
-    -54 12:47:53.3
-   -54 12:47:53.35
-  -54 12:47:53.345
- -54 12:47:53.3450
- -54 12:47:53.3450
-       -54 12:47:53
-     -54 12:47:53.3
-    -54 12:47:53.35
-   -54 12:47:53.345
-  -54 12:47:53.3450
- -54 12:47:53.34505
- -54 12:47:53.34505
- *****
- ******
- *******
- -1297:26
-  -1297:26
-   -1297:26
-   -1297:26
- -1297:26:00
- -1297:26:00
- -1297:26:00
-  -1297:26:00
-  -1297:26:00
-  -1297:26:00
-  -1297:26:00
-   -1297:26:00
- -1297:26:00.5
- -1297:26:00.5
- -1297:26:00.5
- -1297:26:00.5
-    -1297:26:00
-  -1297:26:00.5
- -1297:26:00.46
- -1297:26:00.46
- -1297:26:00.46
- -1297:26:00.46
-     -1297:26:00
-   -1297:26:00.5
-  -1297:26:00.46
- -1297:26:00.456
- -1297:26:00.456
- -1297:26:00.456
- -1297:26:00.456
- ********
- -54 01:26
-  -54 01:26
-   -54 01:26
- -54 01:26:00
-  -54 01:26:00
-  -54 01:26:00
-   -54 01:26:00
- -54 01:26:00.5
- -54 01:26:00.5
-    -54 01:26:00
-  -54 01:26:00.5
- -54 01:26:00.46
- -54 01:26:00.46
-     -54 01:26:00
-   -54 01:26:00.5
-  -54 01:26:00.46
- -54 01:26:00.456
- -54 01:26:00.456
-      -54 01:26:00
-    -54 01:26:00.5
-   -54 01:26:00.46
-  -54 01:26:00.456
- -54 01:26:00.4561
- -54 01:26:00.4561
-       -54 01:26:00
-     -54 01:26:00.5
-    -54 01:26:00.46
-   -54 01:26:00.456
-  -54 01:26:00.4561
- -54 01:26:00.45615
- -54 01:26:00.45615
- *****
- ******
- *******
- -1316:58
-  -1316:58
-   -1316:58
-   -1316:58
- -1316:58:11
- -1316:58:11
- -1316:58:11
-  -1316:58:11
-  -1316:58:11
-  -1316:58:11
-  -1316:58:11
-   -1316:58:11
- -1316:58:11.6
- -1316:58:11.6
- -1316:58:11.6
- -1316:58:11.6
-    -1316:58:11
-  -1316:58:11.6
- -1316:58:11.57
- -1316:58:11.57
- -1316:58:11.57
- -1316:58:11.57
-     -1316:58:11
-   -1316:58:11.6
-  -1316:58:11.57
- -1316:58:11.567
- -1316:58:11.567
- -1316:58:11.567
- -1316:58:11.567
- ********
- -54 20:58
-  -54 20:58
-   -54 20:58
- -54 20:58:11
-  -54 20:58:11
-  -54 20:58:11
-   -54 20:58:11
- -54 20:58:11.6
- -54 20:58:11.6
-    -54 20:58:11
-  -54 20:58:11.6
- -54 20:58:11.57
- -54 20:58:11.57
-     -54 20:58:11
-   -54 20:58:11.6
-  -54 20:58:11.57
- -54 20:58:11.567
- -54 20:58:11.567
-      -54 20:58:11
-    -54 20:58:11.6
-   -54 20:58:11.57
-  -54 20:58:11.567
- -54 20:58:11.5668
- -54 20:58:11.5668
-       -54 20:58:11
-     -54 20:58:11.6
-    -54 20:58:11.57
-   -54 20:58:11.567
-  -54 20:58:11.5668
- -54 20:58:11.56677
- -54 20:58:11.56677
- *****
- ******
- *******
- -1303:36
-  -1303:36
-   -1303:36
-   -1303:36
- -1303:36:05
- -1303:36:05
- -1303:36:05
-  -1303:36:05
-  -1303:36:05
-  -1303:36:05
-  -1303:36:05
-   -1303:36:05
- -1303:36:05.2
- -1303:36:05.2
- -1303:36:05.2
- -1303:36:05.2
-    -1303:36:05
-  -1303:36:05.2
- -1303:36:05.19
- -1303:36:05.19
- -1303:36:05.19
- -1303:36:05.19
-     -1303:36:05
-   -1303:36:05.2
-  -1303:36:05.19
- -1303:36:05.190
- -1303:36:05.190
- -1303:36:05.190
- -1303:36:05.190
- ********
- -54 07:36
-  -54 07:36
-   -54 07:36
- -54 07:36:05
-  -54 07:36:05
-  -54 07:36:05
-   -54 07:36:05
- -54 07:36:05.2
- -54 07:36:05.2
-    -54 07:36:05
-  -54 07:36:05.2
- -54 07:36:05.19
- -54 07:36:05.19
-     -54 07:36:05
-   -54 07:36:05.2
-  -54 07:36:05.19
- -54 07:36:05.190
- -54 07:36:05.190
-      -54 07:36:05
-    -54 07:36:05.2
-   -54 07:36:05.19
-  -54 07:36:05.190
- -54 07:36:05.1896
- -54 07:36:05.1896
-       -54 07:36:05
-     -54 07:36:05.2
-    -54 07:36:05.19
-   -54 07:36:05.190
-  -54 07:36:05.1896
- -54 07:36:05.18964
- -54 07:36:05.18964
- *****
- ******
- *******
- -1311:43
-  -1311:43
-   -1311:43
-   -1311:43
- -1311:43:49
- -1311:43:49
- -1311:43:49
-  -1311:43:49
-  -1311:43:49
-  -1311:43:49
-  -1311:43:49
-   -1311:43:49
- -1311:43:49.8
- -1311:43:49.8
- -1311:43:49.8
- -1311:43:49.8
-    -1311:43:49
-  -1311:43:49.8
- -1311:43:49.83
- -1311:43:49.83
- -1311:43:49.83
- -1311:43:49.83
-     -1311:43:49
-   -1311:43:49.8
-  -1311:43:49.83
- -1311:43:49.831
- -1311:43:49.831
- -1311:43:49.831
- -1311:43:49.831
- ********
- -54 15:43
-  -54 15:43
-   -54 15:43
- -54 15:43:49
-  -54 15:43:49
-  -54 15:43:49
-   -54 15:43:49
- -54 15:43:49.8
- -54 15:43:49.8
-    -54 15:43:49
-  -54 15:43:49.8
- -54 15:43:49.83
- -54 15:43:49.83
-     -54 15:43:49
-   -54 15:43:49.8
-  -54 15:43:49.83
- -54 15:43:49.831
- -54 15:43:49.831
-      -54 15:43:49
-    -54 15:43:49.8
-   -54 15:43:49.83
-  -54 15:43:49.831
- -54 15:43:49.8313
- -54 15:43:49.8313
-       -54 15:43:49
-     -54 15:43:49.8
-    -54 15:43:49.83
-   -54 15:43:49.831
-  -54 15:43:49.8313
- -54 15:43:49.83132
- -54 15:43:49.83132
- *****
- ******
- *******
- -1300:25
-  -1300:25
-   -1300:25
-   -1300:25
- -1300:25:09
- -1300:25:09
- -1300:25:09
-  -1300:25:09
-  -1300:25:09
-  -1300:25:09
-  -1300:25:09
-   -1300:25:09
- -1300:25:09.0
- -1300:25:09.0
- -1300:25:09.0
- -1300:25:09.0
-    -1300:25:09
-  -1300:25:09.0
- -1300:25:09.01
- -1300:25:09.01
- -1300:25:09.01
- -1300:25:09.01
-     -1300:25:09
-   -1300:25:09.0
-  -1300:25:09.01
- -1300:25:09.013
- -1300:25:09.013
- -1300:25:09.013
- -1300:25:09.013
- ********
- -54 04:25
-  -54 04:25
-   -54 04:25
- -54 04:25:09
-  -54 04:25:09
-  -54 04:25:09
-   -54 04:25:09
- -54 04:25:09.0
- -54 04:25:09.0
-    -54 04:25:09
-  -54 04:25:09.0
- -54 04:25:09.01
- -54 04:25:09.01
-     -54 04:25:09
-   -54 04:25:09.0
-  -54 04:25:09.01
- -54 04:25:09.013
- -54 04:25:09.013
-      -54 04:25:09
-    -54 04:25:09.0
-   -54 04:25:09.01
-  -54 04:25:09.013
- -54 04:25:09.0129
- -54 04:25:09.0129
-       -54 04:25:09
-     -54 04:25:09.0
-    -54 04:25:09.01
-   -54 04:25:09.013
-  -54 04:25:09.0129
- -54 04:25:09.01293
- -54 04:25:09.01293
- *****
- ******
- *******
- -1302:49
-  -1302:49
-   -1302:49
-   -1302:49
- -1302:49:27
- -1302:49:27
- -1302:49:27
-  -1302:49:27
-  -1302:49:27
-  -1302:49:27
-  -1302:49:27
-   -1302:49:27
- -1302:49:27.5
- -1302:49:27.5
- -1302:49:27.5
- -1302:49:27.5
-    -1302:49:27
-  -1302:49:27.5
- -1302:49:27.52
- -1302:49:27.52
- -1302:49:27.52
- -1302:49:27.52
-     -1302:49:27
-   -1302:49:27.5
-  -1302:49:27.52
- -1302:49:27.524
- -1302:49:27.524
- -1302:49:27.524
- -1302:49:27.524
- ********
- -54 06:49
-  -54 06:49
-   -54 06:49
- -54 06:49:27
-  -54 06:49:27
-  -54 06:49:27
-   -54 06:49:27
- -54 06:49:27.5
- -54 06:49:27.5
-    -54 06:49:27
-  -54 06:49:27.5
- -54 06:49:27.52
- -54 06:49:27.52
-     -54 06:49:27
-   -54 06:49:27.5
-  -54 06:49:27.52
- -54 06:49:27.524
- -54 06:49:27.524
-      -54 06:49:27
-    -54 06:49:27.5
-   -54 06:49:27.52
-  -54 06:49:27.524
- -54 06:49:27.5237
- -54 06:49:27.5237
-       -54 06:49:27
-     -54 06:49:27.5
-    -54 06:49:27.52
-   -54 06:49:27.524
-  -54 06:49:27.5237
- -54 06:49:27.52375
- -54 06:49:27.52375
- *****
- ******
- *******
- -1298:57
-  -1298:57
-   -1298:57
-   -1298:57
- -1298:57:52
- -1298:57:52
- -1298:57:52
-  -1298:57:52
-  -1298:57:52
-  -1298:57:52
-  -1298:57:52
-   -1298:57:52
- -1298:57:52.0
- -1298:57:52.0
- -1298:57:52.0
- -1298:57:52.0
-    -1298:57:52
-  -1298:57:52.0
- -1298:57:52.02
- -1298:57:52.02
- -1298:57:52.02
- -1298:57:52.02
-     -1298:57:52
-   -1298:57:52.0
-  -1298:57:52.02
- -1298:57:52.016
- -1298:57:52.016
- -1298:57:52.016
- -1298:57:52.016
- ********
- -54 02:57
-  -54 02:57
-   -54 02:57
- -54 02:57:52
-  -54 02:57:52
-  -54 02:57:52
-   -54 02:57:52
- -54 02:57:52.0
- -54 02:57:52.0
-    -54 02:57:52
-  -54 02:57:52.0
- -54 02:57:52.02
- -54 02:57:52.02
-     -54 02:57:52
-   -54 02:57:52.0
-  -54 02:57:52.02
- -54 02:57:52.016
- -54 02:57:52.016
-      -54 02:57:52
-    -54 02:57:52.0
-   -54 02:57:52.02
-  -54 02:57:52.016
- -54 02:57:52.0157
- -54 02:57:52.0157
-       -54 02:57:52
-     -54 02:57:52.0
-    -54 02:57:52.02
-   -54 02:57:52.016
-  -54 02:57:52.0157
- -54 02:57:52.01565
- -54 02:57:52.01565
- *****
- ******
- *******
- -1312:45
-  -1312:45
-   -1312:45
-   -1312:45
- -1312:45:44
- -1312:45:44
- -1312:45:44
-  -1312:45:44
-  -1312:45:44
-  -1312:45:44
-  -1312:45:44
-   -1312:45:44
- -1312:45:44.9
- -1312:45:44.9
- -1312:45:44.9
- -1312:45:44.9
-    -1312:45:44
-  -1312:45:44.9
- -1312:45:44.87
- -1312:45:44.87
- -1312:45:44.87
- -1312:45:44.87
-     -1312:45:44
-   -1312:45:44.9
-  -1312:45:44.87
- -1312:45:44.865
- -1312:45:44.865
- -1312:45:44.865
- -1312:45:44.865
- ********
- -54 16:45
-  -54 16:45
-   -54 16:45
- -54 16:45:44
-  -54 16:45:44
-  -54 16:45:44
-   -54 16:45:44
- -54 16:45:44.9
- -54 16:45:44.9
-    -54 16:45:44
-  -54 16:45:44.9
- -54 16:45:44.87
- -54 16:45:44.87
-     -54 16:45:44
-   -54 16:45:44.9
-  -54 16:45:44.87
- -54 16:45:44.865
- -54 16:45:44.865
-      -54 16:45:44
-    -54 16:45:44.9
-   -54 16:45:44.87
-  -54 16:45:44.865
- -54 16:45:44.8653
- -54 16:45:44.8653
-       -54 16:45:44
-     -54 16:45:44.9
-    -54 16:45:44.87
-   -54 16:45:44.865
-  -54 16:45:44.8653
- -54 16:45:44.86529
- -54 16:45:44.86529
- *****
- ******
- *******
- -1317:30
-  -1317:30
-   -1317:30
-   -1317:30
- -1317:30:57
- -1317:30:57
- -1317:30:57
-  -1317:30:57
-  -1317:30:57
-  -1317:30:57
-  -1317:30:57
-   -1317:30:57
- -1317:30:57.8
- -1317:30:57.8
- -1317:30:57.8
- -1317:30:57.8
-    -1317:30:57
-  -1317:30:57.8
- -1317:30:57.82
- -1317:30:57.82
- -1317:30:57.82
- -1317:30:57.82
-     -1317:30:57
-   -1317:30:57.8
-  -1317:30:57.82
- -1317:30:57.820
- -1317:30:57.820
- -1317:30:57.820
- -1317:30:57.820
- ********
- -54 21:30
-  -54 21:30
-   -54 21:30
- -54 21:30:57
-  -54 21:30:57
-  -54 21:30:57
-   -54 21:30:57
- -54 21:30:57.8
- -54 21:30:57.8
-    -54 21:30:57
-  -54 21:30:57.8
- -54 21:30:57.82
- -54 21:30:57.82
-     -54 21:30:57
-   -54 21:30:57.8
-  -54 21:30:57.82
- -54 21:30:57.820
- -54 21:30:57.820
-      -54 21:30:57
-    -54 21:30:57.8
-   -54 21:30:57.82
-  -54 21:30:57.820
- -54 21:30:57.8205
- -54 21:30:57.8205
-       -54 21:30:57
-     -54 21:30:57.8
-    -54 21:30:57.82
-   -54 21:30:57.820
-  -54 21:30:57.8205
- -54 21:30:57.82047
- -54 21:30:57.82047
- *****
- ******
- *******
- -1300:25
-  -1300:25
-   -1300:25
-   -1300:25
- -1300:25:09
- -1300:25:09
- -1300:25:09
-  -1300:25:09
-  -1300:25:09
-  -1300:25:09
-  -1300:25:09
-   -1300:25:09
- -1300:25:09.2
- -1300:25:09.2
- -1300:25:09.2
- -1300:25:09.2
-    -1300:25:09
-  -1300:25:09.2
- -1300:25:09.15
- -1300:25:09.15
- -1300:25:09.15
- -1300:25:09.15
-     -1300:25:09
-   -1300:25:09.2
-  -1300:25:09.15
- -1300:25:09.154
- -1300:25:09.154
- -1300:25:09.154
- -1300:25:09.154
- ********
- -54 04:25
-  -54 04:25
-   -54 04:25
- -54 04:25:09
-  -54 04:25:09
-  -54 04:25:09
-   -54 04:25:09
- -54 04:25:09.2
- -54 04:25:09.2
-    -54 04:25:09
-  -54 04:25:09.2
- -54 04:25:09.15
- -54 04:25:09.15
-     -54 04:25:09
-   -54 04:25:09.2
-  -54 04:25:09.15
- -54 04:25:09.154
- -54 04:25:09.154
-      -54 04:25:09
-    -54 04:25:09.2
-   -54 04:25:09.15
-  -54 04:25:09.154
- -54 04:25:09.1540
- -54 04:25:09.1540
-       -54 04:25:09
-     -54 04:25:09.2
-    -54 04:25:09.15
-   -54 04:25:09.154
-  -54 04:25:09.1540
- -54 04:25:09.15395
- -54 04:25:09.15395
- *****
- ******
- *******
- -1302:49
-  -1302:49
-   -1302:49
-   -1302:49
- -1302:49:27
- -1302:49:27
- -1302:49:27
-  -1302:49:27
-  -1302:49:27
-  -1302:49:27
-  -1302:49:27
-   -1302:49:27
- -1302:49:27.1
- -1302:49:27.1
- -1302:49:27.1
- -1302:49:27.1
-    -1302:49:27
-  -1302:49:27.1
- -1302:49:27.11
- -1302:49:27.11
- -1302:49:27.11
- -1302:49:27.11
-     -1302:49:27
-   -1302:49:27.1
-  -1302:49:27.11
- -1302:49:27.105
- -1302:49:27.105
- -1302:49:27.105
- -1302:49:27.105
- ********
- -54 06:49
-  -54 06:49
-   -54 06:49
- -54 06:49:27
-  -54 06:49:27
-  -54 06:49:27
-   -54 06:49:27
- -54 06:49:27.1
- -54 06:49:27.1
-    -54 06:49:27
-  -54 06:49:27.1
- -54 06:49:27.11
- -54 06:49:27.11
-     -54 06:49:27
-   -54 06:49:27.1
-  -54 06:49:27.11
- -54 06:49:27.105
- -54 06:49:27.105
-      -54 06:49:27
-    -54 06:49:27.1
-   -54 06:49:27.11
-  -54 06:49:27.105
- -54 06:49:27.1053
- -54 06:49:27.1053
-       -54 06:49:27
-     -54 06:49:27.1
-    -54 06:49:27.11
-   -54 06:49:27.105
-  -54 06:49:27.1053
- -54 06:49:27.10533
- -54 06:49:27.10533
- *****
- ******
- *******
- -1298:57
-  -1298:57
-   -1298:57
-   -1298:57
- -1298:57:52
- -1298:57:52
- -1298:57:52
-  -1298:57:52
-  -1298:57:52
-  -1298:57:52
-  -1298:57:52
-   -1298:57:52
- -1298:57:52.5
- -1298:57:52.5
- -1298:57:52.5
- -1298:57:52.5
-    -1298:57:52
-  -1298:57:52.5
- -1298:57:52.48
- -1298:57:52.48
- -1298:57:52.48
- -1298:57:52.48
-     -1298:57:52
-   -1298:57:52.5
-  -1298:57:52.48
- -1298:57:52.482
- -1298:57:52.482
- -1298:57:52.482
- -1298:57:52.482
- ********
- -54 02:57
-  -54 02:57
-   -54 02:57
- -54 02:57:52
-  -54 02:57:52
-  -54 02:57:52
-   -54 02:57:52
- -54 02:57:52.5
- -54 02:57:52.5
-    -54 02:57:52
-  -54 02:57:52.5
- -54 02:57:52.48
- -54 02:57:52.48
-     -54 02:57:52
-   -54 02:57:52.5
-  -54 02:57:52.48
- -54 02:57:52.482
- -54 02:57:52.482
-      -54 02:57:52
-    -54 02:57:52.5
-   -54 02:57:52.48
-  -54 02:57:52.482
- -54 02:57:52.4823
- -54 02:57:52.4823
-       -54 02:57:52
-     -54 02:57:52.5
-    -54 02:57:52.48
-   -54 02:57:52.482
-  -54 02:57:52.4823
- -54 02:57:52.48229
- -54 02:57:52.48229
- *****
- ******
- *******
- -1312:45
-  -1312:45
-   -1312:45
-   -1312:45
- -1312:45:44
- -1312:45:44
- -1312:45:44
-  -1312:45:44
-  -1312:45:44
-  -1312:45:44
-  -1312:45:44
-   -1312:45:44
- -1312:45:44.7
- -1312:45:44.7
- -1312:45:44.7
- -1312:45:44.7
-    -1312:45:44
-  -1312:45:44.7
- -1312:45:44.66
- -1312:45:44.66
- -1312:45:44.66
- -1312:45:44.66
-     -1312:45:44
-   -1312:45:44.7
-  -1312:45:44.66
- -1312:45:44.658
- -1312:45:44.658
- -1312:45:44.658
- -1312:45:44.658
- ********
- -54 16:45
-  -54 16:45
-   -54 16:45
- -54 16:45:44
-  -54 16:45:44
-  -54 16:45:44
-   -54 16:45:44
- -54 16:45:44.7
- -54 16:45:44.7
-    -54 16:45:44
-  -54 16:45:44.7
- -54 16:45:44.66
- -54 16:45:44.66
-     -54 16:45:44
-   -54 16:45:44.7
-  -54 16:45:44.66
- -54 16:45:44.658
- -54 16:45:44.658
-      -54 16:45:44
-    -54 16:45:44.7
-   -54 16:45:44.66
-  -54 16:45:44.658
- -54 16:45:44.6583
- -54 16:45:44.6583
-       -54 16:45:44
-     -54 16:45:44.7
-    -54 16:45:44.66
-   -54 16:45:44.658
-  -54 16:45:44.6583
- -54 16:45:44.65827
- -54 16:45:44.65827
- *****
- ******
- *******
- -1317:30
-  -1317:30
-   -1317:30
-   -1317:30
- -1317:30:57
- -1317:30:57
- -1317:30:57
-  -1317:30:57
-  -1317:30:57
-  -1317:30:57
-  -1317:30:57
-   -1317:30:57
- -1317:30:57.6
- -1317:30:57.6
- -1317:30:57.6
- -1317:30:57.6
-    -1317:30:57
-  -1317:30:57.6
- -1317:30:57.58
- -1317:30:57.58
- -1317:30:57.58
- -1317:30:57.58
-     -1317:30:57
-   -1317:30:57.6
-  -1317:30:57.58
- -1317:30:57.582
- -1317:30:57.582
- -1317:30:57.582
- -1317:30:57.582
- ********
- -54 21:30
-  -54 21:30
-   -54 21:30
- -54 21:30:57
-  -54 21:30:57
-  -54 21:30:57
-   -54 21:30:57
- -54 21:30:57.6
- -54 21:30:57.6
-    -54 21:30:57
-  -54 21:30:57.6
- -54 21:30:57.58
- -54 21:30:57.58
-     -54 21:30:57
-   -54 21:30:57.6
-  -54 21:30:57.58
- -54 21:30:57.582
- -54 21:30:57.582
-      -54 21:30:57
-    -54 21:30:57.6
-   -54 21:30:57.58
-  -54 21:30:57.582
- -54 21:30:57.5822
- -54 21:30:57.5822
-       -54 21:30:57
-     -54 21:30:57.6
-    -54 21:30:57.58
-   -54 21:30:57.582
-  -54 21:30:57.5822
- -54 21:30:57.58219
- -54 21:30:57.58219
- *****
- ******
- *******
- -1318:30
-  -1318:30
-   -1318:30
-   -1318:30
- -1318:30:04
- -1318:30:04
- -1318:30:04
-  -1318:30:04
-  -1318:30:04
-  -1318:30:04
-  -1318:30:04
-   -1318:30:04
- -1318:30:04.2
- -1318:30:04.2
- -1318:30:04.2
- -1318:30:04.2
-    -1318:30:04
-  -1318:30:04.2
- -1318:30:04.18
- -1318:30:04.18
- -1318:30:04.18
- -1318:30:04.18
-     -1318:30:04
-   -1318:30:04.2
-  -1318:30:04.18
- -1318:30:04.183
- -1318:30:04.183
- -1318:30:04.183
- -1318:30:04.183
- ********
- -54 22:30
-  -54 22:30
-   -54 22:30
- -54 22:30:04
-  -54 22:30:04
-  -54 22:30:04
-   -54 22:30:04
- -54 22:30:04.2
- -54 22:30:04.2
-    -54 22:30:04
-  -54 22:30:04.2
- -54 22:30:04.18
- -54 22:30:04.18
-     -54 22:30:04
-   -54 22:30:04.2
-  -54 22:30:04.18
- -54 22:30:04.183
- -54 22:30:04.183
-      -54 22:30:04
-    -54 22:30:04.2
-   -54 22:30:04.18
-  -54 22:30:04.183
- -54 22:30:04.1835
- -54 22:30:04.1835
-       -54 22:30:04
-     -54 22:30:04.2
-    -54 22:30:04.18
-   -54 22:30:04.183
-  -54 22:30:04.1835
- -54 22:30:04.18347
- -54 22:30:04.18347
- *****
- ******
- *******
- -1297:56
-  -1297:56
-   -1297:56
-   -1297:56
- -1297:56:51
- -1297:56:51
- -1297:56:51
-  -1297:56:51
-  -1297:56:51
-  -1297:56:51
-  -1297:56:51
-   -1297:56:51
- -1297:56:51.6
- -1297:56:51.6
- -1297:56:51.6
- -1297:56:51.6
-    -1297:56:51
-  -1297:56:51.6
- -1297:56:51.59
- -1297:56:51.59
- -1297:56:51.59
- -1297:56:51.59
-     -1297:56:51
-   -1297:56:51.6
-  -1297:56:51.59
- -1297:56:51.593
- -1297:56:51.593
- -1297:56:51.593
- -1297:56:51.593
- ********
- -54 01:56
-  -54 01:56
-   -54 01:56
- -54 01:56:51
-  -54 01:56:51
-  -54 01:56:51
-   -54 01:56:51
- -54 01:56:51.6
- -54 01:56:51.6
-    -54 01:56:51
-  -54 01:56:51.6
- -54 01:56:51.59
- -54 01:56:51.59
-     -54 01:56:51
-   -54 01:56:51.6
-  -54 01:56:51.59
- -54 01:56:51.593
- -54 01:56:51.593
-      -54 01:56:51
-    -54 01:56:51.6
-   -54 01:56:51.59
-  -54 01:56:51.593
- -54 01:56:51.5932
- -54 01:56:51.5932
-       -54 01:56:51
-     -54 01:56:51.6
-    -54 01:56:51.59
-   -54 01:56:51.593
-  -54 01:56:51.5932
- -54 01:56:51.59319
- -54 01:56:51.59319
- *****
- ******
- *******
- ********
- -16344:00
-  -16344:00
-  -16344:00
-   -16344:00
-   -16344:00
-   -16344:00
- -16344:00:00
- -16344:00:00
- -16344:00:00
- -16344:00:00
-  -16344:00:00
-  -16344:00:00
-  -16344:00:00
-  -16344:00:00
-  -16344:00:00
-   -16344:00:00
- -16344:00:00.0
- -16344:00:00.0
- -16344:00:00.0
- -16344:00:00.0
- -16344:00:00.0
-    -16344:00:00
-  -16344:00:00.0
- -16344:00:00.00
- -16344:00:00.00
- -16344:00:00.00
- -16344:00:00.00
- -16344:00:00.00
- ********
- *********
- -681 00:00
-  -681 00:00
-   -681 00:00
- -681 00:00:00
- -681 00:00:00
-  -681 00:00:00
-  -681 00:00:00
-  -681 00:00:00
-   -681 00:00:00
- -681 00:00:00.0
- -681 00:00:00.0
- -681 00:00:00.0
-    -681 00:00:00
-  -681 00:00:00.0
- -681 00:00:00.00
- -681 00:00:00.00
- -681 00:00:00.00
-     -681 00:00:00
-   -681 00:00:00.0
-  -681 00:00:00.00
- -681 00:00:00.000
- -681 00:00:00.000
- -681 00:00:00.000
-      -681 00:00:00
-    -681 00:00:00.0
-   -681 00:00:00.00
-  -681 00:00:00.000
- -681 00:00:00.0000
- -681 00:00:00.0000
- -681 00:00:00.0000
- *****
- ******
- *******
- ********
- -16348:50
-  -16348:50
-  -16348:50
-   -16348:50
-   -16348:50
-   -16348:50
- -16348:50:38
- -16348:50:38
- -16348:50:38
- -16348:50:38
-  -16348:50:38
-  -16348:50:38
-  -16348:50:38
-  -16348:50:38
-  -16348:50:38
-   -16348:50:38
- -16348:50:38.1
- -16348:50:38.1
- -16348:50:38.1
- -16348:50:38.1
- -16348:50:38.1
-    -16348:50:38
-  -16348:50:38.1
- -16348:50:38.12
- -16348:50:38.12
- -16348:50:38.12
- -16348:50:38.12
- -16348:50:38.12
- ********
- *********
- -681 04:50
-  -681 04:50
-   -681 04:50
- -681 04:50:38
- -681 04:50:38
-  -681 04:50:38
-  -681 04:50:38
-  -681 04:50:38
-   -681 04:50:38
- -681 04:50:38.1
- -681 04:50:38.1
- -681 04:50:38.1
-    -681 04:50:38
-  -681 04:50:38.1
- -681 04:50:38.12
- -681 04:50:38.12
- -681 04:50:38.12
-     -681 04:50:38
-   -681 04:50:38.1
-  -681 04:50:38.12
- -681 04:50:38.123
- -681 04:50:38.123
- -681 04:50:38.123
-      -681 04:50:38
-    -681 04:50:38.1
-   -681 04:50:38.12
-  -681 04:50:38.123
- -681 04:50:38.1230
- -681 04:50:38.1230
- -681 04:50:38.1230
- *****
- ******
- *******
- ********
- -16356:31
-  -16356:31
-  -16356:31
-   -16356:31
-   -16356:31
-   -16356:31
- -16356:31:35
- -16356:31:35
- -16356:31:35
- -16356:31:35
-  -16356:31:35
-  -16356:31:35
-  -16356:31:35
-  -16356:31:35
-  -16356:31:35
-   -16356:31:35
- -16356:31:35.2
- -16356:31:35.2
- -16356:31:35.2
- -16356:31:35.2
- -16356:31:35.2
-    -16356:31:35
-  -16356:31:35.2
- -16356:31:35.23
- -16356:31:35.23
- -16356:31:35.23
- -16356:31:35.23
- -16356:31:35.23
- ********
- *********
- -681 12:31
-  -681 12:31
-   -681 12:31
- -681 12:31:35
- -681 12:31:35
-  -681 12:31:35
-  -681 12:31:35
-  -681 12:31:35
-   -681 12:31:35
- -681 12:31:35.2
- -681 12:31:35.2
- -681 12:31:35.2
-    -681 12:31:35
-  -681 12:31:35.2
- -681 12:31:35.23
- -681 12:31:35.23
- -681 12:31:35.23
-     -681 12:31:35
-   -681 12:31:35.2
-  -681 12:31:35.23
- -681 12:31:35.235
- -681 12:31:35.235
- -681 12:31:35.235
-      -681 12:31:35
-    -681 12:31:35.2
-   -681 12:31:35.23
-  -681 12:31:35.235
- -681 12:31:35.2345
- -681 12:31:35.2345
- -681 12:31:35.2345
- *****
- ******
- *******
- ********
- -16356:47
-  -16356:47
-  -16356:47
-   -16356:47
-   -16356:47
-   -16356:47
- -16356:47:53
- -16356:47:53
- -16356:47:53
- -16356:47:53
-  -16356:47:53
-  -16356:47:53
-  -16356:47:53
-  -16356:47:53
-  -16356:47:53
-   -16356:47:53
- -16356:47:53.3
- -16356:47:53.3
- -16356:47:53.3
- -16356:47:53.3
- -16356:47:53.3
-    -16356:47:53
-  -16356:47:53.3
- -16356:47:53.35
- -16356:47:53.35
- -16356:47:53.35
- -16356:47:53.35
- -16356:47:53.35
- ********
- *********
- -681 12:47
-  -681 12:47
-   -681 12:47
- -681 12:47:53
- -681 12:47:53
-  -681 12:47:53
-  -681 12:47:53
-  -681 12:47:53
-   -681 12:47:53
- -681 12:47:53.3
- -681 12:47:53.3
- -681 12:47:53.3
-    -681 12:47:53
-  -681 12:47:53.3
- -681 12:47:53.35
- -681 12:47:53.35
- -681 12:47:53.35
-     -681 12:47:53
-   -681 12:47:53.3
-  -681 12:47:53.35
- -681 12:47:53.345
- -681 12:47:53.345
- -681 12:47:53.345
-      -681 12:47:53
-    -681 12:47:53.3
-   -681 12:47:53.35
-  -681 12:47:53.345
- -681 12:47:53.3450
- -681 12:47:53.3450
- -681 12:47:53.3450
- *****
- ******
- *******
- ********
- -16345:26
-  -16345:26
-  -16345:26
-   -16345:26
-   -16345:26
-   -16345:26
- -16345:26:00
- -16345:26:00
- -16345:26:00
- -16345:26:00
-  -16345:26:00
-  -16345:26:00
-  -16345:26:00
-  -16345:26:00
-  -16345:26:00
-   -16345:26:00
- -16345:26:00.5
- -16345:26:00.5
- -16345:26:00.5
- -16345:26:00.5
- -16345:26:00.5
-    -16345:26:00
-  -16345:26:00.5
- -16345:26:00.46
- -16345:26:00.46
- -16345:26:00.46
- -16345:26:00.46
- -16345:26:00.46
- ********
- *********
- -681 01:26
-  -681 01:26
-   -681 01:26
- -681 01:26:00
- -681 01:26:00
-  -681 01:26:00
-  -681 01:26:00
-  -681 01:26:00
-   -681 01:26:00
- -681 01:26:00.5
- -681 01:26:00.5
- -681 01:26:00.5
-    -681 01:26:00
-  -681 01:26:00.5
- -681 01:26:00.46
- -681 01:26:00.46
- -681 01:26:00.46
-     -681 01:26:00
-   -681 01:26:00.5
-  -681 01:26:00.46
- -681 01:26:00.456
- -681 01:26:00.456
- -681 01:26:00.456
-      -681 01:26:00
-    -681 01:26:00.5
-   -681 01:26:00.46
-  -681 01:26:00.456
- -681 01:26:00.4562
- -681 01:26:00.4562
- -681 01:26:00.4562
- *****
- ******
- *******
- ********
- -16364:58
-  -16364:58
-  -16364:58
-   -16364:58
-   -16364:58
-   -16364:58
- -16364:58:11
- -16364:58:11
- -16364:58:11
- -16364:58:11
-  -16364:58:11
-  -16364:58:11
-  -16364:58:11
-  -16364:58:11
-  -16364:58:11
-   -16364:58:11
- -16364:58:11.6
- -16364:58:11.6
- -16364:58:11.6
- -16364:58:11.6
- -16364:58:11.6
-    -16364:58:11
-  -16364:58:11.6
- -16364:58:11.57
- -16364:58:11.57
- -16364:58:11.57
- -16364:58:11.57
- -16364:58:11.57
- ********
- *********
- -681 20:58
-  -681 20:58
-   -681 20:58
- -681 20:58:11
- -681 20:58:11
-  -681 20:58:11
-  -681 20:58:11
-  -681 20:58:11
-   -681 20:58:11
- -681 20:58:11.6
- -681 20:58:11.6
- -681 20:58:11.6
-    -681 20:58:11
-  -681 20:58:11.6
- -681 20:58:11.57
- -681 20:58:11.57
- -681 20:58:11.57
-     -681 20:58:11
-   -681 20:58:11.6
-  -681 20:58:11.57
- -681 20:58:11.567
- -681 20:58:11.567
- -681 20:58:11.567
-      -681 20:58:11
-    -681 20:58:11.6
-   -681 20:58:11.57
-  -681 20:58:11.567
- -681 20:58:11.5668
- -681 20:58:11.5668
- -681 20:58:11.5668
- *****
- ******
- *******
- ********
- -16351:36
-  -16351:36
-  -16351:36
-   -16351:36
-   -16351:36
-   -16351:36
- -16351:36:05
- -16351:36:05
- -16351:36:05
- -16351:36:05
-  -16351:36:05
-  -16351:36:05
-  -16351:36:05
-  -16351:36:05
-  -16351:36:05
-   -16351:36:05
- -16351:36:05.2
- -16351:36:05.2
- -16351:36:05.2
- -16351:36:05.2
- -16351:36:05.2
-    -16351:36:05
-  -16351:36:05.2
- -16351:36:05.19
- -16351:36:05.19
- -16351:36:05.19
- -16351:36:05.19
- -16351:36:05.19
- ********
- *********
- -681 07:36
-  -681 07:36
-   -681 07:36
- -681 07:36:05
- -681 07:36:05
-  -681 07:36:05
-  -681 07:36:05
-  -681 07:36:05
-   -681 07:36:05
- -681 07:36:05.2
- -681 07:36:05.2
- -681 07:36:05.2
-    -681 07:36:05
-  -681 07:36:05.2
- -681 07:36:05.19
- -681 07:36:05.19
- -681 07:36:05.19
-     -681 07:36:05
-   -681 07:36:05.2
-  -681 07:36:05.19
- -681 07:36:05.190
- -681 07:36:05.190
- -681 07:36:05.190
-      -681 07:36:05
-    -681 07:36:05.2
-   -681 07:36:05.19
-  -681 07:36:05.190
- -681 07:36:05.1896
- -681 07:36:05.1896
- -681 07:36:05.1896
- *****
- ******
- *******
- ********
- -16359:43
-  -16359:43
-  -16359:43
-   -16359:43
-   -16359:43
-   -16359:43
- -16359:43:49
- -16359:43:49
- -16359:43:49
- -16359:43:49
-  -16359:43:49
-  -16359:43:49
-  -16359:43:49
-  -16359:43:49
-  -16359:43:49
-   -16359:43:49
- -16359:43:49.8
- -16359:43:49.8
- -16359:43:49.8
- -16359:43:49.8
- -16359:43:49.8
-    -16359:43:49
-  -16359:43:49.8
- -16359:43:49.83
- -16359:43:49.83
- -16359:43:49.83
- -16359:43:49.83
- -16359:43:49.83
- ********
- *********
- -681 15:43
-  -681 15:43
-   -681 15:43
- -681 15:43:49
- -681 15:43:49
-  -681 15:43:49
-  -681 15:43:49
-  -681 15:43:49
-   -681 15:43:49
- -681 15:43:49.8
- -681 15:43:49.8
- -681 15:43:49.8
-    -681 15:43:49
-  -681 15:43:49.8
- -681 15:43:49.83
- -681 15:43:49.83
- -681 15:43:49.83
-     -681 15:43:49
-   -681 15:43:49.8
-  -681 15:43:49.83
- -681 15:43:49.831
- -681 15:43:49.831
- -681 15:43:49.831
-      -681 15:43:49
-    -681 15:43:49.8
-   -681 15:43:49.83
-  -681 15:43:49.831
- -681 15:43:49.8313
- -681 15:43:49.8313
- -681 15:43:49.8313
- *****
- ******
- *******
- ********
- -16348:25
-  -16348:25
-  -16348:25
-   -16348:25
-   -16348:25
-   -16348:25
- -16348:25:09
- -16348:25:09
- -16348:25:09
- -16348:25:09
-  -16348:25:09
-  -16348:25:09
-  -16348:25:09
-  -16348:25:09
-  -16348:25:09
-   -16348:25:09
- -16348:25:09.0
- -16348:25:09.0
- -16348:25:09.0
- -16348:25:09.0
- -16348:25:09.0
-    -16348:25:09
-  -16348:25:09.0
- -16348:25:09.01
- -16348:25:09.01
- -16348:25:09.01
- -16348:25:09.01
- -16348:25:09.01
- ********
- *********
- -681 04:25
-  -681 04:25
-   -681 04:25
- -681 04:25:09
- -681 04:25:09
-  -681 04:25:09
-  -681 04:25:09
-  -681 04:25:09
-   -681 04:25:09
- -681 04:25:09.0
- -681 04:25:09.0
- -681 04:25:09.0
-    -681 04:25:09
-  -681 04:25:09.0
- -681 04:25:09.01
- -681 04:25:09.01
- -681 04:25:09.01
-     -681 04:25:09
-   -681 04:25:09.0
-  -681 04:25:09.01
- -681 04:25:09.013
- -681 04:25:09.013
- -681 04:25:09.013
-      -681 04:25:09
-    -681 04:25:09.0
-   -681 04:25:09.01
-  -681 04:25:09.013
- -681 04:25:09.0129
- -681 04:25:09.0129
- -681 04:25:09.0129
- *****
- ******
- *******
- ********
- -16350:49
-  -16350:49
-  -16350:49
-   -16350:49
-   -16350:49
-   -16350:49
- -16350:49:27
- -16350:49:27
- -16350:49:27
- -16350:49:27
-  -16350:49:27
-  -16350:49:27
-  -16350:49:27
-  -16350:49:27
-  -16350:49:27
-   -16350:49:27
- -16350:49:27.5
- -16350:49:27.5
- -16350:49:27.5
- -16350:49:27.5
- -16350:49:27.5
-    -16350:49:27
-  -16350:49:27.5
- -16350:49:27.52
- -16350:49:27.52
- -16350:49:27.52
- -16350:49:27.52
- -16350:49:27.52
- ********
- *********
- -681 06:49
-  -681 06:49
-   -681 06:49
- -681 06:49:27
- -681 06:49:27
-  -681 06:49:27
-  -681 06:49:27
-  -681 06:49:27
-   -681 06:49:27
- -681 06:49:27.5
- -681 06:49:27.5
- -681 06:49:27.5
-    -681 06:49:27
-  -681 06:49:27.5
- -681 06:49:27.52
- -681 06:49:27.52
- -681 06:49:27.52
-     -681 06:49:27
-   -681 06:49:27.5
-  -681 06:49:27.52
- -681 06:49:27.524
- -681 06:49:27.524
- -681 06:49:27.524
-      -681 06:49:27
-    -681 06:49:27.5
-   -681 06:49:27.52
-  -681 06:49:27.524
- -681 06:49:27.5237
- -681 06:49:27.5237
- -681 06:49:27.5237
- *****
- ******
- *******
- ********
- -16346:57
-  -16346:57
-  -16346:57
-   -16346:57
-   -16346:57
-   -16346:57
- -16346:57:52
- -16346:57:52
- -16346:57:52
- -16346:57:52
-  -16346:57:52
-  -16346:57:52
-  -16346:57:52
-  -16346:57:52
-  -16346:57:52
-   -16346:57:52
- -16346:57:52.0
- -16346:57:52.0
- -16346:57:52.0
- -16346:57:52.0
- -16346:57:52.0
-    -16346:57:52
-  -16346:57:52.0
- -16346:57:52.02
- -16346:57:52.02
- -16346:57:52.02
- -16346:57:52.02
- -16346:57:52.02
- ********
- *********
- -681 02:57
-  -681 02:57
-   -681 02:57
- -681 02:57:52
- -681 02:57:52
-  -681 02:57:52
-  -681 02:57:52
-  -681 02:57:52
-   -681 02:57:52
- -681 02:57:52.0
- -681 02:57:52.0
- -681 02:57:52.0
-    -681 02:57:52
-  -681 02:57:52.0
- -681 02:57:52.02
- -681 02:57:52.02
- -681 02:57:52.02
-     -681 02:57:52
-   -681 02:57:52.0
-  -681 02:57:52.02
- -681 02:57:52.016
- -681 02:57:52.016
- -681 02:57:52.016
-      -681 02:57:52
-    -681 02:57:52.0
-   -681 02:57:52.02
-  -681 02:57:52.016
- -681 02:57:52.0156
- -681 02:57:52.0156
- -681 02:57:52.0156
- *****
- ******
- *******
- ********
- -16360:45
-  -16360:45
-  -16360:45
-   -16360:45
-   -16360:45
-   -16360:45
- -16360:45:44
- -16360:45:44
- -16360:45:44
- -16360:45:44
-  -16360:45:44
-  -16360:45:44
-  -16360:45:44
-  -16360:45:44
-  -16360:45:44
-   -16360:45:44
- -16360:45:44.9
- -16360:45:44.9
- -16360:45:44.9
- -16360:45:44.9
- -16360:45:44.9
-    -16360:45:44
-  -16360:45:44.9
- -16360:45:44.87
- -16360:45:44.87
- -16360:45:44.87
- -16360:45:44.87
- -16360:45:44.87
- ********
- *********
- -681 16:45
-  -681 16:45
-   -681 16:45
- -681 16:45:44
- -681 16:45:44
-  -681 16:45:44
-  -681 16:45:44
-  -681 16:45:44
-   -681 16:45:44
- -681 16:45:44.9
- -681 16:45:44.9
- -681 16:45:44.9
-    -681 16:45:44
-  -681 16:45:44.9
- -681 16:45:44.87
- -681 16:45:44.87
- -681 16:45:44.87
-     -681 16:45:44
-   -681 16:45:44.9
-  -681 16:45:44.87
- -681 16:45:44.865
- -681 16:45:44.865
- -681 16:45:44.865
-      -681 16:45:44
-    -681 16:45:44.9
-   -681 16:45:44.87
-  -681 16:45:44.865
- -681 16:45:44.8653
- -681 16:45:44.8653
- -681 16:45:44.8653
- *****
- ******
- *******
- ********
- -16365:30
-  -16365:30
-  -16365:30
-   -16365:30
-   -16365:30
-   -16365:30
- -16365:30:57
- -16365:30:57
- -16365:30:57
- -16365:30:57
-  -16365:30:57
-  -16365:30:57
-  -16365:30:57
-  -16365:30:57
-  -16365:30:57
-   -16365:30:57
- -16365:30:57.8
- -16365:30:57.8
- -16365:30:57.8
- -16365:30:57.8
- -16365:30:57.8
-    -16365:30:57
-  -16365:30:57.8
- -16365:30:57.82
- -16365:30:57.82
- -16365:30:57.82
- -16365:30:57.82
- -16365:30:57.82
- ********
- *********
- -681 21:30
-  -681 21:30
-   -681 21:30
- -681 21:30:57
- -681 21:30:57
-  -681 21:30:57
-  -681 21:30:57
-  -681 21:30:57
-   -681 21:30:57
- -681 21:30:57.8
- -681 21:30:57.8
- -681 21:30:57.8
-    -681 21:30:57
-  -681 21:30:57.8
- -681 21:30:57.82
- -681 21:30:57.82
- -681 21:30:57.82
-     -681 21:30:57
-   -681 21:30:57.8
-  -681 21:30:57.82
- -681 21:30:57.820
- -681 21:30:57.820
- -681 21:30:57.820
-      -681 21:30:57
-    -681 21:30:57.8
-   -681 21:30:57.82
-  -681 21:30:57.820
- -681 21:30:57.8205
- -681 21:30:57.8205
- -681 21:30:57.8205
- *****
- ******
- *******
- ********
- -16348:25
-  -16348:25
-  -16348:25
-   -16348:25
-   -16348:25
-   -16348:25
- -16348:25:09
- -16348:25:09
- -16348:25:09
- -16348:25:09
-  -16348:25:09
-  -16348:25:09
-  -16348:25:09
-  -16348:25:09
-  -16348:25:09
-   -16348:25:09
- -16348:25:09.2
- -16348:25:09.2
- -16348:25:09.2
- -16348:25:09.2
- -16348:25:09.2
-    -16348:25:09
-  -16348:25:09.2
- -16348:25:09.15
- -16348:25:09.15
- -16348:25:09.15
- -16348:25:09.15
- -16348:25:09.15
- ********
- *********
- -681 04:25
-  -681 04:25
-   -681 04:25
- -681 04:25:09
- -681 04:25:09
-  -681 04:25:09
-  -681 04:25:09
-  -681 04:25:09
-   -681 04:25:09
- -681 04:25:09.2
- -681 04:25:09.2
- -681 04:25:09.2
-    -681 04:25:09
-  -681 04:25:09.2
- -681 04:25:09.15
- -681 04:25:09.15
- -681 04:25:09.15
-     -681 04:25:09
-   -681 04:25:09.2
-  -681 04:25:09.15
- -681 04:25:09.154
- -681 04:25:09.154
- -681 04:25:09.154
-      -681 04:25:09
-    -681 04:25:09.2
-   -681 04:25:09.15
-  -681 04:25:09.154
- -681 04:25:09.1539
- -681 04:25:09.1539
- -681 04:25:09.1539
- *****
- ******
- *******
- ********
- -16350:49
-  -16350:49
-  -16350:49
-   -16350:49
-   -16350:49
-   -16350:49
- -16350:49:27
- -16350:49:27
- -16350:49:27
- -16350:49:27
-  -16350:49:27
-  -16350:49:27
-  -16350:49:27
-  -16350:49:27
-  -16350:49:27
-   -16350:49:27
- -16350:49:27.1
- -16350:49:27.1
- -16350:49:27.1
- -16350:49:27.1
- -16350:49:27.1
-    -16350:49:27
-  -16350:49:27.1
- -16350:49:27.11
- -16350:49:27.11
- -16350:49:27.11
- -16350:49:27.11
- -16350:49:27.11
- ********
- *********
- -681 06:49
-  -681 06:49
-   -681 06:49
- -681 06:49:27
- -681 06:49:27
-  -681 06:49:27
-  -681 06:49:27
-  -681 06:49:27
-   -681 06:49:27
- -681 06:49:27.1
- -681 06:49:27.1
- -681 06:49:27.1
-    -681 06:49:27
-  -681 06:49:27.1
- -681 06:49:27.11
- -681 06:49:27.11
- -681 06:49:27.11
-     -681 06:49:27
-   -681 06:49:27.1
-  -681 06:49:27.11
- -681 06:49:27.105
- -681 06:49:27.105
- -681 06:49:27.105
-      -681 06:49:27
-    -681 06:49:27.1
-   -681 06:49:27.11
-  -681 06:49:27.105
- -681 06:49:27.1053
- -681 06:49:27.1053
- -681 06:49:27.1053
- *****
- ******
- *******
- ********
- -16346:57
-  -16346:57
-  -16346:57
-   -16346:57
-   -16346:57
-   -16346:57
- -16346:57:52
- -16346:57:52
- -16346:57:52
- -16346:57:52
-  -16346:57:52
-  -16346:57:52
-  -16346:57:52
-  -16346:57:52
-  -16346:57:52
-   -16346:57:52
- -16346:57:52.5
- -16346:57:52.5
- -16346:57:52.5
- -16346:57:52.5
- -16346:57:52.5
-    -16346:57:52
-  -16346:57:52.5
- -16346:57:52.48
- -16346:57:52.48
- -16346:57:52.48
- -16346:57:52.48
- -16346:57:52.48
- ********
- *********
- -681 02:57
-  -681 02:57
-   -681 02:57
- -681 02:57:52
- -681 02:57:52
-  -681 02:57:52
-  -681 02:57:52
-  -681 02:57:52
-   -681 02:57:52
- -681 02:57:52.5
- -681 02:57:52.5
- -681 02:57:52.5
-    -681 02:57:52
-  -681 02:57:52.5
- -681 02:57:52.48
- -681 02:57:52.48
- -681 02:57:52.48
-     -681 02:57:52
-   -681 02:57:52.5
-  -681 02:57:52.48
- -681 02:57:52.482
- -681 02:57:52.482
- -681 02:57:52.482
-      -681 02:57:52
-    -681 02:57:52.5
-   -681 02:57:52.48
-  -681 02:57:52.482
- -681 02:57:52.4823
- -681 02:57:52.4823
- -681 02:57:52.4823
- *****
- ******
- *******
- ********
- -16360:45
-  -16360:45
-  -16360:45
-   -16360:45
-   -16360:45
-   -16360:45
- -16360:45:44
- -16360:45:44
- -16360:45:44
- -16360:45:44
-  -16360:45:44
-  -16360:45:44
-  -16360:45:44
-  -16360:45:44
-  -16360:45:44
-   -16360:45:44
- -16360:45:44.7
- -16360:45:44.7
- -16360:45:44.7
- -16360:45:44.7
- -16360:45:44.7
-    -16360:45:44
-  -16360:45:44.7
- -16360:45:44.66
- -16360:45:44.66
- -16360:45:44.66
- -16360:45:44.66
- -16360:45:44.66
- ********
- *********
- -681 16:45
-  -681 16:45
-   -681 16:45
- -681 16:45:44
- -681 16:45:44
-  -681 16:45:44
-  -681 16:45:44
-  -681 16:45:44
-   -681 16:45:44
- -681 16:45:44.7
- -681 16:45:44.7
- -681 16:45:44.7
-    -681 16:45:44
-  -681 16:45:44.7
- -681 16:45:44.66
- -681 16:45:44.66
- -681 16:45:44.66
-     -681 16:45:44
-   -681 16:45:44.7
-  -681 16:45:44.66
- -681 16:45:44.658
- -681 16:45:44.658
- -681 16:45:44.658
-      -681 16:45:44
-    -681 16:45:44.7
-   -681 16:45:44.66
-  -681 16:45:44.658
- -681 16:45:44.6583
- -681 16:45:44.6583
- -681 16:45:44.6583
- *****
- ******
- *******
- ********
- -16365:30
-  -16365:30
-  -16365:30
-   -16365:30
-   -16365:30
-   -16365:30
- -16365:30:57
- -16365:30:57
- -16365:30:57
- -16365:30:57
-  -16365:30:57
-  -16365:30:57
-  -16365:30:57
-  -16365:30:57
-  -16365:30:57
-   -16365:30:57
- -16365:30:57.6
- -16365:30:57.6
- -16365:30:57.6
- -16365:30:57.6
- -16365:30:57.6
-    -16365:30:57
-  -16365:30:57.6
- -16365:30:57.58
- -16365:30:57.58
- -16365:30:57.58
- -16365:30:57.58
- -16365:30:57.58
- ********
- *********
- -681 21:30
-  -681 21:30
-   -681 21:30
- -681 21:30:57
- -681 21:30:57
-  -681 21:30:57
-  -681 21:30:57
-  -681 21:30:57
-   -681 21:30:57
- -681 21:30:57.6
- -681 21:30:57.6
- -681 21:30:57.6
-    -681 21:30:57
-  -681 21:30:57.6
- -681 21:30:57.58
- -681 21:30:57.58
- -681 21:30:57.58
-     -681 21:30:57
-   -681 21:30:57.6
-  -681 21:30:57.58
- -681 21:30:57.582
- -681 21:30:57.582
- -681 21:30:57.582
-      -681 21:30:57
-    -681 21:30:57.6
-   -681 21:30:57.58
-  -681 21:30:57.582
- -681 21:30:57.5822
- -681 21:30:57.5822
- -681 21:30:57.5822
- *****
- ******
- *******
- ********
- -16366:30
-  -16366:30
-  -16366:30
-   -16366:30
-   -16366:30
-   -16366:30
- -16366:30:04
- -16366:30:04
- -16366:30:04
- -16366:30:04
-  -16366:30:04
-  -16366:30:04
-  -16366:30:04
-  -16366:30:04
-  -16366:30:04
-   -16366:30:04
- -16366:30:04.2
- -16366:30:04.2
- -16366:30:04.2
- -16366:30:04.2
- -16366:30:04.2
-    -16366:30:04
-  -16366:30:04.2
- -16366:30:04.18
- -16366:30:04.18
- -16366:30:04.18
- -16366:30:04.18
- -16366:30:04.18
- ********
- *********
- -681 22:30
-  -681 22:30
-   -681 22:30
- -681 22:30:04
- -681 22:30:04
-  -681 22:30:04
-  -681 22:30:04
-  -681 22:30:04
-   -681 22:30:04
- -681 22:30:04.2
- -681 22:30:04.2
- -681 22:30:04.2
-    -681 22:30:04
-  -681 22:30:04.2
- -681 22:30:04.18
- -681 22:30:04.18
- -681 22:30:04.18
-     -681 22:30:04
-   -681 22:30:04.2
-  -681 22:30:04.18
- -681 22:30:04.183
- -681 22:30:04.183
- -681 22:30:04.183
-      -681 22:30:04
-    -681 22:30:04.2
-   -681 22:30:04.18
-  -681 22:30:04.183
- -681 22:30:04.1835
- -681 22:30:04.1835
- -681 22:30:04.1835
- *****
- ******
- *******
- ********
- -16345:56
-  -16345:56
-  -16345:56
-   -16345:56
-   -16345:56
-   -16345:56
- -16345:56:51
- -16345:56:51
- -16345:56:51
- -16345:56:51
-  -16345:56:51
-  -16345:56:51
-  -16345:56:51
-  -16345:56:51
-  -16345:56:51
-   -16345:56:51
- -16345:56:51.6
- -16345:56:51.6
- -16345:56:51.6
- -16345:56:51.6
- -16345:56:51.6
-    -16345:56:51
-  -16345:56:51.6
- -16345:56:51.59
- -16345:56:51.59
- -16345:56:51.59
- -16345:56:51.59
- -16345:56:51.59
- ********
- *********
- -681 01:56
-  -681 01:56
-   -681 01:56
- -681 01:56:51
- -681 01:56:51
-  -681 01:56:51
-  -681 01:56:51
-  -681 01:56:51
-   -681 01:56:51
- -681 01:56:51.6
- -681 01:56:51.6
- -681 01:56:51.6
-    -681 01:56:51
-  -681 01:56:51.6
- -681 01:56:51.59
- -681 01:56:51.59
- -681 01:56:51.59
-     -681 01:56:51
-   -681 01:56:51.6
-  -681 01:56:51.59
- -681 01:56:51.593
- -681 01:56:51.593
- -681 01:56:51.593
-      -681 01:56:51
-    -681 01:56:51.6
-   -681 01:56:51.59
-  -681 01:56:51.593
- -681 01:56:51.5932
- -681 01:56:51.5932
- -681 01:56:51.5932
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/formats/wkday-in.sh b/tests/formats/wkday-in.sh
deleted file mode 100755 (executable)
index 7738201..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-#! /bin/sh
-
-TEMPDIR=/tmp/pspp-tst-$$
-mkdir -p $TEMPDIR
-trap 'cd /; rm -rf $TEMPDIR' 0
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    exit 2;
-}
-
-pass()
-{
-    exit 0;
-}
-
-cd $TEMPDIR
-
-activity="write pspp syntax"
-cat > wkday-in.pspp <<EOF
-set errors=none.
-set mxwarns=10000000.
-data list /wkday2 1-2 (wkday)
-          wkday3 1-3 (wkday)
-           wkday4 1-4 (wkday)
-           wkday5 1-5 (wkday)
-           wkday6 1-6 (wkday)
-           wkday7 1-7 (wkday)
-           wkday8 1-8 (wkday)
-           wkday9 1-9 (wkday)
-           wkday10 1-10 (wkday).
-begin data.
-
-.
-monady
-tuseday
-wedensday
-thurdsay
-fridya
-saturady
-sudnay
-end data.
-formats all (wkday2).
-print outfile='wkday-in.out'/all.
-execute.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv wkday-in.pspp
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare output"
-diff -u wkday-in.out - <<EOF
-  .  .  .  .  .  .  .  .  . 
-  .  .  .  .  .  .  .  .  . 
- MO MO MO MO MO MO MO MO MO 
- TU TU TU TU TU TU TU TU TU 
- WE WE WE WE WE WE WE WE WE 
- TH TH TH TH TH TH TH TH TH 
- FR FR FR FR FR FR FR FR FR 
- SA SA SA SA SA SA SA SA SA 
- SU SU SU SU SU SU SU SU SU 
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/formats/wkday-out.sh b/tests/formats/wkday-out.sh
deleted file mode 100755 (executable)
index ad0c8cd..0000000
+++ /dev/null
@@ -1,785 +0,0 @@
-#! /bin/sh
-
-TEMPDIR=/tmp/pspp-tst-$$
-mkdir -p $TEMPDIR
-trap 'cd /; rm -rf $TEMPDIR' 0
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    exit 2;
-}
-
-pass()
-{
-    exit 0;
-}
-
-cd $TEMPDIR
-
-activity="write pspp syntax"
-cat > wkday-out.pspp <<EOF
-set errors=none.
-set mxwarns=10000000.
-set mxerrs=10000000.
-data list /x 1-10.
-begin data.
-
-0
-0.5
-0.9
-1
-2
-3
-4
-4.1
-4.5
-4.9
-5
-6
-7
-7.1
-7.5
-7.9
-8
-end data.
-do repeat format=wkday2 to wkday40.
-print outfile='wkday-out.out'/x(format).
-end repeat.
-execute.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv wkday-out.pspp
-if [ $? -eq 0 ] ; then no_result ; fi
-
-activity="compare output"
-diff -u wkday-out.out - <<EOF 
-  .
-   .
-    .
-     .
-      .
-       .
-        .
-         .
-          .
-           .
-            .
-             .
-              .
-               .
-                .
-                 .
-                  .
-                   .
-                    .
-                     .
-                      .
-                       .
-                        .
-                         .
-                          .
-                           .
-                            .
-                             .
-                              .
-                               .
-                                .
-                                 .
-                                  .
-                                   .
-                                    .
-                                     .
-                                      .
-                                       .
-                                        .
-  .
-   .
-    .
-     .
-      .
-       .
-        .
-         .
-          .
-           .
-            .
-             .
-              .
-               .
-                .
-                 .
-                  .
-                   .
-                    .
-                     .
-                      .
-                       .
-                        .
-                         .
-                          .
-                           .
-                            .
-                             .
-                              .
-                               .
-                                .
-                                 .
-                                  .
-                                   .
-                                    .
-                                     .
-                                      .
-                                       .
-                                        .
-  .
-   .
-    .
-     .
-      .
-       .
-        .
-         .
-          .
-           .
-            .
-             .
-              .
-               .
-                .
-                 .
-                  .
-                   .
-                    .
-                     .
-                      .
-                       .
-                        .
-                         .
-                          .
-                           .
-                            .
-                             .
-                              .
-                               .
-                                .
-                                 .
-                                  .
-                                   .
-                                    .
-                                     .
-                                      .
-                                       .
-                                        .
-  .
-   .
-    .
-     .
-      .
-       .
-        .
-         .
-          .
-           .
-            .
-             .
-              .
-               .
-                .
-                 .
-                  .
-                   .
-                    .
-                     .
-                      .
-                       .
-                        .
-                         .
-                          .
-                           .
-                            .
-                             .
-                              .
-                               .
-                                .
-                                 .
-                                  .
-                                   .
-                                    .
-                                     .
-                                      .
-                                       .
-                                        .
- SU
- SUN
- SUND
- SUNDA
- SUNDAY
- SUNDAY 
- SUNDAY  
- SUNDAY   
- SUNDAY    
- SUNDAY     
- SUNDAY      
- SUNDAY       
- SUNDAY        
- SUNDAY         
- SUNDAY          
- SUNDAY           
- SUNDAY            
- SUNDAY             
- SUNDAY              
- SUNDAY               
- SUNDAY                
- SUNDAY                 
- SUNDAY                  
- SUNDAY                   
- SUNDAY                    
- SUNDAY                     
- SUNDAY                      
- SUNDAY                       
- SUNDAY                        
- SUNDAY                         
- SUNDAY                          
- SUNDAY                           
- SUNDAY                            
- SUNDAY                             
- SUNDAY                              
- SUNDAY                               
- SUNDAY                                
- SUNDAY                                 
- SUNDAY                                  
- MO
- MON
- MOND
- MONDA
- MONDAY
- MONDAY 
- MONDAY  
- MONDAY   
- MONDAY    
- MONDAY     
- MONDAY      
- MONDAY       
- MONDAY        
- MONDAY         
- MONDAY          
- MONDAY           
- MONDAY            
- MONDAY             
- MONDAY              
- MONDAY               
- MONDAY                
- MONDAY                 
- MONDAY                  
- MONDAY                   
- MONDAY                    
- MONDAY                     
- MONDAY                      
- MONDAY                       
- MONDAY                        
- MONDAY                         
- MONDAY                          
- MONDAY                           
- MONDAY                            
- MONDAY                             
- MONDAY                              
- MONDAY                               
- MONDAY                                
- MONDAY                                 
- MONDAY                                  
- TU
- TUE
- TUES
- TUESD
- TUESDA
- TUESDAY
- TUESDAY 
- TUESDAY  
- TUESDAY   
- TUESDAY    
- TUESDAY     
- TUESDAY      
- TUESDAY       
- TUESDAY        
- TUESDAY         
- TUESDAY          
- TUESDAY           
- TUESDAY            
- TUESDAY             
- TUESDAY              
- TUESDAY               
- TUESDAY                
- TUESDAY                 
- TUESDAY                  
- TUESDAY                   
- TUESDAY                    
- TUESDAY                     
- TUESDAY                      
- TUESDAY                       
- TUESDAY                        
- TUESDAY                         
- TUESDAY                          
- TUESDAY                           
- TUESDAY                            
- TUESDAY                             
- TUESDAY                              
- TUESDAY                               
- TUESDAY                                
- TUESDAY                                 
- WE
- WED
- WEDN
- WEDNE
- WEDNES
- WEDNESD
- WEDNESDA
- WEDNESDAY
- WEDNESDAY 
- WEDNESDAY  
- WEDNESDAY   
- WEDNESDAY    
- WEDNESDAY     
- WEDNESDAY      
- WEDNESDAY       
- WEDNESDAY        
- WEDNESDAY         
- WEDNESDAY          
- WEDNESDAY           
- WEDNESDAY            
- WEDNESDAY             
- WEDNESDAY              
- WEDNESDAY               
- WEDNESDAY                
- WEDNESDAY                 
- WEDNESDAY                  
- WEDNESDAY                   
- WEDNESDAY                    
- WEDNESDAY                     
- WEDNESDAY                      
- WEDNESDAY                       
- WEDNESDAY                        
- WEDNESDAY                         
- WEDNESDAY                          
- WEDNESDAY                           
- WEDNESDAY                            
- WEDNESDAY                             
- WEDNESDAY                              
- WEDNESDAY                               
- WE
- WED
- WEDN
- WEDNE
- WEDNES
- WEDNESD
- WEDNESDA
- WEDNESDAY
- WEDNESDAY 
- WEDNESDAY  
- WEDNESDAY   
- WEDNESDAY    
- WEDNESDAY     
- WEDNESDAY      
- WEDNESDAY       
- WEDNESDAY        
- WEDNESDAY         
- WEDNESDAY          
- WEDNESDAY           
- WEDNESDAY            
- WEDNESDAY             
- WEDNESDAY              
- WEDNESDAY               
- WEDNESDAY                
- WEDNESDAY                 
- WEDNESDAY                  
- WEDNESDAY                   
- WEDNESDAY                    
- WEDNESDAY                     
- WEDNESDAY                      
- WEDNESDAY                       
- WEDNESDAY                        
- WEDNESDAY                         
- WEDNESDAY                          
- WEDNESDAY                           
- WEDNESDAY                            
- WEDNESDAY                             
- WEDNESDAY                              
- WEDNESDAY                               
- WE
- WED
- WEDN
- WEDNE
- WEDNES
- WEDNESD
- WEDNESDA
- WEDNESDAY
- WEDNESDAY 
- WEDNESDAY  
- WEDNESDAY   
- WEDNESDAY    
- WEDNESDAY     
- WEDNESDAY      
- WEDNESDAY       
- WEDNESDAY        
- WEDNESDAY         
- WEDNESDAY          
- WEDNESDAY           
- WEDNESDAY            
- WEDNESDAY             
- WEDNESDAY              
- WEDNESDAY               
- WEDNESDAY                
- WEDNESDAY                 
- WEDNESDAY                  
- WEDNESDAY                   
- WEDNESDAY                    
- WEDNESDAY                     
- WEDNESDAY                      
- WEDNESDAY                       
- WEDNESDAY                        
- WEDNESDAY                         
- WEDNESDAY                          
- WEDNESDAY                           
- WEDNESDAY                            
- WEDNESDAY                             
- WEDNESDAY                              
- WEDNESDAY                               
- WE
- WED
- WEDN
- WEDNE
- WEDNES
- WEDNESD
- WEDNESDA
- WEDNESDAY
- WEDNESDAY 
- WEDNESDAY  
- WEDNESDAY   
- WEDNESDAY    
- WEDNESDAY     
- WEDNESDAY      
- WEDNESDAY       
- WEDNESDAY        
- WEDNESDAY         
- WEDNESDAY          
- WEDNESDAY           
- WEDNESDAY            
- WEDNESDAY             
- WEDNESDAY              
- WEDNESDAY               
- WEDNESDAY                
- WEDNESDAY                 
- WEDNESDAY                  
- WEDNESDAY                   
- WEDNESDAY                    
- WEDNESDAY                     
- WEDNESDAY                      
- WEDNESDAY                       
- WEDNESDAY                        
- WEDNESDAY                         
- WEDNESDAY                          
- WEDNESDAY                           
- WEDNESDAY                            
- WEDNESDAY                             
- WEDNESDAY                              
- WEDNESDAY                               
- TH
- THU
- THUR
- THURS
- THURSD
- THURSDA
- THURSDAY
- THURSDAY 
- THURSDAY  
- THURSDAY   
- THURSDAY    
- THURSDAY     
- THURSDAY      
- THURSDAY       
- THURSDAY        
- THURSDAY         
- THURSDAY          
- THURSDAY           
- THURSDAY            
- THURSDAY             
- THURSDAY              
- THURSDAY               
- THURSDAY                
- THURSDAY                 
- THURSDAY                  
- THURSDAY                   
- THURSDAY                    
- THURSDAY                     
- THURSDAY                      
- THURSDAY                       
- THURSDAY                        
- THURSDAY                         
- THURSDAY                          
- THURSDAY                           
- THURSDAY                            
- THURSDAY                             
- THURSDAY                              
- THURSDAY                               
- THURSDAY                                
- FR
- FRI
- FRID
- FRIDA
- FRIDAY
- FRIDAY 
- FRIDAY  
- FRIDAY   
- FRIDAY    
- FRIDAY     
- FRIDAY      
- FRIDAY       
- FRIDAY        
- FRIDAY         
- FRIDAY          
- FRIDAY           
- FRIDAY            
- FRIDAY             
- FRIDAY              
- FRIDAY               
- FRIDAY                
- FRIDAY                 
- FRIDAY                  
- FRIDAY                   
- FRIDAY                    
- FRIDAY                     
- FRIDAY                      
- FRIDAY                       
- FRIDAY                        
- FRIDAY                         
- FRIDAY                          
- FRIDAY                           
- FRIDAY                            
- FRIDAY                             
- FRIDAY                              
- FRIDAY                               
- FRIDAY                                
- FRIDAY                                 
- FRIDAY                                  
- SA
- SAT
- SATU
- SATUR
- SATURD
- SATURDA
- SATURDAY
- SATURDAY 
- SATURDAY  
- SATURDAY   
- SATURDAY    
- SATURDAY     
- SATURDAY      
- SATURDAY       
- SATURDAY        
- SATURDAY         
- SATURDAY          
- SATURDAY           
- SATURDAY            
- SATURDAY             
- SATURDAY              
- SATURDAY               
- SATURDAY                
- SATURDAY                 
- SATURDAY                  
- SATURDAY                   
- SATURDAY                    
- SATURDAY                     
- SATURDAY                      
- SATURDAY                       
- SATURDAY                        
- SATURDAY                         
- SATURDAY                          
- SATURDAY                           
- SATURDAY                            
- SATURDAY                             
- SATURDAY                              
- SATURDAY                               
- SATURDAY                                
- SA
- SAT
- SATU
- SATUR
- SATURD
- SATURDA
- SATURDAY
- SATURDAY 
- SATURDAY  
- SATURDAY   
- SATURDAY    
- SATURDAY     
- SATURDAY      
- SATURDAY       
- SATURDAY        
- SATURDAY         
- SATURDAY          
- SATURDAY           
- SATURDAY            
- SATURDAY             
- SATURDAY              
- SATURDAY               
- SATURDAY                
- SATURDAY                 
- SATURDAY                  
- SATURDAY                   
- SATURDAY                    
- SATURDAY                     
- SATURDAY                      
- SATURDAY                       
- SATURDAY                        
- SATURDAY                         
- SATURDAY                          
- SATURDAY                           
- SATURDAY                            
- SATURDAY                             
- SATURDAY                              
- SATURDAY                               
- SATURDAY                                
- SA
- SAT
- SATU
- SATUR
- SATURD
- SATURDA
- SATURDAY
- SATURDAY 
- SATURDAY  
- SATURDAY   
- SATURDAY    
- SATURDAY     
- SATURDAY      
- SATURDAY       
- SATURDAY        
- SATURDAY         
- SATURDAY          
- SATURDAY           
- SATURDAY            
- SATURDAY             
- SATURDAY              
- SATURDAY               
- SATURDAY                
- SATURDAY                 
- SATURDAY                  
- SATURDAY                   
- SATURDAY                    
- SATURDAY                     
- SATURDAY                      
- SATURDAY                       
- SATURDAY                        
- SATURDAY                         
- SATURDAY                          
- SATURDAY                           
- SATURDAY                            
- SATURDAY                             
- SATURDAY                              
- SATURDAY                               
- SATURDAY                                
- SA
- SAT
- SATU
- SATUR
- SATURD
- SATURDA
- SATURDAY
- SATURDAY 
- SATURDAY  
- SATURDAY   
- SATURDAY    
- SATURDAY     
- SATURDAY      
- SATURDAY       
- SATURDAY        
- SATURDAY         
- SATURDAY          
- SATURDAY           
- SATURDAY            
- SATURDAY             
- SATURDAY              
- SATURDAY               
- SATURDAY                
- SATURDAY                 
- SATURDAY                  
- SATURDAY                   
- SATURDAY                    
- SATURDAY                     
- SATURDAY                      
- SATURDAY                       
- SATURDAY                        
- SATURDAY                         
- SATURDAY                          
- SATURDAY                           
- SATURDAY                            
- SATURDAY                             
- SATURDAY                              
- SATURDAY                               
- SATURDAY                                
-  .
-   .
-    .
-     .
-      .
-       .
-        .
-         .
-          .
-           .
-            .
-             .
-              .
-               .
-                .
-                 .
-                  .
-                   .
-                    .
-                     .
-                      .
-                       .
-                        .
-                         .
-                          .
-                           .
-                            .
-                             .
-                              .
-                               .
-                                .
-                                 .
-                                  .
-                                   .
-                                    .
-                                     .
-                                      .
-                                       .
-                                        .
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass
diff --git a/tests/language/command.at b/tests/language/command.at
new file mode 100644 (file)
index 0000000..1bd6ccf
--- /dev/null
@@ -0,0 +1,90 @@
+AT_BANNER([command parser])
+
+dnl Tests for a bug which crashed pspp when given certain invalid input.
+AT_SETUP([command parser crash bug])
+AT_DATA([command.sps], [dnl
+DATA rubbish.
+EXECUTE.
+])
+AT_CHECK([pspp -O format=csv command.sps], [1], [dnl
+command.sps:1: error: Unknown command DATA RUBBISH.
+
+command.sps:2: error: EXECUTE: EXECUTE is allowed only after the active file has been defined.
+])
+AT_CLEANUP
+
+AT_BANNER([ERASE])
+
+AT_SETUP([ERASE -- safer mode])
+AT_DATA([foobar], [contents
+])
+AT_DATA([erase.sps], [dnl
+set safer on
+
+erase FILE='foobar'.
+])
+AT_CHECK([pspp -O format=csv erase.sps], [1], [dnl
+erase.sps:3: error: ERASE: This command not allowed when the SAFER option is set.
+])
+AT_CHECK([cat foobar], [0], [contents
+])
+AT_CLEANUP
+
+AT_SETUP([ERASE -- not safer mode])
+AT_DATA([foobar], [contents
+])
+AT_CHECK([test -e foobar])
+AT_DATA([erase.sps], [dnl
+erase FILE='foobar'.
+])
+AT_CHECK([pspp -O format=csv erase.sps])
+AT_CHECK([test ! -e foobar])
+AT_CLEANUP
+
+AT_BANNER([N OF CASES])
+
+AT_SETUP([N OF CASES])
+AT_DATA([n-of-cases.sps], [dnl
+INPUT PROGRAM.
+LOOP #i = 1 TO 100.
+COMPUTE x=#i.
+END CASE.
+END LOOP.
+END FILE.
+END INPUT PROGRAM.
+
+N OF CASES 15.
+
+LIST.
+])
+AT_CHECK([pspp -O format=csv n-of-cases.sps], [0], [dnl
+Table: Data List
+x
+1.00
+2.00
+3.00
+4.00
+5.00
+6.00
+7.00
+8.00
+9.00
+10.00
+11.00
+12.00
+13.00
+14.00
+15.00
+])
+AT_CLEANUP
+
+AT_BANNER([COMMENT])
+
+dnl Tests for a bug wherein a comment just before end-of-file caused an
+dnl infinite loop.
+AT_SETUP([COMMENT at end of file])
+AT_DATA([comment.sps], [dnl
+COMMENT this is a comment at end of file.
+])
+AT_CHECK([pspp -O format=csv comment.sps])
+AT_CLEANUP
diff --git a/tests/language/control/do-if.at b/tests/language/control/do-if.at
new file mode 100644 (file)
index 0000000..45f696a
--- /dev/null
@@ -0,0 +1,50 @@
+AT_BANNER([DO IF])
+
+AT_SETUP([DO IF])
+(for a in 0 1 ' '; do
+    for b in 0 1 ' '; do
+       for c in 0 1 ' '; do
+           for d in 0 1 ' '; do
+               abcd=$a$b$c$d
+               echo "$abcd" 1>&3
+               if test "$a" = "1"; then
+                   echo " $abcd A"
+               elif test "$a" = " "; then
+                   :
+               elif test "$b" = "1"; then
+                   echo " $abcd B"
+               elif test "$b" = " "; then
+                   :
+               elif test "$c" = "1"; then
+                   echo " $abcd C"
+               elif test "$c" = " "; then
+                   :
+               elif test "$d" = "1"; then
+                   echo " $abcd D"
+               elif test "$d" = " "; then
+                   :
+               else
+                   echo " $abcd E"
+               fi
+           done
+       done
+    done
+done) >expout 3>do-if.txt || exit 99
+AT_DATA([do-if.sps], [dnl
+DATA LIST FILE="do-if.txt"/A B C D 1-4 ABCD 1-4 (A).
+DO IF A.
+PRINT OUTFILE="do-if.out"/ABCD 'A'.
+ELSE IF B.
+PRINT OUTFILE="do-if.out"/ABCD 'B'.
+ELSE IF C.
+PRINT OUTFILE="do-if.out"/ABCD 'C'.
+ELSE IF D.
+PRINT OUTFILE="do-if.out"/ABCD 'D'.
+ELSE.
+PRINT OUTFILE="do-if.out"/ABCD 'E'.
+END IF.
+EXECUTE.
+])
+AT_CHECK([pspp do-if.sps], [0], [ignore])
+AT_CHECK([cat do-if.out], [0], [expout])
+AT_CLEANUP
diff --git a/tests/language/control/do-repeat.at b/tests/language/control/do-repeat.at
new file mode 100644 (file)
index 0000000..a0b29d9
--- /dev/null
@@ -0,0 +1,67 @@
+AT_BANNER([DO REPEAT])
+
+AT_SETUP([DO REPEAT -- ordinary])
+AT_DATA([do-repeat.sps], [dnl
+DATA LIST NOTABLE /a 1.
+BEGIN DATA.
+0
+END DATA.
+
+DO REPEAT h = h0 TO h3 / x = 0 TO 3 / y = 8, 7.5, 6, 5.
+       COMPUTE h = x + y.
+END REPEAT.
+
+VECTOR v(6).
+COMPUTE #idx = 0.
+DO REPEAT i = 1 TO 2.
+       DO REPEAT j = 3 TO 5.
+               COMPUTE #x = i + j.
+               COMPUTE #idx = #idx + 1.
+               COMPUTE v(#idx) = #x.
+       END REPEAT.
+END REPEAT.
+
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv do-repeat.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+a,h0,h1,h2,h3,v1,v2,v3,v4,v5,v6
+0,8.00,8.50,8.00,8.00,4.00,5.00,6.00,5.00,6.00,7.00
+])
+AT_CLEANUP
+
+dnl This program tests for a bug that crashed PSPP given an empty DO
+dnl REPEAT...END REPEAT block.  See bug #18407.
+AT_SETUP([DO REPEAT -- empty])
+AT_DATA([do-repeat.sps], [dnl
+DATA LIST NOTABLE /a 1.
+BEGIN DATA.
+0
+END DATA.
+
+DO REPEAT h = a.
+END REPEAT.
+])
+AT_CHECK([pspp -o pspp.csv do-repeat.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+])
+AT_CLEANUP
+
+dnl This program tests for a bug that crashed PSPP when END REPEAT
+dnl was missing.  See bug #31016.
+AT_SETUP([DO REPEAT -- missing END REPEAT])
+AT_DATA([do-repeat.sps], [dnl
+DATA LIST NOTABLE /x 1.
+DO REPEAT y = 1 TO 10.
+])
+AT_CHECK([pspp -o pspp.csv do-repeat.sps], [1], [dnl
+error: DO REPEAT: DO REPEAT without END REPEAT.
+error: Stopping syntax file processing here to avoid a cascade of dependent command failures.
+])
+AT_CHECK([cat pspp.csv], [0], [dnl
+error: DO REPEAT: DO REPEAT without END REPEAT.
+
+error: Stopping syntax file processing here to avoid a cascade of dependent command failures.
+])
+AT_CLEANUP
diff --git a/tests/language/control/loop.at b/tests/language/control/loop.at
new file mode 100644 (file)
index 0000000..af8d8ae
--- /dev/null
@@ -0,0 +1,248 @@
+AT_BANNER([LOOP])
+
+m4_define([LOOP_DATA], [dnl
+data list notable /x 1 y 2 z 3.
+begin data.
+121
+252
+393
+404
+end data.
+])
+
+AT_SETUP([LOOP with index])
+AT_DATA([loop.sps], [dnl
+LOOP_DATA
+loop #i=x to y by z.
+print /#i.
+end loop.
+print/'--------'.
+execute.
+])
+AT_CHECK([pspp -o pspp.csv loop.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+1.00 @&t@
+
+2.00 @&t@
+
+--------
+
+2.00 @&t@
+
+4.00 @&t@
+
+--------
+
+3.00 @&t@
+
+6.00 @&t@
+
+9.00 @&t@
+
+--------
+
+--------
+])
+AT_CLEANUP
+
+AT_SETUP([LOOP with IF condition])
+AT_DATA([loop.sps], [dnl
+LOOP_DATA
+compute #j=x.
+loop if #j <= y.
+print /#j.
+compute #j = #j + z.
+end loop.
+print/'--------'.
+execute.
+])
+AT_CHECK([pspp -o pspp.csv loop.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+1.00 @&t@
+
+2.00 @&t@
+
+--------
+
+2.00 @&t@
+
+4.00 @&t@
+
+--------
+
+3.00 @&t@
+
+6.00 @&t@
+
+9.00 @&t@
+
+--------
+
+--------
+])
+AT_CLEANUP
+
+AT_SETUP([LOOP with END IF condition])
+AT_DATA([loop.sps], [dnl
+LOOP_DATA
+compute #k=x.
+loop.
+print /#k.
+compute #k = #k + z.
+end loop if #k > y.
+print/'--------'.
+execute.
+])
+AT_CHECK([pspp -o pspp.csv loop.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+1.00 @&t@
+
+2.00 @&t@
+
+--------
+
+2.00 @&t@
+
+4.00 @&t@
+
+--------
+
+3.00 @&t@
+
+6.00 @&t@
+
+9.00 @&t@
+
+--------
+
+4.00 @&t@
+
+--------
+])
+AT_CLEANUP
+
+AT_SETUP([LOOP with index and IF based on index])
+AT_DATA([loop.sps], [dnl
+LOOP_DATA
+loop #m=x to y by z if #m < 4.
+print /#m.
+end loop.
+print/'--------'.
+execute.
+])
+AT_CHECK([pspp -o pspp.csv loop.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+1.00 @&t@
+
+2.00 @&t@
+
+--------
+
+2.00 @&t@
+
+--------
+
+3.00 @&t@
+
+--------
+
+--------
+])
+AT_CLEANUP
+
+AT_SETUP([LOOP with index and END IF based on index])
+AT_DATA([loop.sps], [dnl
+LOOP_DATA
+loop #n=x to y by z.
+print /#n.
+end loop if #n >= 4.
+print/'--------'.
+execute.
+])
+AT_CHECK([pspp -o pspp.csv loop.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+1.00 @&t@
+
+2.00 @&t@
+
+--------
+
+2.00 @&t@
+
+4.00 @&t@
+
+--------
+
+3.00 @&t@
+
+6.00 @&t@
+
+--------
+
+--------
+])
+AT_CLEANUP
+
+AT_SETUP([LOOP with index and IF and END IF based on index])
+AT_DATA([loop.sps], [dnl
+LOOP_DATA
+loop #o=x to y by z if mod(#o,2) = 0.
+print /#o.
+end loop if #o >= 4.
+print/'--------'.
+execute.
+])
+AT_CHECK([pspp -o pspp.csv loop.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+--------
+
+2.00 @&t@
+
+4.00 @&t@
+
+--------
+
+--------
+
+--------
+])
+AT_CLEANUP
+
+AT_SETUP([LOOP with no conditions])
+AT_DATA([loop.sps], [dnl
+LOOP_DATA
+set mxloops = 2.
+compute #p = x.
+loop.
+print /#p.
+compute #p = #p + z.
+do if #p >= y.
+break.
+end if.
+end loop.
+print/'--------'.
+execute.
+])
+AT_CHECK([pspp -o pspp.csv loop.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+1.00 @&t@
+
+--------
+
+2.00 @&t@
+
+4.00 @&t@
+
+--------
+
+3.00 @&t@
+
+6.00 @&t@
+
+--------
+
+4.00 @&t@
+
+--------
+])
+AT_CLEANUP
diff --git a/tests/language/control/temporary.at b/tests/language/control/temporary.at
new file mode 100644 (file)
index 0000000..5ec8bea
--- /dev/null
@@ -0,0 +1,46 @@
+AT_BANNER([TEMPORARY])
+
+dnl Tests for a bug that manifested when all transformations are temporary.
+AT_SETUP([TEMPORARY as first transformation])
+AT_DATA([temporary.sps], [dnl
+DATA LIST LIST NOTABLE /X *.
+BEGIN DATA.
+1
+2
+3
+4
+5
+6
+7
+8
+9
+END DATA.
+
+TEMPORARY.
+SELECT IF x > 5 .
+LIST.
+
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv temporary.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+X
+6.00
+7.00
+8.00
+9.00
+
+Table: Data List
+X
+1.00
+2.00
+3.00
+4.00
+5.00
+6.00
+7.00
+8.00
+9.00
+])
+AT_CLEANUP
diff --git a/tests/language/data-io/Book1.gnm.unzipped b/tests/language/data-io/Book1.gnm.unzipped
new file mode 100644 (file)
index 0000000..052783e
--- /dev/null
@@ -0,0 +1,535 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<gnm:Workbook xmlns:gnm="http://www.gnumeric.org/v10.dtd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.gnumeric.org/v8.xsd">
+  <gnm:Version Epoch="1" Major="6" Minor="3" Full="1.6.3"/>
+  <gnm:Attributes>
+    <gnm:Attribute>
+      <gnm:type>4</gnm:type>
+      <gnm:name>WorkbookView::show_horizontal_scrollbar</gnm:name>
+      <gnm:value>TRUE</gnm:value>
+    </gnm:Attribute>
+    <gnm:Attribute>
+      <gnm:type>4</gnm:type>
+      <gnm:name>WorkbookView::show_vertical_scrollbar</gnm:name>
+      <gnm:value>TRUE</gnm:value>
+    </gnm:Attribute>
+    <gnm:Attribute>
+      <gnm:type>4</gnm:type>
+      <gnm:name>WorkbookView::show_notebook_tabs</gnm:name>
+      <gnm:value>TRUE</gnm:value>
+    </gnm:Attribute>
+    <gnm:Attribute>
+      <gnm:type>4</gnm:type>
+      <gnm:name>WorkbookView::do_auto_completion</gnm:name>
+      <gnm:value>TRUE</gnm:value>
+    </gnm:Attribute>
+    <gnm:Attribute>
+      <gnm:type>4</gnm:type>
+      <gnm:name>WorkbookView::is_protected</gnm:name>
+      <gnm:value>FALSE</gnm:value>
+    </gnm:Attribute>
+  </gnm:Attributes>
+  <gnm:Summary>
+    <gnm:Item>
+      <gnm:name>application</gnm:name>
+      <gnm:val-string>gnumeric</gnm:val-string>
+    </gnm:Item>
+    <gnm:Item>
+      <gnm:name>author</gnm:name>
+      <gnm:val-string>John Darrington</gnm:val-string>
+    </gnm:Item>
+  </gnm:Summary>
+  <gnm:SheetNameIndex>
+    <gnm:SheetName>This</gnm:SheetName>
+    <gnm:SheetName>vars</gnm:SheetName>
+    <gnm:SheetName>That</gnm:SheetName>
+    <gnm:SheetName>Empty</gnm:SheetName>
+    <gnm:SheetName>Blank</gnm:SheetName>
+  </gnm:SheetNameIndex>
+  <gnm:Geometry Width="1278" Height="633"/>
+  <gnm:Sheets>
+    <gnm:Sheet DisplayFormulas="0" HideZero="0" HideGrid="0" HideColHeader="0" HideRowHeader="0" DisplayOutlines="1" OutlineSymbolsBelow="1" OutlineSymbolsRight="1" Visibility="GNM_SHEET_VISIBILITY_VISIBLE">
+      <gnm:Name>This</gnm:Name>
+      <gnm:MaxCol>9</gnm:MaxCol>
+      <gnm:MaxRow>17</gnm:MaxRow>
+      <gnm:Zoom>1</gnm:Zoom>
+      <gnm:PrintInformation>
+        <gnm:Margins>
+          <gnm:top Points="120" PrefUnit="cm"/>
+          <gnm:bottom Points="120" PrefUnit="cm"/>
+        </gnm:Margins>
+        <gnm:Scale type="percentage" percentage="100"/>
+        <gnm:vcenter value="0"/>
+        <gnm:hcenter value="0"/>
+        <gnm:grid value="0"/>
+        <gnm:even_if_only_styles value="0"/>
+        <gnm:monochrome value="0"/>
+        <gnm:draft value="0"/>
+        <gnm:titles value="0"/>
+        <gnm:order>d_then_r</gnm:order>
+        <gnm:orientation>portrait</gnm:orientation>
+        <gnm:Header Left="" Middle="&amp;[TAB]" Right=""/>
+        <gnm:Footer Left="" Middle="Page &amp;[PAGE]" Right=""/>
+      </gnm:PrintInformation>
+      <gnm:Styles>
+        <gnm:StyleRegion startCol="0" startRow="0" endCol="255" endRow="65535">
+          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
+            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
+            <gnm:StyleBorder>
+              <gnm:Top Style="0"/>
+              <gnm:Bottom Style="0"/>
+              <gnm:Left Style="0"/>
+              <gnm:Right Style="0"/>
+              <gnm:Diagonal Style="0"/>
+              <gnm:Rev-Diagonal Style="0"/>
+            </gnm:StyleBorder>
+          </gnm:Style>
+        </gnm:StyleRegion>
+      </gnm:Styles>
+      <gnm:Cols DefaultSizePts="48">
+        <gnm:ColInfo No="0" Unit="48" MarginA="2" MarginB="2" Count="10"/>
+      </gnm:Cols>
+      <gnm:Rows DefaultSizePts="12.75">
+        <gnm:RowInfo No="0" Unit="12.75" MarginA="0" MarginB="0" Count="15"/>
+        <gnm:RowInfo No="15" Unit="9.75" MarginA="0" MarginB="0" HardSize="1"/>
+        <gnm:RowInfo No="17" Unit="12.75" MarginA="0" MarginB="0"/>
+      </gnm:Rows>
+      <gnm:Selections CursorCol="7" CursorRow="7">
+        <gnm:Selection startCol="7" startRow="7" endCol="7" endRow="7"/>
+      </gnm:Selections>
+      <gnm:Cells>
+        <gnm:Cell Col="0" Row="0" ValueType="60">numeral</gnm:Cell>
+        <gnm:Cell Col="1" Row="0" ValueType="60">eng_name</gnm:Cell>
+        <gnm:Cell Col="2" Row="0" ValueType="60">xxx</gnm:Cell>
+        <gnm:Cell Col="0" Row="1" ValueType="30">1</gnm:Cell>
+        <gnm:Cell Col="1" Row="1" ValueType="60">One</gnm:Cell>
+        <gnm:Cell Col="2" Row="1" ValueType="60">Eins</gnm:Cell>
+        <gnm:Cell Col="0" Row="2" ValueType="30">2</gnm:Cell>
+        <gnm:Cell Col="1" Row="2" ValueType="60">Two</gnm:Cell>
+        <gnm:Cell Col="2" Row="2" ValueType="60">Zwei</gnm:Cell>
+        <gnm:Cell Col="0" Row="3" ValueType="30">3</gnm:Cell>
+        <gnm:Cell Col="1" Row="3" ValueType="60">Three</gnm:Cell>
+        <gnm:Cell Col="2" Row="3" ValueType="60">Drei</gnm:Cell>
+        <gnm:Cell Col="2" Row="4" ValueType="60">Vier</gnm:Cell>
+        <gnm:Cell Col="5" Row="6" ValueType="60">XY</gnm:Cell>
+        <gnm:Cell Col="6" Row="6" ValueType="60">xxx</gnm:Cell>
+        <gnm:Cell Col="7" Row="6" ValueType="60">xxxx</gnm:Cell>
+        <gnm:Cell Col="8" Row="6" ValueType="60">xxxx</gnm:Cell>
+        <gnm:Cell Col="5" Row="7" ValueType="60">yyy</gnm:Cell>
+        <gnm:Cell Col="6" Row="7" ValueType="60">V1</gnm:Cell>
+        <gnm:Cell Col="7" Row="7" ValueType="60">V2</gnm:Cell>
+        <gnm:Cell Col="5" Row="8" ValueType="60">yyy</gnm:Cell>
+        <gnm:Cell Col="6" Row="8" ValueType="30">0</gnm:Cell>
+        <gnm:Cell Col="7" Row="8" ValueType="60">fred</gnm:Cell>
+        <gnm:Cell Col="8" Row="8" ValueType="30">20</gnm:Cell>
+        <gnm:Cell Col="9" Row="8" ValueType="60">$$$$</gnm:Cell>
+        <gnm:Cell Col="5" Row="9" ValueType="60">yyy</gnm:Cell>
+        <gnm:Cell Col="6" Row="9" ValueType="30">1</gnm:Cell>
+        <gnm:Cell Col="7" Row="9" ValueType="30">11</gnm:Cell>
+        <gnm:Cell Col="8" Row="9" ValueType="30">21</gnm:Cell>
+        <gnm:Cell Col="9" Row="9" ValueType="60">$$$$</gnm:Cell>
+        <gnm:Cell Col="5" Row="10" ValueType="60">yyyy</gnm:Cell>
+        <gnm:Cell Col="6" Row="10" ValueType="30">2</gnm:Cell>
+        <gnm:Cell Col="7" Row="10" ValueType="60">twelve</gnm:Cell>
+        <gnm:Cell Col="8" Row="10" ValueType="30">22</gnm:Cell>
+        <gnm:Cell Col="9" Row="10" ValueType="60">$$$$</gnm:Cell>
+        <gnm:Cell Col="5" Row="11" ValueType="60">yyyy</gnm:Cell>
+        <gnm:Cell Col="6" Row="11" ValueType="30">3</gnm:Cell>
+        <gnm:Cell Col="7" Row="11" ValueType="30">13</gnm:Cell>
+        <gnm:Cell Col="8" Row="11" ValueType="30">23</gnm:Cell>
+        <gnm:Cell Col="9" Row="11" ValueType="60">$$$$</gnm:Cell>
+        <gnm:Cell Col="1" Row="12" ValueType="60">Eleven</gnm:Cell>
+        <gnm:Cell Col="5" Row="12" ValueType="60">yyyy</gnm:Cell>
+        <gnm:Cell Col="6" Row="12" ValueType="30">4</gnm:Cell>
+        <gnm:Cell Col="7" Row="12" ValueType="30">14</gnm:Cell>
+        <gnm:Cell Col="8" Row="12" ValueType="30">24</gnm:Cell>
+        <gnm:Cell Col="9" Row="12" ValueType="60">$$$$</gnm:Cell>
+        <gnm:Cell Col="5" Row="13" ValueType="60">zzz</gnm:Cell>
+        <gnm:Cell Col="6" Row="13" ValueType="60">zzz</gnm:Cell>
+        <gnm:Cell Col="7" Row="13" ValueType="60">zzz</gnm:Cell>
+        <gnm:Cell Col="8" Row="13" ValueType="60">zzz</gnm:Cell>
+        <gnm:Cell Col="9" Row="13" ValueType="60">zzz</gnm:Cell>
+        <gnm:Cell Col="1" Row="17" ValueType="60">Seventeen</gnm:Cell>
+      </gnm:Cells>
+      <gnm:SheetLayout TopLeft="A1"/>
+      <gnm:Solver ProblemType="1" Inputs="" MaxTime="0" MaxIter="0" NonNeg="1" Discr="0" AutoScale="0" ShowIter="0" AnswerR="0" SensitivityR="0" LimitsR="0" PerformR="0" ProgramR="0"/>
+    </gnm:Sheet>
+    <gnm:Sheet DisplayFormulas="0" HideZero="0" HideGrid="0" HideColHeader="0" HideRowHeader="0" DisplayOutlines="1" OutlineSymbolsBelow="1" OutlineSymbolsRight="1" Visibility="GNM_SHEET_VISIBILITY_VISIBLE">
+      <gnm:Name>vars</gnm:Name>
+      <gnm:MaxCol>4</gnm:MaxCol>
+      <gnm:MaxRow>8</gnm:MaxRow>
+      <gnm:Zoom>1</gnm:Zoom>
+      <gnm:PrintInformation>
+        <gnm:Margins>
+          <gnm:top Points="120" PrefUnit="cm"/>
+          <gnm:bottom Points="120" PrefUnit="cm"/>
+        </gnm:Margins>
+        <gnm:Scale type="percentage" percentage="100"/>
+        <gnm:vcenter value="0"/>
+        <gnm:hcenter value="0"/>
+        <gnm:grid value="0"/>
+        <gnm:even_if_only_styles value="0"/>
+        <gnm:monochrome value="0"/>
+        <gnm:draft value="0"/>
+        <gnm:titles value="0"/>
+        <gnm:order>d_then_r</gnm:order>
+        <gnm:orientation>portrait</gnm:orientation>
+        <gnm:Header Left="" Middle="&amp;[TAB]" Right=""/>
+        <gnm:Footer Left="" Middle="Page &amp;[PAGE]" Right=""/>
+      </gnm:PrintInformation>
+      <gnm:Styles>
+        <gnm:StyleRegion startCol="0" startRow="0" endCol="255" endRow="65535">
+          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
+            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
+            <gnm:StyleBorder>
+              <gnm:Top Style="0"/>
+              <gnm:Bottom Style="0"/>
+              <gnm:Left Style="0"/>
+              <gnm:Right Style="0"/>
+              <gnm:Diagonal Style="0"/>
+              <gnm:Rev-Diagonal Style="0"/>
+            </gnm:StyleBorder>
+          </gnm:Style>
+        </gnm:StyleRegion>
+      </gnm:Styles>
+      <gnm:Cols DefaultSizePts="48">
+        <gnm:ColInfo No="0" Unit="48" MarginA="2" MarginB="2" Count="5"/>
+      </gnm:Cols>
+      <gnm:Rows DefaultSizePts="12.75">
+        <gnm:RowInfo No="0" Unit="12.75" MarginA="0" MarginB="0" Count="5"/>
+      </gnm:Rows>
+      <gnm:Selections CursorCol="0" CursorRow="0">
+        <gnm:Selection startCol="0" startRow="0" endCol="0" endRow="0"/>
+      </gnm:Selections>
+      <gnm:Cells>
+        <gnm:Cell Col="0" Row="0" ValueType="60">1v12</gnm:Cell>
+        <gnm:Cell Col="1" Row="0" ValueType="60">var&amp;x@</gnm:Cell>
+        <gnm:Cell Col="2" Row="0" ValueType="60">a(43)</gnm:Cell>
+        <gnm:Cell Col="3" Row="0" ValueType="60">varx</gnm:Cell>
+        <gnm:Cell Col="4" Row="0" ValueType="60">varx</gnm:Cell>
+        <gnm:Cell Col="0" Row="1" ValueType="30">1</gnm:Cell>
+        <gnm:Cell Col="1" Row="1" ValueType="30">2</gnm:Cell>
+        <gnm:Cell Col="2" Row="1" ValueType="30">23</gnm:Cell>
+        <gnm:Cell Col="3" Row="1" ValueType="30">2</gnm:Cell>
+        <gnm:Cell Col="4" Row="1" ValueType="30">4</gnm:Cell>
+        <gnm:Cell Col="0" Row="2" ValueType="30">3</gnm:Cell>
+        <gnm:Cell Col="1" Row="2" ValueType="30">4</gnm:Cell>
+        <gnm:Cell Col="2" Row="2" ValueType="30">23</gnm:Cell>
+        <gnm:Cell Col="3" Row="2" ValueType="30">3</gnm:Cell>
+        <gnm:Cell Col="4" Row="2" ValueType="30">4</gnm:Cell>
+        <gnm:Cell Col="1" Row="8" ValueType="10"></gnm:Cell>
+      </gnm:Cells>
+      <gnm:SheetLayout TopLeft="A1"/>
+      <gnm:Solver ProblemType="1" Inputs="" MaxTime="0" MaxIter="0" NonNeg="1" Discr="0" AutoScale="0" ShowIter="0" AnswerR="0" SensitivityR="0" LimitsR="0" PerformR="0" ProgramR="0"/>
+    </gnm:Sheet>
+    <gnm:Sheet DisplayFormulas="0" HideZero="0" HideGrid="0" HideColHeader="0" HideRowHeader="0" DisplayOutlines="1" OutlineSymbolsBelow="1" OutlineSymbolsRight="1" Visibility="GNM_SHEET_VISIBILITY_VISIBLE">
+      <gnm:Name>That</gnm:Name>
+      <gnm:MaxCol>3</gnm:MaxCol>
+      <gnm:MaxRow>4</gnm:MaxRow>
+      <gnm:Zoom>1</gnm:Zoom>
+      <gnm:PrintInformation>
+        <gnm:Margins>
+          <gnm:top Points="120" PrefUnit="cm"/>
+          <gnm:bottom Points="120" PrefUnit="cm"/>
+        </gnm:Margins>
+        <gnm:Scale type="percentage" percentage="100"/>
+        <gnm:vcenter value="0"/>
+        <gnm:hcenter value="0"/>
+        <gnm:grid value="0"/>
+        <gnm:even_if_only_styles value="0"/>
+        <gnm:monochrome value="0"/>
+        <gnm:draft value="0"/>
+        <gnm:titles value="0"/>
+        <gnm:order>d_then_r</gnm:order>
+        <gnm:orientation>portrait</gnm:orientation>
+        <gnm:Header Left="" Middle="&amp;[TAB]" Right=""/>
+        <gnm:Footer Left="" Middle="Page &amp;[PAGE]" Right=""/>
+      </gnm:PrintInformation>
+      <gnm:Styles>
+        <gnm:StyleRegion startCol="0" startRow="4096" endCol="63" endRow="65535">
+          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
+            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
+            <gnm:StyleBorder>
+              <gnm:Top Style="0"/>
+              <gnm:Bottom Style="0"/>
+              <gnm:Left Style="0"/>
+              <gnm:Right Style="0"/>
+              <gnm:Diagonal Style="0"/>
+              <gnm:Rev-Diagonal Style="0"/>
+            </gnm:StyleBorder>
+          </gnm:Style>
+        </gnm:StyleRegion>
+        <gnm:StyleRegion startCol="4" startRow="0" endCol="15" endRow="255">
+          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
+            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
+            <gnm:StyleBorder>
+              <gnm:Top Style="0"/>
+              <gnm:Bottom Style="0"/>
+              <gnm:Left Style="0"/>
+              <gnm:Right Style="0"/>
+              <gnm:Diagonal Style="0"/>
+              <gnm:Rev-Diagonal Style="0"/>
+            </gnm:StyleBorder>
+          </gnm:Style>
+        </gnm:StyleRegion>
+        <gnm:StyleRegion startCol="0" startRow="16" endCol="3" endRow="255">
+          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
+            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
+            <gnm:StyleBorder>
+              <gnm:Top Style="0"/>
+              <gnm:Bottom Style="0"/>
+              <gnm:Left Style="0"/>
+              <gnm:Right Style="0"/>
+              <gnm:Diagonal Style="0"/>
+              <gnm:Rev-Diagonal Style="0"/>
+            </gnm:StyleBorder>
+          </gnm:Style>
+        </gnm:StyleRegion>
+        <gnm:StyleRegion startCol="16" startRow="0" endCol="63" endRow="4095">
+          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
+            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
+            <gnm:StyleBorder>
+              <gnm:Top Style="0"/>
+              <gnm:Bottom Style="0"/>
+              <gnm:Left Style="0"/>
+              <gnm:Right Style="0"/>
+              <gnm:Diagonal Style="0"/>
+              <gnm:Rev-Diagonal Style="0"/>
+            </gnm:StyleBorder>
+          </gnm:Style>
+        </gnm:StyleRegion>
+        <gnm:StyleRegion startCol="64" startRow="0" endCol="255" endRow="65535">
+          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
+            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
+            <gnm:StyleBorder>
+              <gnm:Top Style="0"/>
+              <gnm:Bottom Style="0"/>
+              <gnm:Left Style="0"/>
+              <gnm:Right Style="0"/>
+              <gnm:Diagonal Style="0"/>
+              <gnm:Rev-Diagonal Style="0"/>
+            </gnm:StyleBorder>
+          </gnm:Style>
+        </gnm:StyleRegion>
+        <gnm:StyleRegion startCol="3" startRow="0" endCol="3" endRow="15">
+          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
+            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
+            <gnm:StyleBorder>
+              <gnm:Top Style="0"/>
+              <gnm:Bottom Style="0"/>
+              <gnm:Left Style="0"/>
+              <gnm:Right Style="0"/>
+              <gnm:Diagonal Style="0"/>
+              <gnm:Rev-Diagonal Style="0"/>
+            </gnm:StyleBorder>
+          </gnm:Style>
+        </gnm:StyleRegion>
+        <gnm:StyleRegion startCol="2" startRow="5" endCol="2" endRow="15">
+          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
+            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
+            <gnm:StyleBorder>
+              <gnm:Top Style="0"/>
+              <gnm:Bottom Style="0"/>
+              <gnm:Left Style="0"/>
+              <gnm:Right Style="0"/>
+              <gnm:Diagonal Style="0"/>
+              <gnm:Rev-Diagonal Style="0"/>
+            </gnm:StyleBorder>
+          </gnm:Style>
+        </gnm:StyleRegion>
+        <gnm:StyleRegion startCol="2" startRow="1" endCol="2" endRow="4">
+          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="0.00">
+            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
+            <gnm:StyleBorder>
+              <gnm:Top Style="0"/>
+              <gnm:Bottom Style="0"/>
+              <gnm:Left Style="0"/>
+              <gnm:Right Style="0"/>
+              <gnm:Diagonal Style="0"/>
+              <gnm:Rev-Diagonal Style="0"/>
+            </gnm:StyleBorder>
+          </gnm:Style>
+        </gnm:StyleRegion>
+        <gnm:StyleRegion startCol="0" startRow="256" endCol="15" endRow="4095">
+          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
+            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
+            <gnm:StyleBorder>
+              <gnm:Top Style="0"/>
+              <gnm:Bottom Style="0"/>
+              <gnm:Left Style="0"/>
+              <gnm:Right Style="0"/>
+              <gnm:Diagonal Style="0"/>
+              <gnm:Rev-Diagonal Style="0"/>
+            </gnm:StyleBorder>
+          </gnm:Style>
+        </gnm:StyleRegion>
+        <gnm:StyleRegion startCol="0" startRow="0" endCol="1" endRow="15">
+          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
+            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
+            <gnm:StyleBorder>
+              <gnm:Top Style="0"/>
+              <gnm:Bottom Style="0"/>
+              <gnm:Left Style="0"/>
+              <gnm:Right Style="0"/>
+              <gnm:Diagonal Style="0"/>
+              <gnm:Rev-Diagonal Style="0"/>
+            </gnm:StyleBorder>
+          </gnm:Style>
+        </gnm:StyleRegion>
+        <gnm:StyleRegion startCol="2" startRow="0" endCol="2" endRow="0">
+          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
+            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
+            <gnm:StyleBorder>
+              <gnm:Top Style="0"/>
+              <gnm:Bottom Style="0"/>
+              <gnm:Left Style="0"/>
+              <gnm:Right Style="0"/>
+              <gnm:Diagonal Style="0"/>
+              <gnm:Rev-Diagonal Style="0"/>
+            </gnm:StyleBorder>
+          </gnm:Style>
+        </gnm:StyleRegion>
+      </gnm:Styles>
+      <gnm:Cols DefaultSizePts="48">
+        <gnm:ColInfo No="0" Unit="48" MarginA="2" MarginB="2" Count="2"/>
+        <gnm:ColInfo No="2" Unit="90.75" MarginA="2" MarginB="2" HardSize="1"/>
+        <gnm:ColInfo No="3" Unit="81" MarginA="2" MarginB="2" HardSize="1"/>
+      </gnm:Cols>
+      <gnm:Rows DefaultSizePts="12.75">
+        <gnm:RowInfo No="0" Unit="12.75" MarginA="0" MarginB="0" Count="5"/>
+      </gnm:Rows>
+      <gnm:Selections CursorCol="0" CursorRow="5">
+        <gnm:Selection startCol="0" startRow="5" endCol="0" endRow="5"/>
+      </gnm:Selections>
+      <gnm:Cells>
+        <gnm:Cell Col="0" Row="0" ValueType="60">name</gnm:Cell>
+        <gnm:Cell Col="1" Row="0" ValueType="60">id</gnm:Cell>
+        <gnm:Cell Col="2" Row="0" ValueType="60">height</gnm:Cell>
+        <gnm:Cell Col="0" Row="1" ValueType="60">fred</gnm:Cell>
+        <gnm:Cell Col="1" Row="1" ValueType="30">0</gnm:Cell>
+        <gnm:Cell Col="2" Row="1" ValueType="40">23.4</gnm:Cell>
+        <gnm:Cell Col="0" Row="2" ValueType="60">bert </gnm:Cell>
+        <gnm:Cell Col="1" Row="2" ValueType="30">1</gnm:Cell>
+        <gnm:Cell Col="2" Row="2" ValueType="40">0.56</gnm:Cell>
+        <gnm:Cell Col="0" Row="3" ValueType="60">charlie</gnm:Cell>
+        <gnm:Cell Col="1" Row="3" ValueType="30">2</gnm:Cell>
+        <gnm:Cell Col="2" Row="3" ValueType="60">n/a</gnm:Cell>
+        <gnm:Cell Col="0" Row="4" ValueType="60">dick</gnm:Cell>
+        <gnm:Cell Col="1" Row="4" ValueType="30">3</gnm:Cell>
+        <gnm:Cell Col="2" Row="4" ValueType="40" ValueFormat="0.00">-34.09</gnm:Cell>
+      </gnm:Cells>
+      <gnm:SheetLayout TopLeft="A1"/>
+      <gnm:Solver ProblemType="1" Inputs="" MaxTime="0" MaxIter="0" NonNeg="1" Discr="0" AutoScale="0" ShowIter="0" AnswerR="0" SensitivityR="0" LimitsR="0" PerformR="0" ProgramR="0"/>
+    </gnm:Sheet>
+    <gnm:Sheet DisplayFormulas="0" HideZero="0" HideGrid="0" HideColHeader="0" HideRowHeader="0" DisplayOutlines="1" OutlineSymbolsBelow="1" OutlineSymbolsRight="1" Visibility="GNM_SHEET_VISIBILITY_VISIBLE">
+      <gnm:Name>Empty</gnm:Name>
+      <gnm:MaxCol>-1</gnm:MaxCol>
+      <gnm:MaxRow>-1</gnm:MaxRow>
+      <gnm:Zoom>1</gnm:Zoom>
+      <gnm:PrintInformation>
+        <gnm:Margins>
+          <gnm:top Points="120" PrefUnit="cm"/>
+          <gnm:bottom Points="120" PrefUnit="cm"/>
+        </gnm:Margins>
+        <gnm:Scale type="percentage" percentage="100"/>
+        <gnm:vcenter value="0"/>
+        <gnm:hcenter value="0"/>
+        <gnm:grid value="0"/>
+        <gnm:even_if_only_styles value="0"/>
+        <gnm:monochrome value="0"/>
+        <gnm:draft value="0"/>
+        <gnm:titles value="0"/>
+        <gnm:order>d_then_r</gnm:order>
+        <gnm:orientation>portrait</gnm:orientation>
+        <gnm:Header Left="" Middle="&amp;[TAB]" Right=""/>
+        <gnm:Footer Left="" Middle="Page &amp;[PAGE]" Right=""/>
+      </gnm:PrintInformation>
+      <gnm:Styles>
+        <gnm:StyleRegion startCol="0" startRow="0" endCol="255" endRow="65535">
+          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
+            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
+            <gnm:StyleBorder>
+              <gnm:Top Style="0"/>
+              <gnm:Bottom Style="0"/>
+              <gnm:Left Style="0"/>
+              <gnm:Right Style="0"/>
+              <gnm:Diagonal Style="0"/>
+              <gnm:Rev-Diagonal Style="0"/>
+            </gnm:StyleBorder>
+          </gnm:Style>
+        </gnm:StyleRegion>
+      </gnm:Styles>
+      <gnm:Cols DefaultSizePts="48"/>
+      <gnm:Rows DefaultSizePts="12.75"/>
+      <gnm:Selections CursorCol="0" CursorRow="0">
+        <gnm:Selection startCol="0" startRow="0" endCol="0" endRow="0"/>
+      </gnm:Selections>
+      <gnm:Cells/>
+      <gnm:SheetLayout TopLeft="A1"/>
+      <gnm:Solver ProblemType="1" Inputs="" MaxTime="0" MaxIter="0" NonNeg="1" Discr="0" AutoScale="0" ShowIter="0" AnswerR="0" SensitivityR="0" LimitsR="0" PerformR="0" ProgramR="0"/>
+    </gnm:Sheet>
+    <gnm:Sheet DisplayFormulas="0" HideZero="0" HideGrid="0" HideColHeader="0" HideRowHeader="0" DisplayOutlines="1" OutlineSymbolsBelow="1" OutlineSymbolsRight="1" Visibility="GNM_SHEET_VISIBILITY_VISIBLE">
+      <gnm:Name>Blank</gnm:Name>
+      <gnm:MaxCol>3</gnm:MaxCol>
+      <gnm:MaxRow>2</gnm:MaxRow>
+      <gnm:Zoom>1</gnm:Zoom>
+      <gnm:PrintInformation>
+        <gnm:Margins>
+          <gnm:top Points="120" PrefUnit="cm"/>
+          <gnm:bottom Points="120" PrefUnit="cm"/>
+        </gnm:Margins>
+        <gnm:Scale type="percentage" percentage="100"/>
+        <gnm:vcenter value="0"/>
+        <gnm:hcenter value="0"/>
+        <gnm:grid value="0"/>
+        <gnm:even_if_only_styles value="0"/>
+        <gnm:monochrome value="0"/>
+        <gnm:draft value="0"/>
+        <gnm:titles value="0"/>
+        <gnm:order>d_then_r</gnm:order>
+        <gnm:orientation>portrait</gnm:orientation>
+        <gnm:Header Left="" Middle="&amp;[TAB]" Right=""/>
+        <gnm:Footer Left="" Middle="Page &amp;[PAGE]" Right=""/>
+      </gnm:PrintInformation>
+      <gnm:Styles>
+        <gnm:StyleRegion startCol="0" startRow="0" endCol="255" endRow="65535">
+          <gnm:Style HAlign="1" VAlign="2" WrapText="0" ShrinkToFit="0" Rotation="0" Shade="0" Indent="0" Locked="1" Hidden="0" Fore="0:0:0" Back="FFFF:FFFF:FFFF" PatternColor="0:0:0" Format="General">
+            <gnm:Font Unit="10" Bold="0" Italic="0" Underline="0" StrikeThrough="0" Script="0">Sans</gnm:Font>
+            <gnm:StyleBorder>
+              <gnm:Top Style="0"/>
+              <gnm:Bottom Style="0"/>
+              <gnm:Left Style="0"/>
+              <gnm:Right Style="0"/>
+              <gnm:Diagonal Style="0"/>
+              <gnm:Rev-Diagonal Style="0"/>
+            </gnm:StyleBorder>
+          </gnm:Style>
+        </gnm:StyleRegion>
+      </gnm:Styles>
+      <gnm:Cols DefaultSizePts="48">
+        <gnm:ColInfo No="0" Unit="48" MarginA="2" MarginB="2" Count="4"/>
+      </gnm:Cols>
+      <gnm:Rows DefaultSizePts="12.75">
+        <gnm:RowInfo No="0" Unit="12.75" MarginA="0" MarginB="0" Count="3"/>
+      </gnm:Rows>
+      <gnm:Selections CursorCol="3" CursorRow="1">
+        <gnm:Selection startCol="3" startRow="1" endCol="3" endRow="1"/>
+      </gnm:Selections>
+      <gnm:Cells>
+        <gnm:Cell Col="0" Row="0" ValueType="60">vone</gnm:Cell>
+        <gnm:Cell Col="1" Row="0" ValueType="60">vtwo</gnm:Cell>
+        <gnm:Cell Col="2" Row="0" ValueType="60">vthree</gnm:Cell>
+        <gnm:Cell Col="3" Row="0" ValueType="60">v4</gnm:Cell>
+        <gnm:Cell Col="0" Row="1" ValueType="30">1</gnm:Cell>
+        <gnm:Cell Col="1" Row="1" ValueType="30">3</gnm:Cell>
+        <gnm:Cell Col="3" Row="1" ValueType="30">5</gnm:Cell>
+        <gnm:Cell Col="0" Row="2" ValueType="30">2</gnm:Cell>
+        <gnm:Cell Col="1" Row="2" ValueType="30">4</gnm:Cell>
+        <gnm:Cell Col="3" Row="2" ValueType="30">6</gnm:Cell>
+      </gnm:Cells>
+      <gnm:SheetLayout TopLeft="A1"/>
+      <gnm:Solver ProblemType="1" Inputs="" MaxTime="0" MaxIter="0" NonNeg="1" Discr="0" AutoScale="0" ShowIter="0" AnswerR="0" SensitivityR="0" LimitsR="0" PerformR="0" ProgramR="0"/>
+    </gnm:Sheet>
+  </gnm:Sheets>
+  <gnm:UIData SelectedTab="4"/>
+  <gnm:Calculation ManualRecalc="0" EnableIteration="1" MaxIterations="100" IterationTolerance="0.001"/>
+</gnm:Workbook>
index 7683b9c57ba4e9d33660c71b8286f84b1f4148a9..dba2a4a12e182a0d14cd0db555ffcfb4389c54d0 100644 (file)
@@ -49,7 +49,7 @@ B,F8.0
 C,F8.0
 D,F8.0
 
-"data-list.pspp:3: warning: (columns 9-13, F field) Number followed by garbage."
+data-list.pspp:3.9-13: warning: Data for variable D is not valid as format F: Number followed by garbage.
 
 Table: Data List
 A,B,C,D
@@ -80,7 +80,7 @@ end data.
 list.
 ])
 AT_CHECK([pspp -O format=csv data-list.pspp], [0], [dnl
-"data-list.pspp:4: warning: (column 6, F field) Field contents are not numeric."
+data-list.pspp:4.6: warning: Data for variable D is not valid as format F: Field contents are not numeric.
 
 Table: Data List
 A,B,C,D
@@ -160,9 +160,9 @@ end data.
 list.
 ])
 AT_CHECK([pspp -O format=csv data-list.pspp], [0], [dnl
-"data-list.pspp:8: warning: (columns 1-3, F field) Field contents are not numeric."
+data-list.pspp:8.1-3: warning: Data for variable count is not valid as format F: Field contents are not numeric.
 
-"data-list.pspp:11: warning: (columns 1-3, F field) Field contents are not numeric."
+data-list.pspp:11.1-3: warning: Data for variable count is not valid as format F: Field contents are not numeric.
 
 Table: Data List
 start,end,count
@@ -199,3 +199,59 @@ x,y
 9,0
 ])
 AT_CLEANUP
+
+dnl Test that PSPP accepts LF and CR LF as line ends, but
+dnl treats isolated CR as linear whitespace.
+AT_SETUP([DATA LIST with various line-ends])
+AT_DATA([data-list.sps], [dnl
+data list list notable file='input.txt'/a b c.
+list.
+])
+printf '1 2 3\n4 5 6\r\n7\r8\r9\r\n10 11 12\n13 14 15 \r\n16\r\r17\r18\n' > input.txt
+dnl Make sure that input.txt actually received the data that we expect.
+dnl It might not have, if we're running on a system that translates \n
+dnl into some other sequence.
+AT_CHECK([cksum input.txt], [0], [1732021750 50 input.txt
+])
+AT_CHECK([pspp -o pspp.csv data-list.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+a,b,c
+1.00,2.00,3.00
+4.00,5.00,6.00
+7.00,8.00,9.00
+10.00,11.00,12.00
+13.00,14.00,15.00
+16.00,17.00,18.00
+])
+AT_CLEANUP
+
+AT_SETUP([DATA LIST properly expands tabs in input])
+AT_DATA([data-list.sps], [dnl
+data list notable /X 1-50 (a).
+begin data.
+       1       12      123     1234    12345    .
+end data.
+print /x.
+print outfile='print.txt' /x.
+write outfile='write.txt' /x.
+execute.
+])
+AT_CHECK([sed -n '/12345/l' data-list.sps], [0], [dnl
+\t1\t12\t123\t1234\t12345    .$
+])
+AT_CHECK([pspp -o pspp.csv data-list.sps])
+dnl The CSV driver drops leading spaces so they don't appear here:
+AT_CHECK([cat pspp.csv], [0], [dnl
+1       12      123     1234    12345    . @&t@
+])
+dnl But they do appear in print.txt.  The PRINT command also puts a space
+dnl at the beginning of the line and after the variable:
+AT_CHECK([cat print.txt], [0], [dnl
+         1       12      123     1234    12345    . @&t@
+])
+dnl WRITE doesn't add spaces at the beginning or end of lines:
+AT_CHECK([cat write.txt], [0], [dnl
+        1       12      123     1234    12345    .
+])
+AT_CLEANUP
index 281ca2a232aebd1a9f41f40e501068e373dc0d83..f00a42c44dffd56b3ee547845863a45a9bce6e76 100644 (file)
@@ -62,3 +62,171 @@ A,B
 2,1
 ])
 AT_CLEANUP
+
+m4_define([DATA_READER_BINARY], 
+  [AT_SETUP([read and write files with $1])
+   AT_DATA([input.txt], [dnl
+07-22-2007
+10-06-2007
+321
+07-14-1789
+08-26-1789
+4
+01-01-1972
+12-31-1999
+682
+])
+   AT_DATA([make-binary.pl], [dnl
+use strict;
+use warnings;
+
+# ASCII to EBCDIC translation table
+our ($ascii2ebcdic) = ""
+. "\x00\x01\x02\x03\x37\x2d\x2e\x2f"
+. "\x16\x05\x25\x0b\x0c\x0d\x0e\x0f"
+. "\x10\x11\x12\x13\x3c\x3d\x32\x26"
+. "\x18\x19\x3f\x27\x1c\x1d\x1e\x1f"
+. "\x40\x5a\x7f\x7b\x5b\x6c\x50\x7d"
+. "\x4d\x5d\x5c\x4e\x6b\x60\x4b\x61"
+. "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
+. "\xf8\xf9\x7a\x5e\x4c\x7e\x6e\x6f"
+. "\x7c\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
+. "\xc8\xc9\xd1\xd2\xd3\xd4\xd5\xd6"
+. "\xd7\xd8\xd9\xe2\xe3\xe4\xe5\xe6"
+. "\xe7\xe8\xe9\xad\xe0\xbd\x9a\x6d"
+. "\x79\x81\x82\x83\x84\x85\x86\x87"
+. "\x88\x89\x91\x92\x93\x94\x95\x96"
+. "\x97\x98\x99\xa2\xa3\xa4\xa5\xa6"
+. "\xa7\xa8\xa9\xc0\x4f\xd0\x5f\x07"
+. "\x20\x21\x22\x23\x24\x15\x06\x17"
+. "\x28\x29\x2a\x2b\x2c\x09\x0a\x1b"
+. "\x30\x31\x1a\x33\x34\x35\x36\x08"
+. "\x38\x39\x3a\x3b\x04\x14\x3e\xe1"
+. "\x41\x42\x43\x44\x45\x46\x47\x48"
+. "\x49\x51\x52\x53\x54\x55\x56\x57"
+. "\x58\x59\x62\x63\x64\x65\x66\x67"
+. "\x68\x69\x70\x71\x72\x73\x74\x75"
+. "\x76\x77\x78\x80\x8a\x8b\x8c\x8d"
+. "\x8e\x8f\x90\x6a\x9b\x9c\x9d\x9e"
+. "\x9f\xa0\xaa\xab\xac\x4a\xae\xaf"
+. "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
+. "\xb8\xb9\xba\xbb\xbc\xa1\xbe\xbf"
+. "\xca\xcb\xcc\xcd\xce\xcf\xda\xdb"
+. "\xdc\xdd\xde\xdf\xea\xeb\xec\xed"
+. "\xee\xef\xfa\xfb\xfc\xfd\xfe\xff";
+length ($ascii2ebcdic) == 256 || die;
+
+open (INPUT, '<', 'input.txt') or die "input.txt: open: $!\n";
+my (@data) = <INPUT> or die;
+close (INPUT) or die;
+chomp $_ foreach @data;
+
+our @records;
+
+$2
+
+sub a2e {
+    local ($_) = @_;
+    my ($s) = "";
+    foreach (split (//)) {
+        $s .= substr ($ascii2ebcdic, ord, 1);
+    }
+    return $s;
+}
+
+sub min {
+    my ($a, $b) = @_;
+    return $a < $b ? $a : $b
+}
+
+sub dump_records {
+    while (@records) {
+       my ($n) = min (int (rand (5)) + 1, scalar (@records));
+       my (@r) = splice (@records, 0, $n);
+       my ($len) = 0;
+       $len += length foreach @r;
+       print pack ("n xx", $len + 4);
+       print foreach @r;
+    }
+}
+])
+   AT_CHECK([$PERL make-binary.pl < input.txt > input.bin])
+   AT_DATA([data-reader.sps], [dnl
+FILE HANDLE input/NAME='input.bin'/$1.
+DATA LIST FIXED FILE=input NOTABLE
+       /1 start 1-10 (ADATE)
+       /2 end 1-10 (ADATE)
+       /3 count 1-3.
+LIST.
+
+* Output the data to a new file in the same format.
+FILE HANDLE OUTPUT/NAME='output.bin'/$1.
+COMPUTE count=count + 1.
+PRINT OUTFILE=output/start end count.
+EXECUTE.
+])
+   AT_CHECK([pspp -O format=csv data-reader.sps], [0], [dnl
+Table: Data List
+start,end,count
+07/22/2007,10/06/2007,321
+07/14/1789,08/26/1789,4
+01/01/1972,12/31/1999,682
+])
+   AT_CHECK([test -s output.bin])
+   AT_DATA([data-reader-2.sps], [dnl
+* Re-read the new data and list it, to verify that it was written correctly.
+FILE HANDLE OUTPUT/NAME='output.bin'/$1.
+DATA LIST FIXED FILE=output NOTABLE/
+       start 2-11 (ADATE)
+       end 13-22 (ADATE)
+       count 24-26.
+LIST.
+])
+   AT_CHECK([pspp -O format=csv data-reader-2.sps], [0], [dnl
+Table: Data List
+start,end,count
+07/22/2007,10/06/2007,322
+07/14/1789,08/26/1789,5
+01/01/1972,12/31/1999,683
+])
+   AT_CLEANUP])
+
+DATA_READER_BINARY([MODE=BINARY],
+  [for $_ (@data) {
+       my ($reclen) = pack ("V", length);
+       print $reclen, $_, $reclen;
+   }])
+
+DATA_READER_BINARY([MODE=360 /RECFORM=FIXED /LRECL=32],
+  [my ($lrecl) = 32;
+   for $_ (@data) {
+       my ($out) = substr ($_, 0, $lrecl);
+       $out .= ' ' x ($lrecl - length ($out));
+       length ($out) == 32 or die;
+       print +a2e ($out);
+   }])
+
+DATA_READER_BINARY([MODE=360 /RECFORM=VARIABLE],
+  [for $_ (@data) {
+       push (@records, pack ("n xx", length ($_) + 4) . a2e ($_));
+   }
+   dump_records ();])
+
+DATA_READER_BINARY([MODE=360 /RECFORM=SPANNED],
+  [[for my $line (@data) {
+       local ($_) = $line;
+       my (@r);
+       while (length) {
+          my ($n) = min (int (rand (5)), length);
+          push (@r, substr ($_, 0, $n, ''));
+       }
+       foreach my $i (0...$#r) {
+          my $scc = ($#r == 0 ? 0
+                     : $i == 0 ? 1
+                     : $i == $#r ? 2
+                     : 3);
+          push (@records,
+                pack ("nCx", length ($r[$i]) + 4, $scc) . a2e ($r[$i]));
+       }
+   }
+   dump_records ();]])
diff --git a/tests/language/data-io/file-handle.at b/tests/language/data-io/file-handle.at
new file mode 100644 (file)
index 0000000..add22d2
--- /dev/null
@@ -0,0 +1,28 @@
+AT_BANNER([FILE HANDLE])
+
+AT_SETUP([FILE HANDLE])
+AT_DATA([wiggle.txt], [dnl
+1
+2
+5
+109
+])
+AT_DATA([file-handle.sps], [dnl
+FILE HANDLE myhandle /NAME='wiggle.txt'.
+DATA LIST LIST FILE=myhandle /x *.
+LIST.
+])
+AT_CHECK([pspp -O format=csv file-handle.sps], [0], [dnl
+Table: Reading free-form data from myhandle.
+Variable,Format
+x,F8.0
+
+Table: Data List
+x
+1.00
+2.00
+5.00
+109.00
+])
+AT_CLEANUP
+
diff --git a/tests/language/data-io/get-data-gnm.at b/tests/language/data-io/get-data-gnm.at
new file mode 100644 (file)
index 0000000..92815dc
--- /dev/null
@@ -0,0 +1,162 @@
+AT_BANNER([GET DATA /TYPE=GNM])
+
+AT_SETUP([GET DATA /TYPE=GNM with CELLRANGE])
+AT_SKIP_IF([test "$GNM_SUPPORT" = no])
+AT_CHECK([gzip -c $top_srcdir/tests/language/data-io/Book1.gnm.unzipped > Book1.gnumeric])
+AT_DATA([get-data.sps], [dnl
+GET DATA /TYPE=gnm /FILE='Book1.gnumeric'  /READNAMES=off /SHEET=name 'This' /CELLRANGE=range 'g9:i13' .
+DISPLAY VARIABLES.
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv get-data.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Variable,Description,,Position
+VAR001,Format: F8.2,,1
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+VAR002,Format: A8,,2
+,Measure: Nominal,,
+,Display Alignment: Left,,
+,Display Width: 8,,
+VAR003,Format: F8.2,,3
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+
+Table: Data List
+VAR001,VAR002,VAR003
+.00,fred    ,20.00
+1.00,11      ,21.00
+2.00,twelve  ,22.00
+3.00,13      ,23.00
+4.00,14      ,24.00
+])
+AT_CLEANUP
+
+AT_SETUP([GET DATA /TYPE=GNM with CELLRANGE and READNAMES])
+AT_SKIP_IF([test "$GNM_SUPPORT" = no])
+AT_CHECK([gzip -c $top_srcdir/tests/language/data-io/Book1.gnm.unzipped > Book1.gnumeric])
+AT_DATA([get-data.sps], [dnl
+GET DATA /TYPE=gnm /FILE='Book1.gnumeric'  /READNAMES=on /SHEET=name 'This' /CELLRANGE=range 'g8:i13' .
+DISPLAY VARIABLES.
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv get-data.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Variable,Description,,Position
+V1,Format: F8.2,,1
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+V2,Format: A8,,2
+,Measure: Nominal,,
+,Display Alignment: Left,,
+,Display Width: 8,,
+VAR001,Format: F8.2,,3
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+
+Table: Data List
+V1,V2,VAR001
+.00,fred    ,20.00
+1.00,11      ,21.00
+2.00,twelve  ,22.00
+3.00,13      ,23.00
+4.00,14      ,24.00
+])
+AT_CLEANUP
+
+AT_SETUP([GET DATA /TYPE=GNM without CELLRANGE])
+AT_SKIP_IF([test "$GNM_SUPPORT" = no])
+AT_CHECK([gzip -c $top_srcdir/tests/language/data-io/Book1.gnm.unzipped > Book1.gnumeric])
+AT_DATA([get-data.sps], [dnl
+GET DATA /TYPE=gnm /FILE='Book1.gnumeric' /SHEET=index 3.
+DISPLAY VARIABLES.
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv get-data.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Variable,Description,,Position
+name,Format: A8,,1
+,Measure: Nominal,,
+,Display Alignment: Left,,
+,Display Width: 8,,
+id,Format: F8.2,,2
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+height,Format: F8.2,,3
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+
+Table: Data List
+name,id,height
+fred    ,.00,23.40
+bert    ,1.00,.56
+charlie ,2.00,.  @&t@
+dick    ,3.00,-34.09
+])
+AT_CLEANUP
+
+AT_SETUP([GET DATA /TYPE=GNM with missing data])
+AT_SKIP_IF([test "$GNM_SUPPORT" = no])
+AT_CHECK([gzip -c $top_srcdir/tests/language/data-io/Book1.gnm.unzipped > Book1.gnumeric])
+AT_DATA([get-data.sps], [dnl
+* This sheet has no data in one of its variables
+GET DATA /TYPE=gnm /FILE='Book1.gnumeric' /READNAMES=on /SHEET=index 5.
+DISPLAY VARIABLES.
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv get-data.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Variable,Description,,Position
+vone,Format: F8.2,,1
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+vtwo,Format: F8.2,,2
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+vthree,Format: A8,,3
+,Measure: Nominal,,
+,Display Alignment: Left,,
+,Display Width: 8,,
+v4,Format: F8.2,,4
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+
+Table: Data List
+vone,vtwo,vthree,v4
+1.00,3.00,,5.00
+2.00,4.00,,6.00
+])
+AT_CLEANUP
+
+AT_SETUP([GET DATA /TYPE=GNM with empty sheet])
+AT_SKIP_IF([test "$GNM_SUPPORT" = no])
+AT_CHECK([gzip -c $top_srcdir/tests/language/data-io/Book1.gnm.unzipped > Book1.gnumeric])
+AT_DATA([get-data.sps], [dnl
+* This sheet is empty
+GET DATA /TYPE=gnm /FILE='Book1.gnumeric' /SHEET=name 'Empty'.
+])
+AT_CHECK([pspp -o pspp.csv get-data.sps], [0], [dnl
+warning: Selected sheet or range of spreadsheet `Book1.gnumeric' is empty.
+])
+AT_CLEANUP
+
+AT_SETUP([GET DATA /TYPE=GNM with nonexistent sheet])
+AT_SKIP_IF([test "$GNM_SUPPORT" = no])
+AT_CHECK([gzip -c $top_srcdir/tests/language/data-io/Book1.gnm.unzipped > Book1.gnumeric])
+AT_DATA([get-data.sps], [dnl
+* This sheet doesnt exist.
+GET DATA /TYPE=gnm /FILE='Book1.gnumeric' /SHEET=name 'foobarxx'.
+])
+AT_CHECK([pspp -o pspp.csv get-data.sps], [0], [dnl
+warning: Selected sheet or range of spreadsheet `Book1.gnumeric' is empty.
+])
+AT_CLEANUP
diff --git a/tests/language/data-io/get-data-psql.at b/tests/language/data-io/get-data-psql.at
new file mode 100644 (file)
index 0000000..9ac5737
--- /dev/null
@@ -0,0 +1,340 @@
+AT_BANNER([GET DATA /TYPE=PSQL])
+
+m4_define([INIT_PSQL], 
+  [AT_SKIP_IF([test "$PSQL_SUPPORT" = no])
+   PATH=$PG_PATH:$PATH
+   export PATH
+   PGDATA=`pwd`/cluster
+   export PGDATA
+   PGHOST=`pwd`
+   export PGHOST
+   PGPORT=$PG_PORT
+   export PGPORT
+   AT_CHECK([initdb -A trust], [0], [ignore])
+   AT_CHECK([pg_ctl start -w -o "-k `pwd` -h ''"], [0], [ignore])
+   trap 'CLEANUP_PSQL' 0
+   AT_CHECK([createdb -h "`pwd`" -p $PG_PORT $PG_DBASE],
+      [0], [ignore], [ignore])
+   AT_DATA([populate.sql], 
+     [CREATE TABLE empty (a int, b date, c numeric(23, 4));
+
+      -- a largeish table to check big queries work ok.
+      CREATE TABLE large (x int);
+      INSERT INTO large  (select * from generate_series(1, 1000));
+
+
+      CREATE TABLE thing (
+       bool    bool                      ,
+       bytea   bytea                     ,
+       char    char                      ,
+       int8    int8                      ,
+       int2    int2                      ,
+       int4    int4                      ,
+       numeric       numeric(50,6)       ,
+       text    text                      ,
+       oid     oid                       ,
+       float4  float4                    ,
+       float8  float8                    ,
+       money   money                     ,
+       pbchar  bpchar                    ,
+       varchar varchar                   ,
+       date    date                      ,
+       time    time                      ,
+       timestamp     timestamp           ,
+       timestamptz   timestamptz         ,
+       interval      interval            ,
+       timetz        timetz              
+      );
+
+      INSERT INTO thing VALUES (
+       false,
+       '0',
+       'a',
+       '0',
+       0,
+       0,
+       -256.098,
+       'this-long-text',
+       0,
+       0,
+       0,
+       '0.01',
+       'a',
+       'A',
+       '1-Jan-2000',
+       '00:00',
+       'January 8 04:05:06 1999',
+       'January 8 04:05:06 1999 PST',
+       '1 minutes',
+       '10:09 UTC+4'
+      );
+
+      INSERT INTO thing VALUES (
+       null,
+       null,
+       null,
+       null,
+       null,
+       null,
+       null,
+       null,
+       null,
+       null,
+       null,
+       null,
+       null,
+       null,
+       null,
+       null,
+       null,
+       null,
+       null,
+       null
+      );
+
+      INSERT INTO thing VALUES (
+       true,
+       '1',
+       'b',
+       '1',
+       1,
+       1,
+       65535.00001,
+       'that-long-text',
+       1,
+       1,
+       1,
+       '1.23',
+       'b',
+       'B',
+       '10-Jan-1963',
+       '01:05:02',
+       '10-Jan-1963 23:58:00',
+       '10-Jan-1963 23:58:00 CET',
+       '2 year 1 month 12 days 1 hours 3 minutes 4 seconds',
+       '01:05:02 UTC-7'
+      );
+])
+   AT_CHECK([psql -h "`pwd`" -p $PG_PORT $PG_DBASE < populate.sql],
+      [0], [ignore])])
+
+m4_define([CLEANUP_PSQL], [pg_ctl stop -W -o "-k `pwd` -h ''"])
+
+AT_SETUP([GET DATA /TYPE=PSQL])
+INIT_PSQL
+
+dnl Test with an ordinary query.
+AT_CHECK([cat > ordinary-query.sps <<EOF
+GET DATA /TYPE=psql 
+       /CONNECT="host=$PGHOST port=$PGPORT dbname=$PG_DBASE"
+       /UNENCRYPTED
+       /SQL="select * from thing".
+
+DISPLAY DICTIONARY.
+
+LIST.
+EOF
+])
+AT_CHECK([pspp -o pspp.csv ordinary-query.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Variable,Description,,Position
+bool,Format: F8.2,,1
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+bytea,Format: AHEX2,,2
+,Measure: Nominal,,
+,Display Alignment: Left,,
+,Display Width: 1,,
+char,Format: A8,,3
+,Measure: Nominal,,
+,Display Alignment: Left,,
+,Display Width: 8,,
+int8,Format: F8.2,,4
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+int2,Format: F8.2,,5
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+int4,Format: F8.2,,6
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+numeric,Format: E40.6,,7
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+text,Format: A16,,8
+,Measure: Nominal,,
+,Display Alignment: Left,,
+,Display Width: 16,,
+oid,Format: F8.2,,9
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+float4,Format: F8.2,,10
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+float8,Format: F8.2,,11
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+money,Format: DOLLAR8.2,,12
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+pbchar,Format: A8,,13
+,Measure: Nominal,,
+,Display Alignment: Left,,
+,Display Width: 8,,
+varchar,Format: A8,,14
+,Measure: Nominal,,
+,Display Alignment: Left,,
+,Display Width: 8,,
+date,Format: DATE11,,15
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+time,Format: TIME11.0,,16
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+timestamp,Format: DATETIME22.0,,17
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+timestamptz,Format: DATETIME22.0,,18
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+interval,Format: DTIME13.0,,19
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+interval_months,Format: F3.0,,20
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+timetz,Format: TIME11.0,,21
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+timetz_zone,Format: F8.2,,22
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+
+Table: Data List
+bool,bytea,char,int8,int2,int4,numeric,text,oid,float4,float8,money,pbchar,varchar,date,time,timestamp,timestamptz,interval,interval_months,timetz,timetz_zone
+.00,30,a       ,.00,.00,.00,-2.560980E+002,this-long-text  ,.00,.00,.00,$.01,a       ,A       ,01-JAN-2000,0:00:00,08-JAN-1999 04:05:06,08-JAN-1999 12:05:06,0 00:01:00,0,10:09:00,4.00
+.  ,20,,.  ,.  ,.  ,.          ,,.  ,.  ,.  ,.  ,,,.,.,.,.,.,.,.,.  @&t@
+1.00,31,b       ,1.00,1.00,1.00,6.553500E+004,that-long-text  ,.00,1.00,1.00,$1.23,b       ,B       ,10-JAN-1963,1:05:02,10-JAN-1963 23:58:00,10-JAN-1963 22:58:00,12 01:03:04,25,1:05:02,-7.00
+])
+
+dnl Test query with empty result set.
+AT_CHECK([cat > empty-result.sps <<EOF
+GET DATA /TYPE=psql 
+       /CONNECT="host=$PGHOST port=$PGPORT dbname=$PG_DBASE"
+       /UNENCRYPTED
+       /SQL="select * from empty".
+
+DISPLAY DICTIONARY.
+
+LIST.
+EOF
+])
+AT_CHECK([pspp -o pspp.csv empty-result.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Variable,Description,,Position
+a,Format: F8.2,,1
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+b,Format: DATE11,,2
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+c,Format: E40.2,,3
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+])
+
+dnl Test query with large result set.
+AT_CHECK([cat > large-result.sps <<EOF
+GET DATA /TYPE=psql 
+       /CONNECT="host=$PGHOST port=$PGPORT dbname=$PG_DBASE"
+       /UNENCRYPTED
+       /SQL="select * from large".
+
+NUMERIC diff.
+COMPUTE diff = x - lag (x).
+
+TEMPORARY.
+SELECT IF (diff <> 1).
+LIST.
+
+TEMPORARY.
+N OF CASES 6.
+LIST.
+
+SORT CASES BY x (D).
+
+TEMPORARY.
+N OF CASES 6.
+LIST.
+EOF
+])
+AT_CHECK([pspp -o pspp.csv large-result.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+x,diff
+1.00,.  @&t@
+2.00,1.00
+3.00,1.00
+4.00,1.00
+5.00,1.00
+6.00,1.00
+
+Table: Data List
+x,diff
+1000.00,1.00
+999.00,1.00
+998.00,1.00
+997.00,1.00
+996.00,1.00
+995.00,1.00
+])
+
+dnl Check for a bug caused by having string variables in the database,
+dnl all of which are null.
+AT_DATA([all-null-string.sql],
+  [-- a table which has a text field containing only null, or zero
+   -- length entries.
+
+   CREATE TABLE foo (int4  int4, text text);
+
+   INSERT INTO foo VALUES ('12', '');
+
+   INSERT INTO foo VALUES (null, '');
+])
+AT_CHECK([psql -h "`pwd`" -p $PG_PORT $PG_DBASE < all-null-string.sql],
+  [0], [ignore])
+AT_CAPTURE_FILE([get-data.sps])
+AT_CHECK([cat > get-data.sps <<EOF
+GET DATA /TYPE=psql 
+       /CONNECT="host=$PGHOST port=$PGPORT dbname=$PG_DBASE"
+       /UNENCRYPTED
+       /SQL="select * from foo".
+
+DISPLAY DICTIONARY.
+
+LIST.
+EOF
+])
+AT_CHECK([pspp -o pspp.csv get-data.sps])
+AT_CAPTURE_FILE([pspp.csv])
+AT_CLEANUP
diff --git a/tests/language/data-io/get-data-txt.at b/tests/language/data-io/get-data-txt.at
new file mode 100644 (file)
index 0000000..e4c6ae3
--- /dev/null
@@ -0,0 +1,570 @@
+AT_BANNER([GET DATA /TYPE=TXT])
+
+dnl These tests exercise features of GET DATA /TYPE=TXT that
+dnl it has in common with DATA LIST, using tests drawn from
+dnl DATA LIST.
+
+AT_SETUP([GET DATA /TYPE=TXT with explicit delimiters])
+AT_DATA([get-data.sps], [dnl
+get data /type=txt /file=inline /delimiters="|X"
+ /variables=A f7.2 B f7.2 C f7.2 D f7.2.
+begin data.
+1|23X45|2.03
+2X22|34|23|
+3|34|34X34
+end data.
+
+list.
+])
+AT_CHECK([pspp -o pspp.csv get-data.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+A,B,C,D
+1.00,23.00,45.00,2.03
+2.00,22.00,34.00,23.00
+3.00,34.00,34.00,34.00
+])
+AT_CLEANUP
+
+AT_SETUP([GET DATA /TYPE=TXT with FIRSTCASE])
+AT_DATA([get-data.sps], [dnl
+get data /type=txt /file=inline /delimiters=', ' /delcase=variables 4
+ /firstcase=2 /variables=A f7.2 B f7.2 C f7.2 D f7.2.
+begin data.
+# This record is ignored.
+,1,2,3
+,4,,5
+6
+7,
+8 9
+0,1,,,
+,,,,
+2
+
+3
+4
+5
+end data.
+list.
+])
+AT_CHECK([pspp -o pspp.csv get-data.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+A,B,C,D
+.  ,1.00,2.00,3.00
+.  ,4.00,.  ,5.00
+6.00,7.00,.  ,8.00
+9.00,.00,1.00,.  @&t@
+.  ,.  ,.  ,.  @&t@
+.  ,.  ,.  ,2.00
+.  ,3.00,4.00,5.00
+])
+AT_CLEANUP
+
+AT_SETUP([GET DATA /TYPE=TXT with FIRSTCASE and tab delimiter])
+AT_DATA([get-data.sps], [dnl
+get data /type=txt /file=inline /delimiters='\t' /delcase=variables 4
+ /firstcase=3 /variables=A f7.2 B f7.2 C f7.2 D f7.2.
+begin data.
+# These records
+# are skipped.
+1      2       3       4
+1      2       3       @&t@
+1      2               4
+1      2               @&t@
+1              3       4
+1              3       @&t@
+1                      4
+1                      @&t@
+       2       3       4
+       2       3       @&t@
+       2               4
+       2               @&t@
+               3       4
+               3       @&t@
+                       4
+                       @&t@
+end data.
+list.
+])
+AT_CHECK([pspp -o pspp.csv get-data.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+A,B,C,D
+1.00,2.00,3.00,4.00
+1.00,2.00,3.00,.  @&t@
+1.00,2.00,.  ,4.00
+1.00,2.00,.  ,.  @&t@
+1.00,.  ,3.00,4.00
+1.00,.  ,3.00,.  @&t@
+1.00,.  ,.  ,4.00
+1.00,.  ,.  ,.  @&t@
+.  ,2.00,3.00,4.00
+.  ,2.00,3.00,.  @&t@
+.  ,2.00,.  ,4.00
+.  ,2.00,.  ,.  @&t@
+.  ,.  ,3.00,4.00
+.  ,.  ,3.00,.  @&t@
+.  ,.  ,.  ,4.00
+.  ,.  ,.  ,.  @&t@
+])
+AT_CLEANUP
+
+AT_SETUP([GET DATA /TYPE=TXT with multiple records per case])
+AT_DATA([get-data.sps], [dnl
+get data /type=txt /file=inline /arrangement=fixed /fixcase=3 /variables=
+       /1 start 0-19 adate
+       /2 end 0-19 adate
+       /3 count 0-2 f.
+begin data.
+07-22-2007
+10-06-2007
+321
+07-14-1789
+08-26-1789
+4
+01-01-1972
+12-31-1999
+682
+end data.
+list.
+])
+AT_CHECK([pspp -o pspp.csv get-data.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+start,end,count
+07/22/2007,10/06/2007,321
+07/14/1789,08/26/1789,4
+01/01/1972,12/31/1999,682
+])
+AT_CLEANUP
+
+AT_SETUP([GET DATA /TYPE=TXT with empty trailing record])
+AT_DATA([get-data.sps], [dnl
+get data /type=txt /file=inline /arrangement=fixed /fixcase=2 /variables=
+       /1 x 0 f 
+           y 1 f.
+begin data.
+12
+
+34
+
+56
+
+78
+
+90
+
+end data.
+list.
+])
+AT_CHECK([pspp -o pspp.csv get-data.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+x,y
+1,2
+3,4
+5,6
+7,8
+9,0
+])
+AT_CLEANUP
+
+dnl This test is a copy of an example given in the manual
+dnl in doc/files.texi.
+AT_SETUP([GET DATA /TYPE=TXT password example])
+AT_DATA([passwd.data], [dnl
+root:$1$nyeSP5gD$pDq/:0:0:,,,:/root:/bin/bash
+blp:$1$BrP/pFg4$g7OG:1000:1000:Ben Pfaff,,,:/home/blp:/bin/bash
+john:$1$JBuq/Fioq$g4A:1001:1001:John Darrington,,,:/home/john:/bin/bash
+jhs:$1$D3li4hPL$88X1:1002:1002:Jason Stover,,,:/home/jhs:/bin/csh
+])
+AT_DATA([passwd.sps], [dnl
+GET DATA /TYPE=TXT /FILE='passwd.data' /DELIMITERS=':'
+        /VARIABLES=username A20
+                   password A40
+                   uid F10
+                   gid F10
+                   gecos A40
+                   home A40
+                   shell A40.
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv passwd.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+username,password,uid,gid,gecos,home,shell
+root                ,$1$nyeSP5gD$pDq/                        ,0,0,",,,                                     ",/root                                   ,/bin/bash                               @&t@
+blp                 ,$1$BrP/pFg4$g7OG                        ,1000,1000,"Ben Pfaff,,,                            ",/home/blp                               ,/bin/bash                               @&t@
+john                ,$1$JBuq/Fioq$g4A                        ,1001,1001,"John Darrington,,,                      ",/home/john                              ,/bin/bash                               @&t@
+jhs                 ,$1$D3li4hPL$88X1                        ,1002,1002,"Jason Stover,,,                         ",/home/jhs                               ,/bin/csh                                @&t@
+])
+AT_CLEANUP
+
+dnl This test is a copy of an example given in the manual
+dnl in doc/files.texi.
+AT_SETUP([GET DATA /TYPE=TXT cars example])
+AT_DATA([cars.data], [dnl
+model   year    mileage price   type    age
+Civic   2002    29883   15900   Si      2
+Civic   2003    13415   15900   EX      1
+Civic   1992    107000  3800    n/a     12
+Accord  2002    26613   17900   EX      1
+])
+AT_DATA([cars.sps], [dnl
+GET DATA /TYPE=TXT /FILE='cars.data' /DELIMITERS=' ' /FIRSTCASE=2
+        /VARIABLES=model A8
+                   year F4
+                   mileage F6
+                   price F5
+                   type A4
+                   age F2.
+LIST.
+
+GET DATA /TYPE=TXT /FILE='cars.data' /ARRANGEMENT=FIXED /FIRSTCASE=2
+        /VARIABLES=model 0-7 A
+                   year 8-15 F
+                   mileage 16-23 F
+                   price 24-31 F
+                   type 32-39 A
+                   age 40-47 F.
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv cars.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+model,year,mileage,price,type,age
+Civic   ,2002,29883,15900,Si  ,2
+Civic   ,2003,13415,15900,EX  ,1
+Civic   ,1992,107000,3800,n/a ,12
+Accord  ,2002,26613,17900,EX  ,1
+
+Table: Data List
+model,year,mileage,price,type,age
+Civic   ,2002,29883,15900,Si      ,2
+Civic   ,2003,13415,15900,EX      ,1
+Civic   ,1992,107000,3800,n/a     ,12
+Accord  ,2002,26613,17900,EX      ,1
+])
+AT_CLEANUP
+
+dnl This test is a copy of an example given in the manual
+dnl in doc/files.texi.
+AT_SETUP([GET DATA /TYPE=TXT pets example])
+AT_DATA([pets.data], [dnl
+'Pet''s Name', "Age", "Color", "Date Received", "Price", "Height", "Type"
+, (Years), , , (Dollars), ,
+"Rover", 4.5, Brown, "12 Feb 2004", 80, '1''4"', "Dog"
+"Charlie", , Gold, "5 Apr 2007", 12.3, "3""", "Fish"
+"Molly", 2, Black, "12 Dec 2006", 25, '5"', "Cat"
+"Gilly", , White, "10 Apr 2007", 10, "3""", "Guinea Pig"
+])
+AT_DATA([pets.sps], [dnl
+GET DATA /TYPE=TXT /FILE='pets.data' /DELIMITERS=', ' /QUALIFIER='''"' /ESCAPE
+        /FIRSTCASE=3
+        /VARIABLES=name A10
+                   age F3.1
+                   color A5
+                   received EDATE10
+                   price F5.2
+                   height a5
+                   type a10.
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv pets.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+name,age,color,received,price,height,type
+Rover     ,4.5,Brown,12.02.2004,80.00,"1'4"" ",Dog       @&t@
+Charlie   ,. ,Gold ,05.04.2007,12.30,"3""   ",Fish      @&t@
+Molly     ,2.0,Black,12.12.2006,25.00,"5""   ",Cat       @&t@
+Gilly     ,. ,White,10.04.2007,10.00,"3""   ",Guinea Pig
+])
+AT_CLEANUP
+dnl " (fixes Emacs highlighting)
+
+AT_SETUP([GET DATA /TYPE=TXT with IMPORTCASES])
+AT_CHECK([$PERL > test.data <<'EOF'
+for ($i = 1; $i <= 100; $i++) {
+    printf "%02d\n", $i;
+}
+EOF
+])
+AT_DATA([get-data.sps], [dnl
+get data /type=txt /file='test.data' /importcases=first 10 /variables x f8.0.
+list.
+
+get data /type=txt /file='test.data' /importcases=percent 1 /variables x f8.0.
+list.
+
+get data /type=txt /file='test.data' /importcases=percent 35 /variables x f8.0.
+list.
+
+get data /type=txt /file='test.data' /importcases=percent 95 /variables x f8.0.
+list.
+
+get data /type=txt /file='test.data' /importcases=percent 100 /variables x f8.0.
+list.
+])
+AT_CHECK([pspp -o pspp.csv get-data.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+x
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+
+Table: Data List
+x
+1
+2
+
+Table: Data List
+x
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+
+Table: Data List
+x
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+
+Table: Data List
+x
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+])
+AT_CLEANUP
diff --git a/tests/language/data-io/get.at b/tests/language/data-io/get.at
new file mode 100644 (file)
index 0000000..a519b67
--- /dev/null
@@ -0,0 +1,94 @@
+AT_BANNER([GET])
+
+dnl Tests for a bug which caused the second procedure
+dnl after GET to have corrupt input.
+AT_SETUP([GET data works in multiple procedures])
+AT_DATA([get.sps], [dnl
+DATA LIST LIST NOTABLE /LOCATION * EDITOR * SHELL * FREQ * .
+BEGIN DATA.
+    1.00     1.00    1.0     2.00
+    1.00     1.00    2.0    30.00
+    1.00     2.00    1.0     8.00
+    1.00     2.00    2.0    20.00
+    2.00     1.00    1.0     2.00
+    2.00     1.00    2.0    22.00
+    2.00     2.00    1.0     1.00
+    2.00     2.00    2.0     3.00
+END DATA.
+
+SAVE /OUTFILE='foo.sav'.
+
+GET /FILE='foo.sav'.
+
+* This one's ok
+LIST.
+
+* But this one get rubbish
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv get.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+LOCATION,EDITOR,SHELL,FREQ
+1.00,1.00,1.00,2.00
+1.00,1.00,2.00,30.00
+1.00,2.00,1.00,8.00
+1.00,2.00,2.00,20.00
+2.00,1.00,1.00,2.00
+2.00,1.00,2.00,22.00
+2.00,2.00,1.00,1.00
+2.00,2.00,2.00,3.00
+
+Table: Data List
+LOCATION,EDITOR,SHELL,FREQ
+1.00,1.00,1.00,2.00
+1.00,1.00,2.00,30.00
+1.00,2.00,1.00,8.00
+1.00,2.00,2.00,20.00
+2.00,1.00,1.00,2.00
+2.00,1.00,2.00,22.00
+2.00,2.00,1.00,1.00
+2.00,2.00,2.00,3.00
+])
+AT_CLEANUP
+
+dnl Tests for a bug that crashed when GET specified a nonexistent file.
+AT_SETUP([GET nonexistent file doesn't crash])
+dnl We use stdin here, because the bug seems to manifest itself only in 
+dnl interactive mode.
+AT_CHECK([echo "GET /FILE='nonexistent.sav'." | pspp -O format=csv], [1], [dnl
+error: An error occurred while opening `nonexistent.sav': No such file or directory.
+
+-:1: error: Stopping syntax file processing here to avoid a cascade of dependent command failures.
+])
+AT_CLEANUP
+
+dnl Tests for bug #15766 (/KEEP subcommand on SAVE doesn't
+dnl fully support ALL) and underlying problems.
+m4_define([GET_KEEP_ALL],
+  [AT_SETUP([GET with /KEEP=ALL crashes -- $1])
+   AT_DATA([get.sps], [dnl
+DATA LIST LIST NOTABLE 
+       /a b c d e f g h i j k l m n o p q r s t u v w x y z (F2.0).
+BEGIN DATA.
+1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
+END DATA.
+LIST.
+SAVE OUTFILE='test.sav'/$1.
+GET FILE='test.sav'/KEEP=x y z all.
+LIST.
+])
+   AT_CHECK([pspp -o pspp.csv get.sps])
+   AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
+1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26
+
+Table: Data List
+x,y,z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w
+24,25,26,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
+])
+   AT_CLEANUP])
+GET_KEEP_ALL([uncompressed])
+GET_KEEP_ALL([compressed])
+
diff --git a/tests/language/data-io/inpt-pgm.at b/tests/language/data-io/inpt-pgm.at
new file mode 100644 (file)
index 0000000..7f2e143
--- /dev/null
@@ -0,0 +1,37 @@
+AT_BANNER([INPUT PROGRAM])
+
+dnl Tests for a bug which caused a crash when 
+dnl reading invalid INPUT PROGRAM syntax.
+AT_SETUP([INPUT PROGRAM invalid syntax crash])
+AT_DATA([input-program.sps], [dnl
+INPUT PROGRAM.
+DATA LIST NOTABLE /a 1-9.
+BEGIN DATA
+123456789
+END DATA.
+END INPUT PROGRAM.
+])
+AT_CHECK([pspp -O format=csv input-program.sps], [1], [dnl
+input-program.sps:3: error: BEGIN DATA: BEGIN DATA is not allowed inside INPUT PROGRAM.
+
+input-program.sps:4: error: Syntax error at `123456789': expecting command name.
+
+input-program.sps:5: error: Unknown command END DATA.
+])
+AT_CLEANUP
+
+dnl Tests for bug #21108, a crash when 
+dnl reading invalid INPUT PROGRAM syntax.
+AT_SETUP([INPUT PROGRAM invalid syntax crash])
+AT_DATA([input-program.sps], [dnl
+INPUT PROGRAM.
+DATA LIST LIST NOTABLE /x.
+END FILE.
+END INPUT PROGRAM.
+
+DESCRIPTIVES x.
+])
+AT_CHECK([pspp -O format=csv input-program.sps], [1], [dnl
+error: DESCRIPTIVES: Syntax error at end of file: expecting `BEGIN'.
+])
+AT_CLEANUP
diff --git a/tests/language/data-io/list.at b/tests/language/data-io/list.at
new file mode 100644 (file)
index 0000000..f8b3bb5
--- /dev/null
@@ -0,0 +1,186 @@
+AT_BANNER([LIST])
+
+AT_SETUP([LIST plain cases])
+AT_DATA([data.txt], [dnl
+   18    1
+   19    7
+   20   26
+   21   76
+   22   57
+   23   58
+   24   38
+   25   38
+   26   30
+   27   21
+   28   23
+])
+AT_DATA([list.sps], [dnl
+DATA LIST FILE='data.txt'/avar 1-5 bvar 6-10.
+WEIGHT BY bvar.
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv list.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Reading 1 record from `data.txt'.
+Variable,Record,Columns,Format
+avar,1,1-  5,F5.0
+bvar,1,6- 10,F5.0
+
+Table: Data List
+avar,bvar
+18,1
+19,7
+20,26
+21,76
+22,57
+23,58
+24,38
+25,38
+26,30
+27,21
+28,23
+])
+AT_CLEANUP
+
+AT_SETUP([LIST numbered cases])
+AT_DATA([data.txt], [dnl
+   18    1
+   19    7
+   20   26
+   21   76
+   22   57
+   23   58
+   24   38
+   25   38
+   26   30
+   27   21
+   28   23
+])
+AT_DATA([list.sps], [dnl
+DATA LIST FILE='data.txt'/avar 1-5 bvar 6-10.
+WEIGHT BY bvar.
+LIST/FORMAT NUMBERED.
+])
+AT_CHECK([pspp -o pspp.csv list.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Reading 1 record from `data.txt'.
+Variable,Record,Columns,Format
+avar,1,1-  5,F5.0
+bvar,1,6- 10,F5.0
+
+Table: Data List
+Case Number,avar,bvar
+1,18,1
+2,19,7
+3,20,26
+4,21,76
+5,22,57
+6,23,58
+7,24,38
+8,25,38
+9,26,30
+10,27,21
+11,28,23
+])
+AT_CLEANUP
+
+AT_SETUP([LIST lots of variables])
+AT_DATA([data.txt], [dnl
+767532466348513789073483106409
+888693089424177542378334186760
+492611507909187152726427852242
+819848892023195875879332001491
+452777898709563729845541516650
+239961967077732760663525115073
+])
+AT_DATA([list.sps], [dnl
+DATA LIST FILE='data.txt' NOTABLE/x01 to x30 1-30.
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv list.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+x01,x02,x03,x04,x05,x06,x07,x08,x09,x10,x11,x12,x13,x14,x15,x16,x17,x18,x19,x20,x21,x22,x23,x24,x25,x26,x27,x28,x29,x30
+7,6,7,5,3,2,4,6,6,3,4,8,5,1,3,7,8,9,0,7,3,4,8,3,1,0,6,4,0,9
+8,8,8,6,9,3,0,8,9,4,2,4,1,7,7,5,4,2,3,7,8,3,3,4,1,8,6,7,6,0
+4,9,2,6,1,1,5,0,7,9,0,9,1,8,7,1,5,2,7,2,6,4,2,7,8,5,2,2,4,2
+8,1,9,8,4,8,8,9,2,0,2,3,1,9,5,8,7,5,8,7,9,3,3,2,0,0,1,4,9,1
+4,5,2,7,7,7,8,9,8,7,0,9,5,6,3,7,2,9,8,4,5,5,4,1,5,1,6,6,5,0
+2,3,9,9,6,1,9,6,7,0,7,7,7,3,2,7,6,0,6,6,3,5,2,5,1,1,5,0,7,3
+])
+AT_CLEANUP
+
+AT_SETUP([LIST selected cases])
+AT_DATA([data.txt], [dnl
+7675324663
+8886930894
+4926115079
+8198488920
+4527778987
+2399619670
+1667799691
+1623914684
+3681393233
+6418731145
+2284534083
+6617637452
+9865713582
+1163234537
+9981663637
+6821567746
+0952774952
+1641790193
+3763182871
+2046820753
+7970620091
+4841176017
+6949973797
+1396285996
+0700489524
+])
+AT_DATA([list.sps], [dnl
+DATA LIST FILE='data.txt' NOTABLE/x0 to x9 1-10.
+LIST /CASES=FROM 1 TO 25 BY 5.
+])
+AT_CHECK([pspp -o pspp.csv list.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+x0,x1,x2,x3,x4,x5,x6,x7,x8,x9
+7,6,7,5,3,2,4,6,6,3
+2,3,9,9,6,1,9,6,7,0
+2,2,8,4,5,3,4,0,8,3
+6,8,2,1,5,6,7,7,4,6
+7,9,7,0,6,2,0,0,9,1
+])
+AT_CLEANUP
+
+dnl This program tests for a bug which caused a buffer overflow
+dnl when the list command attempted to write very long strings.
+AT_SETUP([LIST very long string])
+AT_DATA([list.sps], [dnl
+INPUT PROGRAM.
+STRING foo (a2000).
++ COMPUTE foo=CONCAT(RPAD('A',1999, 'x'), 'Z').
+END CASE.
+END FILE.
+END INPUT PROGRAM.
+
+EXECUTE.
+
+DISPLAY VARIABLES.
+
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv list.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Variable,Description,,Position
+foo,Format: A2000,,1
+,Measure: Nominal,,
+,Display Alignment: Left,,
+,Display Width: 32,,
+
+Table: Data List
+foo
+AxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxZ
+])
+AT_CLEANUP
diff --git a/tests/language/data-io/match-files.at b/tests/language/data-io/match-files.at
new file mode 100644 (file)
index 0000000..2cca521
--- /dev/null
@@ -0,0 +1,200 @@
+AT_BANNER([MATCH FILES])
+
+m4_define([PREPARE_MATCH_FILES],
+  [AT_DATA([data1.txt], [dnl
+1aB
+8aM
+3aE
+5aG
+0aA
+5aH
+6aI
+7aJ
+2aD
+7aK
+1aC
+7aL
+4aF
+])
+
+   AT_DATA([data2.txt], [dnl
+1bN
+3bO
+4bP
+6bQ
+7bR
+9bS
+])
+
+   AT_DATA([prepare.sps], [dnl
+DATA LIST NOTABLE FILE='data1.txt' /a b c 1-3 (A).
+SAVE OUTFILE='data1.sav'.
+DATA LIST NOTABLE FILE='data2.txt' /a b c 1-3 (A).
+SAVE OUTFILE='data2.sav'.
+])
+   AT_CHECK([pspp -O format=csv prepare.sps])
+   AT_CHECK([test -f data1.sav && test -f data2.sav])])
+
+dnl CHECK_MATCH_FILES(TYPE2, SOURCE1, SOURCE2)
+dnl
+dnl Checks the MATCH FILES procedure with the specified combination of:
+dnl
+dnl - TYPE2: Either "file" or "table" for the type of matching used for
+dnl   the second data source.  (The first data source is always "file").
+dnl
+dnl - SOURCE1: Either "system" or "active" for the source of data for
+dnl   the first data source.
+dnl
+dnl - SOURCE2: Either "system" or "active" for the source of data for
+dnl   the second data source.  (SOURCE1 and SOURCE2 may not both be
+dnl   "active".)
+m4_define([CHECK_MATCH_FILES], 
+  [AT_SETUP([MATCH FILES -- $2 file and $3 $1])
+   PREPARE_MATCH_FILES
+   AT_DATA([expout],
+    [m4_if([$1], [file], [dnl
+Table: Data List
+a,b,c,d,ina,inb,first,last
+0,a,A,,1,0,1,1
+1,a,B,N,1,1,1,0
+1,a,C,,1,0,0,1
+2,a,D,,1,0,1,1
+3,a,E,O,1,1,1,1
+4,a,F,P,1,1,1,1
+5,a,G,,1,0,1,0
+5,a,H,,1,0,0,1
+6,a,I,Q,1,1,1,1
+7,a,J,R,1,1,1,0
+7,a,K,,1,0,0,0
+7,a,L,,1,0,0,1
+8,a,M,,1,0,1,1
+9,b,,S,0,1,1,1
+], [dnl
+Table: Data List
+a,b,c,d,ina,inb,first,last
+0,a,A,,1,0,1,1
+1,a,B,N,1,1,1,0
+1,a,C,N,1,1,0,1
+2,a,D,,1,0,1,1
+3,a,E,O,1,1,1,1
+4,a,F,P,1,1,1,1
+5,a,G,,1,0,1,0
+5,a,H,,1,0,0,1
+6,a,I,Q,1,1,1,1
+7,a,J,R,1,1,1,0
+7,a,K,R,1,1,0,0
+7,a,L,R,1,1,0,1
+8,a,M,,1,0,1,1
+])])
+
+   AT_DATA([match-files.sps], [dnl
+m4_if([$2], [active], [GET FILE='data1.sav'.],
+      [$3], [active], [GET FILE='data2.sav'.],
+      [])
+MATCH FILES
+       FILE=m4_if([$2], [active], [*], ['data1.sav']) /IN=ina /SORT
+       $1=m4_if([$3], [active], [*], ['data2.sav']) /in=inb /rename c=d
+       /BY a /FIRST=first /LAST=last.
+LIST.
+])
+   AT_CHECK([pspp -o pspp.csv match-files.sps])
+   AT_CHECK([cat pspp.csv], [0], [expout])
+   AT_CLEANUP])
+
+CHECK_MATCH_FILES([file], [system], [system])
+CHECK_MATCH_FILES([file], [system], [active])
+CHECK_MATCH_FILES([file], [active], [system])
+CHECK_MATCH_FILES([table], [system], [system])
+CHECK_MATCH_FILES([table], [system], [active])
+CHECK_MATCH_FILES([table], [active], [system])
+
+AT_SETUP([MATCH FILES parallel match])
+PREPARE_MATCH_FILES
+AT_DATA([match-files.sps], [dnl
+MATCH FILES FILE='data1.sav' /FILE='data2.sav' /RENAME (a b c=d e f).
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv match-files.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+a,b,c,d,e,f
+1,a,B,1,b,N
+8,a,M,3,b,O
+3,a,E,4,b,P
+5,a,G,6,b,Q
+0,a,A,7,b,R
+5,a,H,9,b,S
+6,a,I,,,
+7,a,J,,,
+2,a,D,,,
+7,a,K,,,
+1,a,C,,,
+7,a,L,,,
+4,a,F,,,
+])
+AT_CLEANUP
+
+dnl Test bug handling TABLE from active file found by John Darrington.
+AT_SETUP([MATCH FILES bug with TABLE from active file])
+AT_DATA([match-files.sps], [dnl
+DATA LIST LIST NOTABLE /x * y *.
+BEGIN DATA
+3 30
+2 21
+1 22
+END DATA.
+
+SAVE OUTFILE='bar.sav'.
+
+DATA LIST LIST NOTABLE /x * z *.
+BEGIN DATA
+3 8
+2 9
+END DATA.
+
+MATCH FILES TABLE=* /FILE='bar.sav' /BY=x.
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv match-files.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+x,z,y
+3.00,8.00,30.00
+2.00,.  ,21.00
+1.00,.  ,22.00
+])
+AT_CLEANUP
+
+dnl Tests for a bug which caused MATCH FILES to crash
+dnl when used with scratch variables.
+AT_SETUP([MATCH FILES bug with scratch variables])
+AT_DATA([match-files.sps], [dnl
+DATA LIST LIST /w * x * y * .
+BEGIN DATA
+4 5 6
+1 2 3
+END DATA.
+
+COMPUTE j=0.
+LOOP #k = 1 to 10.
+COMPUTE j=#k + j.
+END LOOP.
+
+MATCH FILES FILE=* /DROP=w.
+LIST.
+FINISH.
+])
+AT_CHECK([pspp -o pspp.csv match-files.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+w,F8.0
+x,F8.0
+y,F8.0
+
+Table: Data List
+x,y,j
+5.00,6.00,55.00
+2.00,3.00,55.00
+])
+AT_CLEANUP
diff --git a/tests/language/data-io/print.at b/tests/language/data-io/print.at
new file mode 100644 (file)
index 0000000..9381d7d
--- /dev/null
@@ -0,0 +1,304 @@
+AT_BANNER([PRINT and WRITE])
+
+dnl These tests check unusual aspects of the PRINT and WRITE
+dnl transformations:
+dnl
+dnl   - PRINT puts spaces between variables, unless a format
+dnl     is specified explicitly.
+dnl
+dnl   - WRITE doesn't put space between variables.
+dnl
+dnl   - PRINT to an external file prefixes each line with a space.
+dnl
+dnl   - PRINT EJECT to an external file indicates a formfeed by a "1"
+dnl     in the first column.
+dnl
+dnl   - WRITE writes out spaces for system-missing values, not a period.
+dnl
+dnl   - When no output is specified, an empty record is output.
+
+AT_SETUP([PRINT numeric variables])
+AT_DATA([print.sps], [dnl
+data list notable /x y 1-2.
+begin data.
+12
+34
+ 6
+7
+90
+end data.
+
+print /x y.
+print eject /x y 1-2.
+print /x '-' y.
+print.
+
+execute.
+])
+AT_CHECK([pspp -O format=csv print.sps], [0], [dnl
+1 2 @&t@
+
+
+
+12
+
+1 -2 @&t@
+
+
+
+3 4 @&t@
+
+
+
+34
+
+3 -4 @&t@
+
+
+
+. 6 @&t@
+
+
+
+.6
+
+. -6 @&t@
+
+
+
+7 . @&t@
+
+
+
+7.
+
+7 -. @&t@
+
+
+
+9 0 @&t@
+
+
+
+90
+
+9 -0 @&t@
+
+
+])
+AT_CLEANUP
+
+AT_SETUP([PRINT string variables])
+AT_DATA([print.sps], [dnl
+DATA LIST FREE /s8 (a8) s10 (a10) vl255 (a255) vl258 (a258).
+BEGIN DATA.
+12345678
+AaaaaaaaaZ
+AbbbbMaryHadALittleLambbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbZ
+AccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccZ
+87654321
+AnnnnnnnnZ
+AmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmZ
+AoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooWhyIsItSoZ
+END DATA.
+
+print
+       outfile='print.txt'
+       /s10 * vl255 * vl258 *.
+
+EXECUTE.
+])
+AT_CHECK([pspp -O format=csv print.sps])
+AT_CHECK([cat print.txt], [0], [dnl
+ AaaaaaaaaZ AbbbbMaryHadALittleLambbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbZ AccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccZ @&t@
+ AnnnnnnnnZ AmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmZ AoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooWhyIsItSoZ @&t@
+])
+AT_CLEANUP
+
+AT_SETUP([PRINT to file])
+AT_DATA([print.sps], [dnl
+data list notable /x y 1-2.
+begin data.
+12
+34
+ 6
+7
+90
+end data.
+
+print outfile='print.out' /x y.
+print eject outfile='print.out' /x y (f1,f1).
+print outfile='print.out' /x '-' y.
+print outfile='print.out'.
+
+execute.
+])
+AT_CHECK([pspp -O format=csv print.sps])
+AT_CHECK([cat print.out], [0], [dnl
+ 1 2 @&t@
+112
+ 1 -2 @&t@
+ @&t@
+ 3 4 @&t@
+134
+ 3 -4 @&t@
+ @&t@
+ . 6 @&t@
+1.6
+ . -6 @&t@
+ @&t@
+ 7 . @&t@
+17.
+ 7 -. @&t@
+ @&t@
+ 9 0 @&t@
+190
+ 9 -0 @&t@
+ @&t@
+])
+AT_CLEANUP
+
+dnl Tests for a bug which crashed when deallocating after a bad PRINT
+dnl command.
+AT_SETUP([PRINT crash bug])
+AT_DATA([print.sps], [dnl
+DATA LIST LIST NOTABLE /a * b *.
+BEGIN DATA.
+1 2
+3 4
+END DATA.
+
+PRINT F8.2
+LIST.
+])
+AT_CHECK([pspp -O format=csv print.sps], [1], [dnl
+print.sps:7: error: PRINT: Syntax error at `F8.2': expecting a valid subcommand.
+
+Table: Data List
+a,b
+1.00,2.00
+3.00,4.00
+])
+AT_CLEANUP
+
+AT_SETUP([WRITE to file])
+AT_DATA([write.sps], [dnl
+data list notable /x y 1-2.
+begin data.
+12
+34
+ 6
+7
+90
+end data.
+
+write outfile='write.out' /x y.
+write outfile='write.out' /x y (2(f1)).
+write outfile='write.out' /x '-' y.
+write outfile='write.out'.
+
+execute.
+])
+AT_CHECK([pspp -O format=csv write.sps])
+AT_CHECK([cat write.out], [0], [dnl
+12
+12
+1-2
+
+34
+34
+3-4
+
+ 6
+ 6
+ -6
+
+7 @&t@
+7 @&t@
+7- @&t@
+
+90
+90
+9-0
+
+])
+AT_CLEANUP
+
+AT_SETUP([PRINT overwrites file])
+AT_DATA([output.txt], [abcdef
+])
+AT_DATA([print.sps], [dnl
+DATA LIST NOTABLE/x 1.
+BEGIN DATA.
+5
+END DATA.
+PRINT OUTFILE='output.txt'/x.
+EXECUTE.
+])
+AT_CHECK([pspp -O format=csv print.sps])
+AT_CHECK([cat output.txt], [0], [ 5 @&t@
+])
+AT_CLEANUP
+
+AT_SETUP([PRINT overwrites file atomically])
+AT_DATA([output.txt], [abcdef
+])
+AT_DATA([print.sps],
+[[DATA LIST NOTABLE/x 1.
+BEGIN DATA.
+5
+END DATA.
+PRINT OUTFILE='output.txt'/x.
+HOST COMMAND=['kill -TERM $PPID'].
+]])
+AT_CHECK([pspp -O format=csv print.sps], [143], [], [ignore])
+AT_CHECK([cat output.txt], [0], [abcdef
+])
+AT_CHECK(
+  [for file in *.tmp*; do if test -e $file; then echo $file; exit 1; fi; done])
+AT_CLEANUP
+
+AT_SETUP([PRINT to same file being read])
+AT_DATA([data.txt], [5
+])
+AT_DATA([print.sps], [dnl
+DATA LIST FILE='data.txt' NOTABLE/x 1.
+COMPUTE y = x + 1.
+PRINT OUTFILE='data.txt'/y.
+EXECUTE.
+])
+AT_CHECK([pspp -O format=csv print.sps])
+AT_CHECK([cat data.txt], [0], [     6.00 @&t@
+])
+AT_CHECK(
+  [for file in *.tmp*; do if test -e $file; then echo $file; exit 1; fi; done])
+AT_CLEANUP
+
+AT_SETUP([PRINT to special file])
+AT_SKIP_IF([test ! -c /dev/null])
+AT_CHECK([ln -s /dev/null foo.out || exit 77])
+AT_SKIP_IF([test ! -c foo.out])
+AT_DATA([print.sps], [dnl
+DATA LIST NOTABLE /x 1.
+BEGIN DATA.
+1
+2
+3
+4
+5
+END DATA.
+PRINT OUTFILE='foo.out'/x.
+PRINT OUTFILE='foo2.out'/x.
+EXECUTE.
+])
+AT_CHECK([pspp -O format=csv print.sps])
+AT_CHECK([cat foo2.out], [0], [dnl
+ 1 @&t@
+ 2 @&t@
+ 3 @&t@
+ 4 @&t@
+ 5 @&t@
+])
+ls -l foo.out foo2.out
+AT_CHECK([test -c foo.out])
+AT_CLEANUP
index 28a186ffba49fc7351538e9e59cf63ca3437868f..8e3a4860c73bfe5b5b24351a0567876b6876aa09 100644 (file)
@@ -1,3 +1,29 @@
+AT_BANNER([IMPORT and EXPORT])
+
+AT_SETUP([IMPORT and EXPORT])
+AT_DATA([import-export.sps], [dnl
+DATA LIST LIST NOTABLE /X Y.
+BEGIN DATA.
+1 2
+3 .
+5 6
+END DATA.
+
+EXPORT /OUTFILE='wiz.por'.
+IMPORT /FILE='wiz.por'.
+
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv import-export.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+X,Y
+1.00,2.00
+3.00,.  @&t@
+5.00,6.00
+])
+AT_CLEANUP
+
 AT_BANNER([SAVE])
 
 # UNSELECTED=DELETE used to cause a crash if there was actually a
diff --git a/tests/language/data-io/update.at b/tests/language/data-io/update.at
new file mode 100644 (file)
index 0000000..0a2ea28
--- /dev/null
@@ -0,0 +1,74 @@
+m4_define([CHECK_UPDATE],
+  [AT_SETUP([UPDATE $1 with $2])
+   AT_DATA([a.data], [dnl
+1aB
+8aM
+3aE
+5aG
+0aA
+5aH
+6aI
+7aJ
+2aD
+7aK
+1aC
+7aL
+4aF
+])
+   AT_DATA([b.data], [dnl
+1bN
+3bO
+4bP
+6bQ
+7bR
+9bS
+])
+   m4_if([$1], [sav],
+     [AT_DATA([save-a.sps], [dnl
+DATA LIST NOTABLE FILE='a.data' /a b c 1-3 (A).
+SAVE OUTFILE='a.sav'.
+])
+      AT_CHECK([pspp -O format=csv save-a.sps])])
+   m4_if([$2], [sav],
+     [AT_DATA([save-b.sps], [dnl
+DATA LIST NOTABLE FILE='b.data' /a b c 1-3 (A).
+SAVE OUTFILE='b.sav'.
+])
+      AT_CHECK([pspp -O format=csv save-b.sps])])
+   AT_DATA([update.sps], [dnl
+m4_if([$1], [sav], [], [DATA LIST NOTABLE FILE='a.data' /a b c 1-3 (A).])
+m4_if([$2], [sav], [], [DATA LIST NOTABLE FILE='b.data' /a b c 1-3 (A).])
+UPDATE
+    m4_if([$1], [sav], [FILE='a.sav'], [FILE=*]) /IN=InA /SORT
+    m4_if([$2], [sav], [FILE='b.sav'], [FILE=*]) /IN=InB /RENAME c=d
+    BY a.
+LIST.
+])
+   AT_CHECK([pspp -O format=csv update.sps], [0], [dnl
+update.sps:6: warning: UPDATE: Encountered 3 sets of duplicate cases in the master file.
+
+Table: Data List
+a,b,c,d,InA,InB
+0,a,A,,1,0
+1,b,B,N,1,1
+1,a,C,,1,0
+2,a,D,,1,0
+3,b,E,O,1,1
+4,b,F,P,1,1
+5,a,G,,1,0
+5,a,H,,1,0
+6,b,I,Q,1,1
+7,b,J,R,1,1
+7,a,K,,1,0
+7,a,L,,1,0
+8,a,M,,1,0
+9,b,,S,0,1
+])
+AT_CLEANUP
+])
+
+AT_BANNER([UPDATE])
+
+CHECK_UPDATE([sav], [sav])
+CHECK_UPDATE([sav], [inline])
+CHECK_UPDATE([inline], [sav])
diff --git a/tests/language/dictionary/missing-values.at b/tests/language/dictionary/missing-values.at
new file mode 100644 (file)
index 0000000..df2aeeb
--- /dev/null
@@ -0,0 +1,72 @@
+AT_BANNER([MISSING VALUES])
+
+AT_SETUP([MISSING VALUES valid cases])
+AT_DATA([missing-values.sps], [dnl
+DATA LIST NOTABLE/str1 1-5 (A) str2 6-8 (A) date1 9-19 (DATE) num1 20-25
+                  longstr 26-36 (A).
+
+* Numeric missing values.
+MISSING VALUES date1 num1 (1).
+MISSING VALUES date1 num1 (1, 2).
+MISSING VALUES date1 num1 (1, 2, 3).
+
+* Numeric missing values using the first variable's format.
+MISSING VALUES num1 date1 ('1').
+MISSING VALUES num1 date1 ('1', '2').
+MISSING VALUES num1 date1 ('1', '2', '3').
+MISSING VALUES date1 num1 ('06-AUG-05').
+MISSING VALUES date1 num1 ('06-AUG-05', '01-OCT-78').
+MISSING VALUES date1 num1 ('06-AUG-05', '01-OCT-78', '14-FEB-81').
+
+* Ranges of numeric missing values.
+MISSING VALUES num1 (1 THRU 2).
+MISSING VALUES num1 (LO THRU 2).
+MISSING VALUES num1 (LOWEST THRU 2).
+MISSING VALUES num1 (1 THRU HI).
+MISSING VALUES num1 (1 THRU HIGHEST).
+
+* A range of numeric missing values, plus an individual value.
+MISSING VALUES num1 (1 THRU 2, 3).
+MISSING VALUES num1 (LO THRU 2, 3).
+MISSING VALUES num1 (LOWEST THRU 2, 3).
+MISSING VALUES num1 (1 THRU HI, -1).
+MISSING VALUES num1 (1 THRU HIGHEST, -1).
+
+* String missing values.
+MISSING VALUES str1 str2 longstr ('abc  ','def').
+
+* May mix variable types when clearing missing values.
+MISSING VALUES ALL ().
+])
+AT_CHECK([pspp -O format=csv missing-values.sps])
+AT_CLEANUP
+
+AT_SETUP([MISSING VALUES invalid cases])
+AT_DATA([missing-values.sps], [dnl
+DATA LIST NOTABLE/str1 1-5 (A) str2 6-8 (A) date1 9-19 (DATE) num1 20-25
+                  longstr 26-36 (A).
+
+* Too long for str2.
+MISSING VALUES str1 str2 longstr ('abcde').
+
+* Long string missing value longer than 8 bytes.
+MISSING VALUES longstr ('abcdefghijk').
+
+* No string ranges.
+MISSING VALUES str1 ('a' THRU 'z').
+
+* Mixing string and numeric variables.
+MISSING VALUES str1 num1 ('123').
+])
+AT_CHECK([pspp -O format=csv missing-values.sps], [1], [dnl
+missing-values.sps:5: error: MISSING VALUES: Missing values provided are too long to assign to variable of width 3.
+
+missing-values.sps:8: error: MISSING VALUES: Truncating missing value to maximum acceptable length (8 bytes).
+
+missing-values.sps:11: error: MISSING VALUES: Syntax error at `THRU': expecting string.
+
+missing-values.sps:11: error: MISSING VALUES: THRU is not a variable name.
+
+missing-values.sps:14: error: MISSING VALUES: Cannot mix numeric variables (e.g. num1) and string variables (e.g. str1) within a single list.
+])
+AT_CLEANUP
index 4567173d44b86c34c75bd7ef53bcd44c9394d752..4eb021446a04163467c69abf74735130baa55426 100644 (file)
@@ -100,7 +100,7 @@ b
 c
 d
 ","Multiple dichotomy set
-Counted value: ""c""
+Counted value: `c'
 Category label source: Variable labels
 "
 $e,"w
@@ -168,7 +168,7 @@ b
 c
 d
 ","Multiple dichotomy set
-Counted value: ""c""
+Counted value: `c'
 Category label source: Variable labels
 "
 $e,"w
diff --git a/tests/language/dictionary/rename-variables.at b/tests/language/dictionary/rename-variables.at
new file mode 100644 (file)
index 0000000..d0f7632
--- /dev/null
@@ -0,0 +1,43 @@
+AT_BANNER([RENAME VARIABLES])
+
+AT_SETUP([RENAME VARIABLES])
+AT_DATA([rename-variables.sps], [dnl
+DATA LIST LIST /brakeFluid * y * .
+BEGIN DATA.
+1 3
+2 3
+3 3
+4 3
+END DATA.
+
+LIST.
+
+RENAME VARIABLES (brakeFluid=applecarts).
+
+LIST.
+
+SAVE /OUTFILE='rename.sav'.
+])
+AT_CHECK([pspp -o pspp.csv rename-variables.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+brakeFluid,F8.0
+y,F8.0
+
+Table: Data List
+brakeFluid,y
+1.00,3.00
+2.00,3.00
+3.00,3.00
+4.00,3.00
+
+Table: Data List
+applecarts,y
+1.00,3.00
+2.00,3.00
+3.00,3.00
+4.00,3.00
+])
+AT_CHECK([grep '[bB][rR][aA][kK][eE]' rename.sav], [1], [ignore-nolog])
+AT_CLEANUP
diff --git a/tests/language/dictionary/split-file.at b/tests/language/dictionary/split-file.at
new file mode 100644 (file)
index 0000000..39b3412
--- /dev/null
@@ -0,0 +1,55 @@
+AT_BANNER([SPLIT FILE])
+
+AT_SETUP([SPLIT FILE])
+AT_DATA([split-file.sps], [dnl
+title 'Test SPLIT FILE utility'.
+
+data list notable /X 1 Y 2.
+begin data.
+12
+16
+17
+19
+15
+14
+27
+20
+26
+25
+28
+29
+24
+end data.
+split file by x.
+list.
+])
+AT_CHECK([pspp -o pspp.csv split-file.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Title: Test SPLIT FILE utility
+
+Variable,Value,Label
+X,1,
+
+Table: Data List
+X,Y
+1,2
+1,6
+1,7
+1,9
+1,5
+1,4
+
+Variable,Value,Label
+X,2,
+
+Table: Data List
+X,Y
+2,7
+2,0
+2,6
+2,5
+2,8
+2,9
+2,4
+])
+AT_CLEANUP
diff --git a/tests/language/dictionary/sys-file-info.at b/tests/language/dictionary/sys-file-info.at
new file mode 100644 (file)
index 0000000..14a53fa
--- /dev/null
@@ -0,0 +1,46 @@
+AT_BANNER([SYSFILE INFO])
+
+AT_SETUP([SYSFILE INFO])
+AT_DATA([sysfile-info.sps], [dnl
+DATA LIST LIST /x * name (a10) .
+BEGIN DATA
+1 one
+2 two
+3 three
+END DATA.
+SAVE OUTFILE='pro.sav'.
+
+sysfile info file='pro.sav'.
+])
+AT_CHECK([pspp -o pspp.csv sysfile-info.sps])
+AT_CHECK(
+  [sed -e '/^Created:,/d' \
+       -e '/^Endian:,/d' \
+       -e '/^Integer Format:,/d' \
+       -e '/^Real Format:,/d' pspp.csv],
+  [0], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+x,F8.0
+name,A10
+
+File:,pro.sav
+Label:,No label.
+Variables:,2
+Cases:,3
+Type:,System File
+Weight:,Not weighted.
+Mode:,Compression on.
+Charset:,Unknown
+
+Variable,Description,,Position
+x,Format: F8.2,,1
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+name,Format: A10,,2
+,Measure: Nominal,,
+,Display Alignment: Left,,
+,Display Width: 10,,
+])
+AT_CLEANUP
diff --git a/tests/language/dictionary/value-labels.at b/tests/language/dictionary/value-labels.at
new file mode 100644 (file)
index 0000000..c6c48db
--- /dev/null
@@ -0,0 +1,47 @@
+AT_BANNER([VALUE LABELS])
+
+dnl Tests for a bug which caused VALUE LABELS to 
+dnl crash when given invalid syntax.
+AT_SETUP([VALUE LABELS invalid syntax bug])
+AT_DATA([value-labels.sps], [dnl
+DATA LIST LIST NOTABLE /a * pref * .
+BEGIN DATA.
+    1.00     1.00    
+    1.00     2.00    
+    2.00     1.00    
+    2.00     2.00    
+END DATA.
+
+VALUE LABELS /var=a 'label for a'.
+])
+AT_CHECK([pspp -O format=csv value-labels.sps], [1], [dnl
+value-labels.sps:9: error: VALUE LABELS: var is not a variable name.
+])
+AT_CLEANUP
+
+# Tests for a bug which caused a crash if VALUE LABELS had a trailing /.
+AT_SETUP([VALUE LABELS trailing `/' bug])
+AT_DATA([value-labels.sps], [dnl
+DATA LIST LIST NOTABLE /X * .
+BEGIN DATA.
+1 
+2
+3
+4
+END DATA.
+
+
+VALUE LABELS X 1 'one' 2 'two' 3 'three'/
+
+
+LIST VARIABLES=X.
+])
+AT_CHECK([pspp -O format=csv value-labels.sps], [0], [dnl
+Table: Data List
+X
+1.00
+2.00
+3.00
+4.00
+])
+AT_CLEANUP
diff --git a/tests/language/dictionary/variable-display.at b/tests/language/dictionary/variable-display.at
new file mode 100644 (file)
index 0000000..6f527a7
--- /dev/null
@@ -0,0 +1,27 @@
+AT_BANNER([variable display attributes])
+
+AT_SETUP([variable display attribute commands])
+AT_DATA([var-display.sps], [dnl
+DATA LIST FREE /x y z.
+VARIABLE ALIGNMENT x (LEFT)/y (RIGHT)/z (CENTER).
+VARIABLE WIDTH x (10)/y (12)/z (14).
+VARIABLE LEVEL x (SCALE)/y (ORDINAL)/z (NOMINAL).
+DISPLAY DICTIONARY.
+])
+AT_CHECK([pspp -o pspp.csv var-display.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Variable,Description,,Position
+x,Format: F8.2,,1
+,Measure: Scale,,
+,Display Alignment: Left,,
+,Display Width: 10,,
+y,Format: F8.2,,2
+,Measure: Ordinal,,
+,Display Alignment: Right,,
+,Display Width: 12,,
+z,Format: F8.2,,3
+,Measure: Nominal,,
+,Display Alignment: Center,,
+,Display Width: 14,,
+])
+AT_CLEANUP
diff --git a/tests/language/dictionary/vector.at b/tests/language/dictionary/vector.at
new file mode 100644 (file)
index 0000000..e7a2cdd
--- /dev/null
@@ -0,0 +1,78 @@
+AT_BANNER([VECTOR])
+
+AT_SETUP([VECTOR short form])
+AT_DATA([vector.sps], [dnl
+data list notable/x 1.
+vector v(4).
+display vector.
+])
+AT_CHECK([pspp -o pspp.csv vector.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Vector,Position,Variable,Print Format
+v,1,v1,F8.2
+,2,v2,F8.2
+,3,v3,F8.2
+,4,v4,F8.2
+])
+AT_CLEANUP
+
+AT_SETUP([VECTOR short form with format specification])
+AT_DATA([vector.sps], [dnl
+data list notable/x 1.
+vector #vec(4, comma10.2).
+display vector.
+])
+AT_CHECK([pspp -o pspp.csv vector.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Vector,Position,Variable,Print Format
+#vec,1,#vec1,COMMA10.2
+,2,#vec2,COMMA10.2
+,3,#vec3,COMMA10.2
+,4,#vec4,COMMA10.2
+])
+AT_CLEANUP
+
+AT_SETUP([VECTOR short form in INPUT PROGRAM])
+AT_DATA([vector.sps], [dnl
+input program.
+vector x(5).
+data list notable/x5 x2 x3 x1 x4 1-5.
+end input program.
+display vector.
+])
+AT_CHECK([pspp -o pspp.csv vector.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Vector,Position,Variable,Print Format
+x,1,x1,F8.2
+,2,x2,F8.2
+,3,x3,F8.2
+,4,x4,F8.2
+,5,x5,F8.2
+])
+AT_CLEANUP
+
+AT_SETUP([VECTOR long form])
+AT_DATA([vector.sps], [dnl
+data list notable/u w x y z 1-5.
+vector a=u to y.
+vector b=x to z.
+vector c=all.
+display vector.
+])
+AT_CHECK([pspp -o pspp.csv vector.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Vector,Position,Variable,Print Format
+a,1,u,F1.0
+,2,w,F1.0
+,3,x,F1.0
+,4,y,F1.0
+b,1,x,F1.0
+,2,y,F1.0
+,3,z,F1.0
+c,1,u,F1.0
+,2,w,F1.0
+,3,x,F1.0
+,4,y,F1.0
+,5,z,F1.0
+])
+AT_CLEANUP
diff --git a/tests/language/dictionary/weight.at b/tests/language/dictionary/weight.at
new file mode 100644 (file)
index 0000000..0eb55bc
--- /dev/null
@@ -0,0 +1,151 @@
+AT_BANNER([WEIGHT])
+
+AT_SETUP([WEIGHT])
+AT_DATA([weight.txt], [dnl
+   18    1
+   19    7
+   20   26
+   21   76
+   22   57
+   23   58
+   24   38
+   25   38
+   26   30
+   27   21
+   28   23
+   29   24
+   30   23
+   31   14
+   32   21
+   33   21
+   34   14
+   35   14
+   36   17
+   37   11
+   38   16
+   39   14
+   40   15
+   41   14
+   42   14
+   43    8
+   44   15
+   45   10
+   46   12
+   47   13
+   48   13
+   49    5
+   50    5
+   51    3
+   52    7
+   53    6
+   54    2
+   55    2
+   56    2
+   57    3
+   58    1
+   59    3
+   61    1
+   62    3
+   63    1
+   64    1
+   65    2
+   70    1
+   78    1
+   79    1
+   80    1
+   94    1
+])
+AT_DATA([weight.sps], [dnl
+SET FORMAT F8.3.
+data list file='weight.txt'/AVAR 1-5 BVAR 6-10.
+weight by BVAR.
+
+descriptives AVAR /statistics all /format serial.
+frequencies AVAR /statistics all.
+])
+AT_CHECK([pspp -o pspp.csv weight.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Reading 1 record from `weight.txt'.
+Variable,Record,Columns,Format
+AVAR,1,1-  5,F5.0
+BVAR,1,6- 10,F5.0
+
+Table: Valid cases = 730; cases with missing value(s) = 0.
+Variable,Valid N,Missing N,Mean,S.E. Mean,Std Dev,Variance,Kurtosis,S.E. Kurt,Skewness,S.E. Skew,Range,Minimum,Maximum,Sum
+AVAR,730,0,31.515,.405,10.937,119.608,2.411,.181,1.345,.090,76.000,18.000,94.000,23006.00
+
+Table: AVAR
+Value Label,Value,Frequency,Percent,Valid Percent,Cum Percent
+,18,1,.137,.137,.137
+,19,7,.959,.959,1.096
+,20,26,3.562,3.562,4.658
+,21,76,10.411,10.411,15.068
+,22,57,7.808,7.808,22.877
+,23,58,7.945,7.945,30.822
+,24,38,5.205,5.205,36.027
+,25,38,5.205,5.205,41.233
+,26,30,4.110,4.110,45.342
+,27,21,2.877,2.877,48.219
+,28,23,3.151,3.151,51.370
+,29,24,3.288,3.288,54.658
+,30,23,3.151,3.151,57.808
+,31,14,1.918,1.918,59.726
+,32,21,2.877,2.877,62.603
+,33,21,2.877,2.877,65.479
+,34,14,1.918,1.918,67.397
+,35,14,1.918,1.918,69.315
+,36,17,2.329,2.329,71.644
+,37,11,1.507,1.507,73.151
+,38,16,2.192,2.192,75.342
+,39,14,1.918,1.918,77.260
+,40,15,2.055,2.055,79.315
+,41,14,1.918,1.918,81.233
+,42,14,1.918,1.918,83.151
+,43,8,1.096,1.096,84.247
+,44,15,2.055,2.055,86.301
+,45,10,1.370,1.370,87.671
+,46,12,1.644,1.644,89.315
+,47,13,1.781,1.781,91.096
+,48,13,1.781,1.781,92.877
+,49,5,.685,.685,93.562
+,50,5,.685,.685,94.247
+,51,3,.411,.411,94.658
+,52,7,.959,.959,95.616
+,53,6,.822,.822,96.438
+,54,2,.274,.274,96.712
+,55,2,.274,.274,96.986
+,56,2,.274,.274,97.260
+,57,3,.411,.411,97.671
+,58,1,.137,.137,97.808
+,59,3,.411,.411,98.219
+,61,1,.137,.137,98.356
+,62,3,.411,.411,98.767
+,63,1,.137,.137,98.904
+,64,1,.137,.137,99.041
+,65,2,.274,.274,99.315
+,70,1,.137,.137,99.452
+,78,1,.137,.137,99.589
+,79,1,.137,.137,99.726
+,80,1,.137,.137,99.863
+,94,1,.137,.137,100.000
+Total,,730,100.0,100.0,
+
+Table: AVAR
+N,Valid,730
+,Missing,0
+Mean,,31.515
+S.E. Mean,,.405
+Mode,,21.000
+Std Dev,,10.937
+Variance,,119.608
+Kurtosis,,2.411
+S.E. Kurt,,.181
+Skewness,,1.345
+S.E. Skew,,.090
+Range,,76.000
+Minimum,,18.000
+Maximum,,94.000
+Sum,,23006.00
+Percentiles,50 (Median),29
+])
+AT_CLEANUP
index d16bac5df7a6f2c0ae07cebabb5435d73ad2b718..4a8324ed661436e833ec6f295b990b6620f50714 100644 (file)
@@ -38,11 +38,11 @@ CHECK_EXPR_EVAL([coercion to/from Boolean],
   [[1 OR $false], [true]],
   [[1 OR $sysmis], [true]],
   [[2 OR $sysmis], [sysmis],
-   [error: DEBUG EVALUATE: An operand of the logical disjunction ("OR") operator was found to have a value other than 0 (false), 1 (true), or the system-missing value.  The result was forced to 0.]],
+   [error: DEBUG EVALUATE: An operand of the logical disjunction (`OR') operator was found to have a value other than 0 (false), 1 (true), or the system-missing value.  The result was forced to 0.]],
   [[2 AND $sysmis], [false],
-   [error: DEBUG EVALUATE: An operand of the logical conjunction ("AND") operator was found to have a value other than 0 (false), 1 (true), or the system-missing value.  The result was forced to 0.]],
+   [error: DEBUG EVALUATE: An operand of the logical conjunction (`AND') operator was found to have a value other than 0 (false), 1 (true), or the system-missing value.  The result was forced to 0.]],
   [['string' AND $sysmis], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying logical conjunction ("AND") operator: cannot convert string to boolean.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying logical conjunction (`AND') operator: cannot convert string to boolean.]],
   [[0 AND $sysmis], [false]],
   [[(1>2) + 1], [1.00]],
   [[$true + $false], [1.00]])
@@ -53,19 +53,19 @@ CHECK_EXPR_EVAL([addition and subtraction],
   [[$sysmis + 1], [sysmis]],
   [[7676 + $sysmis], [sysmis]],
   [[('foo') + 5], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying addition ("+") operator: cannot convert string to number.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying addition (`+') operator: cannot convert string to number.]],
   dnl Arithmetic concatenation requires CONCAT:
   [[('foo') + ('bar')], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying addition ("+") operator: cannot convert string to number.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying addition (`+') operator: cannot convert string to number.]],
   dnl Lexical concatenation succeeds:
   [['foo' + 'bar'], ["foobar"]],
   [[1 +3 - 2 +4 -5], [1.00]],
   [[1 - $true], [0.00]],
   [[$true - 4/3], [-0.33]],
   [['string' - 1e10], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying subtraction ("-") operator: cannot convert string to number.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying subtraction (`-') operator: cannot convert string to number.]],
   [[9.5 - ''], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying subtraction ("-") operator: cannot convert string to number.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying subtraction (`-') operator: cannot convert string to number.]],
   [[1 - 2], [-1.00]],
   [[52 -23], [29.00]])
 
@@ -85,7 +85,7 @@ CHECK_EXPR_EVAL([exponentiation],
   [[2**8], [256.00]],
   [[(2**3)**4], [4096.00]],
   [[2**3**4], [4096.00],
-   [warning: DEBUG EVALUATE: The exponentiation operator ("**") is left-associative, even though right-associative semantics are more useful.  That is, "a**b**c" equals "(a**b)**c", not as "a**(b**c)".  To disable this warning, insert parentheses.]])
+   [warning: DEBUG EVALUATE: The exponentiation operator (`**') is left-associative, even though right-associative semantics are more useful.  That is, `a**b**c' equals `(a**b)**c', not as `a**(b**c)'.  To disable this warning, insert parentheses.]])
 
 CHECK_EXPR_EVAL([unary minus],
   [[2+-3], [-1.00]],
@@ -141,14 +141,14 @@ CHECK_EXPR_EVAL([NOT truth table],
   [[not $false], [true]],
   [[not 0], [true]],
   [[not 2.5], [true],
-   [error: DEBUG EVALUATE: An operand of the logical negation ("NOT") operator was found to have a value other than 0 (false), 1 (true), or the system-missing value.  The result was forced to 0.]],
+   [error: DEBUG EVALUATE: An operand of the logical negation (`NOT') operator was found to have a value other than 0 (false), 1 (true), or the system-missing value.  The result was forced to 0.]],
   [[not $true], [false]],
   [[not 1], [false]],
   [[not $sysmis], [sysmis]],
   [[~ $false], [true]],
   [[~ 0], [true]],
   [[~ 2.5], [true],
-   [error: DEBUG EVALUATE: An operand of the logical negation ("NOT") operator was found to have a value other than 0 (false), 1 (true), or the system-missing value.  The result was forced to 0.]],
+   [error: DEBUG EVALUATE: An operand of the logical negation (`NOT') operator was found to have a value other than 0 (false), 1 (true), or the system-missing value.  The result was forced to 0.]],
   [[~ $true], [false]],
   [[~ 1], [false]],
   [[~ $sysmis], [sysmis]])
@@ -159,13 +159,13 @@ CHECK_EXPR_EVAL([= <= <],
   [[1 eq 2], [false]],
   [[2 = 3], [false]],
   [[1 eq 'foobar'], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying numeric equality ("EQ") operator: cannot convert string to number.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying numeric equality (`EQ') operator: cannot convert string to number.]],
   [[5 eq 'foobar'], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying numeric equality ("EQ") operator: cannot convert string to number.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying numeric equality (`EQ') operator: cannot convert string to number.]],
   [['baz' = 10], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying string equality ("=") operator: cannot convert number to string.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying string equality (`=') operator: cannot convert number to string.]],
   [['quux' = 5.55], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying string equality ("=") operator: cannot convert number to string.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying string equality (`=') operator: cannot convert number to string.]],
   [['foobar' = 'foobar'], [true]],
   [['quux' = 'bar'], [false]],
   [['bar   ' = 'bar'], [true]],
@@ -174,12 +174,12 @@ CHECK_EXPR_EVAL([= <= <],
 dnl Check precedence:
   [[1 + 2 = 3], [true]],
   [[1 >= 2 = 2 ge 3], [false],
-   [warning: DEBUG EVALUATE: Chaining relational operators (e.g. "a < b < c") will not produce the mathematically expected result.  Use the AND logical operator to fix the problem (e.g. "a < b AND b < c").  If chaining is really intended, parentheses will disable this warning (e.g. "(a < b) < c".)]],
+   [warning: DEBUG EVALUATE: Chaining relational operators (e.g. `a < b < c') will not produce the mathematically expected result.  Use the AND logical operator to fix the problem (e.g. `a < b AND b < c').  If chaining is really intended, parentheses will disable this warning (e.g. `(a < b) < c'.)]],
 dnl Mathematically true:
   [[3 ne 2 ~= 1], [false],
-   [warning: DEBUG EVALUATE: Chaining relational operators (e.g. "a < b < c") will not produce the mathematically expected result.  Use the AND logical operator to fix the problem (e.g. "a < b AND b < c").  If chaining is really intended, parentheses will disable this warning (e.g. "(a < b) < c".)]],
+   [warning: DEBUG EVALUATE: Chaining relational operators (e.g. `a < b < c') will not produce the mathematically expected result.  Use the AND logical operator to fix the problem (e.g. `a < b AND b < c').  If chaining is really intended, parentheses will disable this warning (e.g. `(a < b) < c'.)]],
   [[3 > 2 > 1], [false],
-   [warning: DEBUG EVALUATE: Chaining relational operators (e.g. "a < b < c") will not produce the mathematically expected result.  Use the AND logical operator to fix the problem (e.g. "a < b AND b < c").  If chaining is really intended, parentheses will disable this warning (e.g. "(a < b) < c".)]],
+   [warning: DEBUG EVALUATE: Chaining relational operators (e.g. `a < b < c') will not produce the mathematically expected result.  Use the AND logical operator to fix the problem (e.g. `a < b AND b < c').  If chaining is really intended, parentheses will disable this warning (e.g. `(a < b) < c'.)]],
 
   [[1 <= 2], [true]],
   [[2.5 <= 1.5], [false]],
@@ -188,15 +188,15 @@ dnl Mathematically true:
   [[2 le 2], [true]],
 dnl Make sure <= token can't be split:
   [[2 < = 2], [error],
-   [error: DEBUG EVALUATE: Syntax error in expression at `='.]],
+   [error: DEBUG EVALUATE: Syntax error at `='.]],
   [[1 <= 'foobar'], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying numeric less-than-or-equal-to ("<=") operator: cannot convert string to number.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying numeric less-than-or-equal-to (`<=') operator: cannot convert string to number.]],
   [[5 <= 'foobar'], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying numeric less-than-or-equal-to ("<=") operator: cannot convert string to number.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying numeric less-than-or-equal-to (`<=') operator: cannot convert string to number.]],
   [['baz' <= 10], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying string less-than-or-equal-to ("<=") operator: cannot convert number to string.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying string less-than-or-equal-to (`<=') operator: cannot convert number to string.]],
   [['quux' <= 5.55], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying string less-than-or-equal-to ("<=") operator: cannot convert number to string.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying string less-than-or-equal-to (`<=') operator: cannot convert number to string.]],
   [['0123' <= '0123'], [true]],
   [['0123' <= '0124'], [true]],
   [['0124' le '0123'], [false]],
@@ -208,13 +208,13 @@ dnl Make sure <= token can't be split:
   [[3.5 lt 4], [true]],
   [[4 lt 3.5], [false]],
   [[1 lt 'foobar'], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying numeric less than ("<") operator: cannot convert string to number.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying numeric less than (`<') operator: cannot convert string to number.]],
   [[5 lt 'foobar'], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying numeric less than ("<") operator: cannot convert string to number.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying numeric less than (`<') operator: cannot convert string to number.]],
   [['baz' < 10], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying string less than ("<") operator: cannot convert number to string.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying string less than (`<') operator: cannot convert number to string.]],
   [['quux' < 5.55], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying string less than ("<") operator: cannot convert number to string.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying string less than (`<') operator: cannot convert number to string.]],
   [['0123' lt '0123'], [false]],
   [['0123' < '0124'], [true]],
   [['0124' lt '0123'], [false]],
@@ -229,15 +229,15 @@ CHECK_EXPR_EVAL([>= > <>],
   [[2 ge 2], [true]],
 dnl Make sure >= token can't be split:
   [[2 > = 2], [error],
-   [error: DEBUG EVALUATE: Syntax error in expression at `='.]],
+   [error: DEBUG EVALUATE: Syntax error at `='.]],
   [[1 >= 'foobar'], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying numeric greater-than-or-equal-to (">=") operator: cannot convert string to number.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying numeric greater-than-or-equal-to (`>=') operator: cannot convert string to number.]],
   [[5 ge 'foobar'], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying numeric greater-than-or-equal-to (">=") operator: cannot convert string to number.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying numeric greater-than-or-equal-to (`>=') operator: cannot convert string to number.]],
   [['baz' ge 10], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying string greater-than-or-equal-to (">=") operator: cannot convert number to string.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying string greater-than-or-equal-to (`>=') operator: cannot convert number to string.]],
   [['quux' >= 5.55], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying string greater-than-or-equal-to (">=") operator: cannot convert number to string.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying string greater-than-or-equal-to (`>=') operator: cannot convert number to string.]],
   [['0123' ge '0123'], [true]],
   [['0123' >= '0124'], [false]],
   [['0124' >= '0123'], [true]],
@@ -249,13 +249,13 @@ dnl Make sure >= token can't be split:
   [[3.5 gt 4], [false]],
   [[4 gt 3.5], [true]],
   [[1 gt 'foobar'], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying numeric greater than (">") operator: cannot convert string to number.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying numeric greater than (`>') operator: cannot convert string to number.]],
   [[5 gt 'foobar'], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying numeric greater than (">") operator: cannot convert string to number.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying numeric greater than (`>') operator: cannot convert string to number.]],
   [['baz' > 10], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying string greater than (">") operator: cannot convert number to string.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying string greater than (`>') operator: cannot convert number to string.]],
   [['quux' > 5.55], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying string greater than (">") operator: cannot convert number to string.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying string greater than (`>') operator: cannot convert number to string.]],
   [['0123' gt '0123'], [false]],
   [['0123' > '0124'], [false]],
   [['0124' gt '0123'], [true]],
@@ -267,13 +267,13 @@ dnl Make sure >= token can't be split:
   [[1 <> 2], [true]],
   [[2 ne 3], [true]],
   [[1 ~= 'foobar'], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying numeric inequality ("<>") operator: cannot convert string to number.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying numeric inequality (`<>') operator: cannot convert string to number.]],
   [[5 <> 'foobar'], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying numeric inequality ("<>") operator: cannot convert string to number.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying numeric inequality (`<>') operator: cannot convert string to number.]],
   [['baz' ne 10], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying string inequality ("<>") operator: cannot convert number to string.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying string inequality (`<>') operator: cannot convert number to string.]],
   [['quux' ~= 5.55], [error],
-   [error: DEBUG EVALUATE: Type mismatch while applying string inequality ("<>") operator: cannot convert number to string.]],
+   [error: DEBUG EVALUATE: Type mismatch while applying string inequality (`<>') operator: cannot convert number to string.]],
   [['foobar' <> 'foobar'], [false]],
   [['quux' ne 'bar'], [true]],
   [['bar   ' <> 'bar'], [false]],
@@ -281,10 +281,10 @@ dnl Make sure >= token can't be split:
   [['asdfj   ' ne 'asdf'], [true]],
 dnl <> token can't be split:
   [[1 < > 1], [error],
-   [error: DEBUG EVALUATE: Syntax error in expression at `GT'.]],
+   [error: DEBUG EVALUATE: Syntax error at `GT'.]],
 dnl # ~= token can't be split:
   [[1 ~ = 1], [error],
-   [error: DEBUG EVALUATE: Syntax error expecting end of command at `NOT'.]])
+   [error: DEBUG EVALUATE: Syntax error at `NOT': expecting end of command.]])
 
 CHECK_EXPR_EVAL([exp lg10 ln sqrt abs mod mod10 rnd trunc],
   [[exp(10)], [22026.47]],
@@ -1843,3 +1843,223 @@ dnl Tests correctness of generic optimizations in optimize_tree().
   [[mod(0, x)], [0.00], [], [(X = 5.00)]],
   [[x ** 1], [5.00], [], [(X = 5.00)]],
   [[x ** 2], [25.00], [], [(X = 5.00)]])
+
+AT_SETUP([LAG function])
+AT_DATA([lag.sps], [dnl
+data list /W 1.
+begin data.
+1
+2
+3
+4
+5
+end data.
+
+compute X=lag(w,1).
+compute Y=lag(x).
+compute Z=lag(w,2).
+list.
+])
+AT_CHECK([pspp -o pspp.csv lag.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Reading 1 record from INLINE.
+Variable,Record,Columns,Format
+W,1,1-  1,F1.0
+
+Table: Data List
+W,X,Y,Z
+1,.  ,.  ,.  @&t@
+2,1.00,.  ,.  @&t@
+3,2.00,1.00,1.00
+4,3.00,2.00,2.00
+5,4.00,3.00,3.00
+])
+AT_CLEANUP
+
+AT_SETUP([LAG crash bug])
+AT_DATA([lag.sps], [dnl
+DATA LIST LIST /x.
+BEGIN DATA
+1 
+2 
+END DATA.
+
+DO IF (x <> LAG(x) ).
+       ECHO 'hello'.
+END IF.
+
+EXECUTE.
+])
+AT_CHECK([pspp -o pspp.csv lag.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+x,F8.0
+
+hello
+])
+AT_CLEANUP
+
+dnl Tests for a bug which caused UNIFORM(x) to always return zero.
+AT_SETUP([UNIFORM function])
+AT_DATA([uniform.sps], [dnl
+set seed=10.
+input program.
++ loop #i = 1 to 20.
++    do repeat response=R1.
++       compute response = uniform(10).
++    end repeat.
++    end case.
++ end loop.
++ end file.
+end input program.
+
+list.
+])
+AT_CHECK([pspp -o pspp.csv uniform.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+R1
+7.71
+2.99
+.21
+4.95
+6.34
+4.43
+7.49
+8.32
+4.99
+5.83
+2.25
+.25
+1.98
+7.09
+7.61
+2.66
+1.69
+2.64
+.88
+1.50
+])
+AT_CLEANUP
+
+AT_SETUP([VALUELABEL function])
+AT_DATA([valuelabel.sps], [dnl
+DATA LIST notable /n 1 s 2(a).
+VALUE LABELS /n 0 'Very dissatisfied'
+                1 'Dissatisfied'
+               1.5 'Slightly Peeved'
+                2 'Neutral'
+                3 'Satisfied'
+                4 'Very satisfied'.
+VALUE LABELS /s 'a' 'Wouldn''t buy again'
+                'b' 'Unhappy'
+                'c' 'Bored'
+                'd' 'Satiated'
+                'e' 'Elated'.
+STRING nlabel slabel(a10).
+COMPUTE nlabel = VALUELABEL(n).
+COMPUTE slabel = VALUELABEL(s).
+LIST.
+BEGIN DATA.
+
+0a
+1b
+2c
+3d
+4e
+5f
+6g
+END DATA.
+])
+AT_CHECK([pspp -o pspp.csv valuelabel.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+n,s,nlabel,slabel
+.,,,
+0,a,Very dissa,Wouldn't b
+1,b,Dissatisfi,Unhappy   @&t@
+2,c,Neutral   ,Bored     @&t@
+3,d,Satisfied ,Satiated  @&t@
+4,e,Very satis,Elated    @&t@
+5,f,,
+6,g,,
+])
+AT_CLEANUP
+
+AT_SETUP([variables in expressions])
+AT_DATA([variables.sps], [dnl
+DATA LIST NOTABLE/N1 TO N5 1-5.
+MISSING VALUES N1 TO N5 (3 THRU 5, 1).
+BEGIN DATA.
+12345
+6789 
+END DATA.
+
+COMPUTE P1=N1.
+COMPUTE P2=N2.
+COMPUTE P3=N3.
+COMPUTE P4=N4.
+COMPUTE P5=N5.
+
+COMPUTE MC=NMISS(N1 TO N5).
+COMPUTE VC=NVALID(N1 TO N5).
+
+COMPUTE S1=SYSMIS(N1).
+COMPUTE S2=SYSMIS(N2).
+COMPUTE S3=SYSMIS(N3).
+COMPUTE S4=SYSMIS(N4).
+COMPUTE S5=SYSMIS(N5).
+
+COMPUTE M1=MISSING(N1).
+COMPUTE M2=MISSING(N2).
+COMPUTE M3=MISSING(N3).
+COMPUTE M4=MISSING(N4).
+COMPUTE M5=MISSING(N5).
+
+COMPUTE V1=VALUE(N1).
+COMPUTE V2=VALUE(N2).
+COMPUTE V3=VALUE(N3).
+COMPUTE V4=VALUE(N4).
+COMPUTE V5=VALUE(N5).
+
+FORMATS ALL (F1).
+
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv variables.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+N1,N2,N3,N4,N5,P1,P2,P3,P4,P5,MC,VC,S1,S2,S3,S4,S5,M1,M2,M3,M4,M5,V1,V2,V3,V4,V5
+1,2,3,4,5,.,2,.,.,.,4,1,0,0,0,0,0,1,0,1,1,1,1,2,3,4,5
+6,7,8,9,.,6,7,8,9,.,1,4,0,0,0,0,1,0,0,0,0,1,6,7,8,9,.
+])
+AT_CLEANUP
+
+AT_SETUP([vectors in expressions])
+AT_DATA([vectors.sps], [dnl
+DATA LIST NOTABLE /N1 TO N5 1-5.
+MISSING VALUES N1 TO N5 (3 THRU 5, 1).
+BEGIN DATA.
+12345
+6789 
+END DATA.
+
+VECTOR N=N1 TO N5.
+VECTOR X(5).
+LOOP I=1 TO 5.
+COMPUTE X(I)=N(I) + 1.
+END LOOP.
+
+FORMATS ALL (F2).
+
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv vectors.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+N1,N2,N3,N4,N5,X1,X2,X3,X4,X5,I
+1,2,3,4,5,.,3,.,.,.,5
+6,7,8,9,.,7,8,9,10,.,5
+])
+AT_CLEANUP
diff --git a/tests/language/expressions/parse.at b/tests/language/expressions/parse.at
new file mode 100644 (file)
index 0000000..7ebc5dc
--- /dev/null
@@ -0,0 +1,23 @@
+AT_BANNER([expression parsing])
+
+AT_SETUP([parse expression with unknown variable crash])
+AT_DATA([parse.sps], [dnl
+INPUT PROGRAM.
+LOOP c=1 to 10.
+COMPUTE var1=NORMAL(100).
+END CASE.
+END LOOP.
+END FILE.
+END INPUT PROGRAM.
+
+
+IF ( y > 0 ) .
+COMPUTE x=y.
+END IF.
+])
+AT_CHECK([pspp -O format=csv parse.sps], [1], [dnl
+parse.sps:10: error: IF: Unknown identifier y.
+
+parse.sps:10: error: Stopping syntax file processing here to avoid a cascade of dependent command failures.
+])
+AT_CLEANUP
diff --git a/tests/language/lexer/lexer.at b/tests/language/lexer/lexer.at
new file mode 100644 (file)
index 0000000..2c1dfc9
--- /dev/null
@@ -0,0 +1,20 @@
+AT_BANNER([lexer])
+
+AT_SETUP([lexer ignores initial @%:@! line])
+AT_DATA([lexer.sps], [dnl
+#! /usr/local/bin/pspp
+DATA LIST LIST NOTABLE /a.
+BEGIN DATA.
+1
+2
+END DATA.
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv lexer.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+a
+1.00
+2.00
+])
+AT_CLEANUP
diff --git a/tests/language/lexer/q2c.at b/tests/language/lexer/q2c.at
new file mode 100644 (file)
index 0000000..eeeed8d
--- /dev/null
@@ -0,0 +1,23 @@
+AT_BANNER([q2c])
+
+AT_SETUP([q2c enforces mandatory subcommands])
+AT_DATA([q2c.sps], [dnl
+DATA LIST LIST NOTABLE /x *.
+BEGIN DATA.
+1
+2
+3
+END DATA.
+
+EXAMINE.
+ONEWAY.
+CROSSTABS.
+])
+AT_CHECK([pspp -O format=csv q2c.sps], [1], [dnl
+q2c.sps:8: error: EXAMINE: VARIABLES subcommand must be given.
+
+q2c.sps:9: error: ONEWAY: Syntax error at end of command: expecting variable name.
+
+q2c.sps:10: error: CROSSTABS: TABLES subcommand must be given.
+])
+AT_CLEANUP
diff --git a/tests/language/lexer/variable-parser.at b/tests/language/lexer/variable-parser.at
new file mode 100644 (file)
index 0000000..f5aed6b
--- /dev/null
@@ -0,0 +1,50 @@
+AT_BANNER([Variable parser])
+
+dnl This program tests that both long and short variable names are parsed OK.
+dnl It use CROSSTABS, since its TABLES subcommand exercises the array var set 
+dnl feature.
+AT_SETUP([Long variable names])
+AT_DATA([longvars.sps], [dnl
+DATA LIST LIST /AlphaBetaGamma * B * X * Yabbadabbadoo * .
+BEGIN DATA.
+2 3 4 5
+END DATA.
+
+LIST.
+
+CROSSTABS 
+       VARIABLES X (1,7) Yabbadabbadoo (1,7) 
+       /TABLES X BY Yabbadabbadoo.
+])
+AT_CHECK([pspp -o pspp.csv longvars.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+AlphaBetaGamma,F8.0
+B,F8.0
+X,F8.0
+Yabbadabbadoo,F8.0
+
+Table: Data List
+AlphaBetaGamma,B,X,Yabbadabbadoo
+2.00,3.00,4.00,5.00
+
+Table: Summary.
+,Cases,,,,,
+,Valid,,Missing,,Total,
+,N,Percent,N,Percent,N,Percent
+X * Yabbadabbadoo,1,100.0%,0,0.0%,1,100.0%
+
+Table: X * Yabbadabbadoo [[count]].
+,Yabbadabbadoo,,,,,,,
+X,1.00,2.00,3.00,4.00,5.00,6.00,7.00,Total
+1.00,.0,.0,.0,.0,.0,.0,.0,.0
+2.00,.0,.0,.0,.0,.0,.0,.0,.0
+3.00,.0,.0,.0,.0,.0,.0,.0,.0
+4.00,.0,.0,.0,.0,1.0,.0,.0,1.0
+5.00,.0,.0,.0,.0,.0,.0,.0,.0
+6.00,.0,.0,.0,.0,.0,.0,.0,.0
+7.00,.0,.0,.0,.0,.0,.0,.0,.0
+Total,.0,.0,.0,.0,1.0,.0,.0,1.0
+])
+AT_CLEANUP
index b4e9d41f95ad628bb0c5e22e2ae99e8e4f71717e..bd9d59f7c45dfaa2259e7abe15c2e0684b0728c5 100644 (file)
@@ -53,3 +53,156 @@ asdfk,0,3.00,4.00,.00,1.00
 asdfk,1,3.00,3.00,.00,1.00
 ])
 AT_CLEANUP
+
+
+
+AT_SETUP([AUTORECODE long strings and check the value labels])
+AT_DATA([ar.sps],
+  [data list notable list /s (a16) x *.
+begin data.
+widgets      1
+thingummies  2
+oojars       3
+widgets      4
+oojars       5
+thingummies  6
+oojimiflips  7
+end data.
+
+autorecode s into new.
+
+list.
+
+display dictionary.
+])
+
+AT_CHECK([pspp -O format=csv ar.sps], [0],
+  [Table: Data List
+s,x,new
+widgets         ,1.00,4.00
+thingummies     ,2.00,3.00
+oojars          ,3.00,1.00
+widgets         ,4.00,4.00
+oojars          ,5.00,1.00
+thingummies     ,6.00,3.00
+oojimiflips     ,7.00,2.00
+
+Variable,Description,,Position
+s,Format: A16,,1
+,Measure: Nominal,,
+,Display Alignment: Left,,
+,Display Width: 16,,
+x,Format: F8.2,,2
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+new,Format: F8.2,,3
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+,1,oojars,
+,2,oojimiflips,
+,3,thingummies,
+,4,widgets,
+])
+
+AT_CLEANUP
+
+
+AT_SETUP([AUTORECODE group subcommand])
+AT_DATA([ar-group.sps],
+[data list notable list /x * y *.
+begin data.
+11 10
+12 12 
+13 15
+14 11
+15 12
+16 18
+end data.
+
+autorecode 
+       x y into a b
+       /group.
+
+list.
+])
+
+AT_CHECK([pspp -O format=csv ar-group.sps], [0],
+[Table: Data List
+x,y,a,b
+11.00,10.00,2.00,1.00
+12.00,12.00,3.00,3.00
+13.00,15.00,4.00,6.00
+14.00,11.00,5.00,2.00
+15.00,12.00,6.00,3.00
+16.00,18.00,7.00,8.00
+])
+
+AT_CLEANUP
+
+
+
+AT_SETUP([AUTORECODE group - string variables])
+AT_DATA([strings.sps],
+[data list notable list /x (a8) y (a16).
+begin data.
+fred bert
+charlie "         "
+delta echo
+"      " windows
+" "  nothing
+end data.
+
+
+autorecode x y into a b
+       /group.
+
+delete variables x y.
+
+list.
+
+])
+
+AT_CHECK([pspp -O format=csv strings.sps], [0],
+[Table: Data List
+a,b
+7.00,3.00
+4.00,1.00
+5.00,6.00
+2.00,9.00
+2.00,8.00
+])
+
+AT_CLEANUP
+
+
+dnl Tests for a crash which happened when the /GROUP subcommand
+dnl appeared with string variables of different widths.
+AT_SETUP([AUTORECODE group vs. strings])
+AT_DATA([ar-strings.sps],
+  [data list notable list /a (a12) b (a6).
+begin data.
+one    nine
+two    ten
+three  eleven 
+four   nought
+end data.
+
+autorecode a b into x y 
+       /group.
+
+list.
+])
+
+AT_CHECK([pspp -O format=csv ar-strings.sps], [0],
+[dnl
+Table: Data List
+a,b,x,y
+one         ,nine  ,5.00,3.00
+two         ,ten   ,8.00,6.00
+three       ,eleven,7.00,1.00
+four        ,nought,2.00,4.00
+])
+
+AT_CLEANUP
diff --git a/tests/language/stats/correlations.at b/tests/language/stats/correlations.at
new file mode 100644 (file)
index 0000000..f31d059
--- /dev/null
@@ -0,0 +1,118 @@
+AT_BANNER([CORRELATIONS])
+
+AT_SETUP([CORRELATIONS -- unweighted])
+AT_DATA([correlations.sps], [dnl
+set format = F11.3.
+data list notable list /foo * bar * wiz * bang *.
+begin data.
+1   0   3   1
+3   9 -50   5
+3   4   3 203
+4  -9   0  -4
+98 78 104   2
+3  50 -49 200
+.   4   4   4
+5   3   0   .
+end data.
+
+correlations 
+       variables = foo bar wiz bang
+       /print nosig
+       /missing = listwise
+       .
+
+correlations 
+       variables = bar wiz
+       /print nosig
+       /missing = listwise
+       .
+
+correlations 
+       variables = foo bar wiz bang
+       /print nosig
+       /missing = pairwise
+       .
+])
+AT_CHECK([pspp -o pspp.csv correlations.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Correlations
+,,foo,bar,wiz,bang
+foo,Pearson Correlation,1.000,.802,.890,-.308
+,Sig. (2-tailed),,.055,.017,.553
+bar,Pearson Correlation,.802,1.000,.519,.118
+,Sig. (2-tailed),.055,,.291,.824
+wiz,Pearson Correlation,.890,.519,1.000,-.344
+,Sig. (2-tailed),.017,.291,,.505
+bang,Pearson Correlation,-.308,.118,-.344,1.000
+,Sig. (2-tailed),.553,.824,.505,
+
+Table: Correlations
+,,bar,wiz
+bar,Pearson Correlation,1.000,.497
+,Sig. (2-tailed),,.210
+wiz,Pearson Correlation,.497,1.000
+,Sig. (2-tailed),.210,
+
+Table: Correlations
+,,foo,bar,wiz,bang
+foo,Pearson Correlation,1.000,.805,.883,-.308
+,Sig. (2-tailed),,.029,.008,.553
+,N,7,7,7,6
+bar,Pearson Correlation,.805,1.000,.497,.164
+,Sig. (2-tailed),.029,,.210,.725
+,N,7,8,8,7
+wiz,Pearson Correlation,.883,.497,1.000,-.337
+,Sig. (2-tailed),.008,.210,,.460
+,N,7,8,8,7
+bang,Pearson Correlation,-.308,.164,-.337,1.000
+,Sig. (2-tailed),.553,.725,.460,
+,N,6,7,7,7
+])
+AT_CLEANUP
+
+AT_SETUP([CORRELATIONS -- weighted])
+AT_DATA([correlations1.sps], [dnl
+set format = F11.3.
+data list notable list /foo * bar * wiz * bang * w *.
+begin data.
+1   0   3   1  1
+3   9 -50   5  2
+3   4   3 203  1
+4  -9   0  -4  1
+98 78 104   2  3
+3  50 -49 200  1
+end data.
+
+weight by w.
+
+correlations 
+       variables = foo bar wiz bang
+       /statistics=descriptives xprod
+       .
+])
+AT_DATA([correlations2.sps], [dnl
+set format = F11.3.
+data list notable list /foo * bar * wiz * bang * w *.
+begin data.
+1   0   3   1  1
+3   9 -50   5  1
+3   9 -50   5  1
+3   4   3 203  1
+4  -9   0  -4  1
+98 78 104   2  1
+98 78 104   2  1
+98 78 104   2  1
+3  50 -49 200  1
+end data.
+
+weight by w.
+
+correlations 
+       variables = foo bar wiz bang
+       /statistics=descriptives xprod
+       .
+])
+AT_CHECK([pspp -O format=csv correlations1.sps], [0], [stdout])
+mv stdout expout
+AT_CHECK([pspp -O format=csv correlations2.sps], [0], [expout])
+AT_CLEANUP
index ec05f1b99759988259b32df1f443b2a3be3d1ca2..9c6be8d38fe3d3225423c4dddaaa6a55a494763a 100644 (file)
@@ -157,3 +157,31 @@ Variable,N,Mean
 X,6,2.500
 ])
 AT_CLEANUP
+
+dnl Git history shows that this was probably a bug in the PSPP
+dnl core regarding multipass procedures, not anything specific
+dnl to DESCRIPTIVES.
+AT_SETUP([DESCRIPTIVES bug with TEMPORARY])
+AT_DATA([descriptives.sps], [dnl
+DATA LIST LIST NOTABLE /id * abc *.
+BEGIN DATA.
+1 3.5
+2 2.0
+3 2.0
+4 3.5
+5 3.0
+6 4.0
+7 5.0
+END DATA.
+
+TEMPORARY.
+SELECT IF id < 7 .
+
+DESCRIPTIVES /VAR=abc.
+])
+AT_CHECK([pspp -O format=csv descriptives.sps], [0], [dnl
+Table: Valid cases = 6; cases with missing value(s) = 0.
+Variable,N,Mean,Std Dev,Minimum,Maximum
+abc,6,3.00,.84,2.00,4.00
+])
+AT_CLEANUP
diff --git a/tests/language/stats/examine.at b/tests/language/stats/examine.at
new file mode 100644 (file)
index 0000000..9bfa9c7
--- /dev/null
@@ -0,0 +1,562 @@
+AT_BANNER([EXAMINE])
+
+AT_SETUP([EXAMINE])
+AT_DATA([examine.sps], [
+DATA LIST LIST /QUALITY * W * BRAND * .
+BEGIN DATA
+3  1  1
+2  2  1
+1  2  1
+1  1  1
+4  1  1
+4  1  1
+5  1  2
+2  1  2
+4  4  2
+2  1  2
+3  1  2
+7  1  3
+4  2  3
+5  3  3
+3  1  3
+6  1  3
+END DATA
+
+WEIGHT BY w.
+
+VARIABLE LABELS brand   'Manufacturer'.
+VARIABLE LABELS quality 'Breaking Strain'.
+
+VALUE LABELS /brand 1 'Aspeger' 2 'Bloggs' 3 'Charlies'.
+
+LIST /FORMAT=NUMBERED.
+
+EXAMINE
+       quality BY brand
+       /STATISTICS descriptives extreme(3)
+       .
+])
+AT_CHECK([pspp -o pspp.csv examine.sps])
+dnl In the following data, only the extreme values have been checked.
+dnl The descriptives have been blindly pasted.
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+QUALITY,F8.0
+W,F8.0
+BRAND,F8.0
+
+Table: Data List
+Case Number,QUALITY,W,BRAND
+1,3.00,1.00,1.00
+2,2.00,2.00,1.00
+3,1.00,2.00,1.00
+4,1.00,1.00,1.00
+5,4.00,1.00,1.00
+6,4.00,1.00,1.00
+7,5.00,1.00,2.00
+8,2.00,1.00,2.00
+9,4.00,4.00,2.00
+10,2.00,1.00,2.00
+11,3.00,1.00,2.00
+12,7.00,1.00,3.00
+13,4.00,2.00,3.00
+14,5.00,3.00,3.00
+15,3.00,1.00,3.00
+16,6.00,1.00,3.00
+
+Table: Case Processing Summary
+,Cases,,,,,
+,Valid,,Missing,,Total,
+,N,Percent,N,Percent,N,Percent
+Breaking Strain,24.00,100%,.00,0%,24.00,100%
+
+Table: Extreme Values
+,,,Case Number,Value
+Breaking Strain,Highest,1,12,7.00
+,,2,16,6.00
+,,3,7,5.00
+,Lowest,1,3,1.00
+,,2,3,1.00
+,,3,4,1.00
+
+Table: Descriptives
+,,,Statistic,Std. Error
+Breaking Strain,Mean,,3.54,.32
+,95% Confidence Interval for Mean,Lower Bound,2.87,
+,,Upper Bound,4.21,
+,5% Trimmed Mean,,3.50,
+,Median,,4.00,
+,Variance,,2.52,
+,Std. Deviation,,1.59,
+,Minimum,,1.00,
+,Maximum,,7.00,
+,Range,,6.00,
+,Interquartile Range,,2.75,
+,Skewness,,.06,.47
+,Kurtosis,,-.36,.92
+
+Table: Case Processing Summary
+,,Cases,,,,,
+,,Valid,,Missing,,Total,
+,Manufacturer,N,Percent,N,Percent,N,Percent
+Breaking Strain,Aspeger,8.00,100%,.00,0%,8.00,100%
+,Bloggs,8.00,100%,.00,0%,8.00,100%
+,Charlies,8.00,100%,.00,0%,8.00,100%
+
+Table: Extreme Values
+,Manufacturer,,,Case Number,Value
+Breaking Strain,Aspeger,Highest,1,5,4.00
+,,,2,6,4.00
+,,,3,1,3.00
+,,Lowest,1,3,1.00
+,,,2,3,1.00
+,,,3,4,1.00
+,Bloggs,Highest,1,7,5.00
+,,,2,9,4.00
+,,,3,9,4.00
+,,Lowest,1,8,2.00
+,,,2,10,2.00
+,,,3,11,3.00
+,Charlies,Highest,1,12,7.00
+,,,2,16,6.00
+,,,3,14,5.00
+,,Lowest,1,15,3.00
+,,,2,13,4.00
+,,,3,13,4.00
+
+Table: Descriptives
+,Manufacturer,,,Statistic,Std. Error
+Breaking Strain,Aspeger,Mean,,2.25,.45
+,,95% Confidence Interval for Mean,Lower Bound,1.18,
+,,,Upper Bound,3.32,
+,,5% Trimmed Mean,,2.22,
+,,Median,,2.00,
+,,Variance,,1.64,
+,,Std. Deviation,,1.28,
+,,Minimum,,1.00,
+,,Maximum,,4.00,
+,,Range,,3.00,
+,,Interquartile Range,,2.75,
+,,Skewness,,.47,.75
+,,Kurtosis,,-1.55,1.48
+,Bloggs,Mean,,3.50,.38
+,,95% Confidence Interval for Mean,Lower Bound,2.61,
+,,,Upper Bound,4.39,
+,,5% Trimmed Mean,,3.50,
+,,Median,,4.00,
+,,Variance,,1.14,
+,,Std. Deviation,,1.07,
+,,Minimum,,2.00,
+,,Maximum,,5.00,
+,,Range,,3.00,
+,,Interquartile Range,,1.75,
+,,Skewness,,-.47,.75
+,,Kurtosis,,-.83,1.48
+,Charlies,Mean,,4.88,.44
+,,95% Confidence Interval for Mean,Lower Bound,3.83,
+,,,Upper Bound,5.92,
+,,5% Trimmed Mean,,4.86,
+,,Median,,5.00,
+,,Variance,,1.55,
+,,Std. Deviation,,1.25,
+,,Minimum,,3.00,
+,,Maximum,,7.00,
+,,Range,,4.00,
+,,Interquartile Range,,1.75,
+,,Skewness,,.30,.75
+,,Kurtosis,,.15,1.48
+])
+AT_CLEANUP
+
+AT_SETUP([EXAMINE -- extremes])
+AT_DATA([examine.sps], [dnl
+data list free /V1 W
+begin data.
+1  1
+2  1
+3  2
+3  1
+4  1
+5  1
+6  1
+7  1
+8  1
+9  1
+10 1
+11 1
+12 1
+13 1
+14 1
+15 1
+16 1
+17 1
+18 2
+19 1
+20 1
+end data.
+
+weight by w.
+
+examine v1 
+ /statistics=extreme(6)
+ .
+])
+AT_CHECK([pspp -o pspp.csv examine.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Case Processing Summary
+,Cases,,,,,
+,Valid,,Missing,,Total,
+,N,Percent,N,Percent,N,Percent
+V1,23.00,100%,.00,0%,23.00,100%
+
+Table: Extreme Values
+,,,Case Number,Value
+V1,Highest,1,21,20.00
+,,2,20,19.00
+,,3,19,18.00
+,,4,19,18.00
+,,5,18,17.00
+,,6,17,16.00
+,Lowest,1,1,1.00
+,,2,2,2.00
+,,3,3,3.00
+,,4,3,3.00
+,,5,4,3.00
+,,6,5,4.00
+])
+AT_CLEANUP
+
+dnl Test the PERCENTILES subcommand of the EXAMINE command.
+dnl In particular test that it behaves properly when there are only 
+dnl a few cases.
+AT_SETUP([EXAMINE -- percentiles])
+AT_DATA([examine.sps], [dnl
+DATA LIST LIST /X *.
+BEGIN DATA.
+2.00 
+8.00 
+5.00 
+END DATA.
+
+EXAMINE /x
+       /PERCENTILES=HAVERAGE.
+
+EXAMINE /x
+       /PERCENTILES=WAVERAGE.
+
+EXAMINE /x
+       /PERCENTILES=ROUND.
+
+EXAMINE /x
+       /PERCENTILES=EMPIRICAL.
+
+EXAMINE /x
+       /PERCENTILES=AEMPIRICAL.
+])
+AT_CHECK([pspp -o pspp.csv examine.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+X,F8.0
+
+Table: Case Processing Summary
+,Cases,,,,,
+,Valid,,Missing,,Total,
+,N,Percent,N,Percent,N,Percent
+X,3,100%,0,0%,3,100%
+
+Table: Percentiles
+,,Percentiles,,,,,,
+,,5,10,25,50,75,90,95
+X,HAverage,.40,.80,2.00,5.00,8.00,8.00,8.00
+,Tukey's Hinges,,,3.50,5.00,6.50,,
+
+Table: Case Processing Summary
+,Cases,,,,,
+,Valid,,Missing,,Total,
+,N,Percent,N,Percent,N,Percent
+X,3,100%,0,0%,3,100%
+
+Table: Percentiles
+,,Percentiles,,,,,,
+,,5,10,25,50,75,90,95
+X,Weighted Average,.30,.60,1.50,3.50,5.75,7.10,7.55
+,Tukey's Hinges,,,3.50,5.00,6.50,,
+
+Table: Case Processing Summary
+,Cases,,,,,
+,Valid,,Missing,,Total,
+,N,Percent,N,Percent,N,Percent
+X,3,100%,0,0%,3,100%
+
+Table: Percentiles
+,,Percentiles,,,,,,
+,,5,10,25,50,75,90,95
+X,Rounded,.00,.00,2.00,5.00,5.00,8.00,8.00
+,Tukey's Hinges,,,3.50,5.00,6.50,,
+
+Table: Case Processing Summary
+,Cases,,,,,
+,Valid,,Missing,,Total,
+,N,Percent,N,Percent,N,Percent
+X,3,100%,0,0%,3,100%
+
+Table: Percentiles
+,,Percentiles,,,,,,
+,,5,10,25,50,75,90,95
+X,Empirical,2.00,2.00,2.00,5.00,8.00,8.00,8.00
+,Tukey's Hinges,,,3.50,5.00,6.50,,
+
+Table: Case Processing Summary
+,Cases,,,,,
+,Valid,,Missing,,Total,
+,N,Percent,N,Percent,N,Percent
+X,3,100%,0,0%,3,100%
+
+Table: Percentiles
+,,Percentiles,,,,,,
+,,5,10,25,50,75,90,95
+X,Empirical with averaging,2.00,2.00,2.00,5.00,8.00,8.00,8.00
+,Tukey's Hinges,,,3.50,5.00,6.50,,
+])
+AT_CLEANUP
+
+AT_SETUP([EXAMINE -- missing values])
+AT_DATA([examine.sps], [dnl
+DATA LIST LIST /x * y *.
+BEGIN DATA.
+1   1 
+2   1
+3   1
+4   1
+5   2
+6   2
+.   2
+END DATA
+
+EXAMINE /x by y.
+])
+AT_CHECK([pspp -o pspp.csv examine.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+x,F8.0
+y,F8.0
+
+Table: Case Processing Summary
+,Cases,,,,,
+,Valid,,Missing,,Total,
+,N,Percent,N,Percent,N,Percent
+x,6,85.7143%,1,14.2857%,7,100%
+
+Table: Case Processing Summary
+,,Cases,,,,,
+,,Valid,,Missing,,Total,
+,y,N,Percent,N,Percent,N,Percent
+x,1.00,4,100%,0,0%,4,100%
+,2.00,2,66.6667%,1,33.3333%,3,100%
+])
+AT_CLEANUP
+
+AT_SETUP([EXAMINE -- missing values and percentiles])
+AT_DATA([examine.sps], [dnl
+DATA LIST LIST /X *.
+BEGIN DATA.
+99
+99
+5.00
+END DATA.
+
+MISSING VALUE X (99).
+
+EXAMINE /x
+        /PERCENTILES=HAVERAGE.
+])
+AT_CHECK([pspp -o pspp.csv examine.sps])
+dnl Ignore output -- this is just a no-crash check.
+AT_CLEANUP
+
+dnl Tests the trimmed mean calculation in the case
+dnl where the data is weighted towards the centre.
+AT_SETUP([EXAMINE -- trimmed mean])
+AT_DATA([examine.sps], [dnl
+DATA LIST LIST /X * C *.
+BEGIN DATA.
+1 1
+2 49
+3 2
+END DATA.
+
+WEIGHT BY c.
+
+EXAMINE
+       x
+       /STATISTICS=DESCRIPTIVES
+       .
+])
+AT_CHECK([pspp -o pspp.csv examine.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+X,F8.0
+C,F8.0
+
+Table: Case Processing Summary
+,Cases,,,,,
+,Valid,,Missing,,Total,
+,N,Percent,N,Percent,N,Percent
+X,52.00,100%,.00,0%,52.00,100%
+
+Table: Descriptives
+,,,Statistic,Std. Error
+X,Mean,,2.02,.03
+,95% Confidence Interval for Mean,Lower Bound,1.95,
+,,Upper Bound,2.09,
+,5% Trimmed Mean,,2.00,
+,Median,,2.00,
+,Variance,,.06,
+,Std. Deviation,,.24,
+,Minimum,,1.00,
+,Maximum,,3.00,
+,Range,,2.00,
+,Interquartile Range,,.00,
+,Skewness,,1.19,.33
+,Kurtosis,,15.73,.65
+])
+AT_CLEANUP
+
+AT_SETUP([EXAMINE -- crash bug])
+AT_DATA([examine.sps], [dnl
+data list list /a * x * y *.
+begin data.
+3 1 3
+5 1 4
+7 2 3
+end data.
+
+examine a by x by y
+       /statistics=DESCRIPTIVES
+       . 
+])
+AT_CHECK([pspp -o pspp.csv examine.sps])
+dnl Ignore output -- this is just a no-crash check.
+AT_CLEANUP
+
+dnl Test that two consecutive EXAMINE commands don't crash PSPP.
+AT_SETUP([EXAMINE -- consecutive runs don't crash])
+AT_DATA([examine.sps], [dnl
+data list list /y * z *.
+begin data.
+6 4
+5 3
+7 6
+end data.
+
+EXAMINE /VARIABLES= z BY y.
+
+EXAMINE /VARIABLES= z. 
+])
+AT_CHECK([pspp -o pspp.csv examine.sps])
+dnl Ignore output -- this is just a no-crash check.
+AT_CLEANUP
+
+dnl Test that /DESCRIPTIVES does not crash in presence of missing values.
+AT_SETUP([EXAMINE -- missing values don't crash])
+AT_DATA([examine.sps], [dnl
+data list list /x * y *.
+begin data.
+1 0
+2 0
+. 0
+3 1
+4 1
+end data.
+examine x by y /statistics=descriptives. 
+])
+AT_CHECK([pspp -o pspp.csv examine.sps])
+dnl Ignore output -- this is just a no-crash check.
+AT_CLEANUP
+
+dnl Test that having only a single case doesn't crash.
+AT_SETUP([EXAMINE -- single case doesn't crash])
+AT_DATA([examine.sps], [dnl
+DATA LIST LIST /quality * .
+BEGIN DATA
+3  
+END DATA
+
+
+EXAMINE
+       quality 
+       /STATISTICS descriptives 
+       .
+])
+AT_CHECK([pspp -o pspp.csv examine.sps])
+dnl Ignore output -- this is just a no-crash check.
+AT_CLEANUP
+
+dnl Test that all-missing data doesn't crash.
+AT_SETUP([EXAMINE -- all-missing data doesn't crash])
+AT_DATA([examine.sps], [dnl
+DATA LIST LIST /x *.
+BEGIN DATA.
+.
+.
+.
+.
+END DATA.
+
+EXAMINE /x PLOT=HISTOGRAM.
+])
+AT_CHECK([pspp -o pspp.csv examine.sps], [0], [dnl
+warning: Not creating plot because data set is empty.
+])
+dnl Ignore output -- this is just a no-crash check.
+AT_CLEANUP
+
+dnl Test that big input doesn't crash (bug 11307).
+AT_SETUP([EXAMINE -- big input doesn't crash])
+AT_DATA([examine.sps], [dnl
+INPUT PROGRAM.
+       LOOP #I=1 TO 50000.
+               COMPUTE X=NORMAL(10).
+               END CASE.
+       END LOOP.
+       END FILE.
+END INPUT PROGRAM.
+
+
+EXAMINE /x
+       /STATISTICS=DESCRIPTIVES.
+])
+AT_CHECK([pspp -o pspp.csv examine.sps])
+dnl Ignore output -- this is just a no-crash check.
+AT_CLEANUP
+
+dnl Another test that big input doesn't crash.
+dnl The actual bug that this checks for has been lost.
+AT_SETUP([EXAMINE -- big input doesn't crash 2])
+AT_DATA([make-big-input.pl], 
+  [for ($i=0; $i<100000; $i++) { print "AB12\n" };
+   for ($i=0; $i<100000; $i++) { print "AB04\n" };
+])
+AT_CHECK([$PERL make-big-input.pl > large.txt])
+AT_DATA([examine.sps], [dnl
+DATA LIST FILE='large.txt' /S 1-2 (A) X 3 .
+
+
+AGGREGATE OUTFILE=* /BREAK=X /A=N.
+
+
+EXAMINE /A BY /X.
+])
+AT_CHECK([pspp -o pspp.csv examine.sps])
+dnl Ignore output -- this is just a no-crash check.
+AT_DATA([more-big-input.pl], 
+  [for ($i=0; $i<25000; $i++) { print "AB04\nAB12\n" };
+])
+AT_CHECK([$PERL more-big-input.pl >> large.txt])
+AT_CHECK([pspp -o pspp.csv examine.sps])
+dnl Ignore output -- this is just a no-crash check.
+AT_CLEANUP
index 6ebacfd8dcd98e04464f6999b01fc4b5f87d58d6..508c9d91be5b17bf1fcae26bb97542b0b5fbfec6 100644 (file)
@@ -2,7 +2,7 @@ AT_BANNER([FLIP command])
 
 AT_SETUP([FLIP with NEWNAMES])
 AT_DATA([flip.sps], [dnl
-data list notable /N 1 (a) A B C D 2-9.
+data list notable /N 1 (a) a b c d 2-9.
 list.
 begin data.
 v 1 2 3 4 5
@@ -18,7 +18,7 @@ list.
 ])
 AT_CHECK([pspp -O format=csv flip.sps], [0], [dnl
 Table: Data List
-N,A,B,C,D
+N,a,b,c,d
 v,1,2,3,4
 w,6,7,8,9
 x,11,12,13,14
@@ -26,19 +26,19 @@ y,16,17,18,19
 z,21,22,23,24
 
 Table: Data List
-CASE_LBL,V,W,X,Y,Z
-A       ,1.00,6.00,11.00,16.00,21.00
-B       ,2.00,7.00,12.00,17.00,22.00
-C       ,3.00,8.00,13.00,18.00,23.00
-D       ,4.00,9.00,14.00,19.00,24.00
+CASE_LBL,v,w,x,y,z
+a       ,1.00,6.00,11.00,16.00,21.00
+b       ,2.00,7.00,12.00,17.00,22.00
+c       ,3.00,8.00,13.00,18.00,23.00
+d       ,4.00,9.00,14.00,19.00,24.00
 
 Table: Data List
-CASE_LBL,A,B,C,D
-V       ,1.00,2.00,3.00,4.00
-W       ,6.00,7.00,8.00,9.00
-X       ,11.00,12.00,13.00,14.00
-Y       ,16.00,17.00,18.00,19.00
-Z       ,21.00,22.00,23.00,24.00
+CASE_LBL,a,b,c,d
+v       ,1.00,2.00,3.00,4.00
+w       ,6.00,7.00,8.00,9.00
+x       ,11.00,12.00,13.00,14.00
+y       ,16.00,17.00,18.00,19.00
+z       ,21.00,22.00,23.00,24.00
 ])
 AT_CLEANUP
 
diff --git a/tests/language/stats/npar.at b/tests/language/stats/npar.at
new file mode 100644 (file)
index 0000000..8370127
--- /dev/null
@@ -0,0 +1,792 @@
+AT_BANNER([NPAR TESTS])
+
+AT_SETUP([NPAR TESTS BINOMIAL, P < 0.5; N1/N2 < 1])
+AT_DATA([npar.sps], [dnl
+SET FORMAT F8.3.
+
+DATA LIST LIST NOTABLE /x * w *.
+BEGIN DATA.
+1   6
+2   15
+END DATA.
+
+WEIGHT BY w.
+
+NPAR TESTS
+       /BINOMIAL(0.3) = x
+       .
+])
+AT_CHECK([pspp -O format=csv npar.sps], [0], [dnl
+Table: Binomial Test
+,,Category,N,Observed Prop.,Test Prop.,Exact Sig. (1-tailed)
+x,Group1,1.000,6.000,.286,.300,.551
+,Group2,2.000,15.000,.714,,
+,Total,,21.000,1.000,,
+])
+AT_CLEANUP
+
+AT_SETUP([NPAR TESTS BINOMIAL, P < 0.5; N1/N2 > 1])
+AT_DATA([npar.sps], [dnl
+SET FORMAT F8.3.
+
+DATA LIST LIST NOTABLE /x (F8.0) w (F8.0).
+BEGIN DATA.
+1   7
+2   6
+END DATA.
+
+WEIGHT BY w.
+
+NPAR TESTS
+       /BINOMIAL(0.4) = x
+       .
+])
+AT_CHECK([pspp -O format=csv npar.sps], [0], [dnl
+Table: Binomial Test
+,,Category,N,Observed Prop.,Test Prop.,Exact Sig. (1-tailed)
+x,Group1,1,7,.538,.400,.229
+,Group2,2,6,.462,,
+,Total,,13,1.000,,
+])
+AT_CLEANUP
+
+AT_SETUP([NPAR TESTS BINOMIAL, P < 0.5; N1/N2 = 1])
+AT_DATA([npar.sps], [dnl
+SET FORMAT F8.3.
+
+DATA LIST LIST NOTABLE /x (F8.0) w (F8.0).
+BEGIN DATA.
+1   8
+2   8
+END DATA.
+
+WEIGHT BY w.
+
+NPAR TESTS
+       /BINOMIAL(0.4) = x
+       .
+])
+AT_CHECK([pspp -O format=csv npar.sps], [0], [dnl
+Table: Binomial Test
+,,Category,N,Observed Prop.,Test Prop.,Exact Sig. (1-tailed)
+x,Group1,1,8,.500,.400,.284
+,Group2,2,8,.500,,
+,Total,,16,1.000,,
+])
+AT_CLEANUP
+
+AT_SETUP([NPAR TESTS BINOMIAL, P > 0.5; N1/N2 < 1])
+AT_DATA([npar.sps], [dnl
+SET FORMAT F8.3.
+
+DATA LIST LIST NOTABLE /x (F8.0) w (F8.0).
+BEGIN DATA.
+1   11
+2   12
+END DATA.
+
+WEIGHT BY w.
+
+NPAR TESTS
+       /BINOMIAL(0.6) = x
+       .
+])
+AT_CHECK([pspp -O format=csv npar.sps], [0], [dnl
+Table: Binomial Test
+,,Category,N,Observed Prop.,Test Prop.,Exact Sig. (1-tailed)
+x,Group1,1,11,.478,.600,.164
+,Group2,2,12,.522,,
+,Total,,23,1.000,,
+])
+AT_CLEANUP
+
+AT_SETUP([NPAR TESTS BINOMIAL, P > 0.5; N1/N2 > 1])
+AT_DATA([npar.sps], [dnl
+SET FORMAT F8.3.
+
+DATA LIST LIST NOTABLE /x (F8.0) w (F8.0).
+BEGIN DATA.
+1   11
+2   9
+END DATA.
+
+WEIGHT BY w.
+
+NPAR TESTS
+       /BINOMIAL(0.6) = x.
+])
+AT_CHECK([pspp -O format=csv npar.sps], [0], [dnl
+Table: Binomial Test
+,,Category,N,Observed Prop.,Test Prop.,Exact Sig. (1-tailed)
+x,Group1,1,11,.550,.600,.404
+,Group2,2,9,.450,,
+,Total,,20,1.000,,
+])
+AT_CLEANUP
+
+AT_SETUP([NPAR TESTS BINOMIAL, P > 0.5; N1/N2 = 1])
+AT_DATA([npar.sps], [dnl
+SET FORMAT F8.3.
+
+DATA LIST LIST NOTABLE /x (F8.0) w (F8.0).
+BEGIN DATA.
+1   11
+2   11
+END DATA.
+
+WEIGHT BY w.
+
+NPAR TESTS
+       /BINOMIAL(0.6) = x.
+])
+AT_CHECK([pspp -O format=csv npar.sps], [0], [dnl
+Table: Binomial Test
+,,Category,N,Observed Prop.,Test Prop.,Exact Sig. (1-tailed)
+x,Group1,1,11,.500,.600,.228
+,Group2,2,11,.500,,
+,Total,,22,1.000,,
+])
+AT_CLEANUP
+
+AT_SETUP([NPAR TESTS BINOMIAL, P = 0.5; N1/N2 < 1])
+AT_DATA([npar.sps], [dnl
+SET FORMAT F8.3.
+
+DATA LIST LIST NOTABLE /x (F8.0) w (F8.0).
+BEGIN DATA.
+1   8
+2   15
+END DATA.
+
+WEIGHT BY w.
+
+NPAR TESTS
+       /BINOMIAL = x
+       .
+])
+AT_CHECK([pspp -O format=csv npar.sps], [0], [dnl
+Table: Binomial Test
+,,Category,N,Observed Prop.,Test Prop.,Exact Sig. (2-tailed)
+x,Group1,1,8,.348,.500,.210
+,Group2,2,15,.652,,
+,Total,,23,1.000,,
+])
+AT_CLEANUP
+
+AT_SETUP([NPAR TESTS BINOMIAL, P = 0.5; N1/N2 > 1])
+AT_DATA([npar.sps], [dnl
+SET FORMAT F8.3.
+
+DATA LIST LIST NOTABLE /x (F8.0) w (F8.0).
+BEGIN DATA.
+1   12
+2   6
+END DATA.
+
+WEIGHT BY w.
+
+NPAR TESTS
+       /BINOMIAL(0.5) = x.
+])
+AT_CHECK([pspp -O format=csv npar.sps], [0], [dnl
+Table: Binomial Test
+,,Category,N,Observed Prop.,Test Prop.,Exact Sig. (2-tailed)
+x,Group1,1,12,.667,.500,.238
+,Group2,2,6,.333,,
+,Total,,18,1.000,,
+])
+AT_CLEANUP
+
+AT_SETUP([NPAR TESTS BINOMIAL, P = 0.5; N1/N2 = 1])
+AT_DATA([npar.sps], [dnl
+SET FORMAT F8.3.
+
+DATA LIST LIST NOTABLE /x (F8.0) w (F8.0).
+BEGIN DATA.
+1   10
+2   10
+END DATA.
+
+WEIGHT BY w.
+
+NPAR TESTS
+       /BINOMIAL(0.5) = x
+       .
+])
+AT_CHECK([pspp -O format=csv npar.sps], [0], [dnl
+Table: Binomial Test
+,,Category,N,Observed Prop.,Test Prop.,Exact Sig. (2-tailed)
+x,Group1,1,10,.500,.500,1.000
+,Group2,2,10,.500,,
+,Total,,20,1.000,,
+])
+AT_CLEANUP
+
+AT_SETUP([NPAR TESTS BINOMIAL, P = 0.5; N1/N2 = 1 Cutpoint])
+AT_DATA([npar.sps], [dnl
+SET FORMAT F8.3.
+
+DATA LIST LIST NOTABLE /x * w *.
+BEGIN DATA.
+9    3
+10   7
+11   16
+END DATA.
+
+WEIGHT BY w.
+
+NPAR TESTS
+       /BINOMIAL(0.5) = x (10)
+       .
+])
+AT_CHECK([pspp -O format=csv npar.sps], [0], [dnl
+Table: Binomial Test
+,,Category,N,Observed Prop.,Test Prop.,Exact Sig. (2-tailed)
+x,Group1,<= 10,10.000,.385,.500,.327
+,Group2,,16.000,.615,,
+,Total,,26.000,1.000,,
+])
+AT_CLEANUP
+
+AT_SETUP([NPAR TESTS BINOMIAL, P = 0.5; N1/N2 = 1 Named values])
+AT_DATA([npar.sps], [dnl
+SET FORMAT F8.3.
+
+DATA LIST LIST NOTABLE /x * w *.
+BEGIN DATA.
+10   10
+15   45
+20   13
+END DATA.
+
+WEIGHT BY w.
+
+NPAR TESTS
+       /BINOMIAL(0.5) = x (10, 20)
+       .
+])
+AT_CHECK([pspp -O format=csv npar.sps], [0], [dnl
+Table: Binomial Test
+,,Category,N,Observed Prop.,Test Prop.,Exact Sig. (2-tailed)
+x,Group1,10.000,10.000,.435,.500,.678
+,Group2,20.000,13.000,.565,,
+,Total,,23.000,1.000,,
+])
+AT_CLEANUP
+
+AT_SETUP([NPAR TESTS CHISQUARE])
+AT_DATA([npar.sps], [dnl
+DATA LIST NOTABLE LIST /x * y * w *.
+BEGIN DATA.
+1   2  1
+2   1  3
+3.1 1  4
+3.2 2  1
+4   2  2
+5   3  1
+1   4  2
+END DATA.
+
+WEIGHT BY w.
+
+NPAR TESTS
+  CHISQUARE=x y
+  .
+
+NPAR TESTS
+  CHISQUARE=y
+  /EXPECTED=3 4 5 4
+  .
+
+NPAR TESTS
+  CHISQUARE=x y(2, 4)
+  /EXPECTED = 6 10 3
+  .
+])
+AT_CHECK([pspp -O format=csv npar.sps], [0], [dnl
+Table: x
+,Observed N,Expected N,Residual
+1.00,3.00,2.33,.67
+2.00,3.00,2.33,.67
+3.10,4.00,2.33,1.67
+3.20,1.00,2.33,-1.33
+4.00,2.00,2.33,-.33
+5.00,1.00,2.33,-1.33
+Total,14.00,,
+
+Table: y
+,Observed N,Expected N,Residual
+1.00,7.00,3.50,3.50
+2.00,4.00,3.50,.50
+3.00,1.00,3.50,-2.50
+4.00,2.00,3.50,-1.50
+Total,14.00,,
+
+Table: Test Statistics
+,x,y
+Chi-Square,3.14,6.00
+df,5,3
+Asymp. Sig.,.68,.11
+
+Table: y
+,Observed N,Expected N,Residual
+1.00,7.00,2.63,4.38
+2.00,4.00,3.50,.50
+3.00,1.00,4.38,-3.38
+4.00,2.00,3.50,-1.50
+Total,14.00,,
+
+Table: Test Statistics
+,y
+Chi-Square,10.61
+df,3
+Asymp. Sig.,.01
+
+Table: Frequencies
+,x,,,,y,,,
+,Category,Observed N,Expected N,Residual,Category,Observed N,Expected N,Residual
+1,2.00,3.00,3.16,-.16,2.00,4.00,2.21,1.79
+2,3.00,5.00,5.26,-.26,3.00,1.00,3.68,-2.68
+3,4.00,2.00,1.58,.42,4.00,2.00,1.11,.89
+Total,,10.00,,,,7.00,,
+
+Table: Test Statistics
+,x,y
+Chi-Square,.13,4.13
+df,2,2
+Asymp. Sig.,.94,.13
+])
+AT_CLEANUP
+
+AT_SETUP([NPAR TESTS CHISQUARE expected values missing])
+AT_DATA([npar.sps], [dnl
+DATA LIST NOTABLE LIST /x * y * w *.
+BEGIN DATA.
+1   2  1
+2   1  3
+3.1 1  4
+3.2 2  1
+4   2  2
+5   3  1
+1   4  2
+END DATA.
+
+WEIGHT BY w.
+
+NPAR TESTS
+  CHISQUARE=y
+  /EXPECTED = 3 4 5 4 3 1
+  .
+])
+AT_CHECK([pspp -O format=csv npar.sps], [1], [dnl
+"error: CHISQUARE test specified 6 expected values, but 4 distinct values were encountered in variable y."
+
+Table: Test Statistics
+,y
+Chi-Square,.00
+df,0
+Asymp. Sig.,1.00
+])
+AT_CLEANUP
+
+AT_SETUP([NPAR TESTS CHISQUARE with DESCRIPTIVES])
+AT_DATA([npar.sps], [dnl
+DATA LIST NOTABLE LIST /x * y * w * .
+BEGIN DATA.
+1   2  1 
+2   1  3
+3.1 1  4
+3.2 2  1
+4   2  2
+5   3  1
+1   4  2
+.   5  1
+END DATA.
+
+WEIGHT BY w.
+
+MISSING VALUES x (4).
+
+NPAR TESTS
+  CHISQUARE=x y(-2,5)
+  /MISSING=ANALYSIS
+  /STATISTICS=DESCRIPTIVES
+  .
+])
+AT_CHECK([pspp -O format=csv npar.sps], [0], [dnl
+Table: Frequencies
+,x,,,,y,,,
+,Category,Observed N,Expected N,Residual,Category,Observed N,Expected N,Residual
+1,-2.00,.00,1.50,-1.50,-2.00,.00,1.88,-1.88
+2,-1.00,.00,1.50,-1.50,-1.00,.00,1.88,-1.88
+3,.00,.00,1.50,-1.50,.00,.00,1.88,-1.88
+4,1.00,3.00,1.50,1.50,1.00,7.00,1.88,5.13
+5,2.00,3.00,1.50,1.50,2.00,4.00,1.88,2.13
+6,3.00,5.00,1.50,3.50,3.00,1.00,1.88,-.88
+7,4.00,.00,1.50,-1.50,4.00,2.00,1.88,.13
+8,5.00,1.00,1.50,-.50,5.00,1.00,1.88,-.88
+Total,,12.00,,,,15.00,,
+
+Table: Test Statistics
+,x,y
+Chi-Square,17.33,22.87
+df,7,7
+Asymp. Sig.,.02,.00
+
+Table: Descriptive Statistics
+,N,Mean,Std. Deviation,Minimum,Maximum
+,,,,,
+x,12.00,2.47,1.19,1.00,5.00
+y,15.00,2.07,1.33,1.00,5.00
+])
+AT_CLEANUP
+
+AT_SETUP([NPAR TESTS CHISQUARE, listwise missing])
+AT_DATA([npar.sps], [dnl
+DATA LIST NOTABLE LIST /x * y * w * .
+BEGIN DATA.
+1   2  1 
+2   1  3
+3.1 1  4
+3.2 2  1
+4   2  2
+5   3  1
+1   4  2
+.   5  1
+END DATA.
+
+WEIGHT BY w.
+
+* MISSING VALUES x (4).
+
+NPAR TESTS
+  CHISQUARE=x y(-2,5)
+  /MISSING=LISTWISE
+  /STATISTICS=DESCRIPTIVES
+  .
+])
+AT_CHECK([pspp -O format=csv npar.sps], [0], [dnl
+Table: Frequencies
+,x,,,,y,,,
+,Category,Observed N,Expected N,Residual,Category,Observed N,Expected N,Residual
+1,-2.00,.00,1.75,-1.75,-2.00,.00,1.75,-1.75
+2,-1.00,.00,1.75,-1.75,-1.00,.00,1.75,-1.75
+3,.00,.00,1.75,-1.75,.00,.00,1.75,-1.75
+4,1.00,3.00,1.75,1.25,1.00,7.00,1.75,5.25
+5,2.00,3.00,1.75,1.25,2.00,4.00,1.75,2.25
+6,3.00,5.00,1.75,3.25,3.00,1.00,1.75,-.75
+7,4.00,2.00,1.75,.25,4.00,2.00,1.75,.25
+8,5.00,1.00,1.75,-.75,5.00,.00,1.75,-1.75
+Total,,14.00,,,,14.00,,
+
+Table: Test Statistics
+,x,y
+Chi-Square,13.43,26.00
+df,7,7
+Asymp. Sig.,.06,.00
+
+Table: Descriptive Statistics
+,N,Mean,Std. Deviation,Minimum,Maximum
+,,,,,
+x,14.00,2.69,1.23,1.00,5.00
+y,14.00,1.86,1.10,1.00,4.00
+])
+AT_CLEANUP
+
+AT_SETUP([NPAR TESTS WILCOXON])
+AT_DATA([npar.sps], [dnl
+data list notable list /foo * bar * w (f8.0).
+begin data.
+1.00     1.00   1
+1.00     2.00   1
+2.00     1.00   1
+1.00     4.00   1
+2.00     5.00   1
+1.00    19.00   1
+2.00     7.00   1
+4.00     5.00   1
+1.00    12.00   1
+2.00    13.00   1
+2.00     2.00   1
+12.00      .00  2
+12.00     1.00  1
+13.00     1.00  1
+end data
+
+variable labels foo "first" bar "second".
+
+weight by w.
+
+npar test
+ /wilcoxon=foo with bar (paired)
+ /missing analysis
+ /method=exact.
+])
+AT_CHECK([pspp -o pspp.csv npar.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Ranks
+,,N,Mean Rank,Sum of Ranks
+second - first,Negative Ranks,5,8.60,43.00
+,Positive Ranks,8,6.00,48.00
+,Ties,2,,
+,Total,15,,
+
+Table: Test Statistics
+,second - first
+Z,-.18
+Asymp. Sig. (2-tailed),.86
+Exact Sig. (2-tailed),.89
+Exact Sig. (1-tailed),.45
+])
+AT_CLEANUP
+
+AT_SETUP([NPAR TESTS WILCOXON with missing values])
+AT_DATA([npar.sps], [dnl
+data list notable list /foo * bar * dummy *.
+begin data.
+1.00     1.00    1
+1.00     2.00    1
+2.00     1.00    1
+1.00     4.00    .
+2.00     5.00    .
+1.00    19.00    .
+2.00     7.00    1
+4.00     5.00    1
+1.00    12.00    1
+2.00    13.00    1
+2.00     2.00    1
+12.00      .00   1
+12.00      .00   1
+34.2       .     1
+12.00     1.00   1  
+13.00     1.00   1
+end data
+
+variable labels foo "first" bar "second".
+
+npar test
+ /wilcoxon=foo with bar (paired)
+ /missing analysis
+ /method=exact.
+
+])
+AT_CHECK([pspp -o pspp.csv npar.sps])
+dnl This is the same output as the previous test.
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Ranks
+,,N,Mean Rank,Sum of Ranks
+second - first,Negative Ranks,5,8.60,43.00
+,Positive Ranks,8,6.00,48.00
+,Ties,2,,
+,Total,15,,
+
+Table: Test Statistics
+,second - first
+Z,-.18
+Asymp. Sig. (2-tailed),.86
+Exact Sig. (2-tailed),.89
+Exact Sig. (1-tailed),.45
+])
+AT_CLEANUP
+
+AT_SETUP([NPAR TESTS SIGN])
+AT_DATA([npar.sps], [dnl
+set format = F9.3.
+
+data list notable list /age * height rank *.
+begin data.
+10 12 11
+12 13 13 
+13 14 12
+12 12 10
+9   9 10
+10.3 10.2 12
+end data.
+
+npar tests
+       /sign=age height WITH height rank (PAIRED)
+       /MISSING ANALYSIS
+       /METHOD=EXACT
+       .
+])
+AT_CHECK([pspp -o pspp.csv npar.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Frequencies
+,,N
+height - age,Negative Differences,1
+,Positive Differences,3
+,Ties,2
+,Total,6
+rank - height,Negative Differences,3
+,Positive Differences,2
+,Ties,1
+,Total,6
+
+Table: Test Statistics
+,height - age,rank - height
+Exact Sig. (2-tailed),.625,1.000
+Exact Sig. (1-tailed),.312,.500
+Point Probability,.250,.312
+])
+AT_CLEANUP
+
+
+AT_SETUP([NPAR Kruskal-Wallis test])
+
+dnl Simple case
+AT_DATA([kw-simple.sps], [dnl
+set format = F9.3.
+
+data list notable list /gv * xscore *.
+begin data
+1 96
+1 128
+1 83
+2 132
+2 135
+2 109
+3 115
+1 61
+1 101
+2 82
+2 124
+3 149 
+3 166
+3 147
+end data.
+
+value label /gv
+       1 "timed out"
+       2 "hit wicket"
+       3 "handled the ball".
+
+npar tests
+       /kruskal-wallis xscore by gv (1, 3)
+       .
+])
+
+AT_CHECK([pspp -o pspp.csv kw-simple.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Ranks
+,gv,N,Mean Rank
+xscore,timed out,5,4.400
+,handled the ball,4,11.500
+,hit wicket,5,7.400
+,Total,14,
+
+Table: Test Statistics
+,,xscore
+Chi-Square,,6.406
+df,,2
+Asymp. Sig.,,.041
+])
+
+
+dnl Now try a missing value in the group variable
+AT_DATA([kw-missing-group.sps], [dnl
+set format = F9.3.
+
+data list notable list /gv * xscore *.
+begin data
+1 96
+1 128
+1 83
+1 61
+1 101
+2 82
+2 124
+2 132
+2 135
+2 109
+3 115
+3 149 
+3 166
+3 147
+2.5 344
+end data.
+
+missing values gv (2.5).
+
+value label /gv
+       1 "timed out"
+       2 "hit wicket"
+       3 "handled the ball".
+
+npar tests
+       /kruskal-wallis xscore by gv (1, 3)
+       /missing=exclude
+       .
+])
+
+AT_CHECK([pspp -o pspp2.csv kw-missing-group.sps])
+
+dnl The result should be the same as before
+AT_CHECK([diff pspp.csv pspp2.csv], [0])
+
+AT_CLEANUP
+
+
+AT_SETUP([NPAR Kruskal-Wallis multiple-variables])
+
+AT_DATA([kw-multi.sps], [dnl
+set format = F9.3.
+
+data list notable list /gv * xscore * yscore.
+begin data
+1 96   .
+1 128  .
+1 83   . 
+2 132  132
+2 135  135
+2 109  109
+3 115  115
+1 61   . 
+1 101  .
+2 82   82 
+2 124  124
+3 149  149
+3 166  166
+3 147  147
+4 .    96
+4 .    128
+4 .    83
+4 .    61
+4 .    101
+end data.
+
+value label /gv
+       1 "timed out"
+       2 "hit wicket"
+       3 "handled the ball"
+       4 "bowled"
+       5 "lbw"
+       .
+       
+npar tests
+       /k-w xscore yscore by gv (1, 5)
+       .
+
+])
+
+
+AT_CHECK([pspp -o pspp.csv kw-multi.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Ranks
+,gv,N,Mean Rank
+xscore,timed out,5,4.400
+,handled the ball,4,11.500
+,hit wicket,5,7.400
+,Total,14,
+yscore,handled the ball,4,11.500
+,bowled,5,4.400
+,hit wicket,5,7.400
+,Total,14,
+
+Table: Test Statistics
+,,xscore,yscore,
+Chi-Square,,6.406,6.406,
+df,,2,2,
+Asymp. Sig.,,.041,.041,
+])
+
+AT_CLEANUP
\ No newline at end of file
index e3430ed9c8093992b9e349ff7cd8a10c87867120..1649e5ee457ba26a18cf831a9deea967f8976f5d 100644 (file)
@@ -4,19 +4,19 @@ AT_SETUP([ONEWAY basic operation])
 AT_DATA([oneway.sps],
   [DATA LIST NOTABLE LIST /QUALITY * BRAND * .
 BEGIN DATA
-3 1
-2 1
-1 1
-1 1
-4 1
-5 2
-2 2
-4 2
-2 2
-3 2
 7  3
 4  3
+3  1
+2  1
+1  1
+4  2
+2  2
+3  2
 5  3
+1  1
+4  1
+5  2
+2  2
 3  3
 6  3
 END DATA
@@ -372,3 +372,182 @@ QUALITY,Between Groups,20.13,2,10.07,5.12,.02
 ])
 
 AT_CLEANUP
+
+
+
+AT_SETUP([ONEWAY multiple variables])
+dnl check that everything works ok when several different dependent variables are specified.
+dnl This of course does not mean that we're doing a multivariate analysis.  It's just like
+dnl running several tests at once.
+AT_DATA([multivar.sps],
+[DATA LIST notable LIST /x * y * z * g *.
+begin data.
+1 1 0 10
+1 1 9 10
+9 1 2 10
+1 1 3 20
+1 1 8 20
+1 1 1 20
+1 1 2 20
+0 1 3 20
+1 1 4 30
+0 1 5 30
+1 1 6 30
+0 1 7 30
+1 2 8 30
+2 2 9 30
+1 2 1 30
+1 2 0 30
+1 2 2 40
+8 2 3 40
+1 2 4 40
+1 2 9 40
+9 2 8 40
+7 3 7 40
+2 3 6 40
+3 3 5 40
+end data.
+
+ONEWAY x y z by g
+       /STATISTICS = DESCRIPTIVES HOMOGENEITY
+       /CONTRAST 3  2 0 -5
+       /CONTRAST 2 -9 7  0
+       .
+])
+
+
+AT_CHECK([pspp -O format=csv multivar.sps], [0], 
+[Table: Descriptives
+,,,,,,95% Confidence Interval for Mean,,,
+,,N,Mean,Std. Deviation,Std. Error,Lower Bound,Upper Bound,Minimum,Maximum
+x,10.00,3,3.67,4.62,2.67,-7.81,15.14,1.00,9.00
+,20.00,5,.80,.45,.20,.24,1.36,.00,1.00
+,30.00,8,.88,.64,.23,.34,1.41,.00,2.00
+,40.00,8,4.00,3.42,1.21,1.14,6.86,1.00,9.00
+,Total,24,2.25,2.83,.58,1.05,3.45,.00,9.00
+y,10.00,3,1.00,.00,.00,1.00,1.00,1.00,1.00
+,20.00,5,1.00,.00,.00,1.00,1.00,1.00,1.00
+,30.00,8,1.50,.53,.19,1.05,1.95,1.00,2.00
+,40.00,8,2.38,.52,.18,1.94,2.81,2.00,3.00
+,Total,24,1.63,.71,.15,1.32,1.93,1.00,3.00
+z,10.00,3,3.67,4.73,2.73,-8.07,15.41,.00,9.00
+,20.00,5,3.40,2.70,1.21,.05,6.75,1.00,8.00
+,30.00,8,5.00,3.21,1.13,2.32,7.68,.00,9.00
+,40.00,8,5.50,2.45,.87,3.45,7.55,2.00,9.00
+,Total,24,4.67,2.99,.61,3.40,5.93,.00,9.00
+
+Table: Test of Homogeneity of Variances
+,Levene Statistic,df1,df2,Significance
+x,18.76,3,20,.00
+y,71.41,3,20,.00
+z,.89,3,20,.46
+
+Table: ANOVA
+,,Sum of Squares,df,Mean Square,F,Significance
+x,Between Groups,56.16,3,18.72,2.92,.06
+,Within Groups,128.34,20,6.42,,
+,Total,184.50,23,,,
+y,Between Groups,7.75,3,2.58,13.33,.00
+,Within Groups,3.87,20,.19,,
+,Total,11.63,23,,,
+z,Between Groups,17.47,3,5.82,.62,.61
+,Within Groups,187.87,20,9.39,,
+,Total,205.33,23,,,
+
+Table: Contrast Coefficients
+,,g,,,
+,,10.00,20.00,30.00,40.00
+Contrast,1,3,2,0,-5
+,2,2,-9,7,0
+
+Table: Contrast Tests
+,,Contrast,Value of Contrast,Std. Error,t,df,Sig. (2-tailed)
+x,Assume equal variances,1,-7.40,6.67,1.11,20,.28
+,,2,6.26,12.32,.51,20,.62
+,Does not assume equal,1,-7.40,10.04,-.74,4.53,1.50
+,,2,6.26,5.85,1.07,2.87,.37
+y,Assume equal variances,1,-6.88,1.16,5.94,20,.00
+,,2,3.50,2.14,1.63,20,.12
+,Does not assume equal,1,-6.88,.91,-7.51,7.00,2.00
+,,2,3.50,1.32,2.65,7.00,.03
+z,Assume equal variances,1,-9.70,8.07,1.20,20,.24
+,,2,11.73,14.91,.79,20,.44
+,Does not assume equal,1,-9.70,9.57,-1.01,3.64,1.63
+,,2,11.73,14.53,.81,9.88,.44
+])
+
+AT_CLEANUP
+
+
+
+dnl Tests that everything treats weights properly
+AT_SETUP([ONEWAY vs. weights])
+
+AT_DATA([oneway-unweighted.sps],
+[DATA LIST NOTABLE LIST /QUALITY * BRAND * W *.
+BEGIN DATA
+3  1   1
+2  1   1
+1  1   1
+1  1   1
+4  1   1
+5  2   1
+2  2   1
+4  2   1
+4  2   1
+4  2   1
+2  2   1
+2  2   1
+3  2   1
+7  3   1
+4  3   1
+5  3   1
+5  3   1
+3  3   1
+6  3   1
+END DATA.
+
+WEIGHT BY W.
+
+ONEWAY
+       quality BY brand
+       /STATISTICS descriptives homogeneity
+       .
+])
+
+AT_CHECK([pspp -o pspp-unweighted.csv oneway-unweighted.sps], [0], [ignore], [ignore])
+
+AT_DATA([oneway-weighted.sps],
+[DATA LIST NOTABLE LIST /QUALITY * BRAND * W *.
+BEGIN DATA
+3  1   1
+2  1   1
+1  1   2
+4  1   1
+5  2   1
+2  2   1
+4  2   3
+2  2   2
+3  2   1
+7  3   1
+4  3   1
+5  3   2
+3  3   1
+6  3   1
+END DATA.
+
+WEIGHT BY W.
+
+ONEWAY
+       quality BY brand
+       /STATISTICS descriptives homogeneity
+       .
+])
+
+AT_CHECK([pspp -o pspp-weighted.csv oneway-weighted.sps], [0], [ignore], [ignore])
+
+
+AT_CHECK([diff pspp-weighted.csv pspp-unweighted.csv], [0])
+
+
+AT_CLEANUP
diff --git a/tests/language/stats/rank.at b/tests/language/stats/rank.at
new file mode 100644 (file)
index 0000000..ac44189
--- /dev/null
@@ -0,0 +1,587 @@
+AT_BANNER([RANK])
+
+AT_SETUP([RANK simple case with defaults])
+AT_DATA([rank.sps], [dnl
+DATA LIST LIST NOTABLE /x (f8).
+BEGIN DATA.
+-1
+0 
+1 
+2 
+2 
+4 
+5 
+END DATA.
+
+RANK x.
+
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv rank.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Variables Created By RANK
+
+
+
+x into Rx(RANK of x)
+
+Table: Data List
+x,Rx
+-1,1.000
+0,2.000
+1,3.000
+2,4.500
+2,4.500
+4,6.000
+5,7.000
+])
+AT_CLEANUP
+
+AT_SETUP([RANK with RANK, RFRACTION, N])
+AT_DATA([rank.sps], [dnl
+DATA LIST LIST NOTABLE /a * b *.
+BEGIN DATA.
+0 24
+1 32
+2 31
+2 32
+4 30
+5 29
+6 1
+7 43
+8 .
+9 45
+END DATA.
+
+RANK a b (D)
+   /PRINT=YES 
+   /RANK
+   /TIES=HIGH
+   /RFRACTION
+   /N INTO count
+   .
+
+DISPLAY DICTIONARY.
+
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv rank.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Variables Created By RANK
+
+
+
+a into Ra(RANK of a)
+
+b into Rb(RANK of b)
+
+a into RFR001(RFRACTION of a)
+
+b into RFR002(RFRACTION of b)
+
+a into count(N of a)
+
+b into Nb(N of b)
+
+Variable,Description,,Position
+a,Format: F8.2,,1
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+b,Format: F8.2,,2
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+count,N of a,,3
+,Format: F6.0,,
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+Ra,RANK of a,,4
+,Format: F9.3,,
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+Rb,RANK of b,,5
+,Format: F9.3,,
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+RFR001,RFRACTION of a,,6
+,Format: F6.4,,
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+RFR002,RFRACTION of b,,7
+,Format: F6.4,,
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+Nb,N of b,,8
+,Format: F6.0,,
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+
+Table: Data List
+a,b,count,Ra,Rb,RFR001,RFR002,Nb
+.00,24.00,10,10.000,8.000,1.0000,.8889,9
+1.00,32.00,10,9.000,4.000,.9000,.4444,9
+2.00,31.00,10,8.000,5.000,.8000,.5556,9
+2.00,32.00,10,8.000,4.000,.8000,.4444,9
+4.00,30.00,10,6.000,6.000,.6000,.6667,9
+5.00,29.00,10,5.000,7.000,.5000,.7778,9
+6.00,1.00,10,4.000,9.000,.4000,1.0000,9
+7.00,43.00,10,3.000,2.000,.3000,.2222,9
+8.00,.  ,10,2.000,.   ,.2000,.    ,.
+9.00,45.00,10,1.000,1.000,.1000,.1111,9
+])
+AT_CLEANUP
+
+AT_SETUP([RANK with SAVAGE, PERCENT, PROPORTION, NTILES])
+AT_DATA([rank.sps], [dnl
+DATA LIST LIST NOTABLE /a * b *.
+BEGIN DATA.
+0 24
+1 32
+2 31
+2 32
+4 30
+5 29
+6 1
+7 43
+8 8 
+9 45
+END DATA.
+
+RANK a
+  /PRINT=YES
+  /TIES=CONDENSE
+  /SAVAGE
+  /PERCENT
+  /PROPORTION
+  /NTILES(4)
+  /NORMAL
+.
+
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv rank.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Variables Created By RANK
+
+
+
+a into Sa(SAVAGE of a)
+
+a into Pa(PERCENT of a)
+
+a into PRO001(PROPORTION of a using BLOM)
+
+a into Na(NTILES of a)
+
+a into NOR001(NORMAL of a using BLOM)
+
+Table: Data List
+a,b,Sa,Pa,PRO001,Na,NOR001
+.00,24.00,-.9000,10.00,.0610,1,-1.547
+1.00,32.00,-.7889,20.00,.1585,1,-1.000
+2.00,31.00,-.5925,30.00,.2561,2,-.6554
+2.00,32.00,-.5925,30.00,.2561,2,-.6554
+4.00,30.00,-.3544,40.00,.3537,2,-.3755
+5.00,29.00,-.1544,50.00,.4512,2,-.1226
+6.00,1.00,.0956,60.00,.5488,3,.1226
+7.00,43.00,.4290,70.00,.6463,3,.3755
+8.00,8.00,.9290,80.00,.7439,3,.6554
+9.00,45.00,1.9290,90.00,.8415,4,1.0005
+])
+AT_CLEANUP
+
+AT_SETUP([RANK with SPLIT FILE])
+AT_DATA([rank.sps], [dnl
+DATA LIST LIST NOTABLE /a * g1 g2 *.
+BEGIN DATA.
+2 1 2
+2 1 2
+3 1 2
+4 1 2
+5 1 2
+1 0 2
+2 0 2
+3 0 2
+4 0 2
+5 0 2
+6 0 2
+7 0 2
+8 0 2
+6 1 2
+7 1 2
+7 1 2
+8 1 2
+9 1 1
+END DATA.
+
+RANK a (D) BY g2 g1
+  /PRINT=YES
+  /TIES=LOW
+  /MISSING=INCLUDE
+  /FRACTION=RANKIT
+  /RANK
+  /NORMAL
+  .
+
+SPLIT FILE BY g1.
+
+RANK a (D) BY g2
+  /PRINT=YES
+  /TIES=LOW
+  /MISSING=INCLUDE
+  /FRACTION=RANKIT
+  /RANK
+  /NORMAL
+  .
+
+SPLIT FILE OFF.
+
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv rank.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Variables Created By RANK
+
+
+
+a into Ra(RANK of a BY g2 g1)
+
+a into Na(NORMAL of a using RANKIT BY g2 g1)
+
+Variables Created By RANK
+
+
+
+a into RAN001(RANK of a BY g2)
+
+a into NOR001(NORMAL of a using RANKIT BY g2)
+
+Table: Data List
+a,g1,g2,Ra,Na,RAN001,NOR001
+2.00,1.00,2.00,8.000,.9674,4.000,.5244
+2.00,1.00,2.00,8.000,.9674,4.000,.5244
+3.00,1.00,2.00,7.000,.5895,3.000,.0000
+4.00,1.00,2.00,6.000,.2822,2.000,-.5244
+5.00,1.00,2.00,5.000,.0000,1.000,-1.282
+1.00,.00,2.00,8.000,1.5341,8.000,1.5341
+2.00,.00,2.00,7.000,.8871,7.000,.8871
+3.00,.00,2.00,6.000,.4888,6.000,.4888
+4.00,.00,2.00,5.000,.1573,5.000,.1573
+5.00,.00,2.00,4.000,-.1573,4.000,-.1573
+6.00,.00,2.00,3.000,-.4888,3.000,-.4888
+7.00,.00,2.00,2.000,-.8871,2.000,-.8871
+8.00,.00,2.00,1.000,-1.534,1.000,-1.534
+6.00,1.00,2.00,4.000,-.2822,4.000,1.1503
+7.00,1.00,2.00,2.000,-.9674,2.000,-.3186
+7.00,1.00,2.00,2.000,-.9674,2.000,-.3186
+8.00,1.00,2.00,1.000,-1.593,1.000,-1.150
+9.00,1.00,1.00,1.000,.0000,1.000,.0000
+])
+AT_CLEANUP
+
+# Also tests small ranks for special case of SAVAGE ranks.
+AT_SETUP([RANK with fractional ranks]) 
+AT_DATA([rank.sps], [dnl
+DATA LIST LIST NOTABLE  /a *  w * .
+BEGIN DATA.
+1 1.5
+2 0.2
+3 0.1
+4 1
+5 1
+6 1
+7 1
+8 1
+END DATA.
+
+WEIGHT BY w.
+
+RANK a 
+  /FRACTION=TUKEY
+  /PROPORTION
+  /SAVAGE
+.
+
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv rank.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Variables Created By RANK
+
+
+
+a into Pa(PROPORTION of a using TUKEY)
+
+a into Sa(SAVAGE of a)
+
+Table: Data List
+a,w,Pa,Sa
+1.00,1.50,.1285,-.8016
+2.00,.20,.1776,-.6905
+3.00,.10,.1986,-.6905
+4.00,1.00,.3458,-.5305
+5.00,1.00,.4860,-.2905
+6.00,1.00,.6262,.0262
+7.00,1.00,.7664,.4929
+8.00,1.00,.9065,1.3929
+])
+AT_CLEANUP
+
+AT_SETUP([RANK all-ties due to tiny weights])
+AT_DATA([rank.sps], [dnl
+DATA LIST LIST NOTABLE /x * w *.
+BEGIN DATA.
+1 0.1
+2 0.1
+3 0.1
+4 0.2
+5 0.1
+6 0.1
+7 0.1
+8 0.1
+END DATA.
+
+WEIGHT BY w.
+
+RANK x
+ /TIES=low
+ /RANK into xl.
+
+
+RANK x
+ /TIES=high
+ /RANK into xh.
+
+RANK x
+ /TIES=condense
+ /RANK into xc.
+
+
+* Test VW fraction
+
+RANK x
+ /FRACTION=VW
+ /NORMAL.
+
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv rank.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Variables Created By RANK
+
+
+
+x into xl(RANK of x)
+
+Variables Created By RANK
+
+
+
+x into xh(RANK of x)
+
+Variables Created By RANK
+
+
+
+x into xc(RANK of x)
+
+Variables Created By RANK
+
+
+
+x into Nx(NORMAL of x using VW)
+
+Table: Data List
+x,w,xl,xh,xc,Nx
+1.00,.10,.000,.100,1.000,-1.938
+2.00,.10,.100,.200,2.000,-1.412
+3.00,.10,.200,.300,3.000,-1.119
+4.00,.20,.300,.500,4.000,-.8046
+5.00,.10,.500,.600,5.000,-.5549
+6.00,.10,.600,.700,6.000,-.4067
+7.00,.10,.700,.800,7.000,-.2670
+8.00,.10,.800,.900,8.000,-.1323
+])
+AT_CLEANUP
+
+AT_SETUP([RANK variable name fallback])
+AT_DATA([rank.sps], [dnl
+DATA LIST LIST NOTABLE /foo * rfoo * ran003 *.
+BEGIN DATA.
+0 3 2
+1 3 2
+2 3 2
+2 3 2
+4 3 2
+5 3 2
+6 3 2
+7 3 2
+8 3 2
+9 3 2
+END DATA.
+
+RANK foo.
+
+
+DISPLAY DICTIONARY.
+])
+AT_CHECK([pspp -o pspp.csv rank.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Variables Created By RANK
+
+
+
+foo into RAN001(RANK of foo)
+
+Variable,Description,,Position
+foo,Format: F8.2,,1
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+rfoo,Format: F8.2,,2
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+ran003,Format: F8.2,,3
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+RAN001,RANK of foo,,4
+,Format: F9.3,,
+,Measure: Scale,,
+,Display Alignment: Right,,
+,Display Width: 8,,
+])
+AT_CLEANUP
+
+AT_SETUP([RANK robust variable name creation])
+AT_DATA([rank.sps], [dnl
+DATA LIST LIST notable /x * rx * ran001 TO ran999.
+BEGIN DATA.
+1
+2
+3
+4
+5
+6
+7
+END DATA.
+
+RANK x.
+
+DELETE VAR ran001 TO ran999.
+
+LIST.
+])
+AT_CHECK([pspp -O format=csv rank.sps], [0], [dnl
+"rank.sps:3: warning: BEGIN DATA: Missing value(s) for all variables from rx onward.  These will be filled with the system-missing value or blanks, as appropriate."
+
+"rank.sps:4: warning: BEGIN DATA: Missing value(s) for all variables from rx onward.  These will be filled with the system-missing value or blanks, as appropriate."
+
+"rank.sps:5: warning: BEGIN DATA: Missing value(s) for all variables from rx onward.  These will be filled with the system-missing value or blanks, as appropriate."
+
+"rank.sps:6: warning: BEGIN DATA: Missing value(s) for all variables from rx onward.  These will be filled with the system-missing value or blanks, as appropriate."
+
+"rank.sps:7: warning: BEGIN DATA: Missing value(s) for all variables from rx onward.  These will be filled with the system-missing value or blanks, as appropriate."
+
+"rank.sps:8: warning: BEGIN DATA: Missing value(s) for all variables from rx onward.  These will be filled with the system-missing value or blanks, as appropriate."
+
+"rank.sps:9: warning: BEGIN DATA: Missing value(s) for all variables from rx onward.  These will be filled with the system-missing value or blanks, as appropriate."
+
+Variables Created By RANK
+
+
+
+x into RNKRA01(RANK of x)
+
+Table: Data List
+x,rx,RNKRA01
+1.00,.  ,1.000
+2.00,.  ,2.000
+3.00,.  ,3.000
+4.00,.  ,4.000
+5.00,.  ,5.000
+6.00,.  ,6.000
+7.00,.  ,7.000
+])
+AT_CLEANUP
+
+dnl Test for proper behaviour in the face of invalid input.
+AT_SETUP([RANK handling of invalid input])
+AT_DATA([rank.sps], [dnl
+DATA LIST LIST NOTABLE /x * a (a2).
+BEGIN DATA.
+-1 s
+0  s
+1  s
+2  s
+2  s
+4  s
+5  s
+END DATA.
+
+DEBUG XFORM FAIL.
+
+RANK x.
+])
+AT_CHECK([pspp -O format=csv --testing-mode rank.sps], [1], [dnl
+Variables Created By RANK
+
+
+
+x into Rx(RANK of x)
+
+rank.sps:14: error: Stopping syntax file processing here to avoid a cascade of dependent command failures.
+])
+AT_CLEANUP
+
+AT_SETUP([RANK handling of invalid syntax])
+AT_DATA([rank.sps], [dnl
+DATA LIST LIST NOTABLE /x * a (a2).
+BEGIN DATA.
+-1 s
+0  s
+1  s
+2  s
+2  s
+4  s
+5  s
+END DATA.
+
+* invalid NTILES (no parameter)
+RANK x 
+  /NTILES
+.
+
+* invalid NTILES (not an integer)
+RANK x 
+  /NTILES(d)
+.
+
+
+* destination variable already exists
+RANK x 
+ /RANK INTO x.
+
+
+* Too many variables in INTO
+RANK x 
+ /RANK INTO foo  bar wiz.
+])
+AT_CHECK([pspp -O format=csv rank.sps], [1], [dnl
+rank.sps:15: error: RANK: Syntax error at end of command: expecting `@{:@'.
+
+rank.sps:19: error: RANK: Syntax error at `d': expecting integer.
+
+rank.sps:25: error: RANK: Variable x already exists.
+
+rank.sps:30: error: RANK: Too many variables in INTO clause.
+])
+AT_CLEANUP
diff --git a/tests/language/stats/regression.at b/tests/language/stats/regression.at
new file mode 100644 (file)
index 0000000..11ce07f
--- /dev/null
@@ -0,0 +1,1592 @@
+AT_BANNER([REGRESSION])
+
+AT_SETUP([REGRESSION])
+AT_DATA([regression.sps], [dnl
+data list list / v0 to v2.
+begin data
+ 0.65377128  7.735648 -23.97588
+-0.13087553  6.142625 -19.63854
+ 0.34880368  7.651430 -25.26557
+ 0.69249021  6.125125 -16.57090
+-0.07368178  8.245789 -25.80001
+-0.34404919  6.031540 -17.56743
+ 0.75981559  9.832291 -28.35977
+-0.46958313  5.343832 -16.79548
+-0.06108490  8.838262 -29.25689
+ 0.56154863  6.200189 -18.58219
+end data
+regression /variables=v0 v1 v2 /statistics defaults /dependent=v2 /method=enter /save=pred resid.
+list.
+])
+AT_CHECK([pspp -o pspp.csv regression.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+v0,F8.0
+v1,F8.0
+v2,F8.0
+
+Table: Model Summary
+,R,R Square,Adjusted R Square,Std. Error of the Estimate
+,.97,.94,.93,1.34
+
+Table: ANOVA
+,,Sum of Squares,df,Mean Square,F,Significance
+,Regression,202.75,2,101.38,56.75,.00
+,Residual,12.50,7,1.79,,
+,Total,215.26,9,,,
+
+Table: Coefficients
+,,B,Std. Error,Beta,t,Significance
+,(Constant),2.19,2.36,.00,.93,.52
+,v0,1.81,1.05,.17,1.72,.12
+,v1,-3.43,.33,-1.03,-10.33,.00
+,,,,,,
+
+Table: Data List
+v0,v1,v2,RES1,PRED1
+.65,7.74,-23.98,-.84,-23.13
+-.13,6.14,-19.64,-.54,-19.10
+.35,7.65,-25.27,-1.87,-23.40
+.69,6.13,-16.57,.97,-17.54
+-.07,8.25,-25.80,.40,-26.20
+-.34,6.03,-17.57,1.53,-19.10
+.76,9.83,-28.36,1.77,-30.13
+-.47,5.34,-16.80,.18,-16.97
+-.06,8.84,-29.26,-1.05,-28.21
+.56,6.20,-18.58,-.54,-18.04
+])
+AT_CLEANUP
+
+# Tests the QR decomposition used by the REGRESSION command.
+AT_SETUP([REGRESSION test of QR decomposition])
+AT_DATA([regression.sps], [dnl
+data list list / v0 to v1.
+begin data
+-12.84099361 0.873270778
+ 16.64932538 0.371315664
+ -1.88061907 0.505503722
+ -6.20952354 0.734698282
+  0.33272576 0.891224610
+ -5.54912717 0.052318165
+  6.11832417 0.448853404
+ 11.78124974 0.470447593
+  0.75960353 0.565082303
+  6.06432768 0.149316743
+ -2.64919436 0.752532411
+-10.32250712 0.798263603
+  2.06355038 0.469129797
+ -9.71851742 0.927162270
+  4.65582553 0.250629262
+  9.54574474 0.847032310
+  7.35544368 0.197028541
+ -2.09609740 0.400584261
+ 10.30101161 0.671546480
+ -5.24501039 0.929962876
+  1.73412473 0.758161354
+ -3.12732732 0.569785505
+ 12.66261501 0.630640223
+ -2.90956805 0.576067804
+  4.89649177 0.624483995
+ 13.64613114 0.591089881
+ 14.03198397 0.544587572
+  2.23566810 0.967898139
+  5.37367760 0.916246929
+  9.01346888 0.451702743
+  0.75378683 0.235544137
+ -3.47470624 0.742668194
+ -1.02063266 0.860311687
+ -2.67132813 0.082460702
+ 23.67661680 0.932553932
+  7.95061359 0.430161125
+  2.05300558 0.066331375
+ -2.01332644 0.163705417
+ 20.00663784 0.587292630
+  3.06099417 0.161411889
+ -3.46115358 0.216684625
+ -6.85287183 0.548714855
+ -4.27923809 0.630997663
+ -0.94863395 0.880612945
+  4.47481747 0.359885215
+-12.80962955 0.886070341
+  9.35753086 0.187176558
+  2.81002235 0.063035095
+  0.01532424 0.964327101
+  0.29867732 0.866408063
+ -2.89035649 0.812135868
+  4.17352811 0.608884061
+ 18.15502183 0.920568258
+ -2.92662792 0.550792959
+ -6.08090449 0.965036595
+ -1.09135397 0.862548019
+  7.02816784 0.042277017
+-21.20245068 0.430673493
+ -8.83397584 0.724976162
+ -0.89055843 0.017934904
+  7.03871587 0.308829557
+  3.84286316 0.685105924
+  4.50280692 0.447635420
+ 11.39207346 0.875177896
+ 10.86673874 0.518530912
+  7.09853081 0.588367569
+-12.82864915 0.184667098
+ 13.74888760 0.610891139
+  0.37379146 0.557720134
+ -9.79020267 0.942839981
+  0.71574466 0.564570338
+-17.56040637 0.182061777
+  2.52620466 0.306875011
+  5.37718673 0.366807049
+ -1.83964300 0.465772898
+  6.04848363 0.644501799
+  4.57402403 0.121419591
+  8.55606848 0.373011464
+ -8.46827907 0.491176571
+ -1.77989798 0.734722847
+ -0.68661121 0.540984182
+  1.55798880 0.822587656
+  5.22810831 0.333747878
+  9.50280477 0.068100934
+ -3.74521465 0.248537644
+  1.36045068 0.851827791
+  4.41604088 0.197207162
+ -3.72568327 0.726916693
+ -5.36123334 0.906513529
+  3.61594583 0.414340595
+-10.01952852 0.140372658
+ 25.48681482 0.354309660
+ -3.34529093 0.090075388
+-18.00437582 0.461438059
+ -5.29782460 0.004362856
+  2.79608522 0.861294398
+ -1.64076209 0.345775481
+  6.82802334 0.137933862
+ -0.45416818 0.404379208
+ -1.66868582 0.797685201
+-10.02820292 0.075876582
+  5.68232031 0.404815042
+  8.25113850 0.769173748
+ -2.83544237 0.076583474
+  0.87659945 0.092751009
+  6.60270870 0.530444351
+-12.63924989 0.362099960
+ -6.24451253 0.641993458
+  3.53339015 0.461991892
+ -0.74012232 0.437409755
+ 15.37311996 0.974913038
+ -8.09464797 0.543308711
+ -9.61320222 0.221564578
+  0.21843662 0.856512540
+ -1.56958954 0.610709221
+  6.44977372 0.200382138
+-13.29136274 0.093222309
+  6.46257214 0.024135196
+ -3.82727990 0.601335801
+  0.43081953 0.268230667
+ 19.06654416 0.219972815
+ 17.02906651 0.996849502
+-10.18073139 0.012543080
+ 12.72088788 0.910600764
+ 10.45328185 0.331285901
+  7.14370922 0.896312020
+ -2.81754334 0.048741266
+  6.40217095 0.075796756
+ -3.18030478 0.666325307
+  8.64585957 0.120549153
+  1.37952764 0.899991932
+-11.81143886 0.601949630
+  0.03899706 0.363808260
+-10.63828243 0.031092967
+ -6.66940972 0.246204205
+ -5.07374962 0.951272057
+  4.82281566 0.063928187
+-21.93693564 0.050972680
+ -4.54569883 0.225839693
+ -0.92422779 0.437796785
+ -1.11683029 0.740215139
+ 16.77765554 0.851072372
+  9.73614597 0.388180586
+ 14.05345168 0.063760129
+  1.20512012 0.665964184
+  8.00307080 0.102447114
+  8.01252623 0.580929209
+-13.54924183 0.438420739
+  9.87164361 0.970859344
+ 17.63437095 0.250501797
+ -3.42503574 0.873290220
+ -2.45873197 0.847756049
+ 17.29212092 0.411683187
+  1.15496098 0.530658504
+ -2.14438907 0.592255367
+ -1.79942021 0.517773009
+ -1.30677990 0.830860762
+  1.70233874 0.291826660
+ -3.05532536 0.801767829
+ -4.06732625 0.092294501
+  6.34665476 0.270426235
+  9.46946411 0.196915311
+ 14.50919907 0.480357167
+  8.93767237 0.778228613
+  1.90298854 0.903146151
+ 18.50500507 0.598561307
+  4.45123027 0.555898218
+ 11.37344114 0.616557707
+-12.14693218 0.409187285
+ 18.27198688 0.141619222
+ -5.75939569 0.056989619
+ -4.05515382 0.369281201
+ 16.69882098 0.946885257
+  6.39050536 0.679704228
+  4.04213339 0.662792380
+  6.89608366 0.419877433
+  1.56496633 0.358227958
+  5.16679947 0.095144366
+ -3.06280456 0.883265975
+  2.76279175 0.866571973
+  1.84969249 0.264869828
+ 21.79840498 0.702650979
+  1.42450528 0.719308635
+  0.96797046 0.111937435
+ 18.26840323 0.075621738
+ 13.38288377 0.573399086
+  2.41101500 0.766238677
+  3.83866337 0.499888953
+ -1.56577367 0.695244089
+ -0.90342790 0.671654151
+ 10.83775583 0.026041124
+ -9.89767935 0.745297991
+ 11.74840150 0.309144074
+  1.73069359 0.814063985
+ -5.27966183 0.591005828
+  3.33030043 0.559401806
+  1.31427975 0.520950237
+-10.04588558 0.507008362
+ 10.41228345 0.425867272
+  1.71961097 0.595783108
+-17.54904427 0.328788939
+ -2.23545419 0.223377350
+ -8.68774333 0.980964240
+ -3.48048220 0.008877675
+ -3.69635326 0.090236718
+  9.76114237 0.769375983
+-10.25662038 0.508137553
+  0.11155446 0.468504431
+ -8.06824580 0.414098962
+  3.10031660 0.327130207
+ -3.33393146 0.756896774
+ -3.96276749 0.530956360
+ 14.53610268 0.846474699
+  1.70505918 0.754662464
+ -1.93495001 0.656650411
+  5.01974522 0.745337633
+ 13.41249973 0.489362476
+ 11.49288744 0.335924476
+ 12.59019763 0.155560469
+-10.17947298 0.677318449
+  0.05556115 0.655090105
+  3.82092860 0.051838719
+  8.23041456 0.918272190
+ -0.50314649 0.772015826
+ 20.05162157 0.880265258
+  8.98816884 0.666646668
+ -6.28312120 0.138534416
+  3.68589909 0.274559458
+  0.59699510 0.253180863
+ -2.74783135 0.983525221
+  0.32515065 0.839969577
+ -3.60606166 0.330646732
+ -0.82037740 0.129591173
+  6.12444860 0.098536516
+ 10.95671074 0.033546728
+ -2.84911174 0.720288722
+  6.04597572 0.577061422
+ -0.60147150 0.674096868
+ -5.30458364 0.291468008
+  2.68044943 0.379853840
+  0.85986585 0.984214339
+-12.77906359 0.882390290
+  7.21420144 0.550884826
+  2.31817022 0.231021556
+ 11.60161950 0.888496654
+ -0.19346228 0.242609713
+  5.07478120 0.759161318
+ 14.54155003 0.040387654
+  3.81039636 0.874572741
+  2.23233049 0.448317248
+  0.19481869 0.201906051
+  2.81530451 0.132131690
+ 12.39893259 0.674693704
+  0.47054642 0.632959494
+  2.16152913 0.734480632
+  0.33398836 0.315024718
+  7.35509037 0.304570986
+ -2.92336559 0.539062343
+  5.79622573 0.392393310
+ -2.37607425 0.403380474
+  0.04498550 0.756875541
+ -1.63674414 0.613789514
+ 11.80310547 0.832651469
+  6.30630243 0.850689403
+  1.48394652 0.096243229
+  4.03361865 0.799660045
+  3.54707273 0.408520520
+  2.00327040 0.702944912
+ 17.30761707 0.380542812
+  5.72738968 0.105447516
+-13.64604891 0.328506659
+  8.35976334 0.702173924
+ -7.41197443 0.134396488
+-15.95683040 0.618526462
+  8.76889573 0.950243069
+ -1.13482624 0.113477080
+ -0.60311407 0.090444247
+  4.95508365 0.612511543
+  5.36934491 0.979213258
+ -0.03554882 0.807185690
+-11.58131144 0.183341373
+  4.46809041 0.796330582
+ 12.49741067 0.346860912
+  8.63824488 0.073684997
+  0.49990913 0.732519306
+ 12.82688360 0.109400213
+ 13.20375065 0.850369092
+ -8.41110869 0.177717087
+ 16.31959963 0.727704840
+ 17.59203613 0.235311681
+  0.32148420 0.842195936
+  5.43148331 0.670904647
+  7.14649727 0.028190029
+  0.25410683 0.421535783
+-12.41047826 0.086404379
+-10.64180909 0.229659236
+ -6.40185653 0.876365242
+ 15.63063324 0.667672536
+  1.94280423 0.799266628
+ -5.76507450 0.367344192
+  8.60895533 0.154109357
+  9.38306751 0.788742770
+  3.43573528 0.284535277
+  4.81848966 0.872283177
+ 11.65839314 0.234109111
+ -5.57884822 0.030363060
+ -3.94238060 0.325320686
+  9.38133340 0.201141788
+ -7.65003459 0.647734396
+ 11.23091019 0.084927159
+ -6.07705432 0.037273791
+  7.46380750 0.506897136
+  7.42034855 0.869351148
+ -4.43031973 0.231191152
+ -1.07351537 0.480234836
+ -1.40653281 0.690620421
+ -3.82710168 0.990191328
+  5.04583490 0.543427375
+-11.54265099 0.270542185
+  0.49059479 0.991447248
+ -1.40871469 0.555998766
+  3.64241437 0.743840673
+-18.30031589 0.357478210
+  4.27487959 0.770619738
+  1.28805821 0.654787106
+ -3.19542768 0.218110139
+ 12.53375654 0.011857644
+ 11.78889419 0.054127726
+ -5.38392310 0.839309080
+ 16.38024181 0.228801038
+ -0.59622631 0.134381782
+ -0.74107258 0.258146632
+-12.31429450 0.020524447
+ -0.79785028 0.968028764
+  6.39899711 0.038162566
+  7.42024044 0.716163692
+ -3.62470664 0.018201813
+ -2.55049724 0.162446610
+-10.79888854 0.683070478
+ 10.18490144 0.546461234
+ -2.76979044 0.198830067
+  4.85164813 0.094100357
+  0.96477200 0.381801756
+  8.13344336 0.639730450
+  9.04684412 0.786084368
+ 10.41746272 0.828304181
+  0.94334368 0.798419831
+ 10.13116556 0.191715972
+ -4.12728628 0.575178239
+ -9.59222379 0.876405375
+  1.64680258 0.391003085
+ -4.58897613 0.039176486
+  0.38394379 0.511577564
+ -4.80428215 0.222785463
+  0.35363661 0.681658725
+ -9.63685708 0.183035382
+  3.54363414 0.766127414
+  6.89610808 0.967514568
+ -2.03781105 0.464416752
+  8.67956196 0.421424078
+ -1.09959038 0.061231448
+  7.12587456 0.028601318
+ -6.93064672 0.402561175
+  8.57989199 0.925089270
+ -9.55071810 0.454993099
+ -8.11914736 0.509644286
+ -5.41909698 0.077813151
+-17.03336572 0.875713545
+ -1.27438609 0.602163625
+  3.09834374 0.105599007
+ -1.59865741 0.439939102
+ 11.82272089 0.754984309
+  4.30969696 0.483834579
+-10.76886192 0.222486992
+  7.05419803 0.903020271
+  7.36096847 0.440357053
+ -2.05864869 0.581170147
+ -9.08366913 0.318677911
+  8.57119930 0.605668919
+  7.87702340 0.570206991
+  5.22035786 0.542344385
+  2.37238850 0.595969470
+ -4.29809941 0.634313781
+  4.51647479 0.796663089
+ -0.62478780 0.562099444
+  8.50866078 0.490014249
+  3.46694991 0.122890089
+ -7.31956453 0.885170890
+  2.20259268 0.167180856
+ -1.81003626 0.702563515
+  8.44526939 0.973495019
+  8.19767069 0.881261264
+ -5.92422578 0.686557351
+ -0.11826129 0.712798344
+  5.66132869 0.922826429
+ -5.40845018 0.642183516
+  6.67839036 0.680978989
+ 11.88962825 0.487904896
+  3.32266332 0.931709581
+  0.24234019 0.405641313
+-12.79023339 0.361005489
+-13.57875491 0.266289733
+  1.81304596 0.775093821
+  0.36755600 0.400225605
+ -9.15574205 0.518040748
+ -3.90436548 0.396869908
+  9.24764042 0.669374848
+  0.74869385 0.609881390
+ -3.62958907 0.928867495
+ -0.02527232 0.557679930
+  0.04433418 0.152565816
+ 11.76152632 0.865663501
+ -4.62181124 0.007000650
+  5.82271403 0.389678502
+  0.33289002 0.532940826
+ -7.65647076 0.681574524
+ 11.81023732 0.107165912
+ 11.42121999 0.989580324
+ -5.47120641 0.762285550
+  3.82311561 0.388755074
+ 16.91059711 0.461236022
+  4.14012105 0.802420151
+ -1.35278659 0.036646959
+-12.81733350 0.179096148
+ -0.94395134 0.450959878
+ -5.39002376 0.264783062
+  4.16227017 0.780743762
+  7.26179625 0.821382454
+ 15.10062276 0.469253936
+  1.45877225 0.685434405
+ -9.87966760 0.767201511
+  7.03156071 0.195142483
+-11.71327419 0.774014869
+ -4.55518706 0.973103604
+ -1.75221406 0.175172193
+ 10.35631400 0.080670414
+  4.97650495 0.597478189
+  2.25703939 0.585949751
+ 10.72500409 0.339720931
+ -5.02901029 0.997874377
+  6.24398637 0.655067479
+ -5.83880059 0.184948259
+  2.17256077 0.746741866
+ -5.59809380 0.277523381
+  8.19384177 0.334565607
+  3.35250431 0.952057263
+ 16.20874892 0.901400446
+  1.63205839 0.235388475
+ -1.07921163 0.608376332
+  0.24315118 0.862639830
+ 15.61923078 0.050955422
+  1.99639207 0.358905687
+  8.14825538 0.190069662
+  4.55210835 0.784025901
+ 13.51582298 0.973572910
+ 15.42415796 0.969080992
+  2.23978124 0.551857514
+  1.00858991 0.919566804
+ -2.77293574 0.906998180
+  7.10750420 0.934792213
+ -8.01377290 0.682306063
+  9.67873875 0.239576806
+  7.54867950 0.065860266
+ 13.85701962 0.733823443
+  8.48212853 0.285731085
+  3.55278843 0.998255904
+ 21.94592206 0.205463912
+ -2.07957143 0.948665109
+  1.54169997 0.200109744
+-11.36934275 0.447122472
+  3.07094572 0.815147945
+  6.45818709 0.007849948
+  1.85594578 0.818796540
+ -2.43799564 0.962013689
+-17.96539549 0.654190963
+ -0.93433746 0.454930236
+-11.06904368 0.898560975
+ 14.89733742 0.479152492
+ -5.72390675 0.136197255
+  9.46781102 0.669006610
+  5.35954546 0.259381138
+  3.78388994 0.933778797
+  1.95373423 0.517555994
+ 10.96772341 0.666138826
+  9.40585102 0.779906833
+  0.75347502 0.142656741
+  7.64803672 0.734297119
+ -0.40051164 0.362230232
+ 10.00747057 0.660820381
+-12.86024975 0.072988046
+  1.43515528 0.229672223
+ -6.75981709 0.658534537
+ -5.61355474 0.795897133
+ -4.40596595 0.038787666
+ -1.37033650 0.371835229
+  6.66666573 0.560963737
+  8.18430044 0.284787698
+ -0.55742330 0.622783662
+ -0.39757686 0.673551753
+-12.68628005 0.373038561
+  4.06416215 0.760546238
+  4.65859855 0.516761886
+  3.55304076 0.266856843
+ -7.35294817 0.615783196
+  1.01222898 0.158266779
+  9.91052610 0.285619547
+ -6.42966726 0.573689954
+ 10.97425098 0.985095061
+  5.79394599 0.404333309
+ 10.09106608 0.441037857
+ -1.47295537 0.577661077
+ -2.07959719 0.547176133
+ -8.76910940 0.498979558
+-11.15658312 0.135862745
+ -0.88456783 0.326480064
+  9.71607440 0.998076370
+ -8.76072622 0.386244511
+-19.26823092 0.461833959
+ -0.11280313 0.064155908
+  0.64625887 0.172078148
+ -5.35323428 0.331153163
+ -1.71034509 0.330955888
+  4.27104744 0.590544244
+  7.33843789 0.263171531
+ -5.38121637 0.539675802
+ -6.87566548 0.127313096
+ -2.50161298 0.269417630
+ 10.99076986 0.097362729
+  6.34017269 0.318528587
+ -4.63672382 0.451038055
+-11.55122495 0.987073278
+  4.78618612 0.297342215
+  2.97547390 0.197312152
+ -5.54495280 0.499701114
+ 17.67606173 0.810316588
+ 16.01578815 0.643667608
+ -0.16258467 0.228284761
+  7.92123340 0.784289369
+ -2.26303900 0.270764770
+  5.84136933 0.437763291
+  4.96955217 0.389720490
+ -8.09516710 0.829068548
+ 14.59207207 0.513593803
+  2.80954688 0.650799867
+  4.53653552 0.672326278
+  4.49116737 0.807447691
+ 18.87549709 0.647303378
+  9.80118464 0.932576117
+-13.02124969 0.038651904
+ -6.15189291 0.697593318
+ 15.81920283 0.249825051
+ 10.81503188 0.152372300
+-23.58738366 0.593560367
+  8.15716338 0.411680007
+  3.45349379 0.351061414
+ -6.39345334 0.374926213
+  8.72924585 0.165759028
+ 22.17948804 0.003736780
+ -4.73053410 0.582425257
+ 16.88289626 0.484899167
+ -1.78826142 0.663273340
+ -0.78106025 0.337039969
+ -2.92461669 0.810174719
+-13.89224399 0.177428986
+  4.56809819 0.025010350
+ -1.07452825 0.649632933
+  0.58148751 0.829606422
+ 12.13329525 0.354819526
+ 17.35605568 0.284862590
+-12.43678107 0.827661083
+ -1.89492796 0.574929572
+  2.18520382 0.846299917
+ 18.11449649 0.603173531
+  4.34508582 0.484049042
+ 17.49394569 0.094811656
+ 10.67752350 0.166176400
+ 17.13374502 0.547208197
+  4.42138123 0.768691494
+  5.38445574 0.788597361
+  0.79946671 0.851883720
+ -4.67547904 0.995621191
+ -5.61496422 0.523793593
+-20.52093126 0.881207308
+ -8.95996814 0.851078124
+ -7.63483710 0.739657373
+ 11.02131097 0.678060014
+-10.56228517 0.202393048
+  6.48841788 0.143946271
+  3.44853632 0.913249620
+ -0.02080024 0.070765134
+  2.08654297 0.032468089
+  8.13415912 0.439470874
+ 11.19028936 0.944954026
+  0.26670866 0.492724593
+ -9.33692734 0.982611921
+ 17.23967092 0.313428994
+  0.36906670 0.660669528
+  7.89735684 0.977628886
+ -4.00171487 0.379327632
+  5.01615432 0.735627296
+  0.42214214 0.092461754
+ 13.60634772 0.218359635
+  6.57431413 0.067653525
+ -1.77668341 0.717799276
+  5.16227422 0.325502093
+-15.29091550 0.332815338
+  3.33602480 0.594168551
+ 13.80131443 0.817724470
+  5.92111679 0.947854666
+  3.59747624 0.330860216
+ -6.79722403 0.093518715
+ -1.86606213 0.824179728
+ 17.05226458 0.466573672
+ 10.39712467 0.409067778
+ -4.78536386 0.891470739
+ 11.92963128 0.719633060
+ -1.44230992 0.232628002
+-12.31860616 0.834134222
+  2.93439660 0.957842480
+ 14.27963295 0.546264646
+  2.17488820 0.701170328
+ 10.78772417 0.612332448
+ -0.47049341 0.378564293
+ -0.35140634 0.034337429
+  5.04887868 0.211697132
+ -3.51562580 0.663243607
+ -0.82013387 0.602497174
+  2.78954743 0.325294790
+  8.67905777 0.820296625
+-12.70343389 0.315467361
+ -2.59373236 0.015571904
+ -4.60369241 0.293737716
+  1.58669084 0.671091860
+-10.44245103 0.501340276
+  4.85215578 0.141572007
+ 10.46303284 0.801814632
+  1.27898298 0.236929983
+ -1.72225479 0.608500539
+ 20.18685735 0.827124630
+  3.27308817 0.542065179
+  1.01596956 0.254672115
+ -8.88872881 0.460876757
+-11.31397349 0.636168639
+  0.85294367 0.816417328
+  3.54262337 0.944147626
+-10.53603202 0.675775741
+  4.34832198 0.121988381
+ 11.56451662 0.283063133
+ -7.36454369 0.500596540
+ -8.23701113 0.379483261
+ -8.36081323 0.219730782
+ -6.39158860 0.739171315
+ -1.40518544 0.478709398
+ -4.01314821 0.460476388
+ -7.34814047 0.406242873
+ -7.80836711 0.730648091
+ -0.57729135 0.152336258
+  4.98352832 0.026424939
+ -3.78181635 0.453598432
+ 20.16821827 0.845273124
+  5.20758271 0.573569671
+ -3.05534245 0.286828574
+ -5.31306254 0.961990401
+  1.09307567 0.006478724
+ -3.75412572 0.598277695
+ -2.38444245 0.777900122
+  2.46837742 0.280363751
+  9.72195519 0.041094463
+  3.96271247 0.604775284
+  2.14105354 0.400315328
+  7.88645912 0.404573389
+ -4.03565076 0.798377309
+ 10.80180959 0.932152434
+-10.89359212 0.446813857
+  1.43144578 0.310194540
+  4.79825196 0.504826858
+ 10.73201365 0.384306369
+ -4.07526187 0.893893643
+ -2.84330198 0.390202663
+  5.81825057 0.830581384
+ -2.77842745 0.382966910
+ -7.70333673 0.157692966
+ -3.25753058 0.726303603
+  8.50032387 0.556524444
+  2.35027236 0.857076526
+ -1.70740565 0.194760923
+ -3.40693880 0.696420946
+ -8.03983352 0.514393263
+ -1.85105344 0.609459979
+ -9.01148029 0.526019631
+ 18.37344635 0.690793045
+ 16.46079416 0.811535334
+  4.10224315 0.043403618
+  7.06657672 0.831274577
+ 15.31421824 0.434558881
+-12.36760970 0.004215634
+  1.95473415 0.277788662
+ -0.93207006 0.368433415
+ 15.39919341 0.843189783
+  5.23452387 0.626226925
+ 11.40805770 0.002417288
+ -1.30282837 0.072493756
+  3.92130690 0.675355182
+  2.53148399 0.027222295
+  4.92705318 0.934429364
+  5.54978818 0.042268708
+ -2.19608977 0.246743834
+ -0.62565550 0.858214200
+ -8.98329365 0.646827226
+ 12.78468146 0.533966352
+  2.01061290 0.418710227
+  1.03689579 0.019241741
+  8.01166696 0.992268130
+ -4.49786437 0.694127903
+ -8.15387184 0.066275002
+  2.22256207 0.083301613
+-12.27145086 0.535369809
+  9.95709112 0.227692557
+ 14.58198717 0.667298058
+  5.98046083 0.922503625
+  1.25640725 0.632933575
+  9.77623752 0.136171032
+  5.57068426 0.374916651
+-10.07048336 0.470411379
+  3.69267954 0.897278365
+  2.22185354 0.212539549
+  7.96155623 0.720525208
+ -6.21272358 0.771491819
+  2.63054735 0.474989115
+ -2.81488890 0.675381020
+  4.52747191 0.118615879
+ -3.22975936 0.783991133
+ 11.42834761 0.423344824
+  0.26512464 0.617515445
+ -5.84322807 0.210915613
+  9.61073028 0.988117333
+ -6.11878012 0.492318959
+  5.30581443 0.339379499
+ -6.40132703 0.903540026
+  1.22921808 0.122161655
+  8.08547837 0.197296588
+ -0.77943801 0.935963718
+ 11.43194858 0.828270943
+ -5.41689395 0.556863468
+ 15.14667847 0.565186375
+ -5.15327419 0.542802437
+ -3.95903082 0.643379366
+  5.78847793 0.391369361
+ 11.54430873 0.158789330
+  1.90340148 0.841316129
+ 14.69680285 0.532022770
+  0.68552840 0.367073827
+ -8.72287967 0.250127491
+  9.35401445 0.836083158
+  5.32139524 0.996712598
+-14.53387897 0.825434481
+ -2.93925146 0.513153861
+ 12.54386493 0.713306793
+  2.04842442 0.993893406
+  2.87461954 0.049843312
+  4.89765230 0.376710062
+ -6.23945314 0.321108142
+ -3.45840168 0.854710947
+  9.05807160 0.199992188
+  3.33815006 0.787302467
+  4.22244242 0.351841910
+ 15.75879160 0.268699469
+  2.78549859 0.920299974
+ -4.46643118 0.727283862
+  0.48021298 0.428672083
+  2.55814938 0.130915212
+  5.00692968 0.062266047
+  4.78801127 0.325124688
+  6.39524485 0.693406744
+-10.46792584 0.458128441
+ 10.14111908 0.353412759
+-10.56424183 0.821588957
+  7.60967746 0.267669137
+ -2.34956688 0.434855697
+ 23.82269027 0.802311880
+  8.37170447 0.445185000
+ 10.05024769 0.778687843
+ -9.15753018 0.957292819
+ 12.17438228 0.774769426
+  1.57960028 0.783591989
+  0.06719501 0.849073924
+ 16.21114558 0.243444943
+ -3.79808298 0.842994720
+  8.98927715 0.020537113
+  7.72362992 0.984168340
+ 11.25158442 0.152385348
+-21.23936903 0.909204114
+  7.34995949 0.987249305
+ -7.99435203 0.335456401
+ -2.78218185 0.768517548
+ 11.59547596 0.466617637
+ 15.90870706 0.071892573
+  5.58160897 0.554485703
+ 16.05253351 0.815206562
+ -3.23103465 0.280495460
+ -4.61108636 0.035757819
+  5.41596511 0.746146856
+  2.92445613 0.136743821
+ 11.23628254 0.681316365
+-12.93714705 0.838791576
+  9.94668264 0.084457395
+ -4.56061529 0.983605894
+ -4.24795688 0.601732731
+ -2.83740044 0.375102341
+ -0.43078317 0.403870303
+ 15.19689584 0.114826374
+-10.29920266 0.731582141
+  6.01686515 0.641655876
+  6.69431335 0.496723697
+  4.62223602 0.328118236
+ -1.74309026 0.072604771
+ 14.31971261 0.827101483
+ -1.86629155 0.613346722
+  8.30971428 0.274948560
+  8.50080711 0.059822908
+ -7.94061422 0.121069240
+ -2.72096492 0.710791774
+  3.33259421 0.398621625
+  1.73248470 0.488581205
+  9.56008489 0.011104565
+ 12.71499762 0.038568985
+  4.11512127 0.219846314
+ -0.96707584 0.822646857
+  4.98621667 0.633779997
+  4.69384821 0.295708955
+ 10.16008645 0.778287787
+ -7.72973800 0.097096969
+  2.87264210 0.796538177
+  4.56095440 0.862952770
+  5.02621658 0.934628629
+  3.18138681 0.805600816
+ -1.02245780 0.317640678
+ 18.16001652 0.992503640
+  4.13729026 0.941910149
+  1.61211303 0.377271914
+  1.71520009 0.735196094
+  3.26325421 0.514432564
+ 12.94663819 0.591190711
+ 10.53239931 0.005877708
+  8.06705056 0.340779884
+ -5.09007267 0.332516161
+ 12.31973355 0.323119296
+ -2.69957650 0.633232996
+ 12.51207803 0.377641090
+  8.02081444 0.859293157
+ -0.13098726 0.099370804
+ -0.97757546 0.852873609
+ 16.73605399 0.595854575
+  3.63219184 0.329310613
+ -4.79105630 0.247760146
+ -4.77209495 0.708235587
+  0.92107647 0.924567254
+ 12.12724271 0.433550712
+ -5.07731478 0.200109463
+  9.16019579 0.897456586
+ 18.33260560 0.649877409
+  1.93596773 0.584401505
+  8.51254631 0.283154523
+ 11.41092928 0.698703314
+ 10.85035748 0.351078210
+ 12.62749979 0.570101319
+ -2.32028296 0.313842122
+ -2.45778301 0.007943144
+  6.93102526 0.108737491
+ -0.67304654 0.245399613
+  9.27294774 0.204010286
+ 14.29292826 0.396294626
+ 14.05843185 0.864613328
+ -3.73515954 0.305862948
+  0.36606339 0.116802407
+ -5.79235478 0.457308058
+  8.70346900 0.858244380
+ -8.91321043 0.077001581
+  0.58499566 0.503209780
+  0.39160153 0.324883353
+  7.46715326 0.343451039
+ 12.36256009 0.679483638
+  8.84283689 0.687359177
+ -6.39396909 0.113065562
+ -3.67844896 0.667335667
+  9.36904962 0.009815419
+ -3.25244888 0.213105120
+ 19.09389976 0.593130536
+  7.28826611 0.829483570
+ -5.44565944 0.956490203
+  7.96993416 0.770961635
+  0.20683778 0.006497153
+ -3.73273760 0.037042812
+-10.64745846 0.813594448
+  5.70578906 0.157678242
+  4.05282218 0.224663656
+ 14.77711159 0.577586777
+  0.89685942 0.297213941
+  3.92600687 0.672347849
+-12.29347477 0.367072171
+ -9.33603480 0.456544225
+ -0.86683190 0.088696811
+  4.65685745 0.779783359
+  1.24438030 0.712958633
+ 11.43533814 0.920345548
+-10.18380242 0.044456697
+ -1.20684029 0.992051648
+ -9.78059038 0.611477837
+  3.05588762 0.581933667
+  3.47419279 0.769325101
+  0.87528245 0.455214184
+ -3.13185655 0.805887381
+ -0.82283965 0.707668384
+ -1.86717272 0.984060013
+ 16.56357048 0.217369677
+ -2.11052646 0.474156371
+ -1.39795364 0.958554209
+  4.87468692 0.328779186
+  2.69163553 0.401633221
+  6.08640626 0.599963560
+  7.41420081 0.240202007
+  5.73729928 0.696034193
+  7.31747120 0.569520861
+ -6.20465547 0.214005920
+ 17.52477873 0.667125450
+ 12.97855692 0.796977778
+ -3.35883428 0.379721403
+ -2.90306972 0.552454626
+  5.31617371 0.401625473
+ -3.86414389 0.830986352
+-14.94107832 0.702705123
+ -5.74060402 0.833328045
+ -8.10116203 0.078855027
+ 23.48247017 0.568666620
+ 20.22005082 0.357069809
+ -2.53387193 0.637455425
+ 15.72048831 0.845354124
+ -4.41494567 0.934471473
+ -8.02254420 0.378467959
+ -0.13398716 0.489382793
+  0.95967155 0.813667919
+  0.14835664 0.215786848
+ 14.31875579 0.675145039
+ -6.36589196 0.822037848
+  8.25942906 0.156787526
+ -7.33597529 0.051076292
+ 12.58936771 0.666507807
+  2.34653798 0.626196518
+ -0.69351398 0.050664564
+  7.08738260 0.808776877
+  5.19653521 0.779008623
+  3.20900427 0.197212774
+  7.81171331 0.744975548
+  6.49008186 0.991318119
+  7.27471854 0.839642650
+ -7.68367290 0.880500743
+ 12.04846713 0.797754890
+ 14.93435279 0.190527791
+ -3.83641079 0.075995951
+  2.15090497 0.426560973
+ -3.61166623 0.777188818
+  8.49333248 0.891445999
+ -7.46936100 0.148607446
+ 13.85406193 0.983656455
+ 12.20477754 0.499345090
+ 10.09415710 0.638127733
+  5.37134772 0.110929011
+  8.17660840 0.879411588
+ -4.38804367 0.608933700
+-11.78145902 0.265134740
+  6.18940186 0.970982743
+-16.24831477 0.844983635
+  9.52790402 0.578152651
+ 16.44372225 0.264144422
+ -2.48286428 0.893865621
+  5.33297280 0.512990215
+ -2.68912507 0.851636020
+  9.94607707 0.644483197
+ -1.93526852 0.550759844
+  2.34310539 0.787853650
+ 11.79131608 0.983668283
+  3.16689104 0.605394987
+ 10.47759320 0.919442774
+  2.86973133 0.557835916
+ 10.30674302 0.442504870
+ 10.92820575 0.976183635
+  7.98050212 0.139334994
+ -0.64719705 0.981199028
+ -2.63625596 0.341524563
+ 11.38799583 0.858987904
+  1.37321916 0.202373294
+ 12.66698520 0.142127091
+  5.83599540 0.864497670
+  4.88659560 0.472598564
+ 13.00108599 0.961629827
+  5.79514791 0.408377170
+ -1.47807631 0.536772872
+ -3.38142805 0.288956265
+  6.25154986 0.828695103
+  2.40919373 0.478123848
+  3.72990486 0.056539500
+ -9.90915815 0.603356617
+  0.21737084 0.737251896
+  5.36929388 0.026920178
+ -1.05027354 0.034992509
+ -4.97887624 0.506301429
+ -6.40058435 0.014061876
+ -0.14610837 0.619699963
+  3.78483619 0.653952701
+  3.84143365 0.162122572
+  2.66030676 0.196542503
+-10.56809462 0.386200215
+ -5.01140125 0.711703654
+ -3.09809005 0.118120179
+ -2.76110171 0.118809515
+  2.85825107 0.129646974
+  2.75993661 0.171779333
+ 11.55931169 0.372165133
+  9.21211486 0.969079819
+  6.02207148 0.498965865
+ -3.52883224 0.954619249
+ -2.60190803 0.069405278
+  1.34183694 0.569402487
+-11.35155228 0.766344735
+  1.04661568 0.023673810
+ -1.90461932 0.179728300
+ 13.72465582 0.467775796
+ 19.14882438 0.476924297
+ -1.07480326 0.944407858
+ -8.44289331 0.059804028
+  1.89732882 0.743225795
+ -7.87832463 0.672539050
+-12.24163608 0.916803014
+-12.77212790 0.648129714
+  6.39197262 0.622954436
+  5.26261666 0.494421400
+-10.65239640 0.695527931
+  4.63841458 0.499519163
+ -2.94276544 0.429201572
+  4.68788953 0.639613685
+ -1.03031400 0.349342009
+ -2.69946354 0.221796918
+-15.32237714 0.631289988
+ -8.31962698 0.925363812
+ -5.80897714 0.833536878
+  7.16070989 0.832098478
+-10.99679727 0.794048223
+  0.84514458 0.748014415
+  2.23308495 0.111176288
+  3.56351018 0.599805508
+  0.88336430 0.746908710
+-14.63461670 0.314391808
+  4.39039715 0.079604833
+ -7.07001439 0.633705345
+  2.11252583 0.461468123
+  7.60219364 0.497389476
+ -4.87713428 0.039952736
+  2.17515292 0.421830084
+  0.64302362 0.267982804
+-22.29371533 0.646257366
+  0.31652779 0.060548371
+  7.93445046 0.343570449
+  0.28292029 0.651909785
+  2.77775640 0.637679287
+  6.22941586 0.291132945
+ 23.68567532 0.708513840
+  9.49503014 0.645200206
+  0.87405420 0.063154289
+ -4.04931224 0.110797498
+  8.91607239 0.732917195
+ -5.77728018 0.635435595
+-16.37296319 0.343727613
+  9.87409940 0.774177478
+ -8.11360210 0.377765616
+ 14.54242540 0.204343527
+  0.36239636 0.115528352
+ 19.51009176 0.181365423
+  1.23592729 0.011676577
+-15.81877035 0.767155028
+ -0.05911251 0.737944231
+ -6.55395965 0.214062137
+ -7.85591487 0.539865054
+ -9.73010882 0.730924287
+ 11.79433862 0.267116856
+ -8.84308360 0.088069165
+ -5.56689174 0.405987947
+  7.59010135 0.655631611
+ 10.07629305 0.031106157
+ -6.19331485 0.052350502
+ -4.58626710 0.326901540
+ -5.19431549 0.125740555
+ -2.08129025 0.034657174
+-10.48798034 0.153632237
+ 13.04657686 0.317295703
+  1.94142067 0.731437668
+ -1.62470735 0.701070475
+-12.27046912 0.505781742
+ -2.96095228 0.122808075
+ -2.91847765 0.372668438
+-14.83230131 0.100749725
+ 16.57350659 0.707854947
+ 10.05473238 0.244046174
+  5.50858969 0.070691273
+  7.65309196 0.245393047
+  7.16359996 0.056261015
+  4.33026356 0.318855549
+ -4.65721575 0.271249938
+  2.85909691 0.309377566
+  3.02736080 0.553944209
+  6.22796768 0.763945813
+ -4.47036396 0.197721195
+  2.78901176 0.441166128
+ -9.94574794 0.964660659
+  1.86451969 0.704635530
+-10.38926659 0.772304221
+ -5.36565800 0.029527218
+  1.99230152 0.578448308
+ 13.65547415 0.936050102
+ -2.05229879 0.851521142
+  0.99504588 0.974891334
+ -1.46027404 0.320227281
+ -8.45614275 0.727910071
+ -0.95201934 0.199101032
+ -2.46642929 0.462252060
+ -6.44060430 0.703637604
+ -2.58115910 0.084948525
+  0.76248197 0.125769097
+ 12.00603845 0.675927328
+  1.97538215 0.782502470
+  2.23331320 0.870228155
+ -3.10226060 0.485056198
+ 12.59337170 0.584729095
+ -2.42247402 0.387588168
+  9.41981063 0.374604221
+  6.26806243 0.727453335
+ -5.30630356 0.427294265
+ 13.81542647 0.394246994
+  1.05647858 0.646684666
+-12.25005208 0.010531726
+ -4.58162076 0.077133994
+  0.58094190 0.400275636
+  5.79443858 0.641731247
+  8.87635216 0.913593476
+  9.71048520 0.955285711
+ 13.10563373 0.908471848
+  4.99194220 0.967014095
+ 15.88178853 0.041518216
+  9.35962068 0.864770023
+ -7.53095731 0.300106124
+ 12.18427585 0.248876997
+  9.22034502 0.450149366
+ -1.02861237 0.684246939
+ -2.98140404 0.326901490
+ -4.64316598 0.425381055
+ 15.35233259 0.630774937
+ -1.85655250 0.226889991
+ 15.43748330 0.584219351
+ 10.39060893 0.387854461
+  2.80705696 0.564024865
+  3.48201221 0.787103673
+  7.03787977 0.112019552
+  8.41853061 0.798376796
+ 15.63925527 0.873984550
+ -4.05742183 0.699131238
+  6.56954685 0.720018710
+  2.44007265 0.232697343
+  3.75597926 0.975133449
+  2.92362149 0.290975435
+ -4.74372257 0.003738451
+  1.28365940 0.987536495
+ 15.65288265 0.179629701
+-11.76385004 0.850614822
+  1.56331228 0.592017435
+ -9.64774741 0.024951969
+ -9.44879860 0.993960270
+ 29.33340056 0.913358233
+  7.97233120 0.021820585
+-12.10837953 0.401535846
+ -1.20729618 0.984977268
+  3.63219301 0.491142613
+  2.79853507 0.663823888
+  3.19584583 0.612511282
+ -0.81790885 0.908769330
+ -1.67795944 0.611690031
+  2.55137163 0.109447998
+  4.36572889 0.382049700
+ -6.35667866 0.162787163
+ -0.76239101 0.892383562
+ -3.99558996 0.466572017
+ -0.47513018 0.457760464
+-10.69568261 0.544872910
+  4.30943512 0.982456072
+  2.91825703 0.823403368
+  0.10753188 0.945676881
+ -8.38623073 0.923085521
+  4.95690232 0.188128654
+  5.39956649 0.331692462
+ -1.47421789 0.327711090
+ -1.81689665 0.713285385
+  5.15137860 0.414906436
+  5.68897151 0.110799415
+  0.78825159 0.396824099
+ -1.78376652 0.929264595
+  0.76991060 0.950124414
+ 15.81469073 0.951245195
+ -4.33820920 0.009896093
+  1.67174323 0.821983745
+  0.38997945 0.928857784
+  1.97848484 0.175680230
+ -5.81067801 0.772580245
+-10.45208478 0.418845035
+ 13.34024524 0.905645046
+ -8.79585122 0.906516178
+  2.89093397 0.113010960
+  2.22324289 0.799940482
+  8.95497981 0.984663669
+  0.93288527 0.277914575
+-17.35306978 0.455587022
+ -3.26914604 0.406757639
+  8.75871227 0.067059659
+  1.79914932 0.784879863
+ -0.67305388 0.006393497
+  1.66805704 0.039614073
+  9.03868439 0.601066847
+  4.29458670 0.015772820
+ -8.15564320 0.939633197
+ 12.50538902 0.766347628
+ -0.45547258 0.464314122
+ -9.47180656 0.640114882
+-13.25567198 0.125841930
+  2.87660101 0.381931128
+  7.37834152 0.648958712
+ -0.45874073 0.303139498
+  4.87941450 0.500090729
+  4.50344891 0.311329309
+ -6.14257896 0.061368838
+  5.98243271 0.873804882
+ -2.64694079 0.080493398
+-17.79727796 0.188420116
+-13.52552336 0.798403568
+  2.29086373 0.518700767
+  5.21493652 0.788828533
+ -8.09641615 0.775041349
+  5.87005782 0.079447757
+ 10.74795720 0.955691540
+ -8.01115709 0.004508053
+ -7.53735064 0.054195934
+ -6.79130165 0.877193354
+ -1.26419539 0.837772170
+  8.31082852 0.967509866
+ 21.83090247 0.261529880
+ 11.20453234 0.913858875
+  7.19128396 0.541942489
+ -2.93623595 0.860095891
+ -3.61446403 0.022418065
+ -6.59997709 0.532998307
+  3.71486934 0.522669434
+ 18.03420874 0.295064126
+ -8.75452291 0.390175021
+ -7.83680812 0.263760724
+ -1.10263921 0.501819826
+  2.05633484 0.338684642
+  5.25636848 0.558667384
+ -7.33260497 0.457327559
+  3.86721296 0.612182242
+-15.94331373 0.478329365
+  3.71501899 0.264241588
+ 18.26175822 0.023212661
+ -5.21093378 0.184378036
+ -2.44074986 0.297114134
+-11.88339919 0.875956945
+  7.52127093 0.927322099
+  5.31597834 0.416344968
+ 11.42012314 0.952491078
+ 13.64950955 0.794183413
+ 12.50861255 0.390723282
+ -3.48142207 0.538708662
+ 14.32910902 0.085221990
+  5.76196699 0.313860477
+  2.63751452 0.917424732
+  2.99975231 0.208662214
+  7.09852825 0.798246964
+ -1.95742636 0.352166210
+  7.80534904 0.386523123
+ -4.47229047 0.290188493
+ -4.35535158 0.761527294
+  1.47083860 0.447897289
+  3.09504296 0.048513534
+  3.50446804 0.925072429
+ 12.00487617 0.574499971
+ 10.35171466 0.934193962
+ -5.63256003 0.968833982
+  7.15625220 0.467160468
+ -7.81378393 0.790220187
+  4.52101003 0.014459969
+ 12.90773453 0.990835752
+  7.70737851 0.785329264
+ -3.37196794 0.066025357
+ -5.12793918 0.347459322
+ -7.96083724 0.216608294
+ 12.81247279 0.287880308
+  4.63872463 0.426881173
+ -3.85439309 0.336532356
+  4.55633320 0.108001536
+ -2.40824634 0.135247519
+  1.65932541 0.005108006
+  3.26129578 0.093163961
+ -3.52114597 0.544041275
+ -9.08479260 0.111212700
+  7.75150456 0.942726234
+  7.44829768 0.396996218
+ 14.44430576 0.525470762
+ -2.13457508 0.207577358
+  9.74871681 0.537177845
+ -4.53338693 0.625854028
+ 16.15962824 0.947933141
+ -0.17711664 0.480940902
+ -7.21470818 0.006952612
+ -6.27644212 0.737909602
+ -0.81648165 0.230003567
+ -2.10429152 0.209671398
+  7.69291241 0.987903443
+ -0.32284504 0.183904658
+ -0.90833921 0.782169770
+ 10.35542238 0.201758865
+ 10.40788689 0.540802365
+ 10.80011849 0.298263948
+  7.39943598 0.785716539
+-12.71674257 0.154135834
+ 16.67139866 0.116794235
+ 12.47832985 0.998179468
+  3.24041348 0.653080096
+ -5.50381593 0.995396942
+-10.41952811 0.576472768
+  4.33514092 0.146434686
+  4.41294276 0.507165968
+ -0.14746982 0.698144836
+ -1.33323051 0.466481571
+ -7.01201350 0.797150114
+  6.58669848 0.942287809
+  7.19444974 0.053569397
+ -5.66046997 0.435728340
+ -5.07828702 0.497727572
+ 13.72045272 0.324222944
+  9.99111984 0.355713969
+ -4.42363728 0.071790181
+ -2.34300923 0.618434528
+  4.98594041 0.605667438
+ -2.45307721 0.894546647
+ -3.52276424 0.760086779
+ -3.69489441 0.960758209
+ 13.04792817 0.511273320
+ 21.61433486 0.236270637
+ -9.57303968 0.964235539
+ 11.70400744 0.391045695
+  4.25170422 0.411577090
+  7.87516537 0.952858161
+  9.89202673 0.971106687
+  7.51554467 0.505791978
+  2.17944879 0.893835908
+  0.82420351 0.213912155
+  2.47121932 0.688019842
+-14.88503628 0.640950883
+  8.16032283 0.277742858
+ -4.65776244 0.129415853
+  7.48274838 0.074213153
+  7.70537066 0.476778957
+  5.88202944 0.351838898
+  1.95618325 0.106331699
+  7.22064623 0.511434587
+-18.64632081 0.009314188
+ -6.16794611 0.526204245
+  2.14042033 0.675800465
+ -1.89535048 0.916845690
+ -7.77156605 0.069742819
+ -6.84078801 0.865082345
+  8.17539904 0.095895629
+ 10.75170309 0.821383078
+ 14.31498805 0.117893208
+ -2.82264467 0.809086411
+  0.11117380 0.400587471
+  6.43898314 0.333163663
+  9.48110784 0.465173316
+  5.39395511 0.695273081
+ -2.05636570 0.508060862
+  0.68666117 0.647109494
+ -6.41880322 0.267530762
+ -0.12096589 0.986901165
+  6.46062643 0.588580914
+ -4.20926136 0.550783675
+  4.07354300 0.907963701
+ 10.84045143 0.900920521
+  2.64504664 0.767700269
+ 10.34578229 0.197810342
+ -0.19222273 0.281932395
+  3.47400952 0.977555902
+ 11.04549389 0.694010579
+  6.79729856 0.056652433
+  9.28300628 0.598930531
+ -3.53453282 0.183412212
+  8.04028248 0.250746943
+  5.75964045 0.424692336
+ -4.98252741 0.867446071
+ 12.00352175 0.289615080
+  7.53497791 0.350915526
+  2.54579776 0.655113837
+ -9.29572208 0.900136667
+  6.41659249 0.100570650
+  7.37095646 0.907179211
+-12.78417775 0.262214556
+  0.87962107 0.624657444
+ -5.96939907 0.296725805
+ -2.56857339 0.604065931
+  4.27131811 0.962952479
+ 21.72603838 0.442485270
+  6.10056565 0.418383130
+ 10.48099521 0.333593221
+ 19.28363092 0.382408442
+  2.12080726 0.601206970
+ -6.82450704 0.740158518
+ 11.32395692 0.627015570
+  5.00040701 0.476274658
+-11.64750733 0.105099095
+  5.77442654 0.576560214
+  0.31340364 0.516479036
+ -2.09881449 0.146089191
+  5.12411327 0.368130477
+  1.70530391 0.621828438
+-12.95649749 0.355726301
+  8.43735652 0.275383759
+-15.56161079 0.413160084
+  5.28942694 0.069125495
+  5.96040877 0.438716686
+ -2.59318107 0.571116303
+  6.95988992 0.650760909
+ 14.00074797 0.623645969
+  1.66101456 0.558763985
+ -2.57968349 0.648185379
+ -5.47584253 0.716901151
+  6.37222581 0.060563130
+  2.83664864 0.842419730
+  1.48926558 0.620280308
+  0.33471689 0.170312461
+  5.21648412 0.317639631
+  0.51733642 0.843867329
+  9.86005834 0.306036746
+ -5.81145791 0.975655452
+ -5.43219061 0.303385368
+  5.87157118 0.677369776
+  2.08889926 0.310200439
+ -2.53433085 0.194730908
+  7.01359575 0.674259533
+ -2.00936260 0.682056466
+ -2.98240739 0.787899917
+ -7.43289210 0.357483044
+-12.58905988 0.981387385
+  5.78095517 0.533526274
+ -1.23065889 0.687266774
+ -6.82309960 0.293249774
+  8.47000829 0.842056399
+ -5.81624772 0.303700280
+-14.83571031 0.311387926
+  4.66808472 0.091222946
+ -2.90144463 0.438301785
+ 10.62458662 0.828335698
+  7.88002491 0.990156110
+ 10.27680283 0.251087079
+ -9.42498970 0.292462244
+  6.73027640 0.213065205
+  1.28169895 0.353152789
+-14.29203733 0.264563048
+ 20.35772711 0.265208837
+  3.55095071 0.242905653
+-17.97067670 0.373951756
+ 10.53141139 0.247520698
+  0.05293205 0.579940423
+ 12.79674707 0.288031751
+ -5.44235185 0.075899079
+ 14.29464811 0.960707538
+ -1.36753291 0.124265178
+ -4.25946974 0.521720352
+-12.46519252 0.385503339
+ -6.65343143 0.540942219
+  5.55949184 0.143194404
+ -1.20480594 0.515905644
+ -4.13839908 0.164461445
+ -2.21345425 0.812969725
+  3.94223380 0.229238952
+-10.78661097 0.395049514
+  3.06997341 0.791234255
+ 24.82205477 0.110859039
+  6.28791249 0.867125744
+ -2.80296119 0.703583849
+ 13.24274039 0.425951975
+ -0.19577471 0.361568727
+ -2.34894781 0.954814545
+ 19.76339577 0.635462177
+ -1.87591480 0.149121567
+ -7.70962391 0.711708342
+ -2.46291902 0.390902746
+end data
+regression /variables=v0 v1 /statistics defaults /dependent=v0 /method=enter.
+])
+AT_CHECK([pspp -o pspp.csv regression.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+v0,F8.0
+v1,F8.0
+
+Table: Model Summary
+,R,R Square,Adjusted R Square,Std. Error of the Estimate
+,.05,.00,.00,8.11
+
+Table: ANOVA
+,,Sum of Squares,df,Mean Square,F,Significance
+,Regression,235.23,1,235.23,3.58,.06
+,Residual,98438.40,1498,65.71,,
+,Total,98673.63,1499,,,
+
+Table: Coefficients
+,,B,Std. Error,Beta,t,Significance
+,(Constant),1.24,.42,.00,2.95,.21
+,v1,1.37,.72,.05,1.89,.06
+,,,,,,
+])
+AT_CLEANUP
diff --git a/tests/language/stats/reliability.at b/tests/language/stats/reliability.at
new file mode 100644 (file)
index 0000000..5676b94
--- /dev/null
@@ -0,0 +1,249 @@
+AT_BANNER([RELIABILITY])
+
+AT_SETUP([RELIABILITY])
+AT_DATA([reliability.sps], [dnl
+data list notable list  /var1 *
+       var2  *
+       var6  *
+       var7  *
+       var8  *
+       var9  *
+       var11 *
+       var12 *
+       var15 *
+       var16 *
+       var17 *
+       var19 *
+       .
+
+begin data.
+6 7 7 5 7 7 7 7 7 7 6 6
+6 7 7 6 7 6 7 5 6 5 7 7
+6 6 7 6 5 3 6 4 5 6 4 5
+4 6 5 6 6 5 4 3 5 6 5 6
+5 6 5 5 6 5 4 4 6 6 5 5
+6 6 7 6 6 5 6 5 6 6 5 6
+5 6 6 5 6 5 5 4 6 5 5 5
+5 7 7 7 7 7 6 5 7 7 7 7
+6 6 6 5 5 7 6 5 6 6 5 6
+. . . . . . . . . . . .
+6 6 5 5 5 6 6 4 6 5 5 5
+7 7 7 6 7 6 7 6 6 6 7 6
+4 7 6 6 6 5 5 4 4 5 5 6
+5 6 3 5 4 1 4 6 2 3 3 2
+3 6 6 5 6 2 4 2 2 4 4 5
+6 6 7 5 6 5 7 6 5 6 6 5
+6 5 6 6 5 6 6 6 6 4 5 5
+5 7 7 . 6 6 6 5 6 6 6 6
+5 7 5 5 4 6 7 6 5 4 6 5
+7 7 7 6 7 7 7 6 7 7 7 6
+3 6 5 6 5 7 7 3 4 7 5 7
+6 7 7 6 5 6 5 5 6 6 6 6
+5 5 6 5 5 5 5 4 5 5 5 6
+6 6 7 4 5 6 6 6 6 5 5 6
+6 5 6 6 4 4 5 4 5 6 4 5
+5 6 7 6 6 7 7 5 6 6 6 5
+5 6 5 7 4 6 6 5 7 7 5 6
+. . . . . . . . . . . .
+7 6 6 5 6 6 7 6 6 5 5 6
+6 6 7 7 7 7 7 6 7 6 6 7
+7 5 5 . 5 . 7 3 5 4 5 3
+7 6 7 5 4 5 7 5 7 5 5 6
+6 5 6 6 6 5 5 5 5 6 5 6
+7 7 7 7 7 7 7 7 5 6 7 7
+. . . . . . . . . . . .
+5 5 6 7 5 6 6 4 6 6 6 5
+6 6 5 7 5 6 7 5 6 5 4 6
+7 6 7 6 7 5 6 7 7 6 6 6
+5 6 5 6 5 6 7 2 5 7 3 7
+6 6 5 6 5 6 6 6 6 6 5 6
+7 6 7 6 6 6 6 6 6 7 6 7
+7 7 6 5 6 6 7 7 7 4 6 5
+3 7 7 6 6 7 7 7 6 6 6 4
+3 5 3 4 3 3 3 3 3 3 3 5
+5 7 7 7 5 7 6 2 6 7 6 7
+7 7 7 7 7 7 7 6 7 7 7 6
+6 5 7 4 4 4 5 6 5 5 4 5
+4 7 7 4 4 3 6 3 5 3 4 5
+7 7 7 7 7 7 7 7 7 7 7 5
+3 6 5 5 4 5 4 4 5 5 3 5
+6 7 6 6 6 7 7 6 6 6 7 6
+2 5 4 6 3 2 2 2 2 7 2 2
+4 6 6 5 5 5 6 5 5 6 6 5
+5 7 4 5 6 6 6 5 6 6 5 6
+5 7 7 5 6 5 6 5 5 4 5 4
+4 5 6 5 6 4 5 5 5 4 5 5
+7 6 6 5 5 6 7 5 6 5 7 6
+5 6 6 5 4 5 5 3 4 5 5 5
+5 7 6 4 4 5 6 5 6 4 4 6
+6 6 6 6 5 7 7 6 5 5 6 6
+6 6 7 6 7 6 6 5 6 7 6 5
+7 6 7 6 7 6 7 7 5 5 6 6
+5 6 6 5 5 5 6 5 6 7 7 5
+5 6 6 5 6 5 6 6 6 6 6 6
+5 5 5 5 6 4 5 3 4 7 6 5
+5 7 7 6 6 6 6 5 6 7 6 7
+6 6 7 7 7 5 6 5 5 5 5 4
+2 7 5 4 6 5 5 2 5 6 4 6
+6 7 7 5 6 6 7 6 6 7 5 7
+5 6 7 6 6 3 5 7 6 6 5 6
+6 6 6 3 5 5 5 6 6 6 4 5
+4 7 7 4 7 4 5 5 5 7 4 4
+. . . . . . . . . . . .
+6 6 7 6 7 6 7 7 6 7 7 6
+. . . . . . . . . . . .
+5 6 5 7 6 5 6 6 5 6 4 6
+5 5 5 5 4 5 5 5 7 5 5 5
+6 6 6 4 5 4 6 6 6 4 5 4
+6 5 7 4 6 4 6 5 6 6 6 3
+5 7 6 5 5 5 5 5 6 7 6 6
+5 5 7 7 5 5 6 6 5 5 5 7
+5 6 7 6 7 5 6 4 6 7 6 7
+4 5 5 5 6 5 6 5 6 6 5 6
+6 5 5 5 6 3 4 5 5 4 5 3
+6 6 6 5 5 5 4 3 4 5 5 5
+6 7 7 6 2 3 6 6 6 5 7 7
+6 7 5 5 6 6 6 5 6 6 6 6
+6 7 7 6 7 7 7 5 5 6 6 6
+6 6 6 6 7 6 6 7 6 6 6 6
+5 6 6 6 3 5 6 6 5 5 4 6
+4 6 5 6 6 5 6 5 6 6 5 5
+6 4 6 5 4 6 7 4 5 6 5 5
+6 7 6 4 6 5 7 6 7 7 6 5
+6 7 7 6 7 6 7 7 7 6 6 6
+6 6 6 4 5 6 7 7 5 6 4 4
+3 3 5 3 3 1 5 6 3 2 3 3
+7 7 5 6 6 7 7 6 7 7 7 7
+5 6 6 6 7 5 4 5 4 7 6 7
+3 6 5 4 3 3 3 5 5 6 3 4
+5 7 6 4 6 5 5 6 6 7 5 6
+5 7 6 6 6 6 6 5 6 7 7 6
+7 7 5 6 7 7 7 7 6 5 7 7
+6 7 6 6 5 6 7 7 6 5 6 6
+6 7 7 7 7 6 6 7 6 7 7 7
+4 6 4 7 3 6 5 5 4 3 5 6
+5 5 7 5 4 6 7 5 4 6 6 5
+5 5 6 4 6 5 7 6 5 5 5 6
+. . . . . . . . . . . .
+. . . . . . . . . . . .
+5 7 7 5 6 6 7 7 6 6 6 7
+6 7 7 1 2 1 7 7 5 5 5 2
+. . . . . . . . . . . .
+3 7 4 6 4 7 4 6 4 7 4 7
+5 7 3 5 5 6 7 5 4 7 7 4
+4 7 7 5 4 6 7 7 6 5 4 4
+6 6 2 2 6 4 6 5 5 1 5 2
+5 5 6 4 5 4 6 5 5 6 5 5
+. . . . . . . . . . . .
+5 7 6 6 6 6 6 6 5 6 6 6
+6 6 6 5 6 6 6 6 7 5 6 7
+3 6 3 3 5 3 3 5 3 5 7 4
+4 4 6 3 3 3 4 3 4 2 3 6
+5 7 7 6 5 4 7 5 7 7 3 7
+4 5 4 4 4 4 3 3 3 4 3 3
+6 7 7 5 6 6 7 5 4 5 5 5
+3 5 3 3 1 3 4 3 4 7 6 7
+4 5 4 4 4 3 4 5 6 6 4 5
+5 6 3 4 5 3 5 3 4 5 6 4
+5 5 5 6 6 6 6 4 5 6 6 5
+6 7 7 2 2 6 7 7 7 7 5 7
+5 7 7 4 6 5 7 5 5 5 6 6
+6 6 7 7 5 5 5 7 6 7 7 7
+6 5 7 3 6 5 6 5 5 6 5 4
+5 7 6 5 6 6 6 5 6 5 5 6
+4 5 5 5 6 3 5 3 3 6 5 5
+. . . . . . . . . . . .
+5 6 6 4 4 4 5 3 5 5 2 6
+5 6 7 5 5 6 6 5 5 6 6 6
+6 7 7 6 4 7 7 6 7 5 6 7
+6 6 5 4 5 2 7 6 6 5 6 6
+2 2 2 2 2 2 3 2 3 1 1 2
+end data.
+
+RELIABILITY
+  /VARIABLES=var2 var8 var15 var17 var6
+  /SCALE('Everything') var6 var8 var15 var17
+  /MODEL=ALPHA.
+
+RELIABILITY
+  /VARIABLES=var6 var8 var15 var17
+  /SCALE('Nothing') ALL
+  /MODEL=SPLIT(2)
+ .
+
+RELIABILITY
+  /VARIABLES=var2 var6 var8 var15 var17 var19
+  /SCALE('Totals') var6 var8 var15 var17 
+  /SUMMARY = total
+ .
+
+
+RELIABILITY
+  /VARIABLES=var6 var8 var15 var17 
+  .
+])
+AT_CHECK([pspp -o pspp.csv reliability.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Scale: Everything
+
+Table: Case Processing Summary
+,,N,%
+Cases,Valid,131,92.91
+,Excluded,10,7.09
+,Total,141,100.00
+
+Table: Reliability Statistics
+Cronbach's Alpha,N of Items
+.75,4
+
+Scale: Nothing
+
+Table: Case Processing Summary
+,,N,%
+Cases,Valid,131,92.91
+,Excluded,10,7.09
+,Total,141,100.00
+
+Table: Reliability Statistics
+Cronbach's Alpha,Part 1,Value,.55
+,,N of Items,2
+,Part 2,Value,.63
+,,N of Items,2
+,Total N of Items,,4
+Correlation Between Forms,,,.61
+Spearman-Brown Coefficient,Equal Length,,.75
+,Unequal Length,,.75
+Guttman Split-Half Coefficient,,,.75
+
+Scale: Totals
+
+Table: Case Processing Summary
+,,N,%
+Cases,Valid,131,92.91
+,Excluded,10,7.09
+,Total,141,100.00
+
+Table: Reliability Statistics
+Cronbach's Alpha,N of Items
+.75,4
+
+Table: Item-Total Statistics
+,Scale Mean if Item Deleted,Scale Variance if Item Deleted,Corrected Item-Total Correlation,Cronbach's Alpha if Item Deleted
+var6,15.97,8.43,.51,.71
+var8,16.56,7.86,.53,.70
+var15,16.47,8.45,.56,.68
+var17,16.60,8.00,.57,.67
+
+Scale: ANY
+
+Table: Case Processing Summary
+,,N,%
+Cases,Valid,131,92.91
+,Excluded,10,7.09
+,Total,141,100.00
+
+Table: Reliability Statistics
+Cronbach's Alpha,N of Items
+.75,4
+])
+AT_CLEANUP
diff --git a/tests/language/stats/roc.at b/tests/language/stats/roc.at
new file mode 100644 (file)
index 0000000..7ffb652
--- /dev/null
@@ -0,0 +1,166 @@
+AT_BANNER([ROC])
+
+AT_SETUP([ROC, free distribution])
+AT_DATA([roc.sps], [dnl
+set format F10.3.
+data list notable list /x * y * w * a *.
+begin data.
+1 1 2  1
+1 2 28 0
+2 3 4  1
+2 4 14 0
+3 5 10 1
+. . 1  0
+3 1 5  0
+4 2 14 1
+4 3 2  0
+5 4 20 1
+5 4 20 .
+5 5 1  0
+end data.
+
+weight by w.
+
+roc x by a (1)
+       /plot = none
+       /print = se coordinates
+       /criteria = testpos(large) distribution(free) ci(99)
+       /missing = exclude .
+])
+AT_CHECK([pspp -o pspp.csv roc.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Case Summary
+,Valid N (listwise),
+a,Unweighted,Weighted
+Positive,5,50.000
+Negative,5,50.000
+
+Table: Area Under the Curve (x)
+,,,Asymp. 99% Confidence Interval,
+Area,Std. Error,Asymptotic Sig.,Lower Bound,Upper Bound
+.910,.030,.000,.839,.981
+
+Table: Coordinates of the Curve (x)
+Positive if greater than or equal to,Sensitivity,1 - Specificity
+.000,1.000,1.000
+1.500,.960,.440
+2.500,.880,.160
+3.500,.680,.060
+4.500,.400,.020
+6.000,.000,.000
+])
+AT_CLEANUP
+
+AT_SETUP([ROC, negative exponential distribution])
+AT_DATA([roc.sps], [dnl
+set format F10.3.
+data list notable list /x * y * w * a *.
+begin data.
+1 1 2  1
+1 2 28 0
+2 3 4  1
+2 4 14 0
+3 5 10 1
+. . 1  0
+3 1 5  0
+4 2 14 1
+4 3 2  0
+5 4 20 1
+5 4 20 .
+5 5 1  0
+end data.
+
+weight by w.
+
+roc x y by a (1)
+       /plot = curve(reference)
+        /print = se coordinates
+       /criteria = testpos(large) distribution(negexpo) ci(95)
+       /missing = exclude .
+])
+AT_CHECK([pspp -o pspp.csv roc.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Case Summary
+,Valid N (listwise),
+a,Unweighted,Weighted
+Positive,5,50.000
+Negative,5,50.000
+
+Table: Area Under the Curve
+,,,,Asymp. 95% Confidence Interval,
+Variable under test,Area,Std. Error,Asymptotic Sig.,Lower Bound,Upper Bound
+x,.910,.030,.000,.860,.960
+y,.697,.052,.001,.611,.783
+
+Table: Coordinates of the Curve
+Test variable,Positive if greater than or equal to,Sensitivity,1 - Specificity
+x,.000,1.000,1.000
+,1.500,.960,.440
+,2.500,.880,.160
+,3.500,.680,.060
+,4.500,.400,.020
+,6.000,.000,.000
+y,.000,1.000,1.000
+,1.500,.960,.900
+,2.500,.680,.340
+,3.000,.600,.340
+,3.500,.600,.300
+,4.500,.200,.020
+,6.000,.000,.000
+])
+AT_CLEANUP
+
+AT_SETUP([ROC, with anomaly])
+AT_DATA([roc.sps], [dnl
+set format F10.3.
+data list notable list /x * a * comment (a20).
+begin data.
+0  1 ""
+0  0 ""
+1  1 ""
+1  0 ""
+2  1 ""
+2  0 ""
+5  1 ""
+5  0 ""
+10 1 ""
+10 0 ""
+15 1 ""
+15 0 ""
+20 1 ""
+20 1 ""
+22 0 "here and"
+22 0 "here is the anomoly"
+25 1 ""
+25 0 ""
+30 1 ""
+30 0 ""
+35 1 ""
+35 0 ""
+38 1 ""
+38 0 ""
+39 1 ""
+39 0 ""
+40 1 ""
+40 0 ""
+end data.
+
+roc x by a (1)
+       /plot = none
+       print = se 
+       .
+])
+AT_CHECK([pspp -o pspp.csv roc.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Case Summary
+,Valid N (listwise),
+a,Unweighted,Weighted
+Positive,14,14.000
+Negative,14,14.000
+
+Table: Area Under the Curve (x)
+,,,Asymp. 95% Confidence Interval,
+Area,Std. Error,Asymptotic Sig.,Lower Bound,Upper Bound
+.490,.111,.927,.307,.673
+])
+AT_CLEANUP
diff --git a/tests/language/stats/sort-cases.at b/tests/language/stats/sort-cases.at
new file mode 100644 (file)
index 0000000..d06f2b2
--- /dev/null
@@ -0,0 +1,82 @@
+AT_BANNER([SORT CASES])
+
+m4_divert_push([PREPARE_TESTS])
+[sort_cases_gen_data () {
+  cat > gen-data.pl <<'EOF'
+use strict;
+use warnings;
+
+# Generate shuffled data.
+my (@data);
+for my $i (0...$ARGV[0] - 1) {
+    push (@data, ($i) x $ARGV[1]);
+}
+fisher_yates_shuffle (\@data);
+
+# Output shuffled data.
+my (@shuffled) = map ([$data[$_], $_], 0...$#data);
+open (SHUFFLED, ">data.txt");
+print SHUFFLED "$data[$_] $_\n" foreach 0...$#data;
+
+# Output sorted data.
+my (@sorted) = sort { $a->[0] <=> $b->[0] || $a->[1] <=> $b->[1] } @shuffled;
+open (SORTED, ">expout");
+printf SORTED " %8d %8d \n", $_->[0], $_->[1] foreach @sorted;
+
+# From perlfaq4.
+sub fisher_yates_shuffle {
+    my $deck = shift;  # $deck is a reference to an array
+    my $i = @$deck;
+    while ($i--) {
+       my $j = int rand ($i+1);
+       @$deck[$i,$j] = @$deck[$j,$i];
+    }
+}
+EOF
+  $PERL gen-data.pl "$@"]
+}
+m4_divert_pop([PREPARE_TESTS])
+
+m4_define([SORT_CASES_TEST], 
+  [AT_SETUP([sort m4_eval([$1 * $2]) cases[]m4_if([$2], [1], [], [ ($1 unique)])[]m4_if([$3], [], [], [ with $3 buffers])])
+   AT_KEYWORDS([SORT CASES])
+   AT_CHECK([sort_cases_gen_data $1 $2 $3])
+   AT_CAPTURE_FILE([data.txt])
+   AT_CAPTURE_FILE([output.txt])
+   AT_CAPTURE_FILE([sort-cases.sps])
+   AT_DATA([sort-cases.sps], [dnl
+DATA LIST LIST NOTABLE FILE='data.txt'/x y (F8).
+SORT BY x[]m4_if([$3], [], [], [/BUFFERS=$3]).
+PRINT OUTFILE='output.txt'/x y.
+EXECUTE.
+])
+   AT_CHECK([pspp --testing-mode -o pspp.csv sort-cases.sps])
+   AT_CHECK([cat output.txt], [0], [expout])
+   AT_CLEANUP])
+
+SORT_CASES_TEST(100, 5, 2)
+SORT_CASES_TEST(100, 5, 3)
+SORT_CASES_TEST(100, 5, 4)
+SORT_CASES_TEST(100, 5, 5)
+SORT_CASES_TEST(100, 5, 10)
+SORT_CASES_TEST(100, 5, 50)
+SORT_CASES_TEST(100, 5, 100)
+SORT_CASES_TEST(100, 5)
+
+SORT_CASES_TEST(100, 10, 2)
+SORT_CASES_TEST(100, 10, 3)
+SORT_CASES_TEST(100, 10, 5)
+SORT_CASES_TEST(100, 10)
+
+SORT_CASES_TEST(1000, 5, 5)
+SORT_CASES_TEST(1000, 5, 50)
+SORT_CASES_TEST(1000, 5)
+
+SORT_CASES_TEST(100, 100, 3)
+SORT_CASES_TEST(100, 100, 5)
+SORT_CASES_TEST(100, 100)
+
+SORT_CASES_TEST(10000, 5, 500)
+
+SORT_CASES_TEST(50000, 1)
+
diff --git a/tests/language/stats/t-test.at b/tests/language/stats/t-test.at
new file mode 100644 (file)
index 0000000..80519fa
--- /dev/null
@@ -0,0 +1,746 @@
+AT_BANNER([T-TEST])
+
+AT_SETUP([T-TEST /PAIRS])
+AT_DATA([t-test.sps], [dnl
+data list list /ID * A * B *.
+begin data.
+1 2.0 3.0
+2 1.0 2.0
+3 2.0 4.5
+4 2.0 4.5
+5 3.0 6.0
+end data.
+
+t-test /PAIRS a with b (PAIRED).
+])
+AT_CHECK([pspp -o pspp.csv t-test.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+ID,F8.0
+A,F8.0
+B,F8.0
+
+Table: Paired Sample Statistics
+,,Mean,N,Std. Deviation,S.E. Mean
+Pair 0,A,2.00,5,.71,.32
+,B,4.00,5,1.54,.69
+
+Table: Paired Samples Correlations
+,,N,Correlation,Sig.
+Pair 0,A & B,5,.92,.03
+
+Table: Paired Samples Test
+,,Paired Differences,,,,,,,
+,,,,,95% Confidence Interval of the Difference,,,,
+,,Mean,Std. Deviation,Std. Error Mean,Lower,Upper,t,df,Sig. (2-tailed)
+Pair 0,A - B,-2.00,.94,.42,-3.16,-.84,-4.78,4,.01
+])
+AT_CLEANUP
+
+AT_SETUP([T-TEST /PAIRS with per-analysis missing values])
+AT_DATA([ref.sps], [dnl
+data list list /id * a * b * c * d *.
+begin data.
+1 2.0 3.0 4.0 4.0
+2 1.0 2.0 5.1 3.9
+3 2.0 4.5 5.2 3.8
+4 2.0 4.5 5.3 3.7
+56 3.0 6.0 5.9 3.6
+end data.
+
+t-test /PAIRS a c with b d (PAIRED). 
+])
+AT_DATA([expout], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+id,F8.0
+a,F8.0
+b,F8.0
+c,F8.0
+d,F8.0
+
+Table: Paired Sample Statistics
+,,Mean,N,Std. Deviation,S.E. Mean
+Pair 0,a,2.00,5,.71,.32
+,b,4.00,5,1.54,.69
+Pair 1,c,5.10,5,.69,.31
+,d,3.80,5,.16,.07
+
+Table: Paired Samples Correlations
+,,N,Correlation,Sig.
+Pair 0,a & b,5,.92,.03
+Pair 1,c & d,5,-.92,.03
+
+Table: Paired Samples Test
+,,Paired Differences,,,,,,,
+,,,,,95% Confidence Interval of the Difference,,,,
+,,Mean,Std. Deviation,Std. Error Mean,Lower,Upper,t,df,Sig. (2-tailed)
+Pair 0,a - b,-2.00,.94,.42,-3.16,-.84,-4.78,4,.01
+Pair 1,c - d,1.30,.84,.37,.26,2.34,3.47,4,.03
+])
+AT_CHECK([pspp -o ref.csv ref.sps])
+AT_CHECK([cat ref.csv], [0], [expout])
+AT_DATA([missing.sps], [dnl
+data list list /id * a * b * c * d *.
+begin data.
+1 2.0 3.0 4.0 4.0 
+2 1.0 2.0 5.1 3.9
+3 2.0 4.5 5.2 3.8
+4 2.0 4.5 5.3 3.7
+5 3.0 6.0 5.9 .
+6 3.0  .  5.9 3.6
+end data.
+
+
+t-test /MISSING=analysis /PAIRS a c with b d (PAIRED). 
+])
+AT_CHECK([pspp -o missing.csv missing.sps])
+AT_CHECK([cat missing.csv], [0], [expout])
+AT_CLEANUP
+
+AT_SETUP([T-TEST /PAIRS with listwise missing values])
+AT_DATA([ref.sps], [dnl
+data list list /id * a * b * c * d *.
+begin data.
+1 2.0 3.0 4.0 4.0
+2 1.0 2.0 5.1 3.9
+3 2.0 4.5 5.2 3.8
+4 2.0 4.5 5.3 3.7
+5 3.0 6.0 5.9 3.6
+end data.
+
+t-test /PAIRS a b with c d (PAIRED). 
+])
+AT_DATA([expout], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+id,F8.0
+a,F8.0
+b,F8.0
+c,F8.0
+d,F8.0
+
+Table: Paired Sample Statistics
+,,Mean,N,Std. Deviation,S.E. Mean
+Pair 0,a,2.00,5,.71,.32
+,c,5.10,5,.69,.31
+Pair 1,b,4.00,5,1.54,.69
+,d,3.80,5,.16,.07
+
+Table: Paired Samples Correlations
+,,N,Correlation,Sig.
+Pair 0,a & c,5,.41,.49
+Pair 1,b & d,5,-.87,.05
+
+Table: Paired Samples Test
+,,Paired Differences,,,,,,,
+,,,,,95% Confidence Interval of the Difference,,,,
+,,Mean,Std. Deviation,Std. Error Mean,Lower,Upper,t,df,Sig. (2-tailed)
+Pair 0,a - c,-3.10,.76,.34,-4.04,-2.16,-9.14,4,.00
+Pair 1,b - d,.20,1.68,.75,-1.89,2.29,.27,4,.80
+])
+AT_CHECK([pspp -o ref.csv ref.sps])
+AT_CHECK([cat ref.csv], [0], [expout])
+AT_DATA([missing.sps], [dnl
+data list list /id * a * b * c * d *.
+begin data.
+1 2.0 3.0 4.0 4.0 
+2 1.0 2.0 5.1 3.9
+3 2.0 4.5 5.2 3.8
+4 2.0 4.5 5.3 3.7
+5 3.0 6.0 5.9 3.6
+6 3.0 6.0 5.9  .
+end data.
+
+
+t-test /MISSING=listwise /PAIRS a b with c d (PAIRED). 
+])
+AT_CHECK([pspp -o missing.csv missing.sps])
+AT_CHECK([cat missing.csv], [0], [expout])
+AT_CLEANUP
+
+dnl Tests for a bug in the paired samples T test.
+dnl Thanks to Mike Griffiths for reporting this problem.
+AT_SETUP([T-TEST /PAIRS bug])
+AT_DATA([t-test.sps], [dnl
+set format f8.3.
+data list list /A * B *.
+begin data.
+11 2
+1  1
+1  1
+end data.
+
+t-test pairs = a with b (paired).
+])
+AT_CHECK([pspp -o pspp.csv t-test.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+A,F8.0
+B,F8.0
+
+Table: Paired Sample Statistics
+,,Mean,N,Std. Deviation,S.E. Mean
+Pair 0,A,4.333,3,5.774,3.333
+,B,1.333,3,.577,.333
+
+Table: Paired Samples Correlations
+,,N,Correlation,Sig.
+Pair 0,A & B,3,1.000,.000
+
+Table: Paired Samples Test
+,,Paired Differences,,,,,,,
+,,,,,95% Confidence Interval of the Difference,,,,
+,,Mean,Std. Deviation,Std. Error Mean,Lower,Upper,t,df,Sig. (2-tailed)
+Pair 0,A - B,3.000,5.196,3.000,-9.908,15.908,1.000,2,.423
+])
+AT_CLEANUP
+
+AT_SETUP([T-TEST /GROUPS])
+AT_DATA([t-test.sps], [dnl
+data list list /ID * INDEP * DEP1 * DEP2 *.
+begin data.
+1  1.1 1 3
+2  1.1 2 4
+3  1.1 2 4 
+4  1.1 2 4 
+5  1.1 3 5
+6  2.1 3 1
+7  2.1 4 2
+8  2.1 4 2
+9  2.1 4 2
+10 2.1 5 3
+11 3.1 2 2
+end data.
+
+* Note that the last case should be IGNORED since it doesn't have a
+  dependent variable of either 1.1 or 2.1.
+
+t-test /GROUPS=indep(1.1,2.1) /var=dep1 dep2.
+])
+AT_CHECK([pspp -o pspp.csv t-test.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+ID,F8.0
+INDEP,F8.0
+DEP1,F8.0
+DEP2,F8.0
+
+Table: Group Statistics
+,INDEP,N,Mean,Std. Deviation,S.E. Mean
+DEP1,1.1,5,2.00,.71,.32
+,2.1,5,4.00,.71,.32
+DEP2,1.1,5,4.00,.71,.32
+,2.1,5,2.00,.71,.32
+
+Table: Independent Samples Test
+,,Levene's Test for Equality of Variances,,t-test for Equality of Means,,,,,,
+,,,,,,,,,95% Confidence Interval of the Difference,
+,,F,Sig.,t,df,Sig. (2-tailed),Mean Difference,Std. Error Difference,Lower,Upper
+DEP1,Equal variances assumed,.00,1.00,-4.47,8.00,.00,-2.00,.45,-3.03,-.97
+,Equal variances not assumed,,,-4.47,8.00,.00,-2.00,.45,-3.03,-.97
+DEP2,Equal variances assumed,.00,1.00,4.47,8.00,.00,2.00,.45,.97,3.03
+,Equal variances not assumed,,,4.47,8.00,.00,2.00,.45,.97,3.03
+])
+AT_CLEANUP
+
+AT_SETUP([T-TEST /GROUPS with one value for independent variable])
+AT_DATA([t-test.sps], [dnl
+data list list /INDEP * DEP *.
+begin data.
+       1        6
+       1        6
+       1        7
+       1        6
+       1       13
+       1        4
+       1        7
+       1        9
+       1        7
+       1       12
+       1       11
+       2       11
+       2        9
+       2        8
+       2        4
+       2       16
+       2        9
+       2        9
+       2        5
+       2        4
+       2       10
+       2       14
+end data.
+t-test /groups=indep(1.514) /var=dep.
+])
+AT_CHECK([pspp -o pspp.csv t-test.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+INDEP,F8.0
+DEP,F8.0
+
+Table: Group Statistics
+,INDEP,N,Mean,Std. Deviation,S.E. Mean
+DEP,>=1.514,11,9.00,3.82,1.15
+,<1.514,11,8.00,2.86,.86
+
+Table: Independent Samples Test
+,,Levene's Test for Equality of Variances,,t-test for Equality of Means,,,,,,
+,,,,,,,,,95% Confidence Interval of the Difference,
+,,F,Sig.,t,df,Sig. (2-tailed),Mean Difference,Std. Error Difference,Lower,Upper
+DEP,Equal variances assumed,.17,.68,-.69,20.00,.50,-1.00,1.44,-4.00,2.00
+,Equal variances not assumed,,,-.69,18.54,.50,-1.00,1.44,-4.02,2.02
+])
+AT_CLEANUP
+
+AT_SETUP([T-TEST /GROUPS with per-analysis missing values])
+AT_DATA([ref.sps], [dnl
+data list list /id * indep * dep1 * dep2 *.
+begin data.
+1  1.0 3.5 6
+2  1.0 2.0 5
+3  1.0 2.0 4
+4  2.0 3.5 3
+56 2.0 3.0 1
+end data.
+
+t-test /group=indep /var=dep1, dep2.
+])
+AT_DATA([expout], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+id,F8.0
+indep,F8.0
+dep1,F8.0
+dep2,F8.0
+
+Table: Group Statistics
+,indep,N,Mean,Std. Deviation,S.E. Mean
+dep1,1,3,2.50,.87,.50
+,2,2,3.25,.35,.25
+dep2,1,3,5.00,1.00,.58
+,2,2,2.00,1.41,1.00
+
+Table: Independent Samples Test
+,,Levene's Test for Equality of Variances,,t-test for Equality of Means,,,,,,
+,,,,,,,,,95% Confidence Interval of the Difference,
+,,F,Sig.,t,df,Sig. (2-tailed),Mean Difference,Std. Error Difference,Lower,Upper
+dep1,Equal variances assumed,3.75,.15,-1.12,3.00,.35,-.75,.56,-2.53,1.03
+,Equal variances not assumed,,,-1.34,2.78,.28,-.75,.56,-2.61,1.11
+dep2,Equal variances assumed,.60,.50,2.85,3.00,.07,3.00,1.15,-.67,6.67
+,Equal variances not assumed,,,2.60,1.68,.14,3.00,1.15,-2.98,8.98
+])
+AT_CHECK([pspp -o ref.csv ref.sps])
+AT_CHECK([cat ref.csv], [0], [expout])
+AT_DATA([missing.sps], [dnl
+data list list /id * indep * dep1 * dep2.
+begin data.
+1 1.0 3.5 6
+2 1.0 2.0 5
+3 1.0 2.0 4
+4 2.0 3.5 3
+5 2.0 3.0 .
+6 2.0 .   1
+7  .  3.1 5
+end data.
+
+* Note that if the independent variable is missing, then it's implicitly 
+* listwise missing.
+
+t-test /missing=analysis /group=indep /var=dep1 dep2.
+])
+AT_CHECK([pspp -o missing.csv missing.sps])
+AT_CHECK([cat missing.csv], [0], [expout])
+AT_CLEANUP
+
+AT_SETUP([T-TEST /GROUPS with listwise missing values])
+AT_DATA([ref.sps], [dnl
+data list list /id * indep * dep1 * dep2.
+begin data.
+1 1.0 3.5 6
+2 1.0 2.0 5
+3 1.0 2.0 4
+4 2.0 3.5 3
+5 2.0 3.0 2
+6 2.0 4.0 1
+end data.
+
+t-test /group=indep /var=dep1 dep2.
+])
+AT_DATA([expout], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+id,F8.0
+indep,F8.0
+dep1,F8.0
+dep2,F8.0
+
+Table: Group Statistics
+,indep,N,Mean,Std. Deviation,S.E. Mean
+dep1,1,3,2.50,.87,.50
+,2,3,3.50,.50,.29
+dep2,1,3,5.00,1.00,.58
+,2,3,2.00,1.00,.58
+
+Table: Independent Samples Test
+,,Levene's Test for Equality of Variances,,t-test for Equality of Means,,,,,,
+,,,,,,,,,95% Confidence Interval of the Difference,
+,,F,Sig.,t,df,Sig. (2-tailed),Mean Difference,Std. Error Difference,Lower,Upper
+dep1,Equal variances assumed,2.00,.23,-1.73,4.00,.16,-1.00,.58,-2.60,.60
+,Equal variances not assumed,,,-1.73,3.20,.18,-1.00,.58,-2.77,.77
+dep2,Equal variances assumed,.00,1.00,3.67,4.00,.02,3.00,.82,.73,5.27
+,Equal variances not assumed,,,3.67,4.00,.02,3.00,.82,.73,5.27
+])
+AT_CHECK([pspp -o ref.csv ref.sps])
+AT_CHECK([cat ref.csv], [0], [expout])
+AT_DATA([missing.sps], [dnl
+data list list /id * indep * dep1 * dep2 *.
+begin data.
+1 1.0 3.5 6
+2 1.0 2.0 5
+3 1.0 2.0 4
+4 2.0 3.5 3
+5 2.0 3.0 2
+6 2.0 4.0 1
+7 2.0 .   0
+end data.
+
+t-test /missing=listwise,exclude /group=indep /var=dep1, dep2.
+])
+AT_CHECK([pspp -o missing.csv missing.sps])
+AT_CHECK([cat missing.csv], [0], [expout])
+AT_CLEANUP
+
+AT_SETUP([T-TEST /TESTVAL])
+AT_DATA([t-test.sps], [dnl
+data list list /ID * ABC *.
+begin data.
+1 3.5
+2 2.0
+3 2.0
+4 3.5
+5 3.0
+6 4.0
+end data.
+
+t-test /testval=2.0 /var=abc.
+])
+AT_CHECK([pspp -o pspp.csv t-test.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+ID,F8.0
+ABC,F8.0
+
+Table: One-Sample Statistics
+,N,Mean,Std. Deviation,S.E. Mean
+ABC,6,3.00,.84,.34
+
+Table: One-Sample Test
+,Test Value = 2.000000,,,,,
+,,,,,95% Confidence Interval of the Difference,
+,t,df,Sig. (2-tailed),Mean Difference,Lower,Upper
+ABC,2.93,5,.03,1.00,.12,1.88
+])
+AT_CLEANUP
+
+AT_SETUP([T-TEST /TESTVAL with per-analysis missing values])
+AT_DATA([ref.sps], [dnl
+data list list /id * x1 * x2.
+begin data.
+1 3.5 34
+2 2.0 10
+3 2.0 23
+4 3.5 98
+5 3.0 23
+67 4.0 8
+end data.
+
+t-test /testval=3.0 /var=x1 x2.
+])
+AT_DATA([expout], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+id,F8.0
+x1,F8.0
+x2,F8.0
+
+Table: One-Sample Statistics
+,N,Mean,Std. Deviation,S.E. Mean
+x1,6,3.00,.84,.34
+x2,6,32.67,33.40,13.64
+
+Table: One-Sample Test
+,Test Value = 3.000000,,,,,
+,,,,,95% Confidence Interval of the Difference,
+,t,df,Sig. (2-tailed),Mean Difference,Lower,Upper
+x1,.00,5,1.00,.00,-.88,.88
+x2,2.18,5,.08,29.67,-5.39,64.72
+])
+AT_CHECK([pspp -o ref.csv ref.sps])
+AT_CHECK([cat ref.csv], [0], [expout])
+AT_DATA([missing.sps], [dnl
+data list list /id * x1 * x2.
+begin data.
+1 3.5 34
+2 2.0 10
+3 2.0 23
+4 3.5 98
+5 3.0 23
+6 4.0 .
+7  .  8
+end data.
+
+t-test /missing=analysis /testval=3.0 /var=x1 x2.
+])
+AT_CHECK([pspp -o missing.csv missing.sps])
+AT_CHECK([cat missing.csv], [0], [expout])
+AT_CLEANUP
+
+AT_SETUP([T-TEST /TESTVAL with listwise missing values])
+AT_DATA([ref.sps], [dnl
+data list list /id * x1 * x2.
+begin data.
+1 3.5 34
+2 2.0 10
+3 2.0 23
+4 3.5 98
+5 3.0 23
+end data.
+
+t-test /testval=3.0 /var=x1 x2.
+])
+AT_DATA([expout], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+id,F8.0
+x1,F8.0
+x2,F8.0
+
+Table: One-Sample Statistics
+,N,Mean,Std. Deviation,S.E. Mean
+x1,5,2.80,.76,.34
+x2,5,37.60,34.82,15.57
+
+Table: One-Sample Test
+,Test Value = 3.000000,,,,,
+,,,,,95% Confidence Interval of the Difference,
+,t,df,Sig. (2-tailed),Mean Difference,Lower,Upper
+x1,-.59,4,.59,-.20,-1.14,.74
+x2,2.22,4,.09,34.60,-8.63,77.83
+])
+AT_CHECK([pspp -o ref.csv ref.sps])
+AT_CHECK([cat ref.csv], [0], [expout])
+AT_DATA([missing.sps], [dnl
+data list list /id * x1 * x2.
+begin data.
+1 3.5 34
+2 2.0 10
+3 2.0 23
+4 3.5 98
+5 3.0 23
+6 4.0 99
+end data.
+
+MISSING VALUES x2(99).
+
+t-test /missing=listwise /testval=3.0 /var=x1 x2.
+])
+AT_CHECK([pspp -o missing.csv missing.sps])
+AT_CHECK([cat missing.csv], [0], [expout])
+AT_CLEANUP
+
+AT_SETUP([T-TEST wih TEMPORARY transformation])
+AT_DATA([ref.sps], [dnl
+data list list /ind * x * .
+begin data.
+1 3.5
+1 2.0
+1 2.0
+2 3.5
+2 3.0
+2 4.0
+end data.
+
+t-test /groups=ind(1,2) /var x.
+])
+AT_DATA([expout], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+ind,F8.0
+x,F8.0
+
+Table: Group Statistics
+,ind,N,Mean,Std. Deviation,S.E. Mean
+x,1,3,2.50,.87,.50
+,2,3,3.50,.50,.29
+
+Table: Independent Samples Test
+,,Levene's Test for Equality of Variances,,t-test for Equality of Means,,,,,,
+,,,,,,,,,95% Confidence Interval of the Difference,
+,,F,Sig.,t,df,Sig. (2-tailed),Mean Difference,Std. Error Difference,Lower,Upper
+x,Equal variances assumed,2.00,.23,-1.73,4.00,.16,-1.00,.58,-2.60,.60
+,Equal variances not assumed,,,-1.73,3.20,.18,-1.00,.58,-2.77,.77
+])
+AT_CHECK([pspp -o ref.csv ref.sps])
+AT_CHECK([cat ref.csv], [0], [expout])
+AT_DATA([temporary.sps], [dnl
+data list list /ind * x * .
+begin data.
+1 3.5
+1 2.0
+1 2.0
+2 3.5
+2 3.0
+2 4.0
+2 9.0
+end data.
+
+TEMPORARY.
+SELECT IF x < 7.
+
+t-test /groups=ind(1,2) /var x.
+])
+AT_CHECK([pspp -o temporary.csv temporary.sps])
+AT_CHECK([cat temporary.csv], [0], [expout])
+AT_CLEANUP
+
+dnl Tests for a bug which caused T-TEST to crash when given invalid syntax.
+AT_SETUP([T-TEST invalid syntax])
+AT_DATA([t-test.sps], [dnl
+DATA LIST LIST NOTABLE /id * a * .
+BEGIN DATA.
+1 3.5
+2 2.0
+3 2.0
+4 3.5
+5 3.0
+6 4.0
+END DATA.
+
+T-TEST /testval=2.0 .
+T-TEST /groups=id(3) .
+])
+AT_CHECK([pspp -O format=csv t-test.sps], [1], [dnl
+t-test.sps:11: error: T-TEST: One or more VARIABLES must be specified.
+
+t-test.sps:12: error: T-TEST: One or more VARIABLES must be specified.
+])
+AT_CLEANUP
+
+dnl Tests for bug #11227, exhibited when the independent variable is a string.
+AT_SETUP([T-TEST string variable])
+AT_DATA([t-test.sps], [dnl
+data list list /ID * INDEP (a1) DEP1 * DEP2 *.
+begin data.
+1  'a' 1 3
+2  'a' 2 4
+3  'a' 2 4 
+4  'a' 2 4 
+5  'a' 3 5
+6  'b' 3 1
+7  'b' 4 2
+8  'b' 4 2
+9  'b' 4 2
+10 'b' 5 3
+11 'c' 2 2
+end data.
+
+
+t-test /GROUPS=indep('a','b') /var=dep1 dep2.
+])
+AT_CHECK([pspp -o pspp.csv t-test.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+ID,F8.0
+INDEP,A1
+DEP1,F8.0
+DEP2,F8.0
+
+Table: Group Statistics
+,INDEP,N,Mean,Std. Deviation,S.E. Mean
+DEP1,a,5,2.00,.71,.32
+,b,5,4.00,.71,.32
+DEP2,a,5,4.00,.71,.32
+,b,5,2.00,.71,.32
+
+Table: Independent Samples Test
+,,Levene's Test for Equality of Variances,,t-test for Equality of Means,,,,,,
+,,,,,,,,,95% Confidence Interval of the Difference,
+,,F,Sig.,t,df,Sig. (2-tailed),Mean Difference,Std. Error Difference,Lower,Upper
+DEP1,Equal variances assumed,.00,1.00,-4.47,8.00,.00,-2.00,.45,-3.03,-.97
+,Equal variances not assumed,,,-4.47,8.00,.00,-2.00,.45,-3.03,-.97
+DEP2,Equal variances assumed,.00,1.00,4.47,8.00,.00,2.00,.45,.97,3.03
+,Equal variances not assumed,,,4.47,8.00,.00,2.00,.45,.97,3.03
+])
+AT_CLEANUP
+
+AT_SETUP([T-TEST string variable, only one value])
+AT_DATA([t-test.sps], [dnl
+data list list notable /id * indep (a1) dep1 * dep2 *.
+begin data.
+1  'a' 1 3
+2  'a' 2 4
+3  'a' 2 4 
+4  'a' 2 4 
+5  'a' 3 5
+6  'b' 3 1
+7  'b' 4 2
+8  'b' 4 2
+9  'b' 4 2
+10 'b' 5 3
+11 'c' 2 2
+end data.
+
+
+t-test /GROUPS=indep('a') /var=dep1 dep2.
+])
+AT_CHECK([pspp -O format=csv t-test.sps], [1], [dnl
+"t-test.sps:17: error: T-TEST: When applying GROUPS to a string variable, two values must be specified."
+])
+AT_CLEANUP
+
+dnl Tests for a bug which didn't properly compare string values.
+AT_SETUP([T-TEST string variable comparison bug])
+AT_DATA([t-test.sps], [dnl
+data list list /x * gv (a8).
+begin data.
+3   One
+2   One
+3   One
+2   One
+3   One
+4   Two
+3.5 Two
+3.0 Two
+end data.
+
+t-test group=gv('One', 'Two')
+       /variables = x.
+])
+AT_CHECK([pspp -o pspp.csv t-test.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+x,F8.0
+gv,A8
+
+Table: Group Statistics
+,gv,N,Mean,Std. Deviation,S.E. Mean
+x,One     ,5,2.60,.55,.24
+,Two     ,3,3.50,.50,.29
+
+Table: Independent Samples Test
+,,Levene's Test for Equality of Variances,,t-test for Equality of Means,,,,,,
+,,,,,,,,,95% Confidence Interval of the Difference,
+,,F,Sig.,t,df,Sig. (2-tailed),Mean Difference,Std. Error Difference,Lower,Upper
+x,Equal variances assumed,1.13,.33,-2.32,6.00,.06,-.90,.38,-1.83,.03
+,Equal variances not assumed,,,-2.38,4.70,.07,-.90,.38,-1.89,.09
+])
+AT_CLEANUP
+
diff --git a/tests/language/utilities/date.at b/tests/language/utilities/date.at
new file mode 100644 (file)
index 0000000..ab1ca12
--- /dev/null
@@ -0,0 +1,36 @@
+AT_BANNER([USE])
+
+AT_SETUP([USE ALL])
+AT_DATA([use.sps], [dnl
+data list notable /X 1-2.
+begin data.
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+end data.
+use all.
+list.
+])
+AT_CHECK([pspp -o pspp.csv use.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+X
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+])
+AT_CLEANUP
diff --git a/tests/language/utilities/insert.at b/tests/language/utilities/insert.at
new file mode 100644 (file)
index 0000000..e119f10
--- /dev/null
@@ -0,0 +1,163 @@
+AT_BANNER([INSERT])
+
+dnl Create a file "batch.sps" that is valid syntax only in batch mode.
+m4_define([CREATE_BATCH_SPS], 
+  [AT_DATA([batch.sps], [dnl
+input program.
++  loop #i = 1 to 5.
++    compute z = #i
++    end case.
++  end loop
+end file.
+end input program.
+])])
+
+AT_SETUP([INSERT SYNTAX=INTERACTIVE])
+CREATE_BATCH_SPS
+AT_DATA([insert.sps], [dnl
+INSERT 
+  FILE='batch.sps'
+  SYNTAX=INTERACTIVE.
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv insert.sps], [1], [dnl
+batch.sps:2: error: INPUT PROGRAM: Syntax error at `+': expecting command name.
+batch.sps:3: error: INPUT PROGRAM: Syntax error at `+': expecting command name.
+batch.sps:5: error: INPUT PROGRAM: Syntax error at `+': expecting command name.
+batch.sps:7: error: Input program did not create any variables.
+insert.sps:4: error: LIST: LIST is allowed only after the active file has been defined.
+])
+AT_CLEANUP
+
+AT_SETUP([INSERT SYNTAX=BATCH])
+CREATE_BATCH_SPS
+AT_DATA([insert.sps], [dnl
+INSERT 
+  FILE='batch.sps'
+  SYNTAX=BATCH.
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv insert.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+z
+1.00
+2.00
+3.00
+4.00
+5.00
+])
+AT_CLEANUP
+
+AT_SETUP([INSERT CD=NO])
+AT_DATA([insert.sps], [INSERT FILE='Dir1/foo.sps'.
+LIST.
+])
+mkdir Dir1
+AT_DATA([Dir1/foo.sps], [INSERT FILE='bar.sps' CD=NO.
+])
+AT_DATA([Dir1/bar.sps],
+  [DATA LIST LIST /x *.
+BEGIN DATA.
+1
+2
+3
+END DATA.
+])
+AT_CHECK([pspp -o pspp.csv insert.sps], [1], [dnl
+Dir1/foo.sps:1: error: INSERT: Can't find `bar.sps' in include file search path.
+insert.sps:2: error: LIST: LIST is allowed only after the active file has been defined.
+])
+AT_CLEANUP
+
+AT_SETUP([INSERT CD=YES])
+AT_DATA([insert.sps], [INSERT FILE='Dir1/foo.sps' CD=YES.
+LIST.
+])
+mkdir Dir1
+AT_DATA([Dir1/foo.sps], [INSERT FILE='bar.sps'.
+])
+AT_DATA([Dir1/bar.sps],
+  [DATA LIST LIST /x *.
+BEGIN DATA.
+1
+2
+3
+END DATA.
+])
+AT_CHECK([pspp -o pspp.csv insert.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Reading free-form data from INLINE.
+Variable,Format
+x,F8.0
+
+Table: Data List
+x
+1.00
+2.00
+3.00
+])
+AT_CLEANUP
+
+m4_define([CREATE_ERROR_SPS],
+  [AT_DATA([error.sps], [dnl
+DATA LIST NOTABLE LIST /x *.
+BEGIN DATA.
+1
+2
+3
+END DATA.
+
+* The following line is erroneous
+
+DISPLAY AKSDJ.
+])])
+
+AT_SETUP([INSERT ERROR=STOP])
+CREATE_ERROR_SPS
+AT_DATA([insert.sps], [INSERT FILE='error.sps' ERROR=STOP.
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv insert.sps], [1], [dnl
+error.sps:10: error: DISPLAY: AKSDJ is not a variable name.
+warning: Error encountered while ERROR=STOP is effective.
+error.sps:10: error: Stopping syntax file processing here to avoid a cascade of dependent command failures.
+])
+AT_CLEANUP
+
+AT_SETUP([INSERT ERROR=CONTINUE])
+CREATE_ERROR_SPS
+AT_DATA([insert.sps], [INSERT FILE='error.sps' ERROR=CONTINUE.
+LIST.
+])
+AT_CHECK([pspp -o pspp.csv insert.sps], [1], [dnl
+error.sps:10: error: DISPLAY: AKSDJ is not a variable name.
+])
+AT_CHECK([cat pspp.csv], [0], [dnl
+error.sps:10: error: DISPLAY: AKSDJ is not a variable name.
+
+Table: Data List
+x
+1.00
+2.00
+3.00
+])
+AT_CLEANUP
+
+dnl Test for regression against bug #24569 in which PSPP crashed
+dnl upon attempt to insert a nonexistent file.
+AT_SETUP([INSERT nonexistent file])
+AT_DATA([insert.sps], [dnl
+INSERT 
+  FILE='nonexistent'
+  ERROR=CONTINUE.
+  .
+
+LIST.
+])
+AT_CHECK([pspp -O format=csv insert.sps], [1], [dnl
+insert.sps:3: error: INSERT: Can't find `nonexistent' in include file search path.
+
+insert.sps:6: error: LIST: LIST is allowed only after the active file has been defined.
+])
+AT_CLEANUP
diff --git a/tests/language/utilities/permissions.at b/tests/language/utilities/permissions.at
new file mode 100644 (file)
index 0000000..873057c
--- /dev/null
@@ -0,0 +1,25 @@
+AT_BANNER([PERMISSIONS])
+
+AT_SETUP([PERMISSIONS])
+AT_DATA([foobar], [Hello
+])
+
+chmod 666 foobar
+AT_CHECK([ls -l foobar], [0], [stdout])
+AT_CHECK([sed 's/^\(..........\).*/\1/' stdout], [0], [-rw-rw-rw-
+])
+
+AT_DATA([permissions.sps], [PERMISSIONS /FILE='foobar' PERMISSIONS=READONLY.
+])
+AT_CHECK([pspp -O format=csv permissions.sps])
+AT_CHECK([ls -l foobar], [0], [stdout])
+AT_CHECK([sed 's/^\(..........\).*/\1/' stdout], [0], [-r--r--r--
+])
+
+AT_DATA([permissions.sps], [PERMISSIONS /FILE='foobar' PERMISSIONS=WRITEABLE.
+])
+AT_CHECK([pspp -O format=csv permissions.sps])
+AT_CHECK([ls -l foobar], [0], [stdout])
+AT_CHECK([sed 's/^\(..........\).*/\1/' stdout], [0], [-rw-r--r--
+])
+AT_CLEANUP
index e1b92573f31e910e32540d3846d54e85fdf21a05..b281ae4e1d6c88c191231e6efc39ee5529a5e471 100644 (file)
@@ -45,11 +45,11 @@ list.
 ])
 
 AT_CHECK([pspp -O format=csv set.pspp], [0], [dnl
-"set.pspp:5: warning: (column 3, F field) Field contents are not numeric."
+set.pspp:5.3: warning: Data for variable y is not valid as format F: Field contents are not numeric.
 
-"set.pspp:6: warning: (column 3, F field) Field contents are not numeric."
+set.pspp:6.3: warning: Data for variable y is not valid as format F: Field contents are not numeric.
 
-"set.pspp:7: warning: (column 1, F field) Field contents are not numeric."
+set.pspp:7.1: warning: Data for variable x is not valid as format F: Field contents are not numeric.
 
 note: Warnings (3) exceed limit (2).  Syntax processing will be halted.
 ])
@@ -92,3 +92,23 @@ x,y,z
 ])
 
 AT_CLEANUP
+\f
+AT_BANNER([PRESERVE and RESTORE])
+
+AT_SETUP([PRESERVE of SET FORMAT])
+AT_DATA([set.pspp], [dnl
+SHOW FORMAT.
+PRESERVE.
+SET FORMAT F10.0.
+SHOW FORMAT
+RESTORE.
+SHOW FORMAT.
+])
+AT_CHECK([pspp -O format=csv set.pspp], [0], [dnl
+set.pspp:1: note: SHOW: FORMAT is F8.2.
+
+set.pspp:5: note: SHOW: FORMAT is F10.0.
+
+set.pspp:6: note: SHOW: FORMAT is F8.2.
+])
+AT_CLEANUP
diff --git a/tests/language/utilities/title.at b/tests/language/utilities/title.at
new file mode 100644 (file)
index 0000000..515bff5
--- /dev/null
@@ -0,0 +1,145 @@
+AT_BANNER([TITLE and related commands])
+
+AT_SETUP([FILE LABEL and (ADD) DOCUMENT])
+AT_DATA([file-label.sps], [dnl
+/* Set up a dummy active file in memory.
+data list /X 1 Y 2.
+begin data.
+16
+27
+38
+49
+50
+end data.
+
+/* Add value labels for some further testing of value labels.
+value labels x y 1 'first label' 2 'second label' 3 'third label'.
+add value labels x 1 'first label mark two'.
+
+/* Add a file label and a few documents.
+file label This is a test file label.
+document First line of a document
+Second line of a document
+The last line should end with a period: .
+
+
+/* Display the documents.
+display documents.
+display file label.
+
+ADD DOCUMENT 'Line one' 'Line two'.
+
+/* Save the active file then get it and display the documents again.
+save /OUTFILE='foo.save'.
+get /FILE='foo.save'.
+display documents.
+display file label.
+
+/* There is an interesting interaction that occurs if the 'execute'
+/* command below.  What happens is that an error message is output
+/* at the next 'save' command that 'foo.save' is already open for
+/* input.  This is because the 'get' hasn't been executed yet and
+/* therefore PSPP would be reading from and writing to the same
+/* file at once, which is obviously a Bad Thing.  But 'execute'
+/* here clears up that potential problem.
+execute.
+
+/* Add another (shorter) document and try again.
+document There should be another document now.
+display documents.
+
+/* Save and get.
+save /OUTFILE='foo.save'.
+get /FILE='foo.save'.
+display documents.
+display file label.
+
+/* Done.
+])
+AT_CHECK([pspp -o pspp.csv file-label.sps])
+dnl Filter out the dates/times
+AT_CHECK([[sed 's/(Entered [^)]*)/(Entered <date>)/' pspp.csv]], [0], [dnl
+Table: Reading 1 record from INLINE.
+Variable,Record,Columns,Format
+X,1,1-  1,F1.0
+Y,1,2-  2,F1.0
+
+Documents in the active file:
+
+document First line of a document
+
+Second line of a document
+
+The last line should end with a period: .
+
+(Entered <date>)
+
+File label:
+
+This is a test file label
+
+Documents in the active file:
+
+document First line of a document
+
+Second line of a document
+
+The last line should end with a period: .
+
+(Entered <date>)
+
+Line one
+
+Line two
+
+(Entered <date>)
+
+File label:
+
+This is a test file label
+
+Documents in the active file:
+
+document First line of a document
+
+Second line of a document
+
+The last line should end with a period: .
+
+(Entered <date>)
+
+Line one
+
+Line two
+
+(Entered <date>)
+
+document There should be another document now.
+
+(Entered <date>)
+
+Documents in the active file:
+
+document First line of a document
+
+Second line of a document
+
+The last line should end with a period: .
+
+(Entered <date>)
+
+Line one
+
+Line two
+
+(Entered <date>)
+
+document There should be another document now.
+
+(Entered <date>)
+
+File label:
+
+This is a test file label
+])
+AT_CLEANUP
diff --git a/tests/language/xforms/sample.at b/tests/language/xforms/sample.at
new file mode 100644 (file)
index 0000000..912fb4f
--- /dev/null
@@ -0,0 +1,36 @@
+AT_BANNER([SAMPLE])
+
+AT_SETUP([SAMPLE])
+AT_DATA([sample.sps], [dnl
+set seed=3
+
+data list notable /A 1-2.
+begin data.
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+end data.
+sample .5.
+list.
+])
+AT_CHECK([pspp -o pspp.csv sample.sps])
+AT_CAPTURE_FILE([pspp.csv])
+AT_CHECK(
+  [n=0
+   while read line; do
+     n=`expr $n + 1`
+     case $line in # (
+       "Table: Data List" | A | [[0-9]] | 10) ;; # (
+       *) echo $line; exit 1;
+     esac
+   done < pspp.csv
+   if test $n -ge 11; then exit 1; fi
+  ])
+AT_CLEANUP
diff --git a/tests/language/xforms/select-if.at b/tests/language/xforms/select-if.at
new file mode 100644 (file)
index 0000000..44ac01d
--- /dev/null
@@ -0,0 +1,59 @@
+AT_BANNER([FILTER])
+
+AT_SETUP([FILTER])
+AT_DATA([filter.sps], [dnl
+data list notable /X 1-2.
+begin data.
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+end data.
+compute FILTER_$ = mod(x,2).
+
+filter by filter_$.
+list.
+filter off.
+list.
+compute filter_$ = 1 - filter_$.
+filter by filter_$.
+list.
+])
+AT_CHECK([pspp -o pspp.csv filter.sps])
+AT_CHECK([cat pspp.csv], [0], [dnl
+Table: Data List
+X,FILTER_$
+1,1.00
+3,1.00
+5,1.00
+7,1.00
+9,1.00
+
+Table: Data List
+X,FILTER_$
+1,1.00
+2,.00
+3,1.00
+4,.00
+5,1.00
+6,.00
+7,1.00
+8,.00
+9,1.00
+10,.00
+
+Table: Data List
+X,FILTER_$
+2,1.00
+4,1.00
+6,1.00
+8,1.00
+10,1.00
+])
+AT_CLEANUP
index f6def5a9fe67ff3c2945bac24c61f56b471783aa..8bbe7d76e401af79d6a93a10560ce942552415fa 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2007 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2010 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
@@ -35,9 +35,6 @@
 
 #include <libpspp/compiler.h>
 \f
-/* Currently running test. */
-static const char *test_name;
-
 /* Exit with a failure code.
    (Place a breakpoint on this function while debugging.) */
 static void
@@ -53,8 +50,7 @@ check_func (bool ok, int line)
 {
   if (!ok)
     {
-      printf ("Check failed in %s test at %s, line %d\n",
-              test_name, __FILE__, line);
+      fprintf (stderr, "%s:%d: check failed\n", __FILE__, line);
       check_die ();
     }
 }
@@ -753,32 +749,84 @@ test_changed (void)
 \f
 /* Main program. */
 
-/* Runs TEST_FUNCTION and prints a message about NAME. */
-static void
-run_test (void (*test_function) (void), const char *name)
-{
-  test_name = name;
-  putchar ('.');
-  fflush (stdout);
-  test_function ();
-}
+struct test
+  {
+    const char *name;
+    const char *description;
+    void (*function) (void);
+  };
+
+static const struct test tests[] =
+  {
+    {
+      "insert-any-remove-any",
+      "insert any order, delete any order",
+      test_insert_any_remove_any
+    },
+    {
+      "insert-any-remove-same",
+      "insert any order, delete same order",
+      test_insert_any_remove_same
+    },
+    {
+      "insert-any-remove-reverse",
+      "insert any order, delete reverse order",
+      test_insert_any_remove_reverse
+    },
+    {
+      "random-sequence",
+      "insert and delete in random sequence",
+      test_random_sequence
+    },
+    {
+      "insert-ordered",
+      "insert in ascending order",
+      test_insert_ordered
+    },
+    {
+      "moved",
+      "move elements around in memory",
+      test_moved
+    },
+    {
+      "changed",
+      "change key data in nodes",
+      test_changed
+    }
+  };
+
+enum { N_TESTS = sizeof tests / sizeof *tests };
 
 int
-main (void)
+main (int argc, char *argv[])
 {
-  run_test (test_insert_any_remove_any,
-            "insert any order, delete any order");
-  run_test (test_insert_any_remove_same,
-            "insert any order, delete same order");
-  run_test (test_insert_any_remove_reverse,
-            "insert any order, delete reverse order");
-  run_test (test_random_sequence,
-            "insert and delete in random sequence");
-  run_test (test_insert_ordered,
-            "insert in ascending order");
-  run_test (test_moved, "move elements around in memory");
-  run_test (test_changed, "change key data in nodes");
-  putchar ('\n');
-
-  return 0;
+  int i;
+
+  if (argc != 2)
+    {
+      fprintf (stderr, "exactly one argument required; use --help for help\n");
+      return EXIT_FAILURE;
+    }
+  else if (!strcmp (argv[1], "--help"))
+    {
+      printf ("%s: test augmented binary tree\n"
+              "usage: %s TEST-NAME\n"
+              "where TEST-NAME is one of the following:\n",
+              argv[0], argv[0]);
+      for (i = 0; i < N_TESTS; i++)
+        printf ("  %s\n    %s\n", tests[i].name, tests[i].description);
+      return 0;
+    }
+  else
+    {
+      for (i = 0; i < N_TESTS; i++)
+        if (!strcmp (argv[1], tests[i].name))
+          {
+            tests[i].function ();
+            return 0;
+          }
+
+      fprintf (stderr, "unknown test %s; use --help for help\n", argv[1]);
+      return EXIT_FAILURE;
+    }
 }
diff --git a/tests/libpspp/abt.at b/tests/libpspp/abt.at
new file mode 100644 (file)
index 0000000..deb6946
--- /dev/null
@@ -0,0 +1,14 @@
+AT_BANNER([Augmented binary tree (ABT) library])
+
+m4_define([CHECK_ABT],
+  [AT_SETUP([ABT -- $1])
+   AT_CHECK([abt-test $1])
+   AT_CLEANUP])
+
+CHECK_ABT([insert-any-remove-any])
+CHECK_ABT([insert-any-remove-same])
+CHECK_ABT([insert-any-remove-reverse])
+CHECK_ABT([random-sequence])
+CHECK_ABT([insert-ordered])
+CHECK_ABT([moved])
+CHECK_ABT([changed])
index 2d59fb9a5dc0191d05704fadfde6eb792ff9aa89..42cfbeabef429044095ceeeb41b277065fb59aff 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2007 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2010 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
@@ -36,9 +36,6 @@
 
 #include <libpspp/compiler.h>
 \f
-/* Currently running test. */
-static const char *test_name;
-
 /* Exit with a failure code.
    (Place a breakpoint on this function while debugging.) */
 static void
@@ -54,8 +51,7 @@ check_func (bool ok, int line)
 {
   if (!ok)
     {
-      printf ("Check failed in %s test at %s, line %d\n",
-              test_name, __FILE__, line);
+      fprintf (stderr, "%s:%d: check failed\n", __FILE__, line);
       check_die ();
     }
 }
@@ -704,33 +700,89 @@ test_changed (void)
 \f
 /* Main program. */
 
-/* Runs TEST_FUNCTION and prints a message about NAME. */
-static void
-run_test (void (*test_function) (void), const char *name)
-{
-  test_name = name;
-  putchar ('.');
-  fflush (stdout);
-  test_function ();
-}
+struct test
+  {
+    const char *name;
+    const char *description;
+    void (*function) (void);
+  };
+
+static const struct test tests[] =
+  {
+    {
+      "insert-any-remove-any",
+      "insert any order, delete any order",
+      test_insert_any_remove_any
+    },
+    {
+      "insert-any-remove-same",
+      "insert any order, delete same order",
+      test_insert_any_remove_same
+    },
+    {
+      "insert-any-remove-reverse",
+      "insert any order, delete reverse order",
+      test_insert_any_remove_reverse
+    },
+    {
+      "random-sequence",
+      "insert and delete in random sequence",
+      test_random_sequence
+    },
+    {
+      "insert-ordered",
+      "insert in ascending order",
+      test_insert_ordered
+    },
+    {
+      "find-ge-le",
+      "find_ge and find_le",
+      test_find_ge_le
+    },
+      {
+      "moved",
+      "move elements around in memory",
+      test_moved
+    },
+    {
+      "changed",
+      "change key data in nodes",
+      test_changed
+    }
+  };
+
+enum { N_TESTS = sizeof tests / sizeof *tests };
 
 int
-main (void)
+main (int argc, char *argv[])
 {
-  run_test (test_insert_any_remove_any,
-            "insert any order, delete any order");
-  run_test (test_insert_any_remove_same,
-            "insert any order, delete same order");
-  run_test (test_insert_any_remove_reverse,
-            "insert any order, delete reverse order");
-  run_test (test_random_sequence,
-            "insert and delete in random sequence");
-  run_test (test_insert_ordered,
-            "insert in ascending order");
-  run_test (test_find_ge_le, "find_ge and find_le");
-  run_test (test_moved, "move elements around in memory");
-  run_test (test_changed, "change key data in nodes");
-  putchar ('\n');
-
-  return 0;
+  int i;
+
+  if (argc != 2)
+    {
+      fprintf (stderr, "exactly one argument required; use --help for help\n");
+      return EXIT_FAILURE;
+    }
+  else if (!strcmp (argv[1], "--help"))
+    {
+      printf ("%s: test balanced tree\n"
+              "usage: %s TEST-NAME\n"
+              "where TEST-NAME is one of the following:\n",
+              argv[0], argv[0]);
+      for (i = 0; i < N_TESTS; i++)
+        printf ("  %s\n    %s\n", tests[i].name, tests[i].description);
+      return 0;
+    }
+  else
+    {
+      for (i = 0; i < N_TESTS; i++)
+        if (!strcmp (argv[1], tests[i].name))
+          {
+            tests[i].function ();
+            return 0;
+          }
+
+      fprintf (stderr, "unknown test %s; use --help for help\n", argv[1]);
+      return EXIT_FAILURE;
+    }
 }
diff --git a/tests/libpspp/bt.at b/tests/libpspp/bt.at
new file mode 100644 (file)
index 0000000..62eb80f
--- /dev/null
@@ -0,0 +1,15 @@
+AT_BANNER([Balanced tree (BT) library])
+
+m4_define([CHECK_BT],
+  [AT_SETUP([BT -- $1])
+   AT_CHECK([bt-test $1])
+   AT_CLEANUP])
+
+CHECK_BT([insert-any-remove-any])
+CHECK_BT([insert-any-remove-same])
+CHECK_BT([insert-any-remove-reverse])
+CHECK_BT([random-sequence])
+CHECK_BT([insert-ordered])
+CHECK_BT([find-ge-le])
+CHECK_BT([moved])
+CHECK_BT([changed])
diff --git a/tests/libpspp/float-format.at b/tests/libpspp/float-format.at
new file mode 100644 (file)
index 0000000..a00a353
--- /dev/null
@@ -0,0 +1,97 @@
+AT_BANNER([floating point formats])
+
+AT_SETUP([floating point format conversions])
+AT_DATA([float-format.txt], [dnl
+# Each of the tests below checks that conversion between
+# floating-point formats works correctly.  Comparisons that use ==
+# require that conversion from any format on the line to any other
+# format on the line work losslessly.  Comparisons that use => only
+# check that conversions work losslessly in the given direction.
+
+# Key to format names:
+# isl: IEEE single-precision, little endian
+# isb: IEEE single-precision, big endian
+# idl: IEEE double-precision, little endian
+# idb: IEEE double-precision, big endian
+# vf: VAX F
+# vd: VAX D
+# vg: VAX G
+# zs: Z architecture short
+# zl: Z architecture long
+# x: hexadecimal digits
+
+# IEEE special values.
+ 0 == isb(x'00000000')
+x('Infinity') == isb(x'7f800000')
+x('-Infinity') == isb(x'ff800000')
+x('NaN:') => isb(x'7f800001')          # NaN requires nonzero fraction.
+x('NaN:e000000000000000') == isb(x'7ff00000') == idb(x'7ffe000000000000')
+x('NaN:5a5a5e0000000000') == isb(x'7fad2d2f') == idb(x'7ff5a5a5e0000000')
+x('NaN:975612abcdef4000') == idb(x'7ff975612abcdef4')
+x('-NaN:e000000000000000') == isb(x'fff00000') == idb(x'fffe000000000000')
+x('-NaN:5a5a5e0000000000') == isb(x'ffad2d2f') == idb(x'fff5a5a5e0000000')
+x('-NaN:975612abcdef4000') == idb(x'fff975612abcdef4')
+
+# PSPP special values.
+x('Missing') == isb(x'ff7fffff') == idb(x'ffefffffffffffff') == isl(x'ffff7fff') == idl(x'ffffffffffffefff') == vf(x'ffffffff') == vd(x'ffffffffffffffff') == vg(x'ffffffffffffffff') == zs(x'ffffffff') == zl(x'ffffffffffffffff')
+x('Lowest') == isb(x'ff7ffffe') == idb(x'ffeffffffffffffe') == isl(x'feff7fff') == idl(x'feffffffffffefff') == vf(x'fffffeff') == vd(x'fffffeffffffffff') == vg(x'fffffeffffffffff') == zs(x'fffffffe') == zl(x'fffffffffffffffe')
+x('Highest') == isb(x'7f7fffff') == idb(x'7fefffffffffffff') == isl(x'ffff7f7f') == idl(x'ffffffffffffef7f') == vf(x'ff7fffff') == vd(x'ffffffffff7fffff') == vg(x'ffffffffff7fffff') == zs(x'7fffffff') == zl(x'7fffffffffffffff')
+
+# From Wikipedia.
+0.15625 == isb(b'00111110001000000000000000000000')
+-118.625 == isb(b'11000010111011010100000000000000')
+
+# http://www.psc.edu/general/software/packages/ieee/ieee.html
+x('NaN:0400000000000000') == isb(b'01111111100000100000000000000000')
+x('-NaN:2225540000000000') == isb(b'11111111100100010001001010101010')
+2 == isb(b'01000000000000000000000000000000')
+6.5 == isb(b'01000000110100000000000000000000')
+-6.5 == isb(b'11000000110100000000000000000000')
+x('.4p-124') == isb(b'00000000100000000000000000000000')
+x('.2p-124') == isb(b'00000000010000000000000000000000')
+
+# Using converter at http://babbage.cs.qc.edu/IEEE-754/Decimal.html
+# plus Emacs 'calc' to convert decimal to hexadecimal
+x('.7b74bc6a7ef9db23p8') => isb(x'42f6e979')           # 123.456
+x('.7b74bc6a7ef9db23p8') => idb(x'405edd2f1a9fbe77')
+x('.817427d2d4642004p-12') => isb(x'39017428')         # .0001234567
+x('.817427d2d4642004p-12') => idb(x'3f202e84fa5a8c84')
+x('.446c3b15f9926688p168') => isb(x'7f800000')         # 1e50; overflow
+x('.446c3b15f9926688p168') => idb(x'4a511b0ec57e649a')
+
+# From multiple editions of the z/Architecture Principles of Operation
+# manual.
+             1.0 == zs(x'41100000') == isb(x'3f800000')
+             0.5 == zs(x'40800000') == isb(x'3f000000')
+       x('.4p-4') == zs(x'3f400000') == isb(x'3c800000')
+               0 == zs(x'00000000') == isb(x'00000000')
+                    zs(x'80000000') == isb(x'80000000')
+             -15 == zs(x'c1f00000') == isb(x'c1700000')
+# x('.ffffffp252') == zs(x'7fffffff')
+      x('.3b4p8') == zs(x'423b4000')
+     x('.1p-256') == zs(x'00100000')
+     x('.4p-124') == zs(x'21400000') == isb(x'00800000')
+     x('.8p-148') == zs(x'1b800000') == isb(x'00000001')
+# x('.ffffffp128') == zs(x'60ffffff') == isb(x'7f7fffff')
+     x('.1p-256') == zs(x'00100000')
+     x('.1p-256') => isb(x'00000000')              # Underflow to zero.
+ x('.ffffffp248') == zs(x'7effffff')
+ x('.ffffffp248') => isb(x'7f800000')              # Overflow to +Infinity.
+
+            x('.4p-1020') => zl(x'0000000000000000')     # Underflow to zero.
+            x('.4p-1020') == idb(x'0010000000000000')
+            x('.4p-1072') => zl(x'0000000000000000')     # Underflow to zero.
+            x('.4p-1072') => idb(x'0000000000000001')
+x('.fffffffffffff8p1024') => zl(x'7fffffffffffffff')     # Overflow to maxval.
+x('.fffffffffffff8p1024') => idb(x'7fefffffffffffff')
+            x('.1p-256') == zl(x'0010000000000000') == idb(x'2fb0000000000000')
+ x('.ffffffffffffffp248') == zl(x'7effffffffffffff')
+ x('.ffffffffffffffp248') => idb(x'4f70000000000000')  # Loses precision.
+])
+AT_CHECK(
+  [sed 's/#.*//
+s/^[   ]*//
+s/[    ]*$//
+s/^\(..*\)$/DEBUG FLOAT FORMAT \1./' < float-format.txt > float-format.sps])
+AT_CHECK([pspp --testing-mode -O format=csv float-format.sps])
+AT_CLEANUP
index b6717df44890ad09728117727e408c765f87d7a0..d042ab5c3860d8571da151bb97757f52d6912164 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2007 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2010 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
@@ -39,9 +39,6 @@
 
 #include "xalloc.h"
 \f
-/* Currently running test. */
-static const char *test_name;
-
 /* Exit with a failure code.
    (Place a breakpoint on this function while debugging.) */
 static void
@@ -57,8 +54,7 @@ check_func (bool ok, int line)
 {
   if (!ok)
     {
-      printf ("Check failed in %s test at %s, line %d\n",
-              test_name, __FILE__, line);
+      fprintf (stderr, "%s:%d: check failed\n", __FILE__, line);
       check_die ();
     }
 }
@@ -649,28 +645,74 @@ test_random_insert_delete (void)
 \f
 /* Main program. */
 
-/* Runs TEST_FUNCTION and prints a message about NAME. */
-static void
-run_test (void (*test_function) (void), const char *name)
-{
-  test_name = name;
-  putchar ('.');
-  fflush (stdout);
-  test_function ();
-}
+struct test
+  {
+    const char *name;
+    const char *description;
+    void (*function) (void);
+  };
+
+static const struct test tests[] =
+  {
+    {
+      "insert-no-dups-delete-min",
+      "insert (no dups), delete minimum values",
+      test_insert_no_dups_delete_min
+    },
+    {
+      "insert-with-dups-delete-min",
+      "insert with dups, delete minimum values",
+      test_insert_with_dups_delete_min
+    },
+    {
+      "insert-no-dups-delete-random",
+      "insert (no dups), delete in random order",
+      test_insert_no_dups_delete_random
+    },
+    {
+      "inc-dec",
+      "increase and decrease values",
+      test_inc_dec
+    },
+    {
+      "random-insert-delete",
+      "random insertions and deletions",
+      test_random_insert_delete
+    }
+  };
+
+enum { N_TESTS = sizeof tests / sizeof *tests };
 
 int
-main (void)
+main (int argc, char *argv[])
 {
-  run_test (test_insert_no_dups_delete_min,
-            "insert (no dups), delete minimum values");
-  run_test (test_insert_with_dups_delete_min,
-            "insert with dups, delete minimum values");
-  run_test (test_insert_no_dups_delete_random,
-            "insert (no dups), delete in random order");
-  run_test (test_inc_dec, "increase and decrease values");
-  run_test (test_random_insert_delete, "random insertions and deletions");
-  putchar ('\n');
-
-  return 0;
+  int i;
+
+  if (argc != 2)
+    {
+      fprintf (stderr, "exactly one argument required; use --help for help\n");
+      return EXIT_FAILURE;
+    }
+  else if (!strcmp (argv[1], "--help"))
+    {
+      printf ("%s: test heap library\n"
+              "usage: %s TEST-NAME\n"
+              "where TEST-NAME is one of the following:\n",
+              argv[0], argv[0]);
+      for (i = 0; i < N_TESTS; i++)
+        printf ("  %s\n    %s\n", tests[i].name, tests[i].description);
+      return 0;
+    }
+  else
+    {
+      for (i = 0; i < N_TESTS; i++)
+        if (!strcmp (argv[1], tests[i].name))
+          {
+            tests[i].function ();
+            return 0;
+          }
+
+      fprintf (stderr, "unknown test %s; use --help for help\n", argv[1]);
+      return EXIT_FAILURE;
+    }
 }
diff --git a/tests/libpspp/heap.at b/tests/libpspp/heap.at
new file mode 100644 (file)
index 0000000..14dd3a6
--- /dev/null
@@ -0,0 +1,12 @@
+AT_BANNER([Heap library])
+
+m4_define([CHECK_HEAP],
+  [AT_SETUP([heap -- $1])
+   AT_CHECK([heap-test $1])
+   AT_CLEANUP])
+
+CHECK_HEAP([insert-no-dups-delete-min])
+CHECK_HEAP([insert-with-dups-delete-min])
+CHECK_HEAP([insert-no-dups-delete-random])
+CHECK_HEAP([inc-dec])
+CHECK_HEAP([random-insert-delete])
index bbe341388a3ce530b26957afd8e89a3df586d6c1..c8619a0511f5b60545e70d574798c2392f477243 100644 (file)
@@ -99,9 +99,6 @@
 
 #include <libpspp/compiler.h>
 \f
-/* Currently running test. */
-static const char *test_name;
-
 /* Exit with a failure code.
    (Place a breakpoint on this function while debugging.) */
 static void
@@ -117,8 +114,7 @@ check_func (bool ok, int line)
 {
   if (!ok)
     {
-      printf ("Check failed in %s test at %s, line %d\n",
-              test_name, __FILE__, line);
+      fprintf (stderr, "%s:%d: check failed\n", __FILE__, line);
       check_die ();
     }
 }
@@ -667,8 +663,9 @@ test_insert_ordered (int max_elems, hash_function *hash)
   int i;
 
 #if __GNUC__ == 4 && __GNUC_MINOR__ == 3
-  return;
-#endif  /* GCC 4.3 */
+  /* This tells the Autotest framework that the test was skipped. */
+  exit (77);
+#endif
 
   hmap_init (&hmap);
   elements = xnmalloc (max_elems, sizeof *elements);
@@ -743,8 +740,9 @@ test_moved (int max_elems, hash_function *hash)
   int i, j;
 
 #if __GNUC__ == 4 && __GNUC_MINOR__ == 3
-  return;
-#endif  /* GCC 4.3 */
+  /* This tells the Autotest framework that the test was skipped. */
+  exit (77);
+#endif
 
   hmap_init (&hmap);
   e[0] = xnmalloc (max_elems, sizeof *e[0]);
@@ -882,8 +880,9 @@ test_swap (int max_elems, hash_function *hash)
   int i;
 
 #if __GNUC__ == 4 && __GNUC_MINOR__ == 3
-  return;
-#endif  /* GCC 4.3 */
+  /* This tells the Autotest framework that the test was skipped. */
+  exit (77);
+#endif
 
   hmap_init (&a);
   hmap_init (&b);
@@ -927,8 +926,9 @@ test_clear (void)
   int cnt;
 
 #if __GNUC__ == 4 && __GNUC_MINOR__ == 3
-  return;
-#endif  /* GCC 4.3 */
+  /* This tells the Autotest framework that the test was skipped. */
+  exit (77);
+#endif
 
   elements = xnmalloc (max_elems, sizeof *elements);
   values = xnmalloc (max_elems, sizeof *values);
@@ -974,83 +974,181 @@ test_shrink_empty (void)
 \f
 /* Main program. */
 
-/* Runs TEST_FUNCTION and prints a message about NAME. */
-static void
-run_test (void (*test_function) (void), const char *name)
-{
-  test_name = name;
-  putchar ('.');
-  fflush (stdout);
-  test_function ();
-}
+struct test
+  {
+    const char *name;
+    const char *description;
+    void (*function) (void);
+  };
+
+static const struct test tests[] =
+  {
+    {
+      "insert-any-remove-any-random-hash",
+      "insert any order, delete any order (random hash)",
+      test_insert_any_remove_any_random_hash
+    },
+    {
+      "insert-any-remove-any-identity-hash",
+      "insert any order, delete any order (identity hash)",
+      test_insert_any_remove_any_identity_hash
+    },
+    {
+      "insert-any-remove-any-constant-hash",
+      "insert any order, delete any order (constant hash)",
+      test_insert_any_remove_any_constant_hash
+    },
+
+    {
+      "insert-any-remove-same-random-hash",
+      "insert any order, delete same order (random hash)",
+      test_insert_any_remove_same_random_hash
+    },
+    {
+      "insert-any-remove-same-identity-hash",
+      "insert any order, delete same order (identity hash)",
+      test_insert_any_remove_same_identity_hash
+    },
+    {
+      "insert-any-remove-same-constant-hash",
+      "insert any order, delete same order (constant hash)",
+      test_insert_any_remove_same_constant_hash
+    },
+
+    {
+      "insert-any-remove-reverse-random-hash",
+      "insert any order, delete reverse order (random hash)",
+      test_insert_any_remove_reverse_random_hash
+    },
+    {
+      "insert-any-remove-reverse-identity-hash",
+      "insert any order, delete reverse order (identity hash)",
+      test_insert_any_remove_reverse_identity_hash
+    },
+    {
+      "insert-any-remove-reverse-constant-hash",
+      "insert any order, delete reverse order (constant hash)",
+      test_insert_any_remove_reverse_constant_hash
+    },
+
+    {
+      "random-sequence-random-hash",
+      "insert and delete in random sequence (random hash)",
+      test_random_sequence_random_hash
+    },
+    {
+      "random-sequence-identity-hash",
+      "insert and delete in random sequence (identity hash)",
+      test_random_sequence_identity_hash
+    },
+    {
+      "random-sequence-constant-hash",
+      "insert and delete in random sequence (constant hash)",
+      test_random_sequence_constant_hash
+    },
+
+    {
+      "insert-ordered-random-hash",
+      "insert in ascending order (random hash)",
+      test_insert_ordered_random_hash
+    },
+    {
+      "insert-ordered-identity-hash",
+      "insert in ascending order (identity hash)",
+      test_insert_ordered_identity_hash
+    },
+    {
+      "insert-ordered-constant-hash",
+      "insert in ascending order (constant hash)",
+      test_insert_ordered_constant_hash
+    },
+
+    {
+      "moved-random-hash",
+      "move elements around in memory (random hash)",
+      test_moved_random_hash
+    },
+    {
+      "moved-identity-hash",
+      "move elements around in memory (identity hash)",
+      test_moved_identity_hash
+    },
+    {
+      "moved-constant-hash",
+      "move elements around in memory (constant hash)",
+      test_moved_constant_hash
+    },
+
+    {
+      "changed-random-hash",
+      "change key data in nodes (random hash)",
+      test_changed_random_hash
+    },
+    {
+      "changed-identity-hash",
+      "change key data in nodes (identity hash)",
+      test_changed_identity_hash
+    },
+    {
+      "changed-constant-hash",
+      "change key data in nodes (constant hash)",
+      test_changed_constant_hash
+    },
+
+    {
+      "swap-random-hash",
+      "test swapping tables",
+      test_swap_random_hash
+    },
+    {
+      "clear",
+      "test clearing hash table",
+      test_clear
+    },
+    {
+      "destroy-null",
+      "test destroying null table",
+      test_destroy_null
+    },
+    {
+      "shrink-empty",
+      "test shrinking an empty table",
+      test_shrink_empty
+    },
+  };
+
+enum { N_TESTS = sizeof tests / sizeof *tests };
 
 int
-main (void)
+main (int argc, char *argv[])
 {
-  run_test (test_insert_any_remove_any_random_hash,
-            "insert any order, delete any order (random hash)");
-  run_test (test_insert_any_remove_any_identity_hash,
-            "insert any order, delete any order (identity hash)");
-  run_test (test_insert_any_remove_any_constant_hash,
-            "insert any order, delete any order (constant hash)");
-
-  run_test (test_insert_any_remove_same_random_hash,
-            "insert any order, delete same order (random hash)");
-  run_test (test_insert_any_remove_same_identity_hash,
-            "insert any order, delete same order (identity hash)");
-  run_test (test_insert_any_remove_same_constant_hash,
-            "insert any order, delete same order (constant hash)");
-
-  run_test (test_insert_any_remove_reverse_random_hash,
-            "insert any order, delete reverse order (random hash)");
-  run_test (test_insert_any_remove_reverse_identity_hash,
-            "insert any order, delete reverse order (identity hash)");
-  run_test (test_insert_any_remove_reverse_constant_hash,
-            "insert any order, delete reverse order (constant hash)");
-
-  run_test (test_random_sequence_random_hash,
-            "insert and delete in random sequence (random hash)");
-  run_test (test_random_sequence_identity_hash,
-            "insert and delete in random sequence (identity hash)");
-  run_test (test_random_sequence_constant_hash,
-            "insert and delete in random sequence (constant hash)");
-
-  run_test (test_insert_ordered_random_hash,
-            "insert in ascending order (random hash)");
-  run_test (test_insert_ordered_identity_hash,
-            "insert in ascending order (identity hash)");
-  run_test (test_insert_ordered_constant_hash,
-            "insert in ascending order (constant hash)");
-
-  run_test (test_moved_random_hash,
-            "move elements around in memory (random hash)");
-  run_test (test_moved_identity_hash,
-            "move elements around in memory (identity hash)");
-  run_test (test_moved_constant_hash,
-            "move elements around in memory (constant hash)");
-
-  run_test (test_changed_random_hash,
-            "change key data in nodes (random hash)");
-  run_test (test_changed_identity_hash,
-            "change key data in nodes (identity hash)");
-  run_test (test_changed_constant_hash,
-            "change key data in nodes (constant hash)");
-
-  run_test (test_swap_random_hash, "test swapping tables");
-
-  run_test (test_clear, "test clearing hash table");
-
-  run_test (test_destroy_null, "test destroying null table");
-  run_test (test_shrink_empty, "test shrinking an empty table");
-
-  putchar ('\n');
+  int i;
 
-#if __GNUC__ == 4 && __GNUC_MINOR__ == 3
-  /* We skipped some of the tests, so return a value that
-     Automake will interpret as "skipped", instead of one that
-     means success. */
-  return 77;
-#else
-  return 0;
-#endif
+  if (argc != 2)
+    {
+      fprintf (stderr, "exactly one argument required; use --help for help\n");
+      return EXIT_FAILURE;
+    }
+  else if (!strcmp (argv[1], "--help"))
+    {
+      printf ("%s: test hash map\n"
+              "usage: %s TEST-NAME\n"
+              "where TEST-NAME is one of the following:\n",
+              argv[0], argv[0]);
+      for (i = 0; i < N_TESTS; i++)
+        printf ("  %s\n    %s\n", tests[i].name, tests[i].description);
+      return 0;
+    }
+  else
+    {
+      for (i = 0; i < N_TESTS; i++)
+        if (!strcmp (argv[1], tests[i].name))
+          {
+            tests[i].function ();
+            return 0;
+          }
+
+      fprintf (stderr, "unknown test %s; use --help for help\n", argv[1]);
+      return EXIT_FAILURE;
+    }
 }
diff --git a/tests/libpspp/hmap.at b/tests/libpspp/hmap.at
new file mode 100644 (file)
index 0000000..feb69bf
--- /dev/null
@@ -0,0 +1,32 @@
+AT_BANNER([Hash map (hmap) library])
+
+m4_define([CHECK_HMAP],
+  [AT_SETUP([hmap -- $1])
+   AT_CHECK([hmap-test $1])
+   AT_CLEANUP])
+
+CHECK_HMAP([insert-any-remove-any-random-hash])
+CHECK_HMAP([insert-any-remove-any-identity-hash])
+CHECK_HMAP([insert-any-remove-any-constant-hash])
+CHECK_HMAP([insert-any-remove-same-random-hash])
+CHECK_HMAP([insert-any-remove-same-identity-hash])
+CHECK_HMAP([insert-any-remove-same-constant-hash])
+CHECK_HMAP([insert-any-remove-reverse-random-hash])
+CHECK_HMAP([insert-any-remove-reverse-identity-hash])
+CHECK_HMAP([insert-any-remove-reverse-constant-hash])
+CHECK_HMAP([random-sequence-random-hash])
+CHECK_HMAP([random-sequence-identity-hash])
+CHECK_HMAP([random-sequence-constant-hash])
+CHECK_HMAP([insert-ordered-random-hash])
+CHECK_HMAP([insert-ordered-identity-hash])
+CHECK_HMAP([insert-ordered-constant-hash])
+CHECK_HMAP([moved-random-hash])
+CHECK_HMAP([moved-identity-hash])
+CHECK_HMAP([moved-constant-hash])
+CHECK_HMAP([changed-random-hash])
+CHECK_HMAP([changed-identity-hash])
+CHECK_HMAP([changed-constant-hash])
+CHECK_HMAP([swap-random-hash])
+CHECK_HMAP([clear])
+CHECK_HMAP([destroy-null])
+CHECK_HMAP([shrink-empty])
index 18b7aad9d6cc5fd3f0f56dd949e8b1d9e3d95e8b..c93a2cd1b1ea2bb16555d298131faf47d3c85cc3 100644 (file)
@@ -38,9 +38,6 @@
 
 #include <libpspp/compiler.h>
 \f
-/* Currently running test. */
-static const char *test_name;
-
 /* If OK is not true, prints a message about failure on the
    current source file and the given LINE and terminates. */
 static void
@@ -48,8 +45,7 @@ check_func (bool ok, int line)
 {
   if (!ok)
     {
-      printf ("Check failed in %s test at %s, line %d\n",
-              test_name, __FILE__, line);
+      fprintf (stderr, "%s:%d: check failed\n", __FILE__, line);
       abort ();
     }
 }
@@ -993,83 +989,189 @@ test_shrink_empty (void)
 \f
 /* Main program. */
 
-/* Runs TEST_FUNCTION and prints a message about NAME. */
-static void
-run_test (void (*test_function) (void), const char *name)
-{
-  test_name = name;
-  putchar ('.');
-  fflush (stdout);
-  test_function ();
-}
+struct test
+  {
+    const char *name;
+    const char *description;
+    void (*function) (void);
+  };
+
+static const struct test tests[] =
+  {
+    {
+      "insert-any-remove-any-random-hash",
+      "insert any order, delete any order (random hash)",
+      test_insert_any_remove_any_random_hash
+    },
+    {
+      "insert-any-remove-any-identity-hash",
+      "insert any order, delete any order (identity hash)",
+      test_insert_any_remove_any_identity_hash
+    },
+    {
+      "insert-any-remove-any-constant-hash",
+      "insert any order, delete any order (constant hash)",
+      test_insert_any_remove_any_constant_hash
+    },
+    {
+      "insert-any-remove-same-random-hash",
+      "insert any order, delete same order (random hash)",
+      test_insert_any_remove_same_random_hash
+    },
+    {
+      "insert-any-remove-same-identity-hash",
+      "insert any order, delete same order (identity hash)",
+      test_insert_any_remove_same_identity_hash
+    },
+    {
+      "insert-any-remove-same-constant-hash",
+      "insert any order, delete same order (constant hash)",
+      test_insert_any_remove_same_constant_hash
+    },
+    {
+      "insert-any-remove-reverse-random-hash",
+      "insert any order, delete reverse order (random hash)",
+      test_insert_any_remove_reverse_random_hash
+    },
+    {
+      "insert-any-remove-reverse-identity-hash",
+      "insert any order, delete reverse order (identity hash)",
+      test_insert_any_remove_reverse_identity_hash
+    },
+    {
+      "insert-any-remove-reverse-constant-hash",
+      "insert any order, delete reverse order (constant hash)",
+      test_insert_any_remove_reverse_constant_hash
+    },
+    {
+      "random-sequence-random-hash",
+      "insert and delete in random sequence (random hash)",
+      test_random_sequence_random_hash
+    },
+    {
+      "random-sequence-identity-hash",
+      "insert and delete in random sequence (identity hash)",
+      test_random_sequence_identity_hash
+    },
+    {
+      "random-sequence-constant-hash",
+      "insert and delete in random sequence (constant hash)",
+      test_random_sequence_constant_hash
+    },
+    {
+      "insert-ordered-random-hash",
+      "insert in ascending order (random hash)",
+      test_insert_ordered_random_hash
+    },
+    {
+      "insert-ordered-identity-hash",
+      "insert in ascending order (identity hash)",
+      test_insert_ordered_identity_hash
+    },
+    {
+      "insert-ordered-constant-hash",
+      "insert in ascending order (constant hash)",
+      test_insert_ordered_constant_hash
+    },
+    {
+      "moved-random-hash",
+      "move elements around in memory (random hash)",
+      test_moved_random_hash
+    },
+    {
+      "moved-identity-hash",
+      "move elements around in memory (identity hash)",
+      test_moved_identity_hash
+    },
+    {
+      "moved-constant-hash",
+      "move elements around in memory (constant hash)",
+      test_moved_constant_hash
+    },
+    {
+      "changed-random-hash",
+      "change key data in nodes (random hash)",
+      test_changed_random_hash
+    },
+    {
+      "changed-identity-hash",
+      "change key data in nodes (identity hash)",
+      test_changed_identity_hash
+    },
+    {
+      "changed-constant-hash",
+      "change key data in nodes (constant hash)",
+      test_changed_constant_hash
+    },
+    {
+      "change-random-hash",
+      "change and move key data in nodes (random hash)",
+      test_change_random_hash
+    },
+    {
+      "change-identity-hash",
+      "change and move key data in nodes (identity hash)",
+      test_change_identity_hash
+    },
+    {
+      "change-constant-hash",
+      "change and move key data in nodes (constant hash)",
+      test_change_constant_hash
+    },
+    {
+      "swap-random-hash",
+      "test swapping tables",
+      test_swap_random_hash
+    },
+    {
+      "clear",
+      "test clearing hash table",
+      test_clear
+    },
+    {
+      "destroy-null",
+      "test destroying null table",
+      test_destroy_null
+    },
+    {
+      "shrink-empty",
+      "test shrinking an empty table",
+      test_shrink_empty
+    },
+  };
+
+enum { N_TESTS = sizeof tests / sizeof *tests };
 
 int
-main (void)
+main (int argc, char *argv[])
 {
-  run_test (test_insert_any_remove_any_random_hash,
-            "insert any order, delete any order (random hash)");
-  run_test (test_insert_any_remove_any_identity_hash,
-            "insert any order, delete any order (identity hash)");
-  run_test (test_insert_any_remove_any_constant_hash,
-            "insert any order, delete any order (constant hash)");
-
-  run_test (test_insert_any_remove_same_random_hash,
-            "insert any order, delete same order (random hash)");
-  run_test (test_insert_any_remove_same_identity_hash,
-            "insert any order, delete same order (identity hash)");
-  run_test (test_insert_any_remove_same_constant_hash,
-            "insert any order, delete same order (constant hash)");
-
-  run_test (test_insert_any_remove_reverse_random_hash,
-            "insert any order, delete reverse order (random hash)");
-  run_test (test_insert_any_remove_reverse_identity_hash,
-            "insert any order, delete reverse order (identity hash)");
-  run_test (test_insert_any_remove_reverse_constant_hash,
-            "insert any order, delete reverse order (constant hash)");
-
-  run_test (test_random_sequence_random_hash,
-            "insert and delete in random sequence (random hash)");
-  run_test (test_random_sequence_identity_hash,
-            "insert and delete in random sequence (identity hash)");
-  run_test (test_random_sequence_constant_hash,
-            "insert and delete in random sequence (constant hash)");
-
-  run_test (test_insert_ordered_random_hash,
-            "insert in ascending order (random hash)");
-  run_test (test_insert_ordered_identity_hash,
-            "insert in ascending order (identity hash)");
-  run_test (test_insert_ordered_constant_hash,
-            "insert in ascending order (constant hash)");
-
-  run_test (test_moved_random_hash,
-            "move elements around in memory (random hash)");
-  run_test (test_moved_identity_hash,
-            "move elements around in memory (identity hash)");
-  run_test (test_moved_constant_hash,
-            "move elements around in memory (constant hash)");
-
-  run_test (test_changed_random_hash,
-            "change key data in nodes (random hash)");
-  run_test (test_changed_identity_hash,
-            "change key data in nodes (identity hash)");
-  run_test (test_changed_constant_hash,
-            "change key data in nodes (constant hash)");
-
-  run_test (test_change_random_hash,
-            "change and move key data in nodes (random hash)");
-  run_test (test_change_identity_hash,
-            "change and move key data in nodes (identity hash)");
-  run_test (test_change_constant_hash,
-            "change and move key data in nodes (constant hash)");
-
-  run_test (test_swap_random_hash, "test swapping tables");
-
-  run_test (test_clear, "test clearing hash table");
-
-  run_test (test_destroy_null, "test destroying null table");
-  run_test (test_shrink_empty, "test shrinking an empty table");
-
-  putchar ('\n');
-
-  return 0;
+  int i;
+
+  if (argc != 2)
+    {
+      fprintf (stderr, "exactly one argument required; use --help for help\n");
+      return EXIT_FAILURE;
+    }
+  else if (!strcmp (argv[1], "--help"))
+    {
+      printf ("%s: test hash map of pointers\n"
+              "usage: %s TEST-NAME\n"
+              "where TEST-NAME is one of the following:\n",
+              argv[0], argv[0]);
+      for (i = 0; i < N_TESTS; i++)
+        printf ("  %s\n    %s\n", tests[i].name, tests[i].description);
+      return 0;
+    }
+  else
+    {
+      for (i = 0; i < N_TESTS; i++)
+        if (!strcmp (argv[1], tests[i].name))
+          {
+            tests[i].function ();
+            return 0;
+          }
+
+      fprintf (stderr, "unknown test %s; use --help for help\n", argv[1]);
+      return EXIT_FAILURE;
+    }
 }
diff --git a/tests/libpspp/hmapx.at b/tests/libpspp/hmapx.at
new file mode 100644 (file)
index 0000000..2e2dec4
--- /dev/null
@@ -0,0 +1,35 @@
+AT_BANNER([Hash map of pointers (hmapx) library])
+
+m4_define([CHECK_HMAPX],
+  [AT_SETUP([hmapx -- $1])
+   AT_CHECK([hmapx-test $1])
+   AT_CLEANUP])
+
+CHECK_HMAPX([insert-any-remove-any-random-hash])
+CHECK_HMAPX([insert-any-remove-any-identity-hash])
+CHECK_HMAPX([insert-any-remove-any-constant-hash])
+CHECK_HMAPX([insert-any-remove-same-random-hash])
+CHECK_HMAPX([insert-any-remove-same-identity-hash])
+CHECK_HMAPX([insert-any-remove-same-constant-hash])
+CHECK_HMAPX([insert-any-remove-reverse-random-hash])
+CHECK_HMAPX([insert-any-remove-reverse-identity-hash])
+CHECK_HMAPX([insert-any-remove-reverse-constant-hash])
+CHECK_HMAPX([random-sequence-random-hash])
+CHECK_HMAPX([random-sequence-identity-hash])
+CHECK_HMAPX([random-sequence-constant-hash])
+CHECK_HMAPX([insert-ordered-random-hash])
+CHECK_HMAPX([insert-ordered-identity-hash])
+CHECK_HMAPX([insert-ordered-constant-hash])
+CHECK_HMAPX([moved-random-hash])
+CHECK_HMAPX([moved-identity-hash])
+CHECK_HMAPX([moved-constant-hash])
+CHECK_HMAPX([changed-random-hash])
+CHECK_HMAPX([changed-identity-hash])
+CHECK_HMAPX([changed-constant-hash])
+CHECK_HMAPX([change-random-hash])
+CHECK_HMAPX([change-identity-hash])
+CHECK_HMAPX([change-constant-hash])
+CHECK_HMAPX([swap-random-hash])
+CHECK_HMAPX([clear])
+CHECK_HMAPX([destroy-null])
+CHECK_HMAPX([shrink-empty])
diff --git a/tests/libpspp/i18n-test.c b/tests/libpspp/i18n-test.c
new file mode 100644 (file)
index 0000000..f2bead9
--- /dev/null
@@ -0,0 +1,46 @@
+/* PSPP - a program for statistical analysis.
+   Copyright (C) 2010 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
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>. */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "libpspp/i18n.h"
+
+int
+main (int argc, char *argv[])
+{
+  char *s;
+
+  if (argc != 4)
+    {
+      fprintf (stderr,
+               "usage: %s FROM TO STRING\n"
+               "where FROM is the source encoding,\n"
+               "      TO is the target encoding,\n"
+               "      and STRING is the text to recode.\n",
+               argv[0]);
+      return EXIT_FAILURE;
+    }
+
+  i18n_init ();
+  s = recode_string (argv[2], argv[1], argv[3], -1);
+  puts (s);
+  free (s);
+
+  return 0;
+}
diff --git a/tests/libpspp/i18n.at b/tests/libpspp/i18n.at
new file mode 100644 (file)
index 0000000..ed29a7d
--- /dev/null
@@ -0,0 +1,50 @@
+AT_BANNER([i18n routines])
+
+# CHECK_I18N([TITLE], [FROM-CODING], [TO-CODING], [FROM-TEXT], [TO-TEXT])
+#
+# Converts FROM-TEXT from FROM-CODING to TO-CODING and checks that the result
+# is TO-TEXT.  The "printf" program is applied to both FROM-TEXT and TO-TEXT
+# to allow for backslash-escapes.  (Be aware that hex escapes are not portable;
+# use octal escapes instead.)
+m4_define([CHECK_I18N],
+  [AT_SETUP([convert $1])
+   AT_KEYWORDS([i18n])
+
+   dnl Skip the test if this host doesn't know the source and target encodings.
+   AT_CHECK(
+     [case "$host" in
+        *-*-linux* | *-*-*-gnu*)
+          dnl GNU/Linux always has the encodings we want.  We can't ask
+         dnl config.charset about them because it has a special case here
+         dnl too and won't tell us.
+         ;;
+       *)
+          $SHELL $top_srcdir/gl/config.charset "$host" | grep '$2' || exit 77
+          $SHELL $top_srcdir/gl/config.charset "$host" | grep '$3' || exit 77
+          ;;
+      esac
+     ], [0], [ignore])
+   AT_CHECK_UNQUOTED([i18n-test '$2' '$3' `printf '$4'`], [0], [`printf '$5'`
+])
+   AT_CLEANUP])
+     
+CHECK_I18N([reflexively], [ASCII], [ASCII], [abc], [abc])
+CHECK_I18N([without any change], [ASCII], [UTF-8], [abc], [abc])
+
+CHECK_I18N([from ISO-8859-1 to UTF-8], [ISO-8859-1], [UTF-8],
+           [\242], [\302\242])
+CHECK_I18N([from UTF-8 to ISO-8859-1], [UTF-8], [ISO-8859-1],
+           [\302\242], [\242])
+
+# 0xc0 == 0300 is invalid in UTF-8
+CHECK_I18N([invalid UTF-8 to ISO-8859-1], [UTF-8], [ISO-8859-1],
+           [xy\300z], [xy?z])
+# 0xc2 == 0302 is the first byte of a 2-byte UTF-8 sequence
+CHECK_I18N([truncated UTF-8 to ISO-8559-1], [UTF-8], [ISO-8859-1],
+           [xy\302], [xy?])
+
+dnl The input to this test is 7 bytes long and the expected output is 9 bytes.
+dnl So it should exercise the E2BIG case 
+CHECK_I18N([from ISO-8859-1 to UTF-8 with overflow], [ISO-8859-1], [UTF-8],
+           [Tsch\374\337!], [Tsch\303\274\303\237!])
+
index ab9fe33bb84bbd8fcf53b0c6b59b740c5a0fd7e8..7bf01248c1b7a4cf2fe695431590e61fbaa7a574 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2006 Free Software Foundation, Inc.
+   Copyright (C) 2006, 2010 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
@@ -43,9 +43,6 @@
 #define UNUSED
 #endif
 
-/* Currently running test. */
-static const char *test_name;
-
 /* Exit with a failure code.
    (Place a breakpoint on this function while debugging.) */
 static void
@@ -61,8 +58,7 @@ check_func (bool ok, int line)
 {
   if (!ok)
     {
-      printf ("Check failed in %s test at %s, line %d\n",
-              test_name, __FILE__, line);
+      fprintf (stderr, "%s:%d: check failed\n", __FILE__, line);
       check_die ();
     }
 }
@@ -1972,56 +1968,199 @@ test_partition (void)
 \f
 /* Main program. */
 
-/* Runs TEST_FUNCTION and prints a message about NAME. */
-static void
-run_test (void (*test_function) (void), const char *name)
-{
-  test_name = name;
-  putchar ('.');
-  fflush (stdout);
-  test_function ();
-}
+struct test
+  {
+    const char *name;
+    const char *description;
+    void (*function) (void);
+  };
+
+static const struct test tests[] =
+  {
+    {
+      "push-pop",
+      "push/pop",
+      test_push_pop
+    },
+    {
+      "insert-remove",
+      "insert/remove",
+      test_insert_remove
+    },
+    {
+      "swap",
+      "swap",
+      test_swap
+    },
+    {
+      "swap-range",
+      "swap_range",
+      test_swap_range
+    },
+    {
+      "remove-range",
+      "remove_range",
+      test_remove_range
+    },
+    {
+      "remove-equal",
+      "remove_equal",
+      test_remove_equal
+    },
+    {
+      "remove-if",
+      "remove_if",
+      test_remove_if
+    },
+    {
+      "moved",
+      "moved",
+      test_moved
+    },
+    {
+      "find-equal",
+      "find_equal",
+      test_find_equal
+    },
+    {
+      "find-if",
+      "find_if",
+      test_find_if
+    },
+    {
+      "find-adjacent-equal",
+      "find_adjacent_equal",
+      test_find_adjacent_equal
+    },
+    {
+      "count-range",
+      "count_range",
+      test_count_range
+    },
+    {
+      "count-equal",
+      "count_equal",
+      test_count_equal
+    },
+    {
+      "count-if",
+      "count_if",
+      test_count_if
+    },
+    {
+      "min-max",
+      "min/max",
+      test_min_max
+    },
+    {
+      "lexicographical-compare-3way",
+      "lexicographical_compare_3way",
+      test_lexicographical_compare_3way
+    },
+    {
+      "apply",
+      "apply",
+      test_apply
+    },
+    {
+      "reverse",
+      "reverse",
+      test_reverse
+    },
+    {
+      "permutations-no-dups",
+      "permutations (no dups)",
+      test_permutations_no_dups
+    },
+    {
+      "permutations-with-dups",
+      "permutations (with dups)",
+      test_permutations_with_dups
+    },
+    {
+      "merge-no-dups",
+      "merge (no dups)",
+      test_merge_no_dups
+    },
+    {
+      "merge-with-dups",
+      "merge (with dups)",
+      test_merge_with_dups
+    },
+    {
+      "sort-exhaustive",
+      "sort (exhaustive)",
+      test_sort_exhaustive
+    },
+    {
+      "sort-stable",
+      "sort (stability)",
+      test_sort_stable
+    },
+    {
+      "sort-subset",
+      "sort (subset)",
+      test_sort_subset
+    },
+    {
+      "sort-big",
+      "sort (big)",
+      test_sort_big
+    },
+    {
+      "unique",
+      "unique",
+      test_unique
+    },
+    {
+      "sort-unique",
+      "sort_unique",
+      test_sort_unique
+    },
+    {
+      "insert-ordered",
+      "insert_ordered",
+      test_insert_ordered
+    },
+    {
+      "partition",
+      "partition",
+      test_partition
+    },
+  };
+
+enum { N_TESTS = sizeof tests / sizeof *tests };
 
 int
-main (void)
-{
-  run_test (test_push_pop, "push/pop");
-  run_test (test_insert_remove, "insert/remove");
-  run_test (test_swap, "swap");
-  run_test (test_swap_range, "swap_range");
-  run_test (test_remove_range, "remove_range");
-  run_test (test_remove_equal, "remove_equal");
-  run_test (test_remove_if, "remove_if");
-  run_test (test_moved, "moved");
-  run_test (test_find_equal, "find_equal");
-  run_test (test_find_if, "find_if");
-  run_test (test_find_adjacent_equal, "find_adjacent_equal");
-  run_test (test_count_range, "count_range");
-  run_test (test_count_equal, "count_equal");
-  run_test (test_count_if, "count_if");
-  run_test (test_min_max, "min/max");
-  run_test (test_lexicographical_compare_3way, "lexicographical_compare_3way");
-  run_test (test_apply, "apply");
-  run_test (test_reverse, "reverse");
-  run_test (test_permutations_no_dups, "permutations (no dups)");
-  run_test (test_permutations_with_dups, "permutations (with dups)");
-  run_test (test_merge_no_dups, "merge (no dups)");
-  run_test (test_merge_with_dups, "merge (with dups)");
-  run_test (test_sort_exhaustive, "sort (exhaustive)");
-  run_test (test_sort_stable, "sort (stability)");
-  run_test (test_sort_subset, "sort (subset)");
-  run_test (test_sort_big, "sort (big)");
-  run_test (test_unique, "unique");
-  run_test (test_sort_unique, "sort_unique");
-  run_test (test_insert_ordered, "insert_ordered");
-  run_test (test_partition, "partition");
-  putchar ('\n');
-
-  return 0;
-}
-
-/*
-  Local Variables:
-  compile-command: "gcc -Wall -Wstrict-prototypes -Wmissing-prototypes ll.c ll-test.c -o ll-test -g"
-  End:
- */
+main (int argc, char *argv[])
+{
+  int i;
+
+  if (argc != 2)
+    {
+      fprintf (stderr, "exactly one argument required; use --help for help\n");
+      return EXIT_FAILURE;
+    }
+  else if (!strcmp (argv[1], "--help"))
+    {
+      printf ("%s: test doubly linked list (ll) library\n"
+              "usage: %s TEST-NAME\n"
+              "where TEST-NAME is one of the following:\n",
+              argv[0], argv[0]);
+      for (i = 0; i < N_TESTS; i++)
+        printf ("  %s\n    %s\n", tests[i].name, tests[i].description);
+      return 0;
+    }
+  else
+    {
+      for (i = 0; i < N_TESTS; i++)
+        if (!strcmp (argv[1], tests[i].name))
+          {
+            tests[i].function ();
+            return 0;
+          }
+
+      fprintf (stderr, "unknown test %s; use --help for help\n", argv[1]);
+      return EXIT_FAILURE;
+    }
+}
diff --git a/tests/libpspp/ll.at b/tests/libpspp/ll.at
new file mode 100644 (file)
index 0000000..d382012
--- /dev/null
@@ -0,0 +1,37 @@
+AT_BANNER([doubly linked list (ll) library])
+
+m4_define([CHECK_LL],
+  [AT_SETUP([ll -- $1])
+   AT_CHECK([ll-test $1])
+   AT_CLEANUP])
+
+CHECK_LL([push-pop])
+CHECK_LL([insert-remove])
+CHECK_LL([swap])
+CHECK_LL([swap-range])
+CHECK_LL([remove-range])
+CHECK_LL([remove-equal])
+CHECK_LL([remove-if])
+CHECK_LL([moved])
+CHECK_LL([find-equal])
+CHECK_LL([find-if])
+CHECK_LL([find-adjacent-equal])
+CHECK_LL([count-range])
+CHECK_LL([count-equal])
+CHECK_LL([count-if])
+CHECK_LL([min-max])
+CHECK_LL([lexicographical-compare-3way])
+CHECK_LL([apply])
+CHECK_LL([reverse])
+CHECK_LL([permutations-no-dups])
+CHECK_LL([permutations-with-dups])
+CHECK_LL([merge-no-dups])
+CHECK_LL([merge-with-dups])
+CHECK_LL([sort-exhaustive])
+CHECK_LL([sort-stable])
+CHECK_LL([sort-subset])
+CHECK_LL([sort-big])
+CHECK_LL([unique])
+CHECK_LL([sort-unique])
+CHECK_LL([insert-ordered])
+CHECK_LL([partition])
index f8fe9b73618578f50f8dad56f18a3c261122b3f3..34f46e8bbf8042105ad808ab8ee4266e79d2f708 100644 (file)
@@ -42,9 +42,6 @@
 #define UNUSED
 #endif
 
-/* Currently running test. */
-static const char *test_name;
-
 /* Exit with a failure code.
    (Place a breakpoint on this function while debugging.) */
 static void
@@ -60,8 +57,7 @@ check_func (bool ok, int line)
 {
   if (!ok)
     {
-      printf ("Check failed in %s test at %s, line %d\n",
-              test_name, __FILE__, line);
+      fprintf (stderr, "%s:%d: check failed\n", __FILE__, line);
       check_die ();
     }
 }
@@ -2047,58 +2043,209 @@ test_allocation_failure (void)
 \f
 /* Main program. */
 
-/* Runs TEST_FUNCTION and prints a message about NAME. */
-static void
-run_test (void (*test_function) (void), const char *name)
-{
-  test_name = name;
-  putchar ('.');
-  fflush (stdout);
-  test_function ();
-}
+struct test
+  {
+    const char *name;
+    const char *description;
+    void (*function) (void);
+  };
+
+static const struct test tests[] =
+  {
+    {
+      "push-pop",
+      "push/pop",
+      test_push_pop
+    },
+    {
+      "insert-remove",
+      "insert/remove",
+      test_insert_remove
+    },
+    {
+      "swap",
+      "swap",
+      test_swap
+    },
+    {
+      "swap-range",
+      "swap_range",
+      test_swap_range
+    },
+    {
+      "remove-range",
+      "remove_range",
+      test_remove_range
+    },
+    {
+      "remove-equal",
+      "remove_equal",
+      test_remove_equal
+    },
+    {
+      "remove-if",
+      "remove_if",
+      test_remove_if
+    },
+    {
+      "find-equal",
+      "find_equal",
+      test_find_equal
+    },
+    {
+      "find",
+      "find",
+      test_find
+    },
+    {
+      "find-if",
+      "find_if",
+      test_find_if
+    },
+    {
+      "find-adjacent-equal",
+      "find_adjacent_equal",
+      test_find_adjacent_equal
+    },
+    {
+      "count-range",
+      "count_range",
+      test_count_range
+    },
+    {
+      "count-equal",
+      "count_equal",
+      test_count_equal
+    },
+    {
+      "count-if",
+      "count_if",
+      test_count_if
+    },
+    {
+      "min-max",
+      "min/max",
+      test_min_max
+    },
+    {
+      "lexicographical-compare-3way",
+      "lexicographical_compare_3way",
+      test_lexicographical_compare_3way
+    },
+    {
+      "apply",
+      "apply",
+      test_apply
+    },
+    {
+      "destroy",
+      "destroy",
+      test_destroy
+    },
+    {
+      "reverse",
+      "reverse",
+      test_reverse
+    },
+    {
+      "permutations-no-dups",
+      "permutations (no dups)",
+      test_permutations_no_dups
+    },
+    {
+      "permutations-with-dups",
+      "permutations (with dups)",
+      test_permutations_with_dups
+    },
+    {
+      "merge-no-dups",
+      "merge (no dups)",
+      test_merge_no_dups
+    },
+    {
+      "merge-with-dups",
+      "merge (with dups)",
+      test_merge_with_dups
+    },
+    {
+      "sort-exhaustive",
+      "sort (exhaustive)",
+      test_sort_exhaustive
+    },
+    {
+      "sort-stable",
+      "sort (stability)",
+      test_sort_stable
+    },
+    {
+      "sort-subset",
+      "sort (subset)",
+      test_sort_subset
+    },
+    {
+      "sort-big",
+      "sort (big)",
+      test_sort_big
+    },
+    {
+      "unique",
+      "unique",
+      test_unique
+    },
+    {
+      "sort-unique",
+      "sort_unique",
+      test_sort_unique
+    },
+    {
+      "insert-ordered",
+      "insert_ordered",
+      test_insert_ordered
+    },
+    {
+      "partition",
+      "partition",
+      test_partition
+    },
+    {
+      "allocation-failure",
+      "allocation failure",
+      test_allocation_failure
+    },
+  };
+
+enum { N_TESTS = sizeof tests / sizeof *tests };
 
 int
-main (void)
-{
-  run_test (test_push_pop, "push/pop");
-  run_test (test_insert_remove, "insert/remove");
-  run_test (test_swap, "swap");
-  run_test (test_swap_range, "swap_range");
-  run_test (test_remove_range, "remove_range");
-  run_test (test_remove_equal, "remove_equal");
-  run_test (test_remove_if, "remove_if");
-  run_test (test_find_equal, "find_equal");
-  run_test (test_find, "find");
-  run_test (test_find_if, "find_if");
-  run_test (test_find_adjacent_equal, "find_adjacent_equal");
-  run_test (test_count_range, "count_range");
-  run_test (test_count_equal, "count_equal");
-  run_test (test_count_if, "count_if");
-  run_test (test_min_max, "min/max");
-  run_test (test_lexicographical_compare_3way, "lexicographical_compare_3way");
-  run_test (test_apply, "apply");
-  run_test (test_destroy, "destroy");
-  run_test (test_reverse, "reverse");
-  run_test (test_permutations_no_dups, "permutations (no dups)");
-  run_test (test_permutations_with_dups, "permutations (with dups)");
-  run_test (test_merge_no_dups, "merge (no dups)");
-  run_test (test_merge_with_dups, "merge (with dups)");
-  run_test (test_sort_exhaustive, "sort (exhaustive)");
-  run_test (test_sort_stable, "sort (stability)");
-  run_test (test_sort_subset, "sort (subset)");
-  run_test (test_sort_big, "sort (big)");
-  run_test (test_unique, "unique");
-  run_test (test_sort_unique, "sort_unique");
-  run_test (test_insert_ordered, "insert_ordered");
-  run_test (test_partition, "partition");
-  run_test (test_allocation_failure, "allocation failure");
-  putchar ('\n');
-
-  return 0;
-}
-
-/*
-  Local Variables:
-  compile-command: "gcc -Wall -Wstrict-prototypes -Wmissing-prototypes ll.c llx.c llx-test.c -o llx-test -g"
-  End:
- */
+main (int argc, char *argv[])
+{
+  int i;
+
+  if (argc != 2)
+    {
+      fprintf (stderr, "exactly one argument required; use --help for help\n");
+      return EXIT_FAILURE;
+    }
+  else if (!strcmp (argv[1], "--help"))
+    {
+      printf ("%s: test doubly linked list of pointers (llx) library\n"
+              "usage: %s TEST-NAME\n"
+              "where TEST-NAME is one of the following:\n",
+              argv[0], argv[0]);
+      for (i = 0; i < N_TESTS; i++)
+        printf ("  %s\n    %s\n", tests[i].name, tests[i].description);
+      return 0;
+    }
+  else
+    {
+      for (i = 0; i < N_TESTS; i++)
+        if (!strcmp (argv[1], tests[i].name))
+          {
+            tests[i].function ();
+            return 0;
+          }
+
+      fprintf (stderr, "unknown test %s; use --help for help\n", argv[1]);
+      return EXIT_FAILURE;
+    }
+}
diff --git a/tests/libpspp/llx.at b/tests/libpspp/llx.at
new file mode 100644 (file)
index 0000000..973f925
--- /dev/null
@@ -0,0 +1,39 @@
+AT_BANNER([doubly linked list of pointers (llx) library])
+
+m4_define([CHECK_LLX],
+  [AT_SETUP([llx -- $1])
+   AT_CHECK([llx-test $1])
+   AT_CLEANUP])
+
+CHECK_LLX([push-pop])
+CHECK_LLX([insert-remove])
+CHECK_LLX([swap])
+CHECK_LLX([swap-range])
+CHECK_LLX([remove-range])
+CHECK_LLX([remove-equal])
+CHECK_LLX([remove-if])
+CHECK_LLX([find-equal])
+CHECK_LLX([find])
+CHECK_LLX([find-if])
+CHECK_LLX([find-adjacent-equal])
+CHECK_LLX([count-range])
+CHECK_LLX([count-equal])
+CHECK_LLX([count-if])
+CHECK_LLX([min-max])
+CHECK_LLX([lexicographical-compare-3way])
+CHECK_LLX([apply])
+CHECK_LLX([destroy])
+CHECK_LLX([reverse])
+CHECK_LLX([permutations-no-dups])
+CHECK_LLX([permutations-with-dups])
+CHECK_LLX([merge-no-dups])
+CHECK_LLX([merge-with-dups])
+CHECK_LLX([sort-exhaustive])
+CHECK_LLX([sort-stable])
+CHECK_LLX([sort-subset])
+CHECK_LLX([sort-big])
+CHECK_LLX([unique])
+CHECK_LLX([sort-unique])
+CHECK_LLX([insert-ordered])
+CHECK_LLX([partition])
+CHECK_LLX([allocation-failure])
index c2133770e929a67afa0b7e68a8f8e800549f0b33..b6a1b493220c208c8e0f87d28ca8231a89606801 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2007 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2010 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
@@ -39,9 +39,6 @@
 
 #include "xalloc.h"
 \f
-/* Currently running test. */
-static const char *test_name;
-
 /* Exit with a failure code.
    (Place a breakpoint on this function while debugging.) */
 static void
@@ -57,8 +54,7 @@ check_func (bool ok, int line)
 {
   if (!ok)
     {
-      printf ("Check failed in %s test at %s, line %d\n",
-              test_name, __FILE__, line);
+      fprintf (stderr, "%s:%d: check failed\n", __FILE__, line);
       check_die ();
     }
 }
@@ -491,23 +487,64 @@ test_delete_gaps (void)
 \f
 /* Main program. */
 
-/* Runs TEST_FUNCTION and prints a message about NAME. */
-static void
-run_test (void (*test_function) (void), const char *name)
-{
-  test_name = name;
-  putchar ('.');
-  fflush (stdout);
-  test_function ();
-}
+struct test
+  {
+    const char *name;
+    const char *description;
+    void (*function) (void);
+  };
+
+static const struct test tests[] =
+  {
+    {
+      "insert",
+      "insert",
+      test_insert
+    },
+    {
+      "delete-contiguous",
+      "delete from contiguous ranges",
+      test_delete_contiguous
+    },
+    {
+      "delete-gaps",
+      "delete from ranges separated by gaps",
+      test_delete_gaps
+    },
+  };
+
+enum { N_TESTS = sizeof tests / sizeof *tests };
 
 int
-main (void)
+main (int argc, char *argv[])
 {
-  run_test (test_insert, "insert");
-  run_test (test_delete_contiguous, "delete from contiguous ranges");
-  run_test (test_delete_gaps, "delete from ranges separated by gaps");
-  putchar ('\n');
+  int i;
 
-  return 0;
+  if (argc != 2)
+    {
+      fprintf (stderr, "exactly one argument required; use --help for help\n");
+      return EXIT_FAILURE;
+    }
+  else if (!strcmp (argv[1], "--help"))
+    {
+      printf ("%s: test range map library\n"
+              "usage: %s TEST-NAME\n"
+              "where TEST-NAME is one of the following:\n",
+              argv[0], argv[0]);
+      for (i = 0; i < N_TESTS; i++)
+        printf ("  %s\n    %s\n", tests[i].name, tests[i].description);
+      return 0;
+    }
+  else
+    {
+      for (i = 0; i < N_TESTS; i++)
+        if (!strcmp (argv[1], tests[i].name))
+          {
+            tests[i].function ();
+            return 0;
+          }
+
+      fprintf (stderr, "unknown test %s; use --help for help\n", argv[1]);
+      return EXIT_FAILURE;
+    }
 }
diff --git a/tests/libpspp/range-map.at b/tests/libpspp/range-map.at
new file mode 100644 (file)
index 0000000..d414f50
--- /dev/null
@@ -0,0 +1,10 @@
+AT_BANNER([range map library])
+
+m4_define([CHECK_RANGE_MAP],
+  [AT_SETUP([range-map -- $1])
+   AT_CHECK([range-map-test $1])
+   AT_CLEANUP])
+
+CHECK_RANGE_MAP([insert])
+CHECK_RANGE_MAP([delete-contiguous])
+CHECK_RANGE_MAP([delete-gaps])
index 8d6e68316834d707254b5888f92d1b41b1064bb6..03dfb3189e18db2af7798ba1d94fead53e3ec2e7 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2007, 2009 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2009, 2010 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
@@ -40,9 +40,6 @@
 
 #include "xalloc.h"
 \f
-/* Currently running test. */
-static const char *test_name;
-
 /* Exit with a failure code.
    (Place a breakpoint on this function while debugging.) */
 static void
@@ -58,8 +55,7 @@ check_func (bool ok, int line)
 {
   if (!ok)
     {
-      printf ("Check failed in %s test at %s, line %d\n",
-              test_name, __FILE__, line);
+      fprintf (stderr, "%s:%d: check failed\n", __FILE__, line);
       check_die ();
     }
 }
@@ -462,26 +458,79 @@ test_destroy_null (void)
 \f
 /* Main program. */
 
-/* Runs TEST_FUNCTION and prints a message about NAME. */
-static void
-run_test (void (*test_function) (void), const char *name)
-{
-  test_name = name;
-  putchar ('.');
-  fflush (stdout);
-  test_function ();
-}
+struct test
+  {
+    const char *name;
+    const char *description;
+    void (*function) (void);
+  };
+
+static const struct test tests[] =
+  {
+    {
+      "insert",
+      "insert",
+      test_insert
+    },
+    {
+      "delete",
+      "delete",
+      test_delete
+    },
+    {
+      "allocate",
+      "allocate",
+      test_allocate
+    },
+    {
+      "allocate-fully",
+      "allocate_fully",
+      test_allocate_fully
+    },
+    {
+      "pool",
+      "pool",
+      test_pool
+    },
+    {
+      "destroy-null",
+      "destroy null",
+      test_destroy_null
+    },
+  };
+
+enum { N_TESTS = sizeof tests / sizeof *tests };
 
 int
-main (void)
+main (int argc, char *argv[])
 {
-  run_test (test_insert, "insert");
-  run_test (test_delete, "delete");
-  run_test (test_allocate, "allocate");
-  run_test (test_allocate_fully, "allocate_fully");
-  run_test (test_pool, "pool");
-  run_test (test_destroy_null, "destroy null");
-  putchar ('\n');
-
-  return 0;
+  int i;
+
+  if (argc != 2)
+    {
+      fprintf (stderr, "exactly one argument required; use --help for help\n");
+      return EXIT_FAILURE;
+    }
+  else if (!strcmp (argv[1], "--help"))
+    {
+      printf ("%s: test range set library\n"
+              "usage: %s TEST-NAME\n"
+              "where TEST-NAME is one of the following:\n",
+              argv[0], argv[0]);
+      for (i = 0; i < N_TESTS; i++)
+        printf ("  %s\n    %s\n", tests[i].name, tests[i].description);
+      return 0;
+    }
+  else
+    {
+      for (i = 0; i < N_TESTS; i++)
+        if (!strcmp (argv[1], tests[i].name))
+          {
+            tests[i].function ();
+            return 0;
+          }
+
+      fprintf (stderr, "unknown test %s; use --help for help\n", argv[1]);
+      return EXIT_FAILURE;
+    }
 }
diff --git a/tests/libpspp/range-set.at b/tests/libpspp/range-set.at
new file mode 100644 (file)
index 0000000..35eed8c
--- /dev/null
@@ -0,0 +1,13 @@
+AT_BANNER([range set library])
+
+m4_define([CHECK_RANGE_SET],
+  [AT_SETUP([range-set -- $1])
+   AT_CHECK([range-set-test $1])
+   AT_CLEANUP])
+
+CHECK_RANGE_SET([insert])
+CHECK_RANGE_SET([delete])
+CHECK_RANGE_SET([allocate])
+CHECK_RANGE_SET([allocate-fully])
+CHECK_RANGE_SET([pool])
+CHECK_RANGE_SET([destroy-null])
index e146c3dbf537b7c765dfec60a16267756f8b4356..dd0e95fbf3e720b9c52bc98baef4ddda1d5c754b 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2007, 2009 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2009, 2010 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
@@ -40,9 +40,6 @@
 #define UNUSED
 #endif
 
-/* Currently running test. */
-static const char *test_name;
-
 /* Exit with a failure code.
    (Place a breakpoint on this function while debugging.) */
 static void
@@ -58,8 +55,7 @@ check_func (bool ok, int line)
 {
   if (!ok)
     {
-      printf ("%s:%d: Check failed in %s test\n",
-              __FILE__, line, test_name);
+      fprintf (stderr, "%s:%d: check failed\n", __FILE__, line);
       check_die ();
     }
 }
@@ -288,6 +284,7 @@ test_insert_delete_strides (void)
   deletions = xnmalloc (cnt, sizeof *deletions);
   for (stride = strides; stride < strides + stride_cnt; stride++)
     {
+      printf ("%lu\n", *stride);
       for (offset = offsets; offset < offsets + offset_cnt; offset++)
         {
           int k;
@@ -306,8 +303,6 @@ test_insert_delete_strides (void)
           test_insert_delete (insertions, insertions, cnt);
           test_insert_delete (insertions, deletions, cnt);
         }
-      putchar ('.');
-      fflush (stdout);
     }
   free (insertions);
   free (deletions);
@@ -428,27 +423,62 @@ test_random_insert_delete (void)
   sparse_array_destroy (spar);
   free (has_values);
 }
-
+\f
 /* Main program. */
 
-/* Runs TEST_FUNCTION and prints a message about NAME. */
-static void
-run_test (void (*test_function) (void), const char *name)
-{
-  test_name = name;
-  putchar ('.');
-  fflush (stdout);
-  test_function ();
-}
+struct test
+  {
+    const char *name;
+    const char *description;
+    void (*function) (void);
+  };
+
+static const struct test tests[] =
+  {
+    {
+      "random-insert-delete",
+      "random insertions and deletions",
+      test_random_insert_delete
+    },
+    {
+      "insert-delete-strides",
+      "insert in ascending order with strides and offset",
+      test_insert_delete_strides
+    },
+  };
+
+enum { N_TESTS = sizeof tests / sizeof *tests };
 
 int
-main (void)
+main (int argc, char *argv[])
 {
-  run_test (test_random_insert_delete,
-            "random insertions and deletions");
-  run_test (test_insert_delete_strides,
-            "insert in ascending order with strides and offset");
-  putchar ('\n');
+  int i;
 
-  return 0;
+  if (argc != 2)
+    {
+      fprintf (stderr, "exactly one argument required; use --help for help\n");
+      return EXIT_FAILURE;
+    }
+  else if (!strcmp (argv[1], "--help"))
+    {
+      printf ("%s: test sparse array library\n"
+              "usage: %s TEST-NAME\n"
+              "where TEST-NAME is one of the following:\n",
+              argv[0], argv[0]);
+      for (i = 0; i < N_TESTS; i++)
+        printf ("  %s\n    %s\n", tests[i].name, tests[i].description);
+      return 0;
+    }
+  else
+    {
+      for (i = 0; i < N_TESTS; i++)
+        if (!strcmp (argv[1], tests[i].name))
+          {
+            tests[i].function ();
+            return 0;
+          }
+
+      fprintf (stderr, "unknown test %s; use --help for help\n", argv[1]);
+      return EXIT_FAILURE;
+    }
 }
diff --git a/tests/libpspp/sparse-array.at b/tests/libpspp/sparse-array.at
new file mode 100644 (file)
index 0000000..ac2abef
--- /dev/null
@@ -0,0 +1,30 @@
+AT_BANNER([sparse array library])
+
+m4_define([CHECK_SPARSE_ARRAY],
+  [AT_SETUP([sparse array -- $1])
+   AT_KEYWORDS([sparse-array])
+   AT_CHECK([sparse-array-test $1])
+   AT_CLEANUP])
+
+CHECK_SPARSE_ARRAY([random-insert-delete])
+
+AT_SETUP([sparse array -- insert and delete with strides])
+AT_KEYWORDS([sparse-array])
+AT_CHECK([sparse-array-test insert-delete-strides], [0], [dnl
+1
+2
+4
+16
+64
+4096
+262144
+16777216
+3
+5
+17
+67
+4099
+262147
+16777259
+])
+AT_CLEANUP
diff --git a/tests/libpspp/sparse-xarray-test.at b/tests/libpspp/sparse-xarray-test.at
new file mode 100644 (file)
index 0000000..4ff7d3d
--- /dev/null
@@ -0,0 +1,83 @@
+AT_BANNER([sparse external arrays])
+
+m4_divert_push([PREPARE_TESTS])
+[sparse_xarray_queue_limit () {
+  # Each on-disk sparse_xarray eats up a file descriptor, so for the
+  # tests that involve on-disk sparse_xarrays we need to limit the
+  # maximum length of the queue.  Figure out how many file descriptors
+  # we can let the test program open at once.
+  OPEN_MAX=`getconf OPEN_MAX 2>/dev/null`
+  case $OPEN_MAX in
+    [0-9]*)
+      # Divide by 2 because some fds are used by other code.
+      queue_limit=`expr $OPEN_MAX / 2` 
+      ;;
+    undefined) 
+      # Assume that any system with a dynamic fd limit has a large limit.
+      queue_limit=500 
+      ;;
+    *)
+      case `uname -m 2>/dev/null` in
+       CYGWIN*)
+         # Cygwin claims a 256-fd limit as OPEN_MAX in <limits.h>.
+         queue_limit=128
+         ;;
+       MINGW*)
+         # The following email claims that Mingw should have a
+         # 2048-fd limit:
+         # http://www.mail-archive.com/squid-users@squid-cache.org/msg35249.html
+         queue_limit=1024
+         ;;
+       *)
+         # This seems fairly conservative these days.
+         queue_limit=50
+         ;;
+      esac
+      ;;
+  esac
+  echo "$queue_limit"
+}]
+m4_divert_pop([PREPARE_TESTS])
+
+AT_SETUP([in-memory sparse_xarray])
+dnl --values=3 would be a slightly better test but takes much longer.
+AT_CHECK([sparse-xarray-test$EXEEXT \
+           --verbosity=0 --queue-limit=`sparse_xarray_queue_limit` \
+           --columns=3 --max-rows=3 --max-memory-rows=3 --values=2],
+  [0], [ignore], [ignore])
+AT_CLEANUP
+
+m4_define([SPARSE_XARRAY_ON_DISK],
+  [AT_SETUP([on-disk sparse_xarray])
+   AT_CHECK([sparse-xarray-test$EXEEXT \
+              --verbosity=0 --queue-limit=`sparse_xarray_queue_limit` \
+               --columns=2 --max-rows=3 --max-memory-rows=$1 --values=2],
+     [0], [ignore], [ignore])
+   AT_CLEANUP])
+SPARSE_XARRAY_ON_DISK([0])
+SPARSE_XARRAY_ON_DISK([1])
+SPARSE_XARRAY_ON_DISK([2])
+
+AT_SETUP([copying between in-memory sparse_xarrays])
+AT_KEYWORDS([sparse_xarray])
+AT_CHECK([sparse-xarray-test$EXEEXT \
+           --verbosity=0 --queue-limit=`sparse_xarray_queue_limit` \
+           --columns=2 --max-rows=2 --max-memory-rows=2 --values=2 \
+           --xarrays=2 --no-write-rows --no-copy-columns],
+  [0], [ignore], [ignore])
+AT_CLEANUP
+
+m4_define([SPARSE_XARRAY_COPY_DISK],
+  [AT_SETUP([copying between on-disk sparse_xarrays])
+   AT_KEYWORDS([sparse_xarray])
+   limit=`sparse_xarray_queue_limit`
+   AT_CHECK([sparse-xarray-test$EXEEXT \
+               --verbosity=0 --queue-limit=`expr $limit / 2` \
+              --columns=1 --max-rows=2 --max-memory-rows=$max_memory_rows \
+              --values=2 --xarrays=2 --no-write-rows --no-copy-columns],
+            [0], [ignore], [ignore])
+   AT_CLEANUP])
+dnl These parameters are ridiculously low, but it's necessary
+dnl unless we want the tests to take a very long time.
+SPARSE_XARRAY_COPY_DISK([0])
+SPARSE_XARRAY_COPY_DISK([1])
diff --git a/tests/libpspp/sparse-xarray-test.sh b/tests/libpspp/sparse-xarray-test.sh
deleted file mode 100755 (executable)
index 71829db..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/bin/sh
-
-# This program tests the sparse_xarray abstract data type implementation.
-
-set -e
-
-: ${top_builddir:=.}
-RUN_TEST="${top_builddir}/tests/libpspp/sparse-xarray-test$EXEEXT --verbosity=0"
-
-# Each on-disk sparse_xarray eats up a file descriptor, so for the
-# tests that involve on-disk sparse_xarrays we need to limit the
-# maximum length of the queue.  Figure out how many file descriptors
-# we can let the test program open at once.
-OPEN_MAX=`getconf OPEN_MAX 2>/dev/null`
-case $OPEN_MAX in
-    [0-9]*)
-       # Divide by 2 because some fds are used by other code.
-       queue_limit=`expr $OPEN_MAX / 2` 
-       ;;
-    undefined) 
-       # Assume that any system with a dynamic fd limit has a large limit.
-       queue_limit=500 
-       ;;
-    *)
-       case `uname -m 2>/dev/null` in
-           CYGWIN*)
-                # Cygwin claims a 256-fd limit as OPEN_MAX in <limits.h>.
-               queue_limit=128
-               ;;
-           MINGW*)
-               # The following email claims that Mingw should have a
-               # 2048-fd limit:
-               # http://www.mail-archive.com/squid-users@squid-cache.org/msg35249.html
-               queue_limit=1024
-               ;;
-           *)
-               # This seems fairly conservative these days.
-               queue_limit=50
-               ;;
-       esac
-       ;;
-esac
-
-# Test completely in-memory sparse_xarray.  --values=3 would be a
-# slightly better test but takes much longer.
-$RUN_TEST --columns=3 --max-rows=3 --max-memory-rows=3 --values=2
-
-# Test on-disk sparse_xarrays.
-for max_memory_rows in 0 1 2; do
-    $RUN_TEST --columns=2 --max-rows=3 --max-memory-rows=$max_memory_rows --values=2 --queue-limit=$queue_limit
-done
-
-# Test copying back and forth between a pair of sparse_xarrays in
-# memory.
-$RUN_TEST --columns=2 --max-rows=2 --max-memory-rows=2 --values=2 --xarrays=2 --no-write-rows --no-copy-columns
-
-# Test copying back and forth between a pair of sparse_xarrays on
-# disk.  These parameters are ridiculously low, but it's necessary
-# unless we want the tests to take a very long time.
-for max_memory_rows in 0 1; do
-    $RUN_TEST --columns=1 --max-rows=2 --max-memory-rows=$max_memory_rows --values=2 --xarrays=2 --queue-limit=`expr $queue_limit / 2` --no-write-rows --no-copy-columns
-done
index 4e3867f4d50ee3c95d8786a14ed4a8b44d104def..c341d887b8a89da7683cc0d664ad38596cd0668b 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2008 Free Software Foundation, Inc.
+   Copyright (C) 2008, 2010 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
@@ -22,9 +22,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 \f
-/* Currently running test. */
-static const char *test_name;
-
 /* Exit with a failure code.
    (Place a breakpoint on this function while debugging.) */
 static void
@@ -47,7 +44,7 @@ check_26adic (unsigned long int number, const char *expected_string)
 }
 
 static void
-test_str_format_26adic (void)
+test_format_26adic (void)
 {
   check_26adic (0, "");
   check_26adic (1, "A");
@@ -63,21 +60,54 @@ test_str_format_26adic (void)
 \f
 /* Main program. */
 
-/* Runs TEST_FUNCTION and prints a message about NAME. */
-static void
-run_test (void (*test_function) (void), const char *name)
-{
-  test_name = name;
-  putchar ('.');
-  fflush (stdout);
-  test_function ();
-}
+struct test
+  {
+    const char *name;
+    const char *description;
+    void (*function) (void);
+  };
+
+static const struct test tests[] =
+  {
+    {
+      "format-26adic",
+      "format 26-adic strings",
+      test_format_26adic
+    }
+  };
+
+enum { N_TESTS = sizeof tests / sizeof *tests };
 
 int
-main (void)
+main (int argc, char *argv[])
 {
-  run_test (test_str_format_26adic, "format 26-adic strings");
-  putchar ('\n');
+  int i;
 
-  return 0;
+  if (argc != 2)
+    {
+      fprintf (stderr, "exactly one argument required; use --help for help\n");
+      return EXIT_FAILURE;
+    }
+  else if (!strcmp (argv[1], "--help"))
+    {
+      printf ("%s: test string library\n"
+              "usage: %s TEST-NAME\n"
+              "where TEST-NAME is one of the following:\n",
+              argv[0], argv[0]);
+      for (i = 0; i < N_TESTS; i++)
+        printf ("  %s\n    %s\n", tests[i].name, tests[i].description);
+      return 0;
+    }
+  else
+    {
+      for (i = 0; i < N_TESTS; i++)
+        if (!strcmp (argv[1], tests[i].name))
+          {
+            tests[i].function ();
+            return 0;
+          }
+
+      fprintf (stderr, "unknown test %s; use --help for help\n", argv[1]);
+      return EXIT_FAILURE;
+    }
 }
diff --git a/tests/libpspp/str.at b/tests/libpspp/str.at
new file mode 100644 (file)
index 0000000..83ccc95
--- /dev/null
@@ -0,0 +1,5 @@
+AT_BANNER([string library])
+
+AT_SETUP([26-adic string formatting])
+AT_CHECK([str-test format-26adic])
+AT_CLEANUP
index e3f3b796d4a94eb7582dafceca71ae672fac740f..68fde9c1a31d13a50b3b250b628a94d5c8f82859 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2008, 2009, 2010 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
@@ -40,9 +40,6 @@
 #include <libpspp/compiler.h>
 #include <libpspp/string-set.h>
 \f
-/* Currently running test. */
-static const char *test_name;
-
 /* Exit with a failure code.
    (Place a breakpoint on this function while debugging.) */
 static void
@@ -58,8 +55,7 @@ check_func (bool ok, int line)
 {
   if (!ok)
     {
-      printf ("Check failed in %s test at %s, line %d\n",
-              test_name, __FILE__, line);
+      fprintf (stderr, "%s:%d: check failed\n", __FILE__, line);
       check_die ();
     }
 }
@@ -868,39 +864,120 @@ test_destroy_null (void)
 \f
 /* Main program. */
 
-/* Runs TEST_FUNCTION and prints a message about NAME. */
-static void
-run_test (void (*test_function) (void), const char *name)
-{
-  test_name = name;
-  putchar ('.');
-  fflush (stdout);
-  test_function ();
-}
+struct test
+  {
+    const char *name;
+    const char *description;
+    void (*function) (void);
+  };
+
+static const struct test tests[] =
+  {
+    {
+      "insert-any-remove-any",
+      "insert any order, delete any order",
+      test_insert_any_remove_any
+    },
+    {
+      "insert-any-remove-same",
+      "insert any order, delete same order",
+      test_insert_any_remove_same
+    },
+    {
+      "insert-any-remove-reverse",
+      "insert any order, delete reverse order",
+      test_insert_any_remove_reverse
+    },
+    {
+      "random-sequence",
+      "insert and delete in random sequence",
+      test_random_sequence
+    },
+    {
+      "replace",
+      "insert and replace in random sequence",
+      test_replace
+    },
+    {
+      "insert-ordered",
+      "insert in ascending order",
+      test_insert_ordered
+    },
+    {
+      "clear",
+      "clear",
+      test_clear
+    },
+    {
+      "clone",
+      "clone",
+      test_clone
+    },
+    {
+      "swap",
+      "swap",
+      test_swap
+    },
+    {
+      "node-swap-value",
+      "node_swap_value",
+      test_node_swap_value
+    },
+    {
+      "insert-map",
+      "insert_map",
+      test_insert_map
+    },
+    {
+      "replace-map",
+      "replace_map",
+      test_replace_map
+    },
+    {
+      "get-keys-and-values",
+      "get keys and values",
+      test_get_keys_and_values
+    },
+    {
+      "destroy-null",
+      "destroying null table",
+      test_destroy_null
+    },
+  };
+
+enum { N_TESTS = sizeof tests / sizeof *tests };
 
 int
-main (void)
-{
-  run_test (test_insert_any_remove_any, "insert any order, delete any order");
-  run_test (test_insert_any_remove_same,
-            "insert any order, delete same order");
-  run_test (test_insert_any_remove_reverse,
-            "insert any order, delete reverse order");
-  run_test (test_random_sequence, "insert and delete in random sequence");
-  run_test (test_replace, "insert and replace in random sequence");
-  run_test (test_insert_ordered, "insert in ascending order");
-  run_test (test_clear, "clear");
-  run_test (test_clone, "clone");
-  run_test (test_swap, "swap");
-  run_test (test_node_swap_value, "node_swap_value");
-  run_test (test_insert_map, "insert_map");
-  run_test (test_replace_map, "replace_map");
-  run_test (test_get_keys_and_values, "get keys and values");
-  run_test (test_destroy_null, "destroying null table");
-
-  putchar ('\n');
-
-  free_strings ();
-
-  return 0;
+main (int argc, char *argv[])
+{
+  int i;
+
+  if (argc != 2)
+    {
+      fprintf (stderr, "exactly one argument required; use --help for help\n");
+      return EXIT_FAILURE;
+    }
+  else if (!strcmp (argv[1], "--help"))
+    {
+      printf ("%s: test string map library\n"
+              "usage: %s TEST-NAME\n"
+              "where TEST-NAME is one of the following:\n",
+              argv[0], argv[0]);
+      for (i = 0; i < N_TESTS; i++)
+        printf ("  %s\n    %s\n", tests[i].name, tests[i].description);
+      return 0;
+    }
+  else
+    {
+      for (i = 0; i < N_TESTS; i++)
+        if (!strcmp (argv[1], tests[i].name))
+          {
+            tests[i].function ();
+            free_strings ();
+            return 0;
+          }
+
+      fprintf (stderr, "unknown test %s; use --help for help\n", argv[1]);
+      return EXIT_FAILURE;
+    }
 }
diff --git a/tests/libpspp/string-map.at b/tests/libpspp/string-map.at
new file mode 100644 (file)
index 0000000..0c1dbc9
--- /dev/null
@@ -0,0 +1,22 @@
+AT_BANNER([string map library])
+
+m4_define([CHECK_STRING_MAP],
+  [AT_SETUP([string map -- $1])
+   AT_KEYWORDS([string-map])
+   AT_CHECK([string-map-test $1])
+   AT_CLEANUP])
+
+CHECK_STRING_MAP([insert-any-remove-any])
+CHECK_STRING_MAP([insert-any-remove-same])
+CHECK_STRING_MAP([insert-any-remove-reverse])
+CHECK_STRING_MAP([random-sequence])
+CHECK_STRING_MAP([replace])
+CHECK_STRING_MAP([insert-ordered])
+CHECK_STRING_MAP([clear])
+CHECK_STRING_MAP([clone])
+CHECK_STRING_MAP([swap])
+CHECK_STRING_MAP([node-swap-value])
+CHECK_STRING_MAP([insert-map])
+CHECK_STRING_MAP([replace-map])
+CHECK_STRING_MAP([get-keys-and-values])
+CHECK_STRING_MAP([destroy-null])
index 6aafef445b9fe2c4b366407b219c2addc321732f..7f136a66c4e8ca1dabfee0d5ba2f33df99df8e34 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2007, 2008, 2009 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2008, 2009, 2010 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
@@ -36,9 +36,6 @@
 
 #include <libpspp/compiler.h>
 \f
-/* Currently running test. */
-static const char *test_name;
-
 /* Exit with a failure code.
    (Place a breakpoint on this function while debugging.) */
 static void
@@ -54,8 +51,7 @@ check_func (bool ok, int line)
 {
   if (!ok)
     {
-      printf ("Check failed in %s test at %s, line %d\n",
-              test_name, __FILE__, line);
+      fprintf (stderr, "%s:%d: check failed\n", __FILE__, line);
       check_die ();
     }
 }
@@ -644,38 +640,115 @@ test_destroy_null (void)
 \f
 /* Main program. */
 
-/* Runs TEST_FUNCTION and prints a message about NAME. */
-static void
-run_test (void (*test_function) (void), const char *name)
-{
-  test_name = name;
-  putchar ('.');
-  fflush (stdout);
-  test_function ();
-}
+struct test
+  {
+    const char *name;
+    const char *description;
+    void (*function) (void);
+  };
+
+static const struct test tests[] =
+  {
+    {
+      "insert-any-remove-any",
+      "insert any order, delete any order",
+      test_insert_any_remove_any
+    },
+    {
+      "insert-any-remove-same",
+      "insert any order, delete same order",
+      test_insert_any_remove_same
+    },
+    {
+      "insert-any-remove-reverse",
+      "insert any order, delete reverse order",
+      test_insert_any_remove_reverse
+    },
+    {
+      "random-sequence",
+      "insert and delete in random sequence",
+      test_random_sequence
+    },
+    {
+      "insert-ordered",
+      "insert in ascending order",
+      test_insert_ordered
+    },
+    {
+      "union",
+      "union",
+      test_union
+    },
+    {
+      "union-and-intersection",
+      "union and intersection",
+      test_union_and_intersection
+    },
+    {
+      "intersect",
+      "intersect",
+      test_intersect
+    },
+    {
+      "subtract",
+      "subtract",
+      test_subtract
+    },
+    {
+      "swap",
+      "swap",
+      test_swap
+    },
+    {
+      "clear",
+      "clear",
+      test_clear
+    },
+    {
+      "clone",
+      "clone",
+      test_clone
+    },
+    {
+      "destroy-null",
+      "destroying null table",
+      test_destroy_null
+    },
+  };
+
+enum { N_TESTS = sizeof tests / sizeof *tests };
 
 int
-main (void)
-{
-  run_test (test_insert_any_remove_any, "insert any order, delete any order");
-  run_test (test_insert_any_remove_same,
-            "insert any order, delete same order");
-  run_test (test_insert_any_remove_reverse,
-            "insert any order, delete reverse order");
-  run_test (test_random_sequence, "insert and delete in random sequence");
-  run_test (test_insert_ordered, "insert in ascending order");
-  run_test (test_union, "union");
-  run_test (test_union_and_intersection, "union and intersection");
-  run_test (test_intersect, "intersect");
-  run_test (test_subtract, "subtract");
-  run_test (test_swap, "swap");
-  run_test (test_clear, "clear");
-  run_test (test_clone, "clone");
-  run_test (test_destroy_null, "destroying null table");
-
-  putchar ('\n');
-
-  free_strings ();
-
-  return 0;
+main (int argc, char *argv[])
+{
+  int i;
+
+  if (argc != 2)
+    {
+      fprintf (stderr, "exactly one argument required; use --help for help\n");
+      return EXIT_FAILURE;
+    }
+  else if (!strcmp (argv[1], "--help"))
+    {
+      printf ("%s: test string set library\n"
+              "usage: %s TEST-NAME\n"
+              "where TEST-NAME is one of the following:\n",
+              argv[0], argv[0]);
+      for (i = 0; i < N_TESTS; i++)
+        printf ("  %s\n    %s\n", tests[i].name, tests[i].description);
+      return 0;
+    }
+  else
+    {
+      for (i = 0; i < N_TESTS; i++)
+        if (!strcmp (argv[1], tests[i].name))
+          {
+            tests[i].function ();
+            free_strings ();
+            return 0;
+          }
+
+      fprintf (stderr, "unknown test %s; use --help for help\n", argv[1]);
+      return EXIT_FAILURE;
+    }
 }
diff --git a/tests/libpspp/string-set.at b/tests/libpspp/string-set.at
new file mode 100644 (file)
index 0000000..d782e9b
--- /dev/null
@@ -0,0 +1,21 @@
+AT_BANNER([string set library])
+
+m4_define([CHECK_STRING_SET],
+  [AT_SETUP([string set -- $1])
+   AT_KEYWORDS([string-set])
+   AT_CHECK([string-set-test $1])
+   AT_CLEANUP])
+
+CHECK_STRING_SET([insert-any-remove-any])
+CHECK_STRING_SET([insert-any-remove-same])
+CHECK_STRING_SET([insert-any-remove-reverse])
+CHECK_STRING_SET([random-sequence])
+CHECK_STRING_SET([insert-ordered])
+CHECK_STRING_SET([union])
+CHECK_STRING_SET([union-and-intersection])
+CHECK_STRING_SET([intersect])
+CHECK_STRING_SET([subtract])
+CHECK_STRING_SET([swap])
+CHECK_STRING_SET([clear])
+CHECK_STRING_SET([clone])
+CHECK_STRING_SET([destroy-null])
index 626dfacb403085f0510ac7cae1cc89d899244d95..a8dd9dd6b7068049a377a8f56c23b4282262a58a 100644 (file)
@@ -43,9 +43,6 @@
 #include "libpspp/string-set.h"
 #include "libpspp/stringi-set.h"
 \f
-/* Currently running test. */
-static const char *test_name;
-
 /* Exit with a failure code.
    (Place a breakpoint on this function while debugging.) */
 static void
@@ -61,8 +58,7 @@ check_func (bool ok, int line)
 {
   if (!ok)
     {
-      printf ("Check failed in %s test at %s, line %d\n",
-              test_name, __FILE__, line);
+      fprintf (stderr, "%s:%d: check failed\n", __FILE__, line);
       check_die ();
     }
 }
@@ -921,39 +917,120 @@ test_destroy_null (void)
 \f
 /* Main program. */
 
-/* Runs TEST_FUNCTION and prints a message about NAME. */
-static void
-run_test (void (*test_function) (void), const char *name)
-{
-  test_name = name;
-  putchar ('.');
-  fflush (stdout);
-  test_function ();
-}
+struct test
+  {
+    const char *name;
+    const char *description;
+    void (*function) (void);
+  };
+
+static const struct test tests[] =
+  {
+    {
+      "insert-any-remove-any",
+      "insert any order, delete any order",
+      test_insert_any_remove_any
+    },
+    {
+      "insert-any-remove-same",
+      "insert any order, delete same order",
+      test_insert_any_remove_same
+    },
+    {
+      "insert-any-remove-reverse",
+      "insert any order, delete reverse order",
+      test_insert_any_remove_reverse
+    },
+    {
+      "random-sequence",
+      "insert and delete in random sequence",
+      test_random_sequence
+    },
+    {
+      "replace",
+      "insert and replace in random sequence",
+      test_replace
+    },
+    {
+      "insert-ordered",
+      "insert in ascending order",
+      test_insert_ordered
+    },
+    {
+      "clear",
+      "clear",
+      test_clear
+    },
+    {
+      "clone",
+      "clone",
+      test_clone
+    },
+    {
+      "swap",
+      "swap",
+      test_swap
+    },
+    {
+      "node-swap-value",
+      "node_swap_value",
+      test_node_swap_value
+    },
+    {
+      "insert-map",
+      "insert_map",
+      test_insert_map
+    },
+    {
+      "replace-map",
+      "replace_map",
+      test_replace_map
+    },
+    {
+      "get-keys-and-values",
+      "get keys and values",
+      test_get_keys_and_values
+    },
+    {
+      "destroy-null",
+      "destroying null table",
+      test_destroy_null
+    },
+  };
+
+enum { N_TESTS = sizeof tests / sizeof *tests };
 
 int
-main (void)
-{
-  run_test (test_insert_any_remove_any, "insert any order, delete any order");
-  run_test (test_insert_any_remove_same,
-            "insert any order, delete same order");
-  run_test (test_insert_any_remove_reverse,
-            "insert any order, delete reverse order");
-  run_test (test_random_sequence, "insert and delete in random sequence");
-  run_test (test_replace, "insert and replace in random sequence");
-  run_test (test_insert_ordered, "insert in ascending order");
-  run_test (test_clear, "clear");
-  run_test (test_clone, "clone");
-  run_test (test_swap, "swap");
-  run_test (test_node_swap_value, "node_swap_value");
-  run_test (test_insert_map, "insert_map");
-  run_test (test_replace_map, "replace_map");
-  run_test (test_get_keys_and_values, "get keys and values");
-  run_test (test_destroy_null, "destroying null table");
-
-  putchar ('\n');
-
-  free_strings ();
-
-  return 0;
+main (int argc, char *argv[])
+{
+  int i;
+
+  if (argc != 2)
+    {
+      fprintf (stderr, "exactly one argument required; use --help for help\n");
+      return EXIT_FAILURE;
+    }
+  else if (!strcmp (argv[1], "--help"))
+    {
+      printf ("%s: test case-insensitive string map library\n"
+              "usage: %s TEST-NAME\n"
+              "where TEST-NAME is one of the following:\n",
+              argv[0], argv[0]);
+      for (i = 0; i < N_TESTS; i++)
+        printf ("  %s\n    %s\n", tests[i].name, tests[i].description);
+      return 0;
+    }
+  else
+    {
+      for (i = 0; i < N_TESTS; i++)
+        if (!strcmp (argv[1], tests[i].name))
+          {
+            tests[i].function ();
+            free_strings ();
+            return 0;
+          }
+
+      fprintf (stderr, "unknown test %s; use --help for help\n", argv[1]);
+      return EXIT_FAILURE;
+    }
 }
diff --git a/tests/libpspp/stringi-map.at b/tests/libpspp/stringi-map.at
new file mode 100644 (file)
index 0000000..c14f0e6
--- /dev/null
@@ -0,0 +1,22 @@
+AT_BANNER([case-insensitive string map library])
+
+m4_define([CHECK_STRINGI_MAP],
+  [AT_SETUP([case-insensitive string map -- $1])
+   AT_KEYWORDS([stringi-map])
+   AT_CHECK([stringi-map-test $1])
+   AT_CLEANUP])
+
+CHECK_STRINGI_MAP([insert-any-remove-any])
+CHECK_STRINGI_MAP([insert-any-remove-same])
+CHECK_STRINGI_MAP([insert-any-remove-reverse])
+CHECK_STRINGI_MAP([random-sequence])
+CHECK_STRINGI_MAP([replace])
+CHECK_STRINGI_MAP([insert-ordered])
+CHECK_STRINGI_MAP([clear])
+CHECK_STRINGI_MAP([clone])
+CHECK_STRINGI_MAP([swap])
+CHECK_STRINGI_MAP([node-swap-value])
+CHECK_STRINGI_MAP([insert-map])
+CHECK_STRINGI_MAP([replace-map])
+CHECK_STRINGI_MAP([get-keys-and-values])
+CHECK_STRINGI_MAP([destroy-null])
index 25f52c8252700191de70539fab9d7b3e06da7bc6..a20e84ce185d9ab2087860bbe0a878d8a7cc2e74 100644 (file)
@@ -38,9 +38,6 @@
 #include "libpspp/compiler.h"
 #include "libpspp/str.h"
 \f
-/* Currently running test. */
-static const char *test_name;
-
 /* Exit with a failure code.
    (Place a breakpoint on this function while debugging.) */
 static void
@@ -56,8 +53,7 @@ check_func (bool ok, int line)
 {
   if (!ok)
     {
-      printf ("Check failed in %s test at %s, line %d\n",
-              test_name, __FILE__, line);
+      fprintf (stderr, "%s:%d: check failed\n", __FILE__, line);
       check_die ();
     }
 }
@@ -682,38 +678,115 @@ test_destroy_null (void)
 \f
 /* Main program. */
 
-/* Runs TEST_FUNCTION and prints a message about NAME. */
-static void
-run_test (void (*test_function) (void), const char *name)
-{
-  test_name = name;
-  putchar ('.');
-  fflush (stdout);
-  test_function ();
-}
+struct test
+  {
+    const char *name;
+    const char *description;
+    void (*function) (void);
+  };
+
+static const struct test tests[] =
+  {
+    {
+      "insert-any-remove-any",
+      "insert any order, delete any order",
+      test_insert_any_remove_any
+    },
+    {
+      "insert-any-remove-same",
+      "insert any order, delete same order",
+      test_insert_any_remove_same
+    },
+    {
+      "insert-any-remove-reverse",
+      "insert any order, delete reverse order",
+      test_insert_any_remove_reverse
+    },
+    {
+      "random-sequence",
+      "insert and delete in random sequence",
+      test_random_sequence
+    },
+    {
+      "insert-ordered",
+      "insert in ascending order",
+      test_insert_ordered
+    },
+    {
+      "union",
+      "union",
+      test_union
+    },
+    {
+      "union-and-intersection",
+      "union and intersection",
+      test_union_and_intersection
+    },
+    {
+      "intersect",
+      "intersect",
+      test_intersect
+    },
+    {
+      "subtract",
+      "subtract",
+      test_subtract
+    },
+    {
+      "swap",
+      "swap",
+      test_swap
+    },
+    {
+      "clear",
+      "clear",
+      test_clear
+    },
+    {
+      "clone",
+      "clone",
+      test_clone
+    },
+    {
+      "destroy-null",
+      "destroying null table",
+      test_destroy_null
+    },
+  };
+
+enum { N_TESTS = sizeof tests / sizeof *tests };
 
 int
-main (void)
-{
-  run_test (test_insert_any_remove_any, "insert any order, delete any order");
-  run_test (test_insert_any_remove_same,
-            "insert any order, delete same order");
-  run_test (test_insert_any_remove_reverse,
-            "insert any order, delete reverse order");
-  run_test (test_random_sequence, "insert and delete in random sequence");
-  run_test (test_insert_ordered, "insert in ascending order");
-  run_test (test_union, "union");
-  run_test (test_union_and_intersection, "union and intersection");
-  run_test (test_intersect, "intersect");
-  run_test (test_subtract, "subtract");
-  run_test (test_swap, "swap");
-  run_test (test_clear, "clear");
-  run_test (test_clone, "clone");
-  run_test (test_destroy_null, "destroying null table");
-
-  putchar ('\n');
-
-  free_strings ();
-
-  return 0;
+main (int argc, char *argv[])
+{
+  int i;
+
+  if (argc != 2)
+    {
+      fprintf (stderr, "exactly one argument required; use --help for help\n");
+      return EXIT_FAILURE;
+    }
+  else if (!strcmp (argv[1], "--help"))
+    {
+      printf ("%s: test case-insensitive string set library\n"
+              "usage: %s TEST-NAME\n"
+              "where TEST-NAME is one of the following:\n",
+              argv[0], argv[0]);
+      for (i = 0; i < N_TESTS; i++)
+        printf ("  %s\n    %s\n", tests[i].name, tests[i].description);
+      return 0;
+    }
+  else
+    {
+      for (i = 0; i < N_TESTS; i++)
+        if (!strcmp (argv[1], tests[i].name))
+          {
+            tests[i].function ();
+            free_strings ();
+            return 0;
+          }
+
+      fprintf (stderr, "unknown test %s; use --help for help\n", argv[1]);
+      return EXIT_FAILURE;
+    }
 }
diff --git a/tests/libpspp/stringi-set.at b/tests/libpspp/stringi-set.at
new file mode 100644 (file)
index 0000000..b38e847
--- /dev/null
@@ -0,0 +1,21 @@
+AT_BANNER([case-insensitive string set library])
+
+m4_define([CHECK_STRINGI_SET],
+  [AT_SETUP([case-insensitive string set -- $1])
+   AT_KEYWORDS([stringi-set])
+   AT_CHECK([stringi-set-test $1])
+   AT_CLEANUP])
+
+CHECK_STRINGI_SET([insert-any-remove-any])
+CHECK_STRINGI_SET([insert-any-remove-same])
+CHECK_STRINGI_SET([insert-any-remove-reverse])
+CHECK_STRINGI_SET([random-sequence])
+CHECK_STRINGI_SET([insert-ordered])
+CHECK_STRINGI_SET([union])
+CHECK_STRINGI_SET([union-and-intersection])
+CHECK_STRINGI_SET([intersect])
+CHECK_STRINGI_SET([subtract])
+CHECK_STRINGI_SET([swap])
+CHECK_STRINGI_SET([clear])
+CHECK_STRINGI_SET([clone])
+CHECK_STRINGI_SET([destroy-null])
index c603c3a876a61ee2ce5e21815d93e6a8e829e1c6..f5c002652a4409af5f9ef834b2d3ca0dd2f3fe82 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2007 Free Software Foundation, Inc.
+   Copyright (C) 2007, 2010 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
@@ -39,9 +39,6 @@
 
 #include "xalloc.h"
 \f
-/* Currently running test. */
-static const char *test_name;
-
 /* Exit with a failure code.
    (Place a breakpoint on this function while debugging.) */
 static void
@@ -57,8 +54,7 @@ check_func (bool ok, int line)
 {
   if (!ok)
     {
-      printf ("Check failed in %s test at %s, line %d\n",
-              test_name, __FILE__, line);
+      fprintf (stderr, "%s:%d: check failed\n", __FILE__, line);
       check_die ();
     }
 }
@@ -677,25 +673,74 @@ test_splice_in (void)
 \f
 /* Main program. */
 
-/* Runs TEST_FUNCTION and prints a message about NAME. */
-static void
-run_test (void (*test_function) (void), const char *name)
-{
-  test_name = name;
-  putchar ('.');
-  fflush (stdout);
-  test_function ();
-}
+struct test
+  {
+    const char *name;
+    const char *description;
+    void (*function) (void);
+  };
+
+static const struct test tests[] =
+  {
+    {
+      "insert",
+      "insert",
+      test_insert
+    },
+    {
+      "delete",
+      "delete",
+      test_delete
+    },
+    {
+      "resize",
+      "resize",
+      test_resize
+    },
+    {
+      "splice-out",
+      "splice out",
+      test_splice_out
+    },
+    {
+      "splice-in",
+      "splice in",
+      test_splice_in
+    },
+  };
+
+enum { N_TESTS = sizeof tests / sizeof *tests };
 
 int
-main (void)
+main (int argc, char *argv[])
 {
-  run_test (test_insert, "insert");
-  run_test (test_delete, "delete");
-  run_test (test_resize, "resize");
-  run_test (test_splice_out, "splice out");
-  run_test (test_splice_in, "splice in");
-  putchar ('\n');
-
-  return 0;
+  int i;
+
+  if (argc != 2)
+    {
+      fprintf (stderr, "exactly one argument required; use --help for help\n");
+      return EXIT_FAILURE;
+    }
+  else if (!strcmp (argv[1], "--help"))
+    {
+      printf ("%s: test tower library\n"
+              "usage: %s TEST-NAME\n"
+              "where TEST-NAME is one of the following:\n",
+              argv[0], argv[0]);
+      for (i = 0; i < N_TESTS; i++)
+        printf ("  %s\n    %s\n", tests[i].name, tests[i].description);
+      return 0;
+    }
+  else
+    {
+      for (i = 0; i < N_TESTS; i++)
+        if (!strcmp (argv[1], tests[i].name))
+          {
+            tests[i].function ();
+            return 0;
+          }
+
+      fprintf (stderr, "unknown test %s; use --help for help\n", argv[1]);
+      return EXIT_FAILURE;
+    }
 }
diff --git a/tests/libpspp/tower.at b/tests/libpspp/tower.at
new file mode 100644 (file)
index 0000000..c4d6f82
--- /dev/null
@@ -0,0 +1,12 @@
+AT_BANNER([tower library])
+
+m4_define([CHECK_TOWER],
+  [AT_SETUP([tower -- $1])
+   AT_CHECK([tower-test $1])
+   AT_CLEANUP])
+
+CHECK_TOWER([insert])
+CHECK_TOWER([delete])
+CHECK_TOWER([resize])
+CHECK_TOWER([splice-out])
+CHECK_TOWER([splice-in])
diff --git a/tests/list.data b/tests/list.data
deleted file mode 100644 (file)
index 1205b46..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-7675324663485137890734831064091758592958428152951137532659418752338157675324663485137890734831064091758592958428152951137532658
-8886930894241775423783341867603681475586900279731022668741684555067148886930894241775423783341867603681475586900279731022668746
-4926115079091871527264278522424838562069980278342188725586260041526024926115079091871527264278522424838562069980278342188725589
-8198488920231958758793320014917736896880133221016088440640236265727008198488920231958758793320014917736896880133221016088440641
-4527778987095637298455415166506950647746645120849887640160659505391494527778987095637298455415166506950647746645120849887640166
-2399619670777327606635251150735186059118186910880465190328196246896752399619670777327606635251150735186059118186910880465190325
-1667799691266476994404743989237315394276412079760310706395103299441571667799691266476994404743989237315394276412079760310706394
-1623914684196892316847117011543627119597908599740525246164191508013201623914684196892316847117011543627119597908599740525246168
-3681393233760129489113121829599857288501099123283196628714148965084573681393233760129489113121829599857288501099123283196628710
-6418731145431082994856816505035997982096732150359754547299618487885306418731145431082994856816505035997982096732150359754547297
-2284534083749507716651086429071219765163759829793478587147234341234422284534083749507716651086429071219765163759829793478587149
-6617637452040749181349911788974757522469664838867901014182486697572956617637452040749181349911788974757522469664838867901014185
-9865713582686612007222010782682778269839299871393015436402026985409089865713582686612007222010782682778269839299871393015436406
-1163234537762200807794960252447773098443340762844734350378750440902951163234537762200807794960252447773098443340762844734350377
-9981663637563833300035426136702893989464123526087380834445132807905549981663637563833300035426136702893989464123526087380834449
-6821567746059103565005738960248842198995590602288700476282307110291686821567746059103565005738960248842198995590602288700476284
-0952774952675261545955280805340357545942400156201918638742082134243330952774952675261545955280805340357545942400156201918638748
-1641790193211861509106839217119496865877118406579619492614744114869021641790193211861509106839217119496865877118406579619492615
-3763182871580174789328837194968536876074344562932187960893275881656443763182871580174789328837194968536876074344562932187960891
-2046820753062224045535890932721137819807333757171926425442973439426792046820753062224045535890932721137819807333757171926425441
-7970620091940385928762632764618525899890186135929797170456339589318347970620091940385928762632764618525899890186135929797170458
-4841176017025105774506500896252757076690392034601283834048308843632644841176017025105774506500896252757076690392034601283834045
-6949973797990956291072158123887473582962673878519619834868801568536326949973797990956291072158123887473582962673878519619834868
-1396285996535489440816124700682933874365128786823824758133461156649721396285996535489440816124700682933874365128786823824758138
-0700489524358208358697349450036208378421878800636427151211185320194660700489524358208358697349450036208378421878800636427151218
diff --git a/tests/math/randist.at b/tests/math/randist.at
new file mode 100644 (file)
index 0000000..afc1185
--- /dev/null
@@ -0,0 +1,2868 @@
+AT_BANNER([random distributions])
+
+m4_divert_push([PREPARE_TESTS])
+[randist_compare () {
+  cat > compare.pl <<'EOF'
+use strict;
+use warnings 'all';
+
+my ($epsilon) = 1;
+
+open (EXPECTED, '<', $ARGV[0]) or die "$ARGV[0]: open: $!\n";
+open (ACTUAL, '<', $ARGV[1]) or die "$ARGV[1]: open: $!\n";
+
+my ($errors) = 0;
+LINE: for (;;) {
+    my $a = <EXPECTED>;
+    my $b = <ACTUAL>;
+
+    last if !defined $a && !defined $b;
+    die "$ARGV[0]:$.: unexpected end of file\n" if !defined $a;
+    die "$ARGV[1]:$.: unexpected end of file\n" if !defined $b;
+
+    my (@a) = split (' ', $a);
+    my (@b) = split (' ', $b);
+    die "$ARGV[1]:$.: contains ". scalar (@b) . " fields but should "
+      . "contain " . scalar (@a) . "\n"
+       if $#a != $#b;
+    foreach my $i (0...$#a) {
+       die "$ARGV[1]:$.: unexpected number of decimals\n"
+         if count_decimals ($a[$i]) != count_decimals ($b[$i]);
+
+       my ($an) = to_int ($a[$i]);
+       my ($bn) = to_int ($b[$i]);
+       if ($an ne $bn && ($bn < $an - $epsilon || $bn > $an + $epsilon)) {
+           $errors++;
+           if ($errors > 50) {
+               print "$ARGV[1]: Additional differences suppressed.\n";
+               last LINE;
+           }
+           print "$ARGV[1]:$.: Values differ from $ARGV[0]:$.\n";
+           print "Expected:\n", $a;
+           print "Calculated:\n", $b;
+       }
+    }
+}
+exit ($errors > 0);
+
+sub count_decimals {
+    my ($s) = @_;
+    return length (substr ($s, index ($s, '.')));
+}
+
+sub to_int {
+    local ($_) = @_;
+    s/\.//;
+    return $_;
+}
+EOF
+}]
+m4_divert_pop([PREPARE_TESTS])
+
+m4_define([RANDIST_CHECK],
+  [AT_SETUP([random distributions -- $1])
+   randist_compare
+   AT_DATA([$1.in], [$4])
+   AT_DATA([$1.sps], [dnl
+DATA LIST LIST FILE='$1.in' NOTABLE SKIP=1
+       /P $2[]m4_foreach_w([function], [x $3], [ X[]function]).
+NUMERIC x $3 (F10.4).
+COMPUTE x = IDF.$1(P[]m4_foreach_w([variable], [$2], [, variable])).
+m4_foreach_w([function], [$3],
+  [COMPUTE function = function[].$1[](x[]m4_foreach_w([variable], [$2], [, variable])).
+])dnl
+DO IF $CASENUM = 1.
+PRINT OUTFILE='$1.out'/"dnl
+m4_foreach_w([variable], [P $2], [m4_format([%8s ], variable)])dnl
+m4_foreach_w([function], [x $3], [m4_format([%10s ], function)])".
+END IF.
+PRINT OUTFILE='$1.out'/P $2 x $3.
+EXECUTE.
+])
+   AT_CHECK([pspp -O format=csv $1.sps])
+   AT_CHECK([$PERL compare.pl $1.in $1.out])
+   AT_CLEANUP])
+
+RANDIST_CHECK([beta], [a b], [cdf pdf], [dnl
+       P        a        b          x        cdf        pdf 
+     .01      .75      .25      .0107      .0100      .7059 
+     .01      .75      .50      .0047      .0100     1.5975 
+     .01      .75     1.00      .0022      .0100     3.4812 
+     .01      .75     1.50      .0014      .0100     5.4014 
+     .01      .75     2.00      .0010      .0100     7.3328 
+     .01      .75     2.50      .0008      .0100     9.2691 
+     .01      .75     3.00      .0007      .0100    11.2077 
+     .01     1.00      .25      .0394      .0100      .2577 
+     .01     1.00      .50      .0199      .0100      .5051 
+     .01     1.00     1.00      .0100      .0100     1.0000 
+     .01     1.00     1.50      .0067      .0100     1.4950 
+     .01     1.00     2.00      .0050      .0100     1.9900 
+     .01     1.00     2.50      .0040      .0100     2.4850 
+     .01     1.00     3.00      .0033      .0100     2.9800 
+     .01     1.50      .25      .1343      .0100      .1168 
+     .01     1.50      .50      .0808      .0100      .1888 
+     .01     1.50     1.00      .0464      .0100      .3232 
+     .01     1.50     1.50      .0328      .0100      .4538 
+     .01     1.50     2.00      .0255      .0100      .5831 
+     .01     1.50     2.50      .0208      .0100      .7118 
+     .01     1.50     3.00      .0176      .0100      .8402 
+     .10      .75      .25      .2094      .1000      .3968 
+     .10      .75      .50      .0985      .1000      .7845 
+     .10      .75     1.00      .0464      .1000     1.6158 
+     .10      .75     1.50      .0302      .1000     2.4656 
+     .10      .75     2.00      .0223      .1000     3.3210 
+     .10      .75     2.50      .0177      .1000     4.1787 
+     .10      .75     3.00      .0146      .1000     5.0376 
+     .10     1.00      .25      .3439      .1000      .3429 
+     .10     1.00      .50      .1900      .1000      .5556 
+     .10     1.00     1.00      .1000      .1000     1.0000 
+     .10     1.00     1.50      .0678      .1000     1.4482 
+     .10     1.00     2.00      .0513      .1000     1.8974 
+     .10     1.00     2.50      .0413      .1000     2.3469 
+     .10     1.00     3.00      .0345      .1000     2.7965 
+     .10     1.50      .25      .5280      .1000      .3650 
+     .10     1.50      .50      .3514      .1000      .4685 
+     .10     1.50     1.00      .2154      .1000      .6962 
+     .10     1.50     1.50      .1565      .1000      .9252 
+     .10     1.50     2.00      .1231      .1000     1.1537 
+     .10     1.50     2.50      .1015      .1000     1.3821 
+     .10     1.50     3.00      .0864      .1000     1.6102 
+     .20      .75      .25      .4559      .2000      .4324 
+     .20      .75      .50      .2372      .2000      .6847 
+     .20      .75     1.00      .1170      .2000     1.2825 
+     .20      .75     1.50      .0770      .2000     1.9025 
+     .20      .75     2.00      .0573      .2000     2.5285 
+     .20      .75     2.50      .0456      .2000     3.1569 
+     .20      .75     3.00      .0379      .2000     3.7865 
+     .20     1.00      .25      .5904      .2000      .4883 
+     .20     1.00      .50      .3600      .2000      .6250 
+     .20     1.00     1.00      .2000      .2000     1.0000 
+     .20     1.00     1.50      .1382      .2000     1.3925 
+     .20     1.00     2.00      .1056      .2000     1.7889 
+     .20     1.00     2.50      .0854      .2000     2.1867 
+     .20     1.00     3.00      .0717      .2000     2.5853 
+     .20     1.50      .25      .7324      .2000      .6579 
+     .20     1.50      .50      .5280      .2000      .6733 
+     .20     1.50     1.00      .3420      .2000      .8772 
+     .20     1.50     1.50      .2541      .2000     1.1086 
+     .20     1.50     2.00      .2024      .2000     1.3456 
+     .20     1.50     2.50      .1683      .2000     1.5847 
+     .20     1.50     3.00      .1441      .2000     1.8249 
+     .30      .75      .25      .6615      .3000      .5624 
+     .30      .75      .50      .3852      .3000      .6756 
+     .30      .75     1.00      .2008      .3000     1.1204 
+     .30      .75     1.50      .1346      .3000     1.6023 
+     .30      .75     2.00      .1010      .3000     2.0929 
+     .30      .75     2.50      .0808      .3000     2.5868 
+     .30      .75     3.00      .0673      .3000     3.0823 
+     .30     1.00      .25      .7599      .3000      .7289 
+     .30     1.00      .50      .5100      .3000      .7143 
+     .30     1.00     1.00      .3000      .3000     1.0000 
+     .30     1.00     1.50      .2116      .3000     1.3319 
+     .30     1.00     2.00      .1633      .3000     1.6733 
+     .30     1.00     2.50      .1330      .3000     2.0184 
+     .30     1.00     3.00      .1121      .3000     2.3651 
+     .30     1.50      .25      .8510      .3000     1.1004 
+     .30     1.50      .50      .6576      .3000      .8823 
+     .30     1.50     1.00      .4481      .3000     1.0041 
+     .30     1.50     1.50      .3402      .3000     1.2064 
+     .30     1.50     2.00      .2743      .3000     1.4253 
+     .30     1.50     2.50      .2298      .3000     1.6503 
+     .30     1.50     3.00      .1978      .3000     1.8782 
+     .40      .75      .25      .8106      .4000      .8261 
+     .40      .75      .50      .5300      .4000      .7134 
+     .40      .75     1.00      .2947      .4000     1.0179 
+     .40      .75     1.50      .2017      .4000     1.3908 
+     .40      .75     2.00      .1530      .4000     1.7776 
+     .40      .75     2.50      .1231      .4000     2.1695 
+     .40      .75     3.00      .1029      .4000     2.5638 
+     .40     1.00      .25      .8704      .4000     1.1574 
+     .40     1.00      .50      .6400      .4000      .8333 
+     .40     1.00     1.00      .4000      .4000     1.0000 
+     .40     1.00     1.50      .2886      .4000     1.2651 
+     .40     1.00     2.00      .2254      .4000     1.5492 
+     .40     1.00     2.50      .1848      .4000     1.8401 
+     .40     1.00     3.00      .1566      .4000     2.1341 
+     .40     1.50      .25      .9219      .4000     1.8596 
+     .40     1.50      .50      .7581      .4000     1.1269 
+     .40     1.50     1.00      .5429      .4000     1.1052 
+     .40     1.50     1.50      .4211      .4000     1.2573 
+     .40     1.50     2.00      .3438      .4000     1.4428 
+     .40     1.50     2.50      .2904      .4000     1.6405 
+     .40     1.50     3.00      .2514      .4000     1.8440 
+     .50      .75      .25      .9067      .5000     1.3662 
+     .50      .75      .50      .6633      .5000      .7969 
+     .50      .75     1.00      .3969      .5000      .9449 
+     .50      .75     1.50      .2786      .5000     1.2197 
+     .50      .75     2.00      .2139      .5000     1.5170 
+     .50      .75     2.50      .1734      .5000     1.8224 
+     .50      .75     3.00      .1458      .5000     2.1314 
+     .50     1.00      .25      .9375      .5000     2.0000 
+     .50     1.00      .50      .7500      .5000     1.0000 
+     .50     1.00     1.00      .5000      .5000     1.0000 
+     .50     1.00     1.50      .3700      .5000     1.1906 
+     .50     1.00     2.00      .2929      .5000     1.4142 
+     .50     1.00     2.50      .2421      .5000     1.6494 
+     .50     1.00     3.00      .2063      .5000     1.8899 
+     .50     1.50      .25      .9630      .5000     3.3258 
+     .50     1.50      .50      .8368      .5000     1.4416 
+     .50     1.50     1.00      .6300      .5000     1.1906 
+     .50     1.50     1.50      .5000      .5000     1.2732 
+     .50     1.50     2.00      .4136      .5000     1.4142 
+     .50     1.50     2.50      .3525      .5000     1.5755 
+     .50     1.50     3.00      .3069      .5000     1.7464 
+     .60      .75      .25      .9613      .6000     2.6072 
+     .60      .75      .50      .7793      .6000      .9454 
+     .60      .75     1.00      .5061      .6000      .8892 
+     .60      .75     1.50      .3662      .6000     1.0676 
+     .60      .75     2.00      .2856      .6000     1.2826 
+     .60      .75     2.50      .2337      .6000     1.5099 
+     .60      .75     3.00      .1976      .6000     1.7426 
+     .60     1.00      .25      .9744      .6000     3.9063 
+     .60     1.00      .50      .8400      .6000     1.2500 
+     .60     1.00     1.00      .6000      .6000     1.0000 
+     .60     1.00     1.50      .4571      .6000     1.1052 
+     .60     1.00     2.00      .3675      .6000     1.2649 
+     .60     1.00     2.50      .3069      .6000     1.4427 
+     .60     1.00     3.00      .2632      .6000     1.6287 
+     .60     1.50      .25      .9850      .6000     6.6134 
+     .60     1.50      .50      .8978      .6000     1.8869 
+     .60     1.50     1.00      .7114      .6000     1.2651 
+     .60     1.50     1.50      .5789      .6000     1.2573 
+     .60     1.50     2.00      .4860      .6000     1.3438 
+     .60     1.50     2.50      .4182      .6000     1.4617 
+     .60     1.50     3.00      .3667      .6000     1.5938 
+     .70      .75      .25      .9877      .7000     6.1137 
+     .70      .75      .50      .8736      .7000     1.2142 
+     .70      .75     1.00      .6215      .7000      .8447 
+     .70      .75     1.50      .4670      .7000      .9214 
+     .70      .75     2.00      .3714      .7000     1.0570 
+     .70      .75     2.50      .3075      .7000     1.2110 
+     .70      .75     3.00      .2622      .7000     1.3731 
+     .70     1.00      .25      .9919      .7000     9.2593 
+     .70     1.00      .50      .9100      .7000     1.6667 
+     .70     1.00     1.00      .7000      .7000     1.0000 
+     .70     1.00     1.50      .5519      .7000     1.0041 
+     .70     1.00     2.00      .4523      .7000     1.0954 
+     .70     1.00     2.50      .3822      .7000     1.2140 
+     .70     1.00     3.00      .3306      .7000     1.3444 
+     .70     1.50      .25      .9953      .7000    15.8068 
+     .70     1.50      .50      .9434      .7000     2.5994 
+     .70     1.50     1.00      .7884      .7000     1.3319 
+     .70     1.50     1.50      .6598      .7000     1.2064 
+     .70     1.50     2.00      .5635      .7000     1.2287 
+     .70     1.50     2.50      .4905      .7000     1.2972 
+     .70     1.50     3.00      .4337      .7000     1.3859 
+     .80      .75      .25      .9976      .8000    20.5520 
+     .80      .75      .50      .9431      .8000     1.7757 
+     .80      .75     1.00      .7427      .8000      .8079 
+     .80      .75     1.50      .5855      .8000      .7679 
+     .80      .75     2.00      .4781      .8000      .8238 
+     .80      .75     2.50      .4025      .8000      .9075 
+     .80      .75     3.00      .3469      .8000     1.0028 
+     .80     1.00      .25      .9984      .8000    31.2500 
+     .80     1.00      .50      .9600      .8000     2.5000 
+     .80     1.00     1.00      .8000      .8000     1.0000 
+     .80     1.00     1.50      .6580      .8000      .8772 
+     .80     1.00     2.00      .5528      .8000      .8944 
+     .80     1.00     2.50      .4747      .8000      .9518 
+     .80     1.00     3.00      .4152      .8000     1.0260 
+     .80     1.50      .25      .9991      .8000    53.5108 
+     .80     1.50      .50      .9751      .8000     3.9855 
+     .80     1.50     1.00      .8618      .8000     1.3925 
+     .80     1.50     1.50      .7459      .8000     1.1086 
+     .80     1.50     2.00      .6508      .8000     1.0564 
+     .80     1.50     2.50      .5748      .8000     1.0706 
+     .80     1.50     3.00      .5137      .8000     1.1124 
+     .90      .75      .25      .9998      .9000   164.2657 
+     .90      .75      .50      .9857      .9000     3.4998 
+     .90      .75     1.00      .8689      .9000      .7768 
+     .90      .75     1.50      .7336      .9000      .5818 
+     .90      .75     2.00      .6239      .9000      .5555 
+     .90      .75     2.50      .5392      .9000      .5712 
+     .90      .75     3.00      .4734      .9000      .6033 
+     .90     1.00      .25      .9999      .9000   250.0000 
+     .90     1.00      .50      .9900      .9000     5.0000 
+     .90     1.00     1.00      .9000      .9000     1.0000 
+     .90     1.00     1.50      .7846      .9000      .6962 
+     .90     1.00     2.00      .6838      .9000      .6325 
+     .90     1.00     2.50      .6019      .9000      .6280 
+     .90     1.00     3.00      .5358      .9000      .6463 
+     .90     1.50      .25      .9999      .9000   428.3866 
+     .90     1.50      .50      .9938      .9000     8.0723 
+     .90     1.50     1.00      .9322      .9000     1.4482 
+     .90     1.50     1.50      .8435      .9000      .9252 
+     .90     1.50     2.00      .7586      .9000      .7883 
+     .90     1.50     2.50      .6847      .9000      .7461 
+     .90     1.50     3.00      .6218      .9000      .7400 
+     .99      .75      .25     1.0000      .9900 164255.717 
+     .99      .75      .50      .9999      .9900    34.8318 
+     .99      .75     1.00      .9867      .9900      .7525 
+     .99      .75     1.50      .9412      .9900      .2568 
+     .99      .75     2.00      .8779      .9900      .1656 
+     .99      .75     2.50      .8116      .9900      .1348 
+     .99      .75     3.00      .7492      .9900      .1220 
+     .99     1.00      .25     1.0000      .9900 249999.999 
+     .99     1.00      .50      .9999      .9900    50.0000 
+     .99     1.00     1.00      .9900      .9900     1.0000 
+     .99     1.00     1.50      .9536      .9900      .3232 
+     .99     1.00     2.00      .9000      .9900      .2000 
+     .99     1.00     2.50      .8415      .9900      .1577 
+     .99     1.00     3.00      .7846      .9900      .1392 
+     .99     1.50      .25     1.0000      .9900 428406.592 
+     .99     1.50      .50      .9999      .9900    81.0536 
+     .99     1.50     1.00      .9933      .9900     1.4950 
+     .99     1.50     1.50      .9672      .9900      .4538 
+     .99     1.50     2.00      .9260      .9900      .2669 
+     .99     1.50     2.50      .8786      .9900      .2020 
+     .99     1.50     3.00      .8302      .9900      .1724 
+])
+
+RANDIST_CHECK([cauchy], [a b], [cdf pdf], [dnl
+       P        a        b          x        cdf        pdf 
+     .01    -5.00      .50   -20.9103      .0100      .0006 
+     .01    -5.00      .75   -28.8654      .0100      .0004 
+     .01    -5.00     1.00   -36.8205      .0100      .0003 
+     .01    -5.00     1.25   -44.7756      .0100      .0003 
+     .01    -5.00     1.50   -52.7308      .0100      .0002 
+     .01    -4.00      .50   -19.9103      .0100      .0006 
+     .01    -4.00      .75   -27.8654      .0100      .0004 
+     .01    -4.00     1.00   -35.8205      .0100      .0003 
+     .01    -4.00     1.25   -43.7756      .0100      .0003 
+     .01    -4.00     1.50   -51.7308      .0100      .0002 
+     .01    -3.00      .50   -18.9103      .0100      .0006 
+     .01    -3.00      .75   -26.8654      .0100      .0004 
+     .01    -3.00     1.00   -34.8205      .0100      .0003 
+     .01    -3.00     1.25   -42.7756      .0100      .0003 
+     .01    -3.00     1.50   -50.7308      .0100      .0002 
+     .01    -2.00      .50   -17.9103      .0100      .0006 
+     .01    -2.00      .75   -25.8654      .0100      .0004 
+     .01    -2.00     1.00   -33.8205      .0100      .0003 
+     .01    -2.00     1.25   -41.7756      .0100      .0003 
+     .01    -2.00     1.50   -49.7308      .0100      .0002 
+     .01    -1.00      .50   -16.9103      .0100      .0006 
+     .01    -1.00      .75   -24.8654      .0100      .0004 
+     .01    -1.00     1.00   -32.8205      .0100      .0003 
+     .01    -1.00     1.25   -40.7756      .0100      .0003 
+     .01    -1.00     1.50   -48.7308      .0100      .0002 
+     .01      .00      .50   -15.9103      .0100      .0006 
+     .01      .00      .75   -23.8654      .0100      .0004 
+     .01      .00     1.00   -31.8205      .0100      .0003 
+     .01      .00     1.25   -39.7756      .0100      .0003 
+     .01      .00     1.50   -47.7308      .0100      .0002 
+     .01     1.00      .50   -14.9103      .0100      .0006 
+     .01     1.00      .75   -22.8654      .0100      .0004 
+     .01     1.00     1.00   -30.8205      .0100      .0003 
+     .01     1.00     1.25   -38.7756      .0100      .0003 
+     .01     1.00     1.50   -46.7308      .0100      .0002 
+     .01     2.00      .50   -13.9103      .0100      .0006 
+     .01     2.00      .75   -21.8654      .0100      .0004 
+     .01     2.00     1.00   -29.8205      .0100      .0003 
+     .01     2.00     1.25   -37.7756      .0100      .0003 
+     .01     2.00     1.50   -45.7308      .0100      .0002 
+     .01     3.00      .50   -12.9103      .0100      .0006 
+     .01     3.00      .75   -20.8654      .0100      .0004 
+     .01     3.00     1.00   -28.8205      .0100      .0003 
+     .01     3.00     1.25   -36.7756      .0100      .0003 
+     .01     3.00     1.50   -44.7308      .0100      .0002 
+     .01     4.00      .50   -11.9103      .0100      .0006 
+     .01     4.00      .75   -19.8654      .0100      .0004 
+     .01     4.00     1.00   -27.8205      .0100      .0003 
+     .01     4.00     1.25   -35.7756      .0100      .0003 
+     .01     4.00     1.50   -43.7308      .0100      .0002 
+     .01     5.00      .50   -10.9103      .0100      .0006 
+     .01     5.00      .75   -18.8654      .0100      .0004 
+     .01     5.00     1.00   -26.8205      .0100      .0003 
+     .01     5.00     1.25   -34.7756      .0100      .0003 
+     .01     5.00     1.50   -42.7308      .0100      .0002 
+     .10    -5.00      .50    -6.5388      .1000      .0608 
+     .10    -5.00      .75    -7.3083      .1000      .0405 
+     .10    -5.00     1.00    -8.0777      .1000      .0304 
+     .10    -5.00     1.25    -8.8471      .1000      .0243 
+     .10    -5.00     1.50    -9.6165      .1000      .0203 
+     .10    -4.00      .50    -5.5388      .1000      .0608 
+     .10    -4.00      .75    -6.3083      .1000      .0405 
+     .10    -4.00     1.00    -7.0777      .1000      .0304 
+     .10    -4.00     1.25    -7.8471      .1000      .0243 
+     .10    -4.00     1.50    -8.6165      .1000      .0203 
+     .10    -3.00      .50    -4.5388      .1000      .0608 
+     .10    -3.00      .75    -5.3083      .1000      .0405 
+     .10    -3.00     1.00    -6.0777      .1000      .0304 
+     .10    -3.00     1.25    -6.8471      .1000      .0243 
+     .10    -3.00     1.50    -7.6165      .1000      .0203 
+     .10    -2.00      .50    -3.5388      .1000      .0608 
+     .10    -2.00      .75    -4.3083      .1000      .0405 
+     .10    -2.00     1.00    -5.0777      .1000      .0304 
+     .10    -2.00     1.25    -5.8471      .1000      .0243 
+     .10    -2.00     1.50    -6.6165      .1000      .0203 
+     .10    -1.00      .50    -2.5388      .1000      .0608 
+     .10    -1.00      .75    -3.3083      .1000      .0405 
+     .10    -1.00     1.00    -4.0777      .1000      .0304 
+     .10    -1.00     1.25    -4.8471      .1000      .0243 
+     .10    -1.00     1.50    -5.6165      .1000      .0203 
+     .10      .00      .50    -1.5388      .1000      .0608 
+     .10      .00      .75    -2.3083      .1000      .0405 
+     .10      .00     1.00    -3.0777      .1000      .0304 
+     .10      .00     1.25    -3.8471      .1000      .0243 
+     .10      .00     1.50    -4.6165      .1000      .0203 
+     .10     1.00      .50     -.5388      .1000      .0608 
+     .10     1.00      .75    -1.3083      .1000      .0405 
+     .10     1.00     1.00    -2.0777      .1000      .0304 
+     .10     1.00     1.25    -2.8471      .1000      .0243 
+     .10     1.00     1.50    -3.6165      .1000      .0203 
+     .10     2.00      .50      .4612      .1000      .0608 
+     .10     2.00      .75     -.3083      .1000      .0405 
+     .10     2.00     1.00    -1.0777      .1000      .0304 
+     .10     2.00     1.25    -1.8471      .1000      .0243 
+     .10     2.00     1.50    -2.6165      .1000      .0203 
+     .10     3.00      .50     1.4612      .1000      .0608 
+     .10     3.00      .75      .6917      .1000      .0405 
+     .10     3.00     1.00     -.0777      .1000      .0304 
+     .10     3.00     1.25     -.8471      .1000      .0243 
+     .10     3.00     1.50    -1.6165      .1000      .0203 
+     .10     4.00      .50     2.4612      .1000      .0608 
+     .10     4.00      .75     1.6917      .1000      .0405 
+     .10     4.00     1.00      .9223      .1000      .0304 
+     .10     4.00     1.25      .1529      .1000      .0243 
+     .10     4.00     1.50     -.6165      .1000      .0203 
+     .10     5.00      .50     3.4612      .1000      .0608 
+     .10     5.00      .75     2.6917      .1000      .0405 
+     .10     5.00     1.00     1.9223      .1000      .0304 
+     .10     5.00     1.25     1.1529      .1000      .0243 
+     .10     5.00     1.50      .3835      .1000      .0203 
+     .20    -5.00      .50    -5.6882      .2000      .2199 
+     .20    -5.00      .75    -6.0323      .2000      .1466 
+     .20    -5.00     1.00    -6.3764      .2000      .1100 
+     .20    -5.00     1.25    -6.7205      .2000      .0880 
+     .20    -5.00     1.50    -7.0646      .2000      .0733 
+     .20    -4.00      .50    -4.6882      .2000      .2199 
+     .20    -4.00      .75    -5.0323      .2000      .1466 
+     .20    -4.00     1.00    -5.3764      .2000      .1100 
+     .20    -4.00     1.25    -5.7205      .2000      .0880 
+     .20    -4.00     1.50    -6.0646      .2000      .0733 
+     .20    -3.00      .50    -3.6882      .2000      .2199 
+     .20    -3.00      .75    -4.0323      .2000      .1466 
+     .20    -3.00     1.00    -4.3764      .2000      .1100 
+     .20    -3.00     1.25    -4.7205      .2000      .0880 
+     .20    -3.00     1.50    -5.0646      .2000      .0733 
+     .20    -2.00      .50    -2.6882      .2000      .2199 
+     .20    -2.00      .75    -3.0323      .2000      .1466 
+     .20    -2.00     1.00    -3.3764      .2000      .1100 
+     .20    -2.00     1.25    -3.7205      .2000      .0880 
+     .20    -2.00     1.50    -4.0646      .2000      .0733 
+     .20    -1.00      .50    -1.6882      .2000      .2199 
+     .20    -1.00      .75    -2.0323      .2000      .1466 
+     .20    -1.00     1.00    -2.3764      .2000      .1100 
+     .20    -1.00     1.25    -2.7205      .2000      .0880 
+     .20    -1.00     1.50    -3.0646      .2000      .0733 
+     .20      .00      .50     -.6882      .2000      .2199 
+     .20      .00      .75    -1.0323      .2000      .1466 
+     .20      .00     1.00    -1.3764      .2000      .1100 
+     .20      .00     1.25    -1.7205      .2000      .0880 
+     .20      .00     1.50    -2.0646      .2000      .0733 
+     .20     1.00      .50      .3118      .2000      .2199 
+     .20     1.00      .75     -.0323      .2000      .1466 
+     .20     1.00     1.00     -.3764      .2000      .1100 
+     .20     1.00     1.25     -.7205      .2000      .0880 
+     .20     1.00     1.50    -1.0646      .2000      .0733 
+     .20     2.00      .50     1.3118      .2000      .2199 
+     .20     2.00      .75      .9677      .2000      .1466 
+     .20     2.00     1.00      .6236      .2000      .1100 
+     .20     2.00     1.25      .2795      .2000      .0880 
+     .20     2.00     1.50     -.0646      .2000      .0733 
+     .20     3.00      .50     2.3118      .2000      .2199 
+     .20     3.00      .75     1.9677      .2000      .1466 
+     .20     3.00     1.00     1.6236      .2000      .1100 
+     .20     3.00     1.25     1.2795      .2000      .0880 
+     .20     3.00     1.50      .9354      .2000      .0733 
+     .20     4.00      .50     3.3118      .2000      .2199 
+     .20     4.00      .75     2.9677      .2000      .1466 
+     .20     4.00     1.00     2.6236      .2000      .1100 
+     .20     4.00     1.25     2.2795      .2000      .0880 
+     .20     4.00     1.50     1.9354      .2000      .0733 
+     .20     5.00      .50     4.3118      .2000      .2199 
+     .20     5.00      .75     3.9677      .2000      .1466 
+     .20     5.00     1.00     3.6236      .2000      .1100 
+     .20     5.00     1.25     3.2795      .2000      .0880 
+     .20     5.00     1.50     2.9354      .2000      .0733 
+     .30    -5.00      .50    -5.3633      .3000      .4167 
+     .30    -5.00      .75    -5.5449      .3000      .2778 
+     .30    -5.00     1.00    -5.7265      .3000      .2083 
+     .30    -5.00     1.25    -5.9082      .3000      .1667 
+     .30    -5.00     1.50    -6.0898      .3000      .1389 
+     .30    -4.00      .50    -4.3633      .3000      .4167 
+     .30    -4.00      .75    -4.5449      .3000      .2778 
+     .30    -4.00     1.00    -4.7265      .3000      .2083 
+     .30    -4.00     1.25    -4.9082      .3000      .1667 
+     .30    -4.00     1.50    -5.0898      .3000      .1389 
+     .30    -3.00      .50    -3.3633      .3000      .4167 
+     .30    -3.00      .75    -3.5449      .3000      .2778 
+     .30    -3.00     1.00    -3.7265      .3000      .2083 
+     .30    -3.00     1.25    -3.9082      .3000      .1667 
+     .30    -3.00     1.50    -4.0898      .3000      .1389 
+     .30    -2.00      .50    -2.3633      .3000      .4167 
+     .30    -2.00      .75    -2.5449      .3000      .2778 
+     .30    -2.00     1.00    -2.7265      .3000      .2083 
+     .30    -2.00     1.25    -2.9082      .3000      .1667 
+     .30    -2.00     1.50    -3.0898      .3000      .1389 
+     .30    -1.00      .50    -1.3633      .3000      .4167 
+     .30    -1.00      .75    -1.5449      .3000      .2778 
+     .30    -1.00     1.00    -1.7265      .3000      .2083 
+     .30    -1.00     1.25    -1.9082      .3000      .1667 
+     .30    -1.00     1.50    -2.0898      .3000      .1389 
+     .30      .00      .50     -.3633      .3000      .4167 
+     .30      .00      .75     -.5449      .3000      .2778 
+     .30      .00     1.00     -.7265      .3000      .2083 
+     .30      .00     1.25     -.9082      .3000      .1667 
+     .30      .00     1.50    -1.0898      .3000      .1389 
+     .30     1.00      .50      .6367      .3000      .4167 
+     .30     1.00      .75      .4551      .3000      .2778 
+     .30     1.00     1.00      .2735      .3000      .2083 
+     .30     1.00     1.25      .0918      .3000      .1667 
+     .30     1.00     1.50     -.0898      .3000      .1389 
+     .30     2.00      .50     1.6367      .3000      .4167 
+     .30     2.00      .75     1.4551      .3000      .2778 
+     .30     2.00     1.00     1.2735      .3000      .2083 
+     .30     2.00     1.25     1.0918      .3000      .1667 
+     .30     2.00     1.50      .9102      .3000      .1389 
+     .30     3.00      .50     2.6367      .3000      .4167 
+     .30     3.00      .75     2.4551      .3000      .2778 
+     .30     3.00     1.00     2.2735      .3000      .2083 
+     .30     3.00     1.25     2.0918      .3000      .1667 
+     .30     3.00     1.50     1.9102      .3000      .1389 
+     .30     4.00      .50     3.6367      .3000      .4167 
+     .30     4.00      .75     3.4551      .3000      .2778 
+     .30     4.00     1.00     3.2735      .3000      .2083 
+     .30     4.00     1.25     3.0918      .3000      .1667 
+     .30     4.00     1.50     2.9102      .3000      .1389 
+     .30     5.00      .50     4.6367      .3000      .4167 
+     .30     5.00      .75     4.4551      .3000      .2778 
+     .30     5.00     1.00     4.2735      .3000      .2083 
+     .30     5.00     1.25     4.0918      .3000      .1667 
+     .30     5.00     1.50     3.9102      .3000      .1389 
+     .40    -5.00      .50    -5.1625      .4000      .5758 
+     .40    -5.00      .75    -5.2437      .4000      .3839 
+     .40    -5.00     1.00    -5.3249      .4000      .2879 
+     .40    -5.00     1.25    -5.4061      .4000      .2303 
+     .40    -5.00     1.50    -5.4874      .4000      .1919 
+     .40    -4.00      .50    -4.1625      .4000      .5758 
+     .40    -4.00      .75    -4.2437      .4000      .3839 
+     .40    -4.00     1.00    -4.3249      .4000      .2879 
+     .40    -4.00     1.25    -4.4061      .4000      .2303 
+     .40    -4.00     1.50    -4.4874      .4000      .1919 
+     .40    -3.00      .50    -3.1625      .4000      .5758 
+     .40    -3.00      .75    -3.2437      .4000      .3839 
+     .40    -3.00     1.00    -3.3249      .4000      .2879 
+     .40    -3.00     1.25    -3.4061      .4000      .2303 
+     .40    -3.00     1.50    -3.4874      .4000      .1919 
+     .40    -2.00      .50    -2.1625      .4000      .5758 
+     .40    -2.00      .75    -2.2437      .4000      .3839 
+     .40    -2.00     1.00    -2.3249      .4000      .2879 
+     .40    -2.00     1.25    -2.4061      .4000      .2303 
+     .40    -2.00     1.50    -2.4874      .4000      .1919 
+     .40    -1.00      .50    -1.1625      .4000      .5758 
+     .40    -1.00      .75    -1.2437      .4000      .3839 
+     .40    -1.00     1.00    -1.3249      .4000      .2879 
+     .40    -1.00     1.25    -1.4061      .4000      .2303 
+     .40    -1.00     1.50    -1.4874      .4000      .1919 
+     .40      .00      .50     -.1625      .4000      .5758 
+     .40      .00      .75     -.2437      .4000      .3839 
+     .40      .00     1.00     -.3249      .4000      .2879 
+     .40      .00     1.25     -.4061      .4000      .2303 
+     .40      .00     1.50     -.4874      .4000      .1919 
+     .40     1.00      .50      .8375      .4000      .5758 
+     .40     1.00      .75      .7563      .4000      .3839 
+     .40     1.00     1.00      .6751      .4000      .2879 
+     .40     1.00     1.25      .5939      .4000      .2303 
+     .40     1.00     1.50      .5126      .4000      .1919 
+     .40     2.00      .50     1.8375      .4000      .5758 
+     .40     2.00      .75     1.7563      .4000      .3839 
+     .40     2.00     1.00     1.6751      .4000      .2879 
+     .40     2.00     1.25     1.5939      .4000      .2303 
+     .40     2.00     1.50     1.5126      .4000      .1919 
+     .40     3.00      .50     2.8375      .4000      .5758 
+     .40     3.00      .75     2.7563      .4000      .3839 
+     .40     3.00     1.00     2.6751      .4000      .2879 
+     .40     3.00     1.25     2.5939      .4000      .2303 
+     .40     3.00     1.50     2.5126      .4000      .1919 
+     .40     4.00      .50     3.8375      .4000      .5758 
+     .40     4.00      .75     3.7563      .4000      .3839 
+     .40     4.00     1.00     3.6751      .4000      .2879 
+     .40     4.00     1.25     3.5939      .4000      .2303 
+     .40     4.00     1.50     3.5126      .4000      .1919 
+     .40     5.00      .50     4.8375      .4000      .5758 
+     .40     5.00      .75     4.7563      .4000      .3839 
+     .40     5.00     1.00     4.6751      .4000      .2879 
+     .40     5.00     1.25     4.5939      .4000      .2303 
+     .40     5.00     1.50     4.5126      .4000      .1919 
+     .50    -5.00      .50    -5.0000      .5000      .6366 
+     .50    -5.00      .75    -5.0000      .5000      .4244 
+     .50    -5.00     1.00    -5.0000      .5000      .3183 
+     .50    -5.00     1.25    -5.0000      .5000      .2546 
+     .50    -5.00     1.50    -5.0000      .5000      .2122 
+     .50    -4.00      .50    -4.0000      .5000      .6366 
+     .50    -4.00      .75    -4.0000      .5000      .4244 
+     .50    -4.00     1.00    -4.0000      .5000      .3183 
+     .50    -4.00     1.25    -4.0000      .5000      .2546 
+     .50    -4.00     1.50    -4.0000      .5000      .2122 
+     .50    -3.00      .50    -3.0000      .5000      .6366 
+     .50    -3.00      .75    -3.0000      .5000      .4244 
+     .50    -3.00     1.00    -3.0000      .5000      .3183 
+     .50    -3.00     1.25    -3.0000      .5000      .2546 
+     .50    -3.00     1.50    -3.0000      .5000      .2122 
+     .50    -2.00      .50    -2.0000      .5000      .6366 
+     .50    -2.00      .75    -2.0000      .5000      .4244 
+     .50    -2.00     1.00    -2.0000      .5000      .3183 
+     .50    -2.00     1.25    -2.0000      .5000      .2546 
+     .50    -2.00     1.50    -2.0000      .5000      .2122 
+     .50    -1.00      .50    -1.0000      .5000      .6366 
+     .50    -1.00      .75    -1.0000      .5000      .4244 
+     .50    -1.00     1.00    -1.0000      .5000      .3183 
+     .50    -1.00     1.25    -1.0000      .5000      .2546 
+     .50    -1.00     1.50    -1.0000      .5000      .2122 
+     .50      .00      .50      .0000      .5000      .6366 
+     .50      .00      .75      .0000      .5000      .4244 
+     .50      .00     1.00      .0000      .5000      .3183 
+     .50      .00     1.25      .0000      .5000      .2546 
+     .50      .00     1.50      .0000      .5000      .2122 
+     .50     1.00      .50     1.0000      .5000      .6366 
+     .50     1.00      .75     1.0000      .5000      .4244 
+     .50     1.00     1.00     1.0000      .5000      .3183 
+     .50     1.00     1.25     1.0000      .5000      .2546 
+     .50     1.00     1.50     1.0000      .5000      .2122 
+     .50     2.00      .50     2.0000      .5000      .6366 
+     .50     2.00      .75     2.0000      .5000      .4244 
+     .50     2.00     1.00     2.0000      .5000      .3183 
+     .50     2.00     1.25     2.0000      .5000      .2546 
+     .50     2.00     1.50     2.0000      .5000      .2122 
+     .50     3.00      .50     3.0000      .5000      .6366 
+     .50     3.00      .75     3.0000      .5000      .4244 
+     .50     3.00     1.00     3.0000      .5000      .3183 
+     .50     3.00     1.25     3.0000      .5000      .2546 
+     .50     3.00     1.50     3.0000      .5000      .2122 
+     .50     4.00      .50     4.0000      .5000      .6366 
+     .50     4.00      .75     4.0000      .5000      .4244 
+     .50     4.00     1.00     4.0000      .5000      .3183 
+     .50     4.00     1.25     4.0000      .5000      .2546 
+     .50     4.00     1.50     4.0000      .5000      .2122 
+     .50     5.00      .50     5.0000      .5000      .6366 
+     .50     5.00      .75     5.0000      .5000      .4244 
+     .50     5.00     1.00     5.0000      .5000      .3183 
+     .50     5.00     1.25     5.0000      .5000      .2546 
+     .50     5.00     1.50     5.0000      .5000      .2122 
+     .60    -5.00      .50    -4.8375      .6000      .5758 
+     .60    -5.00      .75    -4.7563      .6000      .3839 
+     .60    -5.00     1.00    -4.6751      .6000      .2879 
+     .60    -5.00     1.25    -4.5939      .6000      .2303 
+     .60    -5.00     1.50    -4.5126      .6000      .1919 
+     .60    -4.00      .50    -3.8375      .6000      .5758 
+     .60    -4.00      .75    -3.7563      .6000      .3839 
+     .60    -4.00     1.00    -3.6751      .6000      .2879 
+     .60    -4.00     1.25    -3.5939      .6000      .2303 
+     .60    -4.00     1.50    -3.5126      .6000      .1919 
+     .60    -3.00      .50    -2.8375      .6000      .5758 
+     .60    -3.00      .75    -2.7563      .6000      .3839 
+     .60    -3.00     1.00    -2.6751      .6000      .2879 
+     .60    -3.00     1.25    -2.5939      .6000      .2303 
+     .60    -3.00     1.50    -2.5126      .6000      .1919 
+     .60    -2.00      .50    -1.8375      .6000      .5758 
+     .60    -2.00      .75    -1.7563      .6000      .3839 
+     .60    -2.00     1.00    -1.6751      .6000      .2879 
+     .60    -2.00     1.25    -1.5939      .6000      .2303 
+     .60    -2.00     1.50    -1.5126      .6000      .1919 
+     .60    -1.00      .50     -.8375      .6000      .5758 
+     .60    -1.00      .75     -.7563      .6000      .3839 
+     .60    -1.00     1.00     -.6751      .6000      .2879 
+     .60    -1.00     1.25     -.5939      .6000      .2303 
+     .60    -1.00     1.50     -.5126      .6000      .1919 
+     .60      .00      .50      .1625      .6000      .5758 
+     .60      .00      .75      .2437      .6000      .3839 
+     .60      .00     1.00      .3249      .6000      .2879 
+     .60      .00     1.25      .4061      .6000      .2303 
+     .60      .00     1.50      .4874      .6000      .1919 
+     .60     1.00      .50     1.1625      .6000      .5758 
+     .60     1.00      .75     1.2437      .6000      .3839 
+     .60     1.00     1.00     1.3249      .6000      .2879 
+     .60     1.00     1.25     1.4061      .6000      .2303 
+     .60     1.00     1.50     1.4874      .6000      .1919 
+     .60     2.00      .50     2.1625      .6000      .5758 
+     .60     2.00      .75     2.2437      .6000      .3839 
+     .60     2.00     1.00     2.3249      .6000      .2879 
+     .60     2.00     1.25     2.4061      .6000      .2303 
+     .60     2.00     1.50     2.4874      .6000      .1919 
+     .60     3.00      .50     3.1625      .6000      .5758 
+     .60     3.00      .75     3.2437      .6000      .3839 
+     .60     3.00     1.00     3.3249      .6000      .2879 
+     .60     3.00     1.25     3.4061      .6000      .2303 
+     .60     3.00     1.50     3.4874      .6000      .1919 
+     .60     4.00      .50     4.1625      .6000      .5758 
+     .60     4.00      .75     4.2437      .6000      .3839 
+     .60     4.00     1.00     4.3249      .6000      .2879 
+     .60     4.00     1.25     4.4061      .6000      .2303 
+     .60     4.00     1.50     4.4874      .6000      .1919 
+     .60     5.00      .50     5.1625      .6000      .5758 
+     .60     5.00      .75     5.2437      .6000      .3839 
+     .60     5.00     1.00     5.3249      .6000      .2879 
+     .60     5.00     1.25     5.4061      .6000      .2303 
+     .60     5.00     1.50     5.4874      .6000      .1919 
+     .70    -5.00      .50    -4.6367      .7000      .4167 
+     .70    -5.00      .75    -4.4551      .7000      .2778 
+     .70    -5.00     1.00    -4.2735      .7000      .2083 
+     .70    -5.00     1.25    -4.0918      .7000      .1667 
+     .70    -5.00     1.50    -3.9102      .7000      .1389 
+     .70    -4.00      .50    -3.6367      .7000      .4167 
+     .70    -4.00      .75    -3.4551      .7000      .2778 
+     .70    -4.00     1.00    -3.2735      .7000      .2083 
+     .70    -4.00     1.25    -3.0918      .7000      .1667 
+     .70    -4.00     1.50    -2.9102      .7000      .1389 
+     .70    -3.00      .50    -2.6367      .7000      .4167 
+     .70    -3.00      .75    -2.4551      .7000      .2778 
+     .70    -3.00     1.00    -2.2735      .7000      .2083 
+     .70    -3.00     1.25    -2.0918      .7000      .1667 
+     .70    -3.00     1.50    -1.9102      .7000      .1389 
+     .70    -2.00      .50    -1.6367      .7000      .4167 
+     .70    -2.00      .75    -1.4551      .7000      .2778 
+     .70    -2.00     1.00    -1.2735      .7000      .2083 
+     .70    -2.00     1.25    -1.0918      .7000      .1667 
+     .70    -2.00     1.50     -.9102      .7000      .1389 
+     .70    -1.00      .50     -.6367      .7000      .4167 
+     .70    -1.00      .75     -.4551      .7000      .2778 
+     .70    -1.00     1.00     -.2735      .7000      .2083 
+     .70    -1.00     1.25     -.0918      .7000      .1667 
+     .70    -1.00     1.50      .0898      .7000      .1389 
+     .70      .00      .50      .3633      .7000      .4167 
+     .70      .00      .75      .5449      .7000      .2778 
+     .70      .00     1.00      .7265      .7000      .2083 
+     .70      .00     1.25      .9082      .7000      .1667 
+     .70      .00     1.50     1.0898      .7000      .1389 
+     .70     1.00      .50     1.3633      .7000      .4167 
+     .70     1.00      .75     1.5449      .7000      .2778 
+     .70     1.00     1.00     1.7265      .7000      .2083 
+     .70     1.00     1.25     1.9082      .7000      .1667 
+     .70     1.00     1.50     2.0898      .7000      .1389 
+     .70     2.00      .50     2.3633      .7000      .4167 
+     .70     2.00      .75     2.5449      .7000      .2778 
+     .70     2.00     1.00     2.7265      .7000      .2083 
+     .70     2.00     1.25     2.9082      .7000      .1667 
+     .70     2.00     1.50     3.0898      .7000      .1389 
+     .70     3.00      .50     3.3633      .7000      .4167 
+     .70     3.00      .75     3.5449      .7000      .2778 
+     .70     3.00     1.00     3.7265      .7000      .2083 
+     .70     3.00     1.25     3.9082      .7000      .1667 
+     .70     3.00     1.50     4.0898      .7000      .1389 
+     .70     4.00      .50     4.3633      .7000      .4167 
+     .70     4.00      .75     4.5449      .7000      .2778 
+     .70     4.00     1.00     4.7265      .7000      .2083 
+     .70     4.00     1.25     4.9082      .7000      .1667 
+     .70     4.00     1.50     5.0898      .7000      .1389 
+     .70     5.00      .50     5.3633      .7000      .4167 
+     .70     5.00      .75     5.5449      .7000      .2778 
+     .70     5.00     1.00     5.7265      .7000      .2083 
+     .70     5.00     1.25     5.9082      .7000      .1667 
+     .70     5.00     1.50     6.0898      .7000      .1389 
+     .80    -5.00      .50    -4.3118      .8000      .2199 
+     .80    -5.00      .75    -3.9677      .8000      .1466 
+     .80    -5.00     1.00    -3.6236      .8000      .1100 
+     .80    -5.00     1.25    -3.2795      .8000      .0880 
+     .80    -5.00     1.50    -2.9354      .8000      .0733 
+     .80    -4.00      .50    -3.3118      .8000      .2199 
+     .80    -4.00      .75    -2.9677      .8000      .1466 
+     .80    -4.00     1.00    -2.6236      .8000      .1100 
+     .80    -4.00     1.25    -2.2795      .8000      .0880 
+     .80    -4.00     1.50    -1.9354      .8000      .0733 
+     .80    -3.00      .50    -2.3118      .8000      .2199 
+     .80    -3.00      .75    -1.9677      .8000      .1466 
+     .80    -3.00     1.00    -1.6236      .8000      .1100 
+     .80    -3.00     1.25    -1.2795      .8000      .0880 
+     .80    -3.00     1.50     -.9354      .8000      .0733 
+     .80    -2.00      .50    -1.3118      .8000      .2199 
+     .80    -2.00      .75     -.9677      .8000      .1466 
+     .80    -2.00     1.00     -.6236      .8000      .1100 
+     .80    -2.00     1.25     -.2795      .8000      .0880 
+     .80    -2.00     1.50      .0646      .8000      .0733 
+     .80    -1.00      .50     -.3118      .8000      .2199 
+     .80    -1.00      .75      .0323      .8000      .1466 
+     .80    -1.00     1.00      .3764      .8000      .1100 
+     .80    -1.00     1.25      .7205      .8000      .0880 
+     .80    -1.00     1.50     1.0646      .8000      .0733 
+     .80      .00      .50      .6882      .8000      .2199 
+     .80      .00      .75     1.0323      .8000      .1466 
+     .80      .00     1.00     1.3764      .8000      .1100 
+     .80      .00     1.25     1.7205      .8000      .0880 
+     .80      .00     1.50     2.0646      .8000      .0733 
+     .80     1.00      .50     1.6882      .8000      .2199 
+     .80     1.00      .75     2.0323      .8000      .1466 
+     .80     1.00     1.00     2.3764      .8000      .1100 
+     .80     1.00     1.25     2.7205      .8000      .0880 
+     .80     1.00     1.50     3.0646      .8000      .0733 
+     .80     2.00      .50     2.6882      .8000      .2199 
+     .80     2.00      .75     3.0323      .8000      .1466 
+     .80     2.00     1.00     3.3764      .8000      .1100 
+     .80     2.00     1.25     3.7205      .8000      .0880 
+     .80     2.00     1.50     4.0646      .8000      .0733 
+     .80     3.00      .50     3.6882      .8000      .2199 
+     .80     3.00      .75     4.0323      .8000      .1466 
+     .80     3.00     1.00     4.3764      .8000      .1100 
+     .80     3.00     1.25     4.7205      .8000      .0880 
+     .80     3.00     1.50     5.0646      .8000      .0733 
+     .80     4.00      .50     4.6882      .8000      .2199 
+     .80     4.00      .75     5.0323      .8000      .1466 
+     .80     4.00     1.00     5.3764      .8000      .1100 
+     .80     4.00     1.25     5.7205      .8000      .0880 
+     .80     4.00     1.50     6.0646      .8000      .0733 
+     .80     5.00      .50     5.6882      .8000      .2199 
+     .80     5.00      .75     6.0323      .8000      .1466 
+     .80     5.00     1.00     6.3764      .8000      .1100 
+     .80     5.00     1.25     6.7205      .8000      .0880 
+     .80     5.00     1.50     7.0646      .8000      .0733 
+     .90    -5.00      .50    -3.4612      .9000      .0608 
+     .90    -5.00      .75    -2.6917      .9000      .0405 
+     .90    -5.00     1.00    -1.9223      .9000      .0304 
+     .90    -5.00     1.25    -1.1529      .9000      .0243 
+     .90    -5.00     1.50     -.3835      .9000      .0203 
+     .90    -4.00      .50    -2.4612      .9000      .0608 
+     .90    -4.00      .75    -1.6917      .9000      .0405 
+     .90    -4.00     1.00     -.9223      .9000      .0304 
+     .90    -4.00     1.25     -.1529      .9000      .0243 
+     .90    -4.00     1.50      .6165      .9000      .0203 
+     .90    -3.00      .50    -1.4612      .9000      .0608 
+     .90    -3.00      .75     -.6917      .9000      .0405 
+     .90    -3.00     1.00      .0777      .9000      .0304 
+     .90    -3.00     1.25      .8471      .9000      .0243 
+     .90    -3.00     1.50     1.6165      .9000      .0203 
+     .90    -2.00      .50     -.4612      .9000      .0608 
+     .90    -2.00      .75      .3083      .9000      .0405 
+     .90    -2.00     1.00     1.0777      .9000      .0304 
+     .90    -2.00     1.25     1.8471      .9000      .0243 
+     .90    -2.00     1.50     2.6165      .9000      .0203 
+     .90    -1.00      .50      .5388      .9000      .0608 
+     .90    -1.00      .75     1.3083      .9000      .0405 
+     .90    -1.00     1.00     2.0777      .9000      .0304 
+     .90    -1.00     1.25     2.8471      .9000      .0243 
+     .90    -1.00     1.50     3.6165      .9000      .0203 
+     .90      .00      .50     1.5388      .9000      .0608 
+     .90      .00      .75     2.3083      .9000      .0405 
+     .90      .00     1.00     3.0777      .9000      .0304 
+     .90      .00     1.25     3.8471      .9000      .0243 
+     .90      .00     1.50     4.6165      .9000      .0203 
+     .90     1.00      .50     2.5388      .9000      .0608 
+     .90     1.00      .75     3.3083      .9000      .0405 
+     .90     1.00     1.00     4.0777      .9000      .0304 
+     .90     1.00     1.25     4.8471      .9000      .0243 
+     .90     1.00     1.50     5.6165      .9000      .0203 
+     .90     2.00      .50     3.5388      .9000      .0608 
+     .90     2.00      .75     4.3083      .9000      .0405 
+     .90     2.00     1.00     5.0777      .9000      .0304 
+     .90     2.00     1.25     5.8471      .9000      .0243 
+     .90     2.00     1.50     6.6165      .9000      .0203 
+     .90     3.00      .50     4.5388      .9000      .0608 
+     .90     3.00      .75     5.3083      .9000      .0405 
+     .90     3.00     1.00     6.0777      .9000      .0304 
+     .90     3.00     1.25     6.8471      .9000      .0243 
+     .90     3.00     1.50     7.6165      .9000      .0203 
+     .90     4.00      .50     5.5388      .9000      .0608 
+     .90     4.00      .75     6.3083      .9000      .0405 
+     .90     4.00     1.00     7.0777      .9000      .0304 
+     .90     4.00     1.25     7.8471      .9000      .0243 
+     .90     4.00     1.50     8.6165      .9000      .0203 
+     .90     5.00      .50     6.5388      .9000      .0608 
+     .90     5.00      .75     7.3083      .9000      .0405 
+     .90     5.00     1.00     8.0777      .9000      .0304 
+     .90     5.00     1.25     8.8471      .9000      .0243 
+     .90     5.00     1.50     9.6165      .9000      .0203 
+     .99    -5.00      .50    10.9103      .9900      .0006 
+     .99    -5.00      .75    18.8654      .9900      .0004 
+     .99    -5.00     1.00    26.8205      .9900      .0003 
+     .99    -5.00     1.25    34.7756      .9900      .0003 
+     .99    -5.00     1.50    42.7308      .9900      .0002 
+     .99    -4.00      .50    11.9103      .9900      .0006 
+     .99    -4.00      .75    19.8654      .9900      .0004 
+     .99    -4.00     1.00    27.8205      .9900      .0003 
+     .99    -4.00     1.25    35.7756      .9900      .0003 
+     .99    -4.00     1.50    43.7308      .9900      .0002 
+     .99    -3.00      .50    12.9103      .9900      .0006 
+     .99    -3.00      .75    20.8654      .9900      .0004 
+     .99    -3.00     1.00    28.8205      .9900      .0003 
+     .99    -3.00     1.25    36.7756      .9900      .0003 
+     .99    -3.00     1.50    44.7308      .9900      .0002 
+     .99    -2.00      .50    13.9103      .9900      .0006 
+     .99    -2.00      .75    21.8654      .9900      .0004 
+     .99    -2.00     1.00    29.8205      .9900      .0003 
+     .99    -2.00     1.25    37.7756      .9900      .0003 
+     .99    -2.00     1.50    45.7308      .9900      .0002 
+     .99    -1.00      .50    14.9103      .9900      .0006 
+     .99    -1.00      .75    22.8654      .9900      .0004 
+     .99    -1.00     1.00    30.8205      .9900      .0003 
+     .99    -1.00     1.25    38.7756      .9900      .0003 
+     .99    -1.00     1.50    46.7308      .9900      .0002 
+     .99      .00      .50    15.9103      .9900      .0006 
+     .99      .00      .75    23.8654      .9900      .0004 
+     .99      .00     1.00    31.8205      .9900      .0003 
+     .99      .00     1.25    39.7756      .9900      .0003 
+     .99      .00     1.50    47.7308      .9900      .0002 
+     .99     1.00      .50    16.9103      .9900      .0006 
+     .99     1.00      .75    24.8654      .9900      .0004 
+     .99     1.00     1.00    32.8205      .9900      .0003 
+     .99     1.00     1.25    40.7756      .9900      .0003 
+     .99     1.00     1.50    48.7308      .9900      .0002 
+     .99     2.00      .50    17.9103      .9900      .0006 
+     .99     2.00      .75    25.8654      .9900      .0004 
+     .99     2.00     1.00    33.8205      .9900      .0003 
+     .99     2.00     1.25    41.7756      .9900      .0003 
+     .99     2.00     1.50    49.7308      .9900      .0002 
+     .99     3.00      .50    18.9103      .9900      .0006 
+     .99     3.00      .75    26.8654      .9900      .0004 
+     .99     3.00     1.00    34.8205      .9900      .0003 
+     .99     3.00     1.25    42.7756      .9900      .0003 
+     .99     3.00     1.50    50.7308      .9900      .0002 
+     .99     4.00      .50    19.9103      .9900      .0006 
+     .99     4.00      .75    27.8654      .9900      .0004 
+     .99     4.00     1.00    35.8205      .9900      .0003 
+     .99     4.00     1.25    43.7756      .9900      .0003 
+     .99     4.00     1.50    51.7308      .9900      .0002 
+     .99     5.00      .50    20.9103      .9900      .0006 
+     .99     5.00      .75    28.8654      .9900      .0004 
+     .99     5.00     1.00    36.8205      .9900      .0003 
+     .99     5.00     1.25    44.7756      .9900      .0003 
+     .99     5.00     1.50    52.7308      .9900      .0002 
+])
+
+RANDIST_CHECK([chisq], [df], [cdf pdf sig], [dnl
+       P       df          x        cdf        pdf        sig 
+     .01     1.00      .0002      .0100    31.8277      .9900 
+     .01     2.00      .0201      .0100      .4950      .9900 
+     .01     5.00      .5543      .0100      .0416      .9900 
+     .01    10.00     2.5582      .0100      .0155      .9900 
+     .10     1.00      .0158      .1000     3.1498      .9000 
+     .10     2.00      .2107      .1000      .4500      .9000 
+     .10     5.00     1.6103      .1000      .1215      .9000 
+     .10    10.00     4.8652      .1000      .0641      .9000 
+     .20     1.00      .0642      .2000     1.5250      .8000 
+     .20     2.00      .4463      .2000      .4000      .8000 
+     .20     5.00     2.3425      .2000      .1478      .8000 
+     .20    10.00     6.1791      .2000      .0864      .8000 
+     .30     1.00      .1485      .3000      .9613      .7000 
+     .30     2.00      .7133      .3000      .3500      .7000 
+     .30     5.00     2.9999      .3000      .1542      .7000 
+     .30    10.00     7.2672      .3000      .0960      .7000 
+     .40     1.00      .2750      .4000      .6630      .6000 
+     .40     2.00     1.0217      .4000      .3000      .6000 
+     .40     5.00     3.6555      .4000      .1494      .6000 
+     .40    10.00     8.2955      .4000      .0974      .6000 
+     .50     1.00      .4549      .5000      .4711      .5000 
+     .50     2.00     1.3863      .5000      .2500      .5000 
+     .50     5.00     4.3515      .5000      .1370      .5000 
+     .50    10.00     9.3418      .5000      .0929      .5000 
+     .60     1.00      .7083      .6000      .3326      .4000 
+     .60     2.00     1.8326      .6000      .2000      .4000 
+     .60     5.00     5.1319      .6000      .1188      .4000 
+     .60    10.00    10.4732      .6000      .0833      .4000 
+     .70     1.00     1.0742      .7000      .2250      .3000 
+     .70     2.00     2.4079      .7000      .1500      .3000 
+     .70     5.00     6.0644      .7000      .0957      .3000 
+     .70    10.00    11.7807      .7000      .0694      .3000 
+     .80     1.00     1.6424      .8000      .1369      .2000 
+     .80     2.00     3.2189      .8000      .1000      .2000 
+     .80     5.00     7.2893      .8000      .0684      .2000 
+     .80    10.00    13.4420      .8000      .0512      .2000 
+     .90     1.00     2.7055      .9000      .0627      .1000 
+     .90     2.00     4.6052      .9000      .0500      .1000 
+     .90     5.00     9.2364      .9000      .0368      .1000 
+     .90    10.00    15.9872      .9000      .0287      .1000 
+     .99     1.00     6.6349      .9900      .0056      .0100 
+     .99     2.00     9.2103      .9900      .0050      .0100 
+     .99     5.00    15.0863      .9900      .0041      .0100 
+     .99    10.00    23.2093      .9900      .0034      .0100 
+])
+
+RANDIST_CHECK([exp], [a], [cdf pdf], [dnl
+       P        a          x        cdf        pdf 
+     .01     1.00      .0101      .0100      .9900 
+     .01     2.00      .0050      .0100     1.9800 
+     .01     5.00      .0020      .0100     4.9500 
+     .01    10.00      .0010      .0100     9.9000 
+     .10     1.00      .1054      .1000      .9000 
+     .10     2.00      .0527      .1000     1.8000 
+     .10     5.00      .0211      .1000     4.5000 
+     .10    10.00      .0105      .1000     9.0000 
+     .20     1.00      .2231      .2000      .8000 
+     .20     2.00      .1116      .2000     1.6000 
+     .20     5.00      .0446      .2000     4.0000 
+     .20    10.00      .0223      .2000     8.0000 
+     .30     1.00      .3567      .3000      .7000 
+     .30     2.00      .1783      .3000     1.4000 
+     .30     5.00      .0713      .3000     3.5000 
+     .30    10.00      .0357      .3000     7.0000 
+     .40     1.00      .5108      .4000      .6000 
+     .40     2.00      .2554      .4000     1.2000 
+     .40     5.00      .1022      .4000     3.0000 
+     .40    10.00      .0511      .4000     6.0000 
+     .50     1.00      .6931      .5000      .5000 
+     .50     2.00      .3466      .5000     1.0000 
+     .50     5.00      .1386      .5000     2.5000 
+     .50    10.00      .0693      .5000     5.0000 
+     .60     1.00      .9163      .6000      .4000 
+     .60     2.00      .4581      .6000      .8000 
+     .60     5.00      .1833      .6000     2.0000 
+     .60    10.00      .0916      .6000     4.0000 
+     .70     1.00     1.2040      .7000      .3000 
+     .70     2.00      .6020      .7000      .6000 
+     .70     5.00      .2408      .7000     1.5000 
+     .70    10.00      .1204      .7000     3.0000 
+     .80     1.00     1.6094      .8000      .2000 
+     .80     2.00      .8047      .8000      .4000 
+     .80     5.00      .3219      .8000     1.0000 
+     .80    10.00      .1609      .8000     2.0000 
+     .90     1.00     2.3026      .9000      .1000 
+     .90     2.00     1.1513      .9000      .2000 
+     .90     5.00      .4605      .9000      .5000 
+     .90    10.00      .2303      .9000     1.0000 
+     .99     1.00     4.6052      .9900      .0100 
+     .99     2.00     2.3026      .9900      .0200 
+     .99     5.00      .9210      .9900      .0500 
+     .99    10.00      .4605      .9900      .1000 
+])
+
+RANDIST_CHECK([f], [df1 df2], [cdf pdf], [dnl
+       P      df1      df2          x        cdf        pdf 
+     .01     1.00     1.00      .0002      .0100    20.2576 
+     .01     1.00     2.00      .0002      .0100    24.9950 
+     .01     1.00     5.00      .0002      .0100    28.8162 
+     .01     1.00    10.00      .0002      .0100    30.2774 
+     .01     2.00     1.00      .0102      .0100      .9703 
+     .01     2.00     2.00      .0101      .0100      .9801 
+     .01     2.00     5.00      .0101      .0100      .9860 
+     .01     2.00    10.00      .0101      .0100      .9880 
+     .01     5.00     1.00      .0615      .0100      .3238 
+     .01     5.00     2.00      .0753      .0100      .2793 
+     .01     5.00     5.00      .0912      .0100      .2417 
+     .01     5.00    10.00      .0995      .0100      .2261 
+     .01    10.00     1.00      .0996      .0100      .2704 
+     .01    10.00     2.00      .1323      .0100      .2275 
+     .01    10.00     5.00      .1774      .0100      .1907 
+     .01    10.00    10.00      .2062      .0100      .1747 
+     .10     1.00     1.00      .0251      .1000     1.9605 
+     .10     1.00     2.00      .0202      .1000     2.4503 
+     .10     1.00     5.00      .0175      .1000     2.8421 
+     .10     1.00    10.00      .0166      .1000     2.9915 
+     .10     2.00     1.00      .1173      .1000      .7290 
+     .10     2.00     2.00      .1111      .1000      .8100 
+     .10     2.00     5.00      .1076      .1000      .8629 
+     .10     2.00    10.00      .1065      .1000      .8812 
+     .10     5.00     1.00      .2463      .1000      .5220 
+     .10     5.00     2.00      .2646      .1000      .5687 
+     .10     5.00     5.00      .2896      .1000      .5934 
+     .10     5.00    10.00      .3033      .1000      .6006 
+     .10    10.00     1.00      .3044      .1000      .4857 
+     .10    10.00     2.00      .3419      .1000      .5396 
+     .10    10.00     5.00      .3966      .1000      .5816 
+     .10    10.00    10.00      .4306      .1000      .6031 
+     .20     1.00     1.00      .1056      .2000      .8861 
+     .20     1.00     2.00      .0833      .2000     1.1520 
+     .20     1.00     5.00      .0714      .2000     1.3616 
+     .20     1.00    10.00      .0677      .2000     1.4410 
+     .20     2.00     1.00      .2812      .2000      .5120 
+     .20     2.00     2.00      .2500      .2000      .6400 
+     .20     2.00     5.00      .2334      .2000      .7317 
+     .20     2.00    10.00      .2282      .2000      .7651 
+     .20     5.00     1.00      .4591      .2000      .4124 
+     .20     5.00     2.00      .4426      .2000      .5362 
+     .20     5.00     5.00      .4489      .2000      .6397 
+     .20     5.00    10.00      .4563      .2000      .6842 
+     .20    10.00     1.00      .5311      .2000      .3893 
+     .20    10.00     2.00      .5267      .2000      .5225 
+     .20    10.00     5.00      .5547      .2000      .6584 
+     .20    10.00    10.00      .5775      .2000      .7343 
+     .30     1.00     1.00      .2596      .3000      .4960 
+     .30     1.00     2.00      .1978      .3000      .6901 
+     .30     1.00     5.00      .1667      .3000      .8428 
+     .30     1.00    10.00      .1573      .3000      .9004 
+     .30     2.00     1.00      .5204      .3000      .3430 
+     .30     2.00     2.00      .4286      .3000      .4900 
+     .30     2.00     5.00      .3834      .3000      .6069 
+     .30     2.00    10.00      .3697      .3000      .6518 
+     .30     5.00     1.00      .7486      .3000      .2880 
+     .30     5.00     2.00      .6466      .3000      .4433 
+     .30     5.00     5.00      .6094      .3000      .5984 
+     .30     5.00    10.00      .6026      .3000      .6729 
+     .30    10.00     1.00      .8370      .3000      .2732 
+     .30    10.00     2.00      .7346      .3000      .4370 
+     .30    10.00     5.00      .7085      .3000      .6313 
+     .30    10.00    10.00      .7112      .3000      .7487 
+     .40     1.00     1.00      .5279      .4000      .2868 
+     .40     1.00     2.00      .3810      .4000      .4410 
+     .40     1.00     5.00      .3130      .4000      .5656 
+     .40     1.00    10.00      .2933      .4000      .6129 
+     .40     2.00     1.00      .8889      .4000      .2160 
+     .40     2.00     2.00      .6667      .4000      .3600 
+     .40     2.00     5.00      .5668      .4000      .4891 
+     .40     2.00    10.00      .5378      .4000      .5417 
+     .40     5.00     1.00     1.1826      .4000      .1847 
+     .40     5.00     2.00      .9035      .4000      .3396 
+     .40     5.00     5.00      .7879      .4000      .5199 
+     .40     5.00    10.00      .7573      .4000      .6147 
+     .40    10.00     1.00     1.2941      .4000      .1755 
+     .40    10.00     2.00      .9944      .4000      .3368 
+     .40    10.00     5.00      .8763      .4000      .5572 
+     .40    10.00    10.00      .8484      .4000      .7011 
+     .50     1.00     1.00     1.0000      .5000      .1592 
+     .50     1.00     2.00      .6667      .5000      .2813 
+     .50     1.00     5.00      .5281      .5000      .3865 
+     .50     1.00    10.00      .4897      .5000      .4274 
+     .50     2.00     1.00     1.5000      .5000      .1250 
+     .50     2.00     2.00     1.0000      .5000      .2500 
+     .50     2.00     5.00      .7988      .5000      .3789 
+     .50     2.00    10.00      .7435      .5000      .4353 
+     .50     5.00     1.00     1.8937      .5000      .1078 
+     .50     5.00     2.00     1.2519      .5000      .2418 
+     .50     5.00     5.00     1.0000      .5000      .4244 
+     .50     5.00    10.00      .9319      .5000      .5295 
+     .50    10.00     1.00     2.0419      .5000      .1025 
+     .50    10.00     2.00     1.3450      .5000      .2406 
+     .50    10.00     5.00     1.0730      .5000      .4599 
+     .50    10.00    10.00     1.0000      .5000      .6152 
+     .60     1.00     1.00     1.8944      .6000      .0799 
+     .60     1.00     2.00     1.1250      .6000      .1707 
+     .60     1.00     5.00      .8456      .6000      .2583 
+     .60     1.00    10.00      .7727      .6000      .2939 
+     .60     2.00     1.00     2.6250      .6000      .0640 
+     .60     2.00     2.00     1.5000      .6000      .1600 
+     .60     2.00     5.00     1.1067      .6000      .2773 
+     .60     2.00    10.00     1.0056      .6000      .3330 
+     .60     5.00     1.00     3.1953      .6000      .0554 
+     .60     5.00     2.00     1.7644      .6000      .1571 
+     .60     5.00     5.00     1.2692      .6000      .3227 
+     .60     5.00    10.00     1.1412      .6000      .4278 
+     .60    10.00     1.00     3.4100      .6000      .0527 
+     .60    10.00     2.00     1.8593      .6000      .1567 
+     .60    10.00     5.00     1.3204      .6000      .3526 
+     .60    10.00    10.00     1.1787      .6000      .5047 
+     .70     1.00     1.00     3.8518      .7000      .0334 
+     .70     1.00     2.00     1.9216      .7000      .0929 
+     .70     1.00     5.00     1.3358      .7000      .1614 
+     .70     1.00    10.00     1.1948      .7000      .1914 
+     .70     2.00     1.00     5.0556      .7000      .0270 
+     .70     2.00     2.00     2.3333      .7000      .0900 
+     .70     2.00     5.00     1.5466      .7000      .1853 
+     .70     2.00    10.00     1.3613      .7000      .2358 
+     .70     5.00     1.00     6.0006      .7000      .0234 
+     .70     5.00     2.00     2.6084      .7000      .0892 
+     .70     5.00     5.00     1.6410      .7000      .2222 
+     .70     5.00    10.00     1.4114      .7000      .3169 
+     .70    10.00     1.00     6.3579      .7000      .0223 
+     .70    10.00     2.00     2.7049      .7000      .0891 
+     .70    10.00     5.00     1.6595      .7000      .2443 
+     .70    10.00    10.00     1.4061      .7000      .3787 
+     .80     1.00     1.00     9.4721      .8000      .0099 
+     .80     1.00     2.00     3.5556      .8000      .0405 
+     .80     1.00     5.00     2.1782      .8000      .0869 
+     .80     1.00    10.00     1.8829      .8000      .1098 
+     .80     2.00     1.00    12.0000      .8000      .0080 
+     .80     2.00     2.00     4.0000      .8000      .0400 
+     .80     2.00     5.00     2.2591      .8000      .1051 
+     .80     2.00    10.00     1.8986      .8000      .1450 
+     .80     5.00     1.00    14.0084      .8000      .0069 
+     .80     5.00     2.00     4.2844      .8000      .0399 
+     .80     5.00     5.00     2.2275      .8000      .1289 
+     .80     5.00    10.00     1.8027      .8000      .2026 
+     .80    10.00     1.00    14.7719      .8000      .0066 
+     .80    10.00     2.00     4.3822      .8000      .0398 
+     .80    10.00     5.00     2.1914      .8000      .1425 
+     .80    10.00    10.00     1.7316      .8000      .2449 
+     .90     1.00     1.00    39.8635      .9000      .0012 
+     .90     1.00     2.00     8.5263      .9000      .0100 
+     .90     1.00     5.00     4.0604      .9000      .0317 
+     .90     1.00    10.00     3.2850      .9000      .0450 
+     .90     2.00     1.00    49.5000      .9000      .0010 
+     .90     2.00     2.00     9.0000      .9000      .0100 
+     .90     2.00     5.00     3.7797      .9000      .0398 
+     .90     2.00    10.00     2.9245      .9000      .0631 
+     .90     5.00     1.00    57.2401      .9000      .0009 
+     .90     5.00     2.00     9.2926      .9000      .0100 
+     .90     5.00     5.00     3.4530      .9000      .0498 
+     .90     5.00    10.00     2.5216      .9000      .0915 
+     .90    10.00     1.00    60.1950      .9000      .0008 
+     .90    10.00     2.00     9.3916      .9000      .0100 
+     .90    10.00     5.00     3.2974      .9000      .0552 
+     .90    10.00    10.00     2.3226      .9000      .1118 
+     .99     1.00     1.00  4052.1807      .9900      .0000 
+     .99     1.00     2.00    98.5025      .9900      .0001 
+     .99     1.00     5.00    16.2582      .9900      .0012 
+     .99     1.00    10.00    10.0443      .9900      .0027 
+     .99     2.00     1.00  4999.5000      .9900      .0000 
+     .99     2.00     2.00    99.0000      .9900      .0001 
+     .99     2.00     5.00    13.2739      .9900      .0016 
+     .99     2.00    10.00     7.5594      .9900      .0040 
+     .99     5.00     1.00  5763.6496      .9900      .0000 
+     .99     5.00     2.00    99.2993      .9900      .0001 
+     .99     5.00     5.00    10.9670      .9900      .0020 
+     .99     5.00    10.00     5.6363      .9900      .0060 
+     .99    10.00     1.00  6055.8467      .9900      .0000 
+     .99    10.00     2.00    99.3992      .9900      .0001 
+     .99    10.00     5.00    10.0510      .9900      .0022 
+     .99    10.00    10.00     4.8491      .9900      .0074 
+])
+
+RANDIST_CHECK([gamma], [a b], [cdf pdf], [dnl
+       P        a        b          x        cdf        pdf 
+     .01      .50   -10.00      .          .          .     
+     .01      .50    -5.00      .          .          .     
+     .01      .50      .00      .          .          .     
+     .01      .50     5.00      .0000      .0100   318.2766 
+     .01      .50    10.00      .0000      .0100   636.5531 
+     .01     1.00   -10.00      .          .          .     
+     .01     1.00    -5.00      .          .          .     
+     .01     1.00      .00      .          .          .     
+     .01     1.00     5.00      .0020      .0100     4.9500 
+     .01     1.00    10.00      .0010      .0100     9.9000 
+     .01     2.00   -10.00      .          .          .     
+     .01     2.00    -5.00      .          .          .     
+     .01     2.00      .00      .          .          .     
+     .01     2.00     5.00      .0297      .0100      .6402 
+     .01     2.00    10.00      .0149      .0100     1.2805 
+     .01     5.00   -10.00      .          .          .     
+     .01     5.00    -5.00      .          .          .     
+     .01     5.00      .00      .          .          .     
+     .01     5.00     5.00      .2558      .0100      .1552 
+     .01     5.00    10.00      .1279      .0100      .3104 
+     .10      .50   -10.00      .          .          .     
+     .10      .50    -5.00      .          .          .     
+     .10      .50      .00      .          .          .     
+     .10      .50     5.00      .0016      .1000    31.4977 
+     .10      .50    10.00      .0008      .1000    62.9955 
+     .10     1.00   -10.00      .          .          .     
+     .10     1.00    -5.00      .          .          .     
+     .10     1.00      .00      .          .          .     
+     .10     1.00     5.00      .0211      .1000     4.5000 
+     .10     1.00    10.00      .0105      .1000     9.0000 
+     .10     2.00   -10.00      .          .          .     
+     .10     2.00    -5.00      .          .          .     
+     .10     2.00      .00      .          .          .     
+     .10     2.00     5.00      .1064      .1000     1.5623 
+     .10     2.00    10.00      .0532      .1000     3.1246 
+     .10     5.00   -10.00      .          .          .     
+     .10     5.00    -5.00      .          .          .     
+     .10     5.00      .00      .          .          .     
+     .10     5.00     5.00      .4865      .1000      .6406 
+     .10     5.00    10.00      .2433      .1000     1.2812 
+     .20      .50   -10.00      .          .          .     
+     .20      .50    -5.00      .          .          .     
+     .20      .50      .00      .          .          .     
+     .20      .50     5.00      .0064      .2000    15.2495 
+     .20      .50    10.00      .0032      .2000    30.4991 
+     .20     1.00   -10.00      .          .          .     
+     .20     1.00    -5.00      .          .          .     
+     .20     1.00      .00      .          .          .     
+     .20     1.00     5.00      .0446      .2000     4.0000 
+     .20     1.00    10.00      .0223      .2000     8.0000 
+     .20     2.00   -10.00      .          .          .     
+     .20     2.00    -5.00      .          .          .     
+     .20     2.00      .00      .          .          .     
+     .20     2.00     5.00      .1649      .2000     1.8075 
+     .20     2.00    10.00      .0824      .2000     3.6150 
+     .20     5.00   -10.00      .          .          .     
+     .20     5.00    -5.00      .          .          .     
+     .20     5.00      .00      .          .          .     
+     .20     5.00     5.00      .6179      .2000      .8641 
+     .20     5.00    10.00      .3090      .2000     1.7282 
+     .30      .50   -10.00      .          .          .     
+     .30      .50    -5.00      .          .          .     
+     .30      .50      .00      .          .          .     
+     .30      .50     5.00      .0148      .3000     9.6128 
+     .30      .50    10.00      .0074      .3000    19.2255 
+     .30     1.00   -10.00      .          .          .     
+     .30     1.00    -5.00      .          .          .     
+     .30     1.00      .00      .          .          .     
+     .30     1.00     5.00      .0713      .3000     3.5000 
+     .30     1.00    10.00      .0357      .3000     7.0000 
+     .30     2.00   -10.00      .          .          .     
+     .30     2.00    -5.00      .          .          .     
+     .30     2.00      .00      .          .          .     
+     .30     2.00     5.00      .2195      .3000     1.8312 
+     .30     2.00    10.00      .1097      .3000     3.6625 
+     .30     5.00   -10.00      .          .          .     
+     .30     5.00    -5.00      .          .          .     
+     .30     5.00      .00      .          .          .     
+     .30     5.00     5.00      .7267      .3000      .9595 
+     .30     5.00    10.00      .3634      .3000     1.9190 
+     .40      .50   -10.00      .          .          .     
+     .40      .50    -5.00      .          .          .     
+     .40      .50      .00      .          .          .     
+     .40      .50     5.00      .0275      .4000     6.6303 
+     .40      .50    10.00      .0137      .4000    13.2606 
+     .40     1.00   -10.00      .          .          .     
+     .40     1.00    -5.00      .          .          .     
+     .40     1.00      .00      .          .          .     
+     .40     1.00     5.00      .1022      .4000     3.0000 
+     .40     1.00    10.00      .0511      .4000     6.0000 
+     .40     2.00   -10.00      .          .          .     
+     .40     2.00    -5.00      .          .          .     
+     .40     2.00      .00      .          .          .     
+     .40     2.00     5.00      .2753      .4000     1.7376 
+     .40     2.00    10.00      .1376      .4000     3.4752 
+     .40     5.00   -10.00      .          .          .     
+     .40     5.00    -5.00      .          .          .     
+     .40     5.00      .00      .          .          .     
+     .40     5.00     5.00      .8295      .4000      .9742 
+     .40     5.00    10.00      .4148      .4000     1.9485 
+     .50      .50   -10.00      .          .          .     
+     .50      .50    -5.00      .          .          .     
+     .50      .50      .00      .          .          .     
+     .50      .50     5.00      .0455      .5000     4.7114 
+     .50      .50    10.00      .0227      .5000     9.4227 
+     .50     1.00   -10.00      .          .          .     
+     .50     1.00    -5.00      .          .          .     
+     .50     1.00      .00      .          .          .     
+     .50     1.00     5.00      .1386      .5000     2.5000 
+     .50     1.00    10.00      .0693      .5000     5.0000 
+     .50     2.00   -10.00      .          .          .     
+     .50     2.00    -5.00      .          .          .     
+     .50     2.00      .00      .          .          .     
+     .50     2.00     5.00      .3357      .5000     1.5666 
+     .50     2.00    10.00      .1678      .5000     3.1332 
+     .50     5.00   -10.00      .          .          .     
+     .50     5.00    -5.00      .          .          .     
+     .50     5.00      .00      .          .          .     
+     .50     5.00     5.00      .9342      .5000      .9286 
+     .50     5.00    10.00      .4671      .5000     1.8571 
+     .60      .50   -10.00      .          .          .     
+     .60      .50    -5.00      .          .          .     
+     .60      .50      .00      .          .          .     
+     .60      .50     5.00      .0708      .6000     3.3265 
+     .60      .50    10.00      .0354      .6000     6.6529 
+     .60     1.00   -10.00      .          .          .     
+     .60     1.00    -5.00      .          .          .     
+     .60     1.00      .00      .          .          .     
+     .60     1.00     5.00      .1833      .6000     2.0000 
+     .60     1.00    10.00      .0916      .6000     4.0000 
+     .60     2.00   -10.00      .          .          .     
+     .60     2.00    -5.00      .          .          .     
+     .60     2.00      .00      .          .          .     
+     .60     2.00     5.00      .4045      .6000     1.3383 
+     .60     2.00    10.00      .2022      .6000     2.6765 
+     .60     5.00   -10.00      .          .          .     
+     .60     5.00    -5.00      .          .          .     
+     .60     5.00      .00      .          .          .     
+     .60     5.00     5.00     1.0473      .6000      .8332 
+     .60     5.00    10.00      .5237      .6000     1.6663 
+     .70      .50   -10.00      .          .          .     
+     .70      .50    -5.00      .          .          .     
+     .70      .50      .00      .          .          .     
+     .70      .50     5.00      .1074      .7000     2.2496 
+     .70      .50    10.00      .0537      .7000     4.4993 
+     .70     1.00   -10.00      .          .          .     
+     .70     1.00    -5.00      .          .          .     
+     .70     1.00      .00      .          .          .     
+     .70     1.00     5.00      .2408      .7000     1.5000 
+     .70     1.00    10.00      .1204      .7000     3.0000 
+     .70     2.00   -10.00      .          .          .     
+     .70     2.00    -5.00      .          .          .     
+     .70     2.00      .00      .          .          .     
+     .70     2.00     5.00      .4878      .7000     1.0639 
+     .70     2.00    10.00      .2439      .7000     2.1277 
+     .70     5.00   -10.00      .          .          .     
+     .70     5.00    -5.00      .          .          .     
+     .70     5.00      .00      .          .          .     
+     .70     5.00     5.00     1.1781      .7000      .6937 
+     .70     5.00    10.00      .5890      .7000     1.3874 
+     .80      .50   -10.00      .          .          .     
+     .80      .50    -5.00      .          .          .     
+     .80      .50      .00      .          .          .     
+     .80      .50     5.00      .1642      .8000     1.3694 
+     .80      .50    10.00      .0821      .8000     2.7388 
+     .80     1.00   -10.00      .          .          .     
+     .80     1.00    -5.00      .          .          .     
+     .80     1.00      .00      .          .          .     
+     .80     1.00     5.00      .3219      .8000     1.0000 
+     .80     1.00    10.00      .1609      .8000     2.0000 
+     .80     2.00   -10.00      .          .          .     
+     .80     2.00    -5.00      .          .          .     
+     .80     2.00      .00      .          .          .     
+     .80     2.00     5.00      .5989      .8000      .7496 
+     .80     2.00    10.00      .2994      .8000     1.4993 
+     .80     5.00   -10.00      .          .          .     
+     .80     5.00    -5.00      .          .          .     
+     .80     5.00      .00      .          .          .     
+     .80     5.00     5.00     1.3442      .8000      .5124 
+     .80     5.00    10.00      .6721      .8000     1.0248 
+     .90      .50   -10.00      .          .          .     
+     .90      .50    -5.00      .          .          .     
+     .90      .50      .00      .          .          .     
+     .90      .50     5.00      .2706      .9000      .6270 
+     .90      .50    10.00      .1353      .9000     1.2540 
+     .90     1.00   -10.00      .          .          .     
+     .90     1.00    -5.00      .          .          .     
+     .90     1.00      .00      .          .          .     
+     .90     1.00     5.00      .4605      .9000      .5000 
+     .90     1.00    10.00      .2303      .9000     1.0000 
+     .90     2.00   -10.00      .          .          .     
+     .90     2.00    -5.00      .          .          .     
+     .90     2.00      .00      .          .          .     
+     .90     2.00     5.00      .7779      .9000      .3977 
+     .90     2.00    10.00      .3890      .9000      .7955 
+     .90     5.00   -10.00      .          .          .     
+     .90     5.00    -5.00      .          .          .     
+     .90     5.00      .00      .          .          .     
+     .90     5.00     5.00     1.5987      .9000      .2872 
+     .90     5.00    10.00      .7994      .9000      .5744 
+     .99      .50   -10.00      .          .          .     
+     .99      .50    -5.00      .          .          .     
+     .99      .50      .00      .          .          .     
+     .99      .50     5.00      .6635      .9900      .0561 
+     .99      .50    10.00      .3317      .9900      .1123 
+     .99     1.00   -10.00      .          .          .     
+     .99     1.00    -5.00      .          .          .     
+     .99     1.00      .00      .          .          .     
+     .99     1.00     5.00      .9210      .9900      .0500 
+     .99     1.00    10.00      .4605      .9900      .1000 
+     .99     2.00   -10.00      .          .          .     
+     .99     2.00    -5.00      .          .          .     
+     .99     2.00      .00      .          .          .     
+     .99     2.00     5.00     1.3277      .9900      .0435 
+     .99     2.00    10.00      .6638      .9900      .0869 
+     .99     5.00   -10.00      .          .          .     
+     .99     5.00    -5.00      .          .          .     
+     .99     5.00      .00      .          .          .     
+     .99     5.00     5.00     2.3209      .9900      .0345 
+     .99     5.00    10.00     1.1605      .9900      .0689 
+])
+
+RANDIST_CHECK([laplace], [a b], [cdf pdf], [dnl
+       P        a        b          x        cdf        pdf 
+     .01   -10.00      .50   -11.9560      .0100      .0200 
+     .01   -10.00     1.00   -13.9120      .0100      .0100 
+     .01   -10.00     2.00   -17.8240      .0100      .0050 
+     .01   -10.00     5.00   -29.5601      .0100      .0020 
+     .01    -5.00      .50    -6.9560      .0100      .0200 
+     .01    -5.00     1.00    -8.9120      .0100      .0100 
+     .01    -5.00     2.00   -12.8240      .0100      .0050 
+     .01    -5.00     5.00   -24.5601      .0100      .0020 
+     .01      .00      .50    -1.9560      .0100      .0200 
+     .01      .00     1.00    -3.9120      .0100      .0100 
+     .01      .00     2.00    -7.8240      .0100      .0050 
+     .01      .00     5.00   -19.5601      .0100      .0020 
+     .01     5.00      .50     3.0440      .0100      .0200 
+     .01     5.00     1.00     1.0880      .0100      .0100 
+     .01     5.00     2.00    -2.8240      .0100      .0050 
+     .01     5.00     5.00   -14.5601      .0100      .0020 
+     .01    10.00      .50     8.0440      .0100      .0200 
+     .01    10.00     1.00     6.0880      .0100      .0100 
+     .01    10.00     2.00     2.1760      .0100      .0050 
+     .01    10.00     5.00    -9.5601      .0100      .0020 
+     .10   -10.00      .50   -10.8047      .1000      .2000 
+     .10   -10.00     1.00   -11.6094      .1000      .1000 
+     .10   -10.00     2.00   -13.2189      .1000      .0500 
+     .10   -10.00     5.00   -18.0472      .1000      .0200 
+     .10    -5.00      .50    -5.8047      .1000      .2000 
+     .10    -5.00     1.00    -6.6094      .1000      .1000 
+     .10    -5.00     2.00    -8.2189      .1000      .0500 
+     .10    -5.00     5.00   -13.0472      .1000      .0200 
+     .10      .00      .50     -.8047      .1000      .2000 
+     .10      .00     1.00    -1.6094      .1000      .1000 
+     .10      .00     2.00    -3.2189      .1000      .0500 
+     .10      .00     5.00    -8.0472      .1000      .0200 
+     .10     5.00      .50     4.1953      .1000      .2000 
+     .10     5.00     1.00     3.3906      .1000      .1000 
+     .10     5.00     2.00     1.7811      .1000      .0500 
+     .10     5.00     5.00    -3.0472      .1000      .0200 
+     .10    10.00      .50     9.1953      .1000      .2000 
+     .10    10.00     1.00     8.3906      .1000      .1000 
+     .10    10.00     2.00     6.7811      .1000      .0500 
+     .10    10.00     5.00     1.9528      .1000      .0200 
+     .20   -10.00      .50   -10.4581      .2000      .4000 
+     .20   -10.00     1.00   -10.9163      .2000      .2000 
+     .20   -10.00     2.00   -11.8326      .2000      .1000 
+     .20   -10.00     5.00   -14.5815      .2000      .0400 
+     .20    -5.00      .50    -5.4581      .2000      .4000 
+     .20    -5.00     1.00    -5.9163      .2000      .2000 
+     .20    -5.00     2.00    -6.8326      .2000      .1000 
+     .20    -5.00     5.00    -9.5815      .2000      .0400 
+     .20      .00      .50     -.4581      .2000      .4000 
+     .20      .00     1.00     -.9163      .2000      .2000 
+     .20      .00     2.00    -1.8326      .2000      .1000 
+     .20      .00     5.00    -4.5815      .2000      .0400 
+     .20     5.00      .50     4.5419      .2000      .4000 
+     .20     5.00     1.00     4.0837      .2000      .2000 
+     .20     5.00     2.00     3.1674      .2000      .1000 
+     .20     5.00     5.00      .4185      .2000      .0400 
+     .20    10.00      .50     9.5419      .2000      .4000 
+     .20    10.00     1.00     9.0837      .2000      .2000 
+     .20    10.00     2.00     8.1674      .2000      .1000 
+     .20    10.00     5.00     5.4185      .2000      .0400 
+     .30   -10.00      .50   -10.2554      .3000      .6000 
+     .30   -10.00     1.00   -10.5108      .3000      .3000 
+     .30   -10.00     2.00   -11.0217      .3000      .1500 
+     .30   -10.00     5.00   -12.5541      .3000      .0600 
+     .30    -5.00      .50    -5.2554      .3000      .6000 
+     .30    -5.00     1.00    -5.5108      .3000      .3000 
+     .30    -5.00     2.00    -6.0217      .3000      .1500 
+     .30    -5.00     5.00    -7.5541      .3000      .0600 
+     .30      .00      .50     -.2554      .3000      .6000 
+     .30      .00     1.00     -.5108      .3000      .3000 
+     .30      .00     2.00    -1.0217      .3000      .1500 
+     .30      .00     5.00    -2.5541      .3000      .0600 
+     .30     5.00      .50     4.7446      .3000      .6000 
+     .30     5.00     1.00     4.4892      .3000      .3000 
+     .30     5.00     2.00     3.9783      .3000      .1500 
+     .30     5.00     5.00     2.4459      .3000      .0600 
+     .30    10.00      .50     9.7446      .3000      .6000 
+     .30    10.00     1.00     9.4892      .3000      .3000 
+     .30    10.00     2.00     8.9783      .3000      .1500 
+     .30    10.00     5.00     7.4459      .3000      .0600 
+     .40   -10.00      .50   -10.1116      .4000      .8000 
+     .40   -10.00     1.00   -10.2231      .4000      .4000 
+     .40   -10.00     2.00   -10.4463      .4000      .2000 
+     .40   -10.00     5.00   -11.1157      .4000      .0800 
+     .40    -5.00      .50    -5.1116      .4000      .8000 
+     .40    -5.00     1.00    -5.2231      .4000      .4000 
+     .40    -5.00     2.00    -5.4463      .4000      .2000 
+     .40    -5.00     5.00    -6.1157      .4000      .0800 
+     .40      .00      .50     -.1116      .4000      .8000 
+     .40      .00     1.00     -.2231      .4000      .4000 
+     .40      .00     2.00     -.4463      .4000      .2000 
+     .40      .00     5.00    -1.1157      .4000      .0800 
+     .40     5.00      .50     4.8884      .4000      .8000 
+     .40     5.00     1.00     4.7769      .4000      .4000 
+     .40     5.00     2.00     4.5537      .4000      .2000 
+     .40     5.00     5.00     3.8843      .4000      .0800 
+     .40    10.00      .50     9.8884      .4000      .8000 
+     .40    10.00     1.00     9.7769      .4000      .4000 
+     .40    10.00     2.00     9.5537      .4000      .2000 
+     .40    10.00     5.00     8.8843      .4000      .0800 
+     .50   -10.00      .50   -10.0000      .5000     1.0000 
+     .50   -10.00     1.00   -10.0000      .5000      .5000 
+     .50   -10.00     2.00   -10.0000      .5000      .2500 
+     .50   -10.00     5.00   -10.0000      .5000      .1000 
+     .50    -5.00      .50    -5.0000      .5000     1.0000 
+     .50    -5.00     1.00    -5.0000      .5000      .5000 
+     .50    -5.00     2.00    -5.0000      .5000      .2500 
+     .50    -5.00     5.00    -5.0000      .5000      .1000 
+     .50      .00      .50      .0000      .5000     1.0000 
+     .50      .00     1.00      .0000      .5000      .5000 
+     .50      .00     2.00      .0000      .5000      .2500 
+     .50      .00     5.00      .0000      .5000      .1000 
+     .50     5.00      .50     5.0000      .5000     1.0000 
+     .50     5.00     1.00     5.0000      .5000      .5000 
+     .50     5.00     2.00     5.0000      .5000      .2500 
+     .50     5.00     5.00     5.0000      .5000      .1000 
+     .50    10.00      .50    10.0000      .5000     1.0000 
+     .50    10.00     1.00    10.0000      .5000      .5000 
+     .50    10.00     2.00    10.0000      .5000      .2500 
+     .50    10.00     5.00    10.0000      .5000      .1000 
+     .60   -10.00      .50    -9.8884      .6000      .8000 
+     .60   -10.00     1.00    -9.7769      .6000      .4000 
+     .60   -10.00     2.00    -9.5537      .6000      .2000 
+     .60   -10.00     5.00    -8.8843      .6000      .0800 
+     .60    -5.00      .50    -4.8884      .6000      .8000 
+     .60    -5.00     1.00    -4.7769      .6000      .4000 
+     .60    -5.00     2.00    -4.5537      .6000      .2000 
+     .60    -5.00     5.00    -3.8843      .6000      .0800 
+     .60      .00      .50      .1116      .6000      .8000 
+     .60      .00     1.00      .2231      .6000      .4000 
+     .60      .00     2.00      .4463      .6000      .2000 
+     .60      .00     5.00     1.1157      .6000      .0800 
+     .60     5.00      .50     5.1116      .6000      .8000 
+     .60     5.00     1.00     5.2231      .6000      .4000 
+     .60     5.00     2.00     5.4463      .6000      .2000 
+     .60     5.00     5.00     6.1157      .6000      .0800 
+     .60    10.00      .50    10.1116      .6000      .8000 
+     .60    10.00     1.00    10.2231      .6000      .4000 
+     .60    10.00     2.00    10.4463      .6000      .2000 
+     .60    10.00     5.00    11.1157      .6000      .0800 
+     .70   -10.00      .50    -9.7446      .7000      .6000 
+     .70   -10.00     1.00    -9.4892      .7000      .3000 
+     .70   -10.00     2.00    -8.9783      .7000      .1500 
+     .70   -10.00     5.00    -7.4459      .7000      .0600 
+     .70    -5.00      .50    -4.7446      .7000      .6000 
+     .70    -5.00     1.00    -4.4892      .7000      .3000 
+     .70    -5.00     2.00    -3.9783      .7000      .1500 
+     .70    -5.00     5.00    -2.4459      .7000      .0600 
+     .70      .00      .50      .2554      .7000      .6000 
+     .70      .00     1.00      .5108      .7000      .3000 
+     .70      .00     2.00     1.0217      .7000      .1500 
+     .70      .00     5.00     2.5541      .7000      .0600 
+     .70     5.00      .50     5.2554      .7000      .6000 
+     .70     5.00     1.00     5.5108      .7000      .3000 
+     .70     5.00     2.00     6.0217      .7000      .1500 
+     .70     5.00     5.00     7.5541      .7000      .0600 
+     .70    10.00      .50    10.2554      .7000      .6000 
+     .70    10.00     1.00    10.5108      .7000      .3000 
+     .70    10.00     2.00    11.0217      .7000      .1500 
+     .70    10.00     5.00    12.5541      .7000      .0600 
+     .80   -10.00      .50    -9.5419      .8000      .4000 
+     .80   -10.00     1.00    -9.0837      .8000      .2000 
+     .80   -10.00     2.00    -8.1674      .8000      .1000 
+     .80   -10.00     5.00    -5.4185      .8000      .0400 
+     .80    -5.00      .50    -4.5419      .8000      .4000 
+     .80    -5.00     1.00    -4.0837      .8000      .2000 
+     .80    -5.00     2.00    -3.1674      .8000      .1000 
+     .80    -5.00     5.00     -.4185      .8000      .0400 
+     .80      .00      .50      .4581      .8000      .4000 
+     .80      .00     1.00      .9163      .8000      .2000 
+     .80      .00     2.00     1.8326      .8000      .1000 
+     .80      .00     5.00     4.5815      .8000      .0400 
+     .80     5.00      .50     5.4581      .8000      .4000 
+     .80     5.00     1.00     5.9163      .8000      .2000 
+     .80     5.00     2.00     6.8326      .8000      .1000 
+     .80     5.00     5.00     9.5815      .8000      .0400 
+     .80    10.00      .50    10.4581      .8000      .4000 
+     .80    10.00     1.00    10.9163      .8000      .2000 
+     .80    10.00     2.00    11.8326      .8000      .1000 
+     .80    10.00     5.00    14.5815      .8000      .0400 
+     .90   -10.00      .50    -9.1953      .9000      .2000 
+     .90   -10.00     1.00    -8.3906      .9000      .1000 
+     .90   -10.00     2.00    -6.7811      .9000      .0500 
+     .90   -10.00     5.00    -1.9528      .9000      .0200 
+     .90    -5.00      .50    -4.1953      .9000      .2000 
+     .90    -5.00     1.00    -3.3906      .9000      .1000 
+     .90    -5.00     2.00    -1.7811      .9000      .0500 
+     .90    -5.00     5.00     3.0472      .9000      .0200 
+     .90      .00      .50      .8047      .9000      .2000 
+     .90      .00     1.00     1.6094      .9000      .1000 
+     .90      .00     2.00     3.2189      .9000      .0500 
+     .90      .00     5.00     8.0472      .9000      .0200 
+     .90     5.00      .50     5.8047      .9000      .2000 
+     .90     5.00     1.00     6.6094      .9000      .1000 
+     .90     5.00     2.00     8.2189      .9000      .0500 
+     .90     5.00     5.00    13.0472      .9000      .0200 
+     .90    10.00      .50    10.8047      .9000      .2000 
+     .90    10.00     1.00    11.6094      .9000      .1000 
+     .90    10.00     2.00    13.2189      .9000      .0500 
+     .90    10.00     5.00    18.0472      .9000      .0200 
+     .99   -10.00      .50    -8.0440      .9900      .0200 
+     .99   -10.00     1.00    -6.0880      .9900      .0100 
+     .99   -10.00     2.00    -2.1760      .9900      .0050 
+     .99   -10.00     5.00     9.5601      .9900      .0020 
+     .99    -5.00      .50    -3.0440      .9900      .0200 
+     .99    -5.00     1.00    -1.0880      .9900      .0100 
+     .99    -5.00     2.00     2.8240      .9900      .0050 
+     .99    -5.00     5.00    14.5601      .9900      .0020 
+     .99      .00      .50     1.9560      .9900      .0200 
+     .99      .00     1.00     3.9120      .9900      .0100 
+     .99      .00     2.00     7.8240      .9900      .0050 
+     .99      .00     5.00    19.5601      .9900      .0020 
+     .99     5.00      .50     6.9560      .9900      .0200 
+     .99     5.00     1.00     8.9120      .9900      .0100 
+     .99     5.00     2.00    12.8240      .9900      .0050 
+     .99     5.00     5.00    24.5601      .9900      .0020 
+     .99    10.00      .50    11.9560      .9900      .0200 
+     .99    10.00     1.00    13.9120      .9900      .0100 
+     .99    10.00     2.00    17.8240      .9900      .0050 
+     .99    10.00     5.00    29.5601      .9900      .0020 
+])
+
+RANDIST_CHECK([logistic], [a b], [cdf pdf], [dnl
+       P        a        b          x        cdf        pdf 
+     .01   -10.00      .50   -12.2976      .0100      .0198 
+     .01   -10.00     1.00   -14.5951      .0100      .0099 
+     .01   -10.00     2.00   -19.1902      .0100      .0049 
+     .01   -10.00     5.00   -32.9756      .0100      .0020 
+     .01    -5.00      .50    -7.2976      .0100      .0198 
+     .01    -5.00     1.00    -9.5951      .0100      .0099 
+     .01    -5.00     2.00   -14.1902      .0100      .0050 
+     .01    -5.00     5.00   -27.9756      .0100      .0020 
+     .01      .00      .50    -2.2976      .0100      .0198 
+     .01      .00     1.00    -4.5951      .0100      .0099 
+     .01      .00     2.00    -9.1902      .0100      .0050 
+     .01      .00     5.00   -22.9756      .0100      .0020 
+     .01     5.00      .50     2.7024      .0100      .0198 
+     .01     5.00     1.00      .4049      .0100      .0099 
+     .01     5.00     2.00    -4.1902      .0100      .0050 
+     .01     5.00     5.00   -17.9756      .0100      .0020 
+     .01    10.00      .50     7.7024      .0100      .0198 
+     .01    10.00     1.00     5.4049      .0100      .0099 
+     .01    10.00     2.00      .8098      .0100      .0050 
+     .01    10.00     5.00   -12.9756      .0100      .0020 
+     .10   -10.00      .50   -11.0986      .1000      .1800 
+     .10   -10.00     1.00   -12.1972      .1000      .0900 
+     .10   -10.00     2.00   -14.3944      .1000      .0450 
+     .10   -10.00     5.00   -20.9861      .1000      .0180 
+     .10    -5.00      .50    -6.0986      .1000      .1800 
+     .10    -5.00     1.00    -7.1972      .1000      .0900 
+     .10    -5.00     2.00    -9.3944      .1000      .0450 
+     .10    -5.00     5.00   -15.9861      .1000      .0180 
+     .10      .00      .50    -1.0986      .1000      .1800 
+     .10      .00     1.00    -2.1972      .1000      .0900 
+     .10      .00     2.00    -4.3944      .1000      .0450 
+     .10      .00     5.00   -10.9861      .1000      .0180 
+     .10     5.00      .50     3.9014      .1000      .1800 
+     .10     5.00     1.00     2.8028      .1000      .0900 
+     .10     5.00     2.00      .6056      .1000      .0450 
+     .10     5.00     5.00    -5.9861      .1000      .0180 
+     .10    10.00      .50     8.9014      .1000      .1800 
+     .10    10.00     1.00     7.8028      .1000      .0900 
+     .10    10.00     2.00     5.6056      .1000      .0450 
+     .10    10.00     5.00     -.9861      .1000      .0180 
+     .20   -10.00      .50   -10.6931      .2000      .3200 
+     .20   -10.00     1.00   -11.3863      .2000      .1600 
+     .20   -10.00     2.00   -12.7726      .2000      .0800 
+     .20   -10.00     5.00   -16.9315      .2000      .0320 
+     .20    -5.00      .50    -5.6931      .2000      .3200 
+     .20    -5.00     1.00    -6.3863      .2000      .1600 
+     .20    -5.00     2.00    -7.7726      .2000      .0800 
+     .20    -5.00     5.00   -11.9315      .2000      .0320 
+     .20      .00      .50     -.6931      .2000      .3200 
+     .20      .00     1.00    -1.3863      .2000      .1600 
+     .20      .00     2.00    -2.7726      .2000      .0800 
+     .20      .00     5.00    -6.9315      .2000      .0320 
+     .20     5.00      .50     4.3069      .2000      .3200 
+     .20     5.00     1.00     3.6137      .2000      .1600 
+     .20     5.00     2.00     2.2274      .2000      .0800 
+     .20     5.00     5.00    -1.9315      .2000      .0320 
+     .20    10.00      .50     9.3069      .2000      .3200 
+     .20    10.00     1.00     8.6137      .2000      .1600 
+     .20    10.00     2.00     7.2274      .2000      .0800 
+     .20    10.00     5.00     3.0685      .2000      .0320 
+     .30   -10.00      .50   -10.4236      .3000      .4200 
+     .30   -10.00     1.00   -10.8473      .3000      .2100 
+     .30   -10.00     2.00   -11.6946      .3000      .1050 
+     .30   -10.00     5.00   -14.2365      .3000      .0420 
+     .30    -5.00      .50    -5.4236      .3000      .4200 
+     .30    -5.00     1.00    -5.8473      .3000      .2100 
+     .30    -5.00     2.00    -6.6946      .3000      .1050 
+     .30    -5.00     5.00    -9.2365      .3000      .0420 
+     .30      .00      .50     -.4236      .3000      .4200 
+     .30      .00     1.00     -.8473      .3000      .2100 
+     .30      .00     2.00    -1.6946      .3000      .1050 
+     .30      .00     5.00    -4.2365      .3000      .0420 
+     .30     5.00      .50     4.5764      .3000      .4200 
+     .30     5.00     1.00     4.1527      .3000      .2100 
+     .30     5.00     2.00     3.3054      .3000      .1050 
+     .30     5.00     5.00      .7635      .3000      .0420 
+     .30    10.00      .50     9.5764      .3000      .4200 
+     .30    10.00     1.00     9.1527      .3000      .2100 
+     .30    10.00     2.00     8.3054      .3000      .1050 
+     .30    10.00     5.00     5.7635      .3000      .0420 
+     .40   -10.00      .50   -10.2027      .4000      .4800 
+     .40   -10.00     1.00   -10.4055      .4000      .2400 
+     .40   -10.00     2.00   -10.8109      .4000      .1200 
+     .40   -10.00     5.00   -12.0273      .4000      .0480 
+     .40    -5.00      .50    -5.2027      .4000      .4800 
+     .40    -5.00     1.00    -5.4055      .4000      .2400 
+     .40    -5.00     2.00    -5.8109      .4000      .1200 
+     .40    -5.00     5.00    -7.0273      .4000      .0480 
+     .40      .00      .50     -.2027      .4000      .4800 
+     .40      .00     1.00     -.4055      .4000      .2400 
+     .40      .00     2.00     -.8109      .4000      .1200 
+     .40      .00     5.00    -2.0273      .4000      .0480 
+     .40     5.00      .50     4.7973      .4000      .4800 
+     .40     5.00     1.00     4.5945      .4000      .2400 
+     .40     5.00     2.00     4.1891      .4000      .1200 
+     .40     5.00     5.00     2.9727      .4000      .0480 
+     .40    10.00      .50     9.7973      .4000      .4800 
+     .40    10.00     1.00     9.5945      .4000      .2400 
+     .40    10.00     2.00     9.1891      .4000      .1200 
+     .40    10.00     5.00     7.9727      .4000      .0480 
+     .50   -10.00      .50   -10.0000      .5000      .5000 
+     .50   -10.00     1.00   -10.0000      .5000      .2500 
+     .50   -10.00     2.00   -10.0000      .5000      .1250 
+     .50   -10.00     5.00   -10.0000      .5000      .0500 
+     .50    -5.00      .50    -5.0000      .5000      .5000 
+     .50    -5.00     1.00    -5.0000      .5000      .2500 
+     .50    -5.00     2.00    -5.0000      .5000      .1250 
+     .50    -5.00     5.00    -5.0000      .5000      .0500 
+     .50      .00      .50      .0000      .5000      .5000 
+     .50      .00     1.00      .0000      .5000      .2500 
+     .50      .00     2.00      .0000      .5000      .1250 
+     .50      .00     5.00      .0000      .5000      .0500 
+     .50     5.00      .50     5.0000      .5000      .5000 
+     .50     5.00     1.00     5.0000      .5000      .2500 
+     .50     5.00     2.00     5.0000      .5000      .1250 
+     .50     5.00     5.00     5.0000      .5000      .0500 
+     .50    10.00      .50    10.0000      .5000      .5000 
+     .50    10.00     1.00    10.0000      .5000      .2500 
+     .50    10.00     2.00    10.0000      .5000      .1250 
+     .50    10.00     5.00    10.0000      .5000      .0500 
+     .60   -10.00      .50    -9.7973      .6000      .4800 
+     .60   -10.00     1.00    -9.5945      .6000      .2400 
+     .60   -10.00     2.00    -9.1891      .6000      .1200 
+     .60   -10.00     5.00    -7.9727      .6000      .0480 
+     .60    -5.00      .50    -4.7973      .6000      .4800 
+     .60    -5.00     1.00    -4.5945      .6000      .2400 
+     .60    -5.00     2.00    -4.1891      .6000      .1200 
+     .60    -5.00     5.00    -2.9727      .6000      .0480 
+     .60      .00      .50      .2027      .6000      .4800 
+     .60      .00     1.00      .4055      .6000      .2400 
+     .60      .00     2.00      .8109      .6000      .1200 
+     .60      .00     5.00     2.0273      .6000      .0480 
+     .60     5.00      .50     5.2027      .6000      .4800 
+     .60     5.00     1.00     5.4055      .6000      .2400 
+     .60     5.00     2.00     5.8109      .6000      .1200 
+     .60     5.00     5.00     7.0273      .6000      .0480 
+     .60    10.00      .50    10.2027      .6000      .4800 
+     .60    10.00     1.00    10.4055      .6000      .2400 
+     .60    10.00     2.00    10.8109      .6000      .1200 
+     .60    10.00     5.00    12.0273      .6000      .0480 
+     .70   -10.00      .50    -9.5764      .7000      .4200 
+     .70   -10.00     1.00    -9.1527      .7000      .2100 
+     .70   -10.00     2.00    -8.3054      .7000      .1050 
+     .70   -10.00     5.00    -5.7635      .7000      .0420 
+     .70    -5.00      .50    -4.5764      .7000      .4200 
+     .70    -5.00     1.00    -4.1527      .7000      .2100 
+     .70    -5.00     2.00    -3.3054      .7000      .1050 
+     .70    -5.00     5.00     -.7635      .7000      .0420 
+     .70      .00      .50      .4236      .7000      .4200 
+     .70      .00     1.00      .8473      .7000      .2100 
+     .70      .00     2.00     1.6946      .7000      .1050 
+     .70      .00     5.00     4.2365      .7000      .0420 
+     .70     5.00      .50     5.4236      .7000      .4200 
+     .70     5.00     1.00     5.8473      .7000      .2100 
+     .70     5.00     2.00     6.6946      .7000      .1050 
+     .70     5.00     5.00     9.2365      .7000      .0420 
+     .70    10.00      .50    10.4236      .7000      .4200 
+     .70    10.00     1.00    10.8473      .7000      .2100 
+     .70    10.00     2.00    11.6946      .7000      .1050 
+     .70    10.00     5.00    14.2365      .7000      .0420 
+     .80   -10.00      .50    -9.3069      .8000      .3200 
+     .80   -10.00     1.00    -8.6137      .8000      .1600 
+     .80   -10.00     2.00    -7.2274      .8000      .0800 
+     .80   -10.00     5.00    -3.0685      .8000      .0320 
+     .80    -5.00      .50    -4.3069      .8000      .3200 
+     .80    -5.00     1.00    -3.6137      .8000      .1600 
+     .80    -5.00     2.00    -2.2274      .8000      .0800 
+     .80    -5.00     5.00     1.9315      .8000      .0320 
+     .80      .00      .50      .6931      .8000      .3200 
+     .80      .00     1.00     1.3863      .8000      .1600 
+     .80      .00     2.00     2.7726      .8000      .0800 
+     .80      .00     5.00     6.9315      .8000      .0320 
+     .80     5.00      .50     5.6931      .8000      .3200 
+     .80     5.00     1.00     6.3863      .8000      .1600 
+     .80     5.00     2.00     7.7726      .8000      .0800 
+     .80     5.00     5.00    11.9315      .8000      .0320 
+     .80    10.00      .50    10.6931      .8000      .3200 
+     .80    10.00     1.00    11.3863      .8000      .1600 
+     .80    10.00     2.00    12.7726      .8000      .0800 
+     .80    10.00     5.00    16.9315      .8000      .0320 
+     .90   -10.00      .50    -8.9014      .9000      .1800 
+     .90   -10.00     1.00    -7.8028      .9000      .0900 
+     .90   -10.00     2.00    -5.6056      .9000      .0450 
+     .90   -10.00     5.00      .9861      .9000      .0180 
+     .90    -5.00      .50    -3.9014      .9000      .1800 
+     .90    -5.00     1.00    -2.8028      .9000      .0900 
+     .90    -5.00     2.00     -.6056      .9000      .0450 
+     .90    -5.00     5.00     5.9861      .9000      .0180 
+     .90      .00      .50     1.0986      .9000      .1800 
+     .90      .00     1.00     2.1972      .9000      .0900 
+     .90      .00     2.00     4.3944      .9000      .0450 
+     .90      .00     5.00    10.9861      .9000      .0180 
+     .90     5.00      .50     6.0986      .9000      .1800 
+     .90     5.00     1.00     7.1972      .9000      .0900 
+     .90     5.00     2.00     9.3944      .9000      .0450 
+     .90     5.00     5.00    15.9861      .9000      .0180 
+     .90    10.00      .50    11.0986      .9000      .1800 
+     .90    10.00     1.00    12.1972      .9000      .0900 
+     .90    10.00     2.00    14.3944      .9000      .0450 
+     .90    10.00     5.00    20.9861      .9000      .0180 
+     .99   -10.00      .50    -7.7024      .9900      .0198 
+     .99   -10.00     1.00    -5.4049      .9900      .0099 
+     .99   -10.00     2.00     -.8098      .9900      .0050 
+     .99   -10.00     5.00    12.9756      .9900      .0020 
+     .99    -5.00      .50    -2.7024      .9900      .0198 
+     .99    -5.00     1.00     -.4049      .9900      .0099 
+     .99    -5.00     2.00     4.1902      .9900      .0050 
+     .99    -5.00     5.00    17.9756      .9900      .0020 
+     .99      .00      .50     2.2976      .9900      .0198 
+     .99      .00     1.00     4.5951      .9900      .0099 
+     .99      .00     2.00     9.1902      .9900      .0050 
+     .99      .00     5.00    22.9756      .9900      .0020 
+     .99     5.00      .50     7.2976      .9900      .0198 
+     .99     5.00     1.00     9.5951      .9900      .0099 
+     .99     5.00     2.00    14.1902      .9900      .0050 
+     .99     5.00     5.00    27.9756      .9900      .0020 
+     .99    10.00      .50    12.2976      .9900      .0198 
+     .99    10.00     1.00    14.5951      .9900      .0099 
+     .99    10.00     2.00    19.1902      .9900      .0050 
+     .99    10.00     5.00    32.9756      .9900      .0020 
+])
+
+RANDIST_CHECK([lnormal], [z s], [cdf pdf], [dnl
+       P        z        s          x        cdf        pdf 
+     .01      .50      .50      .1562      .0100      .3412 
+     .01      .50     1.00      .0488      .0100      .5459 
+     .01      .50     2.00      .0048      .0100     2.7949 
+     .01      .50     5.00      .0000      .0100  1200.5834 
+     .01     1.00      .50      .3125      .0100      .1706 
+     .01     1.00     1.00      .0977      .0100      .2729 
+     .01     1.00     2.00      .0095      .0100     1.3975 
+     .01     1.00     5.00      .0000      .0100   600.2917 
+     .01     2.00      .50      .6250      .0100      .0853 
+     .01     2.00     1.00      .1953      .0100      .1365 
+     .01     2.00     2.00      .0191      .0100      .6987 
+     .01     2.00     5.00      .0000      .0100   300.1459 
+     .01     5.00      .50     1.5625      .0100      .0341 
+     .01     5.00     1.00      .4883      .0100      .0546 
+     .01     5.00     2.00      .0477      .0100      .2795 
+     .01     5.00     5.00      .0000      .0100   120.0583 
+     .10      .50      .50      .2634      .1000     1.3324 
+     .10      .50     1.00      .1388      .1000     1.2644 
+     .10      .50     2.00      .0385      .1000     2.2773 
+     .10      .50     5.00      .0008      .1000    42.5782 
+     .10     1.00      .50      .5269      .1000      .6662 
+     .10     1.00     1.00      .2776      .1000      .6322 
+     .10     1.00     2.00      .0771      .1000     1.1386 
+     .10     1.00     5.00      .0016      .1000    21.2891 
+     .10     2.00      .50     1.0538      .1000      .3331 
+     .10     2.00     1.00      .5552      .1000      .3161 
+     .10     2.00     2.00      .1541      .1000      .5693 
+     .10     2.00     5.00      .0033      .1000    10.6445 
+     .10     5.00      .50     2.6344      .1000      .1332 
+     .10     5.00     1.00     1.3880      .1000      .1264 
+     .10     5.00     2.00      .3853      .1000      .2277 
+     .10     5.00     5.00      .0082      .1000     4.2578 
+     .20      .50      .50      .3283      .2000     1.7057 
+     .20      .50     1.00      .2155      .2000     1.2991 
+     .20      .50     2.00      .0929      .2000     1.5070 
+     .20      .50     5.00      .0074      .2000     7.5286 
+     .20     1.00      .50      .6565      .2000      .8529 
+     .20     1.00     1.00      .4310      .2000      .6495 
+     .20     1.00     2.00      .1858      .2000      .7535 
+     .20     1.00     5.00      .0149      .2000     3.7643 
+     .20     2.00      .50     1.3130      .2000      .4264 
+     .20     2.00     1.00      .8620      .2000      .3248 
+     .20     2.00     2.00      .3715      .2000      .3768 
+     .20     2.00     5.00      .0297      .2000     1.8822 
+     .20     5.00      .50     3.2826      .2000      .1706 
+     .20     5.00     1.00     2.1551      .2000      .1299 
+     .20     5.00     2.00      .9289      .2000      .1507 
+     .20     5.00     5.00      .0744      .2000      .7529 
+     .30      .50      .50      .3847      .3000     1.8077 
+     .30      .50     1.00      .2960      .3000     1.1748 
+     .30      .50     2.00      .1752      .3000      .9924 
+     .30      .50     5.00      .0363      .3000     1.9142 
+     .30     1.00      .50      .7694      .3000      .9039 
+     .30     1.00     1.00      .5919      .3000      .5874 
+     .30     1.00     2.00      .3504      .3000      .4962 
+     .30     1.00     5.00      .0727      .3000      .9571 
+     .30     2.00      .50     1.5387      .3000      .4519 
+     .30     2.00     1.00     1.1838      .3000      .2937 
+     .30     2.00     2.00      .7007      .3000      .2481 
+     .30     2.00     5.00      .1453      .3000      .4785 
+     .30     5.00      .50     3.8468      .3000      .1808 
+     .30     5.00     1.00     2.9596      .3000      .1175 
+     .30     5.00     2.00     1.7518      .3000      .0992 
+     .30     5.00     5.00      .3633      .3000      .1914 
+     .40      .50      .50      .4405      .4000     1.7541 
+     .40      .50     1.00      .3881      .4000      .9955 
+     .40      .50     2.00      .3012      .4000      .6412 
+     .40      .50     5.00      .1409      .4000      .5485 
+     .40     1.00      .50      .8810      .4000      .8770 
+     .40     1.00     1.00      .7762      .4000      .4977 
+     .40     1.00     2.00      .6025      .4000      .3206 
+     .40     1.00     5.00      .2817      .4000      .2742 
+     .40     2.00      .50     1.7620      .4000      .4385 
+     .40     2.00     1.00     1.5524      .4000      .2489 
+     .40     2.00     2.00     1.2050      .4000      .1603 
+     .40     2.00     5.00      .5635      .4000      .1371 
+     .40     5.00      .50     4.4051      .4000      .1754 
+     .40     5.00     1.00     3.8810      .4000      .0995 
+     .40     5.00     2.00     3.0124      .4000      .0641 
+     .40     5.00     5.00     1.4087      .4000      .0548 
+     .50      .50      .50      .5000      .5000     1.5958 
+     .50      .50     1.00      .5000      .5000      .7979 
+     .50      .50     2.00      .5000      .5000      .3989 
+     .50      .50     5.00      .5000      .5000      .1596 
+     .50     1.00      .50     1.0000      .5000      .7979 
+     .50     1.00     1.00     1.0000      .5000      .3989 
+     .50     1.00     2.00     1.0000      .5000      .1995 
+     .50     1.00     5.00     1.0000      .5000      .0798 
+     .50     2.00      .50     2.0000      .5000      .3989 
+     .50     2.00     1.00     2.0000      .5000      .1995 
+     .50     2.00     2.00     2.0000      .5000      .0997 
+     .50     2.00     5.00     2.0000      .5000      .0399 
+     .50     5.00      .50     5.0000      .5000      .1596 
+     .50     5.00     1.00     5.0000      .5000      .0798 
+     .50     5.00     2.00     5.0000      .5000      .0399 
+     .50     5.00     5.00     5.0000      .5000      .0160 
+     .60      .50      .50      .5675      .6000     1.3615 
+     .60      .50     1.00      .6442      .6000      .5998 
+     .60      .50     2.00      .8299      .6000      .2328 
+     .60      .50     5.00     1.7746      .6000      .0435 
+     .60     1.00      .50     1.1350      .6000      .6808 
+     .60     1.00     1.00     1.2883      .6000      .2999 
+     .60     1.00     2.00     1.6598      .6000      .1164 
+     .60     1.00     5.00     3.5492      .6000      .0218 
+     .60     2.00      .50     2.2701      .6000      .3404 
+     .60     2.00     1.00     2.5767      .6000      .1499 
+     .60     2.00     2.00     3.3196      .6000      .0582 
+     .60     2.00     5.00     7.0985      .6000      .0109 
+     .60     5.00      .50     5.6752      .6000      .1362 
+     .60     5.00     1.00     6.4417      .6000      .0600 
+     .60     5.00     2.00     8.2990      .6000      .0233 
+     .60     5.00     5.00    17.7462      .6000      .0044 
+     .70      .50      .50      .6499      .7000     1.0700 
+     .70      .50     1.00      .8447      .7000      .4116 
+     .70      .50     2.00     1.4271      .7000      .1218 
+     .70      .50     5.00     6.8816      .7000      .0101 
+     .70     1.00      .50     1.2998      .7000      .5350 
+     .70     1.00     1.00     1.6894      .7000      .2058 
+     .70     1.00     2.00     2.8542      .7000      .0609 
+     .70     1.00     5.00    13.7633      .7000      .0051 
+     .70     2.00      .50     2.5996      .7000      .2675 
+     .70     2.00     1.00     3.3789      .7000      .1029 
+     .70     2.00     2.00     5.7085      .7000      .0305 
+     .70     2.00     5.00    27.5265      .7000      .0025 
+     .70     5.00      .50     6.4989      .7000      .1070 
+     .70     5.00     1.00     8.4472      .7000      .0412 
+     .70     5.00     2.00    14.2711      .7000      .0122 
+     .70     5.00     5.00    68.8163      .7000      .0010 
+     .80      .50      .50      .7616      .8000      .7352 
+     .80      .50     1.00     1.1601      .8000      .2413 
+     .80      .50     2.00     2.6915      .8000      .0520 
+     .80      .50     5.00    33.6145      .8000      .0017 
+     .80     1.00      .50     1.5232      .8000      .3676 
+     .80     1.00     1.00     2.3201      .8000      .1207 
+     .80     1.00     2.00     5.3830      .8000      .0260 
+     .80     1.00     5.00    67.2291      .8000      .0008 
+     .80     2.00      .50     3.0464      .8000      .1838 
+     .80     2.00     1.00     4.6403      .8000      .0603 
+     .80     2.00     2.00    10.7660      .8000      .0130 
+     .80     2.00     5.00   134.4582      .8000      .0004 
+     .80     5.00      .50     7.6160      .8000      .0735 
+     .80     5.00     1.00    11.6006      .8000      .0241 
+     .80     5.00     2.00    26.9149      .8000      .0052 
+     .80     5.00     5.00   336.1455      .8000      .0002 
+     .90      .50      .50      .9490      .9000      .3699 
+     .90      .50     1.00     1.8011      .9000      .0974 
+     .90      .50     2.00     6.4880      .9000      .0135 
+     .90      .50     5.00   303.2661      .9000      .0001 
+     .90     1.00      .50     1.8980      .9000      .1849 
+     .90     1.00     1.00     3.6022      .9000      .0487 
+     .90     1.00     2.00    12.9760      .9000      .0068 
+     .90     1.00     5.00   606.5322      .9000      .0001 
+     .90     2.00      .50     3.7959      .9000      .0925 
+     .90     2.00     1.00     7.2044      .9000      .0244 
+     .90     2.00     2.00    25.9520      .9000      .0034 
+     .90     2.00     5.00  1213.0644      .9000      .0000 
+     .90     5.00      .50     9.4898      .9000      .0370 
+     .90     5.00     1.00    18.0111      .9000      .0097 
+     .90     5.00     2.00    64.8801      .9000      .0014 
+     .90     5.00     5.00  3032.6610      .9000      .0000 
+     .99      .50      .50     1.6000      .9900      .0333 
+     .99      .50     1.00     5.1202      .9900      .0052 
+     .99      .50     2.00    52.4337      .9900      .0003 
+     .99      .50     5.00 56308.0163      .9900      .0000 
+     .99     1.00      .50     3.2001      .9900      .0167 
+     .99     1.00     1.00    10.2405      .9900      .0026 
+     .99     1.00     2.00   104.8673      .9900      .0001 
+     .99     1.00     5.00 112616.033      .9900      .0000 
+     .99     2.00      .50     6.4001      .9900      .0083 
+     .99     2.00     1.00    20.4809      .9900      .0013 
+     .99     2.00     2.00   209.7346      .9900      .0001 
+     .99     2.00     5.00 225232.065      .9900      .0000 
+     .99     5.00      .50    16.0004      .9900      .0033 
+     .99     5.00     1.00    51.2024      .9900      .0005 
+     .99     5.00     2.00   524.3365      .9900      .0000 
+     .99     5.00     5.00 563080.163      .9900      .0000 
+])
+
+RANDIST_CHECK([normal], [u s], [cdf pdf], [dnl
+       P        u        s          x        cdf        pdf 
+     .01   -10.00      .50   -11.1632      .0100      .0533 
+     .01   -10.00     1.00   -12.3263      .0100      .0267 
+     .01   -10.00     2.00   -14.6527      .0100      .0133 
+     .01   -10.00     5.00   -21.6317      .0100      .0053 
+     .01    -5.00      .50    -6.1632      .0100      .0533 
+     .01    -5.00     1.00    -7.3263      .0100      .0267 
+     .01    -5.00     2.00    -9.6527      .0100      .0133 
+     .01    -5.00     5.00   -16.6317      .0100      .0053 
+     .01      .00      .50    -1.1632      .0100      .0533 
+     .01      .00     1.00    -2.3263      .0100      .0267 
+     .01      .00     2.00    -4.6527      .0100      .0133 
+     .01      .00     5.00   -11.6317      .0100      .0053 
+     .01     5.00      .50     3.8368      .0100      .0533 
+     .01     5.00     1.00     2.6737      .0100      .0267 
+     .01     5.00     2.00      .3473      .0100      .0133 
+     .01     5.00     5.00    -6.6317      .0100      .0053 
+     .01    10.00      .50     8.8368      .0100      .0533 
+     .01    10.00     1.00     7.6737      .0100      .0267 
+     .01    10.00     2.00     5.3473      .0100      .0133 
+     .01    10.00     5.00    -1.6317      .0100      .0053 
+     .10   -10.00      .50   -10.6408      .1000      .3510 
+     .10   -10.00     1.00   -11.2816      .1000      .1755 
+     .10   -10.00     2.00   -12.5631      .1000      .0877 
+     .10   -10.00     5.00   -16.4078      .1000      .0351 
+     .10    -5.00      .50    -5.6408      .1000      .3510 
+     .10    -5.00     1.00    -6.2816      .1000      .1755 
+     .10    -5.00     2.00    -7.5631      .1000      .0877 
+     .10    -5.00     5.00   -11.4078      .1000      .0351 
+     .10      .00      .50     -.6408      .1000      .3510 
+     .10      .00     1.00    -1.2816      .1000      .1755 
+     .10      .00     2.00    -2.5631      .1000      .0877 
+     .10      .00     5.00    -6.4078      .1000      .0351 
+     .10     5.00      .50     4.3592      .1000      .3510 
+     .10     5.00     1.00     3.7184      .1000      .1755 
+     .10     5.00     2.00     2.4369      .1000      .0877 
+     .10     5.00     5.00    -1.4078      .1000      .0351 
+     .10    10.00      .50     9.3592      .1000      .3510 
+     .10    10.00     1.00     8.7184      .1000      .1755 
+     .10    10.00     2.00     7.4369      .1000      .0877 
+     .10    10.00     5.00     3.5922      .1000      .0351 
+     .20   -10.00      .50   -10.4208      .2000      .5599 
+     .20   -10.00     1.00   -10.8416      .2000      .2800 
+     .20   -10.00     2.00   -11.6832      .2000      .1400 
+     .20   -10.00     5.00   -14.2081      .2000      .0560 
+     .20    -5.00      .50    -5.4208      .2000      .5599 
+     .20    -5.00     1.00    -5.8416      .2000      .2800 
+     .20    -5.00     2.00    -6.6832      .2000      .1400 
+     .20    -5.00     5.00    -9.2081      .2000      .0560 
+     .20      .00      .50     -.4208      .2000      .5599 
+     .20      .00     1.00     -.8416      .2000      .2800 
+     .20      .00     2.00    -1.6832      .2000      .1400 
+     .20      .00     5.00    -4.2081      .2000      .0560 
+     .20     5.00      .50     4.5792      .2000      .5599 
+     .20     5.00     1.00     4.1584      .2000      .2800 
+     .20     5.00     2.00     3.3168      .2000      .1400 
+     .20     5.00     5.00      .7919      .2000      .0560 
+     .20    10.00      .50     9.5792      .2000      .5599 
+     .20    10.00     1.00     9.1584      .2000      .2800 
+     .20    10.00     2.00     8.3168      .2000      .1400 
+     .20    10.00     5.00     5.7919      .2000      .0560 
+     .30   -10.00      .50   -10.2622      .3000      .6954 
+     .30   -10.00     1.00   -10.5244      .3000      .3477 
+     .30   -10.00     2.00   -11.0488      .3000      .1738 
+     .30   -10.00     5.00   -12.6220      .3000      .0695 
+     .30    -5.00      .50    -5.2622      .3000      .6954 
+     .30    -5.00     1.00    -5.5244      .3000      .3477 
+     .30    -5.00     2.00    -6.0488      .3000      .1738 
+     .30    -5.00     5.00    -7.6220      .3000      .0695 
+     .30      .00      .50     -.2622      .3000      .6954 
+     .30      .00     1.00     -.5244      .3000      .3477 
+     .30      .00     2.00    -1.0488      .3000      .1738 
+     .30      .00     5.00    -2.6220      .3000      .0695 
+     .30     5.00      .50     4.7378      .3000      .6954 
+     .30     5.00     1.00     4.4756      .3000      .3477 
+     .30     5.00     2.00     3.9512      .3000      .1738 
+     .30     5.00     5.00     2.3780      .3000      .0695 
+     .30    10.00      .50     9.7378      .3000      .6954 
+     .30    10.00     1.00     9.4756      .3000      .3477 
+     .30    10.00     2.00     8.9512      .3000      .1738 
+     .30    10.00     5.00     7.3780      .3000      .0695 
+     .40   -10.00      .50   -10.1267      .4000      .7727 
+     .40   -10.00     1.00   -10.2533      .4000      .3863 
+     .40   -10.00     2.00   -10.5067      .4000      .1932 
+     .40   -10.00     5.00   -11.2667      .4000      .0773 
+     .40    -5.00      .50    -5.1267      .4000      .7727 
+     .40    -5.00     1.00    -5.2533      .4000      .3863 
+     .40    -5.00     2.00    -5.5067      .4000      .1932 
+     .40    -5.00     5.00    -6.2667      .4000      .0773 
+     .40      .00      .50     -.1267      .4000      .7727 
+     .40      .00     1.00     -.2533      .4000      .3863 
+     .40      .00     2.00     -.5067      .4000      .1932 
+     .40      .00     5.00    -1.2667      .4000      .0773 
+     .40     5.00      .50     4.8733      .4000      .7727 
+     .40     5.00     1.00     4.7467      .4000      .3863 
+     .40     5.00     2.00     4.4933      .4000      .1932 
+     .40     5.00     5.00     3.7333      .4000      .0773 
+     .40    10.00      .50     9.8733      .4000      .7727 
+     .40    10.00     1.00     9.7467      .4000      .3863 
+     .40    10.00     2.00     9.4933      .4000      .1932 
+     .40    10.00     5.00     8.7333      .4000      .0773 
+     .50   -10.00      .50   -10.0000      .5000      .7979 
+     .50   -10.00     1.00   -10.0000      .5000      .3989 
+     .50   -10.00     2.00   -10.0000      .5000      .1995 
+     .50   -10.00     5.00   -10.0000      .5000      .0798 
+     .50    -5.00      .50    -5.0000      .5000      .7979 
+     .50    -5.00     1.00    -5.0000      .5000      .3989 
+     .50    -5.00     2.00    -5.0000      .5000      .1995 
+     .50    -5.00     5.00    -5.0000      .5000      .0798 
+     .50      .00      .50      .0000      .5000      .7979 
+     .50      .00     1.00      .0000      .5000      .3989 
+     .50      .00     2.00      .0000      .5000      .1995 
+     .50      .00     5.00      .0000      .5000      .0798 
+     .50     5.00      .50     5.0000      .5000      .7979 
+     .50     5.00     1.00     5.0000      .5000      .3989 
+     .50     5.00     2.00     5.0000      .5000      .1995 
+     .50     5.00     5.00     5.0000      .5000      .0798 
+     .50    10.00      .50    10.0000      .5000      .7979 
+     .50    10.00     1.00    10.0000      .5000      .3989 
+     .50    10.00     2.00    10.0000      .5000      .1995 
+     .50    10.00     5.00    10.0000      .5000      .0798 
+     .60   -10.00      .50    -9.8733      .6000      .7727 
+     .60   -10.00     1.00    -9.7467      .6000      .3863 
+     .60   -10.00     2.00    -9.4933      .6000      .1932 
+     .60   -10.00     5.00    -8.7333      .6000      .0773 
+     .60    -5.00      .50    -4.8733      .6000      .7727 
+     .60    -5.00     1.00    -4.7467      .6000      .3863 
+     .60    -5.00     2.00    -4.4933      .6000      .1932 
+     .60    -5.00     5.00    -3.7333      .6000      .0773 
+     .60      .00      .50      .1267      .6000      .7727 
+     .60      .00     1.00      .2533      .6000      .3863 
+     .60      .00     2.00      .5067      .6000      .1932 
+     .60      .00     5.00     1.2667      .6000      .0773 
+     .60     5.00      .50     5.1267      .6000      .7727 
+     .60     5.00     1.00     5.2533      .6000      .3863 
+     .60     5.00     2.00     5.5067      .6000      .1932 
+     .60     5.00     5.00     6.2667      .6000      .0773 
+     .60    10.00      .50    10.1267      .6000      .7727 
+     .60    10.00     1.00    10.2533      .6000      .3863 
+     .60    10.00     2.00    10.5067      .6000      .1932 
+     .60    10.00     5.00    11.2667      .6000      .0773 
+     .70   -10.00      .50    -9.7378      .7000      .6954 
+     .70   -10.00     1.00    -9.4756      .7000      .3477 
+     .70   -10.00     2.00    -8.9512      .7000      .1738 
+     .70   -10.00     5.00    -7.3780      .7000      .0695 
+     .70    -5.00      .50    -4.7378      .7000      .6954 
+     .70    -5.00     1.00    -4.4756      .7000      .3477 
+     .70    -5.00     2.00    -3.9512      .7000      .1738 
+     .70    -5.00     5.00    -2.3780      .7000      .0695 
+     .70      .00      .50      .2622      .7000      .6954 
+     .70      .00     1.00      .5244      .7000      .3477 
+     .70      .00     2.00     1.0488      .7000      .1738 
+     .70      .00     5.00     2.6220      .7000      .0695 
+     .70     5.00      .50     5.2622      .7000      .6954 
+     .70     5.00     1.00     5.5244      .7000      .3477 
+     .70     5.00     2.00     6.0488      .7000      .1738 
+     .70     5.00     5.00     7.6220      .7000      .0695 
+     .70    10.00      .50    10.2622      .7000      .6954 
+     .70    10.00     1.00    10.5244      .7000      .3477 
+     .70    10.00     2.00    11.0488      .7000      .1738 
+     .70    10.00     5.00    12.6220      .7000      .0695 
+     .80   -10.00      .50    -9.5792      .8000      .5599 
+     .80   -10.00     1.00    -9.1584      .8000      .2800 
+     .80   -10.00     2.00    -8.3168      .8000      .1400 
+     .80   -10.00     5.00    -5.7919      .8000      .0560 
+     .80    -5.00      .50    -4.5792      .8000      .5599 
+     .80    -5.00     1.00    -4.1584      .8000      .2800 
+     .80    -5.00     2.00    -3.3168      .8000      .1400 
+     .80    -5.00     5.00     -.7919      .8000      .0560 
+     .80      .00      .50      .4208      .8000      .5599 
+     .80      .00     1.00      .8416      .8000      .2800 
+     .80      .00     2.00     1.6832      .8000      .1400 
+     .80      .00     5.00     4.2081      .8000      .0560 
+     .80     5.00      .50     5.4208      .8000      .5599 
+     .80     5.00     1.00     5.8416      .8000      .2800 
+     .80     5.00     2.00     6.6832      .8000      .1400 
+     .80     5.00     5.00     9.2081      .8000      .0560 
+     .80    10.00      .50    10.4208      .8000      .5599 
+     .80    10.00     1.00    10.8416      .8000      .2800 
+     .80    10.00     2.00    11.6832      .8000      .1400 
+     .80    10.00     5.00    14.2081      .8000      .0560 
+     .90   -10.00      .50    -9.3592      .9000      .3510 
+     .90   -10.00     1.00    -8.7184      .9000      .1755 
+     .90   -10.00     2.00    -7.4369      .9000      .0877 
+     .90   -10.00     5.00    -3.5922      .9000      .0351 
+     .90    -5.00      .50    -4.3592      .9000      .3510 
+     .90    -5.00     1.00    -3.7184      .9000      .1755 
+     .90    -5.00     2.00    -2.4369      .9000      .0877 
+     .90    -5.00     5.00     1.4078      .9000      .0351 
+     .90      .00      .50      .6408      .9000      .3510 
+     .90      .00     1.00     1.2816      .9000      .1755 
+     .90      .00     2.00     2.5631      .9000      .0877 
+     .90      .00     5.00     6.4078      .9000      .0351 
+     .90     5.00      .50     5.6408      .9000      .3510 
+     .90     5.00     1.00     6.2816      .9000      .1755 
+     .90     5.00     2.00     7.5631      .9000      .0877 
+     .90     5.00     5.00    11.4078      .9000      .0351 
+     .90    10.00      .50    10.6408      .9000      .3510 
+     .90    10.00     1.00    11.2816      .9000      .1755 
+     .90    10.00     2.00    12.5631      .9000      .0877 
+     .90    10.00     5.00    16.4078      .9000      .0351 
+     .99   -10.00      .50    -8.8368      .9900      .0533 
+     .99   -10.00     1.00    -7.6737      .9900      .0267 
+     .99   -10.00     2.00    -5.3473      .9900      .0133 
+     .99   -10.00     5.00     1.6317      .9900      .0053 
+     .99    -5.00      .50    -3.8368      .9900      .0533 
+     .99    -5.00     1.00    -2.6737      .9900      .0267 
+     .99    -5.00     2.00     -.3473      .9900      .0133 
+     .99    -5.00     5.00     6.6317      .9900      .0053 
+     .99      .00      .50     1.1632      .9900      .0533 
+     .99      .00     1.00     2.3263      .9900      .0267 
+     .99      .00     2.00     4.6527      .9900      .0133 
+     .99      .00     5.00    11.6317      .9900      .0053 
+     .99     5.00      .50     6.1632      .9900      .0533 
+     .99     5.00     1.00     7.3263      .9900      .0267 
+     .99     5.00     2.00     9.6527      .9900      .0133 
+     .99     5.00     5.00    16.6317      .9900      .0053 
+     .99    10.00      .50    11.1632      .9900      .0533 
+     .99    10.00     1.00    12.3263      .9900      .0267 
+     .99    10.00     2.00    14.6527      .9900      .0133 
+     .99    10.00     5.00    21.6317      .9900      .0053 
+])
+
+RANDIST_CHECK([pareto], [a b], [cdf pdf], [dnl
+       P        a        b          x        cdf        pdf 
+     .01     1.00     1.00     1.0101      .0100      .9801 
+     .01     1.00     2.00     1.0050      .0100     1.9701 
+     .01     1.00     5.00     1.0020      .0100     4.9401 
+     .01     1.00    10.00     1.0010      .0100     9.8901 
+     .01     5.00     1.00     5.0505      .0100      .1960 
+     .01     5.00     2.00     5.0252      .0100      .3940 
+     .01     5.00     5.00     5.0101      .0100      .9880 
+     .01     5.00    10.00     5.0050      .0100     1.9780 
+     .01    10.00     1.00    10.1010      .0100      .0980 
+     .01    10.00     2.00    10.0504      .0100      .1970 
+     .01    10.00     5.00    10.0201      .0100      .4940 
+     .01    10.00    10.00    10.0101      .0100      .9890 
+     .10     1.00     1.00     1.1111      .1000      .8100 
+     .10     1.00     2.00     1.0541      .1000     1.7076 
+     .10     1.00     5.00     1.0213      .1000     4.4062 
+     .10     1.00    10.00     1.0106      .1000     8.9057 
+     .10     5.00     1.00     5.5556      .1000      .1620 
+     .10     5.00     2.00     5.2705      .1000      .3415 
+     .10     5.00     5.00     5.1065      .1000      .8812 
+     .10     5.00    10.00     5.0530      .1000     1.7811 
+     .10    10.00     1.00    11.1111      .1000      .0810 
+     .10    10.00     2.00    10.5409      .1000      .1708 
+     .10    10.00     5.00    10.2130      .1000      .4406 
+     .10    10.00    10.00    10.1059      .1000      .8906 
+     .20     1.00     1.00     1.2500      .2000      .6400 
+     .20     1.00     2.00     1.1180      .2000     1.4311 
+     .20     1.00     5.00     1.0456      .2000     3.8254 
+     .20     1.00    10.00     1.0226      .2000     7.8235 
+     .20     5.00     1.00     6.2500      .2000      .1280 
+     .20     5.00     2.00     5.5902      .2000      .2862 
+     .20     5.00     5.00     5.2282      .2000      .7651 
+     .20     5.00    10.00     5.1128      .2000     1.5647 
+     .20    10.00     1.00    12.5000      .2000      .0640 
+     .20    10.00     2.00    11.1803      .2000      .1431 
+     .20    10.00     5.00    10.4564      .2000      .3825 
+     .20    10.00    10.00    10.2257      .2000      .7823 
+     .30     1.00     1.00     1.4286      .3000      .4900 
+     .30     1.00     2.00     1.1952      .3000     1.1713 
+     .30     1.00     5.00     1.0739      .3000     3.2590 
+     .30     1.00    10.00     1.0363      .3000     6.7547 
+     .30     5.00     1.00     7.1429      .3000      .0980 
+     .30     5.00     2.00     5.9761      .3000      .2343 
+     .30     5.00     5.00     5.3697      .3000      .6518 
+     .30     5.00    10.00     5.1816      .3000     1.3509 
+     .30    10.00     1.00    14.2857      .3000      .0490 
+     .30    10.00     2.00    11.9523      .3000      .1171 
+     .30    10.00     5.00    10.7394      .3000      .3259 
+     .30    10.00    10.00    10.3631      .3000      .6755 
+     .40     1.00     1.00     1.6667      .4000      .3600 
+     .40     1.00     2.00     1.2910      .4000      .9295 
+     .40     1.00     5.00     1.1076      .4000     2.7086 
+     .40     1.00    10.00     1.0524      .4000     5.7012 
+     .40     5.00     1.00     8.3333      .4000      .0720 
+     .40     5.00     2.00     6.4550      .4000      .1859 
+     .40     5.00     5.00     5.5378      .4000      .5417 
+     .40     5.00    10.00     5.2620      .4000     1.1402 
+     .40    10.00     1.00    16.6667      .4000      .0360 
+     .40    10.00     2.00    12.9099      .4000      .0930 
+     .40    10.00     5.00    11.0757      .4000      .2709 
+     .40    10.00    10.00    10.5241      .4000      .5701 
+     .50     1.00     1.00     2.0000      .5000      .2500 
+     .50     1.00     2.00     1.4142      .5000      .7071 
+     .50     1.00     5.00     1.1487      .5000     2.1764 
+     .50     1.00    10.00     1.0718      .5000     4.6652 
+     .50     5.00     1.00    10.0000      .5000      .0500 
+     .50     5.00     2.00     7.0711      .5000      .1414 
+     .50     5.00     5.00     5.7435      .5000      .4353 
+     .50     5.00    10.00     5.3589      .5000      .9330 
+     .50    10.00     1.00    20.0000      .5000      .0250 
+     .50    10.00     2.00    14.1421      .5000      .0707 
+     .50    10.00     5.00    11.4870      .5000      .2176 
+     .50    10.00    10.00    10.7177      .5000      .4665 
+     .60     1.00     1.00     2.5000      .6000      .1600 
+     .60     1.00     2.00     1.5811      .6000      .5060 
+     .60     1.00     5.00     1.2011      .6000     1.6651 
+     .60     1.00    10.00     1.0960      .6000     3.6498 
+     .60     5.00     1.00    12.5000      .6000      .0320 
+     .60     5.00     2.00     7.9057      .6000      .1012 
+     .60     5.00     5.00     6.0056      .6000      .3330 
+     .60     5.00    10.00     5.4798      .6000      .7300 
+     .60    10.00     1.00    25.0000      .6000      .0160 
+     .60    10.00     2.00    15.8114      .6000      .0506 
+     .60    10.00     5.00    12.0112      .6000      .1665 
+     .60    10.00    10.00    10.9596      .6000      .3650 
+     .70     1.00     1.00     3.3333      .7000      .0900 
+     .70     1.00     2.00     1.8257      .7000      .3286 
+     .70     1.00     5.00     1.2723      .7000     1.1790 
+     .70     1.00    10.00     1.1279      .7000     2.6597 
+     .70     5.00     1.00    16.6667      .7000      .0180 
+     .70     5.00     2.00     9.1287      .7000      .0657 
+     .70     5.00     5.00     6.3613      .7000      .2358 
+     .70     5.00    10.00     5.6397      .7000      .5319 
+     .70    10.00     1.00    33.3333      .7000      .0090 
+     .70    10.00     2.00    18.2574      .7000      .0329 
+     .70    10.00     5.00    12.7226      .7000      .1179 
+     .70    10.00    10.00    11.2794      .7000      .2660 
+     .80     1.00     1.00     5.0000      .8000      .0400 
+     .80     1.00     2.00     2.2361      .8000      .1789 
+     .80     1.00     5.00     1.3797      .8000      .7248 
+     .80     1.00    10.00     1.1746      .8000     1.7027 
+     .80     5.00     1.00    25.0000      .8000      .0080 
+     .80     5.00     2.00    11.1803      .8000      .0358 
+     .80     5.00     5.00     6.8986      .8000      .1450 
+     .80     5.00    10.00     5.8731      .8000      .3405 
+     .80    10.00     1.00    50.0000      .8000      .0040 
+     .80    10.00     2.00    22.3607      .8000      .0179 
+     .80    10.00     5.00    13.7973      .8000      .0725 
+     .80    10.00    10.00    11.7462      .8000      .1703 
+     .90     1.00     1.00    10.0000      .9000      .0100 
+     .90     1.00     2.00     3.1623      .9000      .0632 
+     .90     1.00     5.00     1.5849      .9000      .3155 
+     .90     1.00    10.00     1.2589      .9000      .7943 
+     .90     5.00     1.00    50.0000      .9000      .0020 
+     .90     5.00     2.00    15.8114      .9000      .0126 
+     .90     5.00     5.00     7.9245      .9000      .0631 
+     .90     5.00    10.00     6.2946      .9000      .1589 
+     .90    10.00     1.00   100.0000      .9000      .0010 
+     .90    10.00     2.00    31.6228      .9000      .0063 
+     .90    10.00     5.00    15.8489      .9000      .0315 
+     .90    10.00    10.00    12.5893      .9000      .0794 
+     .99     1.00     1.00   100.0000      .9900      .0001 
+     .99     1.00     2.00    10.0000      .9900      .0020 
+     .99     1.00     5.00     2.5119      .9900      .0199 
+     .99     1.00    10.00     1.5849      .9900      .0631 
+     .99     5.00     1.00   500.0000      .9900      .0000 
+     .99     5.00     2.00    50.0000      .9900      .0004 
+     .99     5.00     5.00    12.5594      .9900      .0040 
+     .99     5.00    10.00     7.9245      .9900      .0126 
+     .99    10.00     1.00  1000.0000      .9900      .0000 
+     .99    10.00     2.00   100.0000      .9900      .0002 
+     .99    10.00     5.00    25.1189      .9900      .0020 
+     .99    10.00    10.00    15.8489      .9900      .0063 
+])
+
+RANDIST_CHECK([t], [df], [cdf pdf], [dnl
+       P       df          x        cdf        pdf 
+     .01     1.00   -31.8205      .0100      .0003 
+     .01     2.00    -6.9646      .0100      .0028 
+     .01     3.00    -4.5407      .0100      .0059 
+     .01     4.00    -3.7469      .0100      .0087 
+     .01     5.00    -3.3649      .0100      .0109 
+     .01    10.00    -2.7638      .0100      .0172 
+     .01    30.00    -2.4573      .0100      .0231 
+     .01   100.00    -2.3642      .0100      .0255 
+     .10     1.00    -3.0777      .1000      .0304 
+     .10     2.00    -1.8856      .1000      .0764 
+     .10     3.00    -1.6377      .1000      .1025 
+     .10     4.00    -1.5332      .1000      .1181 
+     .10     5.00    -1.4759      .1000      .1283 
+     .10    10.00    -1.3722      .1000      .1507 
+     .10    30.00    -1.3104      .1000      .1670 
+     .10   100.00    -1.2901      .1000      .1729 
+     .20     1.00    -1.3764      .2000      .1100 
+     .20     2.00    -1.0607      .2000      .1810 
+     .20     3.00     -.9785      .2000      .2112 
+     .20     4.00     -.9410      .2000      .2275 
+     .20     5.00     -.9195      .2000      .2376 
+     .20    10.00     -.8791      .2000      .2584 
+     .20    30.00     -.8538      .2000      .2727 
+     .20   100.00     -.8452      .2000      .2778 
+     .30     1.00     -.7265      .3000      .2083 
+     .30     2.00     -.6172      .3000      .2722 
+     .30     3.00     -.5844      .3000      .2963 
+     .30     4.00     -.5686      .3000      .3088 
+     .30     5.00     -.5594      .3000      .3164 
+     .30    10.00     -.5415      .3000      .3319 
+     .30    30.00     -.5300      .3000      .3424 
+     .30   100.00     -.5261      .3000      .3461 
+     .40     1.00     -.3249      .4000      .2879 
+     .40     2.00     -.2887      .4000      .3326 
+     .40     3.00     -.2767      .4000      .3495 
+     .40     4.00     -.2707      .4000      .3584 
+     .40     5.00     -.2672      .4000      .3638 
+     .40    10.00     -.2602      .4000      .3749 
+     .40    30.00     -.2556      .4000      .3825 
+     .40   100.00     -.2540      .4000      .3852 
+     .50     1.00      .0000      .5000      .3183 
+     .50     2.00      .0000      .5000      .3536 
+     .50     3.00      .0000      .5000      .3676 
+     .50     4.00      .0000      .5000      .3750 
+     .50     5.00      .0000      .5000      .3796 
+     .50    10.00      .0000      .5000      .3891 
+     .50    30.00      .0000      .5000      .3956 
+     .50   100.00      .0000      .5000      .3979 
+     .60     1.00      .3249      .6000      .2879 
+     .60     2.00      .2887      .6000      .3326 
+     .60     3.00      .2767      .6000      .3495 
+     .60     4.00      .2707      .6000      .3584 
+     .60     5.00      .2672      .6000      .3638 
+     .60    10.00      .2602      .6000      .3749 
+     .60    30.00      .2556      .6000      .3825 
+     .60   100.00      .2540      .6000      .3852 
+     .70     1.00      .7265      .7000      .2083 
+     .70     2.00      .6172      .7000      .2722 
+     .70     3.00      .5844      .7000      .2963 
+     .70     4.00      .5686      .7000      .3088 
+     .70     5.00      .5594      .7000      .3164 
+     .70    10.00      .5415      .7000      .3319 
+     .70    30.00      .5300      .7000      .3424 
+     .70   100.00      .5261      .7000      .3461 
+     .80     1.00     1.3764      .8000      .1100 
+     .80     2.00     1.0607      .8000      .1810 
+     .80     3.00      .9785      .8000      .2112 
+     .80     4.00      .9410      .8000      .2275 
+     .80     5.00      .9195      .8000      .2376 
+     .80    10.00      .8791      .8000      .2584 
+     .80    30.00      .8538      .8000      .2727 
+     .80   100.00      .8452      .8000      .2778 
+     .90     1.00     3.0777      .9000      .0304 
+     .90     2.00     1.8856      .9000      .0764 
+     .90     3.00     1.6377      .9000      .1025 
+     .90     4.00     1.5332      .9000      .1181 
+     .90     5.00     1.4759      .9000      .1283 
+     .90    10.00     1.3722      .9000      .1507 
+     .90    30.00     1.3104      .9000      .1670 
+     .90   100.00     1.2901      .9000      .1729 
+     .99     1.00    31.8205      .9900      .0003 
+     .99     2.00     6.9646      .9900      .0028 
+     .99     3.00     4.5407      .9900      .0059 
+     .99     4.00     3.7469      .9900      .0087 
+     .99     5.00     3.3649      .9900      .0109 
+     .99    10.00     2.7638      .9900      .0172 
+     .99    30.00     2.4573      .9900      .0231 
+     .99   100.00     2.3642      .9900      .0255 
+])
+
+RANDIST_CHECK([uniform], [a b], [cdf pdf], [dnl
+       P        a        b          x        cdf        pdf 
+     .01   -10.00    40.00    -9.5000      .0100      .0200 
+     .01   -10.00    41.00    -9.4900      .0100      .0196 
+     .01   -10.00    45.00    -9.4500      .0100      .0182 
+     .01   -10.00    50.00    -9.4000      .0100      .0167 
+     .01      .00    40.00      .4000      .0100      .0250 
+     .01      .00    41.00      .4100      .0100      .0244 
+     .01      .00    45.00      .4500      .0100      .0222 
+     .01      .00    50.00      .5000      .0100      .0200 
+     .01    20.00    40.00    20.2000      .0100      .0500 
+     .01    20.00    41.00    20.2100      .0100      .0476 
+     .01    20.00    45.00    20.2500      .0100      .0400 
+     .01    20.00    50.00    20.3000      .0100      .0333 
+     .01    30.00    40.00    30.1000      .0100      .1000 
+     .01    30.00    41.00    30.1100      .0100      .0909 
+     .01    30.00    45.00    30.1500      .0100      .0667 
+     .01    30.00    50.00    30.2000      .0100      .0500 
+     .10   -10.00    40.00    -5.0000      .1000      .0200 
+     .10   -10.00    41.00    -4.9000      .1000      .0196 
+     .10   -10.00    45.00    -4.5000      .1000      .0182 
+     .10   -10.00    50.00    -4.0000      .1000      .0167 
+     .10      .00    40.00     4.0000      .1000      .0250 
+     .10      .00    41.00     4.1000      .1000      .0244 
+     .10      .00    45.00     4.5000      .1000      .0222 
+     .10      .00    50.00     5.0000      .1000      .0200 
+     .10    20.00    40.00    22.0000      .1000      .0500 
+     .10    20.00    41.00    22.1000      .1000      .0476 
+     .10    20.00    45.00    22.5000      .1000      .0400 
+     .10    20.00    50.00    23.0000      .1000      .0333 
+     .10    30.00    40.00    31.0000      .1000      .1000 
+     .10    30.00    41.00    31.1000      .1000      .0909 
+     .10    30.00    45.00    31.5000      .1000      .0667 
+     .10    30.00    50.00    32.0000      .1000      .0500 
+     .20   -10.00    40.00      .0000      .2000      .0200 
+     .20   -10.00    41.00      .2000      .2000      .0196 
+     .20   -10.00    45.00     1.0000      .2000      .0182 
+     .20   -10.00    50.00     2.0000      .2000      .0167 
+     .20      .00    40.00     8.0000      .2000      .0250 
+     .20      .00    41.00     8.2000      .2000      .0244 
+     .20      .00    45.00     9.0000      .2000      .0222 
+     .20      .00    50.00    10.0000      .2000      .0200 
+     .20    20.00    40.00    24.0000      .2000      .0500 
+     .20    20.00    41.00    24.2000      .2000      .0476 
+     .20    20.00    45.00    25.0000      .2000      .0400 
+     .20    20.00    50.00    26.0000      .2000      .0333 
+     .20    30.00    40.00    32.0000      .2000      .1000 
+     .20    30.00    41.00    32.2000      .2000      .0909 
+     .20    30.00    45.00    33.0000      .2000      .0667 
+     .20    30.00    50.00    34.0000      .2000      .0500 
+     .30   -10.00    40.00     5.0000      .3000      .0200 
+     .30   -10.00    41.00     5.3000      .3000      .0196 
+     .30   -10.00    45.00     6.5000      .3000      .0182 
+     .30   -10.00    50.00     8.0000      .3000      .0167 
+     .30      .00    40.00    12.0000      .3000      .0250 
+     .30      .00    41.00    12.3000      .3000      .0244 
+     .30      .00    45.00    13.5000      .3000      .0222 
+     .30      .00    50.00    15.0000      .3000      .0200 
+     .30    20.00    40.00    26.0000      .3000      .0500 
+     .30    20.00    41.00    26.3000      .3000      .0476 
+     .30    20.00    45.00    27.5000      .3000      .0400 
+     .30    20.00    50.00    29.0000      .3000      .0333 
+     .30    30.00    40.00    33.0000      .3000      .1000 
+     .30    30.00    41.00    33.3000      .3000      .0909 
+     .30    30.00    45.00    34.5000      .3000      .0667 
+     .30    30.00    50.00    36.0000      .3000      .0500 
+     .40   -10.00    40.00    10.0000      .4000      .0200 
+     .40   -10.00    41.00    10.4000      .4000      .0196 
+     .40   -10.00    45.00    12.0000      .4000      .0182 
+     .40   -10.00    50.00    14.0000      .4000      .0167 
+     .40      .00    40.00    16.0000      .4000      .0250 
+     .40      .00    41.00    16.4000      .4000      .0244 
+     .40      .00    45.00    18.0000      .4000      .0222 
+     .40      .00    50.00    20.0000      .4000      .0200 
+     .40    20.00    40.00    28.0000      .4000      .0500 
+     .40    20.00    41.00    28.4000      .4000      .0476 
+     .40    20.00    45.00    30.0000      .4000      .0400 
+     .40    20.00    50.00    32.0000      .4000      .0333 
+     .40    30.00    40.00    34.0000      .4000      .1000 
+     .40    30.00    41.00    34.4000      .4000      .0909 
+     .40    30.00    45.00    36.0000      .4000      .0667 
+     .40    30.00    50.00    38.0000      .4000      .0500 
+     .50   -10.00    40.00    15.0000      .5000      .0200 
+     .50   -10.00    41.00    15.5000      .5000      .0196 
+     .50   -10.00    45.00    17.5000      .5000      .0182 
+     .50   -10.00    50.00    20.0000      .5000      .0167 
+     .50      .00    40.00    20.0000      .5000      .0250 
+     .50      .00    41.00    20.5000      .5000      .0244 
+     .50      .00    45.00    22.5000      .5000      .0222 
+     .50      .00    50.00    25.0000      .5000      .0200 
+     .50    20.00    40.00    30.0000      .5000      .0500 
+     .50    20.00    41.00    30.5000      .5000      .0476 
+     .50    20.00    45.00    32.5000      .5000      .0400 
+     .50    20.00    50.00    35.0000      .5000      .0333 
+     .50    30.00    40.00    35.0000      .5000      .1000 
+     .50    30.00    41.00    35.5000      .5000      .0909 
+     .50    30.00    45.00    37.5000      .5000      .0667 
+     .50    30.00    50.00    40.0000      .5000      .0500 
+     .60   -10.00    40.00    20.0000      .6000      .0200 
+     .60   -10.00    41.00    20.6000      .6000      .0196 
+     .60   -10.00    45.00    23.0000      .6000      .0182 
+     .60   -10.00    50.00    26.0000      .6000      .0167 
+     .60      .00    40.00    24.0000      .6000      .0250 
+     .60      .00    41.00    24.6000      .6000      .0244 
+     .60      .00    45.00    27.0000      .6000      .0222 
+     .60      .00    50.00    30.0000      .6000      .0200 
+     .60    20.00    40.00    32.0000      .6000      .0500 
+     .60    20.00    41.00    32.6000      .6000      .0476 
+     .60    20.00    45.00    35.0000      .6000      .0400 
+     .60    20.00    50.00    38.0000      .6000      .0333 
+     .60    30.00    40.00    36.0000      .6000      .1000 
+     .60    30.00    41.00    36.6000      .6000      .0909 
+     .60    30.00    45.00    39.0000      .6000      .0667 
+     .60    30.00    50.00    42.0000      .6000      .0500 
+     .70   -10.00    40.00    25.0000      .7000      .0200 
+     .70   -10.00    41.00    25.7000      .7000      .0196 
+     .70   -10.00    45.00    28.5000      .7000      .0182 
+     .70   -10.00    50.00    32.0000      .7000      .0167 
+     .70      .00    40.00    28.0000      .7000      .0250 
+     .70      .00    41.00    28.7000      .7000      .0244 
+     .70      .00    45.00    31.5000      .7000      .0222 
+     .70      .00    50.00    35.0000      .7000      .0200 
+     .70    20.00    40.00    34.0000      .7000      .0500 
+     .70    20.00    41.00    34.7000      .7000      .0476 
+     .70    20.00    45.00    37.5000      .7000      .0400 
+     .70    20.00    50.00    41.0000      .7000      .0333 
+     .70    30.00    40.00    37.0000      .7000      .1000 
+     .70    30.00    41.00    37.7000      .7000      .0909 
+     .70    30.00    45.00    40.5000      .7000      .0667 
+     .70    30.00    50.00    44.0000      .7000      .0500 
+     .80   -10.00    40.00    30.0000      .8000      .0200 
+     .80   -10.00    41.00    30.8000      .8000      .0196 
+     .80   -10.00    45.00    34.0000      .8000      .0182 
+     .80   -10.00    50.00    38.0000      .8000      .0167 
+     .80      .00    40.00    32.0000      .8000      .0250 
+     .80      .00    41.00    32.8000      .8000      .0244 
+     .80      .00    45.00    36.0000      .8000      .0222 
+     .80      .00    50.00    40.0000      .8000      .0200 
+     .80    20.00    40.00    36.0000      .8000      .0500 
+     .80    20.00    41.00    36.8000      .8000      .0476 
+     .80    20.00    45.00    40.0000      .8000      .0400 
+     .80    20.00    50.00    44.0000      .8000      .0333 
+     .80    30.00    40.00    38.0000      .8000      .1000 
+     .80    30.00    41.00    38.8000      .8000      .0909 
+     .80    30.00    45.00    42.0000      .8000      .0667 
+     .80    30.00    50.00    46.0000      .8000      .0500 
+     .90   -10.00    40.00    35.0000      .9000      .0200 
+     .90   -10.00    41.00    35.9000      .9000      .0196 
+     .90   -10.00    45.00    39.5000      .9000      .0182 
+     .90   -10.00    50.00    44.0000      .9000      .0167 
+     .90      .00    40.00    36.0000      .9000      .0250 
+     .90      .00    41.00    36.9000      .9000      .0244 
+     .90      .00    45.00    40.5000      .9000      .0222 
+     .90      .00    50.00    45.0000      .9000      .0200 
+     .90    20.00    40.00    38.0000      .9000      .0500 
+     .90    20.00    41.00    38.9000      .9000      .0476 
+     .90    20.00    45.00    42.5000      .9000      .0400 
+     .90    20.00    50.00    47.0000      .9000      .0333 
+     .90    30.00    40.00    39.0000      .9000      .1000 
+     .90    30.00    41.00    39.9000      .9000      .0909 
+     .90    30.00    45.00    43.5000      .9000      .0667 
+     .90    30.00    50.00    48.0000      .9000      .0500 
+     .99   -10.00    40.00    39.5000      .9900      .0200 
+     .99   -10.00    41.00    40.4900      .9900      .0196 
+     .99   -10.00    45.00    44.4500      .9900      .0182 
+     .99   -10.00    50.00    49.4000      .9900      .0167 
+     .99      .00    40.00    39.6000      .9900      .0250 
+     .99      .00    41.00    40.5900      .9900      .0244 
+     .99      .00    45.00    44.5500      .9900      .0222 
+     .99      .00    50.00    49.5000      .9900      .0200 
+     .99    20.00    40.00    39.8000      .9900      .0500 
+     .99    20.00    41.00    40.7900      .9900      .0476 
+     .99    20.00    45.00    44.7500      .9900      .0400 
+     .99    20.00    50.00    49.7000      .9900      .0333 
+     .99    30.00    40.00    39.9000      .9900      .1000 
+     .99    30.00    41.00    40.8900      .9900      .0909 
+     .99    30.00    45.00    44.8500      .9900      .0667 
+     .99    30.00    50.00    49.8000      .9900      .0500 
+])
+
+RANDIST_CHECK([weibull], [a b], [cdf pdf], [dnl
+       P        a        b          x        cdf        pdf 
+     .01      .50     1.00      .0050      .0100     1.9800 
+     .01      .50     2.00      .0501      .0100      .3970 
+     .01      .50     4.00      .1583      .0100      .2514 
+     .01      .50     8.00      .2813      .0100      .2829 
+     .01     1.00     1.00      .0101      .0100      .9900 
+     .01     1.00     2.00      .1003      .0100      .1985 
+     .01     1.00     4.00      .3166      .0100      .1257 
+     .01     1.00     8.00      .5627      .0100      .1415 
+     .01     2.00     1.00      .0201      .0100      .4950 
+     .01     2.00     2.00      .2005      .0100      .0992 
+     .01     2.00     4.00      .6332      .0100      .0628 
+     .01     2.00     8.00     1.1254      .0100      .0707 
+     .01     5.00     1.00      .0503      .0100      .1980 
+     .01     5.00     2.00      .5013      .0100      .0397 
+     .01     5.00     4.00     1.5831      .0100      .0251 
+     .01     5.00     8.00     2.8135      .0100      .0283 
+     .10      .50     1.00      .0527      .1000     1.8000 
+     .10      .50     2.00      .1623      .1000     1.1685 
+     .10      .50     4.00      .2849      .1000     1.3315 
+     .10      .50     8.00      .3774      .1000     2.0100 
+     .10     1.00     1.00      .1054      .1000      .9000 
+     .10     1.00     2.00      .3246      .1000      .5843 
+     .10     1.00     4.00      .5697      .1000      .6657 
+     .10     1.00     8.00      .7548      .1000     1.0050 
+     .10     2.00     1.00      .2107      .1000      .4500 
+     .10     2.00     2.00      .6492      .1000      .2921 
+     .10     2.00     4.00     1.1395      .1000      .3329 
+     .10     2.00     8.00     1.5096      .1000      .5025 
+     .10     5.00     1.00      .5268      .1000      .1800 
+     .10     5.00     2.00     1.6230      .1000      .1169 
+     .10     5.00     4.00     2.8487      .1000      .1331 
+     .10     5.00     8.00     3.7740      .1000      .2010 
+     .20      .50     1.00      .1116      .2000     1.6000 
+     .20      .50     2.00      .2362      .2000     1.5116 
+     .20      .50     4.00      .3436      .2000     2.0779 
+     .20      .50     8.00      .4145      .2000     3.4453 
+     .20     1.00     1.00      .2231      .2000      .8000 
+     .20     1.00     2.00      .4724      .2000      .7558 
+     .20     1.00     4.00      .6873      .2000     1.0389 
+     .20     1.00     8.00      .8290      .2000     1.7226 
+     .20     2.00     1.00      .4463      .2000      .4000 
+     .20     2.00     2.00      .9448      .2000      .3779 
+     .20     2.00     4.00     1.3746      .2000      .5195 
+     .20     2.00     8.00     1.6581      .2000      .8613 
+     .20     5.00     1.00     1.1157      .2000      .1600 
+     .20     5.00     2.00     2.3619      .2000      .1512 
+     .20     5.00     4.00     3.4365      .2000      .2078 
+     .20     5.00     8.00     4.1452      .2000      .3445 
+     .30      .50     1.00      .1783      .3000     1.4000 
+     .30      .50     2.00      .2986      .3000     1.6722 
+     .30      .50     4.00      .3864      .3000     2.5846 
+     .30      .50     8.00      .4395      .3000     4.5442 
+     .30     1.00     1.00      .3567      .3000      .7000 
+     .30     1.00     2.00      .5972      .3000      .8361 
+     .30     1.00     4.00      .7728      .3000     1.2923 
+     .30     1.00     8.00      .8791      .3000     2.2721 
+     .30     2.00     1.00      .7133      .3000      .3500 
+     .30     2.00     2.00     1.1944      .3000      .4181 
+     .30     2.00     4.00     1.5456      .3000      .6461 
+     .30     2.00     8.00     1.7582      .3000     1.1360 
+     .30     5.00     1.00     1.7834      .3000      .1400 
+     .30     5.00     2.00     2.9861      .3000      .1672 
+     .30     5.00     4.00     3.8640      .3000      .2585 
+     .30     5.00     8.00     4.3955      .3000      .4544 
+     .40      .50     1.00      .2554      .4000     1.2000 
+     .40      .50     2.00      .3574      .4000     1.7153 
+     .40      .50     4.00      .4227      .4000     2.9003 
+     .40      .50     8.00      .4597      .4000     5.3335 
+     .40     1.00     1.00      .5108      .4000      .6000 
+     .40     1.00     2.00      .7147      .4000      .8577 
+     .40     1.00     4.00      .8454      .4000     1.4502 
+     .40     1.00     8.00      .9195      .4000     2.6667 
+     .40     2.00     1.00     1.0217      .4000      .3000 
+     .40     2.00     2.00     1.4294      .4000      .4288 
+     .40     2.00     4.00     1.6908      .4000      .7251 
+     .40     2.00     8.00     1.8389      .4000     1.3334 
+     .40     5.00     1.00     2.5541      .4000      .1200 
+     .40     5.00     2.00     3.5736      .4000      .1715 
+     .40     5.00     4.00     4.2271      .4000      .2900 
+     .40     5.00     8.00     4.5973      .4000      .5333 
+     .50      .50     1.00      .3466      .5000     1.0000 
+     .50      .50     2.00      .4163      .5000     1.6651 
+     .50      .50     4.00      .4562      .5000     3.0386 
+     .50      .50     8.00      .4776      .5000     5.8051 
+     .50     1.00     1.00      .6931      .5000      .5000 
+     .50     1.00     2.00      .8326      .5000      .8326 
+     .50     1.00     4.00      .9124      .5000     1.5193 
+     .50     1.00     8.00      .9552      .5000     2.9026 
+     .50     2.00     1.00     1.3863      .5000      .2500 
+     .50     2.00     2.00     1.6651      .5000      .4163 
+     .50     2.00     4.00     1.8249      .5000      .7597 
+     .50     2.00     8.00     1.9104      .5000     1.4513 
+     .50     5.00     1.00     3.4657      .5000      .1000 
+     .50     5.00     2.00     4.1628      .5000      .1665 
+     .50     5.00     4.00     4.5622      .5000      .3039 
+     .50     5.00     8.00     4.7761      .5000      .5805 
+     .60      .50     1.00      .4581      .6000      .8000 
+     .60      .50     2.00      .4786      .6000     1.5316 
+     .60      .50     4.00      .4892      .6000     2.9969 
+     .60      .50     8.00      .4946      .6000     5.9287 
+     .60     1.00     1.00      .9163      .6000      .4000 
+     .60     1.00     2.00      .9572      .6000      .7658 
+     .60     1.00     4.00      .9784      .6000     1.4985 
+     .60     1.00     8.00      .9891      .6000     2.9643 
+     .60     2.00     1.00     1.8326      .6000      .2000 
+     .60     2.00     2.00     1.9145      .6000      .3829 
+     .60     2.00     4.00     1.9568      .6000      .7492 
+     .60     2.00     8.00     1.9783      .6000     1.4822 
+     .60     5.00     1.00     4.5815      .6000      .0800 
+     .60     5.00     2.00     4.7862      .6000      .1532 
+     .60     5.00     4.00     4.8919      .6000      .2997 
+     .60     5.00     8.00     4.9457      .6000      .5929 
+     .70      .50     1.00      .6020      .7000      .6000 
+     .70      .50     2.00      .5486      .7000     1.3167 
+     .70      .50     4.00      .5238      .7000     2.7585 
+     .70      .50     8.00      .5117      .7000     5.6465 
+     .70     1.00     1.00     1.2040      .7000      .3000 
+     .70     1.00     2.00     1.0973      .7000      .6584 
+     .70     1.00     4.00     1.0475      .7000     1.3793 
+     .70     1.00     8.00     1.0235      .7000     2.8233 
+     .70     2.00     1.00     2.4079      .7000      .1500 
+     .70     2.00     2.00     2.1945      .7000      .3292 
+     .70     2.00     4.00     2.0950      .7000      .6896 
+     .70     2.00     8.00     2.0469      .7000     1.4116 
+     .70     5.00     1.00     6.0199      .7000      .0600 
+     .70     5.00     2.00     5.4863      .7000      .1317 
+     .70     5.00     4.00     5.2375      .7000      .2759 
+     .70     5.00     8.00     5.1174      .7000      .5647 
+     .80      .50     1.00      .8047      .8000      .4000 
+     .80      .50     2.00      .6343      .8000     1.0149 
+     .80      .50     4.00      .5632      .8000     2.2863 
+     .80      .50     8.00      .5306      .8000     4.8528 
+     .80     1.00     1.00     1.6094      .8000      .2000 
+     .80     1.00     2.00     1.2686      .8000      .5075 
+     .80     1.00     4.00     1.1263      .8000     1.1431 
+     .80     1.00     8.00     1.0613      .8000     2.4264 
+     .80     2.00     1.00     3.2189      .8000      .1000 
+     .80     2.00     2.00     2.5373      .8000      .2537 
+     .80     2.00     4.00     2.2527      .8000      .5716 
+     .80     2.00     8.00     2.1226      .8000     1.2132 
+     .80     5.00     1.00     8.0472      .8000      .0400 
+     .80     5.00     2.00     6.3432      .8000      .1015 
+     .80     5.00     4.00     5.6317      .8000      .2286 
+     .80     5.00     8.00     5.3065      .8000      .4853 
+     .90      .50     1.00     1.1513      .9000      .2000 
+     .90      .50     2.00      .7587      .9000      .6070 
+     .90      .50     4.00      .6159      .9000     1.4954 
+     .90      .50     8.00      .5549      .9000     3.3194 
+     .90     1.00     1.00     2.3026      .9000      .1000 
+     .90     1.00     2.00     1.5174      .9000      .3035 
+     .90     1.00     4.00     1.2318      .9000      .7477 
+     .90     1.00     8.00     1.1099      .9000     1.6597 
+     .90     2.00     1.00     4.6052      .9000      .0500 
+     .90     2.00     2.00     3.0349      .9000      .1517 
+     .90     2.00     4.00     2.4637      .9000      .3738 
+     .90     2.00     8.00     2.2198      .9000      .8298 
+     .90     5.00     1.00    11.5129      .9000      .0200 
+     .90     5.00     2.00     7.5871      .9000      .0607 
+     .90     5.00     4.00     6.1592      .9000      .1495 
+     .90     5.00     8.00     5.5494      .9000      .3319 
+     .99      .50     1.00     2.3026      .9900      .0200 
+     .99      .50     2.00     1.0730      .9900      .0858 
+     .99      .50     4.00      .7325      .9900      .2515 
+     .99      .50     8.00      .6052      .9900      .6088 
+     .99     1.00     1.00     4.6052      .9900      .0100 
+     .99     1.00     2.00     2.1460      .9900      .0429 
+     .99     1.00     4.00     1.4649      .9900      .1257 
+     .99     1.00     8.00     1.2103      .9900      .3044 
+     .99     2.00     1.00     9.2103      .9900      .0050 
+     .99     2.00     2.00     4.2919      .9900      .0215 
+     .99     2.00     4.00     2.9298      .9900      .0629 
+     .99     2.00     8.00     2.4207      .9900      .1522 
+     .99     5.00     1.00    23.0259      .9900      .0020 
+     .99     5.00     2.00    10.7298      .9900      .0086 
+     .99     5.00     4.00     7.3246      .9900      .0251 
+     .99     5.00     8.00     6.0517      .9900      .0609 
+])
diff --git a/tests/no_case_size.sav b/tests/no_case_size.sav
deleted file mode 100644 (file)
index d338212..0000000
Binary files a/tests/no_case_size.sav and /dev/null differ
diff --git a/tests/output/output.at b/tests/output/output.at
new file mode 100644 (file)
index 0000000..919927d
--- /dev/null
@@ -0,0 +1,28 @@
+AT_BANNER([output drivers])
+
+m4_define([OUTPUT_UNWRITABLE_DIR],
+  [AT_SETUP([output $1 to unwritable directory])
+   mkdir unwritable
+   chmod u-w unwritable
+   AT_SKIP_IF([: > unwritable/test])
+   AT_DATA([unwritable.sps], [dnl
+data list /x 1.
+begin data.
+1
+2
+3
+end data.
+frequencies x/histogram.
+])
+   dnl PSPP will fail to create the output file.  Currently this doesn't cause
+   dnl PSPP's exit status to be nonzero, although this is arguably incorrect.
+   dnl At any rate, PSPP should not crash.
+   AT_CHECK([cd unwritable && pspp -o pspp.$1 ../unwritable.sps], [0],
+            [ignore], [ignore])
+   AT_CLEANUP])
+
+OUTPUT_UNWRITABLE_DIR([csv])
+OUTPUT_UNWRITABLE_DIR([html])
+OUTPUT_UNWRITABLE_DIR([odt])
+OUTPUT_UNWRITABLE_DIR([pdf])
+OUTPUT_UNWRITABLE_DIR([txt])
diff --git a/tests/output/paper-size.at b/tests/output/paper-size.at
new file mode 100644 (file)
index 0000000..2ae4cdc
--- /dev/null
@@ -0,0 +1,37 @@
+AT_BANNER([output -- paper sizes])
+
+AT_SETUP([letter default paper size])
+AT_DATA([paper-size.sps], [dnl
+debug paper size ''.
+])
+AT_CHECK([PAPERSIZE=letter pspp --testing-mode -O format=csv paper-size.sps],
+  [0], ["" => 8.5 x 11.0 in, 216 x 279 mm
+])
+AT_CLEANUP
+
+AT_SETUP([a4 default paper size])
+AT_DATA([paper-size.sps], [dnl
+debug paper size ''.
+])
+AT_CHECK([PAPERSIZE=a4 pspp --testing-mode -O format=csv paper-size.sps],
+  [0], ["" => 8.3 x 11.7 in, 210 x 297 mm
+])
+AT_CLEANUP
+
+AT_SETUP([specific paper sizes])
+AT_KEYWORDS([paper size])
+AT_DATA([paper-size.sps], [dnl
+debug paper size 'a4'.
+debug paper size 'letter'.
+debug paper size '10x14in'.
+debug paper size '210x297mm'.
+])
+AT_CHECK([PAPERSIZE=a4 pspp --testing-mode -O format=csv paper-size.sps],
+  [0], [dnl
+"a4" => 8.3 x 11.7 in, 210 x 297 mm
+"letter" => 8.5 x 11.0 in, 216 x 279 mm
+"10x14in" => 10.0 x 14.0 in, 254 x 356 mm
+"210x297mm" => 8.3 x 11.7 in, 210 x 297 mm
+])
+AT_CLEANUP
+
diff --git a/tests/output/paper-size.sh b/tests/output/paper-size.sh
deleted file mode 100755 (executable)
index e308abc..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/bin/sh
-
-# This program tests paper size support.
-
-TEMPDIR=/tmp/pspp-tst-$$
-
-# ensure that top_builddir  are absolute
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-top_builddir=`cd $top_builddir; pwd`
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-# ensure that top_srcdir is absolute
-top_srcdir=`cd $top_srcdir; pwd`
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR" 
-       return ; 
-     fi
-     cd /
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-activity="Create File 1"
-cat > paper-size.pspp <<EOF
-debug paper size ''.
-debug paper size 'a4'.
-debug paper size 'letter'.
-debug paper size '10x14in'.
-debug paper size '210x297mm'.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="Run pspp 1"
-PAPERSIZE=letter $SUPERVISOR $PSPP --testing-mode -o pspp.csv paper-size.pspp > paper-size.out
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare results"
-diff -b  $TEMPDIR/paper-size.out - <<EOF
-"" => 8.5 x 11.0 in, 216 x 279 mm
-"a4" => 8.3 x 11.7 in, 210 x 297 mm
-"letter" => 8.5 x 11.0 in, 216 x 279 mm
-"10x14in" => 10.0 x 14.0 in, 254 x 356 mm
-"210x297mm" => 8.3 x 11.7 in, 210 x 297 mm
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-activity="Create File 2"
-cat > paper-size-2.pspp <<EOF
-debug paper size ''.
-EOF
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="Run pspp 2"
-PAPERSIZE=a4 $SUPERVISOR $PSPP --testing-mode -o pspp.csv paper-size-2.pspp > paper-size-2.out
-if [ $? -ne 0 ] ; then no_result ; fi
-
-activity="compare results 2"
-diff -b  $TEMPDIR/paper-size-2.out - <<EOF
-"" => 8.3 x 11.7 in, 210 x 297 mm
-EOF
-if [ $? -ne 0 ] ; then fail ; fi
-
-pass;
index 2be037066c933691e2417758001a09db7e1515ef..115f2a8d20e714f8b644f150df9c1c3c9609210c 100644 (file)
@@ -620,7 +620,7 @@ AT_DATA([test.pl],
     print $PSPP::errstr, "\n";
 ]])
 AT_CHECK([RUN_PERL_MODULE test.pl], [0],
-  [[Error opening "no-such-file.sav" for reading as a system file: No such file or directory.
+  [[Error opening `no-such-file.sav' for reading as a system file: No such file or directory.
 ]],
   [[Name "PSPP::errstr" used only once: possible typo at test.pl line 8.
 ]])
diff --git a/tests/test_template b/tests/test_template
deleted file mode 100755 (executable)
index 572e46e..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-#!/bin/sh
-
-# This program tests ....
-
-TEMPDIR=/tmp/pspp-tst-$$
-TESTFILE=$TEMPDIR/`basename $0`.sps
-
-# ensure that top_srcdir and top_builddir  are absolute
-if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
-if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
-top_srcdir=`cd $top_srcdir; pwd`
-top_builddir=`cd $top_builddir; pwd`
-
-PSPP=$top_builddir/src/ui/terminal/pspp$EXEEXT
-
-STAT_CONFIG_PATH=$top_srcdir/config
-export STAT_CONFIG_PATH
-
-LANG=C
-export LANG
-
-
-cleanup()
-{
-     if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then 
-       echo "NOT cleaning $TEMPDIR"
-       return ; 
-     fi
-     rm -rf $TEMPDIR
-}
-
-
-fail()
-{
-    echo $activity
-    echo FAILED
-    cleanup;
-    exit 1;
-}
-
-
-no_result()
-{
-    echo $activity
-    echo NO RESULT;
-    cleanup;
-    exit 2;
-}
-
-pass()
-{
-    cleanup;
-    exit 0;
-}
-
-mkdir -p $TEMPDIR
-
-cd $TEMPDIR
-
-put test set up here ...
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-activity="run program"
-$SUPERVISOR $PSPP -o pspp.csv $TESTFILE
-if [ $? -ne 0 ] ; then no_result ; fi
-
-
-
-put test here
-
-if [ $? -ne 0 ] ; then fail ; fi
-
-
-pass;
diff --git a/tests/ui/terminal/main.at b/tests/ui/terminal/main.at
new file mode 100644 (file)
index 0000000..38a88ec
--- /dev/null
@@ -0,0 +1,38 @@
+AT_BANNER([PSPP terminal UI])
+
+AT_SETUP([nonexistent syntax file crash])
+AT_CHECK([pspp nonexistent], [1], 
+  [error: Opening `nonexistent': No such file or directory.
+])
+AT_CLEANUP
+
+AT_SETUP([SIGTERM yields clean shutdown])
+AT_DATA([main.sps], [dnl
+INPUT PROGRAM.
+COMPUTE x = x + 1.
+DO IF x = 10000.
+END CASE.
+ELSE IF x < 0.
+END FILE.
+END IF.
+END INPUT PROGRAM.
+EXECUTE.
+])
+AT_CHECK([pspp main.sps & sleep 1; kill $!; wait $!], [143], [], [ignore])
+AT_CLEANUP
+
+AT_SETUP([SIGSEGV yields error report])
+AT_CHECK([[echo 'host command=["kill -SEGV $PPID"].' | pspp -O format=csv]],
+  [139], [], [stderr])
+AT_DATA([expout], [dnl
+******************************************************
+You have discovered a bug in PSPP.  Please report this
+to bug-gnu-pspp@gnu.org.  Please include this entire
+message, *plus* several lines of output just above it.
+For the best chance at having the bug fixed, also
+include the syntax file that triggered it and a sample
+of any data file used for input.
+proximate cause:     Segmentation Violation
+])
+AT_CHECK([sed '/proximate/q' < stderr], [0], [expout])
+AT_CLEANUP
diff --git a/tests/v13.sav b/tests/v13.sav
deleted file mode 100755 (executable)
index 916cc73..0000000
Binary files a/tests/v13.sav and /dev/null differ
diff --git a/tests/v14.sav b/tests/v14.sav
deleted file mode 100644 (file)
index d4aa1df..0000000
Binary files a/tests/v14.sav and /dev/null differ
diff --git a/tests/weighting.data b/tests/weighting.data
deleted file mode 100644 (file)
index bf74fa0..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-   18    1
-   19    7
-   20   26
-   21   76
-   22   57
-   23   58
-   24   38
-   25   38
-   26   30
-   27   21
-   28   23
-   29   24
-   30   23
-   31   14
-   32   21
-   33   21
-   34   14
-   35   14
-   36   17
-   37   11
-   38   16
-   39   14
-   40   15
-   41   14
-   42   14
-   43    8
-   44   15
-   45   10
-   46   12
-   47   13
-   48   13
-   49    5
-   50    5
-   51    3
-   52    7
-   53    6
-   54    2
-   55    2
-   56    2
-   57    3
-   58    1
-   59    3
-   61    1
-   62    3
-   63    1
-   64    1
-   65    2
-   70    1
-   78    1
-   79    1
-   80    1
-   94    1
\ No newline at end of file