Encapsulated the static data of procedure.[ch] into a single object, to be
authorJohn Darrington <john@darrington.wattle.id.au>
Thu, 19 Oct 2006 15:04:52 +0000 (15:04 +0000)
committerJohn Darrington <john@darrington.wattle.id.au>
Thu, 19 Oct 2006 15:04:52 +0000 (15:04 +0000)
passed into its functions.  Dealt with the consequences.

61 files changed:
po/de.po
po/pspp.pot
src/data/ChangeLog
src/data/dictionary.c
src/data/procedure.c
src/data/procedure.h
src/language/command.c
src/language/control/do-if.c
src/language/control/loop.c
src/language/control/repeat.c
src/language/control/temporary.c
src/language/data-io/data-list.c
src/language/data-io/data-reader.c
src/language/data-io/get.c
src/language/data-io/inpt-pgm.c
src/language/data-io/list.q
src/language/data-io/matrix-data.c
src/language/data-io/print-space.c
src/language/data-io/print.c
src/language/dictionary/apply-dictionary.c
src/language/dictionary/formats.c
src/language/dictionary/missing-values.c
src/language/dictionary/modify-variables.c
src/language/dictionary/numeric.c
src/language/dictionary/rename-variables.c
src/language/dictionary/split-file.c
src/language/dictionary/sys-file-info.c
src/language/dictionary/value-labels.c
src/language/dictionary/variable-display.c
src/language/dictionary/variable-label.c
src/language/dictionary/vector.c
src/language/dictionary/weight.c
src/language/expressions/operations.def
src/language/expressions/parse.c
src/language/lexer/q2c.c
src/language/lexer/variable-parser.c
src/language/stats/aggregate.c
src/language/stats/autorecode.c
src/language/stats/correlations.q
src/language/stats/crosstabs.q
src/language/stats/descriptives.c
src/language/stats/examine.q
src/language/stats/flip.c
src/language/stats/frequencies.q
src/language/stats/means.q
src/language/stats/oneway.q
src/language/stats/rank.q
src/language/stats/regression.q
src/language/stats/sort-cases.c
src/language/stats/t-test.q
src/language/utilities/set.q
src/language/utilities/title.c
src/language/xforms/compute.c
src/language/xforms/count.c
src/language/xforms/fail.c
src/language/xforms/recode.c
src/language/xforms/sample.c
src/language/xforms/select-if.c
src/math/levene.c
src/math/sort.c
src/ui/terminal/main.c

index f17851f5e091534857b9bf05420fdc3767e0f3ec..aecf07eb511de631acd4c3403de18dc6942fce4a 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PSPP 0.4.2\n"
 "Report-Msgid-Bugs-To: pspp-dev@gnu.org\n"
-"POT-Creation-Date: 2006-10-06 17:58+0800\n"
+"POT-Creation-Date: 2006-10-19 16:31+0800\n"
 "PO-Revision-Date: 2006-05-26 17:49+0800\n"
 "Last-Translator: John Darrington <john@darrington.wattle.id.au>\n"
 "Language-Team: German <pspp-dev@gnu.org>\n"
@@ -406,7 +406,7 @@ msgstr "Nummer"
 #: src/data/sys-file-reader.c:1368 src/data/sys-file-reader.c:1369
 #: src/data/variable.c:42 src/language/dictionary/apply-dictionary.c:76
 #: src/language/dictionary/apply-dictionary.c:77
-#: src/language/xforms/recode.c:478 src/language/xforms/recode.c:479
+#: src/language/xforms/recode.c:479 src/language/xforms/recode.c:480
 msgid "numeric"
 msgstr "numerisch"
 
@@ -415,7 +415,7 @@ msgstr "numerisch"
 #: src/data/variable.c:42 src/data/variable.c:50
 #: src/language/dictionary/apply-dictionary.c:76
 #: src/language/dictionary/apply-dictionary.c:77
-#: src/language/xforms/recode.c:478 src/language/xforms/recode.c:479
+#: src/language/xforms/recode.c:479 src/language/xforms/recode.c:480
 msgid "string"
 msgstr "kette"
 
@@ -983,94 +983,99 @@ msgstr ""
 msgid "scratch"
 msgstr ""
 
-#: src/language/command.c:185
+#: src/language/command.c:183
+#, c-format
+msgid "%s is unimplemented."
+msgstr ""
+
+#: src/language/command.c:188
 #, c-format
 msgid "%s may be used only in testing mode."
 msgstr ""
 
-#: src/language/command.c:190
+#: src/language/command.c:193
 #, c-format
 msgid "%s may be used only in enhanced syntax mode."
 msgstr ""
 
-#: src/language/command.c:444
+#: src/language/command.c:447
 msgid "expecting command name"
 msgstr ""
 
-#: src/language/command.c:458
+#: src/language/command.c:461
 #, c-format
 msgid "Unknown command %s."
 msgstr ""
 
-#: src/language/command.c:584
+#: src/language/command.c:587
 msgid "before the active file has been defined"
 msgstr ""
 
-#: src/language/command.c:586
+#: src/language/command.c:589
 msgid "after the active file has been defined"
 msgstr ""
 
-#: src/language/command.c:588
+#: src/language/command.c:591
 msgid "inside INPUT PROGRAM"
 msgstr ""
 
-#: src/language/command.c:590
+#: src/language/command.c:593
 msgid "inside FILE TYPE"
 msgstr ""
 
-#: src/language/command.c:595
+#: src/language/command.c:598
 #, c-format
 msgid "%s or %s"
 msgstr ""
 
-#: src/language/command.c:597
+#: src/language/command.c:600
 #, c-format
 msgid "%s, %s, or %s"
 msgstr ""
 
-#: src/language/command.c:601
+#: src/language/command.c:604
 #, c-format
 msgid "%s is allowed only %s."
 msgstr ""
 
-#: src/language/command.c:606
+#: src/language/command.c:609
 #, c-format
 msgid "%s is not allowed inside INPUT PROGRAM."
 msgstr ""
 
-#: src/language/command.c:608
+#: src/language/command.c:611
 #, c-format
 msgid "%s is not allowed inside FILE TYPE."
 msgstr ""
 
-#: src/language/command.c:686 src/language/command.c:817
+#: src/language/command.c:689 src/language/command.c:820
 #: src/language/utilities/permissions.c:102
 msgid "This command not allowed when the SAFER option is set."
 msgstr ""
 
-#: src/language/command.c:698
+#: src/language/command.c:701
 #, c-format
 msgid "Error removing `%s': %s."
 msgstr ""
 
-#: src/language/command.c:748
+#: src/language/command.c:751
 #, c-format
 msgid "Couldn't fork: %s."
 msgstr ""
 
-#: src/language/command.c:790
+#: src/language/command.c:793
 #, c-format
 msgid "Error executing command: %s."
 msgstr ""
 
-#: src/language/command.c:799 src/language/data-io/matrix-data.c:539
+#: src/language/command.c:802 src/language/data-io/matrix-data.c:539
 #: src/language/data-io/print-space.c:76 src/language/dictionary/vector.c:201
 #: src/language/lexer/lexer.c:453 src/language/stats/autorecode.c:154
 #: src/language/xforms/select-if.c:62
 msgid "expecting end of command"
 msgstr ""
 
-#: src/language/command.c:838
+#: src/language/command.c:841
 msgid "No operating system support for this command."
 msgstr ""
 
@@ -1137,80 +1142,80 @@ msgstr ""
 msgid "Only one of FIXED, FREE, or LIST may be specified."
 msgstr ""
 
-#: src/language/data-io/data-list.c:336 src/language/data-io/data-list.c:471
+#: src/language/data-io/data-list.c:337 src/language/data-io/data-list.c:472
 #, c-format
 msgid "%s is a duplicate variable name."
 msgstr ""
 
-#: src/language/data-io/data-list.c:343
+#: src/language/data-io/data-list.c:344
 #, c-format
 msgid "There is already a variable %s of a different type."
 msgstr ""
 
-#: src/language/data-io/data-list.c:350
+#: src/language/data-io/data-list.c:351
 #, c-format
 msgid "There is already a string variable %s of a different width."
 msgstr ""
 
-#: src/language/data-io/data-list.c:371
+#: src/language/data-io/data-list.c:372
 msgid "At least one variable must be specified."
 msgstr ""
 
-#: src/language/data-io/data-list.c:378
+#: src/language/data-io/data-list.c:379
 msgid ""
 "Variables are specified on records that should not exist according to "
 "RECORDS subcommand."
 msgstr ""
 
-#: src/language/data-io/data-list.c:403 src/language/data-io/data-list.c:503
+#: src/language/data-io/data-list.c:404 src/language/data-io/data-list.c:504
 #: src/language/data-io/print.c:370 src/language/dictionary/split-file.c:84
 #: src/language/dictionary/sys-file-info.c:144
 #: src/language/dictionary/sys-file-info.c:378
-#: src/language/stats/descriptives.c:894
+#: src/language/stats/descriptives.c:897
 msgid "Variable"
 msgstr ""
 
-#: src/language/data-io/data-list.c:404 src/language/data-io/print.c:371
+#: src/language/data-io/data-list.c:405 src/language/data-io/print.c:371
 msgid "Record"
 msgstr ""
 
-#: src/language/data-io/data-list.c:405 src/language/data-io/print.c:372
+#: src/language/data-io/data-list.c:406 src/language/data-io/print.c:372
 #: src/ui/gui/var-sheet.c:78
 msgid "Columns"
 msgstr "Spalten"
 
-#: src/language/data-io/data-list.c:406 src/language/data-io/data-list.c:504
+#: src/language/data-io/data-list.c:407 src/language/data-io/data-list.c:505
 #: src/language/data-io/print.c:373
 msgid "Format"
 msgstr ""
 
-#: src/language/data-io/data-list.c:422
+#: src/language/data-io/data-list.c:423
 #, c-format
 msgid "Reading %d record from %s."
 msgid_plural "Reading %d records from %s."
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/language/data-io/data-list.c:517
+#: src/language/data-io/data-list.c:518
 #, c-format
 msgid "Reading free-form data from %s."
 msgstr ""
 
-#: src/language/data-io/data-list.c:563
+#: src/language/data-io/data-list.c:564
 msgid "Quoted string extends beyond end of line."
 msgstr ""
 
-#: src/language/data-io/data-list.c:648
+#: src/language/data-io/data-list.c:649
 #, c-format
 msgid "Partial case of %d of %d records discarded."
 msgstr ""
 
-#: src/language/data-io/data-list.c:697
+#: src/language/data-io/data-list.c:698
 #, c-format
 msgid "Partial case discarded.  The first variable missing was %s."
 msgstr ""
 
-#: src/language/data-io/data-list.c:733
+#: src/language/data-io/data-list.c:734
 #, c-format
 msgid ""
 "Missing value(s) for all variables from %s onward.  These will be filled "
@@ -1311,17 +1316,17 @@ msgstr ""
 msgid "expecting COMM or TAPE"
 msgstr ""
 
-#: src/language/data-io/get.c:358 src/language/data-io/get.c:372
-#: src/language/data-io/get.c:397
+#: src/language/data-io/get.c:359 src/language/data-io/get.c:373
+#: src/language/data-io/get.c:398
 #, c-format
 msgid "expecting %s or %s"
 msgstr ""
 
-#: src/language/data-io/get.c:606 src/language/data-io/print.c:174
+#: src/language/data-io/get.c:607 src/language/data-io/print.c:174
 msgid "expecting a valid subcommand"
 msgstr ""
 
-#: src/language/data-io/get.c:639
+#: src/language/data-io/get.c:640
 #, c-format
 msgid ""
 "Cannot rename %s as %s because there already exists a variable named %s.  To "
@@ -1329,75 +1334,75 @@ msgid ""
 "as \"/RENAME (A=B)(B=C)(C=A)\", or equivalently, \"/RENAME (A B C=B C A)\"."
 msgstr ""
 
-#: src/language/data-io/get.c:664
+#: src/language/data-io/get.c:665
 msgid "`=' expected after variable list."
 msgstr ""
 
-#: src/language/data-io/get.c:671
+#: src/language/data-io/get.c:672
 #, c-format
 msgid ""
 "Number of variables on left side of `=' (%d) does not match number of "
 "variables on right side (%d), in parenthesized group %d of RENAME subcommand."
 msgstr ""
 
-#: src/language/data-io/get.c:684
+#: src/language/data-io/get.c:685
 #, c-format
 msgid "Requested renaming duplicates variable name %s."
 msgstr ""
 
-#: src/language/data-io/get.c:714
+#: src/language/data-io/get.c:715
 msgid "Cannot DROP all variables from dictionary."
 msgstr ""
 
-#: src/language/data-io/get.c:891
+#: src/language/data-io/get.c:892
 msgid "The active file may not be specified more than once."
 msgstr ""
 
-#: src/language/data-io/get.c:899
+#: src/language/data-io/get.c:900
 msgid "Cannot specify the active file since no active file has been defined."
 msgstr ""
 
-#: src/language/data-io/get.c:906
+#: src/language/data-io/get.c:907
 msgid ""
 "MATCH FILES may not be used after TEMPORARY when the active file is an input "
 "source.  Temporary transformations will be made permanent."
 msgstr ""
 
-#: src/language/data-io/get.c:942
+#: src/language/data-io/get.c:943
 msgid "Multiple IN subcommands for a single FILE or TABLE."
 msgstr ""
 
-#: src/language/data-io/get.c:962
+#: src/language/data-io/get.c:963
 msgid "BY may appear at most once."
 msgstr ""
 
-#: src/language/data-io/get.c:982
+#: src/language/data-io/get.c:983
 #, c-format
 msgid "File %s lacks BY variable %s."
 msgstr ""
 
-#: src/language/data-io/get.c:996
+#: src/language/data-io/get.c:997
 msgid "FIRST may appear at most once."
 msgstr ""
 
-#: src/language/data-io/get.c:1010
+#: src/language/data-io/get.c:1011
 msgid "LAST may appear at most once."
 msgstr ""
 
-#: src/language/data-io/get.c:1051
+#: src/language/data-io/get.c:1052
 msgid "BY is required when TABLE is specified."
 msgstr ""
 
-#: src/language/data-io/get.c:1056
+#: src/language/data-io/get.c:1057
 msgid "BY is required when IN is specified."
 msgstr ""
 
-#: src/language/data-io/get.c:1084
+#: src/language/data-io/get.c:1085
 #, c-format
 msgid "IN variable name %s duplicates an existing variable name."
 msgstr ""
 
-#: src/language/data-io/get.c:1538
+#: src/language/data-io/get.c:1541
 #, c-format
 msgid ""
 "Variable %s in file %s (%s) has different type or width from the same "
@@ -1412,16 +1417,16 @@ msgstr ""
 msgid "Input program did not create any variables."
 msgstr ""
 
-#: src/language/data-io/inpt-pgm.c:337
+#: src/language/data-io/inpt-pgm.c:338
 msgid "COLUMN subcommand multiply specified."
 msgstr ""
 
-#: src/language/data-io/inpt-pgm.c:384
+#: src/language/data-io/inpt-pgm.c:385
 msgid ""
 "REREAD: Column numbers must be positive finite numbers.  Column set to 1."
 msgstr ""
 
-#: src/language/data-io/list.q:152 src/language/stats/descriptives.c:361
+#: src/language/data-io/list.q:152 src/language/stats/descriptives.c:362
 msgid "No variables specified."
 msgstr ""
 
@@ -1561,79 +1566,79 @@ msgstr ""
 msgid "No continuous variables specified."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:840
+#: src/language/data-io/matrix-data.c:841
 msgid "Scope of string exceeds line."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:901
+#: src/language/data-io/matrix-data.c:902
 #, c-format
 msgid "End of line expected %s while reading %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1090
+#: src/language/data-io/matrix-data.c:1091
 #, c-format
 msgid "expecting value for %s %s"
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1255
+#: src/language/data-io/matrix-data.c:1256
 #, c-format
 msgid "Syntax error expecting SPLIT FILE value %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1264
+#: src/language/data-io/matrix-data.c:1265
 #, c-format
 msgid "Expecting value %g for %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1305
-#: src/language/data-io/matrix-data.c:1782
+#: src/language/data-io/matrix-data.c:1306
+#: src/language/data-io/matrix-data.c:1784
 #, c-format
 msgid "Syntax error expecting factor value %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1314
+#: src/language/data-io/matrix-data.c:1315
 #, c-format
 msgid "Syntax error expecting value %g for %s %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1558
+#: src/language/data-io/matrix-data.c:1560
 #, c-format
 msgid "Syntax error %s expecting SPLIT FILE value."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1687
+#: src/language/data-io/matrix-data.c:1689
 #, c-format
 msgid ""
 "Expected %d lines of data for %s content; actually saw %d lines.  No data "
 "will be output for this content."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1724
+#: src/language/data-io/matrix-data.c:1726
 #, c-format
 msgid "Multiply specified ROWTYPE_ %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1729
+#: src/language/data-io/matrix-data.c:1731
 #, c-format
 msgid "Syntax error %s expecting ROWTYPE_ string."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1749
+#: src/language/data-io/matrix-data.c:1751
 #, c-format
 msgid "Syntax error %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1900
+#: src/language/data-io/matrix-data.c:1902
 #, c-format
 msgid "Duplicate specification for %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1912
+#: src/language/data-io/matrix-data.c:1914
 #, c-format
 msgid "Too many rows of matrix data for %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1956
+#: src/language/data-io/matrix-data.c:1958
 #, c-format
 msgid "Syntax error expecting value for %s %s."
 msgstr ""
@@ -1697,11 +1702,11 @@ msgid_plural "Writing %d records."
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/language/data-io/print-space.c:116
+#: src/language/data-io/print-space.c:117
 msgid "The expression on PRINT SPACE evaluated to the system-missing value."
 msgstr ""
 
-#: src/language/data-io/print-space.c:119
+#: src/language/data-io/print-space.c:120
 #, c-format
 msgid "The expression on PRINT SPACE evaluated to %g."
 msgstr ""
@@ -1736,7 +1741,7 @@ msgid "`)' expected after output format."
 msgstr ""
 
 #: src/language/dictionary/missing-values.c:57
-#: src/language/stats/aggregate.c:447
+#: src/language/stats/aggregate.c:450
 msgid "expecting `('"
 msgstr ""
 
@@ -1877,8 +1882,8 @@ msgstr ""
 
 #: src/language/dictionary/split-file.c:85
 #: src/language/dictionary/sys-file-info.c:523
-#: src/language/stats/crosstabs.q:1115 src/language/stats/crosstabs.q:1142
-#: src/language/stats/crosstabs.q:1162 src/language/stats/crosstabs.q:1184
+#: src/language/stats/crosstabs.q:1116 src/language/stats/crosstabs.q:1143
+#: src/language/stats/crosstabs.q:1163 src/language/stats/crosstabs.q:1185
 #: src/language/stats/examine.q:1149 src/language/stats/frequencies.q:1177
 #: src/language/stats/frequencies.q:1301
 msgid "Value"
@@ -2173,7 +2178,7 @@ msgstr ""
 msgid "Unknown identifier %s."
 msgstr ""
 
-#: src/language/expressions/parse.c:854 src/language/stats/aggregate.c:503
+#: src/language/expressions/parse.c:854 src/language/stats/aggregate.c:506
 msgid "expecting `)'"
 msgstr ""
 
@@ -2247,7 +2252,7 @@ msgstr ""
 msgid "%s is not yet implemented."
 msgstr ""
 
-#: src/language/expressions/parse.c:1235
+#: src/language/expressions/parse.c:1236
 #, c-format
 msgid "%s may not appear after TEMPORARY."
 msgstr ""
@@ -2308,50 +2313,50 @@ msgstr ""
 msgid "expecting identifier"
 msgstr ""
 
-#: src/language/lexer/lexer.c:861
+#: src/language/lexer/lexer.c:862
 msgid "<ERROR>"
 msgstr ""
 
-#: src/language/lexer/lexer.c:1007
+#: src/language/lexer/lexer.c:1008
 msgid "binary"
 msgstr ""
 
-#: src/language/lexer/lexer.c:1012
+#: src/language/lexer/lexer.c:1013
 msgid "octal"
 msgstr ""
 
-#: src/language/lexer/lexer.c:1017
+#: src/language/lexer/lexer.c:1018
 msgid "hex"
 msgstr ""
 
-#: src/language/lexer/lexer.c:1027
+#: src/language/lexer/lexer.c:1028
 #, c-format
 msgid "String of %s digits has %d characters, which is not a multiple of %d."
 msgstr ""
 
-#: src/language/lexer/lexer.c:1056
+#: src/language/lexer/lexer.c:1057
 #, c-format
 msgid "`%c' is not a valid %s digit."
 msgstr ""
 
-#: src/language/lexer/lexer.c:1087
+#: src/language/lexer/lexer.c:1088
 msgid "Unterminated string constant."
 msgstr ""
 
-#: src/language/lexer/lexer.c:1141
+#: src/language/lexer/lexer.c:1142
 msgid "Unexpected end of file in string concatenation."
 msgstr ""
 
-#: src/language/lexer/lexer.c:1149
+#: src/language/lexer/lexer.c:1150
 msgid "String expected following `+'."
 msgstr ""
 
-#: src/language/lexer/lexer.c:1162
+#: src/language/lexer/lexer.c:1163
 #, c-format
 msgid "String exceeds 255 characters in length (%d characters)."
 msgstr ""
 
-#: src/language/lexer/lexer.c:1177
+#: src/language/lexer/lexer.c:1178
 msgid ""
 "Sorry, literal strings may not contain null characters.  Replacing with "
 "spaces."
@@ -2487,40 +2492,40 @@ msgid ""
 "has no effect.  Output data will be sorted the same way as the input data."
 msgstr ""
 
-#: src/language/stats/aggregate.c:416
+#: src/language/stats/aggregate.c:419
 msgid "expecting aggregation function"
 msgstr ""
 
-#: src/language/stats/aggregate.c:432
+#: src/language/stats/aggregate.c:435
 #, c-format
 msgid "Unknown aggregation function %s."
 msgstr ""
 
-#: src/language/stats/aggregate.c:484
+#: src/language/stats/aggregate.c:487
 #, c-format
 msgid "Missing argument %d to %s."
 msgstr ""
 
-#: src/language/stats/aggregate.c:493
+#: src/language/stats/aggregate.c:496
 #, c-format
 msgid "Arguments to %s must be of same type as source variables."
 msgstr ""
 
-#: src/language/stats/aggregate.c:515
+#: src/language/stats/aggregate.c:518
 #, c-format
 msgid ""
 "Number of source variables (%u) does not match number of target variables (%"
 "u)."
 msgstr ""
 
-#: src/language/stats/aggregate.c:531
+#: src/language/stats/aggregate.c:534
 #, 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:598
+#: src/language/stats/aggregate.c:601
 #, c-format
 msgid ""
 "Variable name %s is not unique within the aggregate file dictionary, which "
@@ -2568,380 +2573,380 @@ msgstr ""
 msgid "Maximum value (%ld) less than minimum value (%ld)."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:816
+#: src/language/stats/crosstabs.q:817
 msgid "Summary."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:818 src/language/stats/examine.q:934
+#: src/language/stats/crosstabs.q:819 src/language/stats/examine.q:934
 msgid "Cases"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:819 src/language/stats/examine.q:868
+#: src/language/stats/crosstabs.q:820 src/language/stats/examine.q:868
 #: src/language/stats/frequencies.q:1175 src/language/stats/frequencies.q:1551
 msgid "Valid"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:820 src/language/stats/examine.q:869
+#: src/language/stats/crosstabs.q:821 src/language/stats/examine.q:869
 #: src/language/stats/frequencies.q:1244 src/language/stats/frequencies.q:1552
 #: src/ui/gui/var-sheet.c:77
 msgid "Missing"
 msgstr "Löse"
 
-#: src/language/stats/crosstabs.q:821 src/language/stats/crosstabs.q:1024
-#: src/language/stats/crosstabs.q:1744 src/language/stats/examine.q:870
+#: src/language/stats/crosstabs.q:822 src/language/stats/crosstabs.q:1025
+#: src/language/stats/crosstabs.q:1745 src/language/stats/examine.q:870
 #: src/language/stats/frequencies.q:1253 src/language/stats/oneway.q:317
 #: src/language/stats/oneway.q:481 src/language/stats/regression.q:314
 msgid "Total"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:831 src/language/stats/examine.q:946
+#: src/language/stats/crosstabs.q:832 src/language/stats/examine.q:946
 #: src/language/stats/frequencies.q:1550 src/language/stats/oneway.q:403
 #: src/language/stats/t-test.q:688 src/language/stats/t-test.q:711
 #: src/language/stats/t-test.q:836 src/language/stats/t-test.q:1371
 msgid "N"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:832 src/language/stats/examine.q:949
+#: src/language/stats/crosstabs.q:833 src/language/stats/examine.q:949
 #: src/language/stats/frequencies.q:1179 src/language/stats/frequencies.q:1180
 #: src/language/stats/frequencies.q:1181
 msgid "Percent"
 msgstr "Prozent"
 
-#: src/language/stats/crosstabs.q:1074
+#: src/language/stats/crosstabs.q:1075
 msgid "count"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1075
+#: src/language/stats/crosstabs.q:1076
 msgid "row %"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1076
+#: src/language/stats/crosstabs.q:1077
 msgid "column %"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1077
+#: src/language/stats/crosstabs.q:1078
 msgid "total %"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1078
+#: src/language/stats/crosstabs.q:1079
 msgid "expected"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1079
+#: src/language/stats/crosstabs.q:1080
 msgid "residual"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1080
+#: src/language/stats/crosstabs.q:1081
 msgid "std. resid."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1081
+#: src/language/stats/crosstabs.q:1082
 msgid "adj. resid."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1111
+#: src/language/stats/crosstabs.q:1112
 msgid "Chi-square tests."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1114 src/language/stats/crosstabs.q:1141
-#: src/language/stats/crosstabs.q:1161 src/language/stats/crosstabs.q:1182
+#: src/language/stats/crosstabs.q:1115 src/language/stats/crosstabs.q:1142
+#: src/language/stats/crosstabs.q:1162 src/language/stats/crosstabs.q:1183
 #: src/language/stats/examine.q:1380
 msgid "Statistic"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1116 src/language/stats/oneway.q:290
+#: src/language/stats/crosstabs.q:1117 src/language/stats/oneway.q:290
 #: src/language/stats/oneway.q:693 src/language/stats/regression.q:307
 #: src/language/stats/t-test.q:986 src/language/stats/t-test.q:1178
 #: src/language/stats/t-test.q:1270
 msgid "df"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1118
+#: src/language/stats/crosstabs.q:1119
 msgid "Asymp. Sig. (2-sided)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1120
+#: src/language/stats/crosstabs.q:1121
 msgid "Exact. Sig. (2-sided)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1122
+#: src/language/stats/crosstabs.q:1123
 msgid "Exact. Sig. (1-sided)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1137
+#: src/language/stats/crosstabs.q:1138
 msgid "Symmetric measures."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1140 src/language/stats/crosstabs.q:1181
+#: src/language/stats/crosstabs.q:1141 src/language/stats/crosstabs.q:1182
 msgid "Category"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1143 src/language/stats/crosstabs.q:1185
+#: src/language/stats/crosstabs.q:1144 src/language/stats/crosstabs.q:1186
 msgid "Asymp. Std. Error"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1144 src/language/stats/crosstabs.q:1186
+#: src/language/stats/crosstabs.q:1145 src/language/stats/crosstabs.q:1187
 msgid "Approx. T"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1145 src/language/stats/crosstabs.q:1187
+#: src/language/stats/crosstabs.q:1146 src/language/stats/crosstabs.q:1188
 msgid "Approx. Sig."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1156
+#: src/language/stats/crosstabs.q:1157
 msgid "Risk estimate."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1160
+#: src/language/stats/crosstabs.q:1161
 #, c-format
 msgid "95%% Confidence Interval"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1163 src/language/stats/t-test.q:990
+#: src/language/stats/crosstabs.q:1164 src/language/stats/t-test.q:990
 #: src/language/stats/t-test.q:1175 src/language/stats/t-test.q:1273
 msgid "Lower"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1164 src/language/stats/t-test.q:991
+#: src/language/stats/crosstabs.q:1165 src/language/stats/t-test.q:991
 #: src/language/stats/t-test.q:1176 src/language/stats/t-test.q:1274
 msgid "Upper"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1178
+#: src/language/stats/crosstabs.q:1179
 msgid "Directional measures."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1183 src/ui/gui/var-sheet.c:72
+#: src/language/stats/crosstabs.q:1184 src/ui/gui/var-sheet.c:72
 msgid "Type"
 msgstr "Typ"
 
-#: src/language/stats/crosstabs.q:1936
+#: src/language/stats/crosstabs.q:1937
 msgid "Pearson Chi-Square"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1937
+#: src/language/stats/crosstabs.q:1938
 msgid "Likelihood Ratio"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1938
+#: src/language/stats/crosstabs.q:1939
 msgid "Fisher's Exact Test"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1939
+#: src/language/stats/crosstabs.q:1940
 msgid "Continuity Correction"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1940
+#: src/language/stats/crosstabs.q:1941
 msgid "Linear-by-Linear Association"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1977 src/language/stats/crosstabs.q:2047
-#: src/language/stats/crosstabs.q:2106
+#: src/language/stats/crosstabs.q:1978 src/language/stats/crosstabs.q:2048
+#: src/language/stats/crosstabs.q:2107
 msgid "N of Valid Cases"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1993 src/language/stats/crosstabs.q:2122
+#: src/language/stats/crosstabs.q:1994 src/language/stats/crosstabs.q:2123
 msgid "Nominal by Nominal"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1994 src/language/stats/crosstabs.q:2123
+#: src/language/stats/crosstabs.q:1995 src/language/stats/crosstabs.q:2124
 msgid "Ordinal by Ordinal"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1995
+#: src/language/stats/crosstabs.q:1996
 msgid "Interval by Interval"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1996
+#: src/language/stats/crosstabs.q:1997
 msgid "Measure of Agreement"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2001
+#: src/language/stats/crosstabs.q:2002
 msgid "Phi"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2002
+#: src/language/stats/crosstabs.q:2003
 msgid "Cramer's V"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2003
+#: src/language/stats/crosstabs.q:2004
 msgid "Contingency Coefficient"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2004
+#: src/language/stats/crosstabs.q:2005
 msgid "Kendall's tau-b"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2005
+#: src/language/stats/crosstabs.q:2006
 msgid "Kendall's tau-c"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2006
+#: src/language/stats/crosstabs.q:2007
 msgid "Gamma"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2007
+#: src/language/stats/crosstabs.q:2008
 msgid "Spearman Correlation"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2008
+#: src/language/stats/crosstabs.q:2009
 msgid "Pearson's R"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2009
+#: src/language/stats/crosstabs.q:2010
 msgid "Kappa"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2079
+#: src/language/stats/crosstabs.q:2080
 #, c-format
 msgid "Odds Ratio for %s (%g / %g)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2082
+#: src/language/stats/crosstabs.q:2083
 #, c-format
 msgid "Odds Ratio for %s (%.*s / %.*s)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2090
+#: src/language/stats/crosstabs.q:2091
 #, c-format
 msgid "For cohort %s = %g"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2093
+#: src/language/stats/crosstabs.q:2094
 #, c-format
 msgid "For cohort %s = %.*s"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2124
+#: src/language/stats/crosstabs.q:2125
 msgid "Nominal by Interval"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2129
+#: src/language/stats/crosstabs.q:2130
 msgid "Lambda"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2130
+#: src/language/stats/crosstabs.q:2131
 msgid "Goodman and Kruskal tau"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2131
+#: src/language/stats/crosstabs.q:2132
 msgid "Uncertainty Coefficient"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2132
+#: src/language/stats/crosstabs.q:2133
 msgid "Somers' d"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2133
+#: src/language/stats/crosstabs.q:2134
 msgid "Eta"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2138
+#: src/language/stats/crosstabs.q:2139
 msgid "Symmetric"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2139 src/language/stats/crosstabs.q:2140
+#: src/language/stats/crosstabs.q:2140 src/language/stats/crosstabs.q:2141
 #, c-format
 msgid "%s Dependent"
 msgstr ""
 
-#: src/language/stats/descriptives.c:107 src/language/stats/examine.q:1485
+#: src/language/stats/descriptives.c:108 src/language/stats/examine.q:1485
 #: src/language/stats/frequencies.q:123 src/language/stats/oneway.q:404
 #: src/language/stats/t-test.q:689 src/language/stats/t-test.q:712
 #: src/language/stats/t-test.q:835 src/language/stats/t-test.q:1172
 msgid "Mean"
 msgstr ""
 
-#: src/language/stats/descriptives.c:108
+#: src/language/stats/descriptives.c:109
 msgid "S E Mean"
 msgstr ""
 
-#: src/language/stats/descriptives.c:109 src/language/stats/frequencies.q:127
+#: src/language/stats/descriptives.c:110 src/language/stats/frequencies.q:127
 msgid "Std Dev"
 msgstr ""
 
-#: src/language/stats/descriptives.c:110 src/language/stats/examine.q:1565
+#: src/language/stats/descriptives.c:111 src/language/stats/examine.q:1565
 #: src/language/stats/frequencies.q:128
 msgid "Variance"
 msgstr ""
 
-#: src/language/stats/descriptives.c:111 src/language/stats/examine.q:1672
+#: src/language/stats/descriptives.c:112 src/language/stats/examine.q:1672
 #: src/language/stats/frequencies.q:129
 msgid "Kurtosis"
 msgstr ""
 
-#: src/language/stats/descriptives.c:112
+#: src/language/stats/descriptives.c:113
 msgid "S E Kurt"
 msgstr ""
 
-#: src/language/stats/descriptives.c:113 src/language/stats/examine.q:1652
+#: src/language/stats/descriptives.c:114 src/language/stats/examine.q:1652
 #: src/language/stats/frequencies.q:131
 msgid "Skewness"
 msgstr ""
 
-#: src/language/stats/descriptives.c:114
+#: src/language/stats/descriptives.c:115
 msgid "S E Skew"
 msgstr ""
 
-#: src/language/stats/descriptives.c:115 src/language/stats/examine.q:1613
+#: src/language/stats/descriptives.c:116 src/language/stats/examine.q:1613
 #: src/language/stats/frequencies.q:133
 msgid "Range"
 msgstr ""
 
-#: src/language/stats/descriptives.c:116 src/language/stats/examine.q:1590
+#: src/language/stats/descriptives.c:117 src/language/stats/examine.q:1590
 #: src/language/stats/frequencies.q:134 src/language/stats/oneway.q:416
 msgid "Minimum"
 msgstr ""
 
-#: src/language/stats/descriptives.c:117 src/language/stats/examine.q:1601
+#: src/language/stats/descriptives.c:118 src/language/stats/examine.q:1601
 #: src/language/stats/frequencies.q:135 src/language/stats/oneway.q:417
 msgid "Maximum"
 msgstr ""
 
-#: src/language/stats/descriptives.c:118 src/language/stats/frequencies.q:136
+#: src/language/stats/descriptives.c:119 src/language/stats/frequencies.q:136
 msgid "Sum"
 msgstr ""
 
-#: src/language/stats/descriptives.c:343
+#: src/language/stats/descriptives.c:344
 #, c-format
 msgid "Z-score variable name %s would be a duplicate variable name."
 msgstr ""
 
-#: src/language/stats/descriptives.c:445
+#: src/language/stats/descriptives.c:446
 msgid "expecting statistic name: reverting to default"
 msgstr ""
 
-#: src/language/stats/descriptives.c:517
+#: src/language/stats/descriptives.c:518
 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 ""
 
-#: src/language/stats/descriptives.c:548
+#: src/language/stats/descriptives.c:550
 msgid "Mapping of variables to corresponding Z-scores."
 msgstr ""
 
-#: src/language/stats/descriptives.c:553
+#: src/language/stats/descriptives.c:555
 msgid "Source"
 msgstr ""
 
-#: src/language/stats/descriptives.c:554
+#: src/language/stats/descriptives.c:556
 msgid "Target"
 msgstr ""
 
-#: src/language/stats/descriptives.c:672 src/language/stats/descriptives.c:678
+#: src/language/stats/descriptives.c:674 src/language/stats/descriptives.c:680
 msgid "Z-score of "
 msgstr ""
 
-#: src/language/stats/descriptives.c:897
+#: src/language/stats/descriptives.c:900
 msgid "Valid N"
 msgstr ""
 
-#: src/language/stats/descriptives.c:898
+#: src/language/stats/descriptives.c:901
 msgid "Missing N"
 msgstr ""
 
-#: src/language/stats/descriptives.c:925
+#: src/language/stats/descriptives.c:928
 #, c-format
 msgid "Valid cases = %g; cases with missing value(s) = %g."
 msgstr ""
@@ -3316,46 +3321,46 @@ msgstr ""
 msgid "%s of %s"
 msgstr ""
 
-#: src/language/stats/rank.q:710
+#: src/language/stats/rank.q:718
 msgid "Cannot create new rank variable.  All candidates in use."
 msgstr ""
 
-#: src/language/stats/rank.q:810
+#: src/language/stats/rank.q:818
 msgid "Variables Created By RANK"
 msgstr ""
 
-#: src/language/stats/rank.q:834
+#: src/language/stats/rank.q:842
 #, c-format
 msgid "%s into %s(%s of %s using %s BY %s)"
 msgstr ""
 
-#: src/language/stats/rank.q:845
+#: src/language/stats/rank.q:853
 #, c-format
 msgid "%s into %s(%s of %s BY %s)"
 msgstr ""
 
-#: src/language/stats/rank.q:859
+#: src/language/stats/rank.q:867
 #, c-format
 msgid "%s into %s(%s of %s using %s)"
 msgstr ""
 
-#: src/language/stats/rank.q:869
+#: src/language/stats/rank.q:877
 #, c-format
 msgid "%s into %s(%s of %s)"
 msgstr ""
 
-#: src/language/stats/rank.q:882
+#: src/language/stats/rank.q:890
 msgid ""
 "FRACTION has been specified, but NORMAL and PROPORTION rank functions have "
 "not been requested.  The FRACTION subcommand will be ignored."
 msgstr ""
 
-#: src/language/stats/rank.q:974
+#: src/language/stats/rank.q:982
 #, c-format
 msgid "Variable %s already exists."
 msgstr ""
 
-#: src/language/stats/rank.q:979
+#: src/language/stats/rank.q:987
 msgid "Too many variables in INTO clause."
 msgstr ""
 
@@ -3723,20 +3728,20 @@ msgstr ""
 msgid "Document entered %s by %s:"
 msgstr ""
 
-#: src/language/xforms/compute.c:143 src/language/xforms/compute.c:190
+#: src/language/xforms/compute.c:144 src/language/xforms/compute.c:191
 #, c-format
 msgid ""
 "When executing COMPUTE: SYSMIS is not a valid value as an index into vector %"
 "s."
 msgstr ""
 
-#: src/language/xforms/compute.c:146 src/language/xforms/compute.c:197
+#: src/language/xforms/compute.c:147 src/language/xforms/compute.c:198
 #, c-format
 msgid ""
 "When executing COMPUTE: %g is not a valid value as an index into vector %s."
 msgstr ""
 
-#: src/language/xforms/compute.c:331
+#: src/language/xforms/compute.c:333
 #, c-format
 msgid "There is no vector named %s."
 msgstr ""
@@ -3745,40 +3750,40 @@ msgstr ""
 msgid "Destination cannot be a string variable."
 msgstr ""
 
-#: src/language/xforms/recode.c:247
+#: src/language/xforms/recode.c:248
 msgid ""
 "Inconsistent target variable types.  Target variables must be all numeric or "
 "all string."
 msgstr ""
 
-#: src/language/xforms/recode.c:267
+#: src/language/xforms/recode.c:268
 msgid "CONVERT requires string input values and numeric output values."
 msgstr ""
 
-#: src/language/xforms/recode.c:385
+#: src/language/xforms/recode.c:386
 msgid "expecting output value"
 msgstr ""
 
-#: src/language/xforms/recode.c:432
+#: src/language/xforms/recode.c:433
 #, c-format
 msgid ""
 "%u variable(s) cannot be recoded into %u variable(s).  Specify the same "
 "number of variables as source and target variables."
 msgstr ""
 
-#: src/language/xforms/recode.c:448
+#: src/language/xforms/recode.c:449
 #, 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:463
+#: src/language/xforms/recode.c:464
 #, c-format
 msgid "INTO is required with %s input values and %s output values."
 msgstr ""
 
-#: src/language/xforms/recode.c:476
+#: src/language/xforms/recode.c:477
 #, c-format
 msgid "Type mismatch.  Cannot store %s data in %s variable %s."
 msgstr ""
@@ -3804,7 +3809,7 @@ msgstr ""
 msgid "The filter variable may not be scratch."
 msgstr ""
 
-#: src/libpspp/hash.c:601
+#: src/libpspp/hash.c:617
 #, c-format
 msgid "hash table:"
 msgstr ""
@@ -3983,16 +3988,16 @@ msgstr ""
 msgid "PSPP Output"
 msgstr ""
 
-#: src/output/html.c:168
+#: src/output/html.c:170
 #, c-format
 msgid "unknown configuration parameter `%s' for HTML device driver"
 msgstr ""
 
-#: src/output/html.c:184
+#: src/output/html.c:186
 msgid "`chart-files' value must contain `#'"
 msgstr ""
 
-#: src/output/html.c:382
+#: src/output/html.c:384
 #, c-format
 msgid "creating \"%s\""
 msgstr ""
@@ -4223,12 +4228,12 @@ msgstr ""
 msgid "invalid numeric format"
 msgstr ""
 
-#: src/output/table.c:231
+#: src/output/table.c:232
 #, c-format
 msgid "bad vline: x=%d+%d=%d y=(%d+%d=%d,%d+%d=%d) in table size (%d,%d)\n"
 msgstr ""
 
-#: src/output/table.c:302
+#: src/output/table.c:303
 #, c-format
 msgid ""
 "bad box: (%d+%d=%d,%d+%d=%d)-(%d+%d=%d,%d+%d=%d) in table size (%d,%d)\n"
index 88294177cdc00748cf08da2949e2a656a34d1770..ebefd7c0ca314d4c36e40512c30c793dea7b6aeb 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: pspp-dev@gnu.org\n"
-"POT-Creation-Date: 2006-10-06 17:58+0800\n"
+"POT-Creation-Date: 2006-10-19 16:31+0800\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -405,7 +405,7 @@ msgstr ""
 #: src/data/sys-file-reader.c:1368 src/data/sys-file-reader.c:1369
 #: src/data/variable.c:42 src/language/dictionary/apply-dictionary.c:76
 #: src/language/dictionary/apply-dictionary.c:77
-#: src/language/xforms/recode.c:478 src/language/xforms/recode.c:479
+#: src/language/xforms/recode.c:479 src/language/xforms/recode.c:480
 msgid "numeric"
 msgstr ""
 
@@ -414,7 +414,7 @@ msgstr ""
 #: src/data/variable.c:42 src/data/variable.c:50
 #: src/language/dictionary/apply-dictionary.c:76
 #: src/language/dictionary/apply-dictionary.c:77
-#: src/language/xforms/recode.c:478 src/language/xforms/recode.c:479
+#: src/language/xforms/recode.c:479 src/language/xforms/recode.c:480
 msgid "string"
 msgstr ""
 
@@ -982,94 +982,99 @@ msgstr ""
 msgid "scratch"
 msgstr ""
 
-#: src/language/command.c:185
+#: src/language/command.c:183
+#, c-format
+msgid "%s is unimplemented."
+msgstr ""
+
+#: src/language/command.c:188
 #, c-format
 msgid "%s may be used only in testing mode."
 msgstr ""
 
-#: src/language/command.c:190
+#: src/language/command.c:193
 #, c-format
 msgid "%s may be used only in enhanced syntax mode."
 msgstr ""
 
-#: src/language/command.c:444
+#: src/language/command.c:447
 msgid "expecting command name"
 msgstr ""
 
-#: src/language/command.c:458
+#: src/language/command.c:461
 #, c-format
 msgid "Unknown command %s."
 msgstr ""
 
-#: src/language/command.c:584
+#: src/language/command.c:587
 msgid "before the active file has been defined"
 msgstr ""
 
-#: src/language/command.c:586
+#: src/language/command.c:589
 msgid "after the active file has been defined"
 msgstr ""
 
-#: src/language/command.c:588
+#: src/language/command.c:591
 msgid "inside INPUT PROGRAM"
 msgstr ""
 
-#: src/language/command.c:590
+#: src/language/command.c:593
 msgid "inside FILE TYPE"
 msgstr ""
 
-#: src/language/command.c:595
+#: src/language/command.c:598
 #, c-format
 msgid "%s or %s"
 msgstr ""
 
-#: src/language/command.c:597
+#: src/language/command.c:600
 #, c-format
 msgid "%s, %s, or %s"
 msgstr ""
 
-#: src/language/command.c:601
+#: src/language/command.c:604
 #, c-format
 msgid "%s is allowed only %s."
 msgstr ""
 
-#: src/language/command.c:606
+#: src/language/command.c:609
 #, c-format
 msgid "%s is not allowed inside INPUT PROGRAM."
 msgstr ""
 
-#: src/language/command.c:608
+#: src/language/command.c:611
 #, c-format
 msgid "%s is not allowed inside FILE TYPE."
 msgstr ""
 
-#: src/language/command.c:686 src/language/command.c:817
+#: src/language/command.c:689 src/language/command.c:820
 #: src/language/utilities/permissions.c:102
 msgid "This command not allowed when the SAFER option is set."
 msgstr ""
 
-#: src/language/command.c:698
+#: src/language/command.c:701
 #, c-format
 msgid "Error removing `%s': %s."
 msgstr ""
 
-#: src/language/command.c:748
+#: src/language/command.c:751
 #, c-format
 msgid "Couldn't fork: %s."
 msgstr ""
 
-#: src/language/command.c:790
+#: src/language/command.c:793
 #, c-format
 msgid "Error executing command: %s."
 msgstr ""
 
-#: src/language/command.c:799 src/language/data-io/matrix-data.c:539
+#: src/language/command.c:802 src/language/data-io/matrix-data.c:539
 #: src/language/data-io/print-space.c:76 src/language/dictionary/vector.c:201
 #: src/language/lexer/lexer.c:453 src/language/stats/autorecode.c:154
 #: src/language/xforms/select-if.c:62
 msgid "expecting end of command"
 msgstr ""
 
-#: src/language/command.c:838
+#: src/language/command.c:841
 msgid "No operating system support for this command."
 msgstr ""
 
@@ -1136,80 +1141,80 @@ msgstr ""
 msgid "Only one of FIXED, FREE, or LIST may be specified."
 msgstr ""
 
-#: src/language/data-io/data-list.c:336 src/language/data-io/data-list.c:471
+#: src/language/data-io/data-list.c:337 src/language/data-io/data-list.c:472
 #, c-format
 msgid "%s is a duplicate variable name."
 msgstr ""
 
-#: src/language/data-io/data-list.c:343
+#: src/language/data-io/data-list.c:344
 #, c-format
 msgid "There is already a variable %s of a different type."
 msgstr ""
 
-#: src/language/data-io/data-list.c:350
+#: src/language/data-io/data-list.c:351
 #, c-format
 msgid "There is already a string variable %s of a different width."
 msgstr ""
 
-#: src/language/data-io/data-list.c:371
+#: src/language/data-io/data-list.c:372
 msgid "At least one variable must be specified."
 msgstr ""
 
-#: src/language/data-io/data-list.c:378
+#: src/language/data-io/data-list.c:379
 msgid ""
 "Variables are specified on records that should not exist according to "
 "RECORDS subcommand."
 msgstr ""
 
-#: src/language/data-io/data-list.c:403 src/language/data-io/data-list.c:503
+#: src/language/data-io/data-list.c:404 src/language/data-io/data-list.c:504
 #: src/language/data-io/print.c:370 src/language/dictionary/split-file.c:84
 #: src/language/dictionary/sys-file-info.c:144
 #: src/language/dictionary/sys-file-info.c:378
-#: src/language/stats/descriptives.c:894
+#: src/language/stats/descriptives.c:897
 msgid "Variable"
 msgstr ""
 
-#: src/language/data-io/data-list.c:404 src/language/data-io/print.c:371
+#: src/language/data-io/data-list.c:405 src/language/data-io/print.c:371
 msgid "Record"
 msgstr ""
 
-#: src/language/data-io/data-list.c:405 src/language/data-io/print.c:372
+#: src/language/data-io/data-list.c:406 src/language/data-io/print.c:372
 #: src/ui/gui/var-sheet.c:78
 msgid "Columns"
 msgstr ""
 
-#: src/language/data-io/data-list.c:406 src/language/data-io/data-list.c:504
+#: src/language/data-io/data-list.c:407 src/language/data-io/data-list.c:505
 #: src/language/data-io/print.c:373
 msgid "Format"
 msgstr ""
 
-#: src/language/data-io/data-list.c:422
+#: src/language/data-io/data-list.c:423
 #, c-format
 msgid "Reading %d record from %s."
 msgid_plural "Reading %d records from %s."
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/language/data-io/data-list.c:517
+#: src/language/data-io/data-list.c:518
 #, c-format
 msgid "Reading free-form data from %s."
 msgstr ""
 
-#: src/language/data-io/data-list.c:563
+#: src/language/data-io/data-list.c:564
 msgid "Quoted string extends beyond end of line."
 msgstr ""
 
-#: src/language/data-io/data-list.c:648
+#: src/language/data-io/data-list.c:649
 #, c-format
 msgid "Partial case of %d of %d records discarded."
 msgstr ""
 
-#: src/language/data-io/data-list.c:697
+#: src/language/data-io/data-list.c:698
 #, c-format
 msgid "Partial case discarded.  The first variable missing was %s."
 msgstr ""
 
-#: src/language/data-io/data-list.c:733
+#: src/language/data-io/data-list.c:734
 #, c-format
 msgid ""
 "Missing value(s) for all variables from %s onward.  These will be filled "
@@ -1310,17 +1315,17 @@ msgstr ""
 msgid "expecting COMM or TAPE"
 msgstr ""
 
-#: src/language/data-io/get.c:358 src/language/data-io/get.c:372
-#: src/language/data-io/get.c:397
+#: src/language/data-io/get.c:359 src/language/data-io/get.c:373
+#: src/language/data-io/get.c:398
 #, c-format
 msgid "expecting %s or %s"
 msgstr ""
 
-#: src/language/data-io/get.c:606 src/language/data-io/print.c:174
+#: src/language/data-io/get.c:607 src/language/data-io/print.c:174
 msgid "expecting a valid subcommand"
 msgstr ""
 
-#: src/language/data-io/get.c:639
+#: src/language/data-io/get.c:640
 #, c-format
 msgid ""
 "Cannot rename %s as %s because there already exists a variable named %s.  To "
@@ -1328,75 +1333,75 @@ msgid ""
 "as \"/RENAME (A=B)(B=C)(C=A)\", or equivalently, \"/RENAME (A B C=B C A)\"."
 msgstr ""
 
-#: src/language/data-io/get.c:664
+#: src/language/data-io/get.c:665
 msgid "`=' expected after variable list."
 msgstr ""
 
-#: src/language/data-io/get.c:671
+#: src/language/data-io/get.c:672
 #, c-format
 msgid ""
 "Number of variables on left side of `=' (%d) does not match number of "
 "variables on right side (%d), in parenthesized group %d of RENAME subcommand."
 msgstr ""
 
-#: src/language/data-io/get.c:684
+#: src/language/data-io/get.c:685
 #, c-format
 msgid "Requested renaming duplicates variable name %s."
 msgstr ""
 
-#: src/language/data-io/get.c:714
+#: src/language/data-io/get.c:715
 msgid "Cannot DROP all variables from dictionary."
 msgstr ""
 
-#: src/language/data-io/get.c:891
+#: src/language/data-io/get.c:892
 msgid "The active file may not be specified more than once."
 msgstr ""
 
-#: src/language/data-io/get.c:899
+#: src/language/data-io/get.c:900
 msgid "Cannot specify the active file since no active file has been defined."
 msgstr ""
 
-#: src/language/data-io/get.c:906
+#: src/language/data-io/get.c:907
 msgid ""
 "MATCH FILES may not be used after TEMPORARY when the active file is an input "
 "source.  Temporary transformations will be made permanent."
 msgstr ""
 
-#: src/language/data-io/get.c:942
+#: src/language/data-io/get.c:943
 msgid "Multiple IN subcommands for a single FILE or TABLE."
 msgstr ""
 
-#: src/language/data-io/get.c:962
+#: src/language/data-io/get.c:963
 msgid "BY may appear at most once."
 msgstr ""
 
-#: src/language/data-io/get.c:982
+#: src/language/data-io/get.c:983
 #, c-format
 msgid "File %s lacks BY variable %s."
 msgstr ""
 
-#: src/language/data-io/get.c:996
+#: src/language/data-io/get.c:997
 msgid "FIRST may appear at most once."
 msgstr ""
 
-#: src/language/data-io/get.c:1010
+#: src/language/data-io/get.c:1011
 msgid "LAST may appear at most once."
 msgstr ""
 
-#: src/language/data-io/get.c:1051
+#: src/language/data-io/get.c:1052
 msgid "BY is required when TABLE is specified."
 msgstr ""
 
-#: src/language/data-io/get.c:1056
+#: src/language/data-io/get.c:1057
 msgid "BY is required when IN is specified."
 msgstr ""
 
-#: src/language/data-io/get.c:1084
+#: src/language/data-io/get.c:1085
 #, c-format
 msgid "IN variable name %s duplicates an existing variable name."
 msgstr ""
 
-#: src/language/data-io/get.c:1538
+#: src/language/data-io/get.c:1541
 #, c-format
 msgid ""
 "Variable %s in file %s (%s) has different type or width from the same "
@@ -1411,16 +1416,16 @@ msgstr ""
 msgid "Input program did not create any variables."
 msgstr ""
 
-#: src/language/data-io/inpt-pgm.c:337
+#: src/language/data-io/inpt-pgm.c:338
 msgid "COLUMN subcommand multiply specified."
 msgstr ""
 
-#: src/language/data-io/inpt-pgm.c:384
+#: src/language/data-io/inpt-pgm.c:385
 msgid ""
 "REREAD: Column numbers must be positive finite numbers.  Column set to 1."
 msgstr ""
 
-#: src/language/data-io/list.q:152 src/language/stats/descriptives.c:361
+#: src/language/data-io/list.q:152 src/language/stats/descriptives.c:362
 msgid "No variables specified."
 msgstr ""
 
@@ -1560,79 +1565,79 @@ msgstr ""
 msgid "No continuous variables specified."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:840
+#: src/language/data-io/matrix-data.c:841
 msgid "Scope of string exceeds line."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:901
+#: src/language/data-io/matrix-data.c:902
 #, c-format
 msgid "End of line expected %s while reading %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1090
+#: src/language/data-io/matrix-data.c:1091
 #, c-format
 msgid "expecting value for %s %s"
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1255
+#: src/language/data-io/matrix-data.c:1256
 #, c-format
 msgid "Syntax error expecting SPLIT FILE value %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1264
+#: src/language/data-io/matrix-data.c:1265
 #, c-format
 msgid "Expecting value %g for %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1305
-#: src/language/data-io/matrix-data.c:1782
+#: src/language/data-io/matrix-data.c:1306
+#: src/language/data-io/matrix-data.c:1784
 #, c-format
 msgid "Syntax error expecting factor value %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1314
+#: src/language/data-io/matrix-data.c:1315
 #, c-format
 msgid "Syntax error expecting value %g for %s %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1558
+#: src/language/data-io/matrix-data.c:1560
 #, c-format
 msgid "Syntax error %s expecting SPLIT FILE value."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1687
+#: src/language/data-io/matrix-data.c:1689
 #, c-format
 msgid ""
 "Expected %d lines of data for %s content; actually saw %d lines.  No data "
 "will be output for this content."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1724
+#: src/language/data-io/matrix-data.c:1726
 #, c-format
 msgid "Multiply specified ROWTYPE_ %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1729
+#: src/language/data-io/matrix-data.c:1731
 #, c-format
 msgid "Syntax error %s expecting ROWTYPE_ string."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1749
+#: src/language/data-io/matrix-data.c:1751
 #, c-format
 msgid "Syntax error %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1900
+#: src/language/data-io/matrix-data.c:1902
 #, c-format
 msgid "Duplicate specification for %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1912
+#: src/language/data-io/matrix-data.c:1914
 #, c-format
 msgid "Too many rows of matrix data for %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1956
+#: src/language/data-io/matrix-data.c:1958
 #, c-format
 msgid "Syntax error expecting value for %s %s."
 msgstr ""
@@ -1696,11 +1701,11 @@ msgid_plural "Writing %d records."
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/language/data-io/print-space.c:116
+#: src/language/data-io/print-space.c:117
 msgid "The expression on PRINT SPACE evaluated to the system-missing value."
 msgstr ""
 
-#: src/language/data-io/print-space.c:119
+#: src/language/data-io/print-space.c:120
 #, c-format
 msgid "The expression on PRINT SPACE evaluated to %g."
 msgstr ""
@@ -1735,7 +1740,7 @@ msgid "`)' expected after output format."
 msgstr ""
 
 #: src/language/dictionary/missing-values.c:57
-#: src/language/stats/aggregate.c:447
+#: src/language/stats/aggregate.c:450
 msgid "expecting `('"
 msgstr ""
 
@@ -1876,8 +1881,8 @@ msgstr ""
 
 #: src/language/dictionary/split-file.c:85
 #: src/language/dictionary/sys-file-info.c:523
-#: src/language/stats/crosstabs.q:1115 src/language/stats/crosstabs.q:1142
-#: src/language/stats/crosstabs.q:1162 src/language/stats/crosstabs.q:1184
+#: src/language/stats/crosstabs.q:1116 src/language/stats/crosstabs.q:1143
+#: src/language/stats/crosstabs.q:1163 src/language/stats/crosstabs.q:1185
 #: src/language/stats/examine.q:1149 src/language/stats/frequencies.q:1177
 #: src/language/stats/frequencies.q:1301
 msgid "Value"
@@ -2172,7 +2177,7 @@ msgstr ""
 msgid "Unknown identifier %s."
 msgstr ""
 
-#: src/language/expressions/parse.c:854 src/language/stats/aggregate.c:503
+#: src/language/expressions/parse.c:854 src/language/stats/aggregate.c:506
 msgid "expecting `)'"
 msgstr ""
 
@@ -2246,7 +2251,7 @@ msgstr ""
 msgid "%s is not yet implemented."
 msgstr ""
 
-#: src/language/expressions/parse.c:1235
+#: src/language/expressions/parse.c:1236
 #, c-format
 msgid "%s may not appear after TEMPORARY."
 msgstr ""
@@ -2307,50 +2312,50 @@ msgstr ""
 msgid "expecting identifier"
 msgstr ""
 
-#: src/language/lexer/lexer.c:861
+#: src/language/lexer/lexer.c:862
 msgid "<ERROR>"
 msgstr ""
 
-#: src/language/lexer/lexer.c:1007
+#: src/language/lexer/lexer.c:1008
 msgid "binary"
 msgstr ""
 
-#: src/language/lexer/lexer.c:1012
+#: src/language/lexer/lexer.c:1013
 msgid "octal"
 msgstr ""
 
-#: src/language/lexer/lexer.c:1017
+#: src/language/lexer/lexer.c:1018
 msgid "hex"
 msgstr ""
 
-#: src/language/lexer/lexer.c:1027
+#: src/language/lexer/lexer.c:1028
 #, c-format
 msgid "String of %s digits has %d characters, which is not a multiple of %d."
 msgstr ""
 
-#: src/language/lexer/lexer.c:1056
+#: src/language/lexer/lexer.c:1057
 #, c-format
 msgid "`%c' is not a valid %s digit."
 msgstr ""
 
-#: src/language/lexer/lexer.c:1087
+#: src/language/lexer/lexer.c:1088
 msgid "Unterminated string constant."
 msgstr ""
 
-#: src/language/lexer/lexer.c:1141
+#: src/language/lexer/lexer.c:1142
 msgid "Unexpected end of file in string concatenation."
 msgstr ""
 
-#: src/language/lexer/lexer.c:1149
+#: src/language/lexer/lexer.c:1150
 msgid "String expected following `+'."
 msgstr ""
 
-#: src/language/lexer/lexer.c:1162
+#: src/language/lexer/lexer.c:1163
 #, c-format
 msgid "String exceeds 255 characters in length (%d characters)."
 msgstr ""
 
-#: src/language/lexer/lexer.c:1177
+#: src/language/lexer/lexer.c:1178
 msgid ""
 "Sorry, literal strings may not contain null characters.  Replacing with "
 "spaces."
@@ -2486,40 +2491,40 @@ msgid ""
 "has no effect.  Output data will be sorted the same way as the input data."
 msgstr ""
 
-#: src/language/stats/aggregate.c:416
+#: src/language/stats/aggregate.c:419
 msgid "expecting aggregation function"
 msgstr ""
 
-#: src/language/stats/aggregate.c:432
+#: src/language/stats/aggregate.c:435
 #, c-format
 msgid "Unknown aggregation function %s."
 msgstr ""
 
-#: src/language/stats/aggregate.c:484
+#: src/language/stats/aggregate.c:487
 #, c-format
 msgid "Missing argument %d to %s."
 msgstr ""
 
-#: src/language/stats/aggregate.c:493
+#: src/language/stats/aggregate.c:496
 #, c-format
 msgid "Arguments to %s must be of same type as source variables."
 msgstr ""
 
-#: src/language/stats/aggregate.c:515
+#: src/language/stats/aggregate.c:518
 #, c-format
 msgid ""
 "Number of source variables (%u) does not match number of target variables (%"
 "u)."
 msgstr ""
 
-#: src/language/stats/aggregate.c:531
+#: src/language/stats/aggregate.c:534
 #, 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:598
+#: src/language/stats/aggregate.c:601
 #, c-format
 msgid ""
 "Variable name %s is not unique within the aggregate file dictionary, which "
@@ -2567,380 +2572,380 @@ msgstr ""
 msgid "Maximum value (%ld) less than minimum value (%ld)."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:816
+#: src/language/stats/crosstabs.q:817
 msgid "Summary."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:818 src/language/stats/examine.q:934
+#: src/language/stats/crosstabs.q:819 src/language/stats/examine.q:934
 msgid "Cases"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:819 src/language/stats/examine.q:868
+#: src/language/stats/crosstabs.q:820 src/language/stats/examine.q:868
 #: src/language/stats/frequencies.q:1175 src/language/stats/frequencies.q:1551
 msgid "Valid"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:820 src/language/stats/examine.q:869
+#: src/language/stats/crosstabs.q:821 src/language/stats/examine.q:869
 #: src/language/stats/frequencies.q:1244 src/language/stats/frequencies.q:1552
 #: src/ui/gui/var-sheet.c:77
 msgid "Missing"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:821 src/language/stats/crosstabs.q:1024
-#: src/language/stats/crosstabs.q:1744 src/language/stats/examine.q:870
+#: src/language/stats/crosstabs.q:822 src/language/stats/crosstabs.q:1025
+#: src/language/stats/crosstabs.q:1745 src/language/stats/examine.q:870
 #: src/language/stats/frequencies.q:1253 src/language/stats/oneway.q:317
 #: src/language/stats/oneway.q:481 src/language/stats/regression.q:314
 msgid "Total"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:831 src/language/stats/examine.q:946
+#: src/language/stats/crosstabs.q:832 src/language/stats/examine.q:946
 #: src/language/stats/frequencies.q:1550 src/language/stats/oneway.q:403
 #: src/language/stats/t-test.q:688 src/language/stats/t-test.q:711
 #: src/language/stats/t-test.q:836 src/language/stats/t-test.q:1371
 msgid "N"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:832 src/language/stats/examine.q:949
+#: src/language/stats/crosstabs.q:833 src/language/stats/examine.q:949
 #: src/language/stats/frequencies.q:1179 src/language/stats/frequencies.q:1180
 #: src/language/stats/frequencies.q:1181
 msgid "Percent"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1074
+#: src/language/stats/crosstabs.q:1075
 msgid "count"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1075
+#: src/language/stats/crosstabs.q:1076
 msgid "row %"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1076
+#: src/language/stats/crosstabs.q:1077
 msgid "column %"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1077
+#: src/language/stats/crosstabs.q:1078
 msgid "total %"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1078
+#: src/language/stats/crosstabs.q:1079
 msgid "expected"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1079
+#: src/language/stats/crosstabs.q:1080
 msgid "residual"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1080
+#: src/language/stats/crosstabs.q:1081
 msgid "std. resid."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1081
+#: src/language/stats/crosstabs.q:1082
 msgid "adj. resid."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1111
+#: src/language/stats/crosstabs.q:1112
 msgid "Chi-square tests."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1114 src/language/stats/crosstabs.q:1141
-#: src/language/stats/crosstabs.q:1161 src/language/stats/crosstabs.q:1182
+#: src/language/stats/crosstabs.q:1115 src/language/stats/crosstabs.q:1142
+#: src/language/stats/crosstabs.q:1162 src/language/stats/crosstabs.q:1183
 #: src/language/stats/examine.q:1380
 msgid "Statistic"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1116 src/language/stats/oneway.q:290
+#: src/language/stats/crosstabs.q:1117 src/language/stats/oneway.q:290
 #: src/language/stats/oneway.q:693 src/language/stats/regression.q:307
 #: src/language/stats/t-test.q:986 src/language/stats/t-test.q:1178
 #: src/language/stats/t-test.q:1270
 msgid "df"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1118
+#: src/language/stats/crosstabs.q:1119
 msgid "Asymp. Sig. (2-sided)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1120
+#: src/language/stats/crosstabs.q:1121
 msgid "Exact. Sig. (2-sided)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1122
+#: src/language/stats/crosstabs.q:1123
 msgid "Exact. Sig. (1-sided)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1137
+#: src/language/stats/crosstabs.q:1138
 msgid "Symmetric measures."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1140 src/language/stats/crosstabs.q:1181
+#: src/language/stats/crosstabs.q:1141 src/language/stats/crosstabs.q:1182
 msgid "Category"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1143 src/language/stats/crosstabs.q:1185
+#: src/language/stats/crosstabs.q:1144 src/language/stats/crosstabs.q:1186
 msgid "Asymp. Std. Error"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1144 src/language/stats/crosstabs.q:1186
+#: src/language/stats/crosstabs.q:1145 src/language/stats/crosstabs.q:1187
 msgid "Approx. T"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1145 src/language/stats/crosstabs.q:1187
+#: src/language/stats/crosstabs.q:1146 src/language/stats/crosstabs.q:1188
 msgid "Approx. Sig."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1156
+#: src/language/stats/crosstabs.q:1157
 msgid "Risk estimate."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1160
+#: src/language/stats/crosstabs.q:1161
 #, c-format
 msgid "95%% Confidence Interval"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1163 src/language/stats/t-test.q:990
+#: src/language/stats/crosstabs.q:1164 src/language/stats/t-test.q:990
 #: src/language/stats/t-test.q:1175 src/language/stats/t-test.q:1273
 msgid "Lower"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1164 src/language/stats/t-test.q:991
+#: src/language/stats/crosstabs.q:1165 src/language/stats/t-test.q:991
 #: src/language/stats/t-test.q:1176 src/language/stats/t-test.q:1274
 msgid "Upper"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1178
+#: src/language/stats/crosstabs.q:1179
 msgid "Directional measures."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1183 src/ui/gui/var-sheet.c:72
+#: src/language/stats/crosstabs.q:1184 src/ui/gui/var-sheet.c:72
 msgid "Type"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1936
+#: src/language/stats/crosstabs.q:1937
 msgid "Pearson Chi-Square"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1937
+#: src/language/stats/crosstabs.q:1938
 msgid "Likelihood Ratio"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1938
+#: src/language/stats/crosstabs.q:1939
 msgid "Fisher's Exact Test"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1939
+#: src/language/stats/crosstabs.q:1940
 msgid "Continuity Correction"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1940
+#: src/language/stats/crosstabs.q:1941
 msgid "Linear-by-Linear Association"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1977 src/language/stats/crosstabs.q:2047
-#: src/language/stats/crosstabs.q:2106
+#: src/language/stats/crosstabs.q:1978 src/language/stats/crosstabs.q:2048
+#: src/language/stats/crosstabs.q:2107
 msgid "N of Valid Cases"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1993 src/language/stats/crosstabs.q:2122
+#: src/language/stats/crosstabs.q:1994 src/language/stats/crosstabs.q:2123
 msgid "Nominal by Nominal"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1994 src/language/stats/crosstabs.q:2123
+#: src/language/stats/crosstabs.q:1995 src/language/stats/crosstabs.q:2124
 msgid "Ordinal by Ordinal"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1995
+#: src/language/stats/crosstabs.q:1996
 msgid "Interval by Interval"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1996
+#: src/language/stats/crosstabs.q:1997
 msgid "Measure of Agreement"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2001
+#: src/language/stats/crosstabs.q:2002
 msgid "Phi"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2002
+#: src/language/stats/crosstabs.q:2003
 msgid "Cramer's V"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2003
+#: src/language/stats/crosstabs.q:2004
 msgid "Contingency Coefficient"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2004
+#: src/language/stats/crosstabs.q:2005
 msgid "Kendall's tau-b"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2005
+#: src/language/stats/crosstabs.q:2006
 msgid "Kendall's tau-c"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2006
+#: src/language/stats/crosstabs.q:2007
 msgid "Gamma"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2007
+#: src/language/stats/crosstabs.q:2008
 msgid "Spearman Correlation"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2008
+#: src/language/stats/crosstabs.q:2009
 msgid "Pearson's R"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2009
+#: src/language/stats/crosstabs.q:2010
 msgid "Kappa"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2079
+#: src/language/stats/crosstabs.q:2080
 #, c-format
 msgid "Odds Ratio for %s (%g / %g)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2082
+#: src/language/stats/crosstabs.q:2083
 #, c-format
 msgid "Odds Ratio for %s (%.*s / %.*s)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2090
+#: src/language/stats/crosstabs.q:2091
 #, c-format
 msgid "For cohort %s = %g"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2093
+#: src/language/stats/crosstabs.q:2094
 #, c-format
 msgid "For cohort %s = %.*s"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2124
+#: src/language/stats/crosstabs.q:2125
 msgid "Nominal by Interval"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2129
+#: src/language/stats/crosstabs.q:2130
 msgid "Lambda"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2130
+#: src/language/stats/crosstabs.q:2131
 msgid "Goodman and Kruskal tau"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2131
+#: src/language/stats/crosstabs.q:2132
 msgid "Uncertainty Coefficient"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2132
+#: src/language/stats/crosstabs.q:2133
 msgid "Somers' d"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2133
+#: src/language/stats/crosstabs.q:2134
 msgid "Eta"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2138
+#: src/language/stats/crosstabs.q:2139
 msgid "Symmetric"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2139 src/language/stats/crosstabs.q:2140
+#: src/language/stats/crosstabs.q:2140 src/language/stats/crosstabs.q:2141
 #, c-format
 msgid "%s Dependent"
 msgstr ""
 
-#: src/language/stats/descriptives.c:107 src/language/stats/examine.q:1485
+#: src/language/stats/descriptives.c:108 src/language/stats/examine.q:1485
 #: src/language/stats/frequencies.q:123 src/language/stats/oneway.q:404
 #: src/language/stats/t-test.q:689 src/language/stats/t-test.q:712
 #: src/language/stats/t-test.q:835 src/language/stats/t-test.q:1172
 msgid "Mean"
 msgstr ""
 
-#: src/language/stats/descriptives.c:108
+#: src/language/stats/descriptives.c:109
 msgid "S E Mean"
 msgstr ""
 
-#: src/language/stats/descriptives.c:109 src/language/stats/frequencies.q:127
+#: src/language/stats/descriptives.c:110 src/language/stats/frequencies.q:127
 msgid "Std Dev"
 msgstr ""
 
-#: src/language/stats/descriptives.c:110 src/language/stats/examine.q:1565
+#: src/language/stats/descriptives.c:111 src/language/stats/examine.q:1565
 #: src/language/stats/frequencies.q:128
 msgid "Variance"
 msgstr ""
 
-#: src/language/stats/descriptives.c:111 src/language/stats/examine.q:1672
+#: src/language/stats/descriptives.c:112 src/language/stats/examine.q:1672
 #: src/language/stats/frequencies.q:129
 msgid "Kurtosis"
 msgstr ""
 
-#: src/language/stats/descriptives.c:112
+#: src/language/stats/descriptives.c:113
 msgid "S E Kurt"
 msgstr ""
 
-#: src/language/stats/descriptives.c:113 src/language/stats/examine.q:1652
+#: src/language/stats/descriptives.c:114 src/language/stats/examine.q:1652
 #: src/language/stats/frequencies.q:131
 msgid "Skewness"
 msgstr ""
 
-#: src/language/stats/descriptives.c:114
+#: src/language/stats/descriptives.c:115
 msgid "S E Skew"
 msgstr ""
 
-#: src/language/stats/descriptives.c:115 src/language/stats/examine.q:1613
+#: src/language/stats/descriptives.c:116 src/language/stats/examine.q:1613
 #: src/language/stats/frequencies.q:133
 msgid "Range"
 msgstr ""
 
-#: src/language/stats/descriptives.c:116 src/language/stats/examine.q:1590
+#: src/language/stats/descriptives.c:117 src/language/stats/examine.q:1590
 #: src/language/stats/frequencies.q:134 src/language/stats/oneway.q:416
 msgid "Minimum"
 msgstr ""
 
-#: src/language/stats/descriptives.c:117 src/language/stats/examine.q:1601
+#: src/language/stats/descriptives.c:118 src/language/stats/examine.q:1601
 #: src/language/stats/frequencies.q:135 src/language/stats/oneway.q:417
 msgid "Maximum"
 msgstr ""
 
-#: src/language/stats/descriptives.c:118 src/language/stats/frequencies.q:136
+#: src/language/stats/descriptives.c:119 src/language/stats/frequencies.q:136
 msgid "Sum"
 msgstr ""
 
-#: src/language/stats/descriptives.c:343
+#: src/language/stats/descriptives.c:344
 #, c-format
 msgid "Z-score variable name %s would be a duplicate variable name."
 msgstr ""
 
-#: src/language/stats/descriptives.c:445
+#: src/language/stats/descriptives.c:446
 msgid "expecting statistic name: reverting to default"
 msgstr ""
 
-#: src/language/stats/descriptives.c:517
+#: src/language/stats/descriptives.c:518
 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 ""
 
-#: src/language/stats/descriptives.c:548
+#: src/language/stats/descriptives.c:550
 msgid "Mapping of variables to corresponding Z-scores."
 msgstr ""
 
-#: src/language/stats/descriptives.c:553
+#: src/language/stats/descriptives.c:555
 msgid "Source"
 msgstr ""
 
-#: src/language/stats/descriptives.c:554
+#: src/language/stats/descriptives.c:556
 msgid "Target"
 msgstr ""
 
-#: src/language/stats/descriptives.c:672 src/language/stats/descriptives.c:678
+#: src/language/stats/descriptives.c:674 src/language/stats/descriptives.c:680
 msgid "Z-score of "
 msgstr ""
 
-#: src/language/stats/descriptives.c:897
+#: src/language/stats/descriptives.c:900
 msgid "Valid N"
 msgstr ""
 
-#: src/language/stats/descriptives.c:898
+#: src/language/stats/descriptives.c:901
 msgid "Missing N"
 msgstr ""
 
-#: src/language/stats/descriptives.c:925
+#: src/language/stats/descriptives.c:928
 #, c-format
 msgid "Valid cases = %g; cases with missing value(s) = %g."
 msgstr ""
@@ -3315,46 +3320,46 @@ msgstr ""
 msgid "%s of %s"
 msgstr ""
 
-#: src/language/stats/rank.q:710
+#: src/language/stats/rank.q:718
 msgid "Cannot create new rank variable.  All candidates in use."
 msgstr ""
 
-#: src/language/stats/rank.q:810
+#: src/language/stats/rank.q:818
 msgid "Variables Created By RANK"
 msgstr ""
 
-#: src/language/stats/rank.q:834
+#: src/language/stats/rank.q:842
 #, c-format
 msgid "%s into %s(%s of %s using %s BY %s)"
 msgstr ""
 
-#: src/language/stats/rank.q:845
+#: src/language/stats/rank.q:853
 #, c-format
 msgid "%s into %s(%s of %s BY %s)"
 msgstr ""
 
-#: src/language/stats/rank.q:859
+#: src/language/stats/rank.q:867
 #, c-format
 msgid "%s into %s(%s of %s using %s)"
 msgstr ""
 
-#: src/language/stats/rank.q:869
+#: src/language/stats/rank.q:877
 #, c-format
 msgid "%s into %s(%s of %s)"
 msgstr ""
 
-#: src/language/stats/rank.q:882
+#: src/language/stats/rank.q:890
 msgid ""
 "FRACTION has been specified, but NORMAL and PROPORTION rank functions have "
 "not been requested.  The FRACTION subcommand will be ignored."
 msgstr ""
 
-#: src/language/stats/rank.q:974
+#: src/language/stats/rank.q:982
 #, c-format
 msgid "Variable %s already exists."
 msgstr ""
 
-#: src/language/stats/rank.q:979
+#: src/language/stats/rank.q:987
 msgid "Too many variables in INTO clause."
 msgstr ""
 
@@ -3722,20 +3727,20 @@ msgstr ""
 msgid "Document entered %s by %s:"
 msgstr ""
 
-#: src/language/xforms/compute.c:143 src/language/xforms/compute.c:190
+#: src/language/xforms/compute.c:144 src/language/xforms/compute.c:191
 #, c-format
 msgid ""
 "When executing COMPUTE: SYSMIS is not a valid value as an index into vector %"
 "s."
 msgstr ""
 
-#: src/language/xforms/compute.c:146 src/language/xforms/compute.c:197
+#: src/language/xforms/compute.c:147 src/language/xforms/compute.c:198
 #, c-format
 msgid ""
 "When executing COMPUTE: %g is not a valid value as an index into vector %s."
 msgstr ""
 
-#: src/language/xforms/compute.c:331
+#: src/language/xforms/compute.c:333
 #, c-format
 msgid "There is no vector named %s."
 msgstr ""
@@ -3744,40 +3749,40 @@ msgstr ""
 msgid "Destination cannot be a string variable."
 msgstr ""
 
-#: src/language/xforms/recode.c:247
+#: src/language/xforms/recode.c:248
 msgid ""
 "Inconsistent target variable types.  Target variables must be all numeric or "
 "all string."
 msgstr ""
 
-#: src/language/xforms/recode.c:267
+#: src/language/xforms/recode.c:268
 msgid "CONVERT requires string input values and numeric output values."
 msgstr ""
 
-#: src/language/xforms/recode.c:385
+#: src/language/xforms/recode.c:386
 msgid "expecting output value"
 msgstr ""
 
-#: src/language/xforms/recode.c:432
+#: src/language/xforms/recode.c:433
 #, c-format
 msgid ""
 "%u variable(s) cannot be recoded into %u variable(s).  Specify the same "
 "number of variables as source and target variables."
 msgstr ""
 
-#: src/language/xforms/recode.c:448
+#: src/language/xforms/recode.c:449
 #, 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:463
+#: src/language/xforms/recode.c:464
 #, c-format
 msgid "INTO is required with %s input values and %s output values."
 msgstr ""
 
-#: src/language/xforms/recode.c:476
+#: src/language/xforms/recode.c:477
 #, c-format
 msgid "Type mismatch.  Cannot store %s data in %s variable %s."
 msgstr ""
@@ -3803,7 +3808,7 @@ msgstr ""
 msgid "The filter variable may not be scratch."
 msgstr ""
 
-#: src/libpspp/hash.c:601
+#: src/libpspp/hash.c:617
 #, c-format
 msgid "hash table:"
 msgstr ""
@@ -3982,16 +3987,16 @@ msgstr ""
 msgid "PSPP Output"
 msgstr ""
 
-#: src/output/html.c:168
+#: src/output/html.c:170
 #, c-format
 msgid "unknown configuration parameter `%s' for HTML device driver"
 msgstr ""
 
-#: src/output/html.c:184
+#: src/output/html.c:186
 msgid "`chart-files' value must contain `#'"
 msgstr ""
 
-#: src/output/html.c:382
+#: src/output/html.c:384
 #, c-format
 msgid "creating \"%s\""
 msgstr ""
@@ -4222,12 +4227,12 @@ msgstr ""
 msgid "invalid numeric format"
 msgstr ""
 
-#: src/output/table.c:231
+#: src/output/table.c:232
 #, c-format
 msgid "bad vline: x=%d+%d=%d y=(%d+%d=%d,%d+%d=%d) in table size (%d,%d)\n"
 msgstr ""
 
-#: src/output/table.c:302
+#: src/output/table.c:303
 #, c-format
 msgid ""
 "bad box: (%d+%d=%d,%d+%d=%d)-(%d+%d=%d,%d+%d=%d) in table size (%d,%d)\n"
index fb3632a948853b49c1a6a60223a7e8bb192c21d4..4e15a8ded0f16a223e88651139221df2f3d6eaf2 100644 (file)
@@ -1,3 +1,8 @@
+Thu Oct 19 22:59:56 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+       * procedure.c procedure.h: Encapsulated the static data into a single
+       struct.  
+
 Sat Oct 14 16:56:44 2006  Ben Pfaff  <blp@gnu.org>
 
        * casefile.c (casereader_read_xfer): Always initialize the case,
index a7ba0274aec8280d9d2a71c86329d20cee8bb375..6fe08f17d14c25e6cf2ea1e5be88d6881a2a4c55 100644 (file)
@@ -435,7 +435,7 @@ compare_var_ptrs (const void *a_, const void *b_, void *aux UNUSED)
 /* Deletes variable V from dictionary D and frees V.
 
    This is a very bad idea if there might be any pointers to V
-   from outside D.  In general, no variable in default_dict
+   from outside D.  In general, no variable in current_dataset->dict
    should be deleted when any transformations are active, because
    those transformations might reference the deleted variable.
    The safest time to delete a variable is just after a procedure
index 1843852a64f7b635b1a4d08ede407c43c6692e58..5341de4652a068e5794319c98b4720b0eccd6763 100644 (file)
 struct write_case_data
   {
     /* Function to call for each case. */
-    bool (*case_func) (const struct ccase *, void *);
+    case_func_t case_func;
     void *aux;
 
+    struct dataset *dataset;    /* The dataset concerned */
     struct ccase trns_case;     /* Case used for transformations. */
     struct ccase sink_case;     /* Case written to sink, if
                                    compacting is necessary. */
     size_t cases_written;       /* Cases output so far. */
   };
 
-/* Cases are read from proc_source,
-   pass through permanent_trns_chain (which transforms them into
-   the format described by permanent_dict),
-   are written to proc_sink,
-   pass through temporary_trns_chain (which transforms them into
-   the format described by default_dict),
-   and are finally passed to the procedure. */
-static struct case_source *proc_source;
-static struct trns_chain *permanent_trns_chain;
-static struct dictionary *permanent_dict;
-static struct case_sink *proc_sink;
-static struct trns_chain *temporary_trns_chain;
-struct dictionary *default_dict;
-
-/* The transformation chain that the next transformation will be
-   added to. */
-static struct trns_chain *cur_trns_chain;
-
-/* The compactor used to compact a case, if necessary;
-   otherwise a null pointer. */
-static struct dict_compactor *compactor;
-
-/* Time at which proc was last invoked. */
-static time_t last_proc_invocation;
-
-/* Lag queue. */
-int n_lag;                     /* Number of cases to lag. */
-static int lag_count;          /* Number of cases in lag_queue so far. */
-static int lag_head;           /* Index where next case will be added. */
-static struct ccase *lag_queue; /* Array of n_lag ccase * elements. */
-
-static void add_case_limit_trns (void);
-static void add_filter_trns (void);
-
-static bool internal_procedure (bool (*case_func) (const struct ccase *,
-                                                   void *),
+struct dataset {
+  /* Cases are read from proc_source,
+     pass through permanent_trns_chain (which transforms them into
+     the format described by permanent_dict),
+     are written to proc_sink,
+     pass through temporary_trns_chain (which transforms them into
+     the format described by dict),
+     and are finally passed to the procedure. */
+  struct case_source *proc_source;
+  struct trns_chain *permanent_trns_chain;
+  struct dictionary *permanent_dict;
+  struct case_sink *proc_sink;
+  struct trns_chain *temporary_trns_chain;
+  struct dictionary *dict;
+
+  /* The transformation chain that the next transformation will be
+     added to. */
+  struct trns_chain *cur_trns_chain;
+
+  /* The compactor used to compact a case, if necessary;
+     otherwise a null pointer. */
+  struct dict_compactor *compactor;
+
+  /* Time at which proc was last invoked. */
+  time_t last_proc_invocation;
+
+  /* Lag queue. */
+  int n_lag;                   /* Number of cases to lag. */
+  int lag_count;               /* Number of cases in lag_queue so far. */
+  int lag_head;                /* Index where next case will be added. */
+  struct ccase *lag_queue; /* Array of n_lag ccase * elements. */
+
+}; /* struct dataset */
+
+
+struct dataset *current_dataset;
+
+static void add_case_limit_trns (struct dataset *ds);
+static void add_filter_trns (struct dataset *ds);
+
+static bool internal_procedure (struct dataset *ds, case_func_t,
                                 bool (*end_func) (void *),
                                 void *aux);
-static void update_last_proc_invocation (void);
+static void update_last_proc_invocation (struct dataset *ds);
 static void create_trns_case (struct ccase *, struct dictionary *);
-static void open_active_file (void);
+static void open_active_file (struct dataset *ds);
 static bool write_case (struct write_case_data *wc_data);
-static void lag_case (const struct ccase *c);
-static void clear_case (struct ccase *c);
-static bool close_active_file (void);
+static void lag_case (struct dataset *ds, const struct ccase *c);
+static void clear_case (const struct dataset *ds, struct ccase *c);
+static bool close_active_file (struct dataset *ds);
 \f
 /* Public functions. */
 
 /* Returns the last time the data was read. */
 time_t
-time_of_last_procedure (void
+time_of_last_procedure (struct dataset *ds
 {
-  if (last_proc_invocation == 0)
-    update_last_proc_invocation ();
-  return last_proc_invocation;
+  if (ds->last_proc_invocation == 0)
+    update_last_proc_invocation (ds);
+  return ds->last_proc_invocation;
 }
 \f
 /* Regular procedure. */
 
+
+
 /* Reads the data from the input program and writes it to a new
    active file.  For each case we read from the input program, we
    do the following:
@@ -127,9 +135,9 @@ time_of_last_procedure (void)
 
    Returns true if successful, false if an I/O error occurred. */
 bool
-procedure (bool (*proc_func) (const struct ccase *, void *), void *aux)
+procedure (struct dataset *ds, case_func_t cf, void *aux)
 {
-  return internal_procedure (proc_func, NULL, aux);
+  return internal_procedure (ds, cf, NULL, aux);
 }
 \f
 /* Multipass procedure. */
@@ -163,17 +171,16 @@ multipass_end_func (void *aux_data_)
    The entire active file is passed to PROC_FUNC, with the given
    AUX as auxiliary data, as a unit. */
 bool
-multipass_procedure (bool (*proc_func) (const struct casefile *, void *aux),
-                     void *aux) 
+multipass_procedure (struct dataset *ds, casefile_func_t proc_func,  void *aux) 
 {
   struct multipass_aux_data aux_data;
   bool ok;
 
-  aux_data.casefile = fastfile_create (dict_get_next_value_idx (default_dict));
+  aux_data.casefile = fastfile_create (dict_get_next_value_idx (ds->dict));
   aux_data.proc_func = proc_func;
   aux_data.aux = aux;
 
-  ok = internal_procedure (multipass_case_func, multipass_end_func, &aux_data);
+  ok = internal_procedure (ds, multipass_case_func, multipass_end_func, &aux_data);
   ok = !casefile_error (aux_data.casefile) && ok;
 
   casefile_destroy (aux_data.casefile);
@@ -183,48 +190,50 @@ multipass_procedure (bool (*proc_func) (const struct casefile *, void *aux),
 \f
 /* Procedure implementation. */
 
+
 /* Executes a procedure.
    Passes each case to CASE_FUNC.
    Calls END_FUNC after the last case.
    Returns true if successful, false if an I/O error occurred (or
    if CASE_FUNC or END_FUNC ever returned false). */
 static bool
-internal_procedure (bool (*case_func) (const struct ccase *, void *),
+internal_procedure (struct dataset *ds, case_func_t case_func,
                     bool (*end_func) (void *),
                     void *aux) 
 {
   struct write_case_data wc_data;
   bool ok = true;
 
-  assert (proc_source != NULL);
+  assert (ds->proc_source != NULL);
 
-  update_last_proc_invocation ();
+  update_last_proc_invocation (ds);
 
   /* Optimize the trivial case where we're not going to do
      anything with the data, by not reading the data at all. */
   if (case_func == NULL && end_func == NULL
-      && case_source_is_class (proc_source, &storage_source_class)
-      && proc_sink == NULL
-      && (temporary_trns_chain == NULL
-          || trns_chain_is_empty (temporary_trns_chain))
-      && trns_chain_is_empty (permanent_trns_chain))
+      && case_source_is_class (ds->proc_source, &storage_source_class)
+      && ds->proc_sink == NULL
+      && (ds->temporary_trns_chain == NULL
+          || trns_chain_is_empty (ds->temporary_trns_chain))
+      && trns_chain_is_empty (ds->permanent_trns_chain))
     {
-      n_lag = 0;
-      dict_set_case_limit (default_dict, 0);
-      dict_clear_vectors (default_dict);
+      ds->n_lag = 0;
+      dict_set_case_limit (ds->dict, 0);
+      dict_clear_vectors (ds->dict);
       return true;
     }
   
-  open_active_file ();
+  open_active_file (ds);
   
   wc_data.case_func = case_func;
   wc_data.aux = aux;
-  create_trns_case (&wc_data.trns_case, default_dict);
+  wc_data.dataset = ds;
+  create_trns_case (&wc_data.trns_case, ds->dict);
   case_create (&wc_data.sink_case,
-               dict_get_compacted_value_cnt (default_dict));
+               dict_get_compacted_value_cnt (ds->dict));
   wc_data.cases_written = 0;
 
-  ok = proc_source->class->read (proc_source,
+  ok = ds->proc_source->class->read (ds->proc_source,
                                  &wc_data.trns_case,
                                  write_case, &wc_data) && ok;
   if (end_func != NULL)
@@ -233,16 +242,16 @@ internal_procedure (bool (*case_func) (const struct ccase *, void *),
   case_destroy (&wc_data.sink_case);
   case_destroy (&wc_data.trns_case);
 
-  ok = close_active_file () && ok;
+  ok = close_active_file (ds) && ok;
 
   return ok;
 }
 
 /* Updates last_proc_invocation. */
 static void
-update_last_proc_invocation (void
+update_last_proc_invocation (struct dataset *ds
 {
-  last_proc_invocation = time (NULL);
+  ds->last_proc_invocation = time (NULL);
 }
 
 /* Creates and returns a case, initializing it from the vectors
@@ -270,40 +279,41 @@ create_trns_case (struct ccase *trns_case, struct dictionary *dict)
 /* Makes all preparations for reading from the data source and writing
    to the data sink. */
 static void
-open_active_file (void)
+open_active_file (struct dataset *ds)
 {
-  add_case_limit_trns ();
-  add_filter_trns ();
+  add_case_limit_trns (ds);
+  add_filter_trns (ds);
 
   /* Finalize transformations. */
-  trns_chain_finalize (cur_trns_chain);
+  trns_chain_finalize (ds->cur_trns_chain);
 
   /* Make permanent_dict refer to the dictionary right before
      data reaches the sink. */
-  if (permanent_dict == NULL)
-    permanent_dict = default_dict;
+  if (ds->permanent_dict == NULL)
+    ds->permanent_dict = ds->dict;
 
   /* Figure out whether to compact. */
-  compactor = (dict_compacting_would_shrink (permanent_dict)
-               ? dict_make_compactor (permanent_dict)
-               : NULL);
+  ds->compactor = 
+    (dict_compacting_would_shrink (ds->permanent_dict)
+     ? dict_make_compactor (ds->permanent_dict)
+     : NULL);
 
   /* Prepare sink. */
-  if (proc_sink == NULL)
-    proc_sink = create_case_sink (&storage_sink_class, permanent_dict, NULL);
-  if (proc_sink->class->open != NULL)
-    proc_sink->class->open (proc_sink);
+  if (ds->proc_sink == NULL)
+    ds->proc_sink = create_case_sink (&storage_sink_class, ds->permanent_dict, NULL);
+  if (ds->proc_sink->class->open != NULL)
+    ds->proc_sink->class->open (ds->proc_sink);
 
   /* Allocate memory for lag queue. */
-  if (n_lag > 0)
+  if (ds->n_lag > 0)
     {
       int i;
   
-      lag_count = 0;
-      lag_head = 0;
-      lag_queue = xnmalloc (n_lag, sizeof *lag_queue);
-      for (i = 0; i < n_lag; i++)
-        case_nullify (&lag_queue[i]);
+      ds->lag_count = 0;
+      ds->lag_head = 0;
+      ds->lag_queue = xnmalloc (ds->n_lag, sizeof *ds->lag_queue);
+      for (i = 0; i < ds->n_lag; i++)
+        case_nullify (&ds->lag_queue[i]);
     }
 }
 
@@ -316,36 +326,38 @@ write_case (struct write_case_data *wc_data)
 {
   enum trns_result retval;
   size_t case_nr;
+
+  struct dataset *ds = wc_data->dataset;
   
   /* Execute permanent transformations.  */
   case_nr = wc_data->cases_written + 1;
-  retval = trns_chain_execute (permanent_trns_chain,
+  retval = trns_chain_execute (ds->permanent_trns_chain,
                                &wc_data->trns_case, &case_nr);
   if (retval != TRNS_CONTINUE)
     goto done;
 
   /* Write case to LAG queue. */
-  if (n_lag)
-    lag_case (&wc_data->trns_case);
+  if (ds->n_lag)
+    lag_case (ds, &wc_data->trns_case);
 
   /* Write case to replacement active file. */
   wc_data->cases_written++;
-  if (proc_sink->class->write != NULL) 
+  if (ds->proc_sink->class->write != NULL) 
     {
-      if (compactor != NULL) 
+      if (ds->compactor != NULL) 
         {
-          dict_compactor_compact (compactor, &wc_data->sink_case,
+          dict_compactor_compact (ds->compactor, &wc_data->sink_case,
                                   &wc_data->trns_case);
-          proc_sink->class->write (proc_sink, &wc_data->sink_case);
+          ds->proc_sink->class->write (ds->proc_sink, &wc_data->sink_case);
         }
       else
-        proc_sink->class->write (proc_sink, &wc_data->trns_case);
+        ds->proc_sink->class->write (ds->proc_sink, &wc_data->trns_case);
     }
   
   /* Execute temporary transformations. */
-  if (temporary_trns_chain != NULL) 
+  if (ds->temporary_trns_chain != NULL) 
     {
-      retval = trns_chain_execute (temporary_trns_chain,
+      retval = trns_chain_execute (ds->temporary_trns_chain,
                                    &wc_data->trns_case,
                                    &wc_data->cases_written);
       if (retval != TRNS_CONTINUE)
@@ -358,33 +370,33 @@ write_case (struct write_case_data *wc_data)
       retval = TRNS_ERROR;
 
  done:
-  clear_case (&wc_data->trns_case);
+  clear_case (ds, &wc_data->trns_case);
   return retval != TRNS_ERROR;
 }
 
 /* Add C to the lag queue. */
 static void
-lag_case (const struct ccase *c)
+lag_case (struct dataset *ds, const struct ccase *c)
 {
-  if (lag_count < n_lag)
-    lag_count++;
-  case_destroy (&lag_queue[lag_head]);
-  case_clone (&lag_queue[lag_head], c);
-  if (++lag_head >= n_lag)
-    lag_head = 0;
+  if (ds->lag_count < ds->n_lag)
+    ds->lag_count++;
+  case_destroy (&ds->lag_queue[ds->lag_head]);
+  case_clone (&ds->lag_queue[ds->lag_head], c);
+  if (++ds->lag_head >= ds->n_lag)
+    ds->lag_head = 0;
 }
 
 /* Clears the variables in C that need to be cleared between
    processing cases.  */
 static void
-clear_case (struct ccase *c)
+clear_case (const struct dataset *ds, struct ccase *c)
 {
-  size_t var_cnt = dict_get_var_cnt (default_dict);
+  size_t var_cnt = dict_get_var_cnt (ds->dict);
   size_t i;
   
   for (i = 0; i < var_cnt; i++) 
     {
-      struct variable *v = dict_get_var (default_dict, i);
+      struct variable *v = dict_get_var (ds->dict, i);
       if (!v->leave) 
         {
           if (v->type == NUMERIC)
@@ -397,59 +409,59 @@ clear_case (struct ccase *c)
 
 /* Closes the active file. */
 static bool
-close_active_file (void)
+close_active_file (struct dataset *ds)
 {
   /* Free memory for lag queue, and turn off lagging. */
-  if (n_lag > 0)
+  if (ds->n_lag > 0)
     {
       int i;
       
-      for (i = 0; i < n_lag; i++)
-       case_destroy (&lag_queue[i]);
-      free (lag_queue);
-      n_lag = 0;
+      for (i = 0; i < ds->n_lag; i++)
+       case_destroy (&ds->lag_queue[i]);
+      free (ds->lag_queue);
+      ds->n_lag = 0;
     }
   
   /* Dictionary from before TEMPORARY becomes permanent. */
-  proc_cancel_temporary_transformations ();
+  proc_cancel_temporary_transformations (ds);
 
   /* Finish compacting. */
-  if (compactor != NULL) 
+  if (ds->compactor != NULL) 
     {
-      dict_compactor_destroy (compactor);
-      dict_compact_values (default_dict);
-      compactor = NULL;
+      dict_compactor_destroy (ds->compactor);
+      dict_compact_values (ds->dict);
+      ds->compactor = NULL;
     }
     
   /* Free data source. */
-  free_case_source (proc_source);
-  proc_source = NULL;
+  free_case_source (ds->proc_source);
+  ds->proc_source = NULL;
 
   /* Old data sink becomes new data source. */
-  if (proc_sink->class->make_source != NULL)
-    proc_source = proc_sink->class->make_source (proc_sink);
-  free_case_sink (proc_sink);
-  proc_sink = NULL;
+  if (ds->proc_sink->class->make_source != NULL)
+    ds->proc_source = ds->proc_sink->class->make_source (ds->proc_sink);
+  free_case_sink (ds->proc_sink);
+  ds->proc_sink = NULL;
 
-  dict_clear_vectors (default_dict);
-  permanent_dict = NULL;
-  return proc_cancel_all_transformations ();
+  dict_clear_vectors (ds->dict);
+  ds->permanent_dict = NULL;
+  return proc_cancel_all_transformations (ds);
 }
 \f
 /* Returns a pointer to the lagged case from N_BEFORE cases before the
    current one, or NULL if there haven't been that many cases yet. */
 struct ccase *
-lagged_case (int n_before)
+lagged_case (const struct dataset *ds, int n_before)
 {
   assert (n_before >= 1 );
-  assert (n_before <= n_lag);
+  assert (n_before <= ds->n_lag);
 
-  if (n_before <= lag_count)
+  if (n_before <= ds->lag_count)
     {
-      int index = lag_head - n_before;
+      int index = ds->lag_head - n_before;
       if (index < 0)
-        index += n_lag;
-      return &lag_queue[index];
+        index += ds->n_lag;
+      return &ds->lag_queue[index];
     }
   else
     return NULL;
@@ -460,16 +472,17 @@ lagged_case (int n_before)
 /* Represents auxiliary data for handling SPLIT FILE. */
 struct split_aux_data 
   {
+    struct dataset *dataset;    /* The dataset */
     struct ccase prev_case;     /* Data in previous case. */
 
     /* Callback functions. */
-    void (*begin_func) (const struct ccase *, void *);
-    bool (*proc_func) (const struct ccase *, void *);
+    begin_func_t begin_func ; 
+    case_func_t proc_func ;
     void (*end_func) (void *);
     void *func_aux;
   };
 
-static int equal_splits (const struct ccase *, const struct ccase *);
+static int equal_splits (const struct ccase *, const struct ccase *, const struct dataset *ds);
 static bool split_procedure_case_func (const struct ccase *c, void *);
 static bool split_procedure_end_func (void *);
 
@@ -491,8 +504,9 @@ static bool split_procedure_end_func (void *);
    
    Returns true if successful, false if an I/O error occurred. */
 bool
-procedure_with_splits (void (*begin_func) (const struct ccase *, void *aux),
-                       bool (*proc_func) (const struct ccase *, void *aux),
+procedure_with_splits (struct dataset *ds,
+                      begin_func_t begin_func, 
+                      case_func_t proc_func,
                        void (*end_func) (void *aux),
                        void *func_aux) 
 {
@@ -504,8 +518,9 @@ procedure_with_splits (void (*begin_func) (const struct ccase *, void *aux),
   split_aux.proc_func = proc_func;
   split_aux.end_func = end_func;
   split_aux.func_aux = func_aux;
+  split_aux.dataset = ds;
 
-  ok = internal_procedure (split_procedure_case_func,
+  ok = internal_procedure (ds, split_procedure_case_func,
                            split_procedure_end_func, &split_aux);
 
   case_destroy (&split_aux.prev_case);
@@ -521,7 +536,7 @@ split_procedure_case_func (const struct ccase *c, void *split_aux_)
 
   /* Start a new series if needed. */
   if (case_is_null (&split_aux->prev_case)
-      || !equal_splits (c, &split_aux->prev_case))
+      || !equal_splits (c, &split_aux->prev_case, split_aux->dataset))
     {
       if (!case_is_null (&split_aux->prev_case) && split_aux->end_func != NULL)
         split_aux->end_func (split_aux->func_aux);
@@ -531,6 +546,7 @@ split_procedure_case_func (const struct ccase *c, void *split_aux_)
 
       if (split_aux->begin_func != NULL)
        split_aux->begin_func (&split_aux->prev_case, split_aux->func_aux);
+
     }
 
   return (split_aux->proc_func == NULL
@@ -551,11 +567,12 @@ split_procedure_end_func (void *split_aux_)
 /* Compares the SPLIT FILE variables in cases A and B and returns
    nonzero only if they differ. */
 static int
-equal_splits (const struct ccase *a, const struct ccase *b) 
+equal_splits (const struct ccase *a, const struct ccase *b, 
+             const struct dataset *ds) 
 {
   return case_compare (a, b,
-                       dict_get_split_vars (default_dict),
-                       dict_get_split_cnt (default_dict)) == 0;
+                       dict_get_split_vars (ds->dict),
+                       dict_get_split_cnt (ds->dict)) == 0;
 }
 \f
 /* Multipass procedure that separates the data into SPLIT FILE
@@ -565,6 +582,7 @@ equal_splits (const struct ccase *a, const struct ccase *b)
    multipass procedure. */
 struct multipass_split_aux_data 
   {
+    struct dataset *dataset;    /* The dataset of the split */
     struct ccase prev_case;     /* Data in previous case. */
     struct casefile *casefile;  /* Accumulates data for a split. */
 
@@ -580,7 +598,8 @@ static bool multipass_split_output (struct multipass_split_aux_data *);
 
 /* Returns true if successful, false if an I/O error occurred. */
 bool
-multipass_procedure_with_splits (bool (*split_func) (const struct ccase *first,
+multipass_procedure_with_splits (struct dataset *ds, 
+                                bool (*split_func) (const struct ccase *first,
                                                      const struct casefile *,
                                                      void *aux),
                                  void *func_aux)
@@ -592,8 +611,9 @@ multipass_procedure_with_splits (bool (*split_func) (const struct ccase *first,
   aux.casefile = NULL;
   aux.split_func = split_func;
   aux.func_aux = func_aux;
+  aux.dataset = ds;
 
-  ok = internal_procedure (multipass_split_case_func,
+  ok = internal_procedure (ds, multipass_split_case_func,
                            multipass_split_end_func, &aux);
   case_destroy (&aux.prev_case);
 
@@ -605,10 +625,11 @@ static bool
 multipass_split_case_func (const struct ccase *c, void *aux_)
 {
   struct multipass_split_aux_data *aux = aux_;
+  struct dataset *ds = aux->dataset;
   bool ok = true;
 
   /* Start a new series if needed. */
-  if (aux->casefile == NULL || !equal_splits (c, &aux->prev_case))
+  if (aux->casefile == NULL || ! equal_splits (c, &aux->prev_case, ds))
     {
       /* Record split values. */
       case_destroy (&aux->prev_case);
@@ -619,7 +640,8 @@ multipass_split_case_func (const struct ccase *c, void *aux_)
         ok = multipass_split_output (aux);
 
       /* Start a new casefile. */
-      aux->casefile = fastfile_create (dict_get_next_value_idx (default_dict));
+      aux->casefile = 
+       fastfile_create (dict_get_next_value_idx (ds->dict));
     }
 
   return casefile_append (aux->casefile, c) && ok;
@@ -649,30 +671,30 @@ multipass_split_output (struct multipass_split_aux_data *aux)
 /* Discards all the current state in preparation for a data-input
    command like DATA LIST or GET. */
 void
-discard_variables (void)
+discard_variables (struct dataset *ds)
 {
-  dict_clear (default_dict);
+  dict_clear (ds->dict);
   fh_set_default_handle (NULL);
 
-  n_lag = 0;
+  ds->n_lag = 0;
   
-  free_case_source (proc_source);
-  proc_source = NULL;
+  free_case_source (ds->proc_source);
+  ds->proc_source = NULL;
 
-  proc_cancel_all_transformations ();
+  proc_cancel_all_transformations (ds);
 }
 \f
 /* Returns the current set of permanent transformations,
    and clears the permanent transformations.
    For use by INPUT PROGRAM. */
 struct trns_chain *
-proc_capture_transformations (void
+proc_capture_transformations (struct dataset *ds
 {
   struct trns_chain *chain;
   
-  assert (temporary_trns_chain == NULL);
-  chain = permanent_trns_chain;
-  cur_trns_chain = permanent_trns_chain = trns_chain_create ();
+  assert (ds->temporary_trns_chain == NULL);
+  chain = ds->permanent_trns_chain;
+  ds->cur_trns_chain = ds->permanent_trns_chain = trns_chain_create ();
   return chain;
 }
 
@@ -680,9 +702,9 @@ proc_capture_transformations (void)
    frees itself with FREE to the current set of transformations.
    The functions are passed AUX as auxiliary data. */
 void
-add_transformation (trns_proc_func *proc, trns_free_func *free, void *aux)
+add_transformation (struct dataset *ds, trns_proc_func *proc, trns_free_func *free, void *aux)
 {
-  trns_chain_append (cur_trns_chain, NULL, proc, free, aux);
+  trns_chain_append (ds->cur_trns_chain, NULL, proc, free, aux);
 }
 
 /* Adds a transformation that processes a case with PROC and
@@ -691,44 +713,45 @@ add_transformation (trns_proc_func *proc, trns_free_func *free, void *aux)
    FINALIZE will be called.
    The functions are passed AUX as auxiliary data. */
 void
-add_transformation_with_finalizer (trns_finalize_func *finalize,
+add_transformation_with_finalizer (struct dataset *ds, 
+                                  trns_finalize_func *finalize,
                                    trns_proc_func *proc,
                                    trns_free_func *free, void *aux)
 {
-  trns_chain_append (cur_trns_chain, finalize, proc, free, aux);
+  trns_chain_append (ds->cur_trns_chain, finalize, proc, free, aux);
 }
 
 /* Returns the index of the next transformation.
    This value can be returned by a transformation procedure
    function to indicate a "jump" to that transformation. */
 size_t
-next_transformation (void
+next_transformation (const struct dataset *ds
 {
-  return trns_chain_next (cur_trns_chain);
+  return trns_chain_next (ds->cur_trns_chain);
 }
 
 /* Returns true if the next call to add_transformation() will add
    a temporary transformation, false if it will add a permanent
    transformation. */
 bool
-proc_in_temporary_transformations (void
+proc_in_temporary_transformations (const struct dataset *ds
 {
-  return temporary_trns_chain != NULL;
+  return ds->temporary_trns_chain != NULL;
 }
 
 /* Marks the start of temporary transformations.
    Further calls to add_transformation() will add temporary
    transformations. */
 void
-proc_start_temporary_transformations (void
+proc_start_temporary_transformations (struct dataset *ds
 {
-  if (!proc_in_temporary_transformations ())
+  if (!proc_in_temporary_transformations (ds))
     {
-      add_case_limit_trns ();
+      add_case_limit_trns (ds);
 
-      permanent_dict = dict_clone (default_dict);
-      trns_chain_finalize (permanent_trns_chain);
-      temporary_trns_chain = cur_trns_chain = trns_chain_create ();
+      ds->permanent_dict = dict_clone (ds->dict);
+      trns_chain_finalize (ds->permanent_trns_chain);
+      ds->temporary_trns_chain = ds->cur_trns_chain = trns_chain_create ();
     }
 }
 
@@ -737,16 +760,16 @@ proc_start_temporary_transformations (void)
    permanent.
    Returns true if anything changed, false otherwise. */
 bool
-proc_make_temporary_transformations_permanent (void
+proc_make_temporary_transformations_permanent (struct dataset *ds
 {
-  if (proc_in_temporary_transformations ()) 
+  if (proc_in_temporary_transformations (ds)) 
     {
-      trns_chain_finalize (temporary_trns_chain);
-      trns_chain_splice (permanent_trns_chain, temporary_trns_chain);
-      temporary_trns_chain = NULL;
+      trns_chain_finalize (ds->temporary_trns_chain);
+      trns_chain_splice (ds->permanent_trns_chain, ds->temporary_trns_chain);
+      ds->temporary_trns_chain = NULL;
 
-      dict_destroy (permanent_dict);
-      permanent_dict = NULL;
+      dict_destroy (ds->permanent_dict);
+      ds->permanent_dict = NULL;
 
       return true;
     }
@@ -758,16 +781,16 @@ proc_make_temporary_transformations_permanent (void)
    transformations will be permanent.
    Returns true if anything changed, false otherwise. */
 bool
-proc_cancel_temporary_transformations (void
+proc_cancel_temporary_transformations (struct dataset *ds
 {
-  if (proc_in_temporary_transformations ()) 
+  if (proc_in_temporary_transformations (ds)) 
     {
-      dict_destroy (default_dict);
-      default_dict = permanent_dict;
-      permanent_dict = NULL;
+      dict_destroy (ds->dict);
+      ds->dict = ds->permanent_dict;
+      ds->permanent_dict = NULL;
 
-      trns_chain_destroy (temporary_trns_chain);
-      temporary_trns_chain = NULL;
+      trns_chain_destroy (ds->temporary_trns_chain);
+      ds->temporary_trns_chain = NULL;
 
       return true;
     }
@@ -778,56 +801,59 @@ proc_cancel_temporary_transformations (void)
 /* Cancels all transformations, if any.
    Returns true if successful, false on I/O error. */
 bool
-proc_cancel_all_transformations (void)
+proc_cancel_all_transformations (struct dataset *ds)
 {
   bool ok;
-  ok = trns_chain_destroy (permanent_trns_chain);
-  ok = trns_chain_destroy (temporary_trns_chain) && ok;
-  permanent_trns_chain = cur_trns_chain = trns_chain_create ();
-  temporary_trns_chain = NULL;
+  ok = trns_chain_destroy (ds->permanent_trns_chain);
+  ok = trns_chain_destroy (ds->temporary_trns_chain) && ok;
+  ds->permanent_trns_chain = ds->cur_trns_chain = trns_chain_create ();
+  ds->temporary_trns_chain = NULL;
   return ok;
 }
 \f
 /* Initializes procedure handling. */
-void
-proc_init (void) 
+struct dataset *
+create_dataset (void)
 {
-  default_dict = dict_create ();
-  proc_cancel_all_transformations ();
+  struct dataset *ds = xzalloc (sizeof(*ds));
+  ds->dict = dict_create ();
+  proc_cancel_all_transformations (ds);
+  return ds;
 }
 
 /* Finishes up procedure handling. */
 void
-proc_done (void)
+destroy_dataset (struct dataset *ds)
 {
-  discard_variables ();
-  dict_destroy (default_dict);
+  discard_variables (ds);
+  dict_destroy (ds->dict);
+  free (ds);
 }
 
 /* Sets SINK as the destination for procedure output from the
    next procedure. */
 void
-proc_set_sink (struct case_sink *sink) 
+proc_set_sink (struct dataset *ds, struct case_sink *sink) 
 {
-  assert (proc_sink == NULL);
-  proc_sink = sink;
+  assert (ds->proc_sink == NULL);
+  ds->proc_sink = sink;
 }
 
 /* Sets SOURCE as the source for procedure input for the next
    procedure. */
 void
-proc_set_source (struct case_source *source) 
+proc_set_source (struct dataset *ds, struct case_source *source) 
 {
-  assert (proc_source == NULL);
-  proc_source = source;
+  assert (ds->proc_source == NULL);
+  ds->proc_source = source;
 }
 
 /* Returns true if a source for the next procedure has been
    configured, false otherwise. */
 bool
-proc_has_source (void
+proc_has_source (const struct dataset *ds
 {
-  return proc_source != NULL;
+  return ds->proc_source != NULL;
 }
 
 /* Returns the output from the previous procedure.
@@ -835,19 +861,19 @@ proc_has_source (void)
    The returned casefile is owned by the caller; it will not be
    automatically used for the next procedure's input. */
 struct casefile *
-proc_capture_output (void
+proc_capture_output (struct dataset *ds
 {
   struct casefile *casefile;
 
   /* Try to make sure that this function is called immediately
      after procedure() or a similar function. */
-  assert (proc_source != NULL);
-  assert (case_source_is_class (proc_source, &storage_source_class));
-  assert (trns_chain_is_empty (permanent_trns_chain));
-  assert (!proc_in_temporary_transformations ());
+  assert (ds->proc_source != NULL);
+  assert (case_source_is_class (ds->proc_source, &storage_source_class));
+  assert (trns_chain_is_empty (ds->permanent_trns_chain));
+  assert (!proc_in_temporary_transformations (ds));
 
-  casefile = storage_source_decapsulate (proc_source);
-  proc_source = NULL;
+  casefile = storage_source_decapsulate (ds->proc_source);
+  ds->proc_source = NULL;
 
   return casefile;
 }
@@ -856,18 +882,18 @@ static trns_proc_func case_limit_trns_proc;
 static trns_free_func case_limit_trns_free;
 
 /* Adds a transformation that limits the number of cases that may
-   pass through, if default_dict has a case limit. */
+   pass through, if DS->DICT has a case limit. */
 static void
-add_case_limit_trns (void
+add_case_limit_trns (struct dataset *ds
 {
-  size_t case_limit = dict_get_case_limit (default_dict);
+  size_t case_limit = dict_get_case_limit (ds->dict);
   if (case_limit != 0)
     {
       size_t *cases_remaining = xmalloc (sizeof *cases_remaining);
       *cases_remaining = case_limit;
-      add_transformation (case_limit_trns_proc, case_limit_trns_free,
+      add_transformation (ds, case_limit_trns_proc, case_limit_trns_free,
                           cases_remaining);
-      dict_set_case_limit (default_dict, 0);
+      dict_set_case_limit (ds->dict, 0);
     }
 }
 
@@ -901,13 +927,13 @@ static trns_proc_func filter_trns_proc;
 /* Adds a temporary transformation to filter data according to
    the variable specified on FILTER, if any. */
 static void
-add_filter_trns (void
+add_filter_trns (struct dataset *ds
 {
-  struct variable *filter_var = dict_get_filter (default_dict);
+  struct variable *filter_var = dict_get_filter (ds->dict);
   if (filter_var != NULL) 
     {
-      proc_start_temporary_transformations ();
-      add_transformation (filter_trns_proc, NULL, filter_var);
+      proc_start_temporary_transformations (ds);
+      add_transformation (ds, filter_trns_proc, NULL, filter_var);
     }
 }
 
@@ -923,3 +949,30 @@ filter_trns_proc (void *filter_var_,
           ? TRNS_CONTINUE : TRNS_DROP_CASE);
 }
 
+
+struct dictionary *
+dataset_dict (const struct dataset *ds)
+{
+  return ds->dict;
+}
+
+
+void 
+dataset_set_dict (struct dataset *ds, struct dictionary *dict)
+{
+  ds->dict = dict;
+}
+
+int 
+dataset_n_lag (const struct dataset *ds)
+{
+  return ds->n_lag;
+}
+
+void 
+dataset_set_n_lag (struct dataset *ds, int n_lag)
+{
+  ds->n_lag = n_lag;
+}
+
+
index 35678ce60455caeb710857cd4d512ad4e1b3955a..60e1e77f4f14fae73e74f5649ffea55bfc4253e8 100644 (file)
@@ -31,60 +31,80 @@ struct casefile;
 struct case_sink;
 struct case_source;
 
-/* Dictionary produced by permanent and temporary transformations
-   on data from the source. */
-extern struct dictionary *default_dict;
+struct dataset;
+
 \f
 /* Transformations. */
 
-void add_transformation (trns_proc_func *, trns_free_func *, void *);
-void add_transformation_with_finalizer (trns_finalize_func *,
+void add_transformation (struct dataset *ds, 
+                        trns_proc_func *, trns_free_func *, void *);
+void add_transformation_with_finalizer (struct dataset *ds, 
+                                       trns_finalize_func *,
                                         trns_proc_func *,
                                         trns_free_func *, void *);
-size_t next_transformation (void);
+size_t next_transformation (const struct dataset *ds);
+
+void discard_variables (struct dataset *ds);
 
-void discard_variables (void);
 
-bool proc_cancel_all_transformations (void);
-struct trns_chain *proc_capture_transformations (void);
 
-void proc_start_temporary_transformations (void);
-bool proc_in_temporary_transformations (void);
-bool proc_make_temporary_transformations_permanent (void);
-bool proc_cancel_temporary_transformations (void);
+bool proc_cancel_all_transformations (struct dataset *ds);
+struct trns_chain *proc_capture_transformations (struct dataset *ds);
+
+void proc_start_temporary_transformations (struct dataset *ds);
+bool proc_in_temporary_transformations (const struct dataset *ds);
+bool proc_make_temporary_transformations_permanent (struct dataset *ds);
+bool proc_cancel_temporary_transformations (struct dataset *ds);
 \f
 /* Procedures. */
 
-void proc_init (void);
-void proc_done (void);
 
-void proc_set_source (struct case_source *);
-bool proc_has_source (void);
+struct dataset *create_dataset (void);
+void destroy_dataset (struct dataset *);
 
-void proc_set_sink (struct case_sink *);
-struct casefile *proc_capture_output (void);
+void proc_set_source (struct dataset *ds, struct case_source *);
+bool proc_has_source (const struct dataset *ds);
 
-bool procedure (bool (*proc_func) (const struct ccase *, void *),
-                void *aux)
-     WARN_UNUSED_RESULT;
-bool procedure_with_splits (void (*begin_func) (const struct ccase *, void *),
-                            bool (*proc_func) (const struct ccase *, void *),
+void proc_set_sink (struct dataset *ds, struct case_sink *);
+struct casefile *proc_capture_output (struct dataset *ds);
+
+typedef bool (*casefile_func_t) (const struct casefile *, void *);
+typedef bool (*case_func_t) (const struct ccase *, void *);
+typedef void (*begin_func_t) (const struct ccase *, void *);
+
+
+
+bool procedure (struct dataset *ds, case_func_t, void *aux)  WARN_UNUSED_RESULT;
+
+bool procedure_with_splits (struct dataset *ds, 
+                           begin_func_t begin_func,
+                            case_func_t proc_func,
                             void (*end_func) (void *),
                             void *aux)
      WARN_UNUSED_RESULT;
-bool multipass_procedure (bool (*proc_func) (const struct casefile *, void *),
-                          void *aux)
+bool multipass_procedure (struct dataset *ds, casefile_func_t, void  *aux)
      WARN_UNUSED_RESULT;
-bool multipass_procedure_with_splits (bool (*) (const struct ccase *,
-                                                const struct casefile *,
-                                                void *),
-                                      void *aux)
+bool multipass_procedure_with_splits (struct dataset *ds,
+                                          bool (*) (const struct ccase *,
+                                                    const struct casefile *,
+                                                    void *),
+                                          void *aux)
      WARN_UNUSED_RESULT;
-time_t time_of_last_procedure (void);
+
+
+
+time_t time_of_last_procedure (struct dataset *ds);
 \f
-/* Number of cases to lag. */
-extern int n_lag;
 
-struct ccase *lagged_case (int n_before);
+struct ccase *lagged_case (const struct dataset *ds, int n_before);
+
+extern struct dataset *current_dataset;
+
+inline struct dictionary *dataset_dict (const struct dataset *ds);
+inline void dataset_set_dict ( struct dataset *ds, struct dictionary *dict);
+
+inline int dataset_n_lag (const struct dataset *ds);
+inline void dataset_set_n_lag (struct dataset *ds, int n_lag);
+
 
 #endif /* procedure.h */
index ae16d9bbc98c307c76d06308071424e3e2693b85..4ca3da9a8b52255fbed122510074bb7e2b0e3409 100644 (file)
@@ -148,7 +148,7 @@ cmd_parse (enum cmd_state state)
     lex_discard_rest_of_command ();
 
   unset_cmd_algorithm ();
-  dict_clear_aux (default_dict);
+  dict_clear_aux (dataset_dict (current_dataset));
 
   return result;
 }
@@ -666,7 +666,7 @@ cmd_n_of_cases (void)
   x = lex_integer ();
   lex_get ();
   if (!lex_match_id ("ESTIMATED"))
-    dict_set_case_limit (default_dict, x);
+    dict_set_case_limit (dataset_dict (current_dataset), x);
 
   return lex_end_of_command ();
 }
@@ -675,7 +675,7 @@ cmd_n_of_cases (void)
 int
 cmd_execute (void)
 {
-  if (!procedure (NULL, NULL))
+  if (!procedure (current_dataset,NULL, NULL))
     return CMD_CASCADING_FAILURE;
   return lex_end_of_command ();
 }
@@ -850,7 +850,7 @@ cmd_host (void)
 int
 cmd_new_file (void)
 {
-  discard_variables ();
+  discard_variables (current_dataset);
 
   return lex_end_of_command ();
 }
index a0bbf79381434b101a20ab0b1991a44cb434cf89..b39f67e500459b8ccd84d1b3fc0b70d45a71436b 100644 (file)
@@ -104,7 +104,7 @@ cmd_do_if (void)
   do_if->clause_cnt = 0;
 
   ctl_stack_push (&do_if_class, do_if);
-  add_transformation_with_finalizer (do_if_finalize_func,
+  add_transformation_with_finalizer (current_dataset, do_if_finalize_func,
                                      do_if_trns_proc, do_if_trns_free, do_if);
 
   return parse_clause (do_if);
@@ -153,7 +153,7 @@ close_do_if (void *do_if_)
   
   if (!has_else (do_if)) 
     add_else (do_if);
-  do_if->past_END_IF_index = next_transformation ();
+  do_if->past_END_IF_index = next_transformation (current_dataset);
 }
 
 /* Adds an ELSE clause to DO_IF pointing to the next
@@ -162,7 +162,7 @@ static void
 add_else (struct do_if_trns *do_if) 
 {
   assert (!has_else (do_if));
-  add_clause (do_if, NULL, next_transformation ());
+  add_clause (do_if, NULL, next_transformation (current_dataset));
 }
 
 /* Returns true if DO_IF does not yet have an ELSE clause.
@@ -196,11 +196,11 @@ parse_clause (struct do_if_trns *do_if)
 {
   struct expression *condition;
 
-  condition = expr_parse (default_dict, EXPR_BOOLEAN);
+  condition = expr_parse (dataset_dict (current_dataset), EXPR_BOOLEAN);
   if (condition == NULL)
     return CMD_CASCADING_FAILURE;
 
-  add_clause (do_if, condition, next_transformation ());
+  add_clause (do_if, condition, next_transformation (current_dataset));
 
   return lex_end_of_command ();
 }
@@ -214,7 +214,7 @@ add_clause (struct do_if_trns *do_if,
   struct clause *clause;
 
   if (do_if->clause_cnt > 0)
-    add_transformation (break_trns_proc, NULL, do_if);
+    add_transformation (current_dataset, break_trns_proc, NULL, do_if);
 
   do_if->clauses = xnrealloc (do_if->clauses,
                               do_if->clause_cnt + 1, sizeof *do_if->clauses);
index 242c936a159dc5b651b719b08cd85620ff2d5607..1bb044e6ecf4d499b17e171dbff26c108b1389f6 100644 (file)
@@ -112,9 +112,9 @@ cmd_loop (void)
   /* Find index variable and create if necessary. */
   if (ok && index_var_name[0] != '\0')
     {
-      loop->index_var = dict_lookup_var (default_dict, index_var_name);
+      loop->index_var = dict_lookup_var (dataset_dict (current_dataset), index_var_name);
       if (loop->index_var == NULL)
-        loop->index_var = dict_create_var (default_dict, index_var_name, 0);
+        loop->index_var = dict_create_var (dataset_dict (current_dataset), index_var_name, 0);
     }
   
   if (!ok)
@@ -155,7 +155,7 @@ cmd_break (void)
   if (loop == NULL)
     return CMD_CASCADING_FAILURE;
 
-  add_transformation (break_trns_proc, NULL, loop);
+  add_transformation (current_dataset, break_trns_proc, NULL, loop);
 
   return lex_end_of_command ();
 }
@@ -167,8 +167,8 @@ close_loop (void *loop_)
 {
   struct loop_trns *loop = loop_;
   
-  add_transformation (end_loop_trns_proc, NULL, loop);
-  loop->past_END_LOOP_index = next_transformation ();
+  add_transformation (current_dataset, end_loop_trns_proc, NULL, loop);
+  loop->past_END_LOOP_index = next_transformation (current_dataset);
 
   /* If there's nothing else limiting the number of loops, use
      MXLOOPS as a limit. */
@@ -185,7 +185,7 @@ close_loop (void *loop_)
 static bool
 parse_if_clause (struct loop_trns *loop, struct expression **condition) 
 {
-  *condition = expr_parse_pool (loop->pool, default_dict, EXPR_BOOLEAN);
+  *condition = expr_parse_pool (loop->pool, dataset_dict (current_dataset), EXPR_BOOLEAN);
   return *condition != NULL;
 }
 
@@ -206,7 +206,7 @@ parse_index_clause (struct loop_trns *loop, char index_var_name[])
   if (!lex_force_match ('='))
     return false;
 
-  loop->first_expr = expr_parse_pool (loop->pool, default_dict, EXPR_NUMBER);
+  loop->first_expr = expr_parse_pool (loop->pool, dataset_dict (current_dataset), EXPR_NUMBER);
   if (loop->first_expr == NULL)
     return false;
 
@@ -225,7 +225,7 @@ parse_index_clause (struct loop_trns *loop, char index_var_name[])
           lex_sbc_only_once (e == &loop->last_expr ? "TO" : "BY");
           return false;
         }
-      *e = expr_parse_pool (loop->pool, default_dict, EXPR_NUMBER);
+      *e = expr_parse_pool (loop->pool, dataset_dict (current_dataset), EXPR_NUMBER);
       if (*e == NULL)
         return false;
     }
@@ -251,9 +251,9 @@ create_loop_trns (void)
   loop->first_expr = loop->by_expr = loop->last_expr = NULL;
   loop->loop_condition = loop->end_loop_condition = NULL;
 
-  add_transformation_with_finalizer (loop_trns_finalize,
+  add_transformation_with_finalizer (current_dataset, loop_trns_finalize,
                                      loop_trns_proc, loop_trns_free, loop);
-  loop->past_LOOP_index = next_transformation ();
+  loop->past_LOOP_index = next_transformation (current_dataset);
 
   ctl_stack_push (&loop_class, loop);
 
index 42481dfa29756f92e02790fc3d54ca3bdb4e4fa4..0b4607ffd6a24b0fffd36c12317af76b0c1fb1a7 100644 (file)
@@ -137,7 +137,7 @@ parse_specification (struct repeat_block *block)
       /* Get a stand-in variable name and make sure it's unique. */
       if (!lex_force_id ())
        return false;
-      if (dict_lookup_var (default_dict, tokid))
+      if (dict_lookup_var (dataset_dict (current_dataset), tokid))
         msg (SW, _("Dummy variable name \"%s\" hides dictionary "
                    "variable \"%s\"."),
              tokid, tokid);
@@ -331,7 +331,7 @@ create_vars (struct repeat_block *block)
           {
             /* Ignore return value: if the variable already
                exists there is no harm done. */
-            dict_create_var (default_dict, iter->replacement[i], 0);
+            dict_create_var (dataset_dict (current_dataset), iter->replacement[i], 0);
           }
       }
 }
index 6cfd48ec981f1a20f8524b041e7368813fcb47a8..810ed519a0076322aa3ceb28fb7f2ec85db2eb4a 100644 (file)
@@ -43,8 +43,8 @@
 int
 cmd_temporary (void)
 {
-  if (!proc_in_temporary_transformations ())
-    proc_start_temporary_transformations ();
+  if (!proc_in_temporary_transformations (current_dataset))
+    proc_start_temporary_transformations (current_dataset);
   else
     msg (SE, _("This command may only appear once between "
                "procedures and procedure-like commands."));
index 39bd743efb3e3dec479b7c6c47a20aebe3cb7652..8012d88832de0afc042a529efc120108cf840319 100644 (file)
@@ -123,7 +123,7 @@ cmd_data_list (void)
   bool ok;
 
   if (!in_input_program ())
-    discard_variables ();
+    discard_variables (current_dataset);
 
   dls = pool_create_container (struct data_list_pgm, pool);
   ll_init (&dls->specs);
@@ -166,9 +166,9 @@ cmd_data_list (void)
          lex_match ('=');
          if (!lex_force_id ())
            goto error;
-         dls->end = dict_lookup_var (default_dict, tokid);
+         dls->end = dict_lookup_var (dataset_dict (current_dataset), tokid);
          if (!dls->end) 
-            dls->end = dict_create_var_assert (default_dict, tokid, 0);
+            dls->end = dict_create_var_assert (dataset_dict (current_dataset), tokid, 0);
          lex_get ();
        }
       else if (token == T_ID)
@@ -262,9 +262,10 @@ cmd_data_list (void)
     goto error;
 
   if (in_input_program ())
-    add_transformation (data_list_trns_proc, data_list_trns_free, dls);
+    add_transformation (current_dataset, data_list_trns_proc, data_list_trns_free, dls);
   else 
-    proc_set_source (create_case_source (&data_list_source_class, dls));
+    proc_set_source (current_dataset, 
+                    create_case_source (&data_list_source_class, dls));
 
   pool_destroy (tmp_pool);
 
@@ -315,7 +316,7 @@ parse_fixed (struct pool *tmp_pool, struct data_list_pgm *dls)
 
             /* Create variable. */
             width = get_format_var_width (f);
-            v = dict_create_var (default_dict, name, width);
+            v = dict_create_var (dataset_dict (current_dataset), name, width);
             if (v != NULL)
               {
                 /* Success. */
@@ -337,7 +338,7 @@ parse_fixed (struct pool *tmp_pool, struct data_list_pgm *dls)
                     return false;
                   }
 
-                v = dict_lookup_var_assert (default_dict, name);
+                v = dict_lookup_var_assert (dataset_dict (current_dataset), name);
                 if ((width != 0) != (v->width != 0))
                   {
                     msg (SE, _("There is already a variable %s of a "
@@ -464,7 +465,7 @@ parse_free (struct pool *tmp_pool, struct data_list_pgm *dls)
           struct dls_var_spec *spec;
          struct variable *v;
 
-         v = dict_create_var (default_dict, name[i],
+         v = dict_create_var (dataset_dict (current_dataset), name[i],
                                get_format_var_width (&input));
          if (v == NULL)
            {
index 1899acfb8396b6aa7d180fa229fc4ae968f525f6..31932af9c52436939e1c94c5ffd318edb5c90e12 100644 (file)
@@ -441,7 +441,7 @@ cmd_begin_data (void)
 
   /* Input procedure reads from inline file. */
   getl_set_prompt_style (GETL_PROMPT_DATA);
-  ok = procedure (NULL, NULL);
+  ok = procedure (current_dataset,NULL, NULL);
 
   dfm_close_reader (r);
 
index 2bb463113c4fcff8d4b49d0dd7aba8818512c3bd..663d2fc153f3afd008f68b6f387054ec12350e4f 100644 (file)
@@ -127,7 +127,7 @@ parse_read_command (enum reader_command type)
       goto error;
     }
               
-  discard_variables ();
+  discard_variables (current_dataset);
 
   pgm = xmalloc (sizeof *pgm);
   pgm->reader = any_reader_open (fh, &dict);
@@ -149,10 +149,11 @@ parse_read_command (enum reader_command type)
 
   pgm->map = finish_case_map (dict);
   
-  dict_destroy (default_dict);
-  default_dict = dict;
+  dict_destroy (dataset_dict (current_dataset));
+  dataset_set_dict (current_dataset, dict);
 
-  proc_set_source (create_case_source (&case_reader_source_class, pgm));
+  proc_set_source (current_dataset, 
+                  create_case_source (&case_reader_source_class, pgm));
 
   return CMD_SUCCESS;
 
@@ -312,7 +313,7 @@ parse_write_command (enum writer_type writer_type,
     *retain_unselected = true;
 
   handle = NULL;
-  dict = dict_clone (default_dict);
+  dict = dict_clone (dataset_dict (current_dataset));
   aw = xmalloc (sizeof *aw);
   aw->writer = NULL;
   aw->map = NULL;
@@ -483,11 +484,11 @@ parse_output_proc (enum writer_type writer_type)
   if (aw == NULL) 
     return CMD_CASCADING_FAILURE;
 
-  saved_filter_variable = dict_get_filter (default_dict);
+  saved_filter_variable = dict_get_filter (dataset_dict (current_dataset));
   if (retain_unselected) 
-    dict_set_filter (default_dict, NULL);
-  ok = procedure (output_proc, aw);
-  dict_set_filter (default_dict, saved_filter_variable);
+    dict_set_filter (dataset_dict (current_dataset), NULL);
+  ok = procedure (current_dataset,output_proc, aw);
+  dict_set_filter (dataset_dict (current_dataset), saved_filter_variable);
 
   case_writer_destroy (aw);
   return ok ? CMD_SUCCESS : CMD_CASCADING_FAILURE;
@@ -536,7 +537,7 @@ parse_output_trns (enum writer_type writer_type)
       return CMD_CASCADING_FAILURE;
     }
 
-  add_transformation (output_trns_proc, output_trns_free, t);
+  add_transformation (current_dataset, output_trns_proc, output_trns_free, t);
   return CMD_SUCCESS;
 }
 
@@ -829,7 +830,7 @@ cmd_match_files (void)
   case_nullify (&mtf.mtf_case);
   mtf.seq_num = 0;
   mtf.seq_nums = NULL;
-  dict_set_case_limit (mtf.dict, dict_get_case_limit (default_dict));
+  dict_set_case_limit (mtf.dict, dict_get_case_limit (dataset_dict (current_dataset)));
 
   lex_match ('/');
   while (token == T_ID
@@ -894,20 +895,20 @@ cmd_match_files (void)
             }
           used_active_file = true;
 
-          if (!proc_has_source ())
+          if (!proc_has_source (current_dataset))
             {
               msg (SE, _("Cannot specify the active file since no active "
                          "file has been defined."));
               goto error;
             }
 
-          if (proc_make_temporary_transformations_permanent ())
+          if (proc_make_temporary_transformations_permanent (current_dataset))
             msg (SE,
                  _("MATCH FILES may not be used after TEMPORARY when "
                    "the active file is an input source.  "
                    "Temporary transformations will be made permanent."));
 
-          file->dict = default_dict;
+          file->dict = dataset_dict (current_dataset);
         }
       else
         {
@@ -1124,7 +1125,7 @@ cmd_match_files (void)
      values. */
 
   if (!used_active_file)
-    discard_variables ();
+    discard_variables (current_dataset);
 
   dict_compact_values (mtf.dict);
   mtf.output = fastfile_create (dict_get_next_value_idx (mtf.dict));
@@ -1136,18 +1137,20 @@ cmd_match_files (void)
 
   if (used_active_file) 
     {
-      proc_set_sink (create_case_sink (&null_sink_class, default_dict, NULL));
-      ok = procedure (mtf_processing, &mtf) && mtf_processing_finish (&mtf); 
+      proc_set_sink (current_dataset, 
+                    create_case_sink (&null_sink_class, 
+                                      dataset_dict (current_dataset), NULL));
+      ok = procedure (current_dataset,mtf_processing, &mtf) && mtf_processing_finish (&mtf); 
     }
   else
     ok = mtf_processing_finish (&mtf);
 
-  discard_variables ();
+  discard_variables (current_dataset);
 
-  dict_destroy (default_dict);
-  default_dict = mtf.dict;
+  dict_destroy (dataset_dict (current_dataset));
+  dataset_set_dict (current_dataset, mtf.dict);
   mtf.dict = NULL;
-  proc_set_source (storage_source_create (mtf.output));
+  proc_set_source (current_dataset, storage_source_create (mtf.output));
   mtf.output = NULL;
   
   if (!mtf_free (&mtf))
index 11b633195b0e4f3715ee1ad5c1d7e2f0f016d02e..668ede87390173320c51eb2f3963d83292fc7de6 100644 (file)
@@ -99,7 +99,7 @@ in_input_program (void)
 static void
 emit_END_CASE (struct input_program_pgm *inp) 
 {
-  add_transformation (end_case_trns_proc, NULL, inp);
+  add_transformation (current_dataset, end_case_trns_proc, NULL, inp);
 }
 
 int
@@ -109,7 +109,7 @@ cmd_input_program (void)
   size_t i;
   bool saw_END_CASE = false;
 
-  discard_variables ();
+  discard_variables (current_dataset);
   if (token != '.')
     return lex_end_of_command ();
 
@@ -133,7 +133,7 @@ cmd_input_program (void)
           if (result == CMD_EOF)
             msg (SE, _("Unexpected end-of-file within INPUT PROGRAM."));
           inside_input_program = false;
-          discard_variables ();
+          discard_variables (current_dataset);
           destroy_input_program (inp);
           return result;
         }
@@ -142,25 +142,25 @@ cmd_input_program (void)
     emit_END_CASE (inp);
   inside_input_program = false;
 
-  if (dict_get_next_value_idx (default_dict) == 0) 
+  if (dict_get_next_value_idx (dataset_dict (current_dataset)) == 0) 
     {
       msg (SE, _("Input program did not create any variables."));
-      discard_variables ();
+      discard_variables (current_dataset);
       destroy_input_program (inp);
       return CMD_FAILURE;
     }
   
-  inp->trns_chain = proc_capture_transformations ();
+  inp->trns_chain = proc_capture_transformations (current_dataset);
   trns_chain_finalize (inp->trns_chain);
 
   /* Figure out how to initialize each input case. */
-  inp->init_cnt = dict_get_next_value_idx (default_dict);
+  inp->init_cnt = dict_get_next_value_idx (dataset_dict (current_dataset));
   inp->init = xnmalloc (inp->init_cnt, sizeof *inp->init);
   for (i = 0; i < inp->init_cnt; i++)
     inp->init[i] = -1;
-  for (i = 0; i < dict_get_var_cnt (default_dict); i++)
+  for (i = 0; i < dict_get_var_cnt (dataset_dict (current_dataset)); i++)
     {
-      struct variable *var = dict_get_var (default_dict, i);
+      struct variable *var = dict_get_var (dataset_dict (current_dataset), i);
       enum value_init_type value_init;
       size_t j;
       
@@ -172,9 +172,10 @@ cmd_input_program (void)
     }
   for (i = 0; i < inp->init_cnt; i++)
     assert (inp->init[i] != -1);
-  inp->case_size = dict_get_case_size (default_dict);
+  inp->case_size = dict_get_case_size (dataset_dict (current_dataset));
 
-  proc_set_source (create_case_source (&input_program_source_class, inp));
+  proc_set_source (current_dataset, 
+                 create_case_source (&input_program_source_class, inp));
 
   return CMD_SUCCESS;
 }
@@ -339,7 +340,7 @@ cmd_reread (void)
              return CMD_CASCADING_FAILURE;
            }
          
-         e = expr_parse (default_dict, EXPR_NUMBER);
+         e = expr_parse (dataset_dict (current_dataset), EXPR_NUMBER);
          if (!e)
            return CMD_CASCADING_FAILURE;
        }
@@ -363,7 +364,7 @@ cmd_reread (void)
   t = xmalloc (sizeof *t);
   t->reader = dfm_open_reader (fh);
   t->column = e;
-  add_transformation (reread_trns_proc, reread_trns_free, t);
+  add_transformation (current_dataset, reread_trns_proc, reread_trns_free, t);
 
   return CMD_SUCCESS;
 }
@@ -408,7 +409,7 @@ cmd_end_file (void)
 {
   assert (in_input_program ());
 
-  add_transformation (end_file_trns_proc, NULL, NULL);
+  add_transformation (current_dataset, end_file_trns_proc, NULL, NULL);
 
   return lex_end_of_command ();
 }
index 51623aac93d5abdf91664a7fe16c3164fc98f829..54b09c34f7a8548fbbdc7f76805ae7da16f2dbe1 100644 (file)
@@ -145,7 +145,7 @@ cmd_list (void)
   if (cmd.last == NOT_LONG)
     cmd.last = LONG_MAX;
   if (!cmd.sbc_variables)
-    dict_get_vars (default_dict, &cmd.v_variables, &cmd.n_variables,
+    dict_get_vars (dataset_dict (current_dataset), &cmd.v_variables, &cmd.n_variables,
                   (1u << DC_SYSTEM) | (1u << DC_SCRATCH));
   if (cmd.n_variables == 0)
     {
@@ -185,12 +185,12 @@ cmd_list (void)
   /* Weighting variable. */
   if (cmd.weight == LST_WEIGHT)
     {
-      if (dict_get_weight (default_dict) != NULL)
+      if (dict_get_weight (dataset_dict (current_dataset)) != NULL)
        {
          size_t i;
 
          for (i = 0; i < cmd.n_variables; i++)
-           if (cmd.v_variables[i] == dict_get_weight (default_dict))
+           if (cmd.v_variables[i] == dict_get_weight (dataset_dict (current_dataset)))
              break;
          if (i >= cmd.n_variables)
            {
@@ -199,7 +199,7 @@ cmd_list (void)
              cmd.v_variables = xnrealloc (cmd.v_variables, cmd.n_variables,
                                            sizeof *cmd.v_variables);
              cmd.v_variables[cmd.n_variables - 1]
-                = dict_get_weight (default_dict);
+                = dict_get_weight (dataset_dict (current_dataset));
            }
        }
       else
@@ -229,7 +229,7 @@ cmd_list (void)
   determine_layout ();
 
   case_idx = 0;
-  ok = procedure_with_splits (write_all_headers, list_cases, NULL, NULL);
+  ok = procedure_with_splits (current_dataset, write_all_headers, list_cases, NULL, NULL);
   ds_destroy(&line_buffer);
 
   clean_up ();
index 401360de164382d7abdd5a66bed6d6a72c17d328..99664fc6e66a2631cc6b8a60d1ad126ccf86726d 100644 (file)
@@ -152,7 +152,7 @@ struct matrix_data_pgm
 
     /* Continuous variables. */
     int n_continuous;           /* Number of continuous variables. */
-    int first_continuous;       /* Index into default_dict.var of
+    int first_continuous;       /* Index into dataset_dict (current_dataset).var of
                                    first continuous variable. */
   };
 
@@ -183,7 +183,7 @@ cmd_matrix_data (void)
     
   unsigned seen = 0;
   
-  discard_variables ();
+  discard_variables (current_dataset);
 
   pool = pool_create ();
   mx = pool_alloc (pool, sizeof *mx);
@@ -248,7 +248,7 @@ cmd_matrix_data (void)
                
                if (strcasecmp (v[i], "ROWTYPE_"))
                  {
-                   new_var = dict_create_var_assert (default_dict, v[i], 0);
+                   new_var = dict_create_var_assert (dataset_dict (current_dataset), v[i], 0);
                     attach_mxd_aux (new_var, MXD_CONTINUOUS, i);
                   }
                else
@@ -258,7 +258,7 @@ cmd_matrix_data (void)
            free (v);
          }
          
-          mx->rowtype_ = dict_create_var_assert (default_dict,
+          mx->rowtype_ = dict_create_var_assert (dataset_dict (current_dataset),
                                                  "ROWTYPE_", 8);
           attach_mxd_aux (mx->rowtype_, MXD_ROWTYPE, 0);
        }
@@ -313,7 +313,7 @@ cmd_matrix_data (void)
              goto lossage;
            }
          
-         if (dict_lookup_var (default_dict, tokid) == NULL
+         if (dict_lookup_var (dataset_dict (current_dataset), tokid) == NULL
              && (lex_look_ahead () == '.' || lex_look_ahead () == '/'))
            {
              if (!strcasecmp (tokid, "ROWTYPE_")
@@ -324,27 +324,27 @@ cmd_matrix_data (void)
                  goto lossage;
                }
 
-             mx->single_split = dict_create_var_assert (default_dict,
+             mx->single_split = dict_create_var_assert (dataset_dict (current_dataset),
                                                          tokid, 0);
               attach_mxd_aux (mx->single_split, MXD_CONTINUOUS, 0);
              lex_get ();
 
-              dict_set_split_vars (default_dict, &mx->single_split, 1);
+              dict_set_split_vars (dataset_dict (current_dataset), &mx->single_split, 1);
            }
          else
            {
              struct variable **split;
              size_t n;
 
-             if (!parse_variables (default_dict, &split, &n, PV_NO_DUPLICATE))
+             if (!parse_variables (dataset_dict (current_dataset), &split, &n, PV_NO_DUPLICATE))
                goto lossage;
 
-              dict_set_split_vars (default_dict, split, n);
+              dict_set_split_vars (dataset_dict (current_dataset), split, n);
            }
          
          {
-            struct variable *const *split = dict_get_split_vars (default_dict);
-            size_t split_cnt = dict_get_split_cnt (default_dict);
+            struct variable *const *split = dict_get_split_vars (dataset_dict (current_dataset));
+            size_t split_cnt = dict_get_split_cnt (dataset_dict (current_dataset));
             int i;
 
             for (i = 0; i < split_cnt; i++)
@@ -373,7 +373,7 @@ cmd_matrix_data (void)
            }
          seen |= 4;
 
-         if (!parse_variables (default_dict, &mx->factors, &mx->n_factors,
+         if (!parse_variables (dataset_dict (current_dataset), &mx->factors, &mx->n_factors,
                                 PV_NONE))
            goto lossage;
          
@@ -572,7 +572,7 @@ cmd_matrix_data (void)
     }
       
   /* Create VARNAME_. */
-  mx->varname_ = dict_create_var_assert (default_dict, "VARNAME_", 8);
+  mx->varname_ = dict_create_var_assert (dataset_dict (current_dataset), "VARNAME_", 8);
   attach_mxd_aux (mx->varname_, MXD_VARNAME, 0);
   
   /* Sort the dictionary variables into the desired order for the
@@ -581,9 +581,9 @@ cmd_matrix_data (void)
     struct variable **v;
     size_t nv;
 
-    dict_get_vars (default_dict, &v, &nv, 0);
+    dict_get_vars (dataset_dict (current_dataset), &v, &nv, 0);
     qsort (v, nv, sizeof *v, compare_variables_by_mxd_var_type);
-    dict_reorder_vars (default_dict, v, nv);
+    dict_reorder_vars (dataset_dict (current_dataset), v, nv);
     free (v);
   }
 
@@ -601,9 +601,9 @@ cmd_matrix_data (void)
     int i;
 
     mx->first_continuous = -1;
-    for (i = 0; i < dict_get_var_cnt (default_dict); i++)
+    for (i = 0; i < dict_get_var_cnt (dataset_dict (current_dataset)); i++)
       {
-       struct variable *v = dict_get_var (default_dict, i);
+       struct variable *v = dict_get_var (dataset_dict (current_dataset), i);
         struct mxd_var *mv = v->aux;
        int type = mv->var_type;
        
@@ -639,7 +639,7 @@ cmd_matrix_data (void)
   return ok ? CMD_SUCCESS : CMD_CASCADING_FAILURE;
 
 lossage:
-  discard_variables ();
+  discard_variables (current_dataset);
   free (mx->factors);
   pool_destroy (mx->container);
   return CMD_CASCADING_FAILURE;
@@ -945,13 +945,13 @@ read_matrices_without_rowtype (struct matrix_data_pgm *mx)
   nr.factor_values = xnmalloc (mx->n_factors * mx->cells,
                                sizeof *nr.factor_values);
   nr.max_cell_idx = 0;
-  nr.split_values = xnmalloc (dict_get_split_cnt (default_dict),
+  nr.split_values = xnmalloc (dict_get_split_cnt (dataset_dict (current_dataset)),
                               sizeof *nr.split_values);
 
-  proc_set_source (create_case_source (
+  proc_set_source (current_dataset, create_case_source (
                      &matrix_data_without_rowtype_source_class, &nr));
   
-  ok = procedure (NULL, NULL);
+  ok = procedure (current_dataset,NULL, NULL);
 
   free (nr.split_values);
   free (nr.factor_values);
@@ -1089,7 +1089,7 @@ nr_read_data_lines (struct nr_aux_data *nr,
            if (token.type != MNUM)
              {
                msg (SE, _("expecting value for %s %s"),
-                    dict_get_var (default_dict, j)->name,
+                    dict_get_var (dataset_dict (current_dataset), j)->name,
                      context (mx->reader));
                return 0;
              }
@@ -1206,7 +1206,7 @@ matrix_data_read_without_rowtype (struct case_source *source,
       if (!nr_output_data (nr, c, write_case, wc_data))
         return false;
 
-      if (dict_get_split_cnt (default_dict) == 0
+      if (dict_get_split_cnt (dataset_dict (current_dataset)) == 0
           || !another_token (mx->reader))
        return true;
     }
@@ -1229,14 +1229,14 @@ nr_read_splits (struct nr_aux_data *nr, int compare)
       return true;
     }
   
-  if (dict_get_split_vars (default_dict) == NULL)
+  if (dict_get_split_vars (dataset_dict (current_dataset)) == NULL)
     return true;
 
   if (mx->single_split)
     {
       if (!compare) 
         {
-          struct mxd_var *mv = dict_get_split_vars (default_dict)[0]->aux;
+          struct mxd_var *mv = dict_get_split_vars (dataset_dict (current_dataset))[0]->aux;
           nr->split_values[0] = ++mv->sub_type; 
         }
       return true;
@@ -1245,7 +1245,7 @@ nr_read_splits (struct nr_aux_data *nr, int compare)
   if (!compare)
     just_read = 1;
 
-  split_cnt = dict_get_split_cnt (default_dict);
+  split_cnt = dict_get_split_cnt (dataset_dict (current_dataset));
   for (i = 0; i < split_cnt; i++) 
     {
       struct matrix_token token;
@@ -1264,7 +1264,7 @@ nr_read_splits (struct nr_aux_data *nr, int compare)
         {
           msg (SE, _("Expecting value %g for %s."),
                nr->split_values[i],
-               dict_get_split_vars (default_dict)[i]->name);
+               dict_get_split_vars (dataset_dict (current_dataset))[i]->name);
           return false;
         }
     }
@@ -1351,13 +1351,13 @@ dump_cell_content (struct matrix_data_pgm *mx, int content, double *cp,
 
        for (j = 0; j < mx->n_continuous; j++)
          {
-            int fv = dict_get_var (default_dict, mx->first_continuous + j)->fv;
+            int fv = dict_get_var (dataset_dict (current_dataset), mx->first_continuous + j)->fv;
             case_data_rw (c, fv)->f = *cp;
            cp++;
          }
        if (type == 1)
          buf_copy_str_rpad (case_data_rw (c, mx->varname_->fv)->s, 8,
-                             dict_get_var (default_dict,
+                             dict_get_var (dataset_dict (current_dataset),
                                            mx->first_continuous + i)->name);
        if (!write_case (wc_data))
           return false;
@@ -1378,8 +1378,8 @@ nr_output_data (struct nr_aux_data *nr, struct ccase *c,
     size_t split_cnt;
     size_t i;
 
-    split_cnt = dict_get_split_cnt (default_dict);
-    split = dict_get_split_vars (default_dict);
+    split_cnt = dict_get_split_cnt (dataset_dict (current_dataset));
+    split = dict_get_split_vars (dataset_dict (current_dataset));
     for (i = 0; i < split_cnt; i++)
       case_data_rw (c, split[i]->fv)->f = nr->split_values[i];
   }
@@ -1487,9 +1487,10 @@ read_matrices_with_rowtype (struct matrix_data_pgm *mx)
   wr.current = NULL;
   mx->cells = 0;
 
-  proc_set_source (create_case_source (&matrix_data_with_rowtype_source_class,
+  proc_set_source (current_dataset, 
+                  create_case_source (&matrix_data_with_rowtype_source_class,
                                        &wr));
-  ok = procedure (NULL, NULL);
+  ok = procedure (current_dataset,NULL, NULL);
 
   free (wr.split_values);
   return ok;
@@ -1533,7 +1534,7 @@ wr_read_splits (struct wr_aux_data *wr,
   bool compare;
   size_t split_cnt;
 
-  split_cnt = dict_get_split_cnt (default_dict);
+  split_cnt = dict_get_split_cnt (dataset_dict (current_dataset));
   if (split_cnt == 0)
     return true;
 
@@ -1627,8 +1628,8 @@ wr_output_data (struct wr_aux_data *wr,
     size_t split_cnt;
     size_t i;
 
-    split_cnt = dict_get_split_cnt (default_dict);
-    split = dict_get_split_vars (default_dict);
+    split_cnt = dict_get_split_cnt (dataset_dict (current_dataset));
+    split = dict_get_split_vars (dataset_dict (current_dataset));
     for (i = 0; i < split_cnt; i++)
       case_data_rw (c, split[i]->fv)->f = wr->split_values[i];
   }
@@ -1955,7 +1956,7 @@ wr_read_indeps (struct wr_aux_data *wr)
        if (token.type != MNUM)
          {
            msg (SE, _("Syntax error expecting value for %s %s."),
-                 dict_get_var (default_dict, mx->first_continuous + j)->name,
+                 dict_get_var (dataset_dict (current_dataset), mx->first_continuous + j)->name,
                  context (mx->reader));
            return false;
          }
index 7eddf99dd855f80405428b5b27542651fc905cde..86d94cbcdc0134451435e9d560d1ff1bf14a9bf7 100644 (file)
@@ -69,7 +69,7 @@ cmd_print_space (void)
 
   if (token != '.')
     {
-      expr = expr_parse (default_dict, EXPR_NUMBER);
+      expr = expr_parse (dataset_dict (current_dataset), EXPR_NUMBER);
       if (token != '.')
        {
          expr_free (expr);
@@ -96,7 +96,8 @@ cmd_print_space (void)
   trns->writer = writer;
   trns->expr = expr;
 
-  add_transformation (print_space_trns_proc, print_space_trns_free, trns);
+  add_transformation (current_dataset, 
+                     print_space_trns_proc, print_space_trns_free, trns);
   return CMD_SUCCESS;
 }
 
index 87f20675097c055d4aad8d1cd81e3075a2d67d6f..474404b67e8da072386f6ab56b0cbd70e34e997e 100644 (file)
@@ -198,7 +198,7 @@ internal_cmd_print (enum which_formats which_formats, bool eject)
     dump_table (trns, fh);
 
   /* Put the transformation in the queue. */
-  add_transformation (print_trns_proc, print_trns_free, trns);
+  add_transformation (current_dataset, print_trns_proc, print_trns_free, trns);
 
   pool_destroy (tmp_pool);
 
@@ -299,7 +299,7 @@ parse_variable_argument (struct print_trns *trns, struct pool *tmp_pool,
   bool add_space;
   
   if (!parse_variables_pool (tmp_pool,
-                             default_dict, &vars, &var_cnt, PV_DUPLICATE))
+                             dataset_dict (current_dataset), &vars, &var_cnt, PV_DUPLICATE))
     return false;
 
   if (lex_is_number () || token == '(')
index e3a77e5d4ab3fcb9bfaccfd13f6a9361bacd7569..fc3c54b01c59c03e545972ec33236f1bfe978d44 100644 (file)
@@ -63,7 +63,7 @@ cmd_apply_dictionary (void)
   for (i = 0; i < dict_get_var_cnt (dict); i++)
     {
       struct variable *s = dict_get_var (dict, i);
-      struct variable *t = dict_lookup_var (default_dict, s->name);
+      struct variable *t = dict_lookup_var (dataset_dict (current_dataset), s->name);
       if (t == NULL)
        continue;
 
@@ -128,10 +128,10 @@ cmd_apply_dictionary (void)
   if (dict_get_weight (dict) != NULL) 
     {
       struct variable *new_weight
-        = dict_lookup_var (default_dict, dict_get_weight (dict)->name);
+        = dict_lookup_var (dataset_dict (current_dataset), dict_get_weight (dict)->name);
 
       if (new_weight != NULL)
-        dict_set_weight (default_dict, new_weight);
+        dict_set_weight (dataset_dict (current_dataset), new_weight);
     }
   
   any_reader_close (reader);
index 4bc6e3f47767335bba767099bc38a76be1d85c8e..5e1bd7d407fd68e100e0f7b98cf2c44e22a80395 100644 (file)
@@ -83,7 +83,7 @@ internal_cmd_formats (int which)
       if (token == '.')
        break;
 
-      if (!parse_variables (default_dict, &v, &cv, PV_NUMERIC))
+      if (!parse_variables (dataset_dict (current_dataset), &v, &cv, PV_NUMERIC))
        return CMD_FAILURE;
       type = v[0]->type;
 
index 21a5b6394832178005bc9d2c7a12e71970135dc7..db7d1e677e128a02ab9feb6ec27fb2b1386153a2 100644 (file)
@@ -49,7 +49,7 @@ cmd_missing_values (void)
     {
       size_t i;
 
-      if (!parse_variables (default_dict, &v, &nv, PV_NONE)) 
+      if (!parse_variables (dataset_dict (current_dataset), &v, &nv, PV_NONE)) 
         goto done;
 
       if (!lex_match ('('))
index 333f77045527ef2328f3a24315b38062cf39f50f..3bbf844f565ef465acada22596541f1fd6c21eed 100644 (file)
@@ -92,7 +92,7 @@ cmd_modify_vars (void)
 
   size_t i;
 
-  if (proc_make_temporary_transformations_permanent ())
+  if (proc_make_temporary_transformations_permanent (current_dataset))
     msg (SE, _("MODIFY VARS may not be used after TEMPORARY.  "
                "Temporary transformations will be made permanent."));
 
@@ -142,7 +142,7 @@ cmd_modify_vars (void)
                           "of variables."));
                      goto done;
                    }
-                 dict_get_vars (default_dict, &v, &nv, 1u << DC_SYSTEM);
+                 dict_get_vars (dataset_dict (current_dataset), &v, &nv, 1u << DC_SYSTEM);
                }
              else
                {
@@ -152,7 +152,7 @@ cmd_modify_vars (void)
                      free (v);
                      goto done;
                    }
-                 if (!parse_variables (default_dict, &v, &nv,
+                 if (!parse_variables (dataset_dict (current_dataset), &v, &nv,
                                        PV_APPEND | PV_NO_DUPLICATE))
                    {
                      free (v);
@@ -194,7 +194,7 @@ cmd_modify_vars (void)
                  msg (SE, _("`(' expected on RENAME subcommand."));
                  goto done;
                }
-             if (!parse_variables (default_dict, &vm.rename_vars, &vm.rename_cnt,
+             if (!parse_variables (dataset_dict (current_dataset), &vm.rename_vars, &vm.rename_cnt,
                                    PV_APPEND | PV_NO_DUPLICATE))
                goto done;
              if (!lex_match ('='))
@@ -239,7 +239,7 @@ cmd_modify_vars (void)
          already_encountered |= 4;
 
          lex_match ('=');
-         if (!parse_variables (default_dict, &keep_vars, &keep_cnt, PV_NONE))
+         if (!parse_variables (dataset_dict (current_dataset), &keep_vars, &keep_cnt, PV_NONE))
            goto done;
 
          /* Transform the list of variables to keep into a list of
@@ -248,7 +248,7 @@ cmd_modify_vars (void)
          sort (keep_vars, keep_cnt, sizeof *keep_vars,
                 compare_variables_given_ordering, &forward_positional_ordering);
 
-          dict_get_vars (default_dict, &all_vars, &all_cnt, 0);
+          dict_get_vars (dataset_dict (current_dataset), &all_vars, &all_cnt, 0);
           assert (all_cnt >= keep_cnt);
 
           drop_cnt = all_cnt - keep_cnt;
@@ -283,14 +283,14 @@ cmd_modify_vars (void)
          already_encountered |= 4;
 
          lex_match ('=');
-         if (!parse_variables (default_dict, &drop_vars, &drop_cnt, PV_NONE))
+         if (!parse_variables (dataset_dict (current_dataset), &drop_vars, &drop_cnt, PV_NONE))
            goto done;
           vm.drop_vars = drop_vars;
           vm.drop_cnt = drop_cnt;
        }
       else if (lex_match_id ("MAP"))
        {
-          struct dictionary *temp = dict_clone (default_dict);
+          struct dictionary *temp = dict_clone (dataset_dict (current_dataset));
           int success = rearrange_dict (temp, &vm);
           if (success) 
             {
@@ -320,11 +320,11 @@ cmd_modify_vars (void)
   if (already_encountered & (1 | 4))
     {
       /* Read the data. */
-      if (!procedure (NULL, NULL)) 
+      if (!procedure (current_dataset,NULL, NULL)) 
         goto done; 
     }
 
-  if (!rearrange_dict (default_dict, &vm))
+  if (!rearrange_dict (dataset_dict (current_dataset), &vm))
     goto done; 
 
   ret_code = CMD_SUCCESS;
index 71de3d8770ef1bc1e9f5085d96acc534bb641bbd..e1358a533c82b2154597e4075528a5412df30ddd 100644 (file)
@@ -78,7 +78,7 @@ cmd_numeric (void)
       /* Create each variable. */
       for (i = 0; i < nv; i++)
        {
-         struct variable *new_var = dict_create_var (default_dict, v[i], 0);
+         struct variable *new_var = dict_create_var (dataset_dict (current_dataset), v[i], 0);
          if (!new_var)
            msg (SE, _("There is already a variable named %s."), v[i]);
          else
@@ -157,7 +157,7 @@ cmd_string (void)
       /* Create each variable. */
       for (i = 0; i < nv; i++)
        {
-         struct variable *new_var = dict_create_var (default_dict, v[i],
+         struct variable *new_var = dict_create_var (dataset_dict (current_dataset), v[i],
                                                       width);
          if (!new_var)
            msg (SE, _("There is already a variable named %s."), v[i]);
@@ -192,7 +192,7 @@ cmd_leave (void)
 
   size_t i;
 
-  if (!parse_variables (default_dict, &v, &nv, PV_NONE))
+  if (!parse_variables (dataset_dict (current_dataset), &v, &nv, PV_NONE))
     return CMD_CASCADING_FAILURE;
   for (i = 0; i < nv; i++)
     v[i]->leave = true;
index b2bd3d76899cf0dda8ed8f200ced8be14da4a170..89827c93c54d023ed317b57b7d825c4f512c12ed 100644 (file)
@@ -47,7 +47,7 @@ cmd_rename_variables (void)
 
   int status = CMD_CASCADING_FAILURE;
 
-  if (proc_make_temporary_transformations_permanent ())
+  if (proc_make_temporary_transformations_permanent (current_dataset))
     msg (SE, _("RENAME VARS may not be used after TEMPORARY.  "
                "Temporary transformations will be made permanent."));
 
@@ -61,7 +61,7 @@ cmd_rename_variables (void)
          msg (SE, _("`(' expected."));
          goto lossage;
        }
-      if (!parse_variables (default_dict, &rename_vars, &rename_cnt,
+      if (!parse_variables (dataset_dict (current_dataset), &rename_vars, &rename_cnt,
                            PV_APPEND | PV_NO_DUPLICATE))
        goto lossage;
       if (!lex_match ('='))
@@ -93,7 +93,7 @@ cmd_rename_variables (void)
     }
   while (token != '.');
 
-  if (!dict_rename_vars (default_dict,
+  if (!dict_rename_vars (dataset_dict (current_dataset),
                          rename_vars, rename_new_names, rename_cnt,
                          &err_name)) 
     {
index 78769ca16da49515bdc45859b756c22c8e991a07..625f34c5184072aecb54587dcc55c72502769671 100644 (file)
@@ -44,7 +44,7 @@ int
 cmd_split_file (void)
 {
   if (lex_match_id ("OFF"))
-    dict_set_split_vars (default_dict, NULL, 0);
+    dict_set_split_vars (dataset_dict (current_dataset), NULL, 0);
   else
     {
       struct variable **v;
@@ -54,10 +54,10 @@ cmd_split_file (void)
       (void) ( lex_match_id ("SEPARATE") || lex_match_id ("LAYERED") );
       
       lex_match (T_BY);
-      if (!parse_variables (default_dict, &v, &n, PV_NO_DUPLICATE))
+      if (!parse_variables (dataset_dict (current_dataset), &v, &n, PV_NO_DUPLICATE))
        return CMD_CASCADING_FAILURE;
 
-      dict_set_split_vars (default_dict, v, n);
+      dict_set_split_vars (dataset_dict (current_dataset), v, n);
       free (v);
     }
 
@@ -73,7 +73,7 @@ output_split_file_values (const struct ccase *c)
   size_t split_cnt;
   int i;
 
-  split_cnt = dict_get_split_cnt (default_dict);
+  split_cnt = dict_get_split_cnt (dataset_dict (current_dataset));
   if (split_cnt == 0)
     return;
 
@@ -84,7 +84,7 @@ output_split_file_values (const struct ccase *c)
   tab_text (t, 0, 0, TAB_NONE, _("Variable"));
   tab_text (t, 1, 0, TAB_LEFT, _("Value"));
   tab_text (t, 2, 0, TAB_LEFT, _("Label"));
-  split = dict_get_split_vars (default_dict);
+  split = dict_get_split_vars (dataset_dict (current_dataset));
   for (i = 0; i < split_cnt; i++)
     {
       struct variable *v = split[i];
index 3f77b1de880f02471a0fd25bdb4b63d569e42c5a..c28723b044081be0acf387336a56b6d626aaa4bf 100644 (file)
@@ -199,13 +199,13 @@ cmd_display (void)
       som_blank_line ();
       if (!lex_force_match_id ("LABEL"))
        return CMD_FAILURE;
-      if (dict_get_label (default_dict) == NULL)
+      if (dict_get_label (dataset_dict (current_dataset)) == NULL)
        tab_output_text (TAB_LEFT,
                         _("The active file does not have a file label."));
       else
        {
          tab_output_text (TAB_LEFT | TAT_TITLE, _("File label:"));
-         tab_output_text (TAB_LEFT | TAB_FIX, dict_get_label (default_dict));
+         tab_output_text (TAB_LEFT | TAB_FIX, dict_get_label (dataset_dict (current_dataset)));
        }
     }
   else
@@ -241,7 +241,7 @@ cmd_display (void)
 
       if (token != '.')
        {
-         if (!parse_variables (default_dict, &vl, &n, PV_NONE))
+         if (!parse_variables (dataset_dict (current_dataset), &vl, &n, PV_NONE))
            {
              free (vl);
              return CMD_FAILURE;
@@ -249,7 +249,7 @@ cmd_display (void)
          as = AS_DICTIONARY;
        }
       else
-       dict_get_vars (default_dict, &vl, &n, 0);
+       dict_get_vars (dataset_dict (current_dataset), &vl, &n, 0);
 
       if (as == AS_SCRATCH)
        {
@@ -291,7 +291,7 @@ display_macros (void)
 static void
 display_documents (void)
 {
-  const char *documents = dict_get_documents (default_dict);
+  const char *documents = dict_get_documents (dataset_dict (current_dataset));
 
   som_blank_line ();
   if (documents == NULL)
@@ -574,7 +574,7 @@ display_vectors (int sorted)
   struct tab_table *t;
   size_t nvec;
   
-  nvec = dict_get_vector_cnt (default_dict);
+  nvec = dict_get_vector_cnt (dataset_dict (current_dataset));
   if (nvec == 0)
     {
       msg (SW, _("No vectors defined."));
@@ -583,7 +583,7 @@ display_vectors (int sorted)
 
   vl = xnmalloc (nvec, sizeof *vl);
   for (i = 0; i < nvec; i++)
-    vl[i] = dict_get_vector (default_dict, i);
+    vl[i] = dict_get_vector (dataset_dict (current_dataset), i);
   if (sorted)
     qsort (vl, nvec, sizeof *vl, compare_vectors_by_name);
 
index a1310227f4b655328e5ba79d427be2e507330fb7..e9c9b3f9f8fae8cec47eda0e1df86c66effb6740 100644 (file)
@@ -70,7 +70,7 @@ do_value_labels (int erase)
   
   while (token != '.')
     {
-      parse_err = !parse_variables (default_dict, &vars, &var_cnt, 
+      parse_err = !parse_variables (dataset_dict (current_dataset), &vars, &var_cnt, 
                                    PV_SAME_TYPE) ;
       if (var_cnt < 1)
        {
index 4d13514e93fc1ece9c6d32ad9a2ee0482ba45aaf..6c2f24f5551f02f37598149d2a646954427598de 100644 (file)
@@ -46,7 +46,7 @@ cmd_variable_alignment (void)
       size_t i;
       enum alignment align;
 
-      if (!parse_variables (default_dict, &v, &nv, PV_NONE))
+      if (!parse_variables (dataset_dict (current_dataset), &v, &nv, PV_NONE))
         return CMD_FAILURE;
 
       if ( lex_force_match('(') ) 
@@ -97,7 +97,7 @@ cmd_variable_width (void)
       size_t nv;
       size_t i;
 
-      if (!parse_variables (default_dict, &v, &nv, PV_NONE))
+      if (!parse_variables (dataset_dict (current_dataset), &v, &nv, PV_NONE))
         return CMD_FAILURE;
 
       if ( lex_force_match('(') ) 
@@ -132,7 +132,7 @@ cmd_variable_level (void)
       enum measure level;
       size_t i;
 
-      if (!parse_variables (default_dict, &v, &nv, PV_NONE))
+      if (!parse_variables (dataset_dict (current_dataset), &v, &nv, PV_NONE))
         return CMD_FAILURE;
 
       if ( lex_force_match('(') ) 
index 17f881125aa157e2e917c55e6eb4e34d22e724d4..63d64ef5bc58df7f5c12dc8f1628226b537298cd 100644 (file)
@@ -44,7 +44,7 @@ cmd_variable_labels (void)
 
       size_t i;
 
-      if (!parse_variables (default_dict, &v, &nv, PV_NONE))
+      if (!parse_variables (dataset_dict (current_dataset), &v, &nv, PV_NONE))
         return CMD_FAILURE;
 
       if (token != T_STRING)
index 17cbb1a64d5ae0984c3566dab13316fc46f933e2..050886d9effd334d203b627e37d6d2e91c6595d4 100644 (file)
@@ -75,7 +75,7 @@ cmd_vector (void)
                goto fail;
              }
 
-         if (dict_lookup_vector (default_dict, tokid))
+         if (dict_lookup_vector (dataset_dict (current_dataset), tokid))
            {
              msg (SE, _("There is already a vector with name %s."), tokid);
              goto fail;
@@ -104,11 +104,11 @@ cmd_vector (void)
              goto fail;
            }
 
-         if (!parse_variables (default_dict, &v, &nv,
+         if (!parse_variables (dataset_dict (current_dataset), &v, &nv,
                                 PV_SAME_TYPE | PV_DUPLICATE))
            goto fail;
 
-          dict_create_vector (default_dict, vecnames, v, nv);
+          dict_create_vector (dataset_dict (current_dataset), vecnames, v, nv);
           free (v);
        }
       else if (lex_match ('('))
@@ -158,7 +158,7 @@ cmd_vector (void)
              for (i = 0; i < nv; i++)
                {
                  sprintf (name, "%s%d", cp, i + 1);
-                 if (dict_lookup_var (default_dict, name))
+                 if (dict_lookup_var (dataset_dict (current_dataset), name))
                    {
                      msg (SE, _("There is already a variable named %s."),
                            name);
@@ -175,9 +175,9 @@ cmd_vector (void)
              for (i = 0; i < nv; i++)
                {
                  sprintf (name, "%s%d", cp, i + 1);
-                 v[i] = dict_create_var_assert (default_dict, name, 0);
+                 v[i] = dict_create_var_assert (dataset_dict (current_dataset), name, 0);
                }
-              if (!dict_create_vector (default_dict, cp, v, nv))
+              if (!dict_create_vector (dataset_dict (current_dataset), cp, v, nv))
                 NOT_REACHED ();
              cp += strlen (cp) + 1;
            }
index 58ed524d22a20b7e78068f943696c5016d19f4f1..fb0972f9afeadab3b92320cd5b033bd8244d4949 100644 (file)
@@ -37,7 +37,7 @@ int
 cmd_weight (void)
 {
   if (lex_match_id ("OFF"))
-    dict_set_weight (default_dict, NULL);
+    dict_set_weight (dataset_dict (current_dataset), NULL);
   else
     {
       struct variable *v;
@@ -57,7 +57,7 @@ cmd_weight (void)
          return CMD_CASCADING_FAILURE;
        }
 
-      dict_set_weight (default_dict, v);
+      dict_set_weight (dataset_dict (current_dataset), v);
     }
 
   return lex_end_of_command ();
index fe3bc5de2fe88f357baee3e00d259eab152eb120..dbd5ce2b2e688a3ea8269acbd8de8fd4d199d94a 100644 (file)
@@ -958,7 +958,7 @@ no_opt string operator STR_VAR ()
 
 no_opt perm_only function LAG (num_var v, pos_int n_before)
 {
-  struct ccase *c = lagged_case (n_before);
+  struct ccase *c = lagged_case (current_dataset, n_before);
   if (c != NULL)
     {
       double x = case_num (c, v->fv);
@@ -970,7 +970,7 @@ no_opt perm_only function LAG (num_var v, pos_int n_before)
 
 no_opt perm_only function LAG (num_var v)
 {
-  struct ccase *c = lagged_case (1);
+  struct ccase *c = lagged_case (current_dataset, 1);
   if (c != NULL)
     {
       double x = case_num (c, v->fv);
@@ -983,7 +983,7 @@ no_opt perm_only function LAG (num_var v)
 no_opt perm_only string function LAG (str_var v, pos_int n_before)
      expression e;
 {
-  struct ccase *c = lagged_case (n_before);
+  struct ccase *c = lagged_case (current_dataset, n_before);
   if (c != NULL)
     return copy_string (e, case_str (c, v->fv), v->width);
   else
@@ -993,7 +993,7 @@ no_opt perm_only string function LAG (str_var v, pos_int n_before)
 no_opt perm_only string function LAG (str_var v)
      expression e;
 {
-  struct ccase *c = lagged_case (1);
+  struct ccase *c = lagged_case (current_dataset, 1);
   if (c != NULL)
     return copy_string (e, case_str (c, v->fv), v->width);
   else
index 66d31d59bb80e82e544d69b5ddc29eb8801fc329..979e756acedfe83ea649e96098329c233aaec2cb 100644 (file)
@@ -733,7 +733,7 @@ parse_sysvar (struct expression *e)
           "JUL", "AUG", "SEP", "OCT", "NOV", "DEC",
         };
 
-      time_t last_proc_time = time_of_last_procedure ();
+      time_t last_proc_time = time_of_last_procedure (current_dataset);
       struct tm *time;
       char temp_buf[10];
 
@@ -751,7 +751,7 @@ parse_sysvar (struct expression *e)
     return expr_allocate_number (e, SYSMIS);
   else if (lex_match_id ("$JDATE"))
     {
-      time_t time = time_of_last_procedure ();
+      time_t time = time_of_last_procedure (current_dataset);
       struct tm *tm = localtime (&time);
       return expr_allocate_number (e, expr_ymd_to_ofs (tm->tm_year + 1900,
                                                        tm->tm_mon + 1,
@@ -759,7 +759,7 @@ parse_sysvar (struct expression *e)
     }
   else if (lex_match_id ("$TIME"))
     {
-      time_t time = time_of_last_procedure ();
+      time_t time = time_of_last_procedure (current_dataset);
       struct tm *tm = localtime (&time);
       return expr_allocate_number (e,
                                    expr_ymd_to_date (tm->tm_year + 1900,
@@ -872,7 +872,7 @@ parse_vector_element (struct expression *e)
   /* Find vector, skip token.
      The caller must already have verified that the current token
      is the name of a vector. */
-  vector = dict_lookup_vector (default_dict, tokid);
+  vector = dict_lookup_vector (dataset_dict (current_dataset), tokid);
   assert (vector != NULL);
   lex_get ();
 
@@ -1185,7 +1185,7 @@ parse_function (struct expression *e)
             size_t var_cnt;
             size_t i;
 
-            if (!parse_variables (default_dict, &vars, &var_cnt, PV_SINGLE))
+            if (!parse_variables (dataset_dict (current_dataset), &vars, &var_cnt, PV_SINGLE))
               goto fail;
             for (i = 0; i < var_cnt; i++)
               add_arg (&args, &arg_cnt, &arg_cap,
@@ -1230,7 +1230,8 @@ parse_function (struct expression *e)
       msg (SE, _("%s is not yet implemented."), f->prototype);
       goto fail;
     }
-  if ((f->flags & OPF_PERM_ONLY) && proc_in_temporary_transformations ()) 
+  if ((f->flags & OPF_PERM_ONLY) && 
+      proc_in_temporary_transformations (current_dataset)) 
     {
       msg (SE, _("%s may not appear after TEMPORARY."), f->prototype);
       goto fail;
@@ -1241,8 +1242,8 @@ parse_function (struct expression *e)
 
   if (n->type == OP_LAG_Vn || n->type == OP_LAG_Vs) 
     {
-      if (n_lag < 1)
-        n_lag = 1; 
+      if (dataset_n_lag (current_dataset) < 1)
+        dataset_set_n_lag (current_dataset, 1);
     }
   else if (n->type == OP_LAG_Vnn || n->type == OP_LAG_Vsn)
     {
@@ -1250,8 +1251,8 @@ parse_function (struct expression *e)
       assert (n->composite.arg_cnt == 2);
       assert (n->composite.args[1]->type == OP_pos_int);
       n_before = n->composite.args[1]->integer.i;
-      if (n_lag < n_before)
-        n_lag = n_before;
+      if ( dataset_n_lag (current_dataset) < n_before)
+        dataset_set_n_lag (current_dataset, n_before);
     }
   
   free (args);
index f503730f1059a09504ac22f4d9b0e90283c939b8..11271270b3734e3fdc83d4cc16e6cc49444027e5 100644 (file)
@@ -1584,7 +1584,7 @@ dump_subcommand (const subcommand *sbc)
     }
   else if (sbc->type == SBC_VARLIST)
     {
-      dump (1, "if (!parse_variables (default_dict, &p->%sv_%s, &p->%sn_%s, "
+      dump (1, "if (!parse_variables (dataset_dict (current_dataset), &p->%sv_%s, &p->%sn_%s, "
            "PV_APPEND%s%s))",
            st_lower (sbc->prefix), st_lower (sbc->name),
            st_lower (sbc->prefix), st_lower (sbc->name),
@@ -1740,18 +1740,18 @@ dump_parser (int persistent)
     {
       if (def->type == SBC_VARLIST)
        dump (1, "if (token == T_ID "
-              "&& dict_lookup_var (default_dict, tokid) != NULL "
+              "&& dict_lookup_var (dataset_dict (current_dataset), tokid) != NULL "
              "&& lex_look_ahead () != '=')");
       else
        {
          dump (0, "if ((token == T_ID "
-                "&& dict_lookup_var (default_dict, tokid) "
+                "&& dict_lookup_var (dataset_dict (current_dataset), tokid) "
                "&& lex_look_ahead () != '=')");
          dump (1, "     || token == T_ALL)");
        }
       dump (1, "{");
       dump (0, "p->sbc_%s++;", st_lower (def->name));
-      dump (1, "if (!parse_variables (default_dict, &p->%sv_%s, &p->%sn_%s, "
+      dump (1, "if (!parse_variables (dataset_dict (current_dataset), &p->%sv_%s, &p->%sn_%s, "
            "PV_APPEND))",
            st_lower (def->prefix), st_lower (def->name),
            st_lower (def->prefix), st_lower (def->name));
index a2068f02eaf2f3d568cc64fd77f33506c90a93f5..54a4e85c0e4158686f5514d0c78aeafa6b412c0a 100644 (file)
@@ -87,13 +87,13 @@ parse_dict_variable (const struct dictionary *d)
   return var;
 }
 
-/* Parses a variable name in default_dict and returns the
+/* Parses a variable name in dataset_dict (current_dataset) and returns the
    variable if successful.  On failure emits an error message and
    returns a null pointer. */
 struct variable *
 parse_variable (void)
 {
-  return parse_dict_variable (default_dict);
+  return parse_dict_variable (dataset_dict (current_dataset));
 }
 
 
@@ -548,12 +548,12 @@ parse_mixed_vars (char ***names, size_t *nnames, int pv_opts)
     }
   while (token == T_ID || token == T_ALL)
     {
-      if (token == T_ALL || dict_lookup_var (default_dict, tokid) != NULL)
+      if (token == T_ALL || dict_lookup_var (dataset_dict (current_dataset), tokid) != NULL)
        {
          struct variable **v;
          size_t nv;
 
-         if (!parse_variables (default_dict, &v, &nv, PV_NONE))
+         if (!parse_variables (dataset_dict (current_dataset), &v, &nv, PV_NONE))
            goto fail;
          *names = xnrealloc (*names, *nnames + nv, sizeof **names);
          for (i = 0; i < nv; i++)
index 788b19b01097df7adbf117998320294deacf95e8..a388b2d948a45d955b3e7b2b4cddae3b6db7e63f 100644 (file)
@@ -185,8 +185,8 @@ cmd_aggregate (void)
   case_nullify (&agr.break_case);
   
   agr.dict = dict_create ();
-  dict_set_label (agr.dict, dict_get_label (default_dict));
-  dict_set_documents (agr.dict, dict_get_documents (default_dict));
+  dict_set_label (agr.dict, dict_get_label (dataset_dict (current_dataset)));
+  dict_set_documents (agr.dict, dict_get_documents (dataset_dict (current_dataset)));
 
   /* OUTFILE subcommand must be first. */
   if (!lex_force_match_id ("OUTFILE"))
@@ -223,7 +223,7 @@ cmd_aggregate (void)
           int i;
 
          lex_match ('=');
-          agr.sort = sort_parse_criteria (default_dict,
+          agr.sort = sort_parse_criteria (dataset_dict (current_dataset),
                                           &agr.break_vars, &agr.break_var_cnt,
                                           &saw_direction, NULL);
           if (agr.sort == NULL)
@@ -268,7 +268,7 @@ cmd_aggregate (void)
     {
       /* The active file will be replaced by the aggregated data,
          so TEMPORARY is moot. */
-      proc_cancel_temporary_transformations ();
+      proc_cancel_temporary_transformations (current_dataset);
 
       if (agr.sort != NULL && !presorted) 
         {
@@ -279,8 +279,10 @@ cmd_aggregate (void)
       agr.sink = create_case_sink (&storage_sink_class, agr.dict, NULL);
       if (agr.sink->class->open != NULL)
         agr.sink->class->open (agr.sink);
-      proc_set_sink (create_case_sink (&null_sink_class, default_dict, NULL));
-      if (!procedure (agr_to_active_file, &agr))
+      proc_set_sink (current_dataset, 
+                    create_case_sink (&null_sink_class, 
+                                      dataset_dict (current_dataset), NULL));
+      if (!procedure (current_dataset,agr_to_active_file, &agr))
         goto error;
       if (agr.case_cnt > 0) 
         {
@@ -288,11 +290,12 @@ cmd_aggregate (void)
           if (!agr.sink->class->write (agr.sink, &agr.agr_case))
             goto error;
         }
-      discard_variables ();
-      dict_destroy (default_dict);
-      default_dict = agr.dict;
+      discard_variables (current_dataset);
+      dict_destroy (dataset_dict (current_dataset));
+      dataset_set_dict (current_dataset, agr.dict);
       agr.dict = NULL;
-      proc_set_source (agr.sink->class->make_source (agr.sink));
+      proc_set_source (current_dataset, 
+                      agr.sink->class->make_source (agr.sink));
       free_case_sink (agr.sink);
     }
   else
@@ -329,7 +332,7 @@ cmd_aggregate (void)
       else 
         {
           /* Active file is already sorted. */
-          if (!procedure (presorted_agr_to_sysfile, &agr))
+          if (!procedure (current_dataset,presorted_agr_to_sysfile, &agr))
             goto error;
         }
       
@@ -459,7 +462,7 @@ parse_aggregate_functions (struct agr_proc *agr)
            else if (function->n_args)
              pv_opts |= PV_SAME_TYPE;
 
-           if (!parse_variables (default_dict, &src, &n_src, pv_opts))
+           if (!parse_variables (dataset_dict (current_dataset), &src, &n_src, pv_opts))
              goto error;
          }
 
@@ -577,7 +580,7 @@ parse_aggregate_functions (struct agr_proc *agr)
                     if (destvar != NULL) 
                       {
                         if ((func_index == N || func_index == NMISS)
-                            && dict_get_weight (default_dict) != NULL)
+                            && dict_get_weight (dataset_dict (current_dataset)) != NULL)
                           destvar->print = destvar->write = f8_2; 
                         else
                           destvar->print = destvar->write = function->format;
@@ -587,7 +590,7 @@ parse_aggregate_functions (struct agr_proc *agr)
                v->src = NULL;
                destvar = dict_create_var (agr->dict, dest[i], 0);
                 if (func_index == N_NO_VARS
-                    && dict_get_weight (default_dict) != NULL)
+                    && dict_get_weight (dataset_dict (current_dataset)) != NULL)
                   destvar->print = destvar->write = f8_2; 
                 else
                   destvar->print = destvar->write = function->format;
@@ -745,7 +748,7 @@ accumulate_aggregate_info (struct agr_proc *agr,
   double weight;
   bool bad_warn = true;
 
-  weight = dict_get_case_weight (default_dict, input, &bad_warn);
+  weight = dict_get_case_weight (dataset_dict (current_dataset), input, &bad_warn);
 
   for (iter = agr->agr_vars; iter; iter = iter->next)
     if (iter->src)
index f967dd3aca217d29a7594d861707bb6b82dd47f0..2b44705fd94929a71652b2071836aaf911b52f00 100644 (file)
@@ -121,7 +121,7 @@ cmd_autorecode (void)
 
   lex_match_id ("VARIABLES");
   lex_match ('=');
-  if (!parse_variables (default_dict, &arc.src_vars, &arc.var_cnt,
+  if (!parse_variables (dataset_dict (current_dataset), &arc.src_vars, &arc.var_cnt,
                         PV_NO_DUPLICATE))
     goto lossage;
   if (!lex_force_match_id ("INTO"))
@@ -159,7 +159,7 @@ cmd_autorecode (void)
     {
       int j;
 
-      if (dict_lookup_var (default_dict, arc.dst_names[i]) != NULL)
+      if (dict_lookup_var (dataset_dict (current_dataset), arc.dst_names[i]) != NULL)
        {
          msg (SE, _("Target variable %s duplicates existing variable %s."),
               arc.dst_names[i], arc.dst_names[i]);
@@ -185,10 +185,10 @@ cmd_autorecode (void)
       arc.src_values[i] = hsh_create (10, compare_numeric_value,
                                       hash_numeric_value, NULL, NULL);
 
-  ok = procedure (autorecode_proc_func, &arc);
+  ok = procedure (current_dataset,autorecode_proc_func, &arc);
 
   for (i = 0; i < arc.var_cnt; i++)
-    arc.dst_vars[i] = dict_create_var_assert (default_dict,
+    arc.dst_vars[i] = dict_create_var_assert (dataset_dict (current_dataset),
                                               arc.dst_names[i], 0);
 
   recode (&arc);
@@ -267,7 +267,8 @@ recode (const struct autorecode_pgm *arc)
          hsh_force_insert (spec->items, item);
        }
     }
-  add_transformation (autorecode_trns_proc, autorecode_trns_free, trns);
+  add_transformation (current_dataset, 
+                     autorecode_trns_proc, autorecode_trns_free, trns);
 }
 
 /* Executes an AUTORECODE transformation. */
index 12d3645919d2eecf8600f0d25ce9358aae2a8f88..b1126470f6a17f63d72940199d15233f1d73dafd 100644 (file)
@@ -94,18 +94,18 @@ cor_custom_variables (struct cmd_correlations *cmd UNUSED, void *aux UNUSED)
 
   /* Ensure that this is a VARIABLES subcommand. */
   if (!lex_match_id ("VARIABLES")
-      && (token != T_ID || dict_lookup_var (default_dict, tokid) != NULL)
+      && (token != T_ID || dict_lookup_var (dataset_dict (current_dataset), tokid) != NULL)
       && token != T_ALL)
     return 2;
   lex_match ('=');
 
-  if (!parse_variables (default_dict, &v1, &nv1,
+  if (!parse_variables (dataset_dict (current_dataset), &v1, &nv1,
                        PV_NO_DUPLICATE | PV_NUMERIC))
     return 0;
   
   if (lex_match (T_WITH))
     {
-      if (!parse_variables (default_dict, &v2, &nv2,
+      if (!parse_variables (dataset_dict (current_dataset), &v2, &nv2,
                            PV_NO_DUPLICATE | PV_NUMERIC))
        {
          free (v1);
index 4dca0b9b580993c0a9b82176a742c2ba3dcc5777..405460de4a4b1c5a637fe9e7eea409b30e6da514 100644 (file)
@@ -293,7 +293,7 @@ internal_cmd_crosstabs (void)
   else
     write = CRS_WR_NONE;
 
-  ok = procedure_with_splits (precalc,
+  ok = procedure_with_splits (current_dataset, precalc,
                               mode == GENERAL ? calc_general : calc_integer,
                               postcalc, NULL);
 
@@ -313,7 +313,7 @@ crs_custom_tables (struct cmd_crosstabs *cmd UNUSED, void *aux UNUSED)
 
   /* Ensure that this is a TABLES subcommand. */
   if (!lex_match_id ("TABLES")
-      && (token != T_ID || dict_lookup_var (default_dict, tokid) == NULL)
+      && (token != T_ID || dict_lookup_var (dataset_dict (current_dataset), tokid) == NULL)
       && token != T_ALL)
     return 2;
   lex_match ('=');
@@ -321,7 +321,7 @@ crs_custom_tables (struct cmd_crosstabs *cmd UNUSED, void *aux UNUSED)
   if (variables != NULL)
     var_set = var_set_create_from_array (variables, variables_cnt);
   else
-    var_set = var_set_create_from_dict (default_dict);
+    var_set = var_set_create_from_dict (dataset_dict (current_dataset));
   assert (var_set != NULL);
   
   for (n_by = 0; ;)
@@ -423,7 +423,7 @@ crs_custom_variables (struct cmd_crosstabs *cmd UNUSED, void *aux UNUSED)
 
       long min, max;
       
-      if (!parse_variables (default_dict, &variables, &variables_cnt,
+      if (!parse_variables (dataset_dict (current_dataset), &variables, &variables_cnt,
                            (PV_APPEND | PV_NUMERIC
                             | PV_NO_DUPLICATE | PV_NO_SCRATCH)))
        return 0;
@@ -487,7 +487,7 @@ static int compare_table_entry (const void *, const void *, void *);
 static unsigned hash_table_entry (const void *, void *);
 
 /* Set up the crosstabulation tables for processing. */
-static void
+static  void
 precalc (const struct ccase *first, void *aux UNUSED)
 {
   output_split_file_values (first);
@@ -558,6 +558,7 @@ precalc (const struct ccase *first, void *aux UNUSED)
                               n_sorted_tab + 1, sizeof *sorted_tab);
       sorted_tab[n_sorted_tab] = NULL;
     }
+
 }
 
 /* Form crosstabulations for general mode. */
@@ -567,7 +568,7 @@ calc_general (const struct ccase *c, void *aux UNUSED)
   bool bad_warn = true;
 
   /* Case weight. */
-  double weight = dict_get_case_weight (default_dict, c, &bad_warn);
+  double weight = dict_get_case_weight (dataset_dict (current_dataset), c, &bad_warn);
 
   /* Flattened current table index. */
   int t;
@@ -641,7 +642,7 @@ calc_integer (const struct ccase *c, void *aux UNUSED)
   bool bad_warn = true;
 
   /* Case weight. */
-  double weight = dict_get_case_weight (default_dict, c, &bad_warn);
+  double weight = dict_get_case_weight (dataset_dict (current_dataset), c, &bad_warn);
   
   /* Flattened current table index. */
   int t;
index 9813d3882b44b4db51e9ae1c165f5c43650c3dfa..858825daf6075d37441681511c78b7280e201db8 100644 (file)
@@ -314,7 +314,7 @@ cmd_descriptives (void)
             {
               int i;
               
-              if (!parse_variables (default_dict, &vars, &var_cnt,
+              if (!parse_variables (dataset_dict (current_dataset), &vars, &var_cnt,
                                     PV_APPEND | PV_NO_DUPLICATE | PV_NUMERIC))
                goto error;
 
@@ -410,7 +410,7 @@ cmd_descriptives (void)
       dsc->vars[i].moments = moments_create (dsc->max_moment);
 
   /* Data pass. */
-  ok = multipass_procedure_with_splits (calc_descriptives, dsc);
+  ok = multipass_procedure_with_splits (current_dataset, calc_descriptives, dsc);
 
   /* Z-scoring! */
   if (ok && z_cnt)
@@ -473,7 +473,7 @@ try_name (struct dsc_proc *dsc, char *name)
 {
   size_t i;
 
-  if (dict_lookup_var (default_dict, name) != NULL)
+  if (dict_lookup_var (dataset_dict (current_dataset), name) != NULL)
     return false;
   for (i = 0; i < dsc->var_cnt; i++)
     if (!strcasecmp (dsc->vars[i].z_name, name))
@@ -667,7 +667,7 @@ setup_z_trns (struct dsc_proc *dsc)
          char *cp;
          struct variable *dst_var;
 
-         dst_var = dict_create_var_assert (default_dict, dv->z_name, 0);
+         dst_var = dict_create_var_assert (dataset_dict (current_dataset), dv->z_name, 0);
          if (dv->v->label)
            {
              dst_var->label = xmalloc (strlen (dv->v->label) + 12);
@@ -690,7 +690,8 @@ setup_z_trns (struct dsc_proc *dsc)
        }
     }
 
-  add_transformation (descriptives_trns_proc, descriptives_trns_free, t);
+  add_transformation (current_dataset, 
+                     descriptives_trns_proc, descriptives_trns_free, t);
 }
 \f
 /* Statistical calculation. */
@@ -728,7 +729,7 @@ calc_descriptives (const struct ccase *first,
        casereader_read (reader, &c);
        case_destroy (&c))
     {
-      double weight = dict_get_case_weight (default_dict, &c, &dsc->bad_warn);
+      double weight = dict_get_case_weight (dataset_dict (current_dataset), &c, &dsc->bad_warn);
       if (weight <= 0.0) 
         continue;
        
@@ -773,7 +774,7 @@ calc_descriptives (const struct ccase *first,
            casereader_read (reader, &c);
            case_destroy (&c))
         {
-          double weight = dict_get_case_weight (default_dict, &c, 
+          double weight = dict_get_case_weight (dataset_dict (current_dataset), &c, 
                                                &dsc->bad_warn);
           if (weight <= 0.0)
             continue;
index 443aaa17f3f9e2c914b78327368b06b1e016d4e0..6b748335fa46d40b723a8236e964f706343a67ea 100644 (file)
@@ -222,7 +222,7 @@ cmd_examine(void)
       subc_list_double_push(&percentile_list, 75);
     }
 
-  ok = multipass_procedure_with_splits (run_examine, &cmd);
+  ok = multipass_procedure_with_splits (current_dataset, run_examine, &cmd);
 
   if ( totals ) 
     {
@@ -510,13 +510,13 @@ xmn_custom_variables(struct cmd_examine *cmd, void *aux UNUSED)
 {
   lex_match('=');
 
-  if ((token != T_ID || dict_lookup_var (default_dict, tokid) == NULL)
+  if ((token != T_ID || dict_lookup_var (dataset_dict (current_dataset), tokid) == NULL)
       && token != T_ALL)
     {
       return 2;
     }
   
-  if (!parse_variables (default_dict, &dependent_vars, &n_dependent_vars,
+  if (!parse_variables (dataset_dict (current_dataset), &dependent_vars, &n_dependent_vars,
                        PV_NO_DUPLICATE | PV_NUMERIC | PV_NO_SCRATCH) )
     {
       free (dependent_vars);
@@ -550,7 +550,7 @@ examine_parse_independent_vars(struct cmd_examine *cmd)
   int success;
   struct factor *sf = xmalloc (sizeof *sf);
 
-  if ((token != T_ID || dict_lookup_var (default_dict, tokid) == NULL)
+  if ((token != T_ID || dict_lookup_var (dataset_dict (current_dataset), tokid) == NULL)
       && token != T_ALL)
     {
       free ( sf ) ;
@@ -566,7 +566,7 @@ examine_parse_independent_vars(struct cmd_examine *cmd)
 
       lex_match(T_BY);
 
-      if ((token != T_ID || dict_lookup_var (default_dict, tokid) == NULL)
+      if ((token != T_ID || dict_lookup_var (dataset_dict (current_dataset), tokid) == NULL)
          && token != T_ALL)
        {
          free ( sf ) ;
@@ -717,7 +717,7 @@ run_examine(const struct ccase *first, const struct casefile *cf, void *cmd_ )
       const int case_no = casereader_cnum(r);
 
       const double weight = 
-       dict_get_case_weight(default_dict, &c, &bad_weight_warn);
+       dict_get_case_weight(dataset_dict (current_dataset), &c, &bad_weight_warn);
 
       if ( cmd->miss == XMN_LISTWISE ) 
        {
index 0b452cb721942a5bcf33f13f5c248d3d0293a88d..f304fb0e36d2e83574087e236047a12439796d3c 100644 (file)
@@ -96,13 +96,13 @@ cmd_flip (void)
   struct case_sink *sink;
   bool ok;
 
-  if (proc_make_temporary_transformations_permanent ())
+  if (proc_make_temporary_transformations_permanent (current_dataset))
     msg (SW, _("FLIP ignores TEMPORARY.  "
                "Temporary transformations will be made permanent."));
 
   flip = pool_create_container (struct flip_pgm, pool);
   flip->var = NULL;
-  flip->idx_to_fv = dict_get_compacted_idx_to_fv (default_dict);
+  flip->idx_to_fv = dict_get_compacted_idx_to_fv (dataset_dict (current_dataset));
   pool_register (flip->pool, free, flip->idx_to_fv);
   flip->var_cnt = 0;
   flip->case_cnt = 0;
@@ -115,13 +115,13 @@ cmd_flip (void)
   if (lex_match_id ("VARIABLES"))
     {
       lex_match ('=');
-      if (!parse_variables (default_dict, &flip->var, &flip->var_cnt,
+      if (!parse_variables (dataset_dict (current_dataset), &flip->var, &flip->var_cnt,
                             PV_NO_DUPLICATE))
        goto error;
       lex_match ('/');
     }
   else
-    dict_get_vars (default_dict, &flip->var, &flip->var_cnt, 1u << DC_SYSTEM);
+    dict_get_vars (dataset_dict (current_dataset), &flip->var, &flip->var_cnt, 1u << DC_SYSTEM);
   pool_register (flip->pool, free, flip->var);
 
   lex_match ('/');
@@ -133,7 +133,7 @@ cmd_flip (void)
         goto error;
     }
   else
-    flip->new_names = dict_lookup_var (default_dict, "CASE_LBL");
+    flip->new_names = dict_lookup_var (dataset_dict (current_dataset), "CASE_LBL");
 
   if (flip->new_names)
     {
@@ -150,32 +150,32 @@ cmd_flip (void)
 
   /* Read the active file into a flip_sink. */
   flip->case_cnt = 0;
-  proc_make_temporary_transformations_permanent ();
+  proc_make_temporary_transformations_permanent (current_dataset);
   sink = flip_sink_create (flip);
   if (sink == NULL)
     goto error;
-  proc_set_sink (sink);
+  proc_set_sink (current_dataset, sink);
   flip->new_names_tail = NULL;
-  ok = procedure (NULL, NULL);
+  ok = procedure (current_dataset,NULL, NULL);
 
   /* Flip the data we read. */
   if (!flip_file (flip)) 
     {
-      discard_variables ();
+      discard_variables (current_dataset);
       goto error;
     }
 
   /* Flip the dictionary. */
-  dict_clear (default_dict);
+  dict_clear (dataset_dict (current_dataset));
   if (!build_dictionary (flip))
     {
-      discard_variables ();
+      discard_variables (current_dataset);
       goto error;
     }
-  flip->case_size = dict_get_case_size (default_dict);
+  flip->case_size = dict_get_case_size (dataset_dict (current_dataset));
 
   /* Set up flipped data for reading. */
-  proc_set_source (flip_source_create (flip));
+  proc_set_source (current_dataset, flip_source_create (flip));
 
   return ok ? lex_end_of_command () : CMD_CASCADING_FAILURE;
 
@@ -219,7 +219,7 @@ make_new_var (char name[])
   *cp = '\0';
   str_uppercase (name);
   
-  if (dict_create_var (default_dict, name, 0))
+  if (dict_create_var (dataset_dict (current_dataset), name, 0))
     return 1;
 
   /* Add numeric extensions until acceptable. */
@@ -234,7 +234,7 @@ make_new_var (char name[])
        memcpy (n, name, ofs);
        sprintf (&n[ofs], "%d", i);
 
-       if (dict_create_var (default_dict, n, 0))
+       if (dict_create_var (dataset_dict (current_dataset), n, 0))
          return 1;
       }
   }
@@ -247,7 +247,7 @@ make_new_var (char name[])
 static int
 build_dictionary (struct flip_pgm *flip)
 {
-  dict_create_var_assert (default_dict, "CASE_LBL", 8);
+  dict_create_var_assert (dataset_dict (current_dataset), "CASE_LBL", 8);
 
   if (flip->new_names_head == NULL)
     {
@@ -265,7 +265,7 @@ build_dictionary (struct flip_pgm *flip)
          char s[SHORT_NAME_LEN + 1];
 
          sprintf (s, "VAR%03d", i);
-         v = dict_create_var_assert (default_dict, s, 0);
+         v = dict_create_var_assert (dataset_dict (current_dataset), s, 0);
        }
     }
   else
@@ -309,7 +309,7 @@ flip_sink_create (struct flip_pgm *flip)
 
   flip->case_cnt = 1;
 
-  return create_case_sink (&flip_sink_class, default_dict, flip);
+  return create_case_sink (&flip_sink_class, dataset_dict (current_dataset), flip);
 }
 
 /* Writes case C to the FLIP sink.
index 5e9e18937bbc84c4b5135799d72b83a525898d5d..211498fc872ede6654c14dba0a69c5d990c18d14 100644 (file)
@@ -391,7 +391,7 @@ internal_cmd_frequencies (void)
   
 
   /* Do it! */
-  ok = procedure_with_splits (precalc, calc, postcalc, NULL);
+  ok = procedure_with_splits (current_dataset, precalc, calc, postcalc, NULL);
 
   free_frequencies(&cmd);
 
@@ -511,7 +511,7 @@ calc (const struct ccase *c, void *aux UNUSED)
   size_t i;
   bool bad_warn = true;
 
-  weight = dict_get_case_weight (default_dict, c, &bad_warn);
+  weight = dict_get_case_weight (dataset_dict (current_dataset), c, &bad_warn);
 
   for (i = 0; i < n_variables; i++)
     {
@@ -801,10 +801,10 @@ frq_custom_variables (struct cmd_frequencies *cmd UNUSED, void *aux UNUSED)
 
   lex_match ('=');
   if (token != T_ALL && (token != T_ID
-                         || dict_lookup_var (default_dict, tokid) == NULL))
+                         || dict_lookup_var (dataset_dict (current_dataset), tokid) == NULL))
     return 2;
 
-  if (!parse_variables (default_dict, &v_variables, &n_variables,
+  if (!parse_variables (dataset_dict (current_dataset), &v_variables, &n_variables,
                        PV_APPEND | PV_NO_SCRATCH))
     return 0;
 
@@ -882,7 +882,7 @@ static int
 frq_custom_grouped (struct cmd_frequencies *cmd UNUSED, void *aux UNUSED)
 {
   lex_match ('=');
-  if ((token == T_ID && dict_lookup_var (default_dict, tokid) != NULL)
+  if ((token == T_ID && dict_lookup_var (dataset_dict (current_dataset), tokid) != NULL)
       || token == T_ID)
     for (;;)
       {
@@ -896,7 +896,7 @@ frq_custom_grouped (struct cmd_frequencies *cmd UNUSED, void *aux UNUSED)
        size_t n;
        struct variable **v;
 
-       if (!parse_variables (default_dict, &v, &n,
+       if (!parse_variables (dataset_dict (current_dataset), &v, &n,
                               PV_NO_DUPLICATE | PV_NUMERIC))
          return 0;
        if (lex_match ('('))
@@ -949,7 +949,7 @@ frq_custom_grouped (struct cmd_frequencies *cmd UNUSED, void *aux UNUSED)
        free (v);
        if (!lex_match ('/'))
          break;
-       if ((token != T_ID || dict_lookup_var (default_dict, tokid) != NULL)
+       if ((token != T_ID || dict_lookup_var (dataset_dict (current_dataset), tokid) != NULL)
             && token != T_ALL)
          {
            lex_put_back ('/');
index 8405ff3637d68697659e35da5ef62cfce5c6aa71..a8739bc2f41ec3bf88b1c872ec6b069c38a41db1 100644 (file)
@@ -128,7 +128,7 @@ mns_custom_tables (struct cmd_means *cmd, void *aux UNUSED)
   struct var_set *var_set;
   
   if (!lex_match_id ("TABLES")
-      && (token != T_ID || dict_lookup_var (default_dict, tokid) == NULL)
+      && (token != T_ID || dict_lookup_var (dataset_dict (current_dataset), tokid) == NULL)
       && token != T_ALL)
     return 2;
   lex_match ('=');
@@ -140,7 +140,7 @@ mns_custom_tables (struct cmd_means *cmd, void *aux UNUSED)
       return 0;
     }
 
-  var_set = var_set_create_from_dict (default_dict);
+  var_set = var_set_create_from_dict (dataset_dict (current_dataset));
   assert (var_set != NULL);
 
   do
index bdf1ec90a22c3a41d812562526dce4145dfe8c6f..0b75608a761b482286eb3df470d233477e576da6 100644 (file)
@@ -149,7 +149,7 @@ cmd_oneway(void)
        }
     }
 
-  ok = multipass_procedure_with_splits (run_oneway, &cmd);
+  ok = multipass_procedure_with_splits (current_dataset, run_oneway, &cmd);
 
   free (vars);
   free_oneway (&cmd);
@@ -228,12 +228,12 @@ oneway_custom_variables(struct cmd_oneway *cmd UNUSED, void *aux UNUSED)
 
   lex_match('=');
 
-  if ((token != T_ID || dict_lookup_var (default_dict, tokid) == NULL)
+  if ((token != T_ID || dict_lookup_var (dataset_dict (current_dataset), tokid) == NULL)
       && token != T_ALL)
     return 2;
   
 
-  if (!parse_variables (default_dict, &vars, &n_vars,
+  if (!parse_variables (dataset_dict (current_dataset), &vars, &n_vars,
                        PV_DUPLICATE 
                        | PV_NUMERIC | PV_NO_SCRATCH) )
     {
@@ -917,7 +917,7 @@ run_oneway(const struct ccase *first, const struct casefile *cf, void *cmd_)
       size_t i;
 
       const double weight = 
-       dict_get_case_weight (default_dict, &c, &bad_weight_warn);
+       dict_get_case_weight (dataset_dict (current_dataset), &c, &bad_weight_warn);
       
       const union value *indep_val = case_data (&c, indep_var->fv);
 
index 491160b6097a702eb51854b06e2cbdb6b42cd02d..9441a19bd572d082f0c6566edcc2d35aaa30f624 100644 (file)
@@ -238,13 +238,13 @@ rank_cmd (const struct sort_criteria *sc,
   struct sort_criteria criteria;
   bool result = true;
   int i;
-  const int n_splits = dict_get_split_cnt (default_dict);
+  const int n_splits = dict_get_split_cnt (dataset_dict (current_dataset));
 
   criteria.crit_cnt = n_splits + n_group_vars + 1;
   criteria.crits = xnmalloc (criteria.crit_cnt, sizeof *criteria.crits);
   for (i = 0; i < n_splits ; i++) 
     {
-      struct variable *v = dict_get_split_vars (default_dict)[i];
+      struct variable *v = dict_get_split_vars (dataset_dict (current_dataset))[i];
       criteria.crits[i].fv = v->fv;
       criteria.crits[i].width = v->width;
       criteria.crits[i].dir = SRT_ASCEND;
@@ -263,10 +263,10 @@ rank_cmd (const struct sort_criteria *sc,
       struct casefile *sorted_cf ;
 
       /* Obtain active file in CF. */
-      if (!procedure (NULL, NULL))
+      if (!procedure (current_dataset, NULL, NULL))
        goto error;
 
-      cf = proc_capture_output ();
+      cf = proc_capture_output (current_dataset);
 
       /* Sort CF into SORTED_CF. */
       reader = casefile_get_destructive_reader (cf) ;
@@ -284,7 +284,7 @@ rank_cmd (const struct sort_criteria *sc,
          continue ;
        }
       
-      proc_set_source (storage_source_create (out));
+      proc_set_source (current_dataset, storage_source_create (out));
     }
 
   free (criteria.crits);
@@ -516,7 +516,7 @@ rank_cases (struct casereader *cr,
         break;
       
       this_value = case_data (&this_case, fv);
-      c = dict_get_case_weight (default_dict, &this_case, &warn);
+      c = dict_get_case_weight (dataset_dict (current_dataset), &this_case, &warn);
               
       lookahead = casereader_clone (cr);
       n = 0;
@@ -535,7 +535,7 @@ rank_cases (struct casereader *cr,
               break; 
             }
 
-          c += dict_get_case_weight (default_dict, &lookahead_case, &warn);
+          c += dict_get_case_weight (dataset_dict (current_dataset), &lookahead_case, &warn);
           case_destroy (&lookahead_case);
           n++;
         }
@@ -610,13 +610,13 @@ rank_sorted_casefile (struct casefile *cf,
       this_value = case_data( &group_case, ultimate_crit->fv);
 
       if ( !value_is_missing(mv, this_value) )
-       w = dict_get_case_weight (default_dict, &group_case, &warn);
+       w = dict_get_case_weight (dataset_dict (current_dataset), &group_case, &warn);
 
       while (casereader_read (lookahead, &this_case)) 
         {
          const union value *this_value = 
            case_data(&this_case, ultimate_crit->fv);
-          double c = dict_get_case_weight (default_dict, &this_case, &warn);
+          double c = dict_get_case_weight (dataset_dict (current_dataset), &this_case, &warn);
           if (!same_group (&group_case, &this_case, crit)) 
             {
               rank_cases (pos, casereader_cnum (lookahead) - 1,
@@ -676,14 +676,14 @@ create_rank_variable (enum RANK_FUNC f,
   char name[SHORT_NAME_LEN + 1];
 
   if ( vname ) 
-    var = dict_create_var(default_dict, vname, 0);
+    var = dict_create_var(dataset_dict (current_dataset), vname, 0);
 
   if ( NULL == var )
     {
       snprintf(name, SHORT_NAME_LEN + 1, "%c%s", 
               function_name[f][0], src_var->name);
   
-      var = dict_create_var(default_dict, name, 0);
+      var = dict_create_var(dataset_dict (current_dataset), name, 0);
     }
 
   i = 1;
@@ -694,7 +694,7 @@ create_rank_variable (enum RANK_FUNC f,
       snprintf(name, SHORT_NAME_LEN + 1, "%s%03d", func_abb, 
               i);
 
-      var = dict_create_var(default_dict, name, 0);
+      var = dict_create_var(dataset_dict (current_dataset), name, 0);
       if (i++ >= 999) 
        break;
     }
@@ -708,7 +708,7 @@ create_rank_variable (enum RANK_FUNC f,
       snprintf(name, SHORT_NAME_LEN + 1, 
               "RNK%s%02d", func_abb, i);
 
-      var = dict_create_var(default_dict, name, 0);
+      var = dict_create_var(dataset_dict (current_dataset), name, 0);
       if ( i++ >= 99 ) 
        break;
     }
@@ -891,9 +891,9 @@ cmd_rank(void)
 
   /* Add a variable which we can sort by to get back the original
      order */
-  order = dict_create_var_assert (default_dict, "$ORDER_", 0);
+  order = dict_create_var_assert (dataset_dict (current_dataset), "$ORDER_", 0);
 
-  add_transformation (create_resort_key, 0, order);
+  add_transformation (current_dataset, create_resort_key, 0, order);
 
   /* Do the ranking */
   result = rank_cmd (sc, rank_specs, n_rank_specs);
@@ -913,7 +913,7 @@ cmd_rank(void)
 }
 
   /* ... and we don't need our sort key anymore. So delete it */
-  dict_delete_var (default_dict, order);
+  dict_delete_var (dataset_dict (current_dataset), order);
 
   rank_cleanup();
 
@@ -930,21 +930,21 @@ rank_custom_variables(struct cmd_rank *cmd UNUSED, void *aux UNUSED)
 
   lex_match('=');
 
-  if ((token != T_ID || dict_lookup_var (default_dict, tokid) == NULL)
+  if ((token != T_ID || dict_lookup_var (dataset_dict (current_dataset), tokid) == NULL)
       && token != T_ALL)
       return 2;
 
-  sc = sort_parse_criteria (default_dict
+  sc = sort_parse_criteria (dataset_dict (current_dataset)
                            &src_vars, &n_src_vars, 0, terminators);
 
   if ( lex_match(T_BY)  )
     {
-      if ((token != T_ID || dict_lookup_var (default_dict, tokid) == NULL))
+      if ((token != T_ID || dict_lookup_var (dataset_dict (current_dataset), tokid) == NULL))
        {
          return 2;
        }
 
-      if (!parse_variables (default_dict, &group_vars, &n_group_vars,
+      if (!parse_variables (dataset_dict (current_dataset), &group_vars, &n_group_vars,
                            PV_NO_DUPLICATE | PV_NUMERIC | PV_NO_SCRATCH) )
        {
          free (group_vars);
@@ -977,7 +977,7 @@ parse_rank_function(struct cmd_rank *cmd UNUSED, enum RANK_FUNC f)
       while( token == T_ID ) 
        {
 
-         if ( dict_lookup_var (default_dict, tokid) != NULL )
+         if ( dict_lookup_var (dataset_dict (current_dataset), tokid) != NULL )
            {
              msg(SE, _("Variable %s already exists."), tokid);
              return 0;
index 7b0e56ed2d34b1a3e8410206da958b992b166028..1690abc0c9d1f614a5ddad2e16438a868949fe5d 100644 (file)
@@ -626,7 +626,7 @@ regression_trns_resid_proc (void *t_, struct ccase *c,
 static int
 try_name (char *name)
 {
-  if (dict_lookup_var (default_dict, name) != NULL)
+  if (dict_lookup_var (dataset_dict (current_dataset), name) != NULL)
     return 0;
 
   return 1;
@@ -657,10 +657,10 @@ reg_save_var (const char *prefix, trns_proc_func * f,
   t->n_trns = n_trns;
   t->c = c;
   reg_get_name (name, prefix);
-  new_var = dict_create_var (default_dict, name, 0);
+  new_var = dict_create_var (dataset_dict (current_dataset), name, 0);
   assert (new_var != NULL);
   *v = new_var;
-  add_transformation (f, regression_trns_free, t);
+  add_transformation (current_dataset, f, regression_trns_free, t);
   trns_index++;
 }
 static void
@@ -938,7 +938,7 @@ cmd_regression (void)
     return CMD_FAILURE;
 
   models = xnmalloc (cmd.n_dependent, sizeof *models);
-  if (!multipass_procedure_with_splits (run_regression, &cmd))
+  if (!multipass_procedure_with_splits (current_dataset, run_regression, &cmd))
     return CMD_CASCADING_FAILURE;
   subcommand_save (cmd.sbc_save, models);
   free (v_variables);
@@ -1004,12 +1004,12 @@ regression_custom_variables (struct cmd_regression *cmd UNUSED,
 
   lex_match ('=');
 
-  if ((token != T_ID || dict_lookup_var (default_dict, tokid) == NULL)
+  if ((token != T_ID || dict_lookup_var (dataset_dict (current_dataset), tokid) == NULL)
       && token != T_ALL)
     return 2;
 
 
-  if (!parse_variables (default_dict, &v_variables, &n_variables, PV_NONE))
+  if (!parse_variables (dataset_dict (current_dataset), &v_variables, &n_variables, PV_NONE))
     {
       free (v_variables);
       return 0;
@@ -1118,7 +1118,7 @@ run_regression (const struct ccase *first,
 
   if (!v_variables)
     {
-      dict_get_vars (default_dict, &v_variables, &n_variables,
+      dict_get_vars (dataset_dict (current_dataset), &v_variables, &n_variables,
                     1u << DC_SYSTEM);
     }
 
index f50b67fec156245c32ebf328c14d5eac35aae5cc..8ebf4b28eca8b27252bfc8957bc44cf38ad84554 100644 (file)
@@ -47,7 +47,7 @@ cmd_sort_cases (void)
 
   lex_match (T_BY);
 
-  criteria = sort_parse_criteria (default_dict, NULL, NULL, NULL, NULL);
+  criteria = sort_parse_criteria (dataset_dict (current_dataset), NULL, NULL, NULL, NULL);
   if (criteria == NULL)
     return CMD_CASCADING_FAILURE;
 
index 1f182ec8a1dedbc9d91e6a2638e63130485f46f0..492820cd20ba69cd9c158efaa24c642387c6d326 100644 (file)
@@ -345,7 +345,7 @@ cmd_t_test(void)
 
   bad_weight_warn = true;
 
-  ok = multipass_procedure_with_splits (calculate, &cmd);
+  ok = multipass_procedure_with_splits (current_dataset, calculate, &cmd);
 
   n_pairs=0;
   free(pairs);
@@ -459,7 +459,7 @@ tts_custom_pairs (struct cmd_t_test *cmd UNUSED, void *aux UNUSED)
   lex_match('=');
 
   n_vars=0;
-  if (!parse_variables (default_dict, &vars, &n_vars,
+  if (!parse_variables (dataset_dict (current_dataset), &vars, &n_vars,
                        PV_DUPLICATE | PV_NUMERIC | PV_NO_SCRATCH))
     {
       free (vars);
@@ -471,7 +471,7 @@ tts_custom_pairs (struct cmd_t_test *cmd UNUSED, void *aux UNUSED)
   if (lex_match (T_WITH))
     {
       n_before_WITH = n_vars;
-      if (!parse_variables (default_dict, &vars, &n_vars,
+      if (!parse_variables (dataset_dict (current_dataset), &vars, &n_vars,
                            PV_DUPLICATE | PV_APPEND
                            | PV_NUMERIC | PV_NO_SCRATCH))
        {
@@ -1416,7 +1416,7 @@ common_calc (const struct ccase *c, void *_cmd)
   int i;
   struct cmd_t_test *cmd = (struct cmd_t_test *)_cmd;  
 
-  double weight = dict_get_case_weight (default_dict, c, &bad_weight_warn);
+  double weight = dict_get_case_weight (dataset_dict (current_dataset), c, &bad_weight_warn);
 
 
   /* Skip the entire case if /MISSING=LISTWISE is set */
@@ -1516,7 +1516,7 @@ one_sample_calc (const struct ccase *c, void *cmd_)
   struct cmd_t_test *cmd = (struct cmd_t_test *)cmd_;
 
 
-  double weight = dict_get_case_weight (default_dict, c, &bad_weight_warn);
+  double weight = dict_get_case_weight (dataset_dict (current_dataset), c, &bad_weight_warn);
 
   /* Skip the entire case if /MISSING=LISTWISE is set */
   if ( cmd->miss == TTS_LISTWISE ) 
@@ -1606,7 +1606,7 @@ paired_calc (const struct ccase *c, void *cmd_)
 
   struct cmd_t_test *cmd  = (struct cmd_t_test *) cmd_;
 
-  double weight = dict_get_case_weight (default_dict, c, &bad_weight_warn);
+  double weight = dict_get_case_weight (dataset_dict (current_dataset), c, &bad_weight_warn);
 
   /* Skip the entire case if /MISSING=LISTWISE is set , 
    AND one member of a pair is missing */
@@ -1752,7 +1752,7 @@ group_calc (const struct ccase *c, struct cmd_t_test *cmd)
   const union value *gv = case_data (c, indep_var->fv);
 
   const double weight = 
-    dict_get_case_weight (default_dict, c, &bad_weight_warn);
+    dict_get_case_weight (dataset_dict (current_dataset), c, &bad_weight_warn);
 
   if ( value_is_missing(&indep_var->miss, gv) )
     {
index f44a7a932526697ffb6940185bf71300cd694853..685b3152cbffa44b9581f25a0438fbaeef0ee635 100644 (file)
@@ -603,7 +603,7 @@ show_undefined (void)
 static void
 show_weight (void) 
 {
-  struct variable *var = dict_get_weight (default_dict);
+  struct variable *var = dict_get_weight (dataset_dict (current_dataset));
   if (var == NULL)
     msg (SN, _("WEIGHT is off."));
   else
index 18e4bb2745068af5f6e156e8642b4d1f497ca070..ffb2a48ee939e3389d9f2499dc8312a9e6a6e97c 100644 (file)
@@ -97,13 +97,13 @@ cmd_file_label (void)
   while (isspace ((unsigned char) *label))
     label++;
 
-  dict_set_label (default_dict, label);
+  dict_set_label (dataset_dict (current_dataset), label);
   token = '.';
 
   return CMD_SUCCESS;
 }
 
-/* Add LINE as a line of document information to default_dict,
+/* Add LINE as a line of document information to dataset_dict (current_dataset),
    indented by INDENT spaces. */
 static void
 add_document_line (const char *line, int indent)
@@ -112,7 +112,7 @@ add_document_line (const char *line, int indent)
   size_t old_len;
   char *new_documents;
 
-  old_documents = dict_get_documents (default_dict);
+  old_documents = dict_get_documents (dataset_dict (current_dataset));
   old_len = old_documents != NULL ? strlen (old_documents) : 0;
   new_documents = xmalloc (old_len + 81);
 
@@ -121,7 +121,7 @@ add_document_line (const char *line, int indent)
   buf_copy_str_rpad (new_documents + old_len + indent, 80 - indent, line);
   new_documents[old_len + 80] = '\0';
 
-  dict_set_documents (default_dict, new_documents);
+  dict_set_documents (dataset_dict (current_dataset), new_documents);
 
   free (new_documents);
 }
@@ -134,7 +134,7 @@ cmd_document (void)
   {
     char buf[256];
 
-    if (dict_get_documents (default_dict) != NULL)
+    if (dict_get_documents (dataset_dict (current_dataset)) != NULL)
       add_document_line ("", 0);
 
     sprintf (buf, _("Document entered %s by %s:"), get_start_date (), version);
@@ -173,7 +173,7 @@ cmd_document (void)
 int
 cmd_drop_documents (void)
 {
-  dict_set_documents (default_dict, NULL);
+  dict_set_documents (dataset_dict (current_dataset), NULL);
 
   return lex_end_of_command ();
 }
index f24ecac591cbb2340086963f961174852561708d..c4ea4c5a4db266958b2f20bfb78a1049f6c0f26a 100644 (file)
@@ -94,7 +94,8 @@ cmd_compute (void)
   if (compute->rvalue == NULL)
     goto fail;
 
-  add_transformation (get_proc_func (lvalue), compute_trns_free, compute);
+  add_transformation (current_dataset, 
+                     get_proc_func (lvalue), compute_trns_free, compute);
 
   lvalue_finalize (lvalue, compute);
 
@@ -219,7 +220,7 @@ cmd_if (void)
   compute = compute_trns_create ();
 
   /* Test expression. */
-  compute->test = expr_parse (default_dict, EXPR_BOOLEAN);
+  compute->test = expr_parse (dataset_dict (current_dataset), EXPR_BOOLEAN);
   if (compute->test == NULL)
     goto fail;
 
@@ -235,7 +236,8 @@ cmd_if (void)
   if (compute->rvalue == NULL)
     goto fail;
 
-  add_transformation (get_proc_func (lvalue), compute_trns_free, compute);
+  add_transformation (current_dataset, 
+                     get_proc_func (lvalue), compute_trns_free, compute);
 
   lvalue_finalize (lvalue, compute);
 
@@ -267,7 +269,7 @@ parse_rvalue (const struct lvalue *lvalue)
 {
   bool is_numeric = lvalue_get_type (lvalue) == NUMERIC;
 
-  return expr_parse (default_dict, is_numeric ? EXPR_NUMBER : EXPR_STRING);
+  return expr_parse (dataset_dict (current_dataset), is_numeric ? EXPR_NUMBER : EXPR_STRING);
 }
 
 /* Returns a new struct compute_trns after initializing its fields. */
@@ -325,7 +327,7 @@ lvalue_parse (void)
   if (lex_look_ahead () == '(')
     {
       /* Vector. */
-      lvalue->vector = dict_lookup_vector (default_dict, tokid);
+      lvalue->vector = dict_lookup_vector (dataset_dict (current_dataset), tokid);
       if (lvalue->vector == NULL)
        {
          msg (SE, _("There is no vector named %s."), tokid);
@@ -336,7 +338,7 @@ lvalue_parse (void)
       lex_get ();
       if (!lex_force_match ('('))
        goto lossage;
-      lvalue->element = expr_parse (default_dict, EXPR_NUMBER);
+      lvalue->element = expr_parse (dataset_dict (current_dataset), EXPR_NUMBER);
       if (lvalue->element == NULL)
         goto lossage;
       if (!lex_force_match (')'))
@@ -362,7 +364,7 @@ lvalue_get_type (const struct lvalue *lvalue)
 {
   if (lvalue->vector == NULL) 
     {
-      struct variable *var = dict_lookup_var (default_dict, lvalue->var_name);
+      struct variable *var = dict_lookup_var (dataset_dict (current_dataset), lvalue->var_name);
       if (var == NULL)
         return NUMERIC;
       else
@@ -386,9 +388,9 @@ lvalue_finalize (struct lvalue *lvalue, struct compute_trns *compute)
 {
   if (lvalue->vector == NULL)
     {
-      compute->variable = dict_lookup_var (default_dict, lvalue->var_name);
+      compute->variable = dict_lookup_var (dataset_dict (current_dataset), lvalue->var_name);
       if (compute->variable == NULL)
-         compute->variable = dict_create_var_assert (default_dict,
+         compute->variable = dict_create_var_assert (dataset_dict (current_dataset),
                                                      lvalue->var_name, 0);
 
       compute->fv = compute->variable->fv;
index 8f6c8f627243c93584ce7b850cee2770ff600115..716c5d3999a1d2df7b3d9548ec222b9c60feb11d 100644 (file)
@@ -117,7 +117,7 @@ cmd_count (void)
       /* Get destination variable, or at least its name. */
       if (!lex_force_id ())
        goto fail;
-      dv->var = dict_lookup_var (default_dict, tokid);
+      dv->var = dict_lookup_var (dataset_dict (current_dataset), tokid);
       if (dv->var != NULL)
         {
           if (dv->var->type == ALPHA)
@@ -140,7 +140,7 @@ cmd_count (void)
           
          crit->next = NULL;
          crit->vars = NULL;
-         if (!parse_variables (default_dict, &crit->vars, &crit->var_cnt,
+         if (!parse_variables (dataset_dict (current_dataset), &crit->vars, &crit->var_cnt,
                                 PV_DUPLICATE | PV_SAME_TYPE))
            goto fail;
           pool_register (trns->pool, free, crit->vars);
@@ -176,13 +176,13 @@ cmd_count (void)
       {
        /* It's valid, though motivationally questionable, to count to
           the same dest var more than once. */
-       dv->var = dict_lookup_var (default_dict, dv->name);
+       dv->var = dict_lookup_var (dataset_dict (current_dataset), dv->name);
 
        if (dv->var == NULL) 
-          dv->var = dict_create_var_assert (default_dict, dv->name, 0);
+          dv->var = dict_create_var_assert (dataset_dict (current_dataset), dv->name, 0);
       }
 
-  add_transformation (count_trns_proc, count_trns_free, trns);
+  add_transformation (current_dataset, count_trns_proc, count_trns_free, trns);
   return CMD_SUCCESS;
 
 fail:
index 153ff42ea4d9db101937f2688c9f0e5b0285fa65..ebc30e9c950e3215194942055a99be273cbba904 100644 (file)
@@ -45,7 +45,7 @@ int
 cmd_debug_xform_fail (void)
 {
 
-  add_transformation (trns_fail, NULL, NULL);
+  add_transformation (current_dataset, trns_fail, NULL, NULL);
 
   return lex_end_of_command ();
 }
index 05cd3d1c04f36449d278ee4a96d99990b61ad8eb..694439616b0b9fb09fcddb0c0ceb4a2774eeb66f 100644 (file)
@@ -167,7 +167,8 @@ cmd_recode (void)
         create_dst_vars (trns);
 
       /* Done. */
-      add_transformation (recode_trns_proc, recode_trns_free, trns);
+      add_transformation (current_dataset, 
+                         recode_trns_proc, recode_trns_free, trns);
     }
   while (lex_match ('/'));
   
@@ -180,7 +181,7 @@ cmd_recode (void)
 static bool
 parse_src_vars (struct recode_trns *trns) 
 {
-  if (!parse_variables (default_dict, &trns->src_vars, &trns->var_cnt,
+  if (!parse_variables (dataset_dict (current_dataset), &trns->src_vars, &trns->var_cnt,
                         PV_SAME_TYPE))
     return false;
   pool_register (trns->pool, free, trns->src_vars);
@@ -441,7 +442,7 @@ parse_dst_vars (struct recode_trns *trns)
       for (i = 0; i < trns->var_cnt; i++)
         {
           struct variable *v;
-          v = trns->dst_vars[i] = dict_lookup_var (default_dict,
+          v = trns->dst_vars[i] = dict_lookup_var (dataset_dict (current_dataset),
                                                   trns->dst_names[i]);
           if (v == NULL && trns->dst_type == ALPHA) 
             {
@@ -524,9 +525,9 @@ create_dst_vars (struct recode_trns *trns)
       struct variable **var = &trns->dst_vars[i];
       const char *name = trns->dst_names[i];
           
-      *var = dict_lookup_var (default_dict, name);
+      *var = dict_lookup_var (dataset_dict (current_dataset), name);
       if (*var == NULL)
-        *var = dict_create_var_assert (default_dict, name, 0);
+        *var = dict_create_var_assert (dataset_dict (current_dataset), name, 0);
       assert ((*var)->type == trns->dst_type);
     }
 }
index 8b0650d51e4502639a1e0192355692092d49eaef..9daa69e23ca14f9c71b91f2b193abbfd31631368 100644 (file)
@@ -111,7 +111,7 @@ cmd_sample (void)
   trns->N = b;
   trns->m = trns->t = 0;
   trns->frac = frac;
-  add_transformation (sample_trns_proc, sample_trns_free, trns);
+  add_transformation (current_dataset, sample_trns_proc, sample_trns_free, trns);
 
   return lex_end_of_command ();
 }
index 7acb3ec09aafa2017ef16175b79fd622f1d89046..8e4c0e91c6ec53c867ab13067a5a1745bd7177d9 100644 (file)
@@ -52,7 +52,7 @@ cmd_select_if (void)
   struct expression *e;
   struct select_if_trns *t;
 
-  e = expr_parse (default_dict, EXPR_BOOLEAN);
+  e = expr_parse (dataset_dict (current_dataset), EXPR_BOOLEAN);
   if (!e)
     return CMD_CASCADING_FAILURE;
 
@@ -65,7 +65,7 @@ cmd_select_if (void)
 
   t = xmalloc (sizeof *t);
   t->e = e;
-  add_transformation (select_if_proc, select_if_free, t);
+  add_transformation (current_dataset, select_if_proc, select_if_free, t);
 
   return CMD_SUCCESS;
 }
@@ -95,12 +95,12 @@ int
 cmd_filter (void)
 {
   if (lex_match_id ("OFF"))
-    dict_set_filter (default_dict, NULL);
+    dict_set_filter (dataset_dict (current_dataset), NULL);
   else if (token == '.') 
     {
       msg (SW, _("Syntax error expecting OFF or BY.  "
                  "Turning off case filtering."));
-      dict_set_filter (default_dict, NULL);
+      dict_set_filter (dataset_dict (current_dataset), NULL);
     }
   else
     {
@@ -123,7 +123,7 @@ cmd_filter (void)
          return CMD_FAILURE;
        }
 
-      dict_set_filter (default_dict, v);
+      dict_set_filter (dataset_dict (current_dataset), v);
     }
 
   return lex_end_of_command ();
index 920440103b4d5b33bcb6721746b1048591f61693..f30d51dfee8d307a38992b7ade14217deb0da0de 100644 (file)
@@ -191,7 +191,7 @@ levene_calc (const struct ccase *c, void *_l)
   struct levene_info *l = (struct levene_info *) _l;
   const union value *gv = case_data (c, l->v_indep->fv);
   struct group_statistics key;
-  double weight = dict_get_case_weight (default_dict, c, &warn); 
+  double weight = dict_get_case_weight (dataset_dict (current_dataset), c, &warn); 
 
   /* Skip the entire case if /MISSING=LISTWISE is set */
   if ( l->missing == LEV_LISTWISE ) 
@@ -295,7 +295,7 @@ levene2_calc (const struct ccase *c, void *_l)
 
   struct levene_info *l = (struct levene_info *) _l;
 
-  double weight = dict_get_case_weight (default_dict, c, &warn); 
+  double weight = dict_get_case_weight (dataset_dict (current_dataset), c, &warn); 
 
   const union value *gv = case_data (c, l->v_indep->fv);
   struct group_statistics key;
index 90bbdf64028057bb1f5a2d7eca6f764146ee7bb6..3f42c23d740346b6ac99ffa346e1a1194691401e 100644 (file)
@@ -63,7 +63,7 @@ static struct casefile *do_external_sort (struct casereader *,
 static void
 prepare_to_sort_active_file (void) 
 {
-  proc_cancel_temporary_transformations (); 
+  proc_cancel_temporary_transformations (current_dataset); 
 }
 
 /* Sorts the active file in-place according to CRITERIA.
@@ -74,15 +74,15 @@ sort_active_file_in_place (const struct sort_criteria *criteria)
   struct casefile *in, *out;
 
   prepare_to_sort_active_file ();
-  if (!procedure (NULL, NULL))
+  if (!procedure (current_dataset,NULL, NULL))
     return false;
   
-  in = proc_capture_output ();
+  in = proc_capture_output (current_dataset);
   out = sort_execute (casefile_get_destructive_reader (in), criteria);
   if (out == NULL) 
     return false;
 
-  proc_set_source (storage_source_create (out));
+  proc_set_source (current_dataset, storage_source_create (out));
   return true;
 }
 
@@ -114,7 +114,7 @@ sort_active_file_to_casefile (const struct sort_criteria *criteria)
 
   cb_data.criteria = criteria;
   cb_data.output = NULL;
-  if (!multipass_procedure (sort_to_casefile_callback, &cb_data)) 
+  if (!multipass_procedure (current_dataset,sort_to_casefile_callback, &cb_data)) 
     {
       casefile_destroy (cb_data.output);
       return NULL;
index edc59eddaf6a8440bde2daa940dffe1411324bc8..3450ac9d68d81b294a187ce8afe6d7dd445bcc3f 100644 (file)
@@ -93,7 +93,7 @@ main (int argc, char **argv)
   readln_initialize ();
   settings_init ();
   random_init ();
-  proc_init ();
+  current_dataset = create_dataset ();
 
   if (parse_command_line (argc, argv)) 
     {
@@ -102,7 +102,7 @@ main (int argc, char **argv)
 
       for (;;)
         {
-          int result = cmd_parse (proc_has_source ()
+          int result = cmd_parse (proc_has_source (current_dataset)
                                   ? CMD_STATE_DATA : CMD_STATE_INITIAL);
           if (result == CMD_EOF || result == CMD_FINISH)
             break;
@@ -178,7 +178,7 @@ terminate (bool success)
     {
       terminating = true;
 
-      proc_done ();
+      destroy_dataset (current_dataset);
 
       random_done ();
       settings_done ();