#limit (11.0)##pagelength (16.5)##block# #start (2.0,0.0)# #page (71)# #headodd# #center#EUDAS#right#% #end# #headeven# %#center#EUDAS #end# #center#1 7 Verwaltung der offenen Dateien Die in diesem Kapitel beschriebene Schnittstelle verbindet mehrere EUDAS-Dateien zu einem großen Dateimodell. Diese virtuelle Datei dient als Grundlage für die meisten EUDAS-Funktionen. Zuerst muß eine Datei als Bestandteil der virtuellen Datei geöffnet werden, ehe sie bearbeitet werden kann. Es ist so bei den Funktionen keine Angabe mehr nötig, welche Datei gemeint ist. Diese Schnittstelle ist in vielen Teilen für die interne EUDAS-Anwendung ausgelegt. Bei einigen Prozeduren werden aus Effizienzgründen keinerlei Überprüfungen auf illegale Aufrufe oder Parameter durchgeführt. Wollen Sie eine solche Prozedur dennoch verwenden, sollten Sie die Einhaltung der angegebenen Bedingungen sorgfältig überprüfen. 7.1 Dateiverwaltung Mit 'oeffne' wird eine Datei zum Bearbeiten geöffnet. Mit 'kette' und 'kopple' können weitere Dateien dazugekettet bzw. dazugekoppelt werden. Durch 'sichere' können veränderte Kopien zurückgeschrie­ ben werden. Durch 'dateien loeschen' werden die internen Kopien gelöscht. Mit 'anzahl dateien' kann die Anzahl der vorhandenen Dateien erfragt werden. 'anzahl koppeldateien' gibt Auskunft darüber, wie­ viel Dateien davon gekoppelt sind. 'aendern erlaubt' gibt den Status wieder, der beim Öffnen der ersten Datei angegeben wurde. 'inhalt veraendert' gibt an, ob die angegebene Datei verändert wurde. Mit 'eudas dateiname' können die Namen der geöffneten Dateien erfragt werden. Bei jedem 'oeffne' wird 'dateiversion' um 1 erhöht. Dies dient dazu, ein erfolgtes neues Öffnen von anderen Stellen aus zu entdecken. Mit 'auf koppeldatei' kann die virtuelle Datei auf eine Koppel­ datei umgeschaltet werden, so daß der Eindruck entsteht, nur diese Datei wäre geöffnet worden. PROC oeffne (TEXT CONST dateiname, BOOL CONST aendern erlaubt) Falls Ändern erlaubt sein soll, wird eine Kopie der angegebenen Datei zur Bearbeitung für EUDAS angelegt. Vorher geöffnete Dateien werden gelöscht. Die Änderungserlaubnis wird entspre­ chend gesetzt. Es wird die Satzposition der EUDAS-Datei ange­ nommen (Ausnahme: steht die EUDAS-Datei hinter dem letzten Satz, wird auf Satz 1 positioniert). 'dateiversion' sowie 'anzahl dateien' werden um 1 erhöht. FEHLER: #f1# #on("i")#Datei nicht gesichert#off("i")# Eine vorher geöffnete Datei war verändert, aber nicht gesi­ chert. #f1# #on("i")#Datei existiert nicht#off("i")# Die angegebene Datei ist nicht vorhanden. #f1# #on("i")#Datei ist keine EUDAS-Datei#off("i")# Die angegebene Datei hat nicht den für EUDAS-Dateien festge­ legten Typ. PROC kopple (TEXT CONST dateiname) Die angegebene Datei wird zu den bereits geöffneten Dateien dazugekoppelt. Falls Ändern erlaubt ist, wird eine Kopie dieser Datei verwendet. Dabei werden die ersten Felder der Datei, die bereits in der Hauptdatei vorhanden sind, als Koppelfelder festgelegt. Alle weiteren Felder werden zusätzlich zu den bis­ herigen angelegt. 'dateiversion', 'anzahl dateien' und 'anzahl  koppeldateien' werden um 1 erhöht. FEHLER: #f1# #on("i")#keine Datei geoeffnet#off("i")# Es muß vorher eine Datei geöffnet werden. #f1# #on("i")#Zuviel Dateien geoeffnet#off("i")# Die Anzahl der gleichzeitig geöffneten Dateien ist begrenzt. #f1# #on("i")#Datei existiert nicht#off("i")# Die angegebene Datei ist nicht vorhanden. #f1# #on("i")#Datei ist keine EUDAS-Datei#off("i")# Die angegebene Datei hat nicht den für EUDAS-Dateien festge­ legten Typ. #f1# #on("i")#Zu viele Felder#off("i")# Die Anzahl der Felder insgesamt ist begrenzt. #f1# #on("i")#Zu viele Koppelfelder#off("i")# Die Anzahl der Koppelfelder ist begrenzt. #f1# #on("i")#keine Koppelfelder vorhanden#off("i")# Das erste Feld der zu koppelnden Datei ist in der Hauptdatei nicht vorhanden (unterschiedliche Feldnamen). PROC kette (TEXT CONST dateiname) Die angegebene Datei wird an die Hauptdatei angekettet, d.h. die Sätze der neuen Datei werden am bisherigen Dateiende angefügt. Falls Ändern erlaubt ist, wird eine Kopie dieser Datei verwendet. Die zu kettende Datei muß in der Feldstruktur nicht mit der Hauptdatei übereinstimmen. Die aktuelle Satzposition wird beibehalten. 'dateiversion' und 'anzahl dateien' werden um 1 erhöht. FEHLER: #f1# #on("i")#keine Datei geoeffnet#off("i")# Es muß vorher eine Datei geöffnet werden. #f1# #on("i")#Zuviel Dateien geoeffnet#off("i")# Die Anzahl der gleichzeitig geöffneten Dateien ist begrenzt. #f1# #on("i")#Datei existiert nicht#off("i")# Die angegebene Datei ist nicht vorhanden. #f1# #on("i")#Datei ist keine EUDAS-Datei#off("i")# Die angegebene Datei hat nicht den für EUDAS-Dateien festge­ legten Typ. PROC sichere (INT CONST dateinr, TEXT CONST dateiname) Die geöffneten Dateien werden in der Reihenfolge ihres Öffnens durchnumeriert (von 1 an). Die Arbeitskopie mit der angegebe­ nen Nummer wird unter dem angegebenen Namen gesichert, aber selbst nicht verändert. Die vorher unter diesem Namen vorhan­ dene Datei wird gelöscht. War die zu sichernde Arbeitskopie verändert worden, so wird sie anschließend als nicht verändert angesehen. Bedingungen: 1 <= dateinr <= anzahl dateien PROC dateien loeschen (BOOL CONST auch geaenderte) Es werden alle geöffneten Arbeitskopien gelöscht. EUDAS wird wieder in den Anfangszustand versetzt. Wird 'auch geaenderte' angegeben, wird bei geänderten, aber nicht gesicherten Dateien die Fehlermeldung unterdrückt. FEHLER: #f1# #on("i")#Datei nicht gesichert#off("i")# Eine vorher geöffnete Datei war verändert, aber nicht gesi­ chert. BOOL PROC auf koppeldatei Liefert TRUE, wenn auf eine Koppeldatei umgeschaltet wurde. PROC auf koppeldatei (INT CONST nr) Umschalten auf Koppeldatei 'nr'. Ist bereits umgeschaltet, wird wieder zurückgeschaltet. In diesem Fall werden bei 'nr' = 1 die Koppelfelder übernommen, anderenfalls nicht. Beim Umschalten bleiben Satzposition, Markierungen und Suchmuster gespeichert. In der Koppeldatei wird die beim letzten Umschalten eingestell­ te Position wieder eingenommen. 'dateiversion' wird um 1 er­ höht. INT PROC anzahl dateien Gibt die Anzahl der insgesamt geöffneten Dateien an. INT PROC anzahl koppeldateien Gibt die Anzahl der gekoppelten Dateien an. BOOL PROC aendern erlaubt Reflektiert den Status, der bei 'oeffne' gesetzt wurde. BOOL PROC inhalt veraendert (INT CONST dateinr) Gibt an, ob die geöffnete Datei mit der angegebenen Nummer verändert wurde. Wird ggf. von 'sichere' zurückgesetzt. Bedingung: 1 <= dateinr <= anzahl dateien TEXT PROC eudas dateiname (INT CONST dateinr) Liefert den Namen, unter dem die entsprechende Datei geöffnet wurde. Bedingung: 1 <= dateinr <= anzahl dateien INT PROC dateiversion Wird bei jedem 'oeffne', 'kette' und 'kopple' zyklisch erhöht. INT PROC folgedatei (INT CONST dateinr) Eine geöffnete EUDAS-Datei wird in eine von zwei Listen auf­ genommen, die der geketteten Dateien und die der gekoppelten. Diese Prozedur liefert jeweils die Nummer der nächsten Datei in der Liste, am Ende aber 0. Die Liste der geketteten Dateien beginnt immer mit 1, mit 'folgedatei (0)' erhält man die erste gekoppelte Datei. Bedingung: 0 <= dateinr <= anzahl dateien 7.2 Feldstruktur Die einzelnen Sätze der kombinierten EUDAS-Datei sind in Felder unterteilt. Diese setzen sich zusammen aus den Feldern der Haupt­ datei und der einzelnen Koppeldateien, wobei die Koppelfelder je­ weils nur einmal auftauchen. 'anzahl felder' liefert die Anzahl der vorhanden Felder. Mit 'feldnamen lesen' und 'feldnamen bearbeiten' können die Feldnamen abgefragt werden. 'feldnummer' liefert einen Index für einen vor­ gegebenen Feldnamen, da die Felder immer über Nummern angespro­ chen werden. Die Prozeduren 'feld lesen' und 'feld bearbeiten' ermöglichen den Zugriff auf den Feldinhalt des aktuellen Satzes; durch 'feld aendern' kann dieser Inhalt abgeändert werden. INT PROC anzahl felder Liefert die Anzahl der vorhanden Felder. PROC feldnamen lesen (INT CONST feldnr, TEXT VAR feldname) Liefert in 'feldname' den Namen des Feldes mit der Nummer 'feldnr'. Bedingung: 1 <= feldnr <= anzahl felder PROC feldnamen bearbeiten (INT CONST feldnr, PROC (TEXT CONST, INT CONST, INT CONST) bearbeite) Die Prozedur 'bearbeite' wird aufgerufen. Als Parameter werden ein Text und Anfangs- und Endposition des gewünschten Feld­ namens in diesem Text übergeben. Verhindert unnötiges Kopie­ ren des Feldnamens in eine TEXT-Variable. Der übergebene Text darf nicht verändert werden! Bedingung: 1 <= feldnr <= anzahl felder INT PROC feldnummer (TEXT CONST feldname) Liefert den index zu dem angegebenen Feldnamen. Falls ein solcher Name nicht existiert, wird 0 geliefert. PROC feld lesen (INT CONST feldnr, TEXT VAR inhalt) Liefert den Inhalt des angegebenen Feldes. Bedingung: 1 <= feldnr <= anzahl felder PROC feld bearbeiten (INT CONST feldnr, PROC (TEXT CONST, INT CONST, INT CONST) bearbeite) Die Prozedur 'bearbeite' wird aufgerufen. Der Feldinhalt des angegebenen Feldes steht im übergebenen Text innerhalb der Grenzen. Ist die Obergrenze kleiner als die Untergrenze, so ist das Feld leer. Bedingung: 1 <= feldnr <= anzahl felder PROC feld aendern (INT CONST feldnr, TEXT CONST inhalt) Ändert den Inhalt des angegebenen Feldes. Bedingung: NOT ende der datei 1 <= feldnr <= anzahl felder INT PROC feldinfo (INT CONST feldnummer) Liefert den Typ des angegebenen Feldes. Bedingung: 1 <= feldnummer <= anzahl felder PROC notizen lesen (INT CONST nr, TEXT VAR inhalt) Liest die angegebenen Notizen ('nr' = 1,2,3) aus der ersten Datei oder der umgeschalteten Koppeldatei. PROC notizen aendern (INT CONST nr, TEXT CONST inhalt) Ändert die Notizen ('nr' = 1,2,3) der ersten Datei oder der um­ geschalteten Koppeldatei. 7.3 Positionierung Das virtuelle Dateimodell von EUDAS verfügt ebenfalls über eine Satzposition, die verändert werden kann. Durch 'satznummer' wird die aktuelle Satznummer geliefert, beim Koppeln kann über 'satzkombination' die Reihenfolge der Kop­ pelkombinationen bestimmt werden. 'dateiende' zeigt an, ob die Satzposition hinter dem letzten Satz liegt. Mit 'weiter' und 'zurueck' erfolgt die eigentliche Positionierung. Hier kann außer der Positio­ nierung um Einzelsätze auch die Positionierung auf den nächsten ausgewählten oder markierten Satz angefordert werden. Mit 'auf  satz' schließlich kann ein bestimmter Satz angesprungen werden. INT PROC satznummer Liefert die Nummer des aktuellen Satzes. Die Sätze werden von 1 an durchnumeriert, wobei über die geketteten Dateien wei­ tergezählt wird. Bedingung: anzahl dateien > 0 INT PROC satzkombination Liefert die laufende Nummer der Koppelkombination des aktuel­ len Satzes. Wird nur durch 'weiter' im Einzelsatzmodus erhöht. Normalerweise 1. Bedingung: anzahl dateien > 0 BOOL PROC dateiende Gibt an, ob die Satzposition hinter dem letzten Satz liegt. PROC weiter (INT CONST modus) Erhöht die aktuelle Satzposition. Für 'modus' gibt es 3 Möglich­ keiten: 1: Falls eine weitere Satzkombination besteht, wird diese ein­ genommen, sonst zum nächsten Satz. 2: Zum nächsten durch Suchbedingung ausgewählten Satz. Wird optimiert. 3: Zum nächsten markierten Satz. Wird optimiert. Ist kein Satz mehr vorhanden, wird die Satzposition hinter dem letzten Satz eingenommen. Bedingung: anzahl dateien > 0 PROC zurueck (INT CONST modus) Geht um einen Satz zurück. Die Modusangabe ist wie bei 'wei­ ter', jedoch wird im Modus 1 keine weitere Satzkombination ausprobiert. Die Positionierung endet bei Satz 1. Bedingung: anzahl dateien > 0 PROC auf satz (INT CONST satznr) Geht auf den angegebenen Satz. Ist 'satznr' < 1, wird auf Satz 1 positioniert, ist der angegebene Satz nicht vorhanden, wird hinter den letzten Satz positioniert. Es wird jeweils die erste Satzkombination eingenommen. Bedingung: anzahl dateien > 0 7.4 Änderungen Sätze des Dateimodells können eingefügt oder gelöscht werden. Durch das Einfügen entsteht ein leerer Satz vor dem aktuellen Satz; alle weiteren Sätze rücken eine Stelle weiter. Beim Löschen wird dieser Vorgang wieder rückgängig gemacht. Durch 'satz einfuegen' wird ein Leersatz eingefügt; durch 'satz loeschen' wird der aktuelle Satz gelöscht. Sätze in gekoppelten Dateien werden grundsätzlich nicht ge­ löscht; auch beim Einfügen entsteht nicht automatisch ein Leersatz in den gekoppelten Dateien. Änderungen in den Koppeldateien (durch 'feld aendern') werden gepuffert. Durch 'aenderungen ein­ tragen' werden die Änderungen dann in die Koppeldateien eingetra­ gen. Dabei kann auch ein neuer Satz in die Koppeldatei eingefügt werden. Bei Positionierungen wird diese Prozedur automatisch auf­ gerufen. PROC satz einfuegen Fügt vor dem aktuellen Satz einen Leersatz ein. Bedingung: anzahl dateien > 0 PROC satz loeschen Löscht den aktuellen Satz. Hat hinter dem letzten Satz keine Wirkung. Bedingung: anzahl dateien > 0 PROC aenderungen eintragen Trägt die gepufferten Änderungen in die Koppeldateien ein. Dabei können die folgenden Fälle auftreten: 1. Der Satz in der Koppeldatei wird geändert. Dies geschieht dann, wenn vorher ein passender Satz in der Koppeldatei vorhanden war und die Koppelfelder nicht ver­ ändert wurden. 2. In der Koppeldatei wird ein neuer Satz eingefügt. Wenn die Koppelfelder und noch andere Felder einer Datei geändert wurden, wird in dieser Datei ein neuer Satz einge­ fügt. 3. Es wird neu gekoppelt. Wurden nur die Koppelfelder einer Datei geändert, wird ein neuer, zu diesen Feldern passender Satz gesucht. Nach 'aenderungen eintragen' erscheinen unter den Feldern der Datei die neuen Inhalte. 7.5 Suchbedingungen Über 'suchbedingung' kann eine Suchbedingung eingetragen werden, die für jeden Satz geprüft werden soll. Mit 'satz ausgewaehlt' wird erfragt, ob der aktuelle Satz die Suchbedingung erfüllt. Die Such­ bedingung kann mit 'suchbedingung loeschen' wieder ausgeschaltet werden. Einzelne Sätze können auch markiert werden. Nach einem Öff­ nen ist zunächst kein Satz markiert. Durch 'markierung  aendern' kann die Markierung eines Satzes geändert werden. 'satz markiert' fragt ab, ob der aktuelle Satz markiert ist. 'markierte saetze' liefert die Anzahl der markierten Sätze. Mit 'markierungen loeschen' wer­ den alle Markierungen entfernt. PROC suchbedingung (INT CONST feldnr, TEXT CONST bedingung) Stellt für das angegebene Feld die im Text als Muster angege­ bene Suchbedingung ein. Weitere Aufrufe verknüpfen die Be­ dingungen mit UND (auch wenn das gleiche Feld erneut angege­ ben wird). Bedingung: anzahl dateien > 0 1 <= feldnr <= anzahl felder FEHLER: #f1# #on("i")#Suchmuster zu umfangreich#off("i")# Es wurden zu viele Vergleiche gefordert. BOOL PROC satz ausgewaehlt Gibt an, ob die Suchbedingung auf den aktuellen Satz zutrifft. Hinter dem letzten Satz wird immer FALSE geliefert. Bedingung: anzahl dateien > 0 PROC suchbedingung lesen (INT CONST feldnr, TEXT VAR bedingung) Liefert die zuletzt für das angegebene Feld eingestellte Bedin­ gung, falls die Suchbedingung nicht gelöscht und keine Datei neu geöffnet wurde. Bedingung: 1 <= feldnr <= anzahl felder PROC suchbedingung loeschen Löscht die eingestellte Suchbedingung wieder. Anschließend sind alle Sätze ausgewählt. Bedingung: anzahl dateien > 0 PROC markierung aendern Ändert die Markierung des aktuellen Satzes ins Gegenteil. Bedingung: anzahl dateien > 0 BOOL PROC satz markiert Gibt an, ob der aktuelle Satz markiert ist. Bedingung: anzahl dateien > 0 INT PROC markierte saetze Gibt an, wieviel Sätze insgesamt markiert sind. Bedingung: anzahl dateien > 0 PROC markierungen loeschen Löscht alle Markierungen. Bedingung: anzahl dateien > 0