# include <stdio.h>
# include <stdlib.h>
# include <graphics.h>
# include <conio.h>
# include <string.h>
FILE *fp;
void main (void)
{
unsigned char point[2],index[4];
unsigned char c[256],point_num=96,ofs=32;
char fontname[15]="goth.chr";
long index_ofs,char_ofs,addr;
int start_x,start_y,end_x,end_y;
int i,char_size=32;
int Il,lc,char_num,line_num,maxwidth=600,maxhight=480;
int x_rate=2,y_rate=2;
int color=255,coord_x=0,coord_y=0;
int GraphDriver=0,GraphMode=0;
system("cls");
initgraph(&GraphDriver,&GraphMode,"d:\\progra~1\\tc2.01\\bgi");
setcolor(color);
if((fp=fopen(fontname,"rb"))==NULL)
{
printf("Can not open file %s!",fontname);
exit(0);
}
/* fseek(fp,129,SEEK_SET);
fread(&point_num,1,1,fp);
fseek(fp,132,SEEK_SET);
fread(&ofs,1,1,fp); */
printf("point_num is %d\n",point_num);
printf("ofs is %d\n",ofs);
for(i=0;i<point_num;i++)
c[i]=(char)(i+ofs);
c[i]='0';
/*for(i=0;i<point_num;i++)
printf("%c\n",c[i]);*/
Il=0;lc=0;
char_num=(maxwidth-coord_x)/x_rate/char_size;
line_num=(maxhight-coord_y)/y_rate/char_size;
i=0;
while(c[i])
{
/* addr=(long)(0xA6+point_num*3); */
addr=(long)0x1CE;
index_ofs=(long)(0xA6+(c[i]-(int)ofs)*2);
fseek(fp,index_ofs,SEEK_SET);
fread(index,2,1,fp);
char_ofs=(long)(addr+index[1]*256+index[0]);
fseek(fp,char_ofs,SEEK_SET);
fread(point,2,1,fp);
start_x=(int)(point[0]-128)*x_rate;
if((int)point[1]>char_size)
start_y=(int)(point[1]-128)*y_rate;
else
start_y=(int)point[1]*y_rate;
fread(point,2,1,fp);
end_x=(int)(point[0]-128)*x_rate;
if((int)(point[1])>160)
end_y=(int)(point[1]-256)*y_rate;
else
end_y=(int)(point[1]-128)*y_rate;
while((point[0]!=0)||(point[1]!=0))
{
line(lc*x_rate*char_size+start_x+coord_x,
(Il+1)*y_rate*char_size-start_y+coord_y,
lc*x_rate*char_size+end_x+coord_x,
(Il+1)*y_rate*char_size-end_y+coord_y);
fread(point,2,1,fp);
if((int)point[1]>=128)
{
start_x=end_x;
start_y=end_y;
end_x=(int)(point[0]-128)*x_rate;
if((int)(point[1])>160)
end_y=(int)(point[1]-256)*y_rate;
else
end_y=(int)(point[1]-128)*y_rate;
}
else
{
start_x=(int)(point[0]-128)*x_rate;
if((int)point[1]>char_size)
start_y=(int)(point[1]-128)*y_rate;
else
start_y=(int)point[1]*y_rate;
fread(point,2,1,fp);
if((point[0]==0)&&(point[1]==0))
break;
end_x=(int)(point[0]-128)*x_rate;
if((int)(point[1])>128+char_size)
end_y=(int)(point[1]-256)*y_rate;
else
if((int)point[1]>char_size)
end_y=(int)(point[1]-128)*y_rate;
else
end_y=(int)point[1]*y_rate;
}
}
i++;lc++;
if(lc>char_num)
{
lc=0;Il++;
if(Il>=line_num)
{
Il=0;
if(getch()==27)
{
fclose(fp);
closegraph();
exit(0);
}
cleardevice();
}
}
}
getch();
fclose(fp);
closegraph();
}
评论0