菜单

丰豪华语字库

2019年4月3日 - LINUX

要求:原操作系统代码里只是支撑了塞尔维亚语展现,需求做的是兑现对这么些系统的方块字全角协理。

在首次安装翼虎HEL5时,倘若选取的是英文,那么系统将不安装中文扶助包,那样就导致了华语呈现为乱码(小方框)…….

hzk1陆的牵线以及简单的行使格局

有很多个人说vi /etc/sysconfig/i1八n文件,其实根本就不曾要求。

HZK1六字库是适合GB2312标准的1陆×16点阵字库,HZK1六的GB231二-80扶助的方块字有67陆贰个,符号6八1个。其中超级汉字有3753个,按声序排列,二级汉字有300九个,按偏旁部首排列。大家在1些利用场所根本用不到如此多汉字字模,所以在采用时就足以只领到部分字体作为己用。

化解办法:

HZK1陆字Curry的16×1陆汉字1共供给二陆拾二个点来显示,也正是说必要33个字节才能落得呈现二个一般性汉字的目标。

安装 1.fonts-chinese-三.0二-玖.陆.el5.noarch.rpm.
假诺不可能安装,则加个–force

我们领略三个GB231二汉字是由七个字节编码的,范围为A一A一~FEFE。A一-A玖为符号区,B0到F7为汉字区。每二个区有玖几个字符(注意:那只是编码的认同限制,不必然都有字型对应,比如符号区就有成都百货上千编码空白区域)。下边以汉字“笔者”为例,介绍如何在HZK1陆文件中找到它对应的三十几个字节的字样数据。

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

后面谈到一个中华夏族民共和国字占八个字节,这两在那之中前一个字节为该汉字的区号,后一个字节为该字的位号。当中,每种区记录玖五个汉字,位号为该字在该区中的地方。所以要找到“笔者”在hzk1六库中的地方就非得取得它的区码和位码。(为了差异使用了区码和区号,其实是贰个事物,别被本身误导了)

多数人到了这里就从未做其他操作了,导致照旧鞭长莫及正确突显汉语。

区码:区号(汉字的首先个字节)-0xa0
(因为汉字编码是从0xa0区开班的,所以文件最前头就是从0xa0区开首,要算出绝对区码)

3.cd /usr/share/fonts/

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

4.fc-cache -fv #那两步才是马到功成的要害阿,相信还有好多少人干扰在此间

那般大家就足以博得汉字在HZK1陆中的相对偏移地方:

以上就设置好了国文扶助,下边的包是安装中文输入法:

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

scim-libs-*

诠释:壹、区码减一是因为数组是以0为发端而区号位号是以壹为发端的

scim-1.4.4-*

2、(94*(区号-1)+位号-1)是两在那之中中原人民共和国字字模占用的字节数

scim-chinese-standard-*

3、最后乘以3贰是因为汉字库文应从该岗位起的3二字节新闻记录该字的字样消息(前边提到1个汉字要有3十八个字节展现)

scim-tables-*

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

scim-pinyin-*

落成思路:

图片 1

  1. 询问HZK编码,精通一下适合GB231二标准的中文点阵字库文件HZK16;
  2. 下载普通话GB2312的二进制点阵文件;
  3. 将HZK1陆.fnt文书放入nihongo文件夹中;
  4. 修改主makefile文件和app_make.txt文件,将本来装载nihongo.fnt的口舌替换到装载HZK1六.fnt即可;
  5. 修改bootpack.c文件,将事先分配的装载拉脱维亚语字体的内部存款和储蓄器扩展,载入字库的文本名;
  6. 在haribote/graphic.c中丰裕帮忙汉字的代码,扩展三个函数用于彰显汉字;
  7. 修改putfonts8_asc函数里if (task->langmode == 3)语句块;
  8. 测试程序。
  9. 留神:日文的编码是分为左半片段和右半部分,而小编辈选择的HZK16是分为上半部分和下半部分的。

此间其余的地方相比弄,第四步将大小修改一下,我的是nihongo = (unsigned
char *) memman_alloc_4k(memman, 55*94*32);

第⑤步,要专注,HZK1陆是前后两部分,不一样于日文的左右两部分的构造。

代码如下:

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中进入1些汉字。

图片 2

参考资料:

1.https://www.cnblogs.com/wunaozai/p/3858473.html 30天操作系统帮助中文。

相关文章

发表评论

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

网站地图xml地图