LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 782|回复: 0

关于libfbx库的问题,各位兄弟请多指教

[复制链接]
发表于 2010-4-2 18:08:41 | 显示全部楼层 |阅读模式
最近写一个测试字库的程序,接触到了文字显示的一些皮毛,就想在linux
下把中文显示出来,google了好多相关的文章,最后选择了采用libfbx
的方式,但是没有成功,我把我的过程记录下来,请各位兄弟帮忙看看哪里出了问题
实验环境:
WMware+FC4  
实验过程:
1.  在/etc/grub.conf中的
    kernel /boot/vmlinuz-2.6.11-1.1369_FC4 ro root=LABEL=/ vga=0x301 #rhgb
quiet vga=0x314 ---打开framebuffer 功能,reboot后启动画面有小企鹅出现,表明
framebuffer已经成功打开
2.  从网络上下载 libfbx-0.2.0,不记得是从哪里下载了,反正google一下libfbx-0.2.
0 就可以找到下载的地方了。
3.  编译 libfbx-0.2.0,a. configure  b.fixed some error of libfbx-0.2.0
source code   c.make clean;make;make install install libfbx library to /usr/
local/lib/
4.  修正 /etc/ld.so.conf,添加 /usr/local/lib
5.  编译代码
/* gbfbx.c -a simple chinese show
*
* By cloudfly<yfy001@etang.com>
*
*/

#include <libfbx/libfbx.h>
#include <libfbx/libfbx-gui.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#define row 2 //纵坐标放大倍数
#define col 3 //横坐标放大倍数
int main()
{
    int x,y,i;
    char *s="中文汉子显示";
    FILE *fp;
    char buffer[32];
    unsigned char qh,wh;
    unsigned long offset;

    fb_init(); //图形屏幕初始化
    fb_handle_signals();
    x=fb_screen->width-300; //设定 x坐标
    y=fb_screen->height-300; //y坐标

    int n,j,k,m;

    if((fp=fopen("St.cfg","rb"))==NULL)//中文字库St.cfg可以从我的主页下载。
ucdos也有
    {
        fb_cleanup();
        return 0;
    }

    while(*s)
    {
        qh=*(s)-0xa0;
        wh=*(s+1)-0xa0;
        offset=(94*(qh-1)+(wh-1))*32L;//计算该汉字在字库中偏移量
        fseek(fp,offset,SEEK_SET);
        fread(buffer,32,1,fp); //取出汉字32字节的点阵字模存入buffer
中(一个汉字)
        for(i=0;i<16;i++)
        for(n=0;n<row;n++)
        for( j=0;j<2;j++)
        for( k=0;k<8;k++)
        for(m=0;m<row;m++)

        if(((buffer[i*2+j]>>(7-k))&0x1)!=NULL)
            fb_putpixel(x+8*j*col+k*col+m,y+i*row+n,0,255,0,fb_screen);
                        //将32位字节的点阵按位在屏幕上画出来
            s+=2;        //因为一个汉字内码占用两个字节,所以s必须加2
            x+=40;
        }
    return 1;
}

gcc -o gbfbx gbfbx.c -lfbx -ldl

6.  执行代码
[root@my_linux test]#./test
7.  提示ioctl KDGETMODE: Invalid argument
8.  在libfbx-0.2.0 源代码中的fb_init.c中的if (ioctl(tty, KDGETMODE, &kd_mode)
< 0)
前面和后面打印信息
9.  再make clean;make;make install libfbx-0.2.0
10. 在编译测试代码
11. 再执行编译结果
     [root@my_linux test]#./test
12.  还是提示ioctl KDGETMODE: Invalid argument,没有提示我自己后面添加的信息


不知道哪里出错了。各位兄弟请帮忙看看。多谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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