`Vorangehender Teil`   /   `Fortsetzung` 

10.2.7	Export: Flips : Querverbindungen, Grafikanbindung etc.

Die nachfolgende Beschreibung ist nur verständlich, wenn man sich in der Export-Parametrierung schon gut auskennt. Für den "Endbenutzer" ist nicht viel zu sagen: Was ein "Flip" ist und was er bewirkt, das wird aus einer Anzeige sofort erkennbar und plausibel. Hier geht es darum, wie man Flips einrichtet. Zunächst für die DOS-Programme, dann für `a99/alcarta`. 
Version 14b erhielt zusätzliche Funktionen, die unter dem Namen "Flip" zusammengefaßt wurden. Flips sind Umschaltungen auf andere Sätze oder Registerstellen, die durch Knopfdruck ausgelöst werden können. Zusätze in den Anzeigeparametern (Datei D-1.cPR) ermöglichen es, dem OPAC-Benutzer solche Schaltknöpfe anzubieten, und zwar abhängig vom Inhalt des angezeigten Satzes, also sehr individuell. Es gibt zwei Methoden zum Flippen.

Besonders bei der Gestaltung von OPACs, aber auch sonst, wird man mit Aufgaben konfrontiert, die noch mehr Querverbindungen zwischen Datensätzen verlangen, als es die bisherigen Methoden schon ermöglichen. Seit V11.2 schon kann man bei der Anzeige eines Datensatzes deutliche Hinweise auf andere Datensätze erscheinen lassen oder diese nachladen und gleich mit anzeigen. Das letztere führt manchmal zu weit (komplizierte, überfrachtete Anzeige), das erstere ist zu wenig direkt und verlangt vom Benutzer, ein anderes Register aufzuschlagen und dort einen bestimmten Begriff mit der Hand einzugeben. Seit V14b kann man folgendes tun: man läßt an beliebigen Stellen innerhalb der Anzeige sog. Flips erscheinen, z.B. so: (die eckigen Klammern haben als solche keine Funktion!) 
[1]  Hinweis1           [2]  Hinweis2       [c]  Hinweis3   ... 
Den Ziffern kann man eine auffällige Farbe geben, damit sie optisch hervorstechen (nur unter DOS allerdings). 
Eine typische Zeile in den Anzeigeparametern, um so etwas zu erzeugen, sieht z.B. so aus: 
#31 p{ C "[" t71 "1" t76 "] Werke zum Thema: " }       FLIP 1 anzeigen 
Dieses muß innerhalb der Anzeigeparameter an einer geeigneten Stelle stehen, am besten unterhalb oder oberhalb des gesamten Datensatzes. Damit überhaupt etwas passiert, muß es eine Anwendervariable namens #uZ1 geben, in der steht, was bei Druck auf '1' tatsächlich passieren soll. Folgende Zeile würde diese Anwendervariable erzeugen:
#31 p"?|3" dZ1 aZ1      FLIP 1 generieren, d.h. #uZ1 mit "?|3<Inhalt von #31>" füllen
Diese Zeile steht am besten über oder unter der oben gezeigten Zeile. Wird dann die Ziffer 1 gedrückt, flippt das Programm zum ersten betreffenden Datensatz, d.h. holt ihn sofort auf den Schirm, schaltet aber auch das betreffende Register an die bewußte Stelle, so daß man (nach Druck auf <Enter>) dort auch gleich blättern kann. Der neue Datensatz kann seinerseits weitere Flips präsentieren, die zu wieder anderen Sätzen hinführen. Mit <Bild­> kann gleich wieder zum jeweiligen Ausgangssatz zurückgeschaltet werden, natürlich mehrfach hintereinander. Man ist versucht, das Schlagwort "Hypertext" zu bemühen, wobei aber an existierenden Daten noch nicht einmal irgend etwas ergänzt oder verändert werden muß. Für geübte Parametrierer wird die Methode sehr leicht anzuwenden sein: man muß nur die hinter den Flips steckenden Registereinträge innerhalb der Anzeigeparameter präparieren und in bestimmte Anwendervariablen speichern, und zwar #uZ1 ... #uZ9 für die Ziffern 1 bis 9 (ein großes 'Z'!). 
Wenn z.B. #uZ4 den Inhalt ?|1Shakespeare,`William hat, wird beim Druck auf Ziffer '4' zum Register 1 auf shakespeare,`william geschaltet. Ohne das '?' kommt der erste Datensatz zur Anzeige, der zu dem Registereintrag gehört. Wenn außerdem am Anfang von #uZ4 noch das Präfix "<0" steht, wird auf die andere Datenbank umgeschaltet, falls eine aktiviert wurde. Man bemerkt: hinter Flip [4] steckt also nicht notwendig das Register 4! (Statt Ziffern sind auch alle Buchstaben möglich, hinter denen kein Befehl steckt.) Die präparierten Registereinträge müssen auch nicht exakt der Registerform entsprechen, denn es wird die Umcodierung angewendet, die innerhalb der Indexparameter programmiert ist (Sprungmarken #-1 bis #-9). Klipp und klar: wenn in #uZ4 etwas steht, wird bei Druck auf '4' geflippt, egal was auf dem Schirm steht! Umgekehrt: wenn ein Hinweis [4] in der Anzeige steht, aber #uZ4 nicht besetzt ist, passiert bei Druck auf '4' nichts. Also: aufpassen beim Parametrieren. 
Zum Beispiel könnte man Flips für die Schlagwörter oder Systemstellen machen, die bei einem Titel angegeben sind. Der Benutzer kann dann zu der jeweiligen Registerstelle flippen, wo diese Schlagwörter etc. stehen, ohne mit der Hand umschalten und eine neue Eingabe machen zu müssen. (Beispieldatei: d-flip.apr.) 
Dieses "feature" ist auch in allegro-X enthalten. Die Grafikversionen von PRESTO und APAC (die Programme PRESTOG.EXE und APACG.EXE) ermöglichen es ferner, hinter einem Flip einen Programmaufruf zu verbergen. Etwas Ähnliches ist in die Windows-Programme eingebaut: mit der `FLEX-Technik` können beliebige externe Programme gestartet werden. 

Die erste Methode, Flips zu programmieren, setzt voraus, daß man u.U. viele Anwendervariablen zu überwachen hat. Wenn die Zahl der Flips von Datensatz zu Datensatz stark schwankt, oder wenn man sich z.B. aufgrund der Datenstruktur einen Automatismus überlegen kann, der alle benötigten Flips in einer Schleife programmieren kann, geht man am besten einen anderen Weg. Dieser eignet sich auch, um Grafik, Sound und andere elektronische Objekte mit einer Datenbank zu verbinden. Ganz allgemein: man kann externe Programme starten. 

Zweite Methode
Man benötigt hierzu nur eine Anwendervariable, in der die Flips nach folgendem Muster aneinandergereiht sind: 

#ufv <tr>1FLIP1<tr>2FLIP2<tr>3FL...

Die Flipvariable braucht nicht #ufv zu heißen! Jeder Flipeintrag beginnt mit einem Trennzeichen und dahinter einem Kennbuchstaben oder -ziffer. Der Kennbuchstabe ist auch beliebig. Als Trennzeichen schlagen wir das Teilfeldtrennzeichen '?' vor, die Parametrierung, welche bei dieser Methode notwendig ist, vereinfacht sich dadurch.
Man benötigt einen Abschnitt #-` in der Anzeigeparameterdatei (` = ASCII 96) ; dort muß die Auswertung der Tasten erfolgen. Diese Sprungmarke ist fest für diesen Flipmechanismus reserviert. Man braucht hier keine ak-Zeile, denn der Abschnitt wird nur programmintern angesprungen (ähnlich wie #--). Zu dem Zeitpunkt stehen automatisch in der Sonderkategorie #u1 die Taste und die Nummer der gerade aktiven Datenbank, z.B.: 
#u1 30
D.h. Taste [3] wurde gedrückt und aktiv ist Datenbank Nr. 0. Die Datenbanken sind von 0 bis 2 durchnumeriert, wobei die erste Datenbank die Nummer 0 hat.
In diesem Abschnitt wertet man die Taste (und bei Bedarf auch die Datenbanknummer) aus. Man extrahiert aus obiger Anwendervariable den Flip-Befehl, der zu dieser Taste gehört. Dieser Befehl ist das Ergebnis dieses Abschnittes. Das Programm wertet dann das Ergebnis (d.h. den Arbeitstext) aus und reagiert entsprechend.

Ein Beispiel:
In dem Teil für die Anzeige eines Titels findet man diese Befehle (an der Stelle, wo die Flips im Anzeigetext erzeugt werden sollen):
... 
	Erzeugen der Flip-Anwendervariablen (hier ist es #utz):
#31s p"?c?|3" Atz		Umschalten auf Reg. 3 Sachschlagwort
#31p p"?p?|3" Atz		Umschalten auf Reg. 3 Personenschlagwort
#8e p"?t~view " Atz		Anzeige einer zugeordneten Textdatei (Name in #8e). Hier wird ein Befehl 
		 zusammengesetzt: In #8e steht der Name eines Textes, der angezeigt werden soll, "view" ist der Name des Anzeigeprogramms
... 
	Erzeugen des Hinweises in der Anzeige:
#31s { "   [" t71 "1" t76 "] mehr zu: " } 
#31p { "   [" t71 "2" t76 "] mehr zu: " } 
#8e { "   [" t71 "t" t76 "] Text zu: " } 
...
	Auswertung der Tasten: 
	Das Programm springt automatisch zur Sprungmarke #-`, wenn auf dem Anzeigebildschirm eine nicht definierte Buchstaben- oder Zifferntaste gedrückt wird. Wenn z.B. Taste [2] gedrückt wurde, entsteht daraus  #u1`20 (s.o.). Programmieren Sie hier einen Sprungverteiler. (Dieser Abschnitt muß an einer Stelle stehen, die beim normalen Durchlauf nicht erreicht wird.) Das Schema sieht so aus:

#-`                      Welche Taste wurde gedrückt 1,2 oder 3?
#u1 +c i4,1 e0 #zz 0     Taste steht auf erster Stelle im Kategorietext, deshalb i4! 
#u1 +p i4,2 e0 #zz 0     bei mehr als zweistelligem Schema muß der i-Befehl
#u1 +t i4,3 e0 #zz 0     angepaßt werden: z.B. i5,1 im dreistelligen Schema
#u1 e0 #zz 0             Alle anderen Tasten dürfen hier keine Reaktion auslösen
#+# 
	Extraktion des entsprechenden Flipbefehls aus #utz: (hier zeigt sich der Vorteil von '?' als Trennzeichen!) 
	Es entsteht als Ergebnis praktisch der Befehl für das Kernprogramm, wohin es flippen soll:
#-c 
#utz ?c                  Ergebnis: Arbeitstext ist jetzt der Flipbefehl von #31s 
#+#                      Rückkehr zum Kernprogramm, dort wird der Sprung ausgeführt
#-p 
#utz ?p 
#+# 
#-t 
#utz ?t                  Teilfeld ?t enthält den Programmaufruf zum Anzeigen einer Textdatei
#+#
Wenn das erste Zeichen des Flips die Tilde '~' ist, wird der Flipbefehl als DOS-Befehl aufgefaßt und dem Betriebssystem zur Ausführung übergeben. Beispiel siehe oben  #8e p"?t~view " Atz. Wenn in #8e also ein dateiname steht, wird hieraus der DOS-Befehl  view dateiname. Dieser Mechanismus funktioniert bis V14c nur in den grafikfähigen Versionen der Programme, PRESTOG.EXE, APACG.EXE etc. Wenn man aus dem aufgerufenen Programm zurückkehrt, erscheint wieder der Anzeigebildschirm, wo man die bewußte Taste gedrückt hatte.
"Flipfähige" Tasten (Zeichen ohne sonstige Funktion im Anzeigebildschirm) sind die folgenden:

0 - 9  a c e f g i k l m n o q t w y z  A G K M N O P Q S T U V W X Y Z 

Flips in a99 und alcarta

Mit alcarta/a99 kann man alle Flips nach einem einheitlichen Schema anlegen. Der Abschnitt #-`` wird dadurch überflüssig. Beispiele sieht man in der Datei D-WRTF.APR für die Anzeige in a99 und alcarta. 
Jeder Flip benötigt 3 Dinge:
1. Was man sieht (erscheint z.B. wie ein Netscape-Link, blau und unterstrichen) 
2. Die #uY-Variable verbindet 1. mit 3.: 
3. Die #uZ-Variable: enthält den eigentlichen Flip-Befehl  oder die FLEX-Befehlskette (siehe FLEXGER.RTF)
Diese Variablen müssen nicht ihrem Zweck fest zugeordnet werden wie beim DOS-Verfahren.
Beispiel: Inhalt von #31s (Sachschlagwort) soll in Flips aufgelöst werden. Es können beliebig viele Schlagwörter darin stecken, getrennt durch "; ". Der Flip soll jeweils auf die Registerstelle springen, wo das Schlagwort steht.
Das geht nach diesem Rezept: 

   Empfohlene Standard-Zwischenteile: 
69=160 t74 t97       	Code 160, blau, Unterstreichung ein 
68=t96 t76 160       	Unterstreichung aus, schwarz, Code 160 
.... 
#nr dY~ dZ~    	alle Flips beseitigen (irgendwo am Anfang der Parameter) 
....... 
#31s =sw e0      	Kopiere #31s nach #usw 

#-S     Beginn der Schleife 
#usw e";" F" " p"?|3" =Z~       	nächste #uZi präparieren
#usw e";" F" " y1 =Y~           	zugehörige #uYi (y1 wegen Sonderzeichen!)
#usw C e";" F" " p69 P68        	Text ausgeben mit Begrenzern und Attributen 
#usw +S b";" f" " =sw           	vorderen Teil abschneiden, zurück nach #-S

Es entstehen dann #uZ0, #uZ1, ... und #uY0, #uY1, ... Diese gehören paarweise zusammen.
Code 160 ist ein unsichtbares ANSI-Zeichen und dient als Begrenzungszeichen. Statt dessen kann man auch die eckigen Klammern verwenden. Die Zwischenteile haben standardmäßig die Bedeutung (in d-rtf.apt):

74 = blau,  		76 = normal (schwarz) 
97 = Unterstreichen ein, 	96 = Unterstreichen aus 

Die Schlagwörter erscheinen also untereinander, blau unterstrichen, und die Begrenzungszeichen ermöglichen, daß das Programm bei Mausklick die Zeichenkette exakt vom Bildschirm entnehmen und mit den #uY-Variablen vergleichen kann. Die zugehörige #uZ-Variable wird dann als Befehl ausgeführt.
Folgende Befehle können in einer Z-Variable stecken: (Genau auf die Leerzeichen achten!)

f per name...     	avanti-Findbefehl 
f #nnn           		lade Satz nnn (interne Nummer) 

j xabc           		Springe zu Label #-x in den Anzeigeparametern, in #u1 steht dann abc 
h name           		Lade Hilfedatei nameGER.RTF 
?|iabc           		Springe in Register i an die Stelle abc 
~prog            		Starte das externe Programm prog 
            (es kann für prog ein vollständiger Programmaufruf stehen, auch der Name einer Batchdatei, z.B.  cp.bat  füer das CockPit)

x flextext       	Hinter x kann eine ganze Befehlskette folgen. Dieses Konzept nennt sich FLEX und wird 
X Dateiname  		genauer in FLEXGER.RTF dokumentiert. (Befehl "h flex" geben im Schreibfeld von a99) 
Bei 'X' wird die Befehlskette aus einer Datei des Typs .FLX entnommen. 

Wenn ein Flip nicht funktioniert: mit Alt+r in den Reservespeicher schauen, dort sieht man, was in #uYi und #uZi wirklich steht. Insbesondere muß der Inhalt von #uYi exakt mit dem Fliptext in der Anzeige übereinstimmen.

Start von Flips ohne Hyperlink: Die Flips unter #uX0 bis #uX9 können mit der Alt-Taste ausgelöst werden: man drückt Alt+5, um #uX5 auszuführen. (Wenn #uXi nicht existiert, wird #uZi genommen.) Das ist natürlich eher etwas für Eingeweihte, aber diese können sich dann durch Direkteingabe eines Flip-Befehls (besonders mit den FLEX-Erweiterungen) das Leben u.U. sehr erleichtern...

10.2.8	Programmierte Validierungen (Eingabeprüfung)

Es gibt eine seit langer Zeit festgelegte Liste von Prüfmethoden für die Dateneingabe. In der Konfigurationsdatei (z.B. $A.CFG) kann man festlegen, ob und welche Prüfung(en) auf eine eingegebene Kategorie angewendet werden sollen (Anhang A.1.2). In der $A.CFG ist z.B. festgelegt, daß bei der Eingabe eines Titels (#20, #22, #23 oder #24) die Prüfung c (d.h. "ist das erste Wort ein Artikel?") durchzuführen ist, bei Eingabe von #87 dagegen soll die Prüfziffer der ISBN kontrolliert werden - das wäre Prüfung g. Die gewünschte Prüfung wird jeweils sofort, also gleich nach dem Druck auf die <Enter>-Taste, durchgeführt (und nicht erst beim Abspeichern des Satzes). 
Mit Version 13 kam die Verbesserung, daß Prüfungen auch auf Teilfelder bezogen werden können. Beispielsweise steht in der Konfiguration $U.CFG für das USMARC-Format die Zeile
#245"Title"?M?Aabchnp?Rnp?I01?J0123456789?Cac
und hier besagt die Angabe ?Cac, daß in der Kategorie #245 das Teilfeld ?a (das ist der Hauptsachtitel) der Prüfung c, also der Artikelprüfung, zu unterziehen ist. 
    Mit der Ausbreitung von allegro-Anwendungen auf immer mehr Bereiche und immer öfter auch nicht-bibliothekarische Anwendungen entstanden neue und diffizilere Wünsche für Spezialprüfungen, auch "Validierungen" genannt. Die meisten fallen wohl in eine der vier folgenden Gruppen:
1.	Logische Kopplung: Wenn Kategorie #abc besetzt ist, muß auch #xyz besetzt werden. Oder umgekehrt: wenn #abc besetzt ist, darf #xyz nicht besetzt sein. Oder: ein bestimmter Bearbeiter darf  #xyz nicht eingeben.
2.	Numerische Validierung: Der Inhalt von #abc muß eine Zahl sein und in einem vorgegebenen Bereich liegen. Oder: die Zahl in #abc muß in einem formal bestimmbaren Verhältnis zum Wert in #xyz stehen.
3.	Index-Validierung: Der Inhalt von #xyz muß im Index i vorkommen. Oder: der Inhalt von #xyz darf im Index i noch nicht vorkommen (Sicherung der Eindeutigkeit).
4.	Formale Validierung, evtl. mit automatischer Korrektur: Die Kategorie #xyz muß ein bestimmtes Zeichen (oder eine Kombination) enthalten, muß mit einem bestimmten Zeichen beginnen oder enden, oder ein bestimmtes Zeichen (oder eine Kombination) darf nicht (am Anfang oder Ende oder überhaupt) vorkommen - wenn es vorkommt, ist es durch ein anderes zu ersetzen oder zu beseitigen. 
Die Untersuchung konkreter Beispiele solcher Wünsche ergab, daß nur die Exportsprache das geeignete Mittel zur Realisierung sein konnte, wenn das gesamte Spektrum abgedeckt werden sollte. Der Anwender hätte also seine Prüfroutinen in der Exportsprache zu schreiben. Aber wo? In der Konfigurationsdatei? Das wäre aus programminternen Gründen nicht möglich gewesen. Wegen der sehr wichtigen Anforderungen vom Typ 3 kam nur die Index-Parameterdatei als Ort für die Prüfroutinen in Betracht. Wenn nämlich eine Eingabe am Index abzuprüfen ist, muß dazu oftmals erst eine Umcodierung (groß->klein, Umlaufauflösung etc.) erfolgen, und die dazu nötigen Angaben stehen in der Index-Parameterdatei. Diese ist nun allerdings schon reichlich mit Aufgaben befrachtet. Insbesondere war es eine Befürchtung, daß man endgültig nicht mehr mit den sowieso knappen Sprungmarken auskommen würde, wenn nun noch neue Teile hinzukämen. Dieses Detailproblem konnte jedoch, wie gleich gezeigt wird, entschärft werden.
    Wirksam werden die Validierungen in den Programmen PRESTO, aLFA und MENUED und auch a99, wenn man Daten eingibt oder korrigiert. 

So programmiert man eigene Validierungen
Grundsätzlich muß dazu in der Indexparameterdatei ein Hilfsabschnitt angelegt werden . Dieser Abschnitt muß ganz am Ende stehen, genauer: hinter der letzten Zeile der Kategorieliste. (D.h., dieser Abschnitt ist so etwas ähnliches wie der Kopf- oder Fußabschnitt beim Listendruck, -Ø 10.2.6.5.3, die bei den Indexparametern keinen Sinn machen.) Der Hilfsabschnitt beginnt mit einem  H  auf einer eigenen Zeile. Darunter kommt dann eine Kategorieliste, die alles enthalten kann, was die Exportsprache ermöglicht - nur sinnvoll muß es sein, und was das heißt, wird gleich klarer.
Sehr wichtig: Innerhalb des Hilfsabschnitts sind die Sprungmarken unabhängig von denen des Hauptteils, d.h. Sprungbefehle im Hauptteil finden nur innerhalb des Hauptteils, und Sprünge im Hilfsabschnitt finden nur innerhalb des Hilfsabschnitts statt. Das war bis V13 mit den Kopf- und Fußabschnitten nicht der Fall und konnte zu Fehlern führen. Diese ärgerlichen Probleme sind für V14 zugleich auch behoben.
Der Hilfsabschnitt hat folgende Funktion: 
·	Wenn eine Kategorie eingegeben wird (per Abfrageliste oder in der freien Eingabe), wird sofort nach Druck auf <Enter> der Hilfsabschnitt ausgeführt. 
·	Die Variable #u1 enthält dann immer die gerade eingegebene Kategorie. 
·	Wenn ein Ausgabetext produziert wird, dann wird dieser anschließend als Meldung auf der untersten Zeile ausgegeben, und zwar in der Farbe der Fehlermeldungen (-Ø Anhang A.3). Der Eingabetext wird in jedem Fall akzeptiert, die Meldung soll den Benutzer nur auf Probleme aufmerksam machen. Er wird im eigenen Interesse im Bedarfsfall auf die Meldung reagieren. Allerdings kann mit dem Manipulationsbefehl M die Kategorie sofort wieder gelöscht werden.
·	Der Hilfsabschnitt wird aber noch bei anderen Gelegenheiten aufgerufen. Dann steht ein Wert in der Variablen #u2, damit man erkennen kann, welche Situation vorliegt: 
	#u2 e	Abfrageliste wurde beendet (letzte Frage beantwortet) 
	#u2 s/N	Vor dem Speichern (es wurde F10 gedrückt) / nach Zeitstempel und Nummernvergabe
	#u2 E/C/I	Es wurde soeben 'E' bzw. 'C' bzw. 'I' gedrückt 
	#u2 0/1/2/3	Die eingegebene Kategorie steht in #u1 (z.B. #u1 40 Name, Vorname) 
			und die Eingabe stammt aus der Abfrageliste (0) bzw. der Direkteingabe (1) bzw. aus der #b-Eingabe (2). Wert 3 tritt nach dem Einordnen einer Kategorie auf. 
Im Hilfsabschnitt muß in der Regel zuerst geprüft werden, was für eine Kategorie denn nun gerade eingegeben wurde, denn die Prüfroutine beginnt, wie gesagt, jedesmal am Anfang des Hilfsabschnitts.
Folgende Einzelheiten sind noch zu beachten: 
Fälle 0,1,2
	Die Kategorie ist zu diesem Zeitpunkt noch nicht im Aufnahmespeicher. Wenn sie dort mit einer Veränderung landen soll, muß man im Hilfsabschnitt einen output produzieren; dieser wird dann als Kategorie übernommen, anstelle der Eingabe. Der output muß die Kategorienummer mit enthalten! Also kann man auch eine andere Kategorienummer einsetzen, wenn das so gewünscht wird.
	Achtung: mit extrem langen Kategorien kann man das nicht machen; die Grenze für den output ist 300 Zeichen.
	Wenn man keinen output produziert, oder kein Hilfsabschnitt vorhanden ist, wird die Kategorie unverändert übernommen (auch wenn sie sehr lang ist). Statt einen output zu produzieren, kann man eine Kategorienummer vor den Text von #u1 setzen und diese Kategorie dann mit M einordnen lassen. Das geht bei beliebiger Länge.
Fall e
	ist geeignet, um fehlende Kategorien gleich am Ende der Abfrage zu entdecken. Z.B. kann man eine fehlende Kategorie dann mit einer Standardangabe belegen. Oder mit "????", das wird dann gleich anschließend sichtbar, da ja der Satz nach Schluß der Abfrageliste in Kategorieform angezeigt wird. Wenn die Abfrage mit 'x' verlassen wird, greift dieser Fall nicht! Wichtiger ist sicher auch deshalb der Fall 's'.
Fälle e, s und E
 	Wenn man in diesen Fällen einen output produziert, wird er als Fehlermeldung angezeigt. Im Falle  s  wird das Speichern nicht ausgeführt, denn man wird einen Fehler noch korrigieren werden sollen, bevor man speichert. Hier können also fehlende Kategorien oder Teilfelder angemahnt werden. Natürlich kann man für die beiden Fälle e und s denselben Abschnitt abarbeiten lassen.
Fälle E und C
	sind geeignet, um vor dem Bearbeiten schon gewisse Veränderungen an einzelnen Kategorien vorzunehmen, die man im Abschnitt s auch wieder rückgängig machen kann. Z.B. kann man ein bestimmtes Teilfeld aus einer Kategorie in eine andere (Hilfs-)katagorie schreiben lassen. Diese läßt sich dann leichter bearbeiten. Hinterher (Fall s) hängt man diese Kategorie eieder als Teilfeld an die Ausgangskategorie und beseitigt die Hilfskategorie.
	Oder: man "hinterlegt" eine Kategorie, die nicht verändert werden soll, als Kopie in einer Anwendervariablen und sortiert sie hinterher vor dem Speichern (Fall s) wieder ein
Mit konkreten Beispielen zu den vier Typen von Prüfungen wird nun gezeigt, wie man Validierungen programmieren kann. Das recht komplizierte Beispiel zum Typ 2 stammt aus der Musik-Parametrierung (s.S. 5).
Beisp. zu 1:	Die Kategorien #40 und #60 dürfen nicht gleichzeitig besetzt sein. 
Beisp. zu 2:	Kategorie #77z soll die Gesamt-Spielzeit eines Musikstücks enthalten. Die einzelnen Teile (Sätze) des Stücks sind in der Kategorie #81m erfaßt, und zwar in der Form
			#81m1: Satzbezeichn.1 MM:SS¶2: Satzbez.2 MM:SS¶...¶Satzbez.N MM:SS. 
			Daher soll das Programm den Inhalt von #77z aus der Summe der Spielzeiten der einzelnen Teile in #81m errechnen und dann die #77z automatisch erzeugen (!) 
Beisp. zu 3:	Wenn die Kategorie (egal welche) ein Stammsatz-Kürzel (oder eine Identnummer) enthält statt eines Klartextes, soll das Programm prüfen, ob dies ein gültiges Kürzel ist, d.h. ob es im Index 9 zu finden ist.
			Wenn umgekehrt ein neuer Stammsatz eingegeben wird, soll das Programm prüfen, ob das neue Kürzel in #00 noch nicht im Register 9 vorkommt. Dort sind die Kürzel mit nachfolgenden '=' eingetragen.
			In diesem Fall soll die Annahme verweigert, d.h. die Kategorie #00 nicht abgespeichert werden. 
			Außerdem soll das Programm noch prüfen, ob die ISBN #87 im Register 9 schon vorkommt. Dort stehen die ISBNs ohne Prüfziffer und mit einem 'i' vorweg! Und der Titel in #20 soll im Register 4 gesucht werden: Wenn er vorkommt, Kontrollmeldung ausgeben.
Beisp. zu 4:	Kategorie #95c soll eine Zahl enthalten, und zwar mit Dezimalpunkt statt Komma, keine weiteren alphanumerischen Zeichen. Wenn es eine ganze Zahl ist, soll kein Punkt dahinter stehen. Die Zahl soll  ferner positiv sein. 
Es folgt der Hilfsabschnitt, der alle diese Prüfungen durchführt:
H	Hier fängt der Hilfsabschnitt an. Zuerst eine Verteilerliste für die zu prüfenden Kategorien.
	Die Angabe e0 ist nötig, damit diese Zeilen keine Ausgabe produzieren:
	(Jede produzierte Ausgabe erscheint unten auf der letzten Zeile!)
#u2 +- c"s" e0 	F10 gedrückt? Dann hier nichts machen. Sonst Eingabe prüfen:
#u1 +4 i1,4 i2,0 i3,  e0   ist es #40 ?  Dann #-4
#u1 +6 i1,6 i2,0 i3,  e0   ist es #60 ?  Dann #-6
#u1 +8 i1,8 i2,1 i3,m e0   ist es #81m?  Dann #-8
#u1 +0 i4,_ e0             Erstes Textzeichen ist '_'? Dann #-0
#u1 +A i1,8 i2,7 e0        ist es #87?  Dann #-A
#u1 +B i1,2 i2,0 e0        ist es #20?  Dann #-B
#u1 +C i1,9 i2,0 e0        ist es #90?  Dann #-C
#u1 +D i1,9 i2,5 i3,c e0   ist es #95c? Dann #-D
#u1 +K i1,0 i2,0 e0        ist es #00?  Dann #-K
#+#                        andere Kategorie? Dann nichts machen.
#-4 
#60 +Z e0	#40 wurde gerade eingegeben. Ist #60 besetzt? Dann #-Z
#+#
#-6 
#40 +Z e0	#60 wurde gerade eingegeben. Ist #40 besetzt? Dann #-Z 
#+# 
#-Z 
#t{ "#40 und #60 sind zugleich besetzt, das darf nicht sein!" } 
#+# 
#-8 
#u1 dsb dzt asb	Hilfsvariable #uzt löschen, #usb mit Inhalt von #u1 füllen
#-Y				d.h. der Inhalt von #u1 steht jetzt in #usb 
#usb e"¶" T" " c":" e":" x"*60" x"+zt" =zt	Minuten -> Sekunden, auf #uzt addieren 
#usb e"¶" T":" x"+zt" =zt				Sekunden dazurechnen 
#usb +Y b"¶" =sb 	Schleife: nächste Satzangabe fängt hinter ¶ an. Kein ¶ mehr? Dann
#uzt x"/60" e"." r2 dgt agt	  Sekunden->Minuten, in #ugt ablegen 
#uzt x"%%60" e"." r2 p":" Agt	 Rest-Sekunden mit ':' anhängen. #ugt enthält nun das Ergebnis.
#ugt p"#77z" M				  Ergebnis aus #ugt in #77z überführen 
#+# 
#-0 
#u1 +# y0 b"_" e"[ ,;:]" P"=" |98	Eingegebenes Kürzel in Register 9 suchen
#t{ "Kürzel kommt noch nicht vor" }	meldung, wenn nicht gefunden 
#+# 
#-A    #87 
!u1 +a e11 p"i" |98				kommt ISBN schon im Register 9 vor? 
#+#        					nein, dann nichts machen 
#-a 
#t{ "ISBN ist bereits vorhanden!" 7 } 	die 7 loest den Piepston aus 
#+# 
#-B 
!u1 +b e" : " u y2 |48 			Kommt der Titel schon im Reg. 4 vor? 
#+#             				Wenn nein, dann nichts. 
#-b 
#t{ "Dieser Titel kam schon mal vor" } 
#+# 
#-D		Zahl isolieren, Nullen und Punkt hinten abschneiden, in #95c einsetzen 
#u1 x"*1" F"0." p"#95c" M	(mit x"*1" entsteht die reine Zahl! Sie hat immer einen Punkt.) 
#95c +# x">0" e0 
#t{ "Unzulässiger Zahlenwert!" }
#+# 
#-K 						Kürzel schon vergeben?
!u1 +k P"=" |98 e0			Es müßte mit '=' dahinter in Register 9 stehen
#+#		trifft nicht zu, Ende 
#-k		trifft zu: 
#t{ "Dieses Kürzel existiert schon! " 7 }
#u1 y0 p"#00 " e4 M 		#00 gleich wieder löschen! (M-Befehl mit leerer #00 ausführen)

 `Vorangehender Teil`   /   `Fortsetzung` 

?Vorangehender Teil=h ac10-10 
?Fortsetzung=h ac10-12 
?FLEX-Technik=h flex 
?a99/alcarta=h =Flips in a99 und alcarta