📄 source.cpp
字号:
int i4=0,i, ii ,i3;
int handle = open("cclib16.fnt", O_BINARY | O_RDONLY);
static int num,i1,status=1,s_num=0;
oldLen = Test(filename, 10,60,1,0,color+1);
if ((file = fopen(filename, "rb")) == NULL)
{
ccouttext16(10, 30, 1, "文件打开失败或文件不存在!!", color,0,"",1,1);
closegraph();
exit(0);
}
mod = (unsigned long)fmod(oldLen,800);
num = int(oldLen/800);
if (num>=1)
Len = 800;
else
{
Len = oldLen;
num = 0;
}
for (i1 = 0 ; i1<num+1; i1++)
{
if (( i1 == num) && (num<1))
Len = oldLen;
if ((i1 == num) && (num>=1))
Len = mod;
for(int k=0; k<900; k++)
{
newhz[k] = 0x00;
savej[k] = -1;
if(k<4)
lhz[k] = 0x00;
}
fread(oldhz,Len,1,file);
for(int j=0; j<Len ; j=j+2)
if((oldhz[j]&0x80)&&(oldhz[j+1]&0x80))
{
for (i=j+2; i<Len ; i=2+i)
if((oldhz[i]&0x80)&&(oldhz[i+1]&0x80))
{
if(((int)oldhz[j] == (int)oldhz[i]) && ((int)oldhz[j+1] == (int)oldhz[i+1]))
{
fhz++;
s_num = 0;
sprintf(lhz,"%c%c",oldhz[j],oldhz[j+1]);
outcc16(x, y,*(long *)lhz,color,handle);
x = x + wd + 16;
savej[jj] = j;
jj++;
jj1++;
if (fhz == 20*i2)
{
x = 10;
y = y+20;
if (y >440)
{
getch();
cleardevice();
y =1;
}
i2++;
}
break;
}
}
}
i4 = 0;
for( i3=0,ii = 0 ; i3<Len ; i3=i3+2)
{
sprintf(lhz,"%c%c",oldhz[i3],oldhz[i3+1]);
if(i3 != savej[ii])
{
strcat(newhz,lhz);
i4 = i4 + 2;
}
else
ii ++;
}
if (i4 > 0)
{
fwrite(newhz, sizeof(char), strlen(newhz), newfile);
}
if (jj == 0)
s_num++;
if ((jj == 0 ) && (s_num == 5))
status = 0;
jj = 0;
}
close(handle);
fclose(file);
fclose(newfile);
if (y+30 >440)
{
getch();
cleardevice();
y =1;
}
ccouttext16(10,y+30, 1, "已经成功去掉重复汉字!! 共有 : ", color+3,2,"",jj1,1);
if ((y+60 >440) || (y +110 >440))
{
getch();
cleardevice();
y =1;
}
fclose(newfile);
Test(name, 10, y+60,1,1,color+1);
if (y+150 >440)
{
getch();
cleardevice();
y =1;
}
ccouttext16(10,y+160, 1, "生成无重复汉字文件 : ", color+2,1,"ENDHZ.DAT",1,1);
yy = y+160;
number ++;
return status;
}
int Check( char *Source, char* Des)
{
FILE *Sptr, *Dptr;
struct stat statbuf;
stat( Source, &statbuf);
long Filelength = statbuf.st_size;
char cc[2];
if( Filelength>60000 ) return 0;
Sptr=fopen( Source, "rt" );
if( Sptr==NULL ) return 0;
Dptr=fopen( Des, "wt" );
if( Dptr==NULL ) {fclose( Sptr ); return 0; }
char *Buf=new char[Filelength];
for( int m=0; m<Filelength; m++ )
{
Buf[m]='\0';
}
fgets( Buf, Filelength+1, Sptr );
fclose( Sptr );
int Cnt=0;
for( int i=0; i<Filelength; i+=2 )
{
for( int j=0; j<Filelength; j+=2 )
{
if( (Buf[i]&0x80!=0x80)&&(Buf[i+1]&0x80!=0x80) ) continue;
if( i==j ) continue;
if( Buf[i]==Buf[j] && Buf[i+1]==Buf[j+1] )
{
for( int h=j; h<Filelength-2; h+=2 )
{
Buf[h]=Buf[h+2];
Buf[h+1]=Buf[h+3];
}
Buf[Filelength-1]='\0';
Buf[Filelength-2]='\0';
}
}
}
fprintf( Dptr, "%s\n", Buf );
fclose( Dptr );
delete Buf;
for( i=0; i<Filelength; i++ )
{
if( Buf[i]=='\0' ) return i;
}
return i;
}
void Setwritemode(int style)
{
asm {
mov dx,3ceh
mov al,3
out dx,al
}
_AL = (char)style;
asm {
mov cl,3
shl al,cl
inc dx
out dx,al
}
}
int MLib( char *CHname, char* source )
{
char* cc=source;
char string[33];
FILE *lib, *mlib;
if( (lib=fopen("cclib16.fnt", "rb" ))==NULL ) return -1;
if( (mlib=fopen(CHname, "wb" ))==NULL )
{ fclose( lib ); return -1; }
for ( int i=0; i < 512; )
{
if (cc[0]=='\0') break;
if ((cc[0]&0x80)/128!=1) continue;
if (cc[1]=='\0') break;
if ((cc[0]&0x80)/128!=1) continue;
fseek( lib, (((long)((cc[0] & 0x7f)-32)-1L)*94
+ (long)((cc[1] & 0x7f)-32)-1L)*32, SEEK_SET );
fread( string, 32, 1, lib );
string[32]=0;
fwrite( string, 32, 1, mlib );
i++;
cc++;
cc++;
}
fclose(lib);
fclose(mlib);
return 0;
}
void CreatCPP( char* Buf )
{
FILE *Ptr;
Ptr=fopen( "source.h", "wt" );
if( Ptr==NULL ) return;
fprintf( Ptr, "//Created By Source.exe. Emtronix 2002\n" );
fprintf( Ptr, "char* source=\"%s\";\n", Buf );
fclose( Ptr );
}
int main(int argi, char** argv)
{
int color=11;
int driver, mode,status=1, i;
int wd = 1,y;
char name[14];
char source[1024];
char p[120], Bak[100][120], Bakto[120], pp[500];
struct ffblk ffblk;
driver = DETECT;
FILE *newfile, *orfile, *middfile;
initgraph(&driver, &mode, "");
setbkcolor(BLACK);
cleardevice();
ccinit();
ccouttext16((640-strlen("NETBOX 汉字全自动检索软件")*8)/2,160, 1, "NETBOX 汉字全自动检索软件", 11+2,1,"",1,1);
ccouttext16((640-strlen("Version 1.0")*8)/2,180, 1, "Version 1.0", 11+2,1,"",1,1);
ccouttext16((640-strlen("DOS version for NetBox20")*8)/2,270, 1, "DOS version for NetBox20", 11+3,1,"",1,1);
ccouttext16((640-strlen("(c)Copyright 2001 Emtronix Co.Ltd")*8)/2,290, 1, "(c)Copyright 2001 Emtronix Co.Ltd", 11+1,1,"",1,1);
getch();
cleardevice();
i=0;
if(argi>1)
{
remove("newhz.dat");
int done = findfirst( argv[1], &ffblk,0);
while(!done)
{
while (done)
{
ccouttext16(10, 30, 1, "打开文件失败或文件不存在!!", 10,0,"",1,1);
}
strcpy(Bak[i] , ffblk.ff_name);
done = findnext(&ffblk);
i++;
}
if(i >=100) i = 100;
for(int j=0; j<i; j++)
{
if ((newfile = fopen("newhz.dat", "at")) == NULL)
{
ccouttext16(10, 30, 1, "打开文件失败或文件不存在!!", 5,0,"newhz.dat",1,1);
return -1;
}
strcpy(Bakto, Bak[j]);
ccouttext16(10,10, 1, "正在收集的文件是 :", 10,1,Bakto,1,1);
y=Search(10,140,12,wd,Bakto, newfile,"newhz.dat");
ccouttext16(10,y+30, 1, "任意键继续......", 10,0,"",1,1);
getch();
cleardevice();
}
}
else
{
closegraph();
return 0;
}
fclose( newfile );
//sprintf( name, "newhz.dat" );
//status = Find(10,140,12,wd,name,newfile,"endhz.dat");
i=Check( "newhz.dat", "endhz.dat");
if( i>512 ) i=512;
ccouttext16(10,yy+30, 1, "测试生成文件信息 :",3,1,"ENDHZ.DAT",1,1);
Test("endhz.dat", 10, yy+60,1,2,13);
newfile=fopen( "endhz.dat", "rt" );
if( newfile!=NULL )
{
if( fgets( source, i+1, newfile )!=NULL )
{
MLib( "mlib.chr", source );
fclose( newfile );
yy+=140;
ccouttext16(10,yy+30, 1, "生成小汉字库文件信息: ",3,1,"MLIB.CHR",1,1);
CreatCPP( source );
}
}
else
{
fclose( newfile );
yy+=140;
ccouttext16(10,yy+30, 1, " 汉字库生成失败!",3,1,"",1,1);
}
getch();
closegraph();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -