关键词: DOS 汉字提示 多重配置
在Win95和Win98正如日中天的今天,DOS行将走进历史在所难免。但仍有相当一部分运行DOS的机器需要维护。本文将让夕阳晚照中的 DOS 开一朵秋天里最后的玫瑰--介绍一种建立汉字提示的DOS多重配置菜单的简单方法。
一、DOS的启动过程
DOS的启动是从系统加电开始的。系统加电后,机器首先自动从最高内存的16字节处(0FFFF0h)开始执行第一条指令,然后顺次执行自检程序和引导装入程序。引导装入程序将A:驱或硬磁盘C:的引导扇区读入到内存的0000:7C00处,然后将控制权交给引导程序。引导程序若在磁盘中找到DOS系统,则装入DOS的系统文件,然后再将控制权交给它。对MS-DOS来讲,就是将控制权交给IO.SYS。IO.SYS程序执行后,经过一系列的初始化工作,最后要解释执行DOS的配置文件CONFIG.SYS,对系统进行配置。然后加载DOS外壳,即命令解释程序COMMAND.COM。外壳程序若在当前磁盘根目录找到自动批处理程序AUTOEXEC.BAT,则逐条执行,然后显示DOS提示符。至此,DOS系统启动完毕。
二、可能的几种设想
从DOS的启动过程我们可以看到,DOS在显示多重配置菜单时,其命令解释程序COMMAND.COM还未加载执行,所以要想借助现有的汉字系统使多重配置的CONFIG.SYS菜单显示汉字是不可能的。可能的办法是在IO.SYS执行CONFIG.SYS文件之前,加载相应的处理汉字显示的指令,然后使CONFIG.SYS的菜单显示汉字。关于这一点,已有作者撰文介绍。但这种方法要改动DOS的内核,难度较大,且极不安全。
另一种设想是,在DOS内核和外壳加载完成后,借助现有的汉字系统,在AUTOEXEC.BAT文件中自动执行一系统配置“调度”程序,即时生成对应的CONFIG.SYS文件和AUTOEXEC.BAT文件,然后重新启动系统。“调度”程序模拟系统的多重配置菜单,并负责生成相应的配置文件和自动启动DOS系统。第二种设想无须改动DOS内核,还可在多重配置菜单中设置任意字形、字体的汉字(只和汉字有关),还可加上个性化的提示信息甚至色彩绚丽的图片。由于是在DOS下编程,所以一般用户均可轻松实现。
三、具体的实现方法
对上述的第二种设想,笔者采用以下过程实现:
(1)首先分别编写配套的多重启动配置文件和自动批处理文件,分别存放于C:\CFG下的文件CFG.001,AUTO.001;CFG.002,AUTO.002....中。实际使用中,笔者编写了三套配置文件(见后附程序)。
(2)用DOS的DEBUG工具编写DOS的启动命令RESET.COM,过程为:
C:\CFG\DEBUG
-A100
XXXX:0100 JMP FFFF:0
XXXX:0105<cr>
-RCX
:5
-NRESET.COM
-W
-Q
这样就在 C:\CFG目录下生成文件RESET.COM,在DOS下运行,机器会重新总清启动。
(3)编写系统重置命令RESETCFG.BAT,用于使菜单系统回到初始状态。编写SETDOS.BAT,用于AUTO.00?文件的调用,重置系统。
(4)在硬盘的 C:\CFG目录下,编制基本配置文件 CONFIG.SIS 和AUTOEXEC.SIS。其内容分别为:
CONFIG.SIS:
FILES=30
BUFFERS=30
AUTOEXEC.SIS:
@ECHO OFF
CD\CFG
IF EXIST *.TMP DEL *.TMP
AUTOBAT.EXE
其中 AUTOBAT.EXE 即为多重配置调度程序,笔者用 FOXPRO2.6 for DOS 编写,用 Stand-alone 模式编译,可脱离 FOXPRO 集成环境独立运行。
四、系统的运行过程
在上述各程序编写就序后,运行RESETCFG.BAT程序,将 C:\CFG 下的 CONFIG.SIS 和
AUTOEXEC.SIS 拷贝到 C:\下的 CONFIG.SYS 和 AUTOEXEC.BAT 中,使菜单系统处于初始状态。然后热启动机器。
DOS 内核加载完成后,自动执行 AUTOEXEC.BAT 批处理程序中的 AUTOBAT.EXE。AUTOBAT.EXE
首先加载汉字系统基本模块 RD16 和 KNL(以繁体字显示),然后显示一汉字提示的多重选择菜单,等待用户选择。
此处的汉字菜单即代替了原 DOS 启动时英文提示的多重配置菜单。用户键入对应的序号后回车,对应的配置文件
CFG.00? 和 AUTO.00? 被复制成 C:\下的 CONFIG.SYS 和 AUTOEXEC.BAT 中,使菜单系统处于初始状态。然后热启动机器。
DOS 内核加载完成后,自动执行 AUTOEXEC.BAT 批处理程序中的 AUTOBAT.EXE。AUTOBAT.EXE 首先加载汉字系统基本模块
RD16 和 KNL(以繁体字显示),然后显示一汉字提示的多重选择菜单,等待用户选择。此处的汉字菜单即代替了原 DOS
启动时英文提示的多重配置菜单。用户键入对应的序号后回车,对应的配置文件 CFG.00? 和 AUTO.00? 被复制成 C:\ 下的
CONFIG.SYS 和 AUTOEXEC.BAT,然后调用 C:\CFG 下的 RESET.COM 命令,DOS 重新启动。DOS 重新启动时,即使用了刚才用户选择的配置文件 CFG.00? 和 AUTO.00?
对系统进行配置。文件 AUTO.00? 最末一行均为 CALL C:\CFG\SETDOS.BAT 用于将菜单系统自动重置为初始状态。
五、总结和补充说明
(1)、该方法笔者已在自己的PC机上实现,使用半年多,运行良好。笔者是针对 C:盘,在DOS6.22和汉字系统UCDOS下制作的,读者也可以使用别的汉字系统,或改在A:驱上运行。
(2)、本方法的另一显著特点是在DOS1.0-DOS7.0下均能运行,这对于仍然使用DOS低版本(6.0以前)的用户无疑有极大的帮助。
(3)、本方法的最大缺点是需要进行DOS的二次启动,才能真正加载用户的配置。这是由DOS的不可重入性所决定的,在这种方法中不可避免。
(4)、有兴趣的读者可将多重配置菜单改成光条菜单,效果将会更好。
附:有关源程序清单
(1)CONFIG.SIS:
buffers=30
files=40
(2)AUTOEXEC.SIS:
@echo off
cd\cfg
if exist *.tmp del *.tmp
autobat.exe
(3)AUTOBAT.PRG:
set talk off
!c:\ucdos\rd16>nul
!c:\ucdos\knl>nul
clear
@1,3 say "正在启动 MS-DOS ..."
@2,2 say "===================="
@3,4 say "1. 登陆 Novell 服务器"
@4,4 say "2. 使用本地硬盘"
@5,4 say "3. 运行 Windows3.11 for wg"
do while .t.
choice=0
@7,4 say "请选择[1,2,3]:" get choice
read
if choice=1
!copy \cfg\CFG.001 \config.sys>nul
!copy \cfg\AUTO.001 \autoexec.bat>nul
exit
endif
if choice=2
!copy \cfg\CFG.002 \config.sys>nul
!copy \cfg\AUTO.002 \autoexec.bat>nul
exit
endif
if choice=3
!copy \cfg\CFG.003 \config.sys>nul
!copy \cfg\AUTO.003 \autoexec.bat>nul
exit
endif
enddo
!\cfg\RESET.COM
(4)RESETCFG.BAT:
@echo off
echo Reset Configuration Files ...
echo.
if exist c:\cfg\*.tmp del c:\cfg\*.tmp
copy c:\cfg\autoexec.sis c:\autoexec.bat>nul
copy c:\cfg\config.sis c:\config.sys>nul
echo OK!
(5)SETDOS.BAT:
set path=c:\cfg;%path%
copy c:\cfg\config.sis c:\config.sys>nul
copy c:\cfg\autoexec.sis c:\autoexec.bat>nul
(6)CFG.001
DEVICE=C:\DOS\himem.sys /testmem:off
dos=high,umb
DEVICE=C:\DOS\EMM386.EXE NOEMS
buffers=30
files=30
LASTDRIVE=E
DEVICEHIGH=c:\dos\SETVER.EXE
(7)AUTO.001
@echo off
ver/r
prompt $p$g
lh c:\dos\doskey/insert
lh C:\DOS\MOUSE\MOUSE
cls
cd\net
LH lsl
LH ne2000
LH ipxodi
LH netx
f:
call c:\cfg\setdos.bat
(8)CFG.002
DEVICE=C:\DOS\himem.sys /testmem:off
dos=high,umb
device=c:\dos\emm386.exe ram
device=c:\dos\setver.exe
buffers=30
files=40
(9)AUTO.002
@echo off
ver/r
lh c:\dos\doskey/insert
lh C:\DOS\MOUSE\MOUSE
path=c:\dos;C:\CCED;c:\windows;C:\UCDOS
SET LMOUSE=C:\DOS\MOUSE
call c:\cfg\setdos.bat
(10)CFG.003
DEVICE=C:\DOS\himem.sys /testmem:off
dos=high,umb
DEVICE=C:\WIN311\EMM386.EXE ram
buffers=40
files=40
DEVICEHIGH=c:\dos\SETVER.EXE
LASTDRIVE=P
DEVICEhigh=C:\WIN311\IFSHLP.SYS
(11)AUTO.003
@echo off
C:\WIN311\net start
set temp=c:\windows\temp
cd\net
lsl
ne2000
ipxodi
netx
cd\win311
odihlp.exe
win
cd\
张庆 Email: zhangking@263.net 1998
|
|