#include #include #include #include "lzss.h" #include "fileutils.h" void process_one_file(int f, int d, int n) { char nom_du_fichier[100]; char zeros[4] = {0, 0, 0, 0}, * datas; long script_position, true_length, delta, data_length; int f_part; fprintf(stderr, " Copying header\n"); lseek(f, 0x14c, SEEK_SET); read(f, &script_position, 4); lseek(f, 0, SEEK_SET); copy(f, d, script_position); lseek(f, 0x150, SEEK_SET); read(f, &script_position, 4); lseek(f, script_position, SEEK_SET); data_length = filesize(f) - script_position; datas = (char *) malloc(data_length); read(f, datas, data_length); fprintf(stderr, " Processing script\n"); sprintf(nom_du_fichier, "xeno_d1/ROOMS/%04i/script.comp", n); f_part = open(nom_du_fichier, O_RDONLY); true_length = filesize(f_part); script_position = lseek(d, 0, SEEK_CUR); lseek(d, 0x14c, SEEK_SET); write(d, &script_position, 4); lseek(d, 0x128, SEEK_SET); write(d, &true_length, 4); lseek(d, 0, SEEK_END); lzss_comp(f_part, d, &delta); close(f_part); script_position = lseek(d, 0, SEEK_CUR); if ((true_length = (script_position & 3))) { write(d, zeros, 4 - true_length); } fprintf(stderr, " Processing extra datas\n"); script_position = lseek(d, 0, SEEK_CUR); lseek(d, 0x150, SEEK_SET); write(d, &script_position, 4); lseek(d, 0, SEEK_END); write(d, datas, data_length); free(datas); } int main(int argc, char ** argv) { int f_script_comp, f_new_script; int i; int num = 0; char nom_du_fichier[100]; for (i = 384; i < 1844; i = i + 2) { fprintf(stderr, "CD1 - File %d -> Script %d\n", i, num); sprintf(nom_du_fichier, "xeno_d1/ROOMS/%04d.out", i); f_script_comp = open(nom_du_fichier, O_RDONLY); sprintf(nom_du_fichier, "xeno_d1/ROOMS/%04d.out-new", i); f_new_script = open(nom_du_fichier, O_WRONLY | O_CREAT | O_TRUNC, 00644); process_one_file(f_script_comp, f_new_script, num); close(f_script_comp); num++; } num = 0; for (i = 379; i < 1838; i = i + 2) { fprintf(stderr, "CD2 - File %d -> Script %d\n", i, num); sprintf(nom_du_fichier, "xeno_d2/ROOMS/%04d.out", i); f_script_comp = open(nom_du_fichier, O_RDONLY); sprintf(nom_du_fichier, "xeno_d2/ROOMS/%04d.out-new", i); f_new_script = open(nom_du_fichier, O_WRONLY | O_CREAT | O_TRUNC, 00644); process_one_file(f_script_comp, f_new_script, num); close(f_script_comp); num++; } fprintf(stderr, "Done !\n"); }