无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: zhaohj
打印 上一主题 下一主题

GRUB4DOS更新建议、bug反馈专帖

    [复制链接]
1111#
 楼主| 发表于 2011-7-11 15:57:11 | 只看该作者
想知道一下,执行一次需要的33K内存,是动态分配的吧?!
测试了一下,变量恢复很正常。

---------------------
又一想,需要变量传递的地方需要小心。
回复

使用道具 举报

1112#
发表于 2011-7-11 16:57:05 | 只看该作者

回复 #1115 zhaohj 的帖子

是动态分配的。因为变量是直接整块复制的(这样比较简单),所以单单变量就需要65*512的内存。

懂得使用SETLOCAL的人才会需要用到,否则,嘿嘿....

一般情况下经常用WINDOWS批处理的会比较清楚情况。

[ 本帖最后由 chenall 于 2011-7-11 21:59 编辑 ]
回复

使用道具 举报

1113#
 楼主| 发表于 2011-7-11 17:31:37 | 只看该作者
P处理一复杂后比较难用,特别是goto很多的情况,比如P处理中间判断后goto到开始位置的情况。
主要是endlocal要对应好setlocal
如果能加标记就好了
setlocal  1
...
endlocal 1  <-------如果没有setlocal  1就不执行这个endlocal

而且第二次执行setlocal  1会覆盖先前的设置的setlocal  1

[ 本帖最后由 zhaohj 于 2011-7-11 17:35 编辑 ]
回复

使用道具 举报

1114#
发表于 2011-7-11 17:34:23 | 只看该作者

回复 #1117 zhaohj 的帖子

这些还是由用户自己处理吧,免得增添麻烦。
回复

使用道具 举报

1115#
发表于 2011-7-11 20:31:04 | 只看该作者

回复 #1116 chenall 的帖子

测试版的configfile 在批处理中有问题,碰到configfile命令即退出。而10日版的正常。


===================================
新增命令setlocal,暂时测试正常。
真是太棒了!
1:启动设备(bd)  0x8280,0x8208
2:当前设备()     0x82a0,0x829c
3:当前目录
4:@path
5:变量 (md)0x228+65
6:debug
7:command
均测试正常。
setlocal与endloca配套也正常。
不佩服不行!

[ 本帖最后由 zxw 于 2011-7-11 21:56 编辑 ]
回复

使用道具 举报

1116#
发表于 2011-7-11 21:59:17 | 只看该作者
@zxw
找到一个BUG,已经修复,再试下这个。

[ 本帖最后由 chenall 于 2011-7-12 10:49 编辑 ]
回复

使用道具 举报

1117#
发表于 2011-7-11 22:04:13 | 只看该作者

回复 #1120 chenall 的帖子

正常了。动作很快。.

另建议保存:
0x82b9
pager status
terminal
等值。

=======================
在批处理中还有问题。貌似内存分配方面。具体细节还未追踪到。

[ 本帖最后由 zxw 于 2011-7-11 23:58 编辑 ]
回复

使用道具 举报

1118#
 楼主| 发表于 2011-7-12 00:12:34 | 只看该作者
改造SRSF6N(无菜单版)不成功。

运行过程,发现与wenv冲突,但不提示出错。
只要我一运行wenv for /L 就会乱。
比如(fd1)/OEM中是原始文件,执行call :cclear(目的是清理注释等)后,发现(fd1)/OEM是空。
另我临时使用了32M处的内存,不知有关?

C大测试看看

7.12早上重新上传了下。

[ 本帖最后由 zhaohj 于 2011-7-12 11:23 编辑 ]

SRSF6N.7z

51.26 KB, 下载次数: 27, 下载积分: 无忧币 -2

回复

使用道具 举报

1119#
发表于 2011-7-12 08:14:21 | 只看该作者

回复 #1122 zhaohj 的帖子

看到你用WENV,我猜你应该是把WENV的变量和系统的变量混用了。

注意看我前面的说明:

使用了SETLOCAL之后,WENV SET的变量就只有WENV自己可以访问。

像以下语句就是错误的,除非之前已经存在变量AA否则,AA的值为空。

SETLOCAL
WENV SET AA=BB
echo %AA%
回复

使用道具 举报

1120#
 楼主| 发表于 2011-7-12 08:48:48 | 只看该作者
确实存在这种情况,这个情况很难处理。

目前只有实现WENV设置的变量同步这种方式才能实现。
不然太混了。

-------------------
想到一个办法:wenv (set AA=BB ; call set AA=${AA})

调用内部命令set生成。

[ 本帖最后由 zhaohj 于 2011-7-12 09:09 编辑 ]
回复

使用道具 举报

1121#
发表于 2011-7-12 09:30:59 | 只看该作者
setlocal后wenv set的变量会向外传递?
回复

使用道具 举报

1122#
发表于 2011-7-12 09:46:48 | 只看该作者

回复 #1124 zhaohj 的帖子

下午我会弄成兼容WENV的版本。这样就不会混乱了。

@zxw
目前的情况是正常的,因为WENV的变量是不受控制的。

稍后有空我会修改上传一个新的版本,到时就不会这样子了。
回复

使用道具 举报

1123#
发表于 2011-7-12 10:52:03 | 只看该作者
麻烦再试试这个,这个尽量兼容之前的版本(包括WENV的SET命令)

另外修正了使用CALL :XXX时之前的SETLOCAL会失效的问题。

[ 本帖最后由 chenall 于 2011-7-12 15:53 编辑 ]
回复

使用道具 举报

1124#
 楼主| 发表于 2011-7-12 11:07:38 | 只看该作者
有成功的实例了,但内存变量被破坏

Snap1.jpg (31.85 KB, 下载次数: 159)

Snap1.jpg
回复

使用道具 举报

1125#
发表于 2011-7-12 11:10:51 | 只看该作者

回复 #1128 zhaohj 的帖子

我测试也是一样。貌似(md)4+8处也被破坏了。

[ 本帖最后由 zxw 于 2011-7-12 11:21 编辑 ]
回复

使用道具 举报

1126#
发表于 2011-7-12 11:19:52 | 只看该作者
我好像正常呀,你们是如何使用的。


哦,明白了,因为使用setlocal之前没有初使化变量空间。所以就会这样子了。

只要先初使化变量空间再使用就正常了。

[ 本帖最后由 chenall 于 2011-7-12 11:23 编辑 ]
回复

使用道具 举报

1127#
发表于 2011-7-12 11:26:39 | 只看该作者

回复 #1130 chenall 的帖子

确实需要初始化变量空间。问题解决。

[ 本帖最后由 zxw 于 2011-7-12 11:28 编辑 ]
回复

使用道具 举报

1128#
发表于 2011-7-12 15:52:41 | 只看该作者
一些小改动。
现在的setlocal 和 endlocal 应该都会比较正常了。

另外对clear也进行了修改,现在即使不使用pager off,在批处理中显示字符然后clear应该也不会出现按'Q'键退出的提示了。

但是在显示满一屏的时候还是会有提示。

grldr.rar

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

回复

使用道具 举报

1129#
 楼主| 发表于 2011-7-12 16:16:05 | 只看该作者
初步测试,全部正常!万分感谢C大!
回复

使用道具 举报

1130#
 楼主| 发表于 2011-7-12 17:18:37 | 只看该作者
问C大,setlocal等在菜单中能否使用?
回复

使用道具 举报

1131#
发表于 2011-7-12 17:36:41 | 只看该作者
可以,不过在菜单中使用不会自动恢复,需要自己endlocal,
批处理中使用你可以在必要的时候才endlocal,其它的在退出后会自动恢复。

考虑到在批处理中使用setlocal
需要执行configfile,并且需要保留变量的情况,增加一个非标准用法

setlocal @

在批处理退出时可以保留setlocal @之后的设置。

必须使用endlocal @来解除。

可以这样理解,
setlocal @
就是相当于重新生成了一个系统级变量, 不能使用endlocal恢复到上一个环境。
可以使用endlocal @来恢复。

注:setlocal @之后还可以setlocal

在批处理中setlocal之后的设置在退出之后会恢复。
例子
!BAT
set aa=a0
setlocal @
set aa=a1
setlocal
set aa=a2

批处理执行退出后aa的变量值是a1

[ 本帖最后由 chenall 于 2011-7-13 10:49 编辑 ]
回复

使用道具 举报

1132#
 楼主| 发表于 2011-7-13 00:17:37 | 只看该作者
终于搞定了configfile恢复环境的问题。
这个问题是以前一直困扰我的问题,这次终于搞定了。
回复

使用道具 举报

1133#
发表于 2011-7-13 10:49:14 | 只看该作者
2011-07-13
1.在执行cmain之前初始化变量内存空间。
2011-07-12
1.执行clear命令时同时设置count_lines为0。
2.内置变量增加@retval,其实就是之前的0x4cb00
3.增加setlocal @和endlocal @用法。
   setlocal @可以在批处理中使用,把当前的环境保存起来
   除非使用endlocal @否则setlocal @之后的设置会一直保留(批处理退出也不影响).
注:1.在批处理中出现setlocal @则在批处理中setlocal @之前的setlocal命令会全部失效。
     所以setlocal @有必要的话一般要放在批处理最前面。
     2.setlocal @后面如果还有出现setlocal,则setlocal之后的设置不会保留.

2011-07-11
1.添加SETLOCAL和ENDLOCAL命令,和WINDOWS下的批处理用法一样。

[ 本帖最后由 chenall 于 2011-7-13 11:56 编辑 ]

grldr.rar

129.77 KB, 下载次数: 90, 下载积分: 无忧币 -2

回复

使用道具 举报

1134#
发表于 2011-7-13 10:55:51 | 只看该作者
1.在执行cmain之前初始化变量内存空间。
=================
这个好,有时为这个问题纠结。
回复

使用道具 举报

1135#
 楼主| 发表于 2011-7-13 11:06:37 | 只看该作者
“注:在批处理中出现setlocal @则在批处理中setlocal @之前的setlocal命令会全部失效。
      所以setlocal @有必要的使用的话一般要放在批处理最前面。”
------------------
测试结果(SRSF6菜单版):
set test=test
setlocal
set srs=/SRS/
setlocal @
configfile /menusrs.lst
....
--------------
menusrs.lst 内容:
endlocal @
setlocal @
title 1
/menu.bat
...
-------------
menu.bat 内容:
endlocal @
endlocal
set

-------------------
返回后查看变量:
test=test 是存在的。
这个结果虽然与上面不相符,但需要的就是这个结果。
回复

使用道具 举报

1136#
发表于 2011-7-13 11:14:58 | 只看该作者

回复 #1139 zhaohj 的帖子

是正常的啊。
恢复setlocal @之前的,setlocal @之前的setlocal失效。

[ 本帖最后由 zxw 于 2011-7-13 11:16 编辑 ]
回复

使用道具 举报

1137#
发表于 2011-7-13 14:22:40 | 只看该作者
没有执行setlocal @
endlocal @ 也起作用?如是这样,也好。
回复

使用道具 举报

1138#
 楼主| 发表于 2011-7-16 14:11:55 | 只看该作者
发现shift存在bug
shift n
目前只有默认是 shift 1 时正常;大于或等于2都是错误的。
------------

难道是我理解有误?!

[ 本帖最后由 zhaohj 于 2011-7-16 14:21 编辑 ]

Snap1.jpg (18.36 KB, 下载次数: 138)

Snap1.jpg

Snap2.jpg (8.95 KB, 下载次数: 144)

Snap2.jpg
回复

使用道具 举报

1139#
发表于 2011-7-16 15:05:29 | 只看该作者
理解错误,你google一下shift的用法
回复

使用道具 举报

1140#
 楼主| 发表于 2011-7-16 17:02:05 | 只看该作者
想用cat --locate=string来定位,并找到匹配的最后的位置。
取最后一个数的问题,现在效率太低
:get_last
if "%1"=="" exit
shift
if "%1"=="" set last=%0
goto :get_last
exit
----------------------
比如说查到有1000个匹配,0x4cb00中是1000(最新版grub好像在此处@retval的值是1,不知返回值@retval是成功标志吗)
希望在此处0x4cb00或@retva改成l返回locate位置。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-28 06:34

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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