これまでは、MARK-SPECIAL-EMPLOYEES ステートメントを使用して、サブルーチン DEFINE SUBROUTINE をプログラム内で定義していました。この演習では、サブルーチンを別のオブジェクトとしてプログラムの外部に定義します。
以下の演習を完了すると、サンプルのアプリケーションは次のモジュールで構成されます。

このドキュメントには次の演習が含まれています。
プログラムの既存のコードを外部サブルーチンで再使用するため、プログラムを新しい名前で保存し、タイプをサブルーチンに変更して、不要な行をすべて削除します。
外部サブルーチンの DEFINE SUBROUTINE ステートメントは、プログラム内のインラインサブルーチンと同じ方法でコーディングします。
外部サブルーチンを作成するには
プログラムエディタのコマンド行で、次のように入力します。
SA SUBR01
現在のプログラムが新しい名前「SUBR01」で保存されます。プログラムは引き続きエディタに表示されます。
次のコマンドを入力して、新しく作成したオブジェクトをエディタにロードします。
E SUBR01
オブジェクトタイプはプログラムのままです。
プログラムを外部サブルーチンに変更するには、次のコマンドを入力します。
SET TYPE S
"S" はサブルーチンを表します。
画面に表示されるオブジェクトタイプが "Subroutine" に変わります。
行コマンド D を使用して、次の行を除くすべての行を削除します。
DEFINE DATA GLOBAL USING GDA01 LOCAL USING LDA01 END-DEFINE * DEFINE SUBROUTINE MARK-SPECIAL-EMPLOYEES MOVE '*' TO #MARK END-SUBROUTINE * END
テキストのブロックを削除することもできます。これには、次の手順を実行します。
ブロックの最初の行の先頭で、行コマンド「.X」を入力します。
ブロックの最後の行の先頭で、行コマンド「.Y」を入力します。
ENTER キーを押します。
削除する行のブロックが ".X" および ".Y" でマークされます。(マークを削除するには、コマンド行で「RESET」を入力します。)
マークされたブロックを削除するには、コマンド行で「DX-Y」を入力します。
サブルーチンを格納します。
PERFORM ステートメントは、内部サブルーチンおよび外部サブルーチンの両方を呼び出します。内部サブルーチンがプログラム内で見つからないと、Natural は同じ名前の外部サブルーチンを自動的に実行しようとします。Natural では、サブルーチンコードで定義された名前(サブルーチン名)が検索され、サブルーチンの保存時に指定した名前(Natural
オブジェクト名)が検索されるわけではありません。
外部サブルーチンの定義が完了したので、インラインサブルーチン(外部サブルーチンと同じ名前を持つ)をプログラムから削除する必要があります。
プログラムで外部サブルーチンを使用するには
サブルーチンが現在表示されているエディタのコマンド行で次のように入力して、プログラムエディタに戻ります。
E PGM01
次の行を削除します。
DEFINE SUBROUTINE MARK-SPECIAL-EMPLOYEES MOVE '*' TO #MARK END-SUBROUTINE
プログラムは次のようになります。
DEFINE DATA
GLOBAL USING GDA01
LOCAL USING LDA01
END-DEFINE
*
RP1. REPEAT
*
INPUT USING MAP 'MAP01'
*
IF #NAME-START = '.' THEN
ESCAPE BOTTOM (RP1.)
END-IF
*
IF #NAME-END = ' ' THEN
MOVE #NAME-START TO #NAME-END
END-IF
*
RD1. READ EMPLOYEES-VIEW BY NAME
STARTING FROM #NAME-START
ENDING AT #NAME-END
*
IF LEAVE-DUE >= 20 THEN
PERFORM MARK-SPECIAL-EMPLOYEES
ELSE
RESET #MARK
END-IF
*
DISPLAY NAME 3X DEPT 3X LEAVE-DUE 3X '>=20' #MARK
END-READ
*
IF *COUNTER (RD1.) = 0 THEN
REINPUT 'No employees meet your criteria.'
END-IF
*
END-REPEAT
*
END
プログラムを実行します。
開始名として「"JONES"」と入力し、ENTER キーを押します。
結果のリストには、20 日以上の休暇を取った各従業員にアスタリスクが引き続き表示されます。
プログラムエディタに戻るには、MORE プロンプトで「EDIT」と入力します。
プログラムを格納します。
次の演習に進みます。サブプログラム