无忧启动论坛

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

关于内存变量、内部函数调用以及内存使用的一些想法

[复制链接]
跳转到指定楼层
1#
发表于 2011-9-27 20:44:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于内存变量、内部函数调用以及内存使用的一些想法
现在,内存变量、内部函数调用以及内存的用法中都使用字面数字量的形式,这种形式可读性差,而且容易出错,我有一个想法,能不能模仿c语言头文件和宏定义的形式,把这些都定义成变量放到一个或几个批处理文件中供批处理的编写者使用,这样菜鸟也能使用这些高级功能了。
例如:
  1. !bat
  2. #(bd)/boot/grub/mem_var.h
  3. set boot_part=0x8208
  4. set grub4dos_date=0x8278
  5. set boot_drive=0x8280
  6. set filesize=0x0x8290
  7. set current_part=0x829C
  8. set current_drive=0x82A0

  9. set current_menu_path=0x8217
复制代码
用法:
#检查是不是20110918的Grub4dos
command mem_var.h
checkrange 20110918 read %grub4dos_data%

!bat
#(bd)/boot/grub/func.h
set sprintf=0 0
set putstr=1
set getxy=4
set gotoxy=5
set substring=10
set strstr=11
set strlen=12
set strtok=13
set strncat=14
set strcmp=15
set strcpy=16
set getkey=17
set checkkey=18


用法:

command func.h
call Fn %sprintf%  "This is a test string"

#获取当前菜单的路径,修改自Chenall
call Fn %sprintf%  %current_menu_path% | set menu=


  1. !bat
  2. #(bd)/boot/grub/mem.h
  3. set menu_buildin=(md)4+8
复制代码
用法:
#调用内置菜单
configfile %menu_buildin%

这样一来,可读性大为改善,而且还有一个好处,将来如果grub4dos的内存变量、内存布局、内部函数改变了,只需要修改头文件,而不需要修改批处理,批处理更容易维护了,不需要随着grub4dos的升级而升级。

我计划整理几份头文件,但是我对内存变量、内部函数调用以及内存的用法不太熟悉,各位grub4dos批处理高手能否提供你们常用的内存变量地址、内存文件地址以及相关资料。

[ 本帖最后由 dihuo0 于 2011-9-28 08:22 编辑 ]
2#
发表于 2011-9-27 20:49:37 | 只看该作者
这个想法不错,c大能以内部变量的形式给予提供更好。
回复

使用道具 举报

3#
 楼主| 发表于 2011-9-27 21:03:54 | 只看该作者

回复 #2 zxw 的帖子

我曾经想要研究pseudo的菜单,但是那些内存变量看得让我头疼,因此萌生了这样一个想法,最近这个想法逐渐清晰起来。
这类似于c语言的函数库,是一种在不修改Grub4dos核心时,扩充功能的好方法,可以使得grub4dos易学易用功能更强。
也就是说在chenall大提供相应的功能之前,先通过“函数库”提供这些功能,进行试验,然后chenall可以挑选合适的功能加入到内核中。

各位高手,能不能提供一下你们常用的内存地址及其含义。

[ 本帖最后由 dihuo0 于 2011-9-27 21:24 编辑 ]
回复

使用道具 举报

4#
发表于 2011-9-27 21:14:08 | 只看该作者
这个我有过打算,想抽空编定一个外部命令。

grubcall

可以用它来调用内部函数,取得内部变量的值。不过因为时间关系,还没有开工。
回复

使用道具 举报

5#
 楼主| 发表于 2011-9-27 21:35:34 | 只看该作者

回复 #4 chenall 的帖子

Chenall大,正好我有个问题,
  1. set sprintf=0 0
  2. call fn %sprintf%  "This is a test string"
复制代码

这段代码是否可行。

不用回答了,我在虚拟机里测试过了,fn应改为Fn,完全可行。

[ 本帖最后由 dihuo0 于 2011-9-27 21:46 编辑 ]
回复

使用道具 举报

6#
 楼主| 发表于 2011-9-27 21:41:48 | 只看该作者

回复 #4 chenall 的帖子

能否把你的设想详细讲一下,让大家都来讨论讨论。
回复

使用道具 举报

7#
发表于 2011-9-27 23:00:32 | 只看该作者
dihuo0 (地火)  兄的想法真的非常好,有你的参与,grub4dos会发展的更好。
回复

使用道具 举报

8#
发表于 2011-9-28 00:17:13 | 只看该作者
尝试着简单写了一下,也不知道对不对。
参数方式的改天再折腾。




[ 本帖最后由 Plantsoot 于 2011-9-28 00:19 编辑 ]
回复

使用道具 举报

9#
发表于 2011-9-28 23:05:24 | 只看该作者
做一个批处理或外部命令include,支持后接一个批处理文件为参数。

批处理无需!BAT开头,允许使用C语言的#define定义、引用宏(是否支持嵌套另说),以便提高可读性。

include将对该批处理进行预处理,实现宏代换,并补充!BAT前缀,最后用insmod载入内存备用。

这个处理估计不难实现。此法不占用变量。
回复

使用道具 举报

10#
发表于 2011-9-28 23:21:03 | 只看该作者
常用的变量应该都在grub4dos.h中了吧?
回复

使用道具 举报

11#
 楼主| 发表于 2011-9-29 08:35:46 | 只看该作者

回复 #10 Plantsoot 的帖子

我想知道实践中常用的内存变量有哪些,grub4dos.h中的变量我还没有细看,不一定都适合,我想从论坛的脚本中提炼出共同的常用的内存变量,grub4dos.h中未必会有。
回复

使用道具 举报

12#
 楼主| 发表于 2011-9-29 09:05:57 | 只看该作者

回复 #9 pseudo 的帖子

好主意,我再梳理一下,也就是说,批处理在编写时,可以不写开头的!BAT,可以使用宏定义,
批处理在使用时,使用include mybat.bat进行预处理并加载到内存,然后用户在运行mybat.bat时,执行的就是经过include预处理的脚本。

这相当于实现一个简单的c语言预处理器,不知道会不会与grub4dos本身的预处理相冲突。这个由chenall来实现可能更合适。

这与我的想法还是有些不同,我的想法是使用批处理写一些“函数库”供批处理作者使用。至于变量名冲突,“函数库”中可以使用一些特殊符号,比如_、?等等。

[ 本帖最后由 dihuo0 于 2011-9-29 09:08 编辑 ]
回复

使用道具 举报

13#
发表于 2011-9-29 09:12:34 | 只看该作者
有必要搞得那么复杂吗???

我觉得像这样子挺好的.按需调用.

直接

grubcall printf  "printf test:%s\n" "grubcall printf test"

grubcall getvar ram_drive

这个是批处理的,因为批处理的关系,执行之后不可以使用%@retval%来得到返回值.所以我才想考虑编一个命令.

grubcall.rar

984 Bytes, 下载次数: 45, 下载积分: 无忧币 -2

回复

使用道具 举报

14#
 楼主| 发表于 2011-9-29 12:56:26 | 只看该作者

回复 #13 chenall 的帖子

好像你我的关注点不同,

你关注的是内部函数,是功能的有无,解决功能的有无问题。

我关注的是内存变量,是功能是否易学易用。

我的设想是开发一个“函数库”,把这些高级功能封装起来,批处理作者可以通过“函数库”调用高级功能,而不直接使用高级功能,当grub4dos升级时,“函数库”随之升级,而批处理可以基本保持不变。
回复

使用道具 举报

15#
发表于 2011-9-29 15:12:58 | 只看该作者

回复 #14 dihuo0 的帖子

支持
工程量很大,未必能实现
回复

使用道具 举报

16#
发表于 2011-10-4 15:49:27 | 只看该作者
函数数名  编号

比较简单的方法是用一个文本文件记录函数名和编号的关系,每行一个,用空格隔开,然后用 for 命令循环在文件中查找,这样就有办法将“Fn.函数名”处理成“Fn.编号”了。

原批理中的 Call Fn.x 改为调用另一个批处理:CallFunc 函数名
回复

使用道具 举报

17#
 楼主| 发表于 2012-1-10 01:34:22 | 只看该作者
最近工作出了点问题,以后再好好做吧,我希望减少“魔数”、硬编码的使用,直至取消,使得grub4dos更易学、易读、易用。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-15 18:58

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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