PRINT ファイルへのデータ指示出力およびリスト指示出力は、あらかじめ設定されているタブ位置に合わせて配置されます。 タブ位置は、PL/I が定義するタブ制御テーブル内で定義されます。 タブ制御テーブルは、PLITABS という名前の外部構造体です。 図 11 に PLITABS の宣言を示します。
dcl 1 PLITABS static external,
( 2 Offset init (14),
2 Pagesize init (60),
2 Linesize init (120),
2 Pagelength init (64),
2 Fill1 init (0),
2 Fill2 init (0),
2 Fill3 init (0),
2 Number_of_tabs init (5),
2 Tab1 init (25),
2 Tab2 init (49),
2 Tab3 init (73),
2 Tab4 init (97),
2 Tab5 init (121)) fixed bin (15,0);テーブル内にフィールドを定義する方法は、次のとおりです。
リンカーを用いて PLITABS への外部参照を解決すれば、ユーザー・プログラムで PL/I のデフォルトのタブ設定を変更することが できます。 この変更は、メインルーチンが含まれるソース・プログラム内に、PLITABS という名前と EXTERNAL STATIC という属性を持つ PL/I 構造体を記述することによって実行します。
図 12 は、PL/I 構造体の例です。この例では、位置 30、60、90 に 3 つのタブを設定し、ページ・サイズおよび行サイズにはデフォルト値が使われています。TAB1 は行上に印刷される 2 番目の項目の位置を識別することに 注意してください。行上の第 1 項目は常に 左マージンから始まります。構造体の第 1 項目は、NO_OF_TABS フィールドへのオフセットです。なお、FILL1、FILL2、FILL3 は、オフセットの値を -6 で調整すれば省略できます。
dcl 1 PLITABS static ext,
2 (Offset init(14),
Pagesize init(60),
Linesize init(120),
Pagelength init(0),
Fill1 init(0),
Fill2 init(0),
Fill3 init(0),
No_of_tabs init(3),
Tab1 init(30),
Tab2 init(60),
Tab3 init(90)) fixed bin(15,0);