让你的程序能自动启动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语言编的软件也可调用。