PL/I プログラムでは、PRINT ファイルを使用すると、ストリーム指向データ伝送からの印刷出力のレイアウトを制御するために 便利です。 PL/I は、PAGE、 SKIP、 LINE の各オプション、およびフォーマット項目に対応して印刷制御文字を自動的に挿入します。
関連付けられたデータ・セットを直接印刷するつもりでない場合でも、PRINT 属性を任意の STREAM OUTPUT ファイルに適用する ことができます。 PRINT ファイルが直接アクセス・データ・セットに関連付けられていると、印刷制御文字はこのデータ・セットのレイアウトには 効力がありませんが、レコード内のデータの一部として現れます。
PL/I は、PRINT ファイルによって伝送される各レコードの最初のバイトを米国標準規格 (ANS) の印刷制御文字用に予約し、 自動的に適切な文字を挿入します (プリンター向けファイル参照)。
PL/I は、レコードに適切な制御文字を挿入することによって、PAGE、SKIP、LINE の各オプションやフォーマット項目を処理します。 SKIP または LINE オプションで 4 行以上のスペースが指定されている場合は、PL/I は、適切な制御文字を使用して必要な数の ブランク・レコードを挿入し、必要なスペーシングを行います。
PRINT ファイルの伝送先が端末装置の場合は、出力フォーマットを指定しない限り、PAGE、SKIP、LINE の各オプションによって 3 行を超えてスキップされることはありません。
次のいずれかの方法によって、PRINT ファイルが生成した印刷行の長さを制限することができます。
RECSIZE には印刷制御文字用の余分のバイト数を含める必要があります。すなわち、RECSIZE は印刷される行の長さより 1 バイト長くなければなりません。 LINESIZE は、印刷される行の文字数を参照します。PL/I は印刷制御文字を追加します。
ファイルをいったんクローズし、新しい行サイズでもう一度オープンすることによって、実行中にファイルの行サイズを 変更しないでください。
PRINT ファイルは 120 文字のデフォルトの行サイズをもっています。したがって、PRINT ファイルのレコード長を指定する必要はありません。
図 10 は、PRINT ファイルと、ストリーム指向データ伝送ステートメントのオプションを使って、テーブルをフォーマット設定して、それを後で印刷できるように直接アクセス装置に書き込む方法を例示しています。このテーブルは、6' 間隔の、0° から 359° 54' までの角度の正弦から成ります。
/********************************************************************/
/* */
/* DESCRIPTION */
/* Create a SEQUENTIAL data set. */
/* */
/* USAGE */
/* The following command is required to establish */
/* the environment variable to run this program: */
/* */
/* SET DD:TABLE=MYTAB.DAT,ASA(Y) */
/* */
/********************************************************************/
SINE: proc options(main);
/* Build a table of SINE values. */
dcl Table file stream output print;
dcl Deg fixed dec(5,1) init(0); /* init(0) for endpage */
dcl Min fixed dec(3,1);
dcl PgNo fixed dec(2) init(0);
dcl Oncode builtin;
dcl I fixed dec(2);
on error
begin;
on error system;
display ('oncode = '|| Oncode);
end;
on endpage(Table)
begin;
if PgNo ¬= 0 then
put file(Table) edit ('page',PgNo)
(line(55),col(80),a,f(3));
if Deg ¬= 360 then
do;
put file(Table) page edit ('Natural Sines') (a);
put file(Table) edit ((I do I = 0 to 54 by 6))
(skip(3),10 f(9));
PgNo = PgNo + 1;
end;
else
put file(Table) page;
end;
open file(Table) pagesize(52) linesize(102);
signal endpage(Table);
put file(Table) edit
((Deg,(sind(Deg+Min) do Min = 0 to .9 by .1) do Deg = 0 to 359))
(skip(2), 5 (col(1), f(3), 10 f(9,4) ));
put file(Table) skip(52);
end SINE;ENDPAGE ON ユニット内のステートメントによって、各ページの下にページ番号が挿入され、次ページの見出しがセットアップされます。
図 15 のプログラムは、レコード単位データ伝送を 使って、図 10 のプログラムが作成するテーブルを 印刷します。