From a5a0c384746536af5dc95861e584acbf986b348f Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Tue, 26 Nov 2019 21:25:45 +0100 Subject: [PATCH] - removed DObject. Just for the menu this can be done much simpler - the entire setup here doesn't work well with the game frontends being compiled as separate modules anyway. --- source/CMakeLists.txt | 10 +- source/common/dobject/__autostart.cpp | 75 ----------- source/common/dobject/autosegs.h | 102 --------------- source/common/dobject/dobject.cpp | 76 ----------- source/common/dobject/dobject.h | 182 -------------------------- source/common/dobject/dobjtype.cpp | 106 --------------- source/common/dobject/dobjtype.h | 50 ------- source/common/dobject/zzautozend.cpp | 54 -------- 8 files changed, 1 insertion(+), 654 deletions(-) delete mode 100644 source/common/dobject/__autostart.cpp delete mode 100644 source/common/dobject/autosegs.h delete mode 100644 source/common/dobject/dobject.cpp delete mode 100644 source/common/dobject/dobject.h delete mode 100644 source/common/dobject/dobjtype.cpp delete mode 100644 source/common/dobject/dobjtype.h delete mode 100644 source/common/dobject/zzautozend.cpp diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 1e743e758..8ae283e2c 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -623,7 +623,6 @@ file( GLOB HEADER_FILES common/console/*.h common/filesystem/*.h common/music/*.h - common/dobject/*.h common/menu/*.h build/src/*.h @@ -666,8 +665,7 @@ set( FASTMATH_SOURCES set (PCH_SOURCES - common/dobject/__autostart.cpp # must be first - + audiolib/src/drivers.cpp audiolib/src/driver_adlib.cpp audiolib/src/driver_nosound.cpp @@ -829,10 +827,6 @@ set (PCH_SOURCES common/music/backend/oalsound.cpp common/music/backend/i_sound.cpp - - common/dobject/dobject.cpp - common/dobject/dobjtype.cpp - common/menu/joystickmenu.cpp common/menu/listmenu.cpp common/menu/loadsavemenu.cpp @@ -842,8 +836,6 @@ set (PCH_SOURCES common/menu/messagebox.cpp common/menu/optionmenu.cpp common/menu/readthis.cpp - - common/dobject/zzautozend.cpp #must be last ) if( MSVC ) diff --git a/source/common/dobject/__autostart.cpp b/source/common/dobject/__autostart.cpp deleted file mode 100644 index 635bf5b67..000000000 --- a/source/common/dobject/__autostart.cpp +++ /dev/null @@ -1,75 +0,0 @@ -/* -** autostart.cpp -** This file contains the heads of lists stored in special data segments -** -**--------------------------------------------------------------------------- -** Copyright 1998-2006 Randy Heit -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions -** are met: -** -** 1. Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** 2. Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in the -** documentation and/or other materials provided with the distribution. -** 3. The name of the author may not be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -**--------------------------------------------------------------------------- -** -** The particular scheme used here was chosen because it's small. -** -** An alternative that will work with any C++ compiler is to use static -** classes to build these lists at run time. Under Visual C++, doing things -** that way can require a lot of extra space, which is why I'm doing things -** this way. -** -** In the case of PClass lists (section creg), I orginally used the -** constructor to do just that, and the code for that still exists if you -** compile with something other than Visual C++ or GCC. -*/ - -#include "autosegs.h" - -#if defined(_MSC_VER) - -// The various reg sections are used to group pointers spread across multiple -// source files into cohesive arrays in the final executable. We don't -// actually care about these sections themselves and merge them all into -// a single section during the final link. (.rdata is the standard section -// for initialized read-only data.) - -#pragma comment(linker, "/merge:.creg=.rdata") - -#pragma section(".creg$a",read) -__declspec(allocate(".creg$a")) void *const CRegHead = 0; - -#elif defined(__GNUC__) - -#include "doomtype.h" - -// I don't know of an easy way to merge sections together with the GNU linker, -// so GCC users will see all of these sections appear in the final executable. -// (There are linker scripts, but that apparently involves extracting the -// default script from ld and then modifying it.) - -void *const CRegHead __attribute__((section(SECTION_CREG))) = 0; - -#else - -#error Please fix autostart.cpp for your compiler - -#endif diff --git a/source/common/dobject/autosegs.h b/source/common/dobject/autosegs.h deleted file mode 100644 index 1884d9d54..000000000 --- a/source/common/dobject/autosegs.h +++ /dev/null @@ -1,102 +0,0 @@ -/* -** autosegs.h -** Arrays built at link-time -** -**--------------------------------------------------------------------------- -** Copyright 1998-2006 Randy Heit -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions -** are met: -** -** 1. Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** 2. Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in the -** documentation and/or other materials provided with the distribution. -** 3. The name of the author may not be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -**--------------------------------------------------------------------------- -** -*/ - -#ifndef AUTOSEGS_H -#define AUTOSEGS_H - -#define REGMARKER(x) (x) -typedef void * const REGINFO; - -// List of Action functons -extern REGINFO ARegHead; -extern REGINFO ARegTail; - -// List of TypeInfos -extern REGINFO CRegHead; -extern REGINFO CRegTail; - -// List of properties -extern REGINFO GRegHead; -extern REGINFO GRegTail; - -// List of variables -extern REGINFO MRegHead; -extern REGINFO MRegTail; - -// List of MAPINFO map options -extern REGINFO YRegHead; -extern REGINFO YRegTail; - -class FAutoSegIterator -{ - public: - FAutoSegIterator(REGINFO &head, REGINFO &tail) - { - // Weirdness. Mingw's linker puts these together backwards. - if (&head <= &tail) - { - Head = &head; - Tail = &tail; - } - else - { - Head = &tail; - Tail = &head; - } - Probe = Head; - } - REGINFO operator*() const - { - return *Probe; - } - FAutoSegIterator &operator++() - { - do - { - ++Probe; - } while (*Probe == 0 && Probe < Tail); - return *this; - } - void Reset() - { - Probe = Head; - } - - protected: - REGINFO *Probe; - REGINFO *Head; - REGINFO *Tail; -}; - -#endif diff --git a/source/common/dobject/dobject.cpp b/source/common/dobject/dobject.cpp deleted file mode 100644 index 98b8105fe..000000000 --- a/source/common/dobject/dobject.cpp +++ /dev/null @@ -1,76 +0,0 @@ -/* -** dobject.cpp -** Implements the base class DObject, which most other classes derive from -** -**--------------------------------------------------------------------------- -** Copyright 1998-2006 Randy Heit -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions -** are met: -** -** 1. Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** 2. Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in the -** documentation and/or other materials provided with the distribution. -** 3. The name of the author may not be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -**--------------------------------------------------------------------------- -** -*/ - -#include -#include - -#include "dobject.h" - -#if 0 - -PClass DObject::_StaticType; -ClassReg DObject::RegistrationInfo = -{ - &DObject::_StaticType, // MyClass - "DObject", // Name - NULL, // ParentType - sizeof(DObject), // SizeOf - NULL, // Pointers - &DObject::InPlaceConstructor // ConstructNative -}; -_DECLARE_TI(DObject) - -void DObject::InPlaceConstructor (void *mem) -{ - new ((EInPlace *)mem) DObject; -} - -DObject::DObject () -: Class(0) -{ -} - -DObject::DObject (PClass *inClass) -: Class(inClass) -{ -} - -DObject::~DObject () -{ -} - -void DObject::Destroy () -{ -} -#endif \ No newline at end of file diff --git a/source/common/dobject/dobject.h b/source/common/dobject/dobject.h deleted file mode 100644 index 502f3c35b..000000000 --- a/source/common/dobject/dobject.h +++ /dev/null @@ -1,182 +0,0 @@ -/* -** dobject.h -** -**--------------------------------------------------------------------------- -** Copyright 1998-2008 Randy Heit -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions -** are met: -** -** 1. Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** 2. Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in the -** documentation and/or other materials provided with the distribution. -** 3. The name of the author may not be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -**--------------------------------------------------------------------------- -** -*/ - -#ifndef __DOBJECT_H__ -#define __DOBJECT_H__ - -#if 0 - -#include - -struct PClass; - -#define RUNTIME_TYPE(object) (object->GetClass()) // Passed an object, returns the type of that object -#define RUNTIME_CLASS(cls) (&cls::_StaticType) // Passed a class name, returns a PClass representing that class -#define NATIVE_TYPE(object) (object->StaticType()) // Passed an object, returns the type of the C++ class representing the object - -struct ClassReg -{ - PClass *MyClass; - const char *Name; - PClass *ParentType; - unsigned int SizeOf; - const size_t *Pointers; - void (*ConstructNative)(void *); - - void RegisterClass() const; -}; - -enum EInPlace { EC_InPlace }; - -#define DECLARE_ABSTRACT_CLASS(cls,parent) \ -public: \ - static PClass _StaticType; \ - virtual PClass *StaticType() const { return &_StaticType; } \ - static ClassReg RegistrationInfo, *RegistrationInfoPtr; \ -private: \ - typedef parent Super; \ - typedef cls ThisClass; - -#define DECLARE_CLASS(cls,parent) \ - DECLARE_ABSTRACT_CLASS(cls,parent) \ - private: static void InPlaceConstructor (void *mem); - -#if defined(_MSC_VER) -# pragma data_seg(".creg$u") -# pragma data_seg() -# define _DECLARE_TI(cls) __declspec(allocate(".creg$u")) ClassReg *cls::RegistrationInfoPtr = &cls::RegistrationInfo; -#else -# define _DECLARE_TI(cls) ClassReg *cls::RegistrationInfoPtr __attribute__((section(SECTION_CREG))) = &cls::RegistrationInfo; -#endif - -#define _IMP_PCLASS(cls,ptrs,create) \ - PClass cls::_StaticType; \ - ClassReg cls::RegistrationInfo = {\ - RUNTIME_CLASS(cls), \ - #cls, \ - RUNTIME_CLASS(cls::Super), \ - sizeof(cls), \ - ptrs, \ - create }; \ - _DECLARE_TI(cls) - -#define _IMP_CREATE_OBJ(cls) \ - void cls::InPlaceConstructor(void *mem) { new((EInPlace *)mem) cls; } - -#define IMPLEMENT_CLASS(cls) \ - _IMP_CREATE_OBJ(cls) \ - _IMP_PCLASS(cls,NULL,cls::InPlaceConstructor) - -#define IMPLEMENT_ABSTRACT_CLASS(cls) \ - _IMP_PCLASS(cls,NULL,NULL) - - -class DObject -{ -public: - static PClass _StaticType; - virtual PClass *StaticType() const { return &_StaticType; } - static ClassReg RegistrationInfo, *RegistrationInfoPtr; - static void InPlaceConstructor (void *mem); -private: - typedef DObject ThisClass; - - // Per-instance variables. There are four. -private: - PClass *Class; // This object's type -public: - -public: - DObject (); - DObject (PClass *inClass); - virtual ~DObject(); - - inline bool IsKindOf (const PClass *base); - inline bool IsA (const PClass *type); - - virtual void Destroy (); - - PClass *GetClass() const - { - if (Class == NULL) - { - // Save a little time the next time somebody wants this object's type - // by recording it now. - const_cast(this)->Class = StaticType(); - } - return Class; - } - - void SetClass (PClass *inClass) - { - Class = inClass; - } - - void* operator new(size_t p) - { - return malloc(p); - } - - void operator delete (void* mem) - { - free(mem); - } - -protected: - // This form of placement new and delete is for use *only* by PClass's - // CreateNew() method. Do not use them for some other purpose. - void *operator new(size_t, EInPlace *mem) - { - return (void *)mem; - } - - void operator delete (void *mem, EInPlace *) - { - free (mem); - } -}; - -#include "dobjtype.h" - -inline bool DObject::IsKindOf (const PClass *base) -{ - return base->IsAncestorOf (GetClass ()); -} - -inline bool DObject::IsA (const PClass *type) -{ - return (type == GetClass()); -} - -#endif -#endif //__DOBJECT_H__ diff --git a/source/common/dobject/dobjtype.cpp b/source/common/dobject/dobjtype.cpp deleted file mode 100644 index 6f4d50485..000000000 --- a/source/common/dobject/dobjtype.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/* -** dobjtype.cpp -** Implements the type information class -** -**--------------------------------------------------------------------------- -** Copyright 1998-2008 Randy Heit -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions -** are met: -** -** 1. Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** 2. Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in the -** documentation and/or other materials provided with the distribution. -** 3. The name of the author may not be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -**--------------------------------------------------------------------------- -** -*/ - -#include -#include -#include "dobject.h" -#include "templates.h" -#include "autosegs.h" -#include "tarray.h" -#if 0 - -static TArray Types; -static TMap Map; - -static int cregcmp (const void *a, const void *b) -{ - // VC++ introduces NULLs in the sequence. GCC seems to work as expected and not do it. - const ClassReg *class1 = *(const ClassReg **)a; - const ClassReg *class2 = *(const ClassReg **)b; - if (class1 == NULL) return 1; - if (class2 == NULL) return -1; - return strcmp (class1->Name, class2->Name); -} - -void PClass::StaticInit () -{ - // Sort classes by name to remove dependance on how the compiler ordered them. - REGINFO *head = &CRegHead; - REGINFO *tail = &CRegTail; - - // MinGW's linker is linking the object files backwards for me now... - if (head > tail) - { - std::swap (head, tail); - } - qsort ((void*)(head + 1), tail - head - 1, sizeof(REGINFO), cregcmp); - - FAutoSegIterator probe(CRegHead, CRegTail); - - while (*++probe != NULL) - { - ((ClassReg *)*probe)->RegisterClass (); - } -} - -void ClassReg::RegisterClass () const -{ - assert (MyClass != NULL); - - // Add type to list - MyClass->TypeName = FName(Name+1); - MyClass->ParentClass = ParentType; - MyClass->Size = SizeOf; - MyClass->ConstructNative = ConstructNative; - Map.Insert(MyClass->TypeName, MyClass); -} - -// Find a type, passed the name as a name -const PClass *PClass::FindClass (FName zaname) -{ - auto pcls = Map.CheckKey(zaname); - return pcls? *pcls : nullptr; -} - -// Create a new object that this class represents -DObject *PClass::CreateNew () const -{ - uint8_t *mem = (uint8_t *)calloc (Size, 1); - assert (mem != NULL); - - ConstructNative (mem); - ((DObject *)mem)->SetClass (const_cast(this)); - return (DObject *)mem; -} -#endif \ No newline at end of file diff --git a/source/common/dobject/dobjtype.h b/source/common/dobject/dobjtype.h deleted file mode 100644 index 15c80fbb1..000000000 --- a/source/common/dobject/dobjtype.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef DOBJTYPE_H -#define DOBJTYPE_H - -#ifndef __DOBJECT_H__ -#error You must #include "dobject.h" to get dobjtype.h -#endif - -#include "name.h" - - -// Meta-info for every class derived from DObject --------------------------- - -struct PClass -{ - static void StaticInit (); - - // Per-class information ------------------------------------- - FName TypeName; // this class's name - unsigned int Size; // this class's size - PClass *ParentClass; // the class this class derives from - PClass *HashNext; - - void (*ConstructNative)(void *); - - // The rest are all functions and static data ---------------- - DObject *CreateNew () const; - - // Returns true if this type is an ancestor of (or same as) the passed type. - bool IsAncestorOf (const PClass *ti) const - { - while (ti) - { - if (this == ti) - return true; - ti = ti->ParentClass; - } - return false; - } - inline bool IsDescendantOf (const PClass *ti) const - { - return ti->IsAncestorOf (this); - } - - // Find a type, given its name. - static const PClass* FindClass(const char* name) { FName nm(name, true); return nm == NAME_None ? nullptr : FindClass(nm); } - static const PClass *FindClass (ENamedName name) { return FindClass (FName (name)); } - static const PClass *FindClass (FName name); -}; - -#endif diff --git a/source/common/dobject/zzautozend.cpp b/source/common/dobject/zzautozend.cpp deleted file mode 100644 index 70f1a77e9..000000000 --- a/source/common/dobject/zzautozend.cpp +++ /dev/null @@ -1,54 +0,0 @@ -/* -** autozend.cpp -** This file contains the tails of lists stored in special data segments -** -**--------------------------------------------------------------------------- -** Copyright 1998-2006 Randy Heit -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions -** are met: -** -** 1. Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** 2. Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in the -** documentation and/or other materials provided with the distribution. -** 3. The name of the author may not be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -**--------------------------------------------------------------------------- -** -** See autostart.cpp for an explanation of why I do things like this. -*/ - -#include "autosegs.h" - -#if defined(_MSC_VER) - -#pragma section(".creg$z",read) -__declspec(allocate(".creg$z")) void *const CRegTail = 0; - - -#elif defined(__GNUC__) - -#include "doomtype.h" - -void *const CRegTail __attribute__((section(SECTION_CREG))) = 0; - -#else - -#error Please fix autozend.cpp for your compiler - -#endif