1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
#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];
virtual int startup() throw (GeneralException) {
Input * s;
Output * f;
short int t, b;
int n1 = 0, n2 = 0, i, j, size;
String fn;
char buff[2048];
s = new Input("slus_006.62");
s->seek(INDEX);
while (1) {
t = s->readU16();
if (!t)
break;
index1[n1++] = t;
printm(M_INFO, "I1 - %3i - %4i\n", n1, t);
}
b = index1[n1 - 1];
s->seek(6, SEEK_CUR);
while (1) {
s->read(&t, 2);
if (!t)
break;
index2[n2++] = t + b;
printm(M_INFO, "I2 - %3i - %4i\n", n2, t);
}
delete s;
s = new Input("pe.img");
for (i = 0; i < (n1 - 1); i++) {
fn.set("dump/%04i.out", i);
if (!(index1[i + 1] - index1[i]))
continue;
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++) {
s->read(buff, 2048);
f->write(buff, 2048);
}
delete f;
}
for (i = 0; i < (n2 - 1); i++) {
fn.set("musics/song-%04i.out", i);
if (!(index2[i + 1] - index2[i]))
continue;
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++) {
s->read(buff, 2048);
f->write(buff, 2048);
}
delete f;
}
delete s;
return 0;
}
CODE_ENDS
|