*RUN 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.