📄 takefont.c
字号:
/*-----------------------------------------------------------
函数 takefont : 从汉字库中取字模点阵
-----------------------------------------------------------*/
#include <mem.h>
#include <hanenv.h>
int _Cdecl takefont(h)
unsigned h; /* 汉字机内码 */
{
int size = _CurrentHZK->fonthigh*_CurrentHZK->fontwidth;
long pos,addr;
/*- 如果是小字库,则首先在索引中查找汉字在字库中的位置 -*/
if(_CurrentHZK->codelist)
{
for(pos=0;pos<_CurrentHZK->fontcount;pos++)
if(h==*((unsigned *)(_CurrentHZK->codelist+pos*2)))
{
pos *= size;
goto COPY;
}
return NO;
}
else
pos = (long)(((h&0xff)-161)*94+(h>>8)-161)*size;
COPY:
switch(_CurrentHZK->wherefont)
{
case DSK: /* 直接使用硬盘上的汉字库文件 */
fseek(_CurrentHZK->fontfile,pos,SEEK_SET);
fread(_HanFont,sizeof(char),size,_CurrentHZK->fontfile);
break;
case XMS: /* 汉字库已装载到扩充内存中(用XMS规范) */
_Emb.len = size;
_Emb.sour_han = _CurrentHZK->fonthandle;
_Emb.sour_off = pos;
_Emb.dest_han = 0;
_Emb.dest_off = FP_SEG(_HanFont);
_Emb.dest_off <<= 16;
_Emb.dest_off += FP_OFF(_HanFont);
_MoveDataXMS();
break;
case EMM: /* 汉字库已装载到扩充内存中(用INT15H) */
addr = FP_SEG(_HanFont);
addr = (addr<<4)+FP_OFF(_HanFont);
_SetDestAddr(addr,size);
addr = _CurrentHZK->EMM_addr+pos;
_SetSourAddr(addr,size);
_MoveDataEMM(size);
break;
case MEM: /* 汉字库已装载到常规内存中(仅限小字库) */
memcpy(_HanFont,_CurrentHZK->fontbuff+pos,size);
break;
}
return YES;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -