これまでは、DEFINE SUBROUTINE
ステートメントを使用して、サブルーチン MARK-SPECIAL-EMPLOYEES
をプログラム内で定義していました。 この演習では、サブルーチンを別のオブジェクトとしてプログラムの外部に定義します。
以下の演習を完了すると、サンプルのアプリケーションは次のモジュールで構成されます。
このドキュメントには次の演習が含まれています。
プログラムの既存のコードを外部サブルーチンで再使用するため、プログラムを新しい名前で保存し、タイプをサブルーチンに変更して、不要な行をすべて削除します。
外部サブルーチンの 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
」と入力します。
プログラムを格納します。
同等のサブルーチン名をリストするには
プログラムエディタのコマンド行で、次のいずれかのコマンドを入力します。
LIST EXTENDED SUBROUTINE *
L EXT S *
次の画面が表示されます。 すべての外部サブルーチンオブジェクト(メンバ)、および現在の Natural ライブラリおよびシステムファイルで使用できる同等のロングネームがリストされます。
12:21:09 ***** NATURAL LIST COMMAND ***** 2007-03-20 User SAG - LIST Objects in a Library - Library TUTORIAL Cmd Subroutine/Class Name Type S/C Member Cat Date Cat Time --- *_______________________________ S____ --- *________ *__________ *________ __ MARK-SPECIAL-EMPLOYEES Subro S/C SUBR01 2007-03-20 12:11:56 1 Objects found Top of List. Command ===> Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--- Help Print Exit Sort -- - + ++ > Canc |
特定の範囲のサブルーチン名を表示する場合は、ヘッダー Subroutine/Class Name または Member の下にあるフィールドで、検索値の後にアスタリスク(*)を続けて入力します。 例:
Cmd Subroutine/Class Name Type S/C Member Cat Date Cat Time --- MARK*___________________________ S____ --- *________ *__________ *________ __ MARK-SPECIAL-EMPLOYEES Subro S/C SUBR01 2007-03-20 12:11:56 |
PF3 キーを押して、プログラムエディタに戻ります。
次の演習「サブプログラム」に進みます。