中华VHEL 5 中文字库及输入法

要求:原操作系统代码里只是支持了阿拉伯语展现,须求做的是贯彻对那些种类的汉字全角援救。

在第3遍安装途观HEL5时,假使选拔的是英文,那么系统将不设置汉语协助包,这样就招致了中文展现为乱码(小方框)…….

hzk16的牵线以及简单的利用方式

有那一人说vi /etc/sysconfig/i18n文件,其实根本就向来不供给。

HZK16字库是顺应GB2312标准的16×16点阵字库,HZK16的GB2312-80支撑的汉字有6763个,符号68二个。当中一级汉字有37伍12个,按声序排列,二级汉字有3007个,按偏旁部首排列。大家在有的用参预合根本用不到那般多汉字字模,所以在选择时就能够只领到部分字体作为己用。

缓解格局:

HZK16字Curry的16×16中中原人民共和国字一共要求257个点来体现,也正是说须要三10个字节才能达到呈现多个普通汉字的指标。

设置 1.fonts-chinese-3.02-9.6.el5.noarch.rpm.
即便不可能安装,则加个–force

咱俩精晓1个GB2312汉字是由八个字节编码的,范围为A1A1~FEFE。A1-A9为符号区,B0到F7为汉字区。每二个区有9多少个字符(注意:那只是编码的许可范围,不必然都有字型对应,比如符号区就有广大编码空白区域)。上面以汉字“笔者”为例,介绍怎么着在HZK16文件中找到它对应的叁拾2个字节的字样数据。

2.fonts-ISO8859-2-75dpi-1.0-17.1.noarch.rpm

前方说到三个汉字占八个字节,那七个中前2个字节为该汉字的区号,后叁个字节为该字的位号。个中,每一个区记录96个汉字,位号为该字在该区中的地方。所以要找到“小编”在hzk16库中的地点就非得取得它的区码和位码。(为了差距使用了区码和区号,其实是3个事物,别被自身误导了)

大多数人到了此间就没有做别的操作了,导致照旧鞭长莫及正确彰显汉语。

区码:区号(汉字的第①个字节)-0xa0
(因为汉字编码是从0xa0区始发的,所以文件最前头就是从0xa0区初叶,要算出相对区码)

3.cd /usr/share/fonts/

位码:位号(汉字的首个字节)-0xa0

4.fc-cache -fv #那两步才是成功的重中之重阿,相信还有好六个人苦恼在此地

诸如此类大家就能够赢得汉字在HZK16中的相对偏移地方:

如上就安装好了中文协助,上边包车型客车包是设置汉语输入法:

offset=(94*(区码-1)+(位码-1))*32

scim-libs-*

申明:一 、区码减1是因为数组是以0为开始而区号位号是以1为开始的

scim-1.4.4-*

2、(94*(区号-1)+位号-1)是1个汉字字模占用的字节数

scim-chinese-standard-*

③ 、最终乘以32是因为汉字库文应从该职位起的32字节新闻记录该字的字样新闻(前边提到一个中夏族民共和国字要有三十二个字节显示)

scim-tables-*

 有了摇头地址就足以从HZK16中读取汉字编码了

scim-pinyin-*

贯彻思路:

图片 1

  1. 摸底HZK编码,通晓一下符合GB2312标准的汉语点阵字库文件HZK16;
  2. 下载普通话GB2312的二进制点阵文件;
  3. 将HZK16.fnt文本放入nihongo文件夹中;
  4. 修改主makefile文件和app_make.txt文件,将原本装载nihongo.fnt的言辞替换来装载HZK16.fnt即可;
  5. 修改bootpack.c文件,将事先分配的装载立陶宛共和国(Republic of Lithuania)语字体的内部存款和储蓄器扩大,载入字库的公文名;
  6. 在haribote/graphic.c中充足援助汉字的代码,扩张三个函数用于体现汉字;
  7. 修改putfonts8_asc函数里if (task->langmode == 3)语句块;
  8. 测试程序。
  9. 小心:日文的编码是分为左半有的和右半部分,而大家运用的HZK16是分为上半部分和下半部分的。

那边别的的地点相比较弄,第六步将大小修改一下,笔者的是nihongo = (unsigned
char *) memman_alloc_4k(memman, 55*94*32);

第陆步,要注意,HZK16是上下两有个别,不一致于日文的左右两有个别的协会。

代码如下:

void putfont32(char *vram, int xsize, int x, int y, char c, char *font1, char *font2)
{
    int i,k,j,f;
    char *p, d ;
    j=0;
    p=vram+(y+j)*xsize+x;
    j++;
    //上半部分
    for(i=0;i<16;i++)
    {
        for(k=0;k<8;k++)
        {
            if(font1[i]&(0x80>>k))
            {
                p[k+(i%2)*8]=c;
            }
        }
        if(i%2==0){
            for(k=0;k<4;k++){
                f=p[k];
                p[k]=p[7-k];
                p[7-k]=f;
            }
        }else{
            for(k=0;k<4;k++){
                f=p[k+8];
                p[k+8]=p[15-k];
                p[15-k]=f;
            }
        }
       /* for(k=0;k<8/2;k++)
        {
            f=p[k+(i%2)*8];
            p[k+(i%2)*8]=p[8-1-k+(i%2)*8];
            p[8-1-k+(i%2)*8]=f;
        }*/
        if(i%2)
        {
            p=vram+(y+j)*xsize+x;
            j++;
        }
    }
    //下半部分
    for(i=0;i<16;i++)
    {
        for(k=0;k<8;k++)
        {
            if(font2[i]&(0x80>>k))
            {
                p[k+(i%2)*8]=c;
            }
        }
        if(i%2==0){
            for(k=0;k<4;k++){
                f=p[k];
                p[k]=p[7-k];
                p[7-k]=f;
            }
        }else{
            for(k=0;k<4;k++){
                f=p[k+8];
                p[k+8]=p[15-k];
                p[15-k]=f;
            }
        }
        /*for(k=0;k<8/2;k++)
        {
            f=p[k+(i%2)*8];
            p[k+(i%2)*8]=p[8-1-k+(i%2)*8];
            p[8-1-k+(i%2)*8]=f;
        }*/
        if(i%2)
        {
            p=vram+(y+j)*xsize+x;
            j++;
        }
    }
    return;
}

 

运作结果,大家在euc.txt中进入一些汉字。

图片 2

参考资料:

1.https://www.cnblogs.com/wunaozai/p/3858473.html 30天操作系统补助汉语。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图