Committed patch #5636
authorJohn Darrington <john@darrington.wattle.id.au>
Sat, 16 Dec 2006 03:40:41 +0000 (03:40 +0000)
committerJohn Darrington <john@darrington.wattle.id.au>
Sat, 16 Dec 2006 03:40:41 +0000 (03:40 +0000)
32 files changed:
po/de.po
src/data/ChangeLog
src/data/dictionary.c
src/data/dictionary.h
src/data/missing-values.c
src/data/missing-values.h
src/data/procedure.h
src/data/value-labels.c
src/data/vardict.h
src/data/variable.c
src/language/expressions/evaluate.c
src/language/stats/aggregate.c
src/ui/gui/ChangeLog
src/ui/gui/automake.mk
src/ui/gui/data-sheet.c
src/ui/gui/menu-actions.c
src/ui/gui/missing-val-dialog.c
src/ui/gui/missing-val-dialog.h
src/ui/gui/psppire-data-store.c
src/ui/gui/psppire-dict.c
src/ui/gui/psppire-dict.h
src/ui/gui/psppire-var-store.c
src/ui/gui/psppire-var-store.h
src/ui/gui/psppire-variable.c [deleted file]
src/ui/gui/psppire-variable.h [deleted file]
src/ui/gui/sort-cases-dialog.c
src/ui/gui/val-labs-dialog.c
src/ui/gui/val-labs-dialog.h
src/ui/gui/var-sheet.c
src/ui/gui/var-type-dialog.c
src/ui/gui/var-type-dialog.h
src/ui/terminal/main.c

index 0d96640b9abaca9c433ddbb12c89fc14de02dccb..972fcfb9c40bd10ae1feedec2f45444bc84adeab 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"
 msgstr ""
 "Project-Id-Version: PSPP 0.4.2\n"
 "Report-Msgid-Bugs-To: pspp-dev@gnu.org\n"
-"POT-Creation-Date: 2006-12-14 19:01+0900\n"
+"POT-Creation-Date: 2006-12-16 11:13+0900\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"
 "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"
@@ -18,17 +18,17 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/data/any-reader.c:75
+#: src/data/any-reader.c:74
 #, c-format
 msgid "An error occurred while opening \"%s\": %s."
 msgstr "Ein Fehler ist passiert als \\\"%s\\\" geoffnet war: %s"
 
 #, c-format
 msgid "An error occurred while opening \"%s\": %s."
 msgstr "Ein Fehler ist passiert als \\\"%s\\\" geoffnet war: %s"
 
-#: src/data/any-reader.c:130
+#: src/data/any-reader.c:129
 #, c-format
 msgid "\"%s\" is not a system or portable file."
 msgstr "\"%s\" ist kein Systemdatei und kein Tragbardatei."
 
 #, c-format
 msgid "\"%s\" is not a system or portable file."
 msgstr "\"%s\" ist kein Systemdatei und kein Tragbardatei."
 
-#: src/data/any-reader.c:136 src/data/any-writer.c:81
+#: src/data/any-reader.c:135 src/data/any-writer.c:80
 msgid "The inline file is not allowed here."
 msgstr "Diese Inlindatei ist hier verboten."
 
 msgid "The inline file is not allowed here."
 msgstr "Diese Inlindatei ist hier verboten."
 
@@ -47,233 +47,233 @@ msgstr "Tag %d muß zwischen 0 bit 31 sein."
 msgid "Date %04d-%d-%d is before the earliest acceptable date of 1582-10-15."
 msgstr ""
 
 msgid "Date %04d-%d-%d is before the earliest acceptable date of 1582-10-15."
 msgstr ""
 
-#: src/data/data-in.c:272 src/data/data-in.c:462
+#: src/data/data-in.c:271 src/data/data-in.c:461
 msgid "Field contents are not numeric."
 msgstr ""
 
 msgid "Field contents are not numeric."
 msgstr ""
 
-#: src/data/data-in.c:274 src/data/data-in.c:464
+#: src/data/data-in.c:273 src/data/data-in.c:463
 msgid "Number followed by garbage."
 msgstr ""
 
 msgid "Number followed by garbage."
 msgstr ""
 
-#: src/data/data-in.c:285
+#: src/data/data-in.c:284
 msgid "Invalid numeric syntax."
 msgstr ""
 
 msgid "Invalid numeric syntax."
 msgstr ""
 
-#: src/data/data-in.c:294 src/data/data-in.c:477
+#: src/data/data-in.c:293 src/data/data-in.c:476
 msgid "Too-large number set to system-missing."
 msgstr ""
 
 msgid "Too-large number set to system-missing."
 msgstr ""
 
-#: src/data/data-in.c:299 src/data/data-in.c:482
+#: src/data/data-in.c:298 src/data/data-in.c:481
 msgid "Too-small number set to zero."
 msgstr ""
 
 msgid "Too-small number set to zero."
 msgstr ""
 
-#: src/data/data-in.c:325
+#: src/data/data-in.c:324
 msgid "All characters in field must be digits."
 msgstr ""
 
 msgid "All characters in field must be digits."
 msgstr ""
 
-#: src/data/data-in.c:348
+#: src/data/data-in.c:347
 msgid "Unrecognized character in field."
 msgstr ""
 
 msgid "Unrecognized character in field."
 msgstr ""
 
-#: src/data/data-in.c:372 src/data/data-in.c:636
+#: src/data/data-in.c:371 src/data/data-in.c:635
 msgid "Field must have even length."
 msgstr ""
 
 msgid "Field must have even length."
 msgstr ""
 
-#: src/data/data-in.c:377 src/data/data-in.c:642
+#: src/data/data-in.c:376 src/data/data-in.c:641
 msgid "Field must contain only hex digits."
 msgstr ""
 
 msgid "Field must contain only hex digits."
 msgstr ""
 
-#: src/data/data-in.c:681 src/data/data-in.c:728
+#: src/data/data-in.c:680 src/data/data-in.c:727
 msgid "Syntax error in date field."
 msgstr ""
 
 msgid "Syntax error in date field."
 msgstr ""
 
-#: src/data/data-in.c:697
+#: src/data/data-in.c:696
 #, c-format
 msgid "Day (%ld) must be between 1 and 31."
 msgstr ""
 
 #, c-format
 msgid "Day (%ld) must be between 1 and 31."
 msgstr ""
 
-#: src/data/data-in.c:744
+#: src/data/data-in.c:743
 msgid "Delimiter expected between fields in date."
 msgstr ""
 
 msgid "Delimiter expected between fields in date."
 msgstr ""
 
-#: src/data/data-in.c:818
+#: src/data/data-in.c:817
 msgid ""
 "Unrecognized month format.  Months may be specified as Arabic or Roman "
 "numerals or as at least 3 letters of their English names."
 msgstr ""
 
 msgid ""
 "Unrecognized month format.  Months may be specified as Arabic or Roman "
 "numerals or as at least 3 letters of their English names."
 msgstr ""
 
-#: src/data/data-in.c:845
+#: src/data/data-in.c:844
 #, c-format
 msgid "Year (%ld) must be between 1582 and 19999."
 msgstr ""
 
 #, c-format
 msgid "Year (%ld) must be between 1582 and 19999."
 msgstr ""
 
-#: src/data/data-in.c:857
+#: src/data/data-in.c:856
 #, c-format
 msgid "Trailing garbage \"%.*s\" following date."
 msgstr ""
 
 #, c-format
 msgid "Trailing garbage \"%.*s\" following date."
 msgstr ""
 
-#: src/data/data-in.c:873
+#: src/data/data-in.c:872
 msgid "Julian day must have exactly three digits."
 msgstr ""
 
 msgid "Julian day must have exactly three digits."
 msgstr ""
 
-#: src/data/data-in.c:878
+#: src/data/data-in.c:877
 #, c-format
 msgid "Julian day (%ld) must be between 1 and 366."
 msgstr ""
 
 #, c-format
 msgid "Julian day (%ld) must be between 1 and 366."
 msgstr ""
 
-#: src/data/data-in.c:902
+#: src/data/data-in.c:901
 #, c-format
 msgid "Quarter (%ld) must be between 1 and 4."
 msgstr ""
 
 #, c-format
 msgid "Quarter (%ld) must be between 1 and 4."
 msgstr ""
 
-#: src/data/data-in.c:922
+#: src/data/data-in.c:921
 #, c-format
 msgid "Week (%ld) must be between 1 and 53."
 msgstr ""
 
 #, c-format
 msgid "Week (%ld) must be between 1 and 53."
 msgstr ""
 
-#: src/data/data-in.c:935
+#: src/data/data-in.c:934
 msgid "Delimiter expected between fields in time."
 msgstr ""
 
 msgid "Delimiter expected between fields in time."
 msgstr ""
 
-#: src/data/data-in.c:955
+#: src/data/data-in.c:954
 #, c-format
 msgid "Minute (%ld) must be between 0 and 59."
 msgstr ""
 
 #, c-format
 msgid "Minute (%ld) must be between 0 and 59."
 msgstr ""
 
-#: src/data/data-in.c:995
+#: src/data/data-in.c:994
 msgid ""
 "Unrecognized weekday name.  At least the first two letters of an English "
 "weekday name must be specified."
 msgstr ""
 
 msgid ""
 "Unrecognized weekday name.  At least the first two letters of an English "
 "weekday name must be specified."
 msgstr ""
 
-#: src/data/data-in.c:1133
+#: src/data/data-in.c:1132
 #, fuzzy, c-format
 msgid "`%c' expected in date field."
 msgstr "plotzlich ist der Datei beendet"
 
 #, fuzzy, c-format
 msgid "`%c' expected in date field."
 msgstr "plotzlich ist der Datei beendet"
 
-#: src/data/data-in.c:1174
+#: src/data/data-in.c:1173
 #, fuzzy, c-format
 msgid "column %d"
 msgstr "Spalten"
 
 #, fuzzy, c-format
 msgid "column %d"
 msgstr "Spalten"
 
-#: src/data/data-in.c:1176
+#: src/data/data-in.c:1175
 #, fuzzy, c-format
 msgid "columns %d-%d"
 msgstr "Spalten"
 
 #, fuzzy, c-format
 msgid "columns %d-%d"
 msgstr "Spalten"
 
-#: src/data/data-in.c:1180
+#: src/data/data-in.c:1179
 #, c-format
 msgid "%s field) "
 msgstr ""
 
 #, c-format
 msgid "%s field) "
 msgstr ""
 
-#: src/data/data-out.c:470
+#: src/data/data-out.c:469
 #, c-format
 msgid "Weekday number %f is not between 1 and 7."
 msgstr ""
 
 #, c-format
 msgid "Weekday number %f is not between 1 and 7."
 msgstr ""
 
-#: src/data/data-out.c:491
+#: src/data/data-out.c:490
 #, c-format
 msgid "Month number %f is not between 1 and 12."
 msgstr ""
 
 #, c-format
 msgid "Month number %f is not between 1 and 12."
 msgstr ""
 
-#: src/data/dictionary.c:676
+#: src/data/dictionary.c:700
 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 ""
 
 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:1156
+#: src/data/dictionary.c:1180
 msgid "Variable suffix too large."
 msgstr ""
 
 msgid "Variable suffix too large."
 msgstr ""
 
-#: src/data/fastfile.c:536
+#: src/data/fastfile.c:535
 #, c-format
 msgid "%s: Removing temporary file: %s."
 msgstr ""
 
 #, c-format
 msgid "%s: Removing temporary file: %s."
 msgstr ""
 
-#: src/data/fastfile.c:660
+#: src/data/fastfile.c:659
 #, c-format
 msgid "Error writing temporary file: %s."
 msgstr ""
 
 #, c-format
 msgid "Error writing temporary file: %s."
 msgstr ""
 
-#: src/data/fastfile.c:688
+#: src/data/fastfile.c:687
 #, c-format
 msgid "%s: Opening temporary file: %s."
 msgstr ""
 
 #, c-format
 msgid "%s: Opening temporary file: %s."
 msgstr ""
 
-#: src/data/fastfile.c:732
+#: src/data/fastfile.c:731
 #, c-format
 msgid "%s: Seeking temporary file: %s."
 msgstr ""
 
 #, c-format
 msgid "%s: Seeking temporary file: %s."
 msgstr ""
 
-#: src/data/fastfile.c:754
+#: src/data/fastfile.c:753
 #, c-format
 msgid "%s: Reading temporary file: %s."
 msgstr ""
 
 #, c-format
 msgid "%s: Reading temporary file: %s."
 msgstr ""
 
-#: src/data/fastfile.c:757
+#: src/data/fastfile.c:756
 #, c-format
 msgid "%s: Temporary file ended unexpectedly."
 msgstr ""
 
 #, c-format
 msgid "%s: Temporary file ended unexpectedly."
 msgstr ""
 
-#: src/data/file-handle-def.c:304
+#: src/data/file-handle-def.c:303
 #, c-format
 msgid "Can't open %s as a %s because it is already open as a %s."
 msgstr ""
 
 #, c-format
 msgid "Can't open %s as a %s because it is already open as a %s."
 msgstr ""
 
-#: src/data/file-handle-def.c:311
+#: src/data/file-handle-def.c:310
 #, c-format
 msgid "Can't open %s as a %s for %s because it is already open for %s."
 msgstr ""
 
 #, c-format
 msgid "Can't open %s as a %s for %s because it is already open for %s."
 msgstr ""
 
-#: src/data/file-handle-def.c:319
+#: src/data/file-handle-def.c:318
 #, c-format
 msgid "Can't re-open %s as a %s for %s."
 msgstr ""
 
 #, c-format
 msgid "Can't re-open %s as a %s for %s."
 msgstr ""
 
-#: src/data/file-name.c:194
+#: src/data/file-name.c:193
 #, c-format
 msgid "searching for \"%s\" in path \"%s\""
 msgstr ""
 
 #, c-format
 msgid "searching for \"%s\" in path \"%s\""
 msgstr ""
 
-#: src/data/file-name.c:220
+#: src/data/file-name.c:219
 #, c-format
 msgid "...found \"%s\""
 msgstr ""
 
 #, c-format
 msgid "...found \"%s\""
 msgstr ""
 
-#: src/data/file-name.c:227
+#: src/data/file-name.c:226
 msgid "...not found"
 msgstr ""
 
 msgid "...not found"
 msgstr ""
 
-#: src/data/file-name.c:579
+#: src/data/file-name.c:578
 #, c-format
 msgid "Not opening pipe file `%s' because SAFER option set."
 msgstr ""
 
 #, c-format
 msgid "Not opening pipe file `%s' because SAFER option set."
 msgstr ""
 
-#: src/data/format.c:219
+#: src/data/format.c:218
 msgid "Input format"
 msgstr ""
 
 msgid "Input format"
 msgstr ""
 
-#: src/data/format.c:219
+#: src/data/format.c:218
 msgid "Output format"
 msgstr ""
 
 msgid "Output format"
 msgstr ""
 
-#: src/data/format.c:228
+#: src/data/format.c:227
 #, c-format
 msgid "Format %s may not be used for input."
 msgstr ""
 
 #, c-format
 msgid "Format %s may not be used for input."
 msgstr ""
 
-#: src/data/format.c:235
+#: src/data/format.c:234
 #, c-format
 msgid "%s specifies width %d, but %s requires an even width."
 msgstr ""
 
 #, c-format
 msgid "%s specifies width %d, but %s requires an even width."
 msgstr ""
 
-#: src/data/format.c:244
+#: src/data/format.c:243
 #, c-format
 msgid "%s %s specifies width %d, but %s requires a width between %d and %d."
 msgstr ""
 
 #, c-format
 msgid "%s %s specifies width %d, but %s requires a width between %d and %d."
 msgstr ""
 
-#: src/data/format.c:253
+#: src/data/format.c:252
 #, c-format
 msgid "%s %s specifies %d decimal place, but %s does not allow any decimals."
 msgid_plural ""
 #, c-format
 msgid "%s %s specifies %d decimal place, but %s does not allow any decimals."
 msgid_plural ""
@@ -281,7 +281,7 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/data/format.c:264
+#: src/data/format.c:263
 #, c-format
 msgid ""
 "%s %s specifies %d decimal place, but the given width allows at most %d "
 #, c-format
 msgid ""
 "%s %s specifies %d decimal place, but the given width allows at most %d "
@@ -292,7 +292,7 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/data/format.c:271
+#: src/data/format.c:270
 #, c-format
 msgid ""
 "%s %s specifies %d decimal place, but the given width does not allow for any "
 #, c-format
 msgid ""
 "%s %s specifies %d decimal place, but the given width does not allow for any "
@@ -303,485 +303,485 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/data/format.c:310
+#: src/data/format.c:309
 #, c-format
 msgid "%s variables are not compatible with %s format %s."
 msgstr ""
 
 #, c-format
 msgid "%s variables are not compatible with %s format %s."
 msgstr ""
 
-#: src/data/format.c:311 src/data/por-file-reader.c:490
-#: src/data/sys-file-reader.c:603 src/ui/gui/psppire.glade:1227
-#: src/ui/gui/psppire-var-store.c:451
+#: src/data/format.c:310 src/data/por-file-reader.c:489
+#: src/data/sys-file-reader.c:602 src/ui/gui/psppire.glade:1227
+#: src/ui/gui/psppire-var-store.c:484
 msgid "String"
 msgstr "Zeichenkette"
 
 msgid "String"
 msgstr "Zeichenkette"
 
-#: src/data/format.c:311 src/data/por-file-reader.c:490
-#: src/data/sys-file-reader.c:603 src/ui/gui/psppire.glade:1088
-#: src/ui/gui/psppire-var-store.c:444
+#: src/data/format.c:310 src/data/por-file-reader.c:489
+#: src/data/sys-file-reader.c:602 src/ui/gui/psppire.glade:1088
+#: src/ui/gui/psppire-var-store.c:477
 msgid "Numeric"
 msgstr "Nummer"
 
 msgid "Numeric"
 msgstr "Nummer"
 
-#: src/data/format.c:312 src/data/sys-file-reader.c:1023
-#: src/data/sys-file-reader.c:1025
+#: src/data/format.c:311 src/data/sys-file-reader.c:1022
+#: src/data/sys-file-reader.c:1024
+#: src/language/dictionary/apply-dictionary.c:77
 #: src/language/dictionary/apply-dictionary.c:78
 #: src/language/dictionary/apply-dictionary.c:78
-#: src/language/dictionary/apply-dictionary.c:79
-#: src/language/xforms/recode.c:468 src/language/xforms/recode.c:469
-#: src/language/xforms/recode.c:481 src/language/xforms/recode.c:482
+#: src/language/xforms/recode.c:467 src/language/xforms/recode.c:468
+#: src/language/xforms/recode.c:480 src/language/xforms/recode.c:481
 msgid "numeric"
 msgstr "numerisch"
 
 msgid "numeric"
 msgstr "numerisch"
 
-#: src/data/format.c:312 src/data/sys-file-reader.c:1023
-#: src/data/sys-file-reader.c:1025
+#: src/data/format.c:311 src/data/sys-file-reader.c:1022
+#: src/data/sys-file-reader.c:1024
+#: src/language/dictionary/apply-dictionary.c:77
 #: src/language/dictionary/apply-dictionary.c:78
 #: src/language/dictionary/apply-dictionary.c:78
-#: src/language/dictionary/apply-dictionary.c:79
-#: src/language/xforms/recode.c:468 src/language/xforms/recode.c:469
-#: src/language/xforms/recode.c:481 src/language/xforms/recode.c:482
+#: src/language/xforms/recode.c:467 src/language/xforms/recode.c:468
+#: src/language/xforms/recode.c:480 src/language/xforms/recode.c:481
 msgid "string"
 msgstr "kette"
 
 msgid "string"
 msgstr "kette"
 
-#: src/data/format.c:330
+#: src/data/format.c:329
 #, c-format
 msgid "String variable with width %d is not compatible with format %s."
 msgstr ""
 
 #, c-format
 msgid "String variable with width %d is not compatible with format %s."
 msgstr ""
 
-#: src/data/make-file.c:60
+#: src/data/make-file.c:59
 #, c-format
 msgid "%s: Creating temporary file: %s."
 msgstr ""
 
 #, c-format
 msgid "%s: Creating temporary file: %s."
 msgstr ""
 
-#: src/data/make-file.c:102
+#: src/data/make-file.c:101
 #, c-format
 msgid "%s: Creating file: %s."
 msgstr ""
 
 #, c-format
 msgid "%s: Creating file: %s."
 msgstr ""
 
-#: src/data/por-file-reader.c:94
+#: src/data/por-file-reader.c:93
 #, c-format
 msgid "portable file %s corrupt at offset %ld: "
 msgstr ""
 
 #, c-format
 msgid "portable file %s corrupt at offset %ld: "
 msgstr ""
 
-#: src/data/por-file-reader.c:130
+#: src/data/por-file-reader.c:129
 msgid "unexpected end of file"
 msgstr "plotzlich ist der Datei beendet"
 
 msgid "unexpected end of file"
 msgstr "plotzlich ist der Datei beendet"
 
-#: src/data/por-file-reader.c:189
+#: src/data/por-file-reader.c:188
 #, c-format
 msgid ""
 "An error occurred while opening \"%s\" for reading as a portable file: %s."
 msgstr ""
 
 #, c-format
 msgid ""
 "An error occurred while opening \"%s\" for reading as a portable file: %s."
 msgstr ""
 
-#: src/data/por-file-reader.c:206
+#: src/data/por-file-reader.c:205
 msgid "Data record expected."
 msgstr ""
 
 msgid "Data record expected."
 msgstr ""
 
-#: src/data/por-file-reader.c:314
+#: src/data/por-file-reader.c:313
 msgid "Missing numeric terminator."
 msgstr ""
 
 msgid "Missing numeric terminator."
 msgstr ""
 
-#: src/data/por-file-reader.c:337
+#: src/data/por-file-reader.c:336
 msgid "Invalid integer."
 msgstr ""
 
 msgid "Invalid integer."
 msgstr ""
 
-#: src/data/por-file-reader.c:348
+#: src/data/por-file-reader.c:347
 #, c-format
 msgid "Bad string length %d."
 msgstr ""
 
 #, c-format
 msgid "Bad string length %d."
 msgstr ""
 
-#: src/data/por-file-reader.c:409
+#: src/data/por-file-reader.c:408
 #, c-format
 msgid "%s: Not a portable file."
 msgstr ""
 
 #, c-format
 msgid "%s: Not a portable file."
 msgstr ""
 
-#: src/data/por-file-reader.c:434
+#: src/data/por-file-reader.c:433
 #, c-format
 msgid "Bad date string length %d."
 msgstr ""
 
 #, c-format
 msgid "Bad date string length %d."
 msgstr ""
 
-#: src/data/por-file-reader.c:436
+#: src/data/por-file-reader.c:435
 #, c-format
 msgid "Bad time string length %d."
 msgstr ""
 
 #, c-format
 msgid "Bad time string length %d."
 msgstr ""
 
-#: src/data/por-file-reader.c:476
+#: src/data/por-file-reader.c:475
 #, c-format
 msgid "%s: Bad format specifier byte (%d)."
 msgstr ""
 
 #, c-format
 msgid "%s: Bad format specifier byte (%d)."
 msgstr ""
 
-#: src/data/por-file-reader.c:489
+#: src/data/por-file-reader.c:488
 #, c-format
 msgid "%s variable %s has invalid format specifier %s."
 msgstr ""
 
 #, c-format
 msgid "%s variable %s has invalid format specifier %s."
 msgstr ""
 
-#: src/data/por-file-reader.c:508
+#: src/data/por-file-reader.c:507
 msgid "Expected variable count record."
 msgstr ""
 
 msgid "Expected variable count record."
 msgstr ""
 
-#: src/data/por-file-reader.c:512
+#: src/data/por-file-reader.c:511
 #, c-format
 msgid "Invalid number of variables %d."
 msgstr ""
 
 #, c-format
 msgid "Invalid number of variables %d."
 msgstr ""
 
-#: src/data/por-file-reader.c:522
+#: src/data/por-file-reader.c:521
 #, c-format
 msgid "Weight variable name (%s) truncated."
 msgstr ""
 
 #, c-format
 msgid "Weight variable name (%s) truncated."
 msgstr ""
 
-#: src/data/por-file-reader.c:536
+#: src/data/por-file-reader.c:535
 msgid "Expected variable record."
 msgstr ""
 
 msgid "Expected variable record."
 msgstr ""
 
-#: src/data/por-file-reader.c:540
+#: src/data/por-file-reader.c:539
 #, c-format
 msgid "Invalid variable width %d."
 msgstr ""
 
 #, c-format
 msgid "Invalid variable width %d."
 msgstr ""
 
-#: src/data/por-file-reader.c:548
+#: src/data/por-file-reader.c:547
 #, c-format
 msgid "position %d: Invalid variable name `%s'."
 msgstr ""
 
 #, c-format
 msgid "position %d: Invalid variable name `%s'."
 msgstr ""
 
-#: src/data/por-file-reader.c:556 src/language/expressions/evaluate.c:170
+#: src/data/por-file-reader.c:555 src/language/expressions/evaluate.c:169
 #, c-format
 msgid "Duplicate variable name %s."
 msgstr ""
 
 #, c-format
 msgid "Duplicate variable name %s."
 msgstr ""
 
-#: src/data/por-file-reader.c:597
+#: src/data/por-file-reader.c:596
 #, c-format
 msgid "Weighting variable %s not present in dictionary."
 msgstr ""
 
 #, c-format
 msgid "Weighting variable %s not present in dictionary."
 msgstr ""
 
-#: src/data/por-file-reader.c:644
+#: src/data/por-file-reader.c:643
 #, c-format
 msgid "Unknown variable %s while parsing value labels."
 msgstr ""
 
 #, c-format
 msgid "Unknown variable %s while parsing value labels."
 msgstr ""
 
-#: src/data/por-file-reader.c:647
+#: src/data/por-file-reader.c:646
 #, c-format
 msgid ""
 "Cannot assign value labels to %s and %s, which have different variable types "
 "or widths."
 msgstr ""
 
 #, c-format
 msgid ""
 "Cannot assign value labels to %s and %s, which have different variable types "
 "or widths."
 msgstr ""
 
-#: src/data/por-file-reader.c:671
+#: src/data/por-file-reader.c:670
 #, c-format
 msgid "Duplicate label for value %g for variable %s."
 msgstr ""
 
 #, c-format
 msgid "Duplicate label for value %g for variable %s."
 msgstr ""
 
-#: src/data/por-file-reader.c:674
+#: src/data/por-file-reader.c:673
 #, c-format
 msgid "Duplicate label for value `%.*s' for variable %s."
 msgstr ""
 
 #, c-format
 msgid "Duplicate label for value `%.*s' for variable %s."
 msgstr ""
 
-#: src/data/por-file-writer.c:147
+#: src/data/por-file-writer.c:146
 #, c-format
 msgid "Invalid decimal digits count %d.  Treating as %d."
 msgstr ""
 
 #, c-format
 msgid "Invalid decimal digits count %d.  Treating as %d."
 msgstr ""
 
-#: src/data/por-file-writer.c:167
+#: src/data/por-file-writer.c:166
 #, c-format
 msgid ""
 "An error occurred while opening \"%s\" for writing as a portable file: %s."
 msgstr ""
 
 #, c-format
 msgid ""
 "An error occurred while opening \"%s\" for writing as a portable file: %s."
 msgstr ""
 
-#: src/data/por-file-writer.c:452
+#: src/data/por-file-writer.c:451
 #, c-format
 msgid "An I/O error occurred writing portable file \"%s\"."
 msgstr ""
 
 #, c-format
 msgid "An I/O error occurred writing portable file \"%s\"."
 msgstr ""
 
-#: src/data/scratch-reader.c:64
+#: src/data/scratch-reader.c:63
 #, c-format
 msgid ""
 "Scratch file handle %s has not yet been written, using SAVE or another "
 "procedure, so it cannot yet be used for reading."
 msgstr ""
 
 #, c-format
 msgid ""
 "Scratch file handle %s has not yet been written, using SAVE or another "
 "procedure, so it cannot yet be used for reading."
 msgstr ""
 
-#: src/data/settings.c:136
+#: src/data/settings.c:135
 #, c-format
 msgid "Could not access definition for terminal `%s'."
 msgstr ""
 
 #, c-format
 msgid "Could not access definition for terminal `%s'."
 msgstr ""
 
-#: src/data/sys-file-reader.c:208
+#: src/data/sys-file-reader.c:207
 #, c-format
 msgid "Error opening \"%s\" for reading as a system file: %s."
 msgstr ""
 
 #, c-format
 msgid "Error opening \"%s\" for reading as a system file: %s."
 msgstr ""
 
-#: src/data/sys-file-reader.c:238
+#: src/data/sys-file-reader.c:237
 msgid "Misplaced type 4 record."
 msgstr ""
 
 msgid "Misplaced type 4 record."
 msgstr ""
 
-#: src/data/sys-file-reader.c:249
+#: src/data/sys-file-reader.c:248
 #, c-format
 msgid "Unrecognized record type %d."
 msgstr ""
 
 #, c-format
 msgid "Unrecognized record type %d."
 msgstr ""
 
-#: src/data/sys-file-reader.c:258
+#: src/data/sys-file-reader.c:257
 #, c-format
 msgid "File header claims %d variable positions but %d were read from file."
 msgstr ""
 
 #, c-format
 msgid "File header claims %d variable positions but %d were read from file."
 msgstr ""
 
-#: src/data/sys-file-reader.c:290
+#: src/data/sys-file-reader.c:289
 #, c-format
 msgid "Error closing system file \"%s\": %s."
 msgstr ""
 
 #, c-format
 msgid "Error closing system file \"%s\": %s."
 msgstr ""
 
-#: src/data/sys-file-reader.c:350 src/data/sys-file-reader.c:360
+#: src/data/sys-file-reader.c:349 src/data/sys-file-reader.c:359
 #, fuzzy
 msgid "This is not an SPSS system file."
 msgstr "\"%s\" ist kein Systemdatei und kein Tragbardatei."
 
 #, fuzzy
 msgid "This is not an SPSS system file."
 msgstr "\"%s\" ist kein Systemdatei und kein Tragbardatei."
 
-#: src/data/sys-file-reader.c:378
+#: src/data/sys-file-reader.c:377
 #, c-format
 msgid ""
 "Compression bias (%g) is not the usual value of 100, or system file uses "
 "unrecognized floating-point format."
 msgstr ""
 
 #, c-format
 msgid ""
 "Compression bias (%g) is not the usual value of 100, or system file uses "
 "unrecognized floating-point format."
 msgstr ""
 
-#: src/data/sys-file-reader.c:452
+#: src/data/sys-file-reader.c:451
 #, c-format
 msgid "Invalid variable name `%s'."
 msgstr ""
 
 #, c-format
 msgid "Invalid variable name `%s'."
 msgstr ""
 
-#: src/data/sys-file-reader.c:456
+#: src/data/sys-file-reader.c:455
 #, c-format
 msgid "Bad variable width %d."
 msgstr ""
 
 #, c-format
 msgid "Bad variable width %d."
 msgstr ""
 
-#: src/data/sys-file-reader.c:460
+#: src/data/sys-file-reader.c:459
 #, c-format
 msgid "Duplicate variable name `%s' within system file."
 msgstr ""
 
 #, c-format
 msgid "Duplicate variable name `%s' within system file."
 msgstr ""
 
-#: src/data/sys-file-reader.c:468
+#: src/data/sys-file-reader.c:467
 msgid "Variable label indicator field is not 0 or 1."
 msgstr ""
 
 msgid "Variable label indicator field is not 0 or 1."
 msgstr ""
 
-#: src/data/sys-file-reader.c:476
+#: src/data/sys-file-reader.c:475
 #, c-format
 msgid "Variable %s has label of invalid length %d."
 msgstr ""
 
 #, c-format
 msgid "Variable %s has label of invalid length %d."
 msgstr ""
 
-#: src/data/sys-file-reader.c:487
+#: src/data/sys-file-reader.c:486
 msgid "Missing value indicator field is not -3, -2, 0, 1, 2, or 3."
 msgstr ""
 
 msgid "Missing value indicator field is not -3, -2, 0, 1, 2, or 3."
 msgstr ""
 
-#: src/data/sys-file-reader.c:523
+#: src/data/sys-file-reader.c:522
 #, c-format
 msgid "String variable %s may not have missing values specified as a range."
 msgstr ""
 
 #, c-format
 msgid "String variable %s may not have missing values specified as a range."
 msgstr ""
 
-#: src/data/sys-file-reader.c:528
+#: src/data/sys-file-reader.c:527
 #, c-format
 msgid "Long string variable %s may not have missing values."
 msgstr ""
 
 #, c-format
 msgid "Long string variable %s may not have missing values."
 msgstr ""
 
-#: src/data/sys-file-reader.c:550
+#: src/data/sys-file-reader.c:549
 msgid "Missing string continuation record."
 msgstr ""
 
 msgid "Missing string continuation record."
 msgstr ""
 
-#: src/data/sys-file-reader.c:584
+#: src/data/sys-file-reader.c:583
 #, c-format
 msgid "Unknown variable format %d."
 msgstr ""
 
 #, c-format
 msgid "Unknown variable format %d."
 msgstr ""
 
-#: src/data/sys-file-reader.c:602
+#: src/data/sys-file-reader.c:601
 #, c-format
 msgid "%s variable %s has invalid %s format %s."
 msgstr ""
 
 #, c-format
 msgid "%s variable %s has invalid %s format %s."
 msgstr ""
 
-#: src/data/sys-file-reader.c:605
+#: src/data/sys-file-reader.c:604
 #, fuzzy
 msgid "print"
 msgstr "Drucken"
 
 #, fuzzy
 msgid "print"
 msgstr "Drucken"
 
-#: src/data/sys-file-reader.c:605
+#: src/data/sys-file-reader.c:604
 #, fuzzy
 msgid "write"
 msgstr "Drucken"
 
 #, fuzzy
 msgid "write"
 msgstr "Drucken"
 
-#: src/data/sys-file-reader.c:609
+#: src/data/sys-file-reader.c:608
 msgid "Suppressing further invalid format warnings."
 msgstr ""
 
 msgid "Suppressing further invalid format warnings."
 msgstr ""
 
-#: src/data/sys-file-reader.c:627
+#: src/data/sys-file-reader.c:626
 msgid "Weighting variable must be numeric."
 msgstr ""
 
 msgid "Weighting variable must be numeric."
 msgstr ""
 
-#: src/data/sys-file-reader.c:641
+#: src/data/sys-file-reader.c:640
 msgid "Multiple type 6 (document) records."
 msgstr ""
 
 msgid "Multiple type 6 (document) records."
 msgstr ""
 
-#: src/data/sys-file-reader.c:645
+#: src/data/sys-file-reader.c:644
 #, c-format
 msgid "Number of document lines (%d) must be greater than 0."
 msgstr ""
 
 #, c-format
 msgid "Number of document lines (%d) must be greater than 0."
 msgstr ""
 
-#: src/data/sys-file-reader.c:716
+#: src/data/sys-file-reader.c:715
 #, c-format
 msgid "Unrecognized record type 7, subtype %d."
 msgstr ""
 
 #, c-format
 msgid "Unrecognized record type 7, subtype %d."
 msgstr ""
 
-#: src/data/sys-file-reader.c:740
+#: src/data/sys-file-reader.c:739
 #, c-format
 msgid "Bad size (%d) or count (%d) field on record type 7, subtype 3."
 msgstr ""
 
 #, c-format
 msgid "Bad size (%d) or count (%d) field on record type 7, subtype 3."
 msgstr ""
 
-#: src/data/sys-file-reader.c:755
+#: src/data/sys-file-reader.c:754
 #, c-format
 msgid ""
 "Floating-point representation indicated by system file (%d) differs from "
 "expected (%d)."
 msgstr ""
 
 #, c-format
 msgid ""
 "Floating-point representation indicated by system file (%d) differs from "
 "expected (%d)."
 msgstr ""
 
-#: src/data/sys-file-reader.c:768
+#: src/data/sys-file-reader.c:767
 msgid "little-endian"
 msgstr ""
 
 msgid "little-endian"
 msgstr ""
 
-#: src/data/sys-file-reader.c:768
+#: src/data/sys-file-reader.c:767
 msgid "big-endian"
 msgstr ""
 
 msgid "big-endian"
 msgstr ""
 
-#: src/data/sys-file-reader.c:769
+#: src/data/sys-file-reader.c:768
 #, c-format
 msgid ""
 "Integer format indicated by system file (%s) differs from expected (%s)."
 msgstr ""
 
 #, c-format
 msgid ""
 "Integer format indicated by system file (%s) differs from expected (%s)."
 msgstr ""
 
-#: src/data/sys-file-reader.c:785
+#: src/data/sys-file-reader.c:784
 #, c-format
 msgid "Bad size (%d) or count (%d) on extension 4."
 msgstr ""
 
 #, c-format
 msgid "Bad size (%d) or count (%d) on extension 4."
 msgstr ""
 
-#: src/data/sys-file-reader.c:789
+#: src/data/sys-file-reader.c:788
 #, c-format
 msgid "File specifies unexpected value %g as SYSMIS."
 msgstr ""
 
 #, c-format
 msgid "File specifies unexpected value %g as SYSMIS."
 msgstr ""
 
-#: src/data/sys-file-reader.c:791
+#: src/data/sys-file-reader.c:790
 #, c-format
 msgid "File specifies unexpected value %g as HIGHEST."
 msgstr ""
 
 #, c-format
 msgid "File specifies unexpected value %g as HIGHEST."
 msgstr ""
 
-#: src/data/sys-file-reader.c:793
+#: src/data/sys-file-reader.c:792
 #, c-format
 msgid "File specifies unexpected value %g as LOWEST."
 msgstr ""
 
 #, c-format
 msgid "File specifies unexpected value %g as LOWEST."
 msgstr ""
 
-#: src/data/sys-file-reader.c:807
+#: src/data/sys-file-reader.c:806
 #, c-format
 msgid "Bad size (%d) or count (%d) on extension 11."
 msgstr ""
 
 #, c-format
 msgid "Bad size (%d) or count (%d) on extension 11."
 msgstr ""
 
-#: src/data/sys-file-reader.c:820
+#: src/data/sys-file-reader.c:819
 msgid "Invalid variable display parameters.  Default parameters substituted."
 msgstr ""
 
 msgid "Invalid variable display parameters.  Default parameters substituted."
 msgstr ""
 
-#: src/data/sys-file-reader.c:855
+#: src/data/sys-file-reader.c:854
 #, c-format
 msgid "Long variable mapping from %s to invalid variable name `%s'."
 msgstr ""
 
 #, c-format
 msgid "Long variable mapping from %s to invalid variable name `%s'."
 msgstr ""
 
-#: src/data/sys-file-reader.c:865
+#: src/data/sys-file-reader.c:864
 #, c-format
 msgid "Duplicate long variable name `%s' within system file."
 msgstr ""
 
 #, c-format
 msgid "Duplicate long variable name `%s' within system file."
 msgstr ""
 
-#: src/data/sys-file-reader.c:903
+#: src/data/sys-file-reader.c:902
 #, c-format
 msgid "%s listed as string of length %s in length table."
 msgstr ""
 
 #, c-format
 msgid "%s listed as string of length %s in length table."
 msgstr ""
 
-#: src/data/sys-file-reader.c:917
+#: src/data/sys-file-reader.c:916
 #, c-format
 msgid "Very long string %s overflows dictionary."
 msgstr ""
 
 #, c-format
 msgid "Very long string %s overflows dictionary."
 msgstr ""
 
-#: src/data/sys-file-reader.c:964
+#: src/data/sys-file-reader.c:963
 #, c-format
 msgid "Invalid number of labels: %d.  Ignoring labels."
 msgstr ""
 
 #, c-format
 msgid "Invalid number of labels: %d.  Ignoring labels."
 msgstr ""
 
-#: src/data/sys-file-reader.c:995
+#: src/data/sys-file-reader.c:994
 msgid ""
 "Variable index record (type 4) does not immediately follow value label "
 "record (type 3) as it should."
 msgstr ""
 
 msgid ""
 "Variable index record (type 4) does not immediately follow value label "
 "record (type 3) as it should."
 msgstr ""
 
-#: src/data/sys-file-reader.c:1002
+#: src/data/sys-file-reader.c:1001
 #, c-format
 msgid ""
 "Number of variables associated with a value label (%d) is not between 1 and "
 "the number of variables (%d)."
 msgstr ""
 
 #, c-format
 msgid ""
 "Number of variables associated with a value label (%d) is not between 1 and "
 "the number of variables (%d)."
 msgstr ""
 
-#: src/data/sys-file-reader.c:1012
+#: src/data/sys-file-reader.c:1011
 #, c-format
 msgid "Value labels are not allowed on long string variables (%s)."
 msgstr ""
 
 #, c-format
 msgid "Value labels are not allowed on long string variables (%s)."
 msgstr ""
 
-#: src/data/sys-file-reader.c:1019
+#: src/data/sys-file-reader.c:1018
 #, c-format
 msgid ""
 "Variables associated with value label are not all of identical type.  "
 "Variable %s is %s, but variable %s is %s."
 msgstr ""
 
 #, c-format
 msgid ""
 "Variables associated with value label are not all of identical type.  "
 "Variable %s is %s, but variable %s is %s."
 msgstr ""
 
-#: src/data/sys-file-reader.c:1052
+#: src/data/sys-file-reader.c:1051
 #, c-format
 msgid "Duplicate value label for %g on %s."
 msgstr ""
 
 #, c-format
 msgid "Duplicate value label for %g on %s."
 msgstr ""
 
-#: src/data/sys-file-reader.c:1055
+#: src/data/sys-file-reader.c:1054
 #, c-format
 msgid "Duplicate value label for \"%.*s\" on %s."
 msgstr ""
 
 #, c-format
 msgid "Duplicate value label for \"%.*s\" on %s."
 msgstr ""
 
-#: src/data/sys-file-reader.c:1173
+#: src/data/sys-file-reader.c:1172
 msgid "File ends in partial case."
 msgstr ""
 
 msgid "File ends in partial case."
 msgstr ""
 
-#: src/data/sys-file-reader.c:1269 src/data/sys-file-reader.c:1305
+#: src/data/sys-file-reader.c:1268 src/data/sys-file-reader.c:1304
 msgid "Compressed data is corrupt."
 msgstr ""
 
 msgid "Compressed data is corrupt."
 msgstr ""
 
-#: src/data/sys-file-reader.c:1378
+#: src/data/sys-file-reader.c:1377
 #, c-format
 msgid "Variable index %d not in valid range 1...%d."
 msgstr ""
 
 #, c-format
 msgid "Variable index %d not in valid range 1...%d."
 msgstr ""
 
-#: src/data/sys-file-reader.c:1383
+#: src/data/sys-file-reader.c:1382
 #, c-format
 msgid "Variable index %d refers to long string continuation."
 msgstr ""
 
 #, c-format
 msgid "Variable index %d refers to long string continuation."
 msgstr ""
 
-#: src/data/sys-file-reader.c:1469
+#: src/data/sys-file-reader.c:1468
 #, c-format
 msgid "Suppressed %d additional variable map warnings."
 msgstr ""
 
 #, c-format
 msgid "Suppressed %d additional variable map warnings."
 msgstr ""
 
-#: src/data/sys-file-reader.c:1482
+#: src/data/sys-file-reader.c:1481
 #, c-format
 msgid "Variable map refers to unknown variable %s."
 msgstr ""
 
 #, c-format
 msgid "Variable map refers to unknown variable %s."
 msgstr ""
 
-#: src/data/sys-file-reader.c:1558
+#: src/data/sys-file-reader.c:1557
 #, c-format
 msgid "System error: %s."
 msgstr ""
 
 #, c-format
 msgid "System error: %s."
 msgstr ""
 
-#: src/data/sys-file-reader.c:1560
+#: src/data/sys-file-reader.c:1559
 #, fuzzy
 msgid "Unexpected end of file."
 msgstr "plotzlich ist der Datei beendet"
 
 #, fuzzy
 msgid "Unexpected end of file."
 msgstr "plotzlich ist der Datei beendet"
 
-#: src/data/sys-file-writer.c:237
+#: src/data/sys-file-writer.c:236
 #, c-format
 msgid "Unknown system file version %d. Treating as version %d."
 msgstr ""
 
 #, c-format
 msgid "Unknown system file version %d. Treating as version %d."
 msgstr ""
 
-#: src/data/sys-file-writer.c:389
+#: src/data/sys-file-writer.c:388
 #, c-format
 msgid "Error opening \"%s\" for writing as a system file: %s."
 msgstr ""
 
 #, c-format
 msgid "Error opening \"%s\" for writing as a system file: %s."
 msgstr ""
 
-#: src/data/sys-file-writer.c:1102
+#: src/data/sys-file-writer.c:1101
 #, c-format
 msgid "An I/O error occurred writing system file \"%s\"."
 msgstr ""
 #, c-format
 msgid "An I/O error occurred writing system file \"%s\"."
 msgstr ""
@@ -812,111 +812,111 @@ 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 ""
 
 msgid "`%s' may not be used as a variable name because it is a reserved word."
 msgstr ""
 
-#: src/data/variable.c:986
+#: src/data/variable.c:1002
 msgid "ordinary"
 msgstr ""
 
 msgid "ordinary"
 msgstr ""
 
-#: src/data/variable.c:988
+#: src/data/variable.c:1004
 msgid "system"
 msgstr ""
 
 msgid "system"
 msgstr ""
 
-#: src/data/variable.c:990
+#: src/data/variable.c:1006
 msgid "scratch"
 msgstr ""
 
 msgid "scratch"
 msgstr ""
 
-#: src/language/command.c:183
+#: src/language/command.c:182
 #, c-format
 msgid "%s is unimplemented."
 msgstr ""
 
 #, c-format
 msgid "%s is unimplemented."
 msgstr ""
 
-#: src/language/command.c:188
+#: src/language/command.c:187
 #, c-format
 msgid "%s may be used only in testing mode."
 msgstr ""
 
 #, c-format
 msgid "%s may be used only in testing mode."
 msgstr ""
 
-#: src/language/command.c:193
+#: src/language/command.c:192
 #, c-format
 msgid "%s may be used only in enhanced syntax mode."
 msgstr ""
 
 #, c-format
 msgid "%s may be used only in enhanced syntax mode."
 msgstr ""
 
-#: src/language/command.c:447
+#: src/language/command.c:446
 msgid "expecting command name"
 msgstr ""
 
 msgid "expecting command name"
 msgstr ""
 
-#: src/language/command.c:461
+#: src/language/command.c:460
 #, c-format
 msgid "Unknown command %s."
 msgstr ""
 
 #, c-format
 msgid "Unknown command %s."
 msgstr ""
 
-#: src/language/command.c:588
+#: src/language/command.c:587
 msgid "before the active file has been defined"
 msgstr ""
 
 msgid "before the active file has been defined"
 msgstr ""
 
-#: src/language/command.c:590
+#: src/language/command.c:589
 msgid "after the active file has been defined"
 msgstr ""
 
 msgid "after the active file has been defined"
 msgstr ""
 
-#: src/language/command.c:592
+#: src/language/command.c:591
 msgid "inside INPUT PROGRAM"
 msgstr ""
 
 msgid "inside INPUT PROGRAM"
 msgstr ""
 
-#: src/language/command.c:594
+#: src/language/command.c:593
 msgid "inside FILE TYPE"
 msgstr ""
 
 msgid "inside FILE TYPE"
 msgstr ""
 
-#: src/language/command.c:599
+#: src/language/command.c:598
 #, c-format
 msgid "%s or %s"
 msgstr ""
 
 #, c-format
 msgid "%s or %s"
 msgstr ""
 
-#: src/language/command.c:601
+#: src/language/command.c:600
 #, c-format
 msgid "%s, %s, or %s"
 msgstr ""
 
 #, c-format
 msgid "%s, %s, or %s"
 msgstr ""
 
-#: src/language/command.c:605
+#: src/language/command.c:604
 #, c-format
 msgid "%s is allowed only %s."
 msgstr ""
 
 #, c-format
 msgid "%s is allowed only %s."
 msgstr ""
 
-#: src/language/command.c:610
+#: src/language/command.c:609
 #, c-format
 msgid "%s is not allowed inside INPUT PROGRAM."
 msgstr ""
 
 #, c-format
 msgid "%s is not allowed inside INPUT PROGRAM."
 msgstr ""
 
-#: src/language/command.c:612
+#: src/language/command.c:611
 #, c-format
 msgid "%s is not allowed inside FILE TYPE."
 msgstr ""
 
 #, c-format
 msgid "%s is not allowed inside FILE TYPE."
 msgstr ""
 
-#: src/language/command.c:690 src/language/command.c:819
+#: src/language/command.c:689 src/language/command.c:818
 #: src/language/utilities/permissions.c:102
 msgid "This command not allowed when the SAFER option is set."
 msgstr ""
 
 #: src/language/utilities/permissions.c:102
 msgid "This command not allowed when the SAFER option is set."
 msgstr ""
 
-#: src/language/command.c:702
+#: src/language/command.c:701
 #, c-format
 msgid "Error removing `%s': %s."
 msgstr ""
 
 #, c-format
 msgid "Error removing `%s': %s."
 msgstr ""
 
-#: src/language/command.c:752
+#: src/language/command.c:751
 #, c-format
 msgid "Couldn't fork: %s."
 msgstr ""
 
 #, c-format
 msgid "Couldn't fork: %s."
 msgstr ""
 
-#: src/language/command.c:794
+#: src/language/command.c:793
 #, c-format
 msgid "Error executing command: %s."
 msgstr ""
 
 #, c-format
 msgid "Error executing command: %s."
 msgstr ""
 
-#: src/language/command.c:803 src/language/data-io/matrix-data.c:539
-#: src/language/data-io/print-space.c:76 src/language/dictionary/vector.c:203
-#: src/language/lexer/lexer.c:466 src/language/stats/autorecode.c:154
-#: src/language/xforms/select-if.c:62
+#: src/language/command.c:802 src/language/data-io/matrix-data.c:538
+#: src/language/data-io/print-space.c:75 src/language/dictionary/vector.c:202
+#: src/language/lexer/lexer.c:465 src/language/stats/autorecode.c:153
+#: src/language/xforms/select-if.c:61
 msgid "expecting end of command"
 msgstr ""
 
 msgid "expecting end of command"
 msgstr ""
 
-#: src/language/command.c:840
+#: src/language/command.c:839
 msgid "No operating system support for this command."
 msgstr ""
 
 msgid "No operating system support for this command."
 msgstr ""
 
@@ -935,243 +935,243 @@ msgstr ""
 msgid "This command cannot appear outside %s...%s."
 msgstr ""
 
 msgid "This command cannot appear outside %s...%s."
 msgstr ""
 
-#: src/language/control/do-if.c:180
+#: src/language/control/do-if.c:179
 msgid "This command may not follow ELSE in DO IF...END IF."
 msgstr ""
 
 msgid "This command may not follow ELSE in DO IF...END IF."
 msgstr ""
 
-#: src/language/control/repeat.c:171
+#: src/language/control/repeat.c:170
 #, c-format
 msgid "Dummy variable name \"%s\" hides dictionary variable \"%s\"."
 msgstr ""
 
 #, c-format
 msgid "Dummy variable name \"%s\" hides dictionary variable \"%s\"."
 msgstr ""
 
-#: src/language/control/repeat.c:176
+#: src/language/control/repeat.c:175
 #, c-format
 msgid "Dummy variable name \"%s\" is given twice."
 msgstr ""
 
 #, c-format
 msgid "Dummy variable name \"%s\" is given twice."
 msgstr ""
 
-#: src/language/control/repeat.c:222
+#: src/language/control/repeat.c:221
 #, c-format
 msgid ""
 "Dummy variable \"%.*s\" had %d substitutions, so \"%.*s\" must also, but %d "
 "were specified."
 msgstr ""
 
 #, c-format
 msgid ""
 "Dummy variable \"%.*s\" had %d substitutions, so \"%.*s\" must also, but %d "
 "were specified."
 msgstr ""
 
-#: src/language/control/repeat.c:334
+#: src/language/control/repeat.c:333
 msgid "DO REPEAT may not nest in compatibility mode."
 msgstr ""
 
 msgid "DO REPEAT may not nest in compatibility mode."
 msgstr ""
 
-#: src/language/control/repeat.c:434
+#: src/language/control/repeat.c:433
 #, c-format
 msgid "%ld TO %ld is an invalid range."
 msgstr ""
 
 #, c-format
 msgid "%ld TO %ld is an invalid range."
 msgstr ""
 
-#: src/language/control/repeat.c:469
+#: src/language/control/repeat.c:468
 msgid "String expected."
 msgstr ""
 
 msgid "String expected."
 msgstr ""
 
-#: src/language/control/repeat.c:488
+#: src/language/control/repeat.c:487
 msgid "No matching DO REPEAT."
 msgstr ""
 
 msgid "No matching DO REPEAT."
 msgstr ""
 
-#: src/language/control/temporary.c:49
+#: src/language/control/temporary.c:48
 msgid ""
 "This command may only appear once between procedures and procedure-like "
 "commands."
 msgstr ""
 
 msgid ""
 "This command may only appear once between procedures and procedure-like "
 "commands."
 msgstr ""
 
-#: src/language/data-io/data-list.c:175
+#: src/language/data-io/data-list.c:174
 msgid "The END subcommand may only be specified once."
 msgstr ""
 
 msgid "The END subcommand may only be specified once."
 msgstr ""
 
-#: src/language/data-io/data-list.c:210
+#: src/language/data-io/data-list.c:209
 msgid "Only one of FIXED, FREE, or LIST may be specified."
 msgstr ""
 
 msgid "Only one of FIXED, FREE, or LIST may be specified."
 msgstr ""
 
-#: src/language/data-io/data-list.c:350 src/language/data-io/data-list.c:494
+#: src/language/data-io/data-list.c:349 src/language/data-io/data-list.c:493
 #, c-format
 msgid "%s is a duplicate variable name."
 msgstr ""
 
 #, c-format
 msgid "%s is a duplicate variable name."
 msgstr ""
 
-#: src/language/data-io/data-list.c:357
+#: src/language/data-io/data-list.c:356
 #, c-format
 msgid "There is already a variable %s of a different type."
 msgstr ""
 
 #, c-format
 msgid "There is already a variable %s of a different type."
 msgstr ""
 
-#: src/language/data-io/data-list.c:364
+#: src/language/data-io/data-list.c:363
 #, c-format
 msgid "There is already a string variable %s of a different width."
 msgstr ""
 
 #, c-format
 msgid "There is already a string variable %s of a different width."
 msgstr ""
 
-#: src/language/data-io/data-list.c:385
+#: src/language/data-io/data-list.c:384
 msgid "At least one variable must be specified."
 msgstr ""
 
 msgid "At least one variable must be specified."
 msgstr ""
 
-#: src/language/data-io/data-list.c:392
+#: src/language/data-io/data-list.c:391
 msgid ""
 "Variables are specified on records that should not exist according to "
 "RECORDS subcommand."
 msgstr ""
 
 msgid ""
 "Variables are specified on records that should not exist according to "
 "RECORDS subcommand."
 msgstr ""
 
-#: src/language/data-io/data-list.c:417 src/language/data-io/data-list.c:526
-#: src/language/data-io/print.c:397 src/language/dictionary/split-file.c:86
-#: src/language/dictionary/sys-file-info.c:161
-#: src/language/dictionary/sys-file-info.c:396
-#: src/language/stats/descriptives.c:891
+#: src/language/data-io/data-list.c:416 src/language/data-io/data-list.c:525
+#: src/language/data-io/print.c:396 src/language/dictionary/split-file.c:85
+#: src/language/dictionary/sys-file-info.c:160
+#: src/language/dictionary/sys-file-info.c:395
+#: src/language/stats/descriptives.c:890
 msgid "Variable"
 msgstr ""
 
 msgid "Variable"
 msgstr ""
 
-#: src/language/data-io/data-list.c:418 src/language/data-io/print.c:398
+#: src/language/data-io/data-list.c:417 src/language/data-io/print.c:397
 msgid "Record"
 msgstr ""
 
 msgid "Record"
 msgstr ""
 
-#: src/language/data-io/data-list.c:419 src/language/data-io/print.c:399
-#: src/ui/gui/var-sheet.c:78
+#: src/language/data-io/data-list.c:418 src/language/data-io/print.c:398
+#: src/ui/gui/var-sheet.c:77
 msgid "Columns"
 msgstr "Spalten"
 
 msgid "Columns"
 msgstr "Spalten"
 
-#: src/language/data-io/data-list.c:420 src/language/data-io/data-list.c:527
-#: src/language/data-io/print.c:400
+#: src/language/data-io/data-list.c:419 src/language/data-io/data-list.c:526
+#: src/language/data-io/print.c:399
 msgid "Format"
 msgstr ""
 
 msgid "Format"
 msgstr ""
 
-#: src/language/data-io/data-list.c:438
+#: src/language/data-io/data-list.c:437
 #, c-format
 msgid "Reading %d record from %s."
 msgid_plural "Reading %d records from %s."
 msgstr[0] ""
 msgstr[1] ""
 
 #, c-format
 msgid "Reading %d record from %s."
 msgid_plural "Reading %d records from %s."
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/language/data-io/data-list.c:541
+#: src/language/data-io/data-list.c:540
 #, c-format
 msgid "Reading free-form data from %s."
 msgstr ""
 
 #, c-format
 msgid "Reading free-form data from %s."
 msgstr ""
 
-#: src/language/data-io/data-list.c:587
+#: src/language/data-io/data-list.c:586
 msgid "Quoted string extends beyond end of line."
 msgstr ""
 
 msgid "Quoted string extends beyond end of line."
 msgstr ""
 
-#: src/language/data-io/data-list.c:672
+#: src/language/data-io/data-list.c:671
 #, c-format
 msgid "Partial case of %d of %d records discarded."
 msgstr ""
 
 #, c-format
 msgid "Partial case of %d of %d records discarded."
 msgstr ""
 
-#: src/language/data-io/data-list.c:710
+#: src/language/data-io/data-list.c:709
 #, c-format
 msgid "Partial case discarded.  The first variable missing was %s."
 msgstr ""
 
 #, c-format
 msgid "Partial case discarded.  The first variable missing was %s."
 msgstr ""
 
-#: src/language/data-io/data-list.c:741
+#: src/language/data-io/data-list.c:740
 #, c-format
 msgid ""
 "Missing value(s) for all variables from %s onward.  These will be filled "
 "with the system-missing value or blanks, as appropriate."
 msgstr ""
 
 #, c-format
 msgid ""
 "Missing value(s) for all variables from %s onward.  These will be filled "
 "with the system-missing value or blanks, as appropriate."
 msgstr ""
 
-#: src/language/data-io/data-reader.c:140
+#: src/language/data-io/data-reader.c:139
 #, c-format
 msgid "Could not open \"%s\" for reading as a data file: %s."
 msgstr ""
 
 #, c-format
 msgid "Could not open \"%s\" for reading as a data file: %s."
 msgstr ""
 
-#: src/language/data-io/data-reader.c:177
+#: src/language/data-io/data-reader.c:176
 msgid ""
 "Unexpected end-of-file while reading data in BEGIN DATA.  This probably "
 "indicates a missing or misformatted END DATA command.  END DATA must appear "
 "by itself on a single line with exactly one space between words."
 msgstr ""
 
 msgid ""
 "Unexpected end-of-file while reading data in BEGIN DATA.  This probably "
 "indicates a missing or misformatted END DATA command.  END DATA must appear "
 "by itself on a single line with exactly one space between words."
 msgstr ""
 
-#: src/language/data-io/data-reader.c:209
-#: src/language/data-io/data-reader.c:222
+#: src/language/data-io/data-reader.c:208
+#: src/language/data-io/data-reader.c:221
 #, c-format
 msgid "Error reading file %s: %s."
 msgstr ""
 
 #, c-format
 msgid "Error reading file %s: %s."
 msgstr ""
 
-#: src/language/data-io/data-reader.c:225
+#: src/language/data-io/data-reader.c:224
 #, c-format
 msgid "%s: Partial record at end of file."
 msgstr ""
 
 #, c-format
 msgid "%s: Partial record at end of file."
 msgstr ""
 
-#: src/language/data-io/data-reader.c:276
+#: src/language/data-io/data-reader.c:275
 #, c-format
 msgid "Attempt to read beyond end-of-file on file %s."
 msgstr ""
 
 #, c-format
 msgid "Attempt to read beyond end-of-file on file %s."
 msgstr ""
 
-#: src/language/data-io/data-reader.c:279
+#: src/language/data-io/data-reader.c:278
 msgid "Attempt to read beyond END DATA."
 msgstr ""
 
 msgid "Attempt to read beyond END DATA."
 msgstr ""
 
-#: src/language/data-io/data-reader.c:437
+#: src/language/data-io/data-reader.c:436
 msgid ""
 "This command is not valid here since the current input program does not "
 "access the inline file."
 msgstr ""
 
 msgid ""
 "This command is not valid here since the current input program does not "
 "access the inline file."
 msgstr ""
 
-#: src/language/data-io/data-writer.c:66
+#: src/language/data-io/data-writer.c:65
 #, c-format
 msgid "An error occurred while opening \"%s\" for writing as a data file: %s."
 msgstr ""
 
 #, c-format
 msgid "An error occurred while opening \"%s\" for writing as a data file: %s."
 msgstr ""
 
-#: src/language/data-io/data-writer.c:150
+#: src/language/data-io/data-writer.c:149
 #, c-format
 msgid "I/O error occurred writing data file \"%s\"."
 msgstr ""
 
 #, c-format
 msgid "I/O error occurred writing data file \"%s\"."
 msgstr ""
 
-#: src/language/data-io/file-handle.q:68
+#: src/language/data-io/file-handle.q:67
 #, c-format
 msgid ""
 "File handle %s is already defined.  Use CLOSE FILE HANDLE before redefining "
 "a file handle."
 msgstr ""
 
 #, c-format
 msgid ""
 "File handle %s is already defined.  Use CLOSE FILE HANDLE before redefining "
 "a file handle."
 msgstr ""
 
-#: src/language/data-io/file-handle.q:100
+#: src/language/data-io/file-handle.q:99
 #, c-format
 msgid ""
 "Fixed-length records were specified on /RECFORM, but record length was not "
 "specified on /LRECL.  Assuming %d-character records."
 msgstr ""
 
 #, c-format
 msgid ""
 "Fixed-length records were specified on /RECFORM, but record length was not "
 "specified on /LRECL.  Assuming %d-character records."
 msgstr ""
 
-#: src/language/data-io/file-handle.q:105
+#: src/language/data-io/file-handle.q:104
 #, c-format
 msgid ""
 "Record length (%ld) must be at least one byte.  Assuming %d-character "
 "records."
 msgstr ""
 
 #, c-format
 msgid ""
 "Record length (%ld) must be at least one byte.  Assuming %d-character "
 "records."
 msgstr ""
 
-#: src/language/data-io/file-handle.q:151
+#: src/language/data-io/file-handle.q:150
 msgid "file"
 msgstr ""
 
 msgid "file"
 msgstr ""
 
-#: src/language/data-io/file-handle.q:153
+#: src/language/data-io/file-handle.q:152
 msgid "inline file"
 msgstr ""
 
 msgid "inline file"
 msgstr ""
 
-#: src/language/data-io/file-handle.q:155
+#: src/language/data-io/file-handle.q:154
 msgid "scratch file"
 msgstr ""
 
 msgid "scratch file"
 msgstr ""
 
-#: src/language/data-io/file-handle.q:176
+#: src/language/data-io/file-handle.q:175
 msgid "expecting a file name or handle name"
 msgstr ""
 
 msgid "expecting a file name or handle name"
 msgstr ""
 
-#: src/language/data-io/file-handle.q:203
+#: src/language/data-io/file-handle.q:202
 #, c-format
 msgid "Handle for %s not allowed here."
 msgstr ""
 
 #, c-format
 msgid "Handle for %s not allowed here."
 msgstr ""
 
-#: src/language/data-io/get.c:117
+#: src/language/data-io/get.c:116
 msgid "expecting COMM or TAPE"
 msgstr ""
 
 msgid "expecting COMM or TAPE"
 msgstr ""
 
-#: src/language/data-io/get.c:361 src/language/data-io/get.c:375
-#: src/language/data-io/get.c:400
+#: src/language/data-io/get.c:360 src/language/data-io/get.c:374
+#: src/language/data-io/get.c:399
 #, c-format
 msgid "expecting %s or %s"
 msgstr ""
 
 #, c-format
 msgid "expecting %s or %s"
 msgstr ""
 
-#: src/language/data-io/get.c:609 src/language/data-io/print.c:178
+#: src/language/data-io/get.c:608 src/language/data-io/print.c:177
 msgid "expecting a valid subcommand"
 msgstr ""
 
 msgid "expecting a valid subcommand"
 msgstr ""
 
-#: src/language/data-io/get.c:642
+#: src/language/data-io/get.c:641
 #, c-format
 msgid ""
 "Cannot rename %s as %s because there already exists a variable named %s.  To "
 #, c-format
 msgid ""
 "Cannot rename %s as %s because there already exists a variable named %s.  To "
@@ -1179,801 +1179,801 @@ msgid ""
 "as \"/RENAME (A=B)(B=C)(C=A)\", or equivalently, \"/RENAME (A B C=B C A)\"."
 msgstr ""
 
 "as \"/RENAME (A=B)(B=C)(C=A)\", or equivalently, \"/RENAME (A B C=B C A)\"."
 msgstr ""
 
-#: src/language/data-io/get.c:668
+#: src/language/data-io/get.c:667
 msgid "`=' expected after variable list."
 msgstr ""
 
 msgid "`=' expected after variable list."
 msgstr ""
 
-#: src/language/data-io/get.c:675
+#: src/language/data-io/get.c:674
 #, c-format
 msgid ""
 "Number of variables on left side of `=' (%d) does not match number of "
 "variables on right side (%d), in parenthesized group %d of RENAME subcommand."
 msgstr ""
 
 #, c-format
 msgid ""
 "Number of variables on left side of `=' (%d) does not match number of "
 "variables on right side (%d), in parenthesized group %d of RENAME subcommand."
 msgstr ""
 
-#: src/language/data-io/get.c:688
+#: src/language/data-io/get.c:687
 #, c-format
 msgid "Requested renaming duplicates variable name %s."
 msgstr ""
 
 #, c-format
 msgid "Requested renaming duplicates variable name %s."
 msgstr ""
 
-#: src/language/data-io/get.c:718
+#: src/language/data-io/get.c:717
 msgid "Cannot DROP all variables from dictionary."
 msgstr ""
 
 msgid "Cannot DROP all variables from dictionary."
 msgstr ""
 
-#: src/language/data-io/get.c:896
+#: src/language/data-io/get.c:895
 msgid "The active file may not be specified more than once."
 msgstr ""
 
 msgid "The active file may not be specified more than once."
 msgstr ""
 
-#: src/language/data-io/get.c:904
+#: src/language/data-io/get.c:903
 msgid "Cannot specify the active file since no active file has been defined."
 msgstr ""
 
 msgid "Cannot specify the active file since no active file has been defined."
 msgstr ""
 
-#: src/language/data-io/get.c:911
+#: src/language/data-io/get.c:910
 msgid ""
 "MATCH FILES may not be used after TEMPORARY when the active file is an input "
 "source.  Temporary transformations will be made permanent."
 msgstr ""
 
 msgid ""
 "MATCH FILES may not be used after TEMPORARY when the active file is an input "
 "source.  Temporary transformations will be made permanent."
 msgstr ""
 
-#: src/language/data-io/get.c:947
+#: src/language/data-io/get.c:946
 msgid "Multiple IN subcommands for a single FILE or TABLE."
 msgstr ""
 
 msgid "Multiple IN subcommands for a single FILE or TABLE."
 msgstr ""
 
-#: src/language/data-io/get.c:967
+#: src/language/data-io/get.c:966
 msgid "BY may appear at most once."
 msgstr ""
 
 msgid "BY may appear at most once."
 msgstr ""
 
-#: src/language/data-io/get.c:988
+#: src/language/data-io/get.c:987
 #, c-format
 msgid "File %s lacks BY variable %s."
 msgstr ""
 
 #, c-format
 msgid "File %s lacks BY variable %s."
 msgstr ""
 
-#: src/language/data-io/get.c:1002
+#: src/language/data-io/get.c:1001
 msgid "FIRST may appear at most once."
 msgstr ""
 
 msgid "FIRST may appear at most once."
 msgstr ""
 
-#: src/language/data-io/get.c:1016
+#: src/language/data-io/get.c:1015
 msgid "LAST may appear at most once."
 msgstr ""
 
 msgid "LAST may appear at most once."
 msgstr ""
 
-#: src/language/data-io/get.c:1057
+#: src/language/data-io/get.c:1056
 msgid "BY is required when TABLE is specified."
 msgstr ""
 
 msgid "BY is required when TABLE is specified."
 msgstr ""
 
-#: src/language/data-io/get.c:1062
+#: src/language/data-io/get.c:1061
 msgid "BY is required when IN is specified."
 msgstr ""
 
 msgid "BY is required when IN is specified."
 msgstr ""
 
-#: src/language/data-io/get.c:1091
+#: src/language/data-io/get.c:1090
 #, c-format
 msgid "IN variable name %s duplicates an existing variable name."
 msgstr ""
 
 #, c-format
 msgid "IN variable name %s duplicates an existing variable name."
 msgstr ""
 
-#: src/language/data-io/get.c:1547
+#: src/language/data-io/get.c:1546
 #, c-format
 msgid ""
 "Variable %s in file %s (%s) has different type or width from the same "
 "variable in earlier file (%s)."
 msgstr ""
 
 #, c-format
 msgid ""
 "Variable %s in file %s (%s) has different type or width from the same "
 "variable in earlier file (%s)."
 msgstr ""
 
-#: src/language/data-io/inpt-pgm.c:134
+#: src/language/data-io/inpt-pgm.c:133
 msgid "Unexpected end-of-file within INPUT PROGRAM."
 msgstr ""
 
 msgid "Unexpected end-of-file within INPUT PROGRAM."
 msgstr ""
 
-#: src/language/data-io/inpt-pgm.c:147
+#: src/language/data-io/inpt-pgm.c:146
 msgid "Input program did not create any variables."
 msgstr ""
 
 msgid "Input program did not create any variables."
 msgstr ""
 
-#: src/language/data-io/inpt-pgm.c:341
+#: src/language/data-io/inpt-pgm.c:340
 msgid "COLUMN subcommand multiply specified."
 msgstr ""
 
 msgid "COLUMN subcommand multiply specified."
 msgstr ""
 
-#: src/language/data-io/inpt-pgm.c:389
+#: src/language/data-io/inpt-pgm.c:388
 msgid ""
 "REREAD: Column numbers must be positive finite numbers.  Column set to 1."
 msgstr ""
 
 msgid ""
 "REREAD: Column numbers must be positive finite numbers.  Column set to 1."
 msgstr ""
 
-#: src/language/data-io/list.q:155 src/language/stats/descriptives.c:365
+#: src/language/data-io/list.q:154 src/language/stats/descriptives.c:364
 msgid "No variables specified."
 msgstr ""
 
 msgid "No variables specified."
 msgstr ""
 
-#: src/language/data-io/list.q:163
+#: src/language/data-io/list.q:162
 #, c-format
 msgid ""
 "The first case (%ld) specified precedes the last case (%ld) specified.  The "
 "values will be swapped."
 msgstr ""
 
 #, c-format
 msgid ""
 "The first case (%ld) specified precedes the last case (%ld) specified.  The "
 "values will be swapped."
 msgstr ""
 
-#: src/language/data-io/list.q:171
+#: src/language/data-io/list.q:170
 #, c-format
 msgid ""
 "The first case (%ld) to list is less than 1.  The value is being reset to 1."
 msgstr ""
 
 #, c-format
 msgid ""
 "The first case (%ld) to list is less than 1.  The value is being reset to 1."
 msgstr ""
 
-#: src/language/data-io/list.q:177
+#: src/language/data-io/list.q:176
 #, c-format
 msgid ""
 "The last case (%ld) to list is less than 1.  The value is being reset to 1."
 msgstr ""
 
 #, c-format
 msgid ""
 "The last case (%ld) to list is less than 1.  The value is being reset to 1."
 msgstr ""
 
-#: src/language/data-io/list.q:183
+#: src/language/data-io/list.q:182
 #, c-format
 msgid "The step value %ld is less than 1.  The value is being reset to 1."
 msgstr ""
 
 #, c-format
 msgid "The step value %ld is less than 1.  The value is being reset to 1."
 msgstr ""
 
-#: src/language/data-io/list.q:209
+#: src/language/data-io/list.q:208
 msgid "`/FORMAT WEIGHT' specified, but weighting is not on."
 msgstr ""
 
 msgid "`/FORMAT WEIGHT' specified, but weighting is not on."
 msgstr ""
 
-#: src/language/data-io/list.q:443
+#: src/language/data-io/list.q:442
 msgid "Line"
 msgstr ""
 
 msgid "Line"
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:219
+#: src/language/data-io/matrix-data.c:218
 msgid "VARIABLES subcommand multiply specified."
 msgstr ""
 
 msgid "VARIABLES subcommand multiply specified."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:234
+#: src/language/data-io/matrix-data.c:233
 msgid "VARNAME_ cannot be explicitly specified on VARIABLES."
 msgstr ""
 
 msgid "VARNAME_ cannot be explicitly specified on VARIABLES."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:295
+#: src/language/data-io/matrix-data.c:294
 msgid "in FORMAT subcommand"
 msgstr ""
 
 msgid "in FORMAT subcommand"
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:306
+#: src/language/data-io/matrix-data.c:305
 msgid "SPLIT subcommand multiply specified."
 msgstr ""
 
 msgid "SPLIT subcommand multiply specified."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:313
+#: src/language/data-io/matrix-data.c:312
 msgid "in SPLIT subcommand"
 msgstr ""
 
 msgid "in SPLIT subcommand"
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:323
+#: src/language/data-io/matrix-data.c:322
 msgid "Split variable may not be named ROWTYPE_ or VARNAME_."
 msgstr ""
 
 msgid "Split variable may not be named ROWTYPE_ or VARNAME_."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:357
+#: src/language/data-io/matrix-data.c:356
 #, c-format
 msgid "Split variable %s is already another type."
 msgstr ""
 
 #, c-format
 msgid "Split variable %s is already another type."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:372
+#: src/language/data-io/matrix-data.c:371
 msgid "FACTORS subcommand multiply specified."
 msgstr ""
 
 msgid "FACTORS subcommand multiply specified."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:390
+#: src/language/data-io/matrix-data.c:389
 #, c-format
 msgid "Factor variable %s is already another type."
 msgstr ""
 
 #, c-format
 msgid "Factor variable %s is already another type."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:405
+#: src/language/data-io/matrix-data.c:404
 msgid "CELLS subcommand multiply specified."
 msgstr ""
 
 msgid "CELLS subcommand multiply specified."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:411
-#: src/language/data-io/matrix-data.c:430
+#: src/language/data-io/matrix-data.c:410
+#: src/language/data-io/matrix-data.c:429
 msgid "expecting positive integer"
 msgstr ""
 
 msgid "expecting positive integer"
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:424
+#: src/language/data-io/matrix-data.c:423
 msgid "N subcommand multiply specified."
 msgstr ""
 
 msgid "N subcommand multiply specified."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:445
+#: src/language/data-io/matrix-data.c:444
 msgid "CONTENTS subcommand multiply specified."
 msgstr ""
 
 msgid "CONTENTS subcommand multiply specified."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:465
+#: src/language/data-io/matrix-data.c:464
 msgid "Nested parentheses not allowed."
 msgstr ""
 
 msgid "Nested parentheses not allowed."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:475
+#: src/language/data-io/matrix-data.c:474
 msgid "Mismatched right parenthesis (`(')."
 msgstr ""
 
 msgid "Mismatched right parenthesis (`(')."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:480
+#: src/language/data-io/matrix-data.c:479
 msgid "Empty parentheses not allowed."
 msgstr ""
 
 msgid "Empty parentheses not allowed."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:493
-#: src/language/data-io/matrix-data.c:501
+#: src/language/data-io/matrix-data.c:492
+#: src/language/data-io/matrix-data.c:500
 msgid "in CONTENTS subcommand"
 msgstr ""
 
 msgid "in CONTENTS subcommand"
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:508
+#: src/language/data-io/matrix-data.c:507
 #, c-format
 msgid "Content multiply specified for %s."
 msgstr ""
 
 #, c-format
 msgid "Content multiply specified for %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:525
+#: src/language/data-io/matrix-data.c:524
 msgid "Missing right parenthesis."
 msgstr ""
 
 msgid "Missing right parenthesis."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:545
+#: src/language/data-io/matrix-data.c:544
 msgid "Missing VARIABLES subcommand."
 msgstr ""
 
 msgid "Missing VARIABLES subcommand."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:551
+#: src/language/data-io/matrix-data.c:550
 msgid ""
 "CONTENTS subcommand not specified: assuming file contains only CORR matrix."
 msgstr ""
 
 msgid ""
 "CONTENTS subcommand not specified: assuming file contains only CORR matrix."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:561
+#: src/language/data-io/matrix-data.c:560
 msgid ""
 "Missing CELLS subcommand.  CELLS is required when ROWTYPE_ is not given in "
 "the data and factors are present."
 msgstr ""
 
 msgid ""
 "Missing CELLS subcommand.  CELLS is required when ROWTYPE_ is not given in "
 "the data and factors are present."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:569
+#: src/language/data-io/matrix-data.c:568
 msgid "Split file values must be present in the data when ROWTYPE_ is present."
 msgstr ""
 
 msgid "Split file values must be present in the data when ROWTYPE_ is present."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:622
+#: src/language/data-io/matrix-data.c:621
 msgid "No continuous variables specified."
 msgstr ""
 
 msgid "No continuous variables specified."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:841
+#: src/language/data-io/matrix-data.c:840
 msgid "Scope of string exceeds line."
 msgstr ""
 
 msgid "Scope of string exceeds line."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:894
+#: src/language/data-io/matrix-data.c:893
 #, c-format
 msgid "End of line expected %s while reading %s."
 msgstr ""
 
 #, c-format
 msgid "End of line expected %s while reading %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1085
+#: src/language/data-io/matrix-data.c:1084
 #, c-format
 msgid "expecting value for %s %s"
 msgstr ""
 
 #, c-format
 msgid "expecting value for %s %s"
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1250
+#: src/language/data-io/matrix-data.c:1249
 #, c-format
 msgid "Syntax error expecting SPLIT FILE value %s."
 msgstr ""
 
 #, c-format
 msgid "Syntax error expecting SPLIT FILE value %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1259
+#: src/language/data-io/matrix-data.c:1258
 #, c-format
 msgid "Expecting value %g for %s."
 msgstr ""
 
 #, c-format
 msgid "Expecting value %g for %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1300
-#: src/language/data-io/matrix-data.c:1782
+#: src/language/data-io/matrix-data.c:1299
+#: src/language/data-io/matrix-data.c:1781
 #, c-format
 msgid "Syntax error expecting factor value %s."
 msgstr ""
 
 #, c-format
 msgid "Syntax error expecting factor value %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1309
+#: src/language/data-io/matrix-data.c:1308
 #, c-format
 msgid "Syntax error expecting value %g for %s %s."
 msgstr ""
 
 #, c-format
 msgid "Syntax error expecting value %g for %s %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1558
+#: src/language/data-io/matrix-data.c:1557
 #, c-format
 msgid "Syntax error %s expecting SPLIT FILE value."
 msgstr ""
 
 #, c-format
 msgid "Syntax error %s expecting SPLIT FILE value."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1686
+#: src/language/data-io/matrix-data.c:1685
 #, c-format
 msgid ""
 "Expected %d lines of data for %s content; actually saw %d lines.  No data "
 "will be output for this content."
 msgstr ""
 
 #, c-format
 msgid ""
 "Expected %d lines of data for %s content; actually saw %d lines.  No data "
 "will be output for this content."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1724
+#: src/language/data-io/matrix-data.c:1723
 #, c-format
 msgid "Multiply specified ROWTYPE_ %s."
 msgstr ""
 
 #, c-format
 msgid "Multiply specified ROWTYPE_ %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1729
+#: src/language/data-io/matrix-data.c:1728
 #, c-format
 msgid "Syntax error %s expecting ROWTYPE_ string."
 msgstr ""
 
 #, c-format
 msgid "Syntax error %s expecting ROWTYPE_ string."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1749
+#: src/language/data-io/matrix-data.c:1748
 #, c-format
 msgid "Syntax error %s."
 msgstr ""
 
 #, c-format
 msgid "Syntax error %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1900
+#: src/language/data-io/matrix-data.c:1899
 #, c-format
 msgid "Duplicate specification for %s."
 msgstr ""
 
 #, c-format
 msgid "Duplicate specification for %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1912
+#: src/language/data-io/matrix-data.c:1911
 #, c-format
 msgid "Too many rows of matrix data for %s."
 msgstr ""
 
 #, c-format
 msgid "Too many rows of matrix data for %s."
 msgstr ""
 
-#: src/language/data-io/matrix-data.c:1956
+#: src/language/data-io/matrix-data.c:1955
 #, c-format
 msgid "Syntax error expecting value for %s %s."
 msgstr ""
 
 #, c-format
 msgid "Syntax error expecting value for %s %s."
 msgstr ""
 
-#: src/language/data-io/placement-parser.c:88
+#: src/language/data-io/placement-parser.c:87
 #, c-format
 msgid ""
 "Number of variables specified (%d) differs from number of variable formats (%"
 "d)."
 msgstr ""
 
 #, c-format
 msgid ""
 "Number of variables specified (%d) differs from number of variable formats (%"
 "d)."
 msgstr ""
 
-#: src/language/data-io/placement-parser.c:98
+#: src/language/data-io/placement-parser.c:97
 msgid ""
 "SPSS-like or Fortran-like format specification expected after variable names."
 msgstr ""
 
 msgid ""
 "SPSS-like or Fortran-like format specification expected after variable names."
 msgstr ""
 
-#: src/language/data-io/placement-parser.c:120
+#: src/language/data-io/placement-parser.c:119
 #, c-format
 msgid "The %d columns %d-%d can't be evenly divided into %d fields."
 msgstr ""
 
 #, c-format
 msgid "The %d columns %d-%d can't be evenly divided into %d fields."
 msgstr ""
 
-#: src/language/data-io/placement-parser.c:227
-#: src/language/lexer/format-parser.c:111
-#: src/language/lexer/format-parser.c:130
+#: src/language/data-io/placement-parser.c:226
+#: src/language/lexer/format-parser.c:110
+#: src/language/lexer/format-parser.c:129
 #, c-format
 msgid "Unknown format type \"%s\"."
 msgstr ""
 
 #, c-format
 msgid "Unknown format type \"%s\"."
 msgstr ""
 
-#: src/language/data-io/placement-parser.c:311
-#: src/language/data-io/placement-parser.c:325
+#: src/language/data-io/placement-parser.c:310
+#: src/language/data-io/placement-parser.c:324
 msgid "Column positions for fields must be positive."
 msgstr ""
 
 msgid "Column positions for fields must be positive."
 msgstr ""
 
-#: src/language/data-io/placement-parser.c:330
+#: src/language/data-io/placement-parser.c:329
 msgid "The ending column for a field must be greater than the starting column."
 msgstr ""
 
 msgid "The ending column for a field must be greater than the starting column."
 msgstr ""
 
-#: src/language/data-io/placement-parser.c:365
+#: src/language/data-io/placement-parser.c:364
 #, c-format
 msgid ""
 "The record number specified, %ld, is at or before the previous record, %d.  "
 "Data fields must be listed in order of increasing record number."
 msgstr ""
 
 #, c-format
 msgid ""
 "The record number specified, %ld, is at or before the previous record, %d.  "
 "Data fields must be listed in order of increasing record number."
 msgstr ""
 
-#: src/language/data-io/print.c:261
+#: src/language/data-io/print.c:260
 #, c-format
 msgid "Output calls for %d records but %d specified on RECORDS subcommand."
 msgstr ""
 
 #, c-format
 msgid "Output calls for %d records but %d specified on RECORDS subcommand."
 msgstr ""
 
-#: src/language/data-io/print.c:430
+#: src/language/data-io/print.c:429
 #, c-format
 msgid "Writing %d record to %s."
 msgid_plural "Writing %d records to %s."
 msgstr[0] ""
 msgstr[1] ""
 
 #, c-format
 msgid "Writing %d record to %s."
 msgid_plural "Writing %d records to %s."
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/language/data-io/print.c:434
+#: src/language/data-io/print.c:433
 #, c-format
 msgid "Writing %d record."
 msgid_plural "Writing %d records."
 msgstr[0] ""
 msgstr[1] ""
 
 #, c-format
 msgid "Writing %d record."
 msgid_plural "Writing %d records."
 msgstr[0] ""
 msgstr[1] ""
 
-#: src/language/data-io/print-space.c:117
+#: src/language/data-io/print-space.c:116
 msgid "The expression on PRINT SPACE evaluated to the system-missing value."
 msgstr ""
 
 msgid "The expression on PRINT SPACE evaluated to the system-missing value."
 msgstr ""
 
-#: src/language/data-io/print-space.c:120
+#: src/language/data-io/print-space.c:119
 #, c-format
 msgid "The expression on PRINT SPACE evaluated to %g."
 msgstr ""
 
 #, c-format
 msgid "The expression on PRINT SPACE evaluated to %g."
 msgstr ""
 
-#: src/language/dictionary/apply-dictionary.c:75
+#: src/language/dictionary/apply-dictionary.c:74
 #, c-format
 msgid "Variable %s is %s in target file, but %s in source file."
 msgstr ""
 
 #, c-format
 msgid "Variable %s is %s in target file, but %s in source file."
 msgstr ""
 
-#: src/language/dictionary/apply-dictionary.c:99
+#: src/language/dictionary/apply-dictionary.c:98
 #, c-format
 msgid "Cannot add value labels from source file to long string variable %s."
 msgstr ""
 
 #, c-format
 msgid "Cannot add value labels from source file to long string variable %s."
 msgstr ""
 
-#: src/language/dictionary/apply-dictionary.c:113
+#: src/language/dictionary/apply-dictionary.c:112
 #, c-format
 msgid ""
 "Cannot apply missing values from source file to long string variable %s."
 msgstr ""
 
 #, c-format
 msgid ""
 "Cannot apply missing values from source file to long string variable %s."
 msgstr ""
 
-#: src/language/dictionary/apply-dictionary.c:126
+#: src/language/dictionary/apply-dictionary.c:125
 msgid "No matching variables found between the source and target files."
 msgstr ""
 
 msgid "No matching variables found between the source and target files."
 msgstr ""
 
-#: src/language/dictionary/formats.c:92
+#: src/language/dictionary/formats.c:91
 msgid "`(' expected after variable list."
 msgstr ""
 
 msgid "`(' expected after variable list."
 msgstr ""
 
-#: src/language/dictionary/formats.c:102 src/language/dictionary/numeric.c:72
+#: src/language/dictionary/formats.c:101 src/language/dictionary/numeric.c:71
 msgid "`)' expected after output format."
 msgstr ""
 
 msgid "`)' expected after output format."
 msgstr ""
 
-#: src/language/dictionary/missing-values.c:59
-#: src/language/stats/aggregate.c:468
+#: src/language/dictionary/missing-values.c:58
+#: src/language/stats/aggregate.c:467
 msgid "expecting `('"
 msgstr ""
 
 msgid "expecting `('"
 msgstr ""
 
-#: src/language/dictionary/missing-values.c:75
+#: src/language/dictionary/missing-values.c:74
 #, c-format
 msgid ""
 "Cannot mix numeric variables (e.g. %s) and string variables (e.g. %s) within "
 "a single list."
 msgstr ""
 
 #, c-format
 msgid ""
 "Cannot mix numeric variables (e.g. %s) and string variables (e.g. %s) within "
 "a single list."
 msgstr ""
 
-#: src/language/dictionary/missing-values.c:120
+#: src/language/dictionary/missing-values.c:119
 #, c-format
 msgid "Truncating missing value to short string length (%d characters)."
 msgstr ""
 
 #, c-format
 msgid "Truncating missing value to short string length (%d characters)."
 msgstr ""
 
-#: src/language/dictionary/missing-values.c:142
+#: src/language/dictionary/missing-values.c:141
 #, c-format
 msgid "Missing values provided are too long to assign to variable of width %d."
 msgstr ""
 
 #, c-format
 msgid "Missing values provided are too long to assign to variable of width %d."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:96
+#: src/language/dictionary/modify-variables.c:95
 msgid ""
 "MODIFY VARS may not be used after TEMPORARY.  Temporary transformations will "
 "be made permanent."
 msgstr ""
 
 msgid ""
 "MODIFY VARS may not be used after TEMPORARY.  Temporary transformations will "
 "be made permanent."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:118
+#: src/language/dictionary/modify-variables.c:117
 msgid "REORDER subcommand may be given at most once."
 msgstr ""
 
 msgid "REORDER subcommand may be given at most once."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:141
+#: src/language/dictionary/modify-variables.c:140
 msgid "Cannot specify ALL after specifying a set of variables."
 msgstr ""
 
 msgid "Cannot specify ALL after specifying a set of variables."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:151
+#: src/language/dictionary/modify-variables.c:150
 msgid "`(' expected on REORDER subcommand."
 msgstr ""
 
 msgid "`(' expected on REORDER subcommand."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:163
+#: src/language/dictionary/modify-variables.c:162
 msgid "`)' expected following variable names on REORDER subcommand."
 msgstr ""
 
 msgid "`)' expected following variable names on REORDER subcommand."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:181
+#: src/language/dictionary/modify-variables.c:180
 msgid "RENAME subcommand may be given at most once."
 msgstr ""
 
 msgid "RENAME subcommand may be given at most once."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:194
+#: src/language/dictionary/modify-variables.c:193
 msgid "`(' expected on RENAME subcommand."
 msgstr ""
 
 msgid "`(' expected on RENAME subcommand."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:203
+#: src/language/dictionary/modify-variables.c:202
 msgid ""
 "`=' expected between lists of new and old variable names on RENAME "
 "subcommand."
 msgstr ""
 
 msgid ""
 "`=' expected between lists of new and old variable names on RENAME "
 "subcommand."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:212
+#: src/language/dictionary/modify-variables.c:211
 #, c-format
 msgid ""
 "Differing number of variables in old name list (%d) and in new name list (%"
 "d)."
 msgstr ""
 
 #, c-format
 msgid ""
 "Differing number of variables in old name list (%d) and in new name list (%"
 "d)."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:223
+#: src/language/dictionary/modify-variables.c:222
 msgid "`)' expected after variable lists on RENAME subcommand."
 msgstr ""
 
 msgid "`)' expected after variable lists on RENAME subcommand."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:237
+#: src/language/dictionary/modify-variables.c:236
 msgid ""
 "KEEP subcommand may be given at most once.  It may notbe given in "
 "conjunction with the DROP subcommand."
 msgstr ""
 
 msgid ""
 "KEEP subcommand may be given at most once.  It may notbe given in "
 "conjunction with the DROP subcommand."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:280
+#: src/language/dictionary/modify-variables.c:279
 msgid ""
 "DROP subcommand may be given at most once.  It may not be given in "
 "conjunction with the KEEP subcommand."
 msgstr ""
 
 msgid ""
 "DROP subcommand may be given at most once.  It may not be given in "
 "conjunction with the KEEP subcommand."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:306
+#: src/language/dictionary/modify-variables.c:305
 #, c-format
 msgid "Unrecognized subcommand name `%s'."
 msgstr ""
 
 #, c-format
 msgid "Unrecognized subcommand name `%s'."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:308
+#: src/language/dictionary/modify-variables.c:307
 msgid "Subcommand name expected."
 msgstr ""
 
 msgid "Subcommand name expected."
 msgstr ""
 
-#: src/language/dictionary/modify-variables.c:316
+#: src/language/dictionary/modify-variables.c:315
 msgid "`/' or `.' expected."
 msgstr ""
 
 msgid "`/' or `.' expected."
 msgstr ""
 
-#: src/language/dictionary/numeric.c:65
+#: src/language/dictionary/numeric.c:64
 #, c-format
 msgid "Format type %s may not be used with a numeric variable."
 msgstr ""
 
 #, c-format
 msgid "Format type %s may not be used with a numeric variable."
 msgstr ""
 
-#: src/language/dictionary/numeric.c:84 src/language/dictionary/numeric.c:153
-#: src/language/dictionary/vector.c:165
+#: src/language/dictionary/numeric.c:83 src/language/dictionary/numeric.c:152
+#: src/language/dictionary/vector.c:164
 #, c-format
 msgid "There is already a variable named %s."
 msgstr ""
 
 #, c-format
 msgid "There is already a variable named %s."
 msgstr ""
 
-#: src/language/dictionary/numeric.c:138
+#: src/language/dictionary/numeric.c:137
 #, c-format
 msgid "Format type %s may not be used with a string variable."
 msgstr ""
 
 #, c-format
 msgid "Format type %s may not be used with a string variable."
 msgstr ""
 
-#: src/language/dictionary/rename-variables.c:51
+#: src/language/dictionary/rename-variables.c:50
 msgid ""
 "RENAME VARS may not be used after TEMPORARY.  Temporary transformations will "
 "be made permanent."
 msgstr ""
 
 msgid ""
 "RENAME VARS may not be used after TEMPORARY.  Temporary transformations will "
 "be made permanent."
 msgstr ""
 
-#: src/language/dictionary/rename-variables.c:61
+#: src/language/dictionary/rename-variables.c:60
 msgid "`(' expected."
 msgstr ""
 
 msgid "`(' expected."
 msgstr ""
 
-#: src/language/dictionary/rename-variables.c:69
+#: src/language/dictionary/rename-variables.c:68
 msgid "`=' expected between lists of new and old variable names."
 msgstr ""
 
 msgid "`=' expected between lists of new and old variable names."
 msgstr ""
 
-#: src/language/dictionary/rename-variables.c:78
+#: src/language/dictionary/rename-variables.c:77
 #, c-format
 msgid ""
 "Differing number of variables in old name list (%u) and in new name list (%"
 "u)."
 msgstr ""
 
 #, c-format
 msgid ""
 "Differing number of variables in old name list (%u) and in new name list (%"
 "u)."
 msgstr ""
 
-#: src/language/dictionary/rename-variables.c:90
+#: src/language/dictionary/rename-variables.c:89
 msgid "`)' expected after variable names."
 msgstr ""
 
 msgid "`)' expected after variable names."
 msgstr ""
 
-#: src/language/dictionary/rename-variables.c:100
+#: src/language/dictionary/rename-variables.c:99
 #, c-format
 msgid "Renaming would duplicate variable name %s."
 msgstr ""
 
 #, c-format
 msgid "Renaming would duplicate variable name %s."
 msgstr ""
 
-#: src/language/dictionary/split-file.c:87
-#: src/language/dictionary/sys-file-info.c:550
-#: src/language/stats/crosstabs.q:1115 src/language/stats/crosstabs.q:1142
-#: src/language/stats/crosstabs.q:1162 src/language/stats/crosstabs.q:1184
-#: src/language/stats/examine.q:1193 src/language/stats/frequencies.q:1178
-#: src/language/stats/frequencies.q:1301
+#: src/language/dictionary/split-file.c:86
+#: src/language/dictionary/sys-file-info.c:549
+#: src/language/stats/crosstabs.q:1114 src/language/stats/crosstabs.q:1141
+#: src/language/stats/crosstabs.q:1161 src/language/stats/crosstabs.q:1183
+#: src/language/stats/examine.q:1193 src/language/stats/frequencies.q:1177
+#: src/language/stats/frequencies.q:1300
 msgid "Value"
 msgstr ""
 
 msgid "Value"
 msgstr ""
 
-#: src/language/dictionary/split-file.c:88
-#: src/language/dictionary/sys-file-info.c:403
-#: src/language/dictionary/sys-file-info.c:551 src/ui/gui/var-sheet.c:75
+#: src/language/dictionary/split-file.c:87
+#: src/language/dictionary/sys-file-info.c:402
+#: src/language/dictionary/sys-file-info.c:550 src/ui/gui/var-sheet.c:74
 msgid "Label"
 msgstr "Kennsatz"
 
 msgid "Label"
 msgstr "Kennsatz"
 
-#: src/language/dictionary/sys-file-info.c:110
+#: src/language/dictionary/sys-file-info.c:109
 msgid "File:"
 msgstr "Datei:"
 
 msgid "File:"
 msgstr "Datei:"
 
-#: src/language/dictionary/sys-file-info.c:112
+#: src/language/dictionary/sys-file-info.c:111
 msgid "Label:"
 msgstr "Kennsatz:"
 
 msgid "Label:"
 msgstr "Kennsatz:"
 
-#: src/language/dictionary/sys-file-info.c:116
+#: src/language/dictionary/sys-file-info.c:115
 msgid "No label."
 msgstr "Kein Kennsatz."
 
 msgid "No label."
 msgstr "Kein Kennsatz."
 
-#: src/language/dictionary/sys-file-info.c:119
+#: src/language/dictionary/sys-file-info.c:118
 msgid "Created:"
 msgstr "Gemacht:"
 
 msgid "Created:"
 msgstr "Gemacht:"
 
-#: src/language/dictionary/sys-file-info.c:122
+#: src/language/dictionary/sys-file-info.c:121
 msgid "Integer Format:"
 msgstr ""
 
 msgid "Integer Format:"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:124
+#: src/language/dictionary/sys-file-info.c:123
 msgid "Big Endian."
 msgstr ""
 
 msgid "Big Endian."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:125
+#: src/language/dictionary/sys-file-info.c:124
 msgid "Little Endian."
 msgstr ""
 
 msgid "Little Endian."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:126
-#: src/language/dictionary/sys-file-info.c:134
+#: src/language/dictionary/sys-file-info.c:125
+#: src/language/dictionary/sys-file-info.c:133
 msgid "Unknown."
 msgstr ""
 
 msgid "Unknown."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:127
+#: src/language/dictionary/sys-file-info.c:126
 msgid "Real Format:"
 msgstr ""
 
 msgid "Real Format:"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:129
+#: src/language/dictionary/sys-file-info.c:128
 msgid "IEEE 754 LE."
 msgstr ""
 
 msgid "IEEE 754 LE."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:130
+#: src/language/dictionary/sys-file-info.c:129
 msgid "IEEE 754 BE."
 msgstr ""
 
 msgid "IEEE 754 BE."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:131
+#: src/language/dictionary/sys-file-info.c:130
 msgid "VAX D."
 msgstr ""
 
 msgid "VAX D."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:132
+#: src/language/dictionary/sys-file-info.c:131
 msgid "VAX G."
 msgstr ""
 
 msgid "VAX G."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:133
+#: src/language/dictionary/sys-file-info.c:132
 msgid "IBM 390 Hex Long."
 msgstr ""
 
 msgid "IBM 390 Hex Long."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:135
+#: src/language/dictionary/sys-file-info.c:134
 msgid "Variables:"
 msgstr ""
 
 msgid "Variables:"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:138
+#: src/language/dictionary/sys-file-info.c:137
 msgid "Cases:"
 msgstr ""
 
 msgid "Cases:"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:140
+#: src/language/dictionary/sys-file-info.c:139
 msgid "Unknown"
 msgstr ""
 
 msgid "Unknown"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:141
+#: src/language/dictionary/sys-file-info.c:140
 msgid "Type:"
 msgstr ""
 
 msgid "Type:"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:142
+#: src/language/dictionary/sys-file-info.c:141
 msgid "System File."
 msgstr ""
 
 msgid "System File."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:143
+#: src/language/dictionary/sys-file-info.c:142
 msgid "Weight:"
 msgstr ""
 
 msgid "Weight:"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:148
+#: src/language/dictionary/sys-file-info.c:147
 msgid "Not weighted."
 msgstr ""
 
 msgid "Not weighted."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:150
+#: src/language/dictionary/sys-file-info.c:149
 msgid "Mode:"
 msgstr ""
 
 msgid "Mode:"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:152
+#: src/language/dictionary/sys-file-info.c:151
 #, c-format
 msgid "Compression %s."
 msgstr ""
 
 #, c-format
 msgid "Compression %s."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:152
+#: src/language/dictionary/sys-file-info.c:151
 msgid "on"
 msgstr ""
 
 msgid "on"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:152
+#: src/language/dictionary/sys-file-info.c:151
 msgid "off"
 msgstr ""
 
 msgid "off"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:162
-#: src/language/dictionary/sys-file-info.c:401
+#: src/language/dictionary/sys-file-info.c:161
+#: src/language/dictionary/sys-file-info.c:400
 msgid "Description"
 msgstr ""
 
 msgid "Description"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:163
-#: src/language/dictionary/sys-file-info.c:399
+#: src/language/dictionary/sys-file-info.c:162
+#: src/language/dictionary/sys-file-info.c:398
 msgid "Position"
 msgstr ""
 
 msgid "Position"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:221
+#: src/language/dictionary/sys-file-info.c:220
 msgid "The active file does not have a file label."
 msgstr ""
 
 msgid "The active file does not have a file label."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:224
+#: src/language/dictionary/sys-file-info.c:223
 msgid "File label:"
 msgstr ""
 
 msgid "File label:"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:287
+#: src/language/dictionary/sys-file-info.c:286
 msgid "No variables to display."
 msgstr ""
 
 msgid "No variables to display."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:306
+#: src/language/dictionary/sys-file-info.c:305
 msgid "Macros not supported."
 msgstr ""
 
 msgid "Macros not supported."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:316
+#: src/language/dictionary/sys-file-info.c:315
 msgid "The active file dictionary does not contain any documents."
 msgstr ""
 
 msgid "The active file dictionary does not contain any documents."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:325
+#: src/language/dictionary/sys-file-info.c:324
 msgid "Documents in the active file:"
 msgstr ""
 
 msgid "Documents in the active file:"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:481
+#: src/language/dictionary/sys-file-info.c:480
 #, c-format
 msgid "Format: %s"
 msgstr ""
 
 #, c-format
 msgid "Format: %s"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:489
+#: src/language/dictionary/sys-file-info.c:488
 #, c-format
 msgid "Print Format: %s"
 msgstr ""
 
 #, c-format
 msgid "Print Format: %s"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:492
+#: src/language/dictionary/sys-file-info.c:491
 #, c-format
 msgid "Write Format: %s"
 msgstr ""
 
 #, c-format
 msgid "Write Format: %s"
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:504
+#: src/language/dictionary/sys-file-info.c:503
 msgid "Missing Values: "
 msgstr ""
 
 msgid "Missing Values: "
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:596
+#: src/language/dictionary/sys-file-info.c:595
 msgid "No vectors defined."
 msgstr ""
 
 msgid "No vectors defined."
 msgstr ""
 
-#: src/language/dictionary/sys-file-info.c:611
+#: src/language/dictionary/sys-file-info.c:610
 msgid "Vector"
 msgstr ""
 
 msgid "Vector"
 msgstr ""
 
-#: src/language/dictionary/value-labels.c:123
+#: src/language/dictionary/value-labels.c:122
 #, c-format
 msgid ""
 "It is not possible to assign value labels to long string variables such as %"
 "s."
 msgstr ""
 
 #, c-format
 msgid ""
 "It is not possible to assign value labels to long string variables such as %"
 "s."
 msgstr ""
 
-#: src/language/dictionary/value-labels.c:159 src/language/lexer/lexer.c:601
+#: src/language/dictionary/value-labels.c:158 src/language/lexer/lexer.c:600
 msgid "expecting string"
 msgstr ""
 
 msgid "expecting string"
 msgstr ""
 
-#: src/language/dictionary/value-labels.c:168 src/language/lexer/lexer.c:615
+#: src/language/dictionary/value-labels.c:167 src/language/lexer/lexer.c:614
 msgid "expecting integer"
 msgstr ""
 
 msgid "expecting integer"
 msgstr ""
 
-#: src/language/dictionary/value-labels.c:172
+#: src/language/dictionary/value-labels.c:171
 #, c-format
 msgid "Value label `%g' is not integer."
 msgstr ""
 
 #, c-format
 msgid "Value label `%g' is not integer."
 msgstr ""
 
-#: src/language/dictionary/value-labels.c:186
+#: src/language/dictionary/value-labels.c:185
 msgid "Truncating value label to 60 characters."
 msgstr ""
 
 msgid "Truncating value label to 60 characters."
 msgstr ""
 
-#: src/language/dictionary/variable-label.c:53
+#: src/language/dictionary/variable-label.c:52
 msgid "String expected for variable label."
 msgstr ""
 
 msgid "String expected for variable label."
 msgstr ""
 
-#: src/language/dictionary/variable-label.c:61
+#: src/language/dictionary/variable-label.c:60
 msgid "Truncating variable label to 255 characters."
 msgstr ""
 
 msgid "Truncating variable label to 255 characters."
 msgstr ""
 
-#: src/language/dictionary/vector.c:76
+#: src/language/dictionary/vector.c:75
 #, c-format
 msgid "Vector name %s is given twice."
 msgstr ""
 
 #, c-format
 msgid "Vector name %s is given twice."
 msgstr ""
 
-#: src/language/dictionary/vector.c:82
+#: src/language/dictionary/vector.c:81
 #, c-format
 msgid "There is already a vector with name %s."
 msgstr ""
 
 #, c-format
 msgid "There is already a vector with name %s."
 msgstr ""
 
-#: src/language/dictionary/vector.c:103
+#: src/language/dictionary/vector.c:102
 msgid ""
 "A slash must be used to separate each vector specification when using the "
 "long form.  Commands such as VECTOR A,B=Q1 TO Q20 are not supported."
 msgstr ""
 
 msgid ""
 "A slash must be used to separate each vector specification when using the "
 "long form.  Commands such as VECTOR A,B=Q1 TO Q20 are not supported."
 msgstr ""
 
-#: src/language/dictionary/vector.c:137
+#: src/language/dictionary/vector.c:136
 msgid "Vectors must have at least one element."
 msgstr ""
 
 msgid "Vectors must have at least one element."
 msgstr ""
 
-#: src/language/dictionary/vector.c:151
+#: src/language/dictionary/vector.c:150
 #, c-format
 msgid "%s%d is too long for a variable name."
 msgstr ""
 
 #, c-format
 msgid "%s%d is too long for a variable name."
 msgstr ""
 
-#: src/language/dictionary/vector.c:190
+#: src/language/dictionary/vector.c:189
 msgid ""
 "The syntax for this command does not match the expected syntax for either "
 "the long form or the short form of VECTOR."
 msgstr ""
 
 msgid ""
 "The syntax for this command does not match the expected syntax for either "
 "the long form or the short form of VECTOR."
 msgstr ""
 
-#: src/language/dictionary/weight.c:52
+#: src/language/dictionary/weight.c:51
 msgid "The weighting variable must be numeric."
 msgstr ""
 
 msgid "The weighting variable must be numeric."
 msgstr ""
 
-#: src/language/dictionary/weight.c:57
+#: src/language/dictionary/weight.c:56
 msgid "The weighting variable may not be scratch."
 msgstr ""
 
 msgid "The weighting variable may not be scratch."
 msgstr ""
 
-#: src/language/expressions/evaluate.c:156
+#: src/language/expressions/evaluate.c:155
 msgid "expecting number or string"
 msgstr ""
 
 msgid "expecting number or string"
 msgstr ""
 
@@ -2025,24 +2025,24 @@ msgid ""
 "Invalid DATESUM method.  Valid choices are \"closest\" and \"rollover\"."
 msgstr ""
 
 "Invalid DATESUM method.  Valid choices are \"closest\" and \"rollover\"."
 msgstr ""
 
-#: src/language/expressions/parse.c:261
+#: src/language/expressions/parse.c:260
 #, c-format
 msgid ""
 "Type mismatch: expression has %s type, but a numeric value is required here."
 msgstr ""
 
 #, c-format
 msgid ""
 "Type mismatch: expression has %s type, but a numeric value is required here."
 msgstr ""
 
-#: src/language/expressions/parse.c:273
+#: src/language/expressions/parse.c:272
 #, c-format
 msgid ""
 "Type mismatch: expression has %s type, but a string value is required here."
 msgstr ""
 
 #, c-format
 msgid ""
 "Type mismatch: expression has %s type, but a string value is required here."
 msgstr ""
 
-#: src/language/expressions/parse.c:429
+#: src/language/expressions/parse.c:428
 #, c-format
 msgid "Type mismatch while applying %s operator: cannot convert %s to %s."
 msgstr ""
 
 #, c-format
 msgid "Type mismatch while applying %s operator: cannot convert %s to %s."
 msgstr ""
 
-#: src/language/expressions/parse.c:645
+#: src/language/expressions/parse.c:644
 msgid ""
 "Chaining relational operators (e.g. \"a < b < c\") will not produce the "
 "mathematically expected result.  Use the AND logical operator to fix the "
 msgid ""
 "Chaining relational operators (e.g. \"a < b < c\") will not produce the "
 "mathematically expected result.  Use the AND logical operator to fix the "
@@ -2050,272 +2050,272 @@ msgid ""
 "parentheses will disable this warning (e.g. \"(a < b) < c\".)"
 msgstr ""
 
 "parentheses will disable this warning (e.g. \"(a < b) < c\".)"
 msgstr ""
 
-#: src/language/expressions/parse.c:746
+#: src/language/expressions/parse.c:745
 msgid ""
 "The exponentiation operator (\"**\") is left-associative, even though right-"
 "associative semantics are more useful.  That is, \"a**b**c\" equals \"(a**b)"
 "**c\", not as \"a**(b**c)\".  To disable this warning, insert parentheses."
 msgstr ""
 
 msgid ""
 "The exponentiation operator (\"**\") is left-associative, even though right-"
 "associative semantics are more useful.  That is, \"a**b**c\" equals \"(a**b)"
 "**c\", not as \"a**(b**c)\".  To disable this warning, insert parentheses."
 msgstr ""
 
-#: src/language/expressions/parse.c:811
+#: src/language/expressions/parse.c:810
 #, c-format
 msgid "Unknown system variable %s."
 msgstr ""
 
 #, c-format
 msgid "Unknown system variable %s."
 msgstr ""
 
-#: src/language/expressions/parse.c:859
+#: src/language/expressions/parse.c:858
 #, c-format
 msgid "Unknown identifier %s."
 msgstr ""
 
 #, c-format
 msgid "Unknown identifier %s."
 msgstr ""
 
-#: src/language/expressions/parse.c:887 src/language/stats/aggregate.c:526
+#: src/language/expressions/parse.c:886 src/language/stats/aggregate.c:525
 msgid "expecting `)'"
 msgstr ""
 
 msgid "expecting `)'"
 msgstr ""
 
-#: src/language/expressions/parse.c:894
+#: src/language/expressions/parse.c:893
 msgid "in expression"
 msgstr ""
 
 msgid "in expression"
 msgstr ""
 
-#: src/language/expressions/parse.c:1075
+#: src/language/expressions/parse.c:1074
 #, c-format
 msgid "%s must have at least %d arguments in list."
 msgstr ""
 
 #, c-format
 msgid "%s must have at least %d arguments in list."
 msgstr ""
 
-#: src/language/expressions/parse.c:1084
+#: src/language/expressions/parse.c:1083
 #, c-format
 msgid "%s must have even number of arguments in list."
 msgstr ""
 
 #, c-format
 msgid "%s must have even number of arguments in list."
 msgstr ""
 
-#: src/language/expressions/parse.c:1087
+#: src/language/expressions/parse.c:1086
 #, c-format
 msgid "%s must have multiple of %d arguments in list."
 msgstr ""
 
 #, c-format
 msgid "%s must have multiple of %d arguments in list."
 msgstr ""
 
-#: src/language/expressions/parse.c:1097
+#: src/language/expressions/parse.c:1096
 #, c-format
 msgid "%s function does not accept a minimum valid argument count."
 msgstr ""
 
 #, c-format
 msgid "%s function does not accept a minimum valid argument count."
 msgstr ""
 
-#: src/language/expressions/parse.c:1106
+#: src/language/expressions/parse.c:1105
 #, c-format
 msgid "%s requires at least %d valid arguments in list."
 msgstr ""
 
 #, c-format
 msgid "%s requires at least %d valid arguments in list."
 msgstr ""
 
-#: src/language/expressions/parse.c:1112
+#: src/language/expressions/parse.c:1111
 #, c-format
 msgid ""
 "With %s, using minimum valid argument count of %d does not make sense when "
 "passing only %d arguments in list."
 msgstr ""
 
 #, c-format
 msgid ""
 "With %s, using minimum valid argument count of %d does not make sense when "
 "passing only %d arguments in list."
 msgstr ""
 
-#: src/language/expressions/parse.c:1166
+#: src/language/expressions/parse.c:1165
 #, c-format
 msgid "Type mismatch invoking %s as "
 msgstr ""
 
 #, c-format
 msgid "Type mismatch invoking %s as "
 msgstr ""
 
-#: src/language/expressions/parse.c:1171
+#: src/language/expressions/parse.c:1170
 msgid "Function invocation "
 msgstr ""
 
 msgid "Function invocation "
 msgstr ""
 
-#: src/language/expressions/parse.c:1173
+#: src/language/expressions/parse.c:1172
 msgid " does not match any known function.  Candidates are:"
 msgstr ""
 
 msgid " does not match any known function.  Candidates are:"
 msgstr ""
 
-#: src/language/expressions/parse.c:1203
+#: src/language/expressions/parse.c:1202
 #, c-format
 msgid "No function or vector named %s."
 msgstr ""
 
 #, c-format
 msgid "No function or vector named %s."
 msgstr ""
 
-#: src/language/expressions/parse.c:1245
+#: src/language/expressions/parse.c:1244
 #, c-format
 msgid "expecting `,' or `)' invoking %s function"
 msgstr ""
 
 #, c-format
 msgid "expecting `,' or `)' invoking %s function"
 msgstr ""
 
-#: src/language/expressions/parse.c:1265
+#: src/language/expressions/parse.c:1264
 #, c-format
 msgid "%s is a PSPP extension."
 msgstr ""
 
 #, c-format
 msgid "%s is a PSPP extension."
 msgstr ""
 
-#: src/language/expressions/parse.c:1268 src/ui/terminal/command-line.c:133
-#: src/ui/terminal/command-line.c:152 src/ui/terminal/command-line.c:164
+#: src/language/expressions/parse.c:1267 src/ui/terminal/command-line.c:132
+#: src/ui/terminal/command-line.c:151 src/ui/terminal/command-line.c:163
 #, c-format
 msgid "%s is not yet implemented."
 msgstr ""
 
 #, c-format
 msgid "%s is not yet implemented."
 msgstr ""
 
-#: src/language/expressions/parse.c:1274
+#: src/language/expressions/parse.c:1273
 #, c-format
 msgid "%s may not appear after TEMPORARY."
 msgstr ""
 
 #, c-format
 msgid "%s may not appear after TEMPORARY."
 msgstr ""
 
-#: src/language/lexer/format-parser.c:92
+#: src/language/lexer/format-parser.c:91
 msgid "expecting valid format specifier"
 msgstr ""
 
 msgid "expecting valid format specifier"
 msgstr ""
 
-#: src/language/lexer/format-parser.c:125
+#: src/language/lexer/format-parser.c:124
 msgid "expecting format type"
 msgstr ""
 
 msgid "expecting format type"
 msgstr ""
 
-#: src/language/lexer/lexer.c:272
+#: src/language/lexer/lexer.c:271
 #, c-format
 msgid "%s does not form a valid number."
 msgstr ""
 
 #, c-format
 msgid "%s does not form a valid number."
 msgstr ""
 
-#: src/language/lexer/lexer.c:376
+#: src/language/lexer/lexer.c:375
 #, c-format
 msgid "Bad character in input: `%c'."
 msgstr ""
 
 #, c-format
 msgid "Bad character in input: `%c'."
 msgstr ""
 
-#: src/language/lexer/lexer.c:378
+#: src/language/lexer/lexer.c:377
 #, c-format
 msgid "Bad character in input: `\\%o'."
 msgstr ""
 
 #, c-format
 msgid "Bad character in input: `\\%o'."
 msgstr ""
 
-#: src/language/lexer/lexer.c:414
+#: src/language/lexer/lexer.c:413
 #, c-format
 msgid "Subcommand %s may only be specified once."
 msgstr ""
 
 #, c-format
 msgid "Subcommand %s may only be specified once."
 msgstr ""
 
-#: src/language/lexer/lexer.c:422
+#: src/language/lexer/lexer.c:421
 #, c-format
 msgid "missing required subcommand %s"
 msgstr ""
 
 #, c-format
 msgid "missing required subcommand %s"
 msgstr ""
 
-#: src/language/lexer/lexer.c:451
+#: src/language/lexer/lexer.c:450
 #, c-format
 msgid "Syntax error %s at %s."
 msgstr ""
 
 #, c-format
 msgid "Syntax error %s at %s."
 msgstr ""
 
-#: src/language/lexer/lexer.c:454
+#: src/language/lexer/lexer.c:453
 #, c-format
 msgid "Syntax error at %s."
 msgstr ""
 
 #, c-format
 msgid "Syntax error at %s."
 msgstr ""
 
-#: src/language/lexer/lexer.c:570 src/language/lexer/lexer.c:587
+#: src/language/lexer/lexer.c:569 src/language/lexer/lexer.c:586
 #, c-format
 msgid "expecting `%s'"
 msgstr ""
 
 #, c-format
 msgid "expecting `%s'"
 msgstr ""
 
-#: src/language/lexer/lexer.c:628
+#: src/language/lexer/lexer.c:627
 msgid "expecting number"
 msgstr ""
 
 msgid "expecting number"
 msgstr ""
 
-#: src/language/lexer/lexer.c:640
+#: src/language/lexer/lexer.c:639
 msgid "expecting identifier"
 msgstr ""
 
 msgid "expecting identifier"
 msgstr ""
 
-#: src/language/lexer/lexer.c:1029
+#: src/language/lexer/lexer.c:1028
 msgid "binary"
 msgstr ""
 
 msgid "binary"
 msgstr ""
 
-#: src/language/lexer/lexer.c:1034
+#: src/language/lexer/lexer.c:1033
 msgid "octal"
 msgstr ""
 
 msgid "octal"
 msgstr ""
 
-#: src/language/lexer/lexer.c:1039
+#: src/language/lexer/lexer.c:1038
 msgid "hex"
 msgstr ""
 
 msgid "hex"
 msgstr ""
 
-#: src/language/lexer/lexer.c:1049
+#: src/language/lexer/lexer.c:1048
 #, c-format
 msgid "String of %s digits has %d characters, which is not a multiple of %d."
 msgstr ""
 
 #, c-format
 msgid "String of %s digits has %d characters, which is not a multiple of %d."
 msgstr ""
 
-#: src/language/lexer/lexer.c:1078
+#: src/language/lexer/lexer.c:1077
 #, c-format
 msgid "`%c' is not a valid %s digit."
 msgstr ""
 
 #, c-format
 msgid "`%c' is not a valid %s digit."
 msgstr ""
 
-#: src/language/lexer/lexer.c:1112
+#: src/language/lexer/lexer.c:1111
 msgid "Unterminated string constant."
 msgstr ""
 
 msgid "Unterminated string constant."
 msgstr ""
 
-#: src/language/lexer/lexer.c:1166
+#: src/language/lexer/lexer.c:1165
 msgid "Unexpected end of file in string concatenation."
 msgstr ""
 
 msgid "Unexpected end of file in string concatenation."
 msgstr ""
 
-#: src/language/lexer/lexer.c:1174
+#: src/language/lexer/lexer.c:1173
 msgid "String expected following `+'."
 msgstr ""
 
 msgid "String expected following `+'."
 msgstr ""
 
-#: src/language/lexer/lexer.c:1187
+#: src/language/lexer/lexer.c:1186
 #, c-format
 msgid "String exceeds 255 characters in length (%d characters)."
 msgstr ""
 
 #, c-format
 msgid "String exceeds 255 characters in length (%d characters)."
 msgstr ""
 
-#: src/language/lexer/range-parser.c:63
+#: src/language/lexer/range-parser.c:62
 #, c-format
 msgid ""
 "Low end of range (%g) is below high end (%g).  The range will be treated as "
 "reversed."
 msgstr ""
 
 #, c-format
 msgid ""
 "Low end of range (%g) is below high end (%g).  The range will be treated as "
 "reversed."
 msgstr ""
 
-#: src/language/lexer/range-parser.c:71
+#: src/language/lexer/range-parser.c:70
 #, c-format
 msgid "Ends of range are equal (%g)."
 msgstr ""
 
 #, c-format
 msgid "Ends of range are equal (%g)."
 msgstr ""
 
-#: src/language/lexer/range-parser.c:79
+#: src/language/lexer/range-parser.c:78
 msgid "LO or LOWEST must be part of a range."
 msgstr ""
 
 msgid "LO or LOWEST must be part of a range."
 msgstr ""
 
-#: src/language/lexer/range-parser.c:110
+#: src/language/lexer/range-parser.c:109
 msgid "System-missing value is not valid here."
 msgstr ""
 
 msgid "System-missing value is not valid here."
 msgstr ""
 
-#: src/language/lexer/range-parser.c:118
+#: src/language/lexer/range-parser.c:117
 msgid "expecting number or data string"
 msgstr ""
 
 msgid "expecting number or data string"
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:55
+#: src/language/lexer/variable-parser.c:54
 msgid "expecting variable name"
 msgstr ""
 
 msgid "expecting variable name"
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:65
+#: src/language/lexer/variable-parser.c:64
 #, c-format
 msgid "%s is not a variable name."
 msgstr ""
 
 #, c-format
 msgid "%s is not a variable name."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:170
+#: src/language/lexer/variable-parser.c:169
 #, c-format
 msgid ""
 "%s is not a numeric variable.  It will not be included in the variable list."
 msgstr ""
 
 #, 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:173
+#: src/language/lexer/variable-parser.c:172
 #, c-format
 msgid ""
 "%s is not a string variable.  It will not be included in the variable list."
 msgstr ""
 
 #, 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:177
+#: src/language/lexer/variable-parser.c:176
 #, c-format
 msgid "Scratch variables (such as %s) are not allowed here."
 msgstr ""
 
 #, c-format
 msgid "Scratch variables (such as %s) are not allowed here."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:181
+#: src/language/lexer/variable-parser.c:180
 #, 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 ""
 
 #, 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:187
+#: src/language/lexer/variable-parser.c:186
 #, 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 ""
 
 #, 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:192
+#: src/language/lexer/variable-parser.c:191
 #, c-format
 msgid "Variable %s appears twice in variable list."
 msgstr ""
 
 #, c-format
 msgid "Variable %s appears twice in variable list."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:305
+#: src/language/lexer/variable-parser.c:304
 #, c-format
 msgid "%s TO %s is not valid syntax since %s precedes %s in the dictionary."
 msgstr ""
 
 #, c-format
 msgid "%s TO %s is not valid syntax since %s precedes %s in the dictionary."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:313
+#: src/language/lexer/variable-parser.c:312
 #, c-format
 msgid ""
 "When using the TO keyword to specify several variables, both variables must "
 #, c-format
 msgid ""
 "When using the TO keyword to specify several variables, both variables must "
@@ -2323,492 +2323,492 @@ msgid ""
 "system variables.  %s is a %s variable, whereas %s is %s."
 msgstr ""
 
 "system variables.  %s is a %s variable, whereas %s is %s."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:387
+#: src/language/lexer/variable-parser.c:386
 msgid "incorrect use of TO convention"
 msgstr ""
 
 msgid "incorrect use of TO convention"
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:430
+#: src/language/lexer/variable-parser.c:429
 msgid "Scratch variables not allowed here."
 msgstr ""
 
 msgid "Scratch variables not allowed here."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:452
+#: src/language/lexer/variable-parser.c:451
 msgid "Prefixes don't match in use of TO convention."
 msgstr ""
 
 msgid "Prefixes don't match in use of TO convention."
 msgstr ""
 
-#: src/language/lexer/variable-parser.c:457
+#: src/language/lexer/variable-parser.c:456
 msgid "Bad bounds in use of TO convention."
 msgstr ""
 
 msgid "Bad bounds in use of TO convention."
 msgstr ""
 
-#: src/language/stats/aggregate.c:219
+#: src/language/stats/aggregate.c:218
 msgid "while expecting COLUMNWISE"
 msgstr ""
 
 msgid "while expecting COLUMNWISE"
 msgstr ""
 
-#: src/language/stats/aggregate.c:248
+#: src/language/stats/aggregate.c:247
 msgid "expecting BREAK"
 msgstr ""
 
 msgid "expecting BREAK"
 msgstr ""
 
-#: src/language/stats/aggregate.c:253
+#: src/language/stats/aggregate.c:252
 msgid ""
 "When PRESORTED is specified, specifying sorting directions with (A) or (D) "
 "has no effect.  Output data will be sorted the same way as the input data."
 msgstr ""
 
 msgid ""
 "When PRESORTED is specified, specifying sorting directions with (A) or (D) "
 "has no effect.  Output data will be sorted the same way as the input data."
 msgstr ""
 
-#: src/language/stats/aggregate.c:433
+#: src/language/stats/aggregate.c:432
 msgid "expecting aggregation function"
 msgstr ""
 
 msgid "expecting aggregation function"
 msgstr ""
 
-#: src/language/stats/aggregate.c:451
+#: src/language/stats/aggregate.c:450
 #, c-format
 msgid "Unknown aggregation function %s."
 msgstr ""
 
 #, c-format
 msgid "Unknown aggregation function %s."
 msgstr ""
 
-#: src/language/stats/aggregate.c:507
+#: src/language/stats/aggregate.c:506
 #, c-format
 msgid "Missing argument %d to %s."
 msgstr ""
 
 #, c-format
 msgid "Missing argument %d to %s."
 msgstr ""
 
-#: src/language/stats/aggregate.c:516
+#: src/language/stats/aggregate.c:515
 #, c-format
 msgid "Arguments to %s must be of same type as source variables."
 msgstr ""
 
 #, c-format
 msgid "Arguments to %s must be of same type as source variables."
 msgstr ""
 
-#: src/language/stats/aggregate.c:538
+#: src/language/stats/aggregate.c:537
 #, c-format
 msgid ""
 "Number of source variables (%u) does not match number of target variables (%"
 "u)."
 msgstr ""
 
 #, c-format
 msgid ""
 "Number of source variables (%u) does not match number of target variables (%"
 "u)."
 msgstr ""
 
-#: src/language/stats/aggregate.c:554
+#: src/language/stats/aggregate.c:553
 #, c-format
 msgid ""
 "The value arguments passed to the %s function are out-of-order.  They will "
 "be treated as if they had been specified in the correct order."
 msgstr ""
 
 #, c-format
 msgid ""
 "The value arguments passed to the %s function are out-of-order.  They will "
 "be treated as if they had been specified in the correct order."
 msgstr ""
 
-#: src/language/stats/aggregate.c:624
+#: src/language/stats/aggregate.c:623
 #, c-format
 msgid ""
 "Variable name %s is not unique within the aggregate file dictionary, which "
 "contains the aggregate variables and the break variables."
 msgstr ""
 
 #, c-format
 msgid ""
 "Variable name %s is not unique within the aggregate file dictionary, which "
 "contains the aggregate variables and the break variables."
 msgstr ""
 
-#: src/language/stats/autorecode.c:136
+#: src/language/stats/autorecode.c:135
 #, c-format
 msgid "Source variable count (%u) does not match target variable count (%u)."
 msgstr ""
 
 #, c-format
 msgid "Source variable count (%u) does not match target variable count (%u)."
 msgstr ""
 
-#: src/language/stats/autorecode.c:164
+#: src/language/stats/autorecode.c:163
 #, c-format
 msgid "Target variable %s duplicates existing variable %s."
 msgstr ""
 
 #, c-format
 msgid "Target variable %s duplicates existing variable %s."
 msgstr ""
 
-#: src/language/stats/autorecode.c:171
+#: src/language/stats/autorecode.c:170
 #, c-format
 msgid "Duplicate variable name %s among target variables."
 msgstr ""
 
 #, c-format
 msgid "Duplicate variable name %s among target variables."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:272
+#: src/language/stats/crosstabs.q:271
 msgid ""
 "Missing mode REPORT not allowed in general mode.  Assuming MISSING=TABLE."
 msgstr ""
 
 msgid ""
 "Missing mode REPORT not allowed in general mode.  Assuming MISSING=TABLE."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:282
+#: src/language/stats/crosstabs.q:281
 msgid "Write mode ALL not allowed in general mode.  Assuming WRITE=CELLS."
 msgstr ""
 
 msgid "Write mode ALL not allowed in general mode.  Assuming WRITE=CELLS."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:338
+#: src/language/stats/crosstabs.q:337
 msgid "Too many crosstabulation variables or dimensions."
 msgstr ""
 
 msgid "Too many crosstabulation variables or dimensions."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:348
+#: src/language/stats/crosstabs.q:347
 msgid "expecting BY"
 msgstr ""
 
 msgid "expecting BY"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:415
+#: src/language/stats/crosstabs.q:414
 msgid "VARIABLES must be specified before TABLES."
 msgstr ""
 
 msgid "VARIABLES must be specified before TABLES."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:453
+#: src/language/stats/crosstabs.q:452
 #, c-format
 msgid "Maximum value (%ld) less than minimum value (%ld)."
 msgstr ""
 
 #, c-format
 msgid "Maximum value (%ld) less than minimum value (%ld)."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:817
+#: src/language/stats/crosstabs.q:816
 msgid "Summary."
 msgstr ""
 
 msgid "Summary."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:819 src/language/stats/examine.q:977
+#: src/language/stats/crosstabs.q:818 src/language/stats/examine.q:977
 msgid "Cases"
 msgstr ""
 
 msgid "Cases"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:820 src/language/stats/examine.q:911
-#: src/language/stats/frequencies.q:1176 src/language/stats/frequencies.q:1551
+#: src/language/stats/crosstabs.q:819 src/language/stats/examine.q:911
+#: src/language/stats/frequencies.q:1175 src/language/stats/frequencies.q:1550
 msgid "Valid"
 msgstr ""
 
 msgid "Valid"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:821 src/language/stats/examine.q:912
-#: src/language/stats/frequencies.q:1245 src/language/stats/frequencies.q:1552
-#: src/ui/gui/var-sheet.c:77
+#: src/language/stats/crosstabs.q:820 src/language/stats/examine.q:912
+#: src/language/stats/frequencies.q:1244 src/language/stats/frequencies.q:1551
+#: src/ui/gui/var-sheet.c:76
 msgid "Missing"
 msgstr "Löse"
 
 msgid "Missing"
 msgstr "Löse"
 
-#: src/language/stats/crosstabs.q:822 src/language/stats/crosstabs.q:1022
-#: src/language/stats/crosstabs.q:1745 src/language/stats/examine.q:913
-#: src/language/stats/frequencies.q:1254 src/language/stats/oneway.q:307
+#: src/language/stats/crosstabs.q:821 src/language/stats/crosstabs.q:1021
+#: src/language/stats/crosstabs.q:1744 src/language/stats/examine.q:913
+#: src/language/stats/frequencies.q:1253 src/language/stats/oneway.q:307
 #: src/language/stats/oneway.q:471 src/language/stats/regression.q:315
 msgid "Total"
 msgstr ""
 
 #: src/language/stats/oneway.q:471 src/language/stats/regression.q:315
 msgid "Total"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:832 src/language/stats/examine.q:989
-#: src/language/stats/frequencies.q:1550 src/language/stats/oneway.q:392
+#: src/language/stats/crosstabs.q:831 src/language/stats/examine.q:989
+#: src/language/stats/frequencies.q:1549 src/language/stats/oneway.q:392
 #: src/language/stats/t-test.q:683 src/language/stats/t-test.q:706
 #: src/language/stats/t-test.q:832 src/language/stats/t-test.q:1369
 msgid "N"
 msgstr ""
 
 #: src/language/stats/t-test.q:683 src/language/stats/t-test.q:706
 #: src/language/stats/t-test.q:832 src/language/stats/t-test.q:1369
 msgid "N"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:833 src/language/stats/examine.q:992
-#: src/language/stats/frequencies.q:1180 src/language/stats/frequencies.q:1181
-#: src/language/stats/frequencies.q:1182
+#: src/language/stats/crosstabs.q:832 src/language/stats/examine.q:992
+#: src/language/stats/frequencies.q:1179 src/language/stats/frequencies.q:1180
+#: src/language/stats/frequencies.q:1181
 msgid "Percent"
 msgstr "Prozent"
 
 msgid "Percent"
 msgstr "Prozent"
 
-#: src/language/stats/crosstabs.q:1074
+#: src/language/stats/crosstabs.q:1073
 msgid "count"
 msgstr ""
 
 msgid "count"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1075
+#: src/language/stats/crosstabs.q:1074
 msgid "row %"
 msgstr ""
 
 msgid "row %"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1076
+#: src/language/stats/crosstabs.q:1075
 msgid "column %"
 msgstr ""
 
 msgid "column %"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1077
+#: src/language/stats/crosstabs.q:1076
 msgid "total %"
 msgstr ""
 
 msgid "total %"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1078
+#: src/language/stats/crosstabs.q:1077
 msgid "expected"
 msgstr ""
 
 msgid "expected"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1079
+#: src/language/stats/crosstabs.q:1078
 msgid "residual"
 msgstr ""
 
 msgid "residual"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1080
+#: src/language/stats/crosstabs.q:1079
 msgid "std. resid."
 msgstr ""
 
 msgid "std. resid."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1081
+#: src/language/stats/crosstabs.q:1080
 msgid "adj. resid."
 msgstr ""
 
 msgid "adj. resid."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1111
+#: src/language/stats/crosstabs.q:1110
 msgid "Chi-square tests."
 msgstr ""
 
 msgid "Chi-square tests."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1114 src/language/stats/crosstabs.q:1141
-#: src/language/stats/crosstabs.q:1161 src/language/stats/crosstabs.q:1182
+#: src/language/stats/crosstabs.q:1113 src/language/stats/crosstabs.q:1140
+#: src/language/stats/crosstabs.q:1160 src/language/stats/crosstabs.q:1181
 #: src/language/stats/examine.q:1424
 msgid "Statistic"
 msgstr ""
 
 #: src/language/stats/examine.q:1424
 msgid "Statistic"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1116 src/language/stats/oneway.q:280
+#: src/language/stats/crosstabs.q:1115 src/language/stats/oneway.q:280
 #: src/language/stats/oneway.q:681 src/language/stats/regression.q:308
 #: src/language/stats/t-test.q:983 src/language/stats/t-test.q:1175
 #: src/language/stats/t-test.q:1268
 msgid "df"
 msgstr ""
 
 #: src/language/stats/oneway.q:681 src/language/stats/regression.q:308
 #: src/language/stats/t-test.q:983 src/language/stats/t-test.q:1175
 #: src/language/stats/t-test.q:1268
 msgid "df"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1118
+#: src/language/stats/crosstabs.q:1117
 msgid "Asymp. Sig. (2-sided)"
 msgstr ""
 
 msgid "Asymp. Sig. (2-sided)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1120
+#: src/language/stats/crosstabs.q:1119
 msgid "Exact. Sig. (2-sided)"
 msgstr ""
 
 msgid "Exact. Sig. (2-sided)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1122
+#: src/language/stats/crosstabs.q:1121
 msgid "Exact. Sig. (1-sided)"
 msgstr ""
 
 msgid "Exact. Sig. (1-sided)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1137
+#: src/language/stats/crosstabs.q:1136
 msgid "Symmetric measures."
 msgstr ""
 
 msgid "Symmetric measures."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1140 src/language/stats/crosstabs.q:1181
+#: src/language/stats/crosstabs.q:1139 src/language/stats/crosstabs.q:1180
 msgid "Category"
 msgstr ""
 
 msgid "Category"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1143 src/language/stats/crosstabs.q:1185
+#: src/language/stats/crosstabs.q:1142 src/language/stats/crosstabs.q:1184
 msgid "Asymp. Std. Error"
 msgstr ""
 
 msgid "Asymp. Std. Error"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1144 src/language/stats/crosstabs.q:1186
+#: src/language/stats/crosstabs.q:1143 src/language/stats/crosstabs.q:1185
 msgid "Approx. T"
 msgstr ""
 
 msgid "Approx. T"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1145 src/language/stats/crosstabs.q:1187
+#: src/language/stats/crosstabs.q:1144 src/language/stats/crosstabs.q:1186
 msgid "Approx. Sig."
 msgstr ""
 
 msgid "Approx. Sig."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1156
+#: src/language/stats/crosstabs.q:1155
 msgid "Risk estimate."
 msgstr ""
 
 msgid "Risk estimate."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1160
+#: src/language/stats/crosstabs.q:1159
 #, c-format
 msgid "95%% Confidence Interval"
 msgstr ""
 
 #, c-format
 msgid "95%% Confidence Interval"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1163 src/language/stats/t-test.q:987
+#: src/language/stats/crosstabs.q:1162 src/language/stats/t-test.q:987
 #: src/language/stats/t-test.q:1172 src/language/stats/t-test.q:1271
 msgid "Lower"
 msgstr ""
 
 #: src/language/stats/t-test.q:1172 src/language/stats/t-test.q:1271
 msgid "Lower"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1164 src/language/stats/t-test.q:988
+#: src/language/stats/crosstabs.q:1163 src/language/stats/t-test.q:988
 #: src/language/stats/t-test.q:1173 src/language/stats/t-test.q:1272
 msgid "Upper"
 msgstr ""
 
 #: src/language/stats/t-test.q:1173 src/language/stats/t-test.q:1272
 msgid "Upper"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1178
+#: src/language/stats/crosstabs.q:1177
 msgid "Directional measures."
 msgstr ""
 
 msgid "Directional measures."
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1183 src/ui/gui/var-sheet.c:72
+#: src/language/stats/crosstabs.q:1182 src/ui/gui/var-sheet.c:71
 msgid "Type"
 msgstr "Typ"
 
 msgid "Type"
 msgstr "Typ"
 
-#: src/language/stats/crosstabs.q:1936
+#: src/language/stats/crosstabs.q:1935
 msgid "Pearson Chi-Square"
 msgstr ""
 
 msgid "Pearson Chi-Square"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1937
+#: src/language/stats/crosstabs.q:1936
 msgid "Likelihood Ratio"
 msgstr ""
 
 msgid "Likelihood Ratio"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1938
+#: src/language/stats/crosstabs.q:1937
 msgid "Fisher's Exact Test"
 msgstr ""
 
 msgid "Fisher's Exact Test"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1939
+#: src/language/stats/crosstabs.q:1938
 msgid "Continuity Correction"
 msgstr ""
 
 msgid "Continuity Correction"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1940
+#: src/language/stats/crosstabs.q:1939
 msgid "Linear-by-Linear Association"
 msgstr ""
 
 msgid "Linear-by-Linear Association"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1977 src/language/stats/crosstabs.q:2047
-#: src/language/stats/crosstabs.q:2106
+#: src/language/stats/crosstabs.q:1976 src/language/stats/crosstabs.q:2046
+#: src/language/stats/crosstabs.q:2105
 msgid "N of Valid Cases"
 msgstr ""
 
 msgid "N of Valid Cases"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1993 src/language/stats/crosstabs.q:2122
+#: src/language/stats/crosstabs.q:1992 src/language/stats/crosstabs.q:2121
 msgid "Nominal by Nominal"
 msgstr ""
 
 msgid "Nominal by Nominal"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1994 src/language/stats/crosstabs.q:2123
+#: src/language/stats/crosstabs.q:1993 src/language/stats/crosstabs.q:2122
 msgid "Ordinal by Ordinal"
 msgstr ""
 
 msgid "Ordinal by Ordinal"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1995
+#: src/language/stats/crosstabs.q:1994
 msgid "Interval by Interval"
 msgstr ""
 
 msgid "Interval by Interval"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:1996
+#: src/language/stats/crosstabs.q:1995
 msgid "Measure of Agreement"
 msgstr ""
 
 msgid "Measure of Agreement"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2001
+#: src/language/stats/crosstabs.q:2000
 msgid "Phi"
 msgstr ""
 
 msgid "Phi"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2002
+#: src/language/stats/crosstabs.q:2001
 msgid "Cramer's V"
 msgstr ""
 
 msgid "Cramer's V"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2003
+#: src/language/stats/crosstabs.q:2002
 msgid "Contingency Coefficient"
 msgstr ""
 
 msgid "Contingency Coefficient"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2004
+#: src/language/stats/crosstabs.q:2003
 msgid "Kendall's tau-b"
 msgstr ""
 
 msgid "Kendall's tau-b"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2005
+#: src/language/stats/crosstabs.q:2004
 msgid "Kendall's tau-c"
 msgstr ""
 
 msgid "Kendall's tau-c"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2006
+#: src/language/stats/crosstabs.q:2005
 msgid "Gamma"
 msgstr ""
 
 msgid "Gamma"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2007
+#: src/language/stats/crosstabs.q:2006
 msgid "Spearman Correlation"
 msgstr ""
 
 msgid "Spearman Correlation"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2008
+#: src/language/stats/crosstabs.q:2007
 msgid "Pearson's R"
 msgstr ""
 
 msgid "Pearson's R"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2009
+#: src/language/stats/crosstabs.q:2008
 msgid "Kappa"
 msgstr ""
 
 msgid "Kappa"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2079
+#: src/language/stats/crosstabs.q:2078
 #, c-format
 msgid "Odds Ratio for %s (%g / %g)"
 msgstr ""
 
 #, c-format
 msgid "Odds Ratio for %s (%g / %g)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2082
+#: src/language/stats/crosstabs.q:2081
 #, c-format
 msgid "Odds Ratio for %s (%.*s / %.*s)"
 msgstr ""
 
 #, c-format
 msgid "Odds Ratio for %s (%.*s / %.*s)"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2090
+#: src/language/stats/crosstabs.q:2089
 #, c-format
 msgid "For cohort %s = %g"
 msgstr ""
 
 #, c-format
 msgid "For cohort %s = %g"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2093
+#: src/language/stats/crosstabs.q:2092
 #, c-format
 msgid "For cohort %s = %.*s"
 msgstr ""
 
 #, c-format
 msgid "For cohort %s = %.*s"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2124
+#: src/language/stats/crosstabs.q:2123
 msgid "Nominal by Interval"
 msgstr ""
 
 msgid "Nominal by Interval"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2129
+#: src/language/stats/crosstabs.q:2128
 msgid "Lambda"
 msgstr ""
 
 msgid "Lambda"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2130
+#: src/language/stats/crosstabs.q:2129
 msgid "Goodman and Kruskal tau"
 msgstr ""
 
 msgid "Goodman and Kruskal tau"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2131
+#: src/language/stats/crosstabs.q:2130
 msgid "Uncertainty Coefficient"
 msgstr ""
 
 msgid "Uncertainty Coefficient"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2132
+#: src/language/stats/crosstabs.q:2131
 msgid "Somers' d"
 msgstr ""
 
 msgid "Somers' d"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2133
+#: src/language/stats/crosstabs.q:2132
 msgid "Eta"
 msgstr ""
 
 msgid "Eta"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2138
+#: src/language/stats/crosstabs.q:2137
 msgid "Symmetric"
 msgstr ""
 
 msgid "Symmetric"
 msgstr ""
 
-#: src/language/stats/crosstabs.q:2139 src/language/stats/crosstabs.q:2140
+#: src/language/stats/crosstabs.q:2138 src/language/stats/crosstabs.q:2139
 #, c-format
 msgid "%s Dependent"
 msgstr ""
 
 #, c-format
 msgid "%s Dependent"
 msgstr ""
 
-#: src/language/stats/descriptives.c:107 src/language/stats/examine.q:1529
-#: src/language/stats/frequencies.q:124 src/language/stats/oneway.q:393
+#: src/language/stats/descriptives.c:106 src/language/stats/examine.q:1529
+#: src/language/stats/frequencies.q:123 src/language/stats/oneway.q:393
 #: src/language/stats/t-test.q:684 src/language/stats/t-test.q:707
 #: src/language/stats/t-test.q:831 src/language/stats/t-test.q:1169
 msgid "Mean"
 msgstr ""
 
 #: src/language/stats/t-test.q:684 src/language/stats/t-test.q:707
 #: src/language/stats/t-test.q:831 src/language/stats/t-test.q:1169
 msgid "Mean"
 msgstr ""
 
-#: src/language/stats/descriptives.c:108
+#: src/language/stats/descriptives.c:107
 msgid "S E Mean"
 msgstr ""
 
 msgid "S E Mean"
 msgstr ""
 
-#: src/language/stats/descriptives.c:109 src/language/stats/frequencies.q:128
+#: src/language/stats/descriptives.c:108 src/language/stats/frequencies.q:127
 msgid "Std Dev"
 msgstr ""
 
 msgid "Std Dev"
 msgstr ""
 
-#: src/language/stats/descriptives.c:110 src/language/stats/examine.q:1609
-#: src/language/stats/frequencies.q:129
+#: src/language/stats/descriptives.c:109 src/language/stats/examine.q:1609
+#: src/language/stats/frequencies.q:128
 msgid "Variance"
 msgstr ""
 
 msgid "Variance"
 msgstr ""
 
-#: src/language/stats/descriptives.c:111 src/language/stats/examine.q:1716
-#: src/language/stats/frequencies.q:130
+#: src/language/stats/descriptives.c:110 src/language/stats/examine.q:1716
+#: src/language/stats/frequencies.q:129
 msgid "Kurtosis"
 msgstr ""
 
 msgid "Kurtosis"
 msgstr ""
 
-#: src/language/stats/descriptives.c:112
+#: src/language/stats/descriptives.c:111
 msgid "S E Kurt"
 msgstr ""
 
 msgid "S E Kurt"
 msgstr ""
 
-#: src/language/stats/descriptives.c:113 src/language/stats/examine.q:1696
-#: src/language/stats/frequencies.q:132
+#: src/language/stats/descriptives.c:112 src/language/stats/examine.q:1696
+#: src/language/stats/frequencies.q:131
 msgid "Skewness"
 msgstr ""
 
 msgid "Skewness"
 msgstr ""
 
-#: src/language/stats/descriptives.c:114
+#: src/language/stats/descriptives.c:113
 msgid "S E Skew"
 msgstr ""
 
 msgid "S E Skew"
 msgstr ""
 
-#: src/language/stats/descriptives.c:115 src/language/stats/examine.q:1657
-#: src/language/stats/frequencies.q:134
+#: src/language/stats/descriptives.c:114 src/language/stats/examine.q:1657
+#: src/language/stats/frequencies.q:133
 msgid "Range"
 msgstr ""
 
 msgid "Range"
 msgstr ""
 
-#: src/language/stats/descriptives.c:116 src/language/stats/examine.q:1634
-#: src/language/stats/frequencies.q:135 src/language/stats/oneway.q:405
+#: src/language/stats/descriptives.c:115 src/language/stats/examine.q:1634
+#: src/language/stats/frequencies.q:134 src/language/stats/oneway.q:405
 msgid "Minimum"
 msgstr ""
 
 msgid "Minimum"
 msgstr ""
 
-#: src/language/stats/descriptives.c:117 src/language/stats/examine.q:1645
-#: src/language/stats/frequencies.q:136 src/language/stats/oneway.q:406
+#: src/language/stats/descriptives.c:116 src/language/stats/examine.q:1645
+#: src/language/stats/frequencies.q:135 src/language/stats/oneway.q:406
 msgid "Maximum"
 msgstr ""
 
 msgid "Maximum"
 msgstr ""
 
-#: src/language/stats/descriptives.c:118 src/language/stats/frequencies.q:137
+#: src/language/stats/descriptives.c:117 src/language/stats/frequencies.q:136
 msgid "Sum"
 msgstr ""
 
 msgid "Sum"
 msgstr ""
 
-#: src/language/stats/descriptives.c:347
+#: src/language/stats/descriptives.c:346
 #, c-format
 msgid "Z-score variable name %s would be a duplicate variable name."
 msgstr ""
 
 #, c-format
 msgid "Z-score variable name %s would be a duplicate variable name."
 msgstr ""
 
-#: src/language/stats/descriptives.c:450
+#: src/language/stats/descriptives.c:449
 msgid "expecting statistic name: reverting to default"
 msgstr ""
 
 msgid "expecting statistic name: reverting to default"
 msgstr ""
 
-#: src/language/stats/descriptives.c:523
+#: src/language/stats/descriptives.c:522
 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 ""
 
 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:555
+#: src/language/stats/descriptives.c:554
 msgid "Mapping of variables to corresponding Z-scores."
 msgstr ""
 
 msgid "Mapping of variables to corresponding Z-scores."
 msgstr ""
 
-#: src/language/stats/descriptives.c:560
+#: src/language/stats/descriptives.c:559
 msgid "Source"
 msgstr ""
 
 msgid "Source"
 msgstr ""
 
-#: src/language/stats/descriptives.c:561
+#: src/language/stats/descriptives.c:560
 msgid "Target"
 msgstr ""
 
 msgid "Target"
 msgstr ""
 
-#: src/language/stats/descriptives.c:675
+#: src/language/stats/descriptives.c:674
 #, c-format
 msgid "Z-score of %s"
 msgstr ""
 
 #, c-format
 msgid "Z-score of %s"
 msgstr ""
 
-#: src/language/stats/descriptives.c:894
+#: src/language/stats/descriptives.c:893
 msgid "Valid N"
 msgstr ""
 
 msgid "Valid N"
 msgstr ""
 
-#: src/language/stats/descriptives.c:895
+#: src/language/stats/descriptives.c:894
 msgid "Missing N"
 msgstr ""
 
 msgid "Missing N"
 msgstr ""
 
-#: src/language/stats/descriptives.c:922
+#: src/language/stats/descriptives.c:921
 #, c-format
 msgid "Valid cases = %g; cases with missing value(s) = %g."
 msgstr ""
 #, c-format
 msgid "Valid cases = %g; cases with missing value(s) = %g."
 msgstr ""
@@ -2870,7 +2870,7 @@ msgstr ""
 msgid "5%% Trimmed Mean"
 msgstr ""
 
 msgid "5%% Trimmed Mean"
 msgstr ""
 
-#: src/language/stats/examine.q:1587 src/language/stats/frequencies.q:126
+#: src/language/stats/examine.q:1587 src/language/stats/frequencies.q:125
 msgid "Median"
 msgstr ""
 
 msgid "Median"
 msgstr ""
 
@@ -2916,7 +2916,7 @@ msgid "Dev from Normal"
 msgstr ""
 
 #: src/language/stats/examine.q:2015 src/language/stats/examine.q:2037
 msgstr ""
 
 #: src/language/stats/examine.q:2015 src/language/stats/examine.q:2037
-#: src/language/stats/frequencies.q:1562
+#: src/language/stats/frequencies.q:1561
 msgid "Percentiles"
 msgstr ""
 
 msgid "Percentiles"
 msgstr ""
 
@@ -2924,162 +2924,162 @@ msgstr ""
 msgid "Tukey's Hinges"
 msgstr ""
 
 msgid "Tukey's Hinges"
 msgstr ""
 
-#: src/language/stats/flip.c:102
+#: src/language/stats/flip.c:101
 msgid ""
 "FLIP ignores TEMPORARY.  Temporary transformations will be made permanent."
 msgstr ""
 
 msgid ""
 "FLIP ignores TEMPORARY.  Temporary transformations will be made permanent."
 msgstr ""
 
-#: src/language/stats/flip.c:244
+#: src/language/stats/flip.c:243
 #, c-format
 msgid "Could not create acceptable variant for variable %s."
 msgstr ""
 
 #, c-format
 msgid "Could not create acceptable variant for variable %s."
 msgstr ""
 
-#: src/language/stats/flip.c:260
+#: src/language/stats/flip.c:259
 msgid "Cannot create more than 99999 variable names."
 msgstr ""
 
 msgid "Cannot create more than 99999 variable names."
 msgstr ""
 
-#: src/language/stats/flip.c:297
+#: src/language/stats/flip.c:296
 msgid "Could not create temporary file for FLIP."
 msgstr ""
 
 msgid "Could not create temporary file for FLIP."
 msgstr ""
 
-#: src/language/stats/flip.c:308 src/language/stats/flip.c:377
+#: src/language/stats/flip.c:307 src/language/stats/flip.c:376
 #, c-format
 msgid "Error writing FLIP file: %s."
 msgstr ""
 
 #, c-format
 msgid "Error writing FLIP file: %s."
 msgstr ""
 
-#: src/language/stats/flip.c:424
+#: src/language/stats/flip.c:423
 #, c-format
 msgid "Error rewinding FLIP file: %s."
 msgstr ""
 
 #, c-format
 msgid "Error rewinding FLIP file: %s."
 msgstr ""
 
-#: src/language/stats/flip.c:431
+#: src/language/stats/flip.c:430
 msgid "Error creating FLIP source file."
 msgstr ""
 
 msgid "Error creating FLIP source file."
 msgstr ""
 
-#: src/language/stats/flip.c:443
+#: src/language/stats/flip.c:442
 #, c-format
 msgid "Error reading FLIP file: %s."
 msgstr ""
 
 #, c-format
 msgid "Error reading FLIP file: %s."
 msgstr ""
 
-#: src/language/stats/flip.c:467
+#: src/language/stats/flip.c:466
 #, c-format
 msgid "Error seeking FLIP source file: %s."
 msgstr ""
 
 #, c-format
 msgid "Error seeking FLIP source file: %s."
 msgstr ""
 
-#: src/language/stats/flip.c:475
+#: src/language/stats/flip.c:474
 #, c-format
 msgid "Error writing FLIP source file: %s."
 msgstr ""
 
 #, c-format
 msgid "Error writing FLIP source file: %s."
 msgstr ""
 
-#: src/language/stats/flip.c:486
+#: src/language/stats/flip.c:485
 #, c-format
 msgid "Error closing FLIP source file: %s."
 msgstr ""
 
 #, c-format
 msgid "Error closing FLIP source file: %s."
 msgstr ""
 
-#: src/language/stats/flip.c:494
+#: src/language/stats/flip.c:493
 #, c-format
 msgid "Error rewinding FLIP source file: %s."
 msgstr ""
 
 #, c-format
 msgid "Error rewinding FLIP source file: %s."
 msgstr ""
 
-#: src/language/stats/flip.c:542
+#: src/language/stats/flip.c:541
 #, c-format
 msgid "Error reading FLIP temporary file: %s."
 msgstr ""
 
 #, c-format
 msgid "Error reading FLIP temporary file: %s."
 msgstr ""
 
-#: src/language/stats/flip.c:545
+#: src/language/stats/flip.c:544
 msgid "Unexpected end of file reading FLIP temporary file."
 msgstr ""
 
 msgid "Unexpected end of file reading FLIP temporary file."
 msgstr ""
 
-#: src/language/stats/frequencies.q:125
+#: src/language/stats/frequencies.q:124
 msgid "S.E. Mean"
 msgstr ""
 
 msgid "S.E. Mean"
 msgstr ""
 
-#: src/language/stats/frequencies.q:127
+#: src/language/stats/frequencies.q:126
 msgid "Mode"
 msgstr ""
 
 msgid "Mode"
 msgstr ""
 
-#: src/language/stats/frequencies.q:131
+#: src/language/stats/frequencies.q:130
 msgid "S.E. Kurt"
 msgstr ""
 
 msgid "S.E. Kurt"
 msgstr ""
 
-#: src/language/stats/frequencies.q:133
+#: src/language/stats/frequencies.q:132
 msgid "S.E. Skew"
 msgstr ""
 
 msgid "S.E. Skew"
 msgstr ""
 
-#: src/language/stats/frequencies.q:415
+#: src/language/stats/frequencies.q:414
 msgid ""
 "At most one of BARCHART, HISTOGRAM, or HBAR should be given.  HBAR will be "
 "assumed.  Argument values will be given precedence increasing along the "
 "order given."
 msgstr ""
 
 msgid ""
 "At most one of BARCHART, HISTOGRAM, or HBAR should be given.  HBAR will be "
 "assumed.  Argument values will be given precedence increasing along the "
 "order given."
 msgstr ""
 
-#: src/language/stats/frequencies.q:498
+#: src/language/stats/frequencies.q:497
 #, c-format
 msgid ""
 "MAX must be greater than or equal to MIN, if both are specified.  However, "
 "MIN was specified as %g and MAX as %g.  MIN and MAX will be ignored."
 msgstr ""
 
 #, c-format
 msgid ""
 "MAX must be greater than or equal to MIN, if both are specified.  However, "
 "MIN was specified as %g and MAX as %g.  MIN and MAX will be ignored."
 msgstr ""
 
-#: src/language/stats/frequencies.q:830
+#: src/language/stats/frequencies.q:829
 msgid ""
 "Upper limit of integer mode value range must be greater than lower limit."
 msgstr ""
 
 msgid ""
 "Upper limit of integer mode value range must be greater than lower limit."
 msgstr ""
 
-#: src/language/stats/frequencies.q:843
+#: src/language/stats/frequencies.q:842
 #, c-format
 msgid "Variable %s specified multiple times on VARIABLES subcommand."
 msgstr ""
 
 #, c-format
 msgid "Variable %s specified multiple times on VARIABLES subcommand."
 msgstr ""
 
-#: src/language/stats/frequencies.q:849
+#: src/language/stats/frequencies.q:848
 #, c-format
 msgid "Integer mode specified, but %s is not a numeric variable."
 msgstr ""
 
 #, c-format
 msgid "Integer mode specified, but %s is not a numeric variable."
 msgstr ""
 
-#: src/language/stats/frequencies.q:923
+#: src/language/stats/frequencies.q:922
 msgid "`)' expected after GROUPED interval list."
 msgstr ""
 
 msgid "`)' expected after GROUPED interval list."
 msgstr ""
 
-#: src/language/stats/frequencies.q:935
+#: src/language/stats/frequencies.q:934
 #, c-format
 msgid "Variables %s specified on GROUPED but not on VARIABLES."
 msgstr ""
 
 #, c-format
 msgid "Variables %s specified on GROUPED but not on VARIABLES."
 msgstr ""
 
-#: src/language/stats/frequencies.q:942
+#: src/language/stats/frequencies.q:941
 #, c-format
 msgid "Variables %s specified multiple times on GROUPED subcommand."
 msgstr ""
 
 #, c-format
 msgid "Variables %s specified multiple times on GROUPED subcommand."
 msgstr ""
 
-#: src/language/stats/frequencies.q:1177 src/language/stats/frequencies.q:1269
-#: src/language/stats/frequencies.q:1270 src/language/stats/frequencies.q:1304
+#: src/language/stats/frequencies.q:1176 src/language/stats/frequencies.q:1268
+#: src/language/stats/frequencies.q:1269 src/language/stats/frequencies.q:1303
 msgid "Cum"
 msgstr ""
 
 msgid "Cum"
 msgstr ""
 
-#: src/language/stats/frequencies.q:1179 src/output/charts/plot-hist.c:129
+#: src/language/stats/frequencies.q:1178 src/output/charts/plot-hist.c:129
 msgid "Frequency"
 msgstr ""
 
 msgid "Frequency"
 msgstr ""
 
-#: src/language/stats/frequencies.q:1200
+#: src/language/stats/frequencies.q:1199
 msgid "Value Label"
 msgstr ""
 
 msgid "Value Label"
 msgstr ""
 
-#: src/language/stats/frequencies.q:1302
+#: src/language/stats/frequencies.q:1301
 msgid "Freq"
 msgstr ""
 
 msgid "Freq"
 msgstr ""
 
-#: src/language/stats/frequencies.q:1303 src/language/stats/frequencies.q:1305
+#: src/language/stats/frequencies.q:1302 src/language/stats/frequencies.q:1304
 msgid "Pct"
 msgstr ""
 
 msgid "Pct"
 msgstr ""
 
-#: src/language/stats/frequencies.q:1524
+#: src/language/stats/frequencies.q:1523
 #, c-format
 msgid "No valid data for variable %s; statistics not displayed."
 msgstr ""
 
 #, c-format
 msgid "No valid data for variable %s; statistics not displayed."
 msgstr ""
 
-#: src/language/stats/means.q:103
+#: src/language/stats/means.q:102
 msgid "Missing required subcommand TABLES."
 msgstr ""
 
 msgid "Missing required subcommand TABLES."
 msgstr ""
 
-#: src/language/stats/means.q:137
+#: src/language/stats/means.q:136
 msgid "TABLES subcommand may not appear more than once."
 msgstr ""
 
 msgid "TABLES subcommand may not appear more than once."
 msgstr ""
 
@@ -3291,15 +3291,15 @@ msgstr ""
 msgid "Dependent variable must be numeric."
 msgstr ""
 
 msgid "Dependent variable must be numeric."
 msgstr ""
 
-#: src/language/stats/sort-cases.c:64
+#: src/language/stats/sort-cases.c:63
 msgid "Buffer limit must be at least 2."
 msgstr ""
 
 msgid "Buffer limit must be at least 2."
 msgstr ""
 
-#: src/language/stats/sort-criteria.c:98
+#: src/language/stats/sort-criteria.c:97
 msgid "`A' or `D' expected inside parentheses."
 msgstr ""
 
 msgid "`A' or `D' expected inside parentheses."
 msgstr ""
 
-#: src/language/stats/sort-criteria.c:103
+#: src/language/stats/sort-criteria.c:102
 msgid "`)' expected."
 msgstr ""
 
 msgid "`)' expected."
 msgstr ""
 
@@ -3431,59 +3431,59 @@ msgstr ""
 msgid "%s & %s"
 msgstr ""
 
 msgid "%s & %s"
 msgstr ""
 
-#: src/language/syntax-file.c:89
+#: src/language/syntax-file.c:88
 #, c-format
 msgid "opening \"%s\" as syntax file"
 msgstr ""
 
 #, c-format
 msgid "opening \"%s\" as syntax file"
 msgstr ""
 
-#: src/language/syntax-file.c:94
+#: src/language/syntax-file.c:93
 #, c-format
 msgid "Opening `%s': %s."
 msgstr ""
 
 #, c-format
 msgid "Opening `%s': %s."
 msgstr ""
 
-#: src/language/syntax-file.c:107
+#: src/language/syntax-file.c:106
 #, c-format
 msgid "Reading `%s': %s."
 msgstr ""
 
 #, c-format
 msgid "Reading `%s': %s."
 msgstr ""
 
-#: src/language/syntax-file.c:128
+#: src/language/syntax-file.c:127
 #, c-format
 msgid "Closing `%s': %s."
 msgstr ""
 
 #, c-format
 msgid "Closing `%s': %s."
 msgstr ""
 
-#: src/language/tests/float-format.c:127
+#: src/language/tests/float-format.c:126
 #, c-format
 msgid "%d-byte string needed but %d-byte string supplied."
 msgstr ""
 
 #, c-format
 msgid "%d-byte string needed but %d-byte string supplied."
 msgstr ""
 
-#: src/language/tests/float-format.c:138
+#: src/language/tests/float-format.c:137
 msgid "Hexadecimal floating constant too long."
 msgstr ""
 
 msgid "Hexadecimal floating constant too long."
 msgstr ""
 
-#: src/language/tests/float-format.c:203
+#: src/language/tests/float-format.c:202
 #, c-format
 msgid ""
 "%s conversion of %s from %s to %s should have produced %s but actually "
 "produced %s."
 msgstr ""
 
 #, c-format
 msgid ""
 "%s conversion of %s from %s to %s should have produced %s but actually "
 "produced %s."
 msgstr ""
 
-#: src/language/tests/float-format.c:249
+#: src/language/tests/float-format.c:248
 msgid "Too many values in single command."
 msgstr ""
 
 msgid "Too many values in single command."
 msgstr ""
 
-#: src/language/tests/moments-test.c:50
+#: src/language/tests/moments-test.c:49
 msgid "expecting weight value"
 msgstr ""
 
 msgid "expecting weight value"
 msgstr ""
 
-#: src/language/utilities/date.c:35
+#: src/language/utilities/date.c:34
 msgid "Only USE ALL is currently implemented."
 msgstr ""
 
 msgid "Only USE ALL is currently implemented."
 msgstr ""
 
-#: src/language/utilities/include.c:50
+#: src/language/utilities/include.c:49
 msgid "expecting file name"
 msgstr ""
 
 msgid "expecting file name"
 msgstr ""
 
-#: src/language/utilities/include.c:65
+#: src/language/utilities/include.c:64
 #, c-format
 msgid "Can't find `%s' in include file search path."
 msgstr ""
 #, c-format
 msgid "Can't find `%s' in include file search path."
 msgstr ""
@@ -3503,235 +3503,235 @@ msgstr ""
 msgid "Cannot change mode of %s: %s"
 msgstr ""
 
 msgid "Cannot change mode of %s: %s"
 msgstr ""
 
-#: src/language/utilities/set.q:202 src/language/utilities/set.q:204
-#: src/language/utilities/set.q:206 src/language/utilities/set.q:208
-#: src/language/utilities/set.q:210 src/language/utilities/set.q:212
-#: src/language/utilities/set.q:214 src/language/utilities/set.q:216
-#: src/language/utilities/set.q:218
+#: src/language/utilities/set.q:201 src/language/utilities/set.q:203
+#: src/language/utilities/set.q:205 src/language/utilities/set.q:207
+#: src/language/utilities/set.q:209 src/language/utilities/set.q:211
+#: src/language/utilities/set.q:213 src/language/utilities/set.q:215
+#: src/language/utilities/set.q:217
 #, c-format
 msgid "%s is obsolete."
 msgstr ""
 
 #, c-format
 msgid "%s is obsolete."
 msgstr ""
 
-#: src/language/utilities/set.q:221
+#: src/language/utilities/set.q:220
 #, c-format
 msgid "%s is not implemented."
 msgstr ""
 
 #, c-format
 msgid "%s is not implemented."
 msgstr ""
 
-#: src/language/utilities/set.q:224
+#: src/language/utilities/set.q:223
 msgid "Active file compression is not implemented."
 msgstr ""
 
 msgid "Active file compression is not implemented."
 msgstr ""
 
-#: src/language/utilities/set.q:348
+#: src/language/utilities/set.q:347
 #, c-format
 msgid ""
 "%s: Custom currency string `%s' does not contain exactly three periods or "
 "commas (or it contains both)."
 msgstr ""
 
 #, c-format
 msgid ""
 "%s: Custom currency string `%s' does not contain exactly three periods or "
 "commas (or it contains both)."
 msgstr ""
 
-#: src/language/utilities/set.q:404
+#: src/language/utilities/set.q:403
 msgid "EPOCH must be 1500 or later."
 msgstr ""
 
 msgid "EPOCH must be 1500 or later."
 msgstr ""
 
-#: src/language/utilities/set.q:411
+#: src/language/utilities/set.q:410
 msgid "expecting AUTOMATIC or year"
 msgstr ""
 
 msgid "expecting AUTOMATIC or year"
 msgstr ""
 
-#: src/language/utilities/set.q:432
+#: src/language/utilities/set.q:431
 msgid "LENGTH must be at least 1."
 msgstr ""
 
 msgid "LENGTH must be at least 1."
 msgstr ""
 
-#: src/language/utilities/set.q:476
+#: src/language/utilities/set.q:475
 msgid "WIDTH must be at least 40."
 msgstr ""
 
 msgid "WIDTH must be at least 40."
 msgstr ""
 
-#: src/language/utilities/set.q:499
+#: src/language/utilities/set.q:498
 #, c-format
 msgid ""
 "FORMAT requires numeric output format as an argument.  Specified format %s "
 "is of type string."
 msgstr ""
 
 #, c-format
 msgid ""
 "FORMAT requires numeric output format as an argument.  Specified format %s "
 "is of type string."
 msgstr ""
 
-#: src/language/utilities/set.q:556
+#: src/language/utilities/set.q:555
 msgid "BLANKS is SYSMIS."
 msgstr ""
 
 msgid "BLANKS is SYSMIS."
 msgstr ""
 
-#: src/language/utilities/set.q:558
+#: src/language/utilities/set.q:557
 #, c-format
 msgid "BLANKS is %g."
 msgstr ""
 
 #, c-format
 msgid "BLANKS is %g."
 msgstr ""
 
-#: src/language/utilities/set.q:593
+#: src/language/utilities/set.q:592
 #, c-format
 msgid "%s is \"%s\"."
 msgstr ""
 
 #, c-format
 msgid "%s is \"%s\"."
 msgstr ""
 
-#: src/language/utilities/set.q:629
+#: src/language/utilities/set.q:628
 #, c-format
 msgid "DECIMAL is \"%c\"."
 msgstr ""
 
 #, c-format
 msgid "DECIMAL is \"%c\"."
 msgstr ""
 
-#: src/language/utilities/set.q:635
+#: src/language/utilities/set.q:634
 #, c-format
 msgid "ENDCMD is \"%c\"."
 msgstr ""
 
 #, c-format
 msgid "ENDCMD is \"%c\"."
 msgstr ""
 
-#: src/language/utilities/set.q:643
+#: src/language/utilities/set.q:642
 #, c-format
 msgid "ERRORS is \"%s\"."
 msgstr ""
 
 #, c-format
 msgid "ERRORS is \"%s\"."
 msgstr ""
 
-#: src/language/utilities/set.q:654
+#: src/language/utilities/set.q:653
 #, c-format
 msgid "FORMAT is %s."
 msgstr ""
 
 #, c-format
 msgid "FORMAT is %s."
 msgstr ""
 
-#: src/language/utilities/set.q:660
+#: src/language/utilities/set.q:659
 #, c-format
 msgid "LENGTH is %d."
 msgstr ""
 
 #, c-format
 msgid "LENGTH is %d."
 msgstr ""
 
-#: src/language/utilities/set.q:666
+#: src/language/utilities/set.q:665
 #, c-format
 msgid "MXERRS is %d."
 msgstr ""
 
 #, c-format
 msgid "MXERRS is %d."
 msgstr ""
 
-#: src/language/utilities/set.q:672
+#: src/language/utilities/set.q:671
 #, c-format
 msgid "MXLOOPS is %d."
 msgstr ""
 
 #, c-format
 msgid "MXLOOPS is %d."
 msgstr ""
 
-#: src/language/utilities/set.q:678
+#: src/language/utilities/set.q:677
 #, c-format
 msgid "MXWARNS is %d."
 msgstr ""
 
 #, c-format
 msgid "MXWARNS is %d."
 msgstr ""
 
-#: src/language/utilities/set.q:685 src/language/utilities/set.q:736
+#: src/language/utilities/set.q:684 src/language/utilities/set.q:735
 #, c-format
 msgid "%s is %s (%s)."
 msgstr ""
 
 #, c-format
 msgid "%s is %s (%s)."
 msgstr ""
 
-#: src/language/utilities/set.q:757
+#: src/language/utilities/set.q:756
 msgid "SCOMPRESSION is ON."
 msgstr ""
 
 msgid "SCOMPRESSION is ON."
 msgstr ""
 
-#: src/language/utilities/set.q:759
+#: src/language/utilities/set.q:758
 msgid "SCOMPRESSION is OFF."
 msgstr ""
 
 msgid "SCOMPRESSION is OFF."
 msgstr ""
 
-#: src/language/utilities/set.q:766
+#: src/language/utilities/set.q:765
 msgid "UNDEFINED is WARN."
 msgstr ""
 
 msgid "UNDEFINED is WARN."
 msgstr ""
 
-#: src/language/utilities/set.q:768
+#: src/language/utilities/set.q:767
 msgid "UNDEFINED is NOWARN."
 msgstr ""
 
 msgid "UNDEFINED is NOWARN."
 msgstr ""
 
-#: src/language/utilities/set.q:776
+#: src/language/utilities/set.q:775
 msgid "WEIGHT is off."
 msgstr ""
 
 msgid "WEIGHT is off."
 msgstr ""
 
-#: src/language/utilities/set.q:778
+#: src/language/utilities/set.q:777
 #, c-format
 msgid "WEIGHT is variable %s."
 msgstr ""
 
 #, c-format
 msgid "WEIGHT is variable %s."
 msgstr ""
 
-#: src/language/utilities/set.q:796
+#: src/language/utilities/set.q:795
 #, c-format
 msgid "WIDTH is %d."
 msgstr ""
 
 #, c-format
 msgid "WIDTH is %d."
 msgstr ""
 
-#: src/language/utilities/title.c:70
+#: src/language/utilities/title.c:69
 #, c-format
 msgid "%s: `.' expected after string."
 msgstr ""
 
 #, c-format
 msgid "%s: `.' expected after string."
 msgstr ""
 
-#: src/language/utilities/title.c:139
+#: src/language/utilities/title.c:138
 #, c-format
 msgid "Document entered %s by %s:"
 msgstr ""
 
 #, c-format
 msgid "Document entered %s by %s:"
 msgstr ""
 
-#: src/language/xforms/compute.c:148 src/language/xforms/compute.c:196
+#: src/language/xforms/compute.c:147 src/language/xforms/compute.c:195
 #, c-format
 msgid ""
 "When executing COMPUTE: SYSMIS is not a valid value as an index into vector %"
 "s."
 msgstr ""
 
 #, c-format
 msgid ""
 "When executing COMPUTE: SYSMIS is not a valid value as an index into vector %"
 "s."
 msgstr ""
 
-#: src/language/xforms/compute.c:152 src/language/xforms/compute.c:203
+#: src/language/xforms/compute.c:151 src/language/xforms/compute.c:202
 #, c-format
 msgid ""
 "When executing COMPUTE: %g is not a valid value as an index into vector %s."
 msgstr ""
 
 #, c-format
 msgid ""
 "When executing COMPUTE: %g is not a valid value as an index into vector %s."
 msgstr ""
 
-#: src/language/xforms/compute.c:346
+#: src/language/xforms/compute.c:345
 #, c-format
 msgid "There is no vector named %s."
 msgstr ""
 
 #, c-format
 msgid "There is no vector named %s."
 msgstr ""
 
-#: src/language/xforms/count.c:125
+#: src/language/xforms/count.c:124
 msgid "Destination cannot be a string variable."
 msgstr ""
 
 msgid "Destination cannot be a string variable."
 msgstr ""
 
-#: src/language/xforms/recode.c:249
+#: src/language/xforms/recode.c:248
 msgid ""
 "Inconsistent target variable types.  Target variables must be all numeric or "
 "all string."
 msgstr ""
 
 msgid ""
 "Inconsistent target variable types.  Target variables must be all numeric or "
 "all string."
 msgstr ""
 
-#: src/language/xforms/recode.c:269
+#: src/language/xforms/recode.c:268
 msgid "CONVERT requires string input values and numeric output values."
 msgstr ""
 
 msgid "CONVERT requires string input values and numeric output values."
 msgstr ""
 
-#: src/language/xforms/recode.c:387
+#: src/language/xforms/recode.c:386
 msgid "expecting output value"
 msgstr ""
 
 msgid "expecting output value"
 msgstr ""
 
-#: src/language/xforms/recode.c:436
+#: src/language/xforms/recode.c:435
 #, c-format
 msgid ""
 "%u variable(s) cannot be recoded into %u variable(s).  Specify the same "
 "number of variables as source and target variables."
 msgstr ""
 
 #, c-format
 msgid ""
 "%u variable(s) cannot be recoded into %u variable(s).  Specify the same "
 "number of variables as source and target variables."
 msgstr ""
 
-#: src/language/xforms/recode.c:451
+#: src/language/xforms/recode.c:450
 #, c-format
 msgid ""
 "There is no variable named %s.  (All string variables specified on INTO must "
 "already exist.  Use the STRING command to create a string variable.)"
 msgstr ""
 
 #, c-format
 msgid ""
 "There is no variable named %s.  (All string variables specified on INTO must "
 "already exist.  Use the STRING command to create a string variable.)"
 msgstr ""
 
-#: src/language/xforms/recode.c:466
+#: src/language/xforms/recode.c:465
 #, c-format
 msgid "INTO is required with %s input values and %s output values."
 msgstr ""
 
 #, c-format
 msgid "INTO is required with %s input values and %s output values."
 msgstr ""
 
-#: src/language/xforms/recode.c:479
+#: src/language/xforms/recode.c:478
 #, c-format
 msgid "Type mismatch.  Cannot store %s data in %s variable %s."
 msgstr ""
 
 #, c-format
 msgid "Type mismatch.  Cannot store %s data in %s variable %s."
 msgstr ""
 
-#: src/language/xforms/sample.c:78
+#: src/language/xforms/sample.c:77
 msgid "The sampling factor must be between 0 and 1 exclusive."
 msgstr ""
 
 msgid "The sampling factor must be between 0 and 1 exclusive."
 msgstr ""
 
-#: src/language/xforms/sample.c:98
+#: src/language/xforms/sample.c:97
 #, c-format
 msgid "Cannot sample %d observations from a population of %d."
 msgstr ""
 
 #, c-format
 msgid "Cannot sample %d observations from a population of %d."
 msgstr ""
 
-#: src/language/xforms/select-if.c:102
+#: src/language/xforms/select-if.c:101
 msgid "Syntax error expecting OFF or BY.  Turning off case filtering."
 msgstr ""
 
 msgid "Syntax error expecting OFF or BY.  Turning off case filtering."
 msgstr ""
 
-#: src/language/xforms/select-if.c:117
+#: src/language/xforms/select-if.c:116
 msgid "The filter variable must be numeric."
 msgstr ""
 
 msgid "The filter variable must be numeric."
 msgstr ""
 
-#: src/language/xforms/select-if.c:123
+#: src/language/xforms/select-if.c:122
 msgid "The filter variable may not be scratch."
 msgstr ""
 
 msgid "The filter variable may not be scratch."
 msgstr ""
 
-#: src/libpspp/hash.c:617
+#: src/libpspp/hash.c:616
 #, c-format
 msgid "hash table:"
 msgstr ""
 #, c-format
 msgid "hash table:"
 msgstr ""
@@ -3756,144 +3756,144 @@ msgstr ""
 msgid "Empirical with averaging"
 msgstr ""
 
 msgid "Empirical with averaging"
 msgstr ""
 
-#: src/math/sort.c:439
+#: src/math/sort.c:438
 #, c-format
 msgid ""
 "Out of memory.  Could not allocate room for minimum of %d cases of %d bytes "
 "each.  (PSPP workspace is currently restricted to a maximum of %d KB.)"
 msgstr ""
 
 #, c-format
 msgid ""
 "Out of memory.  Could not allocate room for minimum of %d cases of %d bytes "
 "each.  (PSPP workspace is currently restricted to a maximum of %d KB.)"
 msgstr ""
 
-#: src/output/afm.c:151
+#: src/output/afm.c:150
 #, c-format
 msgid "opening font metrics file \"%s\""
 msgstr ""
 
 #, c-format
 msgid "opening font metrics file \"%s\""
 msgstr ""
 
-#: src/output/afm.c:241
+#: src/output/afm.c:240
 msgid "first line must be StartFontMetrics"
 msgstr ""
 
 msgid "first line must be StartFontMetrics"
 msgstr ""
 
-#: src/output/afm.c:268
+#: src/output/afm.c:267
 #, c-format
 msgid "unsupported MappingScheme %d"
 msgstr ""
 
 #, c-format
 msgid "unsupported MappingScheme %d"
 msgstr ""
 
-#: src/output/afm.c:289
+#: src/output/afm.c:288
 msgid "required FontName is missing"
 msgstr ""
 
 msgid "required FontName is missing"
 msgstr ""
 
-#: src/output/afm.c:396
+#: src/output/afm.c:395
 msgid "CharMetrics line must start with C or CH"
 msgstr ""
 
 msgid "CharMetrics line must start with C or CH"
 msgstr ""
 
-#: src/output/afm.c:537
+#: src/output/afm.c:536
 #, c-format
 msgid "reference to unknown character \"%s\""
 msgstr ""
 
 #, c-format
 msgid "reference to unknown character \"%s\""
 msgstr ""
 
-#: src/output/afm.c:595
+#: src/output/afm.c:594
 msgid "expected end of file"
 msgstr ""
 
 msgid "expected end of file"
 msgstr ""
 
-#: src/output/afm.c:607
+#: src/output/afm.c:606
 msgid "syntax error expecting end of line"
 msgstr ""
 
 msgid "syntax error expecting end of line"
 msgstr ""
 
-#: src/output/afm.c:625 src/output/afm.c:662
+#: src/output/afm.c:624 src/output/afm.c:661
 msgid "number out of valid range"
 msgstr ""
 
 msgid "number out of valid range"
 msgstr ""
 
-#: src/output/afm.c:627 src/output/afm.c:664
+#: src/output/afm.c:626 src/output/afm.c:663
 msgid "invalid numeric syntax"
 msgstr ""
 
 msgid "invalid numeric syntax"
 msgstr ""
 
-#: src/output/afm.c:643
+#: src/output/afm.c:642
 msgid "syntax error expecting integer"
 msgstr ""
 
 msgid "syntax error expecting integer"
 msgstr ""
 
-#: src/output/afm.c:681
+#: src/output/afm.c:680
 msgid "syntax error expecting number"
 msgstr ""
 
 msgid "syntax error expecting number"
 msgstr ""
 
-#: src/output/afm.c:694
+#: src/output/afm.c:693
 msgid "syntax error in hex constant"
 msgstr ""
 
 msgid "syntax error in hex constant"
 msgstr ""
 
-#: src/output/afm.c:709
+#: src/output/afm.c:708
 msgid "syntax error expecting hex constant"
 msgstr ""
 
 msgid "syntax error expecting hex constant"
 msgstr ""
 
-#: src/output/afm.c:747
+#: src/output/afm.c:746
 msgid "unexpected end of line"
 msgstr ""
 
 msgid "unexpected end of line"
 msgstr ""
 
-#: src/output/afm.c:797
+#: src/output/afm.c:796
 msgid "unexpected end of line expecting string"
 msgstr ""
 
 msgid "unexpected end of line expecting string"
 msgstr ""
 
-#: src/output/ascii.c:161
+#: src/output/ascii.c:160
 #, c-format
 msgid "ascii: opening output file \"%s\""
 msgstr ""
 
 #, c-format
 msgid "ascii: opening output file \"%s\""
 msgstr ""
 
-#: src/output/ascii.c:172
+#: src/output/ascii.c:171
 #, c-format
 msgid ""
 "ascii: page excluding margins and headers must be at least 59 characters "
 "wide by 15 lines long, but as configured is only %d characters by %d lines"
 msgstr ""
 
 #, c-format
 msgid ""
 "ascii: page excluding margins and headers must be at least 59 characters "
 "wide by 15 lines long, but as configured is only %d characters by %d lines"
 msgstr ""
 
-#: src/output/ascii.c:233
+#: src/output/ascii.c:232
 #, c-format
 msgid "ascii: closing output file \"%s\""
 msgstr ""
 
 #, c-format
 msgid "ascii: closing output file \"%s\""
 msgstr ""
 
-#: src/output/ascii.c:285
+#: src/output/ascii.c:284
 #, c-format
 msgid ""
 "ascii: bad index value for `box' key: syntax is box[INDEX], 0 <= INDEX < %d "
 "decimal, with INDEX expressed in base 4"
 msgstr ""
 
 #, c-format
 msgid ""
 "ascii: bad index value for `box' key: syntax is box[INDEX], 0 <= INDEX < %d "
 "decimal, with INDEX expressed in base 4"
 msgstr ""
 
-#: src/output/ascii.c:292
+#: src/output/ascii.c:291
 #, c-format
 msgid "ascii: multiple values for %s"
 msgstr ""
 
 #, c-format
 msgid "ascii: multiple values for %s"
 msgstr ""
 
-#: src/output/ascii.c:300
+#: src/output/ascii.c:299
 #, c-format
 msgid "ascii: unknown parameter `%s'"
 msgstr ""
 
 #, c-format
 msgid "ascii: unknown parameter `%s'"
 msgstr ""
 
-#: src/output/ascii.c:314
+#: src/output/ascii.c:313
 #, c-format
 msgid "ascii: positive integer required as `%s' value"
 msgstr ""
 
 #, c-format
 msgid "ascii: positive integer required as `%s' value"
 msgstr ""
 
-#: src/output/ascii.c:340
+#: src/output/ascii.c:339
 msgid "ascii: `emphasis' value must be `bold', `underline', or `none'"
 msgstr ""
 
 msgid "ascii: `emphasis' value must be `bold', `underline', or `none'"
 msgstr ""
 
-#: src/output/ascii.c:353
+#: src/output/ascii.c:352
 #, c-format
 msgid "ascii: zero or positive integer required as `%s' value"
 msgstr ""
 
 #, c-format
 msgid "ascii: zero or positive integer required as `%s' value"
 msgstr ""
 
-#: src/output/ascii.c:384
+#: src/output/ascii.c:383
 #, c-format
 msgid "ascii: boolean value expected for `%s'"
 msgstr ""
 
 #, c-format
 msgid "ascii: boolean value expected for `%s'"
 msgstr ""
 
-#: src/output/ascii.c:473
+#: src/output/ascii.c:472
 #, c-format
 msgid "ascii: bad line (%d,%d)-(%d,%d) out of (%d,%d)\n"
 msgstr ""
 
 #, c-format
 msgid "ascii: bad line (%d,%d)-(%d,%d) out of (%d,%d)\n"
 msgstr ""
 
-#: src/output/ascii.c:683 src/output/postscript.c:830
+#: src/output/ascii.c:682 src/output/postscript.c:829
 #, c-format
 msgid "%s - Page %d"
 msgstr ""
 
 #, c-format
 msgid "%s - Page %d"
 msgstr ""
 
-#: src/output/ascii.c:727
+#: src/output/ascii.c:726
 msgid "ascii: charts are unsupported by this driver"
 msgstr ""
 
 msgid "ascii: charts are unsupported by this driver"
 msgstr ""
 
@@ -3901,173 +3901,173 @@ msgstr ""
 msgid "HISTOGRAM"
 msgstr ""
 
 msgid "HISTOGRAM"
 msgstr ""
 
-#: src/output/html.c:70
+#: src/output/html.c:69
 #, c-format
 msgid "opening HTML output file: %s"
 msgstr ""
 
 #, c-format
 msgid "opening HTML output file: %s"
 msgstr ""
 
-#: src/output/html.c:81
+#: src/output/html.c:80
 msgid "PSPP Output"
 msgstr ""
 
 msgid "PSPP Output"
 msgstr ""
 
-#: src/output/html.c:170
+#: src/output/html.c:169
 #, c-format
 msgid "unknown configuration parameter `%s' for HTML device driver"
 msgstr ""
 
 #, c-format
 msgid "unknown configuration parameter `%s' for HTML device driver"
 msgstr ""
 
-#: src/output/html.c:186
+#: src/output/html.c:185
 msgid "`chart-files' value must contain `#'"
 msgstr ""
 
 msgid "`chart-files' value must contain `#'"
 msgstr ""
 
-#: src/output/html.c:384
+#: src/output/html.c:383
 #, c-format
 msgid "creating \"%s\""
 msgstr ""
 
 #, c-format
 msgid "creating \"%s\""
 msgstr ""
 
-#: src/output/output.c:165
+#: src/output/output.c:164
 #, c-format
 msgid "unknown output driver `%s'"
 msgstr ""
 
 #, c-format
 msgid "unknown output driver `%s'"
 msgstr ""
 
-#: src/output/output.c:167
+#: src/output/output.c:166
 #, c-format
 msgid "output driver `%s' referenced but never defined"
 msgstr ""
 
 #, c-format
 msgid "output driver `%s' referenced but never defined"
 msgstr ""
 
-#: src/output/output.c:258
+#: src/output/output.c:257
 msgid "using default output driver configuration"
 msgstr ""
 
 msgid "using default output driver configuration"
 msgstr ""
 
-#: src/output/output.c:287
+#: src/output/output.c:286
 msgid "cannot find output initialization file (use `-vv' to view search path)"
 msgstr ""
 
 msgid "cannot find output initialization file (use `-vv' to view search path)"
 msgstr ""
 
-#: src/output/output.c:295
+#: src/output/output.c:294
 #, c-format
 msgid "cannot open \"%s\""
 msgstr ""
 
 #, c-format
 msgid "cannot open \"%s\""
 msgstr ""
 
-#: src/output/output.c:307
+#: src/output/output.c:306
 #, c-format
 msgid "reading \"%s\""
 msgstr ""
 
 #, c-format
 msgid "reading \"%s\""
 msgstr ""
 
-#: src/output/output.c:329
+#: src/output/output.c:328
 msgid "syntax error"
 msgstr ""
 
 msgid "syntax error"
 msgstr ""
 
-#: src/output/output.c:338
+#: src/output/output.c:337
 #, c-format
 msgid "error closing \"%s\""
 msgstr ""
 
 #, c-format
 msgid "error closing \"%s\""
 msgstr ""
 
-#: src/output/output.c:346
+#: src/output/output.c:345
 msgid "no active output drivers"
 msgstr ""
 
 msgid "no active output drivers"
 msgstr ""
 
-#: src/output/output.c:349
+#: src/output/output.c:348
 msgid "error reading device definition file"
 msgstr ""
 
 msgid "error reading device definition file"
 msgstr ""
 
-#: src/output/output.c:466
+#: src/output/output.c:465
 #, c-format
 msgid ""
 "Driver classes:\n"
 "\t"
 msgstr ""
 
 #, c-format
 msgid ""
 "Driver classes:\n"
 "\t"
 msgstr ""
 
-#: src/output/output.c:498
+#: src/output/output.c:497
 #, c-format
 msgid "syntax error parsing options for \"%s\" driver"
 msgstr ""
 
 #, c-format
 msgid "syntax error parsing options for \"%s\" driver"
 msgstr ""
 
-#: src/output/output.c:514
+#: src/output/output.c:513
 #, c-format
 msgid ""
 "reached end of options inside quoted string parsing options for \"%s\" driver"
 msgstr ""
 
 #, c-format
 msgid ""
 "reached end of options inside quoted string parsing options for \"%s\" driver"
 msgstr ""
 
-#: src/output/output.c:584
+#: src/output/output.c:583
 #, c-format
 msgid "syntax error in string constant parsing options for \"%s\" driver"
 msgstr ""
 
 #, c-format
 msgid "syntax error in string constant parsing options for \"%s\" driver"
 msgstr ""
 
-#: src/output/output.c:632
+#: src/output/output.c:631
 #, c-format
 msgid "syntax error expecting `=' parsing options for driver \"%s\""
 msgstr ""
 
 #, c-format
 msgid "syntax error expecting `=' parsing options for driver \"%s\""
 msgstr ""
 
-#: src/output/output.c:683
+#: src/output/output.c:682
 #, c-format
 msgid "unknown output driver class `%.*s'"
 msgstr ""
 
 #, c-format
 msgid "unknown output driver class `%.*s'"
 msgstr ""
 
-#: src/output/output.c:698
+#: src/output/output.c:697
 #, c-format
 msgid "unknown device type `%.*s'"
 msgstr ""
 
 #, c-format
 msgid "unknown device type `%.*s'"
 msgstr ""
 
-#: src/output/output.c:715
+#: src/output/output.c:714
 #, c-format
 msgid "cannot initialize output driver `%s' of class `%s'"
 msgstr ""
 
 #, c-format
 msgid "cannot initialize output driver `%s' of class `%s'"
 msgstr ""
 
-#: src/output/output.c:761
+#: src/output/output.c:760
 msgid "driver definition line missing driver name or class name"
 msgstr ""
 
 msgid "driver definition line missing driver name or class name"
 msgstr ""
 
-#: src/output/output.c:907
+#: src/output/output.c:906
 #, c-format
 msgid "unit \"%s\" is unknown in dimension \"%s\""
 msgstr ""
 
 #, c-format
 msgid "unit \"%s\" is unknown in dimension \"%s\""
 msgstr ""
 
-#: src/output/output.c:922
+#: src/output/output.c:921
 #, c-format
 msgid "bad dimension \"%s\""
 msgstr ""
 
 #, c-format
 msgid "bad dimension \"%s\""
 msgstr ""
 
-#: src/output/output.c:948
+#: src/output/output.c:947
 #, c-format
 msgid "`x' expected in paper size `%s'"
 msgstr ""
 
 #, c-format
 msgid "`x' expected in paper size `%s'"
 msgstr ""
 
-#: src/output/output.c:958
+#: src/output/output.c:957
 #, c-format
 msgid "trailing garbage `%s' on paper size `%s'"
 msgstr ""
 
 #, c-format
 msgid "trailing garbage `%s' on paper size `%s'"
 msgstr ""
 
-#: src/output/output.c:1002
+#: src/output/output.c:1001
 msgid "paper size name cannot be empty"
 msgstr ""
 
 msgid "paper size name cannot be empty"
 msgstr ""
 
-#: src/output/output.c:1019
+#: src/output/output.c:1018
 msgid "cannot find `papersize' configuration file"
 msgstr ""
 
 msgid "cannot find `papersize' configuration file"
 msgstr ""
 
-#: src/output/output.c:1026
+#: src/output/output.c:1025
 #, c-format
 msgid "error opening \"%s\""
 msgstr ""
 
 #, c-format
 msgid "error opening \"%s\""
 msgstr ""
 
-#: src/output/output.c:1037
+#: src/output/output.c:1036
 #, c-format
 msgid "error reading \"%s\""
 msgstr ""
 
 #, c-format
 msgid "error reading \"%s\""
 msgstr ""
 
-#: src/output/output.c:1063
+#: src/output/output.c:1062
 msgid "syntax error in paper size definition"
 msgstr ""
 
 msgid "syntax error in paper size definition"
 msgstr ""
 
-#: src/output/output.c:1075
+#: src/output/output.c:1074
 msgid "error reading paper size definition file"
 msgstr ""
 
 msgid "error reading paper size definition file"
 msgstr ""
 
-#: src/output/postscript.c:163
+#: src/output/postscript.c:162
 #, c-format
 msgid "opening PostScript output file \"%s\""
 msgstr ""
 
 #, c-format
 msgid "opening PostScript output file \"%s\""
 msgstr ""
 
-#: src/output/postscript.c:201
+#: src/output/postscript.c:200
 #, c-format
 msgid ""
 "The defined PostScript page is not long enough to hold margins and headers, "
 #, c-format
 msgid ""
 "The defined PostScript page is not long enough to hold margins and headers, "
@@ -4075,87 +4075,87 @@ msgid ""
 "lines of each font at the default size of %d.%03d points."
 msgstr ""
 
 "lines of each font at the default size of %d.%03d points."
 msgstr ""
 
-#: src/output/postscript.c:249
+#: src/output/postscript.c:248
 #, c-format
 msgid "closing PostScript output file \"%s\""
 msgstr ""
 
 #, c-format
 msgid "closing PostScript output file \"%s\""
 msgstr ""
 
-#: src/output/postscript.c:309
+#: src/output/postscript.c:308
 #, c-format
 msgid "unknown configuration parameter `%s' for PostScript device driver"
 msgstr ""
 
 #, c-format
 msgid "unknown configuration parameter `%s' for PostScript device driver"
 msgstr ""
 
-#: src/output/postscript.c:325
+#: src/output/postscript.c:324
 #, c-format
 msgid ""
 "unknown orientation `%s' (valid orientations are `portrait' and `landscape')"
 msgstr ""
 
 #, c-format
 msgid ""
 "unknown orientation `%s' (valid orientations are `portrait' and `landscape')"
 msgstr ""
 
-#: src/output/postscript.c:337
+#: src/output/postscript.c:336
 #, c-format
 msgid "boolean value expected for %s"
 msgstr ""
 
 #, c-format
 msgid "boolean value expected for %s"
 msgstr ""
 
-#: src/output/postscript.c:350
+#: src/output/postscript.c:349
 #, c-format
 msgid "positive integer value required for `%s'"
 msgstr ""
 
 #, c-format
 msgid "positive integer value required for `%s'"
 msgstr ""
 
-#: src/output/postscript.c:355
+#: src/output/postscript.c:354
 #, c-format
 msgid "default font size must be at least 1 point (value of 1000 for key `%s')"
 msgstr ""
 
 #, c-format
 msgid "default font size must be at least 1 point (value of 1000 for key `%s')"
 msgstr ""
 
-#: src/output/postscript.c:387
+#: src/output/postscript.c:386
 #, c-format
 msgid "value for `%s' must be a dimension of positive length (i.e., `1in')"
 msgstr ""
 
 #, c-format
 msgid "value for `%s' must be a dimension of positive length (i.e., `1in')"
 msgstr ""
 
-#: src/output/postscript.c:1180
+#: src/output/postscript.c:1179
 #, c-format
 msgid "\"%s\": bad font specification"
 msgstr ""
 
 #, c-format
 msgid "\"%s\": bad font specification"
 msgstr ""
 
-#: src/output/postscript.c:1188
+#: src/output/postscript.c:1187
 #, c-format
 msgid "could not find AFM file \"%s\""
 msgstr ""
 
 #, c-format
 msgid "could not find AFM file \"%s\""
 msgstr ""
 
-#: src/output/postscript.c:1202
+#: src/output/postscript.c:1201
 #, c-format
 msgid "could not find font \"%s\""
 msgstr ""
 
 #, c-format
 msgid "could not find font \"%s\""
 msgstr ""
 
-#: src/output/postscript.c:1211
+#: src/output/postscript.c:1210
 #, c-format
 msgid "could not find encoding \"%s\""
 msgstr ""
 
 #, c-format
 msgid "could not find encoding \"%s\""
 msgstr ""
 
-#: src/output/postscript.c:1311
+#: src/output/postscript.c:1310
 #, c-format
 msgid "cannot open font file \"%s\""
 msgstr ""
 
 #, c-format
 msgid "cannot open font file \"%s\""
 msgstr ""
 
-#: src/output/postscript.c:1352
+#: src/output/postscript.c:1351
 #, c-format
 msgid "reading font file \"%s\""
 msgstr ""
 
 #, c-format
 msgid "reading font file \"%s\""
 msgstr ""
 
-#: src/output/postscript.c:1374
+#: src/output/postscript.c:1373
 #, c-format
 msgid "cannot open font encoding file \"%s\""
 msgstr ""
 
 #, c-format
 msgid "cannot open font encoding file \"%s\""
 msgstr ""
 
-#: src/output/postscript.c:1403
+#: src/output/postscript.c:1402
 msgid "invalid numeric format"
 msgstr ""
 
 msgid "invalid numeric format"
 msgstr ""
 
-#: src/output/table.c:238
+#: src/output/table.c:237
 #, c-format
 msgid "bad vline: x=%d+%d=%d y=(%d+%d=%d,%d+%d=%d) in table size (%d,%d)\n"
 msgstr ""
 
 #, c-format
 msgid "bad vline: x=%d+%d=%d y=(%d+%d=%d,%d+%d=%d) in table size (%d,%d)\n"
 msgstr ""
 
-#: src/output/table.c:309
+#: src/output/table.c:308
 #, c-format
 msgid ""
 "bad box: (%d+%d=%d,%d+%d=%d)-(%d+%d=%d,%d+%d=%d) in table size (%d,%d)\n"
 #, c-format
 msgid ""
 "bad box: (%d+%d=%d,%d+%d=%d)-(%d+%d=%d,%d+%d=%d) in table size (%d,%d)\n"
@@ -4165,37 +4165,37 @@ msgstr ""
 msgid "Style of bevel around the custom entry button"
 msgstr ""
 
 msgid "Style of bevel around the custom entry button"
 msgstr ""
 
-#: src/ui/gui/menu-actions.c:63 src/ui/gui/syntax-editor.c:61
+#: src/ui/gui/menu-actions.c:64 src/ui/gui/syntax-editor.c:61
 #: src/ui/gui/syntax-editor.c:83
 msgid "Untitled"
 msgstr "Unbetitelt"
 
 #: src/ui/gui/syntax-editor.c:83
 msgid "Untitled"
 msgstr "Unbetitelt"
 
-#: src/ui/gui/menu-actions.c:65
+#: src/ui/gui/menu-actions.c:66
 msgid "PSPP Data Editor"
 msgstr "PSPP Dateiaufbereiter"
 
 msgid "PSPP Data Editor"
 msgstr "PSPP Dateiaufbereiter"
 
-#: src/ui/gui/menu-actions.c:219 src/ui/gui/psppire.glade:502
+#: src/ui/gui/menu-actions.c:220 src/ui/gui/psppire.glade:502
 msgid "Open"
 msgstr "Öffen"
 
 msgid "Open"
 msgstr "Öffen"
 
-#: src/ui/gui/menu-actions.c:227
+#: src/ui/gui/menu-actions.c:228
 msgid "System Files (*.sav)"
 msgstr "Systemedatein (*.sav)"
 
 msgid "System Files (*.sav)"
 msgstr "Systemedatein (*.sav)"
 
-#: src/ui/gui/menu-actions.c:233
+#: src/ui/gui/menu-actions.c:234
 msgid "Portable Files (*.por) "
 msgstr "Tragbardatein (*.por)"
 
 msgid "Portable Files (*.por) "
 msgstr "Tragbardatein (*.por)"
 
-#: src/ui/gui/menu-actions.c:239 src/ui/gui/syntax-editor.c:122
+#: src/ui/gui/menu-actions.c:240 src/ui/gui/syntax-editor.c:122
 #: src/ui/gui/syntax-editor.c:378
 msgid "All Files"
 msgstr "Alle Datei"
 
 #: src/ui/gui/syntax-editor.c:378
 msgid "All Files"
 msgstr "Alle Datei"
 
-#: src/ui/gui/menu-actions.c:287
+#: src/ui/gui/menu-actions.c:288
 msgid "Save Data As"
 msgstr "Speichern unter"
 
 msgid "Save Data As"
 msgstr "Speichern unter"
 
-#: src/ui/gui/menu-actions.c:514
+#: src/ui/gui/menu-actions.c:515
 msgid "Font Selection"
 msgstr "Schriftwahlung"
 
 msgid "Font Selection"
 msgstr "Schriftwahlung"
 
@@ -4223,13 +4223,13 @@ msgstr "Falshe Spannweitebeschreibung"
 msgid "Sorry. The help system hasn't yet been implemented."
 msgstr "Es gibt noch nicht kein Helpsysteme. Schade!"
 
 msgid "Sorry. The help system hasn't yet been implemented."
 msgstr "Es gibt noch nicht kein Helpsysteme. Schade!"
 
-#: src/ui/gui/psppire-data-store.c:724
+#: src/ui/gui/psppire-data-store.c:725
 msgid "var"
 msgstr ""
 
 msgid "var"
 msgstr ""
 
-#: src/ui/gui/psppire-data-store.c:805 src/ui/gui/psppire-var-store.c:521
-#: src/ui/gui/psppire-var-store.c:531 src/ui/gui/psppire-var-store.c:541
-#: src/ui/gui/psppire-var-store.c:738
+#: src/ui/gui/psppire-data-store.c:806 src/ui/gui/psppire-var-store.c:554
+#: src/ui/gui/psppire-var-store.c:564 src/ui/gui/psppire-var-store.c:574
+#: src/ui/gui/psppire-var-store.c:772
 #, c-format
 msgid "%d"
 msgstr ""
 #, c-format
 msgid "%d"
 msgstr ""
@@ -4421,11 +4421,11 @@ msgstr ""
 msgid "Variable Type"
 msgstr "Variableansicht"
 
 msgid "Variable Type"
 msgstr "Variableansicht"
 
-#: src/ui/gui/psppire.glade:1107 src/ui/gui/psppire-var-store.c:445
+#: src/ui/gui/psppire.glade:1107 src/ui/gui/psppire-var-store.c:478
 msgid "Comma"
 msgstr "Komma"
 
 msgid "Comma"
 msgstr "Komma"
 
-#: src/ui/gui/psppire.glade:1127 src/ui/gui/psppire-var-store.c:446
+#: src/ui/gui/psppire.glade:1127 src/ui/gui/psppire-var-store.c:479
 msgid "Dot"
 msgstr "Punkt"
 
 msgid "Dot"
 msgstr "Punkt"
 
@@ -4433,11 +4433,11 @@ msgstr "Punkt"
 msgid "Scientific notation"
 msgstr "Wissenschaftlichnotation"
 
 msgid "Scientific notation"
 msgstr "Wissenschaftlichnotation"
 
-#: src/ui/gui/psppire.glade:1167 src/ui/gui/psppire-var-store.c:448
+#: src/ui/gui/psppire.glade:1167 src/ui/gui/psppire-var-store.c:481
 msgid "Date"
 msgstr "Datum"
 
 msgid "Date"
 msgstr "Datum"
 
-#: src/ui/gui/psppire.glade:1187 src/ui/gui/psppire-var-store.c:449
+#: src/ui/gui/psppire.glade:1187 src/ui/gui/psppire-var-store.c:482
 msgid "Dollar"
 msgstr "Euro"
 
 msgid "Dollar"
 msgstr "Euro"
 
@@ -4505,11 +4505,11 @@ msgstr "Di_skretwerte"
 msgid "Case Number:"
 msgstr ""
 
 msgid "Case Number:"
 msgstr ""
 
-#: src/ui/gui/psppire.glade:2732 src/ui/gui/sort-cases-dialog.c:282
+#: src/ui/gui/psppire.glade:2732 src/ui/gui/sort-cases-dialog.c:280
 msgid "Ascending"
 msgstr ""
 
 msgid "Ascending"
 msgstr ""
 
-#: src/ui/gui/psppire.glade:2751 src/ui/gui/sort-cases-dialog.c:284
+#: src/ui/gui/psppire.glade:2751 src/ui/gui/sort-cases-dialog.c:282
 msgid "Descending"
 msgstr ""
 
 msgid "Descending"
 msgstr ""
 
@@ -4546,23 +4546,23 @@ msgstr ""
 msgid "To End"
 msgstr ""
 
 msgid "To End"
 msgstr ""
 
-#: src/ui/gui/psppire-var-store.c:440
+#: src/ui/gui/psppire-var-store.c:473
 msgid "None"
 msgstr "Keine"
 
 msgid "None"
 msgstr "Keine"
 
-#: src/ui/gui/psppire-var-store.c:447
+#: src/ui/gui/psppire-var-store.c:480
 msgid "Scientific"
 msgstr "Wissenschäflich"
 
 msgid "Scientific"
 msgstr "Wissenschäflich"
 
-#: src/ui/gui/psppire-var-store.c:450
+#: src/ui/gui/psppire-var-store.c:483
 msgid "Custom"
 msgstr "Spezial"
 
 msgid "Custom"
 msgstr "Spezial"
 
-#: src/ui/gui/sort-cases-dialog.c:342
+#: src/ui/gui/sort-cases-dialog.c:340
 msgid "Var"
 msgstr ""
 
 msgid "Var"
 msgstr ""
 
-#: src/ui/gui/sort-cases-dialog.c:370
+#: src/ui/gui/sort-cases-dialog.c:368
 msgid "Criteria"
 msgstr ""
 
 msgid "Criteria"
 msgstr ""
 
@@ -4590,55 +4590,55 @@ msgstr "PSPP Dateiaufbereiter"
 msgid "Open Syntax"
 msgstr ""
 
 msgid "Open Syntax"
 msgstr ""
 
-#: src/ui/gui/var-sheet.c:71
+#: src/ui/gui/var-sheet.c:70
 msgid "Name"
 msgstr "Name"
 
 msgid "Name"
 msgstr "Name"
 
-#: src/ui/gui/var-sheet.c:73
+#: src/ui/gui/var-sheet.c:72
 msgid "Width"
 msgstr "Große"
 
 msgid "Width"
 msgstr "Große"
 
-#: src/ui/gui/var-sheet.c:74
+#: src/ui/gui/var-sheet.c:73
 msgid "Decimals"
 msgstr "Dezimalstellen"
 
 msgid "Decimals"
 msgstr "Dezimalstellen"
 
-#: src/ui/gui/var-sheet.c:76
+#: src/ui/gui/var-sheet.c:75
 msgid "Values"
 msgstr "Werten"
 
 msgid "Values"
 msgstr "Werten"
 
-#: src/ui/gui/var-sheet.c:79
+#: src/ui/gui/var-sheet.c:78
 msgid "Align"
 msgstr "Einstellung"
 
 msgid "Align"
 msgstr "Einstellung"
 
-#: src/ui/gui/var-sheet.c:80
+#: src/ui/gui/var-sheet.c:79
 msgid "Measure"
 msgstr "Messe"
 
 msgid "Measure"
 msgstr "Messe"
 
-#: src/ui/gui/var-sheet.c:103
+#: src/ui/gui/var-sheet.c:102
 msgid "Left"
 msgstr "Links"
 
 msgid "Left"
 msgstr "Links"
 
-#: src/ui/gui/var-sheet.c:104
+#: src/ui/gui/var-sheet.c:103
 msgid "Right"
 msgstr "Rechts"
 
 msgid "Right"
 msgstr "Rechts"
 
-#: src/ui/gui/var-sheet.c:105
+#: src/ui/gui/var-sheet.c:104
 msgid "Centre"
 msgstr "Mittel"
 
 msgid "Centre"
 msgstr "Mittel"
 
-#: src/ui/gui/var-sheet.c:110
+#: src/ui/gui/var-sheet.c:109
 msgid "Nominal"
 msgstr "Nominalwert"
 
 msgid "Nominal"
 msgstr "Nominalwert"
 
-#: src/ui/gui/var-sheet.c:111
+#: src/ui/gui/var-sheet.c:110
 msgid "Ordinal"
 msgstr "Ordinalwert"
 
 msgid "Ordinal"
 msgstr "Ordinalwert"
 
-#: src/ui/gui/var-sheet.c:112
+#: src/ui/gui/var-sheet.c:111
 msgid "Scale"
 msgstr "Skalwert"
 
 msgid "Scale"
 msgstr "Skalwert"
 
-#: src/ui/terminal/command-line.c:222
+#: src/ui/terminal/command-line.c:221
 #, c-format
 msgid ""
 "PSPP, a program for statistical analysis of sample data.\n"
 #, c-format
 msgid ""
 "PSPP, a program for statistical analysis of sample data.\n"
@@ -4684,43 +4684,43 @@ msgid ""
 "\n"
 msgstr ""
 
 "\n"
 msgstr ""
 
-#: src/ui/terminal/command-line.c:257
+#: src/ui/terminal/command-line.c:256
 #, c-format
 msgid ""
 "\n"
 "Report bugs to <%s>.\n"
 msgstr ""
 
 #, c-format
 msgid ""
 "\n"
 "Report bugs to <%s>.\n"
 msgstr ""
 
-#: src/ui/terminal/main.c:126
+#: src/ui/terminal/main.c:125
 msgid ""
 "Stopping syntax file processing here to avoid a cascade of dependent command "
 "failures."
 msgstr ""
 
 msgid ""
 "Stopping syntax file processing here to avoid a cascade of dependent command "
 "failures."
 msgstr ""
 
-#: src/ui/terminal/msg-ui.c:66
+#: src/ui/terminal/msg-ui.c:65
 #, c-format
 msgid "Cannot open %s (%s). Writing errors to stdout instead.\n"
 msgstr ""
 
 #, c-format
 msgid "Cannot open %s (%s). Writing errors to stdout instead.\n"
 msgstr ""
 
-#: src/ui/terminal/msg-ui.c:93
+#: src/ui/terminal/msg-ui.c:92
 msgid "Terminating execution of syntax file due to error."
 msgstr ""
 
 msgid "Terminating execution of syntax file due to error."
 msgstr ""
 
-#: src/ui/terminal/msg-ui.c:95
+#: src/ui/terminal/msg-ui.c:94
 #, c-format
 msgid "Errors (%d) exceeds limit (%d)."
 msgstr ""
 
 #, c-format
 msgid "Errors (%d) exceeds limit (%d)."
 msgstr ""
 
-#: src/ui/terminal/msg-ui.c:98
+#: src/ui/terminal/msg-ui.c:97
 #, c-format
 msgid "Warnings (%d) exceed limit (%d)."
 msgstr ""
 
 #, c-format
 msgid "Warnings (%d) exceed limit (%d)."
 msgstr ""
 
-#: src/ui/terminal/msg-ui.c:147
+#: src/ui/terminal/msg-ui.c:146
 msgid "error"
 msgstr "Fehler"
 
 msgid "error"
 msgstr "Fehler"
 
-#: src/ui/terminal/msg-ui.c:148
+#: src/ui/terminal/msg-ui.c:147
 msgid "warning"
 msgstr "Warnung"
 
 msgid "warning"
 msgstr "Warnung"
 
index e88749621d7193141dc1f7031eff29a581617c6f..aae7ca9562b0943fec2a588ca11ab9637768b96a 100644 (file)
@@ -1,3 +1,13 @@
+Sat Dec 16 12:17:34 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+       * dictionary.c dictionary.h vardict.h variable.c: Added optional
+               callbacks which are invoked when the dictionary or its 
+               variables are changed.  
+       
+       * missing-values.c missing-values.h value-labels.c: Tidied up
+               consistency checks, and made some of them return false 
+               instead of assert-failing. 
+
 Wed Dec 13 19:30:11 2006  Ben Pfaff  <blp@gnu.org>
 
        * calendar.c (calendar_days_in_month): New function.
 Wed Dec 13 19:30:11 2006  Ben Pfaff  <blp@gnu.org>
 
        * calendar.c (calendar_days_in_month): New function.
index d344e7516ac17b00da06567369d47b519e1254da..a5a36527c3d2803d48a686f02e82070c078de42c 100644 (file)
@@ -61,14 +61,33 @@ struct dictionary
     char *documents;           /* Documents, as a string. */
     struct vector **vector;     /* Vectors of variables. */
     size_t vector_cnt;          /* Number of vectors. */
     char *documents;           /* Documents, as a string. */
     struct vector **vector;     /* Vectors of variables. */
     size_t vector_cnt;          /* Number of vectors. */
+    const struct dict_callbacks *callbacks; /* Callbacks on dictionary
+                                              modification */
+    void *cb_data ;                  /* Data passed to callbacks */
   };
 
   };
 
+
+/* Associate CALLBACKS with DICT.  Callbacks will be invoked whenever
+   the dictionary or any of the variables it contains are modified.
+   Each callback will get passed CALLBACK_DATA.
+   Any callback may be NULL, in which case it'll be ignored.
+*/
+void
+dict_set_callbacks (struct dictionary *dict,
+                   const struct dict_callbacks *callbacks,
+                   void *callback_data)
+{
+  dict->callbacks = callbacks;
+  dict->cb_data = callback_data;
+}
+
+
 /* Creates and returns a new dictionary. */
 struct dictionary *
 /* Creates and returns a new dictionary. */
 struct dictionary *
-dict_create (void) 
+dict_create (void)
 {
 {
-  struct dictionary *d = xmalloc (sizeof *d);
-  
+  struct dictionary *d = xzalloc (sizeof *d);
+
   d->var = NULL;
   d->var_cnt = d->var_cap = 0;
   d->name_tab = hsh_create (8, compare_vars_by_name, hash_var_by_name,
   d->var = NULL;
   d->var_cnt = d->var_cap = 0;
   d->name_tab = hsh_create (8, compare_vars_by_name, hash_var_by_name,
@@ -90,7 +109,7 @@ dict_create (void)
 /* Creates and returns a (deep) copy of an existing
    dictionary. */
 struct dictionary *
 /* Creates and returns a (deep) copy of an existing
    dictionary. */
 struct dictionary *
-dict_clone (const struct dictionary *s) 
+dict_clone (const struct dictionary *s)
 {
   struct dictionary *d;
   size_t i;
 {
   struct dictionary *d;
   size_t i;
@@ -99,7 +118,7 @@ dict_clone (const struct dictionary *s)
 
   d = dict_create ();
 
 
   d = dict_create ();
 
-  for (i = 0; i < s->var_cnt; i++) 
+  for (i = 0; i < s->var_cnt; i++)
     {
       struct variable *sv = s->var[i];
       struct variable *dv = dict_clone_var_assert (d, sv, var_get_name (sv));
     {
       struct variable *sv = s->var[i];
       struct variable *dv = dict_clone_var_assert (d, sv, var_get_name (sv));
@@ -109,17 +128,17 @@ dict_clone (const struct dictionary *s)
   d->next_value_idx = s->next_value_idx;
 
   d->split_cnt = s->split_cnt;
   d->next_value_idx = s->next_value_idx;
 
   d->split_cnt = s->split_cnt;
-  if (d->split_cnt > 0) 
+  if (d->split_cnt > 0)
     {
       d->split = xnmalloc (d->split_cnt, sizeof *d->split);
     {
       d->split = xnmalloc (d->split_cnt, sizeof *d->split);
-      for (i = 0; i < d->split_cnt; i++) 
+      for (i = 0; i < d->split_cnt; i++)
         d->split[i] = dict_lookup_var_assert (d, var_get_name (s->split[i]));
     }
 
         d->split[i] = dict_lookup_var_assert (d, var_get_name (s->split[i]));
     }
 
-  if (s->weight != NULL) 
+  if (s->weight != NULL)
     d->weight = dict_lookup_var_assert (d, var_get_name (s->weight));
 
     d->weight = dict_lookup_var_assert (d, var_get_name (s->weight));
 
-  if (s->filter != NULL) 
+  if (s->filter != NULL)
     d->filter = dict_lookup_var_assert (d, var_get_name (s->filter));
 
   d->case_limit = s->case_limit;
     d->filter = dict_lookup_var_assert (d, var_get_name (s->filter));
 
   d->case_limit = s->case_limit;
@@ -137,7 +156,7 @@ dict_clone (const struct dictionary *s)
 /* Clears the contents from a dictionary without destroying the
    dictionary itself. */
 void
 /* Clears the contents from a dictionary without destroying the
    dictionary itself. */
 void
-dict_clear (struct dictionary *d) 
+dict_clear (struct dictionary *d)
 {
   /* FIXME?  Should we really clear case_limit, label, documents?
      Others are necessarily cleared by deleting all the variables.*/
 {
   /* FIXME?  Should we really clear case_limit, label, documents?
      Others are necessarily cleared by deleting all the variables.*/
@@ -148,7 +167,7 @@ dict_clear (struct dictionary *d)
   for (i = 0; i < d->var_cnt; i++)
     {
       var_clear_vardict (d->var[i]);
   for (i = 0; i < d->var_cnt; i++)
     {
       var_clear_vardict (d->var[i]);
-      var_destroy (d->var[i]); 
+      var_destroy (d->var[i]);
     }
   free (d->var);
   d->var = NULL;
     }
   free (d->var);
   d->var = NULL;
@@ -171,12 +190,12 @@ dict_clear (struct dictionary *d)
 /* Destroys the aux data for every variable in D, by calling
    var_clear_aux() for each variable. */
 void
 /* Destroys the aux data for every variable in D, by calling
    var_clear_aux() for each variable. */
 void
-dict_clear_aux (struct dictionary *d) 
+dict_clear_aux (struct dictionary *d)
 {
   int i;
 {
   int i;
-  
+
   assert (d != NULL);
   assert (d != NULL);
-  
+
   for (i = 0; i < d->var_cnt; i++)
     var_clear_aux (d->var[i]);
 }
   for (i = 0; i < d->var_cnt; i++)
     var_clear_aux (d->var[i]);
 }
@@ -185,7 +204,7 @@ dict_clear_aux (struct dictionary *d)
 void
 dict_destroy (struct dictionary *d)
 {
 void
 dict_destroy (struct dictionary *d)
 {
-  if (d != NULL) 
+  if (d != NULL)
     {
       dict_clear (d);
       hsh_destroy (d->name_tab);
     {
       dict_clear (d);
       hsh_destroy (d->name_tab);
@@ -195,7 +214,7 @@ dict_destroy (struct dictionary *d)
 
 /* Returns the number of variables in D. */
 size_t
 
 /* Returns the number of variables in D. */
 size_t
-dict_get_var_cnt (const struct dictionary *d) 
+dict_get_var_cnt (const struct dictionary *d)
 {
   assert (d != NULL);
 
 {
   assert (d != NULL);
 
@@ -206,7 +225,7 @@ dict_get_var_cnt (const struct dictionary *d)
    must be between 0 and the count returned by
    dict_get_var_cnt(), exclusive. */
 struct variable *
    must be between 0 and the count returned by
    dict_get_var_cnt(), exclusive. */
 struct variable *
-dict_get_var (const struct dictionary *d, size_t idx) 
+dict_get_var (const struct dictionary *d, size_t idx)
 {
   assert (d != NULL);
   assert (idx < d->var_cnt);
 {
   assert (d != NULL);
   assert (idx < d->var_cnt);
@@ -225,14 +244,14 @@ dict_get_vars (const struct dictionary *d, struct variable ***vars,
 {
   size_t count;
   size_t i;
 {
   size_t count;
   size_t i;
-  
+
   assert (d != NULL);
   assert (vars != NULL);
   assert (cnt != NULL);
   assert ((exclude_classes & ~((1u << DC_ORDINARY)
                                | (1u << DC_SYSTEM)
                                | (1u << DC_SCRATCH))) == 0);
   assert (d != NULL);
   assert (vars != NULL);
   assert (cnt != NULL);
   assert ((exclude_classes & ~((1u << DC_ORDINARY)
                                | (1u << DC_SYSTEM)
                                | (1u << DC_SCRATCH))) == 0);
-  
+
   count = 0;
   for (i = 0; i < d->var_cnt; i++)
     {
   count = 0;
   for (i = 0; i < d->var_cnt; i++)
     {
@@ -240,36 +259,40 @@ dict_get_vars (const struct dictionary *d, struct variable ***vars,
       if (!(exclude_classes & (1u << class)))
         count++;
     }
       if (!(exclude_classes & (1u << class)))
         count++;
     }
-  
+
   *vars = xnmalloc (count, sizeof **vars);
   *cnt = 0;
   *vars = xnmalloc (count, sizeof **vars);
   *cnt = 0;
-  for (i = 0; i < d->var_cnt; i++) 
+  for (i = 0; i < d->var_cnt; i++)
     {
       enum dict_class class = dict_class_from_id (var_get_name (d->var[i]));
       if (!(exclude_classes & (1u << class)))
     {
       enum dict_class class = dict_class_from_id (var_get_name (d->var[i]));
       if (!(exclude_classes & (1u << class)))
-        (*vars)[(*cnt)++] = d->var[i]; 
+        (*vars)[(*cnt)++] = d->var[i];
     }
   assert (*cnt == count);
 }
 
 static struct variable *
     }
   assert (*cnt == count);
 }
 
 static struct variable *
-add_var (struct dictionary *d, struct variable *v) 
+add_var (struct dictionary *d, struct variable *v)
 {
   /* Add dictionary info to variable. */
   struct vardict_info vdi;
   vdi.case_index = d->next_value_idx;
   vdi.dict_index = d->var_cnt;
 {
   /* Add dictionary info to variable. */
   struct vardict_info vdi;
   vdi.case_index = d->next_value_idx;
   vdi.dict_index = d->var_cnt;
+  vdi.dict = d;
   var_set_vardict (v, &vdi);
 
   /* Update dictionary. */
   var_set_vardict (v, &vdi);
 
   /* Update dictionary. */
-  if (d->var_cnt >= d->var_cap) 
+  if (d->var_cnt >= d->var_cap)
     {
     {
-      d->var_cap = 8 + 2 * d->var_cap; 
+      d->var_cap = 8 + 2 * d->var_cap;
       d->var = xnrealloc (d->var, d->var_cap, sizeof *d->var);
     }
   d->var[d->var_cnt++] = v;
   hsh_force_insert (d->name_tab, v);
 
       d->var = xnrealloc (d->var, d->var_cap, sizeof *d->var);
     }
   d->var[d->var_cnt++] = v;
   hsh_force_insert (d->name_tab, v);
 
+  if ( d->callbacks && d->callbacks->var_added )
+    d->callbacks->var_added (d, d->next_value_idx, d->cb_data);
+
   d->next_value_idx += var_get_value_cnt (v);
 
   return v;
   d->next_value_idx += var_get_value_cnt (v);
 
   return v;
@@ -350,12 +373,12 @@ dict_lookup_var_assert (const struct dictionary *d, const char *name)
 bool
 dict_contains_var (const struct dictionary *d, const struct variable *v)
 {
 bool
 dict_contains_var (const struct dictionary *d, const struct variable *v)
 {
-  if (var_has_vardict (v)) 
+  if (var_has_vardict (v))
     {
       const struct vardict_info *vdi = var_get_vardict (v);
       return (vdi->dict_index >= 0
               && vdi->dict_index < d->var_cnt
     {
       const struct vardict_info *vdi = var_get_vardict (v);
       return (vdi->dict_index >= 0
               && vdi->dict_index < d->var_cnt
-              && d->var[vdi->dict_index] == v); 
+              && d->var[vdi->dict_index] == v);
     }
   else
     return false;
     }
   else
     return false;
@@ -378,7 +401,7 @@ set_var_dict_index (struct variable *v, int dict_index)
 {
   struct vardict_info vdi = *var_get_vardict (v);
   vdi.dict_index = dict_index;
 {
   struct vardict_info vdi = *var_get_vardict (v);
   vdi.dict_index = dict_index;
-  var_set_vardict (v, &vdi); 
+  var_set_vardict (v, &vdi);
 }
 
 /* Sets the case_index in V's vardict to DICT_INDEX. */
 }
 
 /* Sets the case_index in V's vardict to DICT_INDEX. */
@@ -387,16 +410,16 @@ set_var_case_index (struct variable *v, int case_index)
 {
   struct vardict_info vdi = *var_get_vardict (v);
   vdi.case_index = case_index;
 {
   struct vardict_info vdi = *var_get_vardict (v);
   vdi.case_index = case_index;
-  var_set_vardict (v, &vdi); 
+  var_set_vardict (v, &vdi);
 }
 
 /* Re-sets the dict_index in the dictionary variables with
    indexes from FROM to TO (exclusive). */
 static void
 }
 
 /* Re-sets the dict_index in the dictionary variables with
    indexes from FROM to TO (exclusive). */
 static void
-reindex_vars (struct dictionary *d, size_t from, size_t to) 
+reindex_vars (struct dictionary *d, size_t from, size_t to)
 {
   size_t i;
 {
   size_t i;
-  
+
   for (i = from; i < to; i++)
     set_var_dict_index (d->var[i], i);
 }
   for (i = from; i < to; i++)
     set_var_dict_index (d->var[i], i);
 }
@@ -442,9 +465,13 @@ dict_delete_var (struct dictionary *d, struct variable *v)
   /* Update name hash. */
   hsh_force_delete (d->name_tab, v);
 
   /* Update name hash. */
   hsh_force_delete (d->name_tab, v);
 
+
   /* Free memory. */
   var_clear_vardict (v);
   var_destroy (v);
   /* Free memory. */
   var_clear_vardict (v);
   var_destroy (v);
+
+  if (d->callbacks && d->callbacks->var_deleted )
+    d->callbacks->var_deleted (d, dict_index, d->cb_data);
 }
 
 /* Deletes the COUNT variables listed in VARS from D.  This is
 }
 
 /* Deletes the COUNT variables listed in VARS from D.  This is
@@ -559,9 +586,9 @@ rename_var (struct dictionary *d, struct variable *v, const char *new_name)
 /* Changes the name of V in D to name NEW_NAME.  Assert-fails if
    a variable named NEW_NAME is already in D, except that
    NEW_NAME may be the same as V's existing name. */
 /* Changes the name of V in D to name NEW_NAME.  Assert-fails if
    a variable named NEW_NAME is already in D, except that
    NEW_NAME may be the same as V's existing name. */
-void 
+void
 dict_rename_var (struct dictionary *d, struct variable *v,
 dict_rename_var (struct dictionary *d, struct variable *v,
-                 const char *new_name) 
+                 const char *new_name)
 {
   assert (!strcasecmp (var_get_name (v), new_name)
           || dict_lookup_var (d, new_name) == NULL);
 {
   assert (!strcasecmp (var_get_name (v), new_name)
           || dict_lookup_var (d, new_name) == NULL);
@@ -572,6 +599,9 @@ dict_rename_var (struct dictionary *d, struct variable *v,
 
   if (get_algorithm () == ENHANCED)
     var_clear_short_name (v);
 
   if (get_algorithm () == ENHANCED)
     var_clear_short_name (v);
+
+  if ( d->callbacks && d->callbacks->var_changed )
+    d->callbacks->var_changed (d, var_get_dict_index (v), d->cb_data);
 }
 
 /* Renames COUNT variables specified in VARS to the names given
 }
 
 /* Renames COUNT variables specified in VARS to the names given
@@ -1237,3 +1267,21 @@ dict_assign_short_names (struct dictionary *d)
   /* Get rid of hash table. */
   hsh_destroy (short_names);
 }
   /* Get rid of hash table. */
   hsh_destroy (short_names);
 }
+
+
+/* Called from variable.c to notify the dictionary that some property of 
+   the variable has changed */
+void
+dict_var_changed (const struct variable *v)
+{
+  if ( var_has_vardict (v))
+    {
+      const struct vardict_info *vdi = var_get_vardict (v);
+      struct dictionary *d;
+
+      d = vdi->dict;
+
+      if ( d->callbacks && d->callbacks->var_changed )
+       d->callbacks->var_changed (d, var_get_dict_index (v), d->cb_data);
+    }
+}
index 02e04f67af9ac569513938603e3c16bf2bba9755..7a40e0dc5f820f6348aa9976bea6e85754e5aed9 100644 (file)
 #include <stdbool.h>
 #include <stddef.h>
 
 #include <stdbool.h>
 #include <stddef.h>
 
-/* Dictionary. */ 
+/* Dictionary. */
 
 struct variable;
 
 struct variable;
+struct dictionary;
+
+struct dict_callbacks
+ {
+  void (*var_added) (struct dictionary *, int, void *);
+  void (*var_deleted) (struct dictionary *, int, void *);
+  void (*var_changed) (struct dictionary *, int, void *);
+ };
+
+
 struct dictionary *dict_create (void);
 struct dictionary *dict_clone (const struct dictionary *);
 struct dictionary *dict_create (void);
 struct dictionary *dict_clone (const struct dictionary *);
+void dict_set_callbacks (struct dictionary *, const struct dict_callbacks *,
+                        void *);
+
 void dict_clear (struct dictionary *);
 void dict_clear_aux (struct dictionary *);
 void dict_destroy (struct dictionary *);
 void dict_clear (struct dictionary *);
 void dict_clear_aux (struct dictionary *);
 void dict_destroy (struct dictionary *);
@@ -115,4 +128,8 @@ void dict_clear_vectors (struct dictionary *);
 
 void dict_assign_short_names (struct dictionary *);
 
 
 void dict_assign_short_names (struct dictionary *);
 
+/* Called only from variable.c */
+void dict_var_changed (const struct variable *v);
+
+
 #endif /* dictionary.h */
 #endif /* dictionary.h */
index fac56d0257bed1cf82b9d70895b96ed6f2103b9a..ba9ab53b98d58d9545c183695a86123ad14fa421 100644 (file)
@@ -21,6 +21,7 @@
 #include <assert.h>
 #include <stdlib.h>
 #include <libpspp/assertion.h>
 #include <assert.h>
 #include <stdlib.h>
 #include <libpspp/assertion.h>
+#include "variable.h"
 #include <libpspp/str.h>
 
 
 #include <libpspp/str.h>
 
 
@@ -302,17 +303,20 @@ can_resize_string (const char *s, int old_width, int new_width)
    contains only spaces in the characters that will be
    trimmed. */
 bool
    contains only spaces in the characters that will be
    trimmed. */
 bool
-mv_is_resizable (const struct missing_values *mv, int width) 
+mv_is_resizable (const struct missing_values *mv, int width)
 {
 {
-  assert ((width == 0) == (mv->width == 0));
+  if ( var_type_from_width (width) != var_type_from_width (mv->width) )
+    return false;
+
   if (width > MAX_SHORT_STRING && mv->type != MV_NONE)
     return false;
   if (width > MAX_SHORT_STRING && mv->type != MV_NONE)
     return false;
-  else if (width >= mv->width)
+
+  if (width >= mv->width)
     return true;
     return true;
-  else 
+  else
     {
       int i;
     {
       int i;
-      
+
       for (i = 0; i < 3; i++)
         if (using_element (mv->type, i)
             && !can_resize_string (mv->values[i].s, mv->width, width))
       for (i = 0; i < 3; i++)
         if (using_element (mv->type, i)
             && !can_resize_string (mv->values[i].s, mv->width, width))
index 5e30c65c67805228a52ee11083ecaad91736f716..535e99a863a28e68e57dda70e278202103fa8c94 100644 (file)
@@ -24,7 +24,7 @@
 
 /* Types of user-missing values.
    Invisible--use access functions defined below instead. */
 
 /* Types of user-missing values.
    Invisible--use access functions defined below instead. */
-enum mv_type 
+enum mv_type
   {
     MV_NONE = 0,                /* No user-missing values. */
     MV_1 = 1,                   /* One user-missing value. */
   {
     MV_NONE = 0,                /* No user-missing values. */
     MV_1 = 1,                   /* One user-missing value. */
@@ -36,9 +36,9 @@ enum mv_type
 
 /* Missing values.
    Opaque--use access functions defined below. */
 
 /* Missing values.
    Opaque--use access functions defined below. */
-struct missing_values 
+struct missing_values
   {
   {
-    unsigned type;              /* Number and type of missing values. */
+    enum mv_type type;          /* Number and type of missing values. */
     int width;                  /* 0=numeric, otherwise string width. */
     union value values[3];      /* Missing values.  [y,z] are the range. */
   };
     int width;                  /* 0=numeric, otherwise string width. */
     union value values[3];      /* Missing values.  [y,z] are the range. */
   };
index 835f883535f3a8c94733fa8f2786dadfb9f9fcd6..d426c8e4324818ef47aceb3f97bd5e827d8b4519 100644 (file)
@@ -57,8 +57,7 @@ bool proc_cancel_temporary_transformations (struct dataset *ds);
 \f
 /* Procedures. */
 
 \f
 /* Procedures. */
 
-
-struct dataset *create_dataset (void);
+struct dataset * create_dataset (void);
 void destroy_dataset (struct dataset *);
 
 void proc_set_source (struct dataset *ds, struct case_source *);
 void destroy_dataset (struct dataset *);
 
 void proc_set_source (struct dataset *ds, struct case_source *);
index 56491535fca0f940817acd76512bca638db10bcb..f54a4870fc05bf3b02ac9a2e6405cde5dbfefe62 100644 (file)
@@ -90,7 +90,8 @@ val_labs_copy (const struct val_labs *vls)
 bool
 val_labs_can_set_width (const struct val_labs *vls, int new_width) 
 {
 bool
 val_labs_can_set_width (const struct val_labs *vls, int new_width) 
 {
-  assert ((vls->width == 0) == (new_width == 0));
+  if ( var_type_from_width (new_width) != var_type_from_width (vls->width ))
+    return false;
 
   if (vls->width == 0)
     return new_width == 0;
 
   if (vls->width == 0)
     return new_width == 0;
index 8ae72866053da78758958ff125d6c304c3c3b606..2af9b92b8721c45b9764883eadd9e73b47501660 100644 (file)
    This header file should only be included by variable.c and
    dictionary.c. */
 
    This header file should only be included by variable.c and
    dictionary.c. */
 
+struct dictionary ;
+
 /* Dictionary data stored in variable. */
 struct vardict_info 
   {
     int dict_index;     /* Dictionary index containing the variable. */
     int case_index;     /* Index into case of variable data. */
 /* Dictionary data stored in variable. */
 struct vardict_info 
   {
     int dict_index;     /* Dictionary index containing the variable. */
     int case_index;     /* Index into case of variable data. */
+    struct dictionary *dict;  /* The dictionary containing the variable */
   };
 
 const struct vardict_info *var_get_vardict (const struct variable *);
   };
 
 const struct vardict_info *var_get_vardict (const struct variable *);
index 9a64da1baf0b9c6316f0e017caf593002a59b241..3a5024034088210d775c135239eed1de5c36acad 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - computes sample statistics.
 /* PSPP - computes sample statistics.
-   Copyright (C) 1997-9, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2006 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
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
 #include <stdlib.h>
 
 #include "cat-routines.h"
 #include <stdlib.h>
 
 #include "cat-routines.h"
-#include "category.h"
 #include "data-out.h"
 #include "data-out.h"
-#include "dictionary.h"
 #include "format.h"
 #include "format.h"
+#include "dictionary.h"
 #include "identifier.h"
 #include "missing-values.h"
 #include "identifier.h"
 #include "missing-values.h"
-#include "value.h"
 #include "value-labels.h"
 #include "vardict.h"
 
 #include "value-labels.h"
 #include "vardict.h"
 
 #include <libpspp/compiler.h>
 #include <libpspp/hash.h>
 #include <libpspp/message.h>
 #include <libpspp/compiler.h>
 #include <libpspp/hash.h>
 #include <libpspp/message.h>
-#include <libpspp/misc.h>
 #include <libpspp/str.h>
 
 #include <libpspp/str.h>
 
-#include "minmax.h"
-
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 
 #include "gettext.h"
 #define _(msgid) gettext (msgid)
 
@@ -207,6 +202,7 @@ var_set_name (struct variable *v, const char *name)
   assert (var_is_plausible_name (name, false));
 
   str_copy_trunc (v->name, sizeof v->name, name);
   assert (var_is_plausible_name (name, false));
 
   str_copy_trunc (v->name, sizeof v->name, name);
+  dict_var_changed (v);
 }
 
 /* Returns true if NAME is an acceptable name for a variable,
 }
 
 /* Returns true if NAME is an acceptable name for a variable,
@@ -353,27 +349,27 @@ var_get_width (const struct variable *v)
 
 /* Sets the width of V to WIDTH. */
 void
 
 /* Sets the width of V to WIDTH. */
 void
-var_set_width (struct variable *v, int new_width) 
+var_set_width (struct variable *v, int new_width)
 {
   enum var_type new_type = var_type_from_width (new_width);
 {
   enum var_type new_type = var_type_from_width (new_width);
-  
+
   if (mv_is_resizable (&v->miss, new_width))
     mv_resize (&v->miss, new_width);
   else
     mv_init (&v->miss, new_width);
 
   if (mv_is_resizable (&v->miss, new_width))
     mv_resize (&v->miss, new_width);
   else
     mv_init (&v->miss, new_width);
 
-  if (v->val_labs != NULL) 
+  if (v->val_labs != NULL)
     {
       if (val_labs_can_set_width (v->val_labs, new_width))
         val_labs_set_width (v->val_labs, new_width);
     {
       if (val_labs_can_set_width (v->val_labs, new_width))
         val_labs_set_width (v->val_labs, new_width);
-      else 
+      else
         {
           val_labs_destroy (v->val_labs);
           v->val_labs = NULL;
         }
     }
         {
           val_labs_destroy (v->val_labs);
           v->val_labs = NULL;
         }
     }
-  
-  if (var_get_type (v) != new_type) 
+
+  if (var_get_type (v) != new_type)
     {
       v->print = (new_type == VAR_NUMERIC
                   ? fmt_for_output (FMT_F, 8, 2)
     {
       v->print = (new_type == VAR_NUMERIC
                   ? fmt_for_output (FMT_F, 8, 2)
@@ -387,6 +383,8 @@ var_set_width (struct variable *v, int new_width)
     }
 
   v->width = new_width;
     }
 
   v->width = new_width;
+
+  dict_var_changed (v);
 }
 
 /* Returns true if variable V is numeric, false otherwise. */
 }
 
 /* Returns true if variable V is numeric, false otherwise. */
@@ -450,6 +448,8 @@ var_set_missing_values (struct variable *v, const struct missing_values *miss)
     }
   else
     mv_init (&v->miss, v->width);
     }
   else
     mv_init (&v->miss, v->width);
+
+  dict_var_changed (v);
 }
 
 /* Sets variable V to have no user-missing values. */
 }
 
 /* Sets variable V to have no user-missing values. */
@@ -557,6 +557,7 @@ var_set_value_labels (struct variable *v, const struct val_labs *vls)
       assert (val_labs_can_set_width (vls, v->width));
       v->val_labs = val_labs_copy (vls);
       val_labs_set_width (v->val_labs, v->width);
       assert (val_labs_can_set_width (vls, v->width));
       v->val_labs = val_labs_copy (vls);
       val_labs_set_width (v->val_labs, v->width);
+      dict_var_changed (v);
     }
 }
 
     }
 }
 
@@ -642,6 +643,7 @@ var_set_print_format (struct variable *v, const struct fmt_spec *print)
 {
   assert (fmt_check_width_compat (print, v->width));
   v->print = *print;
 {
   assert (fmt_check_width_compat (print, v->width));
   v->print = *print;
+  dict_var_changed (v);
 }
 
 /* Returns V's write format specification. */
 }
 
 /* Returns V's write format specification. */
@@ -659,6 +661,7 @@ var_set_write_format (struct variable *v, const struct fmt_spec *write)
 {
   assert (fmt_check_width_compat (write, v->width));
   v->write = *write;
 {
   assert (fmt_check_width_compat (write, v->width));
   v->write = *write;
+  dict_var_changed (v);
 }
 
 /* Sets V's print and write format specifications to FORMAT,
 }
 
 /* Sets V's print and write format specifications to FORMAT,
@@ -705,6 +708,7 @@ var_set_label (struct variable *v, const char *label)
       ss_truncate (&s, 255);
       if (!ss_is_empty (s)) 
         v->label = ss_xstrdup (s);
       ss_truncate (&s, 255);
       if (!ss_is_empty (s)) 
         v->label = ss_xstrdup (s);
+      dict_var_changed (v);
     }
 }
 
     }
 }
 
@@ -744,6 +748,7 @@ var_set_measure (struct variable *v, enum measure measure)
 {
   assert (measure_is_valid (measure));
   v->measure = measure;
 {
   assert (measure_is_valid (measure));
   v->measure = measure;
+  dict_var_changed (v);
 }
 \f
 /* Returns V's display width, which applies only to GUIs. */
 }
 \f
 /* Returns V's display width, which applies only to GUIs. */
@@ -753,11 +758,15 @@ var_get_display_width (const struct variable *v)
   return v->display_width;
 }
 
   return v->display_width;
 }
 
+
+
+
 /* Sets V's display width to DISPLAY_WIDTH. */
 void
 var_set_display_width (struct variable *v, int display_width) 
 {
   v->display_width = display_width;
 /* Sets V's display width to DISPLAY_WIDTH. */
 void
 var_set_display_width (struct variable *v, int display_width) 
 {
   v->display_width = display_width;
+  dict_var_changed (v);
 }
 \f
 /* Returns true if A is a valid alignment,
 }
 \f
 /* Returns true if A is a valid alignment,
@@ -781,6 +790,7 @@ var_set_alignment (struct variable *v, enum alignment alignment)
 {
   assert (alignment_is_valid (alignment));
   v->alignment = alignment;
 {
   assert (alignment_is_valid (alignment));
   v->alignment = alignment;
+  dict_var_changed (v);
 }
 \f
 /* Whether variables' values should be preserved from case to
 }
 \f
 /* Whether variables' values should be preserved from case to
@@ -800,6 +810,7 @@ var_set_leave (struct variable *v, bool leave)
 {
   assert (leave || !var_must_leave (v));
   v->leave = leave;
 {
   assert (leave || !var_must_leave (v));
   v->leave = leave;
+  dict_var_changed (v);
 }
 
 /* Returns true if V must be left from case to case,
 }
 
 /* Returns true if V must be left from case to case,
@@ -841,6 +852,7 @@ var_set_short_name (struct variable *v, const char *short_name)
     }
   else
     v->short_name[0] = '\0';
     }
   else
     v->short_name[0] = '\0';
+  dict_var_changed (v);
 }
 
 /* Clears V's short name. */
 }
 
 /* Clears V's short name. */
index 471c411850d30ac01e5b274656a98d04564dfd93..aeb374ced57d63a2bc52020257a70eab617a50f2 100644 (file)
@@ -155,13 +155,13 @@ cmd_debug_evaluate (struct lexer *lexer, struct dataset *dsother UNUSED)
               lex_error (lexer, _("expecting number or string"));
               goto done;
             }
               lex_error (lexer, _("expecting number or string"));
               goto done;
             }
-         
-         if  ( ds == NULL ) 
+
+         if  ( ds == NULL )
            {
              ds = create_dataset ();
              d = dataset_dict (ds);
            }
            {
              ds = create_dataset ();
              d = dataset_dict (ds);
            }
-          
+
           old_value_cnt = dict_get_next_value_idx (d);
           v = dict_create_var (d, name, width);
           if (v == NULL)
           old_value_cnt = dict_get_next_value_idx (d);
           v = dict_create_var (d, name, width);
           if (v == NULL)
index 883f12fd9d7c8ca345f23f0054df00f28d3c4357..4c85592bc58973baf0ef7ddd6aaf19e8d350455c 100644 (file)
@@ -188,7 +188,7 @@ cmd_aggregate (struct lexer *lexer, struct dataset *ds)
   memset(&agr, 0 , sizeof (agr));
   agr.missing = ITEMWISE;
   case_nullify (&agr.break_case);
   memset(&agr, 0 , sizeof (agr));
   agr.missing = ITEMWISE;
   case_nullify (&agr.break_case);
-  
+
   agr.dict = dict_create ();
   agr.src_dict = dict;
   dict_set_label (agr.dict, dict_get_label (dict));
   agr.dict = dict_create ();
   agr.src_dict = dict;
   dict_set_label (agr.dict, dict_get_label (dict));
index 1fbddc3e5ebc2d6d74d6e4cc195e47e44eaf2477..c8ea53ce6c8f50e68d076e94a366f1c621f7ae65 100644 (file)
@@ -1,3 +1,19 @@
+Sat Dec 16 12:24:35 WST 2006 John Darrington <john@darrington.wattle.id.au>
+
+       * psppire-variable.c psppire-variable.h: Deleted.
+
+       * psppire-dict.c psppire-dict.h: Removed the caching of the variable 
+           data, which is now unecessary because src/data/vardict.h maintains 
+           an association between variables and their dictionary.
+       
+       * data-sheet.c menu-actions.c missing-val-dialog.c 
+         missing-val-dialog.h psppire-data-store.c 
+         psppire-var-store.c psppire-var-store.h 
+         sort-cases-dialog.c val-labs-dialog.c val-labs-dialog.h 
+         var-sheet.c var-type-dialog.c var-type-dialog.h: Dealt with the 
+           consequences of deleting psppire-variable.[ch]. 
+
+
 Sat Dec  9 20:03:04 2006  Ben Pfaff  <blp@gnu.org>
 
        * var-type-dialog.c (var_type_dialog_create): Use
 Sat Dec  9 20:03:04 2006  Ben Pfaff  <blp@gnu.org>
 
        * var-type-dialog.c (var_type_dialog_create): Use
index e198b7e327bdb2d60a6f64e8606ed9386abdcf8b..2e537cfdb7f48340d07d3f86dc5d7be2fa38633c 100644 (file)
@@ -55,8 +55,6 @@ src_ui_gui_psppire_SOURCES = \
        src/ui/gui/psppire-dict.h \
        src/ui/gui/psppire-object.c \
        src/ui/gui/psppire-object.h \
        src/ui/gui/psppire-dict.h \
        src/ui/gui/psppire-object.c \
        src/ui/gui/psppire-object.h \
-       src/ui/gui/psppire-variable.c \
-       src/ui/gui/psppire-variable.h \
        src/ui/gui/psppire-var-store.c \
        src/ui/gui/psppire-var-store.h \
        src/ui/gui/sort-cases-dialog.c \
        src/ui/gui/psppire-var-store.c \
        src/ui/gui/psppire-var-store.h \
        src/ui/gui/sort-cases-dialog.c \
index de4a357bf3d5c60991df18e2a29a91eebbda5f4c..a1301d19a62c99d1bda5b3b30e06f9a07958ad4e 100644 (file)
@@ -29,7 +29,6 @@
 #include <gtksheet/gsheet-uniform-row.h>
 
 #include "psppire-dict.h"
 #include <gtksheet/gsheet-uniform-row.h>
 
 #include "psppire-dict.h"
-#include "psppire-variable.h"
 #include "psppire-data-store.h"
 #include "helper.h"
 
 #include "psppire-data-store.h"
 #include "helper.h"
 
@@ -103,7 +102,7 @@ update_data_ref_entry(const GtkSheet *sheet, gint row, gint col)
   PsppireDataStore *data_store = PSPPIRE_DATA_STORE(gtk_sheet_get_model(sheet));
   if (data_store)
     {
   PsppireDataStore *data_store = PSPPIRE_DATA_STORE(gtk_sheet_get_model(sheet));
   if (data_store)
     {
-      const struct PsppireVariable *pv = 
+      const struct variable *pv = 
        psppire_dict_get_variable(data_store->dict, col);
 
       gchar *text ;
        psppire_dict_get_variable(data_store->dict, col);
 
       gchar *text ;
@@ -113,7 +112,7 @@ update_data_ref_entry(const GtkSheet *sheet, gint row, gint col)
        return FALSE;
 
       text = g_strdup_printf("%d: %s", row, 
        return FALSE;
 
       text = g_strdup_printf("%d: %s", row, 
-                            pv ? psppire_variable_get_name(pv) : "");
+                            pv ? var_get_name (pv) : "");
   
       cell_ref_entry = GTK_ENTRY(get_widget_assert(xml, "cell_ref_entry"));
 
   
       cell_ref_entry = GTK_ENTRY(get_widget_assert(xml, "cell_ref_entry"));
 
index ce9732826ab0b52288d1e6e5003ffa0882eb2c53..f30bf74f75ba86987665d8130b0b3701ea71c3cb 100644 (file)
@@ -30,6 +30,7 @@
 #include <data/file-handle-def.h>
 #include <data/sys-file-reader.h>
 #include <data/case.h>
 #include <data/file-handle-def.h>
 #include <data/sys-file-reader.h>
 #include <data/case.h>
+#include <data/variable.h>
 
 #include <glade/glade.h>
 #include <gtk/gtk.h>
 
 #include <glade/glade.h>
 #include <gtk/gtk.h>
@@ -39,7 +40,7 @@
 #include <gtksheet/gtksheet.h>
 #include "helper.h"
 #include "menu-actions.h"
 #include <gtksheet/gtksheet.h>
 #include "helper.h"
 #include "menu-actions.h"
-#include "psppire-variable.h"
+
 #include "psppire-dict.h"
 
 #include "var-sheet.h"
 #include "psppire-dict.h"
 
 #include "var-sheet.h"
@@ -398,24 +399,24 @@ on_clear_activate                    (GtkMenuItem     *menuitem,
          case GTK_SHEET_COLUMN_SELECTED:
            {
              gint fv;
          case GTK_SHEET_COLUMN_SELECTED:
            {
              gint fv;
-             struct PsppireVariable *pv =
-               psppire_dict_get_variable(the_dictionary,
-                                         data_sheet->range.col0);
-             fv = psppire_variable_get_fv(pv);
+             struct variable *pv =
+               psppire_dict_get_variable (the_dictionary,
+                                          data_sheet->range.col0);
 
 
+             fv = var_get_case_index (pv);
 
 
-             psppire_dict_delete_variables(the_dictionary,
-                                           data_sheet->range.col0,
-                                           1);
+             psppire_dict_delete_variables (the_dictionary,
+                                            data_sheet->range.col0,
+                                            1);
 
 
-             psppire_case_file_insert_values(data_store->case_file,
-                                             -1, fv);
+             psppire_case_file_insert_values (data_store->case_file,
+                                              -1, fv);
            }
            break;
          default:
            }
            break;
          default:
-           gtk_sheet_cell_clear(data_sheet,
-                                data_sheet->active_cell.row,
-                                data_sheet->active_cell.col);
+           gtk_sheet_cell_clear (data_sheet,
+                                 data_sheet->active_cell.row,
+                                 data_sheet->active_cell.col);
            break;
          }
 
            break;
          }
 
index 945cebe3aa55d93d18e228642feac7fdfcc2985a..78714fd959db31bc0ffd6befce8f9e45e4d97f30 100644 (file)
@@ -1,4 +1,4 @@
-/* 
+/*
     PSPPIRE --- A Graphical User Interface for PSPP
     Copyright (C) 2005, 2006  Free Software Foundation
     Written by John Darrington
     PSPPIRE --- A Graphical User Interface for PSPP
     Copyright (C) 2005, 2006  Free Software Foundation
     Written by John Darrington
@@ -32,7 +32,7 @@
 #include <data/missing-values.h>
 #include <data/variable.h>
 #include <data/data-in.h>
 #include <data/missing-values.h>
 #include <data/variable.h>
 #include <data/data-in.h>
-#include "psppire-variable.h"
+
 
 #include <gtk/gtk.h>
 #include <glade/glade.h>
 
 #include <gtk/gtk.h>
 #include <glade/glade.h>
@@ -84,7 +84,7 @@ missing_val_dialog_accept(GtkWidget *w, gpointer data)
 {
   struct missing_val_dialog *dialog = data;
 
 {
   struct missing_val_dialog *dialog = data;
 
-  const struct fmt_spec *write_spec = psppire_variable_get_write_spec(dialog->pv);
+  const struct fmt_spec *write_spec = var_get_write_format (dialog->pv);
   
   if ( gtk_toggle_button_get_active(dialog->button_discrete))
     {
   
   if ( gtk_toggle_button_get_active(dialog->button_discrete))
     {
@@ -174,9 +174,9 @@ missing_val_dialog_accept(GtkWidget *w, gpointer data)
   if (gtk_toggle_button_get_active(dialog->button_none))
     mv_set_type(&dialog->mvl, MV_NONE);
 
   if (gtk_toggle_button_get_active(dialog->button_none))
     mv_set_type(&dialog->mvl, MV_NONE);
 
-  psppire_variable_set_missing(dialog->pv, &dialog->mvl);
+  var_set_missing_values (dialog->pv, &dialog->mvl);
 
 
-  gtk_widget_hide(dialog->window);
+  gtk_widget_hide (dialog->window);
 }
 
 
 }
 
 
@@ -266,9 +266,9 @@ missing_val_dialog_show(struct missing_val_dialog *dialog)
   g_return_if_fail(dialog);
   g_return_if_fail(dialog->pv);
 
   g_return_if_fail(dialog);
   g_return_if_fail(dialog->pv);
 
-  mv_copy (&dialog->mvl, psppire_variable_get_missing(dialog->pv));
+  mv_copy (&dialog->mvl, var_get_missing_values (dialog->pv));
 
 
-  write_spec = psppire_variable_get_write_spec(dialog->pv);
+  write_spec = var_get_write_format (dialog->pv);
 
   /* Blank all entry boxes and make them insensitive */
   gtk_entry_set_text(GTK_ENTRY(dialog->low), "");
 
   /* Blank all entry boxes and make them insensitive */
   gtk_entry_set_text(GTK_ENTRY(dialog->low), "");
@@ -278,10 +278,11 @@ missing_val_dialog_show(struct missing_val_dialog *dialog)
   gtk_widget_set_sensitive(dialog->high, FALSE);      
   gtk_widget_set_sensitive(dialog->discrete, FALSE);   
 
   gtk_widget_set_sensitive(dialog->high, FALSE);      
   gtk_widget_set_sensitive(dialog->discrete, FALSE);   
 
-  gtk_widget_set_sensitive(GTK_WIDGET(dialog->button_range), 
-                          psppire_variable_get_type(dialog->pv) == VAR_NUMERIC);
+  gtk_widget_set_sensitive(GTK_WIDGET(dialog->button_range),
+                          var_is_numeric (dialog->pv));
 
 
-  for(i = 0 ; i < 3 ; ++i ) 
+
+  for(i = 0 ; i < 3 ; ++i )
     {
       gtk_entry_set_text(GTK_ENTRY(dialog->mv[i]), "");          
       gtk_widget_set_sensitive(dialog->mv[i], FALSE);
     {
       gtk_entry_set_text(GTK_ENTRY(dialog->mv[i]), "");          
       gtk_widget_set_sensitive(dialog->mv[i], FALSE);
index 44f025e68c252a974eb4f26488350d0f939d4a32..210ee193c84f5ca20c3a0a801ffd5b21722137c2 100644 (file)
@@ -35,8 +35,8 @@ struct missing_val_dialog
   GtkWidget *window;
 
   /* The variable whose missing values are to be updated */
   GtkWidget *window;
 
   /* The variable whose missing values are to be updated */
-  struct PsppireVariable *pv;
-  
+  struct variable *pv;
+
   /* local copy */
   struct missing_values mvl;
 
   /* local copy */
   struct missing_values mvl;
 
index 59c7f4947c213ab662dbf2b6eaf88e5221af3298..660e24dd352eb8332ade378ac745747cf308c24c 100644 (file)
@@ -29,6 +29,7 @@
 #include <data/casefile.h>
 #include <data/case.h>
 #include <data/data-out.h>
 #include <data/casefile.h>
 #include <data/case.h>
 #include <data/data-out.h>
+#include <data/variable.h>
 
 #include <gtksheet/gtksheet.h>
 #include <gtksheet/gsheetmodel.h>
 
 #include <gtksheet/gtksheet.h>
 #include <gtksheet/gsheetmodel.h>
@@ -36,7 +37,6 @@
 
 #include <pango/pango-context.h>
 
 
 #include <pango/pango-context.h>
 
-#include "psppire-variable.h"
 #include "psppire-data-store.h"
 #include "psppire-case-file.h"
 #include "helper.h"
 #include "psppire-data-store.h"
 #include "psppire-case-file.h"
 #include "helper.h"
@@ -299,10 +299,10 @@ insert_variable_callback(GObject *obj, gint var_num, gpointer data)
   
   if ( var_num > 0 ) 
     {
   
   if ( var_num > 0 ) 
     {
-      struct PsppireVariable *variable;
+      struct variable *variable;
       variable = psppire_dict_get_variable(store->dict, var_num);
 
       variable = psppire_dict_get_variable(store->dict, var_num);
 
-      posn = psppire_variable_get_fv(variable);
+      posn = var_get_case_index (variable);
     }
   else
     {
     }
   else
     {
@@ -441,11 +441,11 @@ psppire_data_store_insert_new_case(PsppireDataStore *ds, gint posn)
 
   for (v = 0 ; v < psppire_dict_get_var_cnt (ds->dict) ; ++v) 
     {
 
   for (v = 0 ; v < psppire_dict_get_var_cnt (ds->dict) ; ++v) 
     {
-      const struct PsppireVariable *pv = psppire_dict_get_variable(ds->dict, v);
-      if (VAR_STRING ==  psppire_variable_get_type(pv) ) 
+      const struct variable *pv = psppire_dict_get_variable (ds->dict, v);
+      if ( var_is_alpha (pv))
        continue;
 
        continue;
 
-      case_data_rw_idx (&cc, psppire_variable_get_fv (pv))->f = SYSMIS;
+      case_data_rw (&cc, pv)->f = SYSMIS;
     }
 
   result = psppire_case_file_insert_case (ds->case_file, &cc, posn);
     }
 
   result = psppire_case_file_insert_case (ds->case_file, &cc, posn);
@@ -462,7 +462,7 @@ psppire_data_store_get_string (const GSheetModel *model, gint row, gint column)
   gint idx;
   char *text;
   const struct fmt_spec *fp ;
   gint idx;
   char *text;
   const struct fmt_spec *fp ;
-  const struct PsppireVariable *pv ;
+  const struct variable *pv ;
   const union value *v ;
   GString *s;
   PsppireDataStore *store = PSPPIRE_DATA_STORE(model);
   const union value *v ;
   GString *s;
   PsppireDataStore *store = PSPPIRE_DATA_STORE(model);
@@ -478,7 +478,7 @@ psppire_data_store_get_string (const GSheetModel *model, gint row, gint column)
 
   pv = psppire_dict_get_variable (store->dict, column);
 
 
   pv = psppire_dict_get_variable (store->dict, column);
 
-  idx = psppire_variable_get_fv (pv);
+  idx = var_get_case_index (pv);
 
   v = psppire_case_file_get_value (store->case_file, row, idx);
 
 
   v = psppire_case_file_get_value (store->case_file, row, idx);
 
@@ -486,7 +486,7 @@ psppire_data_store_get_string (const GSheetModel *model, gint row, gint column)
 
   if ( store->show_labels) 
     {
 
   if ( store->show_labels) 
     {
-      const struct val_labs * vl = psppire_variable_get_value_labels (pv);
+      const struct val_labs * vl = var_get_value_labels (pv);
 
       const gchar *label;
       if ( (label = val_labs_find(vl, *v)) )
 
       const gchar *label;
       if ( (label = val_labs_find(vl, *v)) )
@@ -495,7 +495,7 @@ psppire_data_store_get_string (const GSheetModel *model, gint row, gint column)
        }
     }
 
        }
     }
 
-  fp = psppire_variable_get_write_spec (pv);
+  fp = var_get_write_format (pv);
 
   s = g_string_sized_new (fp->w + 1);
   g_string_set_size (s, fp->w);
 
   s = g_string_sized_new (fp->w + 1);
   g_string_set_size (s, fp->w);
@@ -526,17 +526,18 @@ psppire_data_store_clear_datum (GSheetModel *model,
   PsppireDataStore *store = PSPPIRE_DATA_STORE(model);
 
   union value v;
   PsppireDataStore *store = PSPPIRE_DATA_STORE(model);
 
   union value v;
-  const struct PsppireVariable *pv = psppire_dict_get_variable(store->dict, col);
+  const struct variable *pv = psppire_dict_get_variable (store->dict, col);
 
 
-  const gint index = psppire_variable_get_fv(pv) ;
+  const gint index = var_get_case_index (pv) ;
 
 
-  if ( psppire_variable_get_type(pv) == VAR_NUMERIC) 
+  if ( var_is_numeric (pv))
     v.f = SYSMIS;
   else
     memcpy(v.s, "", MAX_SHORT_STRING);
 
   psppire_case_file_set_value(store->case_file, row, index, &v, 
     v.f = SYSMIS;
   else
     memcpy(v.s, "", MAX_SHORT_STRING);
 
   psppire_case_file_set_value(store->case_file, row, index, &v, 
-                             psppire_variable_get_width(pv));
+                             var_get_width (pv));
+
   return TRUE;
 }
 
   return TRUE;
 }
 
@@ -551,7 +552,7 @@ psppire_data_store_set_string(GSheetModel *model,
 {
   PsppireDataStore *store = PSPPIRE_DATA_STORE(model);
 
 {
   PsppireDataStore *store = PSPPIRE_DATA_STORE(model);
 
-  const struct PsppireVariable *pv = psppire_dict_get_variable(store->dict, col);
+  const struct variable *pv = psppire_dict_get_variable(store->dict, col);
   g_return_val_if_fail(pv, FALSE);
 
 #if 0
   g_return_val_if_fail(pv, FALSE);
 
 #if 0
@@ -570,8 +571,8 @@ psppire_data_store_set_string(GSheetModel *model,
 #endif
 
   psppire_case_file_data_in (store->case_file, row,
 #endif
 
   psppire_case_file_data_in (store->case_file, row,
-                             psppire_variable_get_fv (pv), ss_cstr (text),
-                             psppire_variable_get_write_spec (pv));
+                             var_get_case_index (pv), ss_cstr (text),
+                             var_get_write_format (pv));
   
   return TRUE;
 }
   
   return TRUE;
 }
@@ -677,18 +678,18 @@ geometry_get_column_count(const GSheetColumn *geom)
 static gint
 geometry_get_width(const GSheetColumn *geom, gint unit)
 {
 static gint
 geometry_get_width(const GSheetColumn *geom, gint unit)
 {
-  const struct PsppireVariable *pv ;
+  const struct variable *pv ;
   PsppireDataStore *ds = PSPPIRE_DATA_STORE(geom);
 
   if ( unit >= psppire_dict_get_var_cnt(ds->dict) )
     return ds->width_of_m * 8 ;
 
   PsppireDataStore *ds = PSPPIRE_DATA_STORE(geom);
 
   if ( unit >= psppire_dict_get_var_cnt(ds->dict) )
     return ds->width_of_m * 8 ;
 
-  pv = psppire_dict_get_variable(ds->dict, unit);
+  pv = psppire_dict_get_variable (ds->dict, unit);
 
   if ( pv == NULL ) 
     return ds->width_of_m * 8 ;
 
 
   if ( pv == NULL ) 
     return ds->width_of_m * 8 ;
 
-  return ds->width_of_m * psppire_variable_get_columns(pv);
+  return ds->width_of_m * var_get_display_width (pv);
 }
 
 static void
 }
 
 static void
@@ -696,9 +697,9 @@ geometry_set_width(GSheetColumn *geom, gint unit, gint width)
 {
   PsppireDataStore *ds = PSPPIRE_DATA_STORE(geom);
 
 {
   PsppireDataStore *ds = PSPPIRE_DATA_STORE(geom);
 
-  struct PsppireVariable *pv = psppire_dict_get_variable(ds->dict, unit);
+  struct variable *pv = psppire_dict_get_variable (ds->dict, unit);
 
 
-  psppire_variable_set_columns(pv, width / ds->width_of_m );
+  var_set_display_width (pv, width / ds->width_of_m );
 }
 
 
 }
 
 
@@ -707,7 +708,7 @@ static GtkJustification
 geometry_get_justification(const GSheetColumn *geom, gint unit)
 {
   PsppireDataStore *ds = PSPPIRE_DATA_STORE(geom);
 geometry_get_justification(const GSheetColumn *geom, gint unit)
 {
   PsppireDataStore *ds = PSPPIRE_DATA_STORE(geom);
-  const struct PsppireVariable *pv ;
+  const struct variable *pv ;
 
 
   if ( unit >= psppire_dict_get_var_cnt(ds->dict) )
 
 
   if ( unit >= psppire_dict_get_var_cnt(ds->dict) )
@@ -717,7 +718,7 @@ geometry_get_justification(const GSheetColumn *geom, gint unit)
 
   /* Kludge: Happily GtkJustification is defined similarly
      to enum alignment from pspp/variable.h */
 
   /* Kludge: Happily GtkJustification is defined similarly
      to enum alignment from pspp/variable.h */
-  return psppire_variable_get_alignment(pv);
+  return var_get_alignment(pv);
 }
 
 
 }
 
 
@@ -727,15 +728,15 @@ static gchar *
 geometry_get_column_button_label(const GSheetColumn *geom, gint unit)
 {
   gchar *text;
 geometry_get_column_button_label(const GSheetColumn *geom, gint unit)
 {
   gchar *text;
-  struct PsppireVariable *pv ;
+  struct variable *pv ;
   PsppireDataStore *ds = PSPPIRE_DATA_STORE(geom);
 
   if ( unit >= psppire_dict_get_var_cnt(ds->dict) )
     return g_locale_to_utf8(null_var_name, -1, 0, 0, 0);
 
   PsppireDataStore *ds = PSPPIRE_DATA_STORE(geom);
 
   if ( unit >= psppire_dict_get_var_cnt(ds->dict) )
     return g_locale_to_utf8(null_var_name, -1, 0, 0, 0);
 
-  pv = psppire_dict_get_variable(ds->dict, unit);
+  pv = psppire_dict_get_variable (ds->dict, unit);
 
 
-  text =  pspp_locale_to_utf8(psppire_variable_get_name(pv), -1, 0);
+  text =  pspp_locale_to_utf8 (var_get_name (pv), -1, 0);
 
   return text;
 }
 
   return text;
 }
index 94023f55bded26ed7c944163656951c2c9dd1575..0d700fe5a4a12b9eb595c4bce1efd7b4eb75f0e6 100644 (file)
 #include <data/dictionary.h>
 #include <data/missing-values.h>
 #include <data/value-labels.h>
 #include <data/dictionary.h>
 #include <data/missing-values.h>
 #include <data/value-labels.h>
-
+#include <data/variable.h>
 
 #include "message-dialog.h"
 
 #include "message-dialog.h"
-#include "psppire-variable.h"
 
 /* --- prototypes --- */
 static void psppire_dict_class_init    (PsppireDictClass       *class);
 
 /* --- prototypes --- */
 static void psppire_dict_class_init    (PsppireDictClass       *class);
@@ -165,27 +164,46 @@ psppire_dict_class_init (PsppireDictClass *class)
 static void
 psppire_dict_finalize (GObject *object)
 {
 static void
 psppire_dict_finalize (GObject *object)
 {
-  gint v;
   PsppireDict *d = PSPPIRE_DICT (object);
   PsppireDict *d = PSPPIRE_DICT (object);
-  
-  for (v = 0 ; v < psppire_dict_get_var_cnt(d) ; ++v ) 
-    g_free(d->variables[v]);
-
-  g_free(d->variables);
-  d->cache_size = 0;
 
   dict_destroy(d->dict);
 
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
 
   dict_destroy(d->dict);
 
   G_OBJECT_CLASS (parent_class)->finalize (object);
 }
 
+/* Pass on callbacks from src/data/dictionary, as
+   signals in the Gtk library */
+static void
+addcb (struct dictionary *d, int idx, void *pd)
+{
+  g_signal_emit(pd, signal[VARIABLE_INSERTED], 0, idx);
+}
+
+static void
+delcb (struct dictionary *d, int idx, void *pd)
+{
+  g_signal_emit(pd, signal[VARIABLES_DELETED], 0, idx, 1);
+}
+
+static void
+mutcb (struct dictionary *d, int idx, void *pd)
+{
+  g_signal_emit(pd, signal[VARIABLE_CHANGED], 0, idx);
+}
+
+static const struct dict_callbacks gui_callbacks =
+  {
+    addcb,
+    delcb,
+    mutcb
+  };
+
 static void
 psppire_dict_init (PsppireDict *psppire_dict)
 {
 static void
 psppire_dict_init (PsppireDict *psppire_dict)
 {
-  psppire_dict->dict = dict_create();
+  psppire_dict->dict = dict_create ();
 
 
-  psppire_dict->variables = 0; 
-  psppire_dict->cache_size = 0;
+  dict_set_callbacks (psppire_dict->dict, &gui_callbacks, psppire_dict);
 
   psppire_dict->stamp = g_random_int();
 }
 
   psppire_dict->stamp = g_random_int();
 }
@@ -193,8 +211,8 @@ psppire_dict_init (PsppireDict *psppire_dict)
 /**
  * psppire_dict_new:
  * @returns: a new #PsppireDict object
 /**
  * psppire_dict_new:
  * @returns: a new #PsppireDict object
- * 
- * Creates a new #PsppireDict. 
+ *
+ * Creates a new #PsppireDict.
  */
 PsppireDict*
 psppire_dict_new (void)
  */
 PsppireDict*
 psppire_dict_new (void)
@@ -206,18 +224,14 @@ psppire_dict_new (void)
 /**
  * psppire_dict_new_from_dict:
  * @returns: a new #PsppireDict object
 /**
  * psppire_dict_new_from_dict:
  * @returns: a new #PsppireDict object
- * 
- * Creates a new #PsppireDict. 
+ *
+ * Creates a new #PsppireDict.
  */
 PsppireDict*
 psppire_dict_new_from_dict (struct dictionary *d)
 {
   PsppireDict *new_dict = g_object_new (G_TYPE_PSPPIRE_DICT, NULL);
   new_dict->dict = d;
  */
 PsppireDict*
 psppire_dict_new_from_dict (struct dictionary *d)
 {
   PsppireDict *new_dict = g_object_new (G_TYPE_PSPPIRE_DICT, NULL);
   new_dict->dict = d;
-  new_dict->cache_size = dict_get_var_cnt(d);
-  new_dict->variables = g_malloc0(sizeof(struct PsppireVariable *) * 
-                                 new_dict->cache_size);
-
 
   return new_dict;
 }
 
   return new_dict;
 }
@@ -226,12 +240,11 @@ psppire_dict_new_from_dict (struct dictionary *d)
 /* Returns a valid name for a new variable in DICT.
    The return value is statically allocated */
 static gchar * 
 /* Returns a valid name for a new variable in DICT.
    The return value is statically allocated */
 static gchar * 
-auto_generate_var_name(PsppireDict *dict)
+auto_generate_var_name (PsppireDict *dict)
 {
   gint d = 0;
   static gchar name[10];
 
 {
   gint d = 0;
   static gchar name[10];
 
-
   while (g_snprintf(name, 10, "VAR%05d",d++),
         psppire_dict_lookup_var(dict, name))
     ;
   while (g_snprintf(name, 10, "VAR%05d",d++),
         psppire_dict_lookup_var(dict, name))
     ;
@@ -246,32 +259,10 @@ void
 psppire_dict_insert_variable(PsppireDict *d, gint idx, const gchar *name)
 {
   struct variable *var ;
 psppire_dict_insert_variable(PsppireDict *d, gint idx, const gchar *name)
 {
   struct variable *var ;
-  gint i;
   g_return_if_fail(d);
   g_return_if_fail(G_IS_PSPPIRE_DICT(d));
 
 
   g_return_if_fail(d);
   g_return_if_fail(G_IS_PSPPIRE_DICT(d));
 
 
-  /* Invalidate the cache from IDX onwards */
-  for ( i = idx ; i < d->cache_size ; ++i ) 
-    {
-      g_free(d->variables[i]);
-      d->variables[i] = 0;
-    }
-
-  /* Ensure that the cache is large enough */
-  if ( dict_get_var_cnt(d->dict) >= d->cache_size ) 
-    {
-      d->variables = g_realloc(d->variables, sizeof(struct PsppireVariable*) * 
-                              (d->cache_size + CACHE_CHUNK));
-      d->cache_size += CACHE_CHUNK;
-    }
-
-  /* Zero the new pointers */
-  for ( ; i < d->cache_size ; ++i ) 
-    {
-      d->variables[i] = 0;
-    }
-
   if ( ! name ) 
     name = auto_generate_var_name(d);
   
   if ( ! name ) 
     name = auto_generate_var_name(d);
   
@@ -279,10 +270,6 @@ psppire_dict_insert_variable(PsppireDict *d, gint idx, const gchar *name)
 
   dict_reorder_var(d->dict, var, idx);
 
 
   dict_reorder_var(d->dict, var, idx);
 
-  d->variables[idx] = g_malloc(sizeof (struct PsppireVariable));
-  d->variables[idx]->v = var;
-  d->variables[idx]->dict = d;
-
   g_signal_emit(d, signal[VARIABLE_INSERTED], 0, idx );  
 }
 
   g_signal_emit(d, signal[VARIABLE_INSERTED], 0, idx );  
 }
 
@@ -295,13 +282,6 @@ psppire_dict_delete_variables(PsppireDict *d, gint first, gint n)
   g_return_if_fail(d->dict);
   g_return_if_fail(G_IS_PSPPIRE_DICT(d));
 
   g_return_if_fail(d->dict);
   g_return_if_fail(G_IS_PSPPIRE_DICT(d));
 
-  /* Invalidate all pvs from FIRST onwards */
-  for ( idx = first ; idx < d->cache_size ; ++idx ) 
-    {
-      g_free(d->variables[idx]);
-      d->variables[idx] = 0;
-    }
-
   for (idx = 0 ; idx < n ; ++idx ) 
     {
       struct variable *var;
   for (idx = 0 ; idx < n ; ++idx ) 
     {
       struct variable *var;
@@ -345,42 +325,27 @@ psppire_dict_set_name(PsppireDict* d, gint idx, const gchar *name)
 
 
 /* Return the IDXth variable */
 
 
 /* Return the IDXth variable */
-struct PsppireVariable *
+struct variable *
 psppire_dict_get_variable(PsppireDict *d, gint idx)
 {
 psppire_dict_get_variable(PsppireDict *d, gint idx)
 {
-  struct PsppireVariable *var ;
   g_return_val_if_fail(d, NULL);
   g_return_val_if_fail(d->dict, NULL);
 
   g_return_val_if_fail(d, NULL);
   g_return_val_if_fail(d->dict, NULL);
 
-  if ( ! d->variables) 
+  if ( dict_get_var_cnt (d->dict) <= idx )
     return NULL;
     return NULL;
-  
-  if (idx < 0 || idx >= psppire_dict_get_var_cnt(d))
-    return NULL;
-
-  var = d->variables[idx] ; 
 
 
-  if (! var ) 
-    {
-      var = g_malloc(sizeof (*var));
-      var->dict = d;
-      var->v = dict_get_var(d->dict, idx);
-      d->variables[idx] = var;
-    }
-    
-  return var;
+  return dict_get_var (d->dict, idx);
 }
 
 
 /* Return the number of variables in the dictionary */
 }
 
 
 /* Return the number of variables in the dictionary */
-gint 
-psppire_dict_get_var_cnt(const PsppireDict *d)
+gint
+psppire_dict_get_var_cnt (const PsppireDict *d)
 {
 {
-  g_return_val_if_fail(d, -1);
-  g_return_val_if_fail(d->dict, -1);
-  
+  g_return_val_if_fail (d, -1);
+  g_return_val_if_fail (d->dict, -1);
 
 
-  return dict_get_var_cnt(d->dict);
+  return dict_get_var_cnt (d->dict);
 }
 
 
 }
 
 
@@ -390,15 +355,15 @@ psppire_dict_get_var_cnt(const PsppireDict *d)
 struct variable *
 psppire_dict_lookup_var (const PsppireDict *d, const gchar *name)
 {
 struct variable *
 psppire_dict_lookup_var (const PsppireDict *d, const gchar *name)
 {
-  g_return_val_if_fail(d, NULL);
-  g_return_val_if_fail(d->dict, NULL);
+  g_return_val_if_fail (d, NULL);
+  g_return_val_if_fail (d->dict, NULL);
 
 
-  return dict_lookup_var(d->dict, name);
+  return dict_lookup_var (d->dict, name);
 }
 
 
 void
 }
 
 
 void
-psppire_dict_var_changed(PsppireDict *d, gint idx)
+psppire_dict_var_changed (PsppireDict *d, gint idx)
 {
   g_return_if_fail(d);
 
 {
   g_return_if_fail(d);
 
@@ -407,7 +372,7 @@ psppire_dict_var_changed(PsppireDict *d, gint idx)
 
 
 /* Clears the contents of D */
 
 
 /* Clears the contents of D */
-void 
+void
 psppire_dict_clear(PsppireDict *d)
 {
   g_return_if_fail(d);
 psppire_dict_clear(PsppireDict *d)
 {
   g_return_if_fail(d);
@@ -415,29 +380,21 @@ psppire_dict_clear(PsppireDict *d)
 
   {
     const gint n_vars = dict_get_var_cnt(d->dict);
 
   {
     const gint n_vars = dict_get_var_cnt(d->dict);
-    gint i;
-  
-    dict_clear(d->dict);
 
 
-    /* Invalidate the entire cache */
-    for ( i = 0 ; i < d->cache_size ; ++i ) 
-      {
-       g_free(d->variables[i]);
-       d->variables[i] = 0;
-      }
+    dict_clear(d->dict);
 
 
-    g_signal_emit(d, signal[VARIABLES_DELETED], 0, 0, n_vars );  
+    g_signal_emit(d, signal[VARIABLES_DELETED], 0, 0, n_vars );
   }
 }
 
 
 
   }
 }
 
 
 
-/* Return true is NAME would be a valid name of a variable to add to the 
-   dictionary.  False otherwise. 
+/* Return true is NAME would be a valid name of a variable to add to the
+   dictionary.  False otherwise.
    If REPORT is true, then invalid names will be reported as such as errors
 */
 gboolean
    If REPORT is true, then invalid names will be reported as such as errors
 */
 gboolean
-psppire_dict_check_name(const PsppireDict *dict, 
+psppire_dict_check_name(const PsppireDict *dict,
                     const gchar *name, gboolean report)
 {
   if ( ! var_is_valid_name(name, report ) )
                     const gchar *name, gboolean report)
 {
   if ( ! var_is_valid_name(name, report ) )
@@ -445,7 +402,7 @@ psppire_dict_check_name(const PsppireDict *dict,
 
   if (psppire_dict_lookup_var(dict, name))
     {
 
   if (psppire_dict_lookup_var(dict, name))
     {
-      if ( report ) 
+      if ( report )
        msg(ME,"Duplicate variable name.");
       return FALSE;
     }
        msg(ME,"Duplicate variable name.");
       return FALSE;
     }
@@ -454,62 +411,59 @@ psppire_dict_check_name(const PsppireDict *dict,
 }
 
 
 }
 
 
-inline gint 
+inline gint
 psppire_dict_get_next_value_idx (const PsppireDict *dict)
 {
   return dict_get_next_value_idx(dict->dict);
 }
 
 
 psppire_dict_get_next_value_idx (const PsppireDict *dict)
 {
   return dict_get_next_value_idx(dict->dict);
 }
 
 
-void 
-psppire_dict_resize_variable(PsppireDict *d, const struct PsppireVariable *pv,
-                            gint old_size, gint new_size)
+void
+psppire_dict_resize_variable (PsppireDict *d, const struct variable *pv,
+                             gint old_size, gint new_size)
 {
   gint fv;
   g_return_if_fail (d);
   g_return_if_fail (d->dict);
 {
   gint fv;
   g_return_if_fail (d);
   g_return_if_fail (d->dict);
-  
-  if ( old_size == new_size ) 
+
+  if ( old_size == new_size )
     return ;
 
     return ;
 
-  dict_compact_values(d->dict);
+  dict_compact_values (d->dict);
 
 
-  fv = psppire_variable_get_fv(pv);
+  fv = var_get_case_index (pv);
 
 
-  g_signal_emit(d, signal[VARIABLE_RESIZED], 0, 
-               fv + old_size, 
-               new_size - old_size );  
+  g_signal_emit(d, signal[VARIABLE_RESIZED], 0,
+               fv + old_size,
+               new_size - old_size );
 }
 
 
 }
 
 
-
-
-
 /* Tree Model Stuff */
 
 /* Tree Model Stuff */
 
-static GtkTreeModelFlags tree_model_get_flags(GtkTreeModel *model);
+static GtkTreeModelFlags tree_model_get_flags (GtkTreeModel *model);
 
 
-static gint tree_model_n_columns(GtkTreeModel *model);
+static gint tree_model_n_columns (GtkTreeModel *model);
 
 
-static GType tree_model_column_type(GtkTreeModel *model, gint index);
+static GType tree_model_column_type (GtkTreeModel *model, gint index);
 
 
-static gboolean tree_model_get_iter(GtkTreeModel *model, GtkTreeIter *iter, 
-                                   GtkTreePath *path);
+static gboolean tree_model_get_iter (GtkTreeModel *model, GtkTreeIter *iter, 
+                                    GtkTreePath *path);
 
 
-static gboolean tree_model_iter_next(GtkTreeModel *model, GtkTreeIter *iter);
+static gboolean tree_model_iter_next (GtkTreeModel *model, GtkTreeIter *iter);
 
 
-static GtkTreePath * tree_model_get_path(GtkTreeModel *model, 
-                                        GtkTreeIter *iter);
+static GtkTreePath * tree_model_get_path (GtkTreeModel *model, 
+                                         GtkTreeIter *iter);
 
 
-static void tree_model_get_value(GtkTreeModel *model, GtkTreeIter *iter,
-                                gint column, GValue *value);
+static void tree_model_get_value (GtkTreeModel *model, GtkTreeIter *iter,
+                                 gint column, GValue *value);
 
 
-static gboolean tree_model_nth_child(GtkTreeModel *model, GtkTreeIter *iter, 
-                                    GtkTreeIter *parent, gint n);
+static gboolean tree_model_nth_child (GtkTreeModel *model, GtkTreeIter *iter, 
+                                     GtkTreeIter *parent, gint n);
 
 
 static void
 
 
 static void
-dictionary_tree_model_init(GtkTreeModelIface *iface)
+dictionary_tree_model_init (GtkTreeModelIface *iface)
 {
   iface->get_flags = tree_model_get_flags;
   iface->get_n_columns = tree_model_n_columns;
 {
   iface->get_flags = tree_model_get_flags;
   iface->get_n_columns = tree_model_n_columns;
@@ -527,40 +481,40 @@ dictionary_tree_model_init(GtkTreeModelIface *iface)
 }
 
 static GtkTreeModelFlags
 }
 
 static GtkTreeModelFlags
-tree_model_get_flags(GtkTreeModel *model)
+tree_model_get_flags (GtkTreeModel *model)
 {
 {
-  g_return_val_if_fail(G_IS_PSPPIRE_DICT(model), (GtkTreeModelFlags) 0);
+  g_return_val_if_fail (G_IS_PSPPIRE_DICT(model), (GtkTreeModelFlags) 0);
 
   return GTK_TREE_MODEL_LIST_ONLY;
 }
 
 
 static gint
 
   return GTK_TREE_MODEL_LIST_ONLY;
 }
 
 
 static gint
-tree_model_n_columns(GtkTreeModel *model)
+tree_model_n_columns (GtkTreeModel *model)
 {
   return n_DICT_COLS;
 }
 
 static GType
 {
   return n_DICT_COLS;
 }
 
 static GType
-tree_model_column_type(GtkTreeModel *model, gint index)
+tree_model_column_type (GtkTreeModel *model, gint index)
 {
 {
g_return_val_if_fail(G_IS_PSPPIRE_DICT(model), (GType) 0);
-
- switch(index) 
-   {
-   case DICT_TVM_COL_NAME:
-     return G_TYPE_STRING;
-     break;
-   case DICT_TVM_COL_VAR:
-     return G_TYPE_POINTER;
-     break;
-   default:
-     g_return_val_if_reached((GType)0);
-     break;
-   }
-
- g_assert_not_reached();
- return ((GType)0);
 g_return_val_if_fail (G_IS_PSPPIRE_DICT(model), (GType) 0);
+
 switch(index) 
+    {
+    case DICT_TVM_COL_NAME:
+      return G_TYPE_STRING;
+      break;
+    case DICT_TVM_COL_VAR:
+      return G_TYPE_POINTER;
+      break;
+    default:
+      g_return_val_if_reached((GType)0);
+      break;
+    }
+
 g_assert_not_reached();
 return ((GType)0);
 }
 
 static gboolean
 }
 
 static gboolean
@@ -568,28 +522,28 @@ tree_model_get_iter(GtkTreeModel *model, GtkTreeIter *iter, GtkTreePath *path)
 {
   gint *indices, depth;
   gint n;
 {
   gint *indices, depth;
   gint n;
-  struct PsppireVariable *variable;
+  struct variable *variable;
 
   PsppireDict *dict = PSPPIRE_DICT (model);
 
 
   PsppireDict *dict = PSPPIRE_DICT (model);
 
-  g_return_val_if_fail(path, FALSE);
+  g_return_val_if_fail (path, FALSE);
 
 
-  indices = gtk_tree_path_get_indices(path);
-  depth = gtk_tree_path_get_depth(path);
+  indices = gtk_tree_path_get_indices (path);
+  depth = gtk_tree_path_get_depth (path);
 
   g_return_val_if_fail(depth == 1, FALSE);
 
   n = indices[0];
 
 
   g_return_val_if_fail(depth == 1, FALSE);
 
   n = indices[0];
 
-  if ( n < 0 || n >= psppire_dict_get_var_cnt(dict)) 
+  if ( n < 0 || n >= psppire_dict_get_var_cnt (dict)) 
     return FALSE;
 
     return FALSE;
 
-  variable = psppire_dict_get_variable(dict, n);
+  variable = dict_get_var (dict->dict, n);
 
 
-  g_assert(psppire_variable_get_index(variable) == n);
+  g_assert (var_get_dict_index (variable) == n);
 
   iter->stamp = dict->stamp;
 
   iter->stamp = dict->stamp;
-  iter->user_data = variable; 
+  iter->user_data = variable;
 
   return TRUE;
 }
 
   return TRUE;
 }
@@ -599,7 +553,7 @@ static gboolean
 tree_model_iter_next(GtkTreeModel *model, GtkTreeIter *iter)
 {
   PsppireDict *dict = PSPPIRE_DICT (model);
 tree_model_iter_next(GtkTreeModel *model, GtkTreeIter *iter)
 {
   PsppireDict *dict = PSPPIRE_DICT (model);
-  struct PsppireVariable *variable;
+  struct variable *variable;
   gint idx;
 
   g_return_val_if_fail(iter->stamp == dict->stamp, FALSE);
   gint idx;
 
   g_return_val_if_fail(iter->stamp == dict->stamp, FALSE);
@@ -607,17 +561,17 @@ tree_model_iter_next(GtkTreeModel *model, GtkTreeIter *iter)
   if ( iter == NULL || iter->user_data == NULL)
     return FALSE;
 
   if ( iter == NULL || iter->user_data == NULL)
     return FALSE;
 
-  variable = (struct PsppireVariable *) iter->user_data;
+  variable = (struct variable *) iter->user_data;
+
+  idx = var_get_dict_index (variable);
 
 
-  idx = psppire_variable_get_index(variable);
-  
   if ( idx + 1 >= psppire_dict_get_var_cnt(dict))
     return FALSE;
 
   if ( idx + 1 >= psppire_dict_get_var_cnt(dict))
     return FALSE;
 
-  variable = psppire_dict_get_variable(dict, idx + 1);
+  variable = psppire_dict_get_variable (dict, idx + 1);
+
+  g_assert (var_get_dict_index (variable) == idx + 1);
 
 
-  g_assert(psppire_variable_get_index(variable) == idx + 1);
-  
   iter->user_data = variable;
 
   return TRUE;
   iter->user_data = variable;
 
   return TRUE;
@@ -627,15 +581,15 @@ static GtkTreePath *
 tree_model_get_path(GtkTreeModel *model, GtkTreeIter *iter)
 {
   GtkTreePath *path;
 tree_model_get_path(GtkTreeModel *model, GtkTreeIter *iter)
 {
   GtkTreePath *path;
-  struct PsppireVariable *variable;
+  struct variable *variable;
   PsppireDict *dict = PSPPIRE_DICT (model);
 
   g_return_val_if_fail(iter->stamp == dict->stamp, FALSE);
 
   PsppireDict *dict = PSPPIRE_DICT (model);
 
   g_return_val_if_fail(iter->stamp == dict->stamp, FALSE);
 
-  variable = (struct PsppireVariable *) iter->user_data;
+  variable = (struct variable *) iter->user_data;
 
   path = gtk_tree_path_new();
 
   path = gtk_tree_path_new();
-  gtk_tree_path_append_index(path, psppire_variable_get_index(variable));
+  gtk_tree_path_append_index(path, var_get_dict_index (variable));
 
   return path;
 }
 
   return path;
 }
@@ -645,18 +599,18 @@ static void
 tree_model_get_value(GtkTreeModel *model, GtkTreeIter *iter,
                     gint column, GValue *value)
 {
 tree_model_get_value(GtkTreeModel *model, GtkTreeIter *iter,
                     gint column, GValue *value)
 {
-  struct PsppireVariable *variable;
+  struct variable *variable;
   PsppireDict *dict = PSPPIRE_DICT (model);
 
   g_return_if_fail(iter->stamp == dict->stamp);
 
   PsppireDict *dict = PSPPIRE_DICT (model);
 
   g_return_if_fail(iter->stamp == dict->stamp);
 
-  variable = (struct PsppireVariable *) iter->user_data;
+  variable = (struct variable *) iter->user_data;
 
   switch(column)
     {
     case DICT_TVM_COL_NAME:
       g_value_init(value, G_TYPE_STRING);
 
   switch(column)
     {
     case DICT_TVM_COL_NAME:
       g_value_init(value, G_TYPE_STRING);
-      g_value_set_string(value, psppire_variable_get_name(variable));
+      g_value_set_string(value, var_get_name(variable));
       break;
     case DICT_TVM_COL_VAR:
       g_value_init(value, G_TYPE_POINTER);
       break;
     case DICT_TVM_COL_VAR:
       g_value_init(value, G_TYPE_POINTER);
@@ -670,7 +624,7 @@ tree_model_get_value(GtkTreeModel *model, GtkTreeIter *iter,
 
 
 static gboolean
 
 
 static gboolean
-tree_model_nth_child(GtkTreeModel *model, GtkTreeIter *iter, 
+tree_model_nth_child(GtkTreeModel *model, GtkTreeIter *iter,
                     GtkTreeIter *parent, gint n)
 {
   PsppireDict *dict;
                     GtkTreeIter *parent, gint n)
 {
   PsppireDict *dict;
@@ -678,18 +632,26 @@ tree_model_nth_child(GtkTreeModel *model, GtkTreeIter *iter,
 
   dict = PSPPIRE_DICT(model);
 
 
   dict = PSPPIRE_DICT(model);
 
-  if ( parent ) 
+  if ( parent )
     return FALSE;
 
     return FALSE;
 
-  if ( n >= psppire_dict_get_var_cnt(dict) ) 
+  if ( n >= psppire_dict_get_var_cnt(dict) )
     return FALSE;
 
   iter->stamp = dict->stamp;
   iter->user_data = psppire_dict_get_variable(dict, n);
 
     return FALSE;
 
   iter->stamp = dict->stamp;
   iter->user_data = psppire_dict_get_variable(dict, n);
 
-  if ( !iter->user_data) 
+  if ( !iter->user_data)
     return FALSE;
     return FALSE;
-  
-  
+
+
   return TRUE;
 }
   return TRUE;
 }
+
+
+void
+psppire_dict_rename_var (PsppireDict *dict, struct variable *v,
+                        const gchar *text)
+{
+  dict_rename_var (dict->dict, v, text);
+}
index e71ef20403daec009fe11456201c04f552211884..e7acb1e04640d421c5d939e9bce1f894e0cef6f6 100644 (file)
@@ -54,11 +54,6 @@ struct _PsppireDict
   GObject             parent;
   struct dictionary *dict;
 
   GObject             parent;
   struct dictionary *dict;
 
-  /* Cache of variables */
-  struct PsppireVariable **variables;
-
-  gint cache_size;
-
   /* For GtkTreeModelIface */
   gint stamp;
 };
   /* For GtkTreeModelIface */
   gint stamp;
 };
@@ -94,7 +89,7 @@ void psppire_dict_clear(PsppireDict *d);
 
 /* Return the IDXth variable */
 
 
 /* Return the IDXth variable */
 
-struct PsppireVariable * psppire_dict_get_variable(PsppireDict *d, gint idx);
+struct variable * psppire_dict_get_variable (PsppireDict *d, gint idx);
 
 /* Delete N variables beginning at FIRST */
 void psppire_dict_delete_variables(PsppireDict *d, gint first, gint n);
 
 /* Delete N variables beginning at FIRST */
 void psppire_dict_delete_variables(PsppireDict *d, gint first, gint n);
@@ -102,15 +97,18 @@ void psppire_dict_delete_variables(PsppireDict *d, gint first, gint n);
 /* Insert a new variable at posn IDX */
 void psppire_dict_insert_variable(PsppireDict *d, gint idx, const gchar *name);
 
 /* Insert a new variable at posn IDX */
 void psppire_dict_insert_variable(PsppireDict *d, gint idx, const gchar *name);
 
-void psppire_dict_resize_variable(PsppireDict *d
-                                 const struct PsppireVariable *pv,
-                                 gint old_size, gint new_size);
+void psppire_dict_resize_variable(PsppireDict *, 
+                                 const struct variable *,
+                                 gint, gint );
 
 gboolean psppire_dict_check_name(const PsppireDict *dict, 
                              const gchar *name, gboolean report);
 
 gint psppire_dict_get_next_value_idx (const PsppireDict *dict);
 
 
 gboolean psppire_dict_check_name(const PsppireDict *dict, 
                              const gchar *name, gboolean report);
 
 gint psppire_dict_get_next_value_idx (const PsppireDict *dict);
 
+void psppire_dict_rename_var (PsppireDict *dict, struct variable *v,
+                             const gchar *text);
+
 
 G_END_DECLS
 
 
 G_END_DECLS
 
index daeeb23e56569427825ff1d4cd362b9129605550..85d9ec5a1bd790cad8211b590927cd2fb0e2d326 100644 (file)
@@ -32,7 +32,6 @@
 
 #include <gtksheet/gsheetmodel.h>
 
 
 #include <gtksheet/gsheetmodel.h>
 
-#include "psppire-variable.h"
 #include "psppire-var-store.h"
 #include "var-sheet.h"
 #include "helper.h"
 #include "psppire-var-store.h"
 #include "var-sheet.h"
 #include "helper.h"
@@ -63,7 +62,7 @@ static gboolean psppire_var_store_set_string(GSheetModel *model,
 
 static gint psppire_var_store_get_row_count(const GSheetModel * model);
 
 
 static gint psppire_var_store_get_row_count(const GSheetModel * model);
 
-static gchar *text_for_column(const struct PsppireVariable *pv, gint c, GError **err);
+static gchar *text_for_column(const struct variable *pv, gint c, GError **err);
 
 
 static void psppire_var_store_sheet_row_init (GSheetRowIface *iface);
 
 
 static void psppire_var_store_sheet_row_init (GSheetRowIface *iface);
@@ -151,15 +150,15 @@ psppire_var_store_item_editable(PsppireVarStore *var_store, gint row, gint colum
 {
   const struct fmt_spec *write_spec ;
 
 {
   const struct fmt_spec *write_spec ;
 
-  struct PsppireVariable *pv = psppire_var_store_get_variable(var_store, row);
+  struct variable *pv = psppire_var_store_get_var (var_store, row);
 
   if ( !pv ) 
     return TRUE;
 
 
   if ( !pv ) 
     return TRUE;
 
-  if ( VAR_STRING == psppire_variable_get_type(pv) && column == COL_DECIMALS ) 
+  if ( VAR_STRING == var_get_type (pv) && column == COL_DECIMALS ) 
     return FALSE;
 
     return FALSE;
 
-  write_spec = psppire_variable_get_write_spec(pv);
+  write_spec =var_get_write_format (pv);
 
   switch ( write_spec->type ) 
     {
 
   switch ( write_spec->type ) 
     {
@@ -186,6 +185,13 @@ psppire_var_store_item_editable(PsppireVarStore *var_store, gint row, gint colum
   return TRUE;
 }
 
   return TRUE;
 }
 
+
+struct variable * 
+psppire_var_store_get_var (PsppireVarStore *store, gint row)
+{
+  return psppire_dict_get_variable (store->dict, row);
+}
+
 static gboolean
 psppire_var_store_is_editable(const GSheetModel *model, gint row, gint column)
 {
 static gboolean
 psppire_var_store_is_editable(const GSheetModel *model, gint row, gint column)
 {
@@ -324,29 +330,17 @@ psppire_var_store_get_string(const GSheetModel *model, gint row, gint column)
 {
   PsppireVarStore *store = PSPPIRE_VAR_STORE(model);
 
 {
   PsppireVarStore *store = PSPPIRE_VAR_STORE(model);
 
-  struct PsppireVariable *pv;
+  struct variable *pv;
 
   if ( row >= psppire_dict_get_var_cnt(store->dict))
     return 0;
   
   pv = psppire_dict_get_variable (store->dict, row);
   
 
   if ( row >= psppire_dict_get_var_cnt(store->dict))
     return 0;
   
   pv = psppire_dict_get_variable (store->dict, row);
   
-  return text_for_column(pv, column, 0);
+  return text_for_column (pv, column, 0);
 }
 
 
 }
 
 
-struct PsppireVariable *
-psppire_var_store_get_variable(PsppireVarStore *store, gint row)
-{
-  g_return_val_if_fail(store, NULL);
-  g_return_val_if_fail(store->dict, NULL);
-
-  if ( row >= psppire_dict_get_var_cnt(store->dict))
-    return 0;
-
-  return psppire_dict_get_variable (store->dict, row);
-}
-
 /* Clears that part of the variable store, if possible, which corresponds 
    to ROW, COL.
    Returns true if anything was updated, false otherwise.
 /* Clears that part of the variable store, if possible, which corresponds 
    to ROW, COL.
    Returns true if anything was updated, false otherwise.
@@ -354,14 +348,14 @@ psppire_var_store_get_variable(PsppireVarStore *store, gint row)
 static gboolean 
 psppire_var_store_clear(GSheetModel *model,  gint row, gint col)
 {
 static gboolean 
 psppire_var_store_clear(GSheetModel *model,  gint row, gint col)
 {
-  struct PsppireVariable *pv ;
+  struct variable *pv ;
 
   PsppireVarStore *var_store = PSPPIRE_VAR_STORE(model);
 
 
   PsppireVarStore *var_store = PSPPIRE_VAR_STORE(model);
 
-  if ( row >= psppire_dict_get_var_cnt(var_store->dict))
+  if ( row >= psppire_dict_get_var_cnt (var_store->dict))
       return FALSE;
 
       return FALSE;
 
-  pv = psppire_var_store_get_variable(var_store, row);
+  pv = psppire_var_store_get_var (var_store, row);
 
   if ( !pv ) 
     return FALSE;
 
   if ( !pv ) 
     return FALSE;
@@ -369,7 +363,7 @@ psppire_var_store_clear(GSheetModel *model,  gint row, gint col)
   switch (col)
     {
     case COL_LABEL:
   switch (col)
     {
     case COL_LABEL:
-      psppire_variable_set_label(pv, 0);
+      var_set_label (pv, 0);
       return TRUE;
       break;
     }
       return TRUE;
       break;
     }
@@ -385,36 +379,73 @@ static gboolean
 psppire_var_store_set_string(GSheetModel *model, 
                          const gchar *text, gint row, gint col)
 {
 psppire_var_store_set_string(GSheetModel *model, 
                          const gchar *text, gint row, gint col)
 {
-  struct PsppireVariable *pv ;
+  struct variable *pv ;
 
   PsppireVarStore *var_store = PSPPIRE_VAR_STORE(model);
 
   if ( row >= psppire_dict_get_var_cnt(var_store->dict))
       return FALSE;
 
 
   PsppireVarStore *var_store = PSPPIRE_VAR_STORE(model);
 
   if ( row >= psppire_dict_get_var_cnt(var_store->dict))
       return FALSE;
 
-  pv = psppire_var_store_get_variable(var_store, row);
+  pv = psppire_var_store_get_var (var_store, row);
+
   if ( !pv ) 
     return FALSE;
 
   switch (col)
     {
     case COL_NAME:
   if ( !pv ) 
     return FALSE;
 
   switch (col)
     {
     case COL_NAME:
-      return psppire_variable_set_name(pv, text);
+      psppire_dict_rename_var (var_store->dict, pv, text);
+      return TRUE;
       break;
     case COL_COLUMNS:
       if ( ! text) return FALSE;
       break;
     case COL_COLUMNS:
       if ( ! text) return FALSE;
-      return psppire_variable_set_columns(pv, atoi(text));
+      var_set_display_width (pv, atoi(text));
+      return TRUE;
       break;
     case COL_WIDTH:
       break;
     case COL_WIDTH:
-      if ( ! text) return FALSE;
-      return psppire_variable_set_width(pv, atoi(text));
+      {
+       int width = atoi (text);
+       if ( ! text) return FALSE;
+       if ( var_is_alpha (pv))
+           var_set_width (pv, width);
+       else
+         {
+           struct fmt_spec fmt ;
+           fmt = *var_get_write_format (pv);
+           if ( width < fmt_min_output_width (fmt.type)
+                ||
+                width > fmt_max_output_width (fmt.type))
+             return FALSE;
+
+           fmt.w = width;
+           fmt.d = MIN (fmt_max_output_decimals (fmt.type, width), fmt.d);
+
+           var_set_both_formats (pv, &fmt);
+         }
+
+       return TRUE;
+      }
       break;
     case COL_DECIMALS:
       break;
     case COL_DECIMALS:
-      if ( ! text) return FALSE;
-      return psppire_variable_set_decimals(pv, atoi(text));
+      {
+       int decimals;
+       struct fmt_spec fmt;
+       if ( ! text) return FALSE;
+       decimals = atoi (text);
+       fmt = *var_get_write_format (pv);
+       if ( decimals >
+            fmt_max_output_decimals (fmt.type,
+                                     fmt.w
+                                     ))
+         return FALSE;
+
+       fmt.d = decimals;
+       var_set_both_formats (pv, &fmt);
+       return TRUE;
+      }
       break;
     case COL_LABEL:
       break;
     case COL_LABEL:
-      psppire_variable_set_label(pv, text);
+      var_set_label(pv, text);
       return TRUE;
       break;
     case COL_TYPE:
       return TRUE;
       break;
     case COL_TYPE:
@@ -435,7 +466,7 @@ psppire_var_store_set_string(GSheetModel *model,
 
 
 static  gchar *
 
 
 static  gchar *
-text_for_column(const struct PsppireVariable *pv, gint c, GError **err)
+text_for_column(const struct variable *pv, gint c, GError **err)
 {
   static gchar none[] = N_("None");
 
 {
   static gchar none[] = N_("None");
 
@@ -453,12 +484,12 @@ text_for_column(const struct PsppireVariable *pv, gint c, GError **err)
   enum {VT_NUMERIC, VT_COMMA, VT_DOT, VT_SCIENTIFIC, VT_DATE, VT_DOLLAR, 
        VT_CUSTOM, VT_STRING};
 
   enum {VT_NUMERIC, VT_COMMA, VT_DOT, VT_SCIENTIFIC, VT_DATE, VT_DOLLAR, 
        VT_CUSTOM, VT_STRING};
 
-  const struct fmt_spec *write_spec = psppire_variable_get_write_spec(pv);
+  const struct fmt_spec *write_spec = var_get_write_format (pv);
 
   switch (c)
     {
     case COL_NAME:
 
   switch (c)
     {
     case COL_NAME:
-      return pspp_locale_to_utf8(psppire_variable_get_name(pv), -1, err);
+      return pspp_locale_to_utf8 ( var_get_name (pv), -1, err);
       break;
     case COL_TYPE:
       {
       break;
     case COL_TYPE:
       {
@@ -538,20 +569,20 @@ text_for_column(const struct PsppireVariable *pv, gint c, GError **err)
       {
        gchar *s;
        GString *gstr = g_string_sized_new(10);
       {
        gchar *s;
        GString *gstr = g_string_sized_new(10);
-       g_string_printf(gstr, _("%d"), psppire_variable_get_columns(pv));
+       g_string_printf(gstr, _("%d"), var_get_display_width (pv));
        s = g_locale_to_utf8(gstr->str, gstr->len, 0, 0, err);
        g_string_free(gstr, TRUE);
        return s;
       }
       break;
     case COL_LABEL:
        s = g_locale_to_utf8(gstr->str, gstr->len, 0, 0, err);
        g_string_free(gstr, TRUE);
        return s;
       }
       break;
     case COL_LABEL:
-      return pspp_locale_to_utf8(psppire_variable_get_label(pv), -1, err);
+      return pspp_locale_to_utf8 (var_get_label (pv), -1, err);
       break;
 
     case COL_MISSING:
       {
        gchar *s;
       break;
 
     case COL_MISSING:
       {
        gchar *s;
-       const struct missing_values *miss = psppire_variable_get_missing(pv);
+       const struct missing_values *miss = var_get_missing_values (pv);
        if ( mv_is_empty(miss)) 
          return g_locale_to_utf8(gettext(none), -1, 0, 0, err);
        else
        if ( mv_is_empty(miss)) 
          return g_locale_to_utf8(gettext(none), -1, 0, 0, err);
        else
@@ -611,47 +642,48 @@ text_for_column(const struct PsppireVariable *pv, gint c, GError **err)
       break;
     case COL_VALUES:
       {
       break;
     case COL_VALUES:
       {
-       const struct val_labs *vls = psppire_variable_get_value_labels(pv);
-       if ( ! vls || 0 == val_labs_count(vls) ) 
-         return g_locale_to_utf8(gettext(none), -1, 0, 0, err);
+       if ( ! var_has_value_labels (pv))
+         return g_locale_to_utf8 (gettext (none), -1, 0, 0, err);
        else
          {
            gchar *ss;
        else
          {
            gchar *ss;
-           GString *gstr = g_string_sized_new(10);
+           GString *gstr = g_string_sized_new (10);
+           const struct val_labs *vls = var_get_value_labels (pv);
            struct val_labs_iterator *ip = 0;
            struct val_lab *vl = val_labs_first_sorted (vls, &ip);
 
            struct val_labs_iterator *ip = 0;
            struct val_lab *vl = val_labs_first_sorted (vls, &ip);
 
-           g_assert(vl);
+           g_assert (vl);
 
            {
 
            {
-             gchar *const vstr = value_to_text(vl->value, *write_spec);
+             gchar *const vstr = value_to_text (vl->value, *write_spec);
 
 
-             g_string_printf(gstr, "{%s,\"%s\"}_", vstr, vl->label);
-             g_free(vstr);
+             g_string_printf (gstr, "{%s,\"%s\"}_", vstr, vl->label);
+             g_free (vstr);
            }
 
            }
 
-           val_labs_done(&ip);
-           
-           ss = pspp_locale_to_utf8(gstr->str, gstr->len, err);
-           g_string_free(gstr, TRUE);
+           val_labs_done (&ip);
+
+           ss = pspp_locale_to_utf8 (gstr->str, gstr->len, err);
+           g_string_free (gstr, TRUE);
            return ss;
          }
       }
       break;
     case COL_ALIGN:
       {
            return ss;
          }
       }
       break;
     case COL_ALIGN:
       {
-       const gint align = psppire_variable_get_alignment(pv);
+       const gint align = var_get_alignment(pv);
 
 
-       g_assert(align < n_ALIGNMENTS);
+       g_assert (align < n_ALIGNMENTS);
        return g_locale_to_utf8(gettext(alignments[align]), -1, 0, 0, err);
       }
       break;
     case COL_MEASURE:
       {
        return g_locale_to_utf8(gettext(alignments[align]), -1, 0, 0, err);
       }
       break;
     case COL_MEASURE:
       {
-       const gint measure = psppire_variable_get_measure(pv);
+       const gint measure = var_get_measure (pv);
 
 
-       g_assert(measure < n_MEASURES);
-       return g_locale_to_utf8(gettext(measures[measure]), -1, 0, 0, err);
+       g_assert (measure - 1 < n_MEASURES);
+       return g_locale_to_utf8 (gettext (measures[measure - 1]),
+                                -1, 0, 0, err);
       }
       break;
     }
       }
       break;
     }
@@ -736,7 +768,7 @@ static gchar *
 geometry_get_button_label(const GSheetRow *geom, gint unit, gpointer data)
 {
   gchar *label = g_strdup_printf(_("%d"), unit);
 geometry_get_button_label(const GSheetRow *geom, gint unit, gpointer data)
 {
   gchar *label = g_strdup_printf(_("%d"), unit);
-  
+
   return label;
 }
 
   return label;
 }
 
index 792db1f17aa4cd0c800f6aa324db51814b5d8e7a..11a224d392bb60cfc4b9a8199f175aafc077ed28 100644 (file)
@@ -77,14 +77,12 @@ struct _PsppireVarStoreClass
 GType         psppire_var_store_get_type         (void) G_GNUC_CONST;
 PsppireVarStore *psppire_var_store_new              (PsppireDict *dict);
 struct variable * psppire_var_store_get_var (PsppireVarStore *store, gint row);
 GType         psppire_var_store_get_type         (void) G_GNUC_CONST;
 PsppireVarStore *psppire_var_store_new              (PsppireDict *dict);
 struct variable * psppire_var_store_get_var (PsppireVarStore *store, gint row);
-struct PsppireVariable * psppire_var_store_get_variable(PsppireVarStore *store, 
-                                                 gint row);
 
 
-void psppire_var_store_set_dictionary(PsppireVarStore *var_store, PsppireDict *dict);
+void psppire_var_store_set_dictionary (PsppireVarStore *var_store, PsppireDict *dict);
 
 
 /* Return the number of variables */
 
 
 /* Return the number of variables */
-gint psppire_var_store_get_var_cnt(PsppireVarStore      *var_store);
+gint psppire_var_store_get_var_cnt (PsppireVarStore      *var_store);
 
 void psppire_var_store_set_font(PsppireVarStore *store, const PangoFontDescription *fd);
 
 
 void psppire_var_store_set_font(PsppireVarStore *store, const PangoFontDescription *fd);
 
diff --git a/src/ui/gui/psppire-variable.c b/src/ui/gui/psppire-variable.c
deleted file mode 100644 (file)
index 70c69a7..0000000
+++ /dev/null
@@ -1,393 +0,0 @@
-/* 
-    PSPPIRE --- A Graphical User Interface for PSPP
-    Copyright (C) 2004, 2006  Free Software Foundation
-    Written by John Darrington
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-    02110-1301, USA. */
-
-#include <config.h>
-
-#include <string.h>
-#include <stdlib.h>
-
-#include <data/missing-values.h>
-#include <data/value-labels.h>
-#include <data/format.h>
-#include <libpspp/message.h>
-
-#include <libpspp/misc.h>
-
-#include "psppire-variable.h"
-#include "psppire-dict.h"
-
-
-
-gboolean
-psppire_variable_set_name(struct PsppireVariable *pv, const gchar *text)
-{
-  g_return_val_if_fail(pv, FALSE);
-  g_return_val_if_fail(pv->dict, FALSE);
-  g_return_val_if_fail(pv->v, FALSE);
-
-  if ( !text) 
-    return FALSE;
-
-  if ( 0 == strcmp(var_get_name (pv->v), text))
-    return FALSE;
-
-  if ( ! psppire_dict_check_name(pv->dict, text, TRUE) )
-    return FALSE;
-
-  dict_rename_var(pv->dict->dict, pv->v, text);
-
-  psppire_dict_var_changed(pv->dict, var_get_dict_index (pv->v));
-
-  return TRUE;
-}
-
-
-gboolean
-psppire_variable_set_columns(struct PsppireVariable *pv, gint columns)
-{
-  g_return_val_if_fail(pv, FALSE);
-  g_return_val_if_fail(pv->dict, FALSE);
-  g_return_val_if_fail(pv->v, FALSE);
-
-  var_set_display_width (pv->v, columns);
-  
-  psppire_dict_var_changed(pv->dict, var_get_dict_index (pv->v));
-
-  return TRUE;
-}
-
-gboolean
-psppire_variable_set_label(struct PsppireVariable *pv, const gchar *label)
-{
-  g_return_val_if_fail(pv, FALSE);
-  g_return_val_if_fail(pv->dict, FALSE);
-  g_return_val_if_fail(pv->v, FALSE);
-
-  var_set_label (pv->v, label);
-
-  psppire_dict_var_changed(pv->dict, var_get_dict_index (pv->v));
-
-  return TRUE;
-}
-
-
-gboolean
-psppire_variable_set_decimals(struct PsppireVariable *pv, gint decimals)
-{
-  struct fmt_spec fmt;
-
-  g_return_val_if_fail(pv, FALSE);
-  g_return_val_if_fail(pv->dict, FALSE);
-  g_return_val_if_fail(pv->v, FALSE);
-
-  fmt = *var_get_write_format (pv->v);
-  fmt.d = decimals;
-
-  return psppire_variable_set_format(pv, &fmt);
-}
-
-
-
-gboolean
-psppire_variable_set_width(struct PsppireVariable *pv, gint width)
-{
-  struct fmt_spec fmt ;
-  g_return_val_if_fail(pv, FALSE);
-  g_return_val_if_fail(pv->dict, FALSE);
-  g_return_val_if_fail(pv->v, FALSE);
-
-  fmt = *var_get_write_format (pv->v);
-  fmt.w = width;
-
-  if (var_is_alpha (pv->v))
-    {
-      gint old_var_cnt , new_var_cnt ;
-
-      if ( var_get_width (pv->v) == 0 ) 
-       old_var_cnt = 1;
-      else
-       old_var_cnt = DIV_RND_UP(var_get_width (pv->v), MAX_SHORT_STRING);
-      
-      new_var_cnt = DIV_RND_UP(width, MAX_SHORT_STRING);
-      var_set_width (pv->v, width);
-
-      psppire_dict_resize_variable(pv->dict, pv,
-                                  old_var_cnt, new_var_cnt);
-    }
-
-  return psppire_variable_set_format(pv, &fmt);
-}
-
-
-gboolean
-psppire_variable_set_type(struct PsppireVariable *pv, int type)
-{
-  gint old_var_cnt , new_var_cnt ;
-
-  g_return_val_if_fail(pv, FALSE);
-  g_return_val_if_fail(pv->dict, FALSE);
-  g_return_val_if_fail(pv->v, FALSE);
-
-  if ( var_get_width (pv->v) ) 
-    old_var_cnt = 1;
-  else
-    old_var_cnt = DIV_RND_UP (var_get_width (pv->v), MAX_SHORT_STRING);
-
-  var_set_width (pv->v, type == VAR_NUMERIC ? 0 : 1);
-
-  if ( var_get_width (pv->v) == 0 ) 
-    new_var_cnt = 1;
-  else
-    new_var_cnt = DIV_RND_UP (var_get_width (pv->v), MAX_SHORT_STRING);
-
-  psppire_dict_resize_variable(pv->dict, pv,
-                              old_var_cnt, new_var_cnt);
-
-  psppire_dict_var_changed(pv->dict, var_get_dict_index (pv->v));
-  return TRUE;
-}
-
-
-gboolean
-psppire_variable_set_format(struct PsppireVariable *pv, struct fmt_spec *fmt)
-{
-  g_return_val_if_fail(pv, FALSE);
-  g_return_val_if_fail(pv->dict, FALSE);
-  g_return_val_if_fail(pv->v, FALSE);
-
-  msg_disable ();
-  if ( fmt_check_output(fmt) 
-       && fmt_check_type_compat (fmt, var_get_type (pv->v))
-       && fmt_check_width_compat (fmt, var_get_width (pv->v))) 
-    {
-      msg_enable ();
-      var_set_both_formats (pv->v, fmt);
-      psppire_dict_var_changed(pv->dict, var_get_dict_index (pv->v));
-      return TRUE;
-    }
-  msg_enable ();
-
-  return FALSE;
-}
-
-
-gboolean
-psppire_variable_set_value_labels(const struct PsppireVariable *pv,
-                              const struct val_labs *vls)
-{
-  g_return_val_if_fail(pv, FALSE);
-  g_return_val_if_fail(pv->dict, FALSE);
-  g_return_val_if_fail(pv->v, FALSE);
-
-  var_set_value_labels (pv->v, vls);
-
-  psppire_dict_var_changed(pv->dict, var_get_dict_index (pv->v));
-  return TRUE;
-}
-
-gboolean 
-psppire_variable_set_missing(const struct PsppireVariable *pv,
-                         const struct missing_values *miss)
-{
-  g_return_val_if_fail(pv, FALSE);
-  g_return_val_if_fail(pv->dict, FALSE);
-  g_return_val_if_fail(pv->v, FALSE);
-
-  var_set_missing_values (pv->v, miss);
-
-  psppire_dict_var_changed(pv->dict, var_get_dict_index (pv->v));
-  return TRUE;
-}
-
-gboolean
-psppire_variable_set_write_spec(const struct PsppireVariable *pv, struct fmt_spec fmt)
-{
-  g_return_val_if_fail(pv, FALSE);
-  g_return_val_if_fail(pv->v, FALSE);
-
-  var_set_write_format (pv->v, &fmt);
-
-  psppire_dict_var_changed(pv->dict, var_get_dict_index (pv->v));
-  return TRUE;
-}
-
-gboolean
-psppire_variable_set_print_spec(const struct PsppireVariable *pv, struct fmt_spec fmt)
-{
-  g_return_val_if_fail(pv, FALSE);
-  g_return_val_if_fail(pv->v, FALSE);
-
-  var_set_print_format (pv->v, &fmt);
-
-  psppire_dict_var_changed(pv->dict, var_get_dict_index (pv->v));
-  return TRUE;
-}
-
-
-
-gboolean
-psppire_variable_set_alignment(struct PsppireVariable *pv, gint align)
-{
-  g_return_val_if_fail(pv, FALSE);
-  g_return_val_if_fail(pv->dict, FALSE);
-  g_return_val_if_fail(pv->v, FALSE);
-
-  var_set_alignment (pv->v, align);
-
-  psppire_dict_var_changed(pv->dict, var_get_dict_index (pv->v));
-  return TRUE;
-}
-
-
-gboolean
-psppire_variable_set_measure(struct PsppireVariable *pv, gint measure)
-{
-  g_return_val_if_fail(pv, FALSE);
-  g_return_val_if_fail(pv->dict, FALSE);
-  g_return_val_if_fail(pv->v, FALSE);
-
-  var_set_measure (pv->v, measure + 1);
-
-  psppire_dict_var_changed(pv->dict, var_get_dict_index (pv->v));
-  return TRUE;
-}
-
-
-const struct fmt_spec *
-psppire_variable_get_write_spec(const struct PsppireVariable *pv)
-{
-  g_return_val_if_fail(pv, NULL);
-  g_return_val_if_fail(pv->v, NULL);
-
-  return var_get_write_format (pv->v);
-}
-
-
-const gchar *
-psppire_variable_get_name(const struct PsppireVariable *pv)
-{
-  g_return_val_if_fail(pv, NULL);
-  g_return_val_if_fail(pv->v, NULL);
-
-  return var_get_name (pv->v);
-}
-
-
-gint
-psppire_variable_get_columns(const struct PsppireVariable *pv)
-{
-  g_return_val_if_fail(pv, -1);
-  g_return_val_if_fail(pv->v, -1);
-
-  return var_get_display_width (pv->v);
-}
-
-
-
-const gchar *
-psppire_variable_get_label(const struct PsppireVariable *pv)
-{
-  g_return_val_if_fail(pv, NULL);
-  g_return_val_if_fail(pv->v, NULL);
-
-  return var_get_label (pv->v);
-}
-
-
-const struct missing_values *
-psppire_variable_get_missing(const struct PsppireVariable *pv)
-{
-  g_return_val_if_fail(pv, NULL);
-  g_return_val_if_fail(pv->v, NULL);
-
-  return var_get_missing_values (pv->v);
-}
-
-
-const struct val_labs *
-psppire_variable_get_value_labels(const struct PsppireVariable *pv)
-{
-  g_return_val_if_fail(pv, NULL);
-  g_return_val_if_fail(pv->v, NULL);
-
-  return var_get_value_labels (pv->v);
-}
-
-
-gint
-psppire_variable_get_alignment(const struct PsppireVariable *pv)
-{
-  g_return_val_if_fail(pv, -1);
-  g_return_val_if_fail(pv->v, -1);
-
-  return var_get_alignment (pv->v);
-}
-
-
-
-gint
-psppire_variable_get_measure(const struct PsppireVariable *pv)
-{
-  g_return_val_if_fail(pv, -1);
-  g_return_val_if_fail(pv->v, -1);
-
-  return var_get_measure (pv->v) - 1;
-}
-
-gint
-psppire_variable_get_type(const struct PsppireVariable *pv)
-{
-  g_return_val_if_fail(pv, -1);
-  g_return_val_if_fail(pv->v, -1);
-
-  return var_get_type (pv->v);
-}
-
-
-gint
-psppire_variable_get_width(const struct PsppireVariable *pv)
-{
-  g_return_val_if_fail(pv, -1);
-  g_return_val_if_fail(pv->v, -1);
-
-  return var_get_width (pv->v);
-}
-
-
-gint
-psppire_variable_get_fv(const struct PsppireVariable *pv)
-{
-  g_return_val_if_fail(pv, -1);
-  g_return_val_if_fail(pv->v, -1);
-
-  return var_get_case_index (pv->v);
-}
-
-
-
-gint
-psppire_variable_get_index(const struct PsppireVariable *pv)
-{
-  g_return_val_if_fail(pv, -1);
-  g_return_val_if_fail(pv->v, -1);
-
-  return var_get_dict_index (pv->v);
-}
-
diff --git a/src/ui/gui/psppire-variable.h b/src/ui/gui/psppire-variable.h
deleted file mode 100644 (file)
index 2b06336..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/* 
-    PSPPIRE --- A Graphical User Interface for PSPP
-    Copyright (C) 2006  Free Software Foundation
-    Written by John Darrington
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-    02110-1301, USA. */
-
-
-#ifndef __PSPPIRE_VARIABLE_H__
-#define __PSPPIRE_VARIABLE_H__
-
-#include <glib-object.h>
-#include <glib.h>
-
-#include <data/variable.h>
-#include "psppire-dict.h"
-
-struct val_labs;
-
-/* Don't use any of these members.
-   Use accessor functions instead.
-*/
-struct PsppireVariable
-{
-  /* The payload */
-  struct variable *v;
-
-  /* The dictionary to which this variable belongs */
-  PsppireDict *dict;
-};
-
-
-
-gboolean psppire_variable_set_name(struct PsppireVariable *pv, const gchar *text);
-
-gboolean psppire_variable_set_columns(struct PsppireVariable *pv, gint columns);
-gboolean psppire_variable_set_label(struct PsppireVariable *pv, const gchar *label);
-gboolean psppire_variable_set_format(struct PsppireVariable *pv, struct fmt_spec *fmt);
-gboolean psppire_variable_set_decimals(struct PsppireVariable *pv, gint decimals);
-gboolean psppire_variable_set_width(struct PsppireVariable *pv, gint width);
-gboolean psppire_variable_set_alignment(struct PsppireVariable *pv, gint align);
-gboolean psppire_variable_set_measure(struct PsppireVariable *pv, gint measure);
-gboolean psppire_variable_set_value_labels(const struct PsppireVariable *pv,
-                                       const struct val_labs *vls);
-
-gboolean psppire_variable_set_missing(const struct PsppireVariable *pv,
-                                  const struct missing_values *miss);
-gboolean psppire_variable_set_print_spec(const struct PsppireVariable *pv, struct fmt_spec fmt);
-gboolean psppire_variable_set_write_spec(const struct PsppireVariable *pv, struct fmt_spec fmt);
-
-gboolean psppire_variable_set_type(struct PsppireVariable *pv, int type);
-
-
-
-const struct fmt_spec *psppire_variable_get_write_spec(const struct PsppireVariable *pv);
-const gchar * psppire_variable_get_name(const struct PsppireVariable *pv);
-
-gint psppire_variable_get_columns(const struct PsppireVariable *pv);
-
-const gchar * psppire_variable_get_label(const struct PsppireVariable *pv);
-
-
-const struct missing_values *psppire_variable_get_missing
-                                     (const struct PsppireVariable *pv);
-
-const struct val_labs * psppire_variable_get_value_labels
-                                     (const struct PsppireVariable *pv);
-
-gint psppire_variable_get_alignment(const struct PsppireVariable *pv);
-
-gint psppire_variable_get_measure(const struct PsppireVariable *pv);
-
-gint psppire_variable_get_fv(const struct PsppireVariable *pv);
-
-gint psppire_variable_get_type(const struct PsppireVariable *pv);
-
-gint psppire_variable_get_width(const struct PsppireVariable *pv);
-
-gint psppire_variable_get_index(const struct PsppireVariable *pv);
-
-
-#endif /* __PSPPIRE_VARIABLE_H__ */
index cdf30cad0de5db65e1988b07eeddf10cb7cfc726..40795a205112c57b60ca4e5b12ff380a3a67b164 100644 (file)
@@ -46,7 +46,6 @@
    8. The dialog box structure itself ought to be a GtkWindow and
       abstracted better.
 */
    8. The dialog box structure itself ought to be a GtkWindow and
       abstracted better.
 */
-   
 
 
 #include <config.h>
 
 
 #include <config.h>
@@ -54,7 +53,6 @@
 #include "sort-cases-dialog.h"
 #include "psppire-dict.h"
 #include <math/sort.h>
 #include "sort-cases-dialog.h"
 #include "psppire-dict.h"
 #include <math/sort.h>
-#include "psppire-variable.h"
 
 #include <gettext.h>
 #define _(msgid) gettext (msgid)
 
 #include <gettext.h>
 #define _(msgid) gettext (msgid)
@@ -155,7 +153,7 @@ select_criteria(GtkTreeModel *model, GtkTreePath *path,
   GtkTreeIter new_iter;
   gint index;
   gint dir;
   GtkTreeIter new_iter;
   gint index;
   gint dir;
-  struct PsppireVariable *variable;
+  struct variable *variable;
   struct sort_cases_dialog *dialog = (struct sort_cases_dialog*) data;
 
   /* Get the variable from the dictionary */
   struct sort_cases_dialog *dialog = (struct sort_cases_dialog*) data;
 
   /* Get the variable from the dictionary */
@@ -163,7 +161,7 @@ select_criteria(GtkTreeModel *model, GtkTreePath *path,
                      DICT_TVM_COL_VAR, &variable,
                      -1);
        
                      DICT_TVM_COL_VAR, &variable,
                      -1);
        
-  index = psppire_variable_get_index(variable);
+  index = var_get_dict_index (variable);
 
   dir = gtk_toggle_button_get_active (dialog->ascending_button) ? 
     SRT_ASCEND:SRT_DESCEND;
 
   dir = gtk_toggle_button_get_active (dialog->ascending_button) ? 
     SRT_ASCEND:SRT_DESCEND;
@@ -263,7 +261,7 @@ criteria_render_func(GtkTreeViewColumn *column, GtkCellRenderer *renderer,
                     gpointer data)
 {
   gint var_index;
                     gpointer data)
 {
   gint var_index;
-  struct PsppireVariable *variable ;
+  struct variable *variable ;
   gint direction;
   gchar *buf;
   gchar *varname;
   gint direction;
   gchar *buf;
   gchar *varname;
@@ -275,7 +273,7 @@ criteria_render_func(GtkTreeViewColumn *column, GtkCellRenderer *renderer,
 
   variable = psppire_dict_get_variable(dict, var_index);
 
 
   variable = psppire_dict_get_variable(dict, var_index);
 
-  varname = pspp_locale_to_utf8(psppire_variable_get_name(variable),
+  varname = pspp_locale_to_utf8 (var_get_name(variable),
                                -1, 0);
 
   if ( direction == SRT_ASCEND) 
                                -1, 0);
 
   if ( direction == SRT_ASCEND) 
@@ -464,7 +462,7 @@ convert_list_store_to_criteria(GtkListStore *list,
       valid;
       valid = gtk_tree_model_iter_next(model, &iter))
     {
       valid;
       valid = gtk_tree_model_iter_next(model, &iter))
     {
-      struct PsppireVariable *variable;
+      struct variable *variable;
       gint index;
       struct sort_criterion *scn = &criteria->crits[n];
       g_assert ( n < criteria->crit_cnt);
       gint index;
       struct sort_criterion *scn = &criteria->crits[n];
       g_assert ( n < criteria->crit_cnt);
@@ -477,8 +475,8 @@ convert_list_store_to_criteria(GtkListStore *list,
 
       variable = psppire_dict_get_variable(dict, index);
 
 
       variable = psppire_dict_get_variable(dict, index);
 
-      scn->fv    = psppire_variable_get_fv(variable);
-      scn->width = psppire_variable_get_width(variable);
+      scn->fv    = var_get_case_index (variable);
+      scn->width = var_get_width(variable);
     }
 }
 
     }
 }
 
index d24dd381d6eafafa9d2ddffa41cf46ff2e126429..c8440ccbd1959628be462f8036fb4e2ee6d025f1 100644 (file)
@@ -29,7 +29,6 @@
 #include "helper.h"
 #include "val-labs-dialog.h"
 #include <data/value-labels.h>
 #include "helper.h"
 #include "val-labs-dialog.h"
 #include <data/value-labels.h>
-#include "psppire-variable.h"
 
 /* This callback occurs when the text in the label entry box
    is changed */
 
 /* This callback occurs when the text in the label entry box
    is changed */
@@ -44,7 +43,7 @@ on_label_entry_change(GtkEntry *entry, gpointer data)
   text = gtk_entry_get_text(GTK_ENTRY(dialog->value_entry));
 
   text_to_value(text, &v,
   text = gtk_entry_get_text(GTK_ENTRY(dialog->value_entry));
 
   text_to_value(text, &v,
-               *psppire_variable_get_write_spec(dialog->pv));
+               *var_get_write_format (dialog->pv));
 
 
   if ( val_labs_find (dialog->labs, v) )
 
 
   if ( val_labs_find (dialog->labs, v) )
@@ -114,7 +113,7 @@ on_value_entry_change(GtkEntry *entry, gpointer data)
 
   union value v;
   text_to_value(text, &v,
 
   union value v;
   text_to_value(text, &v,
-               *psppire_variable_get_write_spec(dialog->pv));
+               *var_get_write_format (dialog->pv));
 
 
   g_signal_handler_block(GTK_ENTRY(dialog->label_entry),
 
 
   g_signal_handler_block(GTK_ENTRY(dialog->label_entry),
@@ -148,9 +147,10 @@ val_labs_ok(GtkWidget *w, gpointer data)
 {
   struct val_labs_dialog *dialog = data;
 
 {
   struct val_labs_dialog *dialog = data;
 
-  psppire_variable_set_value_labels(dialog->pv, dialog->labs);
+  var_set_value_labels (dialog->pv, dialog->labs);
 
   val_labs_destroy (dialog->labs);
 
   val_labs_destroy (dialog->labs);
+
   dialog->labs = 0;
 
   return FALSE;
   dialog->labs = 0;
 
   return FALSE;
@@ -210,12 +210,12 @@ on_change(GtkWidget *w, gpointer data)
   union value v;
 
   text_to_value(val_text, &v,
   union value v;
 
   text_to_value(val_text, &v,
-               *psppire_variable_get_write_spec(dialog->pv));
+               *var_get_write_format (dialog->pv));
 
   val_labs_replace (dialog->labs, v,
 
   val_labs_replace (dialog->labs, v,
-                   gtk_entry_get_text(GTK_ENTRY(dialog->label_entry)));
+                   gtk_entry_get_text (GTK_ENTRY(dialog->label_entry)));
 
 
-  gtk_widget_set_sensitive(dialog->change_button, FALSE);
+  gtk_widget_set_sensitive (dialog->change_button, FALSE);
 
   repopulate_dialog(dialog);
 
 
   repopulate_dialog(dialog);
 
@@ -233,14 +233,14 @@ on_add(GtkWidget *w, gpointer data)
   const gchar *text = gtk_entry_get_text(GTK_ENTRY(dialog->value_entry));
 
   text_to_value(text, &v,
   const gchar *text = gtk_entry_get_text(GTK_ENTRY(dialog->value_entry));
 
   text_to_value(text, &v,
-               *psppire_variable_get_write_spec(dialog->pv));
+               *var_get_write_format (dialog->pv));
 
 
   if ( ! val_labs_add (dialog->labs, v,
 
 
   if ( ! val_labs_add (dialog->labs, v,
-                      gtk_entry_get_text(GTK_ENTRY(dialog->label_entry)) ) )
+                      gtk_entry_get_text
+                      ( GTK_ENTRY (dialog->label_entry)) ) )
     return FALSE;
 
     return FALSE;
 
-
   gtk_widget_set_sensitive(dialog->add_button, FALSE);
 
   repopulate_dialog(dialog);
   gtk_widget_set_sensitive(dialog->add_button, FALSE);
 
   repopulate_dialog(dialog);
@@ -279,7 +279,7 @@ on_select_row                  (GtkTreeView *treeview,
   struct val_lab * vl  = get_selected_tuple(dialog);
 
   gchar *const text = value_to_text(vl->value,
   struct val_lab * vl  = get_selected_tuple(dialog);
 
   gchar *const text = value_to_text(vl->value,
-                                   *psppire_variable_get_write_spec(dialog->pv));
+                                   *var_get_write_format (dialog->pv));
 
   g_signal_handler_block(GTK_ENTRY(dialog->value_entry),
                         dialog->value_handler_id);
 
   g_signal_handler_block(GTK_ENTRY(dialog->value_entry),
                         dialog->value_handler_id);
@@ -420,7 +420,7 @@ repopulate_dialog(struct val_labs_dialog *dialog)
 
       gchar *const vstr  =
        value_to_text(vl->value,
 
       gchar *const vstr  =
        value_to_text(vl->value,
-                     *psppire_variable_get_write_spec(dialog->pv));
+                     *var_get_write_format (dialog->pv));
 
       gchar *labeltext =
        pspp_locale_to_utf8(vl->label, -1, 0);
 
       gchar *labeltext =
        pspp_locale_to_utf8(vl->label, -1, 0);
@@ -455,13 +455,13 @@ val_labs_dialog_show(struct val_labs_dialog *dialog)
 
   g_assert(!dialog->labs);
 
 
   g_assert(!dialog->labs);
 
-  value_labels = psppire_variable_get_value_labels (dialog->pv);
+  value_labels = var_get_value_labels (dialog->pv);
 
   if (value_labels)
     dialog->labs = val_labs_copy ( value_labels );
   else
 
   if (value_labels)
     dialog->labs = val_labs_copy ( value_labels );
   else
-    dialog->labs = val_labs_create ( psppire_variable_get_width (dialog->pv));
-
+    dialog->labs = val_labs_create ( var_get_width (dialog->pv));
+  
   gtk_widget_set_sensitive(dialog->remove_button, FALSE);
   gtk_widget_set_sensitive(dialog->change_button, FALSE);
   gtk_widget_set_sensitive(dialog->add_button, FALSE);
   gtk_widget_set_sensitive(dialog->remove_button, FALSE);
   gtk_widget_set_sensitive(dialog->change_button, FALSE);
   gtk_widget_set_sensitive(dialog->add_button, FALSE);
index 85f1a6d31717bf0f48c1fcef553d02b2bde3a904..fe2c3bacf43ead5833ed7e3510835393a590fb13 100644 (file)
@@ -40,7 +40,7 @@ struct val_labs_dialog
 
 
   /* The variable to be updated */
 
 
   /* The variable to be updated */
-  struct PsppireVariable *pv;
+  struct variable *pv;
 
   /* Local copy of labels */
   struct val_labs *labs;
 
   /* Local copy of labels */
   struct val_labs *labs;
index 2cf12f58703f96e1ac2cfa1b8ae8d9da891d744d..2c3137adb6d1212aa5667ce82ed25ed4dbfbb737 100644 (file)
@@ -46,7 +46,6 @@
 #include "helper.h"
 #include "menu-actions.h"
 #include "psppire-dict.h"
 #include "helper.h"
 #include "menu-actions.h"
 #include "psppire-dict.h"
-#include "psppire-variable.h"
 #include "var-type-dialog.h"
 #include "var-sheet.h"
 #include "customentry.h"
 #include "var-type-dialog.h"
 #include "var-sheet.h"
 #include "customentry.h"
@@ -141,28 +140,28 @@ static void
 change_alignment(GtkComboBox *cb,
     gpointer user_data)
 {
 change_alignment(GtkComboBox *cb,
     gpointer user_data)
 {
-  struct PsppireVariable *pv = user_data;
+  struct variable *pv = user_data;
   gint active_item = gtk_combo_box_get_active(cb);
 
   if ( active_item < 0 ) return ;
 
   gint active_item = gtk_combo_box_get_active(cb);
 
   if ( active_item < 0 ) return ;
 
-  psppire_variable_set_alignment(pv, active_item);
+  var_set_alignment (pv, active_item);
 }
 
 
 
 /* Callback for when the measure combo box 
    item is selected */
 }
 
 
 
 /* Callback for when the measure combo box 
    item is selected */
-static void        
+static void
 change_measure(GtkComboBox *cb,
     gpointer user_data)
 {
 change_measure(GtkComboBox *cb,
     gpointer user_data)
 {
-  struct PsppireVariable *pv = user_data;
+  struct variable *pv = user_data;
   gint active_item = gtk_combo_box_get_active(cb);
 
   if ( active_item < 0 ) return ;
 
   gint active_item = gtk_combo_box_get_active(cb);
 
   if ( active_item < 0 ) return ;
 
-  psppire_variable_set_measure(pv, active_item);
+  var_set_measure (pv, active_item + 1);
 }
 
 
 }
 
 
@@ -215,7 +214,7 @@ var_sheet_cell_change_entry (GtkSheet * sheet, gint row, gint column,
 {
   GtkSheetCellAttr attributes;
   PsppireVarStore *var_store ;
 {
   GtkSheetCellAttr attributes;
   PsppireVarStore *var_store ;
-  struct PsppireVariable *pv ;
+  struct variable *pv ;
 
   g_return_val_if_fail(sheet != NULL, FALSE);
 
 
   g_return_val_if_fail(sheet != NULL, FALSE);
 
@@ -233,7 +232,7 @@ var_sheet_cell_change_entry (GtkSheet * sheet, gint row, gint column,
 
   gtk_sheet_get_attributes(sheet, row, column, &attributes);
 
 
   gtk_sheet_get_attributes(sheet, row, column, &attributes);
 
-  pv = psppire_var_store_get_variable(var_store, row);
+  pv = psppire_var_store_get_var (var_store, row);
 
   switch (column)
     {
 
   switch (column)
     {
@@ -267,15 +266,15 @@ var_sheet_cell_change_entry (GtkSheet * sheet, gint row, gint column,
          GTK_COMBO_BOX_ENTRY(gtk_sheet_get_entry(sheet)->parent);
 
 
          GTK_COMBO_BOX_ENTRY(gtk_sheet_get_entry(sheet)->parent);
 
 
-       if ( ! list_store) list_store = create_label_list(measures);
+       if ( ! list_store) list_store = create_label_list (measures);
 
        gtk_combo_box_set_model(GTK_COMBO_BOX(cbe), 
                                GTK_TREE_MODEL(list_store));
 
        gtk_combo_box_entry_set_text_column (cbe, 0);
 
 
        gtk_combo_box_set_model(GTK_COMBO_BOX(cbe), 
                                GTK_TREE_MODEL(list_store));
 
        gtk_combo_box_entry_set_text_column (cbe, 0);
 
-       g_signal_connect(G_OBJECT(cbe),"changed", 
-                        G_CALLBACK(change_measure), pv);
+       g_signal_connect (G_OBJECT(cbe),"changed",
+                         G_CALLBACK (change_measure), pv);
       }
       break;
 
       }
       break;
 
@@ -315,7 +314,7 @@ var_sheet_cell_change_entry (GtkSheet * sheet, gint row, gint column,
        if (!missing_val_dialog ) 
            missing_val_dialog = missing_val_dialog_create(xml);
 
        if (!missing_val_dialog ) 
            missing_val_dialog = missing_val_dialog_create(xml);
 
-       missing_val_dialog->pv = psppire_var_store_get_variable(var_store, row);
+       missing_val_dialog->pv = psppire_var_store_get_var (var_store, row);
 
        g_signal_connect_swapped(GTK_OBJECT(customEntry),
                                 "clicked",
 
        g_signal_connect_swapped(GTK_OBJECT(customEntry),
                                 "clicked",
@@ -367,16 +366,16 @@ var_sheet_cell_change_entry (GtkSheet * sheet, gint row, gint column,
              const gint current_value  = atoi(s);
              GtkObject *adj ;
 
              const gint current_value  = atoi(s);
              GtkObject *adj ;
 
-             const struct fmt_spec *fmt = psppire_variable_get_write_spec(pv);
+             const struct fmt_spec *fmt = var_get_write_format (pv);
              switch (column) 
                {
                case COL_WIDTH:
              switch (column) 
                {
                case COL_WIDTH:
-                 r_min = fmt->d + 1;
-                 r_max = (psppire_variable_get_type(pv) == VAR_STRING) ? MAX_STRING : 40;
+                 r_min = MAX (fmt->d + 1, fmt_min_output_width (fmt->type));
+                 r_max = fmt_max_output_width (fmt->type);
                  break;
                case COL_DECIMALS:
                  r_min = 0 ; 
                  break;
                case COL_DECIMALS:
                  r_min = 0 ; 
-                 r_max = MIN(fmt->w - 1, 16);
+                 r_max = fmt_max_output_decimals (fmt->type, fmt->w);
                  break;
                case COL_COLUMNS:
                  r_min = 1;
                  break;
                case COL_COLUMNS:
                  r_min = 1;
index d4262872e044eb6b61f9c0e2e55a893a99ce10b9..0d58026df083b139b56dd4979d4a5b6588cdb9b3 100644 (file)
@@ -32,7 +32,6 @@
 
 #include "var-type-dialog.h"
 
 
 #include "var-type-dialog.h"
 
-#include "psppire-variable.h"
 #include "helper.h"
 
 #include <data/variable.h>
 #include "helper.h"
 
 #include <data/variable.h>
@@ -130,7 +129,7 @@ static void update_width_decimals(const struct var_type_dialog *dialog);
 static void
 set_local_width_decimals(struct var_type_dialog *dialog)
 {
 static void
 set_local_width_decimals(struct var_type_dialog *dialog)
 {
-  dialog->fmt_l = * psppire_variable_get_write_spec(dialog->pv);
+  dialog->fmt_l = * var_get_write_format (dialog->pv);
 
   switch (dialog->active_button) 
     {
 
   switch (dialog->active_button) 
     {
@@ -665,7 +664,7 @@ var_type_dialog_set_state(struct var_type_dialog *dialog)
   g_assert(dialog->pv);
 
   /* Populate width and decimals */
   g_assert(dialog->pv);
 
   /* Populate width and decimals */
-  write_spec = psppire_variable_get_write_spec(dialog->pv);
+  write_spec = var_get_write_format (dialog->pv);
 
   g_string_printf(str, "%d", write_spec->d);
 
 
   g_string_printf(str, "%d", write_spec->d);
 
@@ -820,12 +819,10 @@ on_var_type_ok_clicked(GtkWidget *w, gpointer data)
        break;
       }
 
        break;
       }
 
-    if ( result == true ) 
+    if ( result == true )
       {
       {
-       psppire_variable_set_type(dialog->pv, new_type);
-       psppire_variable_set_width(dialog->pv, new_width);
-       psppire_variable_set_write_spec(dialog->pv, spec);
-       psppire_variable_set_print_spec(dialog->pv, spec);
+       var_set_width (dialog->pv, new_width);
+       var_set_both_formats (dialog->pv, &spec);
       }
 
   }
       }
 
   }
index d259fa1a71617d56105f33b3b6b5fa4a43729217..2b2caee6f0abc707e7a3549e683260a9fc55f2dc 100644 (file)
@@ -50,13 +50,7 @@ struct var_type_dialog
   GtkWidget *window;
 
   /* Variable to be updated */
   GtkWidget *window;
 
   /* Variable to be updated */
-  struct PsppireVariable *pv;
-#if 0
-  struct variable *var;
-
-  /* Function to be run when the dialog changes a variable */
-  variable_changed_func var_change_func;
-#endif
+  struct variable *pv;
 
   /* Local copy of format specifier */
   struct fmt_spec fmt_l;
 
   /* Local copy of format specifier */
   struct fmt_spec fmt_l;
@@ -104,5 +98,4 @@ void var_type_dialog_set_variable(struct var_type_dialog *dialog,
 
 void var_type_dialog_show(struct var_type_dialog *dialog);
 
 
 void var_type_dialog_show(struct var_type_dialog *dialog);
 
-
 #endif
 #endif
index 0ece812b920b6c1b00e5dc9f5caacc094acbfe21..7e1f5c99f98fc80bf367c7c20b8f668aafbfb86c 100644 (file)
@@ -130,7 +130,7 @@ main (int argc, char **argv)
             check_msg_count (the_source_stream);
         }
     }
             check_msg_count (the_source_stream);
         }
     }
-  
+
   terminate (!any_errors ());
 }
 \f
   terminate (!any_errors ());
 }
 \f