summaryrefslogtreecommitdiff
path: root/Xenogears/archive.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Xenogears/archive.cpp')
-rw-r--r--Xenogears/archive.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/Xenogears/archive.cpp b/Xenogears/archive.cpp
new file mode 100644
index 0000000..6701c2c
--- /dev/null
+++ b/Xenogears/archive.cpp
@@ -0,0 +1,37 @@
+#include <stdio.h>
+#include <values.h>
+#include <stdlib.h>
+#include "fileutils.h"
+
+void dearchive(FILE * f) {
+ long nb;
+ long * address;
+ char fname[100];
+ int i;
+ FILE * f_out;
+
+ fread(&nb, 4, 1, f);
+ nb++;
+ fprintf(stderr, "Reading index... (%li elements)\n", nb);
+
+ address = (long *) malloc(nb * sizeof(long) + 1);
+
+ for (i = 0; i < nb; i++) {
+ fread(address + i, 4, 1, f);
+ }
+ address[nb] = MAXINT;
+
+ for (i = 0; i < nb; i++) {
+ fprintf(stderr, "Dumping file %i\n", i);
+ sprintf(fname, "part-%i.lz", i);
+ f_out = fopen(fname, "wb");
+ copy(fileno(f), fileno(f_out), address[i + 1] - address[i]);
+ fclose(f_out);
+ }
+
+ free(address);
+}
+
+int main(void) {
+ dearchive(stdin);
+}