18 #define MAXCHUNK (2048*1024) 20 static unsigned int seed;
29 seed = (seed * 2109 + 9273) & 0x7fff;
30 return (seed + 0xc000) & 0xffff;
33 void load(FILE *fh,
unsigned char *ptr,
unsigned long sz)
35 if(fread(ptr, 1, sz, fh) != sz)
37 fprintf(stderr,
"Read error!\n");
42 void load_chunk(FILE *fh,
unsigned char *ptr,
unsigned long sz)
52 for(i = 0; i < (int)sz; i++)
55 for(i = sz-1; i >= 0; --i)
66 load(fh, ptr+32*idx[i], 32);
70 void load_file(FILE *fh,
unsigned char *ptr,
unsigned long filesz)
72 unsigned long chunksz;
78 for(chunksz =
MAXCHUNK; chunksz >= 32; chunksz >>= 1)
79 while(filesz >= chunksz)
88 load(fh, ptr, filesz);
91 void read_file(
char *filename,
unsigned char **ptr,
unsigned long *sz)
93 FILE *fh = fopen(filename,
"rb");
96 fprintf(stderr,
"Can't open \"%s\".\n", filename);
99 if(fseek(fh, 0, SEEK_END)<0)
101 fprintf(stderr,
"Seek error.\n");
105 *ptr = (
unsigned char *) malloc(*sz);
108 fprintf(stderr,
"Out of memory.\n");
111 if(fseek(fh, 0, SEEK_SET)<0)
113 fprintf(stderr,
"Seek error.\n");
120 void save(FILE *fh,
unsigned char *ptr,
unsigned long sz)
122 if(fwrite(ptr, 1, sz, fh) != sz)
124 fprintf(stderr,
"Write error!\n");
129 void save_chunk(FILE *fh,
unsigned char *ptr,
unsigned long sz)
139 for(i = 0; i < (int)sz; i++)
142 for(i = sz-1; i >= 0; --i)
153 save(fh, ptr+32*idx[i], 32);
157 void save_file(FILE *fh,
unsigned char *ptr,
unsigned long filesz)
159 unsigned long chunksz;
165 for(chunksz =
MAXCHUNK; chunksz >= 32; chunksz >>= 1)
166 while(filesz >= chunksz)
175 save(fh, ptr, filesz);
178 void write_file(
char *filename,
unsigned char *ptr,
unsigned long sz)
180 FILE *fh = fopen(filename,
"wb");
183 fprintf(stderr,
"Can't open \"%s\".\n", filename);
192 unsigned char *ptr = NULL;
193 unsigned long sz = 0;
198 fh = fopen(dst,
"wb");
201 fprintf(stderr,
"Can't open \"%s\".\n", dst);
204 if( fwrite(ptr, 1, sz, fh) != sz )
206 fprintf(stderr,
"Write error.\n");
215 unsigned char *ptr = NULL;
216 unsigned long sz = 0;
219 fh = fopen(src,
"rb");
222 fprintf(stderr,
"Can't open \"%s\".\n", src);
225 if(fseek(fh, 0, SEEK_END)<0)
227 fprintf(stderr,
"Seek error.\n");
231 ptr = (
unsigned char *) malloc(sz);
234 fprintf(stderr,
"Out of memory.\n");
237 if(fseek(fh, 0, SEEK_SET)<0)
239 fprintf(stderr,
"Seek error.\n");
242 if( fread(ptr, 1, sz, fh) != sz )
244 fprintf(stderr,
"Read error.\n");
257 int main(
int argc,
char *argv[])
261 if(argc > 1 && !strcmp(argv[1],
"-d"))
266 fprintf(stderr,
"Usage: %s [-d] from to\n", argv[0]);
void write_file(char *filename, unsigned char *ptr, unsigned long sz)
void read_file(char *filename, unsigned char **ptr, unsigned long *sz)
void dreamcast_descramble(char *src, char *dst)
void load_chunk(FILE *fh, unsigned char *ptr, unsigned long sz)
void scramble(char *src, char *dst)
void save(FILE *fh, unsigned char *ptr, unsigned long sz)
int main(int argc, char *argv[])
void save_chunk(FILE *fh, unsigned char *ptr, unsigned long sz)
void load_file(FILE *fh, unsigned char *ptr, unsigned long filesz)
void load(FILE *fh, unsigned char *ptr, unsigned long sz)
void save_file(FILE *fh, unsigned char *ptr, unsigned long filesz)
void my_srand(unsigned int n)
unsigned int my_rand(void)