无忧启动论坛

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

GRUB4DOS更新建议、bug反馈专帖

    [复制链接]
1201#
发表于 2011-9-5 07:58:36 | 只看该作者

回复 #1203 chenall 的帖子

我想到了一个问题,在grub4dos-0.4.5b-2011-09-03中,编写批处理时,以Fn开头的单词都不能用作标签了。我感觉这样不太合适,在C语言中把以下划线和大写字母开头的单词作为为未来预留的保留字,我们改为使用call _Fn number arg...的形式的形式如何?同时公开声明以下划线和大写字母开头的单词是为未来预留的保留字,建议用户不要使用。
回复

使用道具 举报

1202#
发表于 2011-9-5 08:26:47 | 只看该作者

回复 #1205 2011_dihuo0 的帖子

不是问题啊。call 标签时,以:为开始啊。
回复

使用道具 举报

1203#
发表于 2011-9-5 12:16:37 | 只看该作者

回复 #1206 zxw 的帖子

:不是必须的,可以省略。一般来说,goto后面加:,而call后面不加:,这些都不是强制要求。

[ 本帖最后由 2011_dihuo0 于 2011-9-5 12:19 编辑 ]
回复

使用道具 举报

1204#
发表于 2011-9-5 12:57:15 | 只看该作者

回复 #1207 2011_dihuo0 的帖子

call后标号,:是必须的。这是grub4dos的特殊要求,远在Fn前就是这样了。

见#1499楼:
http://bbs.wuyou.net/forum.php?m ... page=150#pid2293923

但更早前,:不是必须的。
回复

使用道具 举报

1205#
发表于 2011-9-5 14:36:16 | 只看该作者

回复 #1208 pseudo 的帖子

在2011-8-25左右的时候?唉!那段时间我刚好没怎么上网。
多谢指点了。
回复

使用道具 举报

1206#
发表于 2011-9-5 16:05:30 | 只看该作者
批处理 call :标签
有带标号是正规的语法(批处理里面也是一样的)

因为之前的call只有一个单一的功能,所以并没有强制要":"

8.8修改的,强制性要":"

经常写WINDOWS批处理的人就会习惯有带":",像我自己从一开始就有带标号,这样比较清析,知道这是一个标签调用.
回复

使用道具 举报

1207#
发表于 2011-9-5 19:56:31 | 只看该作者
在以前,看批处理文件时,发现goto call后面有的有冒号,有的没有,我个人倾向于不加冒号,因为C语言等编程语言中类似的功能都是不加冒号的。
在我看来标签类似于指针,call类似于函数调用,加上冒号总觉得不太自然。我不常用批处理,只是看过一些资料,在我的印象中,加上冒号只是一种习惯用法,也不是强制要求,这么做提高了可读性。
回复

使用道具 举报

1208#
发表于 2011-9-5 20:28:38 | 只看该作者
批处理的goto和C语言一样可以不需要冒号.因为它总是跳到一个标签.

但call不一样.call 有可能是一个标签函数,也有可能是另一个程序.

你可使用WINDOWS自带的批处理试一下就知道了.

目前GRUB4DOS的批处理是仿WINDOWS的批处理进行设计的.
回复

使用道具 举报

1209#
发表于 2011-9-5 20:53:33 | 只看该作者
#define x1 current_term->chars_per_line
@chenall:
请教这里定义的是一行(显示)中的什么位置?貌似是最后?

[ 本帖最后由 zxw 于 2011-9-5 21:49 编辑 ]
回复

使用道具 举报

1210#
发表于 2011-9-5 21:54:55 | 只看该作者
chars_per_line
顾名思义,就是一行里面有几个字符.

这个是指当前显示模式一行最多可以显示几个字符数.
回复

使用道具 举报

1211#
发表于 2011-9-5 22:20:10 | 只看该作者

回复 #1214 chenall 的帖子

还请教一个问题:
函数getxy
call Fn.4 如何分别取x、y的值?
回复

使用道具 举报

1212#
发表于 2011-9-5 22:28:32 | 只看该作者

回复 #1215 zxw 的帖子

要理解这些函数可以自己查看一下相关的源代码比如

getxy在源代码中就可以看到使用的实例.

getxy 返回如下值
0xXXYY
比如以下命令
clear && echo -n abcd && call Fn.4
肯定会返回0x0400
因为clear清空的屏幕,而且只显示了4个字符,所以光标位置在0x0400处.
如果是以下命令
clear && echo abcd && call Fn.4
则会返回
0x0001
具体原因自己去研究.
回复

使用道具 举报

1213#
发表于 2011-9-5 22:36:33 | 只看该作者

回复 #1216 chenall 的帖子

谢谢指点,明白了。
回复

使用道具 举报

1214#
发表于 2011-9-6 12:09:05 | 只看该作者
发现ud区文件名含空格时,ls 补全没有处理空格,即没有给空格加"\"号.
最早由不点打补丁的版本也是一样。



[ 本帖最后由 zxw 于 2011-9-6 12:13 编辑 ]
回复

使用道具 举报

1215#
发表于 2011-9-6 16:59:14 | 只看该作者

回复 #1218 zxw 的帖子

回复

使用道具 举报

1216#
发表于 2011-9-6 17:55:20 | 只看该作者

回复 #1219 chenall 的帖子

OK,测试正常。..
回复

使用道具 举报

1217#
发表于 2011-9-7 15:09:15 | 只看该作者
记得c大曾经纠正过,find 命令对光驱貌似又失效了?
回复

使用道具 举报

1218#
 楼主| 发表于 2011-9-7 16:59:44 | 只看该作者
一直来都是这样吧?!
还是用这样判断放心:if exist (0xff)+1
回复

使用道具 举报

1219#
发表于 2011-9-7 19:48:39 | 只看该作者
chenall大侠,有没有快速更改grldr.mbr以支持grldr改名的方法,即用grldr.mbr调用其他启动文件,我现在是修改内容的;另外,有不有办法让grldr.mbr支持子目录,也即可以指定调用某个子目录中的某个文件?
回复

使用道具 举报

1220#
发表于 2011-9-7 21:08:59 | 只看该作者

回复 #1223 hhh333 的帖子

修改GRLDR.MBR除了已知的方法之外,好像没有什么更好的办法了,建议使用WEE...
回复

使用道具 举报

1221#
发表于 2011-9-7 21:52:00 | 只看该作者
请教chenall ,
我最近在修改grub4dos工具箱,能不能帮看一下下面的代码有什么问题:
  1. set BOOT=%~d0/BOOT
  2. set path=%BOOT%/GRUB
  3. set list=%path% %~d0 %~d0/GRUB
  4. WENV for /F %i in ("%list%") do WENV call if exist %i/MENU.LST set MENU_G4D=%i/MENU.LST || if exist %i/MENU.G4D set MENU_G4D=%i/MENU.G4D
复制代码
试图修改PRELOAD.BAT,提高 MENU.LST的可移植性,可以放入()/BOOT/GRUB/, ()/ ,()/GRUB/等目录中,MENU.LST也可以更名为MENU.GRD。
  1. set list=%BOOT% %path% %~d0 %~d0/GRUB
  2. WENV for /F %i in ("%list%") do WENV call if exist %i/SYS_MENU.LST set MENU_USR=%i/SYS_MENU.LST
  3. set list=%path% %~d0 %BOOT% %~d0/GRUB
  4. WENV for /F %i in ("%list%") do WENV call if exist %i/MENU.USR set MENU_USR=%i/MENU.USR
  5. if exist MENU_USR && configfile %MENU_USR%
复制代码
默认加载菜单的功能增强:依次在()/BOOT/GRUB/ ,()/ ,()/BOOT/ ,()/GRUB/目录下查找并加载SYS_MENU.LST,若找不到则依次在()/BOOT/GRUB/ ,()/ ,()/BOOT/ ,()/GRUB/目录下查找并加载MENU.USR。

修改后未能实现预期的功能。WENV我是否用错了。

[ 本帖最后由 2011_dihuo0 于 2011-9-7 22:00 编辑 ]
回复

使用道具 举报

1222#
发表于 2011-9-7 23:38:27 | 只看该作者
在批处理里面%i要改成%%i

不过不建议使用WENV,直接使用批处理内置的功能就可以了.

好像本身就已经具备可移植性了吧??preload.bat是由menu.lst调用的,你这个又是要做什么的.
回复

使用道具 举报

1223#
 楼主| 发表于 2011-9-8 08:15:08 | 只看该作者
dos批处理里面%i要改成%%i,WENV for /f ... %i 在批处理中也是可以的。G4D的批处理只是把两个%%变成一个%
他的问题主要是:
WENV for /F %i in ("%list%") do wenv_command
回复

使用道具 举报

1224#
发表于 2011-9-8 08:19:09 | 只看该作者

回复 #1226 chenall 的帖子

多谢指点,
我希望PRELOAD.BAT、PRELOAD.fnt、MENU.LST这三个文件,在()/BOOT/GRUB/, ()/ ,()/GRUB/等目录中都可以正常工作,MENU.LST也可以更名为MENU.G4D。
我会保持对原有功能的兼容的。
我需要for命令,否则实现的代码太丑陋。
MENU.LST,menu.tmp的大小是不是必须是2.07 KB (2,129 字节),不是应该是2.00 KB (2,048 字节)吗?
回复

使用道具 举报

1225#
 楼主| 发表于 2011-9-8 22:56:47 | 只看该作者
9月7日的grldr中insmod支持指定名字,比如insmod fat.gz fat
意思是从grub4dos.mod(gz压缩)中加载指定的外部命令到内存吗?
测试了一下不成功,如
insmod /boot/grub/grub4dos.mod fat
显示成功但一运行fat死机。
回复

使用道具 举报

1226#
发表于 2011-9-8 23:15:19 | 只看该作者

回复 #1229 zhaohj 的帖子

想象力太丰富了汗....

这个只是可以不使用原来的名字,比如insmod (bd)/grub/fatmini fat
这样会把fatmini加载为fat
回复

使用道具 举报

1227#
发表于 2011-9-8 23:17:19 | 只看该作者

回复 #1228 2011_dihuo0 的帖子

本来是2KB刚好的,我偷懒了,没有改..
回复

使用道具 举报

1228#
发表于 2011-9-8 23:41:04 | 只看该作者

回复 #1230 chenall 的帖子

晕啊,原来是这样啊。好象没多大用
回复

使用道具 举报

1229#
发表于 2011-9-9 23:07:27 | 只看该作者
@C大,
可否把路径中的两个或多个重复的斜线(/)解析为一个,这样下面的代码就可以正常工作了,
#有时不确定变量var的最后是否有斜线(/),
%var%/mycom
例如
  1. %@root%/mycom替换的结果是()/mycom
复制代码


  1. %@path%/mycom替换的结果是(bd)/boot/grub//mycom
复制代码

有两个重复的斜线(/)
回复

使用道具 举报

1230#
发表于 2011-9-9 23:24:20 | 只看该作者
好像在GRUB4DOS中(xx)/aa.txt和(xx)//aa.txt都可以访问,你可以自己试一下.
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-23 17:25

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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