文字フィールドの DBCS データ

  1. OPM RPG/400® では、 制御仕様書の 57 桁目 (透過性検査) により、RPG/400 コンパイラーが DBCS 文字を調べるために、 文字リテラルおよび固定情報を走査するかどうかを指定することができます。 コンパイラーが透過リテラルを走査するように指定し、 シフトアウトに続くアポストロフィで始まる文字リテラルが 透過性検査を通らなかった場合には、 そのリテラルが透過的でないリテラルとして 再解析されます。
    ILE RPG では、コンパイラーが文字リテラルに対して透過性検査を実行する かどうかを指定するオプションは制御仕様書にはありません。 文字リテラルにシフトアウト制御文字が入っている場合には、文字リテラル 内のシフトアウト文字の位置に関係なく、シフトアウト文字は DBCS データの初めを示します。 コンパイラーは次のことを検査します。
    • シフトアウトに対応するシフトインがある (すなわち、 シフトアウト制御文字とシフトイン制御文字が対応している)。
    • シフトインとシフトアウトの間のバイト数は偶数 (最小は 2)。
    • DBCS データに組み込みシフトアウトがない。

    上記の条件が満たされなければ、コンパイラーは診断メッセージを出し、 リテラルは再解析されません。その結果、OPM RPG コンパイラーによって行われる透過性検査に通らない 文字リテラルが OPM RPG プログラムにあれば、ILE RPG ではこのような プログラムはコンパイル・エラーを受け取ります。

  2. OPM RPG/400 では、 文字リテラルの中のシフトアウト制御文字とシフトイン制御文字で囲まれた中に連続した 2 個のアポストロフィがある場合に、 その文字リテラルが透過リテラルでなければ、連続した 2 個のアポストロフィは 1 個のアポストロフィと見なされます。以下のような場合、文字リテラルは透過リテラルはありません。
    • 文字リテラルが、シフトアウトに続くアポストロフィで始まってい ない。
    • 文字リテラルが、コンパイラーの行う透過性検査に通らない。
    • ユーザーが、コンパイラーによる透過性検査の実行を指定していない。

    ILE RPG では、文字リテラルの中の シフトアウト制御文字とシフトイン制御文字で囲まれた中に連続した 2 個の アポストロフィがある場合に、 アポストロフィは 1 個のアポストロフィとは見なされません。文字リテラルの中の 1 対のアポストロフィは、 シフトアウト制御文字とシフトイン制御文字で囲まれた中にない場合にだけ、 1 個のアポストロフィと見なされます。

  3. ILE RPG では、シフトアウト文字に対してリテラルの検査を 避けたい (すなわち、シフトアウト文字をシフトアウト文字として解釈したくない) 場合には、リテラ ル全体を 16 進リテラルとして指定する必要があります。例えば、リテラル 'AoB' がある場合 (ここで、'o' は シフトアウト制御文字を表す) には、 このリテラルを X'C10EC2' としてコーディングしなければなりません。