Board logo

标题: 用于 Config.sys 的驱动程序并列配置菜单 ConfigP.Mnu v1.01 [打印本页]

作者: yaya     时间: 2006-2-10 09:33    标题: 用于 Config.sys 的驱动程序并列配置菜单 ConfigP.Mnu v1.01

一、特点
    1. 常见的配置菜单是逐级往下执行,不可返回,像串联。嵌套级数多时,菜单项目将会呈级数放大趋势,使菜单编写比较繁琐,重复项较多。本配置菜单是并列关系,菜单编写简捷,可阅读性强。菜单可连续选择,也可顺序返回。
    2. 为显示中文菜单提供了一个平台。
    3. 设有标题和尾注,每行都可单独设定颜色。
    4. 设有注释,为菜单提供简要说明,可单独设定颜色和位置。
    5. 可屏蔽显示信息。
   
    二、简要说明
    1. 菜单分为3种:嵌套菜单(NestMenu),复选菜单(CheckMenu),单选菜单(RadioMenu)。
     嵌套菜单用来选择下一步打开哪一个菜单。它更像是一个目录,说明配置哪些内容,缺省加载哪些内容。
     嵌套菜单可以没有项目。
     复选菜单用来加载相容的驱动程序,可不选或全选。
     单选菜单用来加载互斥的驱动程序,应选择1项且只能选择1项。
    2. 项目分为2种:默认项目(DefaultItem),普通项目(Item)。
     默认项目是启动时缺省加载的项目。
    3. 配置块(block)是按需要组织在一起的一组驱动程序。可在配置块里设定参数,遥控AutoExec.bat。
     可在 block=0 之前和 block=end 之后放置公共配置块。
    4. 如果菜单中不含标题、尾注、默认颜色,则继承上一菜单内容。
    5. 如果菜单中的标题、尾注不含颜色,则使用默认颜色。
    6. 如果菜单中注释不含颜色、位置,则继承上一菜单内容。

    三、使用方法
    1. 选择项目方法
     a. 按相应字母键。
     b. 按↑/↓键,向上/向下顺序循环选择。
    2. 设定项目方法
     在复选菜单被选项目按空格键,设定项目/清除项目。
    3. 选择菜单方法
     a. 按→键,向后连续选择。
     b. 按←键,顺序返回。
     c. 在嵌套菜单被选项目按空格键,打开指定菜单。
    4. 退出菜单方法
     在任意菜单按回车键,退出菜单配置。
    5. 开关参数
     a. /s   屏蔽config.sys显示信息
     b. /u   解除屏蔽

    四、语法说明
    1. 菜单  
        rem 0NestMenu=e,u,....
        rem 0CheckMenu=e,u,....
        rem 0RadioMenu=e,u,....
        0 菜单顺序号
        e 注释颜色(0...f),缺省color
        u 注释位置(u显示在上部[标题之下],d显示在下部[尾注之上]),缺省d
        .... 注释内容
        例:=e,u,....
            =e,,....
            =,u,....
            =,,....
            =       
    2. 默认颜色,被选项目显示方式,缺省07,c
        rem color=       
        背景前景色(00...ff)(闪烁已更改为高亮)
        0黑 1蓝 2绿 3青 4红 5品红 6棕 7白 8灰 9亮蓝 a亮绿 b亮青 c亮红 d亮品红 e黄 f亮白
        被选项目显示方式(c反色,h高亮)
        例:=07,h
            =07
            =,h               
    3. 主菜单时间,时间标签,缺省60
        rem time=30,....
        30 时间(秒)
        .... 时间标签
        例:=30,剩余时间
            =30       
    4. 标题
        rem caption=7,....
        7 标题颜色(0...f),缺省color
        .... 标题内容
        例:=7,....
            =,....
            =
    5. 尾注
        rem endnote=7,....
        7 尾注颜色(0...f),缺省color
        .... 尾注内容
        例:=7,....
            =,....
            =
    6. 项目
        rem item=2=....
        rem DefaultItem=2,11=....
        数字 对于嵌套菜单,是菜单顺序号(打开第2页菜单)
             对于单选菜单、复选菜单是配置块顺序号(包含第2,11配置块)
        .... 项目说明
    7. 配置块
        rem block=0
        ....
        rem block=end
        0 配置块顺序号
        end 配置块结束符

[ Last edited by yaya on 2006-3-28 at 16:26 ]
附件 1: configp1.jpg (2006-3-26 15:43, 35.14 K, 下载附件所需积分 1点 ,下载次数: 23)


附件 2: configp2.jpg (2006-3-26 15:43, 31.69 K, 下载附件所需积分 1点 ,下载次数: 20)


附件 3: ConfigP.Mnu101.rar (2006-3-28 16:24, 58.12 K, 下载附件所需积分 1点 ,下载次数: 1131)

作者: yaya     时间: 2006-2-10 09:36
例1:统一的标题、尾注,每一菜单的功能由注释说明。
    (实际使用时,需由'本是'的VTMagic.com将下面的中文字体换掉)   
device=config.exe    (由'本是'的VTMagic.com生成)
device=ConfigP.Mnu /s

rem 0NestMenu=e,u,首菜单
rem color=17,c
rem time=30,剩余时间
rem caption=
rem caption=
rem caption=
rem caption=3,             中文 MSDOS_7.1 启动盘
rem caption=4,================================================
rem endnote=2,按↑↓键或相应字母键选择项目,按空格键设定项目
rem endnote=2,按→键向后连续选择,按←键顺序返回,按回车退出菜单
rem item=1=选择启动模式   默认加载 umbpci
rem item=2=选择光驱       默认加载 vide-cdd
rem item=3=选择usb        默认不加载

rem 1RadioMenu=,,选择启动模式  (单选)
rem DefaultItem=0,2,11=加载 umbpci
rem item=0,1,11=加载 emm386
rem item==最小加载

rem 2CheckMenu=,,选择光驱  (复选)
rem DefaultItem=3,6=加载 vide-cdd
rem item=4,6=加载 aspicd
rem item=5,6=加载 usbcd

rem 3CheckMenu=,,选择usb  (复选)
rem item=7=加载 usbaspi
rem item=8=加载 aspiohci
rem item=9=加载 aspiuhci
rem item=10=加载 di1000dd

rem block=0
device=himem.sys
rem block=1
device=emm386.exe noems
rem block=2
device=umbpci.sys
rem block=3
devicehigh=vide-cdd.sys /d:ide-cd
rem block=4
devicehigh=aspicd.sys /d:scsi-cd
rem block=5
device=usbcd.sys /d:usb-cd
rem block=6
set cm=cdrom
rem block=7
device=usbaspi.sys /r
rem block=8
device=aspiohci.sys /int /all
rem block=9
device=aspiuhci.sys /int /all
rem block=10
device=di1000dd.sys
rem block=11
dos=high,umb,auto
rem block=end

fcbshigh=4,0
fileshigh=30
buffershigh=30,0
lastdrivehigh=32
stackshigh=9,256

device=ConfigP.Mnu /u


例2:每一菜单有各自的标题,不用注释
device=config.exe
device=ConfigP.Mnu /s

rem 0NestMenu=
rem color=17,c
rem time=30,剩余时间
rem caption=
rem caption=
rem caption=
rem caption=3,             中文 MSDOS_7.1 启动盘
rem caption=4,================================================
rem endnote=2,按↑↓键或相应字母键选择项目,按空格键设定项目
rem endnote=2,按→键向后连续选择,按←键顺序返回,按回车退出菜单
rem item=1=选择启动模式   默认加载 umbpci
rem item=2=选择光驱       默认加载 vide-cdd
rem item=3=选择usb        默认不加载

rem 1RadioMenu=
rem caption=
rem caption=
rem caption=
rem caption=5,             选择启动模式  (单选)
rem caption=4,================================================
rem DefaultItem=0,2,11=加载 umbpci
rem item=0,1,11=加载 emm386
rem item==最小加载

rem 2CheckMenu=
rem caption=
rem caption=
rem caption=
rem caption=5,             选择光驱  (复选)
rem caption=4,================================================
rem DefaultItem=3,6=加载 vide-cdd
rem item=4,6=加载 aspicd
rem item=5,6=加载 usbcd

rem 3CheckMenu=
rem caption=
rem caption=
rem caption=
rem caption=5,             选择usb  (复选)
rem caption=4,================================================
rem item=7=加载 usbaspi
rem item=8=加载 aspiohci
rem item=9=加载 aspiuhci
rem item=10=加载 di1000dd

rem block=0
device=himem.sys
rem block=1
device=emm386.exe noems
rem block=2
device=umbpci.sys
rem block=3
devicehigh=vide-cdd.sys /d:ide-cd
rem block=4
devicehigh=aspicd.sys /d:scsi-cd
rem block=5
device=usbcd.sys /d:usb-cd
rem block=6
set cm=cdrom
rem block=7
device=usbaspi.sys /r
rem block=8
device=aspiohci.sys /int /all
rem block=9
device=aspiuhci.sys /int /all
rem block=10
device=di1000dd.sys
rem block=11
dos=high,umb,auto
rem block=end

fcbshigh=4,0
fileshigh=30
buffershigh=30,0
lastdrivehigh=32
stackshigh=9,256

device=ConfigP.Mnu /u

例3:单一菜单,有公共配置块
device=config.exe
device=ConfigP.Mnu

rem RadioMenu=
rem color=17,c
rem time=30,剩余时间
rem caption=
rem caption=
rem caption=
rem caption=3,             中文 MSDOS_7.1 启动盘
rem caption=4,================================================
rem endnote=2,按↑↓键或相应字母键选择项目,按回车退出菜单
rem item=0=保护模式  加载 EMM386
rem item=0,2=保护模式  加载 EMM386 和 CD-ROM
rem item=0,2,3=保护模式  加载 EMM386 , CD-ROM 和 USB
rem item=1=实模式    加载 UMBPCI
rem DefaultItem=1,2=实模式    加载 UMBPCI 和 CD-ROM
rem item=1,2,3=实模式    加载 UMBPCI , CD-ROM 和 USB

device=himem.sys
rem block=0
device=emm386.exe noems
rem block=1
device=umbpci.sys
rem block=2
devicehigh=vide-cdd.sys /d:ide-cd
devicehigh=aspicd.sys /d:scsi-cd
rem block=3
device=usbcd.sys /d:usb-cd
device=usbaspi.sys /r
device=aspiohci.sys /int /all
device=aspiuhci.sys /int /all
device=di1000dd.sys
rem block=end

dos=high,umb,auto
fcbshigh=4,0
fileshigh=30
buffershigh=30,0
lastdrivehigh=32
stackshigh=9,256


例4:一页说明,没有目录(目前显示不了这么多汉字,只作为示例)
device=config.exe
device=ConfigP.Mnu /s

rem 0NestMenu=
rem color=17,c
rem time=30,剩余时间
rem caption=
rem caption=
rem caption=
rem caption=5,           MS-DOS 7.10启动盘说明文件
rem caption=4,--------------------------------------------------
rem caption=5,      版权所有:xxxxxxxxxx   2003-10-12
rem caption=
rem caption=3,长文件名支持
rem caption=3,NTFS驱动器支持
rem caption=3,鼠标支持
rem caption=3,中文支持
rem caption=3,实用工具
rem caption=3,保护模式DOS程序支持
rem caption=3,直接启动Windows 3.x/9x
rem endnote=2,按→键向后连续选择菜单,按←键顺序返回,按回车退出菜单
rem endnote=2,按↑↓键选择项目,按空格键设定项目

rem 1RadioMenu=e,,选择启动模式  (单选)
rem caption=
rem caption=
rem caption=
rem caption=5,             中文 MSDOS_7.1 启动盘
rem caption=4,================================================
rem caption=
rem DefaultItem=0,2,11=加载 umbpci
rem item=0,1,11=加载 emm386
rem item==最小加载

rem 2CheckMenu=,,选择光驱  (复选)
rem DefaultItem=3,6=加载 vide-cdd
rem item=4,6=加载 aspicd
rem item=5,6=加载 usbcd

rem 3CheckMenu=,,选择usb  (复选)
rem item=7=加载 usbaspi
rem item=8=加载 aspiohci
rem item=9=加载 aspiuhci
rem item=10=加载 di1000dd

rem block=0
device=himem.sys
rem block=1
device=emm386.exe noems
rem block=2
device=umbpci.sys
rem block=3
devicehigh=vide-cdd.sys /d:ide-cd
rem block=4
devicehigh=aspicd.sys /d:scsi-cd
rem block=5
device=usbcd.sys /d:usb-cd
rem block=6
set cm=cdrom
rem block=7
device=usbaspi.sys /r
rem block=8
device=aspiohci.sys /int /all
rem block=9
device=aspiuhci.sys /int /all
rem block=10
device=di1000dd.sys
rem block=11
dos=high,umb,auto
rem block=end

fcbshigh=4,0
fileshigh=30
buffershigh=30,0
lastdrivehigh=32
stackshigh=9,256

device=ConfigP.Mnu /u

[ Last edited by yaya on 2006-3-28 at 16:29 ]
作者: coolboy163     时间: 2006-2-10 15:30
刚上班,就上来看看了
呵呵,YAYA果真的厉害啊,放假还没歇息啊
看起来很完善了,我来试试
作者: weilong888     时间: 2006-2-10 18:37
这东西搞得好啊。
作者: 本是     时间: 2006-2-10 22:15
好!!!功能更加强大了。大家可以继续提建议,有了新想法,才有更好的作品!
作者: jackiepeng     时间: 2006-2-15 11:18
不错,感谢提供。
作者: yaya     时间: 2006-2-28 17:38
v1.01 发布于1楼
修改:背景闪烁位改为高亮。
使背景颜色丰富,实现正确的反色显示。

在此特别感谢版主willsort一再提出改进意见和思路!

逐级执行式菜单编辑器ConMenu.sys比较适用,还是返回执行式菜单编辑器ConMenuR.sys比较适用?很想听听反馈意见。
欢迎大家继续提建议和新想法。
作者: willsort     时间: 2006-3-1 19:28
Re yaya:

      感谢兄如此看重我的意见和建议!其实无论从算法设计还是从语言实现上我都无法给你提供多少切实有效的建议,而只能从程序之外做一些简单的黑箱测试,然后从一个客户的角度谈一谈自己的看法。同时,我对 DOS 启动技术的了解仍然不够全面和深入,之所以厚颜回复你的主题,一方面是为了表达对论坛原创作品的支持,希望能够抛砖引玉,使大家来关注你的程序以及其所涉及的领域;另一方面是彼时我恰在做二次引导扩展启动配置菜单的研究,希望能从你的程序中获得思路和灵感。后来,因为自己技术功底不足,我的研究半道夭折了,以后也就将注意力转回了我所爱好的批处理之上;现在看到你的邀请,感觉十分愧对兄的一腔热情,不得不勉力对兄的新作 ConMenuR 作了一些观摩和测试,所得如下,愿与兄及各位同仁共享。

      关于返回执行和逐级执行的选择,我个人更看好“返回执行式菜单编辑器ConMenuR.sys”,因为它在程序算法上确实是一个突破,而在功能实现上也独出一格。与 IO.SYS 相比,解决了复式选择、重新选择、连续选择等关键性问题。而 Block 的创意性构思,也大大降低了 include 多级嵌套所带来的程序编写和菜单编写的复杂度,同时也增加了菜单的可阅读性。至于它所带来的默认设置复杂的问题,我认为可以通过以下的“同级的连续菜单”的实现来部分解决。

      关于“同级的连续菜单”,与你的 ConMenuR 中的示例非常相近,它主要是针对不可返回的菜单而言的。就以 ConMenuR 示例的实现需求来说,如果菜单不可返回,而我们选择完内存管理程序后,还希望选择光驱和 USB 设备驱动,而这些选择如果作为二、三级菜单实现,就需要在每个一级菜单项中都实现二级菜单,在每个二级菜单项中都实现三级菜单,这样随着设备种类的增加,菜单项将会呈级数放大趋势。这正是你所提到的“编写菜单比较繁琐,重复项较多”的问题。

      而如果将内存管理程序、光驱驱动和 USB 驱动都在同一级菜单中实现选择,即选择完内存管理后,不必进入下一级(或进入后又返回)而继续选择设备驱动,USB驱动亦然,这样就很大程度上节约了菜单编写上的重复性。目前版本的返回执行式菜单的实现,使这个功能变得没有太大必要了,但是如果实现的话,即在“返回菜单前”加上一项“继续选择”,或者加上一个“继续选择”的快捷键(比如Enter),那么用户就可以不必返回菜单而直接进行下一设备驱动的选择,在选择时间上与逐级执行式相比也不会有太大变化,默认设置的问题也就淡化了(当然它仍是有必要的)。同时,菜单返回的作用不再主要是进行“下一步”选择,而是进行“另一次”选择。

      关于程序的测试情况,在我的虚拟机MSDOS7.10启动盘中,以你提供的示例进行测试,发现“rem color=”至“rem endnote=”一节所有行均不起作用,不过这应该是小问题,相信兄很快就能解决。

      另外,再在一些细节上提供一些建议仅供参考:

      1、快捷键布局:选择/反选-空格/Enter,返回-Backspace/LeftArrow,继续选择-Enter/RightArrow,直接执行-Esc,菜单选择-顺序数字/顺序字母/指定字符;
      2、类 IO.SYS 的界面风格:菜单项文字继续向右缩进,已选择菜单项的显示(包括多级、复选的显示),倒计时的显示位置等等;
      3、加入动态编辑菜单的功能;
      4、加入屏蔽 device 项输出信息的选项。

[ Last edited by willsort on 2006-3-1 at 19:40 ]
作者: yaya     时间: 2006-3-2 16:18
Re willsort:
    你的谦逊再一次让人领略大师风范!
    感谢你提供的建议,非常有实用价值!近期我会逐一改进。
    关于"已选择菜单项的显示",目前使用"+",我感觉使用"√"更适当,但这要使用ASCII字符"FB",与汉化字使用"80-FF"冲突,为避免冲突,有可能减少5个汉字。怎样更好,也请同仁共商。
    关于"加入屏蔽device项输出信息的选项",device项是由config.sys模块执行的,怎样屏蔽device项输出信息,从网上浏览没有结果,有人说不能。
    关于"“rem color=”至“rem endnote=”一节所有行均不起作用",是由于忘了更改说明文档。应该将上述内容移到"rem menu=l主菜单$0"这一行之下。我已更改了2楼的例子1和1楼的附件3。由此引起的不便深感歉意!
作者: willsort     时间: 2006-3-2 19:23
Re yaya:

      关于已选用菜单项标记,不建议占用扩展ASCII区的字符,本来可以显示的汉字便有限,应该尽量保证它的充分利用。可以考虑从ASCII码表的非打印控制取寻找[1],比如04,07-10,16,26等字符,也可以取 > } 之类。或者向 IO.SYS 借鉴,将已选取项显示在菜单项下方,只是如何显示多级、复选、连续菜单项还是个问题,目前简化为只显示当前菜单的所有选择项。

      屏蔽输出信息可以借鉴内部命令 ctty ,在命令行下执行 ctty nul 将NUL设备句柄复制给 stdin/stdout/stderr,从而将PC控制权移交NUL,封锁了所有输入输出。另外,command nul 也有类似的作用。

[1]ASCII编码表
http://www.cn-dos.net/forum/viewthread.php?tid=18942

[2]CTTY - Change console
; ****************************************************************
; *
; * ROUTINE:         CTTY - Change console
; *
; * SYNTAX:         CTTY device
; *
; * FUNCTION:         If a valid console device is specified, CTTY will
; *                 duplicate the device handle to STDIN, STDOUT and
; *                 STDERR.  This routine returns to LODCOM1.
; *
; * INPUT:         command line at offset 81H
; *
; * OUTPUT:         none
; *
; ****************************************************************

CTTY:
        push        ds                                ;AN000; Get local ES
        pop        es                                ;AN000;
        mov        si,81H                                ;AC000; Get command argument for CTTY

        mov        di,offset trangroup:parse_ctty        ;AC000; Get adderss of PARSE_CTTY
        xor        cx,cx                                ;AC000; clear cx,dx
        xor        dx,dx                                ;AC000;
        invoke        cmd_parse                        ;AC000; call parser
        cmp        ax,end_of_line                        ;AN000; are we at end of line?
        jz        ctty_error                        ;AN000; yes - error
        cmp        ax,result_no_error                ;AN000; did an error occur
        jnz        ctty_error                        ;AN000; YES -ERROR

        push        si                                ;AN000; save position in line
        lds        si,parse1_addr                        ;AN000; get address of filespec
        mov        di,offset trangroup:srcbuf        ;AN000; get address of srcbuf

ctty_move_filename:                                ;AN000; put filespec in srcbuf
        lodsb                                        ;AN000; get a char from buffer
        stosb                                        ;AN000; store in srcbuf
        cmp        al,end_of_line_out                ;AN000; it char a terminator?
        jnz        ctty_move_filename                ;AN000; no - keep moving
        pop        si                                ;AN000; get line position back
        mov        di,offset trangroup:parse_ctty        ;AC000; Get adderss of PARSE_CTTY
        call        parse_check_eol                 ;AN000; are we at end of line?
        jz        nocolon                         ;AN000; yes - continue

ctty_error:
        jmp        short isbaddev                        ;AC000; yes - exit

nocolon:
        mov        dx,offset trangroup:srcbuf        ;AN000; get address of srcbuf
        MOV        AX,(OPEN SHL 8) OR 2                ; Read and write
        INT        21h                        ; Open new device
        JC        ISBADDEV
        MOV        BX,AX
        MOV        AX,IOCTL SHL 8
        INT        21h
        TEST        DL,80H
        JNZ        DEVISOK

CLOSEDEV:                                        ;AN007;
        MOV        AH,CLOSE                        ; Close initial handle
        INT        21h

ISBADDEV:
        MOV        DX,OFFSET TRANGROUP:BADDEV_ptr
        invoke        std_printf
        JMP        SHORT RESRET

DEVISOK:
        push        dx                                ;AN007; save device info
        mov        ax,acrlf_ptr                        ;AN021; get message number for 0d, 0a
        mov        dh,util_msg_class                ;AN021; this is a utility message
        push        bx                                ;AN021; save handle
        invoke        Tsysgetmsg                        ;AN021; get the address of the message
        mov        dx,si                                ;AN021; get address into dx
        mov        ax,(write shl 8)                ;AN007; write to device
        mov        cx,2                                ;AN007; write two bytes
        int        21h                        ;AN007;
        pop        bx                                ;AN021; get back handle
        pop        dx                                ;AN007; get back device info
        jc        closedev                        ;AN007; if error, quit
        XOR        DH,DH
        OR        DL,3                                ; Make sure has CON attributes
        MOV        AX,(IOCTL SHL 8) OR 1
        INT        21h
        PUSH        BX                                ; Save handle
        MOV        CX,3
        XOR        BX,BX

ICLLOOP:                                        ; Close basic handles
        MOV        AH,CLOSE
        INT        21h
        INC        BX
        LOOP        ICLLOOP
        POP        BX                                ; Get handle
        MOV        AH,XDUP
        INT        21h                        ; Dup it to 0
        MOV        AH,XDUP
        INT        21h                        ; Dup to 1
        MOV        AH,XDUP
        INT        21h                        ; Dup to 2
        MOV        AH,CLOSE                        ; Close initial handle
        INT        21h

RESRET:
        MOV        DS,[RESSEG]
ASSUME        DS:RESGROUP
        PUSH        DS
        MOV        AX,WORD PTR DS:[PDB_JFN_Table]        ; Get new 0 and 1
        MOV        [IO_SAVE],AX
        MOV        AX,OFFSET DATARES:TrnLodCom1_Trap
        PUSH        AX

ZMMMM        PROC FAR
        RET                                        ; Force header to be checked
ZMMMM        ENDP
[ Last edited by willsort on 2006-3-2 at 19:24 ]
作者: yaya     时间: 2006-3-4 09:41
Re willsort:
    关于已选用菜单项标记,我非常赞成你的观点,不能浪费有限的汉化资源。我考虑使用'00-1f'中不使用的控制字符,自造一个图形符号。
    关于屏蔽device输出信息,我认为应该单独编一段程序,在开始屏蔽的地方和结束屏蔽的地方分别加入命令。ConMenuR程序结束后,才由io.sys执行device,因此既便在ConMenuR程序中加入屏蔽代码,也无法控制屏蔽结束(ConMenuR不驻留内存)。
作者: yaya     时间: 2006-3-7 17:38
v1.10 2006/3/6 发布于1楼

修改:将时间显示位置上移到菜单项之下
修改:出错时由退出程序改为退出菜单
修改:子菜单不再显示剩余时间
修改:被选菜单项标记由"+"改为"√"
增加:"剩余时间"标签显示
增加:快捷键esc,在任意位置执行菜单
增加:快捷键←/→,-/=,向前/向后顺序显示菜单页
增加:快捷键spacebar,等同于enter
增加:快捷键(shift+'-')/(shift+'='),等同于↑/↓
作者: willsort     时间: 2006-3-7 22:20
Re yaya:

      以下有很多关于 ConMenuR 工作原理的疑问和猜测,很可能与实情想去甚远,请 yaya 兄聊作“哂”阅。

>>ConMenuR程序结束后,才由io.sys执行device

      这里你的意思是否是说,ConMenuR 执行结束后,才由 IO.SYS 执行 ConMenuR.sys 之后的 DEVICE 语句?因为 Config.exe 和 ConMenuR.sys 本身都是通过 device 加载,如果 device 在 ConMenuR.sys 之后处理,则形成一个“鸡与蛋”的互生悖论。

      如果以上问题的答案是肯定的,那么是否可以推断 ConMenuR.sys 的生存周期是在 IO.SYS 对 Config.sys 预处理和符号化之后,ConMenuR 之后的 DEVICE 命令执行之前,而它的作用域应该就是 REM Menu= 和 REM BLOCK=END 之间的 REM 之类的菜单配置语句和 device 之类的内存配置语句。虽然所有的内存配置命令在菜单结束前都不会被 io.sys 执行。

      而这些配置语句又是如何被处理的?我的猜想是,因为在第一条device命令被加载前,所有的 device 语句均被预处理和符号化,那么它所需的 device 命令则应该是从预处理后的 config 工作区中获取的,否则 ConMenuR 需要将重新组装后的 device 原始语句再次符号化;而因为 rem 语句在预处理过程中是被忽略的,因此菜单配置所需的 REM 语句应该是从原始的 Config.sys 中读取所的。

      这就意味着可以通过menu和block的分离(即block在config.sys文件中,而menu在自定义文件中),简单实现在非 config.sys 文件中实现菜单配置,从而绕过 IO.SYS 的语法检查机制,也从而实现更自由的菜单定制。

>>既便在ConMenuR程序中加入屏蔽代码,也无法控制屏蔽结束

      考虑到 ConMenuR 可以重新组装 device 语句,则在菜单配置结束后自行增加一条关闭屏蔽输出的 device 或类 device 似也并非没有可能,甚至可以考虑将这条特殊的命令插入到 block 中其它任意位置。当然,前提是首先能够实现出这条特殊命令。

      以下是关于 ConMenuR 菜单内部格式的一些设想和看法,权作参靠。

      在我的设想中:

      1、所有的菜单配置语句中分隔标记不会超过三个:空格、等号和逗号,他们的用法与IO.SYS定制的没有太大的不同,如图数学上的三色原理一样,我相信他们应该可以胜任Config配置菜单所有的语法表达,而这也同样促使在菜单项中可以显示更多的特殊字符。

      2、而配制命令则会多一些,包括嵌套菜单NestMenu,复选菜单CheckMenu,单选菜单RadioMenu,它们决定了菜单的类型;还包括菜单项Item,缺省菜单项DefaultItem,公共菜单项CommonItem(即在分析此级菜单时总是会加载的项),他们决定了菜单项的类型;还有标题项Capation/TitleText(屏幕顶部,居中?高亮?),尾注项EndText(屏幕底部),提示文字项Text/NoteText(他们可以出现在菜单项之前、之后和之间,并且他们在 Config.sys 中的相对位置决定了在屏幕上的相对位置)。

      最后,我想说的是,这个程序的名字似乎无法准确完全的涵盖它的已有功能和实现目标,至少它不是一个Editor。

[ Last edited by willsort on 2006-3-7 at 23:42 ]
作者: shj99422     时间: 2006-3-8 10:36
真是大千世界无其不有啊
作者: yaya     时间: 2006-3-9 16:52
Re willsort:
    关于 ConMenuR 工作原理,你说的很对。IO.SYS 对 Config.sys 预处理和符号化之后,开始从上到下逐条执行命令。执行到 device=ConMenuR.sys ,显示菜单,同用户互动,进行命令配置,然后屏蔽掉 rem block=0 到rem block=end 之间所有未选命令,加入一些必要的命令(如在 ConMenu 中加入 set cm0=...)。ConMenuR 退出后,IO.SYS 从 ConMenuR 之后逐条执行未屏蔽的命令。
    关于在 ConMenuR 程序中加入屏蔽代码的问题,我觉得很必要,但限于水平低,目前还没能实现。希望同仁继续提供思路,或直接编一条程序供鉴赏。
    关于分隔标记种类过多的问题,可以考虑缩减。目前在菜单项中不可使用的字符只有'$'。
    各菜单页都可设置自己的标题,尾注,颜色。如果不想繁琐设置,'菜单页说明'提供了另一类显示途径。为了醒目,可以提供显示在菜单项之上/之下选择,高亮选择。
    程序的名称是不够确切,它的功能是提供菜单,实现人/机互动,选择设备驱动程序,遥控自动批处理程序,实现启动引导。确实不是一个编辑器。
作者: yaya     时间: 2006-3-16 15:38
v2.00 2006/3/16 发布于1楼

修改:名称由 ConMenuR.sys 改为 ConBoot.sys
修改:标识符改为英文
增加:标题、尾注颜色
增加:注释颜色、位置
增加:屏蔽 config.sys 信息开关
作者: weilong888     时间: 2006-3-16 19:49
!   I:\conboot.rar: ConBoot.txt CRC 失败。文件被破坏
!   I:\conboot.rar: 不可预料的压缩文件末端
这是什么 回事啊?
作者: 本是     时间: 2006-3-16 22:25
RE yaya:
  你的CONMENU.sys和CONBOOT.sys发展得不错!

  只是有它们的命名上,我有个建议:
  前提:设备驱动程序的扩展名定为.SYS是常规,但这是可以改变的,应该以反映功能为好。
  CONMENU.sys可考虑改名为ConfigSer.Mnu--意为用于CONFIG的serial串行MeNU
  CONBOOT.sys可考虑改名为ConfigPar.Mnu--意为用于CONFIG的parallel并行MeNU

  只是个人意见而已。
  
作者: 本是     时间: 2006-3-16 22:32
下载后解压时,WINRAR报错同17楼!!!
作者: willsort     时间: 2006-3-16 23:34
Re yaya:

      下载解压后,虽然有 CRC 错误,但仍然得到了 ConBoot.sys ,根据兄在二楼更新的示例再次进行了简短的测试。

      首先,恭喜兄很快就掌握了在 Config.sys 中禁止冗余信息输出的方法,不知是否采用了类似 ctty 的原理?经测试后,发现使用 /s 禁止所有 device 的输出后,执行菜单会有意外的滚屏动作,也就是说,系统首先输出了若干空行,然后再进行了清屏;再将 /u 一句移动到 vide-cdd 一句之前,不再滚屏,而是直接清屏显示 vide-cdd 输出信息。

      关于标识符的格式,兄采用了类似 rem 0menu=nest 而非 rem NestMenu=0, 的格式,是因为前者实现起来更简单吗?抑或是对1.xx风格的继承?而 Common Item 实现的似乎是所有级别菜单的菜单项共享,而我们可能更需要在某一级菜单实现配置语句的共享,比如在内存配置菜单中 himem.sys 的共享。

      关于Color的设定,在TextColor中设定背景色是否恰当?我的建议是,使用Color设定缺省的前景和背景色,然后再特定的Text语句中再设定特殊的前景和背景色。比如 “rem EndNote=26, 按↑↓或相应字母选择菜单项”。

      最后,希望可以支持菜单项在上下方向上的循环选择。
作者: yaya     时间: 2006-3-17 18:23
Re 本是:
    你的建议很好,准备采纳。
    文件已重新上传。
作者: yaya     时间: 2006-3-17 18:26
Re willsort:
    关于禁止冗余信息输出的方法,我现在也没有吃透。一开始是内建一个nul文件,把显示设备句柄指向它,这能屏蔽dos内部输出信息,但不能屏蔽由中断产生的显示信息。之后考虑刷黑屏,但屏蔽时间长的话,容易让人误解为死机。最后采用禁止显示页的方法,没有字符输出,而有光标显示。不足之处是有输出时,虽然没有打印出字符,但光标在屏幕上有移动痕迹。重新上传的程序在屏蔽前进行了清屏,效果稍好一些。
    关于标识符的格式,确实是因为前者实现起来更简单。rem item=common 是所有级别菜单的共享项目,用来实现常规的返回/退出。如果某一级菜单的所有项目都含有某一配置块,如 himem.sys ,可以单独给它分配一个配置块顺序号,比如0,加在这一级菜单的所有项目中,也不算太罗嗦吧。
    关于颜色的设定,TextColor 就是原有的 Color。这是为了区别标题和尾注,如果容易产生误解,下次改回 Color。一开始也考虑过使用 rem caption=6,... 这样的语法,后来觉得每条语句中都得加一个',',故舍弃。
    可以支持菜单及项目的循环选择。谢谢这一建议。
作者: weilong888     时间: 2006-3-17 20:57
!   I:\conboot\ConBoot.sys v2.00.rar: ConBoot.txt CRC 失败。文件被破坏
!   I:\conboot\ConBoot.sys v2.00.rar: 不可预料的压缩文件末端
还是这样啊。
作者: martin325     时间: 2006-3-17 22:36
用了device=conboot.sys /s后,如何让后面加载的device自动逐个执行,而不需要敲入会车?
作者: yaya     时间: 2006-3-18 08:32


  Quote:
Originally posted by martin325 at 2006-3-17 10:36 PM:
用了device=conboot.sys /s后,如何让后面加载的device自动逐个执行,而不需要敲入会车?

设时间为0秒
作者: yaya     时间: 2006-3-18 08:37


  Quote:
Originally posted by weilong888 at 2006-3-17 08:57 PM:
!   I:\conboot\ConBoot.sys v2.00.rar: ConBoot.txt CRC 失败。文件被破坏
!   I:\conboot\ConBoot.sys v2.00.rar: 不可预料的压缩文件末端
还是这样啊。

这是论坛的问题。上传了多次也不行。上传.cab文件也一样。甚至不能上传.txt 文件。好在可以解压出conboot.sys文件。请论坛版主解决此问题。

[ Last edited by yaya on 2006-3-18 at 08:38 ]
作者: 本是     时间: 2006-3-18 10:02
RE YAYA:
  你可以考虑先传到某个网络硬盘,再在此给个链接--作为暂时的办法吧。
  日后,你如果想把CONFIGxxx.MNU推广到英语国家的话,我可以考虑给你翻译介绍成英语。他们的CONFIG工具没有你的这个简洁、先进!
作者: yaya     时间: 2006-3-19 17:53
Re 本是:
    我编这个程序一是为了自己使用,二是与人方便,如果你能翻译成英语,让更多的人了解和使用,实属善举,那就有劳你了。
    屏蔽后光标在屏幕上有移动痕迹,是件憾事,还有什么更好的方法?
作者: 本是     时间: 2006-3-20 12:55
你写个材料:

1。简介(半页汉字)
2。新手上路(1个实例)
3。详细介绍(多个实例)
4。BUGS -- FAQ

  你写好材料点我回复的帖子下的“邮件”按钮(恕我罗嗦),我给你转换--不是一句句地对译,会有些变化,因为语言各有各的特点。
作者: yaya     时间: 2006-3-20 13:36
等下一版吧
下载链接http://bbs.cfanhome.com/dispbbs.asp?boardid=45&id=580332

[ Last edited by yaya on 2006-3-20 at 14:05 ]
作者: yaya     时间: 2006-3-26 16:05
ConfigP.Mnu v1.00 发布于1楼

修改:名称由ConBoot.sys改为ConfigP.Mnu
修改:标识符结构
修改:取消标题、尾注、菜单、项目、配置块的数量限制
修改:取消esc、-/=、(shift+'-')/(shift+'=')键
修改:变更enter键功能,在任意菜单退出
修改:取消公共项目
增加:嵌套菜单可以没有项目
增加:只1页单选菜单,按空格或回车键,设定项目并退出菜单配置
增加:每条标题、尾注都可有不同颜色
作者: 本是     时间: 2006-3-27 00:02
15楼的帖子讲到:“关于在 ConMenuR 程序中加入屏蔽代码的问题,我觉得很必要,但限于水平低,目前还没能实现。希望同仁继续提供思路,或直接编一条程序供鉴赏。”

此处的“屏蔽代码”是什么意思?是否已经实现?
作者: willsort     时间: 2006-3-27 12:19
Re yaya:

      很高兴又见到了你的更新,试用结果如下:

      1、发现caption/endnote/菜单标题/菜单项文字 都有两个空格的缩进,不知是有意为之,还是处理颜色代码时的疏忽;另外建议颜色代码可以加入背景色,可以允许颜色代码缺省,至于是继承上一句还是继承color的定义由程序自定。

      2、给出的4个范例中使用 /u 恢复显示屏蔽时,程序名仍然为ConBoot.sys,导致启动后无任何显示,不过可以使用cls或mode co80恢复;

      3、菜单的倒记时速度明显偏快,不知是虚拟机问题,还是程序自身问题。

      4、示例中的水平线可以考虑使用全角的表格线字符,更为美观;

      5、示例中多文字显示问题,可以考虑创建多个VT程序的方案,每页菜单使用一个VT程序,在显示前即加载(不知是否可能,未经测试)。
作者: yaya     时间: 2006-3-28 16:53
Re 本是:
    我说的“屏蔽代码”,是指屏蔽驱动程序的屏幕打印信息。目前已初步实现,但有缺陷。
    方法1,置字符属性00,全黑屏。
    方法2,置03c5(02)位0为0,此时有光标,虽然没有字符显示,但有空格输出,即光标位移。
    希望即有光标显示,又不位移。
作者: yaya     时间: 2006-3-28 17:21
Re willsort:
    1、有两个空格的缩进,是编程时设定的。
    2、应该是 ConfigP.Mnu /u 。文档错误,已更正。
    3、菜单的倒记时速度明显偏快,应该是虚拟机问题。
    5、创建多个VT程序的方案应该可行。结构如下:
device=config1.exe
device=ConfigP.Mnu
rem NestMenu=
rem caption=,.....
rem caption=,.....
rem block=
rem block=end

device=config2.exe
device=ConfigP.Mnu
rem NestMenu=
rem caption=,.....
rem caption=,.....
rem block=
rem block=end

....
作者: yaya     时间: 2006-3-28 17:23
v1.01 2006/3/28 发布于1、2楼

改进:单选项目在选择的同时即被设定,不用按空格键
作者: martin325     时间: 2006-4-3 22:21
屏蔽代码
希望即有光标显示,又不位移。

加油!

如果开发好了,请通知一声,我的QQ:33221860

谢了!
作者: 林之博大     时间: 2006-5-22 16:07
这个东西好啊,比ConMenu先进。
原来看到这个版本 1.01,再加上这个帖子沉底了....还以为这个比较落后....
顶一下~~!
赫赫
作者: yaya     时间: 2006-7-8 14:55
可在Config.sys中加载的汉字系统已发布,下载地址:
http://www.cn-dos.net/forum/view ... id=3P9TLZ#pid130564
作者: gmy     时间: 2006-7-8 17:56
支持,但要等到更成熟时才使用。
作者: ffddyy     时间: 2006-8-1 17:57    标题: 看不懂

头大!头大!越来越大!愈来愈大!!!!!!!!!!!!
作者: tangtai     时间: 2006-9-3 03:33
厉害!!!
作者: sweetdreamlan     时间: 2006-10-20 22:06
如果能在config.sys的命令基础上加文字就好了

命令改了,很不熟悉
作者: sweetdreamlan     时间: 2006-10-21 05:31
开始简单的看了下,没有完全理解意思,
然后用了下,发现真是强捍  .............
作者: saromman     时间: 2007-1-15 23:54
佩服的五体投地,我也在学习中。
作者: wxjclh     时间: 2007-1-19 06:45
努力学习ing
作者: ajiange     时间: 2007-1-24 11:54
之前用了conmenu.sys ,不知道這個有比conmenu.sys好用嗎?....研究看看.......
作者: yaya     时间: 2007-1-25 05:33
v1.10 发布于本楼(1楼没有权力更改)
增加:英文字母大小写转换开关^
增加:项目说明首字缩进

a.英文字母大小写转换
     在同一行中,默认为大写,遇^转换。
     例:c^onfig^p.m^nu  显示为  ConfigP.Mnu
b.项目说明首字缩进,缺省4(10进制)
     rem initial=
c.rem可用';'代替
     ; initial=

[ Last edited by yaya on 2007-1-25 at 05:43 AM ]
附件 1: ConfigP1.1.rar (2007-1-25 05:43, 4.81 K, 下载附件所需积分 1点 ,下载次数: 17)

作者: yaya     时间: 2007-1-31 03:46
v1.11 2007/1/28
修正:单选菜单不设默认值时出现错误

[ Last edited by yaya on 2007-1-31 at 03:47 AM ]
附件 1: ConfigP1.11.rar (2007-1-31 03:47, 4.84 K, 下载附件所需积分 1点 ,下载次数: 39)

作者: xingsys     时间: 2007-2-3 11:46
yaya好像有一点问题
我在论坛提出,不过没有解决,见这里
http://www.cn-dos.net/forum/view ... mp;page=1#pid171961

后来发现我写的基本没有问题,问题在于,,
经过了N次试验,ConfigP.Mnu v1.01 中,并不能设置相同的变量名,
如果在block=0在设置set config=aaa ,后面的块1如果再设置set config=bbb,启动菜单调用0块,菜单2调用1块,那么在autoexec中是无法判断config的值 ,这个问题还得请教yaya了 还有,如果你在config中设置了两个变量set config=aaa  config1=asdfas 那话,无论你选哪一个菜单哪一个块(即使是要执行的哪一项菜单中没选中的块) ,这两个变量都会赋值的

[ Last edited by xingsys on 2007-2-3 at 12:07 PM ]
作者: yaya     时间: 2007-2-3 23:58
你编的菜单有问题,看原贴
作者: proof     时间: 2007-2-5 13:04
服了你了。
为什么在启动CONFIG过程中就能显示中文?

你是怎么做到的?
作者: xingsys     时间: 2007-2-6 01:56
花屏,不能正常使用,包括第三,第四版,请yaya想法搞一下
作者: wads1314     时间: 2007-2-6 03:22
强悍.......
作者: KUN     时间: 2007-2-8 00:16
我正想做这个选择菜单刚刚就有了!多谢楼主!
作者: macauxdragon     时间: 2007-2-24 07:24
看過後,如果我沒有理解錯,感覺ConfigP.Mnu和其它菜單分別在於,ConfigP.Mnu就好像在進入操作系統之前設定Bios一樣,設定用不用哪個硬件,或哪個先起動,需要什麼樣的設定一樣,而不是串列那樣指定一條執行順序、最終結尾就是執行,如像一般Windows程式Options...或Properties...的意義是一種環境設定,而一般串列菜單,就如Windows程式的Edit->Copy或Edit->Paste一樣,是一個動作的執行順序。
作者: yaya     时间: 2007-2-24 21:48
完全正确
作者: ywcn     时间: 2007-3-5 11:58
不更新了?
作者: 0451lym     时间: 2007-4-7 12:11    标题: 有点问题!

如果子菜单是单选菜单且默认不加载任何选项,这时进入子菜单后无法用空格键选择和取消,且按↑/↓键自动加载!

错误选择后无法取消,是个大问题!

[ Last edited by 0451lym on 2007-4-7 at 01:09 PM ]
作者: yaya     时间: 2007-4-8 01:11
已解决,请从49楼重新下载
作者: 0451lym     时间: 2007-4-8 03:33


  Quote:
Originally posted by yaya at 2007-4-8 01:11:
已解决,请从49楼重新下载

我用的就是49楼下的,还是有问题!
是不是我写的CONFIG有问题?

DOS=HIGH,UMB,AUTO
NUMLOCK=ON
device=\SYS\config.exe
device=\SYS\ConfigP.Mnu

; 0NestMenu=
; color=1d,c
; initial=
; time=5,剩余时间
; caption=
; caption=
; caption=a,                   我的镜像恢复系统
; caption=4,    ----------------------------------------------
; endnote=e,    按↑↓键或相应字母键跳转,按空格键选定项目
; endnote=e,
; endnote=e,    按 → 键连续进入子菜单,按 ← 键顺序返回
; endnote=e,
; endnote=e,    按回车键结束驱动选择,进入我的镜像恢复系统
; endnote=e,
; item=1=选择 内存驱动      默认加载:HIMEM + UMBPCI
; item=2=选择 光驱驱动      默认不加载
; item=3=选择 _USB磁盘驱动  默认不加载
; item=4=选择 _USB光驱驱动  默认不加载
; item=5=选择 _USB鼠标驱动  默认不加载

; 1RadioMenu=
; caption=
; caption=
; caption=
; caption=a,                     选择内存驱动
; caption=4,    ==============================================
; item=0=加载 HIMEM
; item=0,1=加载 HIMEM + EMM386
; DefaultItem=0,2=加载 HIMEM + UMBPCI

; 2CheckMenu=
; caption=
; caption=
; caption=
; caption=a,                     选择光驱驱动
; caption=4,    ==============================================
; item=3=加载 gcdrom      (SATA-CD)
; item=4=加载 vide-cdd    (PATA-CD)
; item=5=加载 QCDROM      (PATA-CD)

; 3RadioMenu=
; caption=
; caption=
; caption=
; caption=a,                   选择_USB磁盘驱动
; caption=4,    ==============================================
; item=6,7=加载 DI1000DD
; item=6,8=加载 ASPIDISK

; 4RadioMenu=
; caption=
; caption=
; caption=
; caption=a,                   选择_USB光驱驱动
; caption=4,    ==============================================
; item=6,9=加载 USBCD
; item=6,10=加载 NJUSBCDA


; 5RadioMenu=
; caption=
; caption=
; caption=
; caption=a,                   选择_USB鼠标驱动
; caption=4,    ==============================================
; item=6,11= 加载 UHCI
; item=6,12= 加载 OHCI

; block=0
DEVICE=\SYS\MEM\HIMEM.SYS /TESTMEM:OFF
; block=1
DEVICE=\SYS\MEM\EMM386.exe noems
DEVICEHIGH=\SYS\MEM\QSCACHE.SYS /F /S7
; block=2
DEVICE=\SYS\MEM\UMBPCI.SYS /S
DEVICEHIGH=\SYS\MEM\QCACHE.SYS /L /S5
; block=3
DEVICE=\SYS\CD\GCDROM.SYS /D:SATA-CD
; block=4
DEVICE=\SYS\CD\vide-cdd.sys /d:PATA-CD
; block=5
DEVICE=\SYS\CD\QCDROM.sys /d:PATA-CD
; block=6
DEVICE=\SYS\USB\usbaspi.sys
; block=7
DEVICE=\SYS\USB\di1000dd.sys
; block=8
DEVICE=\SYS\USB\ASPIDISK.SYS
; block=9
DEVICE=\SYS\USB\USBCD.sys /d:USB-CD
; block=10
DEVICE=\SYS\USB\NJUSBCDA.sys /D:USB-CD
; block=11
DEVICE=\SYS\USB\UHCI.EXE
; block=12
DEVICE=\SYS\USB\OHCI.EXE
; block=end

FILESHIGH=100
BUFFERSHIGH=30,0
SHELL=COMMAND.COM /P /F /E:4096
FCBSHIGH=8,0
STACKSHIGH=18,512
LASTDRIVEHIGH=Z
作者: 0451lym     时间: 2007-4-8 03:51
在菜单选择的A、B、C.....字母前能不能加个空格,不加空格看起来实在是别扭!(填充边框)
呵呵!

[ Last edited by 0451lym on 2007-4-8 at 04:49 AM ]
作者: 0451lym     时间: 2007-4-8 15:25
再提点建议!
难度非常大:能不能把背景颜色升级到背景图片,就象光盘启动的菜单一样!
                以下都是在背景图基础上的设想:
                在执行配置的时候可以用命令提示等待语句,或者在大背景图的基础上用小图累加充填,执行AUTOEXEC的最后一句的时候用命令清屏回到DOS界面(刷掉背景图)


感谢楼主的辛勤创作!谢谢分享!

[ Last edited by 0451lym on 2007-4-8 at 03:26 PM ]
作者: challeng     时间: 2007-4-9 00:44
强人一个,天风的一键恢复用得就是这个来显示中文的
作者: yaya     时间: 2007-4-9 01:25
在菜单选择的A、B、C.....字母前加空格,可设置 'initial=' 项.默认值为4.

[ Last edited by yaya on 2007-4-10 at 03:19 AM ]
作者: 0451lym     时间: 2007-4-9 04:58
老大还是不行呀,是不是我的主版的问题,我的是848P的主版,什么牌子的忘记了!

还有就是A、B、C.....字母前加空格,我指的是菜单高亮条,而不是行的左右缩进位置!也就是高亮条的左右两端各留出1个高亮空格!
附件 1: 1.jpg (2007-4-9 04:58, 24.63 K,下载次数: 2)



作者: 0451lym     时间: 2007-4-9 05:01
这个是你现在的,比较一下!
附件 1: 1.jpg (2007-4-9 05:01, 7.95 K,下载次数: 1)



作者: yaya     时间: 2007-4-10 03:17
Re 0451lym
  不知什么缘故,昨天用1.11版测试你的菜单有问题,稍加修改后为1.12版,测试没问题.今天重新用1.11版测试你的菜单,却没有问题!仔细看了一下我的程序,确实没有必要更改.
  单选菜单应改选择1项,且只能选择1项.如果启动时不想加载如何1项,最好设1空项,并将其设为默认.当然也可不设空项,不设默认.
  如果单选菜单设置了2项以上默认,程序只认第一默认项.
  单选菜单不需要用空格键选择,按上下键自动选择.
  如果单选菜单不设默认项,启动时时间到可不加载该菜单的如何1项.如果人为设置菜单,只要按上下键就会自动加载.这时应该设1空项,参考下载示例.

[ Last edited by yaya on 2007-4-10 at 03:18 AM ]
作者: 0451lym     时间: 2007-4-10 05:08
明白了
作者: r7115     时间: 2007-4-11 23:22
挺实用的, 非常感谢!
作者: 6622186     时间: 2007-4-15 09:51
怎么用啊
作者: 6622186     时间: 2007-4-15 09:53
mnu 文件怎么打开
作者: yaya     时间: 2007-4-16 01:13


  Quote:
Originally posted by 6622186 at 2007-4-15 09:53 AM:
mnu 文件怎么打开

在config.sys中加载,如
device=ConfigP.Mnu
作者: yaya     时间: 2007-4-20 04:12
v1.12 增加:屏蔽信息时,根据是否已加载中文系统,分别显示中/英文“等待”提示

[ Last edited by yaya on 2007-4-20 at 04:13 AM ]
附件 1: ConfigP1.12.rar (2007-4-20 04:13, 5 K,下载次数: 42)

作者: yhssdl     时间: 2007-4-20 22:03


  Quote:
Originally posted by yaya at 2006-2-9 08:33 PM:
一、特点
    1. 常见的配置菜单是逐级往下执行,不可返回,像串联。嵌套级数多时,菜单项目将会呈级数放大趋势,使菜单编写比较繁琐,重复项较 ...

这个真不错。:P
作者: barton     时间: 2007-4-21 00:08
不錯的說

哈哈

沒有想到用這個首先給自己的DOS啟動的U盤用上了
作者: zhangwq     时间: 2007-4-21 05:43    标题: 请求帮助

你的CONFIGP可以屏蔽驱动程序冗余信息输出,但是不能进入DOS命令行,好像是黑屏一样,要敲任意键才可以进命令行,什么原因?
device=c:\configp.mnu /s
device=c:\himem.sys
dos=high
device=c:\atio.sys @260
device=c:\configp.mnu /u
作者: zhangwq     时间: 2007-4-21 23:50    标题: 你的CONFIGP有问题呀

你的CONFIGP有问题呀!!!
不能看见DOS提示符,好象黑屏一样,并且device=c:\configp.mnu /u好像没有起到左右,提示CONFIG里面有错误
作者: yaya     时间: 2007-4-22 04:40
是执行device=c:\configp.mnu /u之前的驱动程序出错.先不要屏蔽冗余信息,观察一下.
作者: zhangwq     时间: 2007-4-22 22:21    标题: 打个包或者加个壳

是否可以将我要屏蔽的驱动冗余部分,打个包或者加个壳之类的东西呢?就像人穿衣服一样,将要遮掩的地方盖住?呵呵,请帮忙考虑。
device=c:\configp.mnu /s
device=c:\atio.sys @260
device=c:\configp.mnu /u

作者: zhangwq     时间: 2007-4-22 22:25    标题: 没有错误

执行device=c:\configp.mnui /u 之前的驱动没有任何错误,DEVICE=C:\atio.sys @260
作者: yaya     时间: 2007-4-23 03:59
使用configp.mnu,却没有菜单,肯定出错.
如果不设菜单而使用configp.mnu屏蔽沉余信息是不行的.
作者: hulongzhuo     时间: 2007-4-27 13:42
左右光标键向前向后选择,似乎不太符合一般人习惯,
请问YAYA是否可以做成,选项式的动作,
比如说,在主菜单里,用回车键任意选择一项,进入下一级菜单,当要从下级菜单返回主菜单的时候,也用一个选项菜单,假如是"返回",然后回车键选择"返回",就回到了主菜单,
这样实现起来的话,似乎更棒呢?
作者: badfile     时间: 2007-4-30 00:51
太好了,正是在找。谢谢。
作者: quanshui168     时间: 2007-5-10 19:24
哈哈,终于找到我想要的东西啦
感激不尽!!
作者: yaya     时间: 2007-5-12 11:10    标题: ConfigP.Mnu v1.13发布

修改:回车键的作用等同于空格键。由嵌套类菜单进入子菜单,或设定复选类菜单项目。
增加:Esc或退格键。由子菜单返回首菜单,或从首菜单退出。
修改:被选项目显示时,首尾各加1个空格
附件 1: ConfigP1.13.rar (2007-5-12 11:11, 5.02 K,下载次数: 59)

作者: 0451lym     时间: 2007-5-14 11:20
感谢楼主的辛勤创作!
作者: hulongzhuo     时间: 2007-5-14 13:39


  Quote:
Originally posted by yaya at 2007-5-12 11:10 AM:
修改:回车键的作用等同于空格键。由嵌套类菜单进入子菜单,或设定复选类菜单项目。
增加:Esc或退格键。由子菜单返回首菜单,或从首菜单退出。
修改:被选项目显示时,首尾各加1个空格

很好,:P
谢谢YAYA的修改!!
作者: hulongzhuo     时间: 2007-5-14 14:18
YAYA ,我觉得还有一个问题,想请教你一下,假如我有下面这样一段:
device=config.exe  
device=ConfigP.Mnu /s

rem 0NestMenu=e,u,首菜单
rem color=17,c
rem time=30,剩余时间
rem caption=
rem caption=
rem caption=
rem caption=3,             中文 MSDOS_7.1 启动盘
rem caption=4,================================================
rem endnote=2,按↑↓键或相应字母键选择项目,按空格键设定项目
rem endnote=2,按→键向后连续选择,按←键顺序返回,按回车退出菜单
rem item=1=..      这是主菜单的菜单顺序号,代表第一个菜单项目,下面有二级菜单选项
rem item=2=..      这是主菜单的菜单顺序号,代表第二个菜单项目,独立的一级菜单选项
rem item=3=..      这是主菜单的菜单顺序号,代表第三个菜单项目,独立的一级菜单选项

rem 1RadioMenu=,,        主菜单的第一项的二级菜单选项
rem item=1=..
rem item=2=..
rem item=3=..
rem item=4=..
rem item=5=..

rem block=1
..
rem block=2
..
rem block=3
..
rem block=4
..
rem block=5
..
rem block=end

fcbshigh=4,0
fileshigh=30
buffershigh=30,0
lastdrivehigh=32
stackshigh=9,256

device=ConfigP.Mnu /u

现在的问题是, 主菜单只有三个大项目,而只有第一个主菜单项目有下级嵌套子菜单,第二项和第三项均没有下级菜单了,当我选择第一项的时候可以正常跳转到下级菜单里面,但是第二跟第三项是不需要跳转的了,直接就执行块的命令的了,但是ITEM=2,3=,那是子菜单的块命令了,我是要执行的是主菜单的块啊?
那这怎样表示呢? 你的说明里是这样写的:  "
    6. 项目
        rem item=2=....
        rem DefaultItem=2,11=....
        数字 对于嵌套菜单,是菜单顺序号(打开第2页菜单)
        对于单选菜单、复选菜单是配置块顺序号(包含第2,11配置块)"

这就有点混淆了, 主菜单的块应该怎样表示呢??
这是我个人的一点看法,不知我的表达上是否有问题,或是对程序的用法还有不明析地方,希望YAYA大侠回复!

[ Last edited by hulongzhuo on 2007-5-14 at 02:23 PM ]
作者: yaya     时间: 2007-5-14 15:45
主菜单可以是嵌套类菜单、单选类菜单或复选类菜单。如果你选择嵌套类菜单,那么其内部的项目只能是进入下一级菜单的标题,既第二、第三项应再设两个单选菜单。
作者: hulongzhuo     时间: 2007-5-14 16:04


  Quote:
Originally posted by yaya at 2007-5-14 03:45 PM:
主菜单可以是嵌套类菜单、单选类菜单或复选类菜单。如果你选择嵌套类菜单,那么其内部的项目只能是进入下一级菜单的标题,既第二、第三项应再设两个单选菜单。

谢谢YAYA回复, 明白你的意思了,
不过有点太强求了,我第二第三项并不想要下级菜单了,如果直接能执行那就太完美了, 相比之下, 我更偏爱YAYA 的另一款 CONMENU.SYS  相当不错,主要是编写简单,结构很明析.
再次感谢YAYA .....
作者: yaya     时间: 2007-5-14 16:24
按你的菜单内容,适合用ConfigS.Mnu
作者: hulongzhuo     时间: 2007-5-14 16:37
说得简单点就是要它的返回功能!  其它是跟逐级菜单一样,

MAXS老大都是用的你的conmenu.sys的, 强!

对了, 有个同仁说, 把背景色换成背景图案, 确实是个很高的创意,

尔等,就坐观其变吧, 哈哈.....
作者: 淡淡一笑     时间: 2007-6-15 12:03
刚开始用有点不习惯,用上两天就很舒服了,支持!
作者: mhhr100     时间: 2007-6-15 23:29
好莱坞
作者: mayucai     时间: 2007-9-7 13:48    标题:

很不错
作者: d590520     时间: 2007-9-20 22:20
这东西真好!好
作者: d590520     时间: 2007-9-20 22:21
这东西真好!好
作者: 114176601     时间: 2007-10-9 19:50
厉害啊,支持一下
作者: haipengno1     时间: 2007-11-29 16:00
不错的东东,找了好久了,谢谢楼主
作者: jianglunhua     时间: 2008-2-12 18:39
不错哦
作者: qinpin     时间: 2008-2-13 23:52
学习中!谢谢。
作者: suyuke     时间: 2008-5-5 00:17
非常好!
作者: iceleafage     时间: 2008-6-2 16:49
求求,我要下载,支持。
作者: king3060     时间: 2008-7-5 10:29
收下了,谢谢
作者: donghaibaby     时间: 2008-7-26 16:36
积分不够,下不来。
作者: Jehong     时间: 2008-8-26 19:57    标题: 精彩的内容

精彩的内容,高手的制作,我要认真学习
作者: 23070205     时间: 2008-9-5 14:03
我正需要。谢谢。下载一个。
作者: myeasylove     时间: 2008-9-27 22:20
真的是无奇不有~~
感谢大大
作者: wangking2008     时间: 2009-2-25 23:35
学习
作者: ghostv     时间: 2009-2-26 08:00    标题: 辛苦了

辛苦了
作者: 33445566     时间: 2009-4-27 21:29
下了。学习学习
作者: rkzu     时间: 2009-5-1 05:56
希望能下载啊,多谢。
很久没有来了。
作者: bullbat     时间: 2009-11-9 15:11
看的不是很懂,在研究看看。
作者: xumingyong88     时间: 2011-1-16 14:02    标题: 看看

这个对我很有帮助
作者: kuaidao     时间: 2014-12-24 11:50
我正在学习DOS