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 | 
