Applied patch #5653, which adds callbacks to dataset whenever its dictionary or
authorJohn Darrington <john@darrington.wattle.id.au>
Mon, 1 Jan 2007 01:44:33 +0000 (01:44 +0000)
committerJohn Darrington <john@darrington.wattle.id.au>
Mon, 1 Jan 2007 01:44:33 +0000 (01:44 +0000)
data source is replaced.

17 files changed:
po/de.po
po/pspp.pot
src/data/ChangeLog
src/data/dictionary.c
src/data/dictionary.h
src/data/procedure.c
src/data/procedure.h
src/language/expressions/evaluate.c
src/ui/gui/ChangeLog
src/ui/gui/psppire-case-file.c
src/ui/gui/psppire-case-file.h
src/ui/gui/psppire-data-store.c
src/ui/gui/psppire-dict.c
src/ui/gui/psppire-dict.h
src/ui/gui/psppire.c
src/ui/gui/syntax-editor.c
src/ui/terminal/main.c

index 7d3480254278e7fef2cb3561688ac01757a8682b..63f204a9f5e1d6e753f9a73c4e64181e35e574fd 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-28 20:05+0900\n"
+"POT-Creation-Date: 2006-12-29 15:57+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"
@@ -176,13 +176,13 @@ msgstr ""
 msgid "Month number %f is not between 1 and 12."
 msgstr ""
 
 msgid "Month number %f is not between 1 and 12."
 msgstr ""
 
-#: src/data/dictionary.c:709
+#: src/data/dictionary.c:721
 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:1189
+#: src/data/dictionary.c:1201
 msgid "Variable suffix too large."
 msgstr ""
 
 msgid "Variable suffix too large."
 msgstr ""
 
@@ -309,13 +309,13 @@ msgid "%s variables are not compatible with %s format %s."
 msgstr ""
 
 #: src/data/format.c:310 src/data/por-file-reader.c:489
 msgstr ""
 
 #: src/data/format.c:310 src/data/por-file-reader.c:489
-#: src/data/sys-file-reader.c:602 src/ui/gui/data-editor.glade:1247
+#: src/data/sys-file-reader.c:602 src/ui/gui/data-editor.glade:1558
 #: src/ui/gui/psppire-var-store.c:482
 msgid "String"
 msgstr "Zeichenkette"
 
 #: src/data/format.c:310 src/data/por-file-reader.c:489
 #: src/ui/gui/psppire-var-store.c:482
 msgid "String"
 msgstr "Zeichenkette"
 
 #: src/data/format.c:310 src/data/por-file-reader.c:489
-#: src/data/sys-file-reader.c:602 src/ui/gui/data-editor.glade:1108
+#: src/data/sys-file-reader.c:602 src/ui/gui/data-editor.glade:1419
 #: src/ui/gui/psppire-var-store.c:475
 msgid "Numeric"
 msgstr "Nummer"
 #: src/ui/gui/psppire-var-store.c:475
 msgid "Numeric"
 msgstr "Nummer"
@@ -4098,28 +4098,28 @@ msgid ""
 "bad box: (%d+%d=%d,%d+%d=%d)-(%d+%d=%d,%d+%d=%d) in table size (%d,%d)\n"
 msgstr ""
 
 "bad box: (%d+%d=%d,%d+%d=%d)-(%d+%d=%d,%d+%d=%d) in table size (%d,%d)\n"
 msgstr ""
 
-#: src/ui/gui/customentry.c:337 src/ui/gui/psppire-status-bar.c:252
+#: src/ui/gui/customentry.c:337
 msgid "Style of bevel around the custom entry button"
 msgstr ""
 
 msgid "Style of bevel around the custom entry button"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:369 src/ui/gui/data-editor.glade:531
+#: src/ui/gui/data-editor.c:368 src/ui/gui/data-editor.glade:531
 msgid "Open"
 msgstr "Öffen"
 
 msgid "Open"
 msgstr "Öffen"
 
-#: src/ui/gui/data-editor.c:377
+#: src/ui/gui/data-editor.c:376
 msgid "System Files (*.sav)"
 msgstr "Systemedatein (*.sav)"
 
 msgid "System Files (*.sav)"
 msgstr "Systemedatein (*.sav)"
 
-#: src/ui/gui/data-editor.c:383
+#: src/ui/gui/data-editor.c:382
 msgid "Portable Files (*.por) "
 msgstr "Tragbardatein (*.por)"
 
 msgid "Portable Files (*.por) "
 msgstr "Tragbardatein (*.por)"
 
-#: src/ui/gui/data-editor.c:389 src/ui/gui/syntax-editor.c:140
-#: src/ui/gui/syntax-editor.c:541
+#: src/ui/gui/data-editor.c:388 src/ui/gui/syntax-editor.c:140
+#: src/ui/gui/syntax-editor.c:538
 msgid "All Files"
 msgstr "Alle Datei"
 
 msgid "All Files"
 msgstr "Alle Datei"
 
-#: src/ui/gui/data-editor.c:467
+#: src/ui/gui/data-editor.c:466
 msgid "Font Selection"
 msgstr "Schriftwahlung"
 
 msgid "Font Selection"
 msgstr "Schriftwahlung"
 
@@ -4178,7 +4178,7 @@ msgid "Grid Lines"
 msgstr "Glitten"
 
 #: src/ui/gui/data-editor.glade:278 src/ui/gui/data-editor.glade:831
 msgstr "Glitten"
 
 #: src/ui/gui/data-editor.glade:278 src/ui/gui/data-editor.glade:831
-#: src/ui/gui/data-editor.glade:1682 src/ui/gui/data-editor.glade:1959
+#: src/ui/gui/data-editor.glade:1993 src/ui/gui/data-editor.glade:2270
 msgid "Value Labels"
 msgstr "Werten"
 
 msgid "Value Labels"
 msgstr "Werten"
 
@@ -4201,11 +4201,11 @@ msgid "Insert Cases"
 msgstr "_Stecken"
 
 #: src/ui/gui/data-editor.glade:343 src/ui/gui/data-editor.glade:638
 msgstr "_Stecken"
 
 #: src/ui/gui/data-editor.glade:343 src/ui/gui/data-editor.glade:638
-#: src/ui/gui/data-editor.glade:2524
+#: src/ui/gui/data-editor.glade:2835
 msgid "Go To Case"
 msgstr ""
 
 msgid "Go To Case"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:372 src/ui/gui/data-editor.glade:2635
+#: src/ui/gui/data-editor.glade:372 src/ui/gui/data-editor.glade:2946
 msgid "Sort Cases"
 msgstr ""
 
 msgid "Sort Cases"
 msgstr ""
 
@@ -4297,107 +4297,136 @@ msgstr "Datenansicht"
 msgid "Variable View"
 msgstr "Variableansicht"
 
 msgid "Variable View"
 msgstr "Variableansicht"
 
-#: src/ui/gui/data-editor.glade:1075
+#: src/ui/gui/data-editor.glade:1079
+msgid "Information Area"
+msgstr ""
+
+#: src/ui/gui/data-editor.glade:1126
+msgid "Processor Area"
+msgstr ""
+
+#: src/ui/gui/data-editor.glade:1169
+msgid "OMS Area"
+msgstr ""
+
+#: src/ui/gui/data-editor.glade:1212
+msgid "Case Counter Area"
+msgstr ""
+
+#: src/ui/gui/data-editor.glade:1255
+msgid "Filter Use Status Area"
+msgstr ""
+
+#: src/ui/gui/data-editor.glade:1298
+msgid "Weight Status Area"
+msgstr ""
+
+#: src/ui/gui/data-editor.glade:1341
+#, fuzzy
+msgid "Split File Status Area"
+msgstr "Alle Datei"
+
+#: src/ui/gui/data-editor.glade:1386
 msgid "Variable Type"
 msgstr "Variableansicht"
 
 msgid "Variable Type"
 msgstr "Variableansicht"
 
-#: src/ui/gui/data-editor.glade:1127 src/ui/gui/psppire-var-store.c:476
+#: src/ui/gui/data-editor.glade:1438 src/ui/gui/psppire-var-store.c:476
 msgid "Comma"
 msgstr "Komma"
 
 msgid "Comma"
 msgstr "Komma"
 
-#: src/ui/gui/data-editor.glade:1147 src/ui/gui/psppire-var-store.c:477
+#: src/ui/gui/data-editor.glade:1458 src/ui/gui/psppire-var-store.c:477
 msgid "Dot"
 msgstr "Punkt"
 
 msgid "Dot"
 msgstr "Punkt"
 
-#: src/ui/gui/data-editor.glade:1167
+#: src/ui/gui/data-editor.glade:1478
 msgid "Scientific notation"
 msgstr "Wissenschaftlichnotation"
 
 msgid "Scientific notation"
 msgstr "Wissenschaftlichnotation"
 
-#: src/ui/gui/data-editor.glade:1187 src/ui/gui/psppire-var-store.c:479
+#: src/ui/gui/data-editor.glade:1498 src/ui/gui/psppire-var-store.c:479
 msgid "Date"
 msgstr "Datum"
 
 msgid "Date"
 msgstr "Datum"
 
-#: src/ui/gui/data-editor.glade:1207 src/ui/gui/psppire-var-store.c:480
+#: src/ui/gui/data-editor.glade:1518 src/ui/gui/psppire-var-store.c:480
 msgid "Dollar"
 msgstr "Euro"
 
 msgid "Dollar"
 msgstr "Euro"
 
-#: src/ui/gui/data-editor.glade:1227
+#: src/ui/gui/data-editor.glade:1538
 msgid "Custom currency"
 msgstr "Spezialwährung"
 
 msgid "Custom currency"
 msgstr "Spezialwährung"
 
-#: src/ui/gui/data-editor.glade:1372
+#: src/ui/gui/data-editor.glade:1683
 msgid "positive"
 msgstr "positiv"
 
 msgid "positive"
 msgstr "positiv"
 
-#: src/ui/gui/data-editor.glade:1397
+#: src/ui/gui/data-editor.glade:1708
 msgid "negative"
 msgstr "negativ"
 
 msgid "negative"
 msgstr "negativ"
 
-#: src/ui/gui/data-editor.glade:1426
+#: src/ui/gui/data-editor.glade:1737
 msgid "Sample"
 msgstr "Muster"
 
 msgid "Sample"
 msgstr "Muster"
 
-#: src/ui/gui/data-editor.glade:1504
+#: src/ui/gui/data-editor.glade:1815
 msgid "Decimal Places:"
 msgstr "Dezimalstellen:"
 
 msgid "Decimal Places:"
 msgstr "Dezimalstellen:"
 
-#: src/ui/gui/data-editor.glade:1581
+#: src/ui/gui/data-editor.glade:1892
 msgid "Width:"
 msgstr "Große:"
 
 msgid "Width:"
 msgstr "Große:"
 
-#: src/ui/gui/data-editor.glade:1800
+#: src/ui/gui/data-editor.glade:2111
 msgid "Value:"
 msgstr "Werte:"
 
 msgid "Value:"
 msgstr "Werte:"
 
-#: src/ui/gui/data-editor.glade:1828
+#: src/ui/gui/data-editor.glade:2139
 msgid "Value Label:"
 msgstr "Kennsatz:"
 
 msgid "Value Label:"
 msgstr "Kennsatz:"
 
-#: src/ui/gui/data-editor.glade:2044
+#: src/ui/gui/data-editor.glade:2355
 msgid "Missing Values"
 msgstr "Lösewerten"
 
 msgid "Missing Values"
 msgstr "Lösewerten"
 
-#: src/ui/gui/data-editor.glade:2130
+#: src/ui/gui/data-editor.glade:2441
 msgid "_No missing values"
 msgstr "_Kein Lösewerten"
 
 msgid "_No missing values"
 msgstr "_Kein Lösewerten"
 
-#: src/ui/gui/data-editor.glade:2155
+#: src/ui/gui/data-editor.glade:2466
 msgid "_Discrete missing values"
 msgstr "_Diskret Lösewerten"
 
 msgid "_Discrete missing values"
 msgstr "_Diskret Lösewerten"
 
-#: src/ui/gui/data-editor.glade:2284
+#: src/ui/gui/data-editor.glade:2595
 msgid "_Range plus one optional discrete missing value"
 msgstr "Wertebereich und ein optional Lösewert"
 
 msgid "_Range plus one optional discrete missing value"
 msgstr "Wertebereich und ein optional Lösewert"
 
-#: src/ui/gui/data-editor.glade:2321
+#: src/ui/gui/data-editor.glade:2632
 msgid "_Low:"
 msgstr "_Tief:"
 
 msgid "_Low:"
 msgstr "_Tief:"
 
-#: src/ui/gui/data-editor.glade:2380
+#: src/ui/gui/data-editor.glade:2691
 msgid "_High:"
 msgstr "_Hoch:"
 
 msgid "_High:"
 msgstr "_Hoch:"
 
-#: src/ui/gui/data-editor.glade:2454
+#: src/ui/gui/data-editor.glade:2765
 msgid "Di_screte value:"
 msgstr "Di_skretwerte"
 
 msgid "Di_screte value:"
 msgstr "Di_skretwerte"
 
-#: src/ui/gui/data-editor.glade:2580
+#: src/ui/gui/data-editor.glade:2891
 msgid "Case Number:"
 msgstr ""
 
 msgid "Case Number:"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:2752 src/ui/gui/sort-cases-dialog.c:279
+#: src/ui/gui/data-editor.glade:3063 src/ui/gui/sort-cases-dialog.c:279
 msgid "Ascending"
 msgstr ""
 
 msgid "Ascending"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:2771 src/ui/gui/sort-cases-dialog.c:281
+#: src/ui/gui/data-editor.glade:3082 src/ui/gui/sort-cases-dialog.c:281
 msgid "Descending"
 msgstr ""
 
 msgid "Descending"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:2792
+#: src/ui/gui/data-editor.glade:3103
 msgid "Sort Order"
 msgstr ""
 
 msgid "Sort Order"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:2829
+#: src/ui/gui/data-editor.glade:3140
 msgid "Sort by:"
 msgstr ""
 
 msgid "Sort by:"
 msgstr ""
 
@@ -4445,11 +4474,11 @@ msgstr "Unpassend Wert für Variable"
 msgid "Incorrect range specification"
 msgstr "Falshe Spannweitebeschreibung"
 
 msgid "Incorrect range specification"
 msgstr "Falshe Spannweitebeschreibung"
 
-#: src/ui/gui/psppire-data-store.c:745
+#: src/ui/gui/psppire-data-store.c:743
 msgid "var"
 msgstr ""
 
 msgid "var"
 msgstr ""
 
-#: src/ui/gui/psppire-data-store.c:826 src/ui/gui/psppire-var-store.c:552
+#: src/ui/gui/psppire-data-store.c:824 src/ui/gui/psppire-var-store.c:552
 #: src/ui/gui/psppire-var-store.c:562 src/ui/gui/psppire-var-store.c:572
 #: src/ui/gui/psppire-var-store.c:770
 #, c-format
 #: src/ui/gui/psppire-var-store.c:562 src/ui/gui/psppire-var-store.c:572
 #: src/ui/gui/psppire-var-store.c:770
 #, c-format
@@ -4508,12 +4537,12 @@ msgstr ""
 msgid "Save Syntax"
 msgstr "Speichern unter"
 
 msgid "Save Syntax"
 msgstr "Speichern unter"
 
-#: src/ui/gui/syntax-editor.c:134 src/ui/gui/syntax-editor.c:535
+#: src/ui/gui/syntax-editor.c:134 src/ui/gui/syntax-editor.c:532
 #, fuzzy
 msgid "Syntax Files (*.sps) "
 msgstr "Systemedatein (*.sav)"
 
 #, fuzzy
 msgid "Syntax Files (*.sps) "
 msgstr "Systemedatein (*.sav)"
 
-#: src/ui/gui/syntax-editor.c:527
+#: src/ui/gui/syntax-editor.c:524
 msgid "Open Syntax"
 msgstr ""
 
 msgid "Open Syntax"
 msgstr ""
 
index ccd22e48ec7ee35f357dc6d9a1385623c409a354..b3ef4a6d48fe0a8d7335db97ab4239d169e1cb83 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: pspp-dev@gnu.org\n"
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: pspp-dev@gnu.org\n"
-"POT-Creation-Date: 2006-12-28 20:05+0900\n"
+"POT-Creation-Date: 2006-12-29 15:57+0900\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -175,13 +175,13 @@ msgstr ""
 msgid "Month number %f is not between 1 and 12."
 msgstr ""
 
 msgid "Month number %f is not between 1 and 12."
 msgstr ""
 
-#: src/data/dictionary.c:709
+#: src/data/dictionary.c:721
 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:1189
+#: src/data/dictionary.c:1201
 msgid "Variable suffix too large."
 msgstr ""
 
 msgid "Variable suffix too large."
 msgstr ""
 
@@ -308,13 +308,13 @@ msgid "%s variables are not compatible with %s format %s."
 msgstr ""
 
 #: src/data/format.c:310 src/data/por-file-reader.c:489
 msgstr ""
 
 #: src/data/format.c:310 src/data/por-file-reader.c:489
-#: src/data/sys-file-reader.c:602 src/ui/gui/data-editor.glade:1247
+#: src/data/sys-file-reader.c:602 src/ui/gui/data-editor.glade:1558
 #: src/ui/gui/psppire-var-store.c:482
 msgid "String"
 msgstr ""
 
 #: src/data/format.c:310 src/data/por-file-reader.c:489
 #: src/ui/gui/psppire-var-store.c:482
 msgid "String"
 msgstr ""
 
 #: src/data/format.c:310 src/data/por-file-reader.c:489
-#: src/data/sys-file-reader.c:602 src/ui/gui/data-editor.glade:1108
+#: src/data/sys-file-reader.c:602 src/ui/gui/data-editor.glade:1419
 #: src/ui/gui/psppire-var-store.c:475
 msgid "Numeric"
 msgstr ""
 #: src/ui/gui/psppire-var-store.c:475
 msgid "Numeric"
 msgstr ""
@@ -4093,28 +4093,28 @@ msgid ""
 "bad box: (%d+%d=%d,%d+%d=%d)-(%d+%d=%d,%d+%d=%d) in table size (%d,%d)\n"
 msgstr ""
 
 "bad box: (%d+%d=%d,%d+%d=%d)-(%d+%d=%d,%d+%d=%d) in table size (%d,%d)\n"
 msgstr ""
 
-#: src/ui/gui/customentry.c:337 src/ui/gui/psppire-status-bar.c:252
+#: src/ui/gui/customentry.c:337
 msgid "Style of bevel around the custom entry button"
 msgstr ""
 
 msgid "Style of bevel around the custom entry button"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:369 src/ui/gui/data-editor.glade:531
+#: src/ui/gui/data-editor.c:368 src/ui/gui/data-editor.glade:531
 msgid "Open"
 msgstr ""
 
 msgid "Open"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:377
+#: src/ui/gui/data-editor.c:376
 msgid "System Files (*.sav)"
 msgstr ""
 
 msgid "System Files (*.sav)"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:383
+#: src/ui/gui/data-editor.c:382
 msgid "Portable Files (*.por) "
 msgstr ""
 
 msgid "Portable Files (*.por) "
 msgstr ""
 
-#: src/ui/gui/data-editor.c:389 src/ui/gui/syntax-editor.c:140
-#: src/ui/gui/syntax-editor.c:541
+#: src/ui/gui/data-editor.c:388 src/ui/gui/syntax-editor.c:140
+#: src/ui/gui/syntax-editor.c:538
 msgid "All Files"
 msgstr ""
 
 msgid "All Files"
 msgstr ""
 
-#: src/ui/gui/data-editor.c:467
+#: src/ui/gui/data-editor.c:466
 msgid "Font Selection"
 msgstr ""
 
 msgid "Font Selection"
 msgstr ""
 
@@ -4170,7 +4170,7 @@ msgid "Grid Lines"
 msgstr ""
 
 #: src/ui/gui/data-editor.glade:278 src/ui/gui/data-editor.glade:831
 msgstr ""
 
 #: src/ui/gui/data-editor.glade:278 src/ui/gui/data-editor.glade:831
-#: src/ui/gui/data-editor.glade:1682 src/ui/gui/data-editor.glade:1959
+#: src/ui/gui/data-editor.glade:1993 src/ui/gui/data-editor.glade:2270
 msgid "Value Labels"
 msgstr ""
 
 msgid "Value Labels"
 msgstr ""
 
@@ -4191,11 +4191,11 @@ msgid "Insert Cases"
 msgstr ""
 
 #: src/ui/gui/data-editor.glade:343 src/ui/gui/data-editor.glade:638
 msgstr ""
 
 #: src/ui/gui/data-editor.glade:343 src/ui/gui/data-editor.glade:638
-#: src/ui/gui/data-editor.glade:2524
+#: src/ui/gui/data-editor.glade:2835
 msgid "Go To Case"
 msgstr ""
 
 msgid "Go To Case"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:372 src/ui/gui/data-editor.glade:2635
+#: src/ui/gui/data-editor.glade:372 src/ui/gui/data-editor.glade:2946
 msgid "Sort Cases"
 msgstr ""
 
 msgid "Sort Cases"
 msgstr ""
 
@@ -4283,107 +4283,135 @@ msgstr ""
 msgid "Variable View"
 msgstr ""
 
 msgid "Variable View"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1075
+#: src/ui/gui/data-editor.glade:1079
+msgid "Information Area"
+msgstr ""
+
+#: src/ui/gui/data-editor.glade:1126
+msgid "Processor Area"
+msgstr ""
+
+#: src/ui/gui/data-editor.glade:1169
+msgid "OMS Area"
+msgstr ""
+
+#: src/ui/gui/data-editor.glade:1212
+msgid "Case Counter Area"
+msgstr ""
+
+#: src/ui/gui/data-editor.glade:1255
+msgid "Filter Use Status Area"
+msgstr ""
+
+#: src/ui/gui/data-editor.glade:1298
+msgid "Weight Status Area"
+msgstr ""
+
+#: src/ui/gui/data-editor.glade:1341
+msgid "Split File Status Area"
+msgstr ""
+
+#: src/ui/gui/data-editor.glade:1386
 msgid "Variable Type"
 msgstr ""
 
 msgid "Variable Type"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1127 src/ui/gui/psppire-var-store.c:476
+#: src/ui/gui/data-editor.glade:1438 src/ui/gui/psppire-var-store.c:476
 msgid "Comma"
 msgstr ""
 
 msgid "Comma"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1147 src/ui/gui/psppire-var-store.c:477
+#: src/ui/gui/data-editor.glade:1458 src/ui/gui/psppire-var-store.c:477
 msgid "Dot"
 msgstr ""
 
 msgid "Dot"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1167
+#: src/ui/gui/data-editor.glade:1478
 msgid "Scientific notation"
 msgstr ""
 
 msgid "Scientific notation"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1187 src/ui/gui/psppire-var-store.c:479
+#: src/ui/gui/data-editor.glade:1498 src/ui/gui/psppire-var-store.c:479
 msgid "Date"
 msgstr ""
 
 msgid "Date"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1207 src/ui/gui/psppire-var-store.c:480
+#: src/ui/gui/data-editor.glade:1518 src/ui/gui/psppire-var-store.c:480
 msgid "Dollar"
 msgstr ""
 
 msgid "Dollar"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1227
+#: src/ui/gui/data-editor.glade:1538
 msgid "Custom currency"
 msgstr ""
 
 msgid "Custom currency"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1372
+#: src/ui/gui/data-editor.glade:1683
 msgid "positive"
 msgstr ""
 
 msgid "positive"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1397
+#: src/ui/gui/data-editor.glade:1708
 msgid "negative"
 msgstr ""
 
 msgid "negative"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1426
+#: src/ui/gui/data-editor.glade:1737
 msgid "Sample"
 msgstr ""
 
 msgid "Sample"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1504
+#: src/ui/gui/data-editor.glade:1815
 msgid "Decimal Places:"
 msgstr ""
 
 msgid "Decimal Places:"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1581
+#: src/ui/gui/data-editor.glade:1892
 msgid "Width:"
 msgstr ""
 
 msgid "Width:"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1800
+#: src/ui/gui/data-editor.glade:2111
 msgid "Value:"
 msgstr ""
 
 msgid "Value:"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:1828
+#: src/ui/gui/data-editor.glade:2139
 msgid "Value Label:"
 msgstr ""
 
 msgid "Value Label:"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:2044
+#: src/ui/gui/data-editor.glade:2355
 msgid "Missing Values"
 msgstr ""
 
 msgid "Missing Values"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:2130
+#: src/ui/gui/data-editor.glade:2441
 msgid "_No missing values"
 msgstr ""
 
 msgid "_No missing values"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:2155
+#: src/ui/gui/data-editor.glade:2466
 msgid "_Discrete missing values"
 msgstr ""
 
 msgid "_Discrete missing values"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:2284
+#: src/ui/gui/data-editor.glade:2595
 msgid "_Range plus one optional discrete missing value"
 msgstr ""
 
 msgid "_Range plus one optional discrete missing value"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:2321
+#: src/ui/gui/data-editor.glade:2632
 msgid "_Low:"
 msgstr ""
 
 msgid "_Low:"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:2380
+#: src/ui/gui/data-editor.glade:2691
 msgid "_High:"
 msgstr ""
 
 msgid "_High:"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:2454
+#: src/ui/gui/data-editor.glade:2765
 msgid "Di_screte value:"
 msgstr ""
 
 msgid "Di_screte value:"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:2580
+#: src/ui/gui/data-editor.glade:2891
 msgid "Case Number:"
 msgstr ""
 
 msgid "Case Number:"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:2752 src/ui/gui/sort-cases-dialog.c:279
+#: src/ui/gui/data-editor.glade:3063 src/ui/gui/sort-cases-dialog.c:279
 msgid "Ascending"
 msgstr ""
 
 msgid "Ascending"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:2771 src/ui/gui/sort-cases-dialog.c:281
+#: src/ui/gui/data-editor.glade:3082 src/ui/gui/sort-cases-dialog.c:281
 msgid "Descending"
 msgstr ""
 
 msgid "Descending"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:2792
+#: src/ui/gui/data-editor.glade:3103
 msgid "Sort Order"
 msgstr ""
 
 msgid "Sort Order"
 msgstr ""
 
-#: src/ui/gui/data-editor.glade:2829
+#: src/ui/gui/data-editor.glade:3140
 msgid "Sort by:"
 msgstr ""
 
 msgid "Sort by:"
 msgstr ""
 
@@ -4431,11 +4459,11 @@ msgstr ""
 msgid "Incorrect range specification"
 msgstr ""
 
 msgid "Incorrect range specification"
 msgstr ""
 
-#: src/ui/gui/psppire-data-store.c:745
+#: src/ui/gui/psppire-data-store.c:743
 msgid "var"
 msgstr ""
 
 msgid "var"
 msgstr ""
 
-#: src/ui/gui/psppire-data-store.c:826 src/ui/gui/psppire-var-store.c:552
+#: src/ui/gui/psppire-data-store.c:824 src/ui/gui/psppire-var-store.c:552
 #: src/ui/gui/psppire-var-store.c:562 src/ui/gui/psppire-var-store.c:572
 #: src/ui/gui/psppire-var-store.c:770
 #, c-format
 #: src/ui/gui/psppire-var-store.c:562 src/ui/gui/psppire-var-store.c:572
 #: src/ui/gui/psppire-var-store.c:770
 #, c-format
@@ -4493,11 +4521,11 @@ msgstr ""
 msgid "Save Syntax"
 msgstr ""
 
 msgid "Save Syntax"
 msgstr ""
 
-#: src/ui/gui/syntax-editor.c:134 src/ui/gui/syntax-editor.c:535
+#: src/ui/gui/syntax-editor.c:134 src/ui/gui/syntax-editor.c:532
 msgid "Syntax Files (*.sps) "
 msgstr ""
 
 msgid "Syntax Files (*.sps) "
 msgstr ""
 
-#: src/ui/gui/syntax-editor.c:527
+#: src/ui/gui/syntax-editor.c:524
 msgid "Open Syntax"
 msgstr ""
 
 msgid "Open Syntax"
 msgstr ""
 
index a30f8927cb13c80c4daea604d7371eab05410477..7c254f1496b18467fc210236d85ed8e2aa66c846 100644 (file)
@@ -1,3 +1,8 @@
+Mon Jan  1 10:36:26 WST 2007 John Darrington <john@darrington.wattle.id.au>
+
+       * dictionary.c dictionary.h : Added replace_source and replace_dict
+       callbacks, and functions to deal with them.
+
 Fri Dec 22 13:56:08 2006  Ben Pfaff  <blp@gnu.org>
 
        Simplify missing value handling.
 Fri Dec 22 13:56:08 2006  Ben Pfaff  <blp@gnu.org>
 
        Simplify missing value handling.
index a7478596c0b0be2c9ef9d752aee9a70a979f7567..d29939aca55a8043cec67cf12d3bf676c91f4b02 100644 (file)
@@ -82,6 +82,15 @@ dict_set_callbacks (struct dictionary *dict,
 }
 
 
 }
 
 
+/* Shallow copy the callbacks from SRC to DEST */
+void
+dict_copy_callbacks (struct dictionary *dest,
+                    const struct dictionary *src)
+{
+  dest->callbacks = src->callbacks;
+  dest->cb_data = src->cb_data;
+}
+
 /* Creates and returns a new dictionary. */
 struct dictionary *
 dict_create (void)
 /* Creates and returns a new dictionary. */
 struct dictionary *
 dict_create (void)
@@ -166,6 +175,9 @@ dict_clear (struct dictionary *d)
 
   for (i = 0; i < d->var_cnt; i++)
     {
 
   for (i = 0; i < d->var_cnt; i++)
     {
+      if (d->callbacks && d->callbacks->var_deleted )
+       d->callbacks->var_deleted (d, i, d->cb_data);
+
       var_clear_vardict (d->var[i]);
       var_destroy (d->var[i]);
     }
       var_clear_vardict (d->var[i]);
       var_destroy (d->var[i]);
     }
index 7a40e0dc5f820f6348aa9976bea6e85754e5aed9..a1b17bb70c4724cf8043984e480462bca6b83d08 100644 (file)
@@ -39,6 +39,8 @@ struct dictionary *dict_create (void);
 struct dictionary *dict_clone (const struct dictionary *);
 void dict_set_callbacks (struct dictionary *, const struct dict_callbacks *,
                         void *);
 struct dictionary *dict_clone (const struct dictionary *);
 void dict_set_callbacks (struct dictionary *, const struct dict_callbacks *,
                         void *);
+void dict_copy_callbacks (struct dictionary *, const struct dictionary *);
+
 
 void dict_clear (struct dictionary *);
 void dict_clear_aux (struct dictionary *);
 
 void dict_clear (struct dictionary *);
 void dict_clear_aux (struct dictionary *);
index 29dffbcaf8303dd9daf607d19eec7cfd76a1590a..2154f689c8f50d7a3370d8d99a935f2056590897 100644 (file)
@@ -43,6 +43,13 @@ struct dataset {
   /* An abstract factory which creates casefiles */
   struct casefile_factory *cf_factory;
 
   /* An abstract factory which creates casefiles */
   struct casefile_factory *cf_factory;
 
+  /* Callback which occurs when a procedure provides a new source for
+     the dataset */
+  replace_source_callback *replace_source ;
+
+  /* Callback which occurs whenever the DICT is replaced by a new one */
+  replace_dictionary_callback *replace_dict;
+
   /* Cases are read from proc_source,
      pass through permanent_trns_chain (which transforms them into
      the format described by permanent_dict),
   /* Cases are read from proc_source,
      pass through permanent_trns_chain (which transforms them into
      the format described by permanent_dict),
@@ -120,10 +127,10 @@ time_of_last_procedure (struct dataset *ds)
       start the next case from step 1.
 
    2. Write case to replacement active file.
       start the next case from step 1.
 
    2. Write case to replacement active file.
-   
+  
    3. Execute temporary transformations.  If these drop the case,
       start the next case from step 1.
    3. Execute temporary transformations.  If these drop the case,
       start the next case from step 1.
-      
+     
    4. Pass case to PROC_FUNC, passing AUX as auxiliary data.
 
    Returns true if successful, false if an I/O error occurred. */
    4. Pass case to PROC_FUNC, passing AUX as auxiliary data.
 
    Returns true if successful, false if an I/O error occurred. */
@@ -152,17 +159,17 @@ procedure (struct dataset *ds, case_func *cf, void *aux)
 \f
 /* Multipass procedure. */
 
 \f
 /* Multipass procedure. */
 
-struct multipass_aux_data 
+struct multipass_aux_data
   {
     struct casefile *casefile;
   {
     struct casefile *casefile;
-    
+   
     bool (*proc_func) (const struct casefile *, void *aux);
     void *aux;
   };
 
 /* Case processing function for multipass_procedure(). */
 static bool
     bool (*proc_func) (const struct casefile *, void *aux);
     void *aux;
   };
 
 /* Case processing function for multipass_procedure(). */
 static bool
-multipass_case_func (const struct ccase *c, void *aux_data_, const struct dataset *ds UNUSED) 
+multipass_case_func (const struct ccase *c, void *aux_data_, const struct dataset *ds UNUSED)
 {
   struct multipass_aux_data *aux_data = aux_data_;
   return casefile_append (aux_data->casefile, c);
 {
   struct multipass_aux_data *aux_data = aux_data_;
   return casefile_append (aux_data->casefile, c);
@@ -170,7 +177,7 @@ multipass_case_func (const struct ccase *c, void *aux_data_, const struct datase
 
 /* End-of-file function for multipass_procedure(). */
 static bool
 
 /* End-of-file function for multipass_procedure(). */
 static bool
-multipass_end_func (void *aux_data_, const struct dataset *ds UNUSED) 
+multipass_end_func (void *aux_data_, const struct dataset *ds UNUSED)
 {
   struct multipass_aux_data *aux_data = aux_data_;
   return (aux_data->proc_func == NULL
 {
   struct multipass_aux_data *aux_data = aux_data_;
   return (aux_data->proc_func == NULL
@@ -181,7 +188,7 @@ multipass_end_func (void *aux_data_, const struct dataset *ds UNUSED)
    The entire active file is passed to PROC_FUNC, with the given
    AUX as auxiliary data, as a unit. */
 bool
    The entire active file is passed to PROC_FUNC, with the given
    AUX as auxiliary data, as a unit. */
 bool
-multipass_procedure (struct dataset *ds, casefile_func *proc_func,  void *aux) 
+multipass_procedure (struct dataset *ds, casefile_func *proc_func,  void *aux)
 {
   struct multipass_aux_data aux_data;
   bool ok;
 {
   struct multipass_aux_data aux_data;
   bool ok;
@@ -201,6 +208,7 @@ multipass_procedure (struct dataset *ds, casefile_func *proc_func,  void *aux)
   return ok;
 }
 \f
   return ok;
 }
 \f
+
 /* Procedure implementation. */
 
 /* Executes a procedure.
 /* Procedure implementation. */
 
 /* Executes a procedure.
@@ -211,18 +219,27 @@ multipass_procedure (struct dataset *ds, casefile_func *proc_func,  void *aux)
 static bool
 internal_procedure (struct dataset *ds, case_func *proc,
                    end_func *end,
 static bool
 internal_procedure (struct dataset *ds, case_func *proc,
                    end_func *end,
-                    void *aux) 
+                    void *aux)
 {
   struct ccase *c;
   bool ok = true;
 {
   struct ccase *c;
   bool ok = true;
-  
+
   proc_open (ds);
   while (ok && proc_read (ds, &c))
     if (proc != NULL)
       ok = proc (c, aux, ds) && ok;
   if (end != NULL)
     ok = end (aux, ds) && ok;
   proc_open (ds);
   while (ok && proc_read (ds, &c))
     if (proc != NULL)
       ok = proc (c, aux, ds) && ok;
   if (end != NULL)
     ok = end (aux, ds) && ok;
-  return proc_close (ds) && ok;
+
+  if ( proc_close (ds) && ok )
+    {
+      if ( ds->replace_source )
+       ds->replace_source (ds->proc_source);
+
+      return true;
+    }
+
+  return false;
 }
 
 /* Opens dataset DS for reading cases with proc_read.
 }
 
 /* Opens dataset DS for reading cases with proc_read.
@@ -251,13 +268,13 @@ proc_open (struct dataset *ds)
    Return false at end of file or if a read error occurs.  In
    this case a null pointer is stored in *C. */
 bool
    Return false at end of file or if a read error occurs.  In
    this case a null pointer is stored in *C. */
 bool
-proc_read (struct dataset *ds, struct ccase **c) 
+proc_read (struct dataset *ds, struct ccase **c)
 {
   enum trns_result retval = TRNS_DROP_CASE;
 
   assert (ds->is_open);
   *c = NULL;
 {
   enum trns_result retval = TRNS_DROP_CASE;
 
   assert (ds->is_open);
   *c = NULL;
-  for (;;) 
+  for (;;)
     {
       size_t case_nr;
 
     {
       size_t case_nr;
 
@@ -278,16 +295,16 @@ proc_read (struct dataset *ds, struct ccase **c)
                                    &ds->trns_case, &case_nr);
       if (retval != TRNS_CONTINUE)
         continue;
                                    &ds->trns_case, &case_nr);
       if (retval != TRNS_CONTINUE)
         continue;
-  
       /* Write case to LAG queue. */
       if (ds->n_lag)
         lag_case (ds, &ds->trns_case);
 
       /* Write case to replacement active file. */
       ds->cases_written++;
       /* Write case to LAG queue. */
       if (ds->n_lag)
         lag_case (ds, &ds->trns_case);
 
       /* Write case to replacement active file. */
       ds->cases_written++;
-      if (ds->proc_sink->class->write != NULL) 
+      if (ds->proc_sink->class->write != NULL)
         {
         {
-          if (ds->compactor != NULL) 
+          if (ds->compactor != NULL)
             {
               dict_compactor_compact (ds->compactor, &ds->sink_case,
                                       &ds->trns_case);
             {
               dict_compactor_compact (ds->compactor, &ds->sink_case,
                                       &ds->trns_case);
@@ -296,9 +313,9 @@ proc_read (struct dataset *ds, struct ccase **c)
           else
             ds->proc_sink->class->write (ds->proc_sink, &ds->trns_case);
         }
           else
             ds->proc_sink->class->write (ds->proc_sink, &ds->trns_case);
         }
-  
       /* Execute temporary transformations. */
       /* Execute temporary transformations. */
-      if (ds->temporary_trns_chain != NULL) 
+      if (ds->temporary_trns_chain != NULL)
         {
           retval = trns_chain_execute (ds->temporary_trns_chain, TRNS_CONTINUE,
                                        &ds->trns_case, &ds->cases_written);
         {
           retval = trns_chain_execute (ds->temporary_trns_chain, TRNS_CONTINUE,
                                        &ds->trns_case, &ds->cases_written);
@@ -307,7 +324,7 @@ proc_read (struct dataset *ds, struct ccase **c)
         }
 
       *c = &ds->trns_case;
         }
 
       *c = &ds->trns_case;
-      return true; 
+      return true;
     }
 }
 
     }
 }
 
@@ -317,17 +334,17 @@ proc_read (struct dataset *ds, struct ccase **c)
    If DS has not been opened, returns true without doing
    anything else. */
 bool
    If DS has not been opened, returns true without doing
    anything else. */
 bool
-proc_close (struct dataset *ds) 
+proc_close (struct dataset *ds)
 {
   if (!ds->is_open)
     return true;
 
   /* Drain any remaining cases. */
 {
   if (!ds->is_open)
     return true;
 
   /* Drain any remaining cases. */
-  while (ds->ok) 
+  while (ds->ok)
     {
       struct ccase *c;
       if (!proc_read (ds, &c))
     {
       struct ccase *c;
       if (!proc_read (ds, &c))
-        break; 
+        break;
     }
   ds->ok = free_case_source (ds->proc_source) && ds->ok;
   ds->proc_source = NULL;
     }
   ds->ok = free_case_source (ds->proc_source) && ds->ok;
   ds->proc_source = NULL;
@@ -343,7 +360,7 @@ proc_close (struct dataset *ds)
 
 /* Updates last_proc_invocation. */
 static void
 
 /* Updates last_proc_invocation. */
 static void
-update_last_proc_invocation (struct dataset *ds) 
+update_last_proc_invocation (struct dataset *ds)
 {
   ds->last_proc_invocation = time (NULL);
 }
 {
   ds->last_proc_invocation = time (NULL);
 }
@@ -358,7 +375,7 @@ create_trns_case (struct ccase *trns_case, struct dictionary *dict)
   size_t i;
 
   case_create (trns_case, dict_get_next_value_idx (dict));
   size_t i;
 
   case_create (trns_case, dict_get_next_value_idx (dict));
-  for (i = 0; i < var_cnt; i++) 
+  for (i = 0; i < var_cnt; i++)
     {
       struct variable *v = dict_get_var (dict, i);
       union value *value = case_data_rw (trns_case, v);
     {
       struct variable *v = dict_get_var (dict, i);
       union value *value = case_data_rw (trns_case, v);
@@ -387,7 +404,7 @@ open_active_file (struct dataset *ds)
     ds->permanent_dict = ds->dict;
 
   /* Figure out whether to compact. */
     ds->permanent_dict = ds->dict;
 
   /* Figure out whether to compact. */
-  ds->compactor = 
+  ds->compactor =
     (dict_compacting_would_shrink (ds->permanent_dict)
      ? dict_make_compactor (ds->permanent_dict)
      : NULL);
     (dict_compacting_would_shrink (ds->permanent_dict)
      ? dict_make_compactor (ds->permanent_dict)
      : NULL);
@@ -405,7 +422,7 @@ open_active_file (struct dataset *ds)
   if (ds->n_lag > 0)
     {
       int i;
   if (ds->n_lag > 0)
     {
       int i;
-  
       ds->lag_count = 0;
       ds->lag_head = 0;
       ds->lag_queue = xnmalloc (ds->n_lag, sizeof *ds->lag_queue);
       ds->lag_count = 0;
       ds->lag_head = 0;
       ds->lag_queue = xnmalloc (ds->n_lag, sizeof *ds->lag_queue);
@@ -433,17 +450,17 @@ clear_case (const struct dataset *ds, struct ccase *c)
 {
   size_t var_cnt = dict_get_var_cnt (ds->dict);
   size_t i;
 {
   size_t var_cnt = dict_get_var_cnt (ds->dict);
   size_t i;
-  
-  for (i = 0; i < var_cnt; i++) 
+  for (i = 0; i < var_cnt; i++)
     {
       struct variable *v = dict_get_var (ds->dict, i);
     {
       struct variable *v = dict_get_var (ds->dict, i);
-      if (!var_get_leave (v)) 
+      if (!var_get_leave (v))
         {
           if (var_is_numeric (v))
         {
           if (var_is_numeric (v))
-            case_data_rw (c, v)->f = SYSMIS; 
+            case_data_rw (c, v)->f = SYSMIS;
           else
             memset (case_data_rw (c, v)->s, ' ', var_get_width (v));
           else
             memset (case_data_rw (c, v)->s, ' ', var_get_width (v));
-        } 
+        }
     }
 }
 
     }
 }
 
@@ -455,24 +472,24 @@ close_active_file (struct dataset *ds)
   if (ds->n_lag > 0)
     {
       int i;
   if (ds->n_lag > 0)
     {
       int i;
-      
+     
       for (i = 0; i < ds->n_lag; i++)
        case_destroy (&ds->lag_queue[i]);
       free (ds->lag_queue);
       ds->n_lag = 0;
     }
       for (i = 0; i < ds->n_lag; i++)
        case_destroy (&ds->lag_queue[i]);
       free (ds->lag_queue);
       ds->n_lag = 0;
     }
-  
   /* Dictionary from before TEMPORARY becomes permanent. */
   proc_cancel_temporary_transformations (ds);
 
   /* Finish compacting. */
   /* Dictionary from before TEMPORARY becomes permanent. */
   proc_cancel_temporary_transformations (ds);
 
   /* Finish compacting. */
-  if (ds->compactor != NULL) 
+  if (ds->compactor != NULL)
     {
       dict_compactor_destroy (ds->compactor);
       dict_compact_values (ds->dict);
       ds->compactor = NULL;
     }
     {
       dict_compactor_destroy (ds->compactor);
       dict_compact_values (ds->dict);
       ds->compactor = NULL;
     }
-    
+   
   /* Old data sink becomes new data source. */
   if (ds->proc_sink->class->make_source != NULL)
     ds->proc_source = ds->proc_sink->class->make_source (ds->proc_sink);
   /* Old data sink becomes new data source. */
   if (ds->proc_sink->class->make_source != NULL)
     ds->proc_source = ds->proc_sink->class->make_source (ds->proc_sink);
@@ -506,13 +523,13 @@ lagged_case (const struct dataset *ds, int n_before)
 /* Procedure that separates the data into SPLIT FILE groups. */
 
 /* Represents auxiliary data for handling SPLIT FILE. */
 /* Procedure that separates the data into SPLIT FILE groups. */
 
 /* Represents auxiliary data for handling SPLIT FILE. */
-struct split_aux_data 
+struct split_aux_data
   {
     struct dataset *dataset;    /* The dataset */
     struct ccase prev_case;     /* Data in previous case. */
 
     /* Callback functions. */
   {
     struct dataset *dataset;    /* The dataset */
     struct ccase prev_case;     /* Data in previous case. */
 
     /* Callback functions. */
-    begin_func *begin; 
+    begin_func *begin;
     case_func *proc;
     end_func *end;
     void *func_aux;
     case_func *proc;
     end_func *end;
     void *func_aux;
@@ -532,19 +549,19 @@ static bool split_procedure_end_func (void *, const struct dataset *);
    passed to each of the functions as auxiliary data.
 
    If the active file is empty, none of BEGIN_FUNC, PROC_FUNC,
    passed to each of the functions as auxiliary data.
 
    If the active file is empty, none of BEGIN_FUNC, PROC_FUNC,
-   and END_FUNC will be called at all. 
+   and END_FUNC will be called at all.
 
    If SPLIT FILE is not in effect, then there is one break group
    (if the active file is nonempty), and BEGIN_FUNC and END_FUNC
    will be called once.
 
    If SPLIT FILE is not in effect, then there is one break group
    (if the active file is nonempty), and BEGIN_FUNC and END_FUNC
    will be called once.
-   
+  
    Returns true if successful, false if an I/O error occurred. */
 bool
 procedure_with_splits (struct dataset *ds,
    Returns true if successful, false if an I/O error occurred. */
 bool
 procedure_with_splits (struct dataset *ds,
-                      begin_func begin, 
+                      begin_func begin,
                       case_func *proc,
                        end_func *end,
                       case_func *proc,
                        end_func *end,
-                       void *func_aux) 
+                       void *func_aux)
 {
   struct split_aux_data split_aux;
   bool ok;
 {
   struct split_aux_data split_aux;
   bool ok;
@@ -566,7 +583,7 @@ procedure_with_splits (struct dataset *ds,
 
 /* Case callback used by procedure_with_splits(). */
 static bool
 
 /* Case callback used by procedure_with_splits(). */
 static bool
-split_procedure_case_func (const struct ccase *c, void *split_aux_, const struct dataset *ds) 
+split_procedure_case_func (const struct ccase *c, void *split_aux_, const struct dataset *ds)
 {
   struct split_aux_data *split_aux = split_aux_;
 
 {
   struct split_aux_data *split_aux = split_aux_;
 
@@ -590,7 +607,7 @@ split_procedure_case_func (const struct ccase *c, void *split_aux_, const struct
 
 /* End-of-file callback used by procedure_with_splits(). */
 static bool
 
 /* End-of-file callback used by procedure_with_splits(). */
 static bool
-split_procedure_end_func (void *split_aux_, const struct dataset *ds) 
+split_procedure_end_func (void *split_aux_, const struct dataset *ds)
 {
   struct split_aux_data *split_aux = split_aux_;
 
 {
   struct split_aux_data *split_aux = split_aux_;
 
@@ -602,8 +619,8 @@ split_procedure_end_func (void *split_aux_, const struct dataset *ds)
 /* Compares the SPLIT FILE variables in cases A and B and returns
    nonzero only if they differ. */
 static int
 /* Compares the SPLIT FILE variables in cases A and B and returns
    nonzero only if they differ. */
 static int
-equal_splits (const struct ccase *a, const struct ccase *b, 
-             const struct dataset *ds) 
+equal_splits (const struct ccase *a, const struct ccase *b,
+             const struct dataset *ds)
 {
   return case_compare (a, b,
                        dict_get_split_vars (ds->dict),
 {
   return case_compare (a, b,
                        dict_get_split_vars (ds->dict),
@@ -615,14 +632,14 @@ equal_splits (const struct ccase *a, const struct ccase *b,
 
 /* Represents auxiliary data for handling SPLIT FILE in a
    multipass procedure. */
 
 /* Represents auxiliary data for handling SPLIT FILE in a
    multipass procedure. */
-struct multipass_split_aux_data 
+struct multipass_split_aux_data
   {
     struct dataset *dataset;    /* The dataset of the split */
     struct ccase prev_case;     /* Data in previous case. */
     struct casefile *casefile;  /* Accumulates data for a split. */
   {
     struct dataset *dataset;    /* The dataset of the split */
     struct ccase prev_case;     /* Data in previous case. */
     struct casefile *casefile;  /* Accumulates data for a split. */
-    split_func *split;          /* Function to call with the accumulated 
+    split_func *split;          /* Function to call with the accumulated
                                   data. */
                                   data. */
-    void *func_aux;             /* Auxiliary data. */ 
+    void *func_aux;             /* Auxiliary data. */
   };
 
 static bool multipass_split_case_func (const struct ccase *c, void *aux_, const struct dataset *);
   };
 
 static bool multipass_split_case_func (const struct ccase *c, void *aux_, const struct dataset *);
@@ -631,7 +648,7 @@ static bool multipass_split_output (struct multipass_split_aux_data *, const str
 
 /* Returns true if successful, false if an I/O error occurred. */
 bool
 
 /* Returns true if successful, false if an I/O error occurred. */
 bool
-multipass_procedure_with_splits (struct dataset *ds, 
+multipass_procedure_with_splits (struct dataset *ds,
                                 split_func  *split,
                                  void *func_aux)
 {
                                 split_func  *split,
                                  void *func_aux)
 {
@@ -670,7 +687,7 @@ multipass_split_case_func (const struct ccase *c, void *aux_, const struct datas
         ok = multipass_split_output (aux, ds);
 
       /* Start a new casefile. */
         ok = multipass_split_output (aux, ds);
 
       /* Start a new casefile. */
-      aux->casefile = 
+      aux->casefile =
        ds->cf_factory->create_casefile (ds->cf_factory,
                                         dict_get_next_value_idx (ds->dict));
     }
        ds->cf_factory->create_casefile (ds->cf_factory,
                                         dict_get_next_value_idx (ds->dict));
     }
@@ -690,7 +707,7 @@ static bool
 multipass_split_output (struct multipass_split_aux_data *aux, const struct dataset *ds)
 {
   bool ok;
 multipass_split_output (struct multipass_split_aux_data *aux, const struct dataset *ds)
 {
   bool ok;
-  
   assert (aux->casefile != NULL);
   ok = aux->split (&aux->prev_case, aux->casefile, aux->func_aux, ds);
   casefile_destroy (aux->casefile);
   assert (aux->casefile != NULL);
   ok = aux->split (&aux->prev_case, aux->casefile, aux->func_aux, ds);
   casefile_destroy (aux->casefile);
@@ -708,9 +725,12 @@ discard_variables (struct dataset *ds)
   fh_set_default_handle (NULL);
 
   ds->n_lag = 0;
   fh_set_default_handle (NULL);
 
   ds->n_lag = 0;
-  
   free_case_source (ds->proc_source);
   ds->proc_source = NULL;
   free_case_source (ds->proc_source);
   ds->proc_source = NULL;
+  if ( ds->replace_source )
+    ds->replace_source (ds->proc_source);
+
 
   proc_cancel_all_transformations (ds);
 }
 
   proc_cancel_all_transformations (ds);
 }
@@ -719,10 +739,10 @@ discard_variables (struct dataset *ds)
    and clears the permanent transformations.
    For use by INPUT PROGRAM. */
 struct trns_chain *
    and clears the permanent transformations.
    For use by INPUT PROGRAM. */
 struct trns_chain *
-proc_capture_transformations (struct dataset *ds) 
+proc_capture_transformations (struct dataset *ds)
 {
   struct trns_chain *chain;
 {
   struct trns_chain *chain;
-  
   assert (ds->temporary_trns_chain == NULL);
   chain = ds->permanent_trns_chain;
   ds->cur_trns_chain = ds->permanent_trns_chain = trns_chain_create ();
   assert (ds->temporary_trns_chain == NULL);
   chain = ds->permanent_trns_chain;
   ds->cur_trns_chain = ds->permanent_trns_chain = trns_chain_create ();
@@ -744,7 +764,7 @@ add_transformation (struct dataset *ds, trns_proc_func *proc, trns_free_func *fr
    FINALIZE will be called.
    The functions are passed AUX as auxiliary data. */
 void
    FINALIZE will be called.
    The functions are passed AUX as auxiliary data. */
 void
-add_transformation_with_finalizer (struct dataset *ds, 
+add_transformation_with_finalizer (struct dataset *ds,
                                   trns_finalize_func *finalize,
                                    trns_proc_func *proc,
                                    trns_free_func *free, void *aux)
                                   trns_finalize_func *finalize,
                                    trns_proc_func *proc,
                                    trns_free_func *free, void *aux)
@@ -756,7 +776,7 @@ add_transformation_with_finalizer (struct dataset *ds,
    This value can be returned by a transformation procedure
    function to indicate a "jump" to that transformation. */
 size_t
    This value can be returned by a transformation procedure
    function to indicate a "jump" to that transformation. */
 size_t
-next_transformation (const struct dataset *ds) 
+next_transformation (const struct dataset *ds)
 {
   return trns_chain_next (ds->cur_trns_chain);
 }
 {
   return trns_chain_next (ds->cur_trns_chain);
 }
@@ -765,7 +785,7 @@ next_transformation (const struct dataset *ds)
    a temporary transformation, false if it will add a permanent
    transformation. */
 bool
    a temporary transformation, false if it will add a permanent
    transformation. */
 bool
-proc_in_temporary_transformations (const struct dataset *ds) 
+proc_in_temporary_transformations (const struct dataset *ds)
 {
   return ds->temporary_trns_chain != NULL;
 }
 {
   return ds->temporary_trns_chain != NULL;
 }
@@ -774,7 +794,7 @@ proc_in_temporary_transformations (const struct dataset *ds)
    Further calls to add_transformation() will add temporary
    transformations. */
 void
    Further calls to add_transformation() will add temporary
    transformations. */
 void
-proc_start_temporary_transformations (struct dataset *ds) 
+proc_start_temporary_transformations (struct dataset *ds)
 {
   if (!proc_in_temporary_transformations (ds))
     {
 {
   if (!proc_in_temporary_transformations (ds))
     {
@@ -791,9 +811,9 @@ proc_start_temporary_transformations (struct dataset *ds)
    permanent.
    Returns true if anything changed, false otherwise. */
 bool
    permanent.
    Returns true if anything changed, false otherwise. */
 bool
-proc_make_temporary_transformations_permanent (struct dataset *ds) 
+proc_make_temporary_transformations_permanent (struct dataset *ds)
 {
 {
-  if (proc_in_temporary_transformations (ds)) 
+  if (proc_in_temporary_transformations (ds))
     {
       trns_chain_finalize (ds->temporary_trns_chain);
       trns_chain_splice (ds->permanent_trns_chain, ds->temporary_trns_chain);
     {
       trns_chain_finalize (ds->temporary_trns_chain);
       trns_chain_splice (ds->permanent_trns_chain, ds->temporary_trns_chain);
@@ -812,9 +832,9 @@ proc_make_temporary_transformations_permanent (struct dataset *ds)
    transformations will be permanent.
    Returns true if anything changed, false otherwise. */
 bool
    transformations will be permanent.
    Returns true if anything changed, false otherwise. */
 bool
-proc_cancel_temporary_transformations (struct dataset *ds) 
+proc_cancel_temporary_transformations (struct dataset *ds)
 {
 {
-  if (proc_in_temporary_transformations (ds)) 
+  if (proc_in_temporary_transformations (ds))
     {
       dict_destroy (ds->dict);
       ds->dict = ds->permanent_dict;
     {
       dict_destroy (ds->dict);
       ds->dict = ds->permanent_dict;
@@ -844,11 +864,16 @@ proc_cancel_all_transformations (struct dataset *ds)
 \f
 /* Initializes procedure handling. */
 struct dataset *
 \f
 /* Initializes procedure handling. */
 struct dataset *
-create_dataset (struct casefile_factory *fact)
+create_dataset (struct casefile_factory *fact,
+               replace_source_callback *rps,
+               replace_dictionary_callback *rds
+               )
 {
   struct dataset *ds = xzalloc (sizeof(*ds));
   ds->dict = dict_create ();
   ds->cf_factory = fact;
 {
   struct dataset *ds = xzalloc (sizeof(*ds));
   ds->dict = dict_create ();
   ds->cf_factory = fact;
+  ds->replace_source = rps;
+  ds->replace_dict = rds;
   proc_cancel_all_transformations (ds);
   return ds;
 }
   proc_cancel_all_transformations (ds);
   return ds;
 }
@@ -866,7 +891,7 @@ destroy_dataset (struct dataset *ds)
 /* Sets SINK as the destination for procedure output from the
    next procedure. */
 void
 /* Sets SINK as the destination for procedure output from the
    next procedure. */
 void
-proc_set_sink (struct dataset *ds, struct case_sink *sink) 
+proc_set_sink (struct dataset *ds, struct case_sink *sink)
 {
   assert (ds->proc_sink == NULL);
   ds->proc_sink = sink;
 {
   assert (ds->proc_sink == NULL);
   ds->proc_sink = sink;
@@ -875,7 +900,7 @@ proc_set_sink (struct dataset *ds, struct case_sink *sink)
 /* Sets SOURCE as the source for procedure input for the next
    procedure. */
 void
 /* Sets SOURCE as the source for procedure input for the next
    procedure. */
 void
-proc_set_source (struct dataset *ds, struct case_source *source) 
+proc_set_source (struct dataset *ds, struct case_source *source)
 {
   assert (ds->proc_source == NULL);
   ds->proc_source = source;
 {
   assert (ds->proc_source == NULL);
   ds->proc_source = source;
@@ -884,7 +909,7 @@ proc_set_source (struct dataset *ds, struct case_source *source)
 /* Returns true if a source for the next procedure has been
    configured, false otherwise. */
 bool
 /* Returns true if a source for the next procedure has been
    configured, false otherwise. */
 bool
-proc_has_source (const struct dataset *ds) 
+proc_has_source (const struct dataset *ds)
 {
   return ds->proc_source != NULL;
 }
 {
   return ds->proc_source != NULL;
 }
@@ -894,7 +919,7 @@ proc_has_source (const struct dataset *ds)
    The returned casefile is owned by the caller; it will not be
    automatically used for the next procedure's input. */
 struct casefile *
    The returned casefile is owned by the caller; it will not be
    automatically used for the next procedure's input. */
 struct casefile *
-proc_capture_output (struct dataset *ds) 
+proc_capture_output (struct dataset *ds)
 {
   struct casefile *casefile;
 
 {
   struct casefile *casefile;
 
@@ -917,7 +942,7 @@ static trns_free_func case_limit_trns_free;
 /* Adds a transformation that limits the number of cases that may
    pass through, if DS->DICT has a case limit. */
 static void
 /* Adds a transformation that limits the number of cases that may
    pass through, if DS->DICT has a case limit. */
 static void
-add_case_limit_trns (struct dataset *ds) 
+add_case_limit_trns (struct dataset *ds)
 {
   size_t case_limit = dict_get_case_limit (ds->dict);
   if (case_limit != 0)
 {
   size_t case_limit = dict_get_case_limit (ds->dict);
   if (case_limit != 0)
@@ -934,10 +959,10 @@ add_case_limit_trns (struct dataset *ds)
    *CASES_REMAINING. */
 static int
 case_limit_trns_proc (void *cases_remaining_,
    *CASES_REMAINING. */
 static int
 case_limit_trns_proc (void *cases_remaining_,
-                      struct ccase *c UNUSED, casenumber case_nr UNUSED) 
+                      struct ccase *c UNUSED, casenumber case_nr UNUSED)
 {
   size_t *cases_remaining = cases_remaining_;
 {
   size_t *cases_remaining = cases_remaining_;
-  if (*cases_remaining > 0) 
+  if (*cases_remaining > 0)
     {
       (*cases_remaining)--;
       return TRNS_CONTINUE;
     {
       (*cases_remaining)--;
       return TRNS_CONTINUE;
@@ -948,7 +973,7 @@ case_limit_trns_proc (void *cases_remaining_,
 
 /* Frees the data associated with a case limit transformation. */
 static bool
 
 /* Frees the data associated with a case limit transformation. */
 static bool
-case_limit_trns_free (void *cases_remaining_) 
+case_limit_trns_free (void *cases_remaining_)
 {
   size_t *cases_remaining = cases_remaining_;
   free (cases_remaining);
 {
   size_t *cases_remaining = cases_remaining_;
   free (cases_remaining);
@@ -960,10 +985,10 @@ static trns_proc_func filter_trns_proc;
 /* Adds a temporary transformation to filter data according to
    the variable specified on FILTER, if any. */
 static void
 /* Adds a temporary transformation to filter data according to
    the variable specified on FILTER, if any. */
 static void
-add_filter_trns (struct dataset *ds) 
+add_filter_trns (struct dataset *ds)
 {
   struct variable *filter_var = dict_get_filter (ds->dict);
 {
   struct variable *filter_var = dict_get_filter (ds->dict);
-  if (filter_var != NULL) 
+  if (filter_var != NULL)
     {
       proc_start_temporary_transformations (ds);
       add_transformation (ds, filter_trns_proc, NULL, filter_var);
     {
       proc_start_temporary_transformations (ds);
       add_transformation (ds, filter_trns_proc, NULL, filter_var);
@@ -973,8 +998,8 @@ add_filter_trns (struct dataset *ds)
 /* FILTER transformation. */
 static int
 filter_trns_proc (void *filter_var_,
 /* FILTER transformation. */
 static int
 filter_trns_proc (void *filter_var_,
-                  struct ccase *c UNUSED, casenumber case_nr UNUSED) 
-  
+                  struct ccase *c UNUSED, casenumber case_nr UNUSED)
+
 {
   struct variable *filter_var = filter_var_;
   double f = case_num (c, filter_var);
 {
   struct variable *filter_var = filter_var_;
   double f = case_num (c, filter_var);
@@ -990,19 +1015,23 @@ dataset_dict (const struct dataset *ds)
 }
 
 
 }
 
 
-void 
+void
 dataset_set_dict (struct dataset *ds, struct dictionary *dict)
 {
 dataset_set_dict (struct dataset *ds, struct dictionary *dict)
 {
+  dict_copy_callbacks (dict, ds->dict);
   ds->dict = dict;
   ds->dict = dict;
+
+  if ( ds->replace_dict )
+    ds->replace_dict (dict);
 }
 
 }
 
-int 
+int
 dataset_n_lag (const struct dataset *ds)
 {
   return ds->n_lag;
 }
 
 dataset_n_lag (const struct dataset *ds)
 {
   return ds->n_lag;
 }
 
-void 
+void
 dataset_set_n_lag (struct dataset *ds, int n_lag)
 {
   ds->n_lag = n_lag;
 dataset_set_n_lag (struct dataset *ds, int n_lag)
 {
   ds->n_lag = n_lag;
index 4e8fa91024ff3c0c57686dbf07a99ffd0336e765..f4d473b9aeaa6ee3ac321deea1f19766f0ac5618 100644 (file)
@@ -58,7 +58,16 @@ bool proc_cancel_temporary_transformations (struct dataset *ds);
 \f
 /* Procedures. */
 
 \f
 /* Procedures. */
 
-struct dataset * create_dataset (struct casefile_factory *);
+struct dictionary ;
+typedef void  replace_source_callback (struct case_source *);
+typedef void  replace_dictionary_callback (struct dictionary *);
+
+
+struct dataset * create_dataset (struct casefile_factory *fact,
+                                replace_source_callback *,
+                                replace_dictionary_callback *
+                                );
+
 void destroy_dataset (struct dataset *);
 
 struct casefile_factory *dataset_get_casefile_factory (const struct dataset *);
 void destroy_dataset (struct dataset *);
 
 struct casefile_factory *dataset_get_casefile_factory (const struct dataset *);
index 32f966109d2a2ea27c80554d86d6b4a7c15fbcbd..2498b0945528c26bff216e5b2a6c50c91981e715 100644 (file)
@@ -158,7 +158,7 @@ cmd_debug_evaluate (struct lexer *lexer, struct dataset *dsother UNUSED)
 
          if  ( ds == NULL )
            {
 
          if  ( ds == NULL )
            {
-             ds = create_dataset (NULL);
+             ds = create_dataset (NULL, NULL, NULL);
              d = dataset_dict (ds);
            }
 
              d = dataset_dict (ds);
            }
 
index a27cd0660b55f065fea74868d9d43e4248d42495..470573bbe6c636238ce19a85b31193b29469bb89 100644 (file)
@@ -1,3 +1,19 @@
+Mon Jan  1 10:37:07 WST 2007 John Darrington <john@darrington.wattle.id.au>
+
+       * psppire-case-file.c psppire-case-file.h: Changed the backend 
+       semantics. An object is now created without any backend.  A new function        ( psppire_case_file_replace_flexifile ) sets the backend to use.
+
+       * psppire-data-store.c : Updated callers accordingly.
+
+       * psppire-dict.c psppire-dict.h : New function 
+       (psppire_dict_replace_dictionary) .
+
+       * psppire.c : Updated to use new dataset replace_{source, dictionary} 
+       callbacks.
+
+       * syntax-editor.c : parses in state CMD_STATE_DATA unless there are 
+       no variables in the dictionary.
+
 Mon Dec 25 12:38:24 WST 2006 John Darrington <john@darrington.wattle.id.au>
 
        * data-editor.c data-editor.glade: Enabled deleting of variables from
 Mon Dec 25 12:38:24 WST 2006 John Darrington <john@darrington.wattle.id.au>
 
        * data-editor.c data-editor.glade: Enabled deleting of variables from
index 6e0766b95249f0f24a7937899cef6906cf0ac16c..ef1edfc28823480abb552ba482c28ea3900e5672 100644 (file)
@@ -153,33 +153,22 @@ psppire_case_file_init (PsppireCaseFile *cf)
  * Creates a new #PsppireCaseFile.
  */
 PsppireCaseFile*
  * Creates a new #PsppireCaseFile.
  */
 PsppireCaseFile*
-psppire_case_file_new (gint val_cnt)
+psppire_case_file_new (void)
 {
   PsppireCaseFile *cf = g_object_new (G_TYPE_PSPPIRE_CASE_FILE, NULL);
 
 {
   PsppireCaseFile *cf = g_object_new (G_TYPE_PSPPIRE_CASE_FILE, NULL);
 
-  cf->flexifile = flexifile_create (val_cnt);
-
   return cf;
 }
 
 
   return cf;
 }
 
 
-/**
- * psppire_case_file_new_from_flexifile:
- * @returns: a new #PsppireCaseFile object
- *
- * Creates a new #PsppireCaseFile from an existing flexifile
- */
-PsppireCaseFile*
-psppire_case_file_new_from_flexifile (struct flexifile *ff)
+void
+psppire_case_file_replace_flexifile (PsppireCaseFile *cf, struct flexifile *ff)
 {
 {
-  PsppireCaseFile *cf = g_object_new (G_TYPE_PSPPIRE_CASE_FILE, NULL);
-
   cf->flexifile = (struct casefile *) ff;
   cf->flexifile = (struct casefile *) ff;
-
-  return cf;
 }
 
 
 }
 
 
+
 gboolean
 psppire_case_file_delete_cases (PsppireCaseFile *cf, gint n_cases, gint first)
 {
 gboolean
 psppire_case_file_delete_cases (PsppireCaseFile *cf, gint n_cases, gint first)
 {
index 478f935afbcbd251ac3c8cee4802f1c5319b86a2..fd8af07916c006714336c901910d077cae2d272e 100644 (file)
@@ -68,9 +68,7 @@ struct _PsppireCaseFileClass
 /* -- PsppireCaseFile --- */
 GType          psppire_case_file_get_type (void);
 
 /* -- PsppireCaseFile --- */
 GType          psppire_case_file_get_type (void);
 
-PsppireCaseFile *psppire_case_file_new (gint var_cnt);
-PsppireCaseFile* psppire_case_file_new_from_flexifile (struct flexifile *ff);
-
+PsppireCaseFile *psppire_case_file_new (void);
 
 gboolean psppire_case_file_insert_case (PsppireCaseFile *cf, struct ccase *c, gint row);
 
 
 gboolean psppire_case_file_insert_case (PsppireCaseFile *cf, struct ccase *c, gint row);
 
@@ -103,6 +101,10 @@ void psppire_case_file_sort (PsppireCaseFile *cf, const struct sort_criteria *);
 gboolean psppire_case_file_get_case (const PsppireCaseFile *cf, gint casenum,
                                    struct ccase *c);
 
 gboolean psppire_case_file_get_case (const PsppireCaseFile *cf, gint casenum,
                                    struct ccase *c);
 
+void psppire_case_file_replace_flexifile (PsppireCaseFile *,
+                                         struct flexifile *);
+
+
 
 G_END_DECLS
 
 
 G_END_DECLS
 
index 531b5b92214eb6d64c9d5dbb75d5be9e1632ad65..9ed530344cf9f8c4d45652e3b535b7996510c6ec 100644 (file)
@@ -384,8 +384,6 @@ psppire_data_store_new (PsppireDict *dict)
 void
 psppire_data_store_set_dictionary (PsppireDataStore *data_store, PsppireDict *dict)
 {
 void
 psppire_data_store_set_dictionary (PsppireDataStore *data_store, PsppireDict *dict)
 {
-  gint var_cnt = psppire_dict_get_next_value_idx (dict);
-
   data_store->dict = dict;
 
   if ( data_store->case_file)
   data_store->dict = dict;
 
   if ( data_store->case_file)
@@ -394,7 +392,7 @@ psppire_data_store_set_dictionary (PsppireDataStore *data_store, PsppireDict *di
       data_store->case_file = 0;
     }
 
       data_store->case_file = 0;
     }
 
-  data_store->case_file = psppire_case_file_new (var_cnt);
+  data_store->case_file = psppire_case_file_new ();
 
   g_signal_connect (data_store->case_file, "cases-deleted",
                   G_CALLBACK (delete_cases_callback),
 
   g_signal_connect (data_store->case_file, "cases-deleted",
                   G_CALLBACK (delete_cases_callback),
@@ -845,3 +843,4 @@ psppire_data_store_sheet_row_init (GSheetRowIface *iface)
 
   iface->get_button_label = geometry_get_row_button_label;
 }
 
   iface->get_button_label = geometry_get_row_button_label;
 }
+
index 9637e3cf9cb2b420fca9de381556b62f3849fe9e..bba515019b4a5b8b97dd7874f24b6bbcca1413cd 100644 (file)
@@ -221,6 +221,13 @@ psppire_dict_new_from_dict (struct dictionary *d)
 }
 
 
 }
 
 
+void
+psppire_dict_replace_dictionary (PsppireDict *dict, struct dictionary *d)
+{
+  dict->dict = 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 *
@@ -339,7 +346,6 @@ psppire_dict_lookup_var (const PsppireDict *d, const gchar *name)
   return dict_lookup_var (d->dict, name);
 }
 
   return dict_lookup_var (d->dict, name);
 }
 
-
 /* Clears the contents of D */
 void
 psppire_dict_clear (PsppireDict *d)
 /* Clears the contents of D */
 void
 psppire_dict_clear (PsppireDict *d)
@@ -348,14 +354,11 @@ psppire_dict_clear (PsppireDict *d)
   g_return_if_fail (d->dict);
 
   {
   g_return_if_fail (d->dict);
 
   {
-    const gint n_vars = dict_get_var_cnt (d->dict);
-
     dict_clear (d->dict);
   }
 }
 
 
     dict_clear (d->dict);
   }
 }
 
 
-
 /* 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
 /* 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
index 044cbd25ac53bc4a7ab0002eedca007e1fe19091..b6b1bc88283303979f76e198e295d5e8374ebe46 100644 (file)
@@ -102,6 +102,8 @@ gint psppire_dict_get_next_value_idx (const PsppireDict *dict);
 void psppire_dict_rename_var (PsppireDict *dict, struct variable *v,
                              const gchar *text);
 
 void psppire_dict_rename_var (PsppireDict *dict, struct variable *v,
                              const gchar *text);
 
+void psppire_dict_replace_dictionary (PsppireDict *, struct dictionary *);
+
 
 G_END_DECLS
 
 
 G_END_DECLS
 
index b0de6cfa1bdfddc5a5cfc6b7d0fb4d995f5fb80c..6655a6ad5f40c68708dd17eddb8f610e89e220f6 100644 (file)
 #include <libpspp/copyleft.h>
 #include <data/file-handle-def.h>
 #include <data/format.h>
 #include <libpspp/copyleft.h>
 #include <data/file-handle-def.h>
 #include <data/format.h>
+#include <data/storage-stream.h>
 #include <data/settings.h>
 #include <data/file-name.h>
 #include <data/procedure.h>
 #include <libpspp/getl.h>
 #include <language/lexer/lexer.h>
 #include <data/settings.h>
 #include <data/file-name.h>
 #include <data/procedure.h>
 #include <libpspp/getl.h>
 #include <language/lexer/lexer.h>
+#include <ui/flexifile.h>
 
 #include <getopt.h>
 #include <gtk/gtk.h>
 
 #include <getopt.h>
 #include <gtk/gtk.h>
@@ -61,6 +63,26 @@ void create_icon_factory (void);
 struct source_stream *the_source_stream ;
 struct dataset * the_dataset = NULL;
 
 struct source_stream *the_source_stream ;
 struct dataset * the_dataset = NULL;
 
+static void
+replace_dictionary (struct dictionary *d)
+{
+  psppire_dict_replace_dictionary (the_data_store->dict,
+                                  d);
+}
+
+
+static void
+replace_flexifile (struct case_source *s)
+{
+  if ( NULL == s )
+    psppire_case_file_replace_flexifile (the_data_store->case_file,
+                                        (struct flexifile *) flexifile_create (0));
+  else
+    psppire_case_file_replace_flexifile (the_data_store->case_file,
+                                        (struct flexifile *)
+                                        storage_source_get_casefile (s));
+}
+
 
 int
 main (int argc, char *argv[])
 
 int
 main (int argc, char *argv[])
@@ -106,14 +128,15 @@ main (int argc, char *argv[])
                          fn_getenv_default ("STAT_INCLUDE_PATH", include_path)
                          );
 
                          fn_getenv_default ("STAT_INCLUDE_PATH", include_path)
                          );
 
-  the_dataset = create_dataset (factory);
+  the_dataset = create_dataset (factory,
+                               replace_flexifile,
+                               replace_dictionary);
 
   message_dialog_init (the_source_stream);
 
 
   message_dialog_init (the_source_stream);
 
-  dictionary =
-    psppire_dict_new_from_dict (
-                               dataset_dict (the_dataset)
-                               );
+  dictionary = psppire_dict_new_from_dict (
+                                          dataset_dict (the_dataset)
+                                          );
 
   bind_textdomain_codeset (PACKAGE, "UTF-8");
 
 
   bind_textdomain_codeset (PACKAGE, "UTF-8");
 
@@ -123,6 +146,10 @@ main (int argc, char *argv[])
 
   the_data_store = psppire_data_store_new (dictionary);
 
 
   the_data_store = psppire_data_store_new (dictionary);
 
+  proc_set_source (the_dataset,
+                  storage_source_create (the_data_store->case_file->flexifile)
+                  );
+
   create_icon_factory ();
 
   new_data_window (NULL, NULL);
   create_icon_factory ();
 
   new_data_window (NULL, NULL);
index 643013a3371c90c38c6442a8ae1823c12b2742d2..a9564cb1a563fc959cee8f5c9dc80fe40d914f84 100644 (file)
@@ -33,6 +33,7 @@
 
 #include "window-manager.h"
 
 
 #include "window-manager.h"
 
+#include <data/dictionary.h>
 #include <language/lexer/lexer.h>
 #include <language/command.h>
 #include <data/procedure.h>
 #include <language/lexer/lexer.h>
 #include <language/command.h>
 #include <data/procedure.h>
@@ -214,14 +215,16 @@ static void
 execute_syntax (const struct syntax_editor *se, GtkTextIter start,
                GtkTextIter stop)
 {
 execute_syntax (const struct syntax_editor *se, GtkTextIter start,
                GtkTextIter stop)
 {
+  g_return_if_fail (proc_has_source (the_dataset));
+
   getl_append_source (the_source_stream,
                      create_syntax_editor_source (se, start, stop));
   for (;;)
     {
   getl_append_source (the_source_stream,
                      create_syntax_editor_source (se, start, stop));
   for (;;)
     {
+      const struct dictionary *dict = dataset_dict (the_dataset);
       int result = cmd_parse (se->lexer, the_dataset,
       int result = cmd_parse (se->lexer, the_dataset,
-                             proc_has_source (the_dataset)
-                             ? CMD_STATE_DATA : CMD_STATE_INITIAL);
-
+                             dict_get_var_cnt (dict) > 0 ?
+                             CMD_STATE_DATA : CMD_STATE_INITIAL);
       if (result == CMD_EOF || result == CMD_FINISH)
        break;
     }
       if (result == CMD_EOF || result == CMD_FINISH)
        break;
     }
index 9712fb8be5a80945bbaa2038cab25b9517471a75..81b09a1df24d22120d270fb0b5bd97bc2a2eff4f 100644 (file)
@@ -108,7 +108,7 @@ main (int argc, char **argv)
 
   factory = fastfile_factory_create ();
 
 
   factory = fastfile_factory_create ();
 
-  the_dataset = create_dataset (factory);
+  the_dataset = create_dataset (factory, NULL, NULL);
 
   if (parse_command_line (argc, argv, the_source_stream))
     {
 
   if (parse_command_line (argc, argv, the_source_stream))
     {