構造体(=DS:Data Structure) の中にさらに構造体の配列を定義したい場合がある。
そのような複雑な構造の定義の方法を紹介する。
0338.00 **********************************
0339.00 * HELP 構造体 *
0340.00 **********************************
0341.00 D OFSDFN DS 8 QUALIFIED オフセット項目
0342.00 D OFF 1 2B 0
0343.00 D SPC 3 8
0344.00
0345.00 D HELP_P S *
0346.00 D HELP_ DS 1024 BASED(HELP_P)
0347.00 D QUALIFIED
0348.00 D ID# 1 1A X'13'
0349.00 D SIZE 2 3B 0
0350.00 D SPACE 4 6
0351.00 D OFSR LIKEDS(OFSDFN) DIM(100) オフセット配列
:
:
1344.00 C EVAL ELEM = %ELEM(HELP_.OFSR)
1345.00 C 2 DO ELEM N
1346.00 C EVAL BIN2C = %SUBST(WUIX:HELP_.OFSR(N).OFF:2)
:
1373.00 C ENDDO
[解説]
構造体(=DS:Data Structure) の中にさらに構造体の配列を定義するには
構造体の中に LIKEDSキー・ワードを使ってさらに構造体を定義する。
最初に構造体: OFSDFNを次のように定義する。
0341.00 D OFSDFN DS 8 QUALIFIED オフセット項目 0342.00 D OFF 1 2B 0 0343.00 D SPC 3 8
次にその構造体 : OFSDFN をOFSRという名前の配列で
親の構造体: HELP_ の中に定義する。
0346.00 D HELP_ DS 1024 BASED(HELP_P) 0347.00 D QUALIFIED : 0351.00 D OFSR LIKEDS(OFSDFN) DIM(100) オフセット配列
ここでの注意として LIKEではなく必ず LIKEDSを使うこと。
LIKEでもコンパイルは通るがOFSRは文字として定義されてしまう。
必ず LIKEDS で定義すること。
さらに桁位置はブランクにしておいて定義してはならない。
そのためには
0350.00 D SPACE 4 6
などを挿入して位置を調整することが必要である。
配列の数は
1344.00 C EVAL ELEM = %ELEM(HELP_.OFSR)
のようにして %ELEM を使って取得するようにしておくと配列数が増えても再コンパイルだけで済む。
1346.00 C EVAL BIN2C = %SUBST(WUIX:HELP_.OFSR(N).OFF:2)
のようにして QUALIFIED で定義しているので
構造体の名前を使って HELP_.OFSR(N) のようにして配列指標Nによる表現が可能となる。
ここではデータ・ストラクチャー(構造体)を使う高度な利用方法を
紹介した。