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 つの EBCDIC スペース 0x020 で埋められた NULL ストリング) |
dcl s char (4) init (''A); | 0x20202020 として保存されます (''A は 4 つの EBCDIC スペース 0x020 で埋められた NULL ストリング) |
サーバを経由して 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 で正しく表示されます。