rendered paste body#include <sys/types.h>#include <sys/stat.h>//#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#define split_number 8FILE *outf[split_number*split_number];char *f_names;void open_files() { char names[1024]; int i; for (i=0;i<split_number*split_number;i++) { sprintf(names,"%s_%u.dat",f_names,i); outf[i]=fopen(names,"wb"); };}void stat_file(unsigned int num, struct stat *buf) { char name[1024]; sprintf(name,"%s_%u.dat",f_names,num); stat(name,buf);}void dump_file(unsigned int num, FILE *outf) { FILE *inf; char name[1024]; char b; sprintf(name,"%s_%u.dat",f_names,num); inf=fopen(name,"rb"); for (;;) { fread(&b,1,1,inf); if (feof(inf)) break; fwrite(&b,1,1,outf); };}void close_files() { int i; for (i=0;i<split_number*split_number;i++) { fclose(outf[i]); };}void write_out(unsigned int x, unsigned int y, char *buf, int bufp) { unsigned int p; unsigned int x1,y1; x1=x/(256/split_number); y1=y/(256/split_number); p=x1*split_number+y1; fwrite(buf,bufp+2,1,outf[p]);};int main (int argc, char **argv) { FILE *inf; FILE *outf; int j,i; char buf[65535]; unsigned int buf_pointer; union { char a[2]; unsigned short int b_int; } bb; struct { unsigned long f_offset; unsigned long f_len; } f_header[64]; unsigned long global_len; struct stat f_stat; unsigned int x,y; int r; char inf_n[1024]; if (argc<2) { printf("Usage: convert <filename> <--- w/o .dat\n Result: <filename>.l2j\n"); exit(0); }; f_names=argv[1]; sprintf(inf_n,"%s.dat",f_names); inf=fopen(inf_n,"r"); open_files(); fseek(inf,18,SEEK_SET); for (x=0;x<256;x++) { for (y=0;y<256;y++) { buf_pointer=0; r=fread(&buf[buf_pointer],2,1,inf); bb.a[1]=buf[buf_pointer+1]; bb.a[0]=buf[buf_pointer]; if (bb.b_int>2048) { printf("error %u\n",bb.b_int); exit(1); }; if (bb.b_int==0) { buf_pointer+=2; r=fread(&buf[buf_pointer],2,1,inf); buf_pointer+=2; r=fread(&buf[buf_pointer],2,1,inf); write_out(x,y,&buf[0],buf_pointer); } else if ( bb.b_int == 64) { for (i=0;i<64;i++) { buf_pointer+=2; r=fread(&buf[buf_pointer],2,1,inf); }; write_out(x,y,&buf[0],buf_pointer); } else { for (i=0;i<64;i++) { buf_pointer+=2; r=fread(&buf[buf_pointer],2,1,inf); bb.a[1]=buf[buf_pointer+1]; bb.a[0]=buf[buf_pointer]; for (j=0;j<bb.b_int;j++) { buf_pointer+=2; r=fread(&buf[buf_pointer],2,1,inf); }; }; write_out(x,y,&buf[0],buf_pointer); }; }; }; fclose(inf); close_files(); sprintf(inf_n,"%s.l2j",f_names); outf=fopen(inf_n,"wb"); for (i=0;i<64;i++) { f_header[i].f_offset=0; f_header[i].f_len=0; }; global_len=sizeof(f_header); for (i=0;i<64;i++) { stat_file(i,&f_stat); f_header[i].f_offset=global_len; f_header[i].f_len=f_stat.st_size; global_len+=f_stat.st_size; }; fwrite(&f_header,sizeof(f_header),1,outf); for (i=0;i<64;i++) dump_file(i,outf); fclose(outf);}