- 积分
- 70
- 实力分
- 点
- 金钱数
- 两
- 技术分
- 分
- 贡献分
- 分
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
今天在检查字体的时候,发现Char.txt中有错误,把改正的放上来(Char_P1.txt),在Char_P1.zip中
====================================
答应过机友把方法发出来的:)不过周日偷懒,呵呵,没有弄
在此,将详细步骤以及操作的原因写下来,但因为可能有些机友只想知道具体的操作步骤,而不想知道操作的原因,所以,具体要实施的操作步骤以棕色标注,只想知道如何操作的机友光看棕色的字就可以了:)
我当初的想法是,有些软件可以将电脑系统中的字体生成字库的bin文件,或者是c/asm的代码,这样可以避免一个点一个点的去做汉字,可是在用SiemensCE的时候发现,小8的字体是比较特殊的,是Siemens针对英文,数字还有其他字符以及汉字所做的一套自己的标准,在小8里面,一个字符/汉字的开头比普通的字库要多出8位(一字节),而且小8的字库normal字是占用13行的,所以要用软件自动生成bin字库再刷入是不太实际的,因为通常都是12行,并且开头也没有那一个字节,所以只能生成c/asm的代码,然后再修改了
我在网上找了一会,找到了FontGen这个软件,可以很好的处理简体以及繁体,但是仍然有一个问题(还是由小8的字体的特点导致的),所以导致了后面多了一步操作。
具体的操作以及原因:
1 挑选汉字
这一步最花费时间了,要选出小8所支持的所有汉字,并且按照在FullFlash中的连续位置来排列,不过好在我已经做完了:)
现在只需要直接使用Char.txt就可以了(在Char.zip中)。
用SiemensCE可以看到小8支持的汉字,一个一个打下来肯定会很慢,而且有些字还真不知道怎么打。。。
按照SiemensCE上显示出的小8汉字的排列方式可以看出,小8所支持的汉字是按照unicode排列的(至少在SiemensCE中是这样的),由4E00到9FFF,所以我们可以按照这个顺序列出所有的汉字,然后在这些汉字里面挑选,不需要的,删除掉,那么生下来就是排列好的了
一个简单的C语言程序,循环,文件操作,按照windows下的unicode文本文件的习惯,文件开头加上FFFE,很容易就可以生成这样一个文档
然后我猜测可能小8支持的汉字不会超出GBK,简体中文XP支持的字符集应该是GBK,所以我把这个文档另存成ANSI的Unicode3.txt(现在已经改成Char.txt了),在这个范围内挑选,事实证明。。小8所支持的汉字的确是没有超出这个范围
而在SiemensCE中看到汉字的Unicode代码,可以看出,除了按照unicode排列,并且可能是较常用的汉字外,是没太大的规律的
挑选的过程没有什么技巧,就是用SiemensCE打开5508的FullFlash一个一个看,没有的删除,有的保留,在这里我选用了vim这个编辑器,在删除的时候可能会方便一些,因为vim用hjkl来移动光标,用x来删除字符,并且用3x这样的东西来一次删除3个汉字,如果有人想做Siemens其他机器的字体修改的时候(可能支持的汉字数量不同),这个方法也许是一种选择。
此处要注意的是,小8的Fullflash中的字体,不是完全按照unicode的,而是由一定的错位,所以要做一定的调整(Char.txt中已经调整了,一行就是在Fullflash中连续的一块)
2 生成c语言源文件
这时候就要用到FontGen了,为了方便,我们使用Char.txt中的第二行来作具体说明(Char.txt中一行就是一个在FullFlash中连续的块)。为了方便查看,我们把这一行复制到一个临时的文本中(我们把这个叫文本1),如图:
图中有个地方要注意,那就是那个“\”,为什么汉字中会出现“\”呢?因为小8中存在一些不再索引中的字,通常表现为重复,所以在Char.txt中是存在重复字的,在Char.txt中这样的字通常在这样的字前面加“\”。表示后面的字出现两次。
搜索所有前面出现“\”的字,单独打开一个文档,把这样的字记录下来(如图,这里用来记录的文本我们管它叫文本2),并且删除文本1中的“\”。
从文件1中把这一行复制到FontGen中,然后做一些设置,具体如图:
然后我们导出这些字体,存起来,得到两个文件,假定是1.c,1.h。1.h可以删除,留下1.c,因为FontGen会过滤掉重复的字,所以在1.c中要把这样的字重复一次。这就是我们要记录下以“\”开头的汉字的原因。
用任意的文本编辑器打开1.c,记事本就足够了,在里面搜索文本2中记录的汉字,每个字都重复复制一份,如图上的效果:
保存,这样我们需要用到的c语言源文件就完成了。
3 将C语言源文件转换成强刷的VKP
用vim打开上一步中做好的1.c,如果文件中含有^M样的字符,那么先执行下一条命令(如果没有,就不用执行)(直接输入,包括冒号,输入完后回车即可执行,以后相同):
:%s/^M//g
注意,^M的输入方法是:ctrl+v,ctrl+m
然后依次执行如下的命令
:%s/\t//g
:%s/^[^{].\+\n//g
:%s/[{,} ]//g
:%s/0x//g
:%s/^\(.\)/0c\1/g
:%s/\(.\)$/\10000/g
:%s/[\n ]//g
这些行表示的含义分别是:
去掉所有TAB键
去除所有非“{”开头的行
去除“{”,“,”,“}”,“ ”
去除“0x”
在每个非空行前加0c,表示字符宽度:12
在每个非空行后加0000,就是小8字体那多出来的那一行
去除所有换行及空格
这里有个简单的方法,将:%s/\t//g开始的部分存成VIM的脚本,然后调用,调用时执行的命令为(假定这个文件为Vkp.vim)
:so vkp.vim
这样就得到一样的结果,如图:
打开SiemensCE,查找该段的起始地址,贴在此文件的开头(我已将地址附在Char.txt中,在每一行的开头,不用再查了)
使用命令
:wq
保存退出,或者使用菜单的保存及退出
4 调整并制作VKP
将1.c改名为1.vkp,复制一份5508的FullFlash,将1.vkp强刷进去。
这里有个问题,小8的字体是不同的,通常的字体是最右侧空一行,可是小8的是左侧空一行,所以所用的字都要向右移一格。此处有一个问题和一个技巧,分别是:
SiemensCE会根据字所占宽度调整,而我们不需要这样的调整,所以我们还要调整回来,按照下图设置会有一些方便的操作方式:
Charmap会一次移动一页,32个汉字,效率提高很多。
而去掉Hide witdh bytes则可以让我们在每个字上面看到表示这个字的宽度的部分,这样可以把注意力集中在字上面,然后调整,遇到图中所示的,则需要修改:
修改方法是,将ACW calculation前面的勾去掉,然后就可以在左边编辑宽度了,编辑后别忘记再把ACW calculation前面的勾再勾上,不然。。。你试试看就知道了:)
这里还有个要注意的地方,有些字明显小,可是宽度部分看起来也差不多,这个要留意。。那个也要修改
然后就可以得到一个改好了一段的FullFlash(不管是直接存成FullFlash,还是存成VKP后再刷),后面就简单了,用FullFlashComparer得到可以给5508使用的补定,我采用的是如下图的设置这样会整齐一些:
这里要说一下,为什么我做的vkp会有冲突,因为FullFlashComparer按照这样的方式生成的补定会包含一定的没有变化的数据,而这些数据可能是别人以前改过的,所以在最后一行,最好把不是中文字体的部分去掉,如下图:
左边的地址可以看出最后的地址是0x49FDE8,所以补定中的数据可改为下图:
这样,一段的补定就出来了,所花的时间不应超过15分钟,17个,累计时间不超过5个小时就搞定了。
其实,从这个过程中可以看出,Xinshou所说的只做繁体其实是比较麻烦的,因为繁体字的连续性差了很多,所以工作量大了很多。。。。。所以我不想做-_-UU
一直在弄这东西,可是总是不知道怎么表达,加上今天被灌酒了,不太清醒,表达不清楚的,大家多包涵,有问题就提,我尽我所能的回答:)
============================================================================
顺便加一个检查所挑选的汉字的方法
在挑选汉字的时候,可能会有少量的错误,想从这么多的字里面找出那几个错误,是很麻烦的,有一个方法,可以较为方便的检查所挑出的字。
原理如下:
我们在做字体补丁的时候,改的是字的外形,但是字的内码是没变的,比如会把“默”字显示成“黕”,但是,对于“黕”这样不支持的字,仍然是显示不出来的,显示为一个空白,所以,我们可以把char.txt放到手机里面去看,错误的字的地方会显示出一个空白(不支持的汉字的显示情况),依靠这一点,我们可以全面的检查一遍char.txt
这样的方法有如下的好处:
1. 全面检查,可以比较全面的查出错误的字
2. 可以分几次进行,一次检查少量,下次再继续进行,分几天完成,由阅读软件来帮你记录进度 :D
方法如下:
把char.txt放到手机中,使用文本阅读软件(比如MicroReader)来查看,发现了空白,就说明这的地方有一个错字,可以根据这个字附近的字来修正。
另外可以把char.txt里面每行开头的地址去掉,这样会排列得很整齐,如果出现了空白的话,也会很明显
[ 本帖最后由 LanEast 于 2006-10-12 18:12 编辑 ] |
评分
-
查看全部评分
|