All pastes #92469 Raw Edit

Something

public c v1 · immutable
#92469 ·published 2006-07-19 15:59 UTC
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);}