19.  Prozedursprache
Übersicht
CFS bietet dem Benutzer die Möglichkeit, eine Folge von Kommandos/Selektionseingaben auch im prozedurgesteuerten Modus auszuführen. Die auszuführenden Kommandos können enthalten sein in einer
-  BS2000 DO-/Enter-Prozedur
-  CFS-Kommandoprozedur
-  Startup-Datei von CFS
Die im folgenden Kapitel beschriebene Prozedursprache von CFS gilt in gleicher Weise für den Aufruf von CFS in BS2000 DO-/Enter-Prozeduren, für CFS-Kommandoprozeduren (Kommando DO), sowie für Startup-Dateien von CFS.
Im Prozedurmodus von CFS werden die erforderlichen Eingaben (Selektionsbedingungen/ Variable Actions/Kommandos/Eingaben für Connections) von SYSDTA angefordert. Falls CFS Eingaben von SYSDTA entgegennehmen soll, muß der Prozeßschalter 1 auf ON gesetzt sein.
CFS kann in Prozeduren in zwei verschiedenen Betriebsarten genutzt werden:
a) Basismodus: In diesem Modus werden nur Eingaben akzeptiert, die der ersten CFS-Maske zugeordnet sind. Diese Eingaben können sein: Selektionsbedingungen, Variable Actions und Angaben für eine Dokumentationsdatei.
Der Programmablauf geht folgendermaßen von statten: Nachdem die gewünschten Datenobjekte aufgrund eines entsprechenden Eingabe-Datensatzes selektiert wurden, wird sofort zur Ausführung einer im Eingabe-Datensatz definierten Variablen Action (ON&...) übergegangen. Falls gewünscht wird eine Dokumentationsdatei der selektierten Datenobjekte erstellt.
Im Basismodus wird der gesamte Programmteil von CFS, der für die Ausführung von Kommandos zuständig ist (zweite CFS-Maske), übersprungen. In diesem prozedurgesteuerten Modus können mit relativ einfach aufgebauter Prozeduren, Datenobjekte selektiert und Variable Actions auf alle selektierten Datenobjekte angewendet werden.
Der Basismodus von CFS wird angenommen, wenn der Prozeßschalter 11 gesetzt ist. Außerdem müssen die Datensätze für die Dateiselektion mit dem Vorspann *001 beginnen. Näheres siehe Seite 19-.
Der Basismodus ist nur möglich, falls CFS in BS2000 DO- oder Enter-Prozeduren aufgerufen wird. In CFS-Kommandoprozeduren ist der Basismodus nicht anwendbar.
b) Erweiterter Prozedurmodus: In diesem Modus wird der vollständige Bildschirmdialog mit allen erforderlichen Eingaben und Prompts simuliert.
Im erweiterten Prozedurmodus von CFS können Dateien in der zweiten Maske prozedurgesteuert mit individuellen Action-Codes versehen und entsprechend bearbeitet werden (z.B. Modify). Auch können in diesem Modus Connections eröffnet und Eingaben für die Connections getätigt werden. Letzteres sogar, falls CFS in einem Enter-Prozeß abläuft. In diesem Fall emuliert CFS ein 8-bit fähiges Terminal vom Typ 9763.
Im erweiterten Prozedurmodus müssen andererseits alle zum Ablaufzeitpunkt erforderlichen Programmeingaben, die sich oft erst aufgrund einer bestimmten Konstellation ergeben, exakt vorhergesehen und in der Prozedurdatei entsprechend enthalten sein.
Für den erweiterten Prozedurmodus darf Prozeßschalter 11 nicht gesetzt sein. Die Angabe zur Dateiselektion muß mit dem Vorspann *002 versehen sein. Evtl. folgende Eingaben für das Kommandofeld von CFS haben keinen Vorspann.
Wird CFS in einer BS2000 DO-Prozedur mehrmals hintereinander aufgerufen, so sollte vor dem zweiten und jedem weiteren Aufruf das Kommando /SYSFILE SYSDTA=(SYSCMD) wiederholt werden.
Für den Prozedurmodus relevante Prozeßschalter
/SETSW ON=1 CFS fordert alle benötigten Eingaben mit RDATA vom Eingabemedium SYSDTA an. In einer BS2000-Prozedur muß dazu das Kommando /SYSFILE SYSDTA=(SYSCMD) abgesetzt werden. /SETSW ON=1 wird sowohl bei bei Prozeduren mit *001-Sätzen (Basismodus) als auch bei Prozeduren mit *002-Sätzen (erweiterter Modus) benötigt.
/SETSW ON=4 Der Umfang an Protokollierung und der Ausgaben von CFS wird auf ein Minimum reduziert. Im erweiterten Prozedurmodus werden insbesondere die Bildschirmmasken, die durch einen von SYSDTA gelesenen Satz mit Eingaben versorgt werden, nicht ausgegeben (WROUT).
/SETSW ON=11 Voraussetzung für Prozeduren im Basismodus (*001).
Mit dem Schalter 11 muß stets auch der Schalter 1 gesetzt sein.
Der Schalter darf nicht gesetzt sein bei Prozeduren im erweiterten Modus (*002).
/SETSW ON|OFF=31 Treten bei der Ausführung der Variablen Actions ON&COPY... / ON&ADD... / ON&SEL... Fehler auf, so wird der Prozeßschalter 31 gesetzt (/SETSW ON=31). Damit ist es für nachfolgende Prozedurteile möglich, die korrekte Ausführung der Variablen Action für alle beteiligten Dateien nachzuprüfen. Z.B. kann nach der Aufnahme von Dateien in eine Bibliothek ein automatischer ERASE-Lauf nur dann durchgeführt werden, wenn die korrekte Aufnahme aller Dateien sichergestellt ist (Prozeßschalter 31 ist nicht gesetzt).
Prozeßschalter 31 wird von CFS auch dann gesetzt, wenn keine Datenobjekte mit den gewünschten Auswahlkriterien gefunden bzw. wenn bei den Kommandos SI/ SIL/SIS keine Termine gefunden wurden.
Basismodus
Im Basismodus von CFS werden von SYSDTA nur Eingabesätze mit dem Vorspann *001 (eventuell mit Fortsetzung, siehe Beispiele) entgegengenommen.
Nach dem Einlesen der Selektionsbedingungen und der Variablen Actions werden von CFS keine weiteren Eingaben verlangt. Der Programmteil, der die Dateienliste am Bildschirm anzeigt und Kommandos bearbeitet, wird in diesem Fall übersprungen. CFS geht sofort zur Ausführung einer in der Form ON&... evtl. definierten Variablen Action über.
Nach Ausführung der Variablen Action für alle selektierten Datenobjekte wird auch die Terminierungsabfrage übersprungen. Falls im Eingabemedium SYSDTA ein neuer *001-Datensatz folgt, so wird dieser, wie oben beschrieben, als Eingabe für die Selektionsmaske von CFS betrachtet. CFS wird beendet, sobald die End of File-Bedingung für SYSDTA erreicht ist. Die End of File-Bedingung für SYSDTA tritt z.B. ein, wenn innerhalb einer DO-Prozedur als nächstes ein BS2000-Kommando folgt.
Die Eingaben für die Selektionsmaske von CFS werden im Basis-Prozedurmodus von CFS durch Datensätze mit dem Kennzeichen (Vorspann) *001 versorgt. Der Vorspann *001, zusammen mit den gesetzten Prozeßschaltern 1 und 11 bewirkt in CFS den Übergang in den Basis-Prozedurmodus.
Format der *001-Sätze
*001 select=par [; select=par ....... ; select=par ]
select Schlüsselwort eines Feldes der Selektionsmaske oder Abkürzung des Schlüsselwortes. Für nicht angegebene Schlüsselworte werden von CFS Spaces als Parameterwerte eingesetzt.
par Eingabewert für das entsprechende Feld der Selektionsmaske.
Als Trennungssymbol am Ende eines Parameterwertes vor dem Beginn eines neuen Schlüsselworts ist das Semikolon ";" zu verwenden.
Eingabesätze werden nur bis zu einer Länge von 80 Bytes ausgewertet. Falls ein Satz länger ist bzw. falls er aus Gründen der Übersichtlichkeit getrennt werden soll, so ist als Fortsetzungszeichen "-" an der letzten Stelle des Satzes anzugeben. Es sind beliebig viele Fortsetzungszeilen möglich. Unabhängig von der Möglichkeit der Fortsetzung ist zu beachten, daß jeder einzelne Parameter nur in der maximalen Länge des Eingabefeldes der Selektionsmaske angegeben werden kann. Für den Parameter FILENAME-SELECT sind dies z.B. 58 Byte.
Für die zu verwendenden Schlüsselworte gilt folgende Regel:
Grundsätzlich sind als Schlüsselworte die in der CFS-Selektionsmaske enthaltenen Feldbezeichnungen zu verwenden. Sie können jedoch verkürzt angegeben werden. Rechtsstehende Teile der Feldbezeichnung können bei der Angabe des Schlüsselworts weggelassen werden, solange eine eindeutige Zuordnung des verbleibenden Teils innerhalb aller Feldbezeichnungen der Selektionsmaske gewährleistet ist.
Anstelle von FILENAME-SELECT= würde es z.B. ausreichen, FI= anzugeben. F= wäre nicht mehr eindeutig, da zwei Felder in der Selektionsmaske mit dem Buchstaben F beginnen: FILENAME-SELECT und FCBTYPE.
Im folgenden sind die kürzestmöglichen Zuordnungen von Schlüsselworten zu den entsprechenden Feldern der Selektionsmaske von CFS aufgeführt:
FI --> FILENAME-SELECT
USER-I --> USER-ID
LA --> LAST PAGE
AG --> AGE
FCB --> FCBTYPE
VOL --> VOLUME
SH --> SHARE / NONSHARE
ACC --> ACCESS
PAS --> PASS
SO --> SORT OPTION
U --> USER OPTION
DOC --> DOCUMENTATION
VAR --> VARIABLE ACTION
Beispiele:
*001 FILENAME-SELECT=CFS;VARIABLE ACTION=ON&COPY ''='$TSOS.'
*001 USER-ID=(SYSDTA);USER OPTION=LACC>90;-
DOC=LST.EXPORT;VAR=ON&TSOSMT GEN SAVTAP,VSNOUT=(TAP001,TAP002)
*001 FILE=OLDLIST LISTE.EXPORT;VAR=ON&/ERASE
*001 FILE=.LST;AGE=0;VAR=ON&ADD BIBL.LST
Hinweise:
*001-Sätze dürfen in Startup-Dateien und CFS-Kommandoprozeduren nicht verwendet werden. In Prozeduren dieser Art sind für die Parameterversorgung der Selektionsmaske ausschließlich *002-Sätze zu verwenden (erweiterter Prozedurmodus, siehe unten).
Falls in einer CFS-Prozedur im Basismodus (*001), Dateien durch die Variable Action ON&ADD in eine noch nicht eingerichtete Bibliothek aufgenommen werden sollen (siehe letztes Beispiel), so erzeugt CFS eine Bibliothek vom Typ PLAM.
Parametrisierung durch Job- oder SDF-P Variable
Wird an irgendeiner Stelle in einem Datensatz für eine CFS-Prozedur das Konstrukt &(name) angegeben, so wird dieses vom CFS-Eingabeprozessor durch den momentanen Inhalt der Job- / SDF-P Variablen ersetzt. Hierbei kann für name auch eine CFS-Variable angegeben werden Die CFS-Variable muß als Wert den Namen der gewünschten Jobvariablen enthalten: &(&CFSVAR) .
Beispiele:
*001 FILE=&(CFS.SEL);SHARE=N;VAR=ON&/CAT RDPASS=&(PASSW),STATE=U
*&VAR1 = '&(&JVNAME)'
Erweiterter Prozedurmodus
Der erweiterte Prozedurmodus gestattet es, jegliche Art von Dateibearbeitung, sowie auch den Aufbau von Connections prozedurgesteuert durchzuführen. In diesem Modus ist dem Benutzer der volle Funktionsumfang von CFS auch in Prozeduren zugänglich. Dazu werden alle WRTRD-Aufrufe (Bildschirm-Eingabeaufforderungen) abgefangen und die Eingaben durch Datensätze von SYSDTA befriedigt. Die Nachrichtenköpfe bei Maskeneingaben werden von CFS selbst versorgt.
CFS verhält sich im erweiterten Prozedurmodus exakt in der gleichen Weise, wie dies auch im Dialog mit dem Benutzer am Bildschirm der Fall wäre. Der Ersteller einer derartigen Prozedur muß den Programmablauf daher möglichst eindeutig vorausbestimmen bzw. vorhersehen. Unvorhergesehene CFS-Anfragen, z.B. ob eine bestimmte Datei auf der Platte überschrieben werden soll oder nicht, würden in diesem Fall den ordnungsgemäßen Ablauf der Prozedur beeinträchtigen. Mit den Kommandos NQx sind eventuelle Anfragen von vornherein zu unterbinden.
Für den erweiterten Prozedurmodus von CFS darf der Prozeßschalter 11 nicht gesetzt sein. Im Unterschied zum Basismodus sind die Eingaben für die Datenselektion mit *002 zu beginnen. Damit wird CFS darauf vorbereitet, daß nachfolgend Kommandos und andere Masken-Eingaben von SYSDTA gelesen werden. Ansonsten hat der *002-Satz das gleiche Format wie der *001-Satz.
Format der *002-Sätze
*002 select=par [; select=par ....... ; select=par ]
select Schlüsselwort eines Feldes der Selektionsmaske oder Abkürzung des Schlüsselwortes. Für nicht angegebene Schlüsselworte werden von CFS Spaces als Parameterwerte eingesetzt.
par Eingabewert für das entsprechende Feld der Selektionsmaske.
Als Trennungssymbol am Ende eines Parameterwertes vor dem Beginn eines neuen Schlüsselworts ist das Semikolon ";" zu verwenden.
Eingabesätze werden nur bis zu einer Länge von 80 Bytes ausgewertet. Falls ein Satz länger ist bzw. falls er aus Gründen der Übersichtlichkeit getrennt werden soll, so ist als Fortsetzungszeichen "-" an der letzten Stelle des Satzes anzugeben. Es sind beliebig viele Fortsetzungszeilen möglich. Unabhängig von der Möglichkeit der Fortsetzung ist zu beachten, daß jeder einzelne Parameter nur in der maximalen Länge des Eingabefeldes der Selektionsmaske angegeben werden kann. Für den Parameter FILENAME-SELECT sind dies z.B. 58 Byte.
Alle auf einen *002-Satz folgenden Eingaben (Kommandos und Eingaben für Connections) sind in der Prozedur direkt, d.h. ohne Vorspann anzugeben. Der nächste Satz, der die Daten für die Selektionsmaske von CFS zur Verfügung stellt, ist mit dem Vorspann *002 zu versehen.
Hinweise:
In einem CFS-Aufruf dürfen *001- und *002-Sätze nicht zusammen angegeben werden. Ein gemischter Betrieb zwischen Basis- und erweitertem Prozedurmodus ist nicht möglich.
Wird an irgendeiner Stelle in einem Datensatz einer CFS-Prozedur das Konstrukt &(name) angegeben, so wird dieses vom CFS-Eingabeprozessor durch den momentanen Inhalt der Job- / SDF-P Variablen ersetzt.
Prozedurvariable
Im erweiterten Prozedurmodus von CFS können Variable sowohl im Text für die Programmeingaben, als auch in den prozedurinternen Sprachelementen (*-Anweisungen) verwendet werden. Diese Variablen sind nicht zu verwechseln mit BS2000-Prozedurvariablen und können nur innerhalb von CFS-Prozeduren und Startup-Dateien verwendet werden.
Der Name einer CFS-Prozedurvariablen beginnt mit einem Einleitungszeichen, das standardmäßig auf '&' gesetzt ist. Mit der Prozeduranweisung *SET PAR=x (siehe nächster Abschnitt "Elemente der Prozedursprache") kann das Beginnzeichen für Parameter auf jedes andere Sonderzeichen umdefiniert werden. Der Name einer CFS-Prozedurvariablen kann 1 bis 20 alphanumerische Zeichen umfassen. Als einziges Sonderzeichen ist '-' innerhalb des Namens einer CFS-Prozedurvariablen erlaubt. Die Bezeichnung einer CFS-Prozedurvariablen kann auch mit einer Ziffer beginnen.
Der Inhalt von CFS-Prozedurvariablen kann 1 bis 80 Stellen umfassen. Beim Start der Prozedur bzw. bei Zuweisung des Nullstrings (&var='') ist der Inhalt der Variablen auf binär Null gesetzt. Ausnahme: CFS-interne Prozedurvariable. Diese Prozedurvariablen besitzen fest vorgegebene Namen und werden von CFS automatisch bei jeder Bezugnahme mit einem ihrer Bedeutung entsprechenden Inhalt versorgt. CFS-interne Prozedurvariable dürfen in der *PROC-Anweisung für CFS-Prozeduren (siehe Seite 19-) nicht auftreten.
Zweistufige Substitution:
Der Inhalt einer Prozedurvariablen wird als Name einer anderen Prozedurvariablen interpretiert, falls die Variable in der Form &&var angegeben wurde.
Beispiel: Der Variablen &CX wurde der String 'VAR1' zugewiesen. Durch die Angabe &&CX wird der Inhalt der Variablen &VAR1 angesprochen. Ein Beispiel für zweistufige Variablensubstitution finden Sie auf Seite 20-.
CFS-interne Prozedurvariablen
&ACCT Abrechnungsnummer (ein bis acht Stellen) der Benutzerkennung, unter der CFS geladen wurde.
&ACCT(tsn) Abrechnungsnummer des LOGON-Kommandos der angegebenen TSN. Die TSN muß stets vierstellig angegeben werden. Die Abrechnungsnummer einer fremden TSN kann nur ermittelt werden, falls CFS unter der Benutzerkennung TSOS geladen wurde. Für ein Beispiel dieser Form der Variablenverwendung siehe Seite 19-.
&ARGC Anzahl der beim Aufruf an die CFS-Prozedur übergebenen Parameter. Leerparameter (par1,,par3) werden hierbei mitgezählt.
Wurden keine Prozedurparameter übergeben, hat die Prozedurvariable den Wert 0.
&BS2PL BS2000-Prozedurebene (Procedure Level Number).
'0': CFS wurde nicht in einer DO-Prozedur aufgerufen.
>'0': CFS wurde in einer DO-Prozedur des BS2000 aufgerufen.
&CFSINCON wurde das aktuelle Programm CFS in einer Connection aufgerufen ? Y | N.
&CFSMSG über diese bis zu 80 Stellen lange Variable kann auf die Nachricht zugegriffen werden, die bei nicht prozedurgesteuertem Ablauf von CFS in der Meldungszeile der letzten Bildschirmmaske ausgegeben worden wäre. Es werden sowohl die Fehlermeldungen aus der Dateienliste, als auch die Fehlermeldungen aus der Selektionsmaske an die Variable übergeben.
Die Variable CFSMSG hat den Leerstring ('') als Wert, falls die in der letzten Maske ausgegebene Meldung den Standardtext "Help: ?/?all/??" zum Inhalt hatte.
Beim Füllen der Variablen CFSMSG wird der Text der Nachricht in Großbuchstaben umgesetzt.
&CFSCOMP über diese Variable kann die CFS-Maske abgefragt werden, in der die nächste Eingabe erfolgt. Die Variable kann die folgenden Werte annehmen:
'SEL' Die nächste Eingabe erfolgt in der Selektionsmaske von CFS.
'CMD' Die nächste Eingabe erfolgt im Kommandofeld der (eventuell auch leeren) Dateienliste.
'DISP' Die nächste Eingabe erfolgt im Kommandofeld des CFS-Display/ Editors.
'CONx' Die nächste Eingabe erfolgt in der CFS-Connection der Nummer n.
&CMDMSG über diese bis zu 80 Stellen lange Variable kann auf die Meldung zugegriffen werden, die bei der zuletzt ausgeführten Prozeduranweisung Kommando */cmd (beliebiges BS2000-Kommando) ausgegebene wurde. Es werden sowohl die Fehlermeldungen, als auch Informationen des BS2000-Kommandos an die Variable übergeben.
Falls das BS2000-Kommando mehrere Meldungen ausgibt, so enthält die Variable CMDMSG nur den ersten Satz.
Die Variable CMDMSG hat den Leerstring ('') als Wert, falls die letzte Anweisung */cmd keine Meldung ausgegeben hat.
&COMPONENT In dieser Variablen wird die Komponente angezeigt, in der sich der Benutzer bzw. die Prozedur momentan befindet: 'CFS' | 'TAS' | 'JES' | 'JESG'
&CONx Ist eine Connection mit der angegebenen Nummer (0 <= x <= 9) eröffnet, so erhält die Variable als Wert den Namen der Anwendung, zu der die Connection eröffnet wurde (z.B. $DIALOG, $CONSOLE, ... ). Ist keine Connection eröffnet, erhält die Variable als Wert den Leerstring ('').
&CONxH Ist eine Connection mit der angegebenen Nummer (0 <= x <= 9) eröffnet, so erhält die Variable als Wert den Namen des Host-Rechners, zu dem die Verbindung besteht.
&CONxJ Ist eine Connection mit der angegebenen Nummer (0 <= x <= 9) zu $DIALOG eröffnet, so erhält die Variable als Wert den Jobnamen des Dialogprozeßes (.name   LOGON ).
Die Variable hat als Wert den Leerstring (''), falls
a) es sich nicht um eine Connection zu $DIALOG handelt,
b) im LOGON-Kommando kein Jobname angegeben wurde,
c) keine Connection mit der angegebenen Nummer eröffnet ist.
&CONxT Ist eine Connection mit der angegebenen Nummer (0 <= x <= 9) zu $DIALOG eröffnet, so erhält die Variable als Wert die TSN des Dialogprozeßes. In allen anderen Fällen erhält die Variable als Wert den Leerstring ('').
&CONxU Ist eine Connection mit der angegebenen Nummer (0 <= x <= 9) zu $DIALOG eröffnet, so erhält die Variable als Wert die Benutzerkennung des LOGON-Kommandos. In allen anderen Fällen erhält die Variable als Wert den Leerstring ('').
&DATE aktuelles Tagesdatum in der Form: yy-mm-dd
&DATE4 aktuelles Tagesdatum in der Form: yyyy-mm-dd (4-stellige Jahreszahl)
&DATE2 aktuelles Tagesdatum in der Form: dd.mm.yy
&DATE42 aktuelles Tagesdatum in der Form: dd.mm.yyyy (4-stellige Jahreszahl)
&DAY Wochentag des aktuellen Datums. Der Wochentag ist in folgender Form codiert:
1 = Montag, 2 = Dienstag, 3 = Mittwoch, ...., 6 = Samstag, 7 = Sonntag.
&DAY2 Wochentag des aktuellen Datums im Langtext in englisch.
&DAY2G Wochentag des aktuellen Datums im Langtext in deutsch.
&DISP-POS Gibt im Display-Modus bei SAM- und PAM-Dateien die Satz-/Blocknummer des ersten angezeigten Satzes. Bei ISAM-Dateien wird der Schlüssel des ersten angezeigten Satzes ausgegeben.
&DISPEOF Zeigt an, ob im Display-Modus aufgrund des letzten Kommandos (z.B. +n oder S) das Ende der Datei erreicht wurde oder ob ein DMS-Fehler aufgetreten ist.
'N' Das letzte Kommando führte nicht auf die End-of-File Bedingung.
'Y' Das letzte Kommando führte auf die End-of-File Bedingung bzw. die Jobvariable konnte nicht gelesen werden.
'DMSnnnn' Es ist ein DVS-Fehler mit dem angegebenen Code aufgetreten.
&FROM Wurde die CFS-Prozedur mit dem Fluchtsymbol aus einer Connection gestartet (^DO xxxx), so enthält die Variable &FROM die Nummer der Connection, aus der Prozeduraufruf erfolgte. Erfolgte der Prozeduraufruf in der Grundebene von CFS (DO xxxx), so enthält die Variable den Wert 'M' (Maintask).
&HOST Bezeichnung des Host-Rechners (ein bis acht Stellen), an dem CFS geladen wurde.
&LISTEND Die Variable enthält die Anzahl der Einträge der Dateienliste. Verborgene Einträge der Dateienliste werden hierbei nicht mitgezählt. Der Inhalt der Variablen ist leer (&LISTEND = '' ), falls keine Dateienliste ausgewählt ist (FILENAME-SELECT=NO).
&LISTEND2 Wie &LISTEND, jedoch werden verborgene Einträge der Dateienliste mitgezählt.
&LISTACT Die Variable enthält den Action-Code der zu dem ersten in der Bildschirmmaske angezeigten Eintrag der Dateienliste gehört. Der Inhalt der Variablen ist leer (&LISTACT ='' ), falls kein Action-Code bei der ersten in der Maske angezeigten Datei eingetragen ist.
&LISTENTRY Die Variable enthält den Inhalt des ersten in der aktuellen Bildschirmseite angezeigten Eintrags der Dateienliste. Der Inhalt der Variablen umfaßt 64 oder 69 Zeichen, je nachdem ob bei der Dateiselektion eine User Option angegeben wurde oder nicht.
&LISTENTRY2 Wie &LISTENTRY, jedoch werden Datumsangaben (DATE-Option) und binäre Felder in Archive-Listeinträgen nicht in der CFS-internen Form, sondern wie am Bildschirm dargestellt.
&LISTFN Die Variable enthält den Namen der ersten in der aktuellen Bildschirmseite angezeigten Datei.
&LISTCFN Die Variable enthält den Namen der ersten in der aktuellen Bildschirmseite angezeigten Datei in Langform, d.h. mit User-Id und wenn notwendig auch mit Cat-id.
&MONTH Monat des aktuellen Datums in numerischer Form (z.B. 01 für Januar).
&MONTH2 Monat des aktuellen Datums im Langtext in englisch.
&MONTH2G Monat des aktuellen Datums im Langtext in deutsch.
&NEXTENTRY Die Variable enthält den Inhalt des auf &LISTENTRY folgenden Eintrags der Dateienliste. Falls kein folgender Eintrag existiert, enthält die Variable den Wert '' (Nullstring).
&NEXTENTRY2 Wie &NEXTENTRY, jedoch werden Datumsangaben (DATE-Option) und binäre Felder in Archive-Listeinträgen nicht in der CFS-internen Form, sondern wie am Bildschirm dargestellt.
&LOGNAM Job-Name aus dem LOGON-Kommando (/.name LOGON ... ).
Falls beim LOGON-Kommando kein Jobname angegeben wurde, so hat diese Variable als Wert den Leerstring ('').
&LOGNAM(tsn) Job-Name des LOGON-Kommandos der angegebenen TSN. Die TSN muß stets vierstellig angegeben werden. Der Job-Name einer fremden TSN kann nur ermittelt werden, falls CFS unter der Benutzerkennung TSOS geladen wurde. Für ein Beispiel dieser Form der Variablenverwendung siehe Seite 19-.
&MODE Prozeßmodus, in dem CFS abläuft: 'DIALOG' | 'BATCH'
&NEXTCON enthält die Nummer einer noch nicht eröffneten Connection. Falls keine Connections eröffnet sind, hat NEXTCON den Wert 0. Falls Connection 0 bereits eröffnet ist, hat NEXTCON den Wert 1, usw. Falls alle Connections belegt sind, hat NEXTCON den Leerstring ('') als Wert.
&POSLIST enthält eine fünfstellige Zahl, die die Position des ersten in der aktuellen Bildschirmseite angezeigten Eintrags der Dateienliste beschreibt. Siehe hierzu auch Kommando Pn auf Seite 7-.
&POSUACT enthält eine fünfstellige Zahl, die die Position des mit einem %-Action Code markierten Eintrags der Dateienliste beschreibt. Siehe hierzu auch Kommando Pn auf Seite 7-.
&RDMASKIN enthält die Bezeichnung der Taste, mit der die letzte mit *RDMASK ausgegebene Benutzermaske abgesendet wurde. Beispiel: DUE. DUE steht hier für die ENTER-Taste. Für weitere Informationen zu der Prozeduranweisung RDMASK siehe Seite 19-.
&SEARCHRET Diese Variable enthält den Returncode des letzten Suche-Kommandos in CFS.
Returncode 'ERR' Syntaxfehler bei der Definition des Suchbegriffs.
Returncode '' Suchargument wurde nicht gefunden.
Returncode 'nnn' ein- bis sechsstellige Dezimalzahl.
Bei reinem Suchen: Spalte des ersten Treffers
Bei Suchen mit Ersetzen: Anzahl der gefundenen Treffer
&SEL-USID PVS und User-ID der selektierten Datenobjekte.
&SLABEL Name einer variablen Sprungmarke (*SKIP &SLABEL). Die Variable wird durch eine vorhergehende Anweisung *ON %OUT=(datei) versorgt. Die Datei, in der die Suchstrings der %OUT-Anweisung definiert sind, muß folgendes Format besitzen:
suchstring-1 .label-1
...
suchstring-n .label-n
&SLABEL enthält den Namen der Sprungmarke, die dem als erstes gefundenen Suchstring zugeordnet ist. Ein Anwendungsbeispiel hierzu finden Sie auf Seite 19-.
&SEL-LIB Name der Bibliothek, in der die ausgewählten Elemente enthalten sind.
&STATNAM Stations-Name (Name der Datensichtstation), an der CFS aufgerufen wurde.
&STATNAM(tsn) Name der Datensichtstation, an der ein Dialogprozeß mit der angegebenen TSN eröffnet wurde. Die TSN muß stets vierstellig angegeben werden. Der Stationsname einer fremden TSN kann nur ermittelt werden, falls CFS unter der Benutzerkennung TSOS geladen wurde. Für ein Beispiel dieser Form der Variablenverwendung siehe Seite 19-.
&SWSMODE Es wird der aktuell eingestellte Modus eines SWS-Kommandos ausgegeben.
1 NSWS (SWS1)
2 SWS2
3[W] SWS3[W]
4[W] SWS4[W]
&TIME aktuelle Uhrzeit in der Form: hhmmss
&TIME2 aktuelle Uhrzeit in der Form: hh:mm:ss
&TSN vierstellige TSN des Benutzerprozeßes, unter dem CFS aufgerufen wurde.
&TEMP-PREF interner Prefix für Namen von Temporärdateien (S.nnn.) nnn = aktuelle Session-Number. Falls keine Temporärdateien aktiviert sind, bleibt die Variable leer.
&USER-ID Benutzerkennung (ein bis acht Stellen), unter der CFS geladen wurde.
&USER-ID(tsn) Benutzerkennung des LOGON-Kommandos der angegebenen TSN. Die TSN muß stets vierstellig angegeben werden. Die Benutzerkennung einer fremden TSN kann nur ermittelt werden, falls CFS unter TSOS geladen wurde. Für ein Beispiel dieser Form der Variablenverwendung siehe Seite 19-.
Hinweise:
Das Ende des Namens einer Prozedurvariablen wird durch ein beliebiges Sonderzeichen außer '-' markiert. Ein Blank kann z.B. das Ende des Namens einer Variablen bezeichnen. Falls eine Variable im Datensatz einer CFS-Prozedur (kein Stern in Spalte 1) einen Teil des Textes substituiert, so ist zu beachten, daß ein Punkt hinter der Variablen bei der Substitution entfernt wird. Jedes andere Sonderzeichen als Abschluß einer Prozedurvariablen wird nicht aus dem Text entfernt.
Angenommen z.B., die Prozedurvariablen &N und &LOGNAM enthalten die Werte '1' und 'MEIER'. Der Datensatz "OC&N/.&LOGNAM.&N  LOGON ..." hat nach Substitution der Variablen den Inhalt: "OC1/.MEIER1  LOGON ...".
Mit der zweistufigen Substitution können CFS-interne Variablen ausgewertet werden, deren Bezeichnung erst zum Ablaufzeitpunkt genau feststeht.
Angenommen, eine CFS-Prozedur TEST wird durch ^DO TEST aus der Connection 2 aufgerufen. In der Prozedur wird die Variable &CX durch die Anweisung &CX = 'CON'&FROM.'H' mit dem Inhalt 'CON2H', d.h. mit der Bezeichnung der CFS-internen Prozedurvariablen &CON2H versorgt. Die Prozeduranweisung *WRITE '&CX = &&CX' bewirkt die Programmausgabe 'CON2H = HOST1'. HOST1 ist dabei der Name des Hostrechners, zu dem Connection 2 eröffnet wurde.
Die in einer CFS-Prozedur verwendeten eigenen Variablen können beim Aufruf der Prozedur mit Werten versorgt werden. Dies geschieht in der gleichen Weise wie bei DO-Prozeduren im BS2000 durch Angabe der Parameter im Anschluß an den Namen der aufzurufenden Prozedur:  DO prozedur, par1, par2, ......
Die Werte der in einer CFS-Prozedur angesprochenen Variablen müssen beim Aufruf der Prozedur entsprechend der verwendeten PROC-Anweisung als Stellungsparameter (wert) oder Schlüsselwortparameter (par=wert) angegeben werden. Für weitere Informationen hierzu siehe Seite 19- und 19-.
CFS-Prozedurvariable können auch in Menue-Dateien verwendet werden. Siehe hierzu Seite 10-.
Prozedurvariable und *PROC-Anweisung: Prozedurvariable werden mit ihrem ersten Auftreten innerhalb der Prozedur automatisch kreiert. Die CFS-Prozedursprache bietet die Möglichkeit, eine *PROC-Anweisung zu Beginn einer Prozedur anzugeben, in der alle oder einige der in der Prozedur verwendeten Variablen deklariert sind. Mehr zur *PROC-Anweisung siehe Seite 19-.
Anweisungen der Prozedursprache
Alle Sprachelemente der Prozedursprache von CFS beginnen mit einem Stern (*).
Sprungmarke festlegen
.label Definiert ein Sprungziel für eine *SKIP-Anweisung. Die Bezeichnung des Labels kann bis zu 16 Stellen lang sein. In einem .label-Satz dürfen keine weiteren Prozeduranweisungen oder Kommandoeingaben enthalten sein.
Kommentar
*_[comment] | *C_[comment]
Datensätze, die nur aus einem '*' bestehen bzw. mit einem '*' beginnen und danach mindestens ein Blank enthalten, werden von CFS als Kommentar überlesen. Sie können zur Dokumentation der Prozedur verwendet werden.
" ... " Prozeduranweisungen können in der gleichen Zeile mit einem Kommentar versehen werden. Die Kommentare sind hierbei in Anführungszeichen einzuschließen.
Beispiel: *&PTR=&PTR+1 "Laufvariable um 1 erhoehen"
Hinweis:
Das Kommando * kann in Prozeduren nicht zur Beendigung des Programms CFS verwendet werden, da '*' als Kommentar überlesen wird. Die Programmbeendigung innerhalb einer Prozedur ist nur über das Kommando END oder 'T' bei der Terminierungsabfrage möglich.
BS2000-Kommando
*/cmd [param]
Es wird das BS2000-Kommando cmd ausgeführt. Die wahlweise angegebenen Parameter ergänzen das Kommando. Sowohl cmd als auch param können CFS-Variable enthalten.
In der Anweisung */cmd sind beliebig viele Fortsetzungszeilen möglich. Als Fortsetzungszeichen ist '-' anzugeben. Im Unterschied zu BS2000 DO-Prozeduren beginnt eine Fortsetzungszeile mit '*'.
Die Meldungen bzw. Fehlermeldungen des Kommandos können über die interne CFS-Variable CMDMSG abgefragt werden.
Beispiel:
*&NAME='$CFS.CFS'
*/FSTAT &NAME
*WRITE '>&CMDMSG<'
Hinweis:
Das Kommando * kann in Prozeduren nicht zur Beendigung des Programms CFS verwendet werden, da '*' als Kommentar überlesen wird. Die Programmbeendigung innerhalb einer Prozedur ist nur über das Kommando END oder 'T' bei der Terminierungsabfrage möglich.
Simulieren einer Datenübertragungstaste
*K1 | *K3 ... | *K14 | *F1 | ... | *F5 | *DUE1 | *DUE2
Im Prozedurablauf wird die Betätigung einer K-/F-/ENTER-Taste simuliert. DUE1 steht für die Taste ENTER. DUE2 steht für die Taste Shift ENTER. Die Taste K2 kann nicht simuliert werden. Bezüglich K2 wird auf die Prozeduranweisung *ON %TIME auf Seite 19- verwiesen.
Beispiel:
*K1 ==> Im Prozedurablauf wird die Betätigung der K1-Taste simuliert.
Zuweisung für Prozedurvariable
*&var1 = [ &var2 | [C|L|X]'string' ] [ .&var3 | .[C|L|X]'string' ] ...
Der Prozedurvariablen &var1 wird der Wert des nach dem '='-Zeichen angegebenen Ausdrucks zugewiesen. Einer Prozedurvariablen kann auch ein aus zwei numerischen Konstanten oder Variablen gebildeter Rechenausdruck zugewiesen werden. Die Syntax einer derartigen Zuweisung ist weiter unten beschrieben.
&var1 &name [ ( [s] [, l] ) ]
Name der Prozedurvariablen, der ein Wert zugewiesen werden soll.
s wahlweise Angabe der Anfangsspalte ab der der rechts des Gleichheitszeichens angegebene Wert in die Variable &var1 eingetragen wird. ( 1 <= s < 80 ).
Falls der Teil der Variablen &var1 links von der Spalte s noch keinen Inhalt besitzt, wird dieser mit Blanks gefüllt.
Standard: s = 1.
l wahlweise Angabe einer Länge, in der die Zuweisung an die Variable &var1 erfolgen soll. ( 1 <= l <= 80 ).
Standard: l = Länge des rechts des Gleichheitszeichens stehenden Ausdrucks.
&var2 &name [ ( [s] [, l] ) ]
Wert einer CFS-Prozedurvariablen oder eines Teilstrings einer Variablen.
&name  Name einer CFS-Prozedurvariablen, einer Jobvariablen oder %PTR[0].
Jobvariable: '&(jvname [, s, l])'. Die optionale Angabe einer Spalte und der Länge bewirkt, dass nur der entsprechende Teilaus der Jobvariablen übernommen wird. Standard: Es werden von Spalte 1 an maximal 80 Zeichen aus der Jobvariablen übernommen.
%PTR bezieht sich auf die Stelle, an der bei einer vorausgegangenen Anweisung *IF %OUT=... oder *ON %OUT=... der Trefferstring gefunden wurde.
%PTR(1,l) bezeichnet die Zeichenfolge in der Länge l hinter dem bei %OUT gefundenen Suchstring. Für ein Beispiel zu der Anwendung von %PTR siehe Seite 19-.
%PTR0(1,l) zeigt auf das erste Byte des bei %OUT gefundenen Suchstrings bzw. auf das erste Byte des ersten einer Reihe von mit * verknüpften Suchstrings.
s wahlweise Angabe der Anfangsspalte für einen Teilstring aus der Prozedurvariablen. ( -80 < s < 80 ).
%PTR(s,l) bezeichnet eine Zeichenfolge in der Länge l, die s Stellen hinter dem letzten Byte des letzten bei %OUT gefundenen Suchstrings beginnt.
%PTR(-s,l) bezeichnet eine Zeichenfolge in der Länge l, die s Stellen vor dem letzten Byte des letzten bei %OUT gefundenen Suchstrings beginnt.
Standard: s = 1.
Beispiel:
Zu suchender Text: 123abc---------xyz789
*IF %OUT='abc'*'xyz'
*&VAR=%PTR(1,3)    -->  &VAR='789' 
*&VAR=%PTR(-3,4)   -->  &VAR='-xyz' 
*&VAR=%PTR0(1,4)   -->  &VAR='abc-' 
*&VAR=%PTR0(-3,4)  -->  &VAR='123a' 
l wahlweise Angabe einer Länge für den Teilstring aus der angegebenen Prozedurvariablen. ( 1 <= l <= 80 ).
Standard: l = Länge der Variablen.
[C|L|X]'string' konstante Zeichenfolge. C'string' ist gleichbedeutend mit 'string'. Bei L'string' wird die Zeichenfolge string nicht in Großbuchstaben umgewandelt. Innerhalb der Zeichenfolge vorkommende Hochkommas müssen verdoppelt werden ('').
Wird der Variablen ein numerischer Wert zugewiesen, so kann die Angabe der Hochkommas entfallen: *&var=[-]zahl
Beispiel: *&N=1, *&ZAEHLER=-10
.&var3 Es können mehrere Teilausdrücke der Art .&var|.'string' aneinandergefügt werden. Vor dem zweiten und allen weiteren Teilausdrücken muß ein Punkt (.) als Trennungszeichen angegeben werden.
Hinweise:
Als Prozedurvariable &var1 kann auch der Name einer bisher noch nicht vereinbarten Variablen angegeben werden. Die genannte Variable wird dann kreiert und kann in allen folgenden Anweisungen verwendet werden.
Eine Prozedurvariable kann auch mit einem Datenausschnitt aus einer Display-Datei versorgt werden. Näheres hierzu siehe Kommandos W (Write) Seite 8- und S,..=W (Suchen mit Wegschreiben) Seite 8-.
*&var1 = [ &var2 | wert ] op [ &var3 | wert ]
Der Prozedurvariablen &var1 wird der Wert des nach dem Zeichen = angegebenen arithmetischen Ausdrucks zugewiesen.
&var2 | &var3   Namen von CFS-Prozedurvariablen.
wert numerische Konstante: [-] zahl.
op arithmetischer Verknüpfungsoperator für eine der vier Grundrechenarten:
+ | - | * | /
Hinweise:
Um komplexe Modifikationen an Prozedurvariablen vorzunehmen, die evtl. in Abhängigkeit von bestimmten Suchbedingungen stehen, kann die Prozeduranweisung *RUN verwendet werden. Näheres hierzu auf Seite 19-.
Werden bei arithmetischen Zuweisungen Prozedurvariablen angegeben, so müssen die Variablen numerische Werte enthalten ([-]zahl). Eine Ausnahme bildet lediglich die CFS-interne Variable &DATE (yy-mm-dd). &DATE kann arithmetisch mit +/- und einer Zahl verknüpft werden. Das Ergebnis ist wieder ein Datum.
Bei der Division zweier Werte wird das Ergebnis abgerundet. Bei Division durch Null wird an die Variable &var1 kein Ergebnis zurückgegeben (entspricht &var1='').
Beispiele:
*&T1='Connection 1: Anwendung '
Die angegebene Zeichenfolge wird der Variablen &T1 als Inhalt zugewiesen.
*IF &CON1 = ''   &T1 = &T1.'  nicht eröffnet'
Falls Connection 1 nicht eröffnet ist (Inhalt der Variablen &CON1 = ''), so wird dem bisherigen Inhalt der Variablen &T1 die Zeichenfolge ' nicht eröffnet' angehängt.
*IF &CON1 -= ''   &T1 = &T1.&CON1
Falls die interne CFS-Variable &CON1 nicht leer ist (''), d.h. falls die Connection 1 eröffnet ist, wird an den bisherigen Inhalt der Variablen &T1 der Inhalt der Variablen &CON1 angefügt.
*&DZ = &DATE(7,2).'.'.&DATE(4,2).'.'.&DATE(1,2).'    '
*&DZ = &DZ.&TIME(1,2).':'.&TIME(3,2).':'.&TIME(5,2)
Aus den CFS-internen Variablen &DATE (yy-mm-dd) und &TIME (hhmmss) wird eine neue Variable mit dem Namen &DZ gebildet, die aufgrund des obigen Ausdrucks folgenden Inhalt hat: 'dd.mm.yy hh:mm:ss'. Das gleiche Ergebnis wird auch durch die Anweisung *&DZ=&DATE2.'    '.&TIME2 erreicht.
*&ZAEHL=&VAR1+1
Der Variablen &ZAEHL wird der um 1 erhöhte Wert von &VAR1 zugewiesen.
*&VAR1=&VAR1-&N
Der Wert der Variablen &VAR1 wird um den Inhalt der Variablen &N vermindert.
*&D=&DATE+1
Die Variable &D erhält das morgige Datum als Wert (yy-mm-dd).
Für weitere Beispiele für Variablenzuweisungen siehe Seite 20-.
Umschalten der Eingabequelle auf SYSCMD
*CON SYSCMD Die *CON-Anweisung ist nur in Startup-Dateien sinnvoll und bewirkt, daß die nächsten Eingaben vom Eingabemedium SYSCMD gelesen werden. Es ist damit möglich, CFS in einer DO-Prozedur aufzurufen, wobei der normale CFS-Startup durchgeführt wird (kein /SETSW ON=(1,4) in der DO-Prozedur). Am Ende des Startups kann die Eingabequelle durch die Anweisung *CON SYSCMD an die DO-Prozedur übertragen werden. Dies bedeutet, daß nach den allgemeinen Startup-Kommandos noch weitere spezielle Anweisungen aus der Prozedur ausgeführt werden.
Wurde CFS nicht in einer DO-Prozedur aufgerufen (Procedure Level Number 0), so hat die Anweisung *CON SYSCMD die gleiche Wirkung wie die Anweisung *DIA (siehe unten).
Eine in der Startup-Datei definierte Endebehandlung (*ON %END CONTINUE) wird nach Benutzung der Anweisung *CON korrekt verarbeitet.
Umschalten auf Benutzereingabe
*DIA [cmd] Die *DIA-Anweisung bewirkt, daß die folgenden Eingaben wieder vom Benutzer (Tastatur) angefordert werden (Umschaltung auf Benutzerdialog). Das Eingabemedium wird an die Tastatur zurückgegeben.
cmd Die wahlweise Angabe von cmd bewirkt, daß vor der Umschaltung auf Benutzerdialog das angegebene Kommando ausgeführt wird. Für cmd ist jedes Kommando und BS2000-Kommando zugelassen.
In einem prozedurgesteuerten EDT-Dialog empfiehlt es sich, vor Umschalten auf Benutzereingabe, die K3-Taste zur Auslösung des Bildschirm-Refresh zu simulieren (Anweisung *K3).
Beispiele:
*DIA /SYSFILE SYSDTA=(PRIMARY)
*DIA ^               (Rückkehr aus einer Connection in die Grundebene).
*DIA RES CFS.LOG.xxx
In Variablen definierte Prozeduranweisung ausführen
*EVAL &var Der Inhalt der angegebenen Variablen &var wird als Prozeduranweisung interpretiert und ausgeführt.
Mit dieser Anweisung ist es z.B. möglich, bei Zuweisungen an eine Prozedurvariable die sonst nicht parametrisierbare Beginnspalte und/oder die Längenangabe variabel anzugeben (siehe Beispiel 1).
Bemerkung:
Die Anweisung *EVAL &var hat die gleiche Wirkung wie *&&var
Beispiele:
*&VAR=80C'#'
 *&N=10
 *&VAR2='*&VAR3=&VAR(1,'&N.')'
Nach der Zuweisung *&VAR2=... hat diese Variable den Inhalt *&VAR3=&VAR(1,10)
 *EVAL &VAR2
Durch die Anweisung *EVAL &VAR2 wird eine Prozeduranweisung ausgeführt, die dem Inhalt der Variablen &VAR2 enstspricht (siehe oben).
Nach *EVAL &VAR2 enthält somit die neu kreierte Variable &VAR3 die Zeichenfolge ##########
 *&N=10
 *&VAR4='*&VAR5='&N.'C'~'''
Durch die Zuweisung *&VAR4=... hat diese Variable den Inhalt *&VAR5=10C'~'
 *EVAL &VAR4
Es wird die Prozeduranweisung ausgeführt, die dem Inhalt der Variablen &VAR4 enstspricht (siehe oben).
Nach *EVAL &VAR4 enthält die neu kreierte Variable &VAR5 10 Mal das Standard-Tabulatorzeichen ~. Die Eingabe &VAR5.EDT würde somit im 10-ten Action Code-Feld von CFS die Zeichenfolge 'EDT' eintragen.
Weiteren Ablauf der Prozedur beenden
*EXIT Diese Anweisung beendet die Prozedur. Es werden keine weiteren Prozeduranweisungen entgegengenommen. *EXIT kann an jeder Stelle der Prozedur stehen und beendet den weiteren Ablauf der Prozedur.
Normalerweise wird eine Prozedur mit der Ausführung der im letzten Datensatz stehenden Anweisung beendet. Eine *DIA-Anweisung beendet die Prozedur nicht. Es wird hier lediglich die Eingabekontrolle an den Benutzer zurückgegeben. Mit dem Kommando RET bzw. über eine latente ON-Bedingung (siehe 19-) kann die Prozedur wieder fortgesetzt werden.
Im Zusammenhang mit dem Beenden von CFS-Prozeduren sei auch auf die Anweisung *RET SYSCMD verwiesen.
Beispiel:
*IF &N=0 EXIT
Falls der Inhalt der Variablen den Wert 0 besitzt, wird der weitere Ablauf der Prozedur beendet.
Bedingungen prüfen
Im folgenden werden 2 Formate der *IF-Anweisung dargestellt. *IF bewirkt einen Sprung innerhalb der Prozedur, falls eine bestimmte Bedingung erfüllt ist.
*IF &[&]var1 vgl  [ [C|L|X] 'string' | zahl | &[&]var2 ] cmd
Der Inhalt der Prozedurvariablen &var1 wird mit der in Hochkommas eingeschlossenen Zeichenfolge string/mit dem Inhalt der Prozedurvariablen &var2 verglichen.
&var1 | &var2
Für &var1 bzw. &var2 kann jeweils folgendes Konstrukt, bestehend aus Variablenname, Anfangsspalte und Länge angegeben werden.
&var [ ( [s] [, l] ) ]
Bezeichnung eines Teilstrings einer Variablen.
s Anfangsspalte für den Teilstring der Variablen. ( 1 <= s < 80 ).
Standard: s = 1 (Spalte 1).
l Länge des Teilstrings. ( 1 <= l <= 80 ).
Im ersten Vergleichsoperanden (&var1) können für l auch die Sonderzeichen * bzw. $ angegeben werden. Die besondere Bedeutung dieser Zeichen ist in einen nachfolgenden Abschnitt genau beschrieben.
Standard: l = Gesamtlänge der Variablen.
Beispiele:
&DATEI(4) Inhalt der Variablen &DATEI ab Spalte 4 bis zum Ende
&DATEI(4,20) Inhalt der Variablen &DATEI ab Spalte 4 in der Länge 20
&DATEI(,20) Inhalt der Variablen &DATEI ab Spalte 1 in der Länge 20
&&var1 | &&var2
Der Inhalt der Variablen &var1 | &var2 wird als der Name einer anderen Variablen betrachtet, deren Inhalt dann ausgewertet wird.
Beispiel: &NA='CON1'. Durch &&NA wird auf den Inhalt der CFS-internen Variablen &CON1 Bezug genommen. Ein weiteres Beispiel für zweistufige Variablensubstitution finden Sie auf Seite 20-.
vgl Vergleichsoperator: [-] { > | < | = }
Fällt der alphanumerische Vergleich auf größer (>) / kleiner (<) / gleich (=) positiv aus, bzw. nicht positiv bei vorangestelltem '-' , so wird das unter cmd angegebene Kommando ausgeführt. Anstelle von -= (ungleich) kann auch <> angegeben werden.
[C|L|X]'string' konstante Zeichenfolge. Innerhalb der Zeichenfolge vorkommende Hochkommas müssen verdoppelt werden ('').
Der Inhalt der links des Gleichheitszeichens stehenden Variablen bzw. deren Teilstring wird mit der angegebenen Konstanten verglichen. Gleichheit ist nur dann gegeben, wenn sowohl die entsprechenden Längenmerkmale, wie auch die Dateninhalte übereinstimmen. Überschüssige Leerzeichen im Variableninhalt, die in der Konstanten nicht enthalten sind, führen zu einem negativen Vergleichsergebnis. Näheres hierzu siehe nächsten Abschnitt.
zahl Falls der Vergleichswert string einen Zahlenwert beinhaltet, so sind zwei Fälle zu unterscheiden:
a) Angabe von string in Hochkommas 'zahl': Der String wird vor dem Vergleich intern in eine sechsstellige Zahl mit führenden Nullen umgewandelt.
b) Bei Angabe von zahl ohne Hochkommas wird der String in der angegebenen Länge 1 zu 1 für den Vergleich übernommen.
Beispiel: *&N='261197'
*IF &N(1,2) < 27 SKIP .LT   --> Vergleich ist positiv ('26' < '27')
*IF &N(1,2) < '27' SKIP .LT --> Vergleich ist negativ ('26' > '000027')
cmd beliebige Anweisung der Prozedursprache von CFS. Der normalerweise eine Prozeduranweisung einleitende Stern darf nicht angegeben werden.
Sonderbedeutung der Längenangaben * bzw. $ beim Vergleich mit einer Konstanten
* Vergleiche die linksstehende Variable nur in der Länge der rechts des Gleichheitszeichens angegebenen Konstanten. Ist die Variable länger, so werden diese Zeichen für den Vergleich nicht herangezogen. Die Angabe &VAR(,*) kann in der Form &VAR(*) abgekürzt werden.
$ Expandiere die rechts des Gleichheitszeichens angegebene Konstante durch Aneinanderfügen solange, bis sich eine Zeichenfolge ergibt, die die gleiche Länge aufweist wie der Inhalt der zu vergleichenden Variablen.
Die Angabe &VAR(,$) kann in der Form &VAR($) abgekürzt werden.
Beispiele:
*IF &DATEI(,*)='ABC' SKIP .ABC oder in vereinfachter Schreibweise:
*IF &DATEI(*)='ABC'  SKIP .ABC
Der Anfang der Variablen &DATEI wird in der Länge 3 mit der Konstanten 'ABC' verglichen und ggf. ein Sprung zum Label .ABC ausgeführt.
*IF &DATEI(25,*)=' ' SKIP .A25
Der Inhalt der Variablen &DATEI wird ab Spalte 25 in der Länge 1 mit der Konstanten '_' verglichen. Bei Gleichheit wird ein Sprung zum Label A25 durchgeführt.
*IF &DATEI(,$)=' ' SKIP .A27 oder in vereinfachter Schreibweise:
*IF &DATEI($)=' '  SKIP .A27
Der gesamte Inhalt der Variablen &DATEI wird mit einer Konstanten mit entsprechend vielen Leerzeichen ' ' verglichen. Falls der Inhalt von &DATEI nur aus Leerzeichen besteht, wird ein Sprung zum Label .A27 ausgeführt.
*IF &DATEI(25,$)=' ' SKIP .A25
Es wird geprüft, ob die Variable &DATEI in Spalte 25 oder höher nur noch Leerzeichen (mindestens eines) enthält. Ist dies der Fall, so wird ein Sprung zum Label .A25 ausgeführt.
Hinweise:
Beim Vergleich einer Prozedurvariablen mit einer Konstanten, bzw. mit einer zweiten Prozedurvariablen wird Groß-/Kleinschreibung standardmäßig nicht berücksichtigt. Durch die Anweisung *SET CASE=Y kann die Berücksichtigung von Groß-/Kleinschreibung jedoch eingeschaltet werden.
Zum Prüfen, ob der Inhalt einer Variablen eine bestimmte Länge (z.B. 6 Zeichen) nicht überschreitet, ist folgende Abfrage zu verwenden:
*IF &VSN(7,1) = X'00' SKIP .KUERZER-ALS-7
Beispiele:
*IF &DAT='' PROMPT &DAT,'Bitte Dateinamen eingeben '
Falls die Variable &DAT noch keinen Wert zugewiesen hat, so wird über die Prozeduranweisung *PROMPT vom Benutzer ein Wert für die Variable angefordert.
*IF &DAT=&D2 SKIP .GLEICH
Falls die Variable &DAT in ihrem Wert mit der Variablen &D2 übereinstimmt, so wird ein Sprung zu dem Label ".GLEICH" durchgeführt.
*IF &VAR1(2,3)=&D2(1,3) WRITE 'GLEICH'
Falls der Inhalt der Variablen &VAR1 in Spalte 2, 3 und 4 mit dem Inhalt der Variablen &D2 in Spalte 1, 2 und 3 übereinstimmt, so wird der Text 'GLEICH' am Bildschirm ausgegeben.
*IF &ZAEHLER>9 EXIT
Der Ablauf der Prozedur wird beendet, falls die Variable &ZAEHLER einen Wert größer als 9 besitzt.
Weitere Beispiele für Variablenzuweisungen finden Sie auf Seite 20-.
*IF SETSW [ON|OFF]=n  cmd
Der Prozeßschalter n wird getestet. Stimmt die Stellung des Schalters mit dem angegebenen Wert überein, so wird das Kommando cmd ausgeführt.
cmd beliebige Anweisung der Prozedursprache von CFS. Der normalerweise vor einer Prozeduranweisung stehende Stern darf nicht angegeben werden.
Hinweise:
Der Prozeßschalter 31 wird von CFS als Fehlerindikator verwendet. Z.B. wird der Schalter gesetzt, falls bei der Selektion keine Datenobjekte mit den gesuchten Eigenschaften gefunden wurden. Im prozedurgesteuerten Modus wird in diesem Fall so verfahren, als ob im Feld FILENAME-SELECT : NO eingegeben worden wäre. Es wird also in die zweite CFS-Maske verzweigt, wobei lediglich das Feld COMMAND: angezeigt wird. Im nicht prozeduralen Modus erscheint die Selektionsmaske mit einem entsprechenden Fehlerhinweis.
Prozeßschalter 31 wird von CFS auch bei Fehlern während der Ausführung der Variablen Actions ONXCOPY/ONXSEL/ONXADD gesetzt.
Um für spätere Abfragen eine definierte Ausgangssituation herzustellen, sollte der Schalter 31 vor jeder Aktion von CFS, die diesen Schalter verändern könnte, zurückgesetzt werden (Kommando /SETSW OFF=31).
*IF %OUT [(%PTR)] =such  cmd
Die Bedingung *IF %OUT ist erfüllt, wenn der Suchstring in der letzten Ausgabenachricht (z.B. aufgrund eines BS2000-Kommandos) oder Bildschirmmaske enthalten ist. Ist dies der Fall, wird das unter cmd angegebene Kommando ausgeführt. Außerdem wird ein Pointer %PTR auf das Ende des gefundenen Suchstrings in der Ausgabenachricht gesetzt. Der Pointer kann dazu benutzt werden, einen Teilstring der Ausgabenachricht an eine Prozedurvariable zuzuweisen.
such einfaches oder mehrfaches Suchargument der Form
[C]'string| L'string' | A'string' | X'string'
Es ist zu beachten, daß bei Angabe des Suchstrings in der Form C'string' Kleinbuchstaben in string in die entsprechenden Großbuchstaben umgewandelt werden.
Die Angabe 'string' hat dieselbe Wirkung wie A'string' (siehe unten).
Bei Angabe von L'string' bleibt string in der angegebenen Groß-/Kleinschreibung unverändert.
Bei Angabe von A'string' (Any) ist die Schreibweise von string in Klein- oder Großbuchstaben für das Suchergebnis ohne Bedeutung. Sowohl der Suchstring, als auch der zu durchsuchende Text werden vor dem Vergleich in Großbuchstaben umgewandelt.
Hinweise:
Die *IF %OUT-Abfrage kann auch auf die Ausgabenachrichten eines vorausgegangenen /bs2cmd (eingegeben im Kommandofeld von CFS) oder einer vorausgegangenen Prozeduranweisung */bs2cmd angewendet werden. Hierbei ist jedoch zu beachten, daß die Ausgaben des vorhergehenden BS2000-Kommandos nur mit einer *IF %OUT Anweisung abgefragt werden dürfen.
Bei einer vorausgehenden */bs2cmd Prozeduranweisung ist zudem folgende Besonderheit zu berücksichtigen: Mit der nächsten *IF %OUT-Abfrage wird auf die Ausgaben des Kommandos zugegriffen. Danach, d.h. mit der übernächsten und evtl. folgenden *IF-%OUT Abfragen wird wieder auf die letzte Maskenausgabe zugegriffen. Als Dummy-Abfrage könnte z.B. angegeben werden *IF %OUT='' &XXX='xxx'. Nach dieser Anweisung wird mit *IF %OUT wieder auf die Ausgabe der letzten Maske zugegriffen.
Mit der Anweisung *IF %OUT='' wird %PTR auf das Ende der letzten Ausgabenachricht positioniert. Mittels *&VAR=%PTR(-80,80) werden z.B. die letzten 80 Byte der Ausgabenachricht in die Variable &VAR übertragen.
Beispiele:
*IF %OUT=A'search-item found and replaced' &COUNT=%PTR(1,7)
Der Ausdruck (1,7) nach %PTR wird wie bei einer Prozedurvariablen als Offset und Länge für die Zuweisung interpretiert. Mit dem Offset 1 wird die Stelle direkt nach dem letzten Suchitem bezeichnet.
*IF %OUT='ENTRIES IN THIS LIST' &COUNT=%PTR(-6,5)
Mit dem Offset -6 wird die Stelle 6 Byte vor dem Suchitem bezeichnet.
(%PTR) Ausgehend von einer vorhergehenden Anweisung *IF %OUT wird in der Ausgabenachricht ab der Spalte, in der der letzte Suchbegriff gefunden wurde, nach dem in such angegebenen String gesucht.
such einfaches oder mehrfaches Suchargument der Form 'string|  L'string| X'string'. L'string' wirkt wie 'string' mit dem Unterschied, daß eingegebene Kleinbuchstaben nicht in Großbuchstaben umgesetzt werden. Mehrere Suchargumente können durch die Operatoren + (Und) / , (Oder) / * (Wildcard) verknüpft werden.
Eine ausführliche Beschreibung der Suchbedingung finden Sie auf Seite 8- und 8-.
cmd Anweisung der Prozedursprache von CFS. Der normalerweise vor einer Prozeduranweisung stehende Stern darf nicht angegeben werden.
Beispiel:
Mit der folgenden Prozedur wird verhindert, daß der Benutzer mit der K1-Taste in die Selektionsmaske von CFS gelangt. Für eine Beschreibung der ON %OUT-Bedingung siehe Seite 19-.
.ON-IN
*ON %IN=K1 CONTINUE
*DIA
*IF %OUT='FILENAME-SELECT :' SKIP .INPUT-NO
*SKIP .ON-IN
.INPUT-NO
NO
*SKIP .ON-IN
Prozedurvariablen aus Datei laden
*LV datei [, C|O]
datei Aus der angegebenen Datei werden die Namen und Werte von CFS-Prozedurvariablen gelesen und in der aktuellen Prozedur verfügbar gemacht. Die Variablen sind danach so ansprechbar, als wären sie zuvor mit einer Zuweisung *&var='wert' erzeugt und mit einem Inhalt versehen worden.
C Clear. Alle bisher in der Prozedur erzeugten Variablen werden vor der Ausführung der *LV-Anweisung gelöscht. Danach stehen nur die in der LV-Datei gesicherten Variablen zur Verfügung.
O Overwrite. Die bisher in der Prozedur erzeugten Variablen stehen auch nach der Ausführung der *LV-Anweisung zur Verfügung. Gleichnamige Variablen, die in der Prozedur vor der *LV-Anweisung erzeugt wurden und die auch in der LV-Datei enthalten sind, werden mit den in der LV-Datei gespeicherten Inhalten überschrieben.
Standard: Falls keine der Optionen C|O angegeben wurde, werden gleichnamige Variablen durch die in der LV-Datei gespeicherten Inhalte nicht überschrieben.
Ereignisse für latente Bedingung festlegen
Im folgenden werden 9 verschiedene Varianten der ON-Bedingung dargestellt.
Mit der Prozeduranweisung *DIA kann der Ablauf der Prozedur unterbrochen und die Kontrolle an den Benutzer übergeben werden. Die Prozedur kann in diesem Fall nur über das vom Benutzer einzugebende Kommando RET (siehe Seite 19-) wieder aufgenommen werden.
ON-Anweisungen bieten ein Mittel, den Prozedurablauf bei bestimmten Bedingungen automatisch fortzusetzen. ON-Anweisungen müssen vor einer *DIA-Anweisung (Umschaltung auf Benutzereingabe) angegeben werden. Sie definieren latente Bedingungen. Bei jeder Benutzereingabe prüft CFS, ob eine ON-Bedingung erfüllt ist. Im positiven Fall wird der Prozedurablauf automatisch fortgesetzt.
Die Anweisung *RESET setzt eine zuvor definierte ON-Bedingung zurück. Die RESET-Anweisung ist notwendig, wenn eine ON-Bedingung zurückgesetzt werden soll, obwohl diese noch nicht eingetreten ist. Bei Eintritt, d.h. bei Wirksamwerden einer ON-Bedingung, wird diese automatisch zurückgesetzt. Eine ON-Bedingung einer bestimmten Kategorie (%LST, %CMD, %TERM, %END) kann aufgrund einer Definition höchstens einmal wirksam werden.
*ON %ABEND CONTINUE | SKIP .label
*ON %ABEND ist erfüllt, wenn CFS abnormal beendet wird. Dies ist z.B. der Fall bei Ausfall des Vorrechners (Leitungsverlust) oder durch /EXEC, /LOAD, /DO, /CALL, /LOGOFF im Kommandomodus des BS2000 bei noch geladenem CFS. Wenn die %ABEND-Bedingung erfüllt ist, wird der prozedurgesteuerte Modus aufgenommen und die im Anweisungsteil festgelegte Aktion ausgeführt.
CONTINUE Der prozedurgesteuerte Ablauf wird wieder aufgenommen an der Stelle, an der die Prozedur durch die letzte *DIA-Anweisung unterbrochen wurde.
SKIP .label Der prozedurgesteuerte Ablauf wird wieder aufgenommen. Es wird innerhalb der Prozedur ein Sprung zu der angegebenen Sprungmarke durchgeführt. Anstelle von SKIP kann auch GOTO angegeben werden.
*ON %CMD CONTINUE [AFTER INPUT] | SKIP [AFTER INPUT] .label
Nachdem der Benutzer von der Prozedur die Kontrolle erhalten hat, prüft CFS vor jedem Eingabeschritt, ob mit der als nächstes anstehenden Eingabe ein Kommando angefordert wird. Ist dies der Fall, so ist die Bedingung *ON %CMD erfüllt und es wird der Anweisungsteil der ON-Anweisung ausgeführt.
CONTINUE Der prozedurgesteuerte Ablauf wird automatisch wieder aufgenommen vor dem ersten Eingabeschritt, der das Kommandofeld von CFS versorgt.
CONTINUE AFTER INPUT 
Der prozedurgesteuerte Ablauf wird automatisch wieder aufgenommen nach der ersten Benutzereingabe, die das Kommandofeld von CFS versorgt (z.B. auch Absenden der leeren CFS-Maske).
SKIP .label Der prozedurgesteuerte Ablauf wird automatisch mit dem ersten Eingabeschritt aufgenommen, der das Kommandofeld von CFS versorgt. Es wird in der Prozedur ein Sprung zu der angegebenen Sprungmarke durchgeführt. Anstelle von SKIP kann auch GOTO angegeben werden. Anstelle von SKIP kann auch GOTO angegeben werden.
SKIP AFTER INPUT .label
 Der prozedurgesteuerte Ablauf wird automatisch wieder aufgenommen nach der ersten Benutzereingabe, die unter anderem auch das Kommandofeld von CFS versorgt. Es wird in der Prozedur ein Sprung zu der angegebenen Sprungmarke durchgeführt.
Beispiel:
Die folgende Prozedur eröffnet eine Connection zu $CONSOLE. Nach Rückkehr aus der Connection in CFS wird diese automatisch wieder geschlossen (*ON %CMD CONTINUE).
OC9$CONSOLE
xxxxx,C'sssss'
*ON %CMD CONTINUE
*DIA
DC9
*ON %END CONTINUE | SKIP .label
*ON %END ist erfüllt, wenn durch Benutzereingaben (Kommando */END, K1-Taste) die Beendigung des Programms CFS angefordert wird. Wenn die %END-Bedingung erfüllt ist, wird der prozedurgesteuerte Modus wieder aufgenommen und die im Anweisungsteil festgelegte Aktion wird ausgeführt.
CONTINUE Der prozedurgesteuerte Ablauf wird wieder aufgenommen an der Stelle, an der die Prozedur durch die letzte *DIA-Anweisung unterbrochen wurde.
SKIP .label Der prozedurgesteuerte Ablauf wird wieder aufgenommen. Es wird innerhalb der Prozedur ein Sprung zu der angegebenen Sprungmarke durchgeführt. Anstelle von SKIP kann auch GOTO angegeben werden.
Hinweise:
Die Bedingung *ON %END wird auch aktiv, falls CFS durch eines der Kommandos /LOGOFF, /DO, /CALL, /EXEC, /LOAD, quasi gewaltsam beendet wird. Die genannten Kommandos werden von CFS zurückgestellt, bis alle Kommandos der Enderoutine abgearbeitet sind. Danach wird das die Beendigung von CFS verursachende BS2000-Kommando ausgeführt.
Die Bedingung *ON %END ist nicht erfüllt, falls CFS abnormal beendet wird (siehe *ON %ABEND-Anweisung weiter unten). Die Bedingung *ON %END ist ebenfalls nicht erfüllt, falls CFS prozedurgesteuert durch das Kommando END oder die Eingabe T bei der Terminierungsabfrage beendet wird. Das Kommando END, angegeben innerhalb der *ON %END-Kommandofolge hat die bedingungslose Beendigung des Programms CFS zur Folge.
Mit der Anweisung *ON %END kann eine Kommandofolge zum Beenden von CFS aktiviert werden (CFS-Shutdown). Diese Kommandofolge ist das Gegenstück zum CFS-Startup. Es können hier z.B. Connections kontrolliert beendet werden. Des weiteren kann das Kommandogedächtnis in eine Datei bzw. in eine Bibliothek gesichert werden.
Ein Anwendungsbeispiel für die *ON %END-Anweisung findet sich auf Seite 20- und folgende (Startup).
*ON %IN= { t-bez | such } CONTINUE | SKIP .label
t-bez Tastenbezeichnung: K1, K3, ... , K23 / F1, ... , F20 / DUE1 / DUE2
Diese Variante der %IN-Bedingung ist erfüllt, nachdem der Benutzer die bezeichnete Datenübertragungstaste betätigt hat. DUE1 steht hierbei für ENTER und DUE2 für Shift ENTER. Es wird der prozedurgesteuerte Modus aufgenommen (CONTINUE) bzw. ein Sprung zu dem angegebenen Label ausgeführt (SKIP .label).
Die *ON %IN Anweisung kann nicht verwendet werden, um bestimmte DUE-Tasten in *RDMASK abzufragen. Um die Datenübertragungstaste der letzten RDMASK Maske abzufragen ist nach *RDMASK die CFS-interne Variable &RDMASKIN auszuwerten. Dazu ist die folgende Anweisung anzugeben: *IF &RDMASKIN = t-bez SKIP .label
Beispiel: *IF &RDMASKIN = K1 SKIP .ENDE
such einfaches oder mehrfaches Suchargument der Form
'string| L'string' | A'string' | X'string'
Es ist zu beachten, daß bei Angabe des Suchstrings in der Form 'string' Kleinbuchstaben in string in die entsprechenden Großbuchstaben umgewandelt werden.
Bei Angabe von L'string' bleibt string in der angegebenen Groß-/Kleinschreibung unverändert. Es wird keine Umsetzung in Großbuchstaben durchgeführt.
Bei Angabe von A'string' (Any) ist die Schreibweise von string in Klein- oder Großbuchstaben für das Suchergebnis ohne Bedeutung. Sowohl der Suchstring, als auch der zu durchsuchende Text werden vor dem Vergleich in Großbuchstaben umgewandelt.
Mehrere Suchargumente können durch die Operatoren + (Und) / , (Oder) / * (Wildcard) verknüpft werden.
Die %IN-Bedingung ist erfüllt, wenn der Suchstring bzw. einer der Suchstrings in der vom Benutzer getätigten Eingabe enthalten ist. Es wird der prozedurgesteuerte Modus aufgenommen (CONTINUE) bzw. ein Sprung zu dem angegebenen Label in der Prozedur ausgeführt. Außerdem wird ein Pointer %PTR auf das Ende des gefundenen Suchstrings in der Eingabenachricht gesetzt. Der Pointer kann dazu benutzt werden, einen Teilstring der Eingabenachricht an eine Prozedurvariable zuzuweisen. Weitere Informationen hierzu siehe Seite 19-.
Eine ausführliche Beschreibung der Suchbedingung finden Sie auf den Seiten 8- und 8-.
*ON %IN Die zuletzt definierte *ON %IN-Bedingung wird wieder aktiviert.
Ein Beispiel für die ON %IN-Anweisung finden Sie auf Seite 19-.
*ON %INP CONTINUE
*ON %INP ist erfüllt nach der ersten Benutzereingabe nach einer Umschaltung auf Benutzerdialog durch eine *DIA-Anweisung. Wenn die %INP-Bedingung erfüllt ist, wird der prozedurgesteuerte Modus wieder aufgenommen (CONTINUE).
Hinweise:
Mit der Anweisung *ON %INP ist es möglich, daß der Benutzer während des Ablaufs der Prozedur (z.B. im Dialog mit EDT oder in einer Connection) manuell genau eine Eingabe tätigt und danach der Prozedurlauf automatisch fortgesetzt wird.
Nach der Anweisung *ON %INP können noch andere Prozeduranweisungen folgen. %INP wird nach *DIA (Umschalten auf Benutzereingabe) aktiv.
Beispiel:
*002 FILE=NO
EDT
READ'datei'
LOWER ON
*WRITESYS 'Bitte Änderungen vornehmen. Prozedur läuft danach automatisch weiter'
*F2 F2-Taste: EDT-Bildschirm überschreibbar machen
*K3 K3-Taste: Bildschirm neu ausgeben
*ON %INP CONTINUE
*DIA
WRITE'datei'
HALT
END
*ON %LST CONTINUE [AFTER INPUT] | SKIP [AFTER INPUT] .label
Nachdem der Benutzer von der Prozedur die Kontrolle erhalten hat, prüft CFS nach jedem Dialogschritt, ob aufgrund der getätigten Benutzereingabe, ein Übergang vom Display- in den List-Modus erfolgt (Übergang aus dem Display-Modus in die Anzeige der Dateienliste durch Betätigen der K1-Taste oder durch Eingabe des Kommandos LST). Ist dies der Fall, so ist die Bedingung *ON %LST erfüllt und es wird der Anweisungsteil der ON-Anweisung ausgeführt.
CONTINUE Der prozedurgesteuerte Ablauf wird vor dem ersten Kommando im List-Modus automatisch wieder aufgenommen.
CONTINUE AFTER INPUT
Der prozedurgesteuerte Ablauf wird nach dem ersten vom Benutzer eingegebenen Kommando im List-Modus automatisch wieder aufgenommen.
SKIP .label Der prozedurgesteuerte Ablauf wird vor dem ersten Kommando im List-Modus (Anzeige der Dateienliste) automatisch wieder aufgenommen. Es wird in der Prozedur ein Sprung zu der angegebenen Sprungmarke durchgeführt. Anstelle von SKIP kann auch GOTO angegeben werden.
SKIP AFTER INPUT .label
Der prozedurgesteuerte Ablauf wird nach dem ersten vom Benutzer eingegebenen Kommando im List-Modus automatisch wieder aufgenommen. Es wird in der Prozedur ein Sprung zu der angegebenen Sprungmarke durchgeführt.
*ON %OUT=such CONTINUE [AFTER INPUT] | SKIP [AFTER INPUT] .label | RETURN | RESUME
such einfaches oder mehrfaches Suchargument der Form
[C]'string| L'string' | A'string' | X'string'
Es ist zu beachten, daß bei Angabe des Suchstrings in der Form C'string' Kleinbuchstaben in string in die entsprechenden Großbuchstaben umgewandelt werden.
Die Angabe 'string' hat dieselbe Wirkung wie A'string' (siehe unten).
Bei Angabe von L'string' bleibt string in der angegebenen Groß-/Kleinschreibung unverändert.
Bei Angabe von A'string' (Any) ist die Schreibweise von string in Klein- oder Großbuchstaben für das Suchergebnis ohne Bedeutung. Sowohl der Suchstring, als auch der zu durchsuchende Text werden vor dem Vergleich in Großbuchstaben umgewandelt.
Mehrere Suchargumente können durch die Operatoren + (Und) / , (Oder) / * (Wildcard) verknüpft und aus einer Datei/Bibliothekselement gelesen werden (*ON %OUT=(datei) ...). Für ein Anwendungsbeispiel siehe Seite 19-.
Die %OUT-Bedingung ist erfüllt, wenn der Suchstring bzw. einer der Suchstrings in einer Ausgabenachricht (WROUT bzw. Ausgabeteil eines WRTRD) enthalten ist. In diesem Falle wird ein Pointer %PTR auf das Ende des gefundenen Suchstrings in der Ausgabenachricht gesetzt. Der Pointer kann dazu benutzt werden, einen Teilstring der Ausgabenachricht an eine Prozedurvariable zuzuweisen. Für weitere Informationen siehe Seite 19-.
CONTINUE Der prozedurgesteuerte Ablauf wird wieder aufgenommen. Bei einem WROUT-Aufruf wird die nächste Eingabe durch die Prozedur getätigt. Bei einem WRTRD-Aufruf wird die durch diesen Aufruf angeforderte Eingabe bereits durch die Prozedur getätigt.
CONTINUE AFTER INPUT
Der prozedurgesteuerte Ablauf wird wieder aufgenommen, nachdem der Benutzer die Eingabe zu dem aktuellen WRTRD-Aufruf getätigt hat.
SKIP .label Der prozedurgesteuerte Ablauf wird wieder aufgenommen. Es wird in der Prozedur ein Sprung zu der angegebenen Sprungmarke durchgeführt. Anstelle von SKIP kann auch GOTO angegeben werden.
SKIP AFTER INPUT .label
Der prozedurgesteuerte Ablauf wird wieder aufgenommen, nachdem der Benutzer die Eingabe zu dem aktuellen WRTRD-Aufruf getätigt hat. Es wird in der Prozedur ein Sprung zu der angegebenen Sprungmarke durchgeführt.
RETURN Es wird aus einer Connection in die Grundebene von CFS (Kommandofeld) zurückgekehrt.
RESUME Bei Eintreten der Bedingung wird die Prozedur auch in dem Falle fortgesetzt, daß im Moment keine Eingabe vom Benutzer angefordert ist. Die Möglichkeit den Lauf der Prozedur auch ohne Eingabeaufforderung fortsetzen zu können, ist vor allem bei Connections zu $CONSOLE von Bedeutung.
*ON %OUT Die zuletzt definierte *ON %OUT-Bedingung wird wieder aktiviert. Es entfällt die erneute Interpretation der Suchbedingungen.
Eine ausführliche Beschreibung der Suchbedingung finden Sie auf Seite 8- und 8-.
*ON %TERM CONTINUE | SKIP .label
Nachdem der Benutzer von der Prozedur die Kontrolle erhalten hat, prüft CFS vor jedem Eingabeschritt, ob mit der bevorstehenden Eingabe die Terminierungsabfrage von CFS (TERM / NEW / UPDATED FILE-LIST ...) beantwortet wird. Ist dies der Fall, so ist die Bedingung *ON %TERM erfüllt und es wird der Anweisungsteil der ON-Bedingung ausgeführt.
CONTINUE Der prozedurgesteuerte Ablauf wird automatisch wieder aufgenommen vor dem Eingabeschritt, in dem die Terminierungsabfrage beantwortet wird. Die Beantwortung der Terminierungsabfrage muß durch die Prozedur vorgenommen werden.
SKIP .label Der prozedurgesteuerte Ablauf wird automatisch wieder aufgenommen vor dem Eingabeschritt, in dem die Terminierungsabfrage beantwortet wird. Es wird in der Prozedur ein Sprung zu der angegebenen Sprungmarke durchgeführt. Die Beantwortung der Terminierungsabfrage muß durch die Prozedur vorgenommen werden. Anstelle von SKIP kann auch GOTO angegeben werden.
*ON %TIME=s RETURN
Diese Bedingung setzt ein Zeitintervall, nach dessen Ablauf CFS aus einer Connection in die Grundebene (Kommandofeld) zurückkehrt. Damit ist es selbst im Prozedurmodus möglich, aus einer "aktiven" Connection nach CFS zurückzukehren, ohne daß in der Connection eine Eingabeaufforderung besteht. So kann CFS auch bei Programmen mit freilaufenden Ausgaben bzw. bei Anwendungen ohne direkte Eingabeaufforderung (z.B. $CONSOLE) die Steuerung zurückbekommen.
s Elapsed Time in Sekunden (0 <= s <= 9999).
Beispiele:
Die folgende Prozedur eröffnet eine Connection zu $CONSOLE und setzt zuerst das Kommando /STA MSG und danach /STA P ab. Nach Rückkehr in die Grundebene durch K2 + R wird die Connection durch die Prozedur automatisch abgebaut.
OC9$CONSOLE,,,R R: Rückkehrschalter. Nach erfolgreichem Eröffnen der Konsole kehrt
CFS in den Grundprozeß zurück.
xxxxx,C'sssss' Eingabe der Benutzerkennung und des Passworts nach Rückkehr aus
CC9B der Connection: K2 für die Konsole
*ON %TIME=1 RETURN Nach einer Sekunde: Rückkehr in die Grundebene von CFS
STA MSG Eingabe für Konsole
CC9B nach Rückkehr in die Grundebene (*ON %TIME=1):
erneut K2 für die Konsole generieren
*ON %TIME=1 RETURN Timer für Rückkehr wieder initialisieren.
STA P Eingabe an Konsole
*ON %CMD CONTINUE Nach Rückkehr in die Grundebene von CFS durch den Benutzer
soll der automatische Prozedurablauf wieder aufgenommen werden.
*DIA Umschaltung der Eingabequelle auf Benutzerdialog
DC9 Beenden der Connection
Unter der Benutzerkennung TSOS soll eine Connection zum Hostrechner VAR2 eröffnet werden. Mit SM2 werden Statistikdaten zur Systemauslastung gesammelt.
/PROC N
/SYSFILE SYSDTA=(SYSCMD)
/SETSW ON=(1,4)
/EXEC $CFS
*002 FILE=NO
OC1,,VAR2/LOGON TSOS,...
EXEC $SM2
*ON %TIME=10 RETURN nach 10 Sekunden: automatische Rückkehr in die Grund-ebene von CFS
HC SM2.STATISTIK,N Die folgenden Ausgaben werden in die Hardcopydatei protokolliert
START Beginn der Statistikausgabe durch SM2. Die Statistik-informationen
                          werden im Intervall von 120 Sekunden ausgegeben
                          Nachdem nur Interesse an der ersten Ausgabe besteht, wird die
                          Connection nach 10 Sekunden verlassen. Dies gibt die Möglichkeit,
                          neue CFS-Kommandos abzusetzen.
CC1B K2-Taste für Connection 1. Dadurch wird die weitere Ausgabe
der Statistikinformationen durch SM2 beendet.
NHC Ausschalten des Hardcopy-Modus.
LOGOFF Beenden der Connection.
END Beenden von CFS.
/SETSW OFF=(1,4)
/ENDP
*PROC-Anweisung - Allgemeine Bemerkungen
Falls eine *PROC-Anweisung in der Prozedur vorhanden ist (Syntax siehe unten), so werden dem Benutzer folgende zusätzlichen Dienste angeboten:
1) Beim Aufruf der Prozedur analysiert CFS zuerst die PROC-Anweisung der angesprochenen Prozedur und gibt eine Maske mit allen in der PROC-Anweisung aufgeführten Parametern zusammen mit ihren Standardwerten (Schlüsselwort-Parameter) aus. Diese Maske hat das gleiche Format wie diejenige Maske, die beim Starten einer BS2000 DO-Prozedur im Enter-Modus ausgegeben wird (siehe Seite 11-).
Die Ausgabe der Parameter-Maske kann unterdrückt werden, indem die Prozedur durch das Kommando: DO N,prozedur,... gestartet wird (N: No Prompt of Parameters).
2) Durch die Angabe x in der PROC-Anweisung (*PROC x,....) kann - ähnlich wie in BS2000 DO-Prozeduren - der Umfang der Protokollierung während des Prozedurablaufs festgelegt werden.
Falls eine *PROC-Anweisung in der Prozedur nicht vorhanden ist, so sind für den Benutzer und den Ersteller der Prozedur folgende Besonderheiten zu beachten:
1) Es findet keine Protokollierung von Prozeduranweisungen und Datensätzen statt (wie bei *PROC N).
2) Es kann keine Parameter-Maske zum Eintragen der Prozedurparameter ausgegeben werden. Alle mit einem bestimmten Wert zu versorgenden Variablen müssen entweder im DO-Kommando als Stellungs- oder Schlüsselwortparameter angegeben werden oder während des Ablaufs der Prozedur vom Benutzer durch die Anweisung *PROMPT angefordert werden.
3) Der Ersteller der Prozedur muß bezüglich der Prozedurparameter, die beim Aufruf der Prozedur den Prozedurvariablen zugewiesen werden, folgende Besonderheit beachten:
Der erste beim Aufruf der Prozedur angegebene Stellungsparameter kann in der Prozedur nur durch den Variablen-Namen &1 angesprochen werden. Entsprechendes gilt für den zweiten Stellungsparameter &2 usw.
Syntax der *PROC-Anweisung
*PROC x, (par, [" text "] ... )
Die Syntax der *PROC-Anweisung ist identisch mit der PROC-Anweisung in BS2000 DO-Prozeduren. In der *PROC-Anweisung fehlt lediglich der SUBDTA Parameter. Es sind beliebig viele Fortsetzungszeilen möglich. Als Fortsetzungszeichen ist '-' anzugeben. Im Unterschied zu BS2000 DO-Prozeduren beginnt eine Fortsetzungszeile mit '*'. In den einzelnen Zeilen einer PROC-Anweisung eingeschlossene Kommentare (".....") werden ebenfalls akzeptiert. Diese Kommentare haben eine besondere Funktion für die beim Aufruf der Prozedur ausgegebene Parameter-Maske (siehe unten).
Die PROC-Anweisung gemäß Format 1 muß als erste Anweisung in der Prozedur angegeben werden.
Erläuterung der einzelnen Parameter der PROC-Anweisung:
x | C | D | N
Steuerung des Umfangs der Protokollierung im Verlauf der Prozedur.
A Es werden sowohl alle Prozeduranweisungen, wie auch alle an CFS zu übergebenden Datensätze am Bildschirm protokolliert.
C Es werden nur die Prozeduranweisungen (*-Anweisungen) am Bildschirm protokolliert.
D Es werden nur die an CFS zu übergebenden Datensätze am Bildschirm protokolliert.
N Es werden weder Prozeduranweisungen noch Datensätze am Bildschirm protokolliert (Standard).
par &var | &var=wert
Zu vereinbarender Prozedurparameter (Stellungs- oder Schlüsselwortparameter).
&var Es wird ein Stellungsparameter für die Prozedur vereinbart. Ein Stellungsparameter hat keinen Wert vordefiniert. Innerhalb der Prozedur kann mit der Variablen &var auf den beim Aufruf der Prozedur vom Benutzer zugewiesenen Wert der Variablen Bezug genommen werden.
&var=wert Es wird ein Schlüsselwortparameter für die Prozedur vereinbart. Ein Schlüsselwortparameter kann einen festen Standardwert erhalten. Beim Aufruf der Prozedur kann der Standardwert des Parameters durch die Angabe var=wert verändert werden.
wert Standardwert des Schlüsselwortparameters. wert kann mit oder ohne Hochkommas angegeben werden. Enthält wert Sonderzeichen, wie z.B. Blanks, so muß wert in Hochkommas eingeschlossen werden.
"text" Der hier angegebene Text wird beim DO-Aufruf in der Parameter-Maske in der Form 'var text...' angezeigt. var ist dabei der Name der Variablen und text eine erläuternde Beschreibung zur Variablen und zu den erlaubten Eingabemöglichkeiten. Die Gesamtlänge von var und text ist auf 30 Bytes begrenzt.
Standardmäßig wird in der Bildschirmmaske für jeden Prozedurparameter eine Zeile reserviert. Dies bedeutet, daß Parameterwerte nur in der Länge von 40 Byte angegeben werden können. Durch #n (n < 4) können für einen Parameter eins bis drei zusätzliche Eingabefelder zu je 40 Byte reserviert werden. #n muß nach dem ersten " bzw. nach ": angegeben werden.
Beispiel: Ist in der PROC-Anweisung eine Zeile der folgenden Art enthalten: /&DATEI=TEST,     ":#3Name der zu verarbeitenden Datei"-
so wird dieser DO-Parameter in der Maske in folgender Form angezeigt:
Name der zu verarbeitenden Datei =TEST
:
:
:
":text" Der hier angegebene Text wird beim DO-Aufruf in der Parameter-Maske in der Form 'text...' angezeigt. Der Name der Variablen wird hierbei nicht ausgegeben. text ist eine erläuternde Beschreibung zur Variablen und zu den erlaubten Eingabemöglichkeiten. Die Gesamtlänge von text ist auf 30 Bytes begrenzt.
Falls zu einem vereinbarten Parameter kein Text angegeben wurde, so erscheint der Parameter in der Parameter-Maske in der Form 'var '.
Syntax der *PROC-Anweisung
*PROC x Dieses Format der *PROC-Anweisung dient dazu, den Umfang der Protokollierung der Anweisungen am Bildschirm zu verändern. *PROC x kann mehrmals innerhalb der Prozedur angegeben werden und muß nicht als erste Anweisung angegeben werden.
x | C | D | N
A Es werden sowohl alle Prozeduranweisungen, wie auch alle an CFS zu übergebenden Datensätze am Bildschirm protokolliert.
C Es werden nur die Prozeduranweisungen (*-Anweisungen) am Bildschirm protokolliert.
D Es werden nur die an CFS zu übergebenden Datensätze am Bildschirm protokolliert.
N Es werden weder Prozeduranweisungen noch Datensätze am Bildschirm protokolliert (Standard).
Beispiel:
Die unter dem Namen S/O in der CFS.USERLIB gespeicherte CFS-Prozedur habe folgenden Inhalt:
*PROC N,(&1,                    ":Nr. der zu eröffnenden Conn."  -
* &VAR=2, ":Verarbeitungsrechner <1/2>" -
* &JOBNAME=FRANZ, ":Jobname für LOGON" -
* &USER-ID=XYZ, ":User-Id für LOGON" -
* &ACCOUNT=I001, ":Abrechnungsnummer" -
* &PASSW='C''...''' ":LOGON-Passwort")
*IF &1 = '' &1 = &NEXTCON
OC&1,,VAR&VAR/.&JOBNAME.&1 LOGON &USER-ID,&ACCOUNT,&PASSW
*WRITESYS 'Conn. &1 unter &USER-ID eröffnet (&JOBNAME)'
Nach dem Aufruf DO O wird folgende Parameter-Maske ausgegeben:



} dd.mm.yy hh:mm:ss J O B - R E P O R T TSN: .... {
} COMMAND :DO CFS.USERLIB(O) {
} {
} D O - P A R A M S {
} Nr. der zu eröffnenden Conn. : {
} Verarbeitungsrechner <1/2> =2 {
} Jobname für LOGON =FRANZ {
} User-Id für LOGON =XYZ {
} Abrechnungsnummer =I001 {
} LOGON-Passwort ='C''...''' {
} {
} {
} {
} {
}You may now complete the DO-Params. (Cancel with K1){
Wert für Prozedurvariable erfragen
*PROMPT &var [, 'text'] [,L] [D]
Vom Benutzer wird die Eingabe eines Wertes für eine Prozedurvariable angefordert.
&var Name der Prozedurvariablen, die mit dem vom Benutzer eingegebenen Wert versorgt werden soll.
text Text für Eingabeaufforderung am Bildschirm.
Falls in der PROMPT-Anweisung kein Text angegeben ist, so wird '&VAR=' als Eingabeaufforderung ausgegeben.
L Die Eingabe für die Variable &var wird nicht in Großbuchstaben umgewandelt.
Standard: Die Eingabe wird in Großbuchstaben umgewandelt.
D Die Eingabe für die Variable &var wird in einem dunkelgesteuerten Feld angefordert.
Standard: Die Eingabe zu der Anweisung PROMPT ist sichtbar.
Latente Bedingung zurücksetzen
*RESET [%ABEND | %CMD | %END | %IN | %OUT | %LST | %TERM | %TIME]
Diese Anweisung setzt eine zuvor definierte ON-Bedingung zurück. Die RESET-Anweisung ist notwendig, wenn eine ON-Bedingung zurückgesetzt werden soll, obwohl diese noch nicht eingetreten ist. Bei Eintritt, d.h. bei Wirksamwerden einer ON-Bedingung, wird diese automatisch zurückgesetzt. Eine ON-Bedingung einer bestimmten Kategorie (%LST, %CMD, %TERM, %END, %TIME) kann aufgrund einer Definition höchstens einmal wirksam werden.
Falls keine Bedingung angegeben ist, so werden alle ON-Bedingungen zurückgesetzt
Hinweis:
Beim Aufruf einer Prozedur werden folgende ON-Bedingungen zurückgesetzt, die durch die Startup-Datei oder eine laufende Prozedur definiert wurden: ON %CMD, %IN, %OUT, %LST, %TERM. Die in einer Startup-Datei definierten Bedingungen ON %ABEND und ON %END bleiben auch beim späteren Aufruf einer CFS-Prozedur aktiv.
Prozedurvariable über FHS-Format verändern
*RDMASK (format [,bibl] ) [TAR=n,] [&var1, &var2, ... ]
Die Anweisung *RDMASK gibt am Bildschirm ein FHS *-Format aus, wobei die Inhalte der angegebenen Prozedurvariablen in den variablen Feldern des FHS-Formats angezeigt werden. Nach dem Senden des Formats mit der Datenübertragungstaste ENTER werden die Inhalte der modifizierbaren Maskenfelder in die angegebenen Prozedurvariablen zurückübertragen. Hierbei wird das erste Eingabefeld der Maske in die als erstes angegebene Prozedurvariable übertragen, das zweite Maskenfeld in die zweite Prozedurvariable, usw.
format Formatname der FHS-Maske in der CFSLIB.
(format,bibl) Formatname der FHS-Maske in der angegebenen Formatbibliothek.
TAR=n Tabulator rechts. Nach Ausgabe der Maske steht der Cursor standardmäßig im ersten Eingabefeld (TAR=0). Mit dem Parameter TAR=n (n = 1, 2, ...) wird der Cursor in das zweite (TAR=1), dritte (TAR=2) usw. Eingabefeld der Maske positioniert.
Der Parameter kann in der Regel weggelassen werden.
&var1 Name der mit dem Inhalt des ersten Maskenfeldes zu füllenden Prozedurvariablen. Falls die Variable noch nicht existiert, wird sie von CFS als Leervariable neu angelegt. Es ist zu beachten, daß der Datenteil von CFS-Prozedurvariablen maximal 80 Bytes umfaßt. Hieraus ergibt sich, daß längere Maskenfelder bei der Übertragung in die Prozedurvariable gekürzt werden. Bei der Ausgabe der Maske werden die Inhalte der Prozedurvariablen in den entsprechenden Maskenfeldern dargestellt.
Falls mehr variable Felder in der Maske existieren als Prozedurvariablen angegeben wurden, so gehen die Eingaben in den überschüssigen Maskenfeldern verloren.
Hinweise:
Um die in der RDMASK-Maske betätigte Datenübertragungstaste abzufragen ist nach *RDMASK die CFS-interne Variable &RDMASKIN auszuwerten. Dazu ist die folgende Anweisung anzugeben: *IF &RDMASKIN = t-bez SKIP .label
Beispiel: *IF &RDMASKIN = K1 SKIP .ENDE
In der Anweisung *RDMASK dürfen als Eingabeparameter keine CFS-internen Variablen wie z.B. &DATE, &TIME angegeben werden. Ausnahme: &CFSMSG.
Vor der ersten Anwendung einer *RDMASK-Anweisung muß per File-Kommando die MFHSROUT-Bibliothek zugewiesen werden: /FILE bibl,LINK=MROUTLIB
Mit der Anweisung *RDMASK können nur mit FHS definierte *-Formate ausgegeben werden. Bei der Erstellung eines FHS *-Formats mit IFG sind folgende Besonderheiten zu beachten: In der Maske "Adressierungshilfen, Benutzerprofil, Standardwerte zur Einsatzvorbereitung für FHS" sind im Abschnitt "Struktur des Datenübergabebereichs" folgende Eintragungen notwendig:
getrennte Attributblöcke und Feldinhalte : NEIN
ausgerichtet , mit Attributfeldern : NEIN
nicht ausgerichtet , mit Attributfeldern : NEIN
nicht ausgerichtet , ohne Attributfelder : JA
Entsprechende Angaben sind notwendig bei der Definition des Formats mit FHS-Makros.
Die Anweisung *RDMASK kann auch zum bloßen Ausgeben einer FHS-Maske in einer CFS-Prozedur verwendet werden: *RDMASK (format,bibl)
Die Anweisung *RDMASK kann innerhalb der Prozedur über mehrere Zeilen fortgesetzt werden. Als Fortsetzungszeichen ist '-' zu verwenden. In der Fortsetzungszeile wird ein * als erstes Zeichen erwartet.
Umschalten der Eingabequelle auf SYSCMD
*RET SYSCMD Die *RET-Anweisung ist sinnvoll, falls CFS in einer BS2000 DO-Prozedur aufgerufen wird und in dieser per DO-Kommando mehrere CFS-Prozeduren hintereinander gestartet werden sollen.
Beispiel:
*002 FILE=NO
DO CFS.USERLIB(PROC1)
DO CFS.USERLIB(PROC2)
DO CFS.USERLIB(PROC3)
END
Damit obiger Ablauf in der gewünschten Weise funktioniert, muß in jeder der CFS-Prozeduren PROC1 bis PROC3 als letzte Anweisung *RET SYSCMD angegeben werden. Hiermit wird das Eingabemedium von SYSDTA (d.h. von der aktuellen CFS-Prozedurdatei) auf die BS2000-Prozedur umgeleitet. Von dort wird sodann das nächste CFS DO-Kommando gelesen und ausgeführt.
Wurde CFS nicht in einer DO-Prozedur aufgerufen (Procedure Level Number 0), so hat *RET SYSCMD die gleiche Wirkung wie die Anweisung *DIA (siehe unten).
Wiederaufnahme der Prozedur aus dem Dialog
RET [ datei | bibl (element) ]
Dieses Kommando, das im Feld COMMAND der Dateienliste einzugeben ist, schaltet das Eingabemedium von der Tastatur auf SYSDTA um. CFS läuft ab diesem Punkt wieder prozedurgesteuert. Das Kommando RET ist das Gegenstück zu der Prozeduranweisung *DIA.
datei | bibl(element) Durch eine Parameterangabe beim RET-Kommando wird vor dem Umschalten in den Prozedurmodus eine neue Eingabequelle für SYSDTA zugewiesen: SYSFILE SYSDTA=datei | SYSFILE SYSDTA=bibl (element).
Falls bibl(element) angegeben wurde, so ist dadurch die auszuführende CFS-Prozedur eindeutig bestimmt. Im anderen Fall durchsucht CFS zuerst die zugewiesene USERLIB (Standard: CFS.USERLIB) nach einem Element mit dem angegebenen Namen. Ist in der USERLIB kein derartiges Element vorhanden, so wird eine Datei mit der angegebenen Bezeichnung gesucht. Zum Verändern der Standard CFS-Userlib siehe Kommando UL Seite 18-.
Die automatische Wiederaufnahme einer Prozedur aufgrund bestimmter Kontextbedingungen kann erreicht werden durch die Prozeduranweisung *ON:
*ON [%END | %TERM | %ABEND | %CMD | %LST | %IN | %OUT | %INP].
Auswerten und Modifizieren von Prozedurvariablen
Die Run-Anweisung bietet die Möglichkeit, die Inhalte von CFS-Prozedurvariablen (keine internen Variablen) in vielfältiger Weise auszuwerten und zu modifizieren bzw. Formatumwandlungen mit Variablen vorzunehmen. In der Run-Anweisung werden verschiedene Programm-Module angesprochen, die eine Vielfalt einzelner Funktionen realisieren. Die Menge der zur Verfügung stehenden Run-Module wird ständig erweitert. Auch werden für bestehende Module neue Unterfunktionen angeboten.
Um den Inhalt einer CFS-internen Variablen mit der Run-Anweisung zu modifizieren, ist der Inhalt zuerst einer benutzereigenen Variablen zuzuweisen. Die benutzereigene Variable kann dann mit der Run-Anweisung modifiziert bzw. ausgewertet werden.
Aufrufformat der Run-Anweisung
*RUN (modul)[param,][&var1,&var2, ... ]
modul Name der Run-Funktion. Der Name entspricht einem Programm-Modul in der CFSLIB.
param Parameterangabe entspricht der durch den Run-Modul auszuführenden Unterfunktion.
&var Namen der an die Prozedur übergebenen CFS-Prozedurvariablen.
Falls eine Variable noch nicht existiert, wird sie von CFS als Leervariable angelegt. Der Run-Modul hat Zugriff auf die übergebenen Prozedurvariablen und kann auch ihren Inhalt verändern.
Der Name der Variablen kann auch indirekt in der Form &&var angegeben werden. In diesem Fall enthält &var in den Daten den Namen der eigentlich zu verarbeitenden Variablen.
Als Parameter der *RUN-Anweisung dürfen keine CFS-internen Prozedurvariablen angegeben werden (Ausnahmen: &CFSMSG und &SLABEL). Die Anweisung *RUN kann innerhalb der Prozedur über mehrere Zeilen fortgesetzt werden. Als Fortsetzungszeichen ist '-' zu verwenden. In der Fortsetzungszeile wird ein * als erstes Zeichen erwartet.
Im folgenden erhalten Sie die Beschreibung aller bisher zur Verfügung stehenden Run-Module mit ihren entsprechenden Unterfunktionen. Durch die offene Programmschnittstelle ist es darüber hinaus möglich, eigene, auf spezielle Bedürfnisse zugeschnittene Run-Module selbst zu programmieren. Die Programmschnittstelle für Run-Module ist am Ende des Abschnitts beschrieben.
*RUN (CPROMPT) {&var1 | 'text'} ,&var2
Die Routine CPROMPT gibt den in &var1 enthaltenen oder den direkt angegebenen String 'text' mit TYPIO an $CONSOLE aus und erwartet vom Systembediener eine Antwort der Form tsn.text . Der Text der Antwort wird in der Variablen &var2 zurückgeliefert. Die Routine wird solange angehalten, bis der Systembediener an der Console die PAUSE beantwortet hat.
*RUN (DATE) ...
Die Routine DATE bietet verschiedene Operationen zur Datumsberechnung.
Als erster Parameter ist ein Operationscode anzugeben, in dem die Art der gewünschten Umrechnung/Konvertierung festlegt wird. Als zweiter Parameter ist der Name der Prozedurvariablen anzugeben, die das Eingabedatum enthält. Als optionaler Parameter kann der Name einer zweiten Prozedurvariablen angegeben werden. In dieser wird das Ergebnis der Umrechnung/Konvertierung zurückgeliefert. Falls keine zweite Prozedurvariable angegeben ist, wird das Ergebnis in der ersten Variablen geliefert.
Ein Datum kann in der Eingabevariablen in der Form ddmmyy[yy], dd.mm.yy[yy], dd-mm-yy[yy] oder dd/mm/yy[yy] angegeben werden. Falls das Ergebnis der Umrechnung wieder ein Datum ist, so wird dieses in der gleichen Schreibweise wie das Eingabedatum zurückgeliefert.
*RUN (DATE){+|-}{n|&n},&invar [,&outvar]
Die Funktion +/- addiert/subtrahiert zu dem in &invar angegebenen Datum n Tage. n kann als Konstante oder als Variable angegeben werden. Das Ergebnis ist wiederum ein Datum. Falls eine Variable &outvar angegeben ist, wird das Ergebnis in dieser Variablen abgeliefert und &invar bleibt unverändert. Anderenfalls wird die Variable &invar entsprechend modifiziert. Fehler werden mit dem String 'ERR' angezeigt.
Beispiele: *RUN (DATE)+7,&INDAT,&OUTDAT
 &INDAT = '30.12.1993' --> &OUTDAT = '06.01.1994'
 &INDAT = '301293'     --> &OUTDAT = '060194'
 &INDAT = '30121993'   --> &OUTDAT = '06011994'
 &INDAT = '32121993'   --> &OUTDAT = 'ERR'
*RUN (DATE)-&invar1,&invar2 [,&outvar]
Die Funktion - liefert als Ergebnis die Anzahl der Tage zwischen dem in der ersten (&invar1) und der zweiten Variablen (&invar1) angegebenen Datum. Beide Eingabevariablen müssen ein Datum im einem der Formate yy-mm-dd/yyyy-mm-dd/ dd.mm.yy/dd.mm.yyyy/ddmmyy/ddmmyyyy enthalten. Falls eine Variable &outvar angegeben ist, wird das Ergebnis in dieser Variablen abgeliefert und &invar2 bleibt unverändert. Anderenfalls wird die Variable &invar2 entsprechend modifiziert. Fehler werden mit dem String 'ERR' angezeigt.
Beispiel: *RUN (DATE)-&INDAT1,&INDAT2,&OUTVAR
 &INDAT1 = '31.12.93'
 &INDAT2 = '01.01.93'
 --> &OUTVAR = '364'
*RUN (DATE)DW,&invar [,&outvar]
Die Funktion DW (Day of Week) liefert zu einem Datum die Nummer des Wochentags.
Beispiel: *RUN (DATE)DW,&INDAT
 &INDAT = '23.05.1994' --> '1'  (Montag) 
*RUN (DATE)DDD,&invar [,&outvar]
Die Funktion DDD liefert zu dem in &invar angegebenen Datum den laufenden Tag innerhalb des Jahres (Format ddd). Fehler werden mit dem String 'ERR' angezeigt.
Beispiel: *RUN (DATE)DDD,&INDAT,&OUTDAT
 &INDAT = '23.05.1994' --> &OUTDAT = '143'
*RUN (DATE)FREE,&invar [,&outvar]
Die Funktion FREE liefert als Ergebnis 'Y'/'N', falls das in &invar angegebene Datum ein arbeitsfreier Tag/kein arbeitsfreier Tag ist. Fehler werden mit dem String 'ERR' angezeigt. Als arbeitsfreie Tage gelten Samstag, Sonntag, Feiertage sowie die in der IFREE-Datei des Terminverwaltungssystems festgelegten Tage des aktuellen Jahres. Für weitere Informationen zur IFREE-Datei siehe Seite 14-.
Beispiel: *RUN (DATE)FREE,&INDAT
 &INDAT = '23.05.1994' --> 'Y'  (Pfingstmontag)
*RUN (DATE)WD,&invar [,&outvar]
Die Funktion WD (Working Day) liefert als Ergebnis 'Y'/'N', falls das in &invar angegebene Datum ein Arbeitstag/kein Arbeitstag Tag ist. Fehler werden mit dem String 'ERR' angezeigt. Als Arbeitstage gelten alle Tage des Jahres außer Samstag, Sonntag, Feiertage sowie die in der IFREE-Datei des Terminverwaltungssystems festgelegten Tage des aktuellen Jahres. Für weitere Informationen zur IFREE-Datei siehe Seite 14-.
Beispiele: *RUN (DATE)WD,&INDAT
 &INDAT = '23.05.1994' --> 'N'  (Pfingstmontag)
 &INDAT = '24-05-94'   --> 'Y'
*RUN (DATE)WDN,&invar [,&outvar]
Die Funktion WDN (Working Day Next) liefert zu einem Eingabedatum das Datum des nächsten Arbeitstages. Als Arbeitstage gelten alle Tage des Jahres außer Samstag, Sonntag, Feiertage sowie die in der IFREE-Datei des Terminverwaltungssystems festgelegten Tage des aktuellen Jahres. Falls das Eingabedatum bereits auf einen Arbeitstag fällt, so wird es unverändert als Ausgabedatum zurückgeliefert. Für weitere Informationen zur IFREE-Datei siehe Seite 14-.
Beispiele: *RUN (DATE)WDN,&INDAT,&OUTDAT
 &INDAT = '23.05.1994' --> &OUTDAT = '24.05.1994'
&INDAT = '24/05/1994' --> &OUTDAT = '24/05/1994'
*RUN (DATE)WDP,&invar [,&outvar]
Die Funktion WDP (Working Day Previous) liefert zu einem Eingabedatum das Datum des vorhergehenden Arbeitstages. Als Arbeitstage gelten alle Tage des Jahres außer Samstag, Sonntag, Feiertage sowie die in der IFREE-Datei des Terminverwaltungssystems festgelegten Tage des aktuellen Jahres. Falls das Eingabedatum bereits auf einen Arbeitstag fällt, so wird es unverändert als Ausgabedatum zurückgeliefert. Für weitere Informationen zur IFREE-Datei siehe Seite 14-.
Beispiel: *RUN (DATE)WDP,&INDAT,&OUTDAT
 &INDAT = '23.05.1994' --> &OUTDAT = '20.05.1994'
*RUN (DATE)WDF,&invar [,&outvar]
Die Funktion WDF (Working Day First) liefert zu einem Kalendermonat das Datum des ersten Arbeitstages in diesem Monat. Als Arbeitstage gelten alle Tage des Jahres außer Samstag, Sonntag, Feiertage sowie die in der IFREE-Datei des Terminverwaltungssystems festgelegten Tage des aktuellen Jahres. Für weitere Informationen zur IFREE-Datei siehe Seite 14-.
Beispiel: *RUN (DATE)WDF,&INDAT,&OUTDAT
 &INDAT = '05.1994'    --> &OUTDAT = '02.05.1994'
*RUN (DATE)WDL,&invar [,&outvar]
Die Funktion WDL (Working Day Last) liefert zu einem Kalendermonat das Datum des letzten Arbeitstages in diesem Monat. Als Arbeitstage gelten alle Tage des Jahres außer Samstag, Sonntag, Feiertage sowie die in der IFREE-Datei des Terminverwaltungssystems festgelegten Tage des aktuellen Jahres. Für weitere Informationen zur IFREE-Datei siehe Seite 14-.
Beispiel: *RUN (DATE)WDL,&INDAT,&OUTDAT
 &INDAT = '05.1994'    --> &OUTDAT = '31.05.1994'
*RUN (DATE)WW,&invar [,&outvar]
Die Funktion WW liefert zu dem in &invar angegebenen Datum die Nummer der Kalenderwoche innerhalb des Jahres (Format ww). Falls eine Variable &outvar angegeben ist, wird das Ergebnis in dieser Variablen abgeliefert und &invar bleibt unverändert. Anderenfalls wird die Variable &invar entsprechend modifiziert. Fehler werden mit dem String 'ERR' angezeigt.
Beispiele: *RUN (DATE)WW,&INDAT
 &INDAT = '23.05.1994' --> '20'
&INDAT = '01.01.1994' --> '0'
&INDAT = '03.01.1994' --> '1'
*RUN (DATE)WW1,&invar [,&outvar]
Die Funktion WW1 liefert zu der in &invar angegebenen Kalenderwoche das Datum des ersten Tages dieser Kalenderwoche (Montag). Falls eine Variable &outvar angegeben ist, wird das Ergebnis in dieser Variablen abgeliefert und &invar bleibt unverändert. Anderenfalls wird die Variable &invar entsprechend modifiziert. Fehler werden mit dem String 'ERR' angezeigt.
Beispiel: *RUN (DATE)WW,&INDAT
 &INDAT = '201994'     --> '17.05.1994'
*RUN (DATE)VALID,&invar [,&outvar]
Die Funktion VALID prüft das angegebene Datum auf Gültigkeit. Die Ausgabevariable wird auf die Werte 'Y'/'N' gesetzt, falls die Eingabevariable ein bzw. kein korrektes Datum enthält.
Beispiele: *RUN (DATE)VALID,&INDAT,&RETCD
 &INDAT = '30.12.1993' --> &RETCD = 'Y'
&INDAT = '301293'     --> &RETCD = 'Y'
&INDAT = '30121993'   --> &RETCD = 'Y'
&INDAT = '32121993'   --> &RETCD = 'N'
&INDAT = '29.02.94'   --> &RETCD = 'N'
*RUN (GETLEN)&var,&outvar
Die Routine GETLEN liefert die Länge der Variablen &var in der Ausgabevariablen &outvar zurück.
Beispiel: *RUN (GETLEN)&VAR1,&VAR1LEN
 &VAR1 = 'ABCD '    --> &VAR1LEN = '5'
*RUN (IFUQ)[noopt] [,label-1] ... [,label-n] ,&var-1, ... ,&var-n ,&skipvar
Mit dieser Routine ist es möglich, einen Satz von Prozedurvariablen auf Eindeutigkeit zu prüfen. Dies ist vor allem bei der Verwendung der Anweisung RDMASK von Bedeutung. In der mit RDMASK ausgegebenen Maske kann dem Anwender die Möglichkeit einer Auswahl vorgegeben werden. Mit IFUQ kann auf einfache Weise ermittelt werden, wie die Prozedur nach der Auswahl durch den Benutzer fortzusetzen ist. Die Beschreibung der einzelnen Parameter der Anweisung IFUQ ist in der Inline-Dokumentation der Routine IFUQ in der Bibliothek CFS.S.LMSLIB enthalten.
*RUN (MVAR) ...
Die Routine MVAR bietet verschiedene Optionen zur Manipulation von CFS-Variablen.
*RUN (MVAR)UPPER,&invar [,&outvar]
Die Funktion UPPER wandelt alle Kleinbuchstaben in den Daten der Variablen &invar in die entsprechenden Großbuchstaben um. Falls eine Variable &outvar angegeben ist, wird das Ergebnis in dieser Variablen abgeliefert und &invar bleibt unverändert. Anderenfalls wird die Variable &invar entsprechend modifiziert.
Beispiel: *RUN (MVAR)UPPER,&IN,&OUT
 &IN = '9abcDE.,-'     --> &OUT = '9ABCDE.,-'
*RUN (MVAR)LOWER,&invar [,&outvar]
Die Funktion LOWER wandelt alle Großbuchstaben in den Daten der Variablen &invar in die entsprechenden Kleinbuchstaben um. Falls eine Variable &outvar angegeben ist, wird das Ergebnis in dieser Variablen abgeliefert und &invar bleibt unverändert. Anderenfalls wird die Variable &invar entsprechend modifiziert.
Beispiel: *RUN (MVAR)LOWER,&IN,&OUT
 &IN = '9ABCDE.,-'     --> &OUT = '9abcde.,-'
*RUN (MVAR)GET-VALUE-ONLY,&invar [,&outvar]
Die Funktion GET-VALUE-ONLY löscht in der Variablen &invar alle Blanks am Anfang und am Ende sowie führende Nullen am Anfang. Falls eine Variable &outvar angegeben ist, wird das Ergebnis in dieser Variablen abgeliefert und &invar bleibt unverändert. Anderenfalls wird die Variable &invar entsprechend modifiziert.
Beispiel: *RUN (MVAR)GET-VALUE-ONLY,&IN,&OUT
 &IN = '   0012  '     --> &OUT = '12'
*RUN (MVAR)DEL-LEADING-BLANKS,&var1 [,&var2] ...
Die Funktion DEL-LEADING-BLANKS löscht in den angegebenen Variablen alle führenden Blanks.
Beispiel: *RUN (MVAR)DEL-LEADING-BLANKS,&VAR1,&VAR2
 &VAR1 = '   0012  '   --> '0012  '
&VAR2 = ' ABC'        --> 'ABC'
*RUN (MVAR)DEL-TRAILING-BLANKS,&var1 [,&var2] ...
Die Funktion DEL-TRAILING-BLANKS löscht in den angegebenen Variablen alle Blanks am Ende.
Beispiel: *RUN (MVAR)DEL-TRAILING-BLANKS,&VAR1
 &VAR1 = '   0012  '   --> '   0012'
*RUN (MVAR)DEL-LEADING-ZEROES,&var1 [,&var2] ...
Die Funktion DEL-LEADING-ZEROES löscht in den angegebenen Variablen alle führenden Nullen.
Beispiel: *RUN (MVAR)DEL-LEADING-ZEROES,&VAR1,&VAR2
 &VAR1 = '0012'        --> '12'
&VAR2 = '   0012'     --> '   0012'
*RUN (MVAR)HEX-TO-CHAR1 [,len] ,&invar [,&outvar]
Die Funktion HEX-TO-CHAR1 konvertiert einen u.U. nicht abdruckbaren hexadezimalen Variableninhalt byteweise in eine abdruckbare Form. 1 <= len <= 4: Anzahl Bytes der Variablen &invar. Die Länge der Eingabevariablen sollte angegeben werden, falls diese am Ende auch binäre Nullen (X'00') enthalten kann. Falls die Variable &outvar angegeben ist, wird das Ergebnis der Konvertierung dort abgelegt. Anderenfalls wird das Ergebnis in der Variablen &invar zurückgeliefert.
Beispiel: *RUN (MVAR)HEX-TO-CHAR1,4,&VAR
 &VAR = X'003FC100'    --> '003FC100'
*RUN (MVAR)HEX-TO-CHAR2,&invar [,&outvar]
Die Funktion HEX-TO-CHAR2 interpretiert den abdruckbaren Inhalt der Variablen &invar als hexadezimale Zahl und wandelt diese in die Dezimaldarstellung um. Falls eine Variable &outvar angegeben ist, wird das Ergebnis in dieser Variablen abgeliefert und &invar bleibt unverändert. Anderenfalls wird die Variable &invar entsprechend modifiziert.
Beispiel: *RUN (MVAR)HEX-TO-CHAR2,&VAR
 &VAR = '003FC100'     --> '4178176'
*RUN (MVAR)HEX-TO-CHAR3 [,len] ,&invar [,&outvar]
Die Funktion HEX-TO-CHAR3 ist eine Kombination der Funktionen HEX-TO-CHAR1 und HEX-TO-CHAR2
Beispiel: *RUN (MVAR)HEX-TO-CHAR3,4,&VAR
 &VAR = X'003FC100'    --> '4178176'
*RUN (MVAR)CHAR-TO-HEX1 [,len] ,&invar [,&outvar]
Die Funktion CHAR-TO-HEX1 konvertiert einen abdruckbaren Variableninhalt byteweise in den entsprechenden hexadezimalen Wert.
1 <= len <= 4: Länge des hexadezimalen Ausgabestrings. Die Länge des Ausgabewertes sollte angegeben werden, falls führende Nullen (X'00') eingefügt werden sollen. Falls die Variable &outvar angegeben ist, wird das Ergebnis der Konvertierung dort abgelegt. Anderenfalls wird das Ergebnis in der Variablen &invar zurückgeliefert.
Beispiel: *RUN (MVAR)CHAR-TO-HEX1,3,&VAR
 &VAR = '12C1'         --> X'0012C1'
*RUN (MVAR)CHAR-TO-HEX2,&invar [,&outvar]
Die Funktion CHAR-TO-HEX2 wandelt die in der Variablen &invar enthaltene Dezimalzahl in die entsprechende hexadezimale Zahl um. Falls eine Variable &outvar angegeben ist, wird das Ergebnis in dieser Variablen abgeliefert und &invar bleibt unverändert. Anderenfalls wird die Variable &invar entsprechend modifiziert.
Beispiel: *RUN (MVAR)CHAR-TO-HEX2,&VAR1,&VAR2
 &VAR1 = '4801'        --> &VAR2 = '12C1'
*RUN (MVAR)CHAR-TO-HEX3 [,len] ,&invar [,&outvar]
Die Funktion CHAR-TO-HEX3 ist eine Kombination der Funktionen CHAR-TO-HEX1 und CHAR-TO-HEX2
Beispiel: *RUN (MVAR)CHAR-TO-HEX3,4,&VAR
 &VAR = X'4801'        --> X'000012C1'
*RUN (MVAR)FILL-STRING,len, &invar [,&outvar]
Die Funktion FILL-STRING füllt den Inhalt einer Variablen rechts bis zu der gewünschten Länge len mit Blanks (' ') auf. 2 <= len <= 80. Falls die Variable &outvar angegeben ist, wird das Ergebnis dort abgelegt. Anderenfalls wird das Ergebnis in der Variablen &invar zurückgeliefert.
Beispiel: *RUN (MVAR)FILL-STRING,10,&VAR
 &VAR = '   0012'      --> '   0012   '
*RUN (MVAR)FILL-STRING-RIGHT,len [,fill] ,&invar [,&outvar]
Die Funktion FILL-STRING-RIGHT richtet den Inhalt einer Variablen in der Länge len rechts aus, indem links vorgegebene Füllzeichen fill eingefügt werden. 2 <= len <= 80. Falls die Variable &outvar angegeben ist, wird das Ergebnis dort abgelegt. Anderenfalls wird das Ergebnis in der Variablen &invar zurückgeliefert.
Für fill kann ein Zeichen im Format [C]'x' angegeben werden. Standard: C'_'
Beispiel: *RUN (MVAR)FILL-STRING,6,&VAR1,&VAR2
 &VAR1 = '0012'        --> &VAR2 = '  0012'
*RUN (MVAR)ADD-ARRAY, &invar1, &invar2, &outvar
Die Funktion ADD-ARRAY führt eine spaltenweise Addition aller Felder von zwei gleich strukturierten Variablen aus. Die zu addierenden Felder können auch Zahlen der Form 999.99 oder 999,99 enthalten. Die Verarbeitung der Felder erfolgt von rechts nach links. Deshalb müssen alle Spalten in den zwei Eingabevariablen rechtsbündig gleich ausgerichtet sein. In der Variablen &outvar wird das Ergebnis abgelegt.
Beispiel: *RUN (MVAR)ADD-ARRAY,&VAR1,&VAR2,&SUMME
&VAR1 = '  12     1,35    99'
&VAR2 = '   2    12,65    01'
&SUMME= '  14    14,00   100'
*RUN (MVAR)SUB-ARRAY, &invar1, &invar2, &outvar
Die Funktion SUB-ARRAY führt eine spaltenweise Subtraktion aller Felder von zwei gleich strukturierten Variablen aus (&invar1 - &invar2). Die zu subtrahierenden Felder können auch Zahlen der Form 999.99 oder 999,99 enthalten. Die Verarbeitung der Felder erfolgt von rechts nach links. Deshalb müssen alle Spalten in den zwei Eingabevariablen rechtsbündig gleich ausgerichtet sein. In der Variablen &outvar wird das Ergebnis abgelegt.
Beispiel: *RUN (MVAR)SUB-ARRAY,&VAR1,&VAR2,&DIFF
&VAR1 = '  12    12,35    99'
&VAR2 = '   2     1,65    01'
&DIFF = '  10    10,70    98'
*RUN (MVAR)TIME-DIFF, &invar1, &invar2, &outvar
Die Funktion TIME-DIFF subtrahiert von der in &invar2 angegebenen Zeit (HH:MM:SS) die in &invar1 enthaltene Zeit. Das Ergebnis wird als HH:MM:SS in die Variable &outvar geschrieben.
Beispiel: *RUN (MVAR)TIME-DIFF,&VAR1,&VAR2,&DIFF
&VAR1 = '11:54:22'
&VAR2 = '12:25:21'
&DIFF = '00:30:59'
*RUN (MVAR)TIME-DIFF-TEXT, &invar1, &invar2, &outvar
Die Funktion TIME-DIFF-TEXT subtrahiert von der in &invar2 angegebenen Zeit (HH:MM:SS) die in &invar1 enthaltene Zeit. Das Ergebnis wird in textlicher Aufbereitung in die Variable &outvar geschrieben.
Beispiel: *RUN (MVAR)TIME-DIFF-TEXT,&VAR1,&VAR2,&DIFF
&VAR1 = '11:54:22'
&VAR2 = '12:25:21'
&DIFF = '30 minutes, 59 seconds'
*RUN (SETLEN)&var1 [,&var2] ...
Die Routine SETLEN kürzt Prozedurvariablen &var1, &var2 usw. in der Weise, daß von Rechts her alle Blanks durch X'00' ersetzt werden.
Anwendungsfall: Bei RDMASK werden die über die FHS-Maske eingelesenen Prozedurvariablen in der Länge des jeweiligen Maskenfeldes mit Blanks aufgefüllt. Die so eingelesenen Variablen können durch SETLEN gekürzt werden.
*RUN (RDJOBPAR) [col [,len], ] &var
Die Routine RDJOBPAR liefert in der Variablen &var die im LOGON- bzw. ENTER-Kommando vereinbarten Job-Parameter (/LOGON ...,JOB-PAR='...'). Als Job-Parameter kann einer Task ein String in der Länge 1 bis 128 mitgegeben werden. Mit *RUN (RDJOBPAR) kann dieser String zur Steuerung von CFS-Prozeduren in Dialog- und Enter-Tasks verwendet werden. Durch die optionalen Angaben col und len wird ab einer bestimmten Spalte (1 <= col < 128) und in einer vorgegebenen Länge (1 <= len <= 80) gelesen.
*RUN (SVAR)such,&var,&rcvar [,&findvar1 [,&findvar2 ] ]
Die Routine SVAR prüft, ob der Inhalt der Prozedurvariablen &var eine in CFS-Syntax angegebene allgemeine Suchbedingung such (siehe Seite 8-/ erfüllt. Die Suchbedingung kann direkt oder über eine Prozedurvariable angegeben werden.
In der als zweites angegebenen Prozedurvariablen &rcvar wird ein Returncode hinterlegt, der über das Ergebnis der Suche informiert.
'Y'|'N' Das Suchitem wurde gefunden/nicht gefunden.
'' Syntaxfehler im Suchargument.
In die optionale Variable &findvar1 wird im Falle von &rcvar='Y' der auf den gefundenen Suchbegriff folgende Teil der Variablen &var eingetragen.
In die optionale Variable &findvar2 wird im Falle von &rcvar='Y' der vor dem gefundenen Suchbegriff stehende Teil der Variablen &var eingetragen. &findvar2 kann nur zusammen mit &findvar1 angegeben werden.
Das Quellprogramm der Routine SVAR ist in der PLAM-Bibliothek CFS.S.LMSLIB enthalten und kann vom Benutzer auf eigene Bedürfnisse angepaßt werden.
*RUN (URLOUT)HTTP [,type]
Die Routine URLOUT arbeitet mit unserem Produkt URLSERVER zusammen.
An den mit dem URLSERVER verbundenen Internet-Browser wird ein HTTP-Header mit dem angegebenen Content-Type gesandt.
Der gesendete HTTP-Header beinhaltet folgende Daten:
HTTP/1.0 200 OK
Content-Type: type
        (leerzeile)
type Der Content-Type kann als CFS-Variable &var oder als String angegeben werden.
Fehlt der Parameter type, wird der Content-Type "text/html" verwendet.
Beispiele: *&TYPE='text/html'
*RUN (URLOUT)HTTP,&TYPE
*RUN (URLOUT)HTTP,text/plain
*RUN (URLOUT)HTTP,'text/plain'
*RUN (URLOUT)HREF ,url
An den Internet-Browser wird ein HTTP-Header mit dem Status-Code 302 (andere URL-Adresse anfordern) gesendet.
Diese Anweisung ist nur sinnvoll, wenn sie als einzige URLOUT-Anweisung am Ende einer CFS-Prozedur angegeben wird. D.h. es wird zuerst eine Datei erzeugt und dann die Anzeige dieser Datei mit *RUN (URLOUT)HREF gestartet. Dabei können alle Funktionen des URL-Servers benutzt werden, wie z.B. VIEW, XVIEW, EDTW, PDF.
url Die URL-Adresse kann als CFS-Variable &var oder als String angegeben werden.
Beispiele: *&GOTO='../PDF/TEST.LST'
*RUN (URLOUT)HREF,&GOTO
*RUN (URLOUT)HREF,../PDF/TEST.LST
*RUN (URLOUT)DATA [,string] [ ,&var1, &var2, ... ]
An den Internet-Browser wird der angegebene konstante String und/oder der Inhalt der CFS-Variablen gesendet. Die Daten werden von EBCDIC nach ISO8859 konvertiert.
string Text mit Daten und HTML-Tags, die an den Internet-Browser gesendet wird. Der String kann in Hochkommas eingeschlossen werden.
&var1 ,&var2 ...
Die angegebenen Variablen können Text und HTML-Tags enthalten und werden hintereinander und direkt im Anschluss an einen evtl. angegebenen String an den Internet-Browser gesendet. Eine Variable kann bis zu 80 Bytes Text enthalten. Insgesamt darf der Inhalt aller Variablen die Länge von 4096 Bytes nicht überschreiten.
Beispiele: *&VAR1='Daten Zeile 1<BR>'
*&VAR2='Daten Zeile 2<BR>'
*RUN (URLOUT)DATA,'<BR>',&VAR1,&VAR2
*RUN (URLOUT)DATA,'FSTAT für Datei: '
*RUN (URLOUT)DATA,&FILE
*RUN (URLOUT)DATA,<BR>
*RUN (URLOUT)DATAFILE ,file
An den Internet-Browser wird der Inhalt der angegebenen Datei gesendet. Die Daten werden von EBCDIC nach ISO8859 konvertiert.
Die Datei muß Daten im HTML-Format enthalten oder vor der Anweisung *RUN (URLOUT)DATAFILE muß der HTML-Tag <PRE> ausgegeben werden oder es muß als Content-Type "text/plain" verwendet werden.
file Name der Datei, deren Inhalt ausgegeben werden soll. Der Name der Datei kann auch über eine CFS-Variable angegeben werden.
Beispiel: *RUN (URLOUT)DATAFILE,TESTHTML
*RUN (SYSOUT) [EXTEND] ,&sysout, &oldsysout
Diese Funktion bietet die Möglichkeit, in einer Prozedur SYSFILE SYSOUT auf eine neue Datei zuzuweisen und den Namen der bisherigen SYSOUT-Datei in einer CFS-Variablen zu speichern. Damit kann nach der Erstellung von SYSOUT-Daten wieder die bisherige SYSOUT-Datei zugewiesen werden.
EXTEND Die neu zugewiesene Sysout-Datei wird mit OPEN-MODE=*EXTEND geöffnet.
&sysout CFS-Variable, die den Namen der neuen Sysout-Datei enthält.
&oldsysout CFS-Variable, in die der Name der alten Sysout-Datei übertragen werden soll.
Beispiel: *&SYSOUT='#OUT'
*RUN (SYSOUT),&SYSOUT,&OLDSYSOUT
*/SHOW-FILE-ATTR &FILE,INF=*A
*RUN (SYSOUT)EXTEND,&OLDSYSOUT,&SYSOUT
*RUN (URLOUT)DATAFILE,&SYSOUT
*RUN (WRITECON)&var
Die Routine WRITECON gibt den Inhalt von &var an der Console aus (TYPE).
Allgemeines Aufrufformat für Run-Module
*RUN (modul [, bibl] ) [param,] [&var1, &var2, ... ]
Die Anweisung *RUN ruft ein benutzereigenes Unterprogramm auf.
modul Name des Benutzermoduls in der CFSLIB.
(modul,bibl) Der Benutzermodul ist in der angegebenen Bibliothek gespeichert.
param Parameterangabe zur Auswertung durch den Benutzermodul.
&var1 Name der ersten, an die Prozedur übergebenen CFS-Prozedurvariablen.
Falls die Variable noch nicht existiert, wird sie von CFS als Leervariable neu angelegt. Das Benutzermodul hat Zugriff auf die Prozedurvariable und kann auch ihren Inhalt verändern.
Programmschnittstelle für benutzereigene Run-Module
Beim Aufruf eines Run-Moduls zeigt das Mehrzweckregister R1 auf eine Parameterleiste mit folgender Struktur:
DC A(param) Steuerungsparameter (siehe oben) bzw. Blank, falls param beim Aufruf des Benutzermoduls nicht angegeben wurde.
DC A(varlist) varlist: DC A(var1)
DC A(var2)
.....
DC A(var-x)
DC A(0) Endekennzeichen
Eine CFS-Prozedurvariable var-x ist eine Datenstruktur mit folgendem Aufbau:
DC CL20'var-name' Name der Prozedurvariablen
DC XL80'00' Wert der Prozedurvariablen (anfangs X'00')
Als Wert der Prozedurvariablen wird die Zeichenfolge vom Beginn bis zum ersten Zeichen X'00' angesehen. Eine noch nicht initialisierte Prozedurvariable (XL80'00') besitzt somit als Wert den Leerstring ''.
Über Prozedurvariable ist eine Kommunikation in der Art CFS-Prozedur --> Benutzermodul --> CFS-Prozedur möglich.
Der Inhalt des Mehrzweckregisters R15 wird nach dem Rücksprung aus dem Benutzermodul nach CFS nicht ausgewertet.
Nächste Maske/WRTRD-Nachricht am Bildschirm ausgeben
*SCRUPD Screen-Update. Während des Ablaufs von CFS-Prozeduren wird die Anzeige von WRTRD-Nachrichten zur Anforderung der nächsten Eingabe unterdrückt. Es werden z.B. die CFS-Masken, in denen der Benutzer im Dialog seine Eingaben tätigt, nicht ausgegeben. Mit der Anweisung *SCRUPD wird diese Unterdrückung der Maskenausgabe für die nächste WRTRD-Nachricht ausgeschaltet. *SCRUPD bewirkt, daß die Nachricht (Maske) zur Anforderung der nächsten Eingabe mit WROUT am Bildschirm ausgegeben wird. *SCRUPD vor einer *002-Anweisung ist unzulässig.
Die Anweisung *SCRUPD kann z.B. genutzt werden, wenn in CFS-Prozeduren Kommandos vor ihrer Ausführung vom Benutzer abgeändert werden können (Anweisung *STEP, siehe unten). Dem Benutzer wird durch Anzeige der Bildschirmmaske mitgeteilt, auf welche Datenobjekte das vorgeschlagene Kommando angewendet wird.
Senden einer Nachricht an $CONSOLE
*SEND 'text' Der in Hochkommas eingeschlossene Text wird an eine unter CFS eröffnete Connection zu $CONSOLE am eigenen Host gesendet. Der Text kann auch CFS-Prozedurvariable enthalten. Beispiel: *SEND '&TSN..N'
Für ein Anwendungsbeispiel für die *SEND-Anweisung siehe Seite 19-.
*SENDn 'text' Der in Hochkommas eingeschlossene Text wird an die unter CFS eröffnete Connection mit der Nummer n gesendet. Als Applikationen, an die der Text gesendet wird, sind $CONSOLE auf beliebigen Host-Rechnern sowie $VMCONS erlaubt.
Prozedurspezifische Steuerzeichen ändern
*SET [TAB=x] [, NOC=y] [, PAR=p] [, EM=Y|N] [, CASE=Y|N|X] [, PAR00D=Y|N] [, MODE=STD|ENTER]
Ändern von Steuerzeichen, die in der Prozedursprache von CFS eine besondere Funktion besitzen.
TAB Tabulatorzeichen (Standardwert: C'~')
NOC Beliebigkeitszeichen (Standardwert: C'|').
PAR Parameterzeichen für Variable in CFS-Prozeduren (Standardwert: C'&').
Weitere Informationen zu CFS-Prozedurvariablen finden Sie auf Seite 19-.
EM Behandlung von CFS-Kommandos.
EM=Y Im Prozedurmodus werden Kommandoeingaben mit der Endemarke abgeschlossen.
EM=N Im Prozedurmodus werden Kommandoeingaben wie im Dialog mit ENTER, d.h. ohne Endemarke gesendet. (Standard)
CASE Behandlung von Kleinbuchstaben bei Vergleichen mit der Anweisung *IF &var=...
CASE=Y Kleinbuchstaben werden beim Vergleich zweier Variablen bzw. einer Variablen mit einem konstanten Wert berücksichtigt.
CASE=N Kleinbuchstaben werden beim Vergleich zweier Variablen bzw. einer Variablen mit einem konstanten Wert nicht berücksichtigt, d.h. sie werden vor dem Vergleich in die entsprechenden Großbuchstaben umgewandelt. (Standard)
Im Falle von CASE=N ist bein Vergleich von Variablen folgendes zu beachten. Beispiel: &VAR1='1234 '
*IF &VAR1='1234'
führt zu einem negativen Vergleichsergebnis.
Bei CASE=X (s.u.) würde dieselbe IF-Anweisung zu einem positiven Vergleichsergebnis führen.
CASE=X wie CASE=N, jedoch werden auch die Zeichen X'00' in X'40' (Blank) umgewandelt. Damit kann beim Vergleich von Variablen der bis Ende 1996 gültige kompatible CFS-Modus hergestellt werden. Es ist in diesem Modus jedoch nicht möglich eine leere Variable von einer Variablen mit Blanks als Inhalt zu unterscheiden.
Beispiel: &VAR1=' ', &VAR2=''
*IF &VAR1 = '_' .... --> Ergebnis positiv
*IF &VAR2 = '_' .... --> Ergebnis positiv (nicht korrekt)
*IF &VAR1 = &VAR2 .. --> Ergebnis positiv (nicht korrekt)
Der kompatible Modus CASE=X kann auch über den Modul CFSMAIN für das Rechenzentrum voreingestellt werden.
PAR00D Behandlung von Nachrichten mit Auto-DUE Steuerzeichen in Prozeduren.
PAR00D=N Diese Einstellung ist nur für seltene Sonderfälle geeignet.
Beispiel: Automatische Steuerung von Programmen wie TELNET in CFS-Connections. Ein Anwendungsbeispiel finden Sie im Element J/TELNET in der ausgelieferten PLAM-Bibliothek CFS.USERLIB.BEISPIEL.
PAR00D=Y Standardwert. Dieser muß normalerweise nicht verändert werden.
MODE Steuerung des Verhaltens von CFS in Prozeduren.
MODE=ENTER Bei Hardcopy von Bildschirmmasken wird ein Verfahren gewählt, welches kompatibel ist zu dem wenn CFS im Enter aufgerufen wird. Diese Option garantiert besonders bei Hardcopy von UTM-Masken in ES-Connestions das gleiche Verhalten im Dialog und Enter.
MODE=STD Standardwert. Eine vorübergehende Umschaltung auf MODE=ENTER wird hiermit wieder zurückgesetzt.
Steuerzeichen in CFS-Prozeduren
Das Zeichen C'~' gilt per Voreinstellung als Tabulatorzeichen für die in einer Prozedur simulierte Eingabe einer CFS-Maske (Dateienliste/Display-Maske). Das Tabulatorzeichen bewirkt, daß die folgenden Zeichen im ersten Action-Feld (Eingabespalte 72) bzw. im nächsten Action-Feld/im Modify-Bereich weitergeführt werden.
Das Zeichen C'|' gilt als Beliebigkeitszeichen (Not Overwrite Character) für die in einer CFS-Prozedur simulierte Eingabe einer CFS-Maske (Dateienliste/Display-Maske). Das Beliebigkeitszeichen bewirkt, daß die entsprechende Stelle aus der im Prozedurmodus simulierten Bildschirmmaske für die Eingabe übernommen wird.
Bei der Erstellung von CFS-Prozeduren empfiehlt es sich, zu Beginn den Tabulator und das Beliebigkeitszeichen auf vom Benutzer selbst vorgegebene Zeichen zu legen. Falls die Zeichen '%' und '#' in den Daten der Prozedur nicht enthalten sind, wird mit der Anweisung *SET TAB=%,NOC=# das Zeichen für den Tabulator auf '%' und das Beliebigkeitszeichen auf '#' gesetzt.
Beispiel:
%%A##BBB
Annahme: CFS befindet sich im Modify-Modus. Die prozedurspezifischen Steuerzeichen wurden mit *SET TAB=%,NOC=# auf % bzw. # gesetzt.
Aufgrund der Prozedureingabe wird die erste Stelle des Modify-Bereichs mit dem Zeichen 'A' überschrieben ('%%' überspringt das Kommando und das Action-Code Feld der CFS-Maske). Die Stellen 2 und 3 des Modify-Bereichs werden nicht verändert (Übernahme der in der Maske stehenden Zeichen). Die Stellen 4 bis 6 werden mit dem Zeichen 'B' überschrieben.
Prozeßschalter verändern
*SETSW { ON | OFF } = (n1, ...)
Setzen oder Rücksetzen von Prozeßschaltern. Syntax analog /SETSW-Kommando des BS2000. In einer Anweisung ist nur SETSW ON oder SETSW OFF für ein bzw. mehrere Schalter möglich.
Verzweigung innerhalb der Prozedur
*SKIP .label Unbedingter Sprung zu der angegebenen Sprungmarke. Sprünge in Richtung Prozeduranfang (Rückwärtssprünge) sind ebenfalls möglich. Wird die Sprungmarke nicht gefunden, so wird der Ablauf der Prozedur beendet. Anstelle von .label kann auch eine Prozedurvariable angegeben werden, die das Sprungziel als Text enthält (*SKIP &var). Für ein Anwendungsbeispiel hierzu siehe Seite 19-.
Anstelle von SKIP kann auch GOTO angegeben werden.
Eingabevorschlag für Benutzer
*STEP text Der angegebene Text wird am Bildschirm ausgegeben und kann vom Benutzer verändert werden. Der so veränderte oder auch unverändert abgesendete Text wird als Eingabe an CFS weitergereicht. Wird der Eingabevorschlag mit der K1-Taste beantwortet, so wird das Kommando nicht ausgeführt und die weitere Abarbeitung der Prozedur beendet.
Anhalten der Prozedur bis Quittierung durch Benutzer
*STOP ['text'] Der in Hochkommas eingeschlossene Text wird am Bildschirm ausgegeben. Der Benutzer muß die Nachricht mit ENTER quittieren, bevor die Prozedur weiterläuft. Der Text kann bis zu 2040 Bytes lang sein und kann auch logische Steuerzeichen enthalten (Ausgabe im LINE-Mode). Falls kein Text angegeben wurde, so wird der Standardtext "PLEASE ACKNOWLEDGE" ausgegeben.
Inhalt von Prozedurvariablen anzeigen/in Datei sichern
*SV [&var] [, datei] [, E] [, NE]
&var Der Inhalt der Prozedurvariablen soll am Bildschirm angezeigt bzw. in eine Datei gesichert werden. Falls &var nicht angegeben ist, werden die Namen und Inhalte aller Prozedurvariablen ausgegeben bzw. in eine Datei geschrieben (s.u.).
datei Eine bestimmte bzw. alle in der Prozedur angelegten Variablen (*&var= ...) werden mit ihren aktuellen Werten in die angegebene Datei geschrieben und können damit in anderen Prozeduren wieder geladen werden (*LV-Anweisung).
Falls datei nicht angegeben ist, werden die Namen und Inhalte der Variablen am Bildschirm angezeigt. Das Komma vor dem Dateinamen kann weggelassen werden, falls &var nicht angegeben wurde.
E Die Datei wird im Extend-Modus eröffnet.
NE Not Empty. Es werden nur Variablen in die Datei geschrieben, die einen echten Inhalt besitzen und somit keine Leervariablen sind.
Die in der SV-Datei gespeicherten Sätze haben folgendes Format:
20 Byte Variablenname; 1 bis 80 Byte Variableninhalt. Der Variableninhalt kann (muß aber nicht) mit Nil-Zeichen (X'00') auf 80 Byte aufgefüllt sein.
Prozedurablauf für bestimmte Zeit anhalten
*WAIT [n] [, .label]
n Der Prozedurablauf wird für n Sekunden angehalten. Falls n nicht angegeben: unbegrenzte Wartezeit.
.label Nach Ablauf der Wartezeit erfolgt eine Verzweigung der Prozedur zum angegebenen Label (*SKIP .label).
Die in der Anweisung *WAIT angegebene Wartezeit kann vom Benutzer durch Betätigen der K2-Taste vorzeitig beendet werden. In diesem Fall wird keine Verzweigung zu einem evtl. angegebenen Sprungziel (.label) durchgeführt.
Ausgabe einer Nachricht an den Bildschirm
*WRITE ['text'|CLEAR] [, datei [,O|E|N] ]
Der in Hochkommas eingeschlossene Text wird am Bildschirm bzw. in eine Datei ausgegeben.
text Der Text kann feste Strings und CFS-Prozedurvariablen oder logische Steuerzeichen enthalten (WROUT-Ausgabe im LINE-Mode). Falls text nicht angegeben wurde, so gibt CFS eine Leerzeile aus.
Falls im Text der Inhalt von CFS-Prozedurvariablen ausgegeben werden soll, so ist zu beachten, daß Konstrukte von der Form &var(x,y), d.h. Variablen mit Offset und Längenangabe nicht erlaubt sind. Ggf. ist dazu eine Hilfsvariable zu definieren: *&hilf=&var(x,y). Diese Hilfsvariable kann im Write-Text verwendet werden.
CLEAR Es wird eine Ausgabe getätigt, die den Bildschirm löscht.
datei Name der Datei (Fcbtype=SAM), in die der Text geschrieben wird.
O Die Datei wird im Output-Modus eröffnet. Eine bestehende Datei gleichen Namens wird überschrieben. Die Datei wird nach dem Schreiben des Satzes geschlossen.
E Die Datei wird im Extend-Modus eröffnet. Der zu schreibende Text wird am Ende der Datei angefügt. Die Datei wird nach dem Schreiben des Satzes geschlossen.
N Die Datei wird im Extend-Modus eröffnet und bleibt nach dem Schreiben des Satzes weiterhin geöffnet. Mit diesem Schalter wird verhindert, daß die Datei bei jedem Schreiben eines Satzes um eine Pam-Seite anwächst.
Ausgabe einer Nachricht in die Systemzeile
*WRITESYS 'text' Der in Hochkommas eingeschlossene Text wird in der Systemzeile des Bildschirms ausgegeben.
Durch die Anweisung *WRITESYS '' kann der Ausgangszustand der Systemzeile ("LTG") wieder hergestellt werden.
Starten einer Prozedur
DO [N,] [ datei | element | bibl(element| %name | %?] [, param, ...]
Die angesprochene Prozedur enthält eine optionale PROC-Anweisung mit darin vereinbarten Prozedurparametern. Normalerweise wird beim Aufruf einer derartigen Prozedur zuerst die Parameter-Maske ausgegeben, in der die Prozedurparameter eingegeben werden können.
N Durch die Eingabe DO N,... wird die Ausgabe der Parameter-Maske unterbunden. Es werden die Prozedur-Parameter verwendet, so wie sie im DO-Kommando angegeben wurden (siehe unten), bzw. wie sie in der PROC-Anweisung vordefiniert sind.
datei Die CFS-Prozedur ist in der angegebenen Datei gespeichert.
element Die Prozedur ist in dem angegebenen Element der CFS.USERLIB bzw. in der zentralen USERLIB (siehe Hinweise) enthalten. In PLAM-Bibliotheken gespeicherte Prozeduren müssen den Elementtyp S (Source) besitzen.
bibl(element) Die Prozedur ist in dem Element der angegebenen Bibliothek enthalten.
%name Es wird auf einen Parameter-Set, d.h. auf den Namen einer Prozedur und auf eine bestimmte Parameterbelegung Bezug genommen, der zu einem früheren Zeitpunkt mit dem Kommando SP %name unter dem angegebenen Kürzel %name gesichert wurde. Eine ausführliche Beschreibung des SP-Kommandos und der Verwendung von %name finden Sie auf Seite 11-.
%? Es werden alle in Frage kommenden Parametersets in einer Maske angezeigt. Durch Ankreuzen kann einer der vorgeschlagenen Parametersets ausgewählt werden.
param Wahlweise Angabe von Werten für CFS-Prozedurvariable. Wie bei DO-Prozeduren im BS2000 können sowohl Stellungs-, als auch Schlüsselwortparameter angegeben werden. Von welcher Art ein Parameter ist, wird in der *PROC-Anweisung der Prozedur festgelegt. Parameter können nicht zusammen mit %name angegeben werden.
Stellungsparameter: Es ist lediglich der Wert des gewünschten Parameters anzugeben. Bei Stellungsparametern ist auf deren richtige Reihenfolge zu achten. Soll z.B. nur der zweite Stellungsparameter mit einem Wert versorgt werden, so ist ein zusätzliches Komma bei der Parameterangabe einzufügen: DO prozedur,,wert.
Schlüsselwortparameter: Es ist der Name des Parameters, gefolgt von einem = Zeichen und dem gewünschten Parameterwert anzugeben. Der Name des Parameters und sein Standardwert können in der *PROC-Anweisung der Prozedur festgelegt werden.
Hinweise:
Das Kommando DO wird von CFS in folgender Weise abgearbeitet:
Falls bibl(element) bzw. %name angegeben wurde, so ist dadurch die auszuführende CFS-Prozedur eindeutig bestimmt. In allen anderen Fällen wird gemäß der folgenden Hierarchie nach der Prozedur gesucht:
a) CFS sucht in der zugewiesenen Userlib (Standard: CFS.USERLIB) nach einem Element mit dem angegebenen Namen.
b) Es wird in der zentralen USERLIB nach einem Element mit dem angegebenen Namen gesucht. Die zentrale USERLIB kann mit /FILE ...,LINK=USERLIB zugewiesen werden oder wird als Bibliothek mit dem Namen $user-id.CFS.USERLIB. STD gesucht. $user-id = Benutzerkennung in der die Programmphase CFS gespeichert ist.
c) Es wird eine Datei mit der angegebenen Bezeichnung gesucht.
Wenn a), b) und c) nicht zu einem Erfolg geführt haben, wird eine Fehlermeldung ausgegeben. Zum Verändern der Standard CFS-Userlib siehe Kommando UL, Seite 18-.
Wird das DO-Kommando ohne irgendwelche Zusätze angegeben, so wird die zuletzt verwendete Prozedur wieder aufgerufen.
Enthält ein Parameterwert Leerzeichen (Blanks) oder bestimmte Sonderzeichen, wie z.B. Hochkommas, so ist der Parameterwert in Hochkommas einzuschließen.
Enthält ein Parameterwert Hochkommas, so müssen diese verdoppelt werden.
Falls die angesprochene Prozedur keine *PROC-Anweisung enthält, so ist kein maskengesteuertes Prompting der Prozedurparameter möglich. Die Prozedur kann nicht über %name angesprochen werden.
Falls beim Aufruf einer Prozedur ohne *PROC-Anweisung Stellungsparameter angegeben wurden, so können diese innerhalb der Prozedur nur über die Namen &1 (erster Stellungsparameter), &2 (zweiter Stellungsparameter), usw. angesprochen werden.
Testen von Prozeduren
Falls eine Prozedur nicht in der Art und Weise abläuft, wie der Benutzer es erwartet, so sind zwei verschiedene Arten der Ablaufverfolgung möglich.
a) Einschalten der Protokollierung aller in der Prozedur ausgeführten Anweisungen durch Einfügen der Anweisung *PROC A als erste Zeile in der Prozedur. PROC A protokolliert am Bildschirm alle CFS Prozeduranweisungen, sowie alle an CFS zu übergebenden Datensätze. Werden in einer Anweisung bzw. in einem Datensatz Variable verwendet, so wird der entsprechende Datensatz / die Prozeduranweisung vor und nach der Variablensubstitution am Bildschirm angezeigt.
b) Einschalten des Hardcopy-Modus durch das Kommando HC datei,O. datei ist der Name der zu verwendenden Hardcopy-Datei. Anhand der Hardcopy-Datei kann der Ersteller einer Prozedur die Folge der an CFS übergebenen Kommandos nachvollziehen und deren Korrektheit überprüfen.
Hinweise zu Prozeduren
Ist der SYSDTA-Eingabesatz kürzer als die erwartete Maskeneingabe, so verhält sich CFS so, als ob die Eingabe am Ende mit < (Endemarke) abgeschlossen worden wäre.
Bei Eingabe von Kommandos über SYSDTA werden die Ausgabeteile der Bildschirmmasken mit WROUT ausgegeben. Dies kann durch /SETSW ON=4 verhindert werden (reduziertes Ausgabevolumen).
Rückkehr in die Grundebene von CFS nach Eröffnung von Connections:
Im prozedurgesteuerten Modus von CFS kann die K2-Taste nicht simuliert werden. Eine Möglichkeit, ohne K2-Taste aus einer Connection in den CFS-Basisprozeß zu gelangen, besteht in der Verwendung des Fluchtsymbols ^.
Beispiel:
OC1/LOGON user-id1,acct1,C'passw1'
^
OC2/LOGON user-id2,acct2,C'passw2'
^
Wird an irgendeiner Stelle in einem Datensatz einer CFS-Prozedur das Konstrukt &(name) angegeben, so wird dieses vom CFS-Eingabeprozessor durch den momentanen Inhalt der Job-/SDF-P Variablen ersetzt. Hierbei kann für name auch eine CFS-Variable angegeben werden Die CFS-Variable muß als Wert den Namen der gewünschten Jobvariablen enthalten: &(&CFSVAR) .
Auf diese Weise ist es z.B. möglich, beim automatischen Eröffnen von Connections zu $DIALOG im LOGON-Kommando das Passwort durch den aktuellen Inhalt einer Variablen zu versorgen.
Beispiel:
OC1/LOGON user-id1,acct1,&($TSOS.TAGESPASSW)
^
In diesem Beispiel enthält die Jobvariable $TSOS.TAGESPASSW als Wert eine Zeichenfolge von der Art C'....' bzw. X'....'.
BS2000-Kommandos, die prozedurgesteuert in einer durch OC eröffneten Connection abgesetzt werden, sollten nicht mit einem Schrägstrich beginnen.
Beispiel:
 /STA L
OC1/LOGON user-id,acct-nr,C'passw'
EXEC programm
BS2000-Kommandos müssen mit einem führenden Blank angegeben werden. Anderenfalls würde die End-of-File Bedingung für SYSDTA wirksam werden. Dies gilt jedoch nur, falls CFS in einer BS2000 DO-Prozedur aufgerufen wird.
Beispiele für Prozeduren
Mit der im folgenden dargestellten Prozedur (gespeichert im Element L in der CFS.USERLIB) kann der Benutzer bestimmte, am Bildschirm aufgeführte Dateien/Bibliothekselemente mit dem Action-Code X ankreuzen. Die angekreuzten Datenobjekte werden nach Eingabe des Kommandos A (Ausführen) mit der Variablen Action ONXLIST formatiert in eine druckaufbereitete Liste geschrieben und ausgedruckt. Die CFS-Prozedur wird aufgerufen durch DO L bzw. DO L,datei. Im letzteren Fall wird der erste Stellungsparameter automatisch der Prozedurvariablen &1 zugewiesen.
*IF &1 = '' &1 = '#LIST.FRANZ'
*SET TAB=%
ONXLIST &1
*WRITESYS 'Ankreizln, wBS2000 ausdruckt ham willst'
*ON %TERM CONTINUE
*DIA
U
NPFSTAT &1
%PD7S
* Ausdruck der erzeugten Liste am Stationsdrucker 7 mit Space=E (PD7S)
U
* selektierte Liste wieder anzeigen.
RL
Die folgende Prozedur prüft, ob in CFS bereits eine Connection zu der UTM-Anwendung TEST eröffnet ist. Ist dies der Fall, so wird in diese Connection verzweigt. Ansonsten ermittelt die Prozedur die nächste freie Connection, stellt die Verbindung zu TEST her und setzt ein KDCSIGN Kommando ab.
*&N=0
.LOOP
*&XX='CON'&N
*IF &&XX = 'TEST' SKIP .CC
*&N=&N+1
*IF &N<10 SKIP .LOOP
*IF &NEXTCON = '' SKIP .NOFREECONN
OC&NEXTCON TEST,CFS1
KDCSIGN ......
*SKIP .ENDE
*
.NOFREECONN
*WRITESYS 'Alle Connections belegt. Anwendung TEST kann nicht eröffnet werden'
*SKIP .ENDE
*
.CC
CC&N
*
.ENDE
In der folgenden BS2000 DO-Prozedur wird in allen Elementen vom Typ J (Job-Control) in einer PLAM-Bibliothek nach dem Vorkommen des Strings '12132716' (LOGON-Paßwort einer Benutzerkennung) gesucht. Die Treffersätze werden in eine gesonderte SAM-Datei geschrieben. In einem folgenden Schritt wird die Trefferdatei mit EDT in der Weise bearbeitet, daß alle Strings '12132716' in '884310' umgewandelt werden. Über das REWRITE-Kommando von CFS werden die ursprünglichen Bibliothekselemente mit dem neuen Inhalt aktualisiert.
/PROC C,(&BIBL=LMS.PROC,&PSWALT='12132716',&PSWNEU='884310'),SUBDTA=&
/SYSFILE SYSDTA=(SYSCMD)
/SETSW ON=(1,4)
/EXEC CFS
*002 FILE=LMS &BIBL;FCB=J;VAR=ON&FIND'&PSWALT'=W #TREFFER
AU
NQR
EDT,#TREFFER
ON&:2-2:FIND'*'COPY TO (1) KEEP
ON&CA'&PSWALT'T'&PSWNEU'
COPY &(1)
WRITE O
HALT
REWR #TREFFER
END
/SETSW OFF=(1,4)
/ENDP
Die nachfolgend beschriebene DO-Prozedur realisiert eine Konsole, die die folgenden Funktionen ausführt:
1) Systemdumps werden automatisch mit tsn.Y beantwortet.
2) Über das Kommando /TYPE CFSCON:/cmd bzw. /TYPE CFSCON:tsn.xxxx können von Benutzertasks, die unter den Kennungen TSOS oder TT08 angeloggt sind, beliebige Konsoleingaben getätigt werden.
3) Die DO-Prozedur wird durch Eingabe des Kommandos /TYPE TERMINATE CONSOLE beendet.
/PROC N
/SYSFILE SYSDTA=(SYSCMD)
/SETSW ON=(1,4)
/EXEC $CFS.CFS
*002 FILE=NO
OC9$CONSOLE,,,R
xxxxx,C'sssss'
*&STAM='Y'
*ON %OUT=($CFS.CFS.PROCLIB(X/SRCITEM)) RESUME
CC9/STA MSG nachschauen, ob Anfragen ausstehen
*SKIP .SETTSN
.LOOP
*IF &STAM='N' SKIP .ONOUT
*SEND '/STA MSG'
.ONOUT
*ON %OUT letzte *ON %OUT-Bedingung aktivieren
.SETTSN
*&TEXT=%PTR(1,80) Meldungstext merken
*WRITE '&TEXT' Meldungstext ausgeben
*&TASK=%PTR(1,4)
*SKIP &SLABEL
.NOMSG
*&STAM='N'
*SKIP .LOOP
.SYSDUMP
*WRITE '--------> &TASK..Y'
*SEND '&TASK..Y'
*SKIP .LOOP
.CFSCONSOLE
*IF %OUT=:1:'%' &TASK=%PTR(1,4)
*&VAR='USER-ID('&TASK.')'
*IF &&VAR='TSOS' SKIP .ALLOW-CONSINPUT
*IF &&VAR='TT08' SKIP .ALLOW-CONSINPUT
*WRITE '/MESS TSN=&TASK,USER-ID &&VAR. NICHT ZUR KONSOLEINGABE BERECHTIGT'
*SEND '/MESS TSN=&TASK,USER-ID &&VAR. NICHT ZUR KONSOLEINGABE BERECHTIGT'
*SKIP .LOOP
.ALLOW-CONSINPUT
*&TEXT2=&TEXT(1,50)
*WRITE 'KOMMANDO AUSGEFUEHRT: &TEXT2'
*SEND '&TEXT'
*SEND '/MESS TSN=&TASK,KOMMANDO AUSGEFUEHRT: &TEXT2'
*SKIP .LOOP
.EXIT
*ON %TIME=0 RETURN Rückkehr in das Kommandofeld von CFS
DC9
END CFS beenden
/SETSW OFF=(1,4)
/ENDP
Die Bedingungen, auf welche Konsolmeldungen reagiert werden soll, sind in dem Element X/SRC ITEM der PLAM-Bibliothek $CFS.CFS.PROCLIB gespeichert. In unserem Beispiel hat das Element den folgenden Inhalt:
'SYSTEMDUMP DESIRED'+:1-20:'?' .SYSDUMP
'CFSCON:' .CFSCONSOLE
'NO MESSAGE OUTSTANDING ON THE CONSOLE' .NOMSG
'TERMINATE CFSCONSOLE' .EXIT