6 サブモジュールの実行ファイル 


2種類の形式のサブモジュールがあります。

1. MSーDOSのEXEファイル
それ自身で常駐と解放する部分を持つMS−DOS TSR(常駐プログラム)。 

2. RsKey独自の機械語ファイル
RsKey付属の機械語ローダがロードと解放をおこなう機械語ファイル。

一度ロードされてしまえば、どちらのタイプもRsKeyからは見分けることはできません。両者の処理部分は、RsKeyからはまったく同等に見えます。したがって、2つの種類のサブモジュールを同時に使用しても、データはサブモジュール間を問題なく移動できます。

LISTSUB.EXEで使用モジュール名を表示させると、機械語サブモジュール名の後ろにはアスタリスク(*)が付けられます。

6.1 MS−DOS TSRサブモジュール
MS−DOSのTSRで実現されるサブモジュールです。サブモジュール自身が、常駐、及び、解放をおこなう部分を持ち、単独で実行できる .EXEか、.COMファイルです。通常、Cで記述されるので .EXEファイルになります。

特徴

1。 どんな小さな処理を行っていても、作成の仕方によってはかなり常駐サイズが大きくなります。
2。 複雑な処理をおこなうサブモジュールを作成するのに適しています。
3。 実行時、コマンドラインからオプション指定をします。ほとんどのサブモジュールはコマンドラインオプションを受け付けます。

RsKeyとサブモジュールはメモリ上では別々の位置( 異なるセグメント)に置かれます。サブモジュール起動時にRsKeyとリンクすることでデータの受け渡しがおこなえるようになります。 

6.2 機械語サブモジュール
データ処理部だけから構成されるサブモジュールです。MS−DOSの実行ファイル形式にはなっていないので、自分自身では実行できません。RsKey付属の機械語ローダで実行したり(常駐させたり)、終了(解放)させたりします。

機械語サブモジュールは、RsKeyと同じメモリ上(同じコードセグメント)に置かれます。このため、このタイプのサブモジュールを使用する場合、RsKey起動時にRsKey内部に機械語領域を確保しなければなりません。

この確保した領域に、添付の機械語ローダ LOADBIN.EXE は機械語ファイルをロードします。 

ある程度のオーバヘッドはあるものの、基本的には処理部だけで構成されるため、簡単な処理ならば100バイト前後のメモリしか消費しません。 このため、行データのフィルタ、文字変換といった簡単な処理をメモリ消費を最小限におさえて実行できます。

機械語ファイルをRsKeyにロードするには、ローダ loadbin をファイル名を指定して実行します。 

    >loadbin ーf<機械語ファイル>

もし、機械語用の領域が確保されていなかったり、スペースが不足しているとエラーメッセージを表示します。 

ーlオプションをつかって、

>loadbin ーf<ファイル> ーl 

とすると、-f で指定した機械語ファイルについての情報を表示できます。

通常、機械語ファイルの拡張子 .bin です。

例えば、AAA、BBBという常駐型のモジュール、aaa,bbbという機械語モジュールをロードしたければ、 

     >AAA
     >loadbin ーfaaa
     >BBB
     >loadbin ーfbbb

などとします。

RsKeyは最後にロードした bbb モジュールにデータを最初に渡し、その後、データはBBB,aaa,AAAの順でモジュール間を移動します。 
lisutsub を実行すると、 

     1.AAA
     2.aaa*
     3.BBB
     4.bbb*

と表示されます。 

解放するには、4番目の bbb から解放します。 モジュールが機械語タイプならば、 

    >loadbin ーr 

とします。 ファイル名は必要ではありません。 loadbinが解放すべき機械語モジュールを見つけだします。 ただし、loadbinは、機械後ファイルをカレントディレクトリか環境変数PATHで指定されているディレクトリから探しだします。見つからなければエラーとなります。 ーfでファイル名を指定しておけば、このような問題は発生しません( loadbin は機械語サブモジュール解放時に、機械語ファイルを読み込まなければなりません。 これは、常駐している部分には、クリーンアップ処理コードがふくまれていないからです。解放時にクリーンアップ処理コードを読み込み、実行します ) 

例:
>loadbin ーf¥rskey¥bb.bin ーr

以下、
    >BBB ーr
    >loadbin ーr
    >AAA ーr
 
の順で解放します。 解放の順序を間違えると、エラーメッセージが表示されます。