无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: chenall
打印 上一主题 下一主题

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

  [复制链接]
991#
发表于 2010-12-1 12:17:11 | 只看该作者
当查找的 STRING 第一个字符是 [ 且 ENDS 只有一字符 [  时,就认定查找的是INI文件,找不到 [ 是就作最后一段处理。

这样解决可以!
回复

使用道具 举报

992#
发表于 2010-12-1 13:38:55 | 只看该作者
已上传,在990#.
回复

使用道具 举报

993#
发表于 2010-12-1 15:27:48 | 只看该作者
测试ok,readme.chm中call 改一下:
WENV geometry (...) 改为 WENV call geometry (...)
回复

使用道具 举报

994#
发表于 2010-12-1 16:47:26 | 只看该作者
wenv-readme.chm 更新
因与原版有较大的变化,help 中信息稍作处理以示区别
提示的下载地址也改了下,到时放在博客上有个固定的下载地方

help 信息压缩到1屏以内

==================

增加伪命令 key(*) 引用最多3个特殊字符(key前面必须有一个空格),替换时去掉key和括号,直接变成 *
(开关 DIS_KEY=on 禁止这个特性)
例:
WENV  echo  echo abc  key(]]&)  echo def
显示:echo abc ]]& echo def

这条命令等效于
WENV echo -e echo abc echar(]]&) echo def

但 key(*) 可以避免 ehcar 必须使用 -e 转义,可能与其它串中的 \ 字符冲突的问题,便于动态生成批处理文件。

WENV ehco echo abc ]]& key(get)
输出:echo abc ]]& get

[ 本帖最后由 tuxw 于 2010-12-4 13:39 编辑 ]

wenv-tuxw-2010-12-04.zip

84.68 KB, 下载次数: 74, 下载积分: 无忧币 -2

回复

使用道具 举报

995#
发表于 2010-12-4 23:11:04 | 只看该作者
reset 命令增加 -s 参数,复位时预置开关状态

WENV reset -s=???1
复位所有变量和开关状态,第4个开关(use_x32)=on

wenv-tuxw-2010-12-04.zip

84.97 KB, 下载次数: 75, 下载积分: 无忧币 -2

回复

使用道具 举报

996#
发表于 2010-12-5 07:25:25 | 只看该作者
尽量少使用参数,不用尽量不用
WENV reset -s=???1
==》wenv (reset  ; switch ???1)

有了key(),echar()也无用处
回复

使用道具 举报

997#
发表于 2010-12-5 19:29:04 | 只看该作者
原帖由 zhaohj 于 2010-12-5 07:25 发表
尽量少使用参数,不用尽量不用
WENV reset -s=???1
==》wenv (reset  ; switch ???1)

有了key(),echar()也无用处


用于动态批处理生成,key比echar更好用,但echar有些特殊的地方会用到。跟 get VAR=ADDR 一样,有时候还是很有用的。

-s 跟 就是 reset 再 switch,效果一样,因为我的应用里都要用32位,加个参数少打几个字。


发现 gpart 一个BUG:活动分区是第一个分区时,只会生成 ?_WENV ,不会生成 GP_ 开头的4个变量,修复了这个问题。

wenv-tuxw-2010-12-05.zip

84.96 KB, 下载次数: 202, 下载积分: 无忧币 -2

回复

使用道具 举报

998#
 楼主| 发表于 2010-12-6 14:43:30 | 只看该作者
已经给GRUB4DOS内置批处理脚本添加了参数支持(%0,%1,%9)
%0批处理脚本文件名.%1-%9第1到9个参数.
回复

使用道具 举报

999#
发表于 2010-12-6 18:11:35 | 只看该作者
太棒了,read命令几乎可以退休了
回复

使用道具 举报

1000#
 楼主| 发表于 2010-12-6 23:49:26 | 只看该作者
嘻嘻,使用内置的批处理功能加上参数,可以在某些情况下代替WENV的变量设置。

也可以简化菜单。。
比如在合盘时,如果有许多都是启动软盘镜像这时就派上用场了。

首先建一个文件在grub目录下(或其它地方,具体参考GRUB4DOS外部命令运行机制)
比如文件名runimg
===runimg 内容===================
!BAT
map --mem %1 (fd0)
map --hook
rootnoverify (fd0)
chainloader +1
======runimg 结束================
然后就可以在菜单中简单的调用runimg来启动了比如

title maxdos
runimg /BOOT/MAXDOS.IMG

title MEMTEST
runimg /BOOT/MEMTEST.GZ

如果配合WENV加上判断就可以写一个通用的启动脚本,比如名字是run

然后通过类似如下的命令直接启动,也方便一些菜鸟使用GRUB4DOS。^_^,因为不需要记那么多命令了。

run /ntldr

run /boot.iso

run /boot.img

用WENV还可以继续增强一下功能,比如用wenv dir的功能,自动查找符合条件的文件来启动。。。。

有兴趣的朋友可以尝试写一个run脚本。

[ 本帖最后由 chenall 于 2010-12-6 23:53 编辑 ]
回复

使用道具 举报

1001#
发表于 2010-12-7 07:18:15 | 只看该作者
确实太棒了,批处理支持参数将大大简化菜单文件,菜单模块化必将大行其道。
回复

使用道具 举报

1002#
 楼主| 发表于 2010-12-7 09:00:15 | 只看该作者
昨天的版本发现了一个问题,已经修复上传.

已经整合lzma补丁.
回复

使用道具 举报

1003#
发表于 2010-12-7 09:41:29 | 只看该作者
呵,模块化菜单更容易实现了!!
建议增加支持:%~dp1、%~n1等形式。
回复

使用道具 举报

1004#
发表于 2010-12-7 10:28:01 | 只看该作者
批处理参数部分不是很了解  想请教下参数不存在的会怎么处理

即runimg内容
!BAT
map --mem %1 (%2)
map --hook
rootnoverify (%2)
chainloader ()+1
结束

菜单
title teat1
runimg /DTS.IMA fd0

title test2
runimg /DTS.IMA

执行的话test1是否可以执行成功  

test2会出现什么错误  或者说test2是否等同于执行 map --mem /DTS.IMA ()  (以下省略)
回复

使用道具 举报

1005#
 楼主| 发表于 2010-12-7 12:18:25 | 只看该作者
原帖由 sratlf 于 2010-12-7 10:28 发表
批处理参数部分不是很了解  想请教下参数不存在的会怎么处理

即runimg内容
!BAT
map --mem %1 (%2)
map --hook
rootnoverify (%2)
chainloader ()+1
结束

菜单
title teat1
runimg /DTS.IMA fd0
...


嗯,就是这样的,没有参数就是替换为空白
回复

使用道具 举报

1006#
 楼主| 发表于 2010-12-7 12:20:49 | 只看该作者
原帖由 zxw 于 2010-12-7 09:41 发表
呵,模块化菜单更容易实现了!!
建议增加支持:%~dp1、%~n1等形式。


呵呵,会增加处理的难度,有必要再加.目前可以先用WENV来处理.
回复

使用道具 举报

1007#
发表于 2010-12-7 15:00:24 | 只看该作者
原帖由 chenall 于 2010-12-6 14:43 发表
已经给GRUB4DOS内置批处理脚本添加了参数支持(%0,%1,%9)
%0批处理脚本文件名.%1-%9第1到9个参数.

grub4dos的里程碑。
回复

使用道具 举报

1008#
发表于 2010-12-12 12:09:03 | 只看该作者
批处理里面使用wenv for是否有问题。

我测试无法在批处理中使用wenv for命令

今天有空想把SRSF6中没有菜单的LST文件改成批处理文件,无法实现。下面生成(fd1)/PCI

!BAT
echo
echo
echo SRSID.TXT Driver-Pack Process...
checkrange 1 read 0x60080 && pause --wait=10 Press any key...
echo
cat --length=0 (fd1)/PCI && FAT del (fd1)/PCI
cat --length=0 (fd1)/TXT && WENV calc *0x8290=*0x8290+1024 && FAT mkfile size=* (fd1)/PCI
echo PCI$ > (fd1)/PCI
WENV for /f "eol=; tokens=1-2 delims==;" %i in ( (fd1)/TXT ) do (set a=%i ; check "$${a:0:4}"=="PCI\" ]]& set b=%j ]]] echo -n $ ]]] echo $${a}=$${b}) >> (fd1)/PCI
checkrange 1 read 0x60080 && echo display chkpci && cat --length=0x100 (fd1)/PCI && echo ...... && echo && pause --wait=10 Make txtsetup.oem , Press any key... ! FAT del (fd1)/TXT
WENV (reset a ; reset b ; reset p)
(fd2)/EXT/MAKEOEM.BAT

[ 本帖最后由 zhaohj 于 2010-12-12 12:13 编辑 ]
回复

使用道具 举报

1009#
 楼主| 发表于 2010-12-12 12:32:10 | 只看该作者
原帖由 zhaohj 于 2010-12-12 12:09 发表
批处理里面使用wenv for是否有问题。

我测试无法在批处理中使用wenv for命令

今天有空想把SRSF6中没有菜单的LST文件改成批处理文件,无法实现。下面生成(fd1)/PCI

!BAT
echo
echo
echo SRSID.TXT  ...


谢谢你的反馈报告,有没有更详细的资料?

或者弄一个最简易的可以重现问题的文档上来..


不知是错觉还是....
发现zhaohj的BUG报告越来越简单了,呵呵....

以前我时间比较多,可以通过自己去慢慢测试然后再发现问题.
现在时间比较少了....

呵呵,越详细的报告越容易直接看出问题所在.而不用再花时间去做详细测试.
回复

使用道具 举报

1010#
发表于 2010-12-12 12:55:49 | 只看该作者
呵呵,不是我偷懒,我也不知道反馈这个问题,反正是WENV FOR命令出错了。
在debug 1下打开(fd1)/PCI,看到
很显然,批处理的参数与FOR的参数冲突了。

[ 本帖最后由 zhaohj 于 2010-12-12 13:00 编辑 ]

Snap1.jpg (25.5 KB, 下载次数: 81)

Snap1.jpg
回复

使用道具 举报

1011#
 楼主| 发表于 2010-12-12 15:24:41 | 只看该作者
嗯,看到这个截图我就明白了.
谢谢zhaohj.

又找到了一个GRUB4DOS的BUG.
回复

使用道具 举报

1012#
发表于 2010-12-12 15:41:24 | 只看该作者
这么快就找到问题啦,看来晚上可以测试了。
还有上次提到的写文件结束最后一句不能使用回车换行的问题,是否需要进一步的分析。
回复

使用道具 举报

1013#
 楼主| 发表于 2010-12-12 16:21:31 | 只看该作者
好像很早的版本就已经解决了?

你可以再确认一下,我自己测试是正常的.
回复

使用道具 举报

1014#
发表于 2010-12-12 22:30:45 | 只看该作者
delmod无法卸载chkpci

Snap1.jpg (65.1 KB, 下载次数: 63)

Snap1.jpg
回复

使用道具 举报

1015#
 楼主| 发表于 2010-12-12 22:32:03 | 只看该作者
再试试我刚刚上传最新版...

之前的版本是有区分大小写的.最新上传的版本不再区分大小写.
回复

使用道具 举报

1016#
发表于 2010-12-12 22:39:05 | 只看该作者
刚发现出了12-12-fix,问题已解决!
C大的编译器时间是否有问题,感觉少了8个小时。

--------------
delmod再加一个参数,卸载所有已加载到内存的外部命令。

[ 本帖最后由 zhaohj 于 2010-12-12 22:43 编辑 ]
回复

使用道具 举报

1017#
 楼主| 发表于 2010-12-12 22:45:42 | 只看该作者
使用的是UTC标准时间.我的LINUX忘了改时区了.

卸载所有,嗯,下次再加.delmod *
回复

使用道具 举报

1018#
发表于 2010-12-13 16:36:39 | 只看该作者
修复check ""==" " 返回真的BUG

注意:
check ""=="" 仍返回真,这样参数为空或变量不存在时仍可比较


@chenall
这个不是check的问题,是基础函数 grub_memcmp 的BUG,没有检查 s2 长度为0 的情况。
在你的版本中因为不允许比较空或不存在的变量(直接返回参数错误了),所以这个BUG被隐藏了

wenv-tuxw-2010-12-13.zip

85.01 KB, 下载次数: 65, 下载积分: 无忧币 -2

回复

使用道具 举报

1019#
 楼主| 发表于 2010-12-13 16:40:55 | 只看该作者
@tuxw
嗯.这也是WENV原版的BUG,没有考虑到这个情况.
回复

使用道具 举报

1020#
发表于 2010-12-14 11:24:24 | 只看该作者
@tuxw
setrd能否改为默认加回车换行,或加一个\n,保持与ECHO默认一致。
尽量少用开关
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-4-19 22:40

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表