]>
git.zerfleddert.de Git - rsbs2/blob - rsb-lz.c
b45f0f8dc27939c160d958c188afd39e597b4580
9 #include "filesystem.h"
11 void err_exit(const char *fname
)
13 fprintf(stderr
,"%s: error extracting...\n", fname
);
18 unsigned char *start
; /* 0 */
19 unsigned char *stop
; /* 4 */
20 unsigned char bit
; /* 8 */
21 unsigned char x
; /* 9 */
29 unsigned char fn_597c8(struct data_in_s
*r6_data
)
50 unsigned int fn_59848(struct data_in_s
*r6_data
)
58 r6_data
->x
= fn_597c8(r6_data
);
79 unsigned int fn_598b4(struct data_in_s
*r11_data
, unsigned int r10_arg2
)
93 r1
= fn_597c8(r11_data
);
110 r11_data
->bit
= 0x80;
117 void fn_5980c(unsigned int arg1
, struct data_out_s
*data_out
)
126 printf("r1: 0x%08x, r2: 0x%08x\n", (unsigned int)r1
, (unsigned int)r2
);
136 void lz_expand(struct data_in_s
*r10_data
, struct data_out_s
*data_out
)
144 unsigned char arr_59b64
[2048];
150 r2
= fn_59848(r10_data
);
154 r2
= fn_598b4(r10_data
, 8) & 0xff;
157 fn_5980c(r4
, data_out
);
158 arr_59b64
[r5
] = r4
& 0xff;
165 r11
= fn_598b4(r10_data
, 0x0a);
169 r2
= fn_598b4(r10_data
, 0x04);
177 fn_5980c(r4
, data_out
);
188 unsigned int crc_check_59684(unsigned char *arg1
, unsigned int arg2
, unsigned int magic
)
200 r4
= *((unsigned int*)arg1
+ 0x20);
201 r5
= *((unsigned int*)arg1
+ 0x24);
203 printf("magic: 0x%08x <-> 0x%08x\n", r5
, magic
);
212 r5
= ~rsb_crc(~0x00, arg1
, r4
);
213 r3
= *((unsigned int*)(arg1
+ r4
));
214 printf("Checksums: 0x%02x <-> 0x%02x\n", r5
, r3
);
222 void extract_lz_file(unsigned char *inbuf
, unsigned char *name
)
225 unsigned char *outbuf
;
226 struct data_in_s data_in
;
227 struct data_out_s data_out
;
229 if (*((unsigned int*)inbuf
) != LZ_MAGIC
)
232 len
= *((unsigned int*)(inbuf
+ 4));
233 printf(", length: %d", len
);
235 if ((outbuf
= malloc(len
)) == NULL
) {
242 data_in
.start
= inbuf
+ 8;
243 data_in
.stop
= inbuf
+ len
;
247 data_out
.pos
= outbuf
;
248 data_out
.end
= outbuf
+ len
;
250 lz_expand(&data_in
, &data_out
);
253 /* This seems to still be completely broken */
255 r5
= *((unsigned int*)r3
);
257 if ((ret
= crc_check_59684(r7
, r5
, 0x46335053)) != 0) {
258 printf("crc_check return: %d\n", ret
);
263 write_file((char*)name
, outbuf
, len
);