Kapitel 3 - SyntaxbeschreibungKapitel 3 - Syntaxbeschreibung 197 Bevor wir uns mit der Syntax der...

152
195 Kapitel 3 - Syntaxbeschreibung So geht's

Transcript of Kapitel 3 - SyntaxbeschreibungKapitel 3 - Syntaxbeschreibung 197 Bevor wir uns mit der Syntax der...

  • Kapitel 3 - Syntaxbeschreibung 195

    Kapitel 3 - Syntaxbeschreibung

    Sogeht's

  • REXX unter MVS-TSO/E196

  • Kapitel 3 - Syntaxbeschreibung 197

    Bevor wir uns mit der Syntax der Befehle und Funktionen auseinandersetzen, möchteich anhand einiger Beispiele eine kleine Lesehilfe für die Syntaxbeschreibung liefern.Grundsätzlich kann bei der Interpretation der syntaktischen Möglichkeiten immer demLinienverlauf gefolgt werden. Sehen wir uns zu den verschiedenen Variationen je einBeispiel an:

    befehl

    Ein Befehl wird ohne Parameter kodiert.

    befehl zwingender parameter

    An einen Befehl geknüpft muß ein Parameter zwingend angegeben werden.

    befehl einer dieser Parameter muß angegeben werdeneiner dieser Parameter muß angegeben werdeneiner dieser Parameter muß angegeben werden

    Unter mehreren möglichen Parametern muß einer zwingend angegeben werden.

    befehleiner dieser Parameter kann angegeben werdeneiner dieser Parameter kann angegeben werden

    Unter mehreren möglichen Parametern kann einer wahlfrei angegeben werden.

    befehl dieser Parameter kann wiederholt werden

    Die wiederholte Angabe eines Parameters ist möglich.

    Leseh

    ilfe für S

    yntaxd

    iagram

    me

    Lesehilfe für Syntaxdiagramme

  • REXX unter MVS-TSO/E198

    Wie diese Regel in einem komplexeren Diagramm ausgelegt wird, soll das nachfol-gende Beispiel verdeutlichen:

    befehlkann_1

    kann_1.1kann_1.2

    kann_2kann_3kann_4 kann/muß_4.3

    kann_4.1kann_4.2

    kann_5 kann_5.1.mehrmals

    Unter mehreren möglichen Parametern kann zunächst einer ausgewählt werden. Ne-ben Parameter2 oder 3 kann keine weitere Angabe erfolgen. Hinter Parameter1 kanneiner von zwei möglichen Subparametern angegeben werden. Die Angabe des Sub-parameters ist aber nicht zwingend. Wird Parameter4 kodiert, ist die Angabe eines derbeiden Unterparameter (4.1 oder 4.2) möglich. Gleichgültig, ob einer der beiden Un-terparameter angegeben wurde oder nicht, die Angabe des Parameters 4.3 ist zwin-gend. Wird der fünfte Parameter kodiert, ist ein Subparameter mit anzugeben. DerSubparameter kann beliebig oft wiederholt werden.

    Darüber hinaus gilt innerhalb der Diagramme folgende Regelung:

    GROSSBUCHSTABEN ➪ sind als feste Bestandteile des Befehles unverändert zuübernehmen

    kleinbuchstaben ➪ haben eine Stellvertreterfunktion und sind durch entspre-chende Werte zu ersetzen

    Klammern() ➪ sind als feste Bestandteile des Befehles zu kodieren

    UNTERSTRICHENES ➪ stellt einen Defaultwert dar, der angenommen wird, wennkeine Parameterangabe erfolgt

    Lesehilfe für Syntaxdiagramme

    Les

    ehilf

    e fü

    r S

    ynta

    xdia

    gra

    mm

    e

  • Kapitel 3 - Syntaxbeschreibung 199Liebe Leser....

    ABBREV ()

    ABBREV(string1,string2 ),länge

    Übergibt eine 1, wenn string2 identisch mit dem Beginn von string1 ist und die Längevon string2 nicht größer der angegebenen Länge ist. Wird diese Bedingung nichterfüllt, erfolgt die Rückmeldung von 0.

    string1

    Zeichenfolge, die geprüft werden soll.

    string2

    Zeichenfolge, die als Grundlage für die Prüfung eingesetzt wird.

    länge

    Maximale inhaltliche Länge, die bei der Püfung von string2 berücksichtigt wird.

    Beispiele:

    SAY ABBREV('Print','Pri') 1SAY ABBREV('PRINT','Pri') 0SAY ABBREV('PRINT','P',1) 1

    /**REXX*****************************/PARSE UPPER ARG TEST .IF ABBREV(TEST,'T',1) THEN TRACE '?R'

    RE

    XX

    -Fu

    nktio

    n

  • REXX unter MVS-TSO/E200

    ABS ()

    ABS(zahl)

    Übergibt den absoluten Wert einer Zahl ohne Rücksicht auf das Vorzeichen.

    zahl

    Die Zahl, deren absoluter Wert übergeben werden soll.

    Beispiele:

    SAY ABS('5.95') 5.95SAY ABS('-6.04') 6.04R

    EX

    X-F

    un

    ktio

    n

  • Kapitel 3 - Syntaxbeschreibung 201

    ADDRESS

    ADDRESSumgebung

    ausdruckausdruck1

    wert

    Mit ADDRESS wird die Systemumgebung benannt, an die ein Befehl zu übergebenist. Unter TSO/E REXX sind folgende Umgebungen durch den ADDRESS-Befehlerreichbar:

    ATTACH LINK TSO

    ISPEXEC MVS

    ISREDIT NERVIEW

    Die aktuelle Zuordnung kann durch die Built-in-Funktion ADDRESS() ermittelt wer-den.

    Um einen Befehl an die entsprechende Systemumgebung zu übergeben, wird derName der Umgebung und der entsprechende Befehl angegeben. Nach Ausführungwird in die aktuelle Systemumgebung zurückgekehrt, wie immer sie heißt. Wird nureine Systemumgebung angegeben, erfolgt eine Umschaltung dorthin. Sie bleibt er-halten, bis eine neue Umschaltung durchgeführt wird.

    Beispiele:

    ADDRESS ISPEXEC "DISPLAY PANEL(PANEL1)"

    ADDRESS ISPEXEC"EDIT DATASET("varname")""DISPLAY PANEL(name)"IF RC = 0 ATHEN ADDRESS TSO "DEL '"datei"'""TBOPEN...

    RE

    XX

    -Instru

    ktion

  • REXX unter MVS-TSO/E202

    ADDRESS ()

    ADDRESS()

    Meldet den Namen der Systemumgebung, innerhalb der die Abarbeitung der Befehledurchgeführt wird.

    Beispiele:

    SAY ADDRESS() 'TSO' /* möglich */SAY ADDRESS() 'MVS' /* möglich */SAY ADDRESS() 'ISPEXEC' /* möglich */R

    EX

    X-F

    un

    ktio

    n

  • Kapitel 3 - Syntaxbeschreibung 203

    "ALLOC DA(dateiname) "FI(ddname)

    OLDSHR

    REUSENEWMOD

    UNIT(unit)VOLUME(vol)SPACE(prim sec)TRACKSCYLINDERSDIR(dirblk)USING(attrib-name)LIKE(dateiname)DUMMYSYSOUT(okl)

    DEST(prt-name)COPIES(ausgaben)

    BLKSIZE(blk)LRECL(länge)RECFM(format)DSORG(dsorg)

    Über ALLOCATE können Dateien erstellt und/oder mit ihrem symbolischen Namen indie Dateizuweisungstabelle eingetragen werden. Jede Datei, die durch EXECIO ver-arbeitet werden soll, muß vorher zugewiesen werden.

    DA(dateiname)

    Benennt die Datei, die unter einem symbolischen Namen zugeordnet werden soll.Sollen mehrere Dateien unter einem symbolischen Namen verkettet werden (DATA-SET-CONCATINATION), können sie der Reihe nach innerhalb der Klammern ange-geben werden. Dabei werden die Zugriffe entsprechend der Schreibweise von linksnach rechts durchgeführt. Bei Dateiverkettung ist darauf zu achten, daß die Datei mitder größten Blockgröße als erste genannt wird. Wird an Stelle eines DateinamensStern(*) angegeben, wird für den symbolischen Namen das Terminal zugeordnet.

    ALLOC

    TS

    O-B

    efehl

  • REXX unter MVS-TSO/E204

    ALLOC

    DD(ddname)

    Symbolischer Name, der in einem Programm oder einer Prozedur benutzt wird. AnStelle von FI ist auch DD möglich.

    OLD

    Die Datei ist bereits vorhanden und wird für die Dauer der Verarbeitung exklusivbelegt.

    SHR

    Die Datei ist bereits vorhanden. Während der Verarbeitung können auch andere Be-nutzer auf diese Datei zugreifen.

    REUSE

    Erlaubt die Benutzung eines symbolischen Namens, auch wenn es unter diesemNamen bereits einen Eintrag in der Zuweisungstabelle gibt. Eine Zuordnung mit An-gabe REUSE sollte nur in Verbindung mit Disposition SHR erfolgen. Eine Datei kannnicht mit REUSE zugeordnet werden, wenn sie bereits durch Disposition OLD zuge-ordnet war. In diesem Fall muß vor einer Zuordnung das FREE-Kommando abge-setzt werden.

    NEW

    Die Datei wird eingerichtet. NEW beinhaltet das Katalogisieren.

    MOD

    Zunächst wird bei MOD geprüft, ob die entsprechende Datei vorhanden ist oder nicht.Ist sie vorhanden, wird die existente benutzt, ist sie nicht vorhanden, wird sie ange-legt. Wird mit Disposition MOD in eine Datei geschrieben, wird der Inhalt der Dateinicht zerstört. Die Datensätze werden an das Ende der Datei angefügt (Dateifort-schreibung). MOD darf nicht für Mitglieder von PO-Dateien verwendet werden.

    UNIT(unit)

    Beschreibt die Gerätegruppe, auf der eine Datei erstellt werden soll. Im TSO wird imallgemeinen SYSDA (für Magnetplatte allgemein) benutzt. Diese Angabe sollte aberimmer in Verbindung mit dem Operanden VOLUME() kodiert werden. Auf UNIT kannbei Neuanlage einer Datei verzichtet werden, wenn die Platzverwaltung über SMSerfolgt.

    TS

    O-B

    efeh

    l

  • Kapitel 3 - Syntaxbeschreibung 205

    ALLOC

    VOLUME(vol)

    Enthält den Namen des Datenträgers, auf dem eine Datei erstellt werden soll. Nurzwingend bei Neuanlage einer Datei, wenn die Platzverwaltung nicht über SMS gere-gelt wird.

    SPACE(prim sec)

    Legt die Menge der Primär- und gegebenenfalls der Sekundärzuweisung fest.

    TRACKS oder CYLINDERS

    Nimmt Bezug auf die Größenangaben im SPACE-Operanden.

    DIR(dirblk)

    Definiert die Anzahl der DIRECTORY-Blöcke, wenn bei Neuanlage eine PO-Dateierstellt werden soll. Jeder DIR-Block ist 256 Byte lang (unabhängig von der Satzlän-ge der Datei) und kann verwaltungstechnische Informationen für etwa 5 bis 6 Mit-gliedseinträge inclusive Statistiken aufnehmen.

    LIKE(dateiname)

    Übernimmt alle Dateiattribute der angegebenen Datei.

    DUMMY

    NOP-Anweisung (Null-OPeration).

    SYSOUT(okl)

    Beschreibung einer Druckausgabedatei (SPOOLOUT). Die Druckausgabeklasse mußangegeben werden (A-Z und 0-9).

    DEST(prt-name)

    Benennt den Remotedrucker, auf den die Druckausgabe geleitet werden soll.

    COPIES(ausgaben)

    Anzahl der Gesamt-Druckausgaben.

    TS

    O-B

    efehl

  • REXX unter MVS-TSO/E206

    ALLOC

    BLKSIZE(blk)

    Liefert die Blockgröße der Datei. Der Parameter ist nur zwingend, wenn eine Dateineu angelegt werden soll.

    LRECL(länge)

    Regelt die Satzlänge. Nur bindend bei Neuanlage der Datei.

    RECFM(format)

    Steuert das Satzformat. Mögliche Angaben sind: F(ix), V(ariabel), B(locked) undM(achine-Code) oder A(nsi-Code). Die Angaben können gemixt werden, sind dannaber durch BLANK voneinander zu trennen. Bei M oder A wird das erste Byte desSatzes nicht als Dateninformation sondern als Drucksteuerzeichen interpretiert. Diegängigsten Werte sind BLANK (1 Zeile Vorschub), 0(2 Zeilen Vorschub), -(3 ZeilenVorschub), +(kein Zeilentransport) und 1(Vorschub auf Seitenanfang).

    DSORG(dsorg)

    Bestimmt die Dateiorganisationsform bei Neuanlage. Mögliche Werte sind PS oderPO.

    Beispiele:

    "ALLOC DD(EIN) DA(MVS.DATA(ADR1)) SHR REUSE"

    Das Mitglied ADR1 der Datei userid.MVS.DATA wird unter dem symbolischen Na-men EIN in die Zuweisungstabelle eingetragen. Existiert unter diesem Symbol be-reits ein Eintrag, wird er überschrieben.

    "ALLOC DD(AUS) DA(SEQ.TEST) NEW SPACE(5) TRACKS LIKE(S1.DAT)"

    Die Datei userid.SEQ.TEST wird erstellt und katalogisiert. Die Größe der Datei wirdauf 5 Spuren begrenzt, eine Erweiterung kann nicht durchgeführt werden. Die DCB-Angaben werden von der Datei userid.S1.DAT übernommen.

    TS

    O-B

    efeh

    l

  • Kapitel 3 - Syntaxbeschreibung 207

    ARG( )zahl

    ,option

    Übergibt eine Folge von Parametern oder Informationen über Parameter entspre-chend der angegebenen Option. Wird kein Parameter in der ARG-Funktion angege-ben, wird die Anzahl der übergebenen Parameter gemeldet.

    zahl

    Wird eine Zahl angegeben, wird der betreffende Parameter gelistet. Existiert das Ar-gument nicht, wird ein Nullstring rückgemeldet.

    option

    Wird eine Option angegeben, prüft die ARG-Funktion das Vorhandensein eines Ar-gumentes. Bei E(xists) wird eine 1 bei Vorhandensein bzw. eine 0 bei Nichtvorhan-densein des Argumentes gemeldet. Durch die Option O(mitted) wird eine 1 bei Nicht-vorhandensein, eine 0 bei Vorhandensein des Argumentes gemeldet.

    Beispiele:

    Angenommen: %DEMO1 (Keine Parameterangaben)

    SAY ARG() 0SAY ARG(1) ' 'SAY ARG(2) ' 'SAY ARG(1,'E') 0SAY ARG(2,'O') 1

    Angenommen: %DEMO1 'a',,'b'

    SAY ARG() 3SAY ARG(1) 'a'SAY ARG(2) ' 'SAY ARG(3) 'b'SAY ARG(4) ' 'SAY ARG(1,'E') 1SAY ARG(2,'e') 0SAY ARG(2,'o') 1SAY ARG(3,'O') 0SAY ARG(4,'O') 1

    ARG()

    RE

    XX

    -Fu

    nktio

    n

  • REXX unter MVS-TSO/E208

    ATTRIB

    ATTR name BLKSIZE(blk) "LRECL(sl)

    ,RECFM( V )

    FBMA

    DSORG( DA )PSPOEXPDT(jjttt)RETPD(tt)

    ATTRIB legt unter einem Namen eine Reihe von Aussagen hinsichtlich einer Dateiab. Auf diese Dateiattribute kann unter 'Angabe des Namens im ALLOC-Befehl Be-zug genommen werden.

    name

    Name, unter dem die folgenden Aussagen hinterlegt werden.

    BKLSIZE(blk)

    Legt die Blocklänge fest.

    LRECL(sl)

    Bestimmt die Satzlänge.

    RECFM(..)

    Liefert das Satzformat. Möglich sind unter anderem V(ariabel), F(ix), B(locked),M(achine-Code) oder A(nsi-Code). M und A führen im ersten Byte des DatensatzesSteuerzeichen für Drucker (siehe ALLOC).

    TS

    O-B

    efeh

    l

  • Kapitel 3 - Syntaxbeschreibung 209

    ATTRIB

    DSORG(..)

    Bestimmt die Datei-Organisationsform. Dabei steht DA für Direct Access, PS für Phy-sical Sequential und PO für Partitioned Organized.

    EXPDT(jjttt)

    Verfalldatum einer Datei im Julianischen Format. Der Parameter wird auch häufig imZusammenhang mit dem Bandverwaltungssystem CA-1 genutzt. Hier haben drei be-stimmte Angaben andere Aussagekraft:

    EXPDT(98000) Band liegt außerhalb des CA-1-Kataloges

    EXPDT(99000) Sperrfristen über Systemkatalog geregelt (bei GDGs)

    EXPDT(99365) permanente Sicherung

    RETPD(tt)

    Anzahl Sicherungstage. Das System errechnet das Verfalldatum einer Datei (dasaktuelle Systemdatum zugrunde gelegt + Anzahl Tage).

    Beispiel:

    :"ATTR DCB1 RECFM(F,B) LRECL(80) BLKSIZE(3120) DSORG(PO)""ATTR DCB2 RECFM(F,B) LRECL(132) BLKSIZE(15444) DSORG(PS)""ALLOC DD(..) da(..) NEW SPACE(..) BLOCKS USING DCB1""ALLOC DD(..) da(..) NEW SPACE(..) BLOCKS USING DCB1""ALLOC DD(..) da(..) NEW SPACE(..) BLOCKS USING DCB2":

    Werden in einer Verarbeitung mehrere Dateien erzeugt, bei denen sich die Dateiattri-bute nicht allzusehr unterscheiden, können einige Attribute, unter einem Namen zu-sammengefaßt, hinterlegt werden. Wo immer man eine Datei mit den entsprechen-den Attributen einrichten will, kann man sich auf den Namen der entsprechendenAttributsdefinition beziehen.

    Returncodes

    0 ➪ Normales Ende.12 ➪ Attribut konnte nicht definiert werden.

    TS

    O-B

    efehl

  • REXX unter MVS-TSO/E210

    CALL name,

    ausdruck

    Durch die CALL-Instruktion kann eine EXEC aus einer EXEC heraus aufgerufen wer-den. Es spielt dabei keine Rolle, ob es sich hierbei um eine interne Prozedur (sog.Subroutine) oder eine externe Prozedur (Member einer PO-Datei) handelt.

    Unterschiede ergeben sich nur aus den Übergabe-Übernahmemöglichkeiten von Va-riablen. Im Falle einer Subroutine sind Variablen mit ihren aktuellen Werten sowohl inder Hauptprozedur als auch in der Subroutine immer bekannt.

    Wird ein externes REXX-Programm aufgerufen, müssen Variablen in beide Richtun-gen übergeben und empfangen werden (siehe auch RETURN und RESULT).

    ausdruck

    Übergabewert. Kann in Form von Literalen oder Variablen kodiert werden.

    Beispiel:

    /* REXX ***********************************/SAY "Zahl zwischen 1 und 5"PULL zahlCALL CHECK zahlEXITCHECK:IF zahl >= 1 & zahl

  • Kapitel 3 - Syntaxbeschreibung 211

    "CALL ladebibliothek(mitglied)"

    Aufruf eines Lademodules. Das Programm ist unter dem angegebenen Namen Mit-glied der angegebenen PO-Datei.

    Beispiel Lademodulaufruf aus einer Prozedur:

    /* REXX * GENER */clearsay "Eingabedatei?"pull einsay "Druckausgabeklasse?"pull okl"ALLOC DD(SYSUT1) DA("ein") SHR REUSE""ALLOC DD(SYSUT2) SYSOUT("okl")""ALLOC DD(SYSIN) DUMMY""ALLOC DD(SYSPRINT) DUMMY""CALL 'SYS1.LINKLIB(IEBGENER)'""FREE FI(SYSUT1 SYSUT2 SYSIN SYSPRINT)"EXIT

    CALL

    TS

    O-B

    efehl

  • REXX unter MVS-TSO/E212

    CENTER(string,länge )

    CENTRE( ,füllzeichen

    Übergibt eine Zeichenfolge der angegebenen Länge, in welcher der angegebene Stringzentriert wird. Als Füllzeichen wird BLANK angenommen, wenn kein Füllzeichen an-gegeben ist.

    string

    Zeichenfolge, die zentriert werden soll.

    länge

    Länge der Zeichenfolge, innerhalb der die Zentrierung stattfinden soll.

    füllzeichen

    Muß nur angegeben werden, wenn als Füllzeichen nicht BLANK genutzt werden soll.

    Beispiele:

    SAY CENTER(HUGO,8) ' HUGO 'SAY CENTRE(HUGO,8,'-') '--HUGO--'SAY CENTER('Feierabend um 4',5) 'abend'

    say center(' Das ist eine Titelzeite ',79,'*')

    Zentriert den Text auf Bildschirmmitte und ersetzt die links und rechts stehendenLeerzeichen durch einen Stern(*).

    CENTER()

    RE

    XX

    -Fu

    nkt

    ion

  • Kapitel 3 - Syntaxbeschreibung 213

    "CLEAR"

    Löscht den Bildschirm.

    Diese Maßnahme ist immer sinnvoll, wenn ein oder mehrere Dialogschritte aufge-baut werden sollen, um zunächst einen leeren Bildschirm zu erhalten. Auf diese Weiseist sichergestellt, daß die erste SAY-Instruktion die erste Terminalzeile beschreibt.

    Beispiel:

    /* REXX */arg test .if abbref(test,'T') then trace '?r'clearsay center(' Druckausgabe ',79,'*')saysaysay 'Druckdatei angeben'pull drudat:

    CLEAR

    TS

    O-B

    efehl

  • REXX unter MVS-TSO/E214

    COMPARE(string1,string2 ),füllzeichen

    Führt einen Vergleich zwischen zwei Zeichenketten durch und übergibt 0, wenn diezu vergleichenden Zeichenfolgen identisch sind. Wenn nicht, wird die Position desersten nicht übereinstimmenden Bytes übergeben. Die kürzere Zeichenfolge wirdrechts durch das Füllzeichen verlängert. Ist kein Füllzeichen angegeben, wird BLANKals Füllzeichen benutzt.

    string1,string2

    Die miteinander zu vergleichenden Zeichenfolgen. Grundsätzlich können die Zeichen-folgen auch in Form Variablen geliefert werden.

    füllzeichen

    Ist eine Zeichenfolge kürzer als die andere, wird sie mit dem angegebenen Füllzei-chen verlängert. Fehlt die Angabe, wird BLANK angenommen.

    Beispiele:

    SAY COMPARE('HUGO','HUGO') 0SAY COMPARE('HUGO','HUBERT') 3SAY COMPARE('HUGO ','HUGO') 0SAY COMPARE('HUGO ','HUGO','-') 5SAY COMPARE('HUGO-- ','HUGO','-') 7

    COMPARE()

    RE

    XX

    -Fu

    nkt

    ion

  • Kapitel 3 - Syntaxbeschreibung 215

    COPIES()

    COPIES(string,anzahl)

    Übergibt aufeinanderfolgende Kopien von string. anzahl muß eine positive Zahl sein.

    string

    Zu wiederholende Zeichenfolge

    anzahl

    Häufigkeit der Wiederholung

    Beispiele:

    SAY COPIES('Achtung ',2) 'Achtung Achtung'SAY COPIES('TRALLALA',0) ' '

    RE

    XX

    -Fu

    nktio

    n

  • REXX unter MVS-TSO/E216

    C2D(string)

    Wandelt eine Zeichenfolge in Dezimal um. Ist string eine Leerzeichenfolge, wird 0zurückgegeben.

    string

    Character-Zeichenkette, die ins Dezimalformat umgewandelt werden soll. Die maxi-male Länge ist 250 Byte.

    Beispiele:

    SAY C2D('03'X) 3SAY C2D('81'X) 129SAY C2D('FF81'X) 65409SAY C2D('a') 129 EBCDIC

    C2D()

    RE

    XX

    -Fu

    nkt

    ion

  • Kapitel 3 - Syntaxbeschreibung 217

    C2X(string)

    Übersetzt einen Character-String in seine Hexadezimale Bedeutung. Die Länge desEingabestrings ist beliebig.

    string

    Character-Zeichenkette, die ins Hex-Format umgewandelt werden soll. Die maximaleLänge ist 250 Byte.

    Beispiele:

    SAY C2X('38s') 'F3F8A2' EBCDICSAY C2X('327'X) '327'

    C2X()

    RE

    XX

    -Fu

    nktio

    n

  • REXX unter MVS-TSO/E218

    DATATYPE(string ),typ

    Ermittelt das Datenformat einer Zeichenfolge (CHAR oder NUM, oder gibt ein JA(1)oder NEIN(0) auf die Frage nach einem bestimmten Datentyp zurück.

    string

    Zeichenkette, deren Datentyp erfragt werden soll. Ist nur ein String angegeben, er-folgt von REXX eine Rückmeldung von CHAR (bei Datentyp Character) oder NUM(bei numerisch).

    typ

    Wird typ angegeben, wird von REXX mit einer 1 im Falle JA, ansonsten mit 0 geant-wortet. Als typ sind folgende Angaben möglich:

    A Alphanumerisch, A-Z, a-z und 0-9B Bits, nur Nullen oder EinsenL Kleinbuchstaben (LOWER CASE)M Klein- und Großbuchstaben (MIXED CASE)N Ziffern (NUMBER)S Symbol, A-z, 0-9 und @#$¢.!?_U Großbuchstaben (UPPER CASE)X Sedezimale Zahl oder Nullstring

    Beispiele:

    SAY DATATYPE(' 36 ') NUMSAY DATATYPE(' ') CHARSAY DATATYPE('45.5',N) 1SAY DATATYPE('August',L) 0SAY DATATYPE('August',M) 1SAY DATATYPE('August',U) 0SAY DATATYPE('a01f',X) 1

    SAY 'Alter angeben'DO FOREVER

    pull alterIF DATATYPE(alter)='NUM' THEN LEAVESAY 'Eingabe falsch, bitte wiederholen'

    END

    DATATYPE()

    RE

    XX

    -Fu

    nkt

    ion

  • Kapitel 3 - Syntaxbeschreibung 219

    DATE( )option

    Übergibt das aktuelle Systemdatum in der Form tt mon jjjj (zum Beispiel 12 Feb 1994)ohne führende BLANKS oder Leerstellen beim Tag. Bei der Ausgabe des Monatswerden die ersten drei Byte des Monatsnamens in englischer Schreibweise benutzt.

    option

    Um andere Ausgabeformate zu erhalten, können nachfolgende Optionen genutztwerden:

    B (Basedate)

    Übergibt die Anzahl Tage seit dem Basisdatum (1. Januar 0001) ohne den aktuellenTag. Durch den Ausdruck DATE(B)//7 wird ein Wert zwischen 0 und 6 rückgemeldet,wobei 0 mit Montag und 6 mit Sonntag gleichzusetzen ist. Wird gerne benutzt, umden aktuellen Wochentag in jede gewünschte Landessprache umsetzen zu können.

    C (Century)

    Übergibt die Anzahl Tage, einschließlich des aktuellen, seit der letzten durch 100teilbaren Jahreszahl. Wird DATE(C) am 5. März 1990 angewandt, wird die AnzahlTage seit dem 1. Januar 1900 übergeben.

    D (Days)

    Übergibt den laufenden Tag des Jahres.

    E (European)

    Datum in europäischer Schreibweise: tt/mm/jj

    J (Julian)

    Datumsformat: jjttt

    M (Month)

    DATE()

    RE

    XX

    -Fu

    nktio

    n

  • REXX unter MVS-TSO/E220

    Ausgeschriebener englischer Name des aktuellen Monats.

    N (Normal)

    Standardformat: tt mon jjjj

    O (Ordered)

    Datumsformat: jj/mm/tt (Sinnvoll bei Sortierungen)

    S (Sorted)

    Datumsformat: jjjjmmtt (Sinnvoll bei Sortierungen)

    U (USA)

    Amerikanische Schreibweise: mm/tt/jj

    W (Weekday)

    Englische Schreibweise des Wochentages in Groß-/Kleinschreibung.

    Beispiele:

    SAY DATE() '5 Mar 1990'SAY DATE('B') 726526SAY DATE('D') 64SAY DATE('E') '05/03/90'SAY DATE('M') March'SAY DATE('N') '5 Mar 1990'SAY DATE('O') '90/03/05'SAY DATE('S') '19900305'SAY DATE('U') '03/05/90'SAY DATE('W') 'Monday'

    Hinweis:

    Bei Zugriffen auf Datum oder Uhrzeit wird gewährleistet, daß bei mehrfacher Verwen-dung dieser Werte in einem Ausdruck Datum oder Zeit nicht voneinander abweichen.

    "DELETE dateiname "

    DATE()

    RE

    XX

    -Fu

    nkt

    ion

  • Kapitel 3 - Syntaxbeschreibung 221

    dateiname(mitglied)

    Löscht eine Datei oder ein Mitglied einer PO-Datei. Gleichzeitig wird der Dateieintragaus dem Katalog entfernt. Bei Angabe des Dateinamens sind die TSO-Dateinamens-konventionen zu beachten.

    Beispiel:

    :SAY "Dateiname"PULL dateiDO FOREVER

    SAY "Name des zu loeschenden Members (ENTER = Ende)"PULL mbrIF LENGTH(mbr) = 0 THEN LEAVE"DEL '"datei"("mbr")'"

    END:

    Returncodes

    0 ➪ Ausführung erfolgreich, Warnungsmeldung wird ausgegeben8 ➪ Befehl abgeschlossen, Ergebnis muß überprüft werden

    12 ➪ Löschen nicht möglich

    "DELSTACK "

    DELETE

    TS

    O-B

    efehl

  • REXX unter MVS-TSO/E222

    Löscht den aktuellen STACK-Bereich, der durch NEWSTACK erzeugt wurde, mit allseinen Puffern und Elementen. Wurde kein zweiter STACK erzeugt, werden alle Ele-mente des "Original-STACK-Bereiches" gelöscht. Um dies nicht ungewollt zu errei-chen, könnte in diesem Fall eine Routine aufgerufen werden, welche die Auflösungdes Original-STACK verhindert (siehe nachfolgendes Beispiel).

    Beispiel:

    :"NEWSTACK" /* STACK 2 wird erzeugt */::"NEWSTACK" /* STACK 3 wird erzeugt */::"NEWSTACK" /* STACK 4 wird erzeugt */:"QSTACK" /* QSTACK füllt RC mit der */DO rc-1 /* Anzahl der STACK-Bereiche. */

    "DELSTACK" /* Bis auf den Originären */END /* werden alle STACK gelöscht */:

    DELSTR(string,von )

    DELSTACK

    TS

    O-R

    EX

    X-B

    efeh

    l

  • Kapitel 3 - Syntaxbeschreibung 223

    ,länge

    Löscht den Teil einer Zeichenfolge ab der Stelle von in der in länge angegebenenAnzahl Byte. Wird länge nicht angegeben, wird ab der angegebenen Stelle bis zumEnde des Strings gelöscht.

    string

    Zeichenfolge, aus der gelöscht werden soll.

    von

    Byteposition innerhalb STRING, ab der gelöscht werden soll.

    länge

    Anzahl Byte, die gelöscht werden sollen.

    Beispiele:

    SAY DELSTR('Hans ist doof',5) 'Hans'SAY DELSTR('Hans ist doof',6,4) 'Hans doof'

    DELWORD(string,ab )

    DELSTR()

    RE

    XX

    -Fu

    nktio

    n

  • REXX unter MVS-TSO/E224

    ,menge

    Löscht Worte (Zeichenfolgen, die durch BLANK voneinander getrennt sind) in einemString.

    ab

    Bestimmt das x-te Wort im String, ab dem gelöscht werden soll.

    menge

    Anzahl der zu löschenden Worte. Wird menge nicht angegeben, wird der String abdem betreffenden Wort bis zum Ende gelöscht.

    Beispiele:

    SAY DELWORD('Hans ist doof',2) 'Hans'SAY DELWORD('Hans ist doof',2,1) 'Hans doof'SAY DELWORD('Hans ist doof',4) 'Hans ist doof'

    DIGITS()

    DELWORD()

    Rex

    x-F

    un

    ktio

    n

  • Kapitel 3 - Syntaxbeschreibung 225

    DIGITS()

    Übergibt den aktuellen Wert aus NUMERIC DIGITS

    Soll dieser Wert im Verlauf einer Prozedur geändert werden, ist es sinnvoll, den aktu-ellen Wert in einer Variablen abzulegen, um nach Beendigung einer Verarbeitungden alten Zustand wiederherstellen zu können.

    Beispiel:

    :altdigit=digits()numeric digits 3/* Verarbeitung mit dem neuen Wert für Digits */neueric digits altdigit:

    RE

    XX

    -Fu

    nktio

    n

  • REXX unter MVS-TSO/E226

    DO anzahlbefehl(e)

    END

    Diese Form der Schleife legt zu Beginn fest, wieviele Durchläufe es geben wird. DerSchleifenzähler wird intern bei jedem Durchlauf um 1 vermindert. Ist er bei 0 ange-langt, wird die Schleife verlassen.

    anzahl

    Ist eine integere Zahl, die der Anzahl der Schleifendurchläufe entspricht. Der Wertkann auch über eine Variable oder eine Funktion geliefert werden.

    Beispiele:

    SAY CENTER(" Heinzi's kleine Spielkiste ",79,'*')DO 3

    SAYENDSAY "Waehle aus folgenden Moeglichkeiten":

    Die Schleife wird dreimal durchlaufen und erzeugt entsprechend drei Leerzeilen.

    :"ALLOC DD(EIN) DA(KURS.DATA(ADR1)) SHR REUSE"EXECIO * DISKR EIN (FINIS"DO QUEUED()

    PARSE PULL satzSAY satz

    END:

    QUEUED() übergibt die Anzahl der Datensätze, die im Stack liegen. Die Schleife wirdentsprechend oft durchlaufen. Bei jedem Durchlauf wird ein Satz aus dem Stack ent-nommen und am Terminal ausgegeben. Nach Beendigung der Schleife ist der Stackleer.

    DO anzahl

    RE

    XX

    -In

    stru

    ktio

    n

  • Kapitel 3 - Syntaxbeschreibung 227

    DO variable = startwert TO endwert BY ± schrittweitebefehl(e)

    END

    Hier spricht man von einem ITERATIVEN DO (wiederholend - was im grunde für jedeSchleife zutrifft). Eine Steuervariable wird mit einem Grundwert initialisiert und solan-ge bei jedem Durchlauf gemäß der BY-Klausel verändert, bis sie den angegebenenEndwert über- oder unterschreitet.

    variable = startwert

    Initialisierung der Schleifensteuervariablen mit einem beliebigen Wert. Der Wert mußeine integere Zahl sein und kann auch über eine Variable oder Funktion geliefertwerden.

    TO endwert

    Steuert das Schleifenende. Die Schleife wird verlassen, wenn die Schleifensteuerva-riable den Endwert unter- oder überschreitet (abhängig von BY +wert oder BY -wert).

    BY ±schrittweite

    Steuert, in welcher Weise die Schleifensteuervariable bei jedem Durchlauf verändertwerden soll. Wird der Parameter nicht angegeben, wird von BY + 1 ausgegangen.Soll eine andere Schrittweite berücksichtigt oder die Steuervariable vermindert wer-den, ist die BY-Klausel zwingend.

    Beispiele:

    :"ALLOC DD(EIN) DA(KURS.DATA(ADR1)) SHR REUSE"EXECIO * DISKR EIN (FINIS"DO c_satz = 1 TO QUEUED()

    PARSE PULL satzSAY c_satz". Datensatz:" satz

    END:

    Auf diese Weise kann bei jedem Durchlauf in der Schleife mit ausgegeben werden,der wievielte Datensatz aus dem Stackbereich am Terminal zu sehen ist.

    DO variable = startwert TO endwert BY ± schrittweite

    RE

    XX

    -Instru

    ktion

  • REXX unter MVS-TSO/E228

    DO FOREVERbefehl(e)

    END

    Die FOREVER-Schleife erzeugt zunächst eine Endlos-Verarbeitung (das einzige, wasman mit Sicherheit nicht will). Sie bietet den Vorteil einer grundsätzlichen Wiederho-lung, ohne daß man sich zunächst Gedanken über irgendwelche Schleifenbedingun-gen zu machen braucht. Innerhalb der Schleife kann aufgrund einer Bedingung dasSchleifenende durch die Instruktion LEAVE (verlassen der Schleife) herbeigeführtwerden.

    Die FOREVER-Schleife wird sehr gerne in Verbindung mit Plausibilitätsprüfungeneingesetzt, oder wenn ein Programm insgesamt wiederholbar sein soll, und der Be-diener entscheidet, ob ein weiterer Durchlauf stattfinden soll oder nicht.

    Beispiele:

    /* REXX * DEMO ***************************/DO FOREVER

    CLEARSAY CENTER("Heinzi's kleine Spielekiste",79,"*")SAY;SAYSAY "1 Black Jack"SAY "2 Poker"SAY "3 Muehle"SAY "4 Mastermind"SAY "E ENDE"SAYDO UNTIL POS(wahl,"1 2 3 4 E") > 0

    SAY "Auswahl??"PULL wahl

    ENDSELECT

    WHEN wahl = "E" THEN LEAVEWHEN wahl = 1 THEN CALL POKER:

    ENDENDSAY "Bye. bye..."EXIT

    DO FOREVER

    RE

    XX

    -In

    stru

    ktio

    n

  • Kapitel 3 - Syntaxbeschreibung 229

    DO UNTIL bedingungbefehl(e)

    END

    Die Schleife wird durchlaufen, bis die schleifensteuernde Bedingung erfüllt ist. ImGegensatz zur WHILE-Schleife wird die Bedingung erst am Schleifenende überprüftund entschieden, ob die Schleife ein weiteres Mal durchlaufen werden soll. Ein Durch-lauf findet in jedem Fall statt.

    Beispiele:

    :DO UNTIL durst = "N"

    CALL trinkenSAY "Durst (J/N)"PULL durst

    ENDSAY "Ruelps":

    Dieses Beispiel könnte man im Südstaaten-Slang dokumentieren: "A bissl was gehtimmer", oder wie der Bayer sagt: Der Mensch hebt sich dadurch vom Tier ab, daß ernicht trinkt, weil er Durst hat, sondern weil's ihm schmeckt. Egal ob Durst vorhandenist oder nicht, es wird auf jedem Fall einmal getrunken.

    :DO UNTIL eingabe > 0 & eingabe < 10

    SAY "Geben Sie eine Zahl zwischen 1 und 9 ein"PULL eingabe

    END:

    Hier haben wir eine in die Schleifenbedingung integrierte Plausibilitätsprüfung derBedienereingabe. Die Schleife wird zunächst in jedem Fall betreten und erlaubt demBediener eine Tastatureingabe. Am Schleifenende wird die Bedingung geprüft. Ist sieerfüllt, war die Eingabe richtig, und die Schleife wird verlassen. Ansonsten wird sieaufs neue betreten und erlaubt dem Bediener einen neuen Eingabeversuch.

    DO UNTIL bedingung

    RE

    XX

    -Instru

    ktion

  • REXX unter MVS-TSO/E230

    DO WHILE bedingungbefehl(e)

    END

    Die Schleife wird durchlaufen, solange die schleifensteuernde Bedingung erfüllt ist.Im Gegensatz zur UNTIL-Schleife wird die Bedingung bereits am Schleifenanfangüberprüft und vor dem ersten Betreten der Schleife entschieden, ob sie durchlaufenwerden soll. Ist die Bedingung am Schleifenanfang nicht erfüllt, wird die Schleife über-sprungen. Wurde die Schleife einmal durchlaufen, wird bei Rückkehr zum Schleifen-kopf die Bedingung aufs neue überprüft. Trifft sie noch immer zu, wird die Schleife einweiteres Mal durchlaufen. Anderenfalls wird die Schleife verlassen.

    Beispiele:

    :SAY "Durst (J/N)"PULL durstDO WHILE durst = "J"

    CALL trinkenSAY "Durst (J/N)"PULL durst

    ENDSAY "Auf Wiedersehen":

    Ist kein Durst vorhanden, wird die Schleife nicht betreten. Anderenfalls wird sie durch-laufen und die Bedingung vor jedem weiteren Durchlauf aufs neue überprüft. Trifft dieBedingung nicht mehr zu, wird die Schleife verlassen.

    /* REXX * DEMO ********************************/ARG zahlDO WHILE DATATYPE(zahl) = "CHAR"

    SAY "Geben Sie eine Zahl ein"PULL zahl

    END:

    Das Programm kann einen Startwert empfangen, der numerisch sein muß. Wurdekein (zahl ist NULLSTRING) oder ein falscher Wert übergeben, wäre die Schleifen-bedingung erfüllt, und in der Schleife wird so lange eine Bedienereingabe verlangt,bis diese Eingabe numerisch ist. Wurde ein numerischer Startwert empfangen, wirddie Schleife übersprungen.

    DO WHILE bedingung

    RE

    XX

    -In

    stru

    ktio

    n

  • Kapitel 3 - Syntaxbeschreibung 231

    DROP variable,variable

    Durch DROP werden Variablen oder Variablenstämme auf Grundwert gesetzt (siezeigen inhaltlich wieder auf ihren zu Großschreibung konvertierten Eigennamen).

    Beispiele:

    y=5drop a x.1 x.y

    Löscht die Inhalte der Variablen A, X.1 und X.5

    DROP eingabe.

    Setzt alle Variablen des Stammes EINGABE. zurück, das heißt alle Variablen, die mitEINGABE. beginnen.

    DROP

    RE

    XX

    -Instru

    ktion

  • REXX unter MVS-TSO/E232

    "DROPBUF "puffernummer

    Entfernt einen Puffer aus dem STACK. Wird keine Puffernummer angegeben, wirdder zuletzt erzeugte Puffer entfernt. Ist eine Puffernummer angegeben, werden derentsprechende Puffer und die danach erstellten Puffer entfernt. Durch "DROPBUF 0"werden alle durch MAKEBUF erzeugten Puffer gelöscht.

    Beispiel:

    :"QBUF"buffer = rcDO WHILE buffer > 0

    "QELEM"records = rcDO cnt = 1 TO records

    PARSE PULL satzSAY "Satz" cnt", Puffer" buffer":" satz

    END"DROPBUF"buffer = buffer - 1

    END:

    Returncodes

    0 ➪ Normales Ende1 ➪ Falscher Wert angegeben (z.B.: A1)2 ➪ Der Puffer existiert nicht (wenn beispielsweise die Rückmeldung

    aus QBUF eine 4 ist und DROPBUF 6 angegeben wird).

    DROPBUF

    TS

    O-R

    EX

    X-B

    efeh

    l

  • Kapitel 3 - Syntaxbeschreibung 233

    D2C(integer ),wert

    Umwandlung von Dezimal nach Character. Wenn wert nicht angegeben ist, muß inte-ger eine positive Zahl sein, ansonsten wird ein Fehler erzeugt.

    integer

    Dezimalwert, der umgewandelt werden soll.

    wert

    Ist die Länge des Ergebnisses in Byte nach der Übersetzung. Hat das Ergebnis in derangegebenen Anzahl Byte nicht Platz, wird entsprechend links abgeschnitten.

    Beispiele:

    SAY D2C(7) '07'xSAY D2C(129) '81'xSAY D2C(129,1) '81'xSAY D2C(129,2) '0081'xSAY D2C(45,0) ''

    D2C()

    RE

    XX

    -Fu

    nktio

    n

  • REXX unter MVS-TSO/E234

    D2X(integer ),wert

    Umwandlung von Dezimal nach Hexadezimal. Wenn wert nicht angegeben ist, mußinteger eine positive Zahl sein, ansonsten wird ein Fehler erzeugt.

    integer

    Dezimalzahl, die umgewandelt werden soll.

    wert

    Ist die Länge des Ergebnisses in Byte nach der Übersetzung. Hat das Ergebnis in derangegebenen Anzahl Byte nicht Platz, wird entsprechend links abgeschnitten.

    Beispiele:

    SAY D2X(7) '7'SAY D2X(129) '81'SAY D2X(129,1) '1'SAY D2X(129,2) '81'SAY D2X(129,4) '0081'SAY D2X(45,0) ''

    D2X()

    RE

    XX

    -Fu

    nkt

    ion

  • Kapitel 3 - Syntaxbeschreibung 235

    ERRORTEXT()

    ERRORTEXT(meldungsnummer)

    Übergibt die entsprechende Fehlermeldung. Die Meldungsnummer muß zwischen 0und 99 liegen, ansonsten wird ein Nullstring übergeben. Die Fehlermeldungen ste-hen in unmittelbarem Zusammenhang mit den ausgegebenen Returncodes (Wird beiSyntaxfehler RC 16 ausgegeben, wird diese Situation in der Fehlermeldung 16 er-klärt).

    Eine Beschreibung der Fehlernummern und -meldungen finden Sie im Anhang A.

    Beispiele:

    SAY ERRORTEXT(16) 'Label not found'SAY ERRORTEXT(36) 'Unmatched "(" in Expression'SAY ERRORTEXT(60) ' '

    RE

    XX

    -Fu

    nktio

    n

  • REXX unter MVS-TSO/E236

    "EXEC dateiname(mitglied) "'parm' EXEC

    Aufruf einer TSO-Befehlsprozedur. Die Prozedur ist unter dem angegebenen NamenMitglied der angegebenen PO-Datei.

    dateiname(mitglied)

    Name der Programmbibliothek und des auszuführenden Programmes. Bei Angabedes Bilbiotheksnamens sind die TSO-Konventionen zu berücksichtigen. Wird als letzterTeil des Dateinamens EXEC verwandt, kann eine verkürzte Schreibweise erfolgen.

    'parm'

    Parameter, die an das aufzurufende Programm zu übergeben sind. Im Programmmuß die Übernahme der Parameter kodiert sein.

    EXEC

    Wird der Operand EXEC hinter dem Prozedurnamen nicht angegeben, wird versucht,eine TSO-CLIST zu starten. Mit Angabe des Parameters führt der Aufruf zum Starteneiner REXX-Prozedur (EXEC).

    Beispiele:

    EXEC 'XWITT.MVS.EXEC(PROG1)' EXECEXEC 'XWITT.MVS.EXEC(PROG2)' 'parm1 parm2' EXECEXEC mvs(PROG3) EXECEXEC MVS(PROG4) 'parm1 parm2' EXEC

    EXEC

    TS

    O-B

    efeh

    l

  • Kapitel 3 - Syntaxbeschreibung 237

    "EXECIO sätze DISKW ddname //* DISKR ddname //

    DISKRU recnum

    // "( )

    STEM var. FINIS

    //(

    FINIS LIFOFIFOSKIP

    STEM var.FINIS

    Steuert alle Ein-/Ausgaben im Zusammenhang mit einer Datei. Daten, die aus einerDatei gelesen werden, können im STACK abgelegt oder einem Variablenstamm über-geben werden. Daten, die in eine Datei geschrieben werden sollen, können aus demSTACK geholt oder aus einem Variablenstamm gelesen werden.

    Ein-/Ausgabe des EXECIO kann eine sequentielle Datei oder ein Member einer PO-Datei sein. Bevor die Ein-/Ausgabeoperation durch EXECIO stattfinden kann, mußdie betreffende Datei durch das TSO-Kommando ALLOCATE zugewiesen sein.EXECIO ersetzt nicht die Zuordnung.

    Wenn in einer EXECIO-Instruktion Variablen benutzt werden, ist darauf zu achten,daß mit Ausnahme der Variablen alle Operanden von EXECIO zwischen Anführungs-zeichen einzugrenzen sind.

    sätze*

    Anzahl der Datensätze, die verarbeitet werden sollen. Wird an Stelle einer Zahl Stern(*)angegeben, erfolgt eine Gesamtverarbeitung. Bei einer Leseoperation wird die kom-plette Datei bis EOF gelesen. Beim Schreiben wird der gesamte Stackbereich oderder gesamte vorbereitete Variablenstamm geschrieben.

    EXECIO

    TS

    O-R

    EX

    X-B

    efehl

  • REXX unter MVS-TSO/E238

    Ist beim Schreiben Stern(*) angegeben und EXECIO soll Daten aus dem STACK-Bereich in einer Datei ablegen, wird das Schreiben erst beendet, wenn im STACK aufeine Nullzeile (Nullstring) getroffen wird. Ist keine Nullzeile im STACK vorhanden,wartet EXECIO auf Dateneingabe über die Terminaltastatur. Läuft die Prozedur ineinem MVS-Adreßraum, wird an Stelle der Terminaltastatur versucht von SYSTSINweiterzulesen. Wird hier EOF erreicht, wird EXECIO beendet.

    DISKR

    Eröffnet die Datei (sofern dies nicht bereits geschehen ist) mit dem Attribut INPUT(zum Lesen) und liest die entsprechende Anzahl Datensätze, um sie im STACK-Bereich abzulegen oder einen Variablenstamm zu füllen.

    Wenn eine Eröffnung mit dem Attribut INPUT erfolgte, kann nicht in die Datei ge-schrieben werden.

    DISKRU

    Eröffnet mit dem Attribut UPDATE. Dies ist erforderlich, wenn Änderungen in einerDatei durchgeführt werden müssen. Erfolgt bei einem Zugriff mit DISKRU ein Schreib-befehl, wird der zuletzt gelesene Datensatz (u.U. geändert) zurückgeschrieben.

    DISKW

    Dateieröffnung zum Schreiben. Die zu schreibenden Daten können aus dem STACKoder von einem Variablenstamm übernommen werden. Durch DISKW kann in eineunabhängige Datei -oder im Falle eines UPDATE- in die gleiche Datei geschriebenwerden, die mit DISKRU eröffnet wurde. In letzterem Fall muß aber die Anzahl zuschreibender Sätze zwingend 1 sein.

    ddname

    Der symbolische Name der Datei, unter dem sie im ALLOCATE-Statement zugewie-sen wurde.

    recnum

    Satznummer in der Datei, bei der das Lesen begonnen wird. Wird eine Datei gelesen,zeigt dieser Wert immer auf die Satznummer des nächsten zu lesenden Satzes. Rück-wärtspositionierung ist nicht möglich (recnum sollte kleiner sein als der aktuelle Wert,den es enthält). In diesem Fall muß die Datei geschlossen und neu eröffnet werden,um an den gewünschten Datensatz zu gelangen.

    EXECIO

    TS

    O-R

    EX

    X-B

    efeh

    l

  • Kapitel 3 - Syntaxbeschreibung 239

    FINIS

    Schließt die Datei, nachdem EXECIO abgearbeitet ist. Auch wenn bei Prozedurendeeine durch EXECIO geöffnete Datei automatisch geschlossen wird, sollte im Zugeeiner ordnungsgemäßen Programmierung nicht auf das Schließen im EXECIO-Be-fehl verzichtet werden. Ordentliche Programmierer sorgen für das ordnungsgemäßeSchließen aller benutzten Dateien, wenn die Verarbeitung abgeschlossen ist.

    STEM var.

    Ein Variablenstamm, an den die gelesenen Datensätze übergeben werden. Um die-se Übergabe an indizierte Variablen zu vollziehen, sollte hinter den Variablennamenein Punkt(.) gesetzt werden, zum Beispiel EING.. Werden nun 38 Datensätze vonEXECIO gelesen, stehen diese in den Variablen EING.1 bis EING.38. Die Anzahl dergelesenen Datensätze (in diesem Fall 38) steht in der Variablen EING.0.

    Endet der Variablenname nicht mit einem Punkt(.), werden zwar ebenfalls aufstei-gende Variablen gebildet (EING1, EING2...), die aber nicht so einfach indiziert ange-sprochen werden können (nur möglich über die Instruktion INTERPRET).

    Wird die STEM-Angabe beim Schreiben genutzt, wird der zu schreibende Datenbe-stand Satz für Satz in den entsprechenden Variablen erwartet (der erste zu schrei-bende Satz in der Variablen stamm.1, der zweite Satz in stamm.2...). Die Anzahl zuschreibender Sätze wird im Falle "EXECIO * DISKW..." nicht in der Variablen stamm.0erwartet und muß im Programm nicht gesondert berücksichtigt werden. Durch dieErhöhung des Stammes wird immer eine neue Variable stamm.? gebildet. Irgend-wann bildet EXECIO auf diesem Weg eine Variable, die im Programm nicht gefülltwurde. In diesem Fall zeigt die Variable inhaltlich auf ihren zu Großbuchstaben kon-vertierten Eigennamen. Diese Situation wertet EXECIO dann als EOF.

    SKIP

    Liest die angegebene Anzahl Datensätze, ohne sie im STACK oder in Variablen zuhinterlegen. Wird an Stelle einer Anzahl Datensätze Stern(*) angegeben, wird in Ver-bindung mit Skip an das Dateiende positioniert.

    LIFO

    Plaziert die gelesenen Datensätze in der Reihenfolge Last In First Out.

    FIFO

    Übergibt die gelesenen Datensätze in der Folge First In First Out (Standard).

    EXECIO

    TS

    O-R

    EX

    X-B

    efehl

  • REXX unter MVS-TSO/E240

    Hinweise:

    Die Länge eines geänderten Satzes wird auf die Satzlänge der Datei gesetzt, in die ergeändert zurückgeschrieben werden soll. Ist die Satzlänge der Datei größer, wird derSatz mit BLANK aufgefüllt, ist sie dagegen kleiner, wird der Satz entsprechend abge-schnitten.

    Wenn in einer PO-Datei mehr als ein Mitglied innerhalb einer Verarbeitung beschrie-ben werden soll, sollte nur eines zu einer Zeit mit dem Attribut OUTPUT geöffnetsein.

    Die Disposition MOD darf nur bei sequentiellen Dateien benutzt werden. Sollten Da-tensätze an das Ende eines Mitgliedes von PO angehängt werden, müssen die altenDatensätze zunächst in den STACK oder an einen Variablenstamm überstellt, dieneuen Sätze dort hinzugefügt und dann das Ganze zurückgeschrieben werden.

    Die Datei wird geschlossen, wenn

    ● die TASK, in der die Datei geöffnet wurde, geschlossen wird

    ● ein Schließen durch EXECIO veranlaßt wird

    Beispiele:

    :"ALLOC DA(KURS.SEQ1) F(EINGABE) SHR REUSE""ALLOC DA(KURS.DATA132(MEMNEU)) F(AUSGABE) OLD""NEWSTACK" /* Alter STACK bleibt geschützt */"EXECIO * DISKR EINGABE (FINIS"QUEUE /* Nullstring für Datenende */"EXECIO * DISKW AUSGABE (FINIS""DELSTACK" /* Löschen des gebildeten STACK */"FREE F(EINGABE AUSGABE)":

    Die Daten der sequentiellen Datei userid.KURS.SEQ1 werden als Mitglied MEM-NEU der Datei userid.KURS.DATA132 übernommen.

    EXECIO

    TS

    O-R

    EX

    X-B

    efeh

    l

  • Kapitel 3 - Syntaxbeschreibung 241

    EXECIO

    TS

    O-R

    EX

    X-B

    efehl

    :ARG zeilen ."ALLOC DA(TEST.DATA) F(EIN) SHR REUSE""EXECIO" zeilen "DISKR EIN (STEM data."DO X=1 TO DATA.0

    SAY X'. gelesene Zeile:' DATA.XEND:

    Eine am Terminal eingegebene Anzahl Datensätze wird aus einer Datei gelesenin die indizierten Variablen DATA.x gestellt. Die Zahl der gelesenen Datensätzesteht in der Variablen DATA.0, die Variablen werden in Schleife ausgegeben.

    :say 'Personalnummer';pull var1erg='Keinen passenden Satz gefunden'do forever

    "execio 1 diskru ddname"if rc = 2 then leavepull satzif substr(satz,1,4)=var1 then do

    queue substr(satz,1,4) var2erg='Gesuchten Satz geaendert'"execio 1 diskw ddname (finis"leave

    endendsay erg:

    Es wird nach einer Personalnummer auf Spalte 1 bis 4 gesucht. Wenn gefunden(Stelle 1 bis 4 ist identisch mit dem Wert der Variablen pers) wird der geänderteDatensatz (Personalnummer unverändert, gefolgt vom Inhalt der Variablen var2)im STACK abgelegt und zurückgeschrieben. Verarbeitungsende ist erreicht, nach-dem alle Datensätze gelesen wurden, oder die Änderung erfolgte.

    Returncodes

    0 ➪ Normales Ende bei Schreiben oder Lesen1 ➪ String bei Schreiboperation verkürzt2 ➪ Dateiende beim Lesen erreicht

    20 ➪ Schwerer Fehler. EXECIO wurde abgebrochen, Fehlermeldungwird ausgegeben.

  • REXX unter MVS-TSO/E242

    "EXECUTIL SEARCHDD( YES ) "NO

    HIHTRTTSTE

    EXECUTIL steuert die Ausführung eines REXX-Programmes in einem TSO-Adreß-raum. Der Befehl kann unter TSO-Native, aus einem REXX-Programm oder aus ei-ner CLIST abgesetzt werden (hat aber auf die CLIST selbst keinen Einfluß).

    SEARCHDD(YES)

    Steuert, daß die unter SYSEXEC zugewiesenen Bibliotheken vor SYSPROC nachausführbaren REXX-Programmen durchsucht werden sollen.

    SEARCHDD(NO)

    Zur interpretativen Programmausführung werden nur die Dateien, die unter SYSPROCzugewiesen sind, durchsucht.

    HI (Halt Interpretation)

    Beendet die Ausführung sämtlicher REXX-Programme.

    HT (Halt Typing)

    Unterdrückt sämtlichen Terminal-Output, der durch REXX-Befehle (z.B.: SAY) er-zeugt wird. REXX-Fehlermeldungen werden angezeigt.

    RT (Resume Typing)

    Führt für Befehle wieder zur Ausgabe am Terminal, die durch HT unterdrückt wurden.

    EXECUTIL

    TS

    O-B

    efeh

    l

  • Kapitel 3 - Syntaxbeschreibung 243

    TS (Trace Start)

    Startet den Ablaufverfolger (siehe Befehl TRACE, dieses Kapitel). Wird EXECUTILTS auf der TSO-Ebene ausgeführt, wird für das nächste startende REXX-Programm(und alle, die von dort aus gestartet werden) die Trace-Funktion eingeschaltet.TRACE endet, wenn:

    ● das hierarchisch oberste REXX-Programm endet,

    ● innerhalb eines REXX-Programmes (oder einer CLIST) EXECUTIL TE erkanntwird,

    ● während des Ablaufes die PA-1-Taste gedrückt wird und der Anwender TE ein-tippt.

    TE (Trace End)

    Beendet den Ablaufverfolger für alle laufenden REXX-Programme.

    Beispiel:

    ALLOC DD(SYSEXEC) DA(MVS.EXEC) SHR REUSEEXECUTIL SEARCHDD(YES)

    Werden diese beiden Befehle auf der TSO-Ebene eingegeben, wird die Dateiuserid.MVS.EXEC unter dem symbolischen Namen SYSEXEC zugewiesen, und eswird veranlaßt, daß sie für REXX-Programmaufrufe (vor SYSPROC) durchsucht wird.In dieser Form ist dies nur sinnvoll, wenn es vorher keine SYSEXEC-Zuweisung gab.

    EXECUTIL

    TS

    O-B

    efehl

  • REXX unter MVS-TSO/E244

    EXITzahl

    Wird benutzt, um eine Prozedur unmittelbar zu beenden. Mit EXIT kann das Ende derProzedur auch inmitten des Ablaufes gelegt werden.

    zahl

    Muß eine ganze Zahl zwischen 0 und 4095 sein. Wird zahl angegeben, wird der Wertbei Programmende als Returncode zurückgemeldet.

    Beispiele:

    /* REXX **************************************/DO FOREVER

    "CLEAR"SAY 'Druckdatei angeben'PULL dateiIF SYSDSN"'"datei"'") >< 'OK' THEN EXIT/* Instruktionen zur Verarbeitung */

    END

    /* REXX **************************************/ARG PARMIF LENGTH(parm) = 0 THEN EXIT 4:/* Regulaere Verarbeitung */:EXIT 0

    EXIT

    RE

    XX

    -In

    stru

    ktio

    n

  • Kapitel 3 - Syntaxbeschreibung 245

    FIND(wortkette,suchbegriff)

    Durchsucht Zeichenfolgen nach dem angegebenen Suchbegriff (auf Wortbasis imSinne von REXX) und meldet die Wortposition im String, wenn der Suchbegriff ent-halten ist. Ist das Suchergebnis negativ, wird eine 0 zurückgemeldet.

    wortkette

    Zu untersuchende Wortfolge. Die Wortfolge kann als Literal oder Variable geliefertwerden.

    suchbegriff

    Zeichenfolge, die innerhalb wortkette gesucht werden soll.

    Beispiele:

    SAY FIND('Jetzt ist es Zeit','ist es') 2SAY FIND('Jetzt ist es Zeit','es Zeit') 3SAY FIND('Jetzt ist es Zeit','Jetzt Zeit') 0

    FIND()

    RE

    XX

    -Fu

    nktio

    n

  • REXX unter MVS-TSO/E246

    FORM()

    Übergibt den aktuellen Wert aus NUMERIC FORM (siehe hierzu REXX-InstruktionNUMERIC).

    FORM()

    RE

    XX

    -Fu

    nkt

    ion

  • Kapitel 3 - Syntaxbeschreibung 247

    FORMAT(zahl ),vor

    ,nach

    Formatiert eine Zahl in Bezug auf Vor- oder Nachkommastellen unter Berücksichti-gung der Regeln für Auf- oder Abrunden.

    zahl

    Ist nur zahl angegeben, wird nach den Regeln von REXX gerundet (NUMERICDIGITS).

    vor

    Bestimmt die Anzahl der Vorkommastellen. Ist der Vorkomma-Stellenwert zu kleinum zahl aufnehmen zu können, wird Fehler gemeldet. Ist der Vorkommawert größer,wird links mit BLANK aufgefüllt.

    nach

    Anzahl der Dezimalstellen. Werden in zahl vorhandene Nachkommastellen beschnit-ten, wird entsprechend gerundet. Ist der Wert größer, als die in zahl vorhandenenDezimalstellen, wird mit 0 aufgefüllt.

    Beispiele:

    SAY FORMAT('3',4) ' 3'SAY FORMAT('3.75',4,0) ' 4'SAY FORMAT('3.75',4,3) ' 3.750'SAY FORMAT('-.28',4,1) ' -0.3'SAY FORMAT('-4.5',,4) '-4.5000'SAY FORMAT(' - 6.76') '-6.76'

    FORMAT()

    RE

    XX

    -Fu

    nktio

    n

  • REXX unter MVS-TSO/E248

    FREE

    TS

    O-B

    efeh

    l

    "FREE DD( ddname ) "

    DA( dateiname )

    ATTR( attributename )

    Gibt einen symbolischen Namen, eine Datei oder ein gesetztes Attribut wieder frei.Da der FREE-Befehl eine sehr zeitintensive Anwendung ist, ist darauf zu achten, daßmöglichst alle Angaben in einem FREE-Kommando kodiert werden.

    DD(name1 name2 ... )

    Löscht den Eintrag mit dem symbolischen Namen aus der Dateizuweisungstabelle.

    DA(datei1 datei2 ... )

    Gibt die angegebene(n) Datei(en) frei. Dateien, die vom Befehlsprozessor dynamischzugewiesen wurden, werden nicht automatisch freigegeben, wenn das Programmendet.

    ATTR(attribut1 attribut2 ... )

    Gibt die unter den angegebenen Namen erzeugten Attributslisten wieder frei (sieheBefehl ATTR).

    Beispiel:

    FREE DD(SYSUT1,SYSUT2,SYSIN,SYSPRINT) ATTR(DCB1)

    Returncodes

    0 ➪ Normales Ende12 ➪ Keine Freigabe (häufig, weil das entsprechende Symbol nicht

    belegt war).

  • Kapitel 3 - Syntaxbeschreibung 249

    FUZZ()

    Übergibt den aktuellen Wert aus NUMERIC FUZZ.

    Soll dieser Wert für einen Verarbeitungsschritt geändert werden, ist sinnvoll, denaktuellen Wert in einer Variablen abzulegen, um nach der Verarbeitung NUMERICFUZZ auf den alten Wert zurücksetzen zu können.

    Beispiel:

    :altfuzz=fuzz()numeric fuzz 3/* Verarbeitung mit dem neuen Wert von FUZZ */numeric fuzz altfuzz:

    FUZZ()

    RE

    XX

    -Fu

    nktio

    n

  • REXX unter MVS-TSO/E250

    IF bedingung THEN befehlELSE befehl

    IF bietet die Möglichkeit, eine bestimmte Situation zu erkennen. Trifft die Bedingungzu, wird der Befehl hinter THEN ausgeführt.

    IF

    Leitet die Fragestellung ein.

    bedingung

    Ist ein Ausdruck. Sollen mehrere kleine Bedingungen zu einer Frage zusammenge-faßt werden, können sie mit Bool'schen Operanden miteinander verknüpft werden.

    THEN

    Ist der JA-Zweig. Er wird durchlaufen, wenn die Bedingung erfüllt ist.

    ELSE

    Ist der NEIN-Zweig. Er wird durchlaufen, wenn die Bedingung nicht erfüllt ist. DieKodierung des Nein-Zweiges ist nicht zwingend.

    befehl

    Ist die Instruktion, die im Falle JA oder NEIN ausgeführt werden soll. Generell ist anden JA- oder NEIN-Zweig geknüpft nur eine Instruktion möglich. Sollen mehrere Be-fehle ausgeführt werden, sind sie als Befehlsfolge zwischen DO und END einzugren-zen, und werden wie ein Befehl behandelt.

    Beispiel:

    :IF ZAHL >= 20 & zahl

  • Kapitel 3 - Syntaxbeschreibung 251

    INDEX(string,suchbegriff ),suchbeginn

    Sucht nach einer Teilzeichenfolge in einem String. Rückgemeldet wird die Positionim String, an welcher der Suchbegriff gefunden wurde. Ist die Suche negativ, wird 0zurückgemeldet.

    string

    Ist die Zeichenkette, die durchsucht werden soll.

    suchbegriff

    Ist die Zeichenkette, nach der in string gesucht wird.

    suchbeginn

    Ist die Byteposition innerhalb string, an der die Suche beginnt. Ist der Parameter nichtangegeben, beginnt die Suche auf Stelle 1.

    Beispiele:

    SAY INDEX('Schniedelwutz','nie') 4SAY INDEX('Syntaxaufbau','au') 7SAY INDEX('Syntaxaufbau','au',10) 11SAY INDEX('Syntaxaufbau','abc') 0

    :SAY 'Zu durchsuchende Zeichenfolge'PULL str1SAY 'Suchkriterium'PULL str2IF INDEX(str1,str2) > 0 THEN

    SAY str2 'gefunden auf Stelle' INDEX(str1,str2)ELSE SAY str2 'in' str1 'nicht vorhanden':

    INDEX()

    RE

    XX

    -Fu

    nktio

    n

  • REXX unter MVS-TSO/E252

    INSERT(str1,str2 ),

    pos ,länge ,füll

    Fügt eine Zeichenfolge (str1) in eine bestehende Zeichenfolge (str2) an der angege-benen Position (pos) ein. Ist die Längenangabe größer als die einzufügende Zei-chenfolge, wird mit dem angegebenen Füllzeichen aufgefüllt (Standard ist BLANK).

    str1

    Zeichenfolge, in die eingefügt werden soll.

    str2

    Zeichenfolge, die eingefügt werden soll.

    pos

    Position innerhalb str1, an der das Einfügen stattfinden soll.

    länge

    Anzahl Byte der einzufügenden Zeichenfolge. Ist der Wert ungleich der Länge dereinzufügenden Zeichenfolge, wird diese entweder beschnitten oder mit dem vorgese-henen Füllzeichen gedehnt.

    füll

    Füllzeichen, sofern die angegebene Länge größer der einzufügenden Zeichenfolgeist.

    Beispiele:

    SAY INSERT('ist ','Hans doof',6) 'Hans ist doof'SAY INSERT(' doof','Hans ist') 'Hans ist doof'SAY INSERT('123','abc',5) 'abc 123'SAY INSERT('123','abc',5,6) 'abc 123 'SAY INSERT('123','abc',5,6,'-') 'abc--123---'SAY INSERT('123','abc',5,,'-') 'abc--123'

    INSERT()

    RE

    XX

    -Fu

    nkt

    ion

  • Kapitel 3 - Syntaxbeschreibung 253

    INTERPRET ausdruck

    Interpretiert einen Ausdruck als Befehl und führt ihn aus. INTERPRET muß immerdann eingesetzt werden, wenn Teile eines Befehles als Variablen vorliegen und zurAusführung eine vorherige Variablensubstitution nötig ist (Variablen werden durchihre Inhalte ersetzt).

    Über die Instruktion INTERPRET lassen sich schöne Ergebnisse erzielen. Leiderkann der Befehl nicht eingesetzt werden, wenn ein REXX-Programm kompiliert wird.INTERPRET wird vom Compiler nicht unterstützt.

    Beispiele:

    /* REXX **********************************/do forever

    clearsay "REXX-Befehl eingeben"pull cmdif length(cmd)=0 then leaveinterpret cmdsay "Weiter mit "pull

    endexit

    :DO cnt = 1 TO max

    INTERPRET "eingabe"cnt "=" ein.cntEND:

    :pgms = "POKER BLK_JACK MASTER"SAY "1 = Poker"SAY "2 = Black Jack"SAY "3 = Master Mind"SAY "Eingabe?"PULL auswINTERPRET "CALL" WORD(pgms,ausw):

    INTERPRET

    RE

    XX

    -Instru

    ktion

  • REXX unter MVS-TSO/E254

    ITERATEvarname

    Steuert den Fluß in einer Verarbeitungsschleife. Über Iterate wird die Schleife ab derentsprechenden Stelle nach unten einmal durchlaufen, ohne daß die in der Schleifekodierten Befehle ausgeführt werden. Subjektiv gewinnt man den Eindruck, ITERA-TE würde auf direktem Weg an den Schleifenkopf zurückkehren.

    varname

    Ist kein Variablenname angegeben, wirkt ITERATE in der Schleife, in der es kodiertsteht. Anderenfalls nimmt es Bezug auf eine Schleifen-Steuervariable (kann die akti-ve Schleife sein, muß aber nicht), deren Schleife für einen Durchlauf zu keinen Aktio-nen führt. In diesem Fall wird die aktive Schleife unmittelbar verlassen (wie LEAVE).

    Hinweis:

    Werden in ineinander verschachtelten Schleifen gleichnamige Steuervariablen be-nutzt, wirkt ITERATE auf die innerste davon.

    Beispiele:

    :DO FOREVER

    SAY "Zahl eingeben (ENTER = Ende)"PULL zahlIF LENGTH(zahl) = 0 THEN LEAVEIF DATATYPE(zahl) = "CHAR" THEN ITERATE/* Hier liegt die Verarbeitung */

    END::DO a=1 TO 3

    DO b=0 TO 9IF b = 4 THEN ITERATE a

    SAY a!!bEND

    END/* gibt die Zahlen 10,11,12,13,30,31,32,33 aus */:

    ITERATE

    RE

    XX

    -In

    stru

    ktio

    n

  • Kapitel 3 - Syntaxbeschreibung 255

    JUSTIFY(string,länge ),füllzeichen

    Formatiert Worte innerhalb eines Strings, indem die aktuelle Stringlänge auf die an-gegebene Länge geändert wird. Standardfüllzeichen ist BLANK.

    string

    Ist die Wortkette, deren Länge verändert werden soll.

    länge

    Ist die Länge in Byte, auf welche die Wortkette geändert werden soll.

    füllzeichen

    Wird zum Auffüllen der Wortzwischenräume genutzt. Standardfüllzeichen ist BLANK.

    Beispiele:

    SAY JUSTIFY('Hans ist doof',15) 'Hans ist doof'SAY JUSTIFY('Hans ist doof',9) 'Hans ist'SAY JUSTIFY('Hans ist doof',8) 'Hans ist'SAY JUSTIFY('Hans ist doof',15,'-') 'Hans--ist--doof'

    JUSTIFY()

    RE

    XX

    -Fu

    nktio

    n

  • REXX unter MVS-TSO/E256

    LASTPOS(suchbegriff,string ),suchbeginn

    Durchsucht eine Zeichenkette von rechts nach links und meldet die Position des ge-fundenen Suchbegriffes. Ist die Suche erfolglos, wird 0 zurückgemeldet. Die Funktionentspricht dem Gegenteil von INDEX().

    suchbegriff

    Zeichenfolge, deren Position innerhalb einer Zeichenkette ermittelt werden soll.

    string

    Zeichenkette, die zu durchsuchen ist.

    suchbeginn

    Startposition für die Suche. Wird der Parameter nicht angegeben, beginnt die Suchebeim letzten Byte der zu durchsuchenden Zeichenkette.

    Beispiele:

    SAY LASTPOS(' ','Hans ist doof') 9SAY LASTPOS(' ','Hansistdoof') 0SAY LASTPOS(' ','Hans ist doof',8) 5

    LASTPOS()

    RE

    XX

    -Fu

    nkt

    ion

  • Kapitel 3 - Syntaxbeschreibung 257

    LEAVEvarname

    LEAVE führt zum unmittelbaren Verlassen einer DO-Schleife (nicht der einfachenDO-Verarbeitung in der Form DO;instruktionen;END). Die Verarbeitung innerhalb derProzedur wird hinter dem zu DO gehörenden END fortgesetzt. Wird eine DO-Schleifemit einer Steuervariablen durch LEAVE vorzeitig verlassen, enthält diese Steuerva-riable außerhalb der Schleife den Wert, der ihr zum Zeitpunkt des LEAVE zugeordnetwar. Durch LEAVE kann immer nur die Schleife verlassen werden, in welcher derBefehl steht. Ein Sprung aus mehreren Schleifen ist mit einer LEAVE-Instruktion nichtmöglich.

    varname

    Ist kein Variablenname angegeben, wirkt LEAVE in der Schleife, in der es kodiertsteht. Anderenfalls nimmt es Bezug auf eine Schleifen-Steuervariable (kann die akti-ve Schleife sein, muß aber nicht), deren Schleife verlassen werden soll.

    Hinweis:

    Werden in ineinander verschachtelten Schleifen gleichnamige Steuervariable benutzt,wirkt LEAVE auf die innerste davon.

    Beispiel:

    :DO ende = 1

    SAY "Waehlen Sie:":SAY "E = ENDEDO UNTIL ausw >=1 & ausw

  • REXX unter MVS-TSO/E258

    LEFT(string,länge ),füllzeichen

    Übergibt eine Zeichenfolge in der angegebenen Länge. Situationsabhängig wird nachder angegebenen Anzahl Byte auf der rechten Seite abgeschnitten oder mit demangegebenen Füllzeichen aufgefüllt (Standard ist BLANK). Die LEFT-Funktion istgleichzusetzen mit SUBSTR(string,1,länge).

    string

    Zeichenfolge, von der linksbündig die entsprechenden Zeichen zu übernehmen sind.

    länge

    Anzahl Byte ab Position 1. Ist die Zeichenfolge kürzer als die angegebene Länge,wird sie auf die entsprechende Länge aufgefüllt. Ist die Zeichenfolge länger als dieangegebene Länge, wird sie beschnitten.

    füllzeichen

    Sofern die Zeichenfolge kürzer der angegebenen Länge ist, wird sie mit dem angege-benen Füllzeichen aufgefüllt. Ist kein Füllzeichen angegeben, wird als FüllzeichenBLANK genutzt.

    Beispiele:

    LEFT('Hans ist doof',15) 'Hans ist doof 'LEFT('Hans ist doof,15,'.') 'Hans ist doof..'LEFT('Hans ist doof',4) 'Hans'

    :IF DATATAPE(LEFT(var,1),M)=0 THEN

    SAY 'Stelle 1 von' var 'ist kein Buchstabe':

    LEFT()

    RE

    XX

    -Fu

    nkt

    ion

  • Kapitel 3 - Syntaxbeschreibung 259

    LENGTH(string)

    Übergibt die Länge eines Strings in Anzahl Byte.

    Beispiele:

    SAY LENGTH('Hans ist doof') 13SAY LENGTH('abcdefghijklm') 13SAY LENGTH('') 0

    :SAY 'Dateinamen angeben (ENTER = Ende)'DO FOREVER

    PULL dateiIF LENGTH(datei)=0 THEN EXIT:

    END:

    LENGTH()

    RE

    XX

    -Fu

    nktio

    n

  • REXX unter MVS-TSO/E260

    LINESIZE()

    Liefert die Zeilenlänge des Terminals minus 1 (Steuerzeichen des Interpreters). Läuftdas Programm, das die Funktion aufruft, im TSO-Hintergrund (über JCL in Verbin-dung mit //name EXEC PGM=IKJEFT01), wird immer eine Breite von 132 ausgege-ben.

    Beispiel:

    :SAY CENTER("Zentrierte Ueberschrift",LINESIZE(),"*")

    LINESIZE()

    RE

    XX

    -Fu

    nkt

    ion

  • Kapitel 3 - Syntaxbeschreibung 261

    "LISTA "ST H

    Listet alle zugeordneten Dateien auf. Wird das Kommando im Verlauf einer TSO-Sitzung mehrmals eingegeben, wird sich der Umfang der Meldungsausgabe vergrö-ßern.

    Beispiel LISTA

    TERMFILER01.HELPSYS1.HELPSE01.TOOL.MSGSSE01.TOOL.PANELSUSER01.UCATTMVSXA.UCATWITTEMA.PROFILEWITTEMA.MVS.CLISTWITTEMA.MVS.CNTL:

    Beispiel LISTA ST

    :WITTEMA.LIB.ASM GENASM KEEPWITTEMA.LIB.COB GENCOB KEEPSE01.LIB.DUMMY SYSPROC KEEPWITTEMA.LIB.CLIST KEEPSE01.TOOL.CLIST KEEP:

    LISTA

    TS

    O-B

    efeh

    l

    TS

    O-B

    efehl

  • REXX unter MVS-TSO/E262

    Beispiel LISTA H

    —DSORG—CREATED—EXPIRES—SECURITY:WITTEMA.KURS.DATA132 PO 05/08/89 00/00/00 NONEWITTEMA.MVS.CLIST PO 02/06/86 00/00/00 NONEWITTEMA.SEQ.ADR1 PS 06/08/88 00/00/00 NONE:

    Beispiel LISTA ST H

    —DSORG—CREATED—EXPIRES—SECURITY—DDNAME—DISP:WITTEMA.MVS.LOAD PO 05/08/89 00/00/00 NONE STEPLIB KEEPWITTEMA.MVS.CLIST PO 02/06/86 00/00/00 NONE SYSPROC KEEPWITTEMA.TEST.CLIST PO 06/08/88 00/00/00 NONE KEEP:

    Returncodes

    0 ➪ Normales Ende12 ➪ Fehlerhafte Ausführung, Fehlermeldung wird ausgegeben.

    LISTA

    TS

    O-B

    efehlT

    SO

    -Bef

    ehl

  • Kapitel 3 - Syntaxbeschreibung 263

    "LISTC "LVL(prefix)

    Gibt eine Liste aller katalogisierten Dateien der eigenen Benutzerkennung bzw. mitdem angegebenen Prefix aus.

    LVL(prefix)

    Bestimmt den FIRST QUALIFIER einer Datei, deren Katalogeinträge aufgelistet wer-den sollen. Wird diese Angabe weggelassen, entscheidet das TSO-Benutzerprofil(PREFIX(???)), was gezeigt wird. Im allgemeinen werden dann die Dateinamen auf-gelistet, die mit der Benutzerkennung des Aufrufers beginnen.

    Beispiel LISTC L(XWITT)

    :NONVSAM ———— WITTEMA.AUSB.CNTL IN -CAT — USER01.UCATNONVSAM ———— WITTEMA.BACKUP.BANKLIST IN CAT —— USER01.UCATNONVASM ———— WITTEMA.LIB.CNTL IN CAT —— USER01.UCATNONVSAM ———— WITTEMA.MVS.CLIST IN CAT —— USER01.UCAT:

    Returncodes

    0 ➪ Normales Ende4 ➪ Befehl wurde erfolgreich ausgeführt. Eine Warnungsmeldung

    wurde ausgegeben.8 ➪ Befehl wurde ausgeführt, aber einige Parameter wurden ignoriert.

    12 ➪ Keine Befehlsausführung16 ➪ Schwerer Fehler

    LISTC

    TS

    O-B

    efeh

    l TSO

    -Befeh

    l

  • REXX unter MVS-TSO/E264

    "LISTDS dateiname "ST H M

    Gibt eine Liste der Kenngrößen der angegebenen Datei aus. Wenn ein Dateinameinklusive Mitgliedsname angegeben wird, werden Informationen über das Mitgliedaus dem Directory ausgegeben.

    ST

    Liefert den Status einer Datei. Über die Standardinformationen hinaus werden DD-Name und Disposition ausgegeben.

    H

    Ist erlaubte Abkürzung für History.

    M

    Wird M für MEMBERS angegeben, werden im Falle einer PO-Datei die Namen derMitglieder der Datei ausgegeben.

    Beispiel LISTDS MVS.DATA

    XWITT.MVS.DATA—RECFM-LRECL-BLKSIZE-DSORG FB 132 15444 PO—VOLUMES— USER01

    LISTDS

    TS

    O-B

    efeh

    l

  • Kapitel 3 - Syntaxbeschreibung 265

    Beispiel LISTDS PDF.DATA STATUS

    XWITT.MVS.DATA—RECFM-LRECL-BLKSIZE-DSORG—DDNAME—DISP FB 132 15444 PO SYS00043 KEEP—VOLUMES— USER01

    Beispiel LISTDS PDF.DATA STATUS MEMBER

    XWITT.MVS.DATA—RECFM-LRECL-BLKSIZE-DSORG—DDNAME—DISP FB 132 15444 PO SYS00043 KEEP—VOLUMES— USER01—MEMBERS—ADR1ADR2ADR3ERFASSMISCH1MISCH2TEST:

    Returncodes

    0 ➪ Normales Ende12 ➪ Keine Befehlsausführung, Fehlermeldung wird ausgegeben.

    LISTDS

    TS

    O-B

    efeh

    l

    TS

    O-B

    efehl

  • REXX unter MVS-TSO/E266

    LISTDSI()

    LISTDSI(dateiname )DIRECTORY RECALLNODIRECTORY

    Füllt mit den Kenngrößen der angegebenen Datei eine Vielzahl von Variablen. Gene-rell können mit LISTDSI nur Informationen von Dateien ermittelt werden, die auf einerMagnetplatte (DASD) liegen.

    Wird die LISTDSI-Funktion für eine VSAM-Datei genutzt, werden nur der Plattenna-me, die Gerätegruppe und die Dateiorganisationsform ausgegeben. Alle anderenVariablen werden mit einem Fragezeichen gefüllt.

    DIRECTORY

    Führt im Falle einer PO-Datei zur Übergabe der DIRECTORY-Informationen(NODIRECTORY=Standard).

    RECALL

    Veranlaßt das Rückspeichern einer Datei, um an die Dateiinformationen zu gelan-gen, wenn diese von DFHSM auf eine Magnetplatte ausgelagert wurden. Ein Rück-holen von Magnetband oder Kassette wird nicht veranlaßt.

    Folgende Variablen werden durch das LISTDSI-Kommando gefüllt:

    SYSDSNAME

    Enthält den vollqualifizierten Dateinamen.

    SYSVOLUME

    Enthält den Namen des Datenträgers, auf dem die Datei abgelegt ist.

    SYSUNIT

    Übergibt den Gerätegruppen-Namen des Datenträgers, auf dem die Datei abgelegtist.

    Erw

    eite

    rte

    TS

    O-F

    un

    ktio

    n

  • Kapitel 3 - Syntaxbeschreibung 267

    SYSDSORG

    Liefert die Dateiorganisationsform. Im einzelnen können folgende Variableninhaltegebildet werden:

    PS Physical sequential

    PO Partitioned organization

    DA Direct access

    IS Index sequential

    VS VSAM

    ??? Unbekannt

    SYSRECFM

    Enthält das Satzformat (3 Werte sind kombinierbar). Die Aussagen im einzelnen sind:

    U Undefiniert (Lademodule)

    F Feste Länge

    V Variable Länge

    B Geblockt

    A ASCII-Drucksteuerzeichen

    M Maschinencode-Steuerzeichen

    SYSLRECL

    Übergibt die logische Satzlänge der Datei.

    SYSBLKSIZE

    Blockgröße

    SYSALLOC

    Zugeordneter Bereich für eine Datei (in space units).

    LISTDSI()

    Erw

    eite

    rte

    TS

    O-F

    un

    ktio

    n

    Erw

    eiterte TS

    O-F

    un

    ktion

  • REXX unter MVS-TSO/E268

    SYSUSED

    Benutzter Bereich für eine Datei (in space units).

    SYSPRIMARY

    Ist die Wertangabe der Primärzuordnungsgröße.

    SYSSECONDS

    Ist die Wertangabe der Sekundärzuordnungsgröße.

    SYSUNITS

    Bereichsgrößenangabe für eine Datei, die bei Erstellung angegeben wurde (spaceunits). Dabei kann gemeldet werden:

    CYLINDER in Zylinder

    TRACK in Spuren

    BLOCK in Blöcken

    ???????? unbekannt

    SYSEXTENTS

    Anzahl der gebildeten Teilbereiche. Nähert sich der Wert auf 16 (bei VSAM 119, bzw.121), können Probleme wegen zu klein werdender Dateien frühzeitig erkannt wer-den.

    SYSCREATE

    Erstellungsdatum einer Datei in der Form jjjj/ttt.

    SYSREFDATE

    Datum des letzten Zugriffes auf eine Datei (1989/306).

    SYSEXDATE

    Verfalldatum oder Freigabedatum einer Datei, sofern es bei Erstellung der Datei an-gegeben wurde.

    LISTDSI()

    Erw

    eite

    rte

    TS

    O-F

    un

    ktio

    n

  • Kapitel 3 - Syntaxbeschreibung 269

    SYSPASSWORD

    Paßwortschutz durch den TSO-Befehl PROTECT. Die möglichen Aussagen sind:

    NONE kein Passwortschutz

    READPW zum Lesen benötigt

    WRITE Schreibschutz gesetzt

    SYSRACFA

    Macht Mitteilung über den RACF-Schutz für eine Datei durch folgende möglichenAussagen:

    NONE kein RACF-Schutz

    GENERIC Generic Profil

    DISCRETE Discrete Profil

    SYSTRKSCYL

    Spuren pro Zylinder von SYSUNIT. Dieser Wert ist oftmals eine wertvolle Hilfe für diesinnvolle Planung bei der Größenbestimmung für eine Datei, wenn die Zuordnungnicht in Blöcken stattfinden und der angeforderte Plattentyp variabel sein soll.

    SYSBLKSTRK

    Blöcke pro Spur von SYSUNIT. Dieser Wert ist oftmals eine wertvolle Hilfe für diesinnvolle Planung bei der Größenbestimmung für eine Datei, wenn die Zuordnungnicht in Blöcken stattfinden und der angeforderte Plattentyp variabel sein soll.

    SYSADIRBLK

    Zugeordnete DIRECTORY-Blocks. Diese Variable wird nur bei einer PO-Datei in Ver-bindung mit dem Operanden DIRECTORY gefüllt.

    SYSUDIRBLK

    Benutzte DIRECTORY-Blocks. Diese Variable wird nur bei einer PO-Datei in Verbin-dung mit dem Operanden DIRECTORY gefüllt.

    LISTDSI()

    Erw

    eite

    rte

    TS

    O-F

    un

    ktio

    n

    Erw

    eiterte TS

    O-F

    un

    ktion

  • REXX unter MVS-TSO/E270

    LISTDSI()

    SYSMEMBERS

    Anzahl der vorhandenen Mitglieder. Diese Variable wird nur bei einer PO-Datei inVerbindung mit dem Operanden DIRECTORY gefüllt.

    SYSREASON

    Reasoncode von LISTDSI. Die nachfolgende Übersicht beschreibt die möglichenReason Codes und ihre Bedeutung:

    Code Bedeutung

    0 Normales Ende1 Fehler2 SVC99-Fehler3 Kein Zugriff auf die angegebene Datei möglich4 Fehler bei Umsetzung des UNIT-Namens5 Datei nicht katalogisiert6 OBTAIN-Macro-Fehler7 Fehler beim Aufsuchen des Gerätetyps8 Datei liegt nicht auf einer Platte9 Datei wurde von HSM ausgelagert und NORECALL war angegeben.11 Directory-Informationen waren gewünscht, aber für den Zugriff be-

    steht keine Berechtigung.12 VSAM-Dateien werden nicht unterstützt.13 Datei kann nicht geöffnet werden.14 Gerätetyp in UCB-Tabelle nicht gefunden17 SYSTEM- oder Benutzer-ABEND ist aufgetreten.18 Nicht alle Informationen verfügbar.19 Datei erstreckt sich über mehrere Datenträger20 Gerätetyp in Gerätetabelle nicht gefunden21 Katalogfehler beim Versuch, die Datei zu lokalisieren.22 Datenträger nicht montiert.23 Permanenter E/A-Fehler auf Datenträger24 Datei nicht gefunden25 Datei auf einem Nicht-DASD-Datenträger migriert26 Datei liegt auf einem Massenspeicher27 Der Datei ist kein Datenträger zugewiesen.28 Der DD-Name muß ein bis acht Stellen lang sein.29 Datei- oder DD-Name muß angegeben werden.

    RE

    XX

    -In

    stru

    ktio

    n

  • Kapitel 3 - Syntaxbeschreibung 271

    Beispiel:

    :SAY "Name Eingabedatei (ENTER = Ende)"SAY "sequentielle Datei, oder PO-Datei mit Member"SAY "maximale verarbeitbare Satzlänge 132 Byte"DO FOREVER

    PULL dateiIF LENGTH(datei) = 0 THEN EXITIF SYSDSN("'"datei"'") = "OK" THEN DOdmy = LISTDSI("'"datei"'")SELECT

    WHEN sysdsorg >< "PS" & sysdsorg >< "PO" THENM=datei "hat weder PS- noch PO-Format"

    WHEN sysdsorg = "PO" & RIGHT(datei,1) >< ")" THENM="Mitgliedsangabe Fehlt"

    WHEN syslrecl > 132 THENM="Satzlaenge groesser 132"

    OTHERWISE LEAVEENDELSE M = datei "nicht verfuegbar"SAY M " - Bitte Eingabe wiederholen"

    END:

    Returncodes

    0 ➪ Normales Ende4 ➪ Einige Informationen nicht verfügbar

    LISTDSI()

    RE

    XX

    -Fu

    nktio

    n

  • REXX unter MVS-TSO/E272

    MAKEBUF

    "MAKEBUF "

    Erzeugt einen neuen Puffer im STACK. Der standardgemäß initialisierte Puffer imSTACK ist Puffer 0. MAKEBUF kann prinzipiell beliebig viele Pufferbereiche anlegen,wobei der erste durch MAKEBUF angelegte Puffer dann entsprechend Puffer 1 ist,der zweite Puffer 2 und so weiter.

    Den wievielten Puffer die Instruktion MAKEBUF angelegt hat, kann im unmittelbarenAnschluß an den Befehl aus dem rückgemeldeten Returncode (RC) abgelesen wer-den (siehe auch "QBUF", "DROPBUF" und "QELEM".).

    Beispiel:

    :"MAKEBUF"SAY "Anzahl vorhandener Puffer:" RC:

    TS

    O-R

    EX

    X-B

    efeh

    l

  • Kapitel 3 - Syntaxbeschreibung 273

    MAX(zahl )

    ,zahl

    Übergibt den Maximalwert aus einer Folge von Zahlen.

    Beispiele:

    SAY MAX(12,7,3,9) 12SAY MAX(3.65,35,0.3) 35SAY MAX(-6,-4.3,-74) -4.3

    MAX()

    RE

    XX

    -Fu

    nktio

    n

  • REXX unter MVS-TSO/E274

    MIN(zahl )

    ,zahl

    Übergibt den Minimalwert aus einer Folge von Zahlen.

    Beispiele:

    SAY MIN(12,7,3,9) 3SAY MIN(3.65,35,0.3) 0.3SAY MIN(-6,-4.3,-74) -74

    MIN()

    RE

    XX

    -Fu

    nkt

    ion

  • Kapitel 3 - Syntaxbeschreibung 275

    MSG( )ONOFF

    Steuert die Anzeige von Meldungen der TSO-Kommandos. Wird in der Klammer derFunktion kein Wert angegeben, wird die aktuelle Einstellung ausgegeben.

    ON

    TSO-Kommandos liefern Ihre Meldungen wie vorgesehen am Terminal ab.

    OFF

    Die Meldungsausgabe der TSO-Kommandos wird unterdrückt.

    Beispiele:

    :dmy=MSG("OFF")"SUBMIT * END(##) JOBCHAR(A)"SAY "Job" USERID()"A uebergeben um" LEFT(TIME(),5):

    :dmy=MSG("OFF")msg="Datei" dataset"DEL '"dataset"'"IF RC > 0 THEN msg=msg "nicht"say msg "geloescht":

    MSG()

    Erw

    eiterte TS

    O-F

    un

    ktion

  • REXX unter MVS-TSO/E276

    "NEWSTACK "

    Mit NEWSTACK kann ein neuer Stackbereich definiert werden. Gleichzeitig werdenalle Puffer und Elemente isoliert.

    Nachdem NEWSTACK ausgeführt ist, werden alle Elemente, die durch die Instruktio-nen PUSH oder QUEUE in einen Pufferbereich gestellt werden, im neuen STACKabgelegt. Wird in einer EXEC eine Subroutine oder Funktion aufgerufen, wird vondiesen (soweit nötig) ebenfalls der neue STACK benutzt. Elemente in einem hierar-chisch darüberliegenden Stackbereich können nicht "angefaßt" werden.

    Prinzipiell können mehrere Stackbereiche definiert werden, es können jedoch nur dieElemente des jeweils zuletzt erzeugten Stackbereiches angesprochen werden. Uman die hierarchisch höher liegenden Elemente und Puffer zu gelangen, müssen dieeinzelnen STACK-Bereiche durch DELSTACK aufgelöst werden (siehe auch QSTACKund DELSTACK).

    Beispiel:

    :"NEWSTACK""QSTACK"SAY "Anzahl vorhandener STACK's:" RC:

    NEWSTACK

    TS

    O-R

    EX

    X-B

    efeh

    l

  • Kapitel 3 - Syntaxbeschreibung 277

    NOP

    NOP ist eine sogenannte DUMMY-Instruktion (No OPeration), ohne weitere Bedeu-tung. In der Praxis wird NOP als Platzhalter einer THEN oder ELSE Klausel benutzt.

    Soll in einer Mehrfachabfrage der NEIN-Zweig nicht kodiert werden, ist dies (abhän-gig von der installierten Version) oft syntaktisch nicht möglich. Auch an dieser Stellewird oft NOP eingesetzt.

    Beispiele:

    :IF a < b THEN NOPELSE DO/* Befehle */END:

    :SELECT

    WHEN DATATYPE(z) = "CHAR" THEN SAY "Falsches Format"WHEN z // 2 = 0 THEN SAY z "ist eine gerade Zahl"OTHERWISE NOP

    END:

    :UPPER nameSELECT

    WHEN name='MEIER' THEN NOP /* keine Aktion */WHEN name='HUBER' THEN say 'Hallo Otto'OTHERWISE SAY 'Hallo Stranger'

    END:

    Würde hier die NOP-Anweisung weggelassen werden, würde die nachfolgende WHEN-Anweisung als erste Instruktion nach THEN interpretiert und zu einem Syntaxfehlerführen. NOP ist eine wirkliche Instruktion (auch wenn definitiv nichts getan wird) undin diesem Fall hinter THEN zwingend erforderlich.

    NOP

    RE

    XX

    -In

    stru

    ktio

    n

    RE

    XX

    -Instru

    ktion

  • REXX unter MVS-TSO/E278

    NUMERIC DIGITSwert

    FORMSCIENTIFICENGINEERING

    ausdruckVALUE

    FUZZwert

    NUMERIC wird benötigt, um die standardgemäße Auflösung arithmetischer Opera-tionen zu verändern. Die einzelnen Optionen werden im folgenden kurz beschrieben.

    NUMERIC DIGITS

    Steuert die Rechengenauigkeit, in der arithmetische Operationen oder arithmetischeBuilt-in-Funktionen ausgeführt werden. Ist kein Wert angegeben, wird als Standard 9angenommen. Anderenfalls wird das Ergebnis auf die Anzahl Nachkommastellen-1(der Dezimalpunkt wird mitgezählt) gerundet. Der angegebene Wert muß eine inte-gere positive Zahl und größer als der Wert in NUMERIC FUZZ sein.

    NUMERIC FORM

    Steuert, in welcher Form Exponentialdarstellung in REXX durchgeführt wird. Folgtkeine weitere Angabe, wird SCIENTIFIC (wissenschaftlich) angenommen, was be-wirkt, daß bei arithmetischen Operationen oder Funktionen nur eine Vorkommastelleungleich Null ausgegeben wird. Die Angabe VALUE ausdruck kann genutzt werden,wenn die Aussage für NUMERIC FORM über eine Variable getätigt werden soll. So-fern die Variable nicht mit einem Sonderzeichen beginnt, kann die Angabe VALUEentfallen.

    NUMERIC FUZZ

    Steuert für die Rechengenauigkeit, wie viele Nachkommastellen bei einem numeri-schen Vergleich ignoriert werden. Ist kein Wert angegeben, wird 0 angenommen.Anderenfalls wird entsprechend gerundet. Mögliche Angaben sind Werte zwischen 0und einer Zahl, kleiner der Angabe unter NUMERIC DIGITS.

    NUMERIC

    RE

    XX

    -In

    stru

    ktio

    n

  • Kapitel 3 - Syntaxbeschreibung 279

    Divisionsbeispiel:

    /**REXX********************************************/SAY 'Zahl eingeben:'PULL ZSAY 'Divisor eingeben:'PULL DIF D=0 THEN SAY 'Division mit Null nicht erlaubt'ELSE DO

    SAY 'Dezimal:' Z ':' D '=' Z / DSAY 'Integer:' Z ':' D '=' Z % D 'Rest' Z // D

    END

    Ablauf:

    Zahl eingeben:23Divisor eingeben:7Dezimal: 23 : 7 = 3.285714286Integer: 23 : 7 = 3 Rest 2

    Wird in der Prozedur keine anderweitige Aussage getroffen, werden Zahlen mit einerGenauigkeit von 9 Ziffern hinter dem Komma berechnet und ausgegeben. Um davonabweichen zu können, kann die Funktion NUMERIC DIGIT angewandt werden (sieheBeispiel auf der nächsten Seite).

    NUMERIC

    RE

    XX

    -In

    stru

    ktio

    n

    RE

    XX

    -Instru

    ktion

  • REXX unter MVS-TSO/E280

    Divisionsbeispiel:

    /**REXX*** Division *******************************/SAY 'Zahl eingeben: 'PULL ZSAY 'Nachkommastellen:'PULL STST=ST+1SAY 'Divisor eingeben:'PULL DIF D=0 THEN SAY 'Division mit Null nicht erlaubt'ELSE DO

    ALT=DIGITS()NUMERIC DIGITS STSAY 'Dezimal:'Z ':' D '=' Z / DSAY 'Integer:' Z ':' D '=' Z % D 'Rest' Z // DNUMERIC DIGITS ALT

    END

    Ablauf:

    Zahl eingeben:23Nachkommastellen:2Divisor eingeben:7Dezimal: 23 : 7 = 3.29Integer: 23 : 7 = 3 Rest 2

    Um nach der Operation zum richtigen Wert für DIGITS zurückkehren zu können, wirddieser über DIGITS() in der Variablen ALT abgelegt und nach der Division wiedergesetzt.

    NUMERIC

    RE

    XX

    -In

    stru

    ktio

    n

  • Kapitel 3 - Syntaxbeschreibung 281

    OUTTRAP( )OFFvariable

    ,max ,

    CONCATNOCONCAT

    Gibt ohne weitere Angaben den Namen der Variablen bekannt, in die Command-Output umgeleitet werden soll, oder "OFF", wenn keine Umleitung erfolgt.

    OFF

    Die Umleitung von Bildschirmmeldungen in Variablen wird ausgeschaltet.

    variable

    Variablenstamm oder Variablen-Prefix, der den Command-Output übernehmen soll.Die Angabe eines Variablenstammes hat den Vorteil, daß die entgegengenommenenInformationen in einer Verarbeitungsschleife indiziert abgearbeitet werden können(aus diesen Grund wird in der Praxis im allgemeinen nur von dieser Möglichkeit Ge-brauch gemacht).

    max

    Die maximale Zahl der TSO-Befehlsausgabezeilen, die umgeleitet werden sollen.Wird an Stelle dieses Wertes ein Stern zwischen Apostrophen ('*') angegeben oderdie Wertangabe weggelassen, werden alle Befehlsausgabezeilen in Variablen umge-leitet. Der Standardwert bei fehlender Angabe ist 999.999.999.

    CONCAT

    Steuert, daß der Output aller TSO-Kommandos in Variablen umgeleitet wird, bis diemaximale Anzahl der Ausgabezeilen erreicht ist. Wenn beispielsweise der erste Be-fehl drei Ausgabezeilen erzeugt, werden diese in Variablen überstellt, die mit 1, 2 und3 enden. Gibt der nächste Befehl zwei Ausgabezeilen aus, werden diese in Variablenabgelegt, die mit 4 und 5 enden. Standardwert bei fehlender Angabe ist CONCAT.

    OUTTRAP()

    Erw

    eite

    rte

    TS

    O-F

    un

    ktio

    n

    Erw

    eiterte TS

    O-F

    un

    ktion

  • REXX unter MVS-TSO/E282

    NOCONCAT

    Bezogen auf das unter CONCAT beschriebene Beispiel würden hier bei der zweitenBefehlsausgabe die mit 1 und 2 endenden Variablen überschrieben, die durch denersten Befehl gefüllt wurden.

    Hinweise:

    Die Variablennamen, in die Command-Output umgeleitet wird, enden immer mit einerintegeren Zahl, beginnend mit 1. Alle unbenutzten Variablen zeigen auf ihren Namen.Die Anzahl der Ausgabezeilen oder, anders ausgedrückt, die Anzahl gebildeter Va-riablen kann in der Stammvariablen mit der Erweiterung 0 ermittelt werden.

    Wird aus einer Prozedur eine zweite aufgerufen, und wurde in der ersten die TSO-Befehlsausgabe umgeleitet, so gilt dies auch nach unten, solange, bis die erste Pro-zedur beendet wird oder die Umleitung durch die Option OFF aufgehoben wird.

    In Ergänzung zu den Variablen, welche die jeweiligen Befehlsausgabezeilen enthal-ten, legt OUTTRAP weitere Informationen in folgenden Variablen ab:

    variable0

    Enthält den größten Index ausgegebener Zeilen.

    variableMAX

    Enthält die maximale Anzahl Ausgabezeilen, die umgeleitet werden kann.

    variableTRAPPED

    Die Gesamtanzahl umgeleiteter Ausgabezeilen.

    variableCON

    Enthält den Status des CONCAT-Operanden (entweder CONCAT oder NOCONCAT).

    Auf den nachfolgenden Seiten zeigen zwei Beispiele die Anwendung der OUTTRAP-Funktion und die daraus resultierenden, in Variablen abgelegten Werte.

    OUTTRAP()

    Erw

    eite

    rte

    TS

    O-F

    un

    ktio

    n

  • Kapitel 3 - Syntaxbeschreibung 283

    Beispiel mit normalen Variablen:

    OUTTRAP("ABC",4,"CONCAT")

    Der erste Befehl erzeugt 3 Ausgabezeilen.

    ABC0 enthält 3ABC1 Befehl 1, Ausgabezeile 1ABC2 Befehl 1, Ausgabezeile 2ABC3 Befehl 1, Ausgabezeile 3ABC4 ABC4ABCMAX 4ABCTRAPPED 3ABCCON CONCAT

    Der zweite Befehl erzeugt zwei Ausgabezeilen, von denen die zweite Zeile nicht mehrumgeleitet wird.

    ABC0 enthält 4ABC1 Befehl 1, Ausgabezeile 1ABC2 Befehl 1, Ausgabezeile 2ABC3 Befehl 1, Ausgabezeile 3ABC4 Befehl 2, Ausgabezeile 1ABCMAX 4ABCTRAPPED 5ABCCON CONCAT

    OUTTRAP()

    Erw

    eite

    rte

    TS

    O-F

    un

    ktio

    n

    Erw

    eiterte TS

    O-F

    un

    ktion

  • REXX unter MVS-TSO/E284

    Beispiel mit Compound-Variablen:

    OUTTRAP("XYZ.",4,"NOCONCAT")

    Der erste Befehl erzeugt 3 Ausgabezeilen.

    XYZ.0 enthält 3XYZ.1 Befehl 1, Ausgabezeile 1XYZ.2 Befehl 1, Ausgabezeile 2XYZ.3 Befehl 1, Ausgabezeile 3XYZ.4 XYZ.4XYZ.MAX 4XYZ.TRAPPED 3XYZ.CON NOCONCAT

    Der zweite Befehl erzeugt zwei Ausgabezeilen, von denen die zweite Zeile nicht mehrumgeleitet wird.

    XYZ.0 enthält 2XYZ.1 Befehl 2, Ausgabezeile 1XYZ.2 Befehl 2, Ausgabezeile 2XYZ.3 Befehl 1, Ausgabezeile 1XYZ.MAX 4XYZ.TRAPPED 2XYZ.CON NOCONCAT

    OUTTRAP()

    Erw

    eiterte TS

    O-F

    un

    ktion

    Erw

    eite

    rte

    TS

    O-F

    un

    ktio

    n

  • Kapitel 3 - Syntaxbeschreibung 285

    Beispiele:

    OUTTRAP("ausgabe.")

    Leitet alle Ausgaben aller TSO-Kommandos zusammenhängend in den Variablen-stamm "AUSGABE." um.

    OUTTRAP(zeile,6,"NOCONCAT")

    Leitet sechs Ausgabezeilen in Variablen, beginnend mit "ZEILE" um, ohne die Aus-gabezeilen aus unterschiedlichen Kommandos zusammenzuhängen.

    OUTTRAP("temp",0)

    Unterdrückt die Ausgabe auf TSO-Kommandos hin.

    In nachfolgendem Beispiel soll eine Datei neu angelegt werden. Ist die Neuanlageerfolgreich, soll die alte Datei gelöscht werden. Ansonsten sollen die umgeleitetenFehlermeldungen ausgegeben werden:

    :OUTTRAP("var.")"ALLOC DA(neue.datei) LIKE(alte.datei) NEW"IF RC = 0 THEN

    "DELETE alte.datei"ELSE

    DO X = 1 TO VAR.0SAY '**ERROR**' VAR.X

    END:

    OUTTRAP()

    Erw

    eite

    rte

    TS

    O-F

    un

    ktio

    n

    Erw

    eiterte TS

    O-F

    un

    ktion

  • REXX unter MVS-TSO/E286

    OVERLAY(neu,ziel ),

    pos ,länge ,füll

    Überlagert die Ziel-Zeichenfolge an der angegebenen Position mit der neuen Zei-chenfolge. Wird eine Länge angegeben, die größer als die Länge der Ziel-Zeichenfol-ge ist, wird entsprechend mit dem Füllzeichen aufgefüllt.

    neu

    Zeichenfolge, die eine andere überlagern soll.

    ziel

    Zeichenfolge, auf die bezogen die Überlagerung stattfinden soll.

    pos

    Byteposition, an der die Überlagerung beginnt (Standard ist 1).

    länge

    Anzahl Byte der Überlagerung ab der angegebenen Position.

    füll

    Füllzeichen, falls die angegebene Länge größer der Länge von neu ist.

    Beispiele:

    SAY OVERLAY('d','mein') 'dein'SAY OVERLAY('.','abcde',3,2) 'ab. e'SAY OVERLAY('c','abbde',3) 'abcde'SAY OVERLAY('fgh','abcde',6) 'abcdefgh'SAY OVERLAY('123','abc',5,6,'-') 'abc-123---'

    a="Meier" 'Meier'SAY OVERLAY('G',a) 'Geier'

    OVERLAY()

    RE

    XX

    -Fu

    nktio

    n

    RE

    XX

    -Fu

    nkt

    ion

  • Kapitel 3 - Syntaxbeschreibung 287

    PARSE ARGUPPER EXTERNAL variable

    NUMERICPULLSOURCEVALUE WITH

    ausdruck

    VAR +zahl variable-zahl

    VERSION

    PARSE erlaubt die Zuordnung von Daten aus unterschiedlichen Quellen zu eineroder mehreren Variablen nach den Regeln für PARSING, die noch beschrieben wer-den. Wird die Option UPPER angegeben, werden die Inhalte der zuzuordnendenVariablen in Großschreibung umgesetzt, ansonsten nicht.

    Der Variablen wird das Ergebnis des Parsings zugewiesen. Sind mehrere Variablenangegeben, erfolgt die Zuweisung wortweise. Ist keine Variable angegeben, wird dieAktion soweit als möglich ausgeführt (durch PARSE PULL w