EBCDIC 文字セットの使用

Open PL/I コンパイラおよびランタイムは、EBCDIC フォーマットでエンコードされた文字セットおよび ASCII フォーマットでエンコードされた文字セットをサポートします。EBCDIC の場合、これは実質的に、ユーザー プログラムがすべての文字データを EBCDIC として認識することを意味します。文字データが入力デバイスから読み込まれ、表示デバイスに書き込まれた場合、すべての文字データは人間が読めるテキストとして表示されます。EBCDIC データがファイルに書きこまれるとき、またはファイルから読み込まれるときは、データは必ず EBCDIC としてエンコードされます。

EBCDIC モードでプログラムをコンパイルするということは、ソース ファイルが EBCDIC フォーマットであるという意味ではありません。ソース ファイルは常に ASCII フォーマットであり、'abc' などの文字列リテラルは、コンパイラにより EBCDIC に変換されます。同様に、EBCDIC モードのランタイム サポートは、すべての文字データを EBCDIC フォーマットで保持し、判読可能な入力または出力デバイスで使用する場合のみ、その文字データを EBCDIC から ASCII に変換したり、ASCII から EBCDIC に変換したりします。

どのようなプログラムでも、ASCII モードまたは EBCDIC モードのいずれかで、すべてのモジュールがコンパイルされることになります。

次のコンパイラ スイッチがサポートされています。

-ascii ユーザー プログラムで使用されているすべての文字データが、ASCII フォーマットで保存されます (デフォルト)。
-ebcdic ユーザー プログラムで使用されているすべての文字データが、EBCDIC フォーマットで保存されます。

次に、コンパイラによる EBCDIC モードでの文字データの処理方法の例を示します。

'abc' 保存形式:0x818283
'abc ' 保存形式:0x81828340
'abc 'E 保存形式:0x81828340
'abc 'A 保存形式:'0x61626320
dcl s char (4) init (''); 保存形式:0x40404040
dcl s char (4) init (''E); 保存形式:0x40404040 (''E は 4 つの EBCDIC スペース 0x040 で埋められた NULL 文字列)
dcl s char (4) init (''A); 保存形式:0x40404040 (''A は 4 つの EBCDIC スペース 0x040 で埋められた NULL 文字列)

次に、コンパイラによる ASCII モードでの文字データの処理方法の例を示します。

'abc' 保存形式:0x616263
'abc ' 保存形式:0x61626320
'abc 'E 保存形式:0x81828340
'abc 'A 保存形式:'0x61626320
dcl s char (4) init (''); 保存形式:0x20202020
dcl s char (4) init (''E); 保存形式:0x20202020 (''E は 4 つの ASCII スペース 0x020 で埋められた NULL 文字列)
dcl s char (4) init (''A); 保存形式:0x20202020 (''A は 4 つの ASCII スペース 0x020 で埋められた NULL 文字列)
注: 上記の例では、NULL 文字列は EBCDIC モードまたは ASCII モードに応じてスペースで埋められるため、"E および "A のサフィックス文字は不要です。

サーバーを経由して EBCDIC モードまたは ASCII モードでコンパイルする場合、出力は、サーバーの MF_CHARSET の設定に左右されます。次の表に、サーバーの MF_CHARSET 設定に基づいて、EBCDIC または ASCII でコンパイルされたプログラムを出力する場合に予期される、SYSPRINT の出力フォーマットを示します。

プログラムのコンパイル モード サーバーの実行モード DCB 予期される SYSPRINT のフォーマット
ASCII ASCII SYSOUT=* ASCII
EBCDIC EBCDIC SYSOUT=* EBCDIC
ASCII ASCII SYSOUT=*,DCB=(RECFM=LSEQ) ASCII
EBCDIC EBCDIC SYSOUT=*,DCB=(RECFM=LSEQ) ASCII
ASCII EBCDIC SYSOUT=*,DCB=(RECFM=LSEQ) ASCII

EBCDIC データ セットは EBCDIC 形式であり、ESMAC で正しく表示されることに注意してください。LSEQ データ セットは ASCII 形式に反転されて、ESMAC で正しく表示されます。