`Vorangehender Teil`   /   `Fortsetzung` 
 
10.2.6.4  Export: Steuerbefehle 
 
Zwischen den Anweisungszeilen, die jeweils für die Ausgabe einer bestimmten Kategorie sorgen, können in der Kategorieliste auch Steuerbefehle stehen. Diese erweitern die Möglichkeiten der Verarbeitung. 
Jeder Steuerbefehl muß auf einer eigenen Zeile stehen und ebenfalls mit '#' beginnen. 
 
#tz	Unbedingte Texteinfügung 
#t{CS}	z muß die Nummer eines `Zwischenteils` sein (-Ø 10.2.0), CS  eine `Steuerzeichenkette.` Statt einer Kategorie wird dann an dieser Stelle die betreffende Zeichenkette ausgegeben. Dies ist nützlich, weil man sonst Textteile nur über die Prä- und Postfixe, abhängig von den vorkommenden Kategorien, einbringen kann - und diese werden nicht ausgegeben, wenn die Kategorie nicht belegt ist. 
	Beispiele: 
	#t4 				Zwischenteil 4 ausgeben 
	#t{ C "xyz: " } 	Neue Zeile, dann "xyz: " schreiben. 
 
#Tk	Hier ist für k nur eine Nummer erlaubt; Zwischenteil k wird nicht ausgegeben, sondern das Programm merkt sich diese Nummer für den Fall, daß während der Ausgabe einer Kategorie plötzlich ein Seitenumbruch fällig wird und die Kategorie dadurch unterbrochen werden muß. Der Seitenumbruch wird dann ausgeführt, und vor dem Weiterdrucken wird Zwischenteil k ausgegeben. Sinnvollerweise enthält  k  eine Druckersteuerung, mit der die Schriftart der unterbrochenen Kategorie vor dem Weiterdrucken wieder neu eingestellt wird. Es kann sich bei k aber auch um einen Unterprogrammaufruf handeln.  Beispiel: 
	#T70		Zwischenteil 70 für Seitenumbruch festlegen 
	#98 ....		wenn während Ausgabe von #98 ein Seitenbruch passiert, 70 ausgeben! 
	#T0			Dadurch gilt #T70 nur, während #98 ausgegeben wird. 
 
#i	Indikator-Aktion : hiermit kann man auf bestimmte Zeichen an bestimmten Positionen reagieren. Der Befehl bezieht sich immer auf die Kategorie #cc (also die zuletzt benutzte, -Ø 10.2.6.2). Zu beachten ist, daß diese innerhalb von Unterprogrammen konstant gleich der zuletzt vor dem Aufruf des UP benutzten Kategorie ist. Für die Überprüfung von Zeichen im aktuellen Arbeitstext gibt es den Manipulationsbefehl "Indikatorprüfung" (-Ø 10.2.6.3). 
	Die allgemeine Form der Indikatoraktion lautet: 
#ik,x A 
	mit	k = Positionsnummer 
		x = Zeichen 
		A = Aktion (Zwischenteil-Nummer oder UP-Aufruf) 
	Wirkung: Aktion A wird ausgeführt, wenn in der aktuellen Kategorie  #cc (-Ø 10.2.6.2) an der Position k das Zeichen x steht. Sonst passiert nichts. Sehr zu empfehlen, wenn eine ganze Serie von Alternativen abzuarbeiten ist. 
	Die Zeichenzählung beginnt mit der ersten Ziffer der Kategorienummer, das 4. Zeichen ist dann also das erste Textzeichen der Kategorie. Z.B. würde  #i4,3 >U  bedeuten, daß das 4. Zeichen der gerade vorher angesprochenen Kategorie geprüft wird. Ist es das Zeichen '3', dann wird Unterprogramm U ausgeführt. Insbesondere ist der Befehl nützlich, wenn man mit Indikatoren arbeitet, d.h. Steuerzeichen, die immer an einer bestimmten Position der Kategorie stehen. 
	Wenn man Bedingungen prüfen will, die aus mehr als einem Zeichen bestehen, arbeitet man mit dem Manipulationsbefehl cX oder mit "Anwendervariablen" (-Ø 10.2.6.3). 
 
#wh	Wiederholung des Kopftextes auf Fortsetzungskarte. Der bis zu diesem Zeitpunkt produzierte Text wird wiederholt (mit Parameter fa dahinter, -Ø 10.2.2), wenn eine Fortsetzungskarte gedruckt werden muß. Relevant ist dies nur bei Kartendruck (fl>0).  
 
#bbef	Basisparameter ändern. Die Basisparameter ( -Ø 10.2.1-5) sind Konstanten, die während der gesamten Arbeitszeit des Programms gelten, nachdem die Parameter geladen sind. Dieser Befehl ermöglicht es aber, während der Abarbeitung, mittendrin zwischen zwei Exportbefehlen, Basisparameter beliebig oft zu ändern. Ob dies aber sinnvoll ist, muß man sich gut überlegen! Brauchbar ist der Befehl z.B., um den Basisparameter ke ab- oder wieder einzuschalten:  #bke=""  würde ihn abschalten. Sinnvoll wäre auch, zwischendurch ein anderes Maskierungszeichen ein- und wieder abzuschalten: #b?=%% würde das %% einschalten, #b?=? würde wieder das Fragezeichen einschalten (siehe -Ø 10.2.6.3 Typ 3).
 
#q{ "fragetext" }     [nur in PRESTO, APAC usw. sinnvoll, nicht in SRCH oder IMPORT] 
	Frage an den Benutzer : Der fragetext erscheint am Bildschirm über einem Eingabefenster, und das Programm wartet auf eine Benutzereingabe. Erst danach wird die Parameterdatei weiter abgearbeitet. Die Antwort steht dann in #uxq und kann beliebig ausgewertet werden. In a99 und alcarta geht man anders vor, um dem Nutzer eine Frage zu stellen: man nutzt die FLEX-Methode. 

#dV 	Ausführen der Steuersequenzen (definiert mit p x 9) im ganzen aktuellen Satz.  Siehe `Vb.164`

Und noch zwei ganz besondere Befehle für die Unicode-Gemeinde (ab V29.3):
#u&# ; 
#dU 	Umrechnen von UTF-8-Codes im ganzen Satz in Entitätennummern der Gestalt  &#E; für HTML. Schiebt man  #dV  noch nach, kann man damit UTF-Codes indexfähig machen.
 
Ein besonderer Steuerbefehl ist der Schaltbefehl, der mit den Nachladebefehlen in engem Zusammenhang steht. Siehe dazu 10.2.6.7. 

10.2.6.5		Sprünge, Unterprogramme 
 
10.2.6.5.1	Sprungbefehle und Sprungmarken 
	Sprungbefehle der Form "+m" mit einem einzelnen alphanumerischen Zeichen oder Sonderzeichen 'm' können, wie schon beschrieben, in Kopfbefehlen (-Ø 10.2.1) und als bedingter Sprung in Exportbefehlen vorkommen (-Ø 10.2.6.1). 
	Aber es gibt auch eine Art GO TO-Befehl: eine Befehlszeile der Form 
#+m	in der Kategorieliste heißt Unbedingter Sprungbefehl, denn er wird bedingungslos ausgeführt, wenn die Abarbeitung der Kategorieliste an diese Stelle kommt. 
	Empfehlung: Kleinbuchstaben (im Gegensatz zu den ak-Sprungbefehlen), erlaubt sind aber alle druckbaren Zeichen. Nicht erlaubt sind die ASCII-Werte 0-15, 26, 27,34,("), 35 ('#'),39('), 45 ('-'), 255. 
 
	Die Sprungmarke, zu der ein Sprungbefehl hinführen soll, muß so aussehen: 
#-m 
	Die Anführungszeichen ' und " sind für m nicht erlaubt. 
	z.B. könnte innerhalb der Kategorieliste diese Sequenz stehen: 
	#39 +y #72 8	heißt: wenn #39 vorkommt, weiter bei Sprungmarke #-y 
	#40 e" = " 		wenn nicht: #40 ausgeben, Präfix " = " 
	#+w            	Dann Sprung nach #-w  
	#-x            	Sprungmarke x, zu der von anderswo gesprungen wird 
	#...         	weitere Exportbefehle 
	#-w        		Sprungmarke w 
	#... 
	#-y         	Sprungmarke y 
	#71 			hier geht es weiter nach Sprung auf y: #71 wird ausgegeben  
	Eine Sprungmarke beeinflußt selbst den Ablauf nicht, wenn das Programm bei der sequentiellen Bearbeitung auf eine solche Zeile stößt. Das Programm macht dann mit der nächsten Zeile weiter. 
	Man beachte, daß Sprungmarken nur einzelne Zeichen sein können - im Gegensatz zum Import, wo längere Bezeichnungen erlaubt sind (-Ø 11.2.3.6). Der Grund ist die Optimierung: beim Export ist Tempo wichtig, denn z.B. die Bildschirmanzeige soll so schnell wie möglich gehen. Leider kann man dadurch aber nur etwa 220 Sprungmarken in einer Parameterdatei haben. Man beachte, daß man bei den bedingten Sprüngen (-Ø 10.2.6.1) oft ohne Sprungmarke auskommen kann. 
	Vorsicht ist geboten, wenn man Rücksprünge (Marke oberhalb des Befehls) programmiert. Dadurch entsteht eine Schleife, die nur endet, wenn es einen Aussprung gibt, der auch garantiert erreicht wird. 
 
Sonderfälle von Sprungbefehlen 
	Die zwei hier beschriebenen Fälle gelten sowohl für bedingte wie für unbedingte Sprünge: 
#+#	Ende 
	Am Ende der gesamten Kategorieliste braucht kein Endebefehl zu stehen. Wenn aber mittendrin aufgrund einer Bedingung die Ausgabe des aktuellen Satzes enden soll, ist dies der Endebefehl, d.h. die Bearbeitung endet an dieser Stelle, der aufbereitete Satz gilt als fertig und wird ausgegeben. Eine Sprungmarke  #-#  kann deshalb nicht mit einem Sprungbefehl erreicht werden. Statt dessen ist sie reserviert für die "Globale Manipulation" (S.200): sie leitet den dafür vorgesehenen Abschnitt ein. 
#+-	Abbruch 
	Dieser Sprungbefehl bewirkt einen Abbruch der Verarbeitung. Der Rest des aktuellen Exportsatzes wird nicht ausgegeben. Sinnvoll ist das nur nach einer Bedingungsprüfung (vgl. "Anwendervariable" in 10.2.6.3 und "Indikatoraktion" in 10.2.6.4). Auch  #--  kann deshalb nicht als Sprungmarke vorkommen. 
	Empfehlung: Prüfungen auf Exportwürdigkeit des Satzes ganz oben ansiedeln, bevor schon irgendein Inhalt ausgegeben wird. 
 
Reservierte und empfohlene Sprungmarken 
#-1 ... #-9	Wenn ic=1 gesetzt wurde, benutzt das Programm diese Sprungmarken zur Umcodierung der Benutzereingabe in den Registern 1 bis 9 (für 10 ist  #-:  möglich). 
#-0	Hier wird die Kurztitelzeile aufbereitet. Dazu gehört ein Befehl ak=zz+0 . 
#-@	Primärschlüssel-Aufbereitung: Für die Identifikationsnummer zu benutzen, wenn man mehrbändige Werke verknüpft speichern will. Dann ist es möglich, in der Titelanzeige mit 'B' und 'b' vor und zurückzuschalten. (Vgl. als Beispiele die entsprechenden Abschnitte in CAT.API) 
#-/	Restriktionsschlüssel, mit V15 neu eingeführt (-Ø 10.2.9) 
#-.	sog. SR-Schlüssel für die "Satzübergreifende Suche" (-Ø 10.2.6.9) 
#-``	(Gravis!) Flip-Aufbereitung: anwendungsspezifische Umschaltungen in der Bildschirmanzeige ( 10.2.7) 
	(nur bei DOS wichtig) 
#-#	Globale Manipulationen (in Anzeige- oder Exportparametern; (-Ø 1.5.4, PRESTO-Funktion Strg+F10) 
#--	Löschkontrolle (-Ø 10.2.6.8) 
#-_	Nach F4, am Ende einer Ergebnismenge, führt PRESTO diesen Abschnitt aus. 
#-(	Abschnitt für Anzeige des Internformats in a99/alcarta  (sonst kommt bei F5 nichts). Beispiel in d-wrtf.apr. 
#- E	(Leerzeichen vor dem E!) Endabschnitt für Listenproduktion (-Ø 10.2.6.5.3); auch bei Beendung von PRESTO wird dieser Abschnitt ausgeführt. 
H	Hilfsabschnitt für "Programmierte Validierungen" (-Ø 10.2.8) in den Indexparametern 
	Hierhin wird nicht mit Sprungbefehl gesprungen, sondern automatisch bei jeder Kategorieeingabe und einigen anderen Ereignissen, z.B. wenn F10 gedrückt wird zum Speichern.  
 
10.2.6.5.2	Unterprogramme: 
	Beginn und Ende eines Unterprogramms werden durch öffnende und schließende runde Klammern markiert. Auch diese Zeilen beginnen mit '#'. 
	An beliebiger Stelle in der Kategorieliste, jedoch unterhalb des Aufrufs, kann folgendes stehen: 
#(P	Beginn des Unterprogramms P 
#...	Text des Unterprogramms:  
#...		beliebige Exportbefehle u.a. 
#)P	Ende des Unterprogramms P 
	Dabei kann für P jeder Buchstabe und jede Ziffer stehen. 
 
	Die Endemarke #)P darf mehrfach vorkommen und kann auch oberhalb #(P stehen. Das ist nützlich, wenn im UP Sprünge vorkommen. 
 
	Das UP wird dann mit seinem "Label" P von beliebiger Stelle aus so aufgerufen: 
 
#>P	Aufruf: Führe das Unterprogramm P aus 
	d.h. '>' ist das Befehlszeichen für Unterprogramm-Aufruf. 
	Der Aufruf kann nicht nur anstelle eines Exportbefehls stehen, wie hier gezeigt, sondern auch als Manipulationsbefehl (anstatt Präfix) oder anstelle einer Postfix-Nummer. 
	Wenn man einen UP-Aufruf als Manipulationsbefehl benutzt, bewirkt die Zeile selbst keine Ausgabe; die Kategorie kann aber innerhalb des UP an beliebiger Stelle als Sonderkategorie #cc (-Ø 10.2.6.2) angesprochen werden. 
 
	Hier ein formales Beispiel für den Aufruf von Unterprogrammen aus Exportbefehlen:  
 
#xxf +c p>Q #kt1 >R #kt2 >S #zz 1  
#ya ... 
#yb ... 
#yc ... 
#-c 
#za ... 
 
	Das bedeutet: 
	1.	Wähle Kategorie #xx mit Folgezeichen f. Wenn sie existiert, führe Unterprogramm Q aus. Darin kann #xxf unter dem Namen #cc angesprochen und ausgegeben werden.  
	2.	Gehe anschließend (ohne #xxf weiter zu bearbeiten oder auszugeben!) zum Sprungziel #-c . 
	3.	Wenn die nächste tatsächlich vorkommende Kategorie (das muß nicht #ya sein, die kann fehlen; es kann #yb oder #yc, #za oder noch eine weitere sein) kleiner oder gleich #kt1 ist, führe Prozedur R aus, wenn sie größer als #kt1, aber kleiner oder gleich #kt2 ist, Prozedur S, sonst gib Zwischenteil 1 aus (wenn die nächste Kategorie größer als #kt2 ist). 
	4.	Wenn Kategorie #xxf aber in der aktuellen Aufnahme gar nicht vorkommt, fahre mit der nächsten Zeile  (#ya ...)  fort. 
	Nochmals: Innerhalb der Unterprogramme #(Q, #(R und #(S kann man auf die zuletzt vor dem Aufruf benutzte Kategorie zurückgreifen: sie steht unter der Sonderkategorie #cc (-Ø 10.2.6.2). Und zwar enthält sie den unvorbehandelten Text von #xxf. Bei verschachtelten Aufrufen bleibt aber nur der erste Text in #cc erhalten. Andere Texte, die man braucht, kann man vor dem Aufruf in Anwendervariablen unterbringen (-Ø 10.2.6.2/3). 
 
	Beispiel: 
	In #40, #40a, #40b ... sollen die Namen von Verfassern stehen. In einer Liste sollen sie in der Form "Vorname Name; Vorname Name; Vorname Name ..."  erscheinen, also in der nicht-invertierten Form. Das erreicht man so:  (wobei 3="; "  und 8 =". - " ) 
	#40. ++ p>K m>K #40z 3 #zz 8   vor jeder #40x wird Unterprogramm #(K ausgeführt 
	#+v	wenn abgearbeitet: weiter bei #-v 
	#(K	hier beginnt Unterprogramm K, es invertiert Namen 
 		(#cc enthält dann den Text von #40...) 
	#cc b", " #zz 0	nimm zuerst den Teil hinter dem ", " 
	#cc e"," p" " #zz 0	dann nimm den Teil vor ", " und setze " " davor ein 
	#)K      	Ende des UP 
	#-v	Sprungmarke: hier geht's weiter, wenn keine #40 mehr 
	Wenn der erste Verfasser anders behandelt werden soll, könnte man hinter p auch ein anderes UP angeben, z.B. p>E.  In den Parameterdateien D-1.APR und P-KARTE.APR wurde diese Technik auf alle Personennamen angewendet, wobei mittels weiterer Unterprogramme auch die Funktionsbezeichnungen automatisch erzeugt werden. 

10.2.6.5.3  Sonderteile: Kopf-, Fuß- und Endabschnitt 
Unter dem Ende der Kategorieliste kann man noch zwei separate Listen und einen Sonderabschnitt anfügen, die die Angaben für den Kopf- bzw. Fußabschnitt enthalten. Diese Abschnitte stellen praktisch auch Unterprogramme dar, die aber bei Bedarf automatisch aufgerufen werden. Bei Kartendruck kommen diese Angaben dann oben bzw. unten auf die Karte, bei Listendruck oben bzw. unten auf die Seite (hier sind dann die Sonderkategorien #p0..#p2 sinnvoll). Wenn ohne Seitenumbruch ausgegeben wird (zm=0, z.B. ASCII-"download"-Datei), dann werden diese Abschnitte nur am Dateianfang bzw. -ende ausgeführt. Vor allem ist es wichtig, daß man dadurch einen Dateikopf erzeugen kann (s.a. 1 10.2.4, Parameter di), wie es für diverse Fremdsoftware bzw. für die Druckerinitialisierung notwendig ist. Man braucht solche Abschnitte auch für Rechenaktionen, und zwar für die Initialisierung der Variablen bzw. für die Ausgabe der Ergebnisse. 
H	Hilfsabschnitt, nur in Indexparametern. Für "programmierte Validierungen" (-Ø 10.2.8), mit denen jede Dateneingabe sofort überprüft werden kann. 
K	leitet die Liste für den Kopfabschnitt (Vorspann) ein und beendet zugleich den Hauptteil, bzw. 
F	die Liste für den Fußabschnitt (Nachspann).  
	In den Indexparametern: Abschnitt für beliebige Umwandlung der Variablen #u1. Der erzeugte Output wird in a99/alcarta statt der tatsächlichen Registerzeile gezeigt. Dadurch kann man dem Nutzer vorspiegeln, der Index sähe anders aus als er wirklich aussieht. Was man im einzelnen mit #u1 macht, ist völlig beliebig. Die Variable #u1 enthält die umzuwandelnde Registerzeile, und zwar die Nummer (1 ... 9 : ;) auf der ersten Position vor dem Text. Ausgeführt wird dies nur im Moment der Indexanzeige, nicht während der Indexierung! Mehr dazu in `Vb.149b`
 
Für Listen- und Dateiexport gibt es außerdem noch: 
#- E	Endabschnitt für Listenproduktion (ein Leerzeichen vor dem E!) Wird automatisch am Ende eines Exportlaufs (Dateiende) vom Programm SRCH und auch von PRESTO ausgeführt, damit man z.B. Rechenergebnisse ausgeben kann. Wichtig bei zm>0, denn der Abschnitt F wird dann an jedem Seitenende ausgeführt! 
#-_	Diesen Abschnitt führt PRESTO am Ende jeder Ergebnismenge aus, wenn mit F4 exportiert wurde. 
 
Wenn K und F beide auftreten, muß man die Reihenfolge einhalten. Es muß außerdem ff=2 gesetzt sein, damit diese Abschnitte wirksam werden (-Ø 10.2.2). Das Ende dieser Unterprogramme wird automatisch durch den Beginn des anderen bzw. durch das Ende der gesamten Parameterdatei markiert.  
Wichtig: Die Sprungmarken der Abschnitte K, F und H sind unabhängig von denen des Hauptteils, d.h. man muß hier keine Rücksicht auf dort schon vergebene Marken nehmen.  
Ansonsten können diese Listen alles enthalten, was in der Hauptliste vorkommen kann. Die K-Liste muß bei Kartendruck insbesondere den Befehl #wh enthalten (s.o.), wenn Fortsetzungskarten richtig funktionieren sollen. Jedoch: man benutzt Kopf- und Fußabschnitte in der Regel nur beim Listendruck für Seitenkopf und -Fuß. Beim Kartendruck ist es praktischer, die oft sehr unterschiedlichen Köpfe für verschiedene Eintragungstypen mit Sprungbefehlen von den ak-Zeilen aus zu steuern (-Ø 10.2.1). In den Parameterdateien P-KARTE.APR und P-NORMAL.APR sind beide Methoden der Kopfgestaltung zu sehen.  
Sehr wichtig sind Kopf- und Fußabschnitte auch in Verbindung mit Rechenbefehlen, siehe nächster Abschnitt.  
In Indexparametern machen Kopf- und Fußabschnitte keinen Sinn. Es gibt dort als separaten Abschnitt den sog. Hilfsabschnitt, in dem die "Programmierten Validierungen" (Eingabeprüfungen) programmiert werden können. Siehe dazu 10.2.8 
 
Es gibt die FLEX-Befehle `download Head/Foot` zur direkten Ausführung der Abschnitte. 

`Vorangehender Teil`   /   `Fortsetzung` 
 
?Vorangehender Teil=h ac10-7 
?Fortsetzung=h ac10-9 
?Vb.164=h vb164 
?download Head/Foot=h xdownloa=h download Head 
?Steuerzeichenkette.=h ac10-2=Steuerzeichenketten 
?Zwischenteils=h ac10-2=10.2.0  Zwischenteil 
?Vb.149b=h vb149b=Vorspiegelungen