Use START_PACK_STRUCTS / END_PACK_STRUCTS when available, instead of checking for GCC / not GCC

svn-id: r23458
This commit is contained in:
Max Horn 2006-07-09 13:01:15 +00:00
parent 880838514f
commit f35f4a4d1c
30 changed files with 133 additions and 79 deletions

View file

@ -70,6 +70,20 @@
#endif #endif
//
// By default we try to use pragma push/pop to ensure various structs we use
// are "packed". If your compiler doesn't support this pragma, you are in for
// a problem. If you are lucky, an equivalent pragma is available, in which
// case you can redefine these two macros appropriately. Or maybe your port
// simply *always* packs everything, in which case you could #undefine them.
//
// If neither is possible, tough luck. Try to contact the team, maybe we can
// come up with a solution, though I wouldn't hold my breath on it :-/.
//
#define START_PACK_STRUCTS pack(push, 1)
#define END_PACK_STRUCTS pack(pop)
#if defined(_MSC_VER) && !defined(__SYMBIAN32__) && !defined(_WIN32_WCE) #if defined(_MSC_VER) && !defined(__SYMBIAN32__) && !defined(_WIN32_WCE)
#define scumm_stricmp stricmp #define scumm_stricmp stricmp
@ -357,11 +371,6 @@
// //
// Fallbacks / default values for various special macros // Fallbacks / default values for various special macros
// //
#ifndef START_PACK_STRUCTS
#define START_PACK_STRUCTS pack(push, 1)
#define END_PACK_STRUCTS pack(pop)
#endif
#ifndef FORCEINLINE #ifndef FORCEINLINE
#define FORCEINLINE inline #define FORCEINLINE inline
#endif #endif

View file

@ -31,7 +31,10 @@ namespace Gob {
class Game { class Game {
public: public:
#if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif
struct Collision { struct Collision {
int16 id; int16 id;
int16 left; int16 left;
@ -127,7 +130,10 @@ public:
int32 frameDataSize; int32 frameDataSize;
int32 vidBufferSize; int32 vidBufferSize;
} GCC_PACK; } GCC_PACK;
#if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif
TotResTable *_totResourceTable; TotResTable *_totResourceTable;
Collision *_collisionAreas; Collision *_collisionAreas;

View file

@ -37,7 +37,11 @@ namespace Gob {
class Goblin { class Goblin {
public: public:
#if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif
struct Gob_State { struct Gob_State {
int16 animation;// +0h int16 animation;// +0h
int16 layer; // +2h int16 layer; // +2h
@ -92,7 +96,10 @@ public:
char x; char x;
char y; char y;
} GCC_PACK; } GCC_PACK;
#if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif
Util::List *_objList; Util::List *_objList;
Gob_Object *_goblins[4]; Gob_Object *_goblins[4];

View file

@ -43,7 +43,9 @@ public:
kDirSE = 0x5100 kDirSE = 0x5100
}; };
#if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif
struct Point { struct Point {
int16 x; int16 x;
@ -59,7 +61,9 @@ public:
int8 orient; // ?? int8 orient; // ??
} GCC_PACK; } GCC_PACK;
#if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif
int16 _mapWidth; int16 _mapWidth;
int16 _mapHeight; int16 _mapHeight;

View file

@ -31,7 +31,11 @@ namespace Gob {
class Mult { class Mult {
public: public:
#if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif
struct Mult_AnimData { struct Mult_AnimData {
int8 animation; int8 animation;
int8 layer; int8 layer;
@ -156,7 +160,9 @@ public:
int16 field_E; int16 field_E;
} GCC_PACK; } GCC_PACK;
#if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif
// Globals // Globals

View file

@ -27,7 +27,11 @@ namespace Gob {
class Scenery { class Scenery {
public: public:
#if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif
struct PieceDesc { struct PieceDesc {
int16 left; //NOTE: int16 left; //NOTE:
int16 right; //These are stored in Little Endian format int16 right; //These are stored in Little Endian format
@ -70,7 +74,10 @@ public:
int16 framesCount; int16 framesCount;
AnimFramePiece *frames; AnimFramePiece *frames;
} GCC_PACK; } GCC_PACK;
#if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif
struct Static { struct Static {
int16 layersCount; int16 layersCount;

View file

@ -72,7 +72,9 @@ public:
#define RETURN_PRIMARY 0x01 #define RETURN_PRIMARY 0x01
#define DISABLE_SPR_ALLOC 0x20 #define DISABLE_SPR_ALLOC 0x20
#if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif
struct Color { struct Color {
byte red; byte red;
@ -80,7 +82,9 @@ public:
byte blue; byte blue;
} GCC_PACK; } GCC_PACK;
#if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif
struct PalDesc { struct PalDesc {
Color *vgaPal; Color *vgaPal;

View file

@ -37,7 +37,7 @@ extern const char *actionList[];
/* */ /* */
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
#if !defined(__GNUC__) #if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif #endif
@ -215,7 +215,7 @@ struct RoomExitIndexedHotspotResource {
uint16 hotspotId; uint16 hotspotId;
}; };
#if !defined(__GNUC__) #if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif #endif

View file

@ -49,8 +49,8 @@ FORCEINLINE int16 READ_BE_INT16(const void *ptr) {
namespace Queen { namespace Queen {
#if !defined(__GNUC__) #if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif #endif
struct GameStateHeader { struct GameStateHeader {
@ -60,8 +60,8 @@ struct GameStateHeader {
char description[32]; char description[32];
} GCC_PACK; } GCC_PACK;
#if !defined(__GNUC__) #if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif #endif
class BamScene; class BamScene;

View file

@ -78,14 +78,19 @@ struct ClipData {
} }
}; };
#if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif
struct PalEntry { struct PalEntry {
byte red; byte red;
byte green; byte green;
byte blue; byte blue;
} GCC_PACK; } GCC_PACK;
#if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif
struct Color { struct Color {
int red; int red;

View file

@ -36,7 +36,7 @@
namespace Scumm { namespace Scumm {
#if !defined(__GNUC__) #if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif #endif
@ -54,7 +54,7 @@ struct AkosOffset {
uint16 akci; uint16 akci;
} GCC_PACK; } GCC_PACK;
#if !defined(__GNUC__) #if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif #endif

View file

@ -29,7 +29,7 @@
namespace Scumm { namespace Scumm {
#if !defined(__GNUC__) #if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif #endif
@ -39,7 +39,7 @@ struct CostumeInfo {
int16 move_x, move_y; int16 move_x, move_y;
} GCC_PACK; } GCC_PACK;
#if !defined(__GNUC__) #if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif #endif

View file

@ -31,8 +31,8 @@
namespace Scumm { namespace Scumm {
#if !defined(__GNUC__) #if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif #endif
struct Box { /* Internal walkbox file format */ struct Box { /* Internal walkbox file format */
@ -81,8 +81,8 @@ struct Box { /* Internal walkbox file format */
} GCC_PACK; } GCC_PACK;
} GCC_PACK; } GCC_PACK;
#if !defined(__GNUC__) #if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif #endif
#define BOX_MATRIX_SIZE 2000 #define BOX_MATRIX_SIZE 2000

View file

@ -1241,7 +1241,10 @@ static ScummNESFile::LFL lfls[] = {
{ -1, NULL } { -1, NULL }
}; };
#if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif
struct _lfl_index { struct _lfl_index {
byte room_lfl[55]; byte room_lfl[55];
uint16 room_addr[55]; uint16 room_addr[55];
@ -1252,7 +1255,10 @@ struct _lfl_index {
byte sound_lfl[100]; byte sound_lfl[100];
uint16 sound_addr[100]; uint16 sound_addr[100];
} GCC_PACK lfl_index; } GCC_PACK lfl_index;
#if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif
bool ScummNESFile::generateResource(int res) { bool ScummNESFile::generateResource(int res) {

View file

@ -226,8 +226,8 @@ protected:
const char *desc; const char *desc;
}; };
#if !defined(__GNUC__) #if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif #endif
struct ArrayHeader { struct ArrayHeader {
@ -239,8 +239,8 @@ protected:
byte data[1]; //14 byte data[1]; //14
} GCC_PACK; } GCC_PACK;
#if !defined(__GNUC__) #if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif #endif
const OpcodeEntryV72he *_opcodesV72he; const OpcodeEntryV72he *_opcodesV72he;

View file

@ -172,8 +172,8 @@ class Win32ResExtractor : public ResExtractor {
* Structures * Structures
*/ */
#if !defined(__GNUC__) #if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif #endif
struct WinLibrary { struct WinLibrary {
@ -456,8 +456,8 @@ class Win32ResExtractor : public ResExtractor {
uint16 number_of_id_entries; uint16 number_of_id_entries;
}; };
#if !defined(__GNUC__) #if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif #endif
/* /*

View file

@ -519,9 +519,9 @@ protected:
kDwordArray = 6 kDwordArray = 6
}; };
#if !defined(__GNUC__) #if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif #endif
struct ArrayHeader { struct ArrayHeader {
int16 dim1; int16 dim1;
@ -530,9 +530,9 @@ protected:
byte data[1]; byte data[1];
} GCC_PACK; } GCC_PACK;
#if !defined(__GNUC__) #if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif #endif
const OpcodeEntryV6 *_opcodesV6; const OpcodeEntryV6 *_opcodesV6;

View file

@ -36,8 +36,8 @@
namespace Scumm { namespace Scumm {
#if !defined(__GNUC__) #if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif #endif
struct BompHeader { /* Bomp header */ struct BompHeader { /* Bomp header */
@ -53,8 +53,8 @@ struct BompHeader { /* Bomp header */
} GCC_PACK; } GCC_PACK;
} GCC_PACK; } GCC_PACK;
#if !defined(__GNUC__) #if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif #endif

View file

@ -51,8 +51,8 @@ struct ObjectData {
byte flags; byte flags;
}; };
#if !defined(__GNUC__) #if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif #endif
struct RoomHeader { struct RoomHeader {
@ -159,8 +159,8 @@ struct ImageHeader { /* file format */
} GCC_PACK; } GCC_PACK;
} GCC_PACK; } GCC_PACK;
#if !defined(__GNUC__) #if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif #endif
struct FindObjectInRoom { struct FindObjectInRoom {

View file

@ -37,8 +37,8 @@ namespace Scumm {
class ScummEngine; class ScummEngine;
#if !defined(__GNUC__) #if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif #endif
struct channel_data { struct channel_data {
@ -66,8 +66,8 @@ struct channel_data {
uint16 music_script_nr; // 48 uint16 music_script_nr; // 48
} GCC_PACK; } GCC_PACK;
#if !defined(__GNUC__) #if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif #endif

View file

@ -53,8 +53,8 @@ struct SaveGameHeader {
char name[32]; char name[32];
}; };
#if !defined(__GNUC__) #if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif #endif
struct SaveInfoSection { struct SaveInfoSection {
@ -69,8 +69,8 @@ struct SaveInfoSection {
uint16 time; uint16 time;
} GCC_PACK; } GCC_PACK;
#if !defined(__GNUC__) #if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif #endif
#define INFOSECTION_VERSION 2 #define INFOSECTION_VERSION 2

View file

@ -31,8 +31,8 @@ namespace Scumm {
#define THMB_VERSION 1 #define THMB_VERSION 1
#if !defined(__GNUC__) #if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif #endif
struct ThumbnailHeader { struct ThumbnailHeader {
@ -43,8 +43,8 @@ struct ThumbnailHeader {
byte bpp; byte bpp;
} GCC_PACK; } GCC_PACK;
#if !defined(__GNUC__) #if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif #endif

View file

@ -26,8 +26,8 @@
namespace Simon { namespace Simon {
#if !defined(__GNUC__) #if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif #endif
// Feeble Files // Feeble Files
@ -94,8 +94,8 @@ struct AnimationHeader_Simon {
} GCC_PACK; } GCC_PACK;
#if !defined(__GNUC__) #if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif #endif
enum DrawFlags { enum DrawFlags {

View file

@ -37,7 +37,7 @@ namespace Sky {
#define SFXF_START_DELAY 0x80 #define SFXF_START_DELAY 0x80
#define SFXF_SAVE 0x20 #define SFXF_SAVE 0x20
#if !defined(__GNUC__) #if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif #endif
@ -53,7 +53,7 @@ struct Sfx {
RoomList roomList[10]; RoomList roomList[10];
} GCC_PACK; } GCC_PACK;
#if !defined(__GNUC__) #if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif #endif

View file

@ -36,7 +36,7 @@ struct displayText_t {
uint32 textWidth; uint32 textWidth;
}; };
#if !defined(__GNUC__) #if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif #endif
@ -166,7 +166,7 @@ struct Compact {
MegaSet megaSet3; // MegaSet megaSet3; //
} GCC_PACK; } GCC_PACK;
#if !defined(__GNUC__) #if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif #endif

View file

@ -48,8 +48,8 @@ struct MouseObj {
Object *compact; Object *compact;
}; };
#if !defined(__GNUC__) #if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif #endif
struct MousePtr { struct MousePtr {
@ -61,8 +61,8 @@ struct MousePtr {
uint8 dummyData[0x30]; uint8 dummyData[0x30];
} GCC_PACK; } GCC_PACK;
#if !defined(__GNUC__) #if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif #endif
class Logic; class Logic;

View file

@ -32,8 +32,8 @@ namespace Sword1 {
#define O_GRID_SIZE 200 #define O_GRID_SIZE 200
#define EXTRA_GRID_SIZE 20 #define EXTRA_GRID_SIZE 20
#if !defined(__GNUC__) #if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif #endif
struct OEventSlot { //receiving event list in the compact - struct OEventSlot { //receiving event list in the compact -
@ -120,8 +120,8 @@ struct Object {
// mega size = 12340 bytes (+ 8 byte offset table + 20 byte header = 12368) // mega size = 12340 bytes (+ 8 byte offset table + 20 byte header = 12368)
} GCC_PACK; } GCC_PACK;
#if !defined(__GNUC__) #if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif #endif
} // End of namespace Sword1 } // End of namespace Sword1

View file

@ -27,8 +27,8 @@
namespace Sword1 { namespace Sword1 {
#if !defined(__GNUC__) #if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif #endif
struct BarData { struct BarData {
@ -53,8 +53,8 @@ struct NodeData {
int16 dist; int16 dist;
} GCC_PACK; } GCC_PACK;
#if !defined(__GNUC__) #if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif #endif
struct FloorData { struct FloorData {

View file

@ -89,8 +89,8 @@ namespace Sword1 {
#define MAX_text_obs 2 //text compacts #define MAX_text_obs 2 //text compacts
#define TEXT_sect 149 //text compacts exist in section 149, probably after all the megas #define TEXT_sect 149 //text compacts exist in section 149, probably after all the megas
#if !defined(__GNUC__) #if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif #endif
struct Header { struct Header {
@ -134,8 +134,8 @@ struct WalkGridHeader {
int32 numNodes; int32 numNodes;
} GCC_PACK; } GCC_PACK;
#if !defined(__GNUC__) #if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif #endif
enum fileTypes { enum fileTypes {

View file

@ -34,7 +34,7 @@ namespace Audio {
class AudioStream; class AudioStream;
#if !defined(__GNUC__) #if defined(START_PACK_STRUCTS)
#pragma START_PACK_STRUCTS #pragma START_PACK_STRUCTS
#endif #endif
@ -52,7 +52,7 @@ struct VocBlockHeader {
uint8 pack; uint8 pack;
} GCC_PACK; } GCC_PACK;
#if !defined(__GNUC__) #if defined(END_PACK_STRUCTS)
#pragma END_PACK_STRUCTS #pragma END_PACK_STRUCTS
#endif #endif