私はN88-BASICを使用しているときに、プログラムを作ってセーブしようとして、
「げっ!ディスクをフォーマットしていない!」と泣きを見たことが何度かあります。
現在のようにフォーマット済みディスクなんてのはなく、買ってきたディスクは
フォーマットしないと使えず、フォーマットをするためには当然フォーマットプログラムを
起動しなければならないのですが、N88-BASIC時代は他のプログラムを起動するためには、
自分をメモリーから消さなければならないのです。つまり、フォーマットするためには、
今作ったプログラムを諦めなければならなかったのです。
MS-WindowsのようなマルチタスクOSでは、そんなこと気にせずにフォーマットできます。
シングルタスクのMS-DOSでは、同時にプログラムを実行させることは不可能ですが、
メモリーの許す限り、プログラムから他のプログラムを実行させ、元のプログラムに
戻ると言うことが可能です。(他のプログラムをあたかもサブルーチンのように呼び出す
ことができます。)
プログラムの実行
AX = 4B00h
DS:DX = プログラム名の格納アドレス
ES:BX = パラメータブロックの格納アドレス
INT 21h
戻り値:CF = 0 のとき
正常に実行された
CF = 1 のとき
AX = 0001h : ALの値が無効
AX = 0002h : ファイルが存在しない
AX = 0008h : メモリ不足
AX = 000Ah : 実行環境が32Kバイト以上であった
AX = 000Bh : EXEファイルのヘッダーが異常
|
一般に、自分自身を親プロセス、呼び出して実行するプログラムを子プロセス
(略して「子プロ」)と言います。
親プロセスがCOMファイルの場合、自分が実行されるときに空きメモリーすべてを
使用します。したがって、メモリーを変更しないと
子プロセスを実行するメモリーが足りなくて実行できません。また、自分がEXEファイル
の場合でも、可能な限りメモリーを子プロセスのためにあけておくべきです。
子プロセスが終了するとCF=0で戻ってきます。
また、親プロセスが開いているファイルは、ファイルポインタを何らかの形で、
子プロセスに渡すことで、引き続き子プロセスでも使用することができます。もちろん
子プロセスでそのファイルをクローズすれば、親プロセスで使用することはできなく
なります。しかしこのような方法でファイルを他のプログラムでも使用するのは
あまり好ましい使い方ではありません。