LIKEDS(データ構造名)
LIKEDS キーワードは、データ構造、データ構造のサブフィールド、プロトタイプされた戻り値、または プロトタイプ・パラメーターを、別のデータ構造と同様に定義するために使用します。新たな項目のサブフィールドは、LIKEDS キーワードのパラメーターとして指定されている親データ構造のサブフィールドと同じになります。
LIKEDS を使用して定義されているデータ構造は、親データ構造が修飾されていない場合でも、 自動的に修飾されます。 サブフィールドは、修飾表記 DSNAME.SUBFIELDNAME を使用して参照する必要があります。 親データ構造に名前が付いていないサブフィールドがある場合、 子データ構造も同じ名前無しのサブフィールドを持ちます。
LIKEDS は、修飾されたデータ構造のサブフィールドに関してコーディングすることができます。 LIKEDS がデータ構造のサブフィールド定義でコーディングされる場合、 サブフィールドのデータ構造は自動的に QUALIFIED として定義されます。 LIKEDS サブフィールドのデータ構造のサブフィールドは、完全修飾形式 "ds.subf.subfa" で 参照されます。LIKEDS を使用して定義されたサブフィールドは、 それ自体がデータ構造であり、データ構造が必要な任意の場所で使用することができます。
ALIGN キーワードおよび ALTSEQ
キーワードの値は、新しいデータ構造によって継承されます。OCCURS、DIM、NOOPT、NULLIND、および INZ キーワードの値は継承されません。
親データ構造と同じ方法でサブフィールドを初期化するには、INZ(*LIKEDS)
を指定します。
ただし、親データ構造のサブフィールドに対して指定された DIM、NOOPT、および NULLIND キーワードの値は新しいデータ構造によって継承されます。
* Data structure qualDs is a qualified data structure
* with two named subfields and one unnamed subfield
D qualDs DS QUALIFIED
D a1 10A
D 2A
D a2 5P 0 DIM(3)
* Data structure unqualDs is a non-qualified data structure
* with one named subfield and one unnamed subfield
D unqualDs DS
D b1 5A
D 5A
* Data structure likeQual is defined LIKEDS(qualDs)
D likeQual DS LIKEDS(qualDs)
* Data structure likeUnqual is defined LIKEDS(unqualDs)
D likeUnqual DS LIKEDS(unqualDs)
/FREE
// Set values in the subfields of the
// parent data structures.
qualDs.a1 = 'abc';
qualDs.a2(1) = 25;
b1 = 'xyz';
// Set values in the subfields of the
// child data structures.
likeQual.a1 = 'def';
likeQual.a2(2) = -250;
likeUnqual.b1 = 'rst';
// Display some of the subfields
dsply likeQual.a1; // displays 'def'
dsply b1; // displays 'xyz'
D sysName DS qualified
D lib 10A inz('*LIBL')
D obj 10A
D userSpace DS LIKEDS(sysName) INZ(*LIKEDS)
// The variable "userSpace" was initialized with *LIKEDS, so the
// first 'lib' subfield was initialized to '*LIBL'. The second
// 'obj' subfield must be set using a calculation.
C eval userSpace.obj = 'TEMPSPACE'
P createSpace B
D createSpace PI
D name LIKEDS(sysName)
/free
if name.lib = *blanks;
name.lib = '*LIBL';
endif;
QUSCRTUS (name : *blanks : 4096 : ' ' : '*USE' : *blanks);
/end-free
P createSpace E