Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

CMDVAL Wert auf Datentyp überprüfen

&pagelevel(5)&pagelevel

Der Makro CMDVAL prüft, ob ein Wert zu einer SDF-Datentyp-Beschreibung passt. Der Makro übergibt das Resultat der Überprüfung und, wenn angefordert, eine SDF-Fehlermeldung in den Puffer PROT. Die Fehlermeldungen werden nicht auf SYSOUT ausgegeben. Zusätzlich kann überprüft werden, ob die Eingabezeichenfolge zu einem vorgegebenen Wildcard-Suchmuster passt.

Operation

Operanden

CMDVAL


INPUT = addr

[ ,DATATYP =   NOCHECK / INTEGER / INT64 / XSTRING / CSTRING / NAME / ALPHANAME / STRUCNAME / FILENAME / PARTFILE / TIME / DATE / COMPNAME / TEXT / CATID / KEYWORD / KEYNUMBER / VSN / XTEST / FIXED / DEVICE / PRODVERS / PPOSIXPATH / POSIXFILE ]

[ ,SHORTST = *ANY / integer]

[ ,LONGEST = *ANY / integer]

[ ,WCLOGL = *NONE / integer]

[ ,LOWDEC = 0 / integer]

[ ,HIGDEC = 0 / integer]

[ ,CONST = *NO / addr / (addr, ...)]

[ ,PATTERN = *NO / addr]

[ ,ATTRIB = { *NONE / ([NOCATID] [,NOUSERID] [,NOGENERATION] | [,NOVERSION] [,WILDCARD] [,KEYSTAR][,NOSEPERATORS] [,UNDERSCORE] [,NOODD] [,NOALIAS] [,VOLUMEONLY] [,NOUSERINT] | [,NOCORSTATE] [,ANYCORSTATE] [,WILDCONST] [,LOWERCASE] [,TEMPFILE] [,QUOTESMAND] [,ANYUSERINT] [,STDDISK])]

[ ,DEVCLAS = list-poss(2): DISK / TAPE ]

[ ,EXCDISK = *NONE / addr / (text8,...) ]

[ ,EXCTAPE = *NONE / addr / (text8,...) ]

[ ,PROT = *NO / addr]

[ ,PREFIX = C / p ]

[ ,MACID = MDV / mac]

[ ,MF = D / C / L / E ]

[ ,PARAM = addr ]

INPUT = addr
Zeichenfolge eines Wertes im variablen Satzformat (erstes Halbwort: Länge des Satzes, zweites Halbwort: Zeichen, mit dem auf die angegebene Satzlänge aufgefüllt wurde). Leerzeichen als Teil des Eingabewerts sind nicht erlaubt (Ausnahme: Leerzeichen innerhalb eines Wertes vom Typ <c-string> oder <text>).
addr muss auf Wortgrenze ausgerichtet sein.

DATATYP =
Angabe des Datentyps, auf den der Wert überprüft wird (siehe auch Anweisung ADD-VALUE TYPE=...).

NOCHECK
Keine Datentypüberprüfung erfolgt. Es soll nur geprüft werden, ob die eingegebene Zeichenfolge zu einem Wildcard-Suchmuster passt. Der Parameter PATTERN ist bei Angabe von NOCHECK Pflichtparameter.

Die folgende Tabelle zeigt die möglichen Datentypüberprüfungen:

DATATYP =

Datentyp, auf den der Wert überprüft wird

INTEGER

<integer>

INT64<long-integer>

XSTRING

<x-string>

CSTRING

<c-string>

NAME

<name>

ALPHANAME

<alphanum-name>

STRUCNAME

<structured-name>

FILENAME

<filename>

PARTFILE

<partial-filename>

TIME

<time>

DATE

<date>

COMPONAME

<composed-name>

CATID

<cat-id>

TEXT

Auf den Datentyp <text> wird der Wert geprüft, wenn er in einer Operation als Stellungsoperand eingegeben wurde. Falls Trennzeichen im Wert an falscher Stelle stehen, ist er unzulässig.

KEYWORD

<keyword>

KEYNUMBER

<keyword-number>

VSN

<vsn>

XTEXT

<x-text>

FIXED

<fixed>

DEVICE

<device>

PRODVERS

<product-version>

POSIXPATH

<posix-pathname>

POSIXFILE

<posix-filename>

SHORTST =
Bestimmt, ob die Zeichenfolge eine Mindestlänge haben muss (siehe ADD-VALUE
TYPE=...,(SHORTEST-LENGTH=...)). Für die Datentypen DATE, TIME, CATID, KEY-WORD und KEYNUMBER hat dieser Parameter keine Bedeutung. Beim Datentyp XST-RING ist SHORTST die Anzahl von Bytes im Wert, der bei INPUT angegeben ist. Beim Datentyp INTEGER oder INT64 gibt SHORTST die untere Grenze des Wertebereiches an, beim Datentyp FIXED wird SHORTST mit dem Parameter LOWDEC kombiniert. Für diese beiden Datentypen kann eine Integer-Zahl mit Vorzeichen angegeben werden.

*ANY
Die von SDF vorgegebenen Grenzen gelten für den Datentyp.

integer
Explizite Angabe der Mindestlänge.

LONGEST =
Bestimmt, ob die Zeichenfolge eine Maximallänge nicht überschreiten darf (siehe ADD-VALUE TYPE=... (LONGEST-LENGTH=...)). Für die Datentypen DATE, TIME, CATID, KEYWORD und KEYNUMBER hat dieser Parameter keine Bedeutung. Beim Datentyp XSTRING ist LONGEST die Anzahl von Bytes im Wert, der bei INPUT angegeben ist. Beim Datentyp INTEGER gibt LONGEST die obere Grenze des Wertebereiches an, beim Datentyp FIXED wird LONGEST mit dem Parameter HIGDEC kombiniert. Für diese beiden Datentypen kann eine Integer-Zahl mit Vorzeichen angegeben werden.

*ANY
Die von SDF vorgegebenen Grenzen gelten für den Datentyp.

integer
Explizite Angabe der Maximallänge.

WCLOGL =
Nur relevant für ATTRIB=WILDCARD. Der bei INPUT angegebene Wert kann Wildcards enthalten. WCLOGL gibt die maximale Länge der Werte an, zu dem das Wildcard-Suchmuster passt, während LONGEST die tatsächliche Länge des Eingabewertes festlegt. Für die Datentypen POSIXPATH und POSIXFILE hat dieser Parameter keine Bedeutung.

*NONE
Die von SDF vorgegebenen Grenzen gelten.

integer
Explizite Angabe der Maximallänge.

LOWDEC= 0 / integer
Gibt die Anzahl von Dezimalstellen beim Parameter SHORTST an und ist nur relevant beim Datentyp FIXED.

HIGDEC = 0 / integer
Gibt die Anzahl von Dezimalstellen beim Parameter LONGEST an und ist nur relevant beim Datentyp FIXED.

CONST = *NO / addr / (addr,...)
Der INPUT-Wert wird mit den hier festgelegten Konstanten verglichen. CONST ist nur für DATATYP=NOCHECK relevant. Die Konstantenwerte müssen in Sätzen mit variabler Satzlänge abgelegt sein. Ist der INPUT-Wert vom Datentyp KEYWORD oder KEYNUMBER, so kann er auch eine Abkürzung einer der Konstanten sein. Listen werden jedoch nicht unterstützt. Es können maximal 2000 Konstanten angegeben werden. Die Minimal- und Maximallänge der Konstanten richtet sich nach den Standardvorgaben für die SDF-Datentypen.

addr
Die Satzadressen sind in einem Feld zusammengefasst, das an der Adresse addr beginnt. Das Feld muss auf Wortgrenze ausgerichtet sein und es muss folgendes Format haben:


Byte

Bedeutung

0

Anzahl der Elemente im Feld (N, 2 Byte lang)

2

Füllzeichen

4

Adresse des 1. Satzes (auf Wortgrenze ausgerichtet)

8

Adresse des 2. Satzes (auf Wortgrenze ausgerichtet)

...


N*4

Adresse des N. Satzes (auf Wortgrenze ausgerichtet)


(addr,...)
Die Satzadressen werden in einer Liste angegeben.

PATTERN = *NO / addr
Der INPUT-Wert wird mit einem Wildcard-Suchmuster verglichen.
Falls eine Überprüfung auf einen Datentyp verlangt ist, müssen die Syntaxregeln für Wildcards für diesen Datentyp eingehalten werden (u.a. die maximale Länge des Wildcard-Ausdruckes).


Bei DATATYP=NOCHECK wird nur überprüft, ob der INPUT-Wert zum angegebenen Wild-card-Suchmuster passt (keine Überprüfung auf einen Datentyp). Die Länge des Wildcard-Suchmusters ist hierfür nicht begrenzt. Die Angabe von Wildcards ist nicht für alle Datentypen erlaubt (siehe Anweisung ADD-VALUE TYPE=...).
PATTERN darf nicht zusammen mit ATTRIB=(...,WILDCARD,...) angegeben werden.
Für DATATYPE=POSIXPATH oder POSIXFILE gilt nicht die BS2000-Wildcardsyntax, sondern eine spezielle POSIX-Wildcardsyntax. Für diese beiden Datentypen darf PATTERN nicht angegeben werden.

PATTERN = addr
Gibt die Adresse eines Satzes mit variabler Satzlänge an, in dem das Wildcard-Suchmuster abgelegt ist. addr muss auf Wortgrenze ausgerichtet sein. Der Wert im Satzlängenfeld des V-Record ist die Summe aus der exakten Länge des Suchmusters und der Länge des Satzfeldes (z.B. für „ABC*“ hat das Satzlängenfeld den Wert 4+4=8). Leerzeichen sind im Suchmuster nicht erlaubt.

ATTRIB = (...)
Gibt eine Liste von Attributen an, die für den Datentyp gelten soll. Unzulässige Kombinationen werden mit einer Fehlermeldung abgewiesen. Die Attribute müssen in runden Klammern eingeschlossen sein. Das gilt auch dann, wenn die Liste nur ein Attribut enthält. Nähere Informationen siehe Anweisung ADD-VALUE. Folgende Attribute sind möglich:

Attribut

Bedeutung und möglicher Datentyp

*NONE

Für die Attribute gelten die SDF-Standardvorgaben.

NOCATID

Die Angabe der Katalogkennung ist nicht erlaubt
(Datentypen <filename>, <partial-filename>).

NOUSERID

Die Angabe der Benutzerkennung ist nicht erlaubt
(Datentypen <filename>, <partial-filename>).

NOGENERATION

Die Angabe der Generationsnummer ist nicht erlaubt (Datentyp <filename>).

NOVERSION

Die Angabe der Versionsbezeichnung ist nicht erlaubt (Datentyp <filename>).

WILDCARD

Wildcards dürfen angegeben werden. Das Attribut WILDCARD darf nicht
zusammen mit dem Parameter PATTERN angegeben werden
(Datentypen <alphanum-name>, <composed-name>, <filename>, <name>,
<partial-filename> und <structured-name>).

KEYSTAR

Ein Stern muss der Eingabezeichenfolge vorangestellt sein
(nur bei den Datentypen KEYWORD und KEYNUMBER).

NOSEPERATORS

Trennzeichen sind nicht erlaubt (Datentyp <text>).

UNDERSCORE

Der Unterstrich ’_’ ist erlaubt (<name>, <composed-name>).

NOODD

Eine ungerade Anzahl von Zeichen darf eingegeben werden (<x-text>).

NOALIAS

Die Angabe des Alias-Namens ist nicht erlaubt (Datentyp <device>).

VOLUMEONLY

Der Volumetyp wird akzeptiert (Datentyp <device>).

NOUSERINT

Die Angabe der Benutzerschnittstelle ist nicht erlaubt
(Datentyp <product-version>).

NOCORSTATE

Die Angabe des Korrekturstandes ist nicht erlaubt
(Datentyp <product-version>). Wurde NOUSERINT in der Liste spezifiziert, so
gilt NOCORSTATE automatisch auch mit.

ANYCORSTATE

Der Korrekturstand kann bei <product-version> angegeben werden.
ANYCORSTATE darf nicht zusammen mit NOCORSTATE angegeben werden
und umgekehrt.

WILDCONST

Der Wert kann ein Wildcard-Konstruktor sein (siehe ADD-VALUE
TYPE=...(...,WILDCARD=*YES(TYPE=*CONSTRUCTOR=...)).
(Datentypen <alphanum-name>, <composed-name>, <filename>, <name>,
<partial-filename> und <structured-name>)

LOWERCASE

Kleinbuchstaben bleiben erhalten (Datentyp <name>).

NOTEMPFILE

Temporäre Dateinamen sind nicht erlaubt (Datentyp <filename>).

QUOTESMAND

POSIX-Pfad- und Dateinamen müssen in Hochkommas eingeschlossen sein.

ANYUSERINT

Der Freigabestand der Benutzerschnittstelle kann angegeben werden
(Datentyp <product-version>). Bei gleichzeitiger Angabe von NOUSERINT ist
ANYUSERINT nicht erlaubt und umgekehrt.

STDDISK

Nur Standard-Plattengeräte verwenden (Datentyp <device>).

DEVCLAS = DISK / TAPE
gibt die Geräteklasse an (Datentyp <device>, siehe Anweisung ADD-VALUE TYPE=*DEVICE(...)).

EXCDISK = *NONE / addr / (text8,...)
gibt die verbotenen Plattengeräte an (Datentyp <device>). Maximal 50 Namen können angegeben werden.

addr
gibt die Adresse eines auf Wortgrenze ausgerichteten Feldes an, in dem die Gerätenamen zusammengefasst sind. Das erste Halbwort im Feld enthält die Anzahl der Elemente im Feld, das zweite Halbwort enthält das Füllzeichen. Die Gerätenamen, die daran anschließen, sind jeweils 8 Byte lang und dürfen keine Trennzeichen enthalten. Sind die realen Gerätenamen kürzer als 8 Zeichen, so müssen sie linksbündig eingetragen und mit Leerzeichen auf die volle Länge aufgefüllt werden.

EXCDISK = (text8,...)
gibt eine Liste von 8 Zeichen langen Gerätenamen an. Für die Gerätenamen müssen die Syntaxregeln des Datentyps <text-without-sep> eingehalten werden.

EXCTAPE = *NONE / addr / (text8,...)
gibt die verbotenen Bandgeräte an. Der Parameter wird nur zusammen mit DEVICE=TAPE verwendet (siehe ADD-VALUE TYPE=*DEVICE(...)). Maximal 50 Namen können angegeben werden.

addr
gibt die Adresse eines auf Wortgrenze ausgerichteten Feldes an, in dem die Gerätenamen zusammengefasst sind. Das erste Halbwort im Feld enthält die Anzahl der Elemente im Feld, das zweite Halbwort enthält das Füllzeichen. Die Gerätenamen, die daran anschließen, sind jeweils 8 Byte lang und dürfen keine Trennzeichen enthalten. Sind die realen Gerätenamen kürzer als 8 Zeichen, so müssen sie linksbündig eingetragen und mit Leerzeichen auf die volle Länge aufgefüllt werden.

EXCTAPE = (text8,...)
gibt eine Liste von 8 Zeichen langen Gerätenamen an. Für die Gerätenamen müssen die Syntaxregeln des Datentyps <text-without-sep> eingehalten werden.

PROT = *NO / addr
Satz mit variabler Satzlänge, in den SDF die Fehlermeldung für den überprüften Wert ablegt. addr muss auf Wortgrenze ausgerichtet sein. Zum Inhalt des Satzes siehe Makro

CMDRST, Parameter BUFFER ("CMDRST Anweisung lesen und analysieren").

Zur Beschreibung der Parameter PREFIX, MACID, MF und PARAM siehe Typen von Makroaufrufen.

Mögliche Aufrufe

[label]  CMDVAL MF=D [,PREFIX=p][,MACID=mac]
[label]  CMDVAL MF=C [,PREFIX=p][,MACID=mac]
[label]  CMDVAL MF=L,...
[label]  CMDVAL MF=E,PARAM=addr 

Der Makro CMDVAL ist mit Standardheader implementiert. Die Form MF=S wird deshalb nicht angeboten.

Registerverwendung

Register 1: Adresse der Parameterliste

Register 15: Returncode, der zusätzlich auch im Standardheader übergeben wird

Rückinformation und Fehleranzeigen

Der Returncode wird im Standardheader des Parameterbereiches übergeben.

Standardheader

cc: Subcode 2 (SC2)
bb: Subcode 1 (SC1)
aaaa: Maincode

(SC2)SC1MaincodeBedeutung
00000000Überprüfter Wert passt zu Datentyp und/oder Wildcard-Suchmuster
01010008Der Parameter INPUT ist fehlerhaft
02010008Eine Adresse ist fehlerhaft (nicht zugewiesen,nicht auf Wortgrenze
ausgerichtet,...)
03010008

Fehlerhafte Angaben für:

  • die Kombination DATATYP/ATTRIB/PATTERN oder

  • die Kombination DEVCLAS/EXCDISK/EXCTAPE

04010008

Fehlerhafte Angaben für Wertebereiche:

  • Obergrenze < Untergrenze

  • SDF-A-Grenzen nicht eingehalten

  • fehlerhafte Werte

  • Anzahl der Dezimalstellen nicht angegeben

  • Begrenzung nicht zulässig

05010008Der Parameter PATTERN ist fehlerhaft (Länge=0, Syntax fehlerhaft)
06010008Fehler im Parameter CONST
xx40001CÜberprüfter Wert passt nicht zum Datentyp und/oder zum Wildcard-
Suchmuster. Im Puffer PROT wurde eine SDF-Fehlermeldung
hinterlegt. Der Eingabewert war:
0140001C
  • nicht vom angegebenen Datentyp bzw. hatte nicht die geforderten Attribute
0240001C
  • keines der angegebenen Geräte
0340001C
  • außerhalb des angegebenen oder des von SDF vorgegebenen Wertebereiches
0440001C
  • keine der angegebenen Konstanten (Wert oder Schlüsselwort)
0540001C
  • nicht passend zum Wildcard-Suchmuster


Hinweise

  • Ist der Puffer PROT zu klein, so werden die SDF-Fehlermeldungen abgeschnitten. Es liegt in der Verantwortung des Aufrufers, diese Situation zu erkennen und darauf zu reagieren.

  • Bei Überprüfung von Dateinamen mit Dateigenerationsnummer auf Übereinstimmung mit einem Wildcard-Suchmuster ist die folgende Tabelle zu beachten. Die Tabelle enthält die zurzeit geltenden Möglichkeiten, bei denen eine Übereinstimmung möglich ist. Zu Dateigenerationsgruppen (fgg, file generation group) siehe Benutzerhandbuch „Einführung in das DVS“ [7].

    INPUT-Zeichenfolge

    PATTERN-Zeichenfolge

    Übereinstimmung möglich?

    ohne fgg

    ohne fgg
    mit fgg

    ja
    nein

    mit absoluter fgg
    (abs_fgg (*nnnn))

    ohne fgg
    mit abs_fgg (*nnnn)
    mit rel_fgg (+/-nn)

    ja
    ja, wenn (*nnnn) übereinstimmt
    nein

    mit relativer fgg
    (rel_fgg (+/-nn)

    ohne fgg
    mit abs_fgg (*nnnn)
    mit rel_fgg (+/-nn)

    ja
    nein
    ja, wenn (+/-nn) übereinstimmt

    abs_fgg:

    absolute Generationsnummer (*nnnn), 0001<=nnnn<=9999

    rel_fgg:

    relative Generationsnummer (+/-nn), 0<=nn<=99

    Diese Tabelle kann bei zukünftigen Systemerweiterungen ihre Gültigkeit verlieren und ist deshalb nicht als garantierte Schnittstelle zu betrachten.

  • Suchmuster für einen Dateinamen können vom Datentyp <filename> oder <partial-filename> sein.

  • Ein teilqualifizierter Dateiname kann ebenfalls als Wildcard-Suchmuster verwendet werden.

Beispiele

  1. Überprüfung eines Wertes auf Datentyp:

            ...
            CMDVAL MF=E,PARAM=MYPL
    *              returncode must be X'0140001C'
            LA     1,MYPL
            USING  MYPLD,1
            LH     2,DMDVMRET
            LTR    2,2
            BNE    ERRPROC
            ...
    MYPL    CMDVAL MF=L,INPUT=BUFF@,DATATYP=FILENAME,ATTRIB=(NOCATID,WILDCARD)
             ...
    BUFF@   DS     0F
    BUFFL   DC     Y(BUFFEND-BUFF@)
    BUFFFIL DS     XL2
    BUFFCT  DC     C':OY:$TSOS.SDF-A'
    BUFFEND EQU    *
            ...
    MYPLD   CMDVAL MF=D,PREFIX=D
            ...
    
  2. Überprüfung eines Eingabewertes auf Übereinstimmung mit einem Wildcard-Suchmuster:

             ...
             CMDVAL MF=E,PARAM=MYPL2
             LA     1,MYPL2
             USING  MYPLD,1
             LH     2,DMDVMRET
             LTR    2,2
             BNE    ERRPROC
             ...
    MYPL2    CMDVAL MF=L,INPUT=BUFF@,PATTERN=PATT@
             ...
    BUFF@    DS     0F
    BUFFL    DC     Y(BUFFEND-BUFF@)
    BUFFFIL  DS     XL2
    BUFFCT   DC     C':OY:$TSOS.SDF-A'
    BUFFEND  EQU    *
             ...
    PATT@    DS     0F
    PATTL    DC     Y(PATTEND-PATT@)
    PATTFIL  DS     XL2
    PATTCT   DC     C':OY:$TSOS.SD/-*'
    PATTEND  EQU    *
             ...
    MYPLD    CMDVAL MF=D,PREFIX=D
             ...