您在本站的位置:主 页 >> 站长专区 >> 站长作品:《建立汉字提示的 DOS 多重配置菜单》
《站长作品》】                       建立汉字提示的 DOS 多重配置菜单
    关键词: 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
返回“站长专区”
Copyright(C) By ZhangQing 张庆 返回主页
站长邮箱:zhangking@263.net  Bp:029-95808 呼 822686