aboutsummaryrefslogtreecommitdiff
path: root/saga/resfile.h
diff options
context:
space:
mode:
Diffstat (limited to 'saga/resfile.h')
-rw-r--r--saga/resfile.h104
1 files changed, 104 insertions, 0 deletions
diff --git a/saga/resfile.h b/saga/resfile.h
new file mode 100644
index 0000000000..03816fc4ce
--- /dev/null
+++ b/saga/resfile.h
@@ -0,0 +1,104 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2003 The ScummVM project
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * $Header$
+ *
+ */
+
+#ifndef SAGA_RESFILE_H
+#define SAGA_RESFILE_H
+
+/* The 'RSC' resource file format used by SAGA is quite simple.
+ * At the end of the resource file is an 8 byte structure. The first
+ * 32 bit value specifies the offset of the resource table, the
+ * second specifies the number of entries in the resource table.
+ * Each entry in the resource table is itself 32 bytes, the first
+ * 32 bit value of which specifies the offset of the resource, the
+ * second specifies the length of the resource.
+ */
+
+#include "common/file.h"
+
+class ResourceFile : public File {
+
+public:
+
+ struct Resource {
+ int32 res_offset;
+ int32 res_len;
+ };
+
+private:
+
+ long _file_len;
+
+protected:
+
+ enum ResourceConstants {
+ RSC_TABLEINFO_SIZE = 8,
+ RSC_TABLEENTRY_SIZE = 8
+ };
+
+ const char *_resDirectory;
+
+ int32 _resTblOffset;
+ int32 _resTblCt;
+
+ bool _resTblLoaded;
+ Resource *_resTbl;
+
+public:
+
+ ResourceFile();
+ virtual ~ResourceFile();
+
+ bool open( const char *filename, const char *directory );
+ void close();
+
+ inline int16 readSint16LE() {
+ return readUint16LE();
+ }
+
+ inline int32 readSint32LE() {
+ return readUint32LE();
+ }
+
+ inline int16 readSint16BE() {
+ return readUint16BE();
+ }
+
+ inline int32 readSint32BE() {
+ return readUint32BE();
+ }
+
+ int32 getResourceCt();
+ int32 getResourceOffset( int32 rn );
+ int32 getResourceLen( int32 rn );
+
+ bool loadResource( int32 rn, byte **res, int32 *res_len );
+ void freeResource( byte *res );
+
+};
+
+
+
+#endif
+
+
+
+
+