📄 auto.cpp
字号:
////////////////////////////////////////////////////
//自解压文件的源代码
#include <stdio.h>
#include <stdlib.h>
/*29014*/
double al_se=0;
double no_se=0;
double len_se=0;
double len_db=0;
int pe_num=0;
void main()
{
FILE *in;
FILE *out;
long unsigned int index;
unsigned char *len_date;
unsigned short last,af_length,cp_length;
unsigned char tem,ah,al;
unsigned int a;
unsigned int b;
unsigned int c,i,j;
long d=0;
long e;
unsigned int address;
char filena[20];
unsigned char co_len;
unsigned char fi_num;
long fi_len;
unsigned char fn_len;
int flag=1;
char thisfile[20]={"ak4gt7"};
char cxuan='n';
unsigned char neirong[15377];
unsigned short af_num,a_index,a_begin;
if((in=fopen(thisfile,"rb")) == NULL)
exit(0);
fseek(in,12288,0);
fread(&co_len,1,1,in);
fi_num=co_len;
for(;;)
{
d=0;
fi_len=0;
fn_len=0;
fread(&fn_len,1,1,in);
if(feof(in)) break;
fread(filena,fn_len,1,in);
if((out=fopen(filena,"wb")) == NULL)
exit(0);
fread(&fi_len,4,1,in);
al_se=no_se=0;
al_se=fi_len/16384+1;
while(1)
{
last=0;
af_length=0;
cp_length=0;
fread(&last,2,1,in);
if(last == 0) break;
fread(&af_length,2,1,in);
fread(&cp_length,2,1,in);
if(al_se-no_se >= 4)
len_se=last/4+3;
else
len_se=last/(al_se-no_se)+2;
if((len_date=(unsigned char *)malloc(cp_length))== NULL)
exit(0);
for(a=0;;)
{
fread(&tem,1,1,in);
len_date[a]=tem/16;
a++;
if(a == cp_length) break;
len_date[a]=tem%16;
a++;
if(a == cp_length) break;
}
af_num=15360;
a_index=a_begin=0;
for(a=b=0;a<last;)
{
if(a>=af_num)
{
fwrite(neirong,a_index,1,out);
a_begin=a;
af_num+=a_index;
a_index=0;
}
fread(&tem,1,1,in);
if(tem != 255) {neirong[a_index]=tem;a++;a_index++;}
else
{
if(len_date[b] == 0) {neirong[a_index]=tem;a++;a_index++;}
else
{
c=len_date[b]+2;
fread(&ah,1,1,in);
fread(&al,1,1,in);
address=ah*256+al;
if(address >= a_begin)
{
for(i=0;i<c;i++)
neirong[a_index+i]=neirong[address-a_begin+i];
a_index+=c;
a+=c;
}
else
{
e=(long)address;
e+=d;
fclose(out);
if((out=fopen(filena,"ab+")) == NULL)
exit(0);
fseek(out,0,SEEK_END);
index=ftell(out);
if((index-c)>=e)
{
fseek(out,e,SEEK_SET);
fread(neirong+a_index,c,1,out);
a_index+=c;
}
else
{
j=index-e;
fseek(out,e,0);
fread(neirong+a_index,j,1,out);
a_index+=j;
for(i=0;i<c-j;i++)
neirong[a_index+i]=neirong[a_begin+i];
a_index=a_index-j+c;
}
fseek(out,index,0);
a+=c;
}
}
b++;
}
}
fwrite(neirong,a_index,1,out);
free(len_date);
d+=last;
}
fclose(out);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -