スタック処理

Natural スタックは、Natural コマンド、ユーザー定義コマンド、および INPUT ステートメントで使用する入力データを格納できる、一種の "中間ストレージ" です。

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


Natural スタックの使用

スタックには、一連のログオンコマンドのように、頻繁に連続して実行する一連の機能を格納できます。

スタックに格納されたデータ/コマンドは、その一番上に "スタック" されます。格納するデータ/コマンドをスタックの一番上と一番下のどちらに置くかは指定できます。スタック内のデータ/コマンドは、スタックされている順番(スタックの一番上から)でのみ処理できます。

プログラムでは、システム変数 *DATA を参照することにより、スタックの内容を確認できます。詳細については、『システム変数』ドキュメントを参照してください。

スタックされたコマンド/データの処理順序

スタックに格納されているコマンド/データの処理は、実行する機能によって異なります。

コマンドを実行しようとしている場合、つまり、NEXT プロンプトを表示しようとしている場合、Natural はまず、スタックの一番上がコマンドかどうかをチェックします。スタックの一番上がコマンドの場合、NEXT プロンプトは抑制されます。そして、コマンドが読み込まれ、スタックから削除されます。その後、NEXT プロンプトに応答して手動で入力されたかのように、コマンドが実行されます。

入力フィールドが含まれている INPUT ステートメントを実行しようとしている場合、Natural はまず、スタックの一番上に何らかの入力データがあるかどうかをチェックします。入力データがある場合、そのデータが INPUT ステートメントにデリミタモードで渡されます。スタックから読み込まれるデータは、INPUT ステートメントの変数と互換性のあるフォーマットである必要があります。その後、データはスタックから削除されます。INPUT ステートメントの説明の「Natural スタックデータの処理」も参照してください。

スタックのデータを使用して INPUT ステートメントを実行し、この INPUT ステートメントを REINPUT ステートメント経由で再実行すると、INPUT ステートメントの画面が再表示され、最初に実行したときと同じスタックデータが表示されます。REINPUT ステートメントでは、スタックから他のデータは読み込まれません。

Natural プログラムが正常に終了するときは、コマンドがスタックの一番上に来るか、またはスタックがクリアされるまで、スタックは一番上からフラッシュされます。Natural プログラムが端末コマンド %% またはエラーで終了した場合は、スタックが完全にクリアされます。

スタックへのデータの格納

以下の方法を使用して、データ/コマンドをスタックに格納します。

STACK パラメータ

Natural プロファイルパラメータ STACK は、データ/コマンドをスタックに格納するために使用できます。STACK パラメータ(『パラメータリファレンス』を参照)は、Natural のインストール時に Natural 管理者が Natural パラメータモジュールに指定するか、またはダイナミックパラメータとして Natural の起動時に指定します。

データ/コマンドを STACK パラメータ経由でスタックに格納する場合、複数のコマンドはセミコロン(;)で分割する必要があります。コマンドを一連のデータまたはコマンド要素に格納して渡す場合、コマンドの前にセミコロンを付ける必要があります。

複数の INPUT ステートメントに対するデータは、コロン(:)で分割する必要があります。単独の INPUT ステートメントで読み込むデータには、コロンを前に付ける必要があります。パラメータを必要とするコマンドをスタックする場合、コマンドとパラメータの間にはコロンを置きません。

セミコロンとコロンはでセパレータ文字として解釈されるため、入力データ自体にセミコロンとコロンを使用することはできません。

STACK ステートメント

プログラム内で STACK ステートメントを使用すると、データ/コマンドをスタックに格納できます。1 つの STACK ステートメントで指定したデータ要素は、1 つの INPUT ステートメントで使用します。これは、複数の INPUT ステートメントに対するデータをスタックに格納するには、複数の STACK ステートメントを使用する必要があることを意味します。

スタックには、フォーマットされていないデータもフォーマットされているデータも格納できます。

  • フォーマットされていないデータがスタックから読み込まれると、データ文字列はデリミタモードで解釈され、セッションパラメータ IA(INPUT 割り当て文字)および ID(入力デリミタ文字)で指定されている文字が、割り当てとデータ分割のキーワードに対する制御文字として処理されます。

  • フォーマットされているデータがスタックに格納されている場合、フィールドの個々の内容が分割され、対応する INPUT ステートメントの 1 つの入力フィールドに渡されます。スタックに格納するデータにデリミタ文字、制御文字、または DBCS 文字が含まれている場合、これらの文字が不適切に解釈されないように、フォーマットしてスタックに格納する必要があります。

STACK ステートメントの詳細については、『ステートメント』ドキュメントを参照してください。

FETCH および RUN ステートメント

呼び出すプログラムに渡すパラメータを持つ FETCH または RUN ステートメントを実行すると、これらのパラメータはスタックの一番上に格納されます。

スタックのクリア

スタックの内容は、RELEASE ステートメントで削除できます。RELEASE ステートメントの詳細については、『ステートメント』ドキュメントを参照してください。

注意:
Natural プログラムが端末コマンド %% またはエラーで終了した場合は、スタックが完全にクリアされます。