From a2a0b13de2cd6fb28787b2821466f3ef7c2210ea Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Tue, 22 Feb 2011 20:01:19 -0500 Subject: COMMON: Begin to merge some NE/PE code The ID classes are now common to both. The files have been renamed to better illustrate their purpose. --- common/winexe_ne.h | 183 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) create mode 100644 common/winexe_ne.h (limited to 'common/winexe_ne.h') diff --git a/common/winexe_ne.h b/common/winexe_ne.h new file mode 100644 index 0000000000..0c3d5293ab --- /dev/null +++ b/common/winexe_ne.h @@ -0,0 +1,183 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * $URL$ + * $Id$ + * + */ + +#ifndef COMMON_WINEXE_NE_H +#define COMMON_WINEXE_NE_H + +#include "common/array.h" +#include "common/list.h" +#include "common/winexe.h" + +namespace Common { + +class MemoryReadStream; +class SeekableReadStream; +class String; + +/** A New Executable cursor. */ +class NECursor { +public: + NECursor(); + ~NECursor(); + + /** Return the cursor's width. */ + uint16 getWidth() const; + /** Return the cursor's height. */ + uint16 getHeight() const; + /** Return the cursor's hotspot's x coordinate. */ + uint16 getHotspotX() const; + /** Return the cursor's hotspot's y coordinate. */ + uint16 getHotspotY() const; + + const byte *getSurface() const { return _surface; } + const byte *getPalette() const { return _palette; } + + /** Set the cursor's dimensions. */ + void setDimensions(uint16 width, uint16 height); + /** Set the cursor's hotspot. */ + void setHotspot(uint16 x, uint16 y); + + /** Read the cursor's data out of a stream. */ + bool readCursor(SeekableReadStream &stream, uint32 count); + +private: + byte *_surface; + byte _palette[256 * 3]; + + uint16 _width; ///< The cursor's width. + uint16 _height; ///< The cursor's height. + uint16 _hotspotX; ///< The cursor's hotspot's x coordinate. + uint16 _hotspotY; ///< The cursor's hotspot's y coordinate. + + /** Clear the cursor. */ + void clear(); +}; + +/** A New Executable cursor group. */ +struct NECursorGroup { + WinResourceID id; + Array cursors; ///< The cursors. +}; + +/** The default Windows resources. */ +enum NEResourceType { + kNECursor = 0x8001, + kNEBitmap = 0x8002, + kNEIcon = 0x8003, + kNEMenu = 0x8004, + kNEDialog = 0x8005, + kNEString = 0x8006, + kNEFontDir = 0x8007, + kNEFont = 0x8008, + kNEAccelerator = 0x8009, + kNERCData = 0x800A, + kNEMessageTable = 0x800B, + kNEGroupCursor = 0x800C, + kNEGroupIcon = 0x800D, + kNEVersion = 0x8010, + kNEDlgInclude = 0x8011, + kNEPlugPlay = 0x8013, + kNEVXD = 0x8014, + kNEAniCursor = 0x8015, + kNEAniIcon = 0x8016, + kNEHTML = 0x8017, + kNEManifest = 0x8018 +}; + +/** + * A class able to load resources from a Windows New Executable, such + * as cursors, bitmaps, and sounds. + * + * See http://en.wikipedia.org/wiki/New_Executable for more info. + */ +class NEResources { +public: + NEResources(); + ~NEResources(); + + /** Clear all information. */ + void clear(); + + /** Load from an EXE file. */ + bool loadFromEXE(const String &fileName); + + /** Load from a Windows compressed EXE file. */ + bool loadFromCompressedEXE(const String &fileName); + + /** Load from a stream. */ + bool loadFromEXE(SeekableReadStream *stream); + + /** Get all cursor's read from the New Executable. */ + const Array &getCursors() const; + + /** Return a list of resources for a given type. */ + const Array getIDList(uint16 type) const; + + /** Return a stream to the specified resource (or 0 if non-existent). */ + SeekableReadStream *getResource(uint16 type, WinResourceID id); + +private: + /** A resource. */ + struct Resource { + WinResourceID id; + + uint16 type; ///< Type of the resource. + + uint32 offset; ///< Offset within the EXE. + uint32 size; ///< Size of the data. + + uint16 flags; + uint16 handle; + uint16 usage; + }; + + SeekableReadStream *_exe; ///< Current file. + + /** All resources. */ + List _resources; + + /** All cursor resources. */ + Array _cursors; + + /** Read the offset to the resource table. */ + uint32 getResourceTableOffset(); + /** Read the resource table. */ + bool readResourceTable(uint32 offset); + + // Cursor reading helpers + bool readCursors(); + bool readCursorGroup(NECursorGroup &group, const Resource &resource); + bool readCursor(NECursor &cursor, const Resource &resource, uint32 size); + + /** Find a specific resource. */ + const Resource *findResource(uint16 type, WinResourceID id) const; + + /** Read a resource string. */ + static String getResourceString(SeekableReadStream &exe, uint32 offset); +}; + +} // End of namespace Common + +#endif -- cgit v1.2.3 From e053373dd344b96e9c29128b97196b3d7f9d2e75 Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Tue, 22 Feb 2011 20:11:50 -0500 Subject: COMMON: Add a key color field to NECursor --- common/winexe_ne.h | 3 +++ 1 file changed, 3 insertions(+) (limited to 'common/winexe_ne.h') diff --git a/common/winexe_ne.h b/common/winexe_ne.h index 0c3d5293ab..562c8f72da 100644 --- a/common/winexe_ne.h +++ b/common/winexe_ne.h @@ -50,6 +50,8 @@ public: uint16 getHotspotX() const; /** Return the cursor's hotspot's y coordinate. */ uint16 getHotspotY() const; + /** Return the cursor's transparent key. */ + byte getKeyColor() const; const byte *getSurface() const { return _surface; } const byte *getPalette() const { return _palette; } @@ -70,6 +72,7 @@ private: uint16 _height; ///< The cursor's height. uint16 _hotspotX; ///< The cursor's hotspot's x coordinate. uint16 _hotspotY; ///< The cursor's hotspot's y coordinate. + byte _keyColor; ///< The cursor's transparent key /** Clear the cursor. */ void clear(); -- cgit v1.2.3 From c66233f83e2d86b72f45aff20fb3198976850e42 Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Fri, 4 Mar 2011 23:17:57 -0500 Subject: GRAPHICS: Split the NE cursor code from the NEResources class Now the code lies in Graphics and all cursors are not cached upon opening an exe. The engine is now in charge of caching which cursors it wants. --- common/winexe_ne.h | 59 ------------------------------------------------------ 1 file changed, 59 deletions(-) (limited to 'common/winexe_ne.h') diff --git a/common/winexe_ne.h b/common/winexe_ne.h index 562c8f72da..c1d04080ba 100644 --- a/common/winexe_ne.h +++ b/common/winexe_ne.h @@ -36,54 +36,6 @@ class MemoryReadStream; class SeekableReadStream; class String; -/** A New Executable cursor. */ -class NECursor { -public: - NECursor(); - ~NECursor(); - - /** Return the cursor's width. */ - uint16 getWidth() const; - /** Return the cursor's height. */ - uint16 getHeight() const; - /** Return the cursor's hotspot's x coordinate. */ - uint16 getHotspotX() const; - /** Return the cursor's hotspot's y coordinate. */ - uint16 getHotspotY() const; - /** Return the cursor's transparent key. */ - byte getKeyColor() const; - - const byte *getSurface() const { return _surface; } - const byte *getPalette() const { return _palette; } - - /** Set the cursor's dimensions. */ - void setDimensions(uint16 width, uint16 height); - /** Set the cursor's hotspot. */ - void setHotspot(uint16 x, uint16 y); - - /** Read the cursor's data out of a stream. */ - bool readCursor(SeekableReadStream &stream, uint32 count); - -private: - byte *_surface; - byte _palette[256 * 3]; - - uint16 _width; ///< The cursor's width. - uint16 _height; ///< The cursor's height. - uint16 _hotspotX; ///< The cursor's hotspot's x coordinate. - uint16 _hotspotY; ///< The cursor's hotspot's y coordinate. - byte _keyColor; ///< The cursor's transparent key - - /** Clear the cursor. */ - void clear(); -}; - -/** A New Executable cursor group. */ -struct NECursorGroup { - WinResourceID id; - Array cursors; ///< The cursors. -}; - /** The default Windows resources. */ enum NEResourceType { kNECursor = 0x8001, @@ -132,9 +84,6 @@ public: /** Load from a stream. */ bool loadFromEXE(SeekableReadStream *stream); - /** Get all cursor's read from the New Executable. */ - const Array &getCursors() const; - /** Return a list of resources for a given type. */ const Array getIDList(uint16 type) const; @@ -161,19 +110,11 @@ private: /** All resources. */ List _resources; - /** All cursor resources. */ - Array _cursors; - /** Read the offset to the resource table. */ uint32 getResourceTableOffset(); /** Read the resource table. */ bool readResourceTable(uint32 offset); - // Cursor reading helpers - bool readCursors(); - bool readCursorGroup(NECursorGroup &group, const Resource &resource); - bool readCursor(NECursor &cursor, const Resource &resource, uint32 size); - /** Find a specific resource. */ const Resource *findResource(uint16 type, WinResourceID id) const; -- cgit v1.2.3