aboutsummaryrefslogtreecommitdiff
path: root/engines/cruise/delphine-unpack.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/cruise/delphine-unpack.cpp')
-rw-r--r--engines/cruise/delphine-unpack.cpp175
1 files changed, 87 insertions, 88 deletions
diff --git a/engines/cruise/delphine-unpack.cpp b/engines/cruise/delphine-unpack.cpp
index 6d21527481..fe32cbb018 100644
--- a/engines/cruise/delphine-unpack.cpp
+++ b/engines/cruise/delphine-unpack.cpp
@@ -26,12 +26,11 @@
namespace Cruise {
-uint32 crc; // variable at 5C5A
-uint32 bitbucket; // dx:bx
+uint32 crc; // variable at 5C5A
+uint32 bitbucket; // dx:bx
-uint16 swap16(uint16 r)
-{
- return (r >> 8) | (r << 8);
+uint16 swap16(uint16 r) {
+ return (r >> 8) | (r << 8);
}
#define loadd(p, d) {\
@@ -64,90 +63,91 @@ uint16 swap16(uint16 r)
} while (nbits);\
}
-int32 decomp(uint8 * in, uint8 * out, int32 size) {
- uint8 bit = 0; // Carry flag
- uint8 nbits = 0; // cl
- uint8 byte = 0; // ch
- uint16 counter = 0; // bp
- uint16 var = 0; // variable at 5C58
- uint16 ptr = 0;
- uint16 flags = 0;
- enum {
- DO_COPY,
- DO_UNPACK
- } action;
-
- loadd(in, crc);
- loadd(in, bitbucket);
- crc ^= bitbucket;
-
- do { // 5A4C
- getbit(in, bit);
- if (!bit) { // 5A94
- getbit(in, bit);
- if (!bit) { // 5AC8
- nbits = 3;
- byte = 0;
- action = DO_COPY;
- } else { // 5ACA
- var = 1;
- nbits = 8;
- action = DO_UNPACK;
- }
- } else { // 5B4F
- nbits = 2;
- loadbits(in, flags);
- if (flags < 2) {
- nbits = flags + 9; // 5BC3
- var = flags + 2;
- action = DO_UNPACK;
- } else if (flags == 3) {
- nbits = 8; // 5B4A
- byte = 8;
- action = DO_COPY;
- } else {
- nbits = 8;
- loadbits(in, var);
- nbits = 12;
- action = DO_UNPACK;
- }
+int32 decomp(uint8 *in, uint8 *out, int32 size) {
+ uint8 bit = 0; // Carry flag
+ uint8 nbits = 0; // cl
+ uint8 byte = 0; // ch
+ uint16 counter = 0; // bp
+ uint16 var = 0; // variable at 5C58
+ uint16 ptr = 0;
+ uint16 flags = 0;
+ enum {
+ DO_COPY,
+ DO_UNPACK
+ } action;
+
+ loadd(in, crc);
+ loadd(in, bitbucket);
+ crc ^= bitbucket;
+
+ do { // 5A4C
+ getbit(in, bit);
+ if (!bit) { // 5A94
+ getbit(in, bit);
+ if (!bit) { // 5AC8
+ nbits = 3;
+ byte = 0;
+ action = DO_COPY;
+ } else { // 5ACA
+ var = 1;
+ nbits = 8;
+ action = DO_UNPACK;
+ }
+ } else { // 5B4F
+ nbits = 2;
+ loadbits(in, flags);
+ if (flags < 2) {
+ nbits = flags + 9; // 5BC3
+ var = flags + 2;
+ action = DO_UNPACK;
+ } else if (flags == 3) {
+ nbits = 8; // 5B4A
+ byte = 8;
+ action = DO_COPY;
+ } else {
+ nbits = 8;
+ loadbits(in, var);
+ nbits = 12;
+ action = DO_UNPACK;
+ }
+ }
+
+ switch (action) {
+ case DO_COPY:
+ // 5AD1
+ loadbits(in, counter); // 5AFD
+ counter += byte;
+ counter++;
+ size -= counter;
+ do {
+ nbits = 8;
+ loadbits(in, byte); // 5B3F
+ store(out, byte);
+ counter--;
+ } while (counter); // 5B45
+ break;
+ case DO_UNPACK:
+ // 5BD3
+ loadbits(in, ptr); // 5BFF
+ counter = var + 1;
+ size -= counter;
+ do {
+ byte = *(out + ptr - 1);
+ store(out, byte);
+ counter--;
+ } while (counter);
+ }
+ } while (size > 0);
+ // 5C32
+ // ???
+
+ if (crc) {
+ return -1;
+ } else {
+ return 0;
}
-
- switch (action) {
- case DO_COPY:
- // 5AD1
- loadbits(in, counter); // 5AFD
- counter += byte;
- counter++;
- size -= counter;
- do {
- nbits = 8;
- loadbits(in, byte); // 5B3F
- store(out, byte);
- counter--;
- } while (counter); // 5B45
- break;
- case DO_UNPACK:
- // 5BD3
- loadbits(in, ptr); // 5BFF
- counter = var + 1;
- size -= counter;
- do {
- byte = *(out + ptr - 1);
- store(out, byte);
- counter--;
- } while(counter);
- }
- } while (size > 0);
- // 5C32
- // ???
-
- if (crc) {
- return -1;
- } else {
- return 0;
- }
}
+
/*
int main(void) {
FILE * in, * out;
@@ -172,5 +172,4 @@ int main(void) {
fclose(in);
}*/
-
} // End of namespace Cruise