summaryrefslogtreecommitdiff
path: root/PE/extract.cpp
blob: 2891ae8d28a29f1e909ad70a1e5f4b4793b807ef (plain)
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