バージョン 4.2.5
 —  ステートメント  —

COMPOSE

このステートメントは、Con-nect または Con-form がインストールされている場合にのみ使用できます。

COMPOSE
[RESETTING-clause]
[MOVING-clause]
[ASSIGNING-clause]
[FORMATTING-clause]
[EXTRACTING-clause]

複数の節を指定した場合、これらの節は上記の順序で処理されます。

このドキュメントでは、次のトピックについて説明します。

構文図で使用されている記号については、「構文記号」を参照してください。


機能

COMPOSE ステートメントでは、Con-form(Con-nect 内のテキストフォーマッタ)によるテキストのフォーマットを、Natural プログラムから直接開始します。

フォーマットするテキストは、変数を使用して提供するか、または Con-nect テキストブロック(Con-form フォーマットコマンドを含むドキュメント)から取得できます。

Natural 変数の内容は、フォーマットするテキストにダイナミックに組み込む変数として Con-form に渡すことができます。

また、Con-form 変数に含まれている値は、テキストフォーマッタから Natural プログラムに返すこともできます。

Con-form の手続きが完了すると(ドキュメントがフォーマットされると)、出力は次の場所のいずれかに渡されます。

Top of page

構文説明

RESETTING-clause この節は、テキストフォーマットバッファエリアからの情報を削除して、CSIZE によって割り当てられた COMPOSE バッファからメモリを解放します。 「RESETTING 節」を参照してください。
MOVING-clause この節は、テキスト行をテキストフォーマッタバッファエリアに移動、またはフォーマッタに直接移動して、フォーマットされたテキスト出力をフォーマッタのワークスペースから取得します。 「MOVING 節」を参照してください。
ASSIGNING-clause この節は、Natural 変数をテキスト変数に割り当てます。 「ASSIGNING 節」を参照してください。
FORMATTING-clause この節は、テキストおよび Con-form ステートメントを組み合わせた入力を使用して、最終的なフォーマット形式(正しい改行と改ページを含む)でテキストを作成します。 「FORMATTING 節」を参照してください。
EXTRACTING-clause この節は、テキスト変数の値を Natural 変数に割り当てます。 「EXTRACTING 節」を参照してください。

RESETTING 節

RESETTING

DATAAREA

TEXTAREA
MACROAREA
ALL

 この節は、テキストフォーマットバッファエリアから次のものを削除します。

注意:
互換性に関する理由から、キーワード TEXTAREA は、MOVING 節で使用されるものと同じフォーマッタの "データエリア" を表します。

MOVING 節

この節は、1 つ以上のテキスト値をテキストフォーマットバッファエリアに移動します(「構文 1」)。 このエリアは、フォーマット操作の入力ソースとして使用できます。 テキストフォーマッタが現時点で入力待ちになっている場合(「ダイアログモード」を参照)、テキストは Con-form のテキストエリアには格納されずに、フォーマッタに直接渡されます(「Syntax 1」と「構文 2」)。 ソース入力は、LAST オプションで終了します。 フォーマットされたテキストが現時点で出力待ちになっている場合は(「ダイアログモード」を参照)、MOVING 節の構文 3 を使用して、Natural プログラムからフォーマッタに制御を戻します。 ステータス変数の詳細については、「FORMATTING 節」を参照してください。

ダイアログモードのステータスに応じて、MOVING 節を次の形式のいずれかで使用できます。

構文 1

MOVING 節の構文 1 は、フォーマットがまだ始まっていない場合、またはフォーマッタが入力用のダイアログモードで入力(最初のステータス変数である TERM)を待っている場合に適しています。

MOVING [operand1] 37 [TO DATAAREA] [LAST] [STATUS [TOoperand2  [operand3 [operand4  [operand5]]]]

構文 2

MOVING 節の構文 2 は、フォーマッタが入出力両用のダイアログモードで追加の入力(最初のステータス変数である TERM)を待っている場合に適しています。 このモードでは、フォーマッタは複数行の入力を受け入れません。

実行コンテキストは、一連の COMPOSE ステートメントを実行する間に変化することがあります。 したがって、フォーマッタが入力待ちの場合でも、出力変数を再指定する必要があります。

MOVING

[operand1] [TO DATAAREA]

[OUTPUT] TO VARIABLES operand6 20
  LAST
  [STATUS [TO] operand2  [operand3  [operand4  [operand5]]]]

構文 3

MOVING 節の構文 3 は、フォーマッタが出力用(および同時に入力用の可能性もあり)のダイアログモードで、出力(最初のステータス変数内である STRG)を Natural プログラムに渡す場合に適しています。

MOVINGOUTPUT [TO VARIABLES] operand6 20 [STATUS [TO] operand2 [operand3  [operand4 [operand5]]]]

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1 C S A     A N P                   不可
operand2   S       A                      
operand3   S                 B            
operand4   S                 B            
operand5   S                 B            
operand6   S A     A                       不可

Operand2 は、フォーマット/長さ A4 で定義する必要があります。 Operand3operand4、および operand5 は、フォーマット/長さ B4 で定義する必要があります。

ASSIGNING 節

この節は、値を Con-form テキスト変数に割り当てます。 これらのテキスト変数は、フォーマット操作の中で後で参照できます。

テキスト変数名は、大文字で指定する必要があります。

ASSIGNING [TEXTVARIABLE] {operand1=operand2}, 19

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1 C S       A                       不可
operand2 C S       A N P                  

FORMATTING 節

この節では、フォーマットされた出力が Con-form によって生成されます。

フォーマットオプションは、1 つ以上の副節で指定します。 副節を省略すると、Con-form によってデフォルトのフォーマットオプションが適用されます。 ステータス変数は、ダイアログモードで使用されます。

FORMATTING

OUTPUT-subclause

 
INPUT-subclause  
STATUS-subclause  
PROFILE-subclause  
MESSAGES-subclause  
ERRORS-subclause  
ENDING-subclause  
STARTING-subclause

構文要素の説明:

OUTPUT-subclause 出力メディア。 Natural レポート、Con-nect キャビネット、1 つ以上の Natural 変数(または Natural 変数の配列)、または Natural 以外のプログラムを、出力メディアにすることができます。 「OUTPUT 副節」を参照してください。
INPUT-subclause 入力メディア。 Con-nect ドキュメント、COMPOSE データエリア(「MOVING 節を参照)、COMPOSE ステートメントを実行する Natural プログラムの環境(「MOVING 節を参照)、Natural プログラム、またはこれらの 4 つを混合したものを、入力メディアにすることができます。
STATUS-subclause

フォーマット操作のステータス。 フォーマット操作では、COMPOSE ステートメントを複数回実行することがあります(ダイアログモード)。 例えば、入力は Natural プログラムによってフォーマッタのワークスペースに送られ、出力はフォーマッタのワークスペースから Natural プログラムの環境(1 つ以上の Natural 変数)に渡されます。 したがって、フォーマット操作のステータスを Natural プログラムに通知する必要があります。

フォーマット処理の間に、次の変数が Natural プログラムに渡されます。

State ダイアログモードで入力の準備ができている場合は TERM
ダイアログモードで出力の準備ができている場合は STRG
フォーマット処理が正常に完了した場合は END
フォーマット処理が正常に完了しなかった場合は ENDX
Position フォーマットしているドキュメントのページ番号と行番号。 ページ番号と行番号は、2 つの変数(ページ位置と行位置)で別々に保持されます。
Amount of Output Data Natural プログラムに渡されるフォーマット済み出力の行数。 フォーマッタは、値が挿入される次の出力変数へのポインタとしてこの番号を使用します。 この値は、出力行が発行されると 1 ずつ増加します 現在の値が範囲外にある場合、値は 1 に設定されます。
PROFILE-subclause 入力処理の前に処理されるテキストブロック。
MESSAGES-subclause 警告メッセージと統計情報の出力、およびエラー処理を制御します。
ERRORS-subclauses
ENDING-subclause ENDING 副節」を参照してください。
STARTING-subclause STARTING 副節」を参照してください。

OUTPUT 副節

この副節を使用すると、Con-form でフォーマットされたテキストの出力先を指定できます

この副節を省略すると、デフォルトの出力デバイスとして Natural のメインプリンタが使用されます。

OUTPUT

(rep)

SUPPRESSED
CALLINGoperand1
TO VARIABLES [CONTROL operand2 operand3]operand4 20
DOCUMENT-option

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1 C S       A                       不可
operand2 C S       A                       不可
operand3 C S       A                       不可
operand4   S A     A                       不可

構文要素の説明:

OUTPUT (rep)

出力先をプリンタに指定し(レポート番号が 0 ではない)、Con-nect プリンタプロファイルが Con-nect API 関数 Z-DRIVER によってすでにロードされている場合、そのプロファイルの設定は、フォーマットされる出力テキストのテキスト強調表示オプションを制御するために使用されます。

プリンタプロファイルがアクティブであり、論理フォームフィードの制御を指定していなかった場合は、Natural ニュークリアスの適切な内部機能を使用して改ページが挿入されます。

現在アクティブになっている Con-nect プロファイルに反映されていないその他のテキスト強調表示オプションは、すべて無視されます。

注意:
レポート以外の出力先を指定した COMPOSE RESETTING ALL または COMPOSE FORMATTING ステートメントを実行すると、フォーマッタのワークスペースからプリンタプロファイルがアンロードされます。

出力先をレポート 0 に指定するか、またはプリンタプロファイルがアクティブでない場合は、出力処理の役割が Con-nect から Natural ニュークリアスルーチンに渡されます。 この状況では、太字、下線、および斜体といったテキスト強調表示オプションのみが認識されます。

注意:
DEFINE PRINTER (n) OUTPUT 'CONNECT' ステートメントで参照されるレポートは、COMPOSE FORMATTING ステートメントで出力先に指定することはできません。

OUTPUT SUPPRESSED このオプションを指定すると、出力が SUPPRESSED されます。
OUTPUT CALLING Natural 以外のプログラム」セクションを参照してください。
OUTPUT TO VARIABLES

通常、フォーマットしたテキストは、最終的なフォーマット形式で Natural 変数の配列に渡されます。 各行は変数に格納されます(必要に応じて、変数に適合するように行は切り捨てられます)。 テキスト強調表示オプションは無視されます。ただし、例外として、CONTROL 変数で指定した強調表示オプションは、テキストの一部分の強調に使用されます(太字または下線)。

CONTROL 変数、I、および N を指定すると、中間フォーマット形式(分散論理制御シーケンスを含む)でフォーマットしたテキストが生成されます。

Operand2operand3 は、フォーマット/長さを A1 にする必要があります。

詳細については、「ダイアログモード」を参照してください。

OUTPUT DOCUMENT 下記の「DOCUMENT オプション」を参照してください。

DOCUMENT オプション

DOCUMENT

INTO FINAL [CABINET] operand1 [PASSW=operand2]

INTERMEDIATE
 

[GIVING]

operand3 [operand4]

 
  operand4 [operand3]  

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1 C S       A                       不可
operand2   S       A                       不可
operand3   S                 B            
operand4   S                 B            

OUTPUT DOCUMENT

Operand3 (フォーマット/長さ B10)はフォーマッタによって使用され、ユニークキーをドキュメントから Natural プログラムに戻します。 このオプションは、互換性保持のためにのみサポートされています。

Operand4 (フォーマット/長さ B4)はフォーマッタによって使用され、フォーマットされた出力ドキュメントを指す ISN を Natural プログラムに戻します。 この ISN は、Con-nect API の連続的な呼び出しでドキュメントを参照する場合に有用です。

operand1(長さは最大 8 文字まで)を指定しなかった場合、ドキュメントは現在のユーザーのキャビネットに追加されます(現在アクティブな Natural ユーザー ID と同じ ID を持つキャビネットに追加)。

現在想定されているユーザー ID でアクセスできないキャビネットにドキュメントを保存する場合は、パスワード(最大 8 文字まで)を指定する必要があります。

Con-form は Con-nect アクセス制限の準拠を強化し、Con-nect に定義済みのキャビネット ID だけを受け入れます。

注意:
キャビネット ID は、大文字で指定する必要があります。

ドキュメントは、ドキュメント名なしで COMPOSE フォルダに追加されます。 タイトル行には、COMPOSE FORMATTING ステートメントを実行するプログラムの名前が、実行の日時とともに挿入されます。

キーワード INTERMEDIATE を省略すると、ドキュメントは最終的なフォーマット形式のテキストで作成されます。 この場合、太字や斜体などの特定のテキスト強調表示オプションは無視されます。

INPUT 副節

INPUT

DATAAREA

FROM

EXIT operand2 9

CABINETSoperand2 [PASSW=operand3]
operand1FROM

EXIToperand2 10  
CABINETS operand2 [PASSW=operand3]

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1 C S       A                       不可
operand2 C S       A                       不可
operand3   S       A                       不可

この副節は、テキストフォーマッタに入力を提供するソースを指定します。 入力は、1 つ以上の MOVING 操作によって値を挿入する必要がある Con-form のデータエリア(データエリアとダイアログモードからのテキストを組み合わせることも可能)から取得されるか、またはテキストブロック(operand1 で指定)から取得されます。 テキストブロックは、Con-nect キャビネットに含まれているか、または Natural 以外のプログラム によって提供されます。 テキストブロックは、CALL ステートメントに適用されるものと同じ構文を使用して呼び出します。 Con-nect キャビネットまたは Natural 以外のプログラムの階層を指定すると、operand1 で指定したテキストブロックを見つけるために各階層が順番にスキャンされます。

現在想定されているユーザー ID でアクセスできないキャビネットにドキュメントを保存する場合は、パスワードを指定する必要があります。

Con-form は Con-nect アクセス制限の準拠を強化し、Con-nect に定義済みのキャビネット ID だけを受け入れます。

この副節を省略すると、Con-form データエリアが処理されます。

注意:
キャビネット ID と テキストブロック ID は、大文字で指定する必要があります。

STATUS 副節

[STATUS operand1 [operand2 [operand3 [operand4]]]]

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
Operand1   S       A                       不可
Operand2   S                 B             不可
Operand3   S                 B             不可
Operand4   S                 B             不可

構文要素の説明:

operand 1 Status 変数 "State" を含みます。
operand 2 Status 変数 "Position(ページ番号)" を含みます。
operand 3 Status 変数 "Position(行番号)" を含みます。
operand 4 Status 変数 "Amount of Output Data" を含みます。

PROFILE 副節

PROFILE operand1 

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1 C S       A                       不可

この副節を使用すると、指定したテキストブロックの内容が、INPUT-subclause で指定されている入力よりも先に処理されます(デフォルトでは、テキストブロックがプロファイルとして処理されることはありません)。

MESSAGES 副節

MESSAGES

[LISTED] [ON] (rep)

SUPPRESSED

警告メッセージと統計情報は、フォーマットが完了すると表示されます。 SUPPRESSED を指定すると、メッセージは表示されず、またエラーは無視されます。

ERRORS 副節

ERRORS

[LISTED] [ON] (rep)

INTERCEPTED

この副節は、フォーマットエラーが発生した場合に実行されるアクションを指定します。 エラーは単に無視されるだけですが、Natural の標準エラー処理ルーチンによって処理されるか、または Natural レポート(rep)に出力されます。

注意:
エラーとメッセージは相互に排他的です。 異なるオプションを指定していた場合でも、一部のエラーでは Natural の標準エラー処理ルーチンが呼び出されます。 DEFINE PRINTER (n) OUTPUT 'CONNECT' ステートメントによって出力先が Con-nect システムになっているレポートを、エラーまたはメッセージの出力先に指定することはできません。

ENDING 副節

ENDING

[AT] [PAGE] operand1

AFTER operand1 [PAGES]

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1 C S         N P                   不可

この副節を使用すると、指定した番号の後にあるページでのフォーマット済みテキストの出力を抑制したり、フォーマットされた出力の量を指定したページ数に制限できます。

STARTING 副節

STARTING [FROM] [PAGE] operand1

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1 C S         N P                   不可

この副節を使用すると、指定した番号(operand1)のページに到達するまで、フォーマットされたテキストの出力が抑制されます。

EXTRACTING 節

EXTRACTING [TEXTVARIABLE] {operand =operand2}, 19

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1   S       A N P                  
operand2 C S       A                       不可

この節は、テキスト変数の値を Natural 変数に割り当てます。 テキスト変数の現在の設定は、前のフォーマット操作の結果によるものです。

テキスト変数名は、大文字で指定する必要があります。

Top of page

フォーマット処理

COMPOSE ステートメントの FORMATTING 節が実行されると、フォーマット処理が開始されます(MOVING 節によるテキスト入力を行おうとしたが、まだその入力が行われていない場合でも開始されます)。 フォーマット処理がアクティブな間は、COMPOSE MOVING ステートメントの実行によって生じるテキスト入力は、フォーマッタのワークスペースに直接送られます(この入力は、後で別のフォーマットプロセスに再使用することはできません)。 フォーマット処理が非アクティブな場合、テキスト入力は中間にある "DATAAREA" の COMPOSE バッファに格納されます。 したがって、入力を複数のフォーマット処理で再使用できます。

フォーマッタのバッファは Natural プログラムの最後ではクリアされないため、個々の COMPOSE ステートメントを 1 つの Natural プログラムの中で実行する必要はありません。これらのステートメントは、連続して呼び出される複数のプログラムの中で発行できます。

RESETTING 節や FORMATTING 節が実行されるか、または重大なフォーマットエラーが発生すると、進行中のフォーマット処理は終了します。

入力終了(EOI)は、MOVING 節の LAST 副節で指定します。

入力ソースとして Con-nect ドキュメントを指定した場合は、ドキュメントの終点に到達すると、そこが入力終了であるとみなされます。

注意:
フォーマット処理が所定の処理ステップにおいて常に適切なステータスであることを、FORMATTING または MOVING 節の STATUS 副節を使用して確認することをお勧めします。

Top of page

ダイアログモード

ダイアログモード処理は、入力のフォーマット中および出力の生成中に、ユーザープログラムとフォーマッタの間で実行される一連の対話です。

ダイアログモードを使用すると、ユーザープログラムで、入力階層の任意のレベルにあるフォーマッタに未加工テキストを入力として提供できます。 また、このモードは、フォーマットされた出力を現在のプログラム環境に直接受け入れます。

対話を行うには、フォーマット処理を一連のステップに再分割します。各ステップは、COMPOSE ステートメントによって別々に呼び出されます。

入力用のダイアログモード

入力テキストのソースが DATAAREA であるか、またはフォーマット制御ステートメント .TE ON に到達したときに、Con-form のデータエリアに処理するデータがそれ以上ない場合は、入力用のダイアログモードに入ります。 入力用のダイアログモードは、最初の STATUS 変数にあるワード TERM によって通知されます。

ユーザープログラムでは、その後処理される COMPOSE ステートメントの MOVING 関数を呼び出し、要求された入力を提供することによって、応答する必要があります。 MOVING 節の LAST オプションを指定するか、または MOVING 関数からのテキストと同様に .TE ON によって端末入力が呼び出された場合は .TE OFF を指定することによって、ユーザープログラムは端末入力を終了できます。 フォーマッタでは、フォーマット処理の終了を END または ENDX(最初のステータス変数にエラーがある場合)を使用して通知します。

出力用のダイアログモード

出力先を TO VARIABLES に指定すると、出力用のダイアログモードに入ります。 提供された Natural 変数に値が挿入されるか、または改ページに到達すると(いずれか先に発生した方)、制御がフォーマッタから Natural プログラムに戻されます。 出力用のダイアログモードは、最初の STATUS 変数にあるワード STRG によって通知されます。 ユーザープログラムは、Natural 変数に挿入されたフォーマット済み出力を取得して、その後処理される COMPOSE MOVING ステートメントで Natural 変数の別のセットを出力先に指定することによって、応答する必要があります。 フォーマット処理の終了は、END または ENDX(最初のステータス変数にエラーがある場合)で示されます。

注意:
ダイアログモードを使用する場合(「INPUT 副節」と「OUTPUT 副節」を参照)、通常はフォーマット操作を複数の COMPOSE ステートメントに分散して実行します。

入出力用のダイアログモード

入力と出力処理を組み合わせたダイアログモードに入ることができます。 したがって、フォーマッタによって追加入力が要求されるか(TERM で示される)、またはフォーマッタによって出力が提供されると(STRG で示される)、Natural プログラムでは適切なアクションを実行する必要があります。

入力と出力処理を組み合わせたダイアログモードに入ると、フォーマッタで一度に受け入れられる入力は 1 行だけになります。 入力モードのみの場合は、一度に複数の行が受け入れられます。

ダイアログモードでの COMPOSE ステートメントの実行

一連の COMPOSE MOVING の実行を含む COMPOSE FORMATTING ステートメントによってダイアログモードに入ったことが示される場合は、次のことに注意してください。

Top of page

Natural 以外のプログラム

FORMATTING 節で指定したパラメータに応じて、入力と出力は Natural 以外のプログラムで処理されます。 このようなプログラムは、CALL ステートメント内で使用されているのと同じメカニズムによって呼び出されます。

COMPOSE は、標準のリンケージ規則を使用してこれらのプログラムとパラメータを交換します(CICS 環境ではダイナミックロードは不可)。

注意:
Natural 以外のプログラムによる入力または出力処理は、メインフレームコンピュータ上でのみ可能です。他のプラットフォームでは COMPOSE ステートメントの該当する部分は無視されます。

フォーマット処理のステータスに応じて、フォーマッタと Natural 以外のプログラムの間で 2 つまたは 3 つのパラメータの受け渡しが行われます。

パラメータ 1(フォーマット/長さ A1) ファンクションコードが、フォーマッタから Natural 以外のプログラムに渡されます。 設定可能値:
I 開始(入力、出力)。
O ドキュメントをオープン(入力)。
R ドキュメントの 1 行を読み取り(入力)。
W 出力の 1 行に書き込み(出力)。
C ドキュメントをクローズ(入力)。
T 終了(入力、出力)。
パラメータ 2(フォーマット/長さ B1)

レスポンスコードが Natural 以外のプログラムからフォーマッタに渡されます。

設定可能値:

X'00' 機能が正常に完了しました。
X'01' 機能 O への応答:ドキュメントが見つかりませんでした。
機能 R への応答:ドキュメントの終点に到達しました。
X'FF' 機能が完了していません。
パラメータ 3(フォーマット A1/256) 機能 O と W の場合、こらのパラメータはフォーマッタから Natural 以外のプログラムに渡されます。 ただし、機能 R からのパラメータは、Natural 以外のプログラムからフォーマッタに渡されます。
バイト 1~2 このパラメータの長さ n を表します。
バイト 3~4 空きです。
バイト 5~n 機能 O:ドキュメント名。
機能 R:Natural 以外のプログラムによって読み取られる行。
機能 W:フォーマッタからの出力の行。

フォームフィードが必要な場合は出力の先頭に N が付けられ、それ以外の場合は 1 が付けられます。

出力を Natural 以外のプログラムに渡す場合は、テキストを強調表示する太字や斜体などの特定のオプションは無視されます。

Top of page

例 1

COMPOSE RESETTING ALL
        FORMATTING INPUT 'TEXT' FROM CABINET 'TLIB'  
        OUTPUT (1)
        MESSAGES LISTED ON (0)

上記の COMPOSE ステートメントでは、レポート 1 上に生成される Con-nect キャビネット TLIB 内のテキストブロック TEXT をフォーマットして出力します。 エラーおよび統計メッセージは、レポート 0(デフォルトプリンタ)に表示されます。

例 2

COMPOSE RESETTING ALL
COMPOSE MOVING '.FI ON' 'This is an example'
COMPOSE MOVING 'for use of Con-form from'
               'within Natural applications' LAST   
COMPOSE FORMATTING

上記の COMPOSE ステートメントは、レポート 0(デフォルトプリンタ)にフォーマットされたテキストを出力します。

例 3

COMPOSE ASSIGNING 'VAR1' = 'Text1', 'VAR2' = 540  

上記の COMPOSE ステートメントは、Con-nect プロシージャの Con-form テキスト変数 &VAR1&VAR2 に値を割り当てます。

例 4

XYLIB 内のテキストブロック XYZ

.FI ON
Dear Mr &name.,
.IL
I am pleased to invite you to a presentation of our new product &prod..  

Natural プログラム:

...
INPUT #NAME (A32) #PROD (A32)
COMPOSE ASSIGNING 'NAME' = #NAME, 'PROD' = #PROD
        FORMATTING INPUT 'XYZ' FROM CABINET 'XYLIB'   
        OUTPUT (1) MESSAGES SUPPRESSED
...

プログラムによって生成された入力マップ:

  #NAME Davenport
  #PROD Natural 4.2

出力結果:

  Dear Mr Davenport,
  
  I am pleased to invite you to a presentation of our new product Natural 4.2.

例 5

この例は、入力と出力処理を組み合わせたダイアログモードでのフォーマット処理を示しています。 このプログラム例では、Con-form の行単位のフォーマットモードを開始して、一部のコマンドと変数を Con-form に渡し、ステータス情報とフォーマットされた出力行を画面に表示するサブルーチンを実行します。

DEFINE DATA LOCAL
01 #LINES_PER_PERFORM(P5)   /* counts repeat-loops per PERFORM CNF_OUT
01 #TRACE(A1) INIT<'N'>     /* if 'Y' displays additional trace-infos
01 #OUT_FORM(A1) INIT<'F'>  /* output-format
01 #START_PAGE (P3) INIT<1> /* beginning of display
01 #CNTR (P5)               /* Loop-Counter
01 #STATI                   /* Status-Information
 02 #STATUS   (A4)          /* can be STRG TERM END or ENDX
 02 #PAGE     (B4)          /* actual page-number
 02 #LINE     (B4)          /* actual line-number on page (not .tt/.bt)
 02 #NO_LINES (B4)          /* number of lines returned
 02 REDEFINE #NO_LINES
  03 #NO_LINES_I (I4)
01 #OUTPUT(A30/4)           /* output of formatted line
01 #INDEX (P3)              /* index as pointer to out line
END-DEFINE
*
SET KEY ALL
SET CONTROL 'M9'
INPUT
   008/008 'Demonstration of formatted output to Variable'(I)
   /   08X 'Enter page to start display    :' #START_PAGE(AD=MIL)
   /   08X 'Display additional trace-data ?:' #TRACE(AD=MIT)
   /   08X 'Please select the output-format:' #OUT_FORM(AD=MIT)
           '(F=Final without BP/US-marks'
   /   44X 'M=Final with BP/US-marks "<>"'
   /   09X '(only, if CMF-Zap 2056 applied =>) I=Intermediate)'
   /   50X 'PF3=Exit'(I)
*
IF *PF-KEY EQ 'PF3'
   SET CONTROL 'MB'
   STOP
END-IF
*
IF NOT (#OUT_FORM EQ 'F' OR EQ 'M' OR EQ 'I')
   REINPUT ' Please enter valid code!' MARK *#OUT_FORM ALARM
END-IF
*
WRITE TITLE LEFT
     'Stat * Page     * Line     * No.Lines >> Formatted Output'(I)
   / '-'(79)(I)
*
SET CONTROL 'MB'
COMPOSE RESETTING ALL /* clear all con-form buffers
RESET #NO_LINES
*
* start line-oriented formatting-mode here
* starting from 0
DECIDE ON FIRST VALUE OF #OUT_FORM
   VALUE 'F'
      COMPOSE FORMATTING
           OUTPUT TO VARIABLES #OUTPUT (1:4)      /* to Output
           STATUS #STATUS #PAGE #LINE #NO_LINES   /* get Status
   VALUE 'M'
      COMPOSE FORMATTING
           OUTPUT TO VARIABLES CONTROL '<' '>'
                               #OUTPUT (1:4)      /* to output
           STATUS #STATUS #PAGE #LINE #NO_LINES   /* get Status
   VALUE 'I'
      COMPOSE FORMATTING
           OUTPUT TO VARIABLES CONTROL 'I' 'N'
                               #OUTPUT (1:4)      /* to output
           STATUS #STATUS #PAGE #LINE #NO_LINES   /* get Status
   NONE
      STOP
END-DECIDE
*
RESET #NO_LINES
*
* put some commands to con-form to see something
*
COMPOSE MOVING
     '.pl 16;.hs 2;.tt 1Formatierung in Variable//;.tt 2//' /* Cmd
     OUTPUT TO VARIABLES #OUTPUT (1:4)           /* to Output
     STATUS #STATUS #PAGE #LINE #NO_LINES        /* get Status
*
COMPOSE MOVING
     '.fs 1;.bt Ende Seite #//;.fi on;.tb *=15' /* Commands
     OUTPUT TO VARIABLES #OUTPUT (1:4)           /* to Output
     STATUS #STATUS #PAGE #LINE #NO_LINES        /* get Status
*
*
* loop 40-times, send commands to con-form and display output
*
COMPOSE ASSIGNING 'Wert' = '1-20' /* Assign value to variable &Wert
*
FOR #CNTR 1 40                      /* Loop some time
   IF #STATUS NE 'TERM' /* no wait-for-input => error!!!!
      IF #STATUS EQ 'STRG'
         IGNORE
      ELSE
         WRITE 'Unexpected Status-code' #STATUS(AD=OI) 'found!'
             / 'Execution has stopped....'
         STOP
      END-IF
   END-IF
*
   IF #CNTR EQ 21
      COMPOSE ASSIGNING 'Wert' = '21-40' /* Assign a variable-value
   END-IF
   COMPOSE ASSIGNING 'CNTR' = #CNTR /* Again assignment
   COMPOSE MOVING
        '.BP;&Wert *Durchlauf &CNTR;.BR'      /* Commands
        OUTPUT TO VARIABLES #OUTPUT (1:4)     /* to Output
        STATUS #STATUS #PAGE #LINE #NO_LINES  /* get Status
   PERFORM CNF-OUT                            /* show result
END-FOR
COMPOSE MOVING
     LAST                                  /* End-Of-Processing
     OUTPUT TO VARIABLES #OUTPUT (1:4)     /* to Output
     STATUS #STATUS #PAGE #LINE #NO_LINES  /* get Status
*
IF #TRACE EQ 'Y'
   WRITE 'End of processing...'(I)
END-IF
*
* Subroutines
*
PERFORM CNF-OUT
*
* Subroutine to display any waiting output from con-form
*
DEFINE SUBROUTINE CNF-OUT
   RESET #LINES_PER_PERFORM
   REPEAT UNTIL #STATUS EQ 'TERM' /* TERM = input waiting
      PERFORM BREAK               /* do some break-processing
      AT BREAK OF #PAGE
         IF #PAGE GT #START_PAGE
            WRITE '-'(79)(I)
         END-IF
         IF #TRACE EQ 'Y'
            WRITE 'End of this page...'(I)
         END-IF
         NEWPAGE
      END-BREAK
      IF #PAGE GE #START_PAGE     /* show line of output
         IF #NO_LINES_I GT 0
            FOR #INDEX 1 #NO_LINES_I
               ADD 1 TO #LINES_PER_PERFORM /* count loops
               WRITE NOTIT NOHDR #STATUS '*' #PAGE '*' #LINE
                                         '*' #NO_LINES
                                         '>>' #OUTPUT (#INDEX)
            END-FOR
         END-IF
      END-IF
      IF #STATUS NE 'STRG'         /* if no wait on out
         ESCAPE BOTTOM
      END-IF
      RESET #NO_LINES
      COMPOSE MOVING
           OUTPUT TO VARIABLES #OUTPUT (1:4)    /* get Output
           STATUS #STATUS #PAGE #LINE #NO_LINES /* Status
   END-REPEAT
*
   IF #TRACE EQ 'Y'
    WRITE 'Count of Lines per PERFORM was'(I) #LINES_PER_PERFORM(AD=OI)
   END-IF
*
 END-SUBROUTINE
 SET CONTROL 'MB'
END

Top of page