chenall 发表于 2010-2-2 16:10:08

grub4dos 外部命令 wenv [2010-10-17 ]

[功能说明]

在GRUB4DOS还没有支持变量之前可以暂时代替着使用变量的功能

最新版本下载地址

http://grubutils.googlecode.com

[使用方法]

注:变量名不能超过8个字符.
变量值不能超过512个字符
最多保存64个变量.
[*]2010-10-17
1.BUG修正。[*]2010-10-13
   1.支持变量嵌套,见后面的截图演示
   2.一些BUG修正.[*]2010-10-12
   1.添加简单的echo子命令。
   2.添加call子命令(就是run命令)[*]2010-10-11
   1.添加子命令for(仿cmd模式),三种模式.(注意:语法要求比较严格请按照下面的格式使用)。
   FOR /L %variable IN (start,step,end) DO wenv-command
   FOR /F ["options"] %variable IN ( file-set ) DO wenv-command
   注:file-set 前后必须有空格
   FOR /F ["options"] %variable IN ("string") DO wenv-command
   注:string前后必须有引号,并且紧跟(),否则都算非法。
   支持的options
          eol=c
          delims=xxx
          tokens=x,y,m-n
    使用方法请参考cmd的for命令.
[*]2010-10-09   注意:命令行长度不要超过512个字节。
   1.初步添加for命令,目前支持以下两种操作.并且允许嵌套。(仿 CMD 的 for 命令)
1). for /L $i IN (start,step,end) DO wenv-command
   以增量形式从START到END的一个数字序列。
   例子:
   wenv for /L $a in (1,1,5) do run echo $a\n
   wenv for /L $a in (5,-1,0) do run echo $a\n
2). for /F $i IN ( file ) DO wenv-command
   读取 FILE 的每一行。忽略以":"开头的行。
   注:使用该功能file前后都必需要有空格隔开.
   例子:
   wenv for /F $a in ( /test.txt ) do run echo $a\n

   2.read 命令支持参数
   read 的文件可以使用$0-$9代替传入的参数。
   其中$0 是代表自身. $1-$9 分别是第1个-第9个参数.
   这样可以配合for等命令实现一些强大的功能..
   3.修正check命令比较数字的BUG.[*]2010-10-08
1.修正cal ++VARIABLE没有成功的BUG。
2.修正比较符操作的BUG。
3.变量提取支持${VARIABLE:X:-Y}的形式,-Y代表提取到-Y个字符(即倒数Y个字符都不要).
4.为了避免比较操作和其它命令的关键字混淆,比较操作使用子命令check
也就是今天以后的版本,比较操作前面要加check.[*]2010-10-07
1.CALC命令支持++/--运算符.(使用和C语言一样的方法进行计算)
说明: ++/-- 必须和变量或内存地址一起使用,否则是非法的运算.
注:要使变量自增减,则变量名是直接引用,不需要${}
例子:(使用自增减变量情况可能会比较复杂,如果懂和C语言的就明白的,否则最好不要乱用).
    wenv calc a=*0x60000++//先计算a=*0x60000 再把*0x60000的值+1
   wenv calc a=b++ 和 wenv calc a=++b 的计算结果a是不同的,具体自己找C语言的书看去.
   wenv calc a=*0x60000+b++2010-10-06
1.添加四个比较符 ==,<>,>=,<=
例子:
wenv ${a}==abc && echo ${a} 等于 abc
wenv ${c} == 0x20 && echo ${c} = 0x20

2.支持按数字比较
例,以下都会返回真.
001 == 1 或 0x20 == 32
3.修正前面WENV SET XXX=
如果XXX变量不存在时会设置变量的BUG.

2010-10-05
   1.添加字符串处理功能,和linux shell类似.
      1).${VAR:x:y}从x开始提取y个字符,如果x为负数则从倒数x个开始提取.
      
      以下提取的内容都不包含STRING字符串.
      2).${VAR#STRING}      提取STRING字符串后面的内容,从左往右第一个位置开始.
      3).${VAR##STRING} 提取STRING字符串后面的内容,从右往左第一个位置开始.
      4).${VAR%STRING}      提取STRING字符串前面的内容,从右往左第一个位置开始.
      5).${VAR%%STRING}      提取STRING字符串前面的内容,从左往右第一个位置开始.

2010-06-23
1.修正zhaohj 提到的一个BUG
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=159851&page=20#pid1984131
2.所有参数不区分大小写.(变量有)

2010-06-20
1.重写部份代码,优化效率,不再使用虚拟内存盘存放.而是直接使用内存地址0×40000(最多占用0×8200字节)
2.添加read命令,可以从指定文件中读取一序列命令执行(用于动态执行)
3.内置ECHO命令,使用wenv run ECHO时直接调用内置的echo功能显示.


2010-02-04
1.对run命令增强了一下

现在的run可以连续运行多条内部命令

命令与命令之前使用以下字符隔开
]]]无条件执行
]]&当前一条命令返回真时执行后面的语句.否则直接返回
]]|当前一条命令返回假时执行后面的语句.否则直接返回.


2010-02-03
1.优化代码(替换变量的代码).
2.wenv run 允许使用*ADDR来获取指定内存的字符串(具体看后面的截图).
除了截图的方法外,还可以动态执行命令.
比如
write (md)0x300+1 map --status\0
wenv run *0x60000

嘿嘿,这就是之前想要的的动态执行命令效果.

注:读取内存是碰到\0(0x0)结束的,所以在写命令的时候后面最好再加\0.


2010-02-02
1.整合CALC功能并支持变量.命令格式 calc
wenv calc 表达式(同CALC命令).
唯一的区别是 = 前面如果是一个非数字字符串,则会把计算结果设为变量
例子
以下都会设置一个变量a
wenv calc a=*0x60000+1
wenv calc a=*0x60000

wenv calc a=${a} + 1 或 wenv calc a= ${a} ++
注:暂时还不能直接 wenv calc a++,以后会考虑支持.
2.全面支持变量.

wenv set a=1
a=1
wenv set b=${a}
b=1
wenv calc c=${a}+${b}
c=2












[ 本帖最后由 chenall 于 2010-10-17 09:55 编辑 ]

chenall 发表于 2010-2-2 16:16:50

原理很简单.
读取其中一个扇区作为变量名的存放位置.

目前使用第65个扇区放变量名.

然后根据这个变量名所在的位置(以8个字节对齐)读取/写入 对应扇区的值 获取/设置 变量.


                  WENV 使用说明 (readme)
                  
                  chenall 整理于 2010-10-12
WENV 是一个基于GRUB4DOS的程序,可以用它来增强GRUB4DOS的脚本能力,来现一些不可思议的功能。
WENV 最初只支持简单变量和运行GRUB4DOS命令。到了现在已经支持各式各样的处理。
可以把让它当成是GRUB4DOS的增强形SHELL,方便各位grub4dos fans编写高效强大的菜单。
在这里要感谢无论启动论坛上众多朋友的支持,如果没有你们,WENV还只是一个小玩具。
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=159851
取之于网络,共享于网络。
本说明文件来源于无忧论坛zhaohj提供的README.TXT,我经过修改整理而成。
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=159851&page=46#pid2056205
如有发现错误,请通知我,谢谢。
WENV目前支持的命令列表(wenv-commands):
    SET         设置/修改/新增/删除变量
    GET         显示变量/判断变是是否存在
    FOR         类似于CMD的FOR命令,具体见后面介绍
    CALL      执行一个GRUB4DOS内部命令
    CALC      简易计算器(没有优先级从左往右计算,不支持括号)
    ECHO      在屏幕上显示信息
    READ      分析一个文件并执行里面的命令(必须是WENV支持的命令),并且支持参数。
    CHECK       判断/检测相当于if命令,后面可以跟WENV-COMMAND(当判断的返回值为真时执行)
两个内置变量:
?_WENV          保存上一次wenv call运行的返回值
?_GET         保存上一次wenv get variable变量的长度
一:SET 设置/修改/新增/删除变量
   
    1.WENV SET ]
    variable指定环境变量名,区分大小写 (目前最多允许用户定义60个变量)
            不超过8个字符.可以使用字母(a-z/A-Z)、数字(0-9)、下划线(_)。不可以使用数字开头。
    string    指定要指派给变量的一系列字符串。不能超过512字节。
   
    无等号时显示指定名称的所有变量的值。
    SET P
   
    会显示所有以字母 P 打头的变量
   
    2.等号后面可以跟"$U,"或"$L,"
      $U,全转变为大写;
      $L,全转变为小写;
   
      例子: WENV SET a=$U,aBcDeF得到 a=ABCDEF
    3.关键字 $input,来获取从键盘输入的字符。
      例子:获取从键盘输入的字符串,并转换为大写赋值给srspath
      WENV set srspath=$u,$input,please input SRS driver path:
   
    4.一些组合例子:
      WENV SET variable=$U,string
      WENV SET variable=$U,$input,Prompt
      
二、 GET 显示变量/判断变是是否存在
    GET 命令可以显示指定的变量,并设置?_GET为该变量的字符串长度。
   
    WENV get xxx
    返回变量xxx的值的字符串长度.
   
    注: 如果变量不存在会返回一个失败的值0,可以用于判断变量是否存在
    如: 当变量abc不存在时显示字符串"Variable abc not defined"
      wenv get abc || echo Variable abc not defined
三、FOR 类拟于CMD的for
   比较强大的一个命令,可以分析字符串,文本文件。
   语法:
      FOR /L %variable IN (start,step,end) DO wenv-command
      该集表示以增量形式从开始到结束的一个数字序列。因此,(1,1,5)将产生序列
      1 2 3 4 5,(5,-1,1)将产生序列(5 4 3 2 1)
      
      FOR /F ["options"] %variable IN ( file ) DO wenv-command
      FOR /F ["options"] %variable IN ("string") DO wenv-command
   如果有 usebackq 选项:
      FOR /F ["options"] %variable IN (`string`) DO wenv-command
      options
       eol=c         - 指一个行注释字符的结尾(就一个)
       delims=xxx      - 指分隔符集。这个替换了空格和跳格键的
                         默认分隔符集。
       tokens=x,y,m-n- 指每行的哪一个符号被传递到每个迭代
                         的 for 本身。这会导致额外变量名称的分配。m-n
                         格式为一个范围。通过 nth 符号指定 mth。
       usebackq      - 反向引号
      
   几个例子 分析myfile.txt的每一行,使用";"作为注释符,使用","分隔字符串,显示每行的第二和第三个字符串
      FOR /F "eol=; tokens=2,3 delims=," %i in ( myfile.txt ) do echo %i %j
      
      显示从1-10的数字
      FOR /L %i in (1,1,10) do echo %i
      
      以下语句会显示 1 2 3 6
      FOR /f "tokens=1-3,6" %i in ("1 2 3 4 5 6 7 8 9 0") do echo %i %j %k %l
      
      可以参考CMD的for命令帮助说明.
四、CALL 命令
    WENV call grub4dos-builtincmd
    CALL 命令用于执行GRUB4DOS内部命令,使得可以动态执行一些GRUB4DOS的命令.
   
    可以使用变量或*ADDR$代替命令的任意部份。
    例子:
   
    wenv set a=(hd0)
    wenv call map ${a} (hd1)
    扩展了变量${a} 相当于执行map (hd0) (hd1)
    wenv call write (fd0)/aa.txt *0x60000$
    这个会扩展*0x60000$,把从内存地址0X60000处的字符复制到命令行
   
    如果内存地址0x60000处有字符串abcdef
   
    那扩展后就是write (fd0)/aa.txt abcdef
    甚至还可以直接 wenv call ${mycmd}
    会扩展变量mycmd,如果它是一个GRUB4DOS内部命令,则会得到执行,否则返回失败值。
    call 可以连续运行多条内部命令,命令与命令之间使用以下字符隔开
    ]]]无条件执行
    ]]&当前一条命令返回真时执行后面的语句.否则直接返回
    ]]|当前一条命令返回假时执行后面的语句.否则直接返回.
五、calc 命令 用于grub4dos的简单计算,从左到右计算,不支持优先级
    WENV calc [INTEGER]=] [*]INTEGER OPERATOR [[*] INTEGER]
   
    calc 命令可以直接操作内存中的数据,请使用*ADDR的形式。
    =前面如果是一个非数字字符串,则会把计算结果赋值给变量;
    OPERATOR:包含+、-、*、/、&(与)、|(或)、^(位异或)、>>、<<
    *INTEGER表示内存地址的值;
    如:
    WENV calc a=*60000+1      表示把内存地址0x60000的值再加1赋值给变量a
    WENV calc a=1<<10         左移10位,即2的10次方,等于1024
    WENV calc a=b++             a=b,b=b+1
    WENV calc a=++b             b=b+1,a=b
    WENV calc a=b--             a=b,b=b-1
    WENV calc a=--b             b=b-1,a=b
    WENV calc a++               变量a的值加1;
   
    注:calc可以对变量进行计算,但一般情况下请使用如下的例子获得更快的运算速度。
    wenv calc a=${b}+${c}
    以上的例子不会对变量b和c进行修改。
   
    wenv calc a=${b}+c++
    这个例子会修改变量c的值
六、echo 命令
    WENV ECHO strings
   
    用于显示一个字符串,支持\x转义符。比如\n是一个回车。
七、READ 命令
    WENV READ wenv-bat-file parameters
   
    用于执行一个WENV的批处理文件,该批处理文件里面必须是 wenv-commands。
    忽略以冒号":"开头的行。
   
    在批处理中可以使用参数$0-$9
    其中: $0 代表批处理文件自身。$1-$9 分别代表第一个参数到第九个参数。
   
    参数之间使用空格分隔。
   
    一个例子:
    wenv.bat文件内容如下
    echo $0
    echo $1
    echo $2
    使用命令WENV READ /wenv.bat abcd 12345
    将会在屏幕上显示如下内容
    /wenv.bat
    abcd
    12345
八:CHECK 判断命令相当于IF命令
    1.WENV check string1 compare-op string2 wenv-command
   
    比较符号可以使用其中一个: ==、<>、>=、<=
   
    where compare-op may be one of:
    == – equal
    <> – not equal
    <= – less than or equal
    >= – greater than or equal
    注: 注意比较时,后面的字符串忽略小写对比.
    如:
    abc==ABC 值为真
    aBc==abc 值为假
    abc==aBc 值为真.
    只要前面部分某个字符是大写,后面部分对应的一定要大写才能匹配
其它说明:
    1、要使用命令序列,可以把要执行的命令放在()之内,使用" ; "分隔每个命令。
       格式: (wenv-command1 ; wenv-command2 ; wenv-command3)
       应用的例子:
   
                  wenv (set a=1 ; set b=2 ; set c=3)
                  wenv for /l %i in (1,1,5) do (set a=%i ; echo %i)
   2、从内存中复制字符串 *ADDR$
      说明:程序执行时会从内存地址ADDR处复制一个字符串替换命令行的*ADDR$
      例子:显示内存地址0x60000处的字符串信息
      wenv echo *0x60000$
      执行时先复制内存0x60000处的字符串到命令行替换后再执行。

通用字符串处理(以下方法可以应用于任何地方)
   
   1: ${VAR:X:Y}
    提取第X个字符后面的Y个字符,如果X为负数则从倒数第X个开始提取Y长度的字符;
    如果Y的值为空则提取第X个字符后面的所有有字符;
    如果Y的值为负数,则去掉倒数Y个字符;
    WENV set a=ABCDabcd1234
    WENV set b=${a:4:4}   得到b=abcd
    WENV set b=${a:-8:4}    得到b=abcd
    WENV set b=${a:4:-4}    得到b=abcd
    WENV set b=${a:-8:-4}   得到b=abcd
   
   2: ${VAR#STRING} 删除STRING前面的字符.
    WENV set a=ABCD;abcd;1234
    WENV set b=${a#;}       得到b=abcd;1234
   
   3: ${VAR##STRING} 删除STRING前面的字符,贪婪模式
    WENV set a=ABCD;abcd;1234
    WENV set b=${a##;}      得到b=1234
   
   4: ${VAR%STRING} 删除STRING后面的字符.
    WENV set a=ABCD;abcd;1234
    WENV set b=${a%;}       得到b=ABCD;abcd
   
   5: ${VAR%%STRING} 删除STRING后面的字符,贪婪模式
    WENV set a=ABCD;abcd;1234
    WENV set b=${a%%;}       得到b=ABCD
   6: 支持嵌套变量。
   像下面的例子:
    wenv echo ${${${a:0:1}:0:1}}
一些应用举例:
      1)根据提示从键盘输入,全转为大写后保存给srspath变量
      WENV set srspath=$u,$input,please input SRS driver path:
      2)设置变量a,并把值全转为大写
      WENV set a=ABCDabcd1234
      WENV set a=$u,${a}
      得到a=ABCDABCD1234
      3)清除某个变量
      WENV set a=      =后为空,清除变量a
      4)清除某些字符开头的所有变量
      WENV reset a*      清除a开头的所有变量
      WENV reset sr*   清除sr开头的所有变量
      5)清除所有变量
      WENV reset
      6)显示所有变量信息(不包括内置变量)
      WENV set
      7)显示所有以prefix开头的变量
      WENV set prefix
wenv call 的例子:
    如:
    WENV set imgpath=/SRS_f6/srs_f6.IMG
    WENV set imgpath=$u,${imgpath}
    WENV call map --mem ${imgpath} (fd0)
    map --hook
    可以动态执行命令,如:
    write (md)0x300+1 map --status\0
    WENV call *0x60000$
   
wenv check 的例子:
    如:WENV set a=abc
      WENV check ${a}==abc && echo ${a}=abc
      WENV calc a=123
      WENV check ${a}==123 && echo ${a}=123
      WENV check ${a}<=150 check ${a}>=100 && echo ${a}>=100.and.${a}<=150
    上面实现了IF语句功能.

[ 本帖最后由 chenall 于 2010-10-14 08:41 编辑 ]

sratlf 发表于 2010-2-2 16:19:24

和编程越来越像了啊   支持了

pseudo 发表于 2010-2-2 16:45:00

强!

wenv set oem_srs=右边
右边能否包含变量

能否用变量值
作四则运算符
作||、&&

chenall 发表于 2010-2-2 16:46:44

目前没有考虑到这些,汗....

NicTense 发表于 2010-2-2 17:10:24

这个不像calc只是处理2个数值了

如果要支持运算,那就要象dos的set那样考虑多种情况了,包括字符串和数值运算,还要考虑变量嵌套,就比较复杂了

不过如果只是支持数值双目运算,就可以借助calc写地址

这里的set只要增加一个前置识别符*,当*开头时,读入地址值

chenall 发表于 2010-2-2 17:33:24

因为GRUB4DOS目前只允许同时有一个外部命令在运行,所以是没有办法通过这个来调用calc的

wenv set aaa=右边

这个右边的变量自动扩展倒是比较容易.

运算就比较麻烦了.

写这个命令是因为像CPSE/0PE 还有zhhsh 的F6模块, 等使用了不同地址的SRS文件名但其实内容是可以通用的.

这样在合盘时就可以使用同一个SRS驱动了.

^_^..

运算目前还是通过CALC就基本可以满足了.

[ 本帖最后由 chenall 于 2010-2-2 17:34 编辑 ]

chenall 发表于 2010-2-2 20:03:09

准备把CALC的功能整合进来.
这样就可以支持简单的计算功能了.

计算功能加上变量 再加上GOTO
可以做一个简单的循环了.^_^


明天再弄了.

[ 本帖最后由 chenall 于 2010-2-2 20:06 编辑 ]

NicTense 发表于 2010-2-2 20:54:25

呵呵,新版本的话
如果
fallback 0
.....
goto 0
就算goto文件没有,效果也是一样的,就是要提前fallback而已

如果再加上一个for,就差不多完工了
已经接近于basic了

for还是得靠你了,我纯粹是试试编着玩的,c都忘光了,就算编好我都不敢用了

[ 本帖最后由 NicTense 于 2010-2-2 20:56 编辑 ]

NicTense 发表于 2010-2-3 00:27:14

wenv run COMMAND 后面的参数能不能加上对前置符*的支持啊
跟calc一样,当前置符*被指定时,视为内存地址并从该地址取值

这样能解决很多原来解决不了的问题

chenall 发表于 2010-2-3 00:50:55

可以加,但是可能会有冲突,

像cat 命令也有*内存地址的.

还有一点.
关于命令执行时*取的内存地址如果是数值,到底应该转换成字符型数据还是使用原来的数据呢?

chenall 发表于 2010-2-3 01:15:36

下班之前再更新一下..整合calc命令和更全面的变量支持.

见顶楼..

NicTense 发表于 2010-2-3 01:30:31

原帖由 chenall 于 2010-2-3 00:50 发表 http://bbs.wuyou.net/images/common/back.gif
可以加,但是可能会有冲突,

像cat 命令也有*内存地址的.

还有一点.
关于命令执行时*取的内存地址如果是数值,到底应该转换成字符型数据还是使用原来的数据呢?


cat命令有*吗,我看readme和help都没找到cat有*号的说明啊
如果确实有 *号的冲突问题,解决方法也很简单
前置*,读内存,前置**,则不读内存,把 *内存地址 作为字符串参数

执行时取数值还是原来的数据,这个要看你打算做到什么程度

如果不打算支持字符串的运算,仅支持数值双目运算,那我建议内存也只读数值

如果是打算支持字符串的各种相关操作,那么最好就得能判断内存指向的是一个数值,还是字符串
即允许该内存地址是一个字符串的入口指针

[ 本帖最后由 NicTense 于 2010-2-3 01:45 编辑 ]

chenall 发表于 2010-2-3 01:34:10

附上一个例子,根据当前系统的硬盘数量依次后移..

map (hd0) (hd1)
map (hd1) (hd2)
....

wenv init
default 0
timeout 5

title 0
#获取当前硬盘数量(旧的方法)
#清除0x60000的值
#write 0x60000 0
#dd if=(md) of=(md) bs=1 count=1 skip=0x475 seek=0x60000
#设置变量到hd 最大硬盘号码
#wenv calc hd=*0x60000 + 0x7F
#获取当前硬盘数量(新的方法)
wenv calc hd=*0x475 & 0xff
wenv calc hd=${hd} + 0x7f
#转到菜单1
goto 1

title 1
##不用解释了以,当前硬盘号+1 作为目的映射磁盘.
wenv calc hd1=${hd}++
##....执行map命令.
wenv run map (${hd}) (${hd1})
##如果计算后硬盘号 <> 0x7f 就继续...否则循环结束.硬盘编号是从0x80开始的.
checkrange 0x7F wenv calc hd=${hd}-- || goto 2
map --status
map --hook
pause

另外,目前变量保存的数值是16进制的,下次改成用10进制的.10进制的使用比较方便.

[ 本帖最后由 chenall 于 2010-2-3 17:29 编辑 ]

chenall 发表于 2010-2-3 01:39:45

回复 #13 NicTense 的帖子

这个得再讨论一下.看要用什么方式比较好.

个人认为.
对于wenv run command
出现的内存地址应该是指向一个字符串的地址...

NicTense 发表于 2010-2-3 02:00:13

回复 #15 chenall 的帖子

也行的
这样凡是需要读内存数值的就通过wenv calc 实现

wenv calc a=*0x829c >> 16
然后 ${a}就代表当前分区了,再用变量代入 wenv run就行

有wenv calc之后,wenv run支不支持读地址已经不是那么重要了

chenall 发表于 2010-2-3 02:47:40

#14后面的goto 2应该是goto 1.我写错了。

zhaohj 发表于 2010-2-3 11:26:00

wenv帮助信息写一下,现在还没有集成。

zhaohj 发表于 2010-2-3 11:42:28

wenv使用了一个虚拟磁盘(25)存放
那么,wenv uninit后相当于
map --unmap 25
map --rehook
了吗?

NicTense 发表于 2010-2-3 12:19:38

原帖由 chenall 于 2010-2-3 01:34 发表 http://bbs.wuyou.net/images/common/back.gif
#清除0x60000的值
write 0x60000 0
#获取当前硬盘数量
dd if=(md) of=(md) bs=1 count=1 skip=0x475 seek=0x60000


既然是新命令的例子,就不要用dd和write了

calc *0x60000=*0x475 & 0xff


问题解决了,也不用清除

chenall 发表于 2010-2-3 17:42:00

OK,更新了...

基本搞定...

我认为这是GRUB4DOS的一个利器..嘿嘿.

chenall 发表于 2010-2-4 00:01:18

对run命令增强了一下

现在的run可以连续运行多条内部命令

命令与命令之前使用以下字符隔开
]]]无条件执行
]]&当前一条命令返回真时执行后面的语句.否则直接返回
]]|当前一条命令返回假时执行后面的语句.否则直接返回.

比grub4dos原来的&& ||更强大了.

只可惜不能调用外部命令.

....

[ 本帖最后由 chenall 于 2010-2-4 00:04 编辑 ]

NicTense 发表于 2010-2-4 00:19:19

这几个符号看上去好不习惯啊,是不是考虑换一下
例如

]&
]&&
]||

chenall 发表于 2010-2-4 00:48:04

因为编程的方便,也保证这些符号比较少用到.

前面两个字符是固定的用于定位.(也可以设置为其它任意两个字符,只要这两字符基本上不会连续出现在命令行中就好了.)

改天我再想办法看能不能增强一下GRUB4DOS原来的&& || 让它可以连续运行多个命令.

这样子这个命令就可以不用了.

[ 本帖最后由 chenall 于 2010-2-4 00:49 编辑 ]

NicTense 发表于 2010-2-4 00:56:47

回复 #24 chenall 的帖子

相比来说,直接增强grub4dos的&& ||命令更好
我一直觉得那个&& ||用起来好痛苦
无数行判断条件一样的 checkrange

另外就是看看能不能把 calc和goto 变成内部函数,这两个的代码都很小的
但是很常用,也很实用

另外就是 calc的表达式是不是用这个更准确呢
http://bbs.wuyou.net/data/attachment/forum/20100202_6292c2dca0ab48a52373BGhLCSQSFhL5.gif

一个就够了,最后一项貌似也是加中括号的

calc *0x60000 ++

[ 本帖最后由 NicTense 于 2010-2-4 01:04 编辑 ]

chenall 发表于 2010-2-4 01:47:59

允许连续执行多个命令的grldr测试

目前只改了命令行的.只能在命令行下测试.

NicTense 发表于 2010-2-4 03:07:31

回复 #26 chenall 的帖子

root (fd0)
checkrange 0x80 read 0x82a0 && uuid (hd0,0) || uuid (fd0) && ls /

结果只出来read的结果,跟原来的版本一样

我的语法有错吗

chenall 发表于 2010-2-4 09:34:26

因为checkrange返回假。后面的当然不能执行了

zhaohj 发表于 2010-2-4 09:53:10

C大,新版本1.23的grldr有一个小毛病,在菜单中选择菜单项的时候,
default 1
timeout 10
title 0
....
如果第一次用“向上箭头”选择菜单项,下方会一直出现时间倒计时,用“向下箭头”选择就不会出现时间倒计时。这是一个BUG

另感觉新版grldr比较占用内存,ZZHSH的SRS_F6,128M内存都无法进入“user menu",望有空C大查查原因。

NicTense 发表于 2010-2-4 09:55:25

回复 #28 chenall 的帖子

不是相当于if 条件 命令 else 命令 吗
如果是应该会执行 || 后面的才对啊

你的意思是改造之后,只能连续执行命令,当第一个不执行,则后面的都不会执行吗
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: grub4dos 外部命令 wenv [2010-10-17 ]