ASA 制御文字のサポート

ASA 制御文字は ANSI で定義されています。PL/I では、PRINT ファイルで送信される各レコードの先頭バイトの値が 5 種類あります。

文字 処理
(空白) 前にスペース (空白文字) を 1 行入れて印刷
0 前にスペースを 2 行入れて印刷
- 前にスペースを 3 行入れて印刷
+ 前にスペースを入れずに印刷
1 新しいページを開始

Open PL/I では、Enterprise Server で実行されるプログラムに対して、DD が以下に該当する場合にのみ ASA 制御文字が生成されます。

Open PL/I では、CTLASA 属性を持つように内部的に指定された STREAM ファイルに対して ASA 制御文字が生成されます。CTLASA 属性はさまざまな組み合わせで有効になります。

ファイル入出力

Open PL/I では、STREAM IO に対する ASA 制御文字の生成は、PRINT/CTLASA 属性が指定されたファイルについてのみサポートされます。PRINT が指定されている場合、PRINT ファイルの各レコードの最初のデータ バイトは ANS プリンター制御文字用に予約されます。その後に Open PL/I で制御文字が挿入されます。リスト指示およびデータ指示のデータ送信によって送信されたデータ値は、左余白および実装定義の事前設定されたタブ位置に整列されます。

PRINT ファイルのレイアウトを制御するために使用できるオプションおよび形式項目を次に示します。

文のオプション 編集指示の形式項目 効果
OPEN LINESIZE(n) - 行幅を設定
OPEN PAGESIZE(n) - ページ長を設定
PUT PAGE PAGE 新しいページにスキップ
PUT LINE(n) LINE(n) 指定された行にスキップ
PUT SKIP(n) SKIP(n) 指定された行数だけスキップ
PUT - COLUMN(n) 指定された文字位置にスキップ
PUT - X(n) 空白文字を挿入して行内の位置を確立

LINESIZE および PAGESIZE で、フッターを除く印刷範囲の次元を設定します。

LINESIZE オプションでは、各印刷行に含まれる最大文字数を指定します。指定しない場合、PRINT ファイルには 120 文字が使用されます。PRINT ファイル以外に対するデフォルトはありません。

PAGESIZE オプションでは、各印刷ページの最大行数を指定します。指定しない場合は 60 行が使用されます。

次に、ファイルのレイアウトを制御する例を示します。

open file(ASAFILE) output stream print PAGESIZE(55) LINESIZE(110);
on endpage(ASAFILE) 
  begin;
    put file(ASAFILE) skip list (Footer);
    put file(ASAFILE) page list (’Pg: ’|| Pageno(ASAFILE));
    put file(ASAFILE) skip (3);
  end;

OPEN 文で、ファイル Report を PRINT ファイルとして開きます。PAGESIZE(55) は、各ページに最大 55 行が含まれることを示します。すでに 55 行まで書き込まれた (またはスキップされた) 後にページに書き込もうとすると、ENDPAGE 条件が発生します。ENDPAGE 条件の暗黙の処理では新しいページにスキップしますが、この例に示すように、ON 文を使用して独自の処理を設定できます。

この例の LINESIZE(110) は、ページの各行に最大 110 文字まで含めることができることを示します。110 文字を超える行を書き込もうとすると、超過した文字が次の行に配置されます。56 行目への書き込み (または 55 行目の下までスキップ) を試みると、ENDPAGE 条件が発生し、begin ブロックが実行されます。ENDPAGE 条件は各ページで 1 回しか発生しません。つまり、ENDPAGE 条件が発生した後は、指定された PAGESIZE を超えて印刷を続けることができます。これは各ページの一番下にフッターを記述するのに便利です。

最初の PUT 文で、1 行スキップし、57 行目に Footer という値 (文字列) を印刷するように指定しています (ENDPAGE が発生すると、現在の行は常に PAGESIZE+1 になります)。ファイル ASAFILE が次のページに設定され、文字定数「Page」とページ番号が連結されて印刷されます。最後の PUT 文で 3 行スキップしているため、次の印刷は 4 行目から開始されます。begin ブロックから ENDPAGE 条件が発生した PUT 文に制御が戻ります。ただし、その文で指定されている SKIP オプションや LINE オプションは、それ以上は処理されません。