aboutsummaryrefslogtreecommitdiff
path: root/scumm/resource_v7he.h
diff options
context:
space:
mode:
authorEugene Sandulenko2004-06-24 14:12:20 +0000
committerEugene Sandulenko2004-06-24 14:12:20 +0000
commitd6cfe9a5e90ffc6697e8ac621e93e309ea0fa034 (patch)
tree3100f474f7a14d6e308a3fec35928d0bd95f44aa /scumm/resource_v7he.h
parent264dc1349bc1f61c5f27383d4293b4c2dcf34b87 (diff)
downloadscummvm-rg350-d6cfe9a5e90ffc6697e8ac621e93e309ea0fa034.tar.gz
scummvm-rg350-d6cfe9a5e90ffc6697e8ac621e93e309ea0fa034.tar.bz2
scummvm-rg350-d6cfe9a5e90ffc6697e8ac621e93e309ea0fa034.zip
Phase #2 of HE v7.0+ cursors. Still no visual output, but all data is
parsed now. svn-id: r14031
Diffstat (limited to 'scumm/resource_v7he.h')
-rw-r--r--scumm/resource_v7he.h41
1 files changed, 29 insertions, 12 deletions
diff --git a/scumm/resource_v7he.h b/scumm/resource_v7he.h
index b6a21d4736..3bc144bdda 100644
--- a/scumm/resource_v7he.h
+++ b/scumm/resource_v7he.h
@@ -118,18 +118,24 @@ class Win32ResExtractor {
public:
Win32ResExtractor(ScummEngine *scumm);
~Win32ResExtractor();
- byte *extractResource(const char *resType, char *resName);
+ int extractResource(const char *resType, char *resName, byte *data);
byte *extractCursor(int id);
+ int convertIcons(byte *data, int datasize);
private:
bool _arg_raw;
ScummEngine *_vm;
char _fileName[256];
+ typedef Common::MemoryReadStream MemoryReadStream;
+
/*
* Structures
*/
+#define PACKED __attribute__ ((packed))
+#pragma pack(1)
+
struct WinLibrary {
File *file;
byte *memory;
@@ -175,7 +181,7 @@ class Win32ResExtractor {
uint16 reserved;
uint16 type;
uint16 count;
- Win32CursorIconDirEntry entries[1];
+ Win32CursorIconDirEntry entries[1] PACKED;
};
struct Win32CursorIconFileDirEntry {
@@ -220,7 +226,7 @@ class Win32ResExtractor {
struct Win32ImageResourceDirectoryEntry {
union {
struct {
- #ifdef BITFIELDS_BIGENDIAN
+ #ifdef SCUMM_BIGENDIAN
unsigned name_is_string:1;
unsigned name_offset:31;
#else
@@ -230,7 +236,7 @@ class Win32ResExtractor {
} s1;
uint32 name;
struct {
- #ifdef WORDS_BIGENDIAN
+ #ifdef SCUMM_BIG_ENDIAN
uint16 __pad;
uint16 id;
#else
@@ -242,7 +248,7 @@ class Win32ResExtractor {
union {
uint32 offset_to_data;
struct {
- #ifdef BITFIELDS_BIGENDIAN
+ #ifdef SCUMM_BIG_ENDIAN
unsigned data_is_directory:1;
unsigned offset_to_directory:31;
#else
@@ -410,6 +416,8 @@ class Win32ResExtractor {
uint16 number_of_id_entries;
};
+#pragma pack()
+
/*
* Function Prototypes
*/
@@ -417,18 +425,17 @@ class Win32ResExtractor {
WinResource *list_resources(WinLibrary *, WinResource *, int *);
bool read_library(WinLibrary *);
WinResource *find_resource(WinLibrary *, const char *, const char *, const char *, int *);
- void *get_resource_entry(WinLibrary *, WinResource *, int *);
- void do_resources(WinLibrary *, const char *, char *, char *, int);
- void print_resources(WinLibrary *, WinResource *, WinResource *, WinResource *, WinResource *);
+ byte *get_resource_entry(WinLibrary *, WinResource *, int *);
+ int do_resources(WinLibrary *, const char *, char *, char *, int, byte *);
bool compare_resource_id(WinResource *, const char *);
const char *res_type_string_to_id(const char *);
const char *res_type_id_to_string(int);
char *get_destination_name(WinLibrary *, char *, char *, char *);
- void *extract_resource(WinLibrary *, WinResource *, int *, bool *, char *, char *, bool);
- void extract_resources(WinLibrary *, WinResource *, WinResource *, WinResource *, WinResource *);
- void *extract_group_icon_cursor_resource(WinLibrary *, WinResource *, char *, int *, bool);
+ byte *extract_resource(WinLibrary *, WinResource *, int *, bool *, char *, char *, bool);
+ int extract_resources(WinLibrary *, WinResource *, WinResource *, WinResource *, WinResource *, byte *);
+ byte *extract_group_icon_cursor_resource(WinLibrary *, WinResource *, char *, int *, bool);
bool decode_pe_resource_id(WinLibrary *, WinResource *, uint32);
bool decode_ne_resource_id(WinLibrary *, WinResource *, uint16);
@@ -436,11 +443,21 @@ class Win32ResExtractor {
WinResource *list_ne_name_resources(WinLibrary *, WinResource *, int *);
WinResource *list_pe_resources(WinLibrary *, Win32ImageResourceDirectory *, int, int *);
int calc_vma_size(WinLibrary *);
- void do_resources_recurs(WinLibrary *, WinResource *, WinResource *, WinResource *, WinResource *, const char *, char *, char *, int);
+ int do_resources_recurs(WinLibrary *, WinResource *, WinResource *, WinResource *, WinResource *, const char *, char *, char *, int, byte *);
char *get_resource_id_quoted(WinResource *);
WinResource *find_with_resource_array(WinLibrary *, WinResource *, const char *);
bool check_offset(byte *, int, const char *, void *, int);
+
+ uint32 simple_vec(byte *data, uint32 ofs, byte size);
+
+ void fix_win32_cursor_icon_file_dir_endian(Win32CursorIconFileDir *obj);
+ void fix_win32_bitmap_info_header_endian(Win32BitmapInfoHeader *obj);
+ void fix_win32_cursor_icon_file_dir_entry_endian(Win32CursorIconFileDirEntry *obj);
+ void fix_win32_image_section_header(Win32ImageSectionHeader *obj);
+ void fix_os2_image_header_endian(OS2ImageHeader *obj);
+ void fix_win32_image_header_endian(Win32ImageNTHeaders *obj);
+ void fix_win32_image_data_directory(Win32ImageDataDirectory *obj);
};
} // End of namespace Scumm