diff options
Diffstat (limited to 'PE/extract.cpp')
-rw-r--r-- | PE/extract.cpp | 63 |
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 |