サブモジュールは同時に最大10個までRsKeyに登録できます。
もし、同じ種類のサブモジュールが複数使われると、前のサブモジュールの上に置かれます。
例えば、サブモジュール1が実行されていて、同じ種類のサブモジュール2が実行されると、サブモジュール2は1の上(前)に置かれて、RsKeyと直接リンクします。サブモジュール1は2の下(次)に置かれます( つまり、リスト構造 )。
サブモジュールを終了するときには、一番上のサブモジュールから( サブモジュール2)を終了させなければなりません。つまり、最後に終了させたものから、最初に終了させなければなりません(LIFO)。このため、複数のサブモジュールを使用するとき、サブモジュールスタックという表現を用います。サブモジュールを実行するとサブモジュールスタックに置かれます(push)。終了すると取り出されます(pop)。
● サブモジュールスタックとRsKeyとのデータの受け渡し
サブモジュールスタックに注意を払われなければならないのは、サブモジュールの実行順が処理の内容を異なるものにしてしまう可能性があるからです。
RsKeyは、サブモジュールスタックの一番上にあるサブモジュールにデータを最初に渡します。それから、その下にあるサブモジュールが受け取ります。このように上にあるサブモジュールからデータを処理していくため、サブモジュールの置きかたで最終的な処理結果が異なる可能性がでてきます。
例:
以下のような2つのサブモジュールがあったとします。
サブモジュール1
すべての小文字を大文字に変換
サブモジュール2
’a’を大文字 ’A’に変換。
’b’を削除。
’c’を文字列 ”Pressed C”に変換
サブモジュール1を実行してから、2を実行した場合
RsKeyはサブモジュール2にデータを渡します。それから、サブモジュール1がデータを処理します。
RsKeyから ’a’、’b’、’c’ の3つの文字単位データが送られてきたら、最終的には、 APRESSED
C が業務プログラムに渡ります。
サブモジュール2を実行してから、1を実行した場合
今度は、サブモジュール1がデータを最初に処理します。
同じ様にRsKeyから ’a’、’b’、’c’ の3つの文字単位データが送られてきたとしたら、今度は
’A’ ’B’ ’C’ が最終的な結果になります。
● サブモジュールの組み合わせ
サブモジュールはブラックボックスです。サブモジュールの中身を知らなくても、入力されるデータがどのように出力されるかが分かれば利用できます。
サブモジュールのソースコードがなくても、そのサブモジュールを拡張できます。これには、別のサブモジュールを作成して、異なるデータが入力されるようにします。
例:
入力データに含まれるレコード番号を元に、ファイルからレコードデータを読みだして、そのデータを出力するサブモジュールがあるとします。入力データには、レコードデータは先頭に ”+”がつけられて含まれていなければならないとします。
+01ABCDEFG ( レコード番号 1 )
しかし、実際に外部機器から送られてくるデータには、レコード番号は最後の2桁に含まれているとします。ファイルを読みだすサブモジュールを作成するのは難しいので、既存のものを利用するとします。このためには、別のサブモジュールを作成して、外部機器からのデータを変換すれば可能になります。つまり、入力として "DATA01" のようなものを受け取り、"+01DATA" に変換して出力するようなサブモジュールを用意します。
入力 ーーー> 出力
DATA01 +01DATA
さらに、サブモジュールの出力を、既存のサブモジュールの入力になるようにします。このためには、まず、既存サブモジュールを実行してから、新規のサブモジュールを実行します。これで、最初に新規サブモジュールにデータが渡り、それから既存のモジュールに渡るようになります。
● LISTSUB.EXEユーティリティ
サブモジュールスタックに置かれているサブモジュール名を順番に表示できると便利です。例えば、使用している複数のサブモジュールを終了させるには、サブモジュールスタックの一番上にあるサブモジュールから順番に終了させなければなりません。随時、現在の状態を表示できれば、サブモジュール名を順番にどこかに記録しておく必要はありません。LISTSUB.EXEは、現在使用されているサブモジュール名を実行された順に表示するプログラムです。
>listsub
実行するには、MS−DOSプロンプトで、プログラム名を入力してリターンするだけです。コマンドラインオプションはとりません。もし、サブモジュールが1つでも使用されていれば、その名前を表示します。複数つかわれていれば、実行された順に番号をふって表示します。
例:
使用サブモジュール
---------------
1. FILESUB
2. CONV*
---------------
合計 : 2
注: モジュール名にアスタリスク "*" がついているものは機械語サブモジュールを表わします.
LISTSUBは常駐プログラムではありません。RsKeyに現在使用中のモジュール名を問い合わせて、それを画面に表示して終了します。何度実行しても構いません。