让你的程序能自动启动UCDOS
为此,我设计了不少方案,其中最简洁的办法编制下面这个过程文件autorunucdos,并在自己文件的开始处调用这个过程文件,如:
uses dos;
procedure autorunucdos;
begin
swapvectors;
exec(’c:\command.com’;’/c RD16’); {装字模}
swapvectors;swapvectors;
exec(’c:\command.com’;’/c KNL’); {装UCDOS}
swapvectors;
end;
当然,此过程文件有一个很大的缺点,它不会判断当前是否已处在中文环境下,因此每次都要将UCDOS重新装一次,浪费了用户的时间。并且当UCDOS启动失败,它也不会采取别的措施,仍直接进入软件。
比较完善的处理方法是先测试是否已在中文环境下,测试函数如下:
function check-in-ucdos:boolean;
var p:pointer;
sg:word absolute $0000:$0042;
{INT 10段}
os:word absolute $0000:$0040;
{INT 10偏移}
i:integer;
b:byte;
begin
b:=0;
for i:=0 to 12 do
begin
p:=ptr(sg,os+i);
b:=b xor byte(p^);
end;
if (b=4) {UCDOS 1.0}
or (b=5) {HDOS}
or (b=170) {UCDOS 2.01、EGA方式}
or (b=69) {UCDOS 2.01、VGA方式}
or (b=26) {DOS 4.03}
or (b=70) {CCDOS 4.0}
then check-in-ucdos:=true;
else check-in-ucdos:=false;
end;
下面是一个完整的能自动测试并自动启动UCDOS的过程autorunucdos2:
procedure autorunucdos2 {自动启动UCDOS的改进型}
begin
if not check-in-ucdos then autorunucdos;
if not check-in-ucdos then 如果启动UCDOS失败
begin
write in (’run ucdos error!’);
halt(0);
end;
end;
值得注意的是,此过程文件也必须在你的程序开始处调用,以免出现内存不足而调用失败。在C语言编的软件也可调用。