diff --git a/src/common/utility/basics.h b/src/common/utility/basics.h index 2c5fb6f98..1ae1f1764 100644 --- a/src/common/utility/basics.h +++ b/src/common/utility/basics.h @@ -23,6 +23,18 @@ typedef int32_t fixed_t; typedef uint32_t angle_t; +#if defined(__GNUC__) +// With versions of GCC newer than 4.2, it appears it was determined that the +// cost of an unaligned pointer on PPC was high enough to add padding to the +// end of packed structs. For whatever reason __packed__ and pragma pack are +// handled differently in this regard. Note that this only needs to be applied +// to types which are used in arrays or sizeof is needed. This also prevents +// code from taking references to the struct members. +#define FORCE_PACKED __attribute__((__packed__)) +#else +#define FORCE_PACKED +#endif + #ifdef __GNUC__ #define GCCPRINTF(stri,firstargi) __attribute__((format(printf,stri,firstargi))) diff --git a/src/doomtype.h b/src/doomtype.h index 1b18244bf..419b9c91a 100644 --- a/src/doomtype.h +++ b/src/doomtype.h @@ -40,18 +40,6 @@ typedef TMap FClassMap; #define NOVTABLE #endif -#if defined(__GNUC__) -// With versions of GCC newer than 4.2, it appears it was determined that the -// cost of an unaligned pointer on PPC was high enough to add padding to the -// end of packed structs. For whatever reason __packed__ and pragma pack are -// handled differently in this regard. Note that this only needs to be applied -// to types which are used in arrays or sizeof is needed. This also prevents -// code from taking references to the struct members. -#define FORCE_PACKED __attribute__((__packed__)) -#else -#define FORCE_PACKED -#endif - #include "basics.h" #include "printf.h" diff --git a/src/gamedata/resourcefiles/file_7z.cpp b/src/gamedata/resourcefiles/file_7z.cpp index f26b04133..8b44a9e6f 100644 --- a/src/gamedata/resourcefiles/file_7z.cpp +++ b/src/gamedata/resourcefiles/file_7z.cpp @@ -39,8 +39,7 @@ #include "resourcefile.h" #include "cmdlib.h" -#include "v_text.h" -#include "w_wad.h" +#include "printf.h" @@ -314,8 +313,6 @@ bool F7ZFile::Open(bool quiet, LumpFilterInfo *filter) } } - if (!quiet && !batchrun) Printf(", %d lumps\n", NumLumps); - GenerateHash(); PostProcessArchive(&Lumps[0], sizeof(F7ZLump), filter); return true; diff --git a/src/gamedata/resourcefiles/file_directory.cpp b/src/gamedata/resourcefiles/file_directory.cpp index 013d9bf1c..b24d6888d 100644 --- a/src/gamedata/resourcefiles/file_directory.cpp +++ b/src/gamedata/resourcefiles/file_directory.cpp @@ -38,7 +38,7 @@ #include "resourcefile.h" #include "cmdlib.h" -#include "doomtype.h" +#include "printf.h" #include "findfile.h" @@ -183,7 +183,6 @@ int FDirectory::AddDirectory(const char *dirpath) bool FDirectory::Open(bool quiet, LumpFilterInfo* filter) { NumLumps = AddDirectory(FileName); - if (!quiet) Printf(", %d lumps\n", NumLumps); PostProcessArchive(&Lumps[0], sizeof(FDirectoryLump), filter); return true; } diff --git a/src/gamedata/resourcefiles/file_grp.cpp b/src/gamedata/resourcefiles/file_grp.cpp index a8e050061..fbb5148c8 100644 --- a/src/gamedata/resourcefiles/file_grp.cpp +++ b/src/gamedata/resourcefiles/file_grp.cpp @@ -34,8 +34,7 @@ */ #include "resourcefile.h" -#include "w_wad.h" -#include "doomtype.h" +#include "printf.h" //========================================================================== // @@ -118,7 +117,6 @@ bool FGrpFile::Open(bool quiet, LumpFilterInfo*) fileinfo[i].NameWithZero[12] = '\0'; // Be sure filename is null-terminated Lumps[i].LumpNameSetup(fileinfo[i].NameWithZero); } - if (!quiet && !batchrun) Printf(", %d lumps\n", NumLumps); GenerateHash(); delete[] fileinfo; return true; diff --git a/src/gamedata/resourcefiles/file_lump.cpp b/src/gamedata/resourcefiles/file_lump.cpp index c7d87284e..60902900d 100644 --- a/src/gamedata/resourcefiles/file_lump.cpp +++ b/src/gamedata/resourcefiles/file_lump.cpp @@ -34,8 +34,7 @@ #include "resourcefile.h" #include "cmdlib.h" -#include "w_wad.h" -#include "doomtype.h" +#include "printf.h" //========================================================================== // diff --git a/src/gamedata/resourcefiles/file_pak.cpp b/src/gamedata/resourcefiles/file_pak.cpp index f58ba1cc5..60137f235 100644 --- a/src/gamedata/resourcefiles/file_pak.cpp +++ b/src/gamedata/resourcefiles/file_pak.cpp @@ -33,8 +33,7 @@ */ #include "resourcefile.h" -#include "w_wad.h" -#include "doomtype.h" +#include "printf.h" //========================================================================== // @@ -103,8 +102,6 @@ bool FPakFile::Open(bool quiet, LumpFilterInfo* filter) Lumps.Resize(NumLumps); - if (!quiet && !batchrun) Printf(", %d lumps\n", NumLumps); - for(uint32_t i = 0; i < NumLumps; i++) { Lumps[i].LumpNameSetup(fileinfo[i].name); diff --git a/src/gamedata/resourcefiles/file_rff.cpp b/src/gamedata/resourcefiles/file_rff.cpp index 05f7ed542..80805d641 100644 --- a/src/gamedata/resourcefiles/file_rff.cpp +++ b/src/gamedata/resourcefiles/file_rff.cpp @@ -35,8 +35,7 @@ #include "resourcefile.h" #include "templates.h" -#include "w_wad.h" -#include "doomtype.h" +#include "printf.h" //========================================================================== // @@ -151,7 +150,6 @@ bool FRFFFile::Open(bool quiet, LumpFilterInfo*) Lumps = new FRFFLump[NumLumps]; - if (!quiet && !batchrun) Printf(", %d lumps\n", NumLumps); for (uint32_t i = 0; i < NumLumps; ++i) { Lumps[i].Position = LittleLong(lumps[i].FilePos); diff --git a/src/gamedata/resourcefiles/file_wad.cpp b/src/gamedata/resourcefiles/file_wad.cpp index 36b2a1195..f813c3248 100644 --- a/src/gamedata/resourcefiles/file_wad.cpp +++ b/src/gamedata/resourcefiles/file_wad.cpp @@ -37,7 +37,6 @@ #include "resourcefile.h" #include "v_text.h" #include "w_wad.h" -#include "gi.h" #include "engineerrors.h" //========================================================================== @@ -176,7 +175,13 @@ bool FWadFile::Open(bool quiet, LumpFilterInfo*) char n[9]; uppercopy(n, fileinfo[i].Name); n[8] = 0; + // This needs to be done differently. We cannot simply assume that all lumps where the first character's high bit is set are compressed without verification. + // This requires explicit toggling for precisely the files that need it. +#if 0 Lumps[i].Compressed = !(gameinfo.flags & GI_SHAREWARE) && (n[0] & 0x80) == 0x80; +#else + Lumps[i].Compressed = false; +#endif n[0] &= ~0x80; Lumps[i].LumpNameSetup(n); @@ -202,8 +207,6 @@ bool FWadFile::Open(bool quiet, LumpFilterInfo*) if (!quiet) // don't bother with namespaces in quiet mode. We won't need them. { - if (!batchrun) Printf(", %d lumps\n", NumLumps); - SetNamespace("S_START", "S_END", ns_sprites); SetNamespace("F_START", "F_END", ns_flats, true); SetNamespace("C_START", "C_END", ns_colormaps); diff --git a/src/gamedata/resourcefiles/file_whres.cpp b/src/gamedata/resourcefiles/file_whres.cpp index c328adf46..1c2a6d79c 100644 --- a/src/gamedata/resourcefiles/file_whres.cpp +++ b/src/gamedata/resourcefiles/file_whres.cpp @@ -119,7 +119,6 @@ bool FWHResFile::Open(bool quiet, LumpFilterInfo*) NumLumps = i; Lumps.Clamp(NumLumps); Lumps.ShrinkToFit(); - if (!quiet) Printf(", %d lumps\n", NumLumps); return true; } diff --git a/src/gamedata/resourcefiles/file_zip.cpp b/src/gamedata/resourcefiles/file_zip.cpp index f5fb9f332..ac39d0d2c 100644 --- a/src/gamedata/resourcefiles/file_zip.cpp +++ b/src/gamedata/resourcefiles/file_zip.cpp @@ -37,8 +37,7 @@ #include "file_zip.h" #include "cmdlib.h" #include "templates.h" -#include "v_text.h" -#include "w_wad.h" +#include "printf.h" #include "w_zip.h" #include "ancientzip.h" @@ -338,8 +337,6 @@ bool FZipFile::Open(bool quiet, LumpFilterInfo* filter) NumLumps -= skipped; free(directory); - if (!quiet && !batchrun) Printf(TEXTCOLOR_NORMAL ", %d lumps\n", NumLumps); - GenerateHash(); PostProcessArchive(&Lumps[0], sizeof(FZipLump), filter); return true; diff --git a/src/gamedata/resourcefiles/resourcefile.cpp b/src/gamedata/resourcefiles/resourcefile.cpp index e6ee26920..03485380f 100644 --- a/src/gamedata/resourcefiles/resourcefile.cpp +++ b/src/gamedata/resourcefiles/resourcefile.cpp @@ -37,10 +37,6 @@ #include #include "resourcefile.h" #include "cmdlib.h" -#include "w_wad.h" -#include "gi.h" -#include "doomstat.h" -#include "doomtype.h" #include "md5.h" diff --git a/src/gamedata/w_wad.cpp b/src/gamedata/w_wad.cpp index 171fea6d3..8dcc6df62 100644 --- a/src/gamedata/w_wad.cpp +++ b/src/gamedata/w_wad.cpp @@ -377,6 +377,8 @@ void FWadCollection::AddFile (const char *filename, FileReader *wadr, bool quiet if (resfile != NULL) { + if (!quiet && !batchrun) Printf(", %d lumps\n", resfile->LumpCount()); + uint32_t lumpstart = LumpInfo.Size(); resfile->SetFirstLump(lumpstart); diff --git a/src/gamedata/w_zip.h b/src/gamedata/w_zip.h index 0a2ce6d4e..cdf75867d 100644 --- a/src/gamedata/w_zip.h +++ b/src/gamedata/w_zip.h @@ -1,6 +1,8 @@ #ifndef __W_ZIP #define __W_ZIP +#include "basics.h" + #pragma pack(1) // FZipCentralInfo struct FZipEndOfCentralDirectory