So flexibel und leistungsfähig wie das Z-System und seine Programme auch sein mögen, es gibt mindestens einen Anwendungsfall, den das Lieblingstool nicht berücksichtigt.
Zum Beispiel soll bei Vorhandensein einer bestimmten Datei ein spezielles Programm ausgeführt werden, ansonsten soll eine Mledung auf dem Bildschirm ausgegeben werden.
Genau diesen Bereich deckt ein unscheinbares Element des Z-Systems ab -- der FCP. Laut Handbuch heißt FCP "Flow Command Package", zu deutsch Fluß Steuerung. Dies bringt uns erstmal auch nicht viel weiter. Die Anmerkung im Handbuch, daß der Umgang mit der Fluß Steuerung gewöhnungsbedürftig und mit einem gewissen Lernaufwand verbunden ist, kann ich nur bestätigen. Viel zu spät entdeckt man den Nutzen von IF, ELSE & Co.
Hat man die ersten "Gehversuche" mit den FCP-Befehlen gemacht, fehlt wahrscheinlich immer noch das Verständnis. Daß sämtliche Befehle ignoriert werden, solange der IF-Status "false" (falsch bzw. unwahr) ist, bekommt man recht schnell heraus. Auch der Statuswechsel mittels ELSE oder das Rücksetzen durch ZIF funktioniert reibungslos. Doch wie sollen diese Dinge bei der täglichen Arbeit mit dem Z-System behilflich sein?
Am besten lernt man den Umgang mit der Fluß Steuerung, wenn man sich Beispielscripts und -makros ansieht, die mit NZ-COM ausgeliefert werden. Denn erst in automatisierten Abläufen macht die Arbeit mit dem FCP Sinn. In einer mühsam eingetippten Kommandozeile ist der Aufwand normalerweise zwecklos.
Da ich auf Scripts erst später eingehen werde, möchte ich an dieser Stelle nur die FCP-Befehle behandeln. Standardmäßig wird ein FCP mit einer ganzen Reihe von Befehlen installiert. Eine Bedingung wird mit dem Befehl IF (deutsch: wenn) eingeleitet. Nur wenn die Bedingung erfüllt (also "true" = "wahr") ist, werden die nachfolgenden Befehle ausgeführt. Anderenfalls werden sie bis zum Eintreten des Status "true" ignoriert. Es können auch mehrere IF-Bedingungen in bis zu acht Ebenen verschachtelt werden. Es gilt dann der Status der jeweils letzten Ebene.
Die Bedeutung der logischen Operatoren AND und OR zur Verknüpfung von Bedingungsparametern dürfte klar sein. Der Befehl ELSE (deutsch: sonst) kehrt den aktuellen Status um. Somit kann auch auf eine nicht erfüllte Bedingung reagiert werden. Um eine Bedingung(sebene) abzuschließen, benutzt man den Befehl FI (= rückwärts gelesenes IF). Anschließend wird die vorhergehende Ebene aktiv bzw. nach der letzten IF-Ebene die Fluß Steuerung in den sogenannten Null-Status versetzt. Hat man sich zu sehr in den Ebenen "verstrickt" oder sollen alle Ebenen zugleich beendet werden, verwendet man am besten den Befehl ZIF (Zero IF). Damit wird die Fluß Steuerung augenblicklich auf Null-Status gebracht.
Ebenso wie bei fast allen Elementen des Z-Systems hat man auch beim FCP die Möglichkeit, zwischen unterschiedlichen Varianten zu wählen. Analog zur Leistungsfähigkeit verhält sich dann auch die Größe des FCP -- bei minimalen 4 Records beginnend gibt es nach oben kaum Beschränkungen. Doch selbst die umfangreichsten RCPs können nicht die Leistungsfähigkeit von IF.COM bieten. Es ist sozusagen die Programmvariante des Systemelements und sollte in keinem Root-Verzeichnis fehlen.
IF.COM wird aufgerufen, sobald ein Kommando zur Fluß Steuerung nicht gefunden werden kann. Dies ist normalerweise bei Befehlen der Fall, die die Existenz einer Datei oder den Inhalt der User-Register testen. Zwar dauert der Zugriff auf IF.COM länger als auf die internen Befehle, aber es kann sich trotzdem lohnen, einen Großteil der Fluß Steuerung aus dem FCP (und damit aus dem Arbeitsspeicher) zu verbannen, da die meiste Arbeit mit nur 4 Befehlen (IF, ELSE, FI, ZIF) erledigt werden kann.
Hierzu ein Beispiel: Das Programm VIEW ermöglicht die Betrachtung von PIP/PIF- und HIP/HIF-Bildern auf dem KC unter CP/M bzw. MicroDOS. Defaultmäßig wird dabei von der Standardauflösung -- also von PIP/PIF -- ausgegangen. Soll ein HiRes-Bild angezeigt werden, so muß nach dem Dateinamen zusätzlich die Option "H" angegeben werden. Die korrekte Syntax lautet:
VIEW [d:]Dateiname [H]
Um Bilddateien aus ZFILER heraus betrachten zu können, muß zuvor der Dateityp überprüft und eine entsprechende Kommandozeile generiert werden. Das ZFILER-Makro könnte wie folgt aussehen:
IF $ft=PIP;VIEW $fn;ELSE;IF $ft=HIP;VIEW $fn H;ELSE;ECHO Keine Bilddatei!^G;ZIF
In einer etwas strukturierteren Form würde sich die Kommandozeile so lesen:
Wenn Dateityp = PIP dann lautet die Kommandozeile: VIEW Dateiname Sonst Wenn Dateityp = HIP dann lautet die Kommandozeile: VIEW Dateiname H Sonst Ausgabe der Meldung: KEINE BILDDATEI!
(Control-G wird in akustisches Signal umgewandelt)Fluß Steuerung auf Null-Status
Wie bereits erwähnt, macht die Fluß Steuerung auf Kommandozeilenebene wenig Sinn. Zum einen kann man nach einem kurzen Blick aufs Directory selbst entscheiden, um welchen Dateityp es sich handelt und zum anderen stehen spezielle Platzhalter (z. B. für Komponenten des Dateinamens) nur unter Umgebungen wie ZFILER oder ARUNZ zur Verfügung.