hhacker 发表于 2011-3-10 19:03:10

/*
**Casio 9860g 汉字显示
**Last update 2009.10.16
*/

# include "fxlib.h"
# include "dispbios.h"
# include "9860g.h"

WORD font_buf ;
int fontptr ;

int Print_zh(char* input, BYTE x, BYTE y, BYTE type)
{
        DWORD fontpos = 0 ;
        unsigned char bitmap_ptr[] = { '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0',
        /* 28字节点阵信息 */                   '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0',
                                                   '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0',
                                                   '\0', '\0', '\0', '\0', '\0'} ;
        GRAPHDATA font_data ;        /* Display structure */
        DISPGRAPH font_disp ;
        WORD* hanzi = font_buf ;

        strcpy(font_buf, input) ;                /* Copy input to font buffer */
        /* 初始化结构体 */
        font_data.width = 14 ;                /* GRAPHDATA */
        font_data.height = 14 ;
        font_disp.x = x ;                        /* DISPGRAPH*/
        font_disp.y = y ;
        font_dipadKind = IMB_WRITEKIND_OVER ;                /* Overwrite (fill) */
        switch (type){
        case NORMAL:
                font_dipadModify = IMB_WRITEMODIFY_NORMAL ;         /* Normal */       
                break ;
        case REVERSE:case VERT_REV:
                font_dipadModify = IMB_WRITEMODIFY_REVERCE ;         /* Revers(c)e */
                break ;
        case UNDER_LINE:        /* 下划线 */
                Bdisp_DrawLineVRAM(x-5, y+14, x+47, y+14) ;
                font_dipadModify = IMB_WRITEMODIFY_NORMAL ;         /* Normal */       
        default: break ;
        }
               
        while (*hanzi>>8 != '\0') {
                /* 当前内码位置 = 索引位置 × 字体大小 */
                fontpos = GetPosWithMbcs( *hanzi ) * 28 ;
                Bfile_ReadFile(fontptr, bitmap_ptr, 28, fontpos) ;        /* Read bitmap */
       
                font_data.pBitmap = bitmap_ptr ;       
                font_disp.GraphData = font_data ;
                BdipadGraph_VRAM(&font_disp);
                ++hanzi ;        if (type == VERT_REV || type == VERT)        font_disp.y += 14 ;
                                else font_disp.x += 14 ;
        }

        Bdisp_PutDisp_DD() ;   
        return TRUE ;
}

DWORD GetPosWithMbcs(WORD code)
{                     
        BYTE R = (code >> 8) & 0xFF;           /* 区码 */
        BYTE C = code & 0xFF;                   /* 位码 */
        if ((R >= 0xA1 && R <= 0xFE) && (C >= 0xA1 && C <= 0xFE))
                 return (R - 0xa1)*94 + (C - 0xa1) ;
              elsereturn 0 ;
}

int OpenFont(void)
{

        # ifdef RELEASE
        FONTCHARACTER fontfile[] = { '\\','\\','f','l','s','0','\\','F','O','N','T','.','b','i','n' ,'\0'} ;
        # else
        FONTCHARACTER fontfile[] = { '\\','\\','c','r','d','0','\\','f','o','n','t','.','b','i','n' ,'\0'} ;
        # endif

        fontptr = Bfile_OpenFile(fontfile, _OPENMODE_READ) ;       
        if (fontptr < 0)
        {
                locate(1,4) ;
                    Print((unsigned char*)"Cann't open fontfile.") ;
                return FALSE ;        /* error */
        }
        return TRUE ;
}

void CloseFont(void)
{
        Bfile_CloseFile( fontptr ) ;
}

Enjoy.

ttxzb 发表于 2011-3-11 14:52:50

楼上是什么源代码?

小王(李春山) 发表于 2013-4-30 17:22:18

厉害哈里还

懒洋洋 发表于 2013-5-11 16:25:29

一屏六行10*10.请教楼主在吗。 有时间了做个 10*10的 HZK10.DF 字库 文件呗。。。等你半年了。。。。。

7127326 发表于 2013-5-11 18:39:04

很关心楼主高考啊

daheng131 发表于 2013-6-17 00:09:30

学习一下

think21st 发表于 2021-6-26 18:41:51

支持做个10*10的 HZK10.DF

好狗猎猎 发表于 2021-7-5 13:15:29

有一个小字体叫丁卯点阵体的,提供了7x7,9x9大小,用在计算器上似乎不错

cg20 发表于 2022-6-16 09:09:05

顶,必须顶,这个好帖!
页: 1 2 [3]
查看完整版本: 中文阅读器更新有望