GBK版MkFon.com——指定汉字的小汉字库生成软件
程序从文本文件读入缓冲区,过滤出不重复汉字表,排序后,
从C盘根目录或MKFON所在目录的GBk16中或
从C盘根目录或MKFON所在目录的HZk16中取字模信息,
将汉字总数、汉字内码、汉字字模数据写入二进制小汉字库.FON。
除不提供文本文件名时只鸣叫外,运行有出错信息、成功信息。
帮助信息见下:
MaKe *.FON GBK版小汉字库生成器 v1.20 (C)2009.6 by Luo Ming An罗明安
aka 又名 born2be/borntobe/szborn2be/szborntobe/本是/苏州本是
Make a small hz lib with font data from GBK16/HZK16 从命令行文件中
for hz specified in a textfile entered on command line 生成小汉字库*.FON
Usage用法:
MKFON myfile.txt
Makes a small MYFILE.FON from GBK16/HZK16.
(REName your hz lib as such if it is not so named.)
生成小汉字库MYFILE.FON(如果汉字库名非GBK16/HZK16,请换名REN。)
Thanks: Automatic judgment of GBK hz lib format is based on Yaya's advice.
鸣谢:GBK字库格式智能判断基于Yaya樊建业的建议。
.FON Format格式:
OFFSET地址 CONTENT内容
------------------ ----------------------
0000 --0001 # of HZ 汉字总数
0002 --0003 HZ1 code 第1个汉字内码
0004 --0005 HZ2 code 第2个汉字内码
... ...
2+#*2+0 --2+#*2+31 HZ1 font 第1个汉字字模
关于GBK字库不同格式的补充说明:
GBK码编码顺序的所有码表文件都是gbk.txt;
但由于各种格式字库中字模排列次序不同,所以应该使用不同的公式来提取字模。
gbk.DZK格式字模的排列次序与码表顺序文件gbk.txt中的排列相同,
GB2312编码采用公式 ((ch1-0xa1)*0x5e + (ch2-0xa1))*0x20 确定;
GBK编码采用公式 ((ch1-0x81)*0xbe+(ch2-0x40)-(ch2/0x80))*0x20 确定;
hzk16.gbk另有规律——主要是因为要照顾DOS中通用的GB字库hzk16:
;假设汉字高位在AH/ch1,低位在AL/ch2中,
;rec=A+(AH-B)*C+(AL-D)-(AL\80h)
;if AH>A0h then
; if AL>A0h then '1-94区(按5Eh个汉字/区计算):A1~FE,A1~FE
; rec=(AH-A1h)*5Eh+(AL-A1h)
; else '159-254区:A1~FE,40~A0
; rec=5Eh*5Eh+20h*5Eh+20h*60h+(AH-A1h)*60h+(AL-40h)-(AL\80h)
; endif
;else
; if AL>A0h then '95-126区:81~A0,A1~FE
; rec=5Eh*5Eh+(AH-81h)*5Eh+(AL-A1h)
; else '127-159区:81~A0,40~A0
; rec=5Eh*5Eh+20h*5Eh+(AH-81h)*60h+(AL-40h)-(AL\80h)
; endif
;endif
打开gbk16,判断前4字节,gbk.DZK是00 00 7f ef,hzk16.gbk是00 00 00 00。这样就可以实现。
chenall已经把这个字库应用到GRUB4DOS菜单上:
http://bbs.znpc.net/viewthread.php?tid=5854&pid=44171
Last edited by 本是 on 2010-3-4 at 13:42 ]