![]() |
![]() |
|
|
VIEW 記述を作成する
ソース VIEW ファイル内の各ソース VIEW 記述は、次の 3 つの部分で構成されています。
各 VIEW 記述の最初の行は、「VIEW」というキーワードで始まり、続いて VIEW 記述の名前が指定されます。メンバ記述 (マッピング・エントリ) は、C 構造体または COBOL レコードのメンバに関する情報を含む行です。キーワード END で始まる行は、VIEW 記述の最後の行です。
次のリストは、一般的なソース VIEW 記述の内容です。
VIEW 記述のソース
VIEW vname
# type cname fbname count flag size null
# ---- ----- ------ ----- ---- ---- ----
--------------member descriptions-------------------
.
.
.
END
以下は、リストの説明です。
VIEW 記述でのフラグ・オプションを指定する
以下は、VIEW 記述内のメンバ記述の flag 要素として指定できるオプションです (フラグ・オプションは FML 対応の VIEW にのみ適用されます)。
このオプションは、メンバ記述で記述された構造体メンバに加えて、連想カウント・メンバ (ACM: Associated Count Member) と呼ばれる構造体メンバの生成を要求します。
フィールド化バッファから構造体へのデータ転送時には、構造体内の各 ACM は対応する構造体メンバに転送されたオカレンスの数に設定されます。
構造体メンバの配列からフィールド化バッファへのデータ転送時には、ACM を使用して転送すべき配列要素の数を指定します。たとえば、あるメンバの ACM が N に設定されている場合は、最初の N 個の NULL 以外のフィールドがフィールド化バッファに転送されます。N が配列のサイズより大きい場合、N はデフォルトで配列のサイズに設定されます。どちらの場合も、転送後、ACM はフィールド化バッファに転送される配列のメンバの実際の数に設定されます。
ACM の型は、FML では short 型、FML32 では long 型として C ヘッダ・ファイルで宣言され、C_cname という名前が生成されます。cname は、ACM が宣言された cname エントリです。たとえば、parts という名前のメンバの ACM は、次のように宣言されます。
short C_parts;
COBOL COPY ファイルでは、C-cname という名前が生成され、型は次のように宣言されます。
注記 生成された ACM 名と接頭辞 C_ で始まる名前の構造体メンバが競合する場合があります。VIEW コンパイラは、このような競合を致命的なエラーとして報告します。たとえば、構造体メンバの C_parts という名前は、メンバ parts に対して生成される ACM 名と競合します。
このオプションは、構造体からフィールド化バッファへの一方向のマッピングを指定します。このオプションによるメンバのマッピングは、構造体からフィールド化バッファへのデータ転送時のみ有効です。このオプションは、-n コマンド行オプションを指定した場合は無視されます。
このオプションは、carray 型または string 型のメンバ記述に対してのみ使用され、これらのフィールドが可変長の場合に転送されるバイト数を示します。string フィールドまたは carray フィールドを常に固定長データ項目として使用する場合、このオプションを指定する利点はありません。
L オプションは、carray 型または string 型の構造体メンバに対応する連想長メンバ (ALM: Associated Length Member) を生成します。フィールド化バッファから構造体へのデータ転送時には、ALM は、対応する転送フィールドの長さに設定されます。フィールド化バッファ内のフィールドの長さがマッピングされた構造体メンバに割り当てられた領域を超える場合は、割り当てられたバイト数のみが転送されます。対応する ALM は、フィールド化バッファ項目のサイズに設定されます。したがって、ALM が構造体メンバの配列サイズより大きい場合、フィールド化バッファ情報は転送時に切り捨てられます。
構造体メンバからフィールド化バッファのフィールドにデータを転送する場合、そのフィールドが carray 型であれば、ALM を使用してフィールド化バッファに転送するバイト数を指定します。string 型のフィールドの場合、ALM は転送時に無視されますが、転送後、転送されたバイト数に設定されます。carray フィールドにはフィールド長 0 も指定できます。ALM が 0 の場合は、関連する構造体メンバの値が NULL 値でない限り、フィールド化バッファに長さ 0 のフィールドが転送されます。
ALM の型は、FML では unsigned short 型、FML32 では unsigned long 型として C ヘッダ・ファイルで定義され、L_cname という名前が生成されます。cname は、ALM が宣言された構造体の名前です。
ALM が宣言されたメンバのオカレンス数が 1 の場合 (またはデフォルトが 1 の場合)、ALM は次のように宣言されます。
unsigned short L_cname;
一方、オカレンス数が 1 より大きい場合 (N)、ALM は次のように宣言されます。
unsigned short L_cname[N];
これは ALM 配列と呼ばれます。このような場合は、ALM 配列内の各要素は構造体メンバ (またはフィールド) の対応するオカレンスを参照します。COBOL COPY ファイルでは、FML は PIC 9(4) USAGE COMP-5 型、FML32 は PIC 9(9) USAGE COMP-5 型として宣言され、L-cname という名前が生成されます。メンバが複数回発生する場合は、COBOL の OCCURS 句を使用して複数のオカレンスを定義します。
注記 生成された ALM 名と接頭辞 L_ で始まる名前の構造体メンバが競合する場合があります。VIEW コンパイラは、このような競合を致命的なエラーとして報告します。たとえば、構造体メンバの L_parts という名前は、メンバ parts に対して生成される ALM 名と競合します。
ゼロ方向マッピングを指定します。C 構造体にフィールド化バッファはマッピングされません。このオプションは、C 構造体または COBOL レコードに充填文字を割り当てるときに使用することができます。このオプションは、-n コマンド行オプションが指定された場合は無視されます。
このオプションは、string 型および carray 型の構造体メンバの NULL 値として VIEW が解釈する内容を指定します。このオプションを指定しない場合は、構造体メンバの値がユーザ指定の NULL 値と等しいと (ただし、後続の NULL 文字は考慮に入れない)、構造体メンバが NULL になります。
一方、このオプションを指定した場合は、ユーザ指定の NULL 値と構造体メンバの値が等しく、しかも最後の文字が完全な長さまで及んでいると (ただし、後続の NULL 文字は考慮に入れない)、構造体メンバが NULL になります。
C 構造体または COBOL レコードからフィールド化バッファへデータを転送する場合、値が NULL のメンバは転送先のバッファに送信されません。たとえば、構造体のメンバ TEST が carray[25] 型で、ユーザ定義の NULL 値「abcde」が指定されているとします。P オプションを設定しない場合、最初の 5 文字が順に a、b、c、d、e であれば、TEST は NULL と見なされます。P オプションを指定した場合、最初の 4 文字が順に a、b、c、d で、かつ carray の残りの文字がすべて「e」であれば (e が 21 個)、TEST は NULL と見なされます。
このオプションは、-n コマンド行オプションを指定した場合は無視されます。
このオプションは、フィールド化バッファから構造体への一方向のマッピングを指定します。このオプションを指定したメンバのマッピングは、フィールド化バッファから構造体へのデータ転送時のみ有効です。このオプションは、-n コマンド行オプションを指定した場合は無視されます。
VIEWS で NULL 値を使用する
VIEWS の NULL 値は、C 構造体または COBOL レコードのメンバが空であることを示すために使用されます。NULL 値はデフォルト値として提供されていますが、独自に定義することもできます。
デフォルトの NULL 値は、数値型の場合はすべて 0 (dec_t の場合は 0.0)、char 型の場合は、"\0"、string 型と carray 型の場合は " " です。
NULL 値にエスケープ定数を指定することもできます。VIEW コンパイラで認識されるエスケープ定数は、\ddd (d は 8 進数)、\0、\n、\t、\v、\b、\r、\f、\\、\'、および \" です。
string 型、carray 型、および char 型の値は、二重引用符または一重引用符で囲みます。VIEW コンパイラは、ユーザ定義の NULL 値内の、エスケープされていない引用符は受け付けません。
また、要素の値がその要素の NULL 値と同じ場合、その要素は NULL になります。ただし、次の場合は例外です。
VIEW メンバ記述の NULL フィールドにキーワード「NONE」を指定することもできます。このキーワードは、そのメンバに対して指定する NULL 値がないことを示します。
string 型および文字配列 (carray) 型のメンバのデフォルトの最大サイズは、2660 文字です。
注記 string 型のメンバは通常「\0」で終了するため、ユーザ定義の NULL 値の最後の文字として「\0」を指定する必要はありません。
![]() |
![]() |
![]() |
|
Copyright © 2001 BEA Systems, Inc. All rights reserved.
|