📄
字号:
if(x>=x1+maxwidth)
{
x=x1;
y=y+45;
}
}
}
return(y+60);
}
int chinese::puthz48(int x,int y,int z,int color,char *p,int maxwidth,int flag)
{
unsigned int i,c1,c2,c3,f=0;
int i1,i2,i3,rec,x1;
long l;
char by[270];
x1=x;
if (flag==2) x=x+96;
while ((i=*p++)!=0)
{
if(i>0xa1)
if(f==0)
{
c1=(i-0xb0)&0x7f;
f=1;
}
else
{
c2=(i-0xa1)&0x7f;
f=0;
rec=c1*94+c2;
l=rec*270l;
fseek(handle,l,SEEK_SET);
fread(by,270,1,handle);
for (i1=0;i1<45;i1++)
for(i2=0;i2<=2;i2++)
for(i3=0;i3<8;i3++)
if(getbit(by[i1*3+i2],7-i3))
putpixel(x+i1,y+i2*8+i3,color);
/*for (i1=45;i1<90;i1++)
for(i2=0;i2<3;i2++)
for(i3=0;i3<8;i3++)
if(getbit(by[i1*3+i2],7-i3))
putpixel(x+i1-45,y+24+i2*8+i3,color);*/
x=x+45+z;
if(x>=x1+maxwidth)
{
x=x1;
y=y+80;
}
}
}
return(y+80);
}
int chinese::puthz24rat(int x,int y,int z,int color,char *p,char d,int angle)
{
unsigned int i,c1,c2,f=0;
int i1,i2,i3,rec;
long l;
char by[72];
while ((i=*p++)!=0)
{
if(i>0xa1)
if(f==0)
{
c1=(i-0xb0)&0x7f;
f=1;
}
else
{
c2=(i-0xa1)&0x7f;
f=0;
rec=c1*94+c2;
l=rec*72l;
fseek(handle,l,SEEK_SET);
fread(by,72,1,handle);
for (i1=0;i1<24;i1++)
for(i2=0;i2<=2;i2++)
for(i3=0;i3<8;i3++)
if(getbit(by[i1*3+i2],7-i3))
putpixel(x+i1,y+i2*8+i3,color);
if(angle==90)
for (i1=0;i1<24;i1++)
for(i2=0;i2<=2;i2++)
for(i3=0;i3<8;i3++)
if(getbit(by[i1*3+i2],7-i3))
putpixel(x+i2*8+i3,y-i1,color);
if(d=='h')
x=x+24+z;
if(d=='v')
{
if(angle==0)
y=y+24+z;
if(angle==90)
y=y-24-z;
}
}
}
return(x);
}
int chinese::puthz24ext(int x,int y,int z,int color,int m,int n,char *p)
{
unsigned int i,c1,c2,f=0;
int i1,i2,i3,i4,i5,rec;
long l;
char by[72];
while ((i=*p++)!=0)
{
if(i>0xa1)
if(f==0)
{
c1=(i-0xb0)&0x7f;
f=1;
}
else
{
c2=(i-0xa1)&0x7f;
f=0;
rec=c1*94+c2;
l=rec*72l;
fseek(handle,l,SEEK_SET);
fread(by,72,1,handle);
for (i1=0;i1<24*m;i1+=m)
for(i4=0;i4<m;i4++)
for(i2=0;i2<=2;i2++)
for(i3=0;i3<8;i3++)
if(getbit(by[i1/m*3+i2],7-i3))
for(i5=0;i5<n;i5++)
putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
x=x+24*m+z;
}
}
return(x);
}
void showHanzi(unsigned char qw,unsigned char wm,int x,int y)
{
long int firstIndex,secondIndex,wordOffset;
unsigned char indexValue[2][3],case8Data[20];
int xx[4],yy[4],curX,curY,i,j;
char controlWord;
setcolor(Color);
byteNum_0=0;readCount_0=0;
wordOffset=72*94*3;
fseek(handle,wordOffset,SEEK_SET);
fread(indexValue[0],3,1,handle);
secondIndex=(long)indexValue[0][2]*65536+(long)indexValue[0][1]*256+(long)indexValue[0][0];
wordOffset=(((long)qw-16)*94+wm-1)*3;
fseek(handle,wordOffset,SEEK_SET);
fread(indexValue[0],3,1,handle);
fread(indexValue[1],3,1,handle);
firstIndex=(long)indexValue[0][2]*65536+(long)indexValue[0][1]*256+(long)indexValue[0][0];
byteNum_0=(long)indexValue[1][2]*65536+(long)indexValue[1][1]*256+(long)indexValue[1][0]-firstIndex;
wordCont_0=(unsigned char *)malloc(byteNum_0);
if(!wordCont_0){
printf("Out of memory-1!\n");
exit(0);}
fseek(handle,firstIndex,SEEK_SET);
fread(wordCont_0,1,byteNum_0,handle);
while(1){
if(readCount_0>=(2*byteNum_0)) break;
controlWord=myRead_0();
if(controlWord<=7)
otherHandle(0,controlWord,1.0,1.0,x,y,&curX,&curY);
else{
setcolor(Color);
case8Data[0]=controlWord;
for(i=1;i<11;i++)
case8Data[i]=myRead_0();
case8Handle(handle,case8Data,secondIndex,x,y);
setcolor(Color);
}
}
free(wordCont_0);
//fclose(handle);
}
void otherHandle(int fnNo,unsigned char controlWord,double facX,double facY,int xc,int yc,int *curX,int *curY)
{
int xx[4],yy[4],i,j;
switch(controlWord){
case 0:
xx[0]=(int)fn[fnNo]()*16+fn[fnNo]();
yy[0]=(int)fn[fnNo]()*16+fn[fnNo]();
xx[0]=scalceX*xx[0]*facX;
yy[0]=scalceY*yy[0]*facY;
xx[0]+=xc;yy[0]+=yc;
moveto(xx[0],yy[0]);
*curX=xx[0];*curY=yy[0];
break;
case 1:
xx[0]=(int)fn[fnNo]()*16+fn[fnNo]();
xx[0]=scalceX*xx[0]*facX;
xx[0]+=xc;
lineto(xx[0],*curY);
*curX=xx[0];
break;
case 2:
yy[0]=(int)fn[fnNo]()*16+fn[fnNo]();
yy[0]=scalceY*yy[0]*facY;
yy[0]+=yc;
lineto(*curX,yy[0]);
*curY=yy[0];
break;
case 3:
xx[0]=(int)fn[fnNo]()*16+fn[fnNo]();
yy[0]=(int)fn[fnNo]()*16+fn[fnNo]();
xx[0]=scalceX*xx[0]*facX;
yy[0]=scalceY*yy[0]*facY;
xx[0]+=xc;yy[0]+=yc;
lineto(xx[0],yy[0]);
*curX=xx[0];*curY=yy[0];
break;
case 4:
xx[0]=*curX;yy[0]=*curY;
xx[1]=(int)fn[fnNo]()*16+fn[fnNo]();
yy[1]=(int)fn[fnNo]()*16+fn[fnNo]();
xx[2]=(int)fn[fnNo]()*16+fn[fnNo]();
yy[2]=(int)fn[fnNo]()*16+fn[fnNo]();
xx[1]=scalceX*xx[1]*facX;
yy[1]=scalceY*yy[1]*facY;
xx[2]=scalceX*xx[2]*facX;
yy[2]=scalceY*yy[2]*facY;
xx[1]+=xc;yy[1]+=yc;
xx[2]+=xc;yy[2]+=yc;
xx[3]=xx[2];yy[3]=yy[2];
b3_4(xx,yy);
*curX=xx[2];*curY=yy[2];
moveto(*curX,*curY);
break;
case 5:
xx[0]=*curX;yy[0]=*curY;
xx[1]=(int)fn[fnNo]()*16+fn[fnNo]();
yy[1]=(int)fn[fnNo]()*16+fn[fnNo]();
xx[2]=(int)fn[fnNo]()*16+fn[fnNo]();
yy[2]=(int)fn[fnNo]()*16+fn[fnNo]();
xx[3]=(int)fn[fnNo]()*16+fn[fnNo]();
yy[3]=(int)fn[fnNo]()*16+fn[fnNo]();
xx[1]=scalceX*xx[1]*facX;
yy[1]=scalceY*yy[1]*facY;
xx[2]=scalceX*xx[2]*facX;
yy[2]=scalceY*yy[2]*facY;
xx[3]=scalceX*xx[3]*facX;
yy[3]=scalceY*yy[3]*facY;
for(i=1;i<4;i++)
{
xx[i]+=xc;yy[i]+=yc;}
b3_4(xx,yy);
*curX=xx[3];*curY=yy[3];
moveto(*curX,*curY);
break;
case 6:
xx[0]=(int)fn[fnNo]()*16+fn[fnNo]();
yy[0]=(int)fn[fnNo]()*16+fn[fnNo]();
xx[1]=(int)fn[fnNo]()*16+fn[fnNo]();
yy[1]=(int)fn[fnNo]()*16+fn[fnNo]();
xx[0]=scalceX*xx[0]*facX;
yy[0]=scalceY*yy[0]*facY;
xx[1]=scalceX*xx[1]*facX;
yy[1]=scalceY*yy[1]*facY;
for(i=0;i<2;i++){
xx[i]+=xc;yy[i]+=yc;}
rectangle(xx[0],yy[0],xx[1],yy[1]);
*curX=xx[1];*curY=yy[1];
moveto(*curX,*curY);
break;
case 7:
printf("Case 7 is not used!\n");
exit(0);}
}
void case8Handle(FILE *handle,unsigned char *case8Data,long basePtr,int x0,int y0)
{
long subIndexPtr;
unsigned char subIndexValue[2][3],controlWord;
int curX,curY,xc,yc,subOrder;
double facX,facY;
byteNum_8=0;readCount_8=0;
if(case8Data[0]==0x8){
subOrder=case8Data[1]*16+case8Data[2]-8;
xc=case8Data[3]*16+case8Data[4];
yc=case8Data[5]*16+case8Data[6];
facX=(case8Data[7]*16+case8Data[8])/100.0;
facY=(case8Data[9]*16+case8Data[10])/100.0;}
else{
if(case8Data[0]==0x9)
subOrder=case8Data[9]*16+case8Data[10]+0xf6;
else
subOrder=case8Data[9]*16+case8Data[10]+0x1f6;
xc=case8Data[1]*16+case8Data[2];
yc=case8Data[3]*16+case8Data[4];
facX=(case8Data[5]*16+case8Data[6])/100.0;
facY=(case8Data[7]*16+case8Data[8])/100.0;}
xc*=scalceX;yc*=scalceY;
xc+=x0;yc+=y0;
fseek(handle,basePtr+subOrder*3,SEEK_SET);
fread(subIndexValue[0],3,1,handle);
fread(subIndexValue[1],3,1,handle);
subIndexPtr=(long)subIndexValue[0][2]*65536+(long)subIndexValue[0][1]*256+subIndexValue[0][0];
byteNum_8=(long)subIndexValue[1][2]*65536+(long)subIndexValue[1][1]*256+subIndexValue[1][0]-subIndexPtr;
subIndexPtr+=basePtr;
wordCont_8=(unsigned char *)malloc(byteNum_8);
if(!wordCont_8){
printf("Out of memory-2\n");
exit(0);}
fseek(handle,subIndexPtr,SEEK_SET);
fread(wordCont_8,1,byteNum_8,handle);
while(1){
if(readCount_8>=(byteNum_8*2)) break;
controlWord=myRead_8();
otherHandle(1,controlWord,facX,facY,xc,yc,&curX,&curY);
}
free(wordCont_8);
}
unsigned char myRead_8(void)
{ return(0x0f&(wordCont_8[readCount_8/2]>>((1-((readCount_8++)%2))*4)));}
unsigned char myRead_0(void)
{ return(0x0f&(wordCont_0[readCount_0/2]>>((1-((readCount_0++)%2))*4)));}
void b3_4(int *x,int *y)
{ int i,n,k,*bx,*by;
double a,b,c,d,dt,xx,f0_3,f_0,f_1,f_2;
n=100;
bx=(int *)malloc(n*sizeof(int));
by=(int *)malloc(n*sizeof(int));
if((!bx)||(!by)){
printf("Memory Error-3!");
exit(0);}
dt=(double)1/(double)n;
a=((-1)*x[0]+3*x[1]-3*x[2]+x[3]);
b=3*(x[0]-2*x[1]+x[2]);
c=3*(x[1]-x[0]);d=x[0];
f0_3=6*a*dt*dt*dt;f_2=f0_3+2*b*dt*dt;
f_1=f0_3/6+b*dt*dt+c*dt;f_0=d;
bx[0]=x[0];
for(i=1;i<n;i++){
f_0=f_0+f_1;bx[i]=f_0+0.5;
f_1=f_1+f_2;f_2=f_2+f0_3;}
a=((-1)*y[0]+3*y[1]-3*y[2]+y[3]);
b=3*(y[0]-2*y[1]+y[2]);
c=3*(y[1]-y[0]);d=y[0];
f0_3=6*a*dt*dt*dt;f_2=f0_3+2*b*dt*dt;
f_1=f0_3/6+b*dt*dt+c*dt;f_0=d;
by[0]=y[0];
for(i=1;i<n;i++){
f_0=f_0+f_1;by[i]=f_0+0.5;
f_1=f_1+f_2;f_2=f_2+f0_3;}
moveto(bx[0],by[0]);
for(i=1;i<n;i++)
if((bx[i]!=bx[i-1])||(by[i]!=by[i-1]))
lineto(bx[i],by[i]);
lineto(x[3],y[3]);
free(bx);
free(by);
}
int chinese::putps(int x,int y,int z,int color,char *p,double m,double n)
{
unsigned int i,c1,c2,f=0;
scalceX=m;scalceY=n;
Color=color;
while ((i=*p++)!=0)
{
if(i>0xa1)
if(f==0)
{
c1=(i-160)&0x7f;
f=1;
}
else
{
c2=(i-160)&0x7f;
f=0;
showHanzi(c1,c2,x,y);
x=x+150*m+z;
}
}
return(x);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -