aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sky/disk.cpp5
-rw-r--r--sky/disk.h4
-rw-r--r--sky/rnc_deco.cpp15
-rw-r--r--sky/rnc_deco.h2
4 files changed, 14 insertions, 12 deletions
diff --git a/sky/disk.cpp b/sky/disk.cpp
index 020368df60..f41a27a906 100644
--- a/sky/disk.cpp
+++ b/sky/disk.cpp
@@ -153,11 +153,10 @@ uint8 *Disk::loadFile(uint16 fileNr) {
uint8 *uncompDest = (uint8 *)malloc(decompSize);
- RncDecoder rncDecoder;
int32 unpackLen;
if ((fileFlags >> 22) & 0x1) { //do we include the header?
// don't return the file's header
- unpackLen = rncDecoder.unpackM1(fileDest + sizeof(dataFileHeader), uncompDest, 0);
+ unpackLen = _rncDecoder.unpackM1(fileDest + sizeof(dataFileHeader), uncompDest, 0);
} else {
#ifdef SCUMM_BIG_ENDIAN
// Convert dataFileHeader to BE (it only consists of 16 bit words)
@@ -166,7 +165,7 @@ uint8 *Disk::loadFile(uint16 fileNr) {
*(headPtr + i) = READ_LE_UINT16(headPtr + i);
#endif
memcpy(uncompDest, fileDest, sizeof(dataFileHeader));
- unpackLen = rncDecoder.unpackM1(fileDest + sizeof(dataFileHeader), uncompDest + sizeof(dataFileHeader), 0);
+ unpackLen = _rncDecoder.unpackM1(fileDest + sizeof(dataFileHeader), uncompDest + sizeof(dataFileHeader), 0);
if (unpackLen)
unpackLen += sizeof(dataFileHeader);
}
diff --git a/sky/disk.h b/sky/disk.h
index 9b8d1b4fe8..3b4b16ed2b 100644
--- a/sky/disk.h
+++ b/sky/disk.h
@@ -25,6 +25,7 @@
#include "stdafx.h"
#include "common/scummsys.h"
#include "common/str.h"
+#include "sky/rnc_deco.h"
class File;
@@ -74,7 +75,8 @@ protected:
uint8 *_dinnerTableArea;
File *_dataDiskHandle;
File *_dnrHandle;
-
+ RncDecoder _rncDecoder;
+
uint16 _buildList[MAX_FILES_IN_LIST];
uint32 _loadedFilesList[MAX_FILES_IN_LIST];
};
diff --git a/sky/rnc_deco.cpp b/sky/rnc_deco.cpp
index d900939488..24db371b1b 100644
--- a/sky/rnc_deco.cpp
+++ b/sky/rnc_deco.cpp
@@ -36,14 +36,10 @@ namespace Sky {
#define HEADER_LEN 18
RncDecoder::RncDecoder() {
- _bitBuffl = 0;
- _bitBuffh = 0;
- _bitCount = 0;
+ initCrc();
}
-RncDecoder::~RncDecoder() {
-
-}
+RncDecoder::~RncDecoder() { }
void RncDecoder::initCrc() {
uint16 cnt = 0;
@@ -175,10 +171,13 @@ int32 RncDecoder::unpackM1(const void *input, void *output, uint16 key) {
uint16 crcUnpacked = 0;
uint16 crcPacked = 0;
- initCrc();
+
+ _bitBuffl = 0;
+ _bitBuffh = 0;
+ _bitCount = 0;
//Check for "RNC "
- if (READ_BE_UINT32(inputptr) != 0x524e4301)
+ if (READ_BE_UINT32(inputptr) != RNC_SIGNATURE)
return NOT_PACKED;
inputptr += 4;
diff --git a/sky/rnc_deco.h b/sky/rnc_deco.h
index bb4c11d2fb..c2389b1a71 100644
--- a/sky/rnc_deco.h
+++ b/sky/rnc_deco.h
@@ -24,6 +24,8 @@
#include "stdafx.h"
+#define RNC_SIGNATURE 0x524E4301 // "RNC\001"
+
namespace Sky {
class RncDecoder {