Changed a lot of non-const pointers to const.
authorJohn Darrington <john@darrington.wattle.id.au>
Mon, 2 Apr 2007 08:55:51 +0000 (08:55 +0000)
committerJohn Darrington <john@darrington.wattle.id.au>
Mon, 2 Apr 2007 08:55:51 +0000 (08:55 +0000)
Patch #5825

53 files changed:
po/de.po
po/pspp.pot
src/data/case.c
src/data/case.h
src/data/casefilter.c
src/data/casefilter.h
src/data/cat-routines.h
src/data/category.c
src/data/dictionary.c
src/data/dictionary.h
src/data/variable.c
src/data/variable.h
src/language/data-io/get.c
src/language/data-io/list.q
src/language/data-io/print.c
src/language/dictionary/delete-variables.c
src/language/dictionary/modify-variables.c
src/language/dictionary/split-file.c
src/language/dictionary/sys-file-info.c
src/language/dictionary/value-labels.c
src/language/expressions/optimize.c
src/language/expressions/parse.c
src/language/expressions/private.h
src/language/lexer/q2c.c
src/language/lexer/variable-parser.c
src/language/lexer/variable-parser.h
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/npar.h
src/language/stats/npar.q
src/language/stats/oneway.q
src/language/stats/rank.q
src/language/stats/regression.q
src/language/stats/sort-criteria.c
src/language/stats/sort-criteria.h
src/language/stats/t-test.q
src/language/xforms/count.c
src/language/xforms/recode.c
src/libpspp/hash.h
src/math/group-proc.h
src/math/group.c
src/math/levene.c
src/math/levene.h
src/ui/gui/data-editor.c
src/ui/gui/split-file-dialog.c
src/ui/gui/transpose-dialog.c

index f894269d2000765f1f46f61a4c2e8026f55ff793..e1d11637d56dcb3ac19ba33a7e5e5a9bedae1a17 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: 2007-03-26 18:17+0800\n"
+"POT-Creation-Date: 2007-04-01 13:38+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"
@@ -176,13 +176,13 @@ msgstr ""
 msgid "Month number %f is not between 1 and 12."
 msgstr ""
 
-#: src/data/dictionary.c:717
+#: src/data/dictionary.c:724
 msgid ""
 "At least one case in the data file had a weight value that was user-missing, "
 "system-missing, zero, or negative.  These case(s) were ignored."
 msgstr ""
 
-#: src/data/dictionary.c:1238
+#: src/data/dictionary.c:1245
 msgid "Variable suffix too large."
 msgstr ""
 
@@ -309,13 +309,13 @@ msgid "%s variables are not compatible with %s format %s."
 msgstr ""
 
 #: src/data/format.c:310 src/data/por-file-reader.c:489
-#: src/data/sys-file-reader.c:602 src/ui/gui/data-editor.glade:1066
+#: src/data/sys-file-reader.c:602 src/ui/gui/data-editor.glade:1075
 #: src/ui/gui/psppire-var-store.c:481
 msgid "String"
 msgstr "Zeichenkette"
 
 #: src/data/format.c:310 src/data/por-file-reader.c:489
-#: src/data/sys-file-reader.c:602 src/ui/gui/data-editor.glade:962
+#: src/data/sys-file-reader.c:602 src/ui/gui/data-editor.glade:971
 #: src/ui/gui/psppire-var-store.c:474
 msgid "Numeric"
 msgstr "Nummer"
@@ -826,15 +826,15 @@ msgstr "Der Variabelname %s ist große als %d Buchstaben."
 msgid "`%s' may not be used as a variable name because it is a reserved word."
 msgstr ""
 
-#: src/data/variable.c:964
+#: src/data/variable.c:966
 msgid "ordinary"
 msgstr ""
 
-#: src/data/variable.c:966
+#: src/data/variable.c:968
 msgid "system"
 msgstr ""
 
-#: src/data/variable.c:968
+#: src/data/variable.c:970
 msgid "scratch"
 msgstr ""
 
@@ -1036,7 +1036,7 @@ msgstr ""
 #: src/language/dictionary/sys-file-info.c:160
 #: src/language/dictionary/sys-file-info.c:395
 #: src/language/dictionary/sys-file-info.c:620
-#: src/language/stats/descriptives.c:879
+#: src/language/stats/descriptives.c:880
 msgid "Variable"
 msgstr ""
 
@@ -1291,7 +1291,7 @@ msgid ""
 "REREAD: Column numbers must be positive finite numbers.  Column set to 1."
 msgstr ""
 
-#: src/language/data-io/list.q:154 src/language/stats/descriptives.c:364
+#: src/language/data-io/list.q:154 src/language/stats/descriptives.c:365
 msgid "No variables specified."
 msgstr ""
 
@@ -1387,7 +1387,7 @@ msgstr[0] ""
 msgstr[1] ""
 
 #: src/language/data-io/print-space.c:75 src/language/lexer/lexer.c:465
-#: src/language/stats/autorecode.c:153 src/language/xforms/select-if.c:61
+#: src/language/stats/autorecode.c:154 src/language/xforms/select-if.c:61
 msgid "expecting end of command"
 msgstr ""
 
@@ -1426,7 +1426,7 @@ msgid ""
 "will be made permanent."
 msgstr ""
 
-#: src/language/dictionary/delete-variables.c:48
+#: src/language/dictionary/delete-variables.c:49
 msgid ""
 "DELETE VARIABLES may not be used to delete all variables from the active "
 "file dictionary.  Use NEW FILE instead."
@@ -1575,8 +1575,8 @@ msgstr ""
 
 #: src/language/dictionary/split-file.c:86
 #: src/language/dictionary/sys-file-info.c:549
-#: src/language/stats/crosstabs.q:1118 src/language/stats/crosstabs.q:1145
-#: src/language/stats/crosstabs.q:1165 src/language/stats/crosstabs.q:1187
+#: src/language/stats/crosstabs.q:1119 src/language/stats/crosstabs.q:1146
+#: src/language/stats/crosstabs.q:1166 src/language/stats/crosstabs.q:1188
 #: src/language/stats/examine.q:1189 src/language/stats/frequencies.q:1145
 #: src/language/stats/frequencies.q:1269
 msgid "Value"
@@ -2120,57 +2120,57 @@ msgstr ""
 msgid "expecting number or data string"
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:54
+#: src/language/lexer/variable-parser.c:64
 msgid "expecting variable name"
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:64
+#: src/language/lexer/variable-parser.c:74
 #, c-format
 msgid "%s is not a variable name."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:173
+#: src/language/lexer/variable-parser.c:183
 #, c-format
 msgid ""
 "%s is not a numeric variable.  It will not be included in the variable list."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:176
+#: src/language/lexer/variable-parser.c:186
 #, c-format
 msgid ""
 "%s is not a string variable.  It will not be included in the variable list."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:180
+#: src/language/lexer/variable-parser.c:190
 #, c-format
 msgid "Scratch variables (such as %s) are not allowed here."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:184
+#: src/language/lexer/variable-parser.c:194
 #, c-format
 msgid ""
 "%s and %s are not the same type.  All variables in this variable list must "
 "be of the same type.  %s will be omitted from the list."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:190
+#: src/language/lexer/variable-parser.c:200
 #, c-format
 msgid ""
 "%s and %s are string variables with different widths.  All variables in this "
 "variable list must have the same width.  %s will be omttied from the list."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:195
+#: src/language/lexer/variable-parser.c:205
 #, c-format
 msgid "Variable %s appears twice in variable list."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:308
+#: src/language/lexer/variable-parser.c:318
 #, c-format
 msgid "%s TO %s is not valid syntax since %s precedes %s in the dictionary."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:316
+#: src/language/lexer/variable-parser.c:326
 #, c-format
 msgid ""
 "When using the TO keyword to specify several variables, both variables must "
@@ -2178,19 +2178,19 @@ msgid ""
 "system variables.  %s is a %s variable, whereas %s is %s."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:390
+#: src/language/lexer/variable-parser.c:400
 msgid "incorrect use of TO convention"
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:433
+#: src/language/lexer/variable-parser.c:443
 msgid "Scratch variables not allowed here."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:455
+#: src/language/lexer/variable-parser.c:465
 msgid "Prefixes don't match in use of TO convention."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:460
+#: src/language/lexer/variable-parser.c:470
 msgid "Bad bounds in use of TO convention."
 msgstr ""
 
@@ -2248,17 +2248,17 @@ msgid ""
 "contains the aggregate variables and the break variables."
 msgstr ""
 
-#: src/language/stats/autorecode.c:135
+#: src/language/stats/autorecode.c:136
 #, c-format
 msgid "Source variable count (%u) does not match target variable count (%u)."
 msgstr ""
 
-#: src/language/stats/autorecode.c:163
+#: src/language/stats/autorecode.c:164
 #, c-format
 msgid "Target variable %s duplicates existing variable %s."
 msgstr ""
 
-#: src/language/stats/autorecode.c:170
+#: src/language/stats/autorecode.c:171
 #, c-format
 msgid "Duplicate variable name %s among target variables."
 msgstr ""
@@ -2281,8 +2281,8 @@ msgid "Group2"
 msgstr ""
 
 #: src/language/stats/binomial.c:208 src/language/stats/chisquare.c:237
-#: src/language/stats/chisquare.c:297 src/language/stats/crosstabs.q:825
-#: src/language/stats/crosstabs.q:1025 src/language/stats/crosstabs.q:1748
+#: src/language/stats/chisquare.c:297 src/language/stats/crosstabs.q:826
+#: src/language/stats/crosstabs.q:1026 src/language/stats/crosstabs.q:1749
 #: src/language/stats/examine.q:909 src/language/stats/frequencies.q:1222
 #: src/language/stats/oneway.q:307 src/language/stats/oneway.q:471
 #: src/language/stats/regression.q:324
@@ -2290,15 +2290,15 @@ msgid "Total"
 msgstr ""
 
 #: src/language/stats/binomial.c:253 src/language/stats/chisquare.c:260
-#: src/language/stats/crosstabs.q:1143 src/language/stats/crosstabs.q:1184
+#: src/language/stats/crosstabs.q:1144 src/language/stats/crosstabs.q:1185
 msgid "Category"
 msgstr ""
 
-#: src/language/stats/binomial.c:254 src/language/stats/crosstabs.q:835
+#: src/language/stats/binomial.c:254 src/language/stats/crosstabs.q:836
 #: src/language/stats/examine.q:985 src/language/stats/frequencies.q:1518
 #: src/language/stats/npar-summary.c:124 src/language/stats/oneway.q:392
-#: src/language/stats/t-test.q:681 src/language/stats/t-test.q:704
-#: src/language/stats/t-test.q:830 src/language/stats/t-test.q:1367
+#: src/language/stats/t-test.q:680 src/language/stats/t-test.q:703
+#: src/language/stats/t-test.q:829 src/language/stats/t-test.q:1366
 msgid "N"
 msgstr ""
 
@@ -2347,10 +2347,10 @@ msgstr ""
 msgid "Chi-Square"
 msgstr ""
 
-#: src/language/stats/chisquare.c:325 src/language/stats/crosstabs.q:1119
+#: src/language/stats/chisquare.c:325 src/language/stats/crosstabs.q:1120
 #: src/language/stats/oneway.q:280 src/language/stats/oneway.q:681
-#: src/language/stats/regression.q:317 src/language/stats/t-test.q:981
-#: src/language/stats/t-test.q:1173 src/language/stats/t-test.q:1266
+#: src/language/stats/regression.q:317 src/language/stats/t-test.q:980
+#: src/language/stats/t-test.q:1172 src/language/stats/t-test.q:1265
 msgid "df"
 msgstr ""
 
@@ -2367,280 +2367,280 @@ msgstr ""
 msgid "Write mode ALL not allowed in general mode.  Assuming WRITE=CELLS."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:337
+#: src/language/stats/crosstabs.q:338
 msgid "Too many crosstabulation variables or dimensions."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:347
+#: src/language/stats/crosstabs.q:348
 msgid "expecting BY"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:414
+#: src/language/stats/crosstabs.q:415
 msgid "VARIABLES must be specified before TABLES."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:452
+#: src/language/stats/crosstabs.q:453
 #, c-format
 msgid "Maximum value (%ld) less than minimum value (%ld)."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:820
+#: src/language/stats/crosstabs.q:821
 msgid "Summary."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:822 src/language/stats/examine.q:973
+#: src/language/stats/crosstabs.q:823 src/language/stats/examine.q:973
 msgid "Cases"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:823 src/language/stats/examine.q:907
+#: src/language/stats/crosstabs.q:824 src/language/stats/examine.q:907
 #: src/language/stats/frequencies.q:1143 src/language/stats/frequencies.q:1519
 msgid "Valid"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:824 src/language/stats/examine.q:908
+#: src/language/stats/crosstabs.q:825 src/language/stats/examine.q:908
 #: src/language/stats/frequencies.q:1213 src/language/stats/frequencies.q:1520
 #: src/ui/gui/var-sheet.c:73
 msgid "Missing"
 msgstr "Löse"
 
-#: src/language/stats/crosstabs.q:836 src/language/stats/examine.q:988
+#: src/language/stats/crosstabs.q:837 src/language/stats/examine.q:988
 #: src/language/stats/frequencies.q:1147 src/language/stats/frequencies.q:1148
 #: src/language/stats/frequencies.q:1149
 msgid "Percent"
 msgstr "Prozent"
 
-#: src/language/stats/crosstabs.q:1077
+#: src/language/stats/crosstabs.q:1078
 msgid "count"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1078
+#: src/language/stats/crosstabs.q:1079
 msgid "row %"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1079
+#: src/language/stats/crosstabs.q:1080
 msgid "column %"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1080
+#: src/language/stats/crosstabs.q:1081
 msgid "total %"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1081
+#: src/language/stats/crosstabs.q:1082
 msgid "expected"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1082
+#: src/language/stats/crosstabs.q:1083
 msgid "residual"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1083
+#: src/language/stats/crosstabs.q:1084
 msgid "std. resid."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1084
+#: src/language/stats/crosstabs.q:1085
 msgid "adj. resid."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1114
+#: src/language/stats/crosstabs.q:1115
 msgid "Chi-square tests."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1117 src/language/stats/crosstabs.q:1144
-#: src/language/stats/crosstabs.q:1164 src/language/stats/crosstabs.q:1185
+#: src/language/stats/crosstabs.q:1118 src/language/stats/crosstabs.q:1145
+#: src/language/stats/crosstabs.q:1165 src/language/stats/crosstabs.q:1186
 #: src/language/stats/examine.q:1420
 msgid "Statistic"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1121
+#: src/language/stats/crosstabs.q:1122
 msgid "Asymp. Sig. (2-sided)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1123
+#: src/language/stats/crosstabs.q:1124
 msgid "Exact. Sig. (2-sided)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1125
+#: src/language/stats/crosstabs.q:1126
 msgid "Exact. Sig. (1-sided)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1140
+#: src/language/stats/crosstabs.q:1141
 msgid "Symmetric measures."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1146 src/language/stats/crosstabs.q:1188
+#: src/language/stats/crosstabs.q:1147 src/language/stats/crosstabs.q:1189
 msgid "Asymp. Std. Error"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1147 src/language/stats/crosstabs.q:1189
+#: src/language/stats/crosstabs.q:1148 src/language/stats/crosstabs.q:1190
 msgid "Approx. T"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1148 src/language/stats/crosstabs.q:1190
+#: src/language/stats/crosstabs.q:1149 src/language/stats/crosstabs.q:1191
 msgid "Approx. Sig."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1159
+#: src/language/stats/crosstabs.q:1160
 msgid "Risk estimate."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1163
+#: src/language/stats/crosstabs.q:1164
 #, c-format
 msgid "95%% Confidence Interval"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1166 src/language/stats/t-test.q:985
-#: src/language/stats/t-test.q:1170 src/language/stats/t-test.q:1269
+#: src/language/stats/crosstabs.q:1167 src/language/stats/t-test.q:984
+#: src/language/stats/t-test.q:1169 src/language/stats/t-test.q:1268
 msgid "Lower"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1167 src/language/stats/t-test.q:986
-#: src/language/stats/t-test.q:1171 src/language/stats/t-test.q:1270
+#: src/language/stats/crosstabs.q:1168 src/language/stats/t-test.q:985
+#: src/language/stats/t-test.q:1170 src/language/stats/t-test.q:1269
 msgid "Upper"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1181
+#: src/language/stats/crosstabs.q:1182
 msgid "Directional measures."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1186 src/ui/gui/var-sheet.c:68
+#: src/language/stats/crosstabs.q:1187 src/ui/gui/var-sheet.c:68
 msgid "Type"
 msgstr "Typ"
 
-#: src/language/stats/crosstabs.q:1940
+#: src/language/stats/crosstabs.q:1941
 msgid "Pearson Chi-Square"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1941
+#: src/language/stats/crosstabs.q:1942
 msgid "Likelihood Ratio"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1942
+#: src/language/stats/crosstabs.q:1943
 msgid "Fisher's Exact Test"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1943
+#: src/language/stats/crosstabs.q:1944
 msgid "Continuity Correction"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1944
+#: src/language/stats/crosstabs.q:1945
 msgid "Linear-by-Linear Association"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1981 src/language/stats/crosstabs.q:2051
-#: src/language/stats/crosstabs.q:2110
+#: src/language/stats/crosstabs.q:1982 src/language/stats/crosstabs.q:2052
+#: src/language/stats/crosstabs.q:2111
 msgid "N of Valid Cases"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1997 src/language/stats/crosstabs.q:2126
+#: src/language/stats/crosstabs.q:1998 src/language/stats/crosstabs.q:2127
 msgid "Nominal by Nominal"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1998 src/language/stats/crosstabs.q:2127
+#: src/language/stats/crosstabs.q:1999 src/language/stats/crosstabs.q:2128
 msgid "Ordinal by Ordinal"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1999
+#: src/language/stats/crosstabs.q:2000
 msgid "Interval by Interval"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2000
+#: src/language/stats/crosstabs.q:2001
 msgid "Measure of Agreement"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2005
+#: src/language/stats/crosstabs.q:2006
 msgid "Phi"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2006
+#: src/language/stats/crosstabs.q:2007
 msgid "Cramer's V"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2007
+#: src/language/stats/crosstabs.q:2008
 msgid "Contingency Coefficient"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2008
+#: src/language/stats/crosstabs.q:2009
 msgid "Kendall's tau-b"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2009
+#: src/language/stats/crosstabs.q:2010
 msgid "Kendall's tau-c"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2010
+#: src/language/stats/crosstabs.q:2011
 msgid "Gamma"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2011
+#: src/language/stats/crosstabs.q:2012
 msgid "Spearman Correlation"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2012
+#: src/language/stats/crosstabs.q:2013
 msgid "Pearson's R"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2013
+#: src/language/stats/crosstabs.q:2014
 msgid "Kappa"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2083
+#: src/language/stats/crosstabs.q:2084
 #, c-format
 msgid "Odds Ratio for %s (%g / %g)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2086
+#: src/language/stats/crosstabs.q:2087
 #, c-format
 msgid "Odds Ratio for %s (%.*s / %.*s)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2094
+#: src/language/stats/crosstabs.q:2095
 #, c-format
 msgid "For cohort %s = %g"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2097
+#: src/language/stats/crosstabs.q:2098
 #, c-format
 msgid "For cohort %s = %.*s"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2128
+#: src/language/stats/crosstabs.q:2129
 msgid "Nominal by Interval"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2133
+#: src/language/stats/crosstabs.q:2134
 msgid "Lambda"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2134
+#: src/language/stats/crosstabs.q:2135
 msgid "Goodman and Kruskal tau"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2135
+#: src/language/stats/crosstabs.q:2136
 msgid "Uncertainty Coefficient"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2136
+#: src/language/stats/crosstabs.q:2137
 msgid "Somers' d"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2137
+#: src/language/stats/crosstabs.q:2138
 msgid "Eta"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2142
+#: src/language/stats/crosstabs.q:2143
 msgid "Symmetric"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2143 src/language/stats/crosstabs.q:2144
+#: src/language/stats/crosstabs.q:2144 src/language/stats/crosstabs.q:2145
 #, c-format
 msgid "%s Dependent"
 msgstr ""
 
 #: src/language/stats/descriptives.c:106 src/language/stats/examine.q:1525
 #: src/language/stats/frequencies.q:125 src/language/stats/npar-summary.c:127
-#: src/language/stats/oneway.q:393 src/language/stats/t-test.q:682
-#: src/language/stats/t-test.q:705 src/language/stats/t-test.q:829
-#: src/language/stats/t-test.q:1167
+#: src/language/stats/oneway.q:393 src/language/stats/t-test.q:681
+#: src/language/stats/t-test.q:704 src/language/stats/t-test.q:828
+#: src/language/stats/t-test.q:1166
 msgid "Mean"
 msgstr ""
 
@@ -2696,47 +2696,47 @@ msgstr ""
 msgid "Sum"
 msgstr ""
 
-#: src/language/stats/descriptives.c:346
+#: src/language/stats/descriptives.c:347
 #, c-format
 msgid "Z-score variable name %s would be a duplicate variable name."
 msgstr ""
 
-#: src/language/stats/descriptives.c:449
+#: src/language/stats/descriptives.c:450
 msgid "expecting statistic name: reverting to default"
 msgstr ""
 
-#: src/language/stats/descriptives.c:522
+#: src/language/stats/descriptives.c:523
 msgid ""
 "Ran out of generic names for Z-score variables.  There are only 126 generic "
 "names: ZSC001-ZSC0999, STDZ01-STDZ09, ZZZZ01-ZZZZ09, ZQZQ01-ZQZQ09."
 msgstr ""
 
-#: src/language/stats/descriptives.c:554
+#: src/language/stats/descriptives.c:555
 msgid "Mapping of variables to corresponding Z-scores."
 msgstr ""
 
-#: src/language/stats/descriptives.c:559
+#: src/language/stats/descriptives.c:560
 msgid "Source"
 msgstr ""
 
-#: src/language/stats/descriptives.c:560
+#: src/language/stats/descriptives.c:561
 msgid "Target"
 msgstr ""
 
-#: src/language/stats/descriptives.c:670
+#: src/language/stats/descriptives.c:671
 #, c-format
 msgid "Z-score of %s"
 msgstr ""
 
-#: src/language/stats/descriptives.c:882
+#: src/language/stats/descriptives.c:883
 msgid "Valid N"
 msgstr ""
 
-#: src/language/stats/descriptives.c:883
+#: src/language/stats/descriptives.c:884
 msgid "Missing N"
 msgstr ""
 
-#: src/language/stats/descriptives.c:910
+#: src/language/stats/descriptives.c:911
 #, c-format
 msgid "Valid cases = %g; cases with missing value(s) = %g."
 msgstr ""
@@ -2803,9 +2803,9 @@ msgid "Median"
 msgstr ""
 
 #: src/language/stats/examine.q:1617 src/language/stats/npar-summary.c:130
-#: src/language/stats/oneway.q:394 src/language/stats/t-test.q:683
-#: src/language/stats/t-test.q:706 src/language/stats/t-test.q:831
-#: src/language/stats/t-test.q:1168
+#: src/language/stats/oneway.q:394 src/language/stats/t-test.q:682
+#: src/language/stats/t-test.q:705 src/language/stats/t-test.q:830
+#: src/language/stats/t-test.q:1167
 msgid "Std. Deviation"
 msgstr ""
 
@@ -3035,7 +3035,7 @@ msgid ""
 "exactly %d values."
 msgstr ""
 
-#: src/language/stats/npar.q:422 src/language/stats/t-test.q:485
+#: src/language/stats/npar.q:422 src/language/stats/t-test.q:484
 #, c-format
 msgid ""
 "PAIRED was specified but the number of variables preceding WITH (%d) did not "
@@ -3081,7 +3081,7 @@ msgid "Mean Square"
 msgstr ""
 
 #: src/language/stats/oneway.q:282 src/language/stats/regression.q:319
-#: src/language/stats/t-test.q:978
+#: src/language/stats/t-test.q:977
 msgid "F"
 msgstr ""
 
@@ -3135,13 +3135,13 @@ msgid "Value of Contrast"
 msgstr ""
 
 #: src/language/stats/oneway.q:680 src/language/stats/regression.q:223
-#: src/language/stats/t-test.q:980 src/language/stats/t-test.q:1172
-#: src/language/stats/t-test.q:1265
+#: src/language/stats/t-test.q:979 src/language/stats/t-test.q:1171
+#: src/language/stats/t-test.q:1264
 msgid "t"
 msgstr ""
 
-#: src/language/stats/oneway.q:682 src/language/stats/t-test.q:982
-#: src/language/stats/t-test.q:1174 src/language/stats/t-test.q:1267
+#: src/language/stats/oneway.q:682 src/language/stats/t-test.q:981
+#: src/language/stats/t-test.q:1173 src/language/stats/t-test.q:1266
 msgid "Sig. (2-tailed)"
 msgstr ""
 
@@ -3258,7 +3258,7 @@ msgstr ""
 msgid "Coefficient Correlations"
 msgstr ""
 
-#: src/language/stats/regression.q:1147
+#: src/language/stats/regression.q:1181
 msgid "Dependent variable must be numeric."
 msgstr ""
 
@@ -3282,115 +3282,115 @@ msgstr ""
 msgid "VARIABLES subcommand is not appropriate with PAIRS"
 msgstr ""
 
-#: src/language/stats/t-test.q:335
+#: src/language/stats/t-test.q:334
 msgid "One or more VARIABLES must be specified."
 msgstr ""
 
-#: src/language/stats/t-test.q:379
+#: src/language/stats/t-test.q:378
 #, c-format
 msgid "Long string variable %s is not valid here."
 msgstr ""
 
-#: src/language/stats/t-test.q:399 src/language/stats/t-test.q:413
+#: src/language/stats/t-test.q:398 src/language/stats/t-test.q:412
 msgid ""
 "When applying GROUPS to a string variable, two values must be specified."
 msgstr ""
 
-#: src/language/stats/t-test.q:502
+#: src/language/stats/t-test.q:501
 msgid "At least two variables must be specified on PAIRS."
 msgstr ""
 
-#: src/language/stats/t-test.q:679
+#: src/language/stats/t-test.q:678
 msgid "One-Sample Statistics"
 msgstr ""
 
-#: src/language/stats/t-test.q:684 src/language/stats/t-test.q:707
-#: src/language/stats/t-test.q:832
+#: src/language/stats/t-test.q:683 src/language/stats/t-test.q:706
+#: src/language/stats/t-test.q:831
 msgid "SE. Mean"
 msgstr ""
 
-#: src/language/stats/t-test.q:702
+#: src/language/stats/t-test.q:701
 msgid "Group Statistics"
 msgstr ""
 
-#: src/language/stats/t-test.q:826
+#: src/language/stats/t-test.q:825
 msgid "Paired Sample Statistics"
 msgstr ""
 
-#: src/language/stats/t-test.q:848 src/language/stats/t-test.q:1193
-#: src/language/stats/t-test.q:1384
+#: src/language/stats/t-test.q:847 src/language/stats/t-test.q:1192
+#: src/language/stats/t-test.q:1383
 #, c-format
 msgid "Pair %d"
 msgstr ""
 
-#: src/language/stats/t-test.q:966
+#: src/language/stats/t-test.q:965
 msgid "Independent Samples Test"
 msgstr ""
 
-#: src/language/stats/t-test.q:974
+#: src/language/stats/t-test.q:973
 msgid "Levene's Test for Equality of Variances"
 msgstr ""
 
-#: src/language/stats/t-test.q:976
+#: src/language/stats/t-test.q:975
 msgid "t-test for Equality of Means"
 msgstr ""
 
-#: src/language/stats/t-test.q:979 src/language/stats/t-test.q:1369
+#: src/language/stats/t-test.q:978 src/language/stats/t-test.q:1368
 msgid "Sig."
 msgstr ""
 
-#: src/language/stats/t-test.q:983 src/language/stats/t-test.q:1268
+#: src/language/stats/t-test.q:982 src/language/stats/t-test.q:1267
 msgid "Mean Difference"
 msgstr ""
 
-#: src/language/stats/t-test.q:984
+#: src/language/stats/t-test.q:983
 msgid "Std. Error Difference"
 msgstr ""
 
-#: src/language/stats/t-test.q:989 src/language/stats/t-test.q:1164
-#: src/language/stats/t-test.q:1260
+#: src/language/stats/t-test.q:988 src/language/stats/t-test.q:1163
+#: src/language/stats/t-test.q:1259
 #, c-format
 msgid "%g%% Confidence Interval of the Difference"
 msgstr ""
 
-#: src/language/stats/t-test.q:1044
+#: src/language/stats/t-test.q:1043
 msgid "Equal variances assumed"
 msgstr ""
 
-#: src/language/stats/t-test.q:1096
+#: src/language/stats/t-test.q:1095
 msgid "Equal variances not assumed"
 msgstr ""
 
-#: src/language/stats/t-test.q:1154
+#: src/language/stats/t-test.q:1153
 msgid "Paired Samples Test"
 msgstr ""
 
-#: src/language/stats/t-test.q:1157
+#: src/language/stats/t-test.q:1156
 msgid "Paired Differences"
 msgstr ""
 
-#: src/language/stats/t-test.q:1169
+#: src/language/stats/t-test.q:1168
 msgid "Std. Error Mean"
 msgstr ""
 
-#: src/language/stats/t-test.q:1249
+#: src/language/stats/t-test.q:1248
 msgid "One-Sample Test"
 msgstr ""
 
-#: src/language/stats/t-test.q:1254
+#: src/language/stats/t-test.q:1253
 #, c-format
 msgid "Test Value = %f"
 msgstr ""
 
-#: src/language/stats/t-test.q:1364
+#: src/language/stats/t-test.q:1363
 msgid "Paired Samples Correlations"
 msgstr ""
 
-#: src/language/stats/t-test.q:1368
+#: src/language/stats/t-test.q:1367
 msgid "Correlation"
 msgstr ""
 
-#: src/language/stats/t-test.q:1387
+#: src/language/stats/t-test.q:1386
 #, c-format
 msgid "%s & %s"
 msgstr ""
@@ -4134,105 +4134,122 @@ msgstr ""
 msgid "Style of bevel around the custom entry button"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:159
+#: src/ui/gui/data-editor.c:161
 #, fuzzy
 msgid "Weights"
 msgstr "Rechts"
 
-#: src/ui/gui/data-editor.c:160
+#: src/ui/gui/data-editor.c:162
 msgid "Weight cases by variable"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:169 src/ui/gui/data-editor.glade:294
+#: src/ui/gui/data-editor.c:171 src/ui/gui/data-editor.glade:293
 msgid "Transpose"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:170
+#: src/ui/gui/data-editor.c:172
 msgid "Transpose the cases with the variables"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:494
+#: src/ui/gui/data-editor.c:183
+#, fuzzy
+msgid "Split"
+msgstr "Alle Datei"
+
+#: src/ui/gui/data-editor.c:184
+msgid "Split the active file"
+msgstr ""
+
+#: src/ui/gui/data-editor.c:194
+msgid "Sort"
+msgstr ""
+
+#: src/ui/gui/data-editor.c:195
+msgid "Sort cases in the active file"
+msgstr ""
+
+#: src/ui/gui/data-editor.c:531
 msgid "Font Selection"
 msgstr "Schriftwahlung"
 
-#: src/ui/gui/data-editor.c:672
+#: src/ui/gui/data-editor.c:709
 msgid "No Split"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:680
+#: src/ui/gui/data-editor.c:717
 #, fuzzy
 msgid "Split by "
 msgstr "Alle Datei"
 
-#: src/ui/gui/data-editor.c:705
+#: src/ui/gui/data-editor.c:742
 msgid "Filter off"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:718
+#: src/ui/gui/data-editor.c:755
 #, c-format
 msgid "Filter by %s"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:736
+#: src/ui/gui/data-editor.c:773
 msgid "Weights off"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:749
+#: src/ui/gui/data-editor.c:786
 #, c-format
 msgid "Weight by %s"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:772 src/ui/gui/data-editor.c:983
-#: src/ui/gui/data-editor.glade:414
+#: src/ui/gui/data-editor.c:809 src/ui/gui/data-editor.c:1020
+#: src/ui/gui/data-editor.glade:412
 msgid "Open"
 msgstr "Öffen"
 
-#: src/ui/gui/data-editor.c:773
+#: src/ui/gui/data-editor.c:810
 msgid "Open a data file"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:781 src/ui/gui/data-editor.c:888
-#: src/ui/gui/data-editor.glade:424
+#: src/ui/gui/data-editor.c:818 src/ui/gui/data-editor.c:925
+#: src/ui/gui/data-editor.glade:422
 msgid "Save"
 msgstr "Speichen"
 
-#: src/ui/gui/data-editor.c:782 src/ui/gui/data-editor.c:792
+#: src/ui/gui/data-editor.c:819 src/ui/gui/data-editor.c:829
 #, fuzzy
 msgid "Save data to file"
 msgstr "Speichern unter"
 
-#: src/ui/gui/data-editor.c:791
+#: src/ui/gui/data-editor.c:828
 #, fuzzy
 msgid "Save As"
 msgstr "Speichern unter"
 
-#: src/ui/gui/data-editor.c:800
+#: src/ui/gui/data-editor.c:837
 msgid "New"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:801
+#: src/ui/gui/data-editor.c:838
 msgid "New data file"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:896 src/ui/gui/data-editor.c:991
+#: src/ui/gui/data-editor.c:933 src/ui/gui/data-editor.c:1028
 msgid "System Files (*.sav)"
 msgstr "Systemedatein (*.sav)"
 
-#: src/ui/gui/data-editor.c:902 src/ui/gui/data-editor.c:997
+#: src/ui/gui/data-editor.c:939 src/ui/gui/data-editor.c:1034
 msgid "Portable Files (*.por) "
 msgstr "Tragbardatein (*.por)"
 
-#: src/ui/gui/data-editor.c:908 src/ui/gui/data-editor.c:1003
+#: src/ui/gui/data-editor.c:945 src/ui/gui/data-editor.c:1040
 #: src/ui/gui/syntax-editor.c:141 src/ui/gui/syntax-editor.c:524
 msgid "All Files"
 msgstr "Alle Datei"
 
-#: src/ui/gui/data-editor.c:916
+#: src/ui/gui/data-editor.c:953
 #, fuzzy
 msgid "System File"
 msgstr "Systemedatein (*.sav)"
 
-#: src/ui/gui/data-editor.c:921
+#: src/ui/gui/data-editor.c:958
 #, fuzzy
 msgid "Portable File"
 msgstr "Tragbardatein (*.por)"
@@ -4291,8 +4308,8 @@ msgstr "Schrift"
 msgid "Grid Lines"
 msgstr "Glitten"
 
-#: src/ui/gui/data-editor.glade:218 src/ui/gui/data-editor.glade:614
-#: src/ui/gui/data-editor.glade:1324 src/ui/gui/data-editor.glade:1502
+#: src/ui/gui/data-editor.glade:218 src/ui/gui/data-editor.glade:623
+#: src/ui/gui/data-editor.glade:1333 src/ui/gui/data-editor.glade:1511
 msgid "Value Labels"
 msgstr "Werten"
 
@@ -4300,11 +4317,11 @@ msgstr "Werten"
 msgid "Data"
 msgstr "Daten"
 
-#: src/ui/gui/data-editor.glade:237 src/ui/gui/data-editor.glade:497
+#: src/ui/gui/data-editor.glade:237 src/ui/gui/data-editor.glade:507
 msgid "Variables"
 msgstr "Variableansicht"
 
-#: src/ui/gui/data-editor.glade:256 src/ui/gui/data-editor.glade:550
+#: src/ui/gui/data-editor.glade:256 src/ui/gui/data-editor.glade:560
 #, fuzzy
 msgid "Insert Variable"
 msgstr "Variableansicht"
@@ -4314,230 +4331,233 @@ msgstr "Variableansicht"
 msgid "Insert Cases"
 msgstr "_Stecken"
 
-#: src/ui/gui/data-editor.glade:272 src/ui/gui/data-editor.glade:486
-#: src/ui/gui/data-editor.glade:1868
+#: src/ui/gui/data-editor.glade:272 src/ui/gui/data-editor.glade:496
+#: src/ui/gui/data-editor.glade:1877
 msgid "Go To Case"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:286 src/ui/gui/data-editor.glade:1933
+#: src/ui/gui/data-editor.glade:285 src/ui/gui/data-editor.glade:1942
 msgid "Sort Cases"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:302
+#: src/ui/gui/data-editor.glade:301
 msgid "Restructure"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:310
+#: src/ui/gui/data-editor.glade:309
 #, fuzzy
 msgid "Merge Files"
 msgstr "Alle Datei"
 
-#: src/ui/gui/data-editor.glade:318
+#: src/ui/gui/data-editor.glade:317
 msgid "Aggregate"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:332 src/ui/gui/data-editor.glade:571
+#: src/ui/gui/data-editor.glade:330 src/ui/gui/data-editor.glade:580
 #, fuzzy
 msgid "Split File"
 msgstr "Alle Datei"
 
-#: src/ui/gui/data-editor.glade:340 src/ui/gui/data-editor.glade:594
+#: src/ui/gui/data-editor.glade:338 src/ui/gui/data-editor.glade:603
 msgid "Select Cases"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:347 src/ui/gui/data-editor.glade:582
+#: src/ui/gui/data-editor.glade:345 src/ui/gui/data-editor.glade:591
 msgid "Weight Cases"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:358 src/ui/gui/syntax-editor.glade:233
+#: src/ui/gui/data-editor.glade:356 src/ui/gui/syntax-editor.glade:233
 #, fuzzy
 msgid "_Windows"
 msgstr "_Datei"
 
-#: src/ui/gui/data-editor.glade:365 src/ui/gui/syntax-editor.glade:242
+#: src/ui/gui/data-editor.glade:363 src/ui/gui/syntax-editor.glade:242
 msgid "_Minimise All Windows"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:376 src/ui/gui/syntax-editor.glade:254
+#: src/ui/gui/data-editor.glade:374 src/ui/gui/syntax-editor.glade:254
 msgid "_Help"
 msgstr "_Hilfe"
 
-#: src/ui/gui/data-editor.glade:383 src/ui/gui/syntax-editor.glade:263
+#: src/ui/gui/data-editor.glade:381 src/ui/gui/syntax-editor.glade:263
 msgid "_Reference Manual"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:390 src/ui/gui/syntax-editor.glade:271
+#: src/ui/gui/data-editor.glade:388 src/ui/gui/syntax-editor.glade:271
 msgid "_About"
 msgstr "_Info"
 
-#: src/ui/gui/data-editor.glade:435
+#: src/ui/gui/data-editor.glade:433
 msgid "Print"
 msgstr "Drucken"
 
-#: src/ui/gui/data-editor.glade:455
+#: src/ui/gui/data-editor.glade:444
+msgid "Recall"
+msgstr ""
+
+#: src/ui/gui/data-editor.glade:465
 msgid "Undo"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:466
+#: src/ui/gui/data-editor.glade:476
 msgid "Redo"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:518
+#: src/ui/gui/data-editor.glade:528
 msgid "Find"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:538
+#: src/ui/gui/data-editor.glade:548
 #, fuzzy
 msgid "Insert Case"
 msgstr "_Stecken"
 
-#: src/ui/gui/data-editor.glade:626
+#: src/ui/gui/data-editor.glade:635
 msgid "Use Sets"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:708
+#: src/ui/gui/data-editor.glade:717
 msgid "Data View"
 msgstr "Datenansicht"
 
-#: src/ui/gui/data-editor.glade:735
+#: src/ui/gui/data-editor.glade:744
 msgid "Variable View"
 msgstr "Variableansicht"
 
-#: src/ui/gui/data-editor.glade:765
+#: src/ui/gui/data-editor.glade:774
 msgid "Information Area"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:784
+#: src/ui/gui/data-editor.glade:793
 msgid "Processor Area"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:809
+#: src/ui/gui/data-editor.glade:818
 msgid "OMS Area"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:834
+#: src/ui/gui/data-editor.glade:843
 msgid "Case Counter Area"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:859
+#: src/ui/gui/data-editor.glade:868
 msgid "Filter Use Status Area"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:885
+#: src/ui/gui/data-editor.glade:894
 msgid "Weight Status Area"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:911
+#: src/ui/gui/data-editor.glade:920
 #, fuzzy
 msgid "Split File Status Area"
 msgstr "Alle Datei"
 
-#: src/ui/gui/data-editor.glade:941
+#: src/ui/gui/data-editor.glade:950
 msgid "Variable Type"
 msgstr "Variableansicht"
 
-#: src/ui/gui/data-editor.glade:976 src/ui/gui/psppire-var-store.c:475
+#: src/ui/gui/data-editor.glade:985 src/ui/gui/psppire-var-store.c:475
 msgid "Comma"
 msgstr "Komma"
 
-#: src/ui/gui/data-editor.glade:991 src/ui/gui/psppire-var-store.c:476
+#: src/ui/gui/data-editor.glade:1000 src/ui/gui/psppire-var-store.c:476
 msgid "Dot"
 msgstr "Punkt"
 
-#: src/ui/gui/data-editor.glade:1006
+#: src/ui/gui/data-editor.glade:1015
 msgid "Scientific notation"
 msgstr "Wissenschaftlichnotation"
 
-#: src/ui/gui/data-editor.glade:1021 src/ui/gui/psppire-var-store.c:478
+#: src/ui/gui/data-editor.glade:1030 src/ui/gui/psppire-var-store.c:478
 msgid "Date"
 msgstr "Datum"
 
-#: src/ui/gui/data-editor.glade:1036 src/ui/gui/psppire-var-store.c:479
+#: src/ui/gui/data-editor.glade:1045 src/ui/gui/psppire-var-store.c:479
 msgid "Dollar"
 msgstr "Euro"
 
-#: src/ui/gui/data-editor.glade:1051
+#: src/ui/gui/data-editor.glade:1060
 msgid "Custom currency"
 msgstr "Spezialwährung"
 
-#: src/ui/gui/data-editor.glade:1143
+#: src/ui/gui/data-editor.glade:1152
 msgid "positive"
 msgstr "positiv"
 
-#: src/ui/gui/data-editor.glade:1149
+#: src/ui/gui/data-editor.glade:1158
 msgid "negative"
 msgstr "negativ"
 
-#: src/ui/gui/data-editor.glade:1162
+#: src/ui/gui/data-editor.glade:1171
 msgid "Sample"
 msgstr "Muster"
 
-#: src/ui/gui/data-editor.glade:1212
+#: src/ui/gui/data-editor.glade:1221
 msgid "Width:"
 msgstr "Große:"
 
-#: src/ui/gui/data-editor.glade:1256
+#: src/ui/gui/data-editor.glade:1265
 msgid "Decimal Places:"
 msgstr "Dezimalstellen:"
 
-#: src/ui/gui/data-editor.glade:1422
+#: src/ui/gui/data-editor.glade:1431
 msgid "Value Label:"
 msgstr "Kennsatz:"
 
-#: src/ui/gui/data-editor.glade:1435
+#: src/ui/gui/data-editor.glade:1444
 msgid "Value:"
 msgstr "Werte:"
 
-#: src/ui/gui/data-editor.glade:1566
+#: src/ui/gui/data-editor.glade:1575
 msgid "Missing Values"
 msgstr "Lösewerten"
 
-#: src/ui/gui/data-editor.glade:1584
+#: src/ui/gui/data-editor.glade:1593
 msgid "_Range plus one optional discrete missing value"
 msgstr "Wertebereich und ein optional Lösewert"
 
-#: src/ui/gui/data-editor.glade:1608
+#: src/ui/gui/data-editor.glade:1617
 msgid "_Low:"
 msgstr "_Tief:"
 
-#: src/ui/gui/data-editor.glade:1637
+#: src/ui/gui/data-editor.glade:1646
 msgid "_High:"
 msgstr "_Hoch:"
 
-#: src/ui/gui/data-editor.glade:1678
+#: src/ui/gui/data-editor.glade:1687
 msgid "Di_screte value:"
 msgstr "Di_skretwerte"
 
-#: src/ui/gui/data-editor.glade:1725
+#: src/ui/gui/data-editor.glade:1734
 msgid "_No missing values"
 msgstr "_Kein Lösewerten"
 
-#: src/ui/gui/data-editor.glade:1742
+#: src/ui/gui/data-editor.glade:1751
 msgid "_Discrete missing values"
 msgstr "_Diskret Lösewerten"
 
-#: src/ui/gui/data-editor.glade:1885
+#: src/ui/gui/data-editor.glade:1894
 msgid "Case Number:"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1994
+#: src/ui/gui/data-editor.glade:2003 src/ui/gui/psppire.glade:1187
 msgid "Sort by:"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:2043 src/ui/gui/sort-cases-dialog.c:279
+#: src/ui/gui/data-editor.glade:2052 src/ui/gui/psppire.glade:1240
 msgid "Ascending"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:2056 src/ui/gui/sort-cases-dialog.c:281
+#: src/ui/gui/data-editor.glade:2065 src/ui/gui/psppire.glade:1250
 msgid "Descending"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:2072
+#: src/ui/gui/data-editor.glade:2081 src/ui/gui/psppire.glade:1266
 msgid "Sort Order"
 msgstr ""
 
-#: src/ui/gui/dict-display.c:92 src/ui/gui/sort-cases-dialog.c:339
-#: src/ui/gui/transpose-dialog.c:123
+#: src/ui/gui/dict-display.c:92
 msgid "Var"
 msgstr ""
 
@@ -4601,12 +4621,12 @@ msgstr ""
 msgid "%d"
 msgstr ""
 
-#: src/ui/gui/psppire.glade:9
+#: src/ui/gui/psppire.glade:11
 #, fuzzy
 msgid "This is pre-alpha software.  Use at your own risk."
 msgstr "Diese Software ist vor-Alpha.  Wahrscheinlich Funktioniert es nicht."
 
-#: src/ui/gui/psppire.glade:10
+#: src/ui/gui/psppire.glade:12
 msgid ""
 "    This program is free software; you can redistribute it and/or modify\n"
 "    it under the terms of the GNU General Public License as published by\n"
@@ -4624,11 +4644,12 @@ msgid ""
 "    02110-1301, USA.\n"
 msgstr ""
 
-#: src/ui/gui/psppire.glade:90 src/ui/gui/psppire.glade:170
+#: src/ui/gui/psppire.glade:89 src/ui/gui/psppire.glade:170
+#: src/ui/gui/weight-cases-dialog.c:85
 msgid "Do not weight cases"
 msgstr ""
 
-#: src/ui/gui/psppire.glade:100
+#: src/ui/gui/psppire.glade:99
 msgid "Weight cases by"
 msgstr ""
 
@@ -4641,16 +4662,118 @@ msgstr "Variableansicht"
 msgid "Current Status: "
 msgstr ""
 
-#: src/ui/gui/psppire.glade:257
+#: src/ui/gui/psppire.glade:258
 #, fuzzy
 msgid "Name Variable:"
 msgstr "Variableansicht"
 
-#: src/ui/gui/psppire.glade:290
+#: src/ui/gui/psppire.glade:291
 #, fuzzy
 msgid "Variable(s):"
 msgstr "Variableansicht"
 
+#: src/ui/gui/psppire.glade:444
+msgid "Analyse all cases.  Do not create groups."
+msgstr ""
+
+#: src/ui/gui/psppire.glade:454
+msgid "Compare groups."
+msgstr ""
+
+#: src/ui/gui/psppire.glade:467
+msgid "Organise output by groups."
+msgstr ""
+
+#: src/ui/gui/psppire.glade:514
+msgid "Groups based on:"
+msgstr ""
+
+#: src/ui/gui/psppire.glade:579
+msgid "Sort the file by grouping variables."
+msgstr ""
+
+#: src/ui/gui/psppire.glade:590
+msgid "File is already sorted."
+msgstr ""
+
+#: src/ui/gui/psppire.glade:634
+msgid "Current Status : "
+msgstr ""
+
+#: src/ui/gui/psppire.glade:642
+msgid "Analysis by groups is off"
+msgstr ""
+
+#: src/ui/gui/psppire.glade:740
+#, fuzzy
+msgid "All Cases"
+msgstr "Alle Datei"
+
+#: src/ui/gui/psppire.glade:761
+msgid "If condition is satisfied"
+msgstr ""
+
+#: src/ui/gui/psppire.glade:780
+msgid "If..."
+msgstr ""
+
+#: src/ui/gui/psppire.glade:816
+msgid "Random Sample of cases"
+msgstr ""
+
+#: src/ui/gui/psppire.glade:830
+#, fuzzy
+msgid "Sample..."
+msgstr "Muster"
+
+#: src/ui/gui/psppire.glade:841
+msgid "Approximately 23% of cases"
+msgstr ""
+
+#: src/ui/gui/psppire.glade:876
+msgid "Based on time or case range"
+msgstr ""
+
+#: src/ui/gui/psppire.glade:890
+msgid "Range..."
+msgstr ""
+
+#: src/ui/gui/psppire.glade:901
+msgid "2 thru 3"
+msgstr ""
+
+#: src/ui/gui/psppire.glade:936
+#, fuzzy
+msgid "Use filter variable"
+msgstr "Variableansicht"
+
+#: src/ui/gui/psppire.glade:983
+#, fuzzy
+msgid "Select"
+msgstr "Schriftwahlung"
+
+#: src/ui/gui/psppire.glade:1012
+#, fuzzy
+msgid "Filtered"
+msgstr "Datei:"
+
+#: src/ui/gui/psppire.glade:1022
+msgid "Deleted"
+msgstr ""
+
+#: src/ui/gui/psppire.glade:1039
+#, fuzzy
+msgid "Unselected Cases Are"
+msgstr "_Stecken"
+
+#: src/ui/gui/psppire.glade:1067
+msgid "Curent Status : "
+msgstr ""
+
+#: src/ui/gui/psppire.glade:1079
+msgid "Do not filter cases"
+msgstr ""
+
 #: src/ui/gui/psppire-var-store.c:470
 msgid "None"
 msgstr "Keine"
@@ -4663,10 +4786,6 @@ msgstr "Wissenschäflich"
 msgid "Custom"
 msgstr "Spezial"
 
-#: src/ui/gui/sort-cases-dialog.c:367
-msgid "Criteria"
-msgstr ""
-
 #: src/ui/gui/syntax-editor.c:80
 #, c-format
 msgid "Save contents of syntax editor to %s?"
@@ -4759,6 +4878,11 @@ msgstr "Ordinalwert"
 msgid "Scale"
 msgstr "Skalwert"
 
+#: src/ui/gui/weight-cases-dialog.c:91
+#, c-format
+msgid "Weight cases by %s"
+msgstr ""
+
 #: src/ui/gui/window-manager.c:141
 #, fuzzy, c-format
 msgid "Syntax%d"
index 81f892fe26ea11470c49a95f00ebf3c24eee5823..1b4bd2d56941b2c61a254405b80a6db861fac570 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: 2007-03-26 18:17+0800\n"
+"POT-Creation-Date: 2007-04-01 13:38+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"
@@ -175,13 +175,13 @@ msgstr ""
 msgid "Month number %f is not between 1 and 12."
 msgstr ""
 
-#: src/data/dictionary.c:717
+#: src/data/dictionary.c:724
 msgid ""
 "At least one case in the data file had a weight value that was user-missing, "
 "system-missing, zero, or negative.  These case(s) were ignored."
 msgstr ""
 
-#: src/data/dictionary.c:1238
+#: src/data/dictionary.c:1245
 msgid "Variable suffix too large."
 msgstr ""
 
@@ -308,13 +308,13 @@ msgid "%s variables are not compatible with %s format %s."
 msgstr ""
 
 #: src/data/format.c:310 src/data/por-file-reader.c:489
-#: src/data/sys-file-reader.c:602 src/ui/gui/data-editor.glade:1066
+#: src/data/sys-file-reader.c:602 src/ui/gui/data-editor.glade:1075
 #: src/ui/gui/psppire-var-store.c:481
 msgid "String"
 msgstr ""
 
 #: src/data/format.c:310 src/data/por-file-reader.c:489
-#: src/data/sys-file-reader.c:602 src/ui/gui/data-editor.glade:962
+#: src/data/sys-file-reader.c:602 src/ui/gui/data-editor.glade:971
 #: src/ui/gui/psppire-var-store.c:474
 msgid "Numeric"
 msgstr ""
@@ -821,15 +821,15 @@ msgstr ""
 msgid "`%s' may not be used as a variable name because it is a reserved word."
 msgstr ""
 
-#: src/data/variable.c:964
+#: src/data/variable.c:966
 msgid "ordinary"
 msgstr ""
 
-#: src/data/variable.c:966
+#: src/data/variable.c:968
 msgid "system"
 msgstr ""
 
-#: src/data/variable.c:968
+#: src/data/variable.c:970
 msgid "scratch"
 msgstr ""
 
@@ -1031,7 +1031,7 @@ msgstr ""
 #: src/language/dictionary/sys-file-info.c:160
 #: src/language/dictionary/sys-file-info.c:395
 #: src/language/dictionary/sys-file-info.c:620
-#: src/language/stats/descriptives.c:879
+#: src/language/stats/descriptives.c:880
 msgid "Variable"
 msgstr ""
 
@@ -1286,7 +1286,7 @@ msgid ""
 "REREAD: Column numbers must be positive finite numbers.  Column set to 1."
 msgstr ""
 
-#: src/language/data-io/list.q:154 src/language/stats/descriptives.c:364
+#: src/language/data-io/list.q:154 src/language/stats/descriptives.c:365
 msgid "No variables specified."
 msgstr ""
 
@@ -1382,7 +1382,7 @@ msgstr[0] ""
 msgstr[1] ""
 
 #: src/language/data-io/print-space.c:75 src/language/lexer/lexer.c:465
-#: src/language/stats/autorecode.c:153 src/language/xforms/select-if.c:61
+#: src/language/stats/autorecode.c:154 src/language/xforms/select-if.c:61
 msgid "expecting end of command"
 msgstr ""
 
@@ -1421,7 +1421,7 @@ msgid ""
 "will be made permanent."
 msgstr ""
 
-#: src/language/dictionary/delete-variables.c:48
+#: src/language/dictionary/delete-variables.c:49
 msgid ""
 "DELETE VARIABLES may not be used to delete all variables from the active "
 "file dictionary.  Use NEW FILE instead."
@@ -1570,8 +1570,8 @@ msgstr ""
 
 #: src/language/dictionary/split-file.c:86
 #: src/language/dictionary/sys-file-info.c:549
-#: src/language/stats/crosstabs.q:1118 src/language/stats/crosstabs.q:1145
-#: src/language/stats/crosstabs.q:1165 src/language/stats/crosstabs.q:1187
+#: src/language/stats/crosstabs.q:1119 src/language/stats/crosstabs.q:1146
+#: src/language/stats/crosstabs.q:1166 src/language/stats/crosstabs.q:1188
 #: src/language/stats/examine.q:1189 src/language/stats/frequencies.q:1145
 #: src/language/stats/frequencies.q:1269
 msgid "Value"
@@ -2115,57 +2115,57 @@ msgstr ""
 msgid "expecting number or data string"
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:54
+#: src/language/lexer/variable-parser.c:64
 msgid "expecting variable name"
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:64
+#: src/language/lexer/variable-parser.c:74
 #, c-format
 msgid "%s is not a variable name."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:173
+#: src/language/lexer/variable-parser.c:183
 #, c-format
 msgid ""
 "%s is not a numeric variable.  It will not be included in the variable list."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:176
+#: src/language/lexer/variable-parser.c:186
 #, c-format
 msgid ""
 "%s is not a string variable.  It will not be included in the variable list."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:180
+#: src/language/lexer/variable-parser.c:190
 #, c-format
 msgid "Scratch variables (such as %s) are not allowed here."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:184
+#: src/language/lexer/variable-parser.c:194
 #, c-format
 msgid ""
 "%s and %s are not the same type.  All variables in this variable list must "
 "be of the same type.  %s will be omitted from the list."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:190
+#: src/language/lexer/variable-parser.c:200
 #, c-format
 msgid ""
 "%s and %s are string variables with different widths.  All variables in this "
 "variable list must have the same width.  %s will be omttied from the list."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:195
+#: src/language/lexer/variable-parser.c:205
 #, c-format
 msgid "Variable %s appears twice in variable list."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:308
+#: src/language/lexer/variable-parser.c:318
 #, c-format
 msgid "%s TO %s is not valid syntax since %s precedes %s in the dictionary."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:316
+#: src/language/lexer/variable-parser.c:326
 #, c-format
 msgid ""
 "When using the TO keyword to specify several variables, both variables must "
@@ -2173,19 +2173,19 @@ msgid ""
 "system variables.  %s is a %s variable, whereas %s is %s."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:390
+#: src/language/lexer/variable-parser.c:400
 msgid "incorrect use of TO convention"
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:433
+#: src/language/lexer/variable-parser.c:443
 msgid "Scratch variables not allowed here."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:455
+#: src/language/lexer/variable-parser.c:465
 msgid "Prefixes don't match in use of TO convention."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:460
+#: src/language/lexer/variable-parser.c:470
 msgid "Bad bounds in use of TO convention."
 msgstr ""
 
@@ -2243,17 +2243,17 @@ msgid ""
 "contains the aggregate variables and the break variables."
 msgstr ""
 
-#: src/language/stats/autorecode.c:135
+#: src/language/stats/autorecode.c:136
 #, c-format
 msgid "Source variable count (%u) does not match target variable count (%u)."
 msgstr ""
 
-#: src/language/stats/autorecode.c:163
+#: src/language/stats/autorecode.c:164
 #, c-format
 msgid "Target variable %s duplicates existing variable %s."
 msgstr ""
 
-#: src/language/stats/autorecode.c:170
+#: src/language/stats/autorecode.c:171
 #, c-format
 msgid "Duplicate variable name %s among target variables."
 msgstr ""
@@ -2276,8 +2276,8 @@ msgid "Group2"
 msgstr ""
 
 #: src/language/stats/binomial.c:208 src/language/stats/chisquare.c:237
-#: src/language/stats/chisquare.c:297 src/language/stats/crosstabs.q:825
-#: src/language/stats/crosstabs.q:1025 src/language/stats/crosstabs.q:1748
+#: src/language/stats/chisquare.c:297 src/language/stats/crosstabs.q:826
+#: src/language/stats/crosstabs.q:1026 src/language/stats/crosstabs.q:1749
 #: src/language/stats/examine.q:909 src/language/stats/frequencies.q:1222
 #: src/language/stats/oneway.q:307 src/language/stats/oneway.q:471
 #: src/language/stats/regression.q:324
@@ -2285,15 +2285,15 @@ msgid "Total"
 msgstr ""
 
 #: src/language/stats/binomial.c:253 src/language/stats/chisquare.c:260
-#: src/language/stats/crosstabs.q:1143 src/language/stats/crosstabs.q:1184
+#: src/language/stats/crosstabs.q:1144 src/language/stats/crosstabs.q:1185
 msgid "Category"
 msgstr ""
 
-#: src/language/stats/binomial.c:254 src/language/stats/crosstabs.q:835
+#: src/language/stats/binomial.c:254 src/language/stats/crosstabs.q:836
 #: src/language/stats/examine.q:985 src/language/stats/frequencies.q:1518
 #: src/language/stats/npar-summary.c:124 src/language/stats/oneway.q:392
-#: src/language/stats/t-test.q:681 src/language/stats/t-test.q:704
-#: src/language/stats/t-test.q:830 src/language/stats/t-test.q:1367
+#: src/language/stats/t-test.q:680 src/language/stats/t-test.q:703
+#: src/language/stats/t-test.q:829 src/language/stats/t-test.q:1366
 msgid "N"
 msgstr ""
 
@@ -2342,10 +2342,10 @@ msgstr ""
 msgid "Chi-Square"
 msgstr ""
 
-#: src/language/stats/chisquare.c:325 src/language/stats/crosstabs.q:1119
+#: src/language/stats/chisquare.c:325 src/language/stats/crosstabs.q:1120
 #: src/language/stats/oneway.q:280 src/language/stats/oneway.q:681
-#: src/language/stats/regression.q:317 src/language/stats/t-test.q:981
-#: src/language/stats/t-test.q:1173 src/language/stats/t-test.q:1266
+#: src/language/stats/regression.q:317 src/language/stats/t-test.q:980
+#: src/language/stats/t-test.q:1172 src/language/stats/t-test.q:1265
 msgid "df"
 msgstr ""
 
@@ -2362,280 +2362,280 @@ msgstr ""
 msgid "Write mode ALL not allowed in general mode.  Assuming WRITE=CELLS."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:337
+#: src/language/stats/crosstabs.q:338
 msgid "Too many crosstabulation variables or dimensions."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:347
+#: src/language/stats/crosstabs.q:348
 msgid "expecting BY"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:414
+#: src/language/stats/crosstabs.q:415
 msgid "VARIABLES must be specified before TABLES."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:452
+#: src/language/stats/crosstabs.q:453
 #, c-format
 msgid "Maximum value (%ld) less than minimum value (%ld)."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:820
+#: src/language/stats/crosstabs.q:821
 msgid "Summary."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:822 src/language/stats/examine.q:973
+#: src/language/stats/crosstabs.q:823 src/language/stats/examine.q:973
 msgid "Cases"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:823 src/language/stats/examine.q:907
+#: src/language/stats/crosstabs.q:824 src/language/stats/examine.q:907
 #: src/language/stats/frequencies.q:1143 src/language/stats/frequencies.q:1519
 msgid "Valid"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:824 src/language/stats/examine.q:908
+#: src/language/stats/crosstabs.q:825 src/language/stats/examine.q:908
 #: src/language/stats/frequencies.q:1213 src/language/stats/frequencies.q:1520
 #: src/ui/gui/var-sheet.c:73
 msgid "Missing"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:836 src/language/stats/examine.q:988
+#: src/language/stats/crosstabs.q:837 src/language/stats/examine.q:988
 #: src/language/stats/frequencies.q:1147 src/language/stats/frequencies.q:1148
 #: src/language/stats/frequencies.q:1149
 msgid "Percent"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1077
+#: src/language/stats/crosstabs.q:1078
 msgid "count"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1078
+#: src/language/stats/crosstabs.q:1079
 msgid "row %"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1079
+#: src/language/stats/crosstabs.q:1080
 msgid "column %"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1080
+#: src/language/stats/crosstabs.q:1081
 msgid "total %"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1081
+#: src/language/stats/crosstabs.q:1082
 msgid "expected"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1082
+#: src/language/stats/crosstabs.q:1083
 msgid "residual"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1083
+#: src/language/stats/crosstabs.q:1084
 msgid "std. resid."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1084
+#: src/language/stats/crosstabs.q:1085
 msgid "adj. resid."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1114
+#: src/language/stats/crosstabs.q:1115
 msgid "Chi-square tests."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1117 src/language/stats/crosstabs.q:1144
-#: src/language/stats/crosstabs.q:1164 src/language/stats/crosstabs.q:1185
+#: src/language/stats/crosstabs.q:1118 src/language/stats/crosstabs.q:1145
+#: src/language/stats/crosstabs.q:1165 src/language/stats/crosstabs.q:1186
 #: src/language/stats/examine.q:1420
 msgid "Statistic"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1121
+#: src/language/stats/crosstabs.q:1122
 msgid "Asymp. Sig. (2-sided)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1123
+#: src/language/stats/crosstabs.q:1124
 msgid "Exact. Sig. (2-sided)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1125
+#: src/language/stats/crosstabs.q:1126
 msgid "Exact. Sig. (1-sided)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1140
+#: src/language/stats/crosstabs.q:1141
 msgid "Symmetric measures."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1146 src/language/stats/crosstabs.q:1188
+#: src/language/stats/crosstabs.q:1147 src/language/stats/crosstabs.q:1189
 msgid "Asymp. Std. Error"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1147 src/language/stats/crosstabs.q:1189
+#: src/language/stats/crosstabs.q:1148 src/language/stats/crosstabs.q:1190
 msgid "Approx. T"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1148 src/language/stats/crosstabs.q:1190
+#: src/language/stats/crosstabs.q:1149 src/language/stats/crosstabs.q:1191
 msgid "Approx. Sig."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1159
+#: src/language/stats/crosstabs.q:1160
 msgid "Risk estimate."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1163
+#: src/language/stats/crosstabs.q:1164
 #, c-format
 msgid "95%% Confidence Interval"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1166 src/language/stats/t-test.q:985
-#: src/language/stats/t-test.q:1170 src/language/stats/t-test.q:1269
+#: src/language/stats/crosstabs.q:1167 src/language/stats/t-test.q:984
+#: src/language/stats/t-test.q:1169 src/language/stats/t-test.q:1268
 msgid "Lower"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1167 src/language/stats/t-test.q:986
-#: src/language/stats/t-test.q:1171 src/language/stats/t-test.q:1270
+#: src/language/stats/crosstabs.q:1168 src/language/stats/t-test.q:985
+#: src/language/stats/t-test.q:1170 src/language/stats/t-test.q:1269
 msgid "Upper"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1181
+#: src/language/stats/crosstabs.q:1182
 msgid "Directional measures."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1186 src/ui/gui/var-sheet.c:68
+#: src/language/stats/crosstabs.q:1187 src/ui/gui/var-sheet.c:68
 msgid "Type"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1940
+#: src/language/stats/crosstabs.q:1941
 msgid "Pearson Chi-Square"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1941
+#: src/language/stats/crosstabs.q:1942
 msgid "Likelihood Ratio"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1942
+#: src/language/stats/crosstabs.q:1943
 msgid "Fisher's Exact Test"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1943
+#: src/language/stats/crosstabs.q:1944
 msgid "Continuity Correction"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1944
+#: src/language/stats/crosstabs.q:1945
 msgid "Linear-by-Linear Association"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1981 src/language/stats/crosstabs.q:2051
-#: src/language/stats/crosstabs.q:2110
+#: src/language/stats/crosstabs.q:1982 src/language/stats/crosstabs.q:2052
+#: src/language/stats/crosstabs.q:2111
 msgid "N of Valid Cases"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1997 src/language/stats/crosstabs.q:2126
+#: src/language/stats/crosstabs.q:1998 src/language/stats/crosstabs.q:2127
 msgid "Nominal by Nominal"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1998 src/language/stats/crosstabs.q:2127
+#: src/language/stats/crosstabs.q:1999 src/language/stats/crosstabs.q:2128
 msgid "Ordinal by Ordinal"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1999
+#: src/language/stats/crosstabs.q:2000
 msgid "Interval by Interval"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2000
+#: src/language/stats/crosstabs.q:2001
 msgid "Measure of Agreement"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2005
+#: src/language/stats/crosstabs.q:2006
 msgid "Phi"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2006
+#: src/language/stats/crosstabs.q:2007
 msgid "Cramer's V"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2007
+#: src/language/stats/crosstabs.q:2008
 msgid "Contingency Coefficient"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2008
+#: src/language/stats/crosstabs.q:2009
 msgid "Kendall's tau-b"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2009
+#: src/language/stats/crosstabs.q:2010
 msgid "Kendall's tau-c"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2010
+#: src/language/stats/crosstabs.q:2011
 msgid "Gamma"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2011
+#: src/language/stats/crosstabs.q:2012
 msgid "Spearman Correlation"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2012
+#: src/language/stats/crosstabs.q:2013
 msgid "Pearson's R"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2013
+#: src/language/stats/crosstabs.q:2014
 msgid "Kappa"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2083
+#: src/language/stats/crosstabs.q:2084
 #, c-format
 msgid "Odds Ratio for %s (%g / %g)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2086
+#: src/language/stats/crosstabs.q:2087
 #, c-format
 msgid "Odds Ratio for %s (%.*s / %.*s)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2094
+#: src/language/stats/crosstabs.q:2095
 #, c-format
 msgid "For cohort %s = %g"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2097
+#: src/language/stats/crosstabs.q:2098
 #, c-format
 msgid "For cohort %s = %.*s"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2128
+#: src/language/stats/crosstabs.q:2129
 msgid "Nominal by Interval"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2133
+#: src/language/stats/crosstabs.q:2134
 msgid "Lambda"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2134
+#: src/language/stats/crosstabs.q:2135
 msgid "Goodman and Kruskal tau"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2135
+#: src/language/stats/crosstabs.q:2136
 msgid "Uncertainty Coefficient"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2136
+#: src/language/stats/crosstabs.q:2137
 msgid "Somers' d"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2137
+#: src/language/stats/crosstabs.q:2138
 msgid "Eta"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2142
+#: src/language/stats/crosstabs.q:2143
 msgid "Symmetric"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2143 src/language/stats/crosstabs.q:2144
+#: src/language/stats/crosstabs.q:2144 src/language/stats/crosstabs.q:2145
 #, c-format
 msgid "%s Dependent"
 msgstr ""
 
 #: src/language/stats/descriptives.c:106 src/language/stats/examine.q:1525
 #: src/language/stats/frequencies.q:125 src/language/stats/npar-summary.c:127
-#: src/language/stats/oneway.q:393 src/language/stats/t-test.q:682
-#: src/language/stats/t-test.q:705 src/language/stats/t-test.q:829
-#: src/language/stats/t-test.q:1167
+#: src/language/stats/oneway.q:393 src/language/stats/t-test.q:681
+#: src/language/stats/t-test.q:704 src/language/stats/t-test.q:828
+#: src/language/stats/t-test.q:1166
 msgid "Mean"
 msgstr ""
 
@@ -2691,47 +2691,47 @@ msgstr ""
 msgid "Sum"
 msgstr ""
 
-#: src/language/stats/descriptives.c:346
+#: src/language/stats/descriptives.c:347
 #, c-format
 msgid "Z-score variable name %s would be a duplicate variable name."
 msgstr ""
 
-#: src/language/stats/descriptives.c:449
+#: src/language/stats/descriptives.c:450
 msgid "expecting statistic name: reverting to default"
 msgstr ""
 
-#: src/language/stats/descriptives.c:522
+#: src/language/stats/descriptives.c:523
 msgid ""
 "Ran out of generic names for Z-score variables.  There are only 126 generic "
 "names: ZSC001-ZSC0999, STDZ01-STDZ09, ZZZZ01-ZZZZ09, ZQZQ01-ZQZQ09."
 msgstr ""
 
-#: src/language/stats/descriptives.c:554
+#: src/language/stats/descriptives.c:555
 msgid "Mapping of variables to corresponding Z-scores."
 msgstr ""
 
-#: src/language/stats/descriptives.c:559
+#: src/language/stats/descriptives.c:560
 msgid "Source"
 msgstr ""
 
-#: src/language/stats/descriptives.c:560
+#: src/language/stats/descriptives.c:561
 msgid "Target"
 msgstr ""
 
-#: src/language/stats/descriptives.c:670
+#: src/language/stats/descriptives.c:671
 #, c-format
 msgid "Z-score of %s"
 msgstr ""
 
-#: src/language/stats/descriptives.c:882
+#: src/language/stats/descriptives.c:883
 msgid "Valid N"
 msgstr ""
 
-#: src/language/stats/descriptives.c:883
+#: src/language/stats/descriptives.c:884
 msgid "Missing N"
 msgstr ""
 
-#: src/language/stats/descriptives.c:910
+#: src/language/stats/descriptives.c:911
 #, c-format
 msgid "Valid cases = %g; cases with missing value(s) = %g."
 msgstr ""
@@ -2798,9 +2798,9 @@ msgid "Median"
 msgstr ""
 
 #: src/language/stats/examine.q:1617 src/language/stats/npar-summary.c:130
-#: src/language/stats/oneway.q:394 src/language/stats/t-test.q:683
-#: src/language/stats/t-test.q:706 src/language/stats/t-test.q:831
-#: src/language/stats/t-test.q:1168
+#: src/language/stats/oneway.q:394 src/language/stats/t-test.q:682
+#: src/language/stats/t-test.q:705 src/language/stats/t-test.q:830
+#: src/language/stats/t-test.q:1167
 msgid "Std. Deviation"
 msgstr ""
 
@@ -3029,7 +3029,7 @@ msgid ""
 "exactly %d values."
 msgstr ""
 
-#: src/language/stats/npar.q:422 src/language/stats/t-test.q:485
+#: src/language/stats/npar.q:422 src/language/stats/t-test.q:484
 #, c-format
 msgid ""
 "PAIRED was specified but the number of variables preceding WITH (%d) did not "
@@ -3075,7 +3075,7 @@ msgid "Mean Square"
 msgstr ""
 
 #: src/language/stats/oneway.q:282 src/language/stats/regression.q:319
-#: src/language/stats/t-test.q:978
+#: src/language/stats/t-test.q:977
 msgid "F"
 msgstr ""
 
@@ -3129,13 +3129,13 @@ msgid "Value of Contrast"
 msgstr ""
 
 #: src/language/stats/oneway.q:680 src/language/stats/regression.q:223
-#: src/language/stats/t-test.q:980 src/language/stats/t-test.q:1172
-#: src/language/stats/t-test.q:1265
+#: src/language/stats/t-test.q:979 src/language/stats/t-test.q:1171
+#: src/language/stats/t-test.q:1264
 msgid "t"
 msgstr ""
 
-#: src/language/stats/oneway.q:682 src/language/stats/t-test.q:982
-#: src/language/stats/t-test.q:1174 src/language/stats/t-test.q:1267
+#: src/language/stats/oneway.q:682 src/language/stats/t-test.q:981
+#: src/language/stats/t-test.q:1173 src/language/stats/t-test.q:1266
 msgid "Sig. (2-tailed)"
 msgstr ""
 
@@ -3252,7 +3252,7 @@ msgstr ""
 msgid "Coefficient Correlations"
 msgstr ""
 
-#: src/language/stats/regression.q:1147
+#: src/language/stats/regression.q:1181
 msgid "Dependent variable must be numeric."
 msgstr ""
 
@@ -3276,115 +3276,115 @@ msgstr ""
 msgid "VARIABLES subcommand is not appropriate with PAIRS"
 msgstr ""
 
-#: src/language/stats/t-test.q:335
+#: src/language/stats/t-test.q:334
 msgid "One or more VARIABLES must be specified."
 msgstr ""
 
-#: src/language/stats/t-test.q:379
+#: src/language/stats/t-test.q:378
 #, c-format
 msgid "Long string variable %s is not valid here."
 msgstr ""
 
-#: src/language/stats/t-test.q:399 src/language/stats/t-test.q:413
+#: src/language/stats/t-test.q:398 src/language/stats/t-test.q:412
 msgid ""
 "When applying GROUPS to a string variable, two values must be specified."
 msgstr ""
 
-#: src/language/stats/t-test.q:502
+#: src/language/stats/t-test.q:501
 msgid "At least two variables must be specified on PAIRS."
 msgstr ""
 
-#: src/language/stats/t-test.q:679
+#: src/language/stats/t-test.q:678
 msgid "One-Sample Statistics"
 msgstr ""
 
-#: src/language/stats/t-test.q:684 src/language/stats/t-test.q:707
-#: src/language/stats/t-test.q:832
+#: src/language/stats/t-test.q:683 src/language/stats/t-test.q:706
+#: src/language/stats/t-test.q:831
 msgid "SE. Mean"
 msgstr ""
 
-#: src/language/stats/t-test.q:702
+#: src/language/stats/t-test.q:701
 msgid "Group Statistics"
 msgstr ""
 
-#: src/language/stats/t-test.q:826
+#: src/language/stats/t-test.q:825
 msgid "Paired Sample Statistics"
 msgstr ""
 
-#: src/language/stats/t-test.q:848 src/language/stats/t-test.q:1193
-#: src/language/stats/t-test.q:1384
+#: src/language/stats/t-test.q:847 src/language/stats/t-test.q:1192
+#: src/language/stats/t-test.q:1383
 #, c-format
 msgid "Pair %d"
 msgstr ""
 
-#: src/language/stats/t-test.q:966
+#: src/language/stats/t-test.q:965
 msgid "Independent Samples Test"
 msgstr ""
 
-#: src/language/stats/t-test.q:974
+#: src/language/stats/t-test.q:973
 msgid "Levene's Test for Equality of Variances"
 msgstr ""
 
-#: src/language/stats/t-test.q:976
+#: src/language/stats/t-test.q:975
 msgid "t-test for Equality of Means"
 msgstr ""
 
-#: src/language/stats/t-test.q:979 src/language/stats/t-test.q:1369
+#: src/language/stats/t-test.q:978 src/language/stats/t-test.q:1368
 msgid "Sig."
 msgstr ""
 
-#: src/language/stats/t-test.q:983 src/language/stats/t-test.q:1268
+#: src/language/stats/t-test.q:982 src/language/stats/t-test.q:1267
 msgid "Mean Difference"
 msgstr ""
 
-#: src/language/stats/t-test.q:984
+#: src/language/stats/t-test.q:983
 msgid "Std. Error Difference"
 msgstr ""
 
-#: src/language/stats/t-test.q:989 src/language/stats/t-test.q:1164
-#: src/language/stats/t-test.q:1260
+#: src/language/stats/t-test.q:988 src/language/stats/t-test.q:1163
+#: src/language/stats/t-test.q:1259
 #, c-format
 msgid "%g%% Confidence Interval of the Difference"
 msgstr ""
 
-#: src/language/stats/t-test.q:1044
+#: src/language/stats/t-test.q:1043
 msgid "Equal variances assumed"
 msgstr ""
 
-#: src/language/stats/t-test.q:1096
+#: src/language/stats/t-test.q:1095
 msgid "Equal variances not assumed"
 msgstr ""
 
-#: src/language/stats/t-test.q:1154
+#: src/language/stats/t-test.q:1153
 msgid "Paired Samples Test"
 msgstr ""
 
-#: src/language/stats/t-test.q:1157
+#: src/language/stats/t-test.q:1156
 msgid "Paired Differences"
 msgstr ""
 
-#: src/language/stats/t-test.q:1169
+#: src/language/stats/t-test.q:1168
 msgid "Std. Error Mean"
 msgstr ""
 
-#: src/language/stats/t-test.q:1249
+#: src/language/stats/t-test.q:1248
 msgid "One-Sample Test"
 msgstr ""
 
-#: src/language/stats/t-test.q:1254
+#: src/language/stats/t-test.q:1253
 #, c-format
 msgid "Test Value = %f"
 msgstr ""
 
-#: src/language/stats/t-test.q:1364
+#: src/language/stats/t-test.q:1363
 msgid "Paired Samples Correlations"
 msgstr ""
 
-#: src/language/stats/t-test.q:1368
+#: src/language/stats/t-test.q:1367
 msgid "Correlation"
 msgstr ""
 
-#: src/language/stats/t-test.q:1387
+#: src/language/stats/t-test.q:1386
 #, c-format
 msgid "%s & %s"
 msgstr ""
@@ -4128,100 +4128,116 @@ msgstr ""
 msgid "Style of bevel around the custom entry button"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:159
+#: src/ui/gui/data-editor.c:161
 msgid "Weights"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:160
+#: src/ui/gui/data-editor.c:162
 msgid "Weight cases by variable"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:169 src/ui/gui/data-editor.glade:294
+#: src/ui/gui/data-editor.c:171 src/ui/gui/data-editor.glade:293
 msgid "Transpose"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:170
+#: src/ui/gui/data-editor.c:172
 msgid "Transpose the cases with the variables"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:494
+#: src/ui/gui/data-editor.c:183
+msgid "Split"
+msgstr ""
+
+#: src/ui/gui/data-editor.c:184
+msgid "Split the active file"
+msgstr ""
+
+#: src/ui/gui/data-editor.c:194
+msgid "Sort"
+msgstr ""
+
+#: src/ui/gui/data-editor.c:195
+msgid "Sort cases in the active file"
+msgstr ""
+
+#: src/ui/gui/data-editor.c:531
 msgid "Font Selection"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:672
+#: src/ui/gui/data-editor.c:709
 msgid "No Split"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:680
+#: src/ui/gui/data-editor.c:717
 msgid "Split by "
 msgstr ""
 
-#: src/ui/gui/data-editor.c:705
+#: src/ui/gui/data-editor.c:742
 msgid "Filter off"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:718
+#: src/ui/gui/data-editor.c:755
 #, c-format
 msgid "Filter by %s"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:736
+#: src/ui/gui/data-editor.c:773
 msgid "Weights off"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:749
+#: src/ui/gui/data-editor.c:786
 #, c-format
 msgid "Weight by %s"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:772 src/ui/gui/data-editor.c:983
-#: src/ui/gui/data-editor.glade:414
+#: src/ui/gui/data-editor.c:809 src/ui/gui/data-editor.c:1020
+#: src/ui/gui/data-editor.glade:412
 msgid "Open"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:773
+#: src/ui/gui/data-editor.c:810
 msgid "Open a data file"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:781 src/ui/gui/data-editor.c:888
-#: src/ui/gui/data-editor.glade:424
+#: src/ui/gui/data-editor.c:818 src/ui/gui/data-editor.c:925
+#: src/ui/gui/data-editor.glade:422
 msgid "Save"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:782 src/ui/gui/data-editor.c:792
+#: src/ui/gui/data-editor.c:819 src/ui/gui/data-editor.c:829
 msgid "Save data to file"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:791
+#: src/ui/gui/data-editor.c:828
 msgid "Save As"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:800
+#: src/ui/gui/data-editor.c:837
 msgid "New"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:801
+#: src/ui/gui/data-editor.c:838
 msgid "New data file"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:896 src/ui/gui/data-editor.c:991
+#: src/ui/gui/data-editor.c:933 src/ui/gui/data-editor.c:1028
 msgid "System Files (*.sav)"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:902 src/ui/gui/data-editor.c:997
+#: src/ui/gui/data-editor.c:939 src/ui/gui/data-editor.c:1034
 msgid "Portable Files (*.por) "
 msgstr ""
 
-#: src/ui/gui/data-editor.c:908 src/ui/gui/data-editor.c:1003
+#: src/ui/gui/data-editor.c:945 src/ui/gui/data-editor.c:1040
 #: src/ui/gui/syntax-editor.c:141 src/ui/gui/syntax-editor.c:524
 msgid "All Files"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:916
+#: src/ui/gui/data-editor.c:953
 msgid "System File"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:921
+#: src/ui/gui/data-editor.c:958
 msgid "Portable File"
 msgstr ""
 
@@ -4276,8 +4292,8 @@ msgstr ""
 msgid "Grid Lines"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:218 src/ui/gui/data-editor.glade:614
-#: src/ui/gui/data-editor.glade:1324 src/ui/gui/data-editor.glade:1502
+#: src/ui/gui/data-editor.glade:218 src/ui/gui/data-editor.glade:623
+#: src/ui/gui/data-editor.glade:1333 src/ui/gui/data-editor.glade:1511
 msgid "Value Labels"
 msgstr ""
 
@@ -4285,11 +4301,11 @@ msgstr ""
 msgid "Data"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:237 src/ui/gui/data-editor.glade:497
+#: src/ui/gui/data-editor.glade:237 src/ui/gui/data-editor.glade:507
 msgid "Variables"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:256 src/ui/gui/data-editor.glade:550
+#: src/ui/gui/data-editor.glade:256 src/ui/gui/data-editor.glade:560
 msgid "Insert Variable"
 msgstr ""
 
@@ -4297,225 +4313,228 @@ msgstr ""
 msgid "Insert Cases"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:272 src/ui/gui/data-editor.glade:486
-#: src/ui/gui/data-editor.glade:1868
+#: src/ui/gui/data-editor.glade:272 src/ui/gui/data-editor.glade:496
+#: src/ui/gui/data-editor.glade:1877
 msgid "Go To Case"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:286 src/ui/gui/data-editor.glade:1933
+#: src/ui/gui/data-editor.glade:285 src/ui/gui/data-editor.glade:1942
 msgid "Sort Cases"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:302
+#: src/ui/gui/data-editor.glade:301
 msgid "Restructure"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:310
+#: src/ui/gui/data-editor.glade:309
 msgid "Merge Files"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:318
+#: src/ui/gui/data-editor.glade:317
 msgid "Aggregate"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:332 src/ui/gui/data-editor.glade:571
+#: src/ui/gui/data-editor.glade:330 src/ui/gui/data-editor.glade:580
 msgid "Split File"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:340 src/ui/gui/data-editor.glade:594
+#: src/ui/gui/data-editor.glade:338 src/ui/gui/data-editor.glade:603
 msgid "Select Cases"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:347 src/ui/gui/data-editor.glade:582
+#: src/ui/gui/data-editor.glade:345 src/ui/gui/data-editor.glade:591
 msgid "Weight Cases"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:358 src/ui/gui/syntax-editor.glade:233
+#: src/ui/gui/data-editor.glade:356 src/ui/gui/syntax-editor.glade:233
 msgid "_Windows"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:365 src/ui/gui/syntax-editor.glade:242
+#: src/ui/gui/data-editor.glade:363 src/ui/gui/syntax-editor.glade:242
 msgid "_Minimise All Windows"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:376 src/ui/gui/syntax-editor.glade:254
+#: src/ui/gui/data-editor.glade:374 src/ui/gui/syntax-editor.glade:254
 msgid "_Help"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:383 src/ui/gui/syntax-editor.glade:263
+#: src/ui/gui/data-editor.glade:381 src/ui/gui/syntax-editor.glade:263
 msgid "_Reference Manual"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:390 src/ui/gui/syntax-editor.glade:271
+#: src/ui/gui/data-editor.glade:388 src/ui/gui/syntax-editor.glade:271
 msgid "_About"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:435
+#: src/ui/gui/data-editor.glade:433
 msgid "Print"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:455
+#: src/ui/gui/data-editor.glade:444
+msgid "Recall"
+msgstr ""
+
+#: src/ui/gui/data-editor.glade:465
 msgid "Undo"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:466
+#: src/ui/gui/data-editor.glade:476
 msgid "Redo"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:518
+#: src/ui/gui/data-editor.glade:528
 msgid "Find"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:538
+#: src/ui/gui/data-editor.glade:548
 msgid "Insert Case"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:626
+#: src/ui/gui/data-editor.glade:635
 msgid "Use Sets"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:708
+#: src/ui/gui/data-editor.glade:717
 msgid "Data View"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:735
+#: src/ui/gui/data-editor.glade:744
 msgid "Variable View"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:765
+#: src/ui/gui/data-editor.glade:774
 msgid "Information Area"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:784
+#: src/ui/gui/data-editor.glade:793
 msgid "Processor Area"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:809
+#: src/ui/gui/data-editor.glade:818
 msgid "OMS Area"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:834
+#: src/ui/gui/data-editor.glade:843
 msgid "Case Counter Area"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:859
+#: src/ui/gui/data-editor.glade:868
 msgid "Filter Use Status Area"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:885
+#: src/ui/gui/data-editor.glade:894
 msgid "Weight Status Area"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:911
+#: src/ui/gui/data-editor.glade:920
 msgid "Split File Status Area"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:941
+#: src/ui/gui/data-editor.glade:950
 msgid "Variable Type"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:976 src/ui/gui/psppire-var-store.c:475
+#: src/ui/gui/data-editor.glade:985 src/ui/gui/psppire-var-store.c:475
 msgid "Comma"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:991 src/ui/gui/psppire-var-store.c:476
+#: src/ui/gui/data-editor.glade:1000 src/ui/gui/psppire-var-store.c:476
 msgid "Dot"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1006
+#: src/ui/gui/data-editor.glade:1015
 msgid "Scientific notation"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1021 src/ui/gui/psppire-var-store.c:478
+#: src/ui/gui/data-editor.glade:1030 src/ui/gui/psppire-var-store.c:478
 msgid "Date"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1036 src/ui/gui/psppire-var-store.c:479
+#: src/ui/gui/data-editor.glade:1045 src/ui/gui/psppire-var-store.c:479
 msgid "Dollar"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1051
+#: src/ui/gui/data-editor.glade:1060
 msgid "Custom currency"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1143
+#: src/ui/gui/data-editor.glade:1152
 msgid "positive"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1149
+#: src/ui/gui/data-editor.glade:1158
 msgid "negative"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1162
+#: src/ui/gui/data-editor.glade:1171
 msgid "Sample"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1212
+#: src/ui/gui/data-editor.glade:1221
 msgid "Width:"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1256
+#: src/ui/gui/data-editor.glade:1265
 msgid "Decimal Places:"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1422
+#: src/ui/gui/data-editor.glade:1431
 msgid "Value Label:"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1435
+#: src/ui/gui/data-editor.glade:1444
 msgid "Value:"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1566
+#: src/ui/gui/data-editor.glade:1575
 msgid "Missing Values"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1584
+#: src/ui/gui/data-editor.glade:1593
 msgid "_Range plus one optional discrete missing value"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1608
+#: src/ui/gui/data-editor.glade:1617
 msgid "_Low:"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1637
+#: src/ui/gui/data-editor.glade:1646
 msgid "_High:"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1678
+#: src/ui/gui/data-editor.glade:1687
 msgid "Di_screte value:"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1725
+#: src/ui/gui/data-editor.glade:1734
 msgid "_No missing values"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1742
+#: src/ui/gui/data-editor.glade:1751
 msgid "_Discrete missing values"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1885
+#: src/ui/gui/data-editor.glade:1894
 msgid "Case Number:"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1994
+#: src/ui/gui/data-editor.glade:2003 src/ui/gui/psppire.glade:1187
 msgid "Sort by:"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:2043 src/ui/gui/sort-cases-dialog.c:279
+#: src/ui/gui/data-editor.glade:2052 src/ui/gui/psppire.glade:1240
 msgid "Ascending"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:2056 src/ui/gui/sort-cases-dialog.c:281
+#: src/ui/gui/data-editor.glade:2065 src/ui/gui/psppire.glade:1250
 msgid "Descending"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:2072
+#: src/ui/gui/data-editor.glade:2081 src/ui/gui/psppire.glade:1266
 msgid "Sort Order"
 msgstr ""
 
-#: src/ui/gui/dict-display.c:92 src/ui/gui/sort-cases-dialog.c:339
-#: src/ui/gui/transpose-dialog.c:123
+#: src/ui/gui/dict-display.c:92
 msgid "Var"
 msgstr ""
 
@@ -4578,11 +4597,11 @@ msgstr ""
 msgid "%d"
 msgstr ""
 
-#: src/ui/gui/psppire.glade:9
+#: src/ui/gui/psppire.glade:11
 msgid "This is pre-alpha software.  Use at your own risk."
 msgstr ""
 
-#: src/ui/gui/psppire.glade:10
+#: src/ui/gui/psppire.glade:12
 msgid ""
 "    This program is free software; you can redistribute it and/or modify\n"
 "    it under the terms of the GNU General Public License as published by\n"
@@ -4600,11 +4619,12 @@ msgid ""
 "    02110-1301, USA.\n"
 msgstr ""
 
-#: src/ui/gui/psppire.glade:90 src/ui/gui/psppire.glade:170
+#: src/ui/gui/psppire.glade:89 src/ui/gui/psppire.glade:170
+#: src/ui/gui/weight-cases-dialog.c:85
 msgid "Do not weight cases"
 msgstr ""
 
-#: src/ui/gui/psppire.glade:100
+#: src/ui/gui/psppire.glade:99
 msgid "Weight cases by"
 msgstr ""
 
@@ -4616,14 +4636,110 @@ msgstr ""
 msgid "Current Status: "
 msgstr ""
 
-#: src/ui/gui/psppire.glade:257
+#: src/ui/gui/psppire.glade:258
 msgid "Name Variable:"
 msgstr ""
 
-#: src/ui/gui/psppire.glade:290
+#: src/ui/gui/psppire.glade:291
 msgid "Variable(s):"
 msgstr ""
 
+#: src/ui/gui/psppire.glade:444
+msgid "Analyse all cases.  Do not create groups."
+msgstr ""
+
+#: src/ui/gui/psppire.glade:454
+msgid "Compare groups."
+msgstr ""
+
+#: src/ui/gui/psppire.glade:467
+msgid "Organise output by groups."
+msgstr ""
+
+#: src/ui/gui/psppire.glade:514
+msgid "Groups based on:"
+msgstr ""
+
+#: src/ui/gui/psppire.glade:579
+msgid "Sort the file by grouping variables."
+msgstr ""
+
+#: src/ui/gui/psppire.glade:590
+msgid "File is already sorted."
+msgstr ""
+
+#: src/ui/gui/psppire.glade:634
+msgid "Current Status : "
+msgstr ""
+
+#: src/ui/gui/psppire.glade:642
+msgid "Analysis by groups is off"
+msgstr ""
+
+#: src/ui/gui/psppire.glade:740
+msgid "All Cases"
+msgstr ""
+
+#: src/ui/gui/psppire.glade:761
+msgid "If condition is satisfied"
+msgstr ""
+
+#: src/ui/gui/psppire.glade:780
+msgid "If..."
+msgstr ""
+
+#: src/ui/gui/psppire.glade:816
+msgid "Random Sample of cases"
+msgstr ""
+
+#: src/ui/gui/psppire.glade:830
+msgid "Sample..."
+msgstr ""
+
+#: src/ui/gui/psppire.glade:841
+msgid "Approximately 23% of cases"
+msgstr ""
+
+#: src/ui/gui/psppire.glade:876
+msgid "Based on time or case range"
+msgstr ""
+
+#: src/ui/gui/psppire.glade:890
+msgid "Range..."
+msgstr ""
+
+#: src/ui/gui/psppire.glade:901
+msgid "2 thru 3"
+msgstr ""
+
+#: src/ui/gui/psppire.glade:936
+msgid "Use filter variable"
+msgstr ""
+
+#: src/ui/gui/psppire.glade:983
+msgid "Select"
+msgstr ""
+
+#: src/ui/gui/psppire.glade:1012
+msgid "Filtered"
+msgstr ""
+
+#: src/ui/gui/psppire.glade:1022
+msgid "Deleted"
+msgstr ""
+
+#: src/ui/gui/psppire.glade:1039
+msgid "Unselected Cases Are"
+msgstr ""
+
+#: src/ui/gui/psppire.glade:1067
+msgid "Curent Status : "
+msgstr ""
+
+#: src/ui/gui/psppire.glade:1079
+msgid "Do not filter cases"
+msgstr ""
+
 #: src/ui/gui/psppire-var-store.c:470
 msgid "None"
 msgstr ""
@@ -4636,10 +4752,6 @@ msgstr ""
 msgid "Custom"
 msgstr ""
 
-#: src/ui/gui/sort-cases-dialog.c:367
-msgid "Criteria"
-msgstr ""
-
 #: src/ui/gui/syntax-editor.c:80
 #, c-format
 msgid "Save contents of syntax editor to %s?"
@@ -4729,6 +4841,11 @@ msgstr ""
 msgid "Scale"
 msgstr ""
 
+#: src/ui/gui/weight-cases-dialog.c:91
+#, c-format
+msgid "Weight cases by %s"
+msgstr ""
+
 #: src/ui/gui/window-manager.c:141
 #, c-format
 msgid "Syntax%d"
index c08557156357779327fd1559b4dde4dcd88467a6..b09a10f206efac5f4b84a21c600300c6cb3d3d16 100644 (file)
@@ -334,7 +334,7 @@ case_data_rw_idx (struct ccase *c, size_t idx)
    in cases A and B and returns a strcmp()-type result. */
 int
 case_compare (const struct ccase *a, const struct ccase *b,
-              struct variable *const *vp, size_t var_cnt)
+              const struct variable *const *vp, size_t var_cnt)
 {
   return case_compare_2dict (a, b, vp, vp, var_cnt);
 }
@@ -344,7 +344,8 @@ case_compare (const struct ccase *a, const struct ccase *b,
    and returns a strcmp()-type result. */
 int
 case_compare_2dict (const struct ccase *ca, const struct ccase *cb,
-                    struct variable *const *vap, struct variable *const *vbp,
+                    const struct variable *const *vap, 
+               const struct variable *const *vbp,
                     size_t var_cnt) 
 {
   for (; var_cnt-- > 0; vap++, vbp++) 
index 3d9181192c0aa49b3698958a6f91b978ce80eb96..587ab28ac4fbd271753dea6dd9c758ce553ac359 100644 (file)
@@ -69,9 +69,10 @@ const char *case_str_idx (const struct ccase *, size_t idx);
 union value *case_data_rw_idx (struct ccase *, size_t idx);
 
 int case_compare (const struct ccase *, const struct ccase *,
-                  struct variable *const *, size_t var_cnt);
+                  const struct variable *const *, size_t var_cnt);
 int case_compare_2dict (const struct ccase *, const struct ccase *,
-                        struct variable *const *, struct variable *const *,
+                        const struct variable *const *, 
+                       const struct variable *const *,
                         size_t var_cnt);
 
 const union value *case_data_all (const struct ccase *);
index fb23e4f674ad104c547d439d64b50dc1c4d7530e..2c6336d658ca84fc2d850d75e2e21fdd4de9c9ba 100644 (file)
@@ -67,7 +67,7 @@ casefilter_variable_missing (const struct casefilter *filter,
    N_VARS is the size of VARS.
  */
 struct casefilter *
-casefilter_create (enum mv_class class, struct variable **vars, int n_vars)
+casefilter_create (enum mv_class class, const struct variable **vars, int n_vars)
 {
   int i;
   struct casefilter * filter = xmalloc (sizeof (*filter)) ;
@@ -88,7 +88,7 @@ casefilter_create (enum mv_class class, struct variable **vars, int n_vars)
    filter considers. N_VARS is the size of VARS */
 void
 casefilter_add_variables (struct casefilter *filter,
-                         struct variable *const *vars, int n_vars)
+                         const struct variable *const *vars, int n_vars)
 {
   int i;
 
index 083322ee58935d5f3025c11ec9c182717af2266d..6afad6a9d399036d39eb9998b9454821f2e50384 100644 (file)
@@ -32,12 +32,12 @@ struct variable ;
    N_VARS is the size of VARS.
  */
 struct casefilter * casefilter_create (enum mv_class class,
-                                       struct variable **, int);
+                                       const struct variable **, int);
 
 /* Add the variables in VARS to the list of variables for which the
    filter considers. N_VARS is the size of VARS */
 void casefilter_add_variables (struct casefilter *, 
-                              struct variable *const*, int);
+                              const struct variable *const*, int);
 
 /* Destroy the filter FILTER */
 void casefilter_destroy (struct casefilter *); 
index 654ef44deaf777f3ed6fc1d9f4983f3e2426e98a..4fed886b56609a2bac4c96e19f2ba01924cd7900 100644 (file)
@@ -43,11 +43,11 @@ size_t cat_value_find (const struct variable *, const union value *);
 
 union value *cat_subscript_to_value (const size_t, struct variable *);
 
-void cat_stored_values_create (struct variable *);
+void cat_stored_values_create (const struct variable *);
 
-void cat_value_update (struct variable *, const union value *);
+void cat_value_update (const struct variable *, const union value *);
 
-void cat_create_value_matrix (struct variable *);
+void cat_create_value_matrix (const struct variable *);
 
 void cat_stored_values_destroy (struct cat_vals *);
 #endif
index d320cea2a108f955475b413fd0cabbe54173691a..9e5c6b0c110ac0514a095abb41e760c3d68411c6 100644 (file)
@@ -48,7 +48,7 @@
 #define N_INITIAL_CATEGORIES 1
 
 void
-cat_stored_values_create (struct variable *v)
+cat_stored_values_create (const struct variable *v)
 {
   if (!var_has_obs_vals (v))
     {
@@ -97,7 +97,7 @@ cat_value_find (const struct variable *v, const union value *val)
    Add the new value unless it is already present.
  */
 void
-cat_value_update (struct variable *v, const union value *val)
+cat_value_update (const struct variable *v, const union value *val)
 {
   if (var_is_alpha (v))
     {
index ca1a286c4d135ad20345fabe11484242bac3d9af..845a46e36231fe4ec62294d888c360f0f5fdee6d 100644 (file)
@@ -52,7 +52,7 @@ struct dictionary
     size_t var_cnt, var_cap;    /* Number of variables, capacity. */
     struct hsh_table *name_tab;        /* Variable index by name. */
     int next_value_idx;         /* Index of next `union value' to allocate. */
-    struct variable **split;    /* SPLIT FILE vars. */
+    const struct variable **split;    /* SPLIT FILE vars. */
     size_t split_cnt;           /* SPLIT FILE count. */
     struct variable *weight;    /* WEIGHT variable. */
     struct variable *filter;    /* FILTER variable. */
@@ -233,13 +233,20 @@ dict_get_var (const struct dictionary *d, size_t idx)
   return d->var[idx];
 }
 
+inline void
+dict_get_vars (const struct dictionary *d, const struct variable ***vars,
+               size_t *cnt, unsigned exclude_classes)
+{
+  dict_get_vars_mutable (d, (struct variable ***) vars, cnt, exclude_classes);
+}
+
 /* Sets *VARS to an array of pointers to variables in D and *CNT
    to the number of variables in *D.  All variables are returned
    if EXCLUDE_CLASSES is 0, or it may contain one or more of (1u
    << DC_ORDINARY), (1u << DC_SYSTEM), or (1u << DC_SCRATCH) to
    exclude the corresponding type of variable. */
 void
-dict_get_vars (const struct dictionary *d, struct variable ***vars,
+dict_get_vars_mutable (const struct dictionary *d, struct variable ***vars,
                size_t *cnt, unsigned exclude_classes)
 {
   size_t count;
@@ -1009,7 +1016,7 @@ dict_compactor_destroy (struct dict_compactor *compactor)
    dict_get_split_cnt() to determine how many SPLIT FILE vars
    there are.  Returns a null pointer if and only if there are no
    SPLIT FILE vars. */
-struct variable *const *
+const struct variable *const *
 dict_get_split_vars (const struct dictionary *d)
 {
   assert (d != NULL);
index 860fdaa6df56f55904f7f6ab0d410df731e4cfb6..29f8d7caa30a7cf858019dad4ec63cc5dcc48afc 100644 (file)
@@ -51,7 +51,10 @@ void dict_destroy (struct dictionary *);
 
 size_t dict_get_var_cnt (const struct dictionary *);
 struct variable *dict_get_var (const struct dictionary *, size_t idx);
-void dict_get_vars (const struct dictionary *,
+inline void dict_get_vars (const struct dictionary *,
+                    const struct variable ***vars, size_t *cnt,
+                    unsigned exclude_classes);
+void dict_get_vars_mutable (const struct dictionary *,
                     struct variable ***vars, size_t *cnt,
                     unsigned exclude_classes);
 
@@ -110,7 +113,7 @@ void dict_compactor_compact (const struct dict_compactor *,
                              struct ccase *, const struct ccase *);
 void dict_compactor_destroy (struct dict_compactor *);
 
-struct variable *const *dict_get_split_vars (const struct dictionary *);
+const struct variable *const *dict_get_split_vars (const struct dictionary *);
 size_t dict_get_split_cnt (const struct dictionary *);
 void dict_set_split_vars (struct dictionary *,
                           struct variable *const *, size_t cnt);
index 266d0c2b7a10fab0cc82e88bb2c67fb7ab336a43..28065cafa111f6b6da32288e6e94f842d8c61a9d 100644 (file)
@@ -867,9 +867,10 @@ var_get_aux (const struct variable *v)
    cleared, AUX_DTOR(V) will be called.  (var_dtor_free, below,
    may be appropriate for use as AUX_DTOR.) */
 void *
-var_attach_aux (struct variable *v,
+var_attach_aux (const struct variable *v_,
                 void *aux, void (*aux_dtor) (struct variable *)) 
 {
+  struct variable *v = (struct variable *) v_ ; /* cast away const  */
   assert (v->aux == NULL);
   assert (aux != NULL);
   v->aux = aux;
@@ -924,8 +925,9 @@ var_get_obs_vals (const struct variable *v)
 
 /* Sets V's observed categorical values to CAT_VALS. */
 void
-var_set_obs_vals (struct variable *v, struct cat_vals *cat_vals) 
+var_set_obs_vals (const struct variable *v_, struct cat_vals *cat_vals) 
 {
+  struct variable *v = (struct variable *) v_ ; /* cast away const */ 
   cat_stored_values_destroy (v->obs_vals);
   v->obs_vals = cat_vals;
 }
index e487ac51185e9dc2d0ddcc41b64bf307f75ea57a..abdc92b13d99d8209cfb13340fbba17fa543c84d 100644 (file)
@@ -155,7 +155,7 @@ size_t var_get_case_index (const struct variable *);
 
 /* Variable auxiliary data. */
 void *var_get_aux (const struct variable *);
-void *var_attach_aux (struct variable *,
+void *var_attach_aux (const struct variable *,
                       void *aux, void (*aux_dtor) (struct variable *));
 void var_clear_aux (struct variable *);
 void *var_detach_aux (struct variable *);
@@ -163,7 +163,7 @@ void var_dtor_free (struct variable *);
 
 /* Observed categorical values. */
 struct cat_vals *var_get_obs_vals (const struct variable *);
-void var_set_obs_vals (struct variable *, struct cat_vals *);
+void var_set_obs_vals (const struct variable *, struct cat_vals *);
 bool var_has_obs_vals (const struct variable *);
 
 /* Classes of variables. */
index 425e8c512031b8645ad6f7d4d80043b7081a5e11..c3b0b176a3e67d4cbb357872af1067d627e0b76f 100644 (file)
@@ -746,7 +746,7 @@ struct mtf_file
     struct mtf_file *next_min; /* Next in the chain of minimums. */
     
     int type;                  /* One of MTF_*. */
-    struct variable **by;      /* List of BY variables for this file. */
+    const struct variable **by;        /* List of BY variables for this file. */
     struct file_handle *handle; /* File handle. */
     struct any_reader *reader;  /* File reader. */
     struct dictionary *dict;   /* Dictionary from system file. */
@@ -943,7 +943,7 @@ cmd_match_files (struct lexer *lexer, struct dataset *ds)
     {
       if (lex_match (lexer, T_BY))
        {
-          struct variable **by;
+          const struct variable **by;
           
          if (mtf.by_cnt)
            {
@@ -952,7 +952,7 @@ cmd_match_files (struct lexer *lexer, struct dataset *ds)
            }
              
          lex_match (lexer, '=');
-         if (!parse_variables (lexer, mtf.dict, &by, &mtf.by_cnt,
+         if (!parse_variables_const (lexer, mtf.dict, &by, &mtf.by_cnt,
                                PV_NO_DUPLICATE | PV_NO_SCRATCH))
            goto error;
 
index d10a49d172592e0580e5015872ac2624c67c44d5..50fe1201f80139d623f9df7013ef58d4296a6b9e 100644 (file)
@@ -311,7 +311,7 @@ write_header (struct outp_driver *d)
       /* Put in vertical names. */
       for (i = x = 0; i < prc->n_vertical; i++)
        {
-         struct variable *v = cmd.v_variables[i];
+         const struct variable *v = cmd.v_variables[i];
           const char *name = var_get_name (v);
           size_t name_len = strlen (name);
           const struct fmt_spec *print = var_get_print_format (v);
@@ -327,7 +327,7 @@ write_header (struct outp_driver *d)
       /* Put in horizontal names. */
       for (; i < cmd.n_variables; i++)
        {
-         struct variable *v = cmd.v_variables[i];
+         const struct variable *v = cmd.v_variables[i];
           const char *name = var_get_name (v);
           size_t name_len = strlen (name);
           const struct fmt_spec *print = var_get_print_format (v);
@@ -550,7 +550,7 @@ determine_layout (void)
       /* Try layout #1. */
       for (width = cmd.n_variables - 1, column = 0; column < cmd.n_variables; column++)
        {
-         struct variable *v = cmd.v_variables[column];
+         const struct variable *v = cmd.v_variables[column];
           int fmt_width = var_get_print_format (v)->w;
           int name_len = strlen (var_get_name (v));
          width += MAX (fmt_width, name_len);
@@ -566,7 +566,7 @@ determine_layout (void)
           column < cmd.n_variables && width <= max_width;
           column++) 
         {
-          struct variable *v = cmd.v_variables[column];
+          const struct variable *v = cmd.v_variables[column];
           int fmt_width = var_get_print_format (v)->w;
           size_t name_len = strlen (var_get_name (v));
           width += fmt_width;
@@ -583,7 +583,7 @@ determine_layout (void)
 #endif
          for (column = cmd.n_variables; column-- != 0; )
            {
-             struct variable *v = cmd.v_variables[column];
+             const struct variable *v = cmd.v_variables[column];
               int name_len = strlen (var_get_name (v));
               int fmt_width = var_get_print_format (v)->w;
              int trial_width = width - fmt_width + MAX (fmt_width, name_len);
@@ -602,7 +602,7 @@ determine_layout (void)
               column < prc->n_vertical;
               column++) 
             {
-              struct variable *var = cmd.v_variables[column];
+              const struct variable *var = cmd.v_variables[column];
               size_t name_len = strlen (var_get_name (var));
               prc->header_rows = MAX (prc->header_rows, name_len); 
             }
@@ -649,7 +649,7 @@ list_cases (const struct ccase *c, void *aux UNUSED, const struct dataset *ds)
       
        for (column = 0; column < cmd.n_variables; column++)
          {
-           struct variable *v = cmd.v_variables[column];
+           const struct variable *v = cmd.v_variables[column];
             const struct fmt_spec *print = var_get_print_format (v);
            int width;
 
@@ -715,7 +715,7 @@ list_cases (const struct ccase *c, void *aux UNUSED, const struct dataset *ds)
        
        for (column = 0; column < cmd.n_variables; column++)
          {
-           struct variable *v = cmd.v_variables[column];
+           const struct variable *v = cmd.v_variables[column];
             const struct fmt_spec *print = var_get_print_format (v);
            char buf[256];
            
index bdc9ff61500656d77c4eb74d0ca8560941d8ba66..f48be0fcfd7cd5909fe92080d90b03985e938ee0 100644 (file)
@@ -62,7 +62,7 @@ struct prt_out_spec
     int first_column;          /* 0-based first column. */
 
     /* PRT_VAR only. */
-    struct variable *var;      /* Associated variable. */
+    const struct variable *var;        /* Associated variable. */
     struct fmt_spec format;    /* Output spec. */
     bool add_space;             /* Add trailing space? */
     bool sysmis_as_spaces;      /* Output SYSMIS as spaces? */
@@ -305,13 +305,13 @@ parse_variable_argument (struct lexer *lexer, const struct dictionary *dict,
                          int *record, int *column,
                          enum which_formats which_formats)
 {
-  struct variable **vars;
+  const struct variable **vars;
   size_t var_cnt, var_idx;
   struct fmt_spec *formats, *f;
   size_t format_cnt;
   bool add_space;
   
-  if (!parse_variables_pool (lexer, tmp_pool, dict, 
+  if (!parse_variables_const_pool (lexer, tmp_pool, dict, 
                             &vars, &var_cnt, PV_DUPLICATE))
     return false;
 
@@ -332,7 +332,7 @@ parse_variable_argument (struct lexer *lexer, const struct dictionary *dict,
       format_cnt = var_cnt;
       for (i = 0; i < var_cnt; i++) 
         {
-          struct variable *v = vars[i];
+          const struct variable *v = vars[i];
           formats[i] = (which_formats == PRINT
                         ? *var_get_print_format (v)
                         : *var_get_write_format (v));
@@ -344,7 +344,7 @@ parse_variable_argument (struct lexer *lexer, const struct dictionary *dict,
   for (f = formats; f < &formats[format_cnt]; f++)
     if (!execute_placement_format (f, record, column))
       {
-        struct variable *var;
+        const struct variable *var;
         struct prt_out_spec *spec;
 
         var = vars[var_idx++];
index b9cbe70d68a2e34f8dbb6905ca52fe9d5bfa3932..bd26a7d1f272bc86551db7259448e7d9892122a6 100644 (file)
@@ -41,7 +41,8 @@ cmd_delete_variables (struct lexer *lexer, struct dataset *ds)
     msg (SE, _("DELETE VARIABLES may not be used after TEMPORARY.  "
                "Temporary transformations will be made permanent."));
 
-  if (!parse_variables (lexer, dataset_dict (ds), &vars, &var_cnt, PV_NONE))
+  if (!parse_variables (lexer, dataset_dict (ds), &vars, &var_cnt, 
+                             PV_NONE))
     goto error;
   if (var_cnt == dict_get_var_cnt (dataset_dict (ds)))
     {
index c1f71538b4109db29eac7d27a0a6adce7d6a491e..f3a18325818dae9c8f2c4c65ae67671c8957ad2d 100644 (file)
@@ -141,7 +141,7 @@ cmd_modify_vars (struct lexer *lexer, struct dataset *ds)
                           "of variables."));
                      goto done;
                    }
-                 dict_get_vars (dataset_dict (ds), &v, &nv, 1u << DC_SYSTEM);
+                 dict_get_vars_mutable (dataset_dict (ds), &v, &nv, 1u << DC_SYSTEM);
                }
              else
                {
@@ -250,7 +250,7 @@ cmd_modify_vars (struct lexer *lexer, struct dataset *ds)
          sort (keep_vars, keep_cnt, sizeof *keep_vars,
                 compare_variables_given_ordering, &forward_positional_ordering);
 
-          dict_get_vars (dataset_dict (ds), &all_vars, &all_cnt, 0);
+          dict_get_vars_mutable (dataset_dict (ds), &all_vars, &all_cnt, 0);
           assert (all_cnt >= keep_cnt);
 
           drop_cnt = all_cnt - keep_cnt;
@@ -408,7 +408,7 @@ validate_var_modification (const struct dictionary *d,
   size_t i;
 
   /* All variables, in index order. */
-  dict_get_vars (d, &all_vars, &all_cnt, 0);
+  dict_get_vars_mutable (d, &all_vars, &all_cnt, 0);
 
   /* Drop variables, in index order. */
   drop_cnt = vm->drop_cnt;
index 0dcf2a4918e13aa4cd7f98b8791a34305fedf8ab..01df29e26bc27f246756c85f880c29993ebe9339 100644 (file)
@@ -69,7 +69,7 @@ void
 output_split_file_values (const struct dataset *ds, const struct ccase *c)
 {
   const struct dictionary *dict = dataset_dict (ds);
-  struct variable *const *split;
+  const struct variable *const *split;
   struct tab_table *t;
   size_t split_cnt;
   int i;
@@ -88,7 +88,7 @@ output_split_file_values (const struct dataset *ds, const struct ccase *c)
   split = dict_get_split_vars (dict);
   for (i = 0; i < split_cnt; i++)
     {
-      struct variable *v = split[i];
+      const struct variable *v = split[i];
       char temp_buf[80];
       const char *val_lab;
       const struct fmt_spec *print = var_get_print_format (v);
index a13dda37d746f5fae28c8c3d44e46fa353461a64..21909a96eccf10fbda05a2e6383bc2094a58ff90 100644 (file)
@@ -62,7 +62,7 @@ enum
     AS_VECTOR
   };
 
-static int describe_variable (struct variable *v, struct tab_table *t, int r, int as);
+static int describe_variable (const struct variable *v, struct tab_table *t, int r, int as);
      
 /* Sets the widths of all the columns and heights of all the rows in
    table T for driver D. */
@@ -193,7 +193,7 @@ cmd_sysfile_info (struct lexer *lexer, struct dataset *ds UNUSED)
 
 static void display_macros (void);
 static void display_documents (const struct dictionary *dict);
-static void display_variables (struct variable **, size_t, int);
+static void display_variables (const struct variable **, size_t, int);
 static void display_vectors (const struct dictionary *dict, int sorted);
 
 int
@@ -204,7 +204,7 @@ cmd_display (struct lexer *lexer, struct dataset *ds)
 
   /* Variables to display. */
   size_t n;
-  struct variable **vl;
+  const struct variable **vl;
 
   if (lex_match_id (lexer, "MACROS"))
     display_macros ();
@@ -258,7 +258,7 @@ cmd_display (struct lexer *lexer, struct dataset *ds)
 
       if (lex_token (lexer) != '.')
        {
-         if (!parse_variables (lexer, dataset_dict (ds), &vl, &n, PV_NONE))
+         if (!parse_variables_const (lexer, dataset_dict (ds), &vl, &n, PV_NONE))
            {
              free (vl);
              return CMD_FAILURE;
@@ -364,9 +364,9 @@ variables_dim (struct tab_table *t, struct outp_driver *d)
 }
   
 static void
-display_variables (struct variable **vl, size_t n, int as)
+display_variables (const struct variable **vl, size_t n, int as)
 {
-  struct variable **vp = vl;           /* Variable pointer. */
+  const struct variable **vp = vl;     /* Variable pointer. */
   struct tab_table *t;
   int nc;                      /* Number of columns. */
   int nr;                      /* Number of rows. */
@@ -404,7 +404,7 @@ display_variables (struct variable **vl, size_t n, int as)
     
   for (i = r = 1; i <= n; i++)
     {
-      struct variable *v;
+      const struct variable *v;
 
       while (*vp == NULL)
        vp++;
@@ -458,7 +458,7 @@ display_variables (struct variable **vl, size_t n, int as)
    The variable will be described in the format AS.  Returns the next
    row available for use in the table. */
 static int 
-describe_variable (struct variable *v, struct tab_table *t, int r, int as)
+describe_variable (const struct variable *v, struct tab_table *t, int r, int as)
 {
   const struct fmt_spec *print = var_get_print_format (v);
   const struct fmt_spec *write = var_get_write_format (v);
index a0d59c2285a9097c525e9397182fef3cbf72342d..a1585a8a906c94e99a7499b5282055541aaef638 100644 (file)
@@ -38,7 +38,7 @@
 /* Declarations. */
 
 static int do_value_labels (struct lexer *, 
-                           const struct dictionary *dict, int);
+                           const struct dictionary *dict, bool);
 static int verify_val_labs (struct variable **vars, size_t var_cnt);
 static void erase_labels (struct variable **vars, size_t var_cnt);
 static int get_label (struct lexer *, struct variable **vars, size_t var_cnt);
@@ -48,19 +48,19 @@ static int get_label (struct lexer *, struct variable **vars, size_t var_cnt);
 int
 cmd_value_labels (struct lexer *lexer, struct dataset *ds)
 {
-  return do_value_labels (lexer, dataset_dict (ds), 1);
+  return do_value_labels (lexer, dataset_dict (ds), true);
 }
 
 int
 cmd_add_value_labels (struct lexer *lexer, struct dataset *ds)
 {
-  return do_value_labels (lexer, dataset_dict (ds), 0);
+  return do_value_labels (lexer, dataset_dict (ds), false);
 }
 \f
 /* Do it. */
 
 static int
-do_value_labels (struct lexer *lexer, const struct dictionary *dict, int erase)
+do_value_labels (struct lexer *lexer, const struct dictionary *dict, bool erase)
 {
   struct variable **vars; /* Variable list. */
   size_t var_cnt;         /* Number of variables. */
@@ -115,7 +115,7 @@ verify_val_labs (struct variable **vars, size_t var_cnt)
 
   for (i = 0; i < var_cnt; i++)
     {
-      struct variable *vp = vars[i];
+      const struct variable *vp = vars[i];
 
       if (var_is_long_string (vp))
        {
index 90d90c676ca553339ff895208b57a2d8969e6511..0425a7adb796f99fe96fefb310c6456ed19e131a 100644 (file)
@@ -247,7 +247,7 @@ emit_format (struct expression *e, const struct fmt_spec *f)
 }
 
 static void
-emit_variable (struct expression *e, struct variable *v) 
+emit_variable (struct expression *e, const struct variable *v) 
 {
   allocate_aux (e, OP_variable)->variable = v;
 }
index 695d3caf6d5b7a13880aa8c9d05447d1586a4ab7..329a740960217979ec1310be133b71c6b34fdd39 100644 (file)
@@ -61,7 +61,7 @@ static struct expression *finish_expression (union any_node *,
 static bool type_check (struct expression *, union any_node **,
                         enum expr_type expected_type);
 static union any_node *allocate_unary_variable (struct expression *,
-                                                struct variable *); 
+                                                const struct variable *); 
 \f
 /* Public functions. */
 
@@ -1219,11 +1219,11 @@ parse_function (struct lexer *lexer, struct expression *e)
         if (lex_token (lexer) == T_ID
             && toupper (lex_look_ahead (lexer)) == 'T')
           {
-            struct variable **vars;
+            const struct variable **vars;
             size_t var_cnt;
             size_t i;
 
-            if (!parse_variables (lexer, dataset_dict (e->ds), &vars, &var_cnt, PV_SINGLE))
+            if (!parse_variables_const (lexer, dataset_dict (e->ds), &vars, &var_cnt, PV_SINGLE))
               goto fail;
             for (i = 0; i < var_cnt; i++)
               add_arg (&args, &arg_cnt, &arg_cap,
@@ -1481,7 +1481,7 @@ expr_allocate_string (struct expression *e, struct substring s)
 }
 
 union any_node *
-expr_allocate_variable (struct expression *e, struct variable *v)
+expr_allocate_variable (struct expression *e, const struct variable *v)
 {
   union any_node *n = pool_alloc (e->expr_pool, sizeof n->variable);
   n->type = var_is_numeric (v) ? OP_num_var : OP_str_var;
@@ -1501,7 +1501,7 @@ expr_allocate_format (struct expression *e, const struct fmt_spec *format)
 /* Allocates a unary composite node that represents the value of
    variable V in expression E. */
 static union any_node *
-allocate_unary_variable (struct expression *e, struct variable *v) 
+allocate_unary_variable (struct expression *e, const struct variable *v) 
 {
   assert (v != NULL);
   return expr_allocate_unary (e, var_is_numeric (v) ? OP_NUM_VAR : OP_STR_VAR,
index 6173b4f481029de9e36006c470eca47bcb88a035..48cece73f658328c2de7f3b7532c3844564b20c6 100644 (file)
@@ -100,7 +100,7 @@ struct string_node
 struct variable_node
   {
     operation_type type;   /* OP_variable. */
-    struct variable *v;
+    const struct variable *v;
   };
 
 struct integer_node
@@ -148,7 +148,7 @@ union operation_data
     operation_type operation;
     double number;
     struct substring string;
-    struct variable *variable;
+    const struct variable *variable;
     const struct vector *vector;
     struct fmt_spec *format;
     int integer;
@@ -194,7 +194,7 @@ union any_node *expr_allocate_string_buffer (struct expression *e,
 union any_node *expr_allocate_string (struct expression *e,
                                       struct substring);
 union any_node *expr_allocate_variable (struct expression *e,
-                                        struct variable *);
+                                        const struct variable *);
 union any_node *expr_allocate_format (struct expression *e,
                                  const struct fmt_spec *);
 union any_node *expr_allocate_vector (struct expression *e,
index f187d2427faa283eef324a2c3ba09159468b0e54..90357ebf958dbdc9cc2a74753f43b6b42f4df086 100644 (file)
@@ -1134,12 +1134,12 @@ dump_declarations (void)
          case SBC_VARLIST:
            dump (0, "size_t %sn_%s;", st_lower (sbc->prefix),
                  st_lower (sbc->name));
-           dump (0, "struct variable **%sv_%s;", st_lower (sbc->prefix),
+           dump (0, "const struct variable **%sv_%s;", st_lower (sbc->prefix),
                  st_lower (sbc->name));
            break;
 
          case SBC_VAR:
-           dump (0, "struct variable *%sv_%s;", st_lower (sbc->prefix),
+           dump (0, "const struct variable *%sv_%s;", st_lower (sbc->prefix),
                  st_lower (sbc->name));
            break;
 
@@ -1597,7 +1597,7 @@ dump_subcommand (const subcommand *sbc)
     }
   else if (sbc->type == SBC_VARLIST)
     {
-      dump (1, "if (!parse_variables (lexer, dataset_dict (ds), &p->%sv_%s, &p->%sn_%s, "
+      dump (1, "if (!parse_variables_const (lexer, dataset_dict (ds), &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),
@@ -1765,7 +1765,7 @@ dump_parser (int persistent)
        }
       dump (1, "{");
       dump (0, "p->sbc_%s++;", st_lower (def->name));
-      dump (1, "if (!parse_variables (lexer, dataset_dict (ds), &p->%sv_%s, &p->%sn_%s, "
+      dump (1, "if (!parse_variables_const (lexer, dataset_dict (ds), &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 731873dca11b060ab353b10dbeb2f77ae5d64fca..26b2e1bfd2537d3fff65978a93e1458a09492a30 100644 (file)
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 
+static struct variable * var_set_get_var (const struct var_set *, size_t );
+
+static struct variable *var_set_lookup_var (const struct var_set *,
+                                           const char *);
+
+static bool var_set_lookup_var_idx (const struct var_set *, const char *,
+                                   size_t *);
+
+
+
 /* Parses a name as a variable within VS.  Sets *IDX to the
    variable's index and returns true if successful.  On failure
    emits an error message and returns false. */
 static bool
-parse_vs_variable_idx (struct lexer *lexer, const struct var_set *vs, 
+parse_vs_variable_idx (struct lexer *lexer, const struct var_set *vs,
                size_t *idx)
 {
   assert (idx != NULL);
-  
+
   if (lex_token (lexer) != T_ID)
     {
       lex_error (lexer, _("expecting variable name"));
       return false;
     }
-  else if (var_set_lookup_var_idx (vs, lex_tokid (lexer), idx)) 
+  else if (var_set_lookup_var_idx (vs, lex_tokid (lexer), idx))
     {
       lex_get (lexer);
       return true;
     }
-  else 
+  else
     {
       msg (SE, _("%s is not a variable name."), lex_tokid (lexer));
       return false;
@@ -80,7 +90,7 @@ parse_vs_variable (struct lexer *lexer, const struct var_set *vs)
    variable if successful.  On failure emits an error message and
    returns a null pointer. */
 struct variable *
-parse_variable (struct lexer *lexer, const struct dictionary *d) 
+parse_variable (struct lexer *lexer, const struct dictionary *d)
 {
   struct var_set *vs = var_set_create_from_dict (d);
   struct variable *var = parse_vs_variable (lexer, vs);
@@ -93,9 +103,9 @@ parse_variable (struct lexer *lexer, const struct dictionary *d)
    number of variables into *CNT.  Returns true only if
    successful. */
 bool
-parse_variables (struct lexer *lexer, const struct dictionary *d, 
+parse_variables (struct lexer *lexer, const struct dictionary *d,
                        struct variable ***var,
-                       size_t *cnt, int opts) 
+                       size_t *cnt, int opts)
 {
   struct var_set *vs;
   int success;
@@ -106,7 +116,7 @@ parse_variables (struct lexer *lexer, const struct dictionary *d,
 
   vs = var_set_create_from_dict (d);
   success = parse_var_set_vars (lexer, vs, var, cnt, opts);
-  if ( success == 0 ) 
+  if ( success == 0 )
     {
       free ( *var ) ;
       *var = NULL;
@@ -122,9 +132,9 @@ parse_variables (struct lexer *lexer, const struct dictionary *d,
    successful.  Same behavior as parse_variables, except that all
    allocations are taken from the given POOL. */
 bool
-parse_variables_pool (struct lexer *lexer, struct pool *pool, 
+parse_variables_pool (struct lexer *lexer, struct pool *pool,
                const struct dictionary *dict,
-               struct variable ***vars, size_t *var_cnt, int opts) 
+               struct variable ***vars, size_t *var_cnt, int opts)
 {
   int retval;
 
@@ -133,7 +143,7 @@ parse_variables_pool (struct lexer *lexer, struct pool *pool,
      already in the pool, which would attempt to re-free it
      later. */
   assert (!(opts & PV_APPEND));
-  
+
   retval = parse_variables (lexer, dict, vars, var_cnt, opts);
   if (retval)
     pool_register (pool, free, *vars);
@@ -145,7 +155,7 @@ parse_variables_pool (struct lexer *lexer, struct pool *pool,
    dictionary class, and returns true.  Returns false on
    failure. */
 static bool
-parse_var_idx_class (struct lexer *lexer, const struct var_set *vs, 
+parse_var_idx_class (struct lexer *lexer, const struct var_set *vs,
                        size_t *idx,
                        enum dict_class *class)
 {
@@ -169,10 +179,10 @@ add_variable (struct variable ***v, size_t *nv, size_t *mv,
   struct variable *add = var_set_get_var (vs, idx);
   const char *add_name = var_get_name (add);
 
-  if ((pv_opts & PV_NUMERIC) && !var_is_numeric (add)) 
+  if ((pv_opts & PV_NUMERIC) && !var_is_numeric (add))
     msg (SW, _("%s is not a numeric variable.  It will not be "
                "included in the variable list."), add_name);
-  else if ((pv_opts & PV_STRING) && !var_is_alpha (add)) 
+  else if ((pv_opts & PV_STRING) && !var_is_alpha (add))
     msg (SE, _("%s is not a string variable.  It will not be "
                "included in the variable list."), add_name);
   else if ((pv_opts & PV_NO_SCRATCH)
@@ -180,7 +190,7 @@ add_variable (struct variable ***v, size_t *nv, size_t *mv,
     msg (SE, _("Scratch variables (such as %s) are not allowed "
                "here."), add_name);
   else if ((pv_opts & (PV_SAME_TYPE | PV_SAME_WIDTH)) && *nv
-           && var_get_type (add) != var_get_type ((*v)[0])) 
+           && var_get_type (add) != var_get_type ((*v)[0]))
     msg (SE, _("%s and %s are not the same type.  All variables in "
                "this variable list must be of the same type.  %s "
                "will be omitted from the list."),
@@ -191,7 +201,7 @@ add_variable (struct variable ***v, size_t *nv, size_t *mv,
                "All variables in this variable list must have the "
                "same width.  %s will be omttied from the list."),
          var_get_name ((*v)[0]), add_name, add_name);
-  else if ((pv_opts & PV_NO_DUPLICATE) && included[idx]) 
+  else if ((pv_opts & PV_NO_DUPLICATE) && included[idx])
     msg (SE, _("Variable %s appears twice in variable list."), add_name);
   else if ((pv_opts & PV_DUPLICATE) || !included[idx])
     {
@@ -215,10 +225,10 @@ static void
 add_variables (struct variable ***v, size_t *nv, size_t *mv, char *included,
                int pv_opts,
                const struct var_set *vs, int first_idx, int last_idx,
-               enum dict_class class) 
+               enum dict_class class)
 {
   size_t i;
-  
+
   for (i = first_idx; i <= last_idx; i++)
     if (dict_class_from_id (var_get_name (var_set_get_var (vs, i))) == class)
       add_variable (v, nv, mv, included, pv_opts, vs, i);
@@ -228,7 +238,7 @@ add_variables (struct variable ***v, size_t *nv, size_t *mv, char *included,
    Conversely, if parse_variables() returns true, then *nv is
    nonzero and *v is non-NULL. */
 bool
-parse_var_set_vars (struct lexer *lexer, const struct var_set *vs, 
+parse_var_set_vars (struct lexer *lexer, const struct var_set *vs,
                     struct variable ***v, size_t *nv,
                     int pv_opts)
 {
@@ -261,14 +271,14 @@ parse_var_set_vars (struct lexer *lexer, const struct var_set *vs,
   if (!(pv_opts & PV_DUPLICATE))
     {
       size_t i;
-      
+
       included = xcalloc (var_set_get_cnt (vs), sizeof *included);
-      for (i = 0; i < *nv; i++) 
+      for (i = 0; i < *nv; i++)
         {
           size_t index;
           if (!var_set_lookup_var_idx (vs, var_get_name ((*v)[i]), &index))
             NOT_REACHED ();
-          included[index] = 1; 
+          included[index] = 1;
         }
     }
   else
@@ -279,7 +289,7 @@ parse_var_set_vars (struct lexer *lexer, const struct var_set *vs,
       if (lex_match (lexer, T_ALL))
         add_variables (v, nv, &mv, included, pv_opts,
                        vs, 0, var_set_get_cnt (vs) - 1, DC_ORDINARY);
-      else 
+      else
         {
           enum dict_class class;
           size_t first_idx;
@@ -289,7 +299,7 @@ parse_var_set_vars (struct lexer *lexer, const struct var_set *vs,
 
           if (!lex_match (lexer, T_TO))
             add_variable (v, nv, &mv, included, pv_opts, vs, first_idx);
-          else 
+          else
             {
               size_t last_idx;
               enum dict_class last_class;
@@ -326,7 +336,7 @@ parse_var_set_vars (struct lexer *lexer, const struct var_set *vs,
 
               add_variables (v, nv, &mv, included, pv_opts,
                              vs, first_idx, last_idx, class);
-            } 
+            }
         }
 
       if (pv_opts & PV_SINGLE)
@@ -335,7 +345,7 @@ parse_var_set_vars (struct lexer *lexer, const struct var_set *vs,
     }
   while (lex_token (lexer) == T_ALL
          || (lex_token (lexer) == T_ID && var_set_lookup_var (vs, lex_tokid (lexer)) != NULL));
-  
+
   if (*nv == 0)
     goto fail;
 
@@ -536,7 +546,7 @@ parse_DATA_LIST_vars_pool (struct lexer *lexer, struct pool *pool,
      presumably already in the pool, which would attempt to
      re-free it later. */
   assert (!(pv_opts & PV_APPEND));
-  
+
   retval = parse_DATA_LIST_vars (lexer, names, nnames, pv_opts);
   if (retval)
     register_vars_pool (pool, *names, *nnames);
@@ -547,7 +557,7 @@ parse_DATA_LIST_vars_pool (struct lexer *lexer, struct pool *pool,
    existing and the rest are to be created.  Same args as
    parse_DATA_LIST_vars(). */
 bool
-parse_mixed_vars (struct lexer *lexer, const struct dictionary *dict, 
+parse_mixed_vars (struct lexer *lexer, const struct dictionary *dict,
                  char ***names, size_t *nnames, int pv_opts)
 {
   size_t i;
@@ -613,7 +623,7 @@ parse_mixed_vars_pool (struct lexer *lexer, const struct dictionary *dict, struc
 }
 \f
 /* A set of variables. */
-struct var_set 
+struct var_set
   {
     size_t (*get_cnt) (const struct var_set *);
     struct variable *(*get_var) (const struct var_set *, size_t idx);
@@ -624,7 +634,7 @@ struct var_set
 
 /* Returns the number of variables in VS. */
 size_t
-var_set_get_cnt (const struct var_set *vs) 
+var_set_get_cnt (const struct var_set *vs)
 {
   assert (vs != NULL);
 
@@ -633,8 +643,8 @@ var_set_get_cnt (const struct var_set *vs)
 
 /* Return variable with index IDX in VS.
    IDX must be less than the number of variables in VS. */
-struct variable *
-var_set_get_var (const struct var_set *vs, size_t idx) 
+static struct variable *
+var_set_get_var (const struct var_set *vs, size_t idx)
 {
   assert (vs != NULL);
   assert (idx < var_set_get_cnt (vs));
@@ -645,7 +655,7 @@ var_set_get_var (const struct var_set *vs, size_t idx)
 /* Returns the variable in VS named NAME, or a null pointer if VS
    contains no variable with that name. */
 struct variable *
-var_set_lookup_var (const struct var_set *vs, const char *name) 
+var_set_lookup_var (const struct var_set *vs, const char *name)
 {
   size_t idx;
   return (var_set_lookup_var_idx (vs, name, &idx)
@@ -668,7 +678,7 @@ var_set_lookup_var_idx (const struct var_set *vs, const char *name,
 
 /* Destroys VS. */
 void
-var_set_destroy (struct var_set *vs) 
+var_set_destroy (struct var_set *vs)
 {
   if (vs != NULL)
     vs->destroy (vs);
@@ -676,7 +686,7 @@ var_set_destroy (struct var_set *vs)
 \f
 /* Returns the number of variables in VS. */
 static size_t
-dict_var_set_get_cnt (const struct var_set *vs) 
+dict_var_set_get_cnt (const struct var_set *vs)
 {
   struct dictionary *d = vs->aux;
 
@@ -686,7 +696,7 @@ dict_var_set_get_cnt (const struct var_set *vs)
 /* Return variable with index IDX in VS.
    IDX must be less than the number of variables in VS. */
 static struct variable *
-dict_var_set_get_var (const struct var_set *vs, size_t idx) 
+dict_var_set_get_var (const struct var_set *vs, size_t idx)
 {
   struct dictionary *d = vs->aux;
 
@@ -697,11 +707,11 @@ dict_var_set_get_var (const struct var_set *vs, size_t idx)
    and returns true.  Otherwise, returns false. */
 static bool
 dict_var_set_lookup_var_idx (const struct var_set *vs, const char *name,
-                             size_t *idx) 
+                             size_t *idx)
 {
   struct dictionary *d = vs->aux;
   struct variable *v = dict_lookup_var (d, name);
-  if (v != NULL) 
+  if (v != NULL)
     {
       *idx = var_get_dict_index (v);
       return true;
@@ -712,14 +722,14 @@ dict_var_set_lookup_var_idx (const struct var_set *vs, const char *name,
 
 /* Destroys VS. */
 static void
-dict_var_set_destroy (struct var_set *vs) 
+dict_var_set_destroy (struct var_set *vs)
 {
   free (vs);
 }
 
 /* Returns a variable set based on D. */
 struct var_set *
-var_set_create_from_dict (const struct dictionary *d) 
+var_set_create_from_dict (const struct dictionary *d)
 {
   struct var_set *vs = xmalloc (sizeof *vs);
   vs->get_cnt = dict_var_set_get_cnt;
@@ -731,7 +741,7 @@ var_set_create_from_dict (const struct dictionary *d)
 }
 \f
 /* A variable set based on an array. */
-struct array_var_set 
+struct array_var_set
   {
     struct variable *const *var;/* Array of variables. */
     size_t var_cnt;             /* Number of elements in var. */
@@ -740,7 +750,7 @@ struct array_var_set
 
 /* Returns the number of variables in VS. */
 static size_t
-array_var_set_get_cnt (const struct var_set *vs) 
+array_var_set_get_cnt (const struct var_set *vs)
 {
   struct array_var_set *avs = vs->aux;
 
@@ -750,7 +760,7 @@ array_var_set_get_cnt (const struct var_set *vs)
 /* Return variable with index IDX in VS.
    IDX must be less than the number of variables in VS. */
 static struct variable *
-array_var_set_get_var (const struct var_set *vs, size_t idx) 
+array_var_set_get_var (const struct var_set *vs, size_t idx)
 {
   struct array_var_set *avs = vs->aux;
 
@@ -761,7 +771,7 @@ array_var_set_get_var (const struct var_set *vs, size_t idx)
    and returns true.  Otherwise, returns false. */
 static bool
 array_var_set_lookup_var_idx (const struct var_set *vs, const char *name,
-                              size_t *idx) 
+                              size_t *idx)
 {
   struct array_var_set *avs = vs->aux;
   struct variable *v, *const *vpp;
@@ -769,8 +779,8 @@ array_var_set_lookup_var_idx (const struct var_set *vs, const char *name,
   v = var_create (name, 0);
   vpp = hsh_find (avs->name_tab, &v);
   var_destroy (v);
-  
-  if (vpp != NULL) 
+
+  if (vpp != NULL)
     {
       *idx = vpp - avs->var;
       return true;
@@ -781,7 +791,7 @@ array_var_set_lookup_var_idx (const struct var_set *vs, const char *name,
 
 /* Destroys VS. */
 static void
-array_var_set_destroy (struct var_set *vs) 
+array_var_set_destroy (struct var_set *vs)
 {
   struct array_var_set *avs = vs->aux;
 
@@ -793,7 +803,7 @@ array_var_set_destroy (struct var_set *vs)
 /* Returns a variable set based on the VAR_CNT variables in
    VAR. */
 struct var_set *
-var_set_create_from_array (struct variable *const *var, size_t var_cnt) 
+var_set_create_from_array (struct variable *const *var, size_t var_cnt)
 {
   struct var_set *vs;
   struct array_var_set *avs;
@@ -811,11 +821,12 @@ var_set_create_from_array (struct variable *const *var, size_t var_cnt)
                               compare_var_ptrs_by_name, hash_var_ptr_by_name,
                               NULL, NULL);
   for (i = 0; i < var_cnt; i++)
-    if (hsh_insert (avs->name_tab, (void *) &var[i]) != NULL) 
+    if (hsh_insert (avs->name_tab, (void *) &var[i]) != NULL)
       {
         var_set_destroy (vs);
         return NULL;
       }
-  
+
   return vs;
 }
+
index 409aea9537b6c1848368fc65b4efa98a68027a60..08c9902d8c591da7a9cd8969263156ab2c86c193 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - computes sample statistics.
-   Copyright (C) 1997-9, 2000, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2006, 2007 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -25,6 +25,7 @@
 struct pool;
 struct dictionary;
 struct var_set;
+struct const_var_set;
 struct variable;
 struct lexer ;
 
@@ -33,12 +34,9 @@ struct var_set *var_set_create_from_array (struct variable *const *var,
                                            size_t);
 
 size_t var_set_get_cnt (const struct var_set *vs);
-struct variable *var_set_get_var (const struct var_set *vs, size_t idx);
-struct variable *var_set_lookup_var (const struct var_set *vs,
-                                     const char *name);
-bool var_set_lookup_var_idx (const struct var_set *vs, const char *name,
-                             size_t *idx);
+
 void var_set_destroy (struct var_set *vs);
+
 \f
 /* Variable parsers. */
 
@@ -72,4 +70,60 @@ bool parse_mixed_vars_pool (struct lexer *, const struct dictionary *dict,
                            struct pool *,
                            char ***names, size_t *cnt, int opts);
 
+
+/* Const wrappers */
+
+static inline const struct variable *
+parse_variable_const (struct lexer *l, const struct dictionary *d)
+{
+  return parse_variable (l, d);
+}
+
+static inline bool
+parse_variables_const (struct lexer *l, const struct dictionary *d,
+                      const struct variable ***v, size_t *s,
+                      int opts)
+{
+  return parse_variables (l, d, (struct variable ***) v, s, opts);
+}
+
+static inline bool
+parse_variables_const_pool (struct lexer *l, struct pool *p,
+                           const struct dictionary *d,
+                           const struct variable ***v, size_t *s, int opts)
+{
+  return parse_variables_pool (l, p, d, (struct variable ***) v, s, opts);
+}
+
+
+
+static inline struct const_var_set *
+const_var_set_create_from_dict (const struct dictionary *d)
+{
+  return (struct const_var_set *) var_set_create_from_dict (d);
+}
+
+static inline struct const_var_set *
+const_var_set_create_from_array (const struct variable *const *var,
+                                size_t s)
+{
+  return (struct const_var_set *) var_set_create_from_array ((struct variable *const *) var, s);
+}
+
+
+static inline bool
+parse_const_var_set_vars (struct lexer *l, const struct const_var_set *vs,
+                         const struct variable ***v, size_t *s, int opts)
+{
+  return parse_var_set_vars (l, (const struct var_set *) vs,
+                            (struct variable ***) v, s, opts);
+}
+
+static inline void
+const_var_set_destroy (struct const_var_set *vs)
+{
+  var_set_destroy ( (struct var_set *) vs);
+}
+
+
 #endif /* variable-parser.h */
index 57dce0800e7e160da4de0ce8023f8b4ecb72a61b..044297462c982a2d395a6ef66c9d26780015163d 100644 (file)
@@ -64,7 +64,7 @@ struct agr_var
     struct agr_var *next;              /* Next in list. */
 
     /* Collected during parsing. */
-    struct variable *src;      /* Source variable. */
+    const struct variable *src;        /* Source variable. */
     struct variable *dest;     /* Target variable. */
     int function;              /* Function. */
     enum mv_class exclude;      /* Classes of missing values to exclude. */
@@ -141,7 +141,7 @@ struct agr_proc
 
     /* Break variables. */
     struct sort_criteria *sort;         /* Sort criteria. */
-    struct variable **break_vars;       /* Break variables. */
+    const struct variable **break_vars;       /* Break variables. */
     size_t break_var_cnt;               /* Number of break variables. */
     struct ccase break_case;            /* Last values of break variables. */
 
@@ -396,7 +396,7 @@ parse_aggregate_functions (struct lexer *lexer, const struct dictionary *dict, s
 
       union agr_argument arg[2];
 
-      struct variable **src;
+      const struct variable **src;
       size_t n_src;
 
       size_t i;
@@ -496,7 +496,7 @@ parse_aggregate_functions (struct lexer *lexer, const struct dictionary *dict, s
            else if (function->n_args)
              pv_opts |= PV_SAME_TYPE;
 
-           if (!parse_variables (lexer, dict, &src, &n_src, pv_opts))
+           if (!parse_variables_const (lexer, dict, &src, &n_src, pv_opts))
              goto error;
          }
 
@@ -959,7 +959,7 @@ dump_aggregate_info (struct agr_proc *agr, struct ccase *output)
 
     for (i = 0; i < agr->break_var_cnt; i++) 
       {
-        struct variable *v = agr->break_vars[i];
+        const struct variable *v = agr->break_vars[i];
         size_t value_cnt = var_get_value_cnt (v);
         memcpy (case_data_rw_idx (output, value_idx),
                 case_data (&agr->break_case, v),
index a84528af3c1b97fd7e9c8d3a0cc8763e606388cc..2944f91218fc07f315fa7c1a6fb5537fbecb1091 100644 (file)
@@ -57,7 +57,7 @@ struct arc_item
 /* Explains how to recode an AUTORECODE variable. */
 struct arc_spec
   {
-    struct variable *src;      /* Source variable. */
+    const struct variable *src;        /* Source variable. */
     struct variable *dest;     /* Target variable. */
     struct hsh_table *items;   /* Hash table of `freq's. */
   };
@@ -80,7 +80,7 @@ enum direction
 /* AUTORECODE data. */
 struct autorecode_pgm 
   {
-    struct variable **src_vars;    /* Source variables. */
+    const struct variable **src_vars;    /* Source variables. */
     char **dst_names;              /* Target variable names. */
     struct variable **dst_vars;    /* Target variables. */
     struct hsh_table **src_values; /* `union arc_value's of source vars. */
@@ -120,7 +120,8 @@ cmd_autorecode (struct lexer *lexer, struct dataset *ds)
 
   lex_match_id (lexer, "VARIABLES");
   lex_match (lexer, '=');
-  if (!parse_variables (lexer, dataset_dict (ds), &arc.src_vars, &arc.var_cnt,
+  if (!parse_variables_const (lexer, dataset_dict (ds), &arc.src_vars, 
+                             &arc.var_cnt,
                         PV_NO_DUPLICATE))
     goto lossage;
   if (!lex_force_match_id (lexer, "INTO"))
@@ -177,12 +178,15 @@ cmd_autorecode (struct lexer *lexer, struct dataset *ds)
   arc.dst_vars = xnmalloc (arc.var_cnt, sizeof *arc.dst_vars);
   arc.src_values = xnmalloc (arc.var_cnt, sizeof *arc.src_values);
   for (i = 0; i < dst_cnt; i++)
+    {
+       /* FIXME: consolodate this hsh_create */
     if (var_is_alpha (arc.src_vars[i]))
       arc.src_values[i] = hsh_create (10, compare_alpha_value,
                                       hash_alpha_value, NULL, arc.src_vars[i]);
     else
       arc.src_values[i] = hsh_create (10, compare_numeric_value,
                                       hash_numeric_value, NULL, NULL);
+   }
 
   proc_open (ds);
   while (proc_read (ds, &c))
index 1cdc247f74550555188996cee08f4c064166a15f..2a1b22ddfb2edfbfed0f6246eef43e2bd27e8fce 100644 (file)
@@ -36,7 +36,7 @@
 struct cor_set
   {
     struct cor_set *next;
-    struct variable **v1, **v2;
+    const struct variable **v1, **v2;
     size_t nv1, nv2;
   };
 
@@ -88,7 +88,7 @@ internal_cmd_correlations (struct lexer *lexer, struct dataset *ds)
 static int
 cor_custom_variables (struct lexer *lexer, struct dataset *ds, struct cmd_correlations *cmd UNUSED, void *aux UNUSED)
 {
-  struct variable **v1, **v2;
+  const struct variable **v1, **v2;
   size_t nv1, nv2;
   struct cor_set *cor;
 
@@ -99,13 +99,13 @@ cor_custom_variables (struct lexer *lexer, struct dataset *ds, struct cmd_correl
     return 2;
   lex_match (lexer, '=');
 
-  if (!parse_variables (lexer, dataset_dict (ds), &v1, &nv1,
+  if (!parse_variables_const (lexer, dataset_dict (ds), &v1, &nv1,
                        PV_NO_DUPLICATE | PV_NUMERIC))
     return 0;
   
   if (lex_match (lexer, T_WITH))
     {
-      if (!parse_variables (lexer, dataset_dict (ds), &v2, &nv2,
+      if (!parse_variables_const (lexer, dataset_dict (ds), &v2, &nv2,
                            PV_NO_DUPLICATE | PV_NUMERIC))
        {
          free (v1);
index 4d8a2b7bdd6fdfb29d3cd8622cf64a8943f17929..e54fa2d7a26d441bfd60dbde29e8145de469ff27 100644 (file)
@@ -116,7 +116,7 @@ struct crosstab
     int nvar;                  /* Number of variables. */
     double missing;            /* Missing cases count. */
     int ofs;                   /* Integer mode: Offset into sorted_tab[]. */
-    struct variable *vars[2];  /* At least two variables; sorted by
+    const struct variable *vars[2];    /* At least two variables; sorted by
                                   larger indices first. */
   };
 
@@ -129,7 +129,7 @@ struct var_range
   };
 
 static inline struct var_range *
-get_var_range (struct variable *v) 
+get_var_range (const struct variable *v) 
 {
   return var_get_aux (v);
 }
@@ -147,7 +147,7 @@ static int n_sorted_tab;            /* Number of entries in sorted_tab. */
 static struct table_entry **sorted_tab;        /* Sorted table. */
 
 /* Variables specifies on VARIABLES. */
-static struct variable **variables;
+static const struct variable **variables;
 static size_t variables_cnt;
 
 /* TABLES. */
@@ -305,31 +305,32 @@ internal_cmd_crosstabs (struct lexer *lexer, struct dataset *ds)
 static int
 crs_custom_tables (struct lexer *lexer, struct dataset *ds, struct cmd_crosstabs *cmd UNUSED, void *aux UNUSED)
 {
-  struct var_set *var_set;
+  struct const_var_set *var_set;
   int n_by;
-  struct variable ***by = NULL;
+  const struct variable ***by = NULL;
   size_t *by_nvar = NULL;
   size_t nx = 1;
   int success = 0;
 
   /* Ensure that this is a TABLES subcommand. */
   if (!lex_match_id (lexer, "TABLES")
-      && (lex_token (lexer) != T_ID || dict_lookup_var (dataset_dict (ds), lex_tokid (lexer)) == NULL)
+      && (lex_token (lexer) != T_ID || 
+         dict_lookup_var (dataset_dict (ds), lex_tokid (lexer)) == NULL)
       && lex_token (lexer) != T_ALL)
     return 2;
   lex_match (lexer, '=');
 
   if (variables != NULL)
-    var_set = var_set_create_from_array (variables, variables_cnt);
+    var_set = const_var_set_create_from_array (variables, variables_cnt);
   else
-    var_set = var_set_create_from_dict (dataset_dict (ds));
+    var_set = const_var_set_create_from_dict (dataset_dict (ds));
   assert (var_set != NULL);
   
   for (n_by = 0; ;)
     {
       by = xnrealloc (by, n_by + 1, sizeof *by);
       by_nvar = xnrealloc (by_nvar, n_by + 1, sizeof *by_nvar);
-      if (!parse_var_set_vars (lexer, var_set, &by[n_by], &by_nvar[n_by],
+      if (!parse_const_var_set_vars (lexer, var_set, &by[n_by], &by_nvar[n_by],
                                PV_NO_DUPLICATE | PV_NO_SCRATCH))
        goto done;
       if (xalloc_oversized (nx, by_nvar[n_by])) 
@@ -400,7 +401,7 @@ crs_custom_tables (struct lexer *lexer, struct dataset *ds, struct cmd_crosstabs
     free (by_nvar);
   }
 
-  var_set_destroy (var_set);
+  const_var_set_destroy (var_set);
 
   return success;
 }
@@ -424,7 +425,7 @@ crs_custom_variables (struct lexer *lexer, struct dataset *ds, struct cmd_crosst
 
       long min, max;
       
-      if (!parse_variables (lexer, dataset_dict (ds), 
+      if (!parse_variables_const (lexer, dataset_dict (ds), 
                            &variables, &variables_cnt,
                            (PV_APPEND | PV_NUMERIC
                             | PV_NO_DUPLICATE | PV_NO_SCRATCH)))
@@ -660,7 +661,7 @@ calc_integer (const struct ccase *c, void *aux UNUSED, const struct dataset *ds)
       ofs = x->ofs;
       for (i = 0; i < x->nvar; i++)
        {
-         struct variable *const v = x->vars[i];
+         const struct variable *const v = x->vars[i];
           struct var_range *vr = get_var_range (v);
          double value = case_num (c, v);
          
@@ -681,10 +682,10 @@ calc_integer (const struct ccase *c, void *aux UNUSED, const struct dataset *ds)
        }
       
       {
-        struct variable *row_var = x->vars[ROW_VAR];
+        const struct variable *row_var = x->vars[ROW_VAR];
        const int row = case_num (c, row_var) - get_var_range (row_var)->min;
 
-        struct variable *col_var = x->vars[COL_VAR];
+        const struct variable *col_var = x->vars[COL_VAR];
        const int col = case_num (c, col_var) - get_var_range (col_var)->min;
 
        const int col_dim = get_var_range (col_var)->count;
@@ -1633,7 +1634,7 @@ static void
 enum_var_values (struct table_entry **entries, int entry_cnt, int var_idx,
                  union value **values, int *value_cnt)
 {
-  struct variable *v = xtab[(*entries)->table]->vars[var_idx];
+  const struct variable *v = xtab[(*entries)->table]->vars[var_idx];
 
   if (mode == GENERAL)
     {
index edfcca08e4a1f8d4989bb6a7930b1662796af053..8b06aa521208967a1f70a313515b300e77e01169 100644 (file)
@@ -63,7 +63,7 @@ enum dsc_missing_type
    calculating a Z-score. */
 struct dsc_z_score
   {
-    struct variable *src_var;   /* Variable on which z-score is based. */
+    const struct variable *src_var;   /* Variable on which z-score is based. */
     struct variable *z_var;     /* New z-score variable. */
     double mean;               /* Distribution mean. */
     double std_dev;            /* Distribution standard deviation. */
@@ -74,7 +74,7 @@ struct dsc_trns
   {
     struct dsc_z_score *z_scores; /* Array of Z-scores. */
     int z_score_cnt;            /* Number of Z-scores. */
-    struct variable **vars;     /* Variables for listwise missing checks. */
+    const struct variable **vars;     /* Variables for listwise missing checks. */
     size_t var_cnt;             /* Number of variables. */
     enum dsc_missing_type missing_type; /* Treatment of missing values. */
     enum mv_class exclude;      /* Classes of missing values to exclude. */
@@ -126,7 +126,7 @@ static const struct dsc_statistic_info dsc_info[DSC_N_STATS] =
 /* A variable specified on DESCRIPTIVES. */
 struct dsc_var
   {
-    struct variable *v;         /* Variable to calculate on. */
+    const struct variable *v;         /* Variable to calculate on. */
     char z_name[LONG_NAME_LEN + 1]; /* Name for z-score variable. */
     double valid, missing;     /* Valid, missing counts. */
     struct moments *moments;    /* Moments. */
@@ -193,7 +193,7 @@ cmd_descriptives (struct lexer *lexer, struct dataset *ds)
 {
   struct dictionary *dict = dataset_dict (ds);
   struct dsc_proc *dsc;
-  struct variable **vars = NULL;
+  const struct variable **vars = NULL;
   size_t var_cnt = 0;
   int save_z_scores = 0;
   int z_cnt = 0;
@@ -316,11 +316,12 @@ cmd_descriptives (struct lexer *lexer, struct dataset *ds)
             {
               int i;
               
-              if (!parse_variables (lexer, dataset_dict (ds), &vars, &var_cnt,
+              if (!parse_variables_const (lexer, dataset_dict (ds), 
+                                         &vars, &var_cnt,
                                     PV_APPEND | PV_NO_DUPLICATE | PV_NUMERIC))
                goto error;
 
-              dsc->vars = xnrealloc (dsc->vars, var_cnt, sizeof *dsc->vars);
+              dsc->vars = xnrealloc ((void *)dsc->vars, var_cnt, sizeof *dsc->vars);
               for (i = dsc->var_cnt; i < var_cnt; i++)
                 {
                   struct dsc_var *dv = &dsc->vars[i];
@@ -586,7 +587,7 @@ descriptives_trns_proc (void *trns_, struct ccase * c,
 {
   struct dsc_trns *t = trns_;
   struct dsc_z_score *z;
-  struct variable **vars;
+  const struct variable **vars;
   int all_sysmis = 0;
 
   if (t->missing_type == DSC_LISTWISE)
index abbf9fc3890aada913b5b771fb57353d2362dd4d..b040e19bc7fd84f41af7fb9a78033f50bdc81941 100644 (file)
@@ -84,7 +84,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 
 static struct cmd_examine cmd;
 
-static struct variable **dependent_vars;
+static const struct variable **dependent_vars;
 
 static size_t n_dependent_vars;
 
@@ -116,19 +116,19 @@ static int examine_parse_independent_vars (struct lexer *lexer, const struct dic
 
 
 /* Output functions */
-static void show_summary (struct variable **dependent_var, int n_dep_var,
+static void show_summary (const struct variable **dependent_var, int n_dep_var,
                         const struct factor *f);
 
-static void show_extremes (struct variable **dependent_var,
+static void show_extremes (const struct variable **dependent_var,
                          int n_dep_var,
                          const struct factor *factor,
                          int n_extremities);
 
-static void show_descriptives (struct variable **dependent_var,
+static void show_descriptives (const struct variable **dependent_var,
                              int n_dep_var,
                              struct factor *factor);
 
-static void show_percentiles (struct variable **dependent_var,
+static void show_percentiles (const struct variable **dependent_var,
                             int n_dep_var,
                             struct factor *factor);
 
@@ -525,7 +525,7 @@ xmn_custom_variables (struct lexer *lexer, struct dataset *ds, struct cmd_examin
       return 2;
     }
 
-  if (!parse_variables (lexer, dict, &dependent_vars, &n_dependent_vars,
+  if (!parse_variables_const (lexer, dict, &dependent_vars, &n_dependent_vars,
                        PV_NO_DUPLICATE | PV_NUMERIC | PV_NO_SCRATCH) )
     {
       free (dependent_vars);
@@ -899,7 +899,7 @@ run_examine (const struct ccase *first, const struct casefile *cf,
 
 
 static void
-show_summary (struct variable **dependent_var, int n_dep_var,
+show_summary (const struct variable **dependent_var, int n_dep_var,
             const struct factor *fctr)
 {
   static const char *subtitle[]=
@@ -1124,7 +1124,7 @@ populate_summary (struct tab_table *t, int col, int row,
 
 
 static void
-show_extremes (struct variable **dependent_var, int n_dep_var,
+show_extremes (const struct variable **dependent_var, int n_dep_var,
              const struct factor *fctr, int n_extremities)
 {
   int i;
@@ -1361,7 +1361,7 @@ populate_extremes (struct tab_table *t,
 
 /* Show the descriptives table */
 void
-show_descriptives (struct variable **dependent_var,
+show_descriptives (const struct variable **dependent_var,
                  int n_dep_var,
                  struct factor *fctr)
 {
@@ -1947,7 +1947,7 @@ np_plot (const struct metrics *m, const char *factorname)
 
 /* Show the percentiles */
 void
-show_percentiles (struct variable **dependent_var,
+show_percentiles (const struct variable **dependent_var,
                 int n_dep_var,
                 struct factor *fctr)
 {
index 8b7e2ffec86d10d5c7774299b617fa70ecef5dbd..5c6e77404879e1b1b340f87d60c8ad1ef8fc6fe9 100644 (file)
@@ -64,7 +64,7 @@ struct varname
 struct flip_pgm 
   {
     struct pool *pool;          /* Pool containing FLIP data. */
-    struct variable **var;      /* Variables to transpose. */
+    const struct variable **var;      /* Variables to transpose. */
     int *idx_to_fv;             /* var[]->index to compacted sink case fv. */
     size_t var_cnt;             /* Number of elements in `var'. */
     int case_cnt;               /* Pre-flip case count. */
@@ -122,7 +122,7 @@ cmd_flip (struct lexer *lexer, struct dataset *ds)
   if (lex_match_id (lexer, "VARIABLES"))
     {
       lex_match (lexer, '=');
-      if (!parse_variables (lexer, dict, &flip->var, &flip->var_cnt,
+      if (!parse_variables_const (lexer, dict, &flip->var, &flip->var_cnt,
                             PV_NO_DUPLICATE))
        goto error;
       lex_match (lexer, '/');
index 34223e104fea78361dbfec63e378dcc2ffed4c17..29e85babd3f60a418167636249fb1732c988f599 100644 (file)
@@ -197,7 +197,7 @@ static int normal;          /* FIXME */
 
 /* Variables for which to calculate statistics. */
 static size_t n_variables;
-static struct variable **v_variables;
+static const struct variable **v_variables;
 
 /* Arenas used to store semi-permanent storage. */
 static struct pool *int_pool;  /* Integer mode. */
@@ -269,17 +269,17 @@ get_var_freqs (const struct variable *v)
 
 static void determine_charts (void);
 
-static void calc_stats (struct variable *v, double d[frq_n_stats]);
+static void calc_stats (const struct variable *v, double d[frq_n_stats]);
 
 static void precalc (const struct ccase *, void *, const struct dataset *);
 static bool calc (const struct ccase *, void *, const struct dataset *);
 static bool postcalc (void *, const struct dataset *);
 
-static void postprocess_freq_tab (struct variable *);
-static void dump_full (struct variable *);
-static void dump_condensed (struct variable *);
-static void dump_statistics (struct variable *, int show_varname);
-static void cleanup_freq_tab (struct variable *);
+static void postprocess_freq_tab (const struct variable *);
+static void dump_full (const struct variable *);
+static void dump_condensed (const struct variable *);
+static void dump_statistics (const struct variable *, int show_varname);
+static void cleanup_freq_tab (const struct variable *);
 
 static hsh_compare_func compare_value_numeric_a, compare_value_alpha_a;
 static hsh_compare_func compare_value_numeric_d, compare_value_alpha_d;
@@ -569,7 +569,7 @@ precalc (const struct ccase *first, void *aux UNUSED, const struct dataset *ds)
   
   for (i = 0; i < n_variables; i++)
     {
-      struct variable *v = v_variables[i];
+      const struct variable *v = v_variables[i];
       struct freq_tab *ft = &get_var_freqs (v)->tab;
 
       if (ft->mode == FRQM_GENERAL)
@@ -597,7 +597,7 @@ postcalc (void *aux UNUSED, const struct dataset *ds  UNUSED)
 
   for (i = 0; i < n_variables; i++)
     {
-      struct variable *v = v_variables[i];
+      const struct variable *v = v_variables[i];
       struct var_freqs *vf = get_var_freqs (v);
       struct freq_tab *ft = &vf->tab;
       int n_categories;
@@ -705,7 +705,7 @@ not_missing (const void *f_, const void *v_)
 
 /* Summarizes the frequency table data for variable V. */
 static void
-postprocess_freq_tab (struct variable *v)
+postprocess_freq_tab (const struct variable *v)
 {
   hsh_compare_func *compare;
   struct freq_tab *ft;
@@ -760,7 +760,7 @@ postprocess_freq_tab (struct variable *v)
 
 /* Frees the frequency table for variable V. */
 static void
-cleanup_freq_tab (struct variable *v)
+cleanup_freq_tab (const struct variable *v)
 {
   struct freq_tab *ft = &get_var_freqs (v)->tab;
   assert (ft->mode == FRQM_GENERAL);
@@ -784,7 +784,7 @@ frq_custom_variables (struct lexer *lexer, struct dataset *ds, struct cmd_freque
                          || dict_lookup_var (dataset_dict (ds), lex_tokid (lexer)) == NULL))
     return 2;
 
-  if (!parse_variables (lexer, dataset_dict (ds), &v_variables, &n_variables,
+  if (!parse_variables_const (lexer, dataset_dict (ds), &v_variables, &n_variables,
                        PV_APPEND | PV_NO_SCRATCH))
     return 0;
 
@@ -815,7 +815,7 @@ frq_custom_variables (struct lexer *lexer, struct dataset *ds, struct cmd_freque
 
   for (i = old_n_variables; i < n_variables; i++)
     {
-      struct variable *v = v_variables[i];
+      const struct variable *v = v_variables[i];
       struct var_freqs *vf;
 
       if (var_get_aux (v) != NULL)
@@ -875,9 +875,9 @@ frq_custom_grouped (struct lexer *lexer, struct dataset *ds, struct cmd_frequenc
 
        /* Variable list. */
        size_t n;
-       struct variable **v;
+       const struct variable **v;
 
-       if (!parse_variables (lexer, dataset_dict (ds), &v, &n,
+       if (!parse_variables_const (lexer, dataset_dict (ds), &v, &n,
                               PV_NO_DUPLICATE | PV_NUMERIC))
          return 0;
        if (lex_match (lexer, '('))
@@ -1119,7 +1119,7 @@ full_dim (struct tab_table *t, struct outp_driver *d)
 
 /* Displays a full frequency table for variable V. */
 static void
-dump_full (struct variable *v)
+dump_full (const struct variable *v)
 {
   int n_categories;
   struct var_freqs *vf;
@@ -1250,7 +1250,7 @@ condensed_dim (struct tab_table *t, struct outp_driver *d)
 
 /* Display condensed frequency table for variable V. */
 static void
-dump_condensed (struct variable *v)
+dump_condensed (const struct variable *v)
 {
   int n_categories;
   struct var_freqs *vf;
@@ -1310,7 +1310,7 @@ dump_condensed (struct variable *v)
 /* Calculates all the pertinent statistics for variable V, putting
    them in array D[].  FIXME: This could be made much more optimal. */
 static void
-calc_stats (struct variable *v, double d[frq_n_stats])
+calc_stats (const struct variable *v, double d[frq_n_stats])
 {
   struct freq_tab *ft = &get_var_freqs (v)->tab;
   double W = ft->valid_cases;
@@ -1472,7 +1472,7 @@ calc_stats (struct variable *v, double d[frq_n_stats])
 
 /* Displays a table of all the statistics requested for variable V. */
 static void
-dump_statistics (struct variable *v, int show_varname)
+dump_statistics (const struct variable *v, int show_varname)
 {
   struct freq_tab *ft;
   double stat_value[frq_n_stats];
index b952df19a4e084260f9b76a57e8036125b9886ce..10c6d3c11a68be154466e08e5ce45d6d00af2699 100644 (file)
@@ -53,7 +53,7 @@
 /* TABLES: Variable lists for each dimension. */
 static int n_dim;              /* Number of dimensions. */
 static size_t *nv_dim;         /* Number of variables in each dimension. */
-static struct variable ***v_dim;       /* Variables in each dimension.  */
+static const struct variable ***v_dim; /* Variables in each dimension.  */
 
 /* VARIABLES: List of variables. */
 static struct variable **v_var;
@@ -123,7 +123,7 @@ free:
 static int
 mns_custom_tables (struct lexer *lexer, struct dataset *ds, struct cmd_means *cmd, void *aux UNUSED)
 {
-  struct var_set *var_set;
+  struct const_var_set *var_set;
   
   if (!lex_match_id (lexer, "TABLES")
       && (lex_token (lexer) != T_ID || dict_lookup_var (dataset_dict (ds), lex_tokid (lexer)) == NULL)
@@ -138,15 +138,15 @@ mns_custom_tables (struct lexer *lexer, struct dataset *ds, struct cmd_means *cm
       return 0;
     }
 
-  var_set = var_set_create_from_dict (dataset_dict (ds));
+  var_set = const_var_set_create_from_dict (dataset_dict (ds));
   assert (var_set != NULL);
 
   do
     {
       size_t nvl;
-      struct variable **vl;
+      const struct variable **vl;
 
-      if (!parse_var_set_vars (lexer, var_set, &vl, &nvl,
+      if (!parse_const_var_set_vars (lexer, var_set, &vl, &nvl,
                                PV_NO_DUPLICATE | PV_NO_SCRATCH)) 
         goto lossage;
       
@@ -159,11 +159,11 @@ mns_custom_tables (struct lexer *lexer, struct dataset *ds, struct cmd_means *cm
     }
   while (lex_match (lexer, T_BY));
 
-  var_set_destroy (var_set);
+  const_var_set_destroy (var_set);
   return 1;
 
  lossage:
-  var_set_destroy (var_set);
+  const_var_set_destroy (var_set);
   return 0;
 }
 
index 1cb0ef7b9b0d30efb1837a0ed8ac2a39813c199f..3907bb26716993de67e369d6aaf837b6d3dc3aaa 100644 (file)
 #if !npar_h
 #define npar_h 1
 
-typedef struct variable *var_ptr;
+typedef const struct variable *var_ptr;
 typedef var_ptr variable_pair[2];
 
 struct hsh_table;
+struct const_hsh_table;
 struct casefilter ;
 
 struct npar_test
@@ -34,13 +35,13 @@ struct npar_test
                   );
 
   void (*insert_variables) (const struct npar_test *, 
-                           struct hsh_table *);
+                           struct const_hsh_table *);
 };
 
 struct one_sample_test
 {
   struct npar_test parent;
-  struct variable **vars;
+  const struct variable **vars;
   size_t n_vars;
 };
 
index 581452a286cd76bef9f08d29d1dc72ab6c05773d..ab5047cf0d24c21756e6fe74b9767586275c52fc 100644 (file)
@@ -82,7 +82,7 @@ struct npar_specs
 };
 
 void one_sample_insert_variables (const struct npar_test *test,
-                                 struct hsh_table *variables);
+                                 struct const_hsh_table *variables);
 
 static bool 
 npar_execute(const struct ccase *first UNUSED,
@@ -130,10 +130,10 @@ cmd_npar_tests (struct lexer *lexer, struct dataset *ds)
   bool ok;
   int i;
   struct npar_specs npar_specs = {0, 0, 0, 0, 0, 0, 0, 0};
-  struct hsh_table *var_hash;
+  struct const_hsh_table *var_hash;
   npar_specs.pool = pool_create ();
 
-  var_hash = hsh_create_pool (npar_specs.pool, 0, 
+  var_hash = const_hsh_create_pool (npar_specs.pool, 0, 
                              compare_vars_by_name, hash_var_by_name, 
                              NULL, NULL);
 
@@ -143,24 +143,24 @@ cmd_npar_tests (struct lexer *lexer, struct dataset *ds)
       return CMD_FAILURE;
     }
 
-  for (i = 0; i < npar_specs.n_tests; ++i ) 
+  for (i = 0; i < npar_specs.n_tests; ++i )
     {
       const struct npar_test *test = npar_specs.test[i];
       test->insert_variables (test, var_hash);
     }
 
-  npar_specs.vv =  (const struct variable *const *) hsh_data (var_hash);
-  npar_specs.n_vars = hsh_count (var_hash);
-  
-  if ( cmd.sbc_statistics ) 
+  npar_specs.vv =  (const struct variable *const *) const_hsh_data (var_hash);
+  npar_specs.n_vars = const_hsh_count (var_hash);
+
+  if ( cmd.sbc_statistics )
     {
       int i;
 
-      for ( i = 0 ; i < NPAR_ST_count; ++i ) 
+      for ( i = 0 ; i < NPAR_ST_count; ++i )
        {
-         if ( cmd.a_statistics[i] ) 
+         if ( cmd.a_statistics[i] )
            {
-             switch ( i ) 
+             switch ( i )
                {
                case NPAR_ST_DESCRIPTIVES:
                  npar_specs.descriptives = true;
@@ -191,7 +191,7 @@ cmd_npar_tests (struct lexer *lexer, struct dataset *ds)
 
   casefilter_destroy (npar_specs.filter);
 
-  hsh_destroy (var_hash);
+  const_hsh_destroy (var_hash);
 
   pool_destroy (npar_specs.pool);
 
@@ -209,7 +209,7 @@ npar_custom_chisquare(struct lexer *lexer, struct dataset *ds, struct cmd_npar_t
   ((struct npar_test *)tp)->execute = chisquare_execute;
   ((struct npar_test *)tp)->insert_variables = one_sample_insert_variables;
 
-  if (!parse_variables_pool (lexer, specs->pool, dataset_dict (ds), 
+  if (!parse_variables_const_pool (lexer, specs->pool, dataset_dict (ds), 
                             &tp->vars, &tp->n_vars,
                             PV_NO_SCRATCH | PV_NO_DUPLICATE))
     {
@@ -329,7 +329,7 @@ npar_custom_binomial(struct lexer *lexer, struct dataset *ds, struct cmd_npar_te
 
   if ( lex_match (lexer, '=') ) 
     {
-      if (parse_variables_pool (lexer, specs->pool, dataset_dict (ds), 
+      if (parse_variables_const_pool (lexer, specs->pool, dataset_dict (ds), 
                                &tp->vars, &tp->n_vars,
                                PV_NUMERIC | PV_NO_SCRATCH | PV_NO_DUPLICATE) )
        {
@@ -389,13 +389,13 @@ parse_two_sample_related_test (struct lexer *lexer,
   int n = 0;
   bool paired = false;
   bool with = false;
-  struct variable **vlist1;
+  const struct variable **vlist1;
   size_t n_vlist1;
 
-  struct variable **vlist2;
+  const struct variable **vlist2;
   size_t n_vlist2;
 
-  if (!parse_variables_pool (lexer, pool, 
+  if (!parse_variables_const_pool (lexer, pool, 
                             dict, 
                             &vlist1, &n_vlist1,
                             PV_NUMERIC | PV_NO_SCRATCH | PV_NO_DUPLICATE) )
@@ -404,7 +404,7 @@ parse_two_sample_related_test (struct lexer *lexer,
   if ( lex_match(lexer, T_WITH))
     {
       with = true;
-      if ( !parse_variables_pool (lexer, pool, dict,
+      if ( !parse_variables_const_pool (lexer, pool, dict,
                                  &vlist2, &n_vlist2,
                                  PV_NUMERIC | PV_NO_SCRATCH | PV_NO_DUPLICATE) )
        return false;
@@ -558,12 +558,12 @@ npar_custom_sign (struct lexer *lexer, struct dataset *ds,
 /* Insert the variables for TEST into VAR_HASH */
 void
 one_sample_insert_variables (const struct npar_test *test,
-                           struct hsh_table *var_hash)
+                           struct const_hsh_table *var_hash)
 {
   int i;
   struct one_sample_test *ost = (struct one_sample_test *) test;
 
-  for ( i = 0 ; i < ost->n_vars ; ++i ) 
-    hsh_insert (var_hash, ost->vars[i]);
+  for ( i = 0 ; i < ost->n_vars ; ++i )
+    const_hsh_insert (var_hash, ost->vars[i]);
 }
 
index 7664f607a4e1e06f4e630fe4cfb908fd0aacee9d..9b45119f8664f1ae948a5bfc838479fa8115f921 100644 (file)
@@ -71,13 +71,13 @@ static bool bad_weight_warn = true;
 static struct cmd_oneway cmd;
 
 /* The independent variable */
-static struct variable *indep_var;
+static const struct variable *indep_var;
 
 /* Number of dependent variables */
 static size_t n_vars;
 
 /* The dependent variables */
-static struct variable **vars;
+static const struct variable **vars;
 
 
 /* A  hash table containing all the distinct values of the independent
@@ -225,7 +225,7 @@ oneway_custom_variables (struct lexer *lexer,
       && lex_token (lexer) != T_ALL)
     return 2;
 
-  if (!parse_variables (lexer, dict, &vars, &n_vars,
+  if (!parse_variables_const (lexer, dict, &vars, &n_vars,
                        PV_DUPLICATE 
                        | PV_NUMERIC | PV_NO_SCRATCH) )
     {
index 8efc816efe700af5cf37453c296517996ade3a63..3f1dd3a9e92c6eb7fcb159eff15846e4cb7c16b3 100644 (file)
@@ -154,10 +154,10 @@ static size_t n_rank_specs;
 
 static struct sort_criteria *sc;
 
-static struct variable **group_vars;
+static const struct variable **group_vars;
 static size_t n_group_vars;
 
-static struct variable **src_vars;
+static const struct variable **src_vars;
 static size_t n_src_vars;
 
 
@@ -245,7 +245,7 @@ rank_cmd (struct dataset *ds, const struct sort_criteria *sc,
   criteria.crits = xnmalloc (criteria.crit_cnt, sizeof *criteria.crits);
   for (i = 0; i < n_splits ; i++)
     {
-      struct variable *v = dict_get_split_vars (dataset_dict (ds))[i];
+      const struct variable *v = dict_get_split_vars (dataset_dict (ds))[i];
       criteria.crits[i].fv = var_get_case_index (v);
       criteria.crits[i].width = var_get_width (v);
       criteria.crits[i].dir = SRT_ASCEND;
@@ -946,7 +946,7 @@ rank_custom_variables (struct lexer *lexer, struct dataset *ds, struct cmd_rank
          return 2;
        }
 
-      if (!parse_variables (lexer, dataset_dict (ds),
+      if (!parse_variables_const (lexer, dataset_dict (ds),
                            &group_vars, &n_group_vars,
                            PV_NO_DUPLICATE | PV_NO_SCRATCH) )
        {
index 80f9c0293c0386ae51372ae3bf0ac29c666a989f..995c862006b22ef8eafd4a3accdde75a66fcd4ea 100644 (file)
@@ -89,7 +89,7 @@ static struct cmd_regression cmd;
 struct moments_var
 {
   struct moments1 *m;
-  struct variable *v;
+  const struct variable *v;
 };
 
 /* Linear regression models. */
@@ -108,7 +108,7 @@ struct reg_trns
 /*
   Variables used (both explanatory and response).
  */
-static struct variable **v_variables;
+static const struct variable **v_variables;
 
 /*
   Number of variables.
@@ -974,8 +974,9 @@ is_depvar (size_t k, const struct variable *v)
   Compute the first two moments.
  */
 static size_t
-mark_missing_cases (const struct casefile *cf, struct variable *v,
-                   int *is_missing_case, double n_data, struct moments_var *mom)
+mark_missing_cases (const struct casefile *cf, const struct variable *v,
+                   int *is_missing_case, double n_data,
+                    struct moments_var *mom)
 {
   struct casereader *r;
   struct ccase c;
@@ -1024,7 +1025,7 @@ regression_custom_variables (struct lexer *lexer, struct dataset *ds,
     return 2;
 
 
-  if (!parse_variables (lexer, dict, &v_variables, &n_variables, PV_NONE))
+  if (!parse_variables_const (lexer, dict, &v_variables, &n_variables, PV_NONE))
     {
       free (v_variables);
       return 0;
@@ -1064,8 +1065,9 @@ get_n_indep (const struct variable *v)
 */
 static int
 prepare_data (int n_data, int is_missing_case[],
-             struct variable **indep_vars,
-             struct variable *depvar, const struct casefile *cf, struct moments_var *mom)
+             const struct variable **indep_vars,
+             const struct variable *depvar, const struct casefile *cf,
+              struct moments_var *mom)
 {
   int i;
   int j;
@@ -1153,7 +1155,7 @@ run_regression (const struct ccase *first,
   const union value *val;
   struct casereader *r;
   struct ccase c;
-  struct variable **indep_vars;
+  const struct variable **indep_vars;
   struct design_matrix *X;
   struct moments_var *mom;
   gsl_vector *Y;
index bbb33f23883c3718be065f1fe97144c661c4c1cb..81b68eab6c41afd5cb79fa2205aa72cb5ba347ff 100644 (file)
@@ -50,13 +50,13 @@ static bool  is_terminator(int tok, const int *terminators);
 */
 struct sort_criteria *
 sort_parse_criteria (struct lexer *lexer, const struct dictionary *dict,
-                     struct variable ***vars, size_t *var_cnt,
+                     const struct variable ***vars, size_t *var_cnt,
                      bool *saw_direction,
                     const int *terminators
                     )
 {
   struct sort_criteria *criteria;
-  struct variable **local_vars = NULL;
+  const struct variable **local_vars = NULL;
   size_t local_var_cnt;
 
   assert ((vars == NULL) == (var_cnt == NULL));
@@ -81,7 +81,7 @@ sort_parse_criteria (struct lexer *lexer, const struct dictionary *dict,
       enum sort_direction direction;
 
       /* Variables. */
-      if (!parse_variables (lexer, dict, vars, var_cnt,
+      if (!parse_variables_const (lexer, dict, vars, var_cnt,
                            PV_NO_DUPLICATE | PV_APPEND | PV_NO_SCRATCH))
         goto error;
 
index a222cbc7431e5a3803810accaf878425bf71ab57..1c44cc586eecfc0cc6df2f9c7e3572c41a1abdc0 100644 (file)
@@ -28,7 +28,7 @@ struct dictionary;
 struct lexer ;
 
 struct sort_criteria *sort_parse_criteria (struct lexer *, const struct dictionary *,
-                                           struct variable ***, size_t *,
+                                           const struct variable ***, size_t *,
                                            bool *saw_direction,
                                           const int *terminators
                                           );
index 088bc2b1c5cc82bc56239914278ad0417a06f234..9fd09e7be0c185798de218166ffa23ee1d261b85 100644 (file)
@@ -110,7 +110,7 @@ static int n_pairs = 0 ;
 struct pair 
 {
   /* The variables comprising the pair */
-  struct variable *v[2];
+  const struct variable *v[2];
 
   /* The number of valid variable pairs */
   double n;
@@ -304,30 +304,29 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds)
 
          int i;
          struct hsh_iterator hi;
-         struct hsh_table *hash;
-         struct variable *v;
+         struct const_hsh_table *hash;
+         const struct variable *v;
 
-         hash = hsh_create (n_pairs, compare_vars_by_name, hash_var_by_name,
+         hash = const_hsh_create (n_pairs, compare_vars_by_name, hash_var_by_name,
           0, 0);
 
          for (i=0; i < n_pairs; ++i)
            {
-             hsh_insert(hash,pairs[i].v[0]);
-             hsh_insert(hash,pairs[i].v[1]);
+             const_hsh_insert (hash, pairs[i].v[0]);
+             const_hsh_insert (hash, pairs[i].v[1]);
            }
 
          assert(cmd.n_variables == 0);
-         cmd.n_variables = hsh_count(hash);
+         cmd.n_variables = const_hsh_count (hash);
 
          cmd.v_variables = xnrealloc (cmd.v_variables, cmd.n_variables,
                                        sizeof *cmd.v_variables);
          /* Iterate through the hash */
-         for (i=0,v = (struct variable *) hsh_first(hash,&hi);
+         for (i=0,v = const_hsh_first (hash, &hi);
               v != 0;
-              v=hsh_next(hash,&hi) ) 
+              v = const_hsh_next (hash, &hi) ) 
            cmd.v_variables[i++]=v;
-
-         hsh_destroy(hash);
+         const_hsh_destroy(hash);
        }
     }
   else if ( !cmd.sbc_variables) 
@@ -441,7 +440,7 @@ tts_custom_groups (struct lexer *lexer, struct dataset *ds, struct cmd_t_test *c
 static int
 tts_custom_pairs (struct lexer *lexer, struct dataset *ds, struct cmd_t_test *cmd UNUSED, void *aux UNUSED)
 {
-  struct variable **vars;
+  const struct variable **vars;
   size_t n_vars;
   size_t n_pairs_local;
 
@@ -452,7 +451,7 @@ tts_custom_pairs (struct lexer *lexer, struct dataset *ds, struct cmd_t_test *cm
   lex_match (lexer, '=');
 
   n_vars=0;
-  if (!parse_variables (lexer, dataset_dict (ds), &vars, &n_vars,
+  if (!parse_variables_const (lexer, dataset_dict (ds), &vars, &n_vars,
                        PV_DUPLICATE | PV_NUMERIC | PV_NO_SCRATCH))
     {
       free (vars);
@@ -464,7 +463,7 @@ tts_custom_pairs (struct lexer *lexer, struct dataset *ds, struct cmd_t_test *cm
   if (lex_match (lexer, T_WITH))
     {
       n_before_WITH = n_vars;
-      if (!parse_variables (lexer, dataset_dict (ds), &vars, &n_vars,
+      if (!parse_variables_const (lexer, dataset_dict (ds), &vars, &n_vars,
                            PV_DUPLICATE | PV_APPEND
                            | PV_NUMERIC | PV_NO_SCRATCH))
        {
@@ -749,7 +748,7 @@ ssbox_independent_samples_populate(struct ssbox *ssb,
 
   for (i=0; i < cmd->n_variables; ++i)
     {
-      struct variable *var = cmd->v_variables[i];
+      const struct variable *var = cmd->v_variables[i];
       struct hsh_table *grp_hash = group_proc_get (var)->group_hash;
       int count=0;
 
@@ -1012,7 +1011,7 @@ trbox_independent_samples_populate(struct trbox *self,
       double std_err_diff;
       double mean_diff;
 
-      struct variable *var = cmd->v_variables[i];
+      const struct variable *var = cmd->v_variables[i];
       struct group_proc *grp_data = group_proc_get (var);
 
       struct hsh_table *grp_hash = grp_data->group_hash;
@@ -1429,7 +1428,7 @@ common_calc (const struct dictionary *dict,
 
   for(i = 0; i < cmd->n_variables ; ++i) 
     {
-      struct variable *v = cmd->v_variables[i];
+      const struct variable *v = cmd->v_variables[i];
 
       if (! casefilter_variable_missing (filter, c, v) )
        {
@@ -1505,7 +1504,7 @@ one_sample_calc (const struct dictionary *dict,
   for(i=0; i< cmd->n_variables ; ++i) 
     {
       struct group_statistics *gs;
-      struct variable *v = cmd->v_variables[i];
+      const struct variable *v = cmd->v_variables[i];
       const union value *val = case_data (c, v);
 
       gs= &group_proc_get (cmd->v_variables[i])->ugs;
@@ -1578,8 +1577,8 @@ paired_calc (const struct dictionary *dict, const struct ccase *c,
 
   for(i=0; i < n_pairs ; ++i )
     {
-      struct variable *v0 = pairs[i].v[0];
-      struct variable *v1 = pairs[i].v[1];
+      const struct variable *v0 = pairs[i].v[0];
+      const struct variable *v1 = pairs[i].v[1];
 
       const union value *val0 = case_data (c, v0);
       const union value *val1 = case_data (c, v1);
@@ -1711,7 +1710,7 @@ group_calc (const struct dictionary *dict,
 
   for(i=0; i< cmd->n_variables ; ++i) 
     {
-      struct variable *var = cmd->v_variables[i];
+      const struct variable *var = cmd->v_variables[i];
       const union value *val = case_data (c, var);
       struct hsh_table *grp_hash = group_proc_get (var)->group_hash;
       struct group_statistics *gs;
@@ -1742,7 +1741,7 @@ group_postcalc ( struct cmd_t_test *cmd )
 
   for (i = 0; i < cmd->n_variables ; ++i) 
     {
-      struct variable *var = cmd->v_variables[i];
+      const struct variable *var = cmd->v_variables[i];
       struct hsh_table *grp_hash = group_proc_get (var)->group_hash;
       struct hsh_iterator g;
       struct group_statistics *gs;
index 5cfc0515191e8e90f5c6fa9beb91ccecd51b567d..39f04574975faa4732cc682878937f888d1b222d 100644 (file)
@@ -58,7 +58,7 @@ struct criteria
     struct criteria *next;
 
     /* Variables to count. */
-    struct variable **vars;
+    const struct variable **vars;
     size_t var_cnt;
 
     /* Count special values? */
@@ -136,10 +136,11 @@ cmd_count (struct lexer *lexer, struct dataset *ds)
       for (;;)
        {
           bool ok;
-          
+
          crit->next = NULL;
          crit->vars = NULL;
-         if (!parse_variables (lexer, dataset_dict (ds), &crit->vars, &crit->var_cnt,
+         if (!parse_variables_const (lexer, dataset_dict (ds), &crit->vars, 
+                                     &crit->var_cnt,
                                 PV_DUPLICATE | PV_SAME_TYPE))
            goto fail;
           pool_register (trns->pool, free, crit->vars);
index 7af72efaff7370678816b84bab55eb198df08ddc..18f724432fcae680450d0c3ebee465b569a9904d 100644 (file)
@@ -97,8 +97,8 @@ struct recode_trns
     enum var_type dst_type;     /* dst_vars[*]->type. */
 
     /* Variables. */
-    struct variable **src_vars;        /* Source variables. */
-    struct variable **dst_vars;        /* Destination variables. */
+    const struct variable **src_vars;  /* Source variables. */
+    const struct variable **dst_vars;  /* Destination variables. */
     char **dst_names;          /* Name of dest variables, if they're new. */
     size_t var_cnt;             /* Number of variables. */
 
@@ -181,7 +181,7 @@ static bool
 parse_src_vars (struct lexer *lexer, 
                struct recode_trns *trns, const struct dictionary *dict) 
 {
-  if (!parse_variables (lexer, dict, &trns->src_vars, &trns->var_cnt,
+  if (!parse_variables_const (lexer, dict, &trns->src_vars, &trns->var_cnt,
                         PV_SAME_TYPE))
     return false;
   pool_register (trns->pool, free, trns->src_vars);
@@ -443,7 +443,7 @@ parse_dst_vars (struct lexer *lexer, struct recode_trns *trns,
                                     trns->var_cnt, sizeof *trns->dst_vars);
       for (i = 0; i < trns->var_cnt; i++)
         {
-          struct variable *v;
+          const struct variable *v;
           v = trns->dst_vars[i] = dict_lookup_var (dict, trns->dst_names[i]);
           if (v == NULL && trns->dst_type == VAR_STRING) 
             {
@@ -472,7 +472,7 @@ parse_dst_vars (struct lexer *lexer, struct recode_trns *trns,
 
   for (i = 0; i < trns->var_cnt; i++)
     {
-      struct variable *v = trns->dst_vars[i];
+      const struct variable *v = trns->dst_vars[i];
       if (v != NULL && var_get_type (v) != trns->dst_type)
         {
           msg (SE, _("Type mismatch.  Cannot store %s data in "
@@ -498,7 +498,7 @@ enlarge_dst_widths (struct recode_trns *trns)
   max_dst_width = 0;
   for (i = 0; i < trns->var_cnt; i++)
     {
-      struct variable *v = trns->dst_vars[i];
+      const struct variable *v = trns->dst_vars[i];
       if (var_get_width (v) > max_dst_width)
         max_dst_width = var_get_width (v);
     }
@@ -523,7 +523,7 @@ create_dst_vars (struct recode_trns *trns, struct dictionary *dict)
 
   for (i = 0; i < trns->var_cnt; i++) 
     {
-      struct variable **var = &trns->dst_vars[i];
+      const struct variable **var = &trns->dst_vars[i];
       const char *name = trns->dst_names[i];
           
       *var = dict_lookup_var (dict, name);
@@ -538,7 +538,7 @@ create_dst_vars (struct recode_trns *trns, struct dictionary *dict)
 /* Returns the output mapping in TRNS for an input of VALUE on
    variable V, or a null pointer if there is no mapping. */
 static const struct map_out *
-find_src_numeric (struct recode_trns *trns, double value, struct variable *v)
+find_src_numeric (struct recode_trns *trns, double value, const struct variable *v)
 {
   struct mapping *m;
 
@@ -627,8 +627,8 @@ recode_trns_proc (void *trns_, struct ccase *c, casenumber case_idx UNUSED)
 
   for (i = 0; i < trns->var_cnt; i++) 
     {
-      struct variable *src_var = trns->src_vars[i];
-      struct variable *dst_var = trns->dst_vars[i];
+      const struct variable *src_var = trns->src_vars[i];
+      const struct variable *dst_var = trns->dst_vars[i];
 
       const union value *src_data = case_data (c, src_var);
       union value *dst_data = case_data_rw (c, dst_var);
index 06e4d084ed77feb31f16496cb2b6312d5b643b54..c0bc5687ea67ca320d81d0cd0323af5e0e3b1ddd 100644 (file)
@@ -87,4 +87,109 @@ size_t hsh_count (struct hsh_table *);
 void hsh_dump (struct hsh_table *);
 #endif
 
+
+/* Const Wrappers for the above */
+
+static inline struct const_hsh_table *
+const_hsh_create (int m,
+                 hsh_compare_func *hcf,
+                 hsh_hash_func *hhf, hsh_free_func *hff,
+                 const void *aux)
+{
+  return (struct const_hsh_table *) hsh_create (m, hcf, hhf, hff, aux);
+}
+
+
+
+static inline struct const_hsh_table *
+const_hsh_create_pool (struct pool *pool, int m,
+                      hsh_compare_func *cf,
+                      hsh_hash_func *hf, hsh_free_func *ff,
+                      const void *aux)
+{
+  return (struct const_hsh_table *) hsh_create_pool (pool, m, cf, hf, ff, aux);
+}
+
+
+static inline void
+const_hsh_clear (struct const_hsh_table *h)
+{
+  hsh_clear ( (struct hsh_table *) h);
+}
+
+static inline void
+const_hsh_destroy (struct const_hsh_table *h)
+{
+  hsh_destroy ( (struct hsh_table *) h);
+}
+
+static inline void *const *
+const_hsh_sort (struct const_hsh_table *h)
+{
+  return hsh_sort ( (struct hsh_table *) h);
+}
+
+static inline void *const *
+const_hsh_data (struct const_hsh_table *h)
+{
+  return hsh_data ( (struct hsh_table *) h);
+}
+
+static inline void **
+const_hsh_sort_copy (struct const_hsh_table *h)
+{
+  return hsh_sort_copy ( (struct hsh_table *) h);
+}
+
+static inline void **
+const_hsh_data_copy (struct const_hsh_table *h)
+{
+  return hsh_data_copy ( (struct hsh_table *) h);
+}
+
+
+static inline size_t
+const_hsh_count (struct const_hsh_table *h)
+{
+  return hsh_count ( (struct hsh_table *) h);
+}
+
+static inline void *
+const_hsh_insert (struct const_hsh_table *h, const void *item)
+{
+  return hsh_insert ( (struct hsh_table *) h, (void *) item);
+}
+
+static inline void *
+const_hsh_replace (struct const_hsh_table *h, const void *item)
+{
+  return hsh_replace ( (struct hsh_table *) h, (void *) item);
+}
+
+static inline void *
+const_hsh_find (struct const_hsh_table *h, const void *item)
+{
+  return hsh_find ( (struct hsh_table *) h, (void *) item);
+}
+
+static inline bool
+const_hsh_delete (struct const_hsh_table *h, const void *item)
+{
+  return hsh_delete ( (struct hsh_table *)h, (void *) item);
+}
+
+
+static inline void *
+const_hsh_first (struct const_hsh_table *h, struct hsh_iterator *i)
+{
+  return hsh_first ( (struct hsh_table *) h, i);
+}
+
+static inline void *
+const_hsh_next (struct const_hsh_table *h, struct hsh_iterator *i)
+{
+  return hsh_next ( (struct hsh_table *) h, i);
+}
+
+
 #endif /* hash_h */
index 421585be39b4ff7521636bc6d9643c4a1beb8bed..cdb360507d2b31ae939a10d773c607ef134576a9 100644 (file)
@@ -45,6 +45,6 @@ struct group_proc
 };
 
 struct variable;
-struct group_proc *group_proc_get (struct variable *);
+struct group_proc *group_proc_get (const struct variable *);
 
 #endif
index 3978f2fb948818805c1c9045637ad8e1f2f0f727..105b643a1cf416c6a3eedf17ae08b04cc185d1f5 100644 (file)
@@ -59,7 +59,7 @@ free_group(struct group_statistics *v, void *aux UNUSED)
 
 
 struct group_proc *
-group_proc_get (struct variable *v)
+group_proc_get (const struct variable *v)
 {
   /* This is not ideal, obviously. */
   struct group_proc *group = var_get_aux (v);
index acb1cebfc0a1b07c2cfdebb9f0108d15395429ee..a325138b14517198eeb71e8204c60472a8ba26c3 100644 (file)
@@ -65,13 +65,13 @@ struct levene_info
   struct t_test_proc **group_stats;
 
   /* The independent variable */
-  struct variable *v_indep; 
+  const struct variable *v_indep; 
 
   /* Number of dependent variables */
   size_t n_dep;
 
   /* The dependent variables */
-  struct variable  **v_dep;
+  const struct variable  **v_dep;
 
   /* Filter for missing values */
   struct casefilter *filter;
@@ -94,7 +94,8 @@ static void levene2_postcalc (void *);
 void  
 levene(const struct dictionary *dict, 
        const struct casefile *cf,
-       struct variable *v_indep, size_t n_dep, struct variable **v_dep,
+       const struct variable *v_indep, size_t n_dep, 
+       const struct variable **v_dep,
        struct casefilter *filter)
 {
   struct casereader *r;
@@ -159,7 +160,7 @@ levene_precalc (const struct levene_info *l)
 
   for(i = 0; i < l->n_dep ; ++i ) 
     {
-      struct variable *var = l->v_dep[i];
+      const struct variable *var = l->v_dep[i];
       struct group_proc *gp = group_proc_get (var);
       struct group_statistics *gs;
       struct hsh_iterator hi;
@@ -194,7 +195,7 @@ levene_calc (const struct dictionary *dict, const struct ccase *c,
 
   for (i = 0; i < l->n_dep; ++i) 
     {
-      struct variable *var = l->v_dep[i];
+      const struct variable *var = l->v_dep[i];
       struct group_proc *gp = group_proc_get (var);
       double levene_z;
       const union value *v = case_data (c, var);
@@ -254,7 +255,7 @@ levene2_precalc (struct levene_info *l)
       struct hsh_iterator hi;
       struct group_statistics *g;
 
-      struct variable *var = l->v_dep[v] ;
+      const struct variable *var = l->v_dep[v] ;
       struct hsh_table *hash = group_proc_get (var)->group_hash;
 
 
@@ -285,7 +286,7 @@ levene2_calc (const struct dictionary *dict, const struct ccase *c,
   for (i = 0; i < l->n_dep; ++i) 
     {
       double levene_z;
-      struct variable *var = l->v_dep[i] ;
+      const struct variable *var = l->v_dep[i] ;
       const union value *v = case_data (c, var);
       struct group_statistics *gs;
 
@@ -319,7 +320,7 @@ levene2_postcalc (void *_l)
       struct hsh_iterator hi;
       struct group_statistics *g;
 
-      struct variable *var = l->v_dep[v] ;
+      const struct variable *var = l->v_dep[v] ;
       struct group_proc *gp = group_proc_get (var);
       struct hsh_table *hash = gp->group_hash;
 
index d0e44283cd3b575c66292008182cae9d15fc5855..66944dafb434325aaaf4cc97a781a3f82e0be1c7 100644 (file)
@@ -40,7 +40,8 @@ struct dictionary ;
 struct casefilter ;
 
 void  levene(const struct dictionary *dict, const struct casefile *cf, 
-            struct variable *v_indep, size_t n_dep, struct variable **v_dep,
+            const struct variable *v_indep, size_t n_dep, 
+            const struct variable **v_dep,
             struct casefilter *filter);
 
 
index 111a8327c313d9f24e04dddf8c0a57b564340949..81ebfb3c60259ab582cb6c010c34532e4c983850 100644 (file)
@@ -712,7 +712,7 @@ on_split_change (PsppireDict *dict, gpointer data)
     {
       gint i;
       GString *text;
-      struct variable *const * split_vars = dict_get_split_vars (dict->dict);
+      const struct variable *const * split_vars = dict_get_split_vars (dict->dict);
 
       text = g_string_new (_("Split by "));
 
index 731995ca55791176646abe347716ade33817d188..b0b470bd4000029fb9b2aea14592b74e3cdf2584 100644 (file)
@@ -27,6 +27,7 @@
 #include "dict-display.h"
 #include <language/syntax-string-source.h>
 #include "syntax-editor.h"
+#include <data/dictionary.h>
 
 #include <gtk/gtk.h>
 #include <glade/glade.h>
@@ -147,7 +148,7 @@ refresh (PsppireDialog *dialog, struct split_file_dialog *d)
     {
       GtkTreeIter iter;
       gint i;
-      struct variable *const *vars = dict_get_split_vars (d->dict->dict);
+      const struct variable *const *vars = dict_get_split_vars (d->dict->dict);
 
       for (i = 0 ; i < n_vars; ++i )
        {
@@ -172,6 +173,7 @@ split_file_dialog (GObject *o, gpointer data)
   gint response;
   struct data_editor *de = data;
   struct split_file_dialog sfd;
+  PsppireVarStore *vs ;
 
   GtkWidget *dialog   ;
   GtkWidget *source   ;
@@ -191,7 +193,7 @@ split_file_dialog (GObject *o, gpointer data)
 
   var_sheet = GTK_SHEET (get_widget_assert (de->xml, "variable_sheet"));
 
-  PsppireVarStore *vs = PSPPIRE_VAR_STORE (gtk_sheet_get_model (var_sheet));
+  vs = PSPPIRE_VAR_STORE (gtk_sheet_get_model (var_sheet));
 
   sfd.dict = vs->dict;
   sfd.tv = GTK_TREE_VIEW (dest);
index aa6ed5c583cf2c5256c4d1d1350790d7b00cd9f1..45daa0f32167f999f713956cba1d9ff747fb3417 100644 (file)
@@ -52,7 +52,7 @@ refresh (PsppireDialog *dialog, gpointer data)
   GladeXML *xml = data;
   GtkWidget *dest = get_widget_assert (xml, "variables-treeview");
   GtkWidget *entry = get_widget_assert (xml, "new-name-entry");
-  GtkTreeModel *dmodel = gtk_tree_view_get_model (dest);
+  GtkTreeModel *dmodel = gtk_tree_view_get_model (GTK_TREE_VIEW (dest));
 
   gtk_list_store_clear (GTK_LIST_STORE (dmodel));
   gtk_entry_set_text (GTK_ENTRY (entry), "");