标题让你的程序能自动启动UCDOS
栏目软件大世界
作者王宏风
发布1997-01-01
当前不少中文软件都没有自动启动中文系统如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语言编的软件也可调用。