summaryrefslogtreecommitdiff
path: root/PE/extract.cpp
diff options
context:
space:
mode:
authorpixel <pixel>2003-09-05 23:50:16 +0000
committerpixel <pixel>2003-09-05 23:50:16 +0000
commit44adf768555ecd211f90cbf4d87b44ba42044d86 (patch)
tree662018d76d3f2f19ed58ea8e94c54445fc2a47e4 /PE/extract.cpp
parent7ff77f49e9577ff5b63d7f2e2ce7651257bf1d63 (diff)
Continuing toying
Diffstat (limited to 'PE/extract.cpp')
-rw-r--r--PE/extract.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/PE/extract.cpp b/PE/extract.cpp
new file mode 100644
index 0000000..001964a
--- /dev/null
+++ b/PE/extract.cpp
@@ -0,0 +1,72 @@
+#include <stdio.h>
+
+#define INDEX 0x838da
+
+#define N1 100
+#define N2 600
+
+int index1[N1];
+int index2[N2];
+
+int main(void) {
+ FILE * s, * f;
+ short int t, b;
+ int n1 = 0, n2 = 0, i, j, size;
+ char fn[50], buff[2048];
+
+ s = fopen("slus_006.62", "r");
+
+ fseek(s, INDEX, SEEK_SET);
+
+ while (1) {
+ fread(&t, 2, 1, s);
+ if (!t)
+ break;
+ index1[n1++] = t;
+ fprintf(stderr, "I1 - %3i - %4i\n", n1, t);
+ }
+
+ b = index1[n1 - 1];
+
+ fseek(s, 6, SEEK_CUR);
+
+ while (1) {
+ fread(&t, 2, 1, s);
+ if (!t)
+ break;
+ index2[n2++] = t + b;
+ fprintf(stderr, "I2 - %3i - %4i\n", n2, t);
+ }
+
+ fclose(s);
+
+ s = fopen("pe.img", "r");
+
+ for (i = 0; i < (n1 - 1); i++) {
+ sprintf(fn, "dump/%04i.out", i);
+ if (!(index1[i + 1] - index1[i]))
+ continue;
+ f = fopen(fn, "w");
+ fprintf(stderr, "Dumping %3i sectors at %4i (%8i) into %s\n", index1[i + 1] - index1[i], index1[i], index1[i] * 2048, fn);
+ fseek(s, index1[i] * 2048, SEEK_SET);
+ for (j = index1[i]; j < index1[i + 1]; j++) {
+ fread(buff, 2048, 1, s);
+ fwrite(buff, 2048, 1, f);
+ }
+ fclose(f);
+ }
+
+ for (i = 0; i < (n2 - 1); i++) {
+ sprintf(fn, "musics/song-%04i.out", i);
+ if (!(index2[i + 1] - index2[i]))
+ continue;
+ f = fopen(fn, "w");
+ fprintf(stderr, "Music - Dumping %3i sectors at %4i into %s\n", index2[i + 1] - index2[i], index2[i], fn);
+ fseek(s, index2[i] * 2048, SEEK_SET);
+ for (j = index2[i]; j < index2[i + 1]; j++) {
+ fread(buff, 2048, 1, s);
+ fwrite(buff, 2048, 1, f);
+ }
+ fclose(f);
+ }
+}