From 03c64ebd7b95ec1cb826d6f0689a1f835afa9e75 Mon Sep 17 00:00:00 2001 From: Celtic Minstrel Date: Tue, 2 Dec 2014 13:07:11 -0500 Subject: [PATCH] Eliminate use of __attribute__ Ideally this would be standard C++, but here I've settled for things that should be supported by both clang and VS/cl.exe: - Deprecated attribute retained, but now uses __declspec syntax - Packed attribute replaced with pragma pack, except one instance where it unnecessary - Aligned attribute replaced with explicit padding bytes inserted in the structs where needed - Unused attribute simply removed (though where possible, the unused entities were also removed) --- osx/BoE.xcodeproj/project.pbxproj | 4 + osx/boe.fileio.h | 2 +- osx/boe.main.cpp | 4 + osx/boe.party.h | 4 +- osx/classes/outdoors.h | 2 +- osx/classes/scenario.h | 2 +- osx/classes/town.h | 2 +- osx/classes/universe.h | 6 +- osx/dialogxml/button.cpp | 6 +- osx/dialogxml/control.cpp | 4 +- osx/dialogxml/dlogutil.cpp | 20 +- osx/dialogxml/dlogutil.h | 10 +- osx/dialogxml/field.cpp | 6 +- osx/dialogxml/message.cpp | 2 +- osx/dialogxml/pict.cpp | 2 +- osx/oldstructs.cpp | 447 ++++++++++++++++++++++++++++++ osx/oldstructs.h | 97 ++++--- osx/scenedit/scen.core.h | 2 +- osx/scenedit/scen.townout.h | 4 +- osx/tools/fileio.cpp | 2 +- 20 files changed, 545 insertions(+), 83 deletions(-) create mode 100644 osx/oldstructs.cpp diff --git a/osx/BoE.xcodeproj/project.pbxproj b/osx/BoE.xcodeproj/project.pbxproj index 7ccae80d..7dba4a0b 100644 --- a/osx/BoE.xcodeproj/project.pbxproj +++ b/osx/BoE.xcodeproj/project.pbxproj @@ -328,6 +328,7 @@ 914B2B9418E8005B007B6799 /* SND99.WAV in Copy Mac Sounds */ = {isa = PBXBuildFile; fileRef = 914B2B2E18E7FFEF007B6799 /* SND99.WAV */; }; 914CA4441905789C00B6ADD1 /* watch.gif in Copy Mac Cursors */ = {isa = PBXBuildFile; fileRef = 914CA4431905788F00B6ADD1 /* watch.gif */; }; 914CA45819074E0100B6ADD1 /* scen.menus.mac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 914CA45719074D0A00B6ADD1 /* scen.menus.mac.mm */; }; + 915325171A2E1DF0000A9A1C /* oldstructs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 915325161A2E1DA8000A9A1C /* oldstructs.cpp */; }; 91870F81190C8C1C0081C150 /* winutil.mac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 919145FF18E63B70005CF3A4 /* winutil.mac.mm */; }; 91870F83190C8C1F0081C150 /* tarball.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 91BFA3D81902AD78001686E4 /* tarball.cpp */; }; 91870F84190C90980081C150 /* scen.menu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 914CA49F190C4E9200B6ADD1 /* scen.menu.xib */; }; @@ -1245,6 +1246,7 @@ 914CA45719074D0A00B6ADD1 /* scen.menus.mac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = scen.menus.mac.mm; sourceTree = ""; }; 914CA4641909B00100B6ADD1 /* scen.menus.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = scen.menus.h; sourceTree = ""; }; 914CA49F190C4E9200B6ADD1 /* scen.menu.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = scen.menu.xib; sourceTree = ""; }; + 915325161A2E1DA8000A9A1C /* oldstructs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = oldstructs.cpp; path = ../oldstructs.cpp; sourceTree = ""; }; 917B573F100B956C0096C978 /* undo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = undo.h; sourceTree = ""; }; 918D59A718EA513900735B66 /* dialog.keys.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dialog.keys.h; sourceTree = ""; }; 919145FB18E3A32F005CF3A4 /* boe.appleevents.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = boe.appleevents.mm; sourceTree = ""; }; @@ -1493,6 +1495,7 @@ 913D03320FA0FFE700184C18 /* src */, 91AC61300FA270B300EEAE67 /* classes.h */, 91E5C5A10F9EACE200C21460 /* oldstructs.h */, + 915325161A2E1DA8000A9A1C /* oldstructs.cpp */, ); path = classes; sourceTree = ""; @@ -2396,6 +2399,7 @@ 91FCC8F218FEEFE0007026CE /* pc.editors.cpp in Sources */, 91BFA3DA1902B13D001686E4 /* tarball.cpp in Sources */, 91BFA3E919033E01001686E4 /* gzstream.cpp in Sources */, + 915325171A2E1DF0000A9A1C /* oldstructs.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/osx/boe.fileio.h b/osx/boe.fileio.h index 8c0dc2b7..ce1f8a50 100644 --- a/osx/boe.fileio.h +++ b/osx/boe.fileio.h @@ -47,7 +47,7 @@ bool load_scenario_header(fs::path filename/*,short header_entry*/); //short get_buf_ptr(short flag); //bool check_p (short pword); -void init_town() __attribute__((deprecated)); +__declspec(deprecated) void init_town(); //void port_talk_nodes(); //void port_town(); diff --git a/osx/boe.main.cpp b/osx/boe.main.cpp index b59896c4..125e8751 100644 --- a/osx/boe.main.cpp +++ b/osx/boe.main.cpp @@ -148,6 +148,10 @@ void check_for_intel(); bool mac_is_intel; int main(int argc, char* argv[]) { +#if 0 + void debug_oldstructs(); + debug_oldstructs(); +#endif try{ init_directories(argv[0]); //data_store = (piles_of_stuff_dumping_type *) NewPtr(sizeof(piles_of_stuff_dumping_type)); diff --git a/osx/boe.party.h b/osx/boe.party.h index 07802538..68ae0d38 100644 --- a/osx/boe.party.h +++ b/osx/boe.party.h @@ -1,6 +1,6 @@ class cDialog; -void init_party(short mode) __attribute__((deprecated)); -void init_party_scen_data() __attribute__((deprecated)); +__declspec(deprecated) void init_party(short mode); +__declspec(deprecated) void init_party_scen_data(); void make_boats(); bool create_pc(short spot,cDialog* parent_num); bool take_sp(short pc_num,short amt); diff --git a/osx/classes/outdoors.h b/osx/classes/outdoors.h index 834b73eb..83d7b6c9 100644 --- a/osx/classes/outdoors.h +++ b/osx/classes/outdoors.h @@ -66,7 +66,7 @@ public: char sign_strs[8][256]; bool special_spot[48][48]; - char(& out_strs(short i))[256] __attribute__((deprecated)); + __declspec(deprecated) char(& out_strs(short i))[256]; cOutdoors(); cOutdoors& operator = (legacy::outdoor_record_type& old); }; diff --git a/osx/classes/scenario.h b/osx/classes/scenario.h index e2846068..6f5af2bc 100644 --- a/osx/classes/scenario.h +++ b/osx/classes/scenario.h @@ -100,7 +100,7 @@ public: cOutdoors* outdoors; cTown* towns; - char(& scen_strs(short i))[256] __attribute__((deprecated)); + __declspec(deprecated) char(& scen_strs(short i))[256]; cScenario& operator = (legacy::scenario_data_type& old); void append(legacy::scen_item_data_type& old); void writeTo(std::ostream& file); diff --git a/osx/classes/town.h b/osx/classes/town.h index b31d9e62..f909290e 100644 --- a/osx/classes/town.h +++ b/osx/classes/town.h @@ -99,7 +99,7 @@ public: char comment[3][256]; char spec_strs[100][256]; char sign_strs[20][256]; - char(& town_strs(short i))[256] __attribute__((deprecated)); + __declspec(deprecated) char(& town_strs(short i))[256]; cSpeech talking; virtual ~cTown(){} diff --git a/osx/classes/universe.h b/osx/classes/universe.h index 2aa1f4d9..1cf5ca03 100644 --- a/osx/classes/universe.h +++ b/osx/classes/universe.h @@ -56,9 +56,9 @@ public: void append(unsigned char(& old_sfx)[64][64], unsigned char(& old_misc_i)[64][64]); void append(legacy::big_tr_type& old); - unsigned char explored(char x,char y) const __attribute__((deprecated)); - unsigned char misc_i(char x, char y) const __attribute__((deprecated)); - unsigned char sfx(char x, char y) const __attribute__((deprecated)); + __declspec(deprecated) unsigned char explored(char x,char y) const; + __declspec(deprecated) unsigned char misc_i(char x, char y) const; + __declspec(deprecated) unsigned char sfx(char x, char y) const; cTown* operator -> (); cCurTown(); diff --git a/osx/dialogxml/button.cpp b/osx/dialogxml/button.cpp index 91ba25c4..0dfc4f23 100644 --- a/osx/dialogxml/button.cpp +++ b/osx/dialogxml/button.cpp @@ -22,7 +22,7 @@ extern sf::Texture bg_gworld; -void cButton::attachFocusHandler(focus_callback_t f __attribute__((unused))) throw(xHandlerNotSupported){ +void cButton::attachFocusHandler(focus_callback_t f) throw(xHandlerNotSupported){ throw xHandlerNotSupported(true); } @@ -388,11 +388,11 @@ void cLedGroup::hide(std::string id){ choices[id]->hide(); } -void cLedGroup::setFormat(eFormat prop __attribute__((unused)), short val __attribute__((unused))) throw(xUnsupportedProp) { +void cLedGroup::setFormat(eFormat prop, short val) throw(xUnsupportedProp) { throw xUnsupportedProp(prop); } -short cLedGroup::getFormat(eFormat prop __attribute__((unused))) throw(xUnsupportedProp) { +short cLedGroup::getFormat(eFormat prop) throw(xUnsupportedProp) { throw xUnsupportedProp(prop); } diff --git a/osx/dialogxml/control.cpp b/osx/dialogxml/control.cpp index 7c9e9845..0e488f2f 100644 --- a/osx/dialogxml/control.cpp +++ b/osx/dialogxml/control.cpp @@ -256,11 +256,11 @@ cControl::cControl(eControlType t, cDialog& p) : parent(&p), inWindow(&p.win), t cControl::cControl(eControlType t, sf::RenderWindow& p) : parent(NULL), inWindow(&p), type(t), visible(true), key({false, 0, mod_none}), frameStyle(0) {} -bool cControl::triggerClickHandler(cDialog& __attribute__((unused)), std::string __attribute__((unused)), eKeyMod __attribute__((unused)), location __attribute__((unused))){ +bool cControl::triggerClickHandler(cDialog&, std::string, eKeyMod, location){ return true; } -bool cControl::triggerFocusHandler(cDialog& me __attribute__((unused)), std::string id __attribute__((unused)), bool losingFocus __attribute__((unused))){ +bool cControl::triggerFocusHandler(cDialog& me, std::string id, bool losingFocus){ return true; } diff --git a/osx/dialogxml/dlogutil.cpp b/osx/dialogxml/dlogutil.cpp index 1034069f..ea706077 100644 --- a/osx/dialogxml/dlogutil.cpp +++ b/osx/dialogxml/dlogutil.cpp @@ -150,12 +150,12 @@ cStringChoice::cStringChoice( void cStringChoice::attachHandlers() { using namespace std::placeholders; - dlg["left"].attachClickHandler(std::bind(&cStringChoice::onLeft,this,_1,_2)); - dlg["right"].attachClickHandler(std::bind(&cStringChoice::onRight,this,_1,_2)); - dlg["done"].attachClickHandler(std::bind(&cStringChoice::onOkay,this,_1,_2)); - dlg["cancel"].attachClickHandler(std::bind(&cStringChoice::onCancel,this,_1,_2)); + dlg["left"].attachClickHandler(std::bind(&cStringChoice::onLeft,this)); + dlg["right"].attachClickHandler(std::bind(&cStringChoice::onRight,this)); + dlg["done"].attachClickHandler(std::bind(&cStringChoice::onOkay,this,_1)); + dlg["cancel"].attachClickHandler(std::bind(&cStringChoice::onCancel,this,_1)); leds = &dynamic_cast(dlg["strings"]); - leds->attachFocusHandler(std::bind(&cStringChoice::onSelect,this,_1,_3)); + leds->attachFocusHandler(std::bind(&cStringChoice::onSelect,this,_3)); } size_t cStringChoice::show(std::string select){ @@ -193,32 +193,32 @@ void cStringChoice::fillPage(){ } } -bool cStringChoice::onLeft(cDialog& me __attribute__((unused)), std::string id __attribute__((unused))){ +bool cStringChoice::onLeft(){ if(page == 0) page = strings.size() / per_page; else page--; fillPage(); return true; } -bool cStringChoice::onRight(cDialog& me __attribute__((unused)), std::string id __attribute__((unused))){ +bool cStringChoice::onRight(){ if(page == strings.size() / per_page) page = 0; else page++; fillPage(); return true; } -bool cStringChoice::onCancel(cDialog& me, std::string id __attribute__((unused))){ +bool cStringChoice::onCancel(cDialog& me){ me.toast(); return true; } -bool cStringChoice::onOkay(cDialog& me, std::string id __attribute__((unused))){ +bool cStringChoice::onOkay(cDialog& me){ dlg.setResult(cur); me.toast(); return true; } -bool cStringChoice::onSelect(cDialog& me, bool losing) { +bool cStringChoice::onSelect(bool losing) { if(losing) return true; int i = boost::lexical_cast(leds->getSelected().substr(3)); cur = page * 40 + i - 1; diff --git a/osx/dialogxml/dlogutil.h b/osx/dialogxml/dlogutil.h index 04d9098c..532cb4a7 100644 --- a/osx/dialogxml/dlogutil.h +++ b/osx/dialogxml/dlogutil.h @@ -82,11 +82,11 @@ public: class cStringChoice { static const size_t per_page; cDialog dlg; - bool onLeft(cDialog& me, std::string id); - bool onRight(cDialog& me, std::string id); - bool onCancel(cDialog& me, std::string id); - bool onOkay(cDialog& me, std::string id); - bool onSelect(cDialog& me, bool losing); + bool onLeft(); + bool onRight(); + bool onCancel(cDialog& me); + bool onOkay(cDialog& me); + bool onSelect(bool losing); void attachHandlers(); void fillPage(); std::vector strings; diff --git a/osx/dialogxml/field.cpp b/osx/dialogxml/field.cpp index 46b86526..80446c6b 100644 --- a/osx/dialogxml/field.cpp +++ b/osx/dialogxml/field.cpp @@ -11,11 +11,11 @@ #include "dialog.h" #include "graphtool.h" -void cTextField::attachClickHandler(click_callback_t f __attribute__((unused))) throw(xHandlerNotSupported){ +void cTextField::attachClickHandler(click_callback_t f) throw(xHandlerNotSupported){ throw xHandlerNotSupported(false); } -void cTextField::attachFocusHandler(focus_callback_t f __attribute__((unused))) throw(){ +void cTextField::attachFocusHandler(focus_callback_t f) throw(){ onFocus = f; } @@ -29,7 +29,7 @@ bool cTextField::triggerFocusHandler(cDialog& me, std::string id, bool losingFoc return passed; } -void cTextField::setFormat(eFormat prop, short val __attribute__((unused))) throw(xUnsupportedProp){ +void cTextField::setFormat(eFormat prop, short val) throw(xUnsupportedProp){ throw xUnsupportedProp(prop); } diff --git a/osx/dialogxml/message.cpp b/osx/dialogxml/message.cpp index e6ec60f4..e5efada5 100644 --- a/osx/dialogxml/message.cpp +++ b/osx/dialogxml/message.cpp @@ -18,7 +18,7 @@ void cTextMsg::attachClickHandler(click_callback_t f) throw(){ clickable = onClick != NULL; } -void cTextMsg::attachFocusHandler(focus_callback_t f __attribute__((unused))) throw(xHandlerNotSupported){ +void cTextMsg::attachFocusHandler(focus_callback_t f) throw(xHandlerNotSupported){ throw xHandlerNotSupported(true); } diff --git a/osx/dialogxml/pict.cpp b/osx/dialogxml/pict.cpp index 8e637290..b45ad327 100644 --- a/osx/dialogxml/pict.cpp +++ b/osx/dialogxml/pict.cpp @@ -76,7 +76,7 @@ void cPict::attachClickHandler(click_callback_t f) throw(){ } } -void cPict::attachFocusHandler(focus_callback_t f __attribute__((unused))) throw(xHandlerNotSupported){ +void cPict::attachFocusHandler(focus_callback_t f) throw(xHandlerNotSupported){ throw xHandlerNotSupported(true); } diff --git a/osx/oldstructs.cpp b/osx/oldstructs.cpp new file mode 100644 index 00000000..c4fb8152 --- /dev/null +++ b/osx/oldstructs.cpp @@ -0,0 +1,447 @@ +// +// oldstructs.cpp +// BoE +// +// Created by Celtic Minstrel on 14-12-02. +// +// + +#include "oldstructs.h" +#include +#include + +using namespace legacy; + +#define STRUCT_INFO(what) \ + log << #what << ": " << sizeof(what) << " bytes" << std::endl +#define MEM_INFO(what,member) \ + log << " " << #member << ": " << sizeof(what :: member) << " bytes, offset " \ + << offsetof(what,member) << std::endl + +// This is just a function to output all known information about each struct and its members. +void debug_oldstructs() { + char cwd[256]; + getcwd(cwd, 256); + printf("%s" ,cwd); + std::ofstream log("oldstructs.txt"); + STRUCT_INFO(Rect); + MEM_INFO(Rect,top); + MEM_INFO(Rect,left); + MEM_INFO(Rect,bottom); + MEM_INFO(Rect,right); + STRUCT_INFO(Boolean); + STRUCT_INFO(location); + MEM_INFO(location,x); + MEM_INFO(location,y); + STRUCT_INFO(special_node_type); + MEM_INFO(special_node_type,type); + MEM_INFO(special_node_type,sd1); + MEM_INFO(special_node_type,sd2); + MEM_INFO(special_node_type,pic); + MEM_INFO(special_node_type,m1); + MEM_INFO(special_node_type,m2); + MEM_INFO(special_node_type,ex1a); + MEM_INFO(special_node_type,ex1b); + MEM_INFO(special_node_type,ex2a); + MEM_INFO(special_node_type,ex2b); + MEM_INFO(special_node_type,jumpto); + STRUCT_INFO(talking_node_type); + MEM_INFO(talking_node_type,personality); + MEM_INFO(talking_node_type,type); + MEM_INFO(talking_node_type,link1); + MEM_INFO(talking_node_type,link2); + MEM_INFO(talking_node_type,extras); + STRUCT_INFO(talking_record_type); + MEM_INFO(talking_record_type,strlens); + MEM_INFO(talking_record_type,talk_nodes); + STRUCT_INFO(terrain_type_type); + MEM_INFO(terrain_type_type,picture); + MEM_INFO(terrain_type_type,blockage); + MEM_INFO(terrain_type_type,flag1); + MEM_INFO(terrain_type_type,flag2); + MEM_INFO(terrain_type_type,special); + MEM_INFO(terrain_type_type,trans_to_what); + MEM_INFO(terrain_type_type,fly_over); + MEM_INFO(terrain_type_type,boat_over); + MEM_INFO(terrain_type_type,block_horse); + MEM_INFO(terrain_type_type,light_radius); + MEM_INFO(terrain_type_type,step_sound); + MEM_INFO(terrain_type_type,shortcut_key); + MEM_INFO(terrain_type_type,res1); + MEM_INFO(terrain_type_type,res2); + MEM_INFO(terrain_type_type,res3); + STRUCT_INFO(wandering_type); + MEM_INFO(wandering_type,monst); + STRUCT_INFO(out_wandering_type); + MEM_INFO(out_wandering_type,monst); + MEM_INFO(out_wandering_type,friendly); + MEM_INFO(out_wandering_type,spec_on_meet); + MEM_INFO(out_wandering_type,spec_on_win); + MEM_INFO(out_wandering_type,spec_on_flee); + MEM_INFO(out_wandering_type,cant_flee); + MEM_INFO(out_wandering_type,end_spec1); + MEM_INFO(out_wandering_type,end_spec2); + STRUCT_INFO(outdoor_record_type); + MEM_INFO(outdoor_record_type,terrain); + MEM_INFO(outdoor_record_type,special_locs); + MEM_INFO(outdoor_record_type,special_id); + MEM_INFO(outdoor_record_type,exit_locs); + MEM_INFO(outdoor_record_type,exit_dests); + MEM_INFO(outdoor_record_type,sign_locs); + MEM_INFO(outdoor_record_type,wandering); + MEM_INFO(outdoor_record_type,special_enc); + MEM_INFO(outdoor_record_type,wandering_locs); + MEM_INFO(outdoor_record_type,info_rect); + MEM_INFO(outdoor_record_type,strlens); + MEM_INFO(outdoor_record_type,specials); + STRUCT_INFO(creature_start_type); + MEM_INFO(creature_start_type,number); + MEM_INFO(creature_start_type,start_attitude); + MEM_INFO(creature_start_type,start_loc); + MEM_INFO(creature_start_type,mobile); + MEM_INFO(creature_start_type,time_flag); + MEM_INFO(creature_start_type,extra1); + MEM_INFO(creature_start_type,extra2); + MEM_INFO(creature_start_type,spec1); + MEM_INFO(creature_start_type,spec2); + MEM_INFO(creature_start_type,spec_enc_code); + MEM_INFO(creature_start_type,time_code); + MEM_INFO(creature_start_type,monster_time); + MEM_INFO(creature_start_type,personality); + MEM_INFO(creature_start_type,special_on_kill); + MEM_INFO(creature_start_type,facial_pic); + STRUCT_INFO(short_item_record_type); + MEM_INFO(short_item_record_type,variety); + MEM_INFO(short_item_record_type,item_level); + MEM_INFO(short_item_record_type,awkward); + MEM_INFO(short_item_record_type,bonus); + MEM_INFO(short_item_record_type,protection); + MEM_INFO(short_item_record_type,charges); + MEM_INFO(short_item_record_type,type); + MEM_INFO(short_item_record_type,graphic_num); + MEM_INFO(short_item_record_type,ability); + MEM_INFO(short_item_record_type,type_flag); + MEM_INFO(short_item_record_type,is_special); + MEM_INFO(short_item_record_type,value); + MEM_INFO(short_item_record_type,identified); + MEM_INFO(short_item_record_type,magic); + MEM_INFO(short_item_record_type,weight); + MEM_INFO(short_item_record_type,description_flag); + MEM_INFO(short_item_record_type,full_name); + MEM_INFO(short_item_record_type,name); + MEM_INFO(short_item_record_type,reserved1); + MEM_INFO(short_item_record_type,reserved2); + MEM_INFO(short_item_record_type,magic_use_type); + MEM_INFO(short_item_record_type,ability_strength); + MEM_INFO(short_item_record_type,treas_class); + MEM_INFO(short_item_record_type,real_abil); + STRUCT_INFO(item_record_type); + MEM_INFO(item_record_type,variety); + MEM_INFO(item_record_type,item_level); + MEM_INFO(item_record_type,awkward); + MEM_INFO(item_record_type,bonus); + MEM_INFO(item_record_type,protection); + MEM_INFO(item_record_type,charges); + MEM_INFO(item_record_type,type); + MEM_INFO(item_record_type,magic_use_type); + MEM_INFO(item_record_type,graphic_num); + MEM_INFO(item_record_type,ability); + MEM_INFO(item_record_type,ability_strength); + MEM_INFO(item_record_type,type_flag); + MEM_INFO(item_record_type,is_special); + MEM_INFO(item_record_type,value); + MEM_INFO(item_record_type,weight); + MEM_INFO(item_record_type,special_class); + MEM_INFO(item_record_type,item_loc); + MEM_INFO(item_record_type,full_name); + MEM_INFO(item_record_type,name); + MEM_INFO(item_record_type,treas_class); + MEM_INFO(item_record_type,item_properties); + MEM_INFO(item_record_type,reserved1); + MEM_INFO(item_record_type,reserved2); + STRUCT_INFO(preset_item_type); + MEM_INFO(preset_item_type,item_loc); + MEM_INFO(preset_item_type,item_code); + MEM_INFO(preset_item_type,ability); + MEM_INFO(preset_item_type,charges); + MEM_INFO(preset_item_type,always_there); + MEM_INFO(preset_item_type,property); + MEM_INFO(preset_item_type,contained); + STRUCT_INFO(preset_field_type); + MEM_INFO(preset_field_type,field_loc); + MEM_INFO(preset_field_type,field_type); + STRUCT_INFO(town_record_type); + MEM_INFO(town_record_type,town_chop_time); + MEM_INFO(town_record_type,town_chop_key); + MEM_INFO(town_record_type,wandering); + MEM_INFO(town_record_type,wandering_locs); + MEM_INFO(town_record_type,special_locs); + MEM_INFO(town_record_type,spec_id); + MEM_INFO(town_record_type,sign_locs); + MEM_INFO(town_record_type,lighting); + MEM_INFO(town_record_type,start_locs); + MEM_INFO(town_record_type,exit_locs); + MEM_INFO(town_record_type,exit_specs); + MEM_INFO(town_record_type,in_town_rect); + MEM_INFO(town_record_type,preset_items); + MEM_INFO(town_record_type,max_num_monst); + MEM_INFO(town_record_type,preset_fields); + MEM_INFO(town_record_type,spec_on_entry); + MEM_INFO(town_record_type,spec_on_entry_if_dead); + MEM_INFO(town_record_type,timer_spec_times); + MEM_INFO(town_record_type,timer_specs); + MEM_INFO(town_record_type,strlens); + MEM_INFO(town_record_type,specials); + MEM_INFO(town_record_type,specials1); + MEM_INFO(town_record_type,specials2); + MEM_INFO(town_record_type,res1); + MEM_INFO(town_record_type,res2); + MEM_INFO(town_record_type,difficulty); + STRUCT_INFO(big_tr_type); + MEM_INFO(big_tr_type,terrain); + MEM_INFO(big_tr_type,room_rect); + MEM_INFO(big_tr_type,creatures); + MEM_INFO(big_tr_type,lighting); + STRUCT_INFO(ave_tr_type); + MEM_INFO(ave_tr_type,terrain); + MEM_INFO(ave_tr_type,room_rect); + MEM_INFO(ave_tr_type,creatures); + MEM_INFO(ave_tr_type,lighting); + STRUCT_INFO(tiny_tr_type); + MEM_INFO(tiny_tr_type,terrain); + MEM_INFO(tiny_tr_type,room_rect); + MEM_INFO(tiny_tr_type,creatures); + MEM_INFO(tiny_tr_type,lighting); + STRUCT_INFO(city_block_type); + MEM_INFO(city_block_type,block_type); + MEM_INFO(city_block_type,block_destroy_time); + MEM_INFO(city_block_type,block_alignment); + MEM_INFO(city_block_type,block_key_time); + MEM_INFO(city_block_type,block_loc); + STRUCT_INFO(city_ter_rect_type); + MEM_INFO(city_ter_rect_type,what_rect); + MEM_INFO(city_ter_rect_type,ter_type); + MEM_INFO(city_ter_rect_type,hollow); + STRUCT_INFO(template_town_type); + MEM_INFO(template_town_type,creatures); + MEM_INFO(template_town_type,city_block); + MEM_INFO(template_town_type,city_ter_rect); + STRUCT_INFO(scen_item_data_type); + MEM_INFO(scen_item_data_type,scen_items); + MEM_INFO(scen_item_data_type,monst_names); + MEM_INFO(scen_item_data_type,ter_names); + STRUCT_INFO(item_storage_shortcut_type); + MEM_INFO(item_storage_shortcut_type,ter_type); + MEM_INFO(item_storage_shortcut_type,item_num); + MEM_INFO(item_storage_shortcut_type,item_odds); + MEM_INFO(item_storage_shortcut_type,property); + STRUCT_INFO(monster_record_type); + MEM_INFO(monster_record_type,m_num); + MEM_INFO(monster_record_type,level); + MEM_INFO(monster_record_type,m_name); + MEM_INFO(monster_record_type,health); + MEM_INFO(monster_record_type,m_health); + MEM_INFO(monster_record_type,mp); + MEM_INFO(monster_record_type,max_mp); + MEM_INFO(monster_record_type,armor); + MEM_INFO(monster_record_type,skill); + MEM_INFO(monster_record_type,a); + MEM_INFO(monster_record_type,a1_type); + MEM_INFO(monster_record_type,a23_type); + MEM_INFO(monster_record_type,m_type); + MEM_INFO(monster_record_type,speed); + MEM_INFO(monster_record_type,ap); + MEM_INFO(monster_record_type,mu); + MEM_INFO(monster_record_type,cl); + MEM_INFO(monster_record_type,breath); + MEM_INFO(monster_record_type,breath_type); + MEM_INFO(monster_record_type,treasure); + MEM_INFO(monster_record_type,spec_skill); + MEM_INFO(monster_record_type,poison); + MEM_INFO(monster_record_type,morale); + MEM_INFO(monster_record_type,m_morale); + MEM_INFO(monster_record_type,corpse_item); + MEM_INFO(monster_record_type,corpse_item_chance); + MEM_INFO(monster_record_type,status); + MEM_INFO(monster_record_type,direction); + MEM_INFO(monster_record_type,immunities); + MEM_INFO(monster_record_type,x_width); + MEM_INFO(monster_record_type,y_width); + MEM_INFO(monster_record_type,radiate_1); + MEM_INFO(monster_record_type,radiate_2); + MEM_INFO(monster_record_type,default_attitude); + MEM_INFO(monster_record_type,summon_type); + MEM_INFO(monster_record_type,default_facial_pic); + MEM_INFO(monster_record_type,res1); + MEM_INFO(monster_record_type,res2); + MEM_INFO(monster_record_type,res3); + MEM_INFO(monster_record_type,picture_num); + STRUCT_INFO(horse_record_type); + MEM_INFO(horse_record_type,horse_loc); + MEM_INFO(horse_record_type,horse_loc_in_sec); + MEM_INFO(horse_record_type,horse_sector); + MEM_INFO(horse_record_type,which_town); + MEM_INFO(horse_record_type,exists); + MEM_INFO(horse_record_type,property); + STRUCT_INFO(boat_record_type); + MEM_INFO(boat_record_type,boat_loc); + MEM_INFO(boat_record_type,boat_loc_in_sec); + MEM_INFO(boat_record_type,boat_sector); + MEM_INFO(boat_record_type,which_town); + MEM_INFO(boat_record_type,exists); + MEM_INFO(boat_record_type,property); + STRUCT_INFO(talk_save_type); + MEM_INFO(talk_save_type,personality); + MEM_INFO(talk_save_type,town_num); + MEM_INFO(talk_save_type,str1); + MEM_INFO(talk_save_type,str2); + STRUCT_INFO(creature_data_type); + MEM_INFO(creature_data_type,active); + MEM_INFO(creature_data_type,attitude); + MEM_INFO(creature_data_type,number); + MEM_INFO(creature_data_type,m_loc); + MEM_INFO(creature_data_type,m_d); + MEM_INFO(creature_data_type,mobile); + MEM_INFO(creature_data_type,summoned); + MEM_INFO(creature_data_type,monst_start); + STRUCT_INFO(creature_list_type); + MEM_INFO(creature_list_type,dudes); + MEM_INFO(creature_list_type,which_town); + MEM_INFO(creature_list_type,friendly); + STRUCT_INFO(outdoor_creature_type); + MEM_INFO(outdoor_creature_type,exists); + MEM_INFO(outdoor_creature_type,direction); + MEM_INFO(outdoor_creature_type,what_monst); + MEM_INFO(outdoor_creature_type,which_sector); + MEM_INFO(outdoor_creature_type,m_loc); + STRUCT_INFO(party_record_type); + MEM_INFO(party_record_type,age); + MEM_INFO(party_record_type,gold); + MEM_INFO(party_record_type,food); + MEM_INFO(party_record_type,stuff_done); + MEM_INFO(party_record_type,item_taken); + MEM_INFO(party_record_type,light_level); + MEM_INFO(party_record_type,outdoor_corner); + MEM_INFO(party_record_type,i_w_c); + MEM_INFO(party_record_type,p_loc); + MEM_INFO(party_record_type,loc_in_sec); + MEM_INFO(party_record_type,boats); + MEM_INFO(party_record_type,horses); + MEM_INFO(party_record_type,creature_save); + MEM_INFO(party_record_type,in_boat); + MEM_INFO(party_record_type,in_horse); + MEM_INFO(party_record_type,out_c); + MEM_INFO(party_record_type,magic_store_items); + MEM_INFO(party_record_type,imprisoned_monst); + MEM_INFO(party_record_type,m_seen); + MEM_INFO(party_record_type,journal_str); + MEM_INFO(party_record_type,journal_day); + MEM_INFO(party_record_type,special_notes_str); + MEM_INFO(party_record_type,talk_save); + MEM_INFO(party_record_type,direction); + MEM_INFO(party_record_type,at_which_save_slot); + MEM_INFO(party_record_type,alchemy); + MEM_INFO(party_record_type,can_find_town); + MEM_INFO(party_record_type,key_times); + MEM_INFO(party_record_type,party_event_timers); + MEM_INFO(party_record_type,global_or_town); + MEM_INFO(party_record_type,node_to_call); + MEM_INFO(party_record_type,spec_items); + MEM_INFO(party_record_type,help_received); + MEM_INFO(party_record_type,m_killed); + MEM_INFO(party_record_type,total_m_killed); + MEM_INFO(party_record_type,total_dam_done); + MEM_INFO(party_record_type,total_xp_gained); + MEM_INFO(party_record_type,total_dam_taken); + MEM_INFO(party_record_type,scen_name); + STRUCT_INFO(scenario_data_type); + MEM_INFO(scenario_data_type,out_width); + MEM_INFO(scenario_data_type,out_height); + MEM_INFO(scenario_data_type,difficulty); + MEM_INFO(scenario_data_type,intro_pic); + MEM_INFO(scenario_data_type,default_ground); + MEM_INFO(scenario_data_type,town_size); + MEM_INFO(scenario_data_type,town_hidden); + MEM_INFO(scenario_data_type,flag_a); + MEM_INFO(scenario_data_type,intro_mess_pic); + MEM_INFO(scenario_data_type,intro_mess_len); + MEM_INFO(scenario_data_type,where_start); + MEM_INFO(scenario_data_type,out_sec_start); + MEM_INFO(scenario_data_type,out_start); + MEM_INFO(scenario_data_type,which_town_start); + MEM_INFO(scenario_data_type,flag_b); + MEM_INFO(scenario_data_type,town_data_size); + MEM_INFO(scenario_data_type,town_to_add_to); + MEM_INFO(scenario_data_type,flag_to_add_to_town); + MEM_INFO(scenario_data_type,flag_c); + MEM_INFO(scenario_data_type,out_data_size); + MEM_INFO(scenario_data_type,store_item_rects); + MEM_INFO(scenario_data_type,store_item_towns); + MEM_INFO(scenario_data_type,flag_e); + MEM_INFO(scenario_data_type,special_items); + MEM_INFO(scenario_data_type,special_item_special); + MEM_INFO(scenario_data_type,rating); + MEM_INFO(scenario_data_type,uses_custom_graphics); + MEM_INFO(scenario_data_type,flag_f); + MEM_INFO(scenario_data_type,scen_monsters); + MEM_INFO(scenario_data_type,scen_boats); + MEM_INFO(scenario_data_type,scen_horses); + MEM_INFO(scenario_data_type,flag_g); + MEM_INFO(scenario_data_type,ter_types); + MEM_INFO(scenario_data_type,scenario_timer_times); + MEM_INFO(scenario_data_type,scenario_timer_specs); + MEM_INFO(scenario_data_type,flag_h); + MEM_INFO(scenario_data_type,scen_specials); + MEM_INFO(scenario_data_type,storage_shortcuts); + MEM_INFO(scenario_data_type,flag_d); + MEM_INFO(scenario_data_type,scen_str_len); + MEM_INFO(scenario_data_type,flag_i); + MEM_INFO(scenario_data_type,last_out_edited); + MEM_INFO(scenario_data_type,last_town_edited); + STRUCT_INFO(setup_save_type); + MEM_INFO(setup_save_type,setup); + STRUCT_INFO(pc_record_type); + MEM_INFO(pc_record_type,main_status); + MEM_INFO(pc_record_type,name); + MEM_INFO(pc_record_type,skills); + MEM_INFO(pc_record_type,max_health); + MEM_INFO(pc_record_type,cur_health); + MEM_INFO(pc_record_type,max_sp); + MEM_INFO(pc_record_type,cur_sp); + MEM_INFO(pc_record_type,experience); + MEM_INFO(pc_record_type,skill_pts); + MEM_INFO(pc_record_type,level); + MEM_INFO(pc_record_type,status); + MEM_INFO(pc_record_type,items); + MEM_INFO(pc_record_type,equip); + MEM_INFO(pc_record_type,priest_spells); + MEM_INFO(pc_record_type,mage_spells); + MEM_INFO(pc_record_type,which_graphic); + MEM_INFO(pc_record_type,weap_poisoned); + MEM_INFO(pc_record_type,advan); + MEM_INFO(pc_record_type,traits); + MEM_INFO(pc_record_type,race); + MEM_INFO(pc_record_type,exp_adj); + MEM_INFO(pc_record_type,direction); + STRUCT_INFO(town_item_list); + MEM_INFO(town_item_list,items); + STRUCT_INFO(stored_town_maps_type); + MEM_INFO(stored_town_maps_type,town_maps); + STRUCT_INFO(stored_outdoor_maps_type); + MEM_INFO(stored_outdoor_maps_type,outdoor_maps); + STRUCT_INFO(stored_items_list_type); + MEM_INFO(stored_items_list_type,items); + STRUCT_INFO(current_town_type); + MEM_INFO(current_town_type,town_num); + MEM_INFO(current_town_type,difficulty); + MEM_INFO(current_town_type,town); + MEM_INFO(current_town_type,explored); + MEM_INFO(current_town_type,hostile); + MEM_INFO(current_town_type,monst); + MEM_INFO(current_town_type,in_boat); + MEM_INFO(current_town_type,p_loc); + STRUCT_INFO(out_info_type); + MEM_INFO(out_info_type,expl); + + +} diff --git a/osx/oldstructs.h b/osx/oldstructs.h index 9bee11a6..891df4af 100644 --- a/osx/oldstructs.h +++ b/osx/oldstructs.h @@ -22,6 +22,7 @@ namespace legacy { typedef struct Rect Rect; typedef uint8_t Boolean; } + using pad_t = uint8_t; // To make the padding bytes super-explicit //#define NLS 25 // // number of left slots for buttons //#define NRS 400 @@ -29,41 +30,42 @@ namespace legacy { //#define NRSONPAGE 33 // // number of right slots for scrolling list on page at 1 time +#pragma pack(push,1) struct location { int8_t x,y; - } __attribute__((packed)); + }; struct special_node_type { int16_t type,sd1,sd2,pic,m1,m2,ex1a,ex1b,ex2a,ex2b,jumpto; - } __attribute__((packed)); + }; struct talking_node_type { int16_t personality,type; int8_t link1[4],link2[4]; int16_t extras[4]; - } __attribute__((packed)); + }; struct talking_record_type { uint8_t strlens[200]; talking_node_type talk_nodes[60]; - } __attribute__((packed)); + }; struct terrain_type_type { int16_t picture; uint8_t blockage,flag1,flag2,special,trans_to_what,fly_over,boat_over; uint8_t block_horse,light_radius,step_sound,shortcut_key,res1,res2,res3; - } __attribute__((packed)); + }; struct wandering_type { uint8_t monst[4]; - } __attribute__((packed)); + }; struct out_wandering_type { uint8_t monst[7]; uint8_t friendly[3]; int16_t spec_on_meet,spec_on_win,spec_on_flee,cant_flee; int16_t end_spec1,end_spec2; - } __attribute__((packed)); + }; struct outdoor_record_type { uint8_t terrain[48][48]; @@ -77,7 +79,7 @@ namespace legacy { Rect info_rect[8]; uint8_t strlens[180]; special_node_type specials[60]; - } __attribute__((packed)); + }; struct creature_start_type { uint8_t number; @@ -90,7 +92,7 @@ namespace legacy { int8_t spec_enc_code,time_code; int16_t monster_time,personality; int16_t special_on_kill,facial_pic; - } __attribute__((packed)); + }; struct short_item_record_type { int16_t variety, item_level; @@ -102,29 +104,30 @@ namespace legacy { char full_name[25], name[15]; uint8_t reserved1,reserved2; uint8_t magic_use_type, ability_strength, treas_class, real_abil; - } __attribute__((packed)); + }; struct item_record_type { int16_t variety, item_level; int8_t awkward, bonus, protection, charges, type, magic_use_type; uint8_t graphic_num,ability, ability_strength,type_flag, is_special; - int16_t value __attribute__((aligned(2))); + pad_t xxx; + int16_t value; uint8_t weight, special_class; location item_loc; char full_name[25], name[15]; uint8_t treas_class,item_properties,reserved1,reserved2; - } __attribute__((packed)); + }; struct preset_item_type { location item_loc; int16_t item_code,ability; uint8_t charges,always_there,property,contained; - } __attribute__((packed)); + }; struct preset_field_type { location field_loc; int16_t field_type; - } __attribute__((packed)); + }; struct town_record_type { int16_t town_chop_time,town_chop_key; @@ -148,28 +151,28 @@ namespace legacy { special_node_type specials[100]; uint8_t specials1,specials2,res1,res2; int16_t difficulty; - } __attribute__((packed)); + }; struct big_tr_type { uint8_t terrain[64][64]; Rect room_rect[16]; creature_start_type creatures[60]; uint8_t lighting[8][64]; - } __attribute__((packed)); + }; struct ave_tr_type { uint8_t terrain[48][48]; Rect room_rect[16]; creature_start_type creatures[40]; uint8_t lighting[6][48]; - } __attribute__((packed)); + }; struct tiny_tr_type { uint8_t terrain[32][32]; Rect room_rect[16]; creature_start_type creatures[30]; uint8_t lighting[4][32]; - } __attribute__((packed)); + }; struct city_block_type { int16_t block_type; @@ -177,29 +180,29 @@ namespace legacy { int8_t block_alignment; int8_t block_key_time; location block_loc; - } __attribute__((packed)); + }; struct city_ter_rect_type { Rect what_rect; uint8_t ter_type; uint8_t hollow; - } __attribute__((packed)); + }; struct template_town_type { creature_start_type creatures[30]; city_block_type city_block[15]; city_ter_rect_type city_ter_rect[10]; - } __attribute__((packed)); + }; struct scen_item_data_type { item_record_type scen_items[400]; char monst_names[256][20]; char ter_names[256][30]; - } __attribute__((packed)); + }; struct item_storage_shortcut_type { int16_t ter_type,item_num[10],item_odds[10],property; - } __attribute__((packed)); + }; struct monster_record_type { uint8_t m_num,level,m_name[26]; @@ -214,48 +217,50 @@ namespace legacy { uint8_t default_attitude,summon_type,default_facial_pic,res1,res2,res3; int16_t picture_num; - } __attribute__((packed)); + }; struct horse_record_type { location horse_loc,horse_loc_in_sec,horse_sector; int16_t which_town; Boolean exists,property; - } __attribute__((packed)); + }; struct boat_record_type { location boat_loc,boat_loc_in_sec,boat_sector; int16_t which_town; Boolean exists,property; - } __attribute__((packed)); + }; struct talk_save_type { int16_t personality; int16_t town_num; int16_t str1,str2; - } __attribute__((packed)); + }; struct creature_data_type { int16_t active,attitude; - uint8_t number; // TODO: I think there should be a byte of padding near here, but where exactly?? - location m_loc __attribute__((aligned(2))); + uint8_t number; + pad_t xxx; + location m_loc; monster_record_type m_d; int16_t mobile; int16_t summoned; creature_start_type monst_start; - } __attribute__((packed)); + }; struct creature_list_type { creature_data_type dudes[60]; int16_t which_town; int16_t friendly; - } __attribute__((packed)); + }; struct outdoor_creature_type { - Boolean exists; // TODO: I think there should be a byte of padding near here, but where exactly?? - int16_t direction __attribute__((aligned(2))); + Boolean exists; + pad_t xxx; + int16_t direction; out_wandering_type what_monst; location which_sector,m_loc; - } __attribute__((packed)); + }; struct party_record_type { int32_t age; @@ -287,7 +292,7 @@ namespace legacy { int16_t m_killed[200]; int32_t total_m_killed,total_dam_done,total_xp_gained,total_dam_taken; char scen_name[256]; - } __attribute__((packed)); + }; struct scenario_data_type { uint8_t out_width,out_height,difficulty,intro_pic,default_ground; @@ -295,7 +300,8 @@ namespace legacy { uint8_t town_hidden[200]; int16_t flag_a; int16_t intro_mess_pic,intro_mess_len; - location where_start __attribute__((aligned(2))); + pad_t xxx; + location where_start; location out_sec_start,out_start; int16_t which_town_start; int16_t flag_b; @@ -326,11 +332,11 @@ namespace legacy { int16_t flag_i; location last_out_edited; int16_t last_town_edited; - } __attribute__((packed)); + }; struct setup_save_type { uint8_t setup[4][64][64]; - } __attribute__((packed)); + }; struct pc_record_type { int16_t main_status; @@ -344,23 +350,23 @@ namespace legacy { int16_t which_graphic,weap_poisoned; Boolean advan[15],traits[15]; int16_t race,exp_adj,direction; - } __attribute__((packed)); + }; struct town_item_list { item_record_type items[115]; - } __attribute__((packed)); + }; struct stored_town_maps_type { int8_t town_maps[200][8][64]; - } __attribute__((packed)); + }; struct stored_outdoor_maps_type { int8_t outdoor_maps[100][6][48]; - } __attribute__((packed)); + }; struct stored_items_list_type { item_record_type items[115]; - } __attribute__((packed)); + }; struct current_town_type { int16_t town_num, difficulty; @@ -370,11 +376,11 @@ namespace legacy { creature_list_type monst; Boolean in_boat; location p_loc; - } __attribute__((packed)); + }; struct out_info_type { int8_t expl[96][96]; - } __attribute__((packed)); + }; // struct piles_of_stuff_dumping_type { // int8_t strings_ls[NLS][40]; @@ -385,6 +391,7 @@ namespace legacy { // int8_t talk_strs[170][256]; // scen_item_data_type scen_item_list; // }; +#pragma pack(pop) }; #endif diff --git a/osx/scenedit/scen.core.h b/osx/scenedit/scen.core.h index 8df9c18a..12e4553c 100644 --- a/osx/scenedit/scen.core.h +++ b/osx/scenedit/scen.core.h @@ -1,5 +1,5 @@ -void init_scenario() __attribute__((deprecated)); +__declspec(deprecated) void init_scenario(); short edit_ter_type(ter_num_t which_ter); short edit_monst_type(short which_monst); cMonster edit_monst_abil(cMonster starting_record,short parent_num); diff --git a/osx/scenedit/scen.townout.h b/osx/scenedit/scen.townout.h index e48f6bd0..ed4eca6d 100644 --- a/osx/scenedit/scen.townout.h +++ b/osx/scenedit/scen.townout.h @@ -1,5 +1,5 @@ -void init_town(short size) __attribute__((deprecated)); -void init_out() __attribute__((deprecated)); +__declspec(deprecated) void init_town(short size); +__declspec(deprecated) void init_out(); void edit_placed_monst(short which_m); cCreature edit_placed_monst_adv(cCreature monst_record, class cDialog& parent); void edit_sign(short which_sign,short picture); diff --git a/osx/tools/fileio.cpp b/osx/tools/fileio.cpp index cf910c80..3a8dbeb0 100644 --- a/osx/tools/fileio.cpp +++ b/osx/tools/fileio.cpp @@ -766,7 +766,7 @@ bool load_party(fs::path file_to_load){ // flag_type flag; // flag_type *flag_ptr; short vers,n; - struct __attribute__((packed)) {ushort a; ushort b; ushort c; ushort d; ushort e;} flags; + struct {ushort a; ushort b; ushort c; ushort d; ushort e;} flags; // TODO: Putting these flags in hex would make some things a bit clearer static const unsigned short mac_flags[3][2] = {