diff options
Diffstat (limited to 'engines/cruise/delphine-unpack.cpp')
-rw-r--r-- | engines/cruise/delphine-unpack.cpp | 175 |
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 |