无忧启动论坛

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

GRUB4DOS更新建议、bug反馈专帖

    [复制链接]
31#
发表于 2010-12-9 17:14:03 | 显示全部楼层
原帖由 sratlf 于 2010-12-9 11:29 发表
@chenall

load和unload两个命令目前没发现什么问题  执行没发现什么错误  当然都是很简单的菜单

两个命令名字改成 internal 和 external 怎么样

有时间把批处理的goto解决了吧  现在是一段一个批处理  ...


大于8M时才会显示进度,否则是不显示的.

先上传一个附件.

1.修正了部份可能会出错的地址.
2.load和unload改成了insmod和delmod
3.批处理脚本开始支持标签(有BAT用法一样)和goto命令.
4.支持call 标签可带参数.


注:新的版本执行批处理时至少占用12KB内存(作为标签缓存).以前的版本是+4KB.所以需要注意内存是否足够.
另外尽量不要在批处理中执行那些不可返回命令(会造成内存无法释放).
另外为了方便使用 goto label  不区分大小写的.

一个例子:
依次显示
start
echo enddddddd
test

  1. !BAT
  2. :start
  3. echo start
  4. goto End
  5. :test
  6. echo test
  7. goto :EOF
  8. :end
  9. echo enddddddd
  10. goto test
复制代码
edit:
已经上传新的测试版...
支持call/goto 标签.和批处理的语法一样.请大家测试,应该是比较完美了.
call 标签支持参数.

call只能调用批处理内部的标签.

[ 本帖最后由 chenall 于 2010-12-9 20:10 编辑 ]
回复

使用道具 举报

32#
发表于 2010-12-9 20:53:27 | 显示全部楼层
再贴一个测试用的脚本.
比如保存为test.bat

test.bat a b c d e f g h i
以下脚本将会显示
1=1
2=2
..
9=9
对应call :test 1 2 3 4 5 6 7 8 9
然后再显示输入的参数.goto test
1=a
...
9=i



  1. !BAT
  2. goto :end
  3. :test
  4. echo 1=%1
  5. echo 2=%2
  6. echo 3=%3
  7. echo 4=%4
  8. echo 5=%5
  9. echo 6=%6
  10. echo 7=%7
  11. echo 8=%8
  12. echo 9=%9
  13. echo %%1 %~a %~ %ab
  14. goto :eof
  15. :end
  16. call :test 1 2 3 4 5 6 7 8 9
  17. goto test
复制代码
回复

使用道具 举报

33#
发表于 2010-12-10 10:53:41 | 显示全部楼层
忘了说一下,目前只支持单语句的goto/call

如果没有什么问题的话,晚上应该能有一个全面支持的版本.

即像下面的
command1 || goto xxxx
回复

使用道具 举报

34#
发表于 2010-12-10 12:09:48 | 显示全部楼层
原帖由 thttht 于 2010-12-10 10:58 发表
chenall老师你好!请教个问题:
1、grub4dos-0.4.5b-2010-12-07-test.zip新版的这个在加载硬盘镜像IMG文件时不显示加载进度了,不过我在加载大些的软盘镜像和光盘镜像时显示加载进度啊?不知道是什么问题?(用 ...



1.这个我没有改动,可能是由于LZMA补丁的原因吧..
大于8M的镜像才会显示进度,GZ文件不显示进度(不知之前的版本是怎样的,我稍后试一下)
LZMA会有一个进度.

2.nd ->Network Drive (没有使用,是之前的遗留)
你试试
find --devices=h
看看能不能列出你的隐藏分区.如果正常的话应该是可以找到的.因为这个参数和是否隐藏没有关系.

是不是你有加了其它的参数?
回复

使用道具 举报

35#
发表于 2010-12-10 14:14:04 | 显示全部楼层
goto/call 只能在批处理中使用,如果在菜单中使用会出现错误.
goto/call是一个伪命令,所以现在如果要使用外部命令goto就会麻烦些要用路径的方式.
以后再考虑让goto命令也能在菜单中使用,跳到某个菜单.
有了批处理功能,在菜单中跳转相对就不是那么重要了.

2010-12-10
1.改变了以下内存地址的定义(和之前的版本相反)
        0000:82A4        4 (DWORD)        no_decompression (no auto gunzip)
        改成了
        0000:82A4        4 (DWORD)        do_decompression (do auto gunzip)
2.0x8284的值的bit2如果为1则显示解压进度,否则不显示,默认不显示.
可以write 0x82a4 2来让它显示进度,
注:显示进度对文件读取的速度有影响.

3.完善了goto/call的功能
回复

使用道具 举报

36#
发表于 2010-12-11 17:08:13 | 显示全部楼层
原帖由 thttht 于 2010-12-11 15:18 发表



谢谢chenall 老师的解答!

1、关于GZ文件不显示进度的问题,之前的版本是可以正常显示进度的,支持LZMA后的版本不能显示GZ文件进度。

看你这里是不是用write 0x82a4 2可以让GZ文件显示进度了啊?
...


1.是的.新的版本有支持进度显示,默认不显示.要显示的自己在菜单头部加一条命令
write 0x82a4 2
注: 需要先判断GRUB4DOS版本是20101210之后的版本才可以用这个.
checkrange 20101210:-1 read 0x8278 && write 0x82a4 2

2.
少了--set-root,所以当然失败了.--set-root是查找并设置为root,否则只是查找.

[ 本帖最后由 chenall 于 2010-12-11 17:15 编辑 ]
回复

使用道具 举报

37#
发表于 2010-12-11 17:12:16 | 显示全部楼层
原帖由 tuxw 于 2010-12-11 16:20 发表
是否可以直接加载不同版本的同名模?

比如工具1用到了WENV的某个旧版,工具2用到WENV的另一个版本,但对合盘者来说,并不了解工具x所用到的版本,是否可以直接configfile两个工具中的菜单文件?


必须不同名字.同名的不再加载.

2010-12-11
1.完善批处理脚本参数的支持(同CMD下的批处理用法一样).
2.可以在菜单中使用goto命令(即跳到某个菜单项目).
3.delmod 添加参数 "-l" 用于显示已经加载的模块名.如果后面还有参数则是判断该模块是否加载.
回复

使用道具 举报

38#
发表于 2010-12-11 23:23:09 | 显示全部楼层
原帖由 zhaohj 于 2010-12-11 23:13 发表
2.可以在菜单中使用goto命令(即跳到某个菜单项目).
---------
是指批处理也可以有菜单了吗?


不是.这个相当于之前的外部命令goto的功能,只是内置了.
回复

使用道具 举报

39#
发表于 2010-12-11 23:29:30 | 显示全部楼层
原帖由 sratlf 于 2010-12-11 22:54 发表
C大  1211版是不是什么地方改动了  

我在这个帖子里贴的那个run  1211版执行WENV错误  是WENV check %1==" "一句不能执行  1210版就没有问题


已经修正重新上传.麻烦再试一下.
grub4dos-0.4.5a-2010-12-11-fix.zip
回复

使用道具 举报

40#
发表于 2010-12-12 11:01:40 | 显示全部楼层
原帖由 sratlf 于 2010-12-12 10:57 发表


这次正常了  谢谢  还要问下C大  批处理中类似于 WENV check %1==" " call goto input不能执行  不会跳到input段  应该怎么改


WENV check %1==" " && goto input
回复

使用道具 举报

41#
发表于 2010-12-12 11:03:31 | 显示全部楼层
原帖由 zhaohj 于 2010-12-11 23:38 发表
什么时候支持在菜单文件中(非批处理)支持goto :label
有时候在菜单文件中想跳转,不得不用title,但运行时屏幕上出现一条框实在不爽。

如果把菜单文件(没有菜单的LST文件)变成批处理,因为批处理运行相 ...


汗,为什么还要纠结于老日历呢..用批处理碰到错误会退出,菜单也是一样的啊.

放弃以前的那些老思想,试试新的思路,也许你会发现一切将会变得简单起来.
回复

使用道具 举报

42#
发表于 2010-12-12 15:25:40 | 显示全部楼层
谢谢你报告.
如果没有问题的话,晚上8点之前会上传一个修正版.
回复

使用道具 举报

43#
发表于 2010-12-12 22:30:59 | 显示全部楼层
又更新了一下,用模块化的方式重写了insmod/delmod的代码.

之前的会加载失败.
回复

使用道具 举报

44#
发表于 2010-12-13 14:39:34 | 显示全部楼层
原帖由 tuxw 于 2010-12-13 14:22 发表
批处理里面,会将WENV字符串截取 ${VAR%%string} 变为 ${VAR%string},两个%变为一个了


这个和批处理的%符号有冲突..要在批处理中使用可以用
${VAR%%%string}  或
保险一点用 ${VAR%%%%string}

两个%%会处理成一个%,只有一个%是不处理的,但注意如果一个%后面跟的是数字那这个符号和数字都会被替换掉.
回复

使用道具 举报

45#
发表于 2010-12-13 14:57:15 | 显示全部楼层
原帖由 jianliulin 于 2010-12-13 14:32 发表
新版的grldr 的find命令出现这样的情况是不是正常的
107879


这个应该是从ud启动的吧..好像从UD启动第一条命令会出现这个,以后的就不会了,我没有找到在哪里显示的..
回复

使用道具 举报

46#
发表于 2010-12-13 15:02:27 | 显示全部楼层
原帖由 tuxw 于 2010-12-13 14:46 发表
应该判断一下,两个%%后面跟的是0-9才作参数替换处理。则一般的替换没有问题,只有替换数字时,才需要多写几个%


遵循原来的语法,保持一致,这样才不会看着很迷糊.

我想DOS的批处理应该也是这样处理的.

为了保险起见还是要批处理编写人员自己处理这些问题.
不能指望程序全自动处理.

其实这也是一个良好的编程习惯.

在使用增强版WENV时,我发现如下语句
wenv check  %1==" "

当参数为空时.
结果竟然是成功的,这就让我很迷惑.在标准的语法中这是非法的.

我的原则是尽量使用标准的语法.

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

使用道具 举报

47#
发表于 2010-12-13 15:37:11 | 显示全部楼层
原帖由 tuxw 于 2010-12-13 15:22 发表
DOS确实是这样处理的,但明显是一个BUG。比如语句 ehco %% 显然想输出两个%,但它会处理成一个。
从CMD的帮助中也可看出是设计目标不是这样的,因为从来没有哪个帮助里说了批处理需要双写%,只有FOR命令的帮助 ...


根据我对批处理的理解,我不认为这是BUG..因为本来就是应该这样处理的.
回复

使用道具 举报

48#
发表于 2010-12-13 17:07:47 | 显示全部楼层
原帖由 tuxw 于 2010-12-13 16:42 发表


这个就叫习非成是,习惯了这个用法,它就不是BUG了。
跟老百姓一年一年被加税,几代人都这样交习惯了,觉得本来就应该是这样的一个道理。


呵呵,每个人看待事情的方法不一样.
回复

使用道具 举报

49#
发表于 2010-12-13 17:12:08 | 显示全部楼层
先上传一下测试.

修改优化了一下.
给批处理添加了一个exit命令.

可以在批处理中使用exit命令退出.

exit命令也可以加参数,
比如
exit 1
会返回一个errnum值为1001.
exit 2
返回
errnum 为1002.

这样可以方便处理.
需要正常退出就直接exit,否则就加一个数字.

现在goto/call/exit 都是属于内部命令,而不像以前那样是伪命令.

goto只能在批处理和菜单中使用.
call/exit 只能在批处理中使用.

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

使用道具 举报

50#
发表于 2010-12-14 00:31:30 | 显示全部楼层
原帖由 pseudo 于 2010-12-14 00:23 发表
0PEv1.2.4(2010-12-11)用12-11fix正常,换12-13的grldr后,出主菜单前VMware崩溃。
语法变了?


没变啊.你再试试12-12的看看有没有问题.难道一不小心又搞出BUG来了..
回复

使用道具 举报

51#
发表于 2010-12-14 01:12:22 | 显示全部楼层
原帖由 pseudo 于 2010-12-14 00:43 发表
12fix正常
这是测试用iso

问题可能在pause。
崩溃后重启,我只用鼠标操作,但加速器出了仿佛按键响应pause后才出的选择plpbt版本的界面。


要等明天中午过来才能测试了,你可以先试试是哪个命令的问题.比如注释掉PAUSE命令看看还会不会.

晚上在研究FBINST

有望实现非FBINST启动时访问(ud)的能力.已经测试成功.

另外一个可能实现直接map一个fba文件到(ud)的能力,还只是设想.
回复

使用道具 举报

52#
发表于 2010-12-14 16:26:51 | 显示全部楼层
@pseudo
可能是修改了ASM函数变量的原因.
已经上传今天的版本.

今天的版本全面支持fbinst创建的分区.即使不从fbinst启动同样可以访问.

甚至可以直接map /path/filename.fba (hd2)

然后可以直接访问(hd2)里面的内容

例子:
map /fb.fba (hd2)
map --hook
map --mem (hd2)/boot.iso (0xff)

注:这个(hd2)只是我例子随意设定的,可以用(fdn)或(hdn),注不要超过(hd32)
回复

使用道具 举报

53#
发表于 2010-12-14 16:30:56 | 显示全部楼层
@thttht
显示进度会减慢解压的速度,在我的测试中,有显示进度会慢上好几秒.
一般情况下默认不显示.
我觉得目前的显示效果也挺好的啊.

目前压缩文件使用的是另外一种进度显示方式,剩余KB数.

这些都是小问题以后再改了.大家可以讨论一下看看有没有必要还原到最初的方式.
回复

使用道具 举报

54#
发表于 2010-12-14 16:41:00 | 显示全部楼层
原帖由 zxw 于 2010-12-14 16:34 发表
OK!问题已解决。


具有划时代的意义,赞一个!


有条件的可以进行详细一点的测试,我只能进行有限测试.希望没有什么问题才好.

另外由于find之前就已经可以find (hdx),所以支持这个功能之后同样可以用find找到里面的文件.
回复

使用道具 举报

55#
发表于 2010-12-14 19:41:48 | 显示全部楼层
4次,应该是你使用的命令..
PXE上的文件每读写一次都可以看到有两个传输的记录.第一次是测试是否GZ压缩文件.
回复

使用道具 举报

56#
发表于 2010-12-14 22:01:48 | 显示全部楼层
13号的版本因为外部命令的函数和变量有改变所以,就不用测13号的了.

主要测试一下14号的版本就好了.

另外14号的版本我已经发现一个问题,
可能会导致command --set-path的设置失效,已经修正上传.
回复

使用道具 举报

57#
发表于 2010-12-14 23:47:41 | 显示全部楼层
CSPE和0PE从12-10之后的版本都需要修改才能正常使用.
回复

使用道具 举报

58#
发表于 2010-12-15 00:30:31 | 显示全部楼层
原帖由 zhaohj 于 2010-12-15 00:04 发表
给个提示,是哪个语句引起的?
变化的是goto内置了,其他有关的好像没有。




2010-12-10
1.改变了以下内存地址的定义(和之前的版本相反)
  0000:82A4 4 (DWORD) no_decompression (no auto gunzip)
  改成了
  0000:82A4 4 (DWORD) do_decompression (do auto gunzip)
2.0x8284的值的bit2如果为1则显示解压进度,否则不显示,默认不显示.
3.完善了goto/call的功能


把write 0x82a4 1改成write 0x82a4 0
write 0x82a4 0改成write 0x82a4 1
回复

使用道具 举报

59#
发表于 2010-12-15 00:32:19 | 显示全部楼层
有没有人测试一下关于fb支持的情况.

是成功还是失败?
回复

使用道具 举报

60#
发表于 2010-12-15 00:53:51 | 显示全部楼层
嗯.这是一个比较严重的问题.和fb有关.

映射为fd1就不会了,等一下我再上传一个版本.

[ 本帖最后由 chenall 于 2010-12-15 00:56 编辑 ]
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-6-5 17:06

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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