无忧启动论坛

 找回密码
 注册
搜索
WEPE笔记本电脑手机维修小包 IT发烧友的必备工具最纯净的「微PE装机优盘」UEPON大师作品系统gho:最纯净好用系统下载站
查看: 4013|回复: 16

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

[复制链接]
发表于 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 编辑 ]
发表于 2011-9-27 20:49:37 | 显示全部楼层
这个想法不错,c大能以内部变量的形式给予提供更好。
回复

使用道具 举报

 楼主| 发表于 2011-9-27 21:03:54 | 显示全部楼层

回复 #2 zxw 的帖子

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

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

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

使用道具 举报

发表于 2011-9-27 21:14:08 | 显示全部楼层
这个我有过打算,想抽空编定一个外部命令。

grubcall

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

使用道具 举报

 楼主| 发表于 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 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2011-9-27 21:41:48 | 显示全部楼层

回复 #4 chenall 的帖子

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

使用道具 举报

发表于 2011-9-27 23:00:32 | 显示全部楼层
dihuo0 (地火)  兄的想法真的非常好,有你的参与,grub4dos会发展的更好。
回复

使用道具 举报

发表于 2011-9-28 00:17:13 | 显示全部楼层
尝试着简单写了一下,也不知道对不对。
参数方式的改天再折腾。


变量测试.jpg

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

使用道具 举报

发表于 2011-9-28 23:05:24 | 显示全部楼层
做一个批处理或外部命令include,支持后接一个批处理文件为参数。

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

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

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

使用道具 举报

发表于 2011-9-28 23:21:03 | 显示全部楼层
常用的变量应该都在grub4dos.h中了吧?
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2019-12-10 22:34

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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