cnCalc计算器论坛

 找回密码
 注册
搜索
123
返回列表 发新帖回复
楼主: diameter

[fx-9860/9750] 中文阅读器更新有望

[复制链接]
发表于 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[100] ;
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) ;
                else  return 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.
发表于 2011-3-11 14:52:50 | 显示全部楼层
楼上是什么源代码?
发表于 2013-4-30 17:22:18 | 显示全部楼层
厉害哈里还
发表于 2013-5-11 16:25:29 | 显示全部楼层
一屏六行10*10.  请教楼主在吗。 有时间了做个 10*10的 HZK10.DF 字库 文件呗。。。  等你半年了。。。。。
发表于 2013-5-11 18:39:04 | 显示全部楼层
很关心楼主高考啊
发表于 2013-6-17 00:09:30 | 显示全部楼层
学习一下
发表于 2021-6-26 18:41:51 | 显示全部楼层
支持做个10*10的 HZK10.DF
发表于 2021-7-5 13:15:29 | 显示全部楼层
有一个小字体叫丁卯点阵体的,提供了7x7,9x9大小,用在计算器上似乎不错
发表于 2022-6-16 09:09:05 | 显示全部楼层
顶,必须顶,这个好帖!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cnCalc计算器论坛

GMT+8, 2024-4-25 12:21 , Processed in 0.050060 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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