📄 hzprintf.c
字号:
/*汉字在hzk16中是以区位码来存储的,每区存放94个汉字,因此 记录号=区号*94+位号,而每个汉字的字模信息占32个字节,因此 字模在文件中的地址=记录号*32.再从这个地址往下读32个字节即是它的字模信息.
*可以根据汉字的机器内码计算出汉字的区位码,规则:区号=机器内码高字节-0xa1 位号=机器内码低字节-0xa1.
*/
#include <graphics.h>
#include <stdio.h>
#include <dos.h>
int InitHz(void);
int OutHzxy(int x, int y, char *str);
static FILE *fphz;
int InitHz(void)
{
if(VGAHI == getgraphmode())
{
if((fphz = fopen("hzk16", "rb")) != 0)
return 0;
else
return 1;
}
else
return 2;
}
int OutHzxy(int x, int y, char *str)
{
//用setcolor()设置字的颜色
unsigned int qu, wei, rec, i, j;
long len;
unsigned char buf, bufch = {0};
struct linesettingstype ls;
struct textsettingstype ts;
setcolor(WHITE);
gettextsettings(&ts);
settextstyle(SMALL_FONT, HORIZ_DIR, 6);
getlinesettings(&ls);
while(*str)
{
if((*str & 0x80) && (*(str + 1) & 0x80))
{
qu = (*str++ - 0xa1) & 0x7f;
wei = (*str++ - 0xa1) & 0x7f;
rec = qu * 94 + wei;
len = rec * 32L;
fseek(fphz, len, SEEK_SET);
fread(buf, 32, 1, fphz);
for(i = 0;i < 16;i++)
{
j = buf;
j = (j << 8) | buf;
setlinestyle(USERBIT_LINE, j, NORM_WIDTH);
line(x + 15, y + i, x, y + i);
}
x += 16;
}
else
{
bufch = *str++;
outtextxy(x, y - 3, (char *) bufch);
x += 8;
}
}
setlinestyle(ls.linestyle, ls.upattern, ls.thickness);
settextstyle(ts.font, ts.direction, ts.charsize);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -