Zur Freigabe der V21 |
Nr. 59
|
Installation der V21: siehe letzte Seite |
Diesmal geht es um die Sprache und ums Übersetzen. Eine unnötige Abschweifung? Einerseits befindet man sich als Entwickler ständig auf der Gratwanderung zwischen Deutsch und Englisch und hat immer wieder mit Neuwort-Schöpfungen zu ringen, andererseits soll und will man in einem Organ wie diesem alles Neue kristallklar vermitteln. Da liegt es nicht nur nahe, da drängt es sich auf, das Medium der Vermittlung, eben die Sprache, immer wieder auf den Prüfstand zu stellen und von allen Seiten zu beleuchten.
Die Wissenschaft von der "Künstlichen Intelligenz" (KI) wird überschattet von einer zentralen Herausforderung: Nachbildung des menschlichen Alltagsverstandes (auf english "common sense" genannt, auf deutsch auch "gesunder Menschenverstand"). Ein großer, ja dominierender Teil davon ist die "natürliche Sprache". Rechner sollen verstehen können, was Nutzer ihnen in ihrer Muttersprache mitteilen, und ebenso sollen sie antworten. Eine Unterabteilung des Sprachkomplexes ist das Übersetzen von Texten, geschriebenen oder (noch schwieriger) gesprochenen, in eine andere (natürliche) Sprache. Wer kennt nicht die eigentümlich holprigen, oftmals ulkigen Übersetzungen, die man z.B. vom "BabelFish", dem Übersetzungsdienst der Firma Altavista, erhält. Womöglich sagt sich mancher Nutzer, dass es sich, als geschenkter Gaul, wohl um ein wenig aufwendiges Programm handelt, es müsse doch schon viel bessere geben. Falsch geraten, denn dahinter steckt die Software der Firma SYSTRAN, nach eigener Aussage das führende Produkt für maschinelles Übersetzen, und seit 30 Jahren sei man Hoflieferant des Pentagon! (Dieselbe Software nutzt übrigens auch Google.) Was also macht dann eigentlich das Übersetzen so schwierig - es mangelt doch gewiss nicht mehr an Rechenleistung oder Speicherplatz? Des Pudels Kern ist wohl der, dass ein Programm immer nur mit Zeichenfolgen hantiert. Geschriebener Text ist aber eine magere Abstraktion! Der menschliche Leser muss sich automatisch vieles hinzudenken, was "zwischen den Zeilen" steht - für ein Programm ohne Alltagsverstand sind diese Dinge unsichtbar. Das Lesen geht ja nicht so vor sich, dass Wort für Wort und Satz nach Satz aufgenommen wird und sich im Gehirn sofort in Bedeutung wandelt. Sehr häufig werden vielmehr Wörter (= Buchstabenfolgen) oder Phrasen (= Wortfolgen) erst aus dem Zusammenhang heraus verständlich, und zwar auch in Verbindung mit Dingen, die mehrere Seiten vorher vorkamen oder gar nicht im Text stehen, sondern zum Alltagsverstand des Lesers gehören.
Wir nennen jetzt vier Probleme, doch das ist nicht alles! Die historischen und sozialen Dimensionen von Sprachen sind damit noch nicht erfasst...
Problem Nr. 1: Die Wortschätze sind nicht deckungsgleich. Dasselbe Wort, dieselbe Phrase kann in unterschiedlichen Positionen oder Situationen ganz verschieden zu übersetzen sein. Berühmt ist Fausts Mühe mit dem Wort "logos" (Wort, Sinn, Kraft, Tat). Nehmen wir aber als Beispiel, um BabelFish testen zu können, einen englischen Satz: "Jenny was not present when John came to present his book on the past and present of restaurant cars and to give it to her as a present". Die Zeichenfolge "present" tritt hier in vier verschiedenen Bedeutungen auf, z.T. unterschiedlich ausgesprochen - doch das sieht man nicht. Der menschliche Hörer oder Leser empfindet keine Problematik, er versteht "Jenny war nicht da, als John kam, um sein Buch über Vergangenheit und Gegenwart der Speisewagen vorzustellen und es ihr als Geschenk zu überreichen". Das Programm "BabelFish" macht daraus: "Jenny war nicht anwesend, als John, sein Buch auf dem letzten und das anwesend von den Gaststätteautos (!) darzustellen kam und es ihr als anwesendes zu geben". Nicht jede der Bedeutungen wurde also korrekt erkannt - der Kontext nicht komplett verstanden, der Sinn kommt deshalb nicht rüber. Umgekehrt hat oft die Zielsprache gar kein exaktes Gegenstück für ein Wort, dann muss man zu situationsabhängigen Umschreibungen greifen (z.B. engl. "lucky").
Problem Nr. 2: Nicht nur um die Wörter selbst muss man sich kümmern, sondern auch um ihre Reihenfolge. Denn die Unterschiede der Grammatik erfordern einen Umbau der Sätze, wie man am selben Beispiel auch sieht. Dazu muss ein Programm Wortart und -funktion "erkennen" ("present" kann Verb, Adjektiv oder Substantiv sein). Auch das gelingt bis heute nur teilweise. Aber es kommt noch schlimmer:
Problem Nr. 3: Am Anfang der Bedeutung steht gar nicht das Wort, sondern das Lexem, wie es die Sprachwissenschaft nennt, und das kann aus mehreren Wörtern bestehen (Idiome!) oder aber aus einer Wortwurzel (Flexionen!). Weil daher die Spatien nicht als Wegmarken ausreichen, ein Programm zuverlässig zum Ziel zu führen, wird es ganz bedeutend schwieriger. Doch das Schlimmste von allem:
Problem Nr. 4: Ein weites Feld vieldeutiger Wörter und Wendungen bilden die Metaphern. Mit voller Absicht wird ein geläufiges Wort oder eine gängige Phrase für eine neue oder ganz andere Sache eingesetzt. Das passiert in jeder Sprache, und zwar im Alltag genauso wie in jedem Fachjargon. Durch Metaphern explodiert geradezu die Ausdrucksmächtigkeit wie auch der ästhetische Reichtum einer Sprache, genauso aber die Gefahr von Missverständnissen. Metaphern lassen sich, und hier wird's kritisch, nicht annähernd vollständig in Wörterbüchern einfangen, anders als Idiome (sozusagen versteinerte Metaphern), es sprießen vielmehr pausenlos neue Triebe und wuchern neue Blüten, was das automatische Übersetzen ganz ungemein erschwert. Es fängt aber schon bei den einfachsten Dingen an: so hat etwa ein Tisch in Frankreich keine Beine, sondern Füße (metaphorisch ist beides, denn laufen kann der Tisch damit nicht). Wenn also im Text steht "dem Tisch fehlte ein Bein", müsste das Programm feststellen, dass hier nicht das Bein eines Lebewesens, sondern eines Möbelstücks gemeint ist - wie soll es das machen? In höheren Sphären des Sprachgebrauchs steigern sich die Probleme, bis hin zur Lyrik, wo Programmierer nur noch schwarz sehen können ("Schwarze Milch der Frühe" und dergleichen).
Die Alltagssprache und die literarische zumal sind kolossale Metaphern-Panoramen. Dasselbe gilt aber für die Informatik-Fachsprache (*), die geradezu durchwachsen ist von Wort-Umnutzungen (Absturz, Architektur, Bug, Fenster, Maus, Virus...), und hier liegt ein Berührungspunkt zu allegro. Denn auch dieses verlangt mitunter nach neuen Ausdrücken für neu entwickelte Gebilde, und es erscheint zunächst immer hilfreich, Worte mit Anklang zu wählen, Ausdrücke, die jeder kennt, statt ganz neue zu erfinden. Ähnlichkeiten bestehen jedoch allenfalls auf einer höheren Abstraktionsebene. Im Informatikbereich, anders als anderswo, kann der nicht einschlägig vorgebildete Nutzer die Tiefe und Weite der Kluft zwischen Wort und Wirklichkeit nicht ermessen. Die Worte suggerieren Vertrautes, wo sich in Wahrheit dicht unter dünner Oberfläche radikal Alltagsfremdes verbirgt. Schon das Wort "Sprache" ist ein Paradebeispiel. Es wird auf jedes noch so kleine Systemchen von Befehlswörtern angewendet, z.B. FLEX oder die Export-Sprache oder etwa SQL. Dabei ist auch die mächtigste Programmiersprache im Vergleich zu jeder natürlichen Sprache ein ungemein dürres und starres Gestänge. "Kommunikation" und "Dialog" mit Computern sind deshalb Vorgänge, die Lichtjahre vom sprachlichen Austausch zwischen Menschen entfernt sind. In keiner einzigen Programmiersprache gibt es z.B. etwas, was man mit Berechtigung als "Metaphern" bezeichnen könnte. Man muss vielmehr beim Programmieren immer ganz präzise das schreiben, was man wirklich meint und bloß nichts anderes, sonst macht der Rechner garantiert nichts Rechtes oder "hängt sich auf": er kann nicht nur nicht denken, sondern schon gar nicht mitdenken. Noch immer nicht, dabei wurde die Metapher vom Elektronengehirn schon ganz zu Anfang der Computergeschichte geprägt, als "Datenbank" oder gar "Wissensbasis" noch längst nicht erfunden waren. Wenn aber "Informationsverarbeitung" und "Wissensmanagement" auftauchen - was darf sich der Endverbraucher davon versprechen? Sind das heute treffende Ausdrücke?
Wenn beispielsweise vom "Suchen" die Rede ist: wer denkt sich dabei schon jedesmal, dass das System beim Suchen in einer Datenbank nichts anderes tut als eine eingegebene Zeichenfolge in genau vorgeschriebener, streng formaler Weise abzugleichen mit Zeichenfolgen, die in Dateien gespeichert sind. Programmtechnisches "Suchen" bedeutet also: Es wird nur genau die Zeichenfolge verglichen, die der Nutzer eingetippt hat, es wird nicht nach den Begriffen oder Inhalten gefahndet, die er gemeint hat, noch nicht einmal nach anderen Schreibweisen, Synonymen usw. Ein "Treffer" ist eine algorithmische Übereinstimmung von Zeichenfolgen, kein zutreffender Datensatz im Benutzersinne, nur zu oft ist ein sog. "Treffer" sogar eine Niete. Von "Relevanz" wollen wir erst gar nicht anfangen... Diese Beispiele zeigen, dass Metaphern in der Informatiksprache mitunter kontraproduktiv sind: sie können Fehleinschätzungen und unrealistische Erwartungen hervorrufen, jedenfalls bei Nutzern, die meinen, man müsse nichts darüber wissen, was "unter der Motorhaube" passiert. (Wir sagen deshalb nie "Treffer", sondern neutral "Ergebnisse".) Aus solchen Gründen hat einmal ein bedeutender Informatiker, der Niederländer Edsger Dijkstra (in CACM 32(1989)12), den gänzlichen Verzicht auf Metaphern in der Informatiksprache gefordert. Damit kam er natürlich nicht durch, denn es wird dann alles abschreckend dröge, wie man z.B. in unserem Text über "allegro und Objektorientierte Datenbanken" erleben kann.
Wie steht es mit dem Wort "Übersetzung"? Angewandt auf Produkte von "BabelFish" und Artgenossen ist es eindeutig eine sehr euphemistische Metapher, denn was diese Programme machen, hat wenig mit sinngemäßer Übertragung zu tun. Sie leisten eine Umwandlung von Zeichenfolgen in andere Zeichenfolgen unter Benutzung einer (begrenzten, nicht durch Lernen dauernd wachsenden!) Datenbasis, genannt "Wörterbuch", und mit Hilfe einer Sammlung von formalistischen Regeln. Durchaus manchmal eine Hilfe, gewiss, aber im Sinne einer Krücke.
Es ist instruktiv, sich einige Beispielsätze anzuschauen und was beim "maschinellen Übersetzen" ins Englische daraus wird. Machen Sie doch selber den Versuch und achten Sie dabei besonders auf die beschriebenen Probleme! à http://world.altavista.com
Letzte Frage: Was für ein Wort ist eigentlich "Metaphorama"? Es ist schlicht eine aus "Metapher" und "Panorama" kombinierte Neuschöpfung. (Bekanntes Beispiel für so etwas ist "Smog", gebildet aus "Smoke" und "Fog".) Im Web kommt es noch nirgends vor, und das will heute schon etwas heißen...
(*) Literaturhinweis: Carsten Busch: Metaphern in der Informatik : Modellbildung - Formalisierung - Anwendung. - DUV 1998. - Diss. TU Berlin 1997. ISBN 3-8244-2096-1. [Untersucht auch die Problematik vermenschlichender Computermetaphern]
Was MUSS man wirklich wissen?
Nur dieses: Im Schreibfeld ein h eingeben. Dann kommt die Gesamtübersicht der Funktionen und der Dokumentation. Von da aus klickt man sich weiter zu den Dingen, die man braucht. Die einzelnen Menüs, die dann erscheinen, haben oft einen Punkt HILFE..HILFE..HILFE. Klickt man den an, kommt eine ausführliche Fassung desselben Menüs mit Beschreibung jeder einzelnen Funktion. Was in dieser Ausgabe steht, ist gedacht für den ambitionierten, neugierigen Nutzer, der immer noch gern etwas schwarz auf weiß studiert und hinter die Kulissen der polierten Oberfläche blicken möchte. Fast alles wurde in den letzten Monaten in Form von E-Mail-"Verlautbarungen" bekanntgegeben. Die Verlautbarungen 138 bis 150 sind hier, bis auf nicht mehr Wichtiges, eingearbeitet. Mit Online: ... wird im Folgenden jeweils angegeben, wie man am schnellsten an die einzelnen Funktionen kommt, aber alles ist auch über das Hauptmenü zu erreichen! Also: wirklich nur h fest einprägen.
1.1 Datenbank kopieren / sichern / wiederherstellen : Jetzt nur noch klicken
Die Routinen sind soweit selbsterklärend, dass weitere Ausführungen an dieser Stelle nicht nötig sind.
Nur für Neugierige folgende Angaben: Die zugehörigen Dateien sind:
_backup.flx Sicherungskopie oder Normalkopie anlegen
_backup.bat wird von _backup.flx gestartet
backup.rtf Text mit aller evtl. nötigen Information zu "backup", erscheint automatisch
_restore.flx Datenbank aus Sicherungskopie restaurieren
_restore.bat wird von _restore.flx gestartet
restore.rtf Text mit Hintergrundinformation zu "restore"
Um die Sache noch besser zu machen, gibt es einen neuen INI-Befehl (zur INI-Dokumentation: h a99.ini )
DbBack=pfadname
Hier kann man als pfadname das Verzeichnis setzen, wo normalerweise die Sicherungskopie abgeladen werden soll. Wenn man nichts einträgt, dann trägt a99 nach der ersten Sicherungskopie selber den gewählten Pfadnamen hier ein.
Macht man eine Normalkopie, hat man anschliessend auf dem neuen Verzeichnis alles beisammen, was zur Datenbank gehört. Sofort kann man z.B. alles einpacken und versenden, damit die Datenbank anderswo benutzt werden kann.
Um die Sache NOCH besser zu machen: in _backup.bat wird zusätzlich eine Stapeldatei namerest.bat auf dem DbDir angelegt. Wenn a99 nicht mehr startet, weil z.B. TBL und/oder cDX kaputt sind, kann man ja auch keinen FLEX mehr starten! Dann geht man schlicht auf das Datenverzeichnis und gibt im DOS-Fenster ein: namerest wobei name natürlich der Datenbankname ist, im Standardfall heißt es also catrest
In dieser RESTaurierroutine stehen genau die Kopier- und Update-Befehle, die für die Restaurierung nötig sind.
Ansonsten bleiben die DOS-Routinen weiterhin in vollem Umfang möglich - an der Datenbankstruktur ändert sich ja nichts.
Bei sehr großen Datenbanken wird man vermutlich die existierenden Routinen der nächtlichen Bandsicherung u.dgl. beibehalten wollen, aber für kleine und mittlere Datenbanken ist die neue Methodik an Bequemlichkeit hoch überlegen. Manch einer, der bisher aus Mangel an Zeit nie sicherte, wird jetzt Geschmack dran finden...
h eingeben, dann Export, Listen, Tabellen. Direktaufruf: h table
Jede Kombination von Datenfeldern kann hiermit ganz einfach (ohne Parametrierung) als geordnete Tabelle exportiert werden.
Die entstehenden Tabellen haben auch eine Überschriftszeile und können direkt mit Office-Programmen eingelesen werden. Wahlweise kann man die jeweilige Ergebnismenge als Tabelle ausgeben lassen oder auch die gesamte Datenbank.
1.2.2 Gesamte Datenbank exportieren
Ein weiterer neuer Punkt auf dem Menü ORG ist Datenbank-Export . Dazu gehören diese Dateien:
_dbxport.flx --> ProgDir\flex
dbxport.vw --> ProgDir\help
dbxport.rtf --> ProgDir\help
Die Möglichkeiten des Exports werden in der ViewListe dbxport.vw angeboten. Diese kann beliebig modifiziert werden, das Strickmuster sieht man ja unmittelbar beim Blick in die Datei.
1.2.3 Gesamte Datenbank exportieren per FLEX
Mit dem FLEX-Befehl download database kann man jetzt den Menüpunkt "Export | Gesamte Datenbank" auslösen. Man wird sich überlegen, ob man dies bei großen Banken einsetzen wird, für kleinere kann es sicher sehr nützlich sein, schnell mal eben die Datenbank in eine andere Struktur zu überführen.
Benutzt werden die aktuellen ExportParameter. Mit xport p name kann man natürlich vorher andere einstellen.
1.2.4 Gesamte Datenbank als ViewListe (Online: h view )
Die View-FLEXe wurden so erweitert, dass man über die Funktion "ViewListen erstellen ... Mit anderer ViP" auch angeboten bekommt: Gesamte Datenbank. Auch hier kann sich ein Gesamt-Export anschließen, dieser ist dann so geordnet wie die ViewListe.
Sicher, bei den Jumbo-Datenbanken wird man das nicht tun, (mit [Esc] kann man während des Durchlaufs abbrechen!!) aber bei vielen Klein- und Mittelbanken ist es ganz nett, wenn man sowas ohne Umstände machen kann.
1.2.5 Zählungen : QUANT im neuen Gewand
Im Volksmund ist ein "Quantensprung" ein ordentlich großer Satz in die richtige Richtung. In der Physik ist es der kleinste überhaupt mögliche Sprung (derjenige zwischen zwei Energieniveaus eines Elektrons) - was Kleineres gibt's gar nicht.
Aber das sei dahingestellt. Hier geht es um den Sprung der fast vergessenen DOS-QUANT-Methodik in die Windows-Welt, und das ist ein ordentlicher. Und hoffentlich einer in die richtige Richtung. Dennoch, es wurde der neue Terminus "Zählungen" statt "Quantitative Auswertungen" eingeführt. Intuitiv hoffentlich leichter erfassbar.
Lange Erklärungen sind nicht populär und hier auch nicht nötig. Die zugehörigen Dateien, viele sind es nicht, fangen alle mit CT an, was für "CounT" steht.
h eingeben im Schreibfeld, um das Gesamtmenü zu bekommen, dann
Export, Listen, Tabellen anklicken, dann den neuen Punkt
Zählungen. Schon ist man drin.
Ein Menü erscheint, in der Aufmachung sehr ähnlich der Tabellenmethodik. Mit HILFE..HILFE..HILFE gibt es auch hier eine ausführliche Fassung, die am Ende einen Abschnitt für den neugierigen Experten enthält.
Selbstverständlich ist auch die Kategorien- und Teilfeldstatistik dabei - sonst wär's ein QUANTen-Rücksprung.
Alles ist anwendbar auf die Ergebnismenge sowohl wie auf die GesamtBank.
Wer NICHT die Konfiguration A.CFG einsetzt, muss ein wenig in die Parameter c-tags.xpr und cs-ubf.xpreingreifen, wenn die Breite der Kategorien nicht 2 und der Textanfang nicht die Position 4 ist. Die Dateien enthalten geeignete Kommentare.
1.3 ORDA und ALFA erweitert und überarbeitet (Online: h orda bzw. h alfa )
... bei Wahrung voller Kompatibilität mit den vorhandenen Daten. Zugehörige Dateien und wo sie liegen:
D-WRTF.APR --> DbDir (Version vom Verzeichnis ProgDir\DEMO2)
CAT.API --> DbDir (Version vom Verzeichnis ProgDir\DEMO2)
ORDA.RTF --> ProgDir\HELP (Das ist das Menü. Start mit: h orda )
ORDAHELP.RTF
CAT.FRM --> ProgDir (s. darin den Abschnitt [Bestellung], wo die
ViewListen aufgerufen werden)
AUSL.FLX --> ProgDir\FLEX (für ALFA, als Zugabe)
Löschen kann man die alten FLEXe: BESTELL, INVENT, ZEITRAUM, HEUTE, KONT, LIEF
Die Auswahl der Elemente Lieferant, Auftraggeber, Währung und Kontingent erfolgt jetzt über ViewListen, die von O-MKVIEW.FLX automatisch erstellt werden, wenn sie noch nicht existieren. Die Währungsliste ist ebenfalls ganz leicht zu ändern, alles vom Menü aus.
Im Bestell-Formular kann man bei diesen Elementen dann Alt+i geben, und statt des Index kommt dann die ViewListe!!!
Alles wird vom Menü ORDA.RTF gestartet. Die alten ORDA- und ORDER-Daten sind kompatibel! Keine Änderungen nötig. Unterschied zum alten ORDER: Kontingente werden nicht real-time aktualisiert! Per Menü ist es aber eine extrem leichte Übung, die Aktualisierung ad-hoc zu machen, wenn's gebraucht wird (Menüpunkt Kontingente sichten/berechnen).
Es empfiehlt sich, mit dem neuen CAT.API den Index zu erneuern. Nicht wegen ORDA, aber wegen der IdNummern von Stammsätzen, die jetzt zusätzlich in Reg. 9 indexiert werden. Sonst klappt die automatische Nummernvergabe für Stammsätze nicht.
Auch die Einfach-Ausleihfunktion ALFA wurde verbessert: jetzt können auch Signaturen ausgeliehen werden, die in hierarchischen Untersätzen stecken. Zum Aktivieren von ALFA gibt man ein: h alfa, dann anklicken: Ausleih-Funktion aktivieren.
(Es muss nur die Variable #uAL besetzt sein, dann ist ALFA aktiv.)
1.4 Passwortverfahren (Online: Supervisor-Menü, h super, dann Passwort)
Bisher konnte man den Zugang zu einer allegro-Bank nur per Betriebssystem absichern: Wer in das Novell- oder NT-System nicht reinkommt, hat ja eh keine Chance, und wer auf dem Datenbankverzeichnis kein Schreibrecht hat, kann kein Unheil an den Daten anrichten. Insofern war schon immer eine gewisse Sicherheit gegeben, und zwar mit wenig Aufwand. Mancher Systemverwalter möchte aber evtl. etwas weiter gehen und auch den EINSTIEG per a99 oder alcarta noch absichern, besonders dann, wenn der User eine hohe Berechtigungsstufe hat. Denn denkbar ist, dass jemand am PC des gerade zur Mittagspause gegangenen Users vorbeikommt und auf ein a99-Icon klickt. Schon ist er "drin". Jetzt kann man das verhindern. Bei einem Programm der Mächtigkeitsklasse von a99 kann das nicht verkehrt sein.
Außerdem: Man sollte den Nutzer daran hindern können, sich selber eine INI mit einer höheren Berechtigung zu machen oder eine vorhandene mit höherer Berechtigung zu benutzen. Seine tatsächliche Berechtigung muss daher mit der Passwortprüfung gleichfalls gecheckt werden. Anm.: alcarta funktioniert weiterhin ohne Passwortsicherung!
Wenn Sie die Methode standardmäßig anwenden wollen, gibt's nicht viel zu tun: (Das Einrichten der INIs ist viel mehr Arbeit)
2. Liste der Nutzernamen machen, d.h. je Nutzer eine möglichst
kurze Bezeichnung (am besten dieselbe wie beim Netzzugang)
Zu jedem Nutzer notieren, welche Berechtigungsstufe er/sie
maximal haben soll (siehe oben)
Wichtig: Mehrere Nutzer können dieselbe INI
nutzen, man muss nicht für jeden eine machen!
3. Datenbank mit Berechtigung 9 starten (gilt speziell nur hierfür; also die eigene INI vorher ändern)
4. h npw im Schreibfeld eingeben, Passwortmenü erscheint.
5. Jedem Nutzer sein Passwort geben. Dabei wird die Berechtigung
abgefragt, die er haben soll! Sie geht in das verschlüsselte Passwort
mit ein. Anschließend kann er jede INI mit dieser oder kleinerer
Berechtigung nutzen.
Achtung: Sich selber muss der Supervisor auch
einen Nutzernamen geben! Und dazu die Berechtigung 9.
Wenn Sie mehr wissen wollen, lesen Sie weiter. Die neue Methodik kommt mit zwei FLEXen aus:
npw.flx
erlaubt dem Supervisor das Vergeben von Passwörtern.
Kann nur mit Berechtigung 9 benutzt werden.
EMPFEHLUNG an den Systemverwalter: npw.flx
nur auf das eigene Arbeitsverzeichnis legen.
password.flx
ist die Prozedur, die den User nach seinem Passwort fragt
und ihn abweist, wenn's nicht stimmt (a99 stoppt abrupt).
Um wirksam zu werden, wird sie umkopiert
auf den Namen _psw.flx.
npw.flx richtet das automatisch
so ein.
Wenn _psw.flx nicht auf
einem der vorgesehenen Verzeichnisse liegt, wird kein Passwort abgefragt.
Aber:
Wenn sie auf ProgDir oder ProgDir\FLEX liegt, wird sie
bei JEDER Datenbank ausgeführt! Als Standort ist deshalbDbDir stark
zu empfehlen, und zwar nur bei denjenigen Banken, die wirklich passwortgesichert
sein sollen.
_psw.flx wird vor dem
START.FLX ausgeführt. Das ist "fest verdrahtet" (daher das '_' vor
dem Namen).
Alternative: an den START.FLX hinten anhängen mit
dem Befehl exec X password
Unterstützt wird die Anwendung durch den Hilfetext
npw.rtf.
Geben Sie also ein: h npw (Berechtigung
9 nötig).
Es gibt Möglichkeiten zur individuellen Anpassung.
Die Kommentare in den FLEXen npw
und _psw weisen darauf hin. Evtl.
wird man datenbankspezifische Veränderungen anbringen wollen.
Hinterlegt werden die verschlüsselten Passwörter
auf einem Verzeichnis PSW, das ans DbDir gehängt wird.
Was, wenn das Verzeichnis aus Versehen gelöscht
wurde? Dann Passwörter neu vergeben. Um wieder rein zu kommen, muss
der Supervisor vorher die Datei _psw.flx
wegnehmen oder umbenennen! (Geheimtip, falls er mal selber sein Passwort
vergessen hat.)
Jemand anders darf das nicht machen dürfen! Deshalb
die Empfehlung: Die Datei _psw.flx
gegen Verändern schützen.
Wenn das auf DbDir nicht geht: auf ProgDir oder ProgDir\FLEX
legen.
NICHT vorgesehen ist, dass Nutzer selber ihr Passwort
ändern! Diese zusätzliche Komplikation wäre nur dann nötig,
wenn personen-bezogene Daten in irgendeiner Weise beruehrt wuerden. Das
ist aber nicht der Fall.
Ein vertrauenswürdiger Systemverwalter muss sowieso
da sein, und der muss ohnehin alle Rechte haben und muss jeden Nutzer eintragen.
Die Frage wird kommen: Kann nicht die Berechtigung mit
dem Passwort zusammen so gespeichert werden, so dass die access-Eintragung
in der INI überflüssig würde? Nein, so soll's nicht sein.
Die Berechtigung, die für bestimmte Arbeiten gelten soll, muss in
der für solche Arbeiten vorgesehenen INI stehen, und die gilt dann,
auch wenn der Nutzer in Wahrheit eine höhere hat.
Da die Passwörter nicht entschlüsselt werden
können, muss der Systemverwalter ein neues vergeben, wenn eines vergessen
wurde.
(Wenn er sein eigenes vergessen hat, Geheimtip siehe
oben.)
Protokoll der Fehlversuche
Es wird, wenn man will, ein Protokoll über die Fehlversuche geführt. Einstellbar ist das in _psw.flx.
Der Name ist "FALSCH.LOG" auf dem DbDir (wo der normale User Schreibrecht hat). Wenn der User dort kein Schreibrecht hat, ist es sowieso nicht wichtig, ob er einen Fehlversuch macht!
Der Befehl access=... in der INI-Datei dient zum Setzen der Berechtigungsstufe des Nutzers. Hier ist zusammengestellt, welche Werte möglich sind und was für Berechtigungen damit jeweils verbunden sind.
Jede Berechtigungsstufe umfasst auch alle Rechte der jeweils kleineren Stufen.
0 | Kein Schreibrecht. Phrasen werden nicht gespeichert. |
1 | Schreibrecht nur in 1 Datei (INI-Befehl InputFile=n, n=1...255)
Phrasen werden gespeichert |
2 | Schreibrecht in allen Dateien (1...255) |
3 | Erweiterte Bearbeitungsrechte:
Globale Änderungen/Manipulationen/Löschungen Gesperrten Satz freigeben (Menü "Bearbeiten"). FLEXe starten mit "x ..." und "X ..." FLEX-Befehle "update" und "upload" ausfuehren |
4 | Sonderrechte:
Weitere Datenbank öffnen FLEX eingeben mit Ziffer im Schreibfeld (#uXi) Löschkontrolle uebergehen Fenstergrösse wird gespeichert (alcarta) Menüpunkt "Gesperrte Sätze" unter "Extras" |
5 | Supervisor-Rechte:
Speicherung auch wenn Zeitstempel falsch Signalfile wird ignoriert Hilfedateien speichern ADM und ORG-Menüs (in den Help-Dateien codiert!) |
9 | Passwort-Zuweisung |
31 | Sonderfall: Wird automatisch gesetzt. Sinnvoll nur |
bei Neuanlage einer Datenbank,
also in der 1. Sitzung.
1.6 Sonderzeichen ohne Maus : Alt+m
Ein weithin verspürter, gleichwohl selten artikulierter Wunsch ist das Eingeben von Sonderzeichen ohne Rückgriff auf die Maus.
Bevor der aufgestaute Frust mit Vehemenz über uns hereinbricht, haben wir uns zu einer Lösung aufgerafft. Denn in der Tat:
So bequem wie unter DOS mit Alt+w war's in a99 noch lange nicht, und in punkto Komfort hinter DOS zurückzubleiben, damit kann kein Windows-Programm am Markt bestehen. Da sagen einem die Altgedienten dann glatt ins Gesicht: "jaja, alles ganz schön mit diesem a99, aber es geht doch nix über PRESTO wegen der Schnelligkeit bei der Eingabe".
Wenn man jetzt im Schreibfeld Alt+m drückt
(bislang hatte das keine Wirkung) erscheint in der Anzeige die neue Datei
SPCHR.RTF. Der Cursor geht ins Anzeigefeld. Man fährt zu dem gewünschten
Zeichen, setzt die Schreibmarke direkt davor, dann nochmal Alt+m,
und das war's schon. Genauso schnell wie in PRESTO mit Alt+w. (Noch schneller
sind nur Phrasen, aber man kann nicht für jedes Sonderzeichen sich
eine merken.)
1.7.1 Volltextsuche in Ergebnismenge : Schreibweisen-Toleranz
Wenn per Suchbefehls-Eingabe eine Volltextsuche in einer Ergebnismenge veranstaltet wird, braucht man nicht mehr auf die Groß-Klein-Schreibweise sowie auf Umlaute zu achten. Eingabe von Müller, müller, Mueller und mueller sind gleichwertig, alle finden sowohl Mueller wie auch Müller. Nicht aber Muller. Ansonsten gilt dasselbe für Akzentbuchstaben.
Das ist dasselbe Verhalten, wie es schon in den ViewListen eingeführt wurde!
Benutzt werden dafür intern die p-Befehle der Index-Parameter, die zur Umcodierung der Indexeinträge dienen. Sowohl der Datensatz wie die Suchwort-Eingabe werden vor Ausführung der Suche umcodiert, wovon man natürlich nichts sieht.
Tip: Das Auslösen der Volltextsuche in der Ergebnismenge geht am schnellsten im Feld "Suchbefehl", wenn man dort "+" und dahinter das Suchwort eingibt. Dann werden die kompletten Sätze der aktuellen Ergebnismenge durchsucht.
Beispiele:
+klavier Sätze, in denen "klavier" oder "Klavier" vorkommt
+#20,klavier ... in denen es im Feld #20 vorkommt
+#2,klavier ... in denen es in einem Feld der Gruppe #2 vorkommt
NEU auch: Die V14-Referenzen in den Datensätzen werden vor der Volltextsuche aufgelöst! Bisher war das nicht der Fall.
Beim "Suchen und Ersetzen" (im Menü "Global") ist jedoch weiterhin exakte Eingabe angesagt!
1.7.2 Komfortable Suche jetzt auch in Kurzliste
Obgleich und wiewohl man ja eine Volltextsuche in den kompletten Datensätzen veranstalten KANN, siehe oben, und obzwar dann dabei immerhin eine neue Ergebnismenge zustande kommt, hat es dennoch seinen Reiz, auch in der Kurzliste, wenn und während diese sichtbar ist, stante pede suchen zu können. Eben genau wie in einer ViewListe, vor und zurück. Langer Rede kurzer Sinn: das geht jetzt. Suchwort eingeben in dem kleinen Feld "Nr./Find" unten rechts. Schreibweise (groß/klein, Umlaute) ist egal.
Für Kenner: genutzt werden die p-Befehle in den Indexparametern, um die Zeichen für den Vergleich zu normalisieren.
Gesucht wird nur in den Kurzzeilen, nota bene, d.h. man findet nur Wörter (genauer: Zeichenfolgen), die darin vorkommen.
Ob man dafür was parametrieren muss? Ausnahmsweise nicht.
1.8 UIF... darf jetzt auch auf DbDir liegen (Auch für CockPit !)
Interne Umstellungen haben es ermöglicht, jetzt auch die UIF-Dateien auf das Datenverzeichnis zu legen. Interessant ist das z.B. für die Überschriften der Register- und Find-Fenster (Zeilen 350 ff), die man jetzt datenbankspezifisch anpassen kann.
Die Reihenfolge bei der Suche ist jetzt DbDir / Lokal / ProgDir
Es war bemerkt worden, dass dieser arg begrenzt ist. Die Formulare werden im Phrasenspeicher gelagert, daher muss man diesen genügend groß machen (Befehl mP in der CFG-Datei, empfohlen: mP4000 ). Es kommt jetzt eine Fehlermeldung ("Kein Platz mehr für Phrasen"), wird die Grenze überschritten, bzw. "Too many forms", wenn es mehr als 50 Formulare sind.
Die Funktionsweise der Formulare wurde weiter verbessert, insbes. für Teilfelder. (Beispiele: MARC.FRM und BOL.FRM).
Weil die Frage immer wieder gestellt wird: eine Flexibilisierung
der Formulare (freie Gestaltbarkeit, mehr als 14 Felder oder weniger) wäre
enorm viel schwieriger zu realisieren und wird sicher in näherer Zukunft
nicht kommen.
1.10 Vorspiegelungen : Virtuelle Register
Registerzeilen für die Anzeige manipulieren in a99/alcarta (nicht in PRESTO)
Mehrfach vehement gefordert: Jetzt kann das, was man im Index zu sehen bekommt, anders aussehen, als das, was tatsächlich gespeichert ist. Im Normalfall ist es dasselbe. Wenn man dies nutzen will, muss man in den Indexparametern einen Fußabschnitt anlegen! Der kommt unterhalb des Hilfsabschnitts (PV-Abschnitt) zu stehen und muss mit einer Zeile
F
beginnen. Dort muss man die Variable #u1 nach Wunsch manipulieren. Der Output, den man da erzeugt, ist dann die sichtbar gemachte Registerzeile. Die erste Textposition von #u1 ist die Registerziffer, 1,2,...9, bzw. : und ; für Reg. 10 und 11.
Ausgeführt wird das im Moment des Zugriffs, nicht beim Indexieren!!! Die Indexdatei verändert sich in keiner Weise!!! Die Nutzung mit Classico wird also nicht eingeschränkt, nur sind dort die virtuellen Register unsichtbar.
Ob sich das auf das Zeitverhalten spürbar auswirkt, muss man mal abwarten. Mit Sicherheit dann, wenn man in dem Abschnitt auch noch wieder Nachladungen veranstaltet! (Was schon geschehen ist...) Also: Nutzung auf eigene Gefahr.
Wenn man also schreibt:
F
#u1 y0 b1
#+#
sieht das virtuelle Register genauso aus wie das reale oder wenn man gar nichts macht.
Die voraussehbare nächste Forderung wurde gleich mit realisiert:
Man kann zwischen beiden Darstellungen umschalten:
Alt+u im Indexfenster. (Das ist ein unsichtbarer Button.)
Die ERRORLEVEL-Setzungen bei einem abrupten Programmabbruch, vor allem in der Startphase, wurden jetzt präzisiert. Bislang
kam immer 10 heraus. Bei regulärem Ausstieg ist es ein sehr hoher Wert, nicht null, aber das liegt an Windows.
Jetzt gilt (ausnutzbar in Batchdateien, in denen a99 aufgerufen wird):
Ausstiege ohne Fehlermeldung
9 STOP per FLEX
10 Keine Zugriffsrechte
11 In der Dateiauswahl (INI/cDX) nichts ausgewaehlt
12 Ausgewaehlte INI abgelehnt
Ausstiege mit vorheriger Fehlermeldung in einem [OK]-Fenster
50 Signaldatei steht auf Stop
51 Abfrageliste zu lang, oder andere CFG-Fehler
52 TBL fehlt / Datenbank existiert nicht oder fehlerhaft
53 Fehler in Indexparametern
54 Problem mit Anzeigeparametern
55 D-W0.APR oder O.APT nicht gefunden
1.12 OPUS3 : Dateienkatalog mit neuen Funktionen
Auf dem DOKU-Menü (h eingeben, Sie erinnern sich?) findet man ganz unten den Flip OPUS : Der Dateienkatalog.
Es wird dann automatisch eine Datenbank der in Ihrem System vorhandenen Dateien angelegt - oder gestartet, wenn sie schon existiert. Diese kann auch als Plattform für die Bearbeitung der auf einem PC vorhandenen Dateien benutzt werden. Dafür werden Sonderfunktionen angeboten, mit denen die an einem Tage veränderten Dateien eingesammelt und verpackt werden können, auf einem anderen PC dann wieder ausgepackt und an die richtigen Stellen kopiert. Hilfetexte erklären ausführlich die Funktionen.
2. a99/alcarta : HELP-Technologie
Kurzfristig konnte aber nur so vorgegangen werden:
2.1 Wie kann man RTF-Dateien bearbeiten?
2.2.1. Markierung der Flips im Text (Online: h flip )
Das "unsichtbare Leerzeichen", Code 160, war schlecht, denn WordPad speichert es, aus unbekanntem Grund, manchmal als \~ und manchmal als normales Leerzeichen. Beim Einlesen kann es ebenfalls passieren, dass ein solches Zeichen im Anzeigefeld als normales Leerzeichen landet - den Unterschied sieht man nicht. In solchen Fällen funktioniert der Flip dann nicht mehr.
Ein unsichtbares Funktionszeichen ist in jedem Fall etwas sehr Missliches und Problemträchtiges, das ist klar.
Lösung:
a) Bisher schon möglich: [fliptext] : eckige Klammern zur Markierung des Flips verwenden.
b) Jetzt neu: `fliptext` (Ein accent grave vorn und hinten) Dieser wird als solcher derart selten gebraucht, dass wir ihn kurzerhand für diesen Zweck entfremden. (Die Akzentbuchstaben mit diesem Akzent sind davon unberührt!!)
Dieses Zeichen wird von Wordpad und Winword unverändert eingelesen und gespeichert. Aber a99 macht jetzt beim Einlesen daraus den Code 160, beim Herausschreiben aber wieder einen ` . Jetzt sieht man immer beim Bearbeiten sofort, wo die Zeichen sitzen und ob sie richtig sitzen.
Empfehlung: eine alte Hilfedatei zuerst mit h name.rtf einlesen, dann mit "Datei | Anzeige speichern als ..." sofort wieder speichern, dann werden die Codes 160 durch ` ersetzt.
Geben Sie zum Vergleich einmal h super ein und dann h super.rtf. Schon sehen Sie die Unterschiede.
(Ohne .rtf wird der Code ` nicht sichtbar - dafür aber wirksam)
Oder h help und dann h help.rtf
Bei Eingabe mit .rtf wird außerdem der Hintergrund gelblich, und das heißt: Achtung, Bearbeitungszustand.
2.2.2. Die Flip-Zeilen für die Verknüpfungen
Diese stehen am Ende der Hilfedatei und beginnen jeweils auf eigenener Zeile mit "?". Beim Abspeichern machen manche WordPad-Versionen daraus "\par ?", andere dagegen hängen hinten ein "\par" an, und das "?" steht dann am Zeilenanfang.
Lösung:
a99 wird mit beiden Varianten fertig: Wenn die Zeile mit einem ? beginnt, wird sie genauso als Flipzeile interpretiert wie wenn sie mit "\par ?" beginnt. Außerdem wird "\par" am Ende der Zeile weggenommen, um den eigentlichen Flip-Inhalt nicht zu verändern.
Weiterer Vorteil: Das Zeichen ` ist so breit wie ein Leerzeichen, deshalb wird das Erscheinungsbild des Textes dadurch nicht verändert, d.h. man sieht auch in WordPad den Hilfetext genauso, wie er dann in a99 erscheinen wird.
2.2.3. Backslash in Flip-Zeilen
Bisher musste man einen Backslash in einer Flip-Zeile doppelt setzen. Das funktioniert weiterhin.
Wordpad kommt sonst nicht klar, wenn eine Flip-Zeile nur einen einfachen \ enthält, denn es interpretiert immer das, was hinter einem \ folgt, als RTF-Befehl, und wenn's keiner ist, entfällt alles bis zum nächsten Leerzeichen.
Es gibt jetzt noch eine zweite Lösung: In Flip-Zeilen statt \ das Zeichen ` (accent grave) verwenden.
Auch in den Flips hat der ` bisher keine Bedeutung und dürfte höchst selten vorkommen. Die unter 1. beschriebene Funktion kommt in einer Flip-Zeile logischerweise nicht vor, deshalb kann hier der ` eine andere Wirkung haben, das macht nichts aus. Beim Einlesen ersetzt a99 hier den ` durch \ .
Sonderfall: Wenn ein \ in einer Flip-Zeile in einem Pfadnamen gebraucht wird: `` setzen, also das Zeichen ` doppeln.
2.2.4. Umlaute in Flip-Zeilen (und andere Sonderzeichen oberhalb 127)
Wordpad speichert z.B. \'fc statt ü, gebraucht wird aber das ASCII-ü, weil innerhalb des a99-Arbeitsspeichers mit ASCII gearbeitet wird. (Daran ist vorläufig nichts zu ändern!) Bisher musste man, umständlich, nach Bearbeiten einer RTF-Hilfedatei mit einem DOS-Editor per Hand die Umlaute in den Flipzeilen in ASCII-Codes umsetzen.
Lösung: Automatisierung: ein neues, internes Unterprogramm. Jetzt entfällt der manuelle Eingriff. Die Umsetzung ANSI->ASCII macht das Programm selber. Allerdings vorerst nur für die deutschen Umlaute und ß, nicht für é, ô, à u.dgl.
Die Bearbeitung von RTF-Dateien mit WordPad sollte nun keine Probleme mehr bereiten.
Aber man kann jetzt unbesorgt die Dateien auch im Anzeigefenster bearbeiten
und wieder speichern (über Menü "Datei | Anzeige speichern als...
"). Man braucht nur die Datei mit vollem Namen aufzurufen, also z.B.
h adm.rtf statt
h adm.
Dann sieht man auch die Flip-Zeilen, die dann auch beim
Abspeichern korrekt erhalten bleiben. Dort schreibt man die Umlaute ganz
normal hin, das Programm kümmert sich um die korrekte Codierung. Zur
weiteren Unterstützung hat das Kontextmenü des Anzeigefensters
ein paar neue Punkte erhalten. Insbesondere das Anlegen eines neuen Flips
wird dadurch nun zu einem Klacks: den intendierten Flip-Text markieren,
rechte Maustaste, f .
Tip: Braucht man andere Schriftattribute als die, die man mit den Mitteln des Anzeigefensters erstellen kann, dann kurz WordPad starten, den gewünschten Text mit den gewünschten Attributen dort schreiben, dann mit Cut-and-Paste kopieren.
Aber VORSICHT: zum Bearbeiten immer die Datei mit .rtf aufrufen. WENN der Text so geladen wurde, ist der Hintergrund jetzt hellgelb, man erkennt also sofort, dass man sozusagen im Bearbeitungsmodus ist. Und man sieht dann die Flip-Steuerzeichen ` .
2.3 ViewListen : Hilfedateien automatisch einblenden lassen
In ViewListen (Dateityp .vw) kann jetzt am Anfang jeder Zeile auch der Name einer Hilfedatei stehen, und zwar mit "h " vorweg und | dahinter. (Bisher passierte nichts, wenn da etwas anderes als eine Satznummer stand)
Das sieht z.B. so aus:
h flex | FLEX-Befehle
Wird diese Zeile angewählt, erscheint die Hilfedatei FLEXGER.RTF, so als ob man h flex im Schreibfeld gegeben hätte.
Beispiel:
Im Schreibfeld von a99 eingeben: h flex
und dann auf "Funktionsübersicht" klicken.
Es erscheint die ViewListe flex.vw, und Sie bemerken dann unmittelbar, was passiert: kaum wählt man eine Zeile an, erscheint im Hintergrund die Hilfedatei zu dem betreffenden Punkt. Schauen Sie in die Datei flex.vw, dann sehen Sie das Muster.
2.4 Verlautbarungstexte im Hilfepaket
Die Texte der E-Mail-Verlautbarungen ab Nr. 126 sind jetzt im Hilfepaket enthalten. Dazu gehört eine ViewListe vb.vw. Diese wird geladen über einen neuen Menüpunkt in DOKU.RTF. Man braucht nur einzugeben:
h
dann kommt ja DOKU.RTF, und oben rechts ist der Punkt Verlautbarungen.
Möglich ist auch der Direkt-Aufruf:
x var P "help\\vb.vw"\View
aber wer wird das jedesmal eingeben wollen? (Man kann es auf einen Alt-FLEX legen).
Nebenbei hat man hiermit noch ein neues Beispiel, wie man ein Menü von Hilfedateien präsentieren kann. Diese sind zudem gar keine RTF- sondern schlichte ASCII-Textdateien. Viel weniger aufwendig als ein RTF-Menü, trotzdem effektvoll.
Tip: Wer ASCII-Texte in einer anderen Schriftart sehen will, muss in die Datei HELPHEAD.RTF eingreifen. Die hat am Ende diese Zeile:
... {\cb6 \deflang1031\f1 \fs18 \ql
Die Angabe \f1 ist für die Schriftart verantwortlich, Sie sehen ganz oben in der Datei, welche anderen Schriftarten eingestellt werden können.
Hinweis: Courier braucht mehr Platz als die Schrift ALLEGROLG und nur letztere hat die OSTWEST-Sonderzeichen!
Im Allgemeinen ist eine nichtproportionale Schrift für ASCII-Texte vorzuziehen! Da ist die Auswahl nicht groß.
2.5 Hilfetext speichern
Der Button [Speichern] ruft jetzt die Funktion "Anzeige speichern" auf (Menü "Datei"), wenn gerade eine Hilfeseite auf dem Schirm steht. Voraussetzung: access=5 in der INI-Datei.
Das erleichtert das Bearbeiten von Hilfetexten.
Der FLEX-Befehl help liefert den Zustand no, wenn die angeforderte Hilfeseite nicht gefunden wurde, d.h. mit if no ...
kann man das abfangen. Auch dann kommt no heraus, wenn eine Suche mit help =... oder help >... gemacht wurde, d.h. man kann gezielt auf das Vorkommen oder Nichtvorkommen von Zeichenketten im Anzeigefeld reagieren (auch wenn da kein Hilfetext steht!)
set c1
hat jetzt auch zur Folge, dass bei Abspeicherung des Anzeige-Inhalts mit file ... der Text in ANSI- statt ASCII-Codierung abgespeichert wird. (Besser bei anschließender Übernahme durch Windows-Programme)
3. a99/alcarta : FLEX-Technologie (Online FLEX-Doku: h flex)
Zwar ist es eigentlich der falsche Weg, mit FLEX wiederum eine neue Sprache eingeführt zu haben. Besser wäre, man hätte alles auf XML und die nutzerseitige Programmierung auf Perl oder Python umgestellt, ferner konsequente Client/Server-Technik mit relationaler Datenbankgrundlage und nutzerseitig nur noch Browser-basierte Schnittstellen.
Das erwies sich als kurz- bis mittelfristig nicht durchführbar, wie schon berichtet und auf dem Expertentreffen dargestellt, nachzulesen unter
Jetzt ist es soweit, dass wir empfehlen können, sich als Einsteiger zuerst mit dem FLEXen zu befassen. Erst wenn man da an Grenzen stößt, wird man parametrieren lernen müssen (Kap10). Für das Indexieren muss man das allerdings allemal.
Erweiterte, verbesserte FLEX-Dokumentation (Online: h xa )
Es gibt knapp 80 neue RTF-Dateien, deren Namen jeweils mit "x" beginnen. Diese hat mit viel Fleiß Kollege R. Bartling (Schleswig) erstellt. Wir haben daran noch etwas Kosmetik und einige Ergänzungen vorgenommen.
Die Übersichtsliste flex.vw stammt von Kollegin A. Tews, die auch noch Beispiele beigesteuert hat. Die Kollegen Berger und Fischer (Berlin) haben alles gründlich geprüft.
Die drei bisherigen FLEX*.RTF-Dateien haben wir inhaltlich mit den neuen Dateien abgeglichen und abgestimmt. Die neuen sind ausführlicher und enthalten mehr Beispiele, die alten sind für einen zusammenhängenden Ausdruck besser.
TiP: Wenn man FLEXt, öffne man sich ein eigenes a99-Fenster, z.B. mit der Demo-Datenbank, nur zu dem Zweck, darin die Doku zu benutzen. Dann geht einem das nicht durcheinander mit dem Testen an der eigentlichen Datenbank.
TiP zum Bearbeiten von Hilfedateien:
Geben Sie ein:
5 var X ".rtf"\help
Dann können Sie, wenn eine Hilfedatei angezeigt ist, mit Alt+5 sofort eben diese RTF-Datei zum Bearbeiten laden lassen.
3.1 Variablen-Namen in FLEXen
Generelle Empfehlung: Viele FLEXe im Lieferpaket verwenden als interne Variablen die mit den Namen #uvX und #uwX (X = beliebiger Großbuchstabe). Wir nehmen an, dass solche Namen bisher nicht eben häufig vorkommen, und empfehlen, sie in Zukunft in Exportparametern zu vermeiden, damit keine Kollisionen auftreten. Probleme kann es aber NUR geben, wenn es eine solche Variable gibt, die von einem Satz zum nächsten erhalten bleiben muss, nicht wenn sie nur während der Bearbeitung eines Satzes genutzt wird! Solche Fälle sind sicher sehr selten. Wir suchen aber nach einer besseren Wahl. Statt eines Buchstabens könnte z.B. '_' oder '|' benutzt werden. Aber so etwas wie #u_X oder #u|X sieht noch kryptischer aus als #uvX.
3.2 System-FLEXe (Online-Übersicht: h FLEX geben, dann System-FLEXe anklicken)
Die bisher üblichen Batchdateien RS.BAT (bzw. bei ALCARTA AS.BAT) und DOOR.BAT wurden durch FLEXe ersetzt.
ABER: Wenn diese neuen FLEXe fehlen, bleiben die Batche weiter gültig und werden dann wie gewohnt gestartet. Man MUSS also nicht unbedingt aktiv werden! Aber: Fehlen diese FLEXe und die Batchdateien, können die Funktionen nicht ausgeführt werden!
ABER: RS.BAT und DOOR.BAT müssen jetzt auf dem ProgDir liegen! (Bei normaler Installation kommen sie da hin.)
Zusätzlich wurden die Namen mehrerer systembedingter FLEXe durch Voranstellen eines '_' geändert. Auch hier gilt: Fehlen diese Namen, werden die alten benutzt, ohne '_'.
Hier nun die Liste der neuen bzw. umbenannten FLEXe:
Im _endflx.flx
kann man sogar verhindern, dass das Programm beendet wird: man setze diesen
Befehl ans Ende:
var "no". Dann wird das Programm nicht beendet. Man sollte das nur unter wohlerwogenen Bedingungen nutzen.
Mitgeliefert wird eine Datei endeflex.flx; diese kann man umbenennen in _endflx.flx, um sie zu aktivieren, sonst läuft alles wie gehabt!
3.3 PV-FLEX
Das Einrichten von Programmierten Validierungen ist nicht Jedermann's Sache, muss man doch dafür die Exportsprache meistern. Nicht diese abzuschaffen, aber ihre Notwendigkeit zu reduzieren, ist erklärtes Ziel der Entwicklungsarbeit.
Jetzt gibt es, zumindest für den wichtigen Punkt direkt vor dem Speichern des Datensatzes, den PV-FLEX. Ist ein solcher vorhanden, wird er bei Druck auf [Speichern] ausgeführt.
Ansonsten kann man im PV-FLEX jede erdenkliche Aktion durchführen, um den aktuellen Satz vor dem Speichern zu prüfen und zu behandeln. Der Name des PV-FLEX ist beliebig. Als Standort kommen die für FLEXe insgesamt möglichen Verzeichnisse in Frage, je nach Gutdünken.
Und so wird der PV-FLEX aktiviert: in der INI-Datei gibt es den Befehl SaveAsk=0/1, wo bisher nur die Werte "0" (nicht fragen) bzw. "1" (immer fragen) möglich waren. Diese Werte bleiben unverändert möglich, aber jetzt kann man auch schreiben:
SaveAsk=2
Dann muss es einen FLEX namens onput.flx geben (siehe unten). Der wird ausgeführt, bevor gespeichert wird.
Das eigentliche Speichern muss dann in Form eines put in den FLEX eingebaut sein, in der Regel gefolgt von display\show rec, um eine Erneuerung der Anzeige auszulösen.
Weil aus einem FLEX heraus auch externe Programme gestartet werden können, ist es ganz klar, dass diese neue PV-Möglichkeit noch mächtiger ist als die alte (die unverändert bestehen bleibt).
Im Vergleich mit relationalen Datenbanken ähnelt diese Methode dem sog. "Trigger"-Konzept. Dieses ermöglicht bei RDBMS, dass die Datenbank bei jeder Veränderung gewisse Bedingungen prüft und dann in bestimmten Fällen programmierte Aktionen durchführt.
3.4 On-FLEXe : Flexibilisierung wichtiger Kernfunktionen
Es gibt 7 neue FLEXe mit festgelegten Namen, die an festgelegten Punkten in Aktion treten, wenn sie existieren - wenn nicht, dann läuft einfach nur die ganz normale Funktion ab. D.h. wer diese Funktionen nicht modifizieren will, kann alles so lassen wie es ist. Im Gegensatz zu den System-FLEXen dürfen diese also fehlen.
Die fünf festgelegten FLEX-Namen sind diese, jeweils beginnend mit on, um anzuzeigen, dass sie an definierten Punkten aktiv werden:
(ein Anklang an JavaScript)
Name Ereignis
--------------------------------------------------------------
Potentiell das mächtigste ist wohl onerror.flx weil man sich damit ein eigenes Befehlssystem schaffen kann.
Wer sich keinen dieser FLEXe anlegt, für den ist alles wie bisher. Neu sind aber die Hilfetexte onnew.rtf und oncopy.rtf, die dann
einiges über die möglichen Aktionen verraten, wenn man einen neuen Satz angelegt hat. Bisher war da nur ein leeres Anzeigefeld.
Eine Anwendung für onerror.flx ist folgende, die mit zu der Idee beigetragen hat:
Es gab im DOS-Programm PRESTOG die Editorfunktion B. Wenn man B81 eingab, wurde Feld #81 in eine Datei geschrieben und der X-Editor aufgerufen. Bei Rückkehr wurde die Datei wieder eingelesen. Damit konnte man längliche Kategorien extern bearbeiten. Sonderfunktion war dabei, dass eine Leerzeile zum Einfügen eines Absatzzeichens in den Text führte (DOS-Code 20, Strg+t). Dieses lässt sich nun nachbilden! D.h. wenn man B81 im Schreibfeld eingibt, kann etwas ganz ähnliches ausgelöst werden. Dazu gibt es diese Dateien:
onerror.flx
bedit.flx
e-e.apr
Wenn man Bnnn eingibt, wird also onerror.flx aufgerufen, und die Eingabe steht dann in #uxE. Die Kommentare in den drei Dateien sind ausreichend für das Verständnis, wenn man das Verfahren anwenden will, daher muss hier nicht alles nochmals beschrieben werden.
Voll im Trend : Einzelklick statt Doppelklick
Ein neuer FLEX-Befehl setzt den Klick-Modus für die Flips:
set f1/f2/f0
Standardeinstellung ist f1, der Einzelklick - die Mehrheit scheint es so zu wollen.
Immer ;wenn man eine neue Programmiersprache erfindet, kann man sich auf eines verlassen: es kommen Momente, wo nach einer Unterprogrammtechnik zuerst gefragt, dann gerufen und zuletzt vehement verlangt wird.
Soweit ist es auch mit FLEX gekommen, und es wurde eine Unterprogrammtechnik realisiert.
Eines muss gleich gesagt werden: verschachteln kann man die Unterprogramme nicht, also kein weiteres UP aus einem bereits laufenden heraus aufrufen. Dann müsste intern mit einer Rekursionstechnik gearbeitet werden, was erheblich aufwendiger wäre als die jetzt realisierte Lösung. Mit etwas Phantasie kann man aber durchaus ohne derartige Komplexität auskommen. (Schleifen kann man ja auch, mit Umsicht, ohne UP realisieren: mit Rücksprüngen.)
Man kann mit call externe Programme in einem UP aufrufen. Es macht aber keinen Sinn, im UP eine andere FLEX-Datei mit exec aufzurufen, denn dann würde return nicht funktionieren. Daher wurde das blockiert.
Es gibt nicht, wie in den Export- und Importsprachen, eine Klammer zur Eingrenzung des UP. Ein UP beginnt mit einer ganz normalen Sprungmarke. Es endet mit dem neuen Befehl return, der ignoriert wird, wenn er im normalen Ablauf erreicht wird. Aufgerufen wird das UP mit perform statt mit jump. Ein UP kann Sprungmarken enthalten, es kann auch von außen auf solche gesprungen werden. Ein UP kann mehrere Endpunkte haben, d.h. der Befehl return ist unabhängig von der Anfangs-Sprungmarke. Das UP kann an jeder beliebigen Stelle stehen, also auch oberhalb des Aufrufs.
Folgendermaßen sieht die Sache schematisch aus:
<befehle...>
...
Unterprogramm upro aufrufen
perform upro
wenn es fertig ist, geht es
hier weiter:
<weitere befehle>
end
Hier kommt das Unterprogramm:
:upro
<befehle>
Ruecksprung
return
Die Marke :upro kann also auch mit jump angesprungen werden, dann hat "return" keine Wirkung.
Vor Endlosschleifen muss man sich selber in Acht nehmen, wie in jeder Programmiersprache und wie auch bei jump.
Beispiel 1: Übergabe des Kategorie-Inhalts an das UP
Manchmal muss man mehrere Kategorien abarbeiten und den Inhalt jeweils auf dieselbe Art behandeln. Wenn man den Kategorie-Inhalt an ein UP übergeben will, geht das am einfachsten per iV:
var #nnn
perf upro
Im Unterprogramm :up hat man also dann den Inhalt von #nnn in der iV. Wenn aber im Unterprogramm die Kategorienummer selbst gebraucht wird, etwa um daran etwas zu verändern? Dann macht man es so:
Beispiel 2: Übergabe der Kategorie-Nummer an
das UP
Kategorienummer in iV speichern
var "#nnn"
Unterprogramm :upro aufrufen
perf upro
...
und in :upro dann:
:upro
die per iV uebergebene Kategorienummer
in #upp zwischenspeichern:
ins #upp
Inhalt der betr. Kategorie in
iV kopieren: (var ohne cstring!)
var
Diesen Inhalt dann in #uin speichern
ins #uin
jetzt kann man #uin beliebig
verändern
...
Kategorienummer + veränderten
Inhalt in iV kopieren
var #upp " " #uin
diese komplette Kategorie wieder
in den Satz einfuegen:
ins
fertig, upro beenden (weiter
geht's oben unter dem Aufruf "perf upro")
return
Wichtig ist hier: der Befehl var ohne nachfolgenden cstring nimmt den Inhalt der iV und interpretiert ihn als cstring. Wenn also z.B. in der iV steht: #40 dann bewirkt var, dass man den Inhalt der #40 in die iV bekommt.
Beispiel 3: Bearbeitung aller Kategorien durch ein UP
Manchmal will man alle Kategorien des Satzes hintereinander
verarbeiten, ohne zu wissen, welche jeweils belegt sind.
Das geht nach diesem Schema: (mit den neuen Sondervariablen
k0 und k1)
erstes Feld in die iV kopieren:
var k0
perf up
:loop
nächstes Feld
var k1
if "" jump ende
perf up
jump loop
:ende
...
:up
Verarbeitung der iV, die jetzt
den Kategorietext enthält
(und zwar einschl. Kategorienummer)
...
return
3.6 Neue Besondere Variablen für die Befehle var und wri
Zugriff auf die Kategorien:
(vgl. Sonderkategorien #u0k, Handbuch S.193)
k0 Anzahl Kategorien des aktuellen Satzes
k1 Inhalt der ersten Kategorie
k2 ... der nächsten
k3 ... der letzten
k4 ... der vorigen
Und ganz analog Zugriff auf die Anzeige-Zeilen:
z0 Anzahl Zeilen im Anzeigefeld (egal, was da drin steht)
z1 Inhalt der ersten Zeile (in ASCII-Codes)
z2 ... der nächsten
z3 ... der letzten
z4 ... der vorigen
Der Inhalt der internen Variablen ist dann in jedem Fall ASCII!
Wenn man also schreibt (im Schreibfeld)
x var z3\message
dann kommt die letzte Zeile, aber wenn sie Umlaute enthalten könnte, schreibt man besser:
x var z3\ansi\mes
Wenn man dagegen den Inhalt in eine Kategorie kopieren will, ist es so richtig (denn da muss es ja ASCII sein):
x var z3\ins #nnn
Bei k2, k4, z2, z4 kann man anschließend mit if no ... checken, ob es noch eine nächste bzw. vorige gab; wichtig für Schleifen! Z.B.
...
var z2
if no jump ende
...
Und noch 4 weitere Variablen für einige seltene Zwecke:
g Zeile im Index, die zuletzt benutzt wurde bzw. Name der letzten Ergebnismenge
G Pfad der LogDatei (LogName-Befehl in INI, DOS-Option -L) sonst leer (wenn normaler Name)
y abweichender Name der Indexparameter (InxParam in INI, falls von B abweichend) sonst leer (wenn normaler Name) (DOS-Option -I)
Y Pfad der Indexdatei (InxName-Befehl in INI, DOS-Option -y) sonst leer (wenn normaler Name)
TIP:
Wenn man solche Variablen prüfen will, im Schreibfeld z.B. eingeben:
x var g\mes
schon sieht man den Inhalt in einer Meldungs-Box.
Damit man sieht, wie die Besonderen Variablen ki und zi in Schleifen eingesetzt werden, folgen zwei Beispiele:
Beispiel 4: Kategorien des Satzes im Abstand von 0,2 sec in der Anzeige erscheinen lassen
Man will alle Kategorien des aktuellen Satzes in der Anzeige erscheinen lassen, im Abstand von 0,2 Sekunden:
(Das n steht jeweils für den Zeilenvorschub (neue Zeile) hinter dem Kategorietext)
erste Kategorie -> interne Variable,
und in ANSI wandeln:
var k1 n
ansi
anzeigen
sho IV
sleep 200
:loop
nächste Kategorie:
var k2 n
wenn es keine weitere gibt:
if no jump ende
ansi
zur Anzeige ergänzen (ohne
+ würde sie überschrieben)
sho +IV
sleep 200
jump loop
:ende
mes Das war's
Beispiel 5: Anzeige aller Zeilen der aktuellen Anzeige, die "xyz" enthalten
Es sollen alle Zeilen aus der aktuellen Anzeige herausgesucht werden,
die das Wort "xyz" enthalten. Dann diese Zeilen insgesamt zeigen. Dann
muss man die betr. Zeilen zuerst in eine Datei schreiben, die man anschließend
mit h-Befehl anzeigen lässt. (Man könnte statt dessen auch die
Anzeige in eine Datei schreiben lassen, diese mit open
öffnen, mit get die Zeilen
einlesen und auswerten, dann mit "show +IV" anzeigen!)
open x match.txt
var z1
ins #uzz
if %xyz% write #uzz n
:loop
var z2
ins #uzz
if no jump ende
if %xyz% write #uzz n
jump loop
:ende
close x
help match.txt
del match.txt
3.7 Befehle für Offline-Daten (Online: h xfirst etc.)
In FLEX fehlten bislang noch Möglichkeiten des Umgangs mit Offline-Daten.
Was IST das überhaupt genau? Ausführlich informiert darüber ein Hilfetext: Geben Sie h off ein. In Kürze:
Im sog. "Offline-Speicher" sammeln sich alle Datensätze, die während einer Sitzung bearbeitet wurden. Hinzu kommt ggfls. diejenige Datei, die bei Start schon eingelesen wird (per Befehl Offline=... in der INI) und weitere Offline-Dateien, die man innerhalb einer Sitzung über das Menü "Datei | Weitere Offline-Datei" eingelesen hat.
Das kann ein hübsches Sammelsurium werden, aber das Program merkt sich genau, wie der Status eines Satzes ist (Mit dem Button [Wechseln] kann man in solchen Fällen zwischen dem aktuellen (bearbeiteten) und dem gespeicherten Satz hin- und herschalten. Leicht zu merken: nur Sätze mit grünem Hintergrund sind gespeicherte Datenbanksätze.
Über das Menü "Extras" kann man sich die verschiedenen Teilmengen der Offline-Datei zeigen lassen, insbes. die "In Bearbeitung" befindlichen. Über "Datei | Alle bearb. Daten speichern" kann man gezielt diese Datensätze speichern lassen, so dass man nicht in Gefahr gerät, die Übersicht zu verlieren oder das Speichern korrigierter Sätze zu vergessen, denn am Sitzungsende wird geprüft, ob es noch solche Sätze gibt.
FLEX hat bisher keine Funktionen für die Offline-Daten gehabt, bis auf "show Q" zur Auslösung des Buttons [Q : Daten in Bearb.]
(gleichwertig ist "find offline", soll aber abgeschafft werden) Jetzt kommen folgende hinzu:
first off / last off
next off / prev off
jeweils verkürzbar zu fir o, nex o usw. Dann wird der betr. offline-Satz geladen (aber nicht gezeigt, dazu muss man disp ergänzen).
Und gleichfalls neu:
erase off
Damit wird der offline-Speicher auf Null gesetzt. Das sollte man nur anwenden, wenn keine in Bearbeitung befindlichen Sätze mehr da sind! Zur Sicherheit kann man vorher dies machen: (NEU)
save edit
um automatisch solche evtl. noch vorhandenen Daten speichern zu lassen.
Anschliessend, nach dem erase off, kann man mit
read file dateiname
eine neue Datei des Typs .alg oder .adt einlesen lassen, um diese dann mit den Befehlen first, next, ... durcharbeiten zu können etc.
Wohlgemerkt: Die Daten werden nicht Satz für Satz eingelesen, sondern die ganze Datei auf einmal!! Nur die Durcharbeitung findet
dann satzweise statt, eben mit next off.
Damit hat man nun Möglichkeiten der automatisierten Durcharbeitung von offline-Dateien! Denn die geladenen Sätze können gespeichert, bearbeitet und exportiert werden. Am Ende einer solchen Aktion dann wieder "erase off", und alles ist bereinigt.
Es ist auch möglich, eine Datei mit updatedateiname statt mit read einzulesen.
Wenn man vorher set u410 gegeben hat, werden die Sätze mit den zugehörigen Online-Sätzen identifiziert, aber nicht gespeichert. Sie liegen dann also in der Offline-Datei und können mit den neuen Befehlen bearbeitet werden, etwa so, dass nur solche mit bestimmten Merkmalen wirklich mit put gespeichert werden. Oder alle zusammen mit
save edit
Beispiel 6: Einlesen und Exportieren von Grunddateien
Wer bis hierher mitgedacht hat, weiß jetzt: a99 kann nun die Export-Aufgabe von SRCH übernehmen, d.h. also das Einlesen und exportieren von Grunddateien. Ganz knapp würde das so aussehen:
...
Vorher evtl. bereinigen und
Datei einlesen, dann
ersten Satz laden
first off
Ende, wenn Datei leer war
if no end
:schleife
... evtl. Bearbeitungsbefehle
Satz exportieren
down
naechsten Satz laden
next off
Schleife, wenn es noch einen
gab
if yes jump schleife
Offline-Datei wieder bereinigen
erase off
Exportdatei schliessen
xport f nul
Auch NEU:
find new
Bilde die Ergebnismenge der neuen und noch nicht gespeicherten Sätze
(wie Menü "Extras | Neu, noch nicht gespeichert")
find edit
Bilde die Ergebnismenge der bearbeiteten, aber noch nicht wieder gespeicherten Sätze
(wie Menü "Extras | IN ARBEIT befindl. Sätze")
Jeweils kann man mit if empty ... checken, ob die Ergebnismenge leer ist, also keine solchen Sätze existieren.
3.8 Zugabe: Dollarkurs-Umrechnung
Neben euro.flx gibt's auch dollar.flx. Hier ist zusätzlich die beim Euro nicht notwendige Option gegeben, den Wechselkurs zu ändern. Starten Sie X dollar und studieren Sie dollar.flx und dollar.rtf, wenn Sie etwas Ähnliches machen wollen.
Hinweis: dollar.flx enthält einen besonderen Trick: er erneuert sich selbst, wenn der Umrechnungskurs geändert wird! Dadurch wird der neue Kurs (und das Datum der letzten Änderung) über die Sitzung hinaus aufbewahrt, unabhängig von der Datenbank.
Anmerkung zu den Rechenbefehlen (Online: h xiz eingeben oder h xa und dann Rechnen)
Es wird jeweils die Zahl aus dem Arbeitstext extrahiert, auch wenn andere Zeichen davor und dahinter stehen (Buchstaben, Klammern...)
Das Rechenergebnis landet in der "internen Zahl", die man als Variable Z in jede Ausgabe mit var oder wri einbauen kann.
Mit var Z werden nun die Nachkomma-Nullen am Ende abgeschnitten, und wenn es eine ganze Zahl ist, auch der Punkt.
Mit var Zk dagegen erhält man stets genau k Stellen nach dem Komma, auch wenn es Nullen sind.
3.9 Tastaturabfrage im FLEX
Wenn man eine Riesen-Ergebnismenge hat oder eine Schleife, wo man nicht sicher ist, dass die Abbruchbedingung erreicht wird, kann man innerhalb der Schleife die Tastatur abfragen:
...
keycheck oder "key" oder
"keychk" ...
if yes jump ende
...
Das ist alles, was man in die Schleife einbauen muss! Es wird dann geprüft, ob die Taste [Esc] oder 'x' gedrückt wurde. Wenn ja, gilt die Bedingung "yes".
3.10 Verzeichnis anlegen: neuer Befehl
mkdir dir
dir muss ein Name für ein neues Verzeichnis sein.
Mit if no kann man checken, ob es gelungen ist!
Wenn dir fehlt, wird der Inhalt der iV genommen.
Beispiel: in dem neuen FLEX _dbcopy.flx
3.11 Dies & Das : Verbesserte Befehle, Diverse Hinweise
jump label
NEU: Wenn das :label
nicht existiert, wird der FLEX mit einer
Fehlermeldung abgebrochen, die
den Sachverhalt mitteilt.
(sonst kann man u.U. lange suchen,
warum der FLEX nicht klappt...)
xport f name
NEU: mit if no ... kann
man checken, ob die Datei name nicht
zum Schreiben benutzt werden
kann. In diesem Fall bleibt der
vorher eingestellte Dateiname
gueltig! In FLEXen, die zuverlässig
laufen sollen, muss man diese
Pruefung immer machen!
NEUerung: if
not ... geht jetzt uneingeschränkt für alle if-Befehle.
Einfach "not " vor die Bedingung
setzen, dann
wird ihr Gegenteil geprüft. Beispiel: if
not _abc_ aktion Wenn der Satz "abc" nicht
enthält, aktion ausführen
if %~abc%jetzt
möglich: Wenn die Groß-/Kleinschreibung nicht bekannt ist, setzt
man ~ vor den Suchbegriff, um festzustellen,
ob abc oder Abc oder aBc etc. in der iV vorkommt.
help name
Mit if no ...
checkt man, ob die Datei name nicht existiert
mit if cancel ...,
ob sie zu groß für die Anzeige ist
Denn die sonstigen Meldungen kommen nicht, wie bei direktem Aufruf mit h name im Schreibfeld.
close res
schließt die aktuelle Ergebnismenge. Auf dem Balken
erscheint "Keine Ergebnismenge". Drückt man drauf, wird sie aber wieder
aktiviert, und mit Alt+e sieht man sie auch noch in der
Liste – gelöscht wird sie nicht!
katlist
schreibt die Liste der erlaubten Kategorien aus der CFG
in die Datei katlist.asy.
mit katlist\help katlist.asy
sieht man die Liste dann im Anzeigefenster
Sonderbefehle für Datumsrechnungen: (Ergebnis jeweils in der iV)
day +x
Breitschaltung des Anzeigefelds und Flip-Buttons
Jetzt funktioniert die Breitschaltung noch einfacher:
Rechte Maustaste auf dem Listenfeld oder einem Button - Umschaltung. Und
dann sieht
man unten über dem Suchbefehl etwas ganz neues:
8 Flip-Buttons, die bisher immer unsichtbar waren (Nr. 9 und 10 bleiben
unsichtbar!).
Es steht drauf Flip 1 , ... , Flip 8. Die Ziffern sind
unterstrichen, daher kann man sie mit Alt+Ziffer auslösen.
Jedoch: es geht noch weiter, man kann die Aufschriften
per FLEX setzen, mit dem neuen Befehl flip
:
flip ixyz=action
Setzt den Text xyz auf den Flip-Button i.
Rufen Sie h xflip
auf, da steht alles andere. Beispiele im START.FLX der DemoBank.
Wenn action gesetzt ist, wird diese Aktion bei
Druck auf den Button ausgelöst. action muss mit h, x oder X
anfangen.
Diese Angaben werden in die Variablen #uXi kopiert, welche
in der Phrasendatei gespeichert werden. Wenn man noch keine Phrasendatei
hat, wird beim ersten Start die Datei PHRASEN genommen, gespeichert wird
dann aber unter dem Standardnamen PHRASE.A99, falls man keinen anderen
in der INI eingetragen hat.
Zwischenablage-Funktionen
Die neuen FLEX-Befehle ccopy
und cpaste sind
dokumentiert in der neuen Datei xccopy.rtf.
Diese Befehle kopieren in die bzw. aus der Zwischenablage.
Geben Sie h xccopy, dann erfahren
Sie alles darüber.
Kopieren aus dem Index
Bisher wurden, als galanter Sonderservice, die Anfangsbuchstaben
jedes Wortes einer kopierten Indexzeile in Versalien gewandelt.
Solcherlei "Magie" findet keinen ungeteilten Beifall,
auch gab es wohl Misshelligkeiten mit unkorrekt kopierten Umlauten und
Sonderzeichen, Daher ist jetzt der Standard, dass Indexzeilen exakt kopiert
werden. Die "Magie" laesst sich aber jederzeit einschalten und zwar mit
dem neuen FLEX-Befehl set L1
Tip: Indexzeile in die iV kopieren
Manchmal will man keinen Find-Befehl geben, um Datensätze zu gewinnen, sondern man will nur eine Registerzeile im FLEX haben. Das geht mit dem qrix-Befehl! Sagen wir, es soll aus dem Register 1, PER, die erste Zeile geholt werden, die mit "mueller" beginnt. Dann schreibt man:
qrix 2 per mueller ODER qrix 2 |1 mueller
Für Register 10 und 11 muss es |: bzw. |; lauten.
In der iV steht dann die Zeile, die VOR der ersten mit "mueller" beginnenden Zeile kommt, dann die Zeile selbst, und dazwischen das Absatzzeichen (DOS Code 20). Um also genau die richtige Zeile zu erhalten, macht man dieses:
qrix 2 per mueller
ins #uzz
Und nun steht die Zeile in #uzz, sogar mit der Trefferzahl vorneweg. Soll es NUR die Eintragung sein, ohne Trefferzahl, ergänzt man noch diese zwei Zeilen:
var #uzz(b" ")
ins #uzz
Denn es ist immer ein Leerzeichen zwischen Zahl und Text.
4. Classico : Verbesserungen in den DOS-Programmen
4.1 CockPit
Auch dem CockPit wurde endlich mehr Pfadkomfort genehmigt. Das Setzen der PATH-Umgebungsvariable in DOS ist nicht mehr nötig.
Folgendes ist zu beachten:
-- cp.bat mit Optionen -o und -P aufrufen, z.B.
c:\allegro\cp -of:\user\xyz\cp.opt -Pc:\allegro
-- Die Zeile d für die Datenbank darf in der OPT-Datei fehlen, dann muss im cp-Aufruf noch die Option -d hinzu, also z.B.
... -dk:\datenbank\opac
-- Die Zeile C in der CP.OPT sollte so aussehen:
C %-P%\cp
WENN die CP.OPT im Programmverzeichnis liegt. Bisher steht da nur C cp, was also voraussetzt, dass die CP.OPT im Arbeitsverzeichnis liegt. Ist das der Fall, kann es auch so bleiben.
-- Die UIFC darf nun endlich auch auf dem Datenverzeichnis liegen.
Empfehlung: Anschauen, wie der Aufruf aussieht, der beim Installieren des neuen Pakets entsteht, und was in der CP.OPT steht.
4.2 Exportsprache
Missmut stifteten hin und wieder die Manipulationsbefehle c"abc" und b"abc", besonders in Verbindung mit dem Jokerzeichen ?.
Eine Expedition in diese sehr tiefliegende Schicht der Kernfunktionen erbrachte Verbesserungen, die nun sowohl in den Classico-Programmen als auch in den modernen implementiert wurden (d.h. a99 kann's auch):
c"^abc" reagiert, wenn Zeichenkette "abc" NICHT im AT vorkommt
c"^~abc" ignoriert Groß- und Kleinschreibung
abc kann auch #nnn oder #uxy sein
c"^[xyz]" reagiert, wenn keines der Zeichen xyz vorkommt
b"?" funktioniert endlich auch
(d.h. auch: der AT hat mindestens ein Zeichen) ABER:
c"[?]" muss man schreiben, wenn man die Existenz eines Fragezeichens feststellen will!
Und GANZ NEU, als Nebenprodukt:
c">abc" reagiert, wenn der AT alphanumerisch größer ist als "abc"
c">#nnn"
c"~>abc" dasselbe, mit Groß-Klein-Ignorierung (abc muss dann klein sein!)
c"~>#nnn"
Dasselbe geht entsprechend auch mit '<' . Bisher klappten nämlich < und > als erste Zeichen hinter " überhaupt nicht, wie bemerkt.
Es geht hierbei, wohlgemerkt, um den Anfang des AT, nicht etwa so, dass innerhalb des AT eine Zeichenkette vorkommen sollte, die >abc ist!! Das wäre wohl recht abstrus. Insofern ist c nicht ganz das "richtige" Funktionszeichen, aber statt ein neues einzuführen, nehmen wir das in Kauf, weil keine Kollision auftritt.
Nun kommt natürlich noch die Frage: Und was, wenn wirklich die Zeichenkette "<abc" oder "^abc" etc. gesucht werden soll?
Dann schreibt man c"?<abc" oder b"?^abc" etc.
Wenn aber '<' auch das allererste Zeichen sein könnte - dann würde ? ja nicht greifen! Dann setzt man #t{ s0 } vorweg und #t{ s4 } hernach.
4.3 PRESTO / APAC / a99 / alcarta
Der rechte Weg zur Linkstrunkierung
Jahrelang wurde verkündet: Linkstrunkierung geht nicht, wäre viel zu aufwendig, passt nicht ins Konzept usw. usf. Erst vor kurzem stellte sich heraus, und eine La-Ola-Welle ging durch die E-Mail-Liste, dass es sehr wohl geht, dass eine vollständige Lösung sogar extrem einfach ist und keine neuen Programmfunktionen erfordert, nur drei neue Zeilen in den Index-Parametern. Sogar die alten DOS-Programme kommen dann in den Genuss des neuen Suchkomforts, denn es werden lediglich als zusätzliche Schlüssel, das ist das ganze Geheimnis, alle Abschnitte jedes Wortes einsortiert! Statt nur atomphysikalso auch tomphysik, omphysik, mphysik, physik, hysik, ysik, sik, ik. Das sieht im ersten Moment nach enormer Mehrbelastung der Indexdatei und der Zugriffsgeschwindigkeit aus, hält sich aber durchaus in Grenzen, da der Index seit eh und je mit einer Komprimierungstechnik arbeitet. Manchen unsinnig aussehenden Teilwörtern kann man einen Vorteil abgewinnen: man gibt zwecks gezielten Zugriffs bei langen Wörtern nur einen prägnanten Teil ein, das reicht dann.
Dass das Programm nur die sinnvollen Wortbestandteile herausoperieren könnte, gehört ins Reich der Utopie - siehe "Metaphorama"!
Und die Kosten? Nicht total billig, aber weniger teuer als man immer befürchtete.
An der DemoBank getestet:
Indexdatei vergrößert sich um ca. 70%
Erstellungszeit verlängert sich um ca. 30%
Anzahl der Indexeinträge wächst um 130%
Wie sich das Zeitverhalten beim Speichern neuer Sätze in Großbanken entwickelt, das muss sich erst erweisen! Immerhin gibt es im Schnitt mehr als doppelt soviel Schlüssel pro Satz, wobei aber die meisten sehr kurz sind.
Der Satz mit der größten Schlüsselzahl (Heisenbergs Werke als hierarchischer Satz) kriegt allerdings 622 statt 117 Eintraege! Da war nun endlich doch noch eine Aufbohrung fällig auf 1000 (und wurde ausgeführt), denn das Maximum war bisher 500.
Dass die Indexdatei nur um 70% waechst, liegt an der internen Komprimierungstechnik.
ETWAS billiger wird's, wenn man im Zusatzregister das Wort selbst nicht nochmals indexiert, sondern nur die Reststücke. Dann wird aber die Abfrage komplizierter.
Die Idee: jedes Wort wird, links beginnend, immer um ein Zeichen verkürzt und das Restwort indexiert. Damit hat man alle nötigen Einträge. Und weil der so erweiterte Index ja auch ganz normal rechts trunkiert werden kann, hat man sogar eine beidseitige Trunkierung.
Hier der bisherige Abschnitt in CAT.API:
...
#20x
#uty darin steht "|3"
als Indexpräfix
!u1 f"- +/(<)" F">.?" beseitige
"- +/(<)" am Anfang, ">.?" am Ende
#+#
Und so sieht der erweiterte Abschnitt aus:
#20x
vorbereitetes, umcodiertes Wort
nach #utw
!u1 f"- +/(<)" F">.?" y2
=tw beseitige "- +/(<)" am Anfang, ">.?" am Ende
#uty das ist "|3", d.h.
das komplette Wort, das in #utw steht, kommt in Register 3
#utw y0
Zeitschr.Titelwörter erhalten
`Z am Ende (#utz ist nur bei Zeitschr. besetzt)
#utz p"`Z" e2
Und hier die neuen Zeilen, die die neuen Einträge machen:
Hier zerlegen wir #utw (das momentane Titelwort):
#-Ö
#utw y0 p{ 8 "|2" } Code
8 bedeutet: neuer Eintrag, "|2" ist das Präfix für Register 2
#utw +Ö y0 b1 =tw ein
Zeichen von #utw vorn wegnehmen, weiter bei #-Ö,
wenn Wort dann noch nicht zu Ende
#+#
Das ist alles. Dies ist aber nur als Muster gedacht, in die Standardparameter ist es nicht eingebaut. Ob man Index 2 nimmt oder sonstwas, muss man sich noch überlegen, das ist ja die leichteste Übung.
Eine andere Art der Linkstrunkierung, aber nur in a99/alcarta, wird jetzt automatisch und kostenlos dadurch realisiert, dass man im Indexfenster ein neues Eingabefeld "Nur Zeilen mit:" hat. Wenn man dort etwas eingibt, werden nur Zeilen gezeigt, die diese Zeichenfolge enthalten! Eine Art Filter also. Das kann allerdings dann recht lange dauern! Mit F1 im Indexfenster erfahren Sie mehr.
4.4 Steuerzeichen in allegro-Datendateien (Typen .ALD und .ALG) (Online: h codes)
Noch nirgends waren diese Codes zusammenhängend dargestellt worden. Daher holen wir das jetzt nach.
* bedeutet: nicht änderbar; die anderen sind vor Beginn der Datenerfassung per CFG einstellbar (Handb. A.1.3, S.294f)
DEZ Funktion
0 *Kategorie-Endecode
1 *Satzanfangscode
2- 7 *Satzanfang eines hierarchischen Untersatzes #01 - #06
8 *Satzanfang gesperrter Satz
9 *Satzanfang gelöschter Satz (in indexierten Datendateien)
13 10 *Satzende (mit Kategoriende Code 0 davor!)
20 Zeilenumbruch im Kategorietext (Eingabe: Strg+t)
Funktion muss in Export-Param zugeordnet werden: p .20 255
31 Teilfeldzeichen (in Param auch $ moegl.) (Strg+- / AltGr+2)
35 Kategoriezeichen bei Anzeige (änderbar in CFG: Befehl K) wird nicht gespeichert!
64 Entstoppungszeichen (z.B. @UNO) (änderbar in CFG: Befehl S)
92 *Backslash als Steuerzeichen fuer den RTF-Reader in a99/alcarta
95 *(Unterstrich) Steuerzeichen fuer Ersetzungen und für die
*Unterdrückung der Umcodierung im Suchfenster
96 *(accent grave)In RTF als Markierung der Fliptexte und Befehlstrenner
170 Nichtsortierzeichen (änderbar in CFG: Befehl N)
219 Füllzeichen am Satzende (änderbar in CFG: Befehl
F)
4.5 Verzeichnisfragen
Weil man keine PATH-Setzungen verlangen kann und weil alles auf unterschiedlichsten Anordnungen ohne Eingriff in INI usw. laufen soll, wurde jetzt folgendes eingerichtet:
Wenn man die Befehle ProgDir und DbDir in der INI-Datei weglässt, UND wenn die INI-Datei auf dem DATENverzeichnis liegt, dann entnimmt a99/alcarta beides unmittelbar aus dem Aufruf. Es muss also dann der Aufruf immer diese Form haben:
<ProgDir>a99 <DbDir><ini-name>
z.B.
c:\allegro\a99 k:\datenbanken\opac\cat
Das Gesamtpaket macht davon Gebrauch: Der entstehende Aufruf für die DemoDatenbank funktioniert immer, egal wo man die Programme installiert. Die DemoBank muss nur am ProgDir hängen! (Das kann man beim Installieren sowieso nicht ändern. Noch nicht mal weglassen kann man die DEMO.)
5. Ein Hinweis für Web-Werker
Als Ergänzung zur acwww25-Dokumentation
http://www.allegro-c.de/allegro/doku/acwww25/index.htm
haben wir eine schlichte Übersicht der Verzeichnisse und Dateien aufgelegt, die man für eine Web-Installation braucht. Lokale Variationen sind natürlich hier und da nötig, man sieht aber, was wo liegen muss, welche Funktion es hat und wo man eingreifen muss:
http://www.biblio.tu-bs.de/allegro/katalog.htm
Diese Übersicht ist vorläufig und wird in die nächste Überarbeitung der Doku einbezogen werden, dann mit mehr Kommentar.
Anwender dürfen uns aber gern schreiben, wo sie bei der Installation Probleme erlebt haben, damit wir Verbesserungen machen können.
6. Installation der V21
Die 6. Auflage der CD-ROM enthält die vollständige V21. Zur Installation braucht man die Schlüsselzahl, die im Begleitschreiben mitgeteilt wurde. Fertigen Sie also mit Hilfe dieser Zahl zuerst die 3 Installationsdisketten an und/oder kopieren Sie das "Gesamtpaket" auf Ihre Festplatte. Ihre eigenen Daten und Verzeichnisse bleiben bei der Installation, wie immer, unberührt.
Grundsätzlich: Nur keine Angst, es kann nichts kaputtgehen, Sie gewinnen im Gegenteil mehr Sicherheit.
Wenn mit Disketten installiert werden soll (DOS oder Win'3x), dann legen Sie die erste davon ein, wenn eine Neuinstallation vorzunehmen ist, sonst die zweite. Im ersten Fall ist INSTALL.BAT von der Diskette zu starten, im zweiten Fall wählt man im CockPit den Menüpunkt "Routinen / Neue Version installieren / Update-Installation".
Das Gesamtpaket, geeignet ab Win'95, ist ein einziges Programm namens INST-ALL.EXE. Dieses braucht man nur zu starten, es erklärt sich dann selbst nach der bekannten Art typischer Windows-Programme (sog. "InstallShield"-Prozedur). Nicht nur Neuinstallation leistet die INST-ALL! Sie können auch bedenkenlos als Zielverzeichnis das eigene, bestehende Programmverzeichnis angeben, dann wird alles, was neuer ist als die vorhandenen Dateien, drüber kopiert.
Es entstehen, falls noch nicht vorhanden, die Unterverzeichnisse HELP, FLEX und DEMO2 mit den entsprechenden Inhalten. Auch dort werden, wenn vorhanden, gleichnamige Dateien durch neuere überschrieben.
Die DEMO-Bank ist jetzt übrigens zugleich Administrator-Plattform. Das Startbild zeigt sofort die Funktionen. Man kann die eigenen Datenbanken finden und katalogisieren lassen, und dann von der Demobank aus mit a99 starten! Das ist der leichteste Einstieg in die Windows-Programme. Es wird dafür auch ein Icon auf dem Desktop angelegt. Es wird überhaupt jedem empfohlen, der die Entwicklung nicht dauernd mitverfolgt hat: Verbringen Sie einige Zeit mit der Demo-Datenbank, denn besser und schneller kann man nicht lernen als durch eigenes Tun, und hier ist es vollkommen ungefährlich. Mit Druck auf den Fragezeichen-Button kommt das Administrator-Menü.
Wir empfehlen wie immer dringend, dass Sie Ihre vorhandene Installation umgehend mit V21 aktualisieren. Änderungen an Datenbanken oder eigenen Parametern sind nicht notwendig! Sieht man hinterher Unterschiede in der Anzeige oder bei den Registereinträgen, oder ist die Abfrage neuer Daten anders als vorher: reaktivieren Sie Ihre alten Parameter über den CockPit-Menüpunkt "X: EXTERN" unter "Routinen", dann die Funktion "0 - Eine alte Datei wieder aktivieren" und D-1.APR wählen für die Datenanzeige, CAT.API für die Indexparameter, $A.CFG für die Abfrageliste. Das ist alles.
Hinweis für die Windows-Programme: Benutzen Sie die Datei FILELIST.TXT als Checkliste, wenn Anpassungen vorzunehmen sind.
7. E-Mail-Diskussionsliste [DIE Adresse für alle akuten Fragen und Probleme]
Man schließt sich den ca. 300 Lesern der allegro-Liste an, indem man an die Adresse maiser@buch.biblio.etc.tu-bs.de eine Botschaft mit nur einer Zeile sendet: subscribe allegro . Man wird dann sofort eingetragen und erhält eine Mitteilung mit weiteren Informationen, insbesondere, wie man sich wieder abmeldet. Es gibt auch ein Archiv der Liste.