summaryrefslogtreecommitdiff
path: root/PE/extract.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'PE/extract.cpp')
-rw-r--r--PE/extract.cpp63
1 files changed, 36 insertions, 27 deletions
diff --git a/PE/extract.cpp b/PE/extract.cpp
index 001964a..2891ae8 100644
--- a/PE/extract.cpp
+++ b/PE/extract.cpp
@@ -1,72 +1,81 @@
-#include <stdio.h>
+#include <Main.h>
+#include <Input.h>
+#include <Output.h>
#define INDEX 0x838da
#define N1 100
#define N2 600
+CODE_BEGINS
int index1[N1];
int index2[N2];
-int main(void) {
- FILE * s, * f;
+virtual int startup() throw (GeneralException) {
+ Input * s;
+ Output * f;
short int t, b;
int n1 = 0, n2 = 0, i, j, size;
- char fn[50], buff[2048];
+ String fn;
+ char buff[2048];
- s = fopen("slus_006.62", "r");
+ s = new Input("slus_006.62");
- fseek(s, INDEX, SEEK_SET);
+ s->seek(INDEX);
while (1) {
- fread(&t, 2, 1, s);
+ t = s->readU16();
if (!t)
break;
index1[n1++] = t;
- fprintf(stderr, "I1 - %3i - %4i\n", n1, t);
+ printm(M_INFO, "I1 - %3i - %4i\n", n1, t);
}
b = index1[n1 - 1];
- fseek(s, 6, SEEK_CUR);
+ s->seek(6, SEEK_CUR);
while (1) {
- fread(&t, 2, 1, s);
+ s->read(&t, 2);
if (!t)
break;
index2[n2++] = t + b;
- fprintf(stderr, "I2 - %3i - %4i\n", n2, t);
+ printm(M_INFO, "I2 - %3i - %4i\n", n2, t);
}
- fclose(s);
+ delete s;
- s = fopen("pe.img", "r");
+ s = new Input("pe.img");
for (i = 0; i < (n1 - 1); i++) {
- sprintf(fn, "dump/%04i.out", i);
+ fn.set("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);
+ f = new Output(fn);
+ printm(M_INFO, "Dumping %3i sectors at %4i (%8i) into " + fn + "\n", index1[i + 1] - index1[i], index1[i], index1[i] * 2048);
+ s->seek(index1[i] * 2048);
for (j = index1[i]; j < index1[i + 1]; j++) {
- fread(buff, 2048, 1, s);
- fwrite(buff, 2048, 1, f);
+ s->read(buff, 2048);
+ f->write(buff, 2048);
}
- fclose(f);
+ delete f;
}
for (i = 0; i < (n2 - 1); i++) {
- sprintf(fn, "musics/song-%04i.out", i);
+ fn.set("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);
+ f = new Output(fn);
+ printm(M_INFO, "Music - Dumping %3i sectors at %4i into " + fn + "\n", index2[i + 1] - index2[i], index2[i]);
+ s->seek(index2[i] * 2048);
for (j = index2[i]; j < index2[i + 1]; j++) {
- fread(buff, 2048, 1, s);
- fwrite(buff, 2048, 1, f);
+ s->read(buff, 2048);
+ f->write(buff, 2048);
}
- fclose(f);
+ delete f;
}
+ delete s;
+
+ return 0;
}
+CODE_ENDS \ No newline at end of file