Allgemeines
Anwendungsgebiet: | Jobvariablen |
Makrotyp: | S-Typ: (Standardform/C-/D-/E-/L-Form) siehe Abschnitt „Der Operand MF“ |
Bei der C-Form und D-Form des Makroaufrufs kann ein Präfix PREFIX (pre = 1..3 Buchstaben) angegeben werden (siehe Abschnitt „Der Operand PREFIX“). | |
Voreinstellung: | PREFIX = IDJ |
Makrobeschreibung
Der Makro CATJV erstellt oder ändert den Katalogeintrag einer Jobvariablen.
Das explizite Ausschalten der Default-Protection mit CATJV ...,PROTECT=STD wird nur mit gleichzeitiger Angabe des Operanden VERSION=4 unterstützt.
Die Verwendung von Makroversionen < 4 kann im Zusammenhang mit Default-Protection problematisch sein: Erhält eine Jobvariable über Default-Protection das Schutzmerkmal SHARE=YES oder ACCESS=READ oder Kennwörter, kann der nichtprivilegierte Anwender das Schutzmerkmal zwar auf SHARE=NO oder ACCESS=WRITE oder RDPASS bzw. WRPASS=NONE setzen. Diese Angaben werden aber nicht ausgewertet, da die Einstellungen der Default-Protection eine höhere Priorität haben.
Makroaufrufformat und Operandenbeschreibung
Operation | Operanden |
|
( [{ READ={YES / NO} | R={Y / N} }] [,{ WRITE={YES / NO} | W={Y / N} }] ) } ]
( [{ READ={ YES / NO } | R={ Y / N } }] [,{ WRITE={ YES / NO } | W={ Y / N } }] ) } ]
( [{ READ={YES / NO} | R={Y / N} }] [,{ WRITE={YES / NO} | W={Y / N} }] ) } ]
[,GUARDS={NONE | ( [READ={*NONE / readguard}] [,WRITE={*NONE / writeguard}] )
|
jvname1
bezeichnet den vollqualifizierten Pfadnamen, unter dem die permanente oder temporäre Jobvariable katalogisiert wird. Die Angabe einer fremden Benutzerkennung ist nur der Systembetreuung erlaubt.
jvname2
vereinbart einen neuen Namen für die Jobvariable jvname1. Bis Version < 2 dürfen Benutzer- und Katalogkennung nicht angegeben werden, da dies eine Änderung des Besitzers oder des Katalogs bedeuten könnte. Ab Version = 2 ist die Angabe eines vollqualifizierten Pfadnamens möglich, jedoch müssen Benutzer- und Katalogkennung mit den Angaben in jvname1 übereinstimmen.
Dieser Operand ist nur zusammen mit STATE=UPDATE wirksam.
STATE=
gibt an, ob für eine noch nicht vorhandene Jobvariable ein Katalogeintrag erstellt werden soll oder ein vorhandener Katalogeintrag geändert werden soll.
NEW
ist Voreinstellung: Es soll ein Katalogeintrag erstellt werden.
UPDATE
Ein vorhandener Katalogeintrag soll geändert werden.
Hinweis
Im UPDATE-Modus werden weggelassene Operanden nicht auf Standardwert gesetzt. Im UPDATE-Modus kann mit den Operanden ACCESS, SHARE, RDPASS, WRPASS und RETPD der entsprechende Wert im JV-Eintrag nur modifiziert werden, wenn er explizit angegeben ist.
PROTECT=
gibt an, woher die Schutzmerkmale der neu zu katalogisierenden Jobvariable übernommen werden sollen, deren Wert nicht explizit angegeben wird. Die Angabe dieses Operanden ist nur zusammen mit VERSION=4 erlaubt.
Zur Wertevergabe siehe Tabelle „System-Standardwerte für Jobvariablen-Schutzmerkmale“.
DEFAULT
ist Voreinstellung: Die Schutzmerkmale der neuen Jobvariable werden mit Werten der Funktion Default-Protection katalogisiert.
STD
Die Schutzmerkmale der neuen Jobvariable werden mit System-Standardwerten katalogisiert.
ACCESS=
legt fest, ob auf die Jobvariable nur lesend oder auch schreibend zugegriffen werden darf.
WRITE
ist Voreinstellung bei STATE=NEW: Lese- und Schreibzugriff zur Jobvariablen sind erlaubt.
READ
Die Jobvariable darf nur gelesen werden.
SHARE=
bestimmt, ob die Jobvariable von einer fremden Benutzerkennung aus benutzt werden darf.
NO
ist Voreinstellung bei STATE=NEW: Die Jobvariable darf von anderen Benutzerkennungen aus nicht benutzt werden.
YES
Die Benutzung der Jobvariablen ist auch aus fremden Benutzerkennungen heraus erlaubt.
OWNERAR=
bestimmt die Zugriffsrechte des Eigentümers der Jobvariablen (und der Systembetreuung). Lese- und Schreibberechtigung müssen jeweils explizit vergeben werden.
Die Angabe dieses Operanden ist nicht zusammen mit VERSION=0 erlaubt.
NO-ACCESS
Der Eigentümer besitzt explizit weder Lese- noch Schreibberechtigung. Dies entspricht der Angabe (READ=NO,WRITE=NO).
(READ=...,WRITE=...)
Lese- und Schreibberechtigung werden - wie explizit angegeben - erteilt (READ/WRITE=YES) oder nicht erteilt (READ/WRITE=NO).
GROUPAR=
bestimmt die Zugriffsrechte, die alle Benutzerkennungen aus der Gruppe des Eigentümers besitzen (außer Eigentümer und Systembetreuung). Die Angabe dieses Operanden ist nicht zusammen mit VERSION=0 erlaubt.
Die Definition von Benutzergruppen ist erst bei Einsatz des Software-Produktes SECOS möglich.
Im Hinblick auf den möglichen Einsatz von SECOS sollten für GROUP (Operand GROUPAR ) die gleichen Rechte wie für OTHERS (Operand OTHERAR) vergeben werden.
NO-ACCESS
Benutzerkennungen der Eigentümergruppe besitzen explizit weder Lese- noch Schreibberechtigung. Dies entspricht der Angabe (READ=NO,WRITE=NO).
(READ=...,WRITE=...)
Lese- und Schreibberechtigung werden (wie explizit angegeben) erteilt (READ/WRITE=YES) oder nicht erteilt (READ/WRITE=NO).
OTHERAR=
Bestimmt die Zugriffsrechte der anderen Benutzer, die nicht der Eigentümergruppe angehören.
Die Angabe dieses Operanden ist nicht zusammen mit VERSION=0 erlaubt.
Falls SECOS nicht eingesetzt wird, sollten die Zugriffsrechte jedoch im Hinblick auf einen zukünftigen Einsatz von SECOS genauso wie für die Eigentümergruppe GROUP (Operand GROUPAR) gesetzt werden.
(READ=...,WRITE=...)
Lese- und Schreibberechtigung werden (wie explizit angegeben) erteilt (READ/WRITE=YES) oder nicht erteilt (READ/WRITE=NO).
BASACL=
bestimmt, ob für die Jobvariable eine BASIC-ACL gelöscht, aktiviert oder neu eingerichtet werden soll. Die Angabe dieses Operanden ist nicht zusammen mit VERSION=0 erlaubt.
NONE
Eine aktivierte BASIC-ACL gelöscht. Bei Neueinrichten einer Jobvariablen (STATE=NEW) ist NONE Voreinstellung und bedeutet, dass keine BASIC-ACL vereinbart wird. Die Zugriffskontrolle erfolgt damit entsprechend der Werte ACCESS und SHARE (Standard-Zugriffskontrolle).
STD
Beim Neueinrichten der Jobvariable (STATE=NEW) wird eine BASIC-ACL eingerichtet, in der für die Benutzergruppe OWNER Lese- und Schreibzugriff zugelassen wird und die Benutzergruppen GROUP und OTHERS keine Zugriffsrechte besitzen.
Bei Änderung des Jobvariablen-Eintrags (STATE=UPDATE) wird die Angabe STD nur ausgewertet, wenn keine BASIC-ACL aktiviert war. In diesem Fall wird eine BASIC-ACL aktiviert, in der die Zugriffsrechte entsprechend der Standard-Zugriffskontrolle im Jobvariablen-Eintrag (SHARE und ACCESS) gesetzt sind:
Standard-Zugriffskontrolle | BASIC-ACL-Schutz | ||||||
SHARE | ACCESS | OWNER | GROUP | OTHERS | |||
R | W | R | W | R | W | ||
NO | WRITE | Y | Y | N | N | N | N |
NO | READ | Y | N | N | N | N | N |
YES | WRITE | Y | Y | Y | Y | Y | Y |
YES | READ | Y | N | Y | N | Y | N |
Tabelle 30: Standard-Zugriffskontrolle/BASIC-ACL (CATJV-Makro)
GUARDS=
bestimmt, ob für die Jobvariable ein Guard gelöscht, aktiviert oder neu eingerichtet werden soll.
Die Angabe dieses Operanden ist nur ab VERSION=3 erlaubt.
NONE
Ein früher definierter Guard wird aufgehoben. Bei Neueinrichten einer Jobvariablen (STATE=NEW) ist NONE Voreinstellung und bedeutet, dass kein Guard vereinbart wird.
(READ=...,WRITE=...)
Die Zugriffskontrolle erfolgt über den angegebenen Lese- und/oder Schreibguard (READ/WRITE=readguard/writeguard) oder Lese- und/oder Schreibzugriff sind nicht erlaubt (READ/WRITE=*NONE).
Der Name des Guards darf maximal 8 Zeichen lang sein, wenn keine Benutzerkennung angegeben wird. Eine Katalogkennung darf nicht angegeben werden.
MANCLAS=
Der Operand wird nur für SM-Pubsets ausgewertet.
Gibt an, ob die HSMS-Funktionen JV-Sicherung, Archivierung und Langzeitarchivierung über eine mit HSMS definierte Management-Klasse gesteuert werden. Näheres siehe Handbuch „HSMS“ [12].
Die Angabe dieses Operanden ist nur ab VERSION=3 erlaubt.
*NONE
Eine früher vereinbarte Steuerung von HSMS-Funktionen über eine Management-Klasse wird aufgehoben. Bei Neueinrichten einer Jobvariablen (STATE=NEW) ist NONE Voreinstellung und bedeutet, dass keine Management-Klasse vereinbart ist.
manclas
Name, der mit HSMS definierten Management-Klasse.
RDPASS=
gibt an, ob ein Lesekennwort für die Jobvariable vereinbart und ein früher definiertes Lesekennwort aufgehoben wird.
NONE
Ein früher definiertes Lesekennwort wird aufgehoben. Bei Neueinrichten einer Jobvariablen (STATE=NEW) ist NONE Voreinstellung und bedeutet, dass kein Lesekennwort vereinbart wird.
kennwort
Definiert das Lesekennwort, das für den Zugriff auf die Jobvariable angegeben werden muss. Länge <=
4 Byte. Angabe als C-String, X-String oder Dezimalzahl.
C-String: C’Zeichenkonstante’; maximal 4 Zeichen.
X-String: X’Sedezimalkonstante’; maximal 8 Zeichen.
Dezimalzahl: -2147483648 <=
zahl <=
2147483647
Ein Kennwort X’00000000’ bzw. ’0’ wird ignoriert. Ist eine Jobvariable nur durch ein Lesekennwort geschützt, muss dieses Kennwort auch zum Verändern der Jobvariablen angegeben werden.
WRPASS=
gibt an, ob ein Schreibkennwort für die Jobvariable vereinbart und ein früher definiertes Schreibkennwort aufgehoben wird.
NONE
Ein früher definiertes Schreibkennwort wird aufgehoben. Bei Neueinrichten einer Jobvariablen (STATE=NEW) ist NONE Voreinstellung und bedeutet, dass kein Schreibkennwort vereinbart wird.
kennwort
Definiert das Schreibkennwort, das für einen Schreibzugriff auf die Jobvariable angegeben werden muss. Länge <=
4 Bytes. Angabe als C-String, X-String oder Dezimalzahl (siehe Operand RDPASS).
RETPD=
legt die Dauer der Schutzfrist für die Jobvariable fest.
0
ist Voreinstellung bei STATE=NEW: Die Dauer der Schutzfrist beträgt null Tage. Das bedeutet, dass im Jobvariablen-Eintrag als Expiration Date das aktuelle Tagesdatum steht (siehe Feld IDJEEXD in der DSECT des Makros STAJV, ).
Die Jobvariable kann verändert werden, wenn die anderen Schutzmerkmale einen schreibenden Zugriff zulassen.
tage
tage = Anzahl der Tage, die die Jobvariable unverändert bleiben soll, auch wenn die anderen Schutzmerkmale schreibenden Zugriff zulassen.
Das Expiration Date im Jobvariablen-Eintrag enthält das Datum, ab dem der Schutz aufgehoben ist. Expiration Date ist das aktuelle Tagesdatum plus angegebene Anzahl von Tagen.
Dieser Operand wird nur berücksichtigt, wenn STATE=UPDATE angegeben ist, d.h. die Jobvariable muss bereits katalogisiert sein.
Der Maximalwert für RETPD beträgt 32767 Tage.
MONJV=
bestimmt, ob die Schutzmerkmale einer überwachenden Jobvariablen bestehen bleiben sollen.
UNCHANGED
ist Voreinstellung: Der Schutz für eine auftragsüberwachende Jobvariable bleibt unverändert bestehen.
NO
Hebt den Schutz des Systembereichs (Byte 1 bis 128) einer ehemaligen überwachenden Jobvariablen auf. Die Angabe ist nur wirksam mit STATE=UPDATE. Vor dem Aufruf ist sicherzustellen, dass der überwachte Auftrag tatsächlich aus der Warteschlange entfernt wurde (SHOW-JOB-STATUS).
MF
PREFIX
Zur Beschreibung der Operanden MF und PREFIX siehe das Kapitel über Allgemeine Makro-Operanden.
Die gültigen Werte sind zu Beginn der Makrobeschreibung und aus dem Aufrufformat ersichtlich.
VERSION=
legt fest, welcher Version die Makroauflösung entsprechen soll.
0
ist Voreinstellung: Die Makroauflösung entspricht dem Stand JV <=
V8.7. Der Operand MF=D/C zur Erzeugung einer DSECT bzw. CSECT wird dabei nicht unterstützt (siehe Hinweis DSECT).
1
Die Makroauflösung entspricht dem Stand JV V10.0.
2
Die Makroauflösung entspricht dem Stand V11.0 und V11.2.
3
Die Makroauflösung entspricht dem Stand JV V12.0.
4
Die Makroauflösung entspricht dem Stand JV >=
V13.0C.
Hinweise zur DSECT
Der Aufruf des Makros mit den Operanden MF=D und VERSION=1/2/3/4 erzeugt eine DSECT für die Operandenliste des CATJV-Makros der entsprechenden Version.
Eine DSECT für den Makro mit VERSION=0 wird mit Aufruf des Makros IDJCA [D][,prefix] erzeugt.
Hinweis zur Vergabe von Zugriffsrechten mit BASIC-ACL
BASIC-ACL wird aktiviert, wenn für mindestens einen Berechtigten BASIC-ACL-Rechte (im Operanden OWNERAR, GROUPAR oder OTHERAR) angegeben werden. Bei Aktivierung einer BASIC-ACL werden die Rechte für eine nicht angegebene Benutzergruppe wie bei der Angabe von BASIC-ACL=NO-ACCESS (weder Schreib- noch Lese-Recht) für diese Benutzergruppe gesetzt.
Rückinformation und Fehleranzeigen
siehe Kapitel Meldungen auf Makroebene.
DSECT
CATJV CATJV MF=D,VERSION=4 1 *********************************************************************** 1 * VERSION 410 1 *********************************************************************** 1 * C A T J V P A R A M E T E R L I S T * 1 *********************************************************************** 1 #INTF REFTYPE=REQUEST, C 1 INTNAME=CATJV,INTCOMP=004 1 CATJV DSECT 1 *********************************************************************** 1 * UNIT=41, FUNCTION=4, VERSION=<PARAMETER VERSION> * 1 *********************************************************************** 1 FHDR MF=(C,IDJC) 2 DS 0A 2 IDJCFHE DS 0XL8 0 GENERAL PARAMETER AREA HEADER 2 * 2 IDJCIFID DS 0A 0 INTERFACE IDENTIFIER 2 IDJCFCTU DS AL2 0 FUNCTION UNIT NUMBER 2 * BIT 15 HEADER FLAG BIT, 2 * MUST BE RESET UNTIL FURTHER NOTICE 2 * BIT 14-12 UNUSED, MUST BE RESET 2 * BIT 11-0 REAL FUNCTION UNIT NUMBER 2 IDJCFCT DS AL1 2 FUNCTION NUMBER 2 IDJCFCTV DS AL1 3 FUNCTION INTERFACE VERSION NUMBER 2 * 2 IDJCRET DS 0A 4 GENERAL RETURN CODE 2 * 2 * GENERAL_RETURN_CODE CLEARED (X'00000000') MEANS 2 * REQUEST SUCCESSFUL PROCESSED AND NO ADDITIONAL INFORMATION 2 * 2 IDJCSRET DS 0AL2 4 SUB RETURN CODE 2 IDJCSR2 DS AL1 4 SUB RETURN CODE 2 2 * ALWAYS CLEARED (X'00') IF MAIN_RETURN_CODE IS X'FFFF' 2 * Standard subcode2 values as defined by convention: 2 IDJCR2OK EQU X'00' All correct, no additional info 2 IDJCR2NA EQU X'01' Successful, no action was necessary 2 IDJCR2WA EQU X'02' Warning, particular situation 2 IDJCSR1 DS AL1 5 SUB RETURN CODE 1 2 * 2 * GENERAL INDICATION OF ERROR CLASSES 2 * 2 * CLASS A X'00' FUNCTION WAS SUCCESSFULLY PROCESSED 2 * CLASS B X'01' - X'1F' PARAMETER SYNTAX ERROR 2 * CLASS C X'20' INTERNAL ERROR IN CALLED FUNCTION 2 * CLASS D X'40' - X'7F' NO CLASS SPECIFIC REACTION POSSIBLE 2 * CLASS E X'80' - X'82' WAIT AND RETRY 2 * 2 IDJCRFSP EQU X'00' FUNCTION SUCCESSFULLY PROCESSED 2 IDJCRPER EQU X'01' PARAMETER SYNTAX ERROR 2 * 3 GLOBALLY DEFINED ISL ERROR CODES IN CLASS X'01' - X'1F' 2 IDJCRFNS EQU X'01' CALLED FUNCTION NOT SUPPORTED 2 IDJCRFNA EQU X'02' CALLED FUNCTION NOT AVAILABLE 2 IDJCRVNA EQU X'03' INTERFACE VERSION NOT SUPPORTED 2 * 2 IDJCRAER EQU X'04' ALIGNMENT ERROR 2 IDJCRIER EQU X'20' INTERNAL ERROR 2 IDJCRCAR EQU X'40' CORRECT AND RETRY 2 * 2 GLOBALLY DEFINED ISL ERROR CODES IN CLASS X'40' - X'7F' 2 IDJCRECR EQU X'41' SUBSYSTEM (SS) MUST BE CREATED 2 * EXPLICITELY BY CREATE-SS 2 IDJCRECN EQU X'42' SS MUST BE EXPLICITELY CONNECTED 2 * 2 IDJCRWAR EQU X'80' WAIT FOR A SHORT TIME AND RETRY 2 IDJCRWLR EQU X'81' " LONG " 2 IDJCRWUR EQU X'82' WAIT TIME IS UNCALCULABLY LONG 2 * BUT RETRY IS POSSIBLE 2 * 2 GLOBALLY DEFINED ISL ERROR CODES IN CLASS X'80' - X'82' 2 IDJCRTNA EQU X'81' SS TEMPORARILY NOT AVAILABLE 2 IDJCRDH EQU X'82' SS IN DELETE / HOLD 2 * 2 IDJCMRET DS 0AL2 6 MAIN RETURN CODE 2 IDJCMR2 DS AL1 6 MAIN RETURN CODE 2 2 IDJCMR1 DS AL1 7 MAIN RETURN CODE 1 2 * 2 * SPECIAL LAYOUT OF LINKAGE_MAIN_RETURN_CODE (YYYY IN X'00XXYYYY') 2 * 2 IDJCRLNK EQU X'FFFF' LINKAGE ERROR / REQ. NOT PROCESSED 2 IDJCFHL EQU 8 8 GENERAL OPERAND LIST HEADER LENGTH 2 * 1 *********************************************************************** 1 * END OF STANDARD HEADER. START OF SPECIAL CATJV PARAMETER LIST * 1 *********************************************************************** 1 IDJCHDRI EQU X'00290404',4 1 IDJRDPAS DS CL4 READ PASSWORD 1 DS XL12 RESERVED 1 IDJWRPAS DS CL4 WRITE PASSWORD 1 DS XL12 RESERVED 1 IDJRETPD DS H RETENTION PERIOD 1 IDJCFLAG DS X FLAGS 1 IDJSTATE EQU X'80' 7-7 1=UPDATE, 0=NEW (STATE) 1 IDJACCES EQU X'40' 6-6 1=READ, 0=WRITE(ACCESS) 1 IDJSHARE EQU X'20' 5-5 1=YES, 0=NO (SHARE) 1 IDJRPN EQU X'10' 4-4 1=RDPASS NULL,STATE=U 1 IDJWPN EQU X'08' 3-3 1=WRPASS NULL,STATE=U 1 IDJRETPN EQU X'04' 2-2 1=RETPD NULL, STATE=U / 1 * RETPD NOT NULL,STATE=NEW 1 IDJACCEN EQU X'02' 1-1 1=ACCESS NULL,STATE=U 1 IDJSHARN EQU X'01' 0-0 1=SHARE NULL, STATE=U 1 * 1 IDJCFLG1 DS X FLAGS 1 IDJCENCR EQU X'80' 7-7 0=YES, 1=NO 1 * (ENCRYPTION) 1 IDJTYPE EQU X'00' 6-6 NOT USED (DEL. V11.2) 1 IDJMONJV EQU X'20' 5-5 1=MONJV=NO,STATE=UPDATE 1 IDJCP2 EQU X'10' 4-4 1=P2 CALLER,0=P1 CALLER 1 IDJCECT EQU X'08' 3-3 1=SET BY CMD PROCESSING 1 IDJBACLN EQU X'04' 2-2 1=SET BASIC-ACL = NONE 1 IDJBACLS EQU X'02' 1-1 1=SET BASIC-ACL = STD 1 IDJNSTEX EQU X'01' 0-0 1=SET NOSTEP=EXISTING 1 * 1 IDJJAR DS 0X ACCESS RIGHTS 1 IDJOWNER DS X OWNER 1 IDJGROUP DS X GROUP 1 IDJOTHER DS X OTHERS 1 * 1 IDJJAUS EQU X'80' 7-7 1=USER CLASS SPECIFIED 1 IDJJARS EQU X'40' 6-6 1=READ SPECIFIED 1 IDJJAWS EQU X'20' 5-5 1=WRITE SPECIFIED 1 IDJJARO EQU X'08' 3-3 1=SET READ 1 IDJJAWO EQU X'04' 2-2 1=SET WRITE 1 * 1 IDJCFLG2 DS X FLAGS 1 IDJGRDN EQU X'80' 7-7 :S: GUARDS = *NONE 1 IDJPVSS EQU X'10' 4-4 :S: GUARD PUBSET SPECIFIED 1 IDJRDGS EQU X'08' 3-3 :S: READ GUARD SPECIFIED 1 IDJWRGS EQU X'04' 2-2 :S: WRITE GUARD SPECIFIED 1 IDJMANSP EQU X'02' 1-1 :S: MANCLAS SPECIFIED 1 * 1 IDJPRFLG DS X PROTECT FLAG 1 IDJPRNSP EQU X'80' 7-7 :S: PROTECT NOT SPEC(DEFAULT) 1 IDJPRSTD EQU X'40' 6-6 :S: PROTECT STD SPECIFIED 1 IDJACCSP EQU X'08' 3-3 :S: ACCESS SPECIFIED 1 IDJSHASP EQU X'04' 2-2 :S: SHARE SPECIFIED 1 IDJRDPSP EQU X'02' 1-1 :S: RDPASS SPECIFIED 1 IDJWRPSP EQU X'01' 0-0 :S: WRPASS SPECIFIED 1 DS X RESERVED 1 * 1 IDJRDG DS CL18 READ GUARD 1 IDJWRG DS CL18 WRITE GUARD 1 IDJPUBS DS CL4 GUARD PUBSET 1 IDJMANCL DS CL8 MANCLAS 1 * 1 IDJJV1 DS CL54 JVNAME 1 IDJJV2 DS CL54 RENAME JVNAME 1 DS CL54 RESERVED 1 DS A RESERVED 1 DS CL16 RESERVED 1 IDJCJVS DS A RESERVED 1 IDJPLLEN EQU *-CATJV LENGTH 1 *********************************************************************** 1 SPACE