菜鸟「求助」 西文DOS下显示16点阵汉字的问题
源代码在下面的可以运行,运行后只显示汉字“西文”,后面的“DOS下显示16点阵汉字”就没有了。然后在 char *Str="西文DOS下显示16点阵汉字" 语句中去掉“DOS”后,运行后就显示为“西文下显示” ……总之就是不能显示英文或数字,摸索不出来不知道怎么改,求指导
#include<conio.h>
#include<graphics.h>
#include<stdio.h>
#include<stdlib.h>
FILE *fp;
void InitGra(void);
int OpenLIB(void);
void Quit(void);
void PutCC16(int,int,int,int,char*Str);
void ErrMsg();
int main(void)
{
char *Str="西文DOS下显示16点阵汉字";
InitGra();
if(! OpenLIB())ErrMsg();
PutCC16(0,100,2,YELLOW,Str);
getch();
Quit();
return(0);
}
void InitGra(void)
{
int GraphDrive=DETECT,GraphMode;
registerbgidriver(EGAVGA_driver);
initgraph(&GraphDrive,&GraphMode,"C:\\TC30\\BGI");
}
int OpenLIB()
{
if((fp=fopen("C:\\TC30\\HZK16","rb"))==NULL) return(0);
return(1);
}
void Quit(void)
{
closegraph();
fcloseall();
exit(0);
}
void PutCC16(int x,int y,int Wid,int Color,char *Str)
{
unsigned Zcode,Bcode;
int i,j,k,Rec;
long Len;
char Buf[32];
while(*Str)
{
if ((*Str&0x80)&&(*(Str+1)&0x80))
{
Zcode=(*Str-0xa1)&0x07f;
Bcode=(*(Str+1)-0xa1)&0x07f;
Rec=Zcode*94+Bcode;
Len=Rec*32L;
fseek(fp,Len,SEEK_SET);
fread(Buf,1,32,fp);
for (i=0;i<16;i++)
for (j=0;j<2;j++)
for (k=0;k<8;k++)
if (Buf[i*2+j]>>(7-k)&1)
putpixel(x+j*8+k,y+i,Color);
x=x+16+Wid;
Str+=2;
}
}
return;
}
void ErrMsg()
{
printf("Open LIB File Error!");
getch();
Quit();
}