/*
char.c
字符显示相关函数实现
最后修改: 2007-06-19
*/
#include "char.h"
#include
#include "graph.h"
FILE *g_pfHZK16, *g_pfASC16;
char OpenCharSet() /* 打开字库 */
{
g_pfASC16=fopen("ASC16", "rb");
g_pfHZK16=fopen("HZK16", "rb");
if(g_pfASC16!=NULL||g_pfHZK16!=NULL) return 1;
else return 0;
}
void CloseCharSet() /* 关闭字库 */
{
if(g_pfASC16!=NULL) fclose(g_pfASC16);
if(g_pfHZK16!=NULL) fclose(g_pfHZK16);
}
void PrintChar(int nX, int nY, char cChar, char byColor, char byBgColor) /* 显示英文字符 */
{
int i, j;
char mat[16];
unsigned char mask;
fseek(g_pfASC16, cChar*16, SEEK_SET);
fread(mat, 16, 1, g_pfASC16);
for(j=0;j {
mask=0x80;
for(i=0;i {
if(i%8==0) mask=0x80;
if(mat[j]&mask) PutPix(nX+i, nY+j, byColor);
else PutPix(nX+i, nY+j, byBgColor);
mask=(mask>>1);
}
}
}
void DispHZ(int nX, int nY, char cChar[2], char byColor, char byBgColor) /* 显示汉字 */
{
int i, j;
unsigned char qh, wh;
unsigned long offset;
char mat[32];
unsigned char mask;
qh = cChar[0] - 0xa0;
wh = cChar[1] - 0xa0;
offset = (94*(qh - 1) + (wh - 1)) * 32L;
fseek(g_pfHZK16, offset, SEEK_SET);
fread(mat, 32, 1, g_pfHZK16);
for(j=0;j {
for(i=0;i {
if(i%8==0) mask=0x80;
if(mat[j*2+i/8]&mask) PutPix(nX+i, nY+j, byColor);
else PutPix(nX+i, nY+j, byBgColor);
mask=(mask>>1);
}
}
}
void OutTextXY(int nX1, int nY1, int nX2, int nY2, char szText[], char byColor, char byBgColor)
/* 定点显示文本, 可以中英文混合 */
{
int i=nX1, j=nY1;
char *str=szText;
while((i {
if(*str=='\n')
{
if(i!=nX1) /* 不是刚换行 */
{
i=nX1; /* 换行 */
j+=16;
}
str++;
}
else if(*str>0) /* 英文 */
{
if(i>nX2-7)
{
i=nX1;
j+=16;
}
PrintChar(i, j, *str, byColor, byBgColor);
str++;
i+=8;
}
else
{
if(i>nX2-15)
{
i=nX1;
j+=16;
}
DispHZ(i, j, str, byColor, byBgColor);
str+=2;
i+=16;
}
}
}
/*
unsigned char far *g_pbyRomChar=(char far *)0xF000FA6EL; // BIOS 中存放字符的首地址
void PrintChar(int nX, int nY, char cChar, char byColor, char byBgColor) // 显示字符
{
int i, j;
unsigned char far *p;
unsigned char mask;
p=g_pbyRomChar+(cChar for(j=nY;j {
mask=0x80;
for(i=nX;i {
if(((*p)&mask)) PutPix(i, j, byColor);
else PutPix(i, j, byBgColor);
mask=(mask>>1);
}
p++;
}
}
*/