- consolidated the 3 atterm implementations.

Each platform had its own copy. Why?
This commit is contained in:
Christoph Oelckers 2019-06-10 12:01:01 +02:00 committed by Rachael Alexanderson
parent 6b114207dc
commit ba09f553d4
34 changed files with 137 additions and 153 deletions

View file

@ -1298,6 +1298,7 @@ set (PCH_SOURCES
utility/nodebuilder/nodebuild_utility.cpp utility/nodebuilder/nodebuild_utility.cpp
utility/sc_man.cpp utility/sc_man.cpp
utility/stats.cpp utility/stats.cpp
utility/atterm.cpp
utility/cmdlib.cpp utility/cmdlib.cpp
utility/colormatcher.cpp utility/colormatcher.cpp
utility/configfile.cpp utility/configfile.cpp

View file

@ -102,6 +102,7 @@
#include "i_system.h" #include "i_system.h"
#include "g_cvars.h" #include "g_cvars.h"
#include "r_data/r_vanillatrans.h" #include "r_data/r_vanillatrans.h"
#include "atterm.h"
EXTERN_CVAR(Bool, hud_althud) EXTERN_CVAR(Bool, hud_althud)
EXTERN_CVAR(Int, vr_mode) EXTERN_CVAR(Int, vr_mode)

View file

@ -50,6 +50,7 @@
#include "types.h" #include "types.h"
#include "scriptutil.h" #include "scriptutil.h"
#include "i_system.h" #include "i_system.h"
#include "atterm.h"
// MACROS ------------------------------------------------------------------ // MACROS ------------------------------------------------------------------

View file

@ -302,6 +302,11 @@ inline float DEG2RAD(float deg)
return deg * float(M_PI / 180.0); return deg * float(M_PI / 180.0);
} }
inline double DEG2RAD(double deg)
{
return deg * (M_PI / 180.0);
}
inline float RAD2DEG(float deg) inline float RAD2DEG(float deg)
{ {
return deg * float(180. / M_PI); return deg * float(180. / M_PI);

View file

@ -49,6 +49,7 @@
#include "vm.h" #include "vm.h"
#include "i_system.h" #include "i_system.h"
#include "utf8.h" #include "utf8.h"
#include "atterm.h"
#define ARTIFLASH_OFFSET (statusBar->invBarOffset+6) #define ARTIFLASH_OFFSET (statusBar->invBarOffset+6)
enum enum

View file

@ -50,6 +50,7 @@
#include "g_levellocals.h" #include "g_levellocals.h"
#include "events.h" #include "events.h"
#include "i_system.h" #include "i_system.h"
#include "atterm.h"
static TArray<cluster_info_t> wadclusterinfos; static TArray<cluster_info_t> wadclusterinfos;
TArray<level_info_t> wadlevelinfos; TArray<level_info_t> wadlevelinfos;

View file

@ -62,6 +62,7 @@
#include "st_start.h" #include "st_start.h"
#include "m_misc.h" #include "m_misc.h"
#include "doomerrors.h" #include "doomerrors.h"
#include "atterm.h"
#include "i_net.h" #include "i_net.h"

View file

@ -66,6 +66,7 @@
#include "gameconfigfile.h" #include "gameconfigfile.h"
#include "gstrings.h" #include "gstrings.h"
#include "atterm.h"
FGameConfigFile *GameConfig; FGameConfigFile *GameConfig;

View file

@ -50,6 +50,7 @@
#include "gstrings.h" #include "gstrings.h"
#include "teaminfo.h" #include "teaminfo.h"
#include "r_data/sprites.h" #include "r_data/sprites.h"
#include "atterm.h"
void ClearSaveGames(); void ClearSaveGames();

View file

@ -75,6 +75,7 @@
#include "i_system.h" #include "i_system.h"
#include "v_video.h" #include "v_video.h"
#include "fragglescript/t_script.h" #include "fragglescript/t_script.h"
#include "atterm.h"
extern AActor *SpawnMapThing (int index, FMapThing *mthing, int position); extern AActor *SpawnMapThing (int index, FMapThing *mthing, int position);

View file

@ -42,6 +42,7 @@
#include "m_joy.h" #include "m_joy.h"
#include "templates.h" #include "templates.h"
#include "v_text.h" #include "v_text.h"
#include "atterm.h"
EXTERN_CVAR(Bool, joy_axespolling) EXTERN_CVAR(Bool, joy_axespolling)

View file

@ -33,6 +33,7 @@
#include "i_common.h" #include "i_common.h"
#include "s_sound.h" #include "s_sound.h"
#include "atterm.h"
#include <sys/sysctl.h> #include <sys/sysctl.h>
@ -64,57 +65,6 @@ EXTERN_CVAR(Bool, vid_vsync )
namespace namespace
{ {
// The maximum number of functions that can be registered with atterm.
const size_t MAX_TERMS = 64;
void (*TermFuncs[MAX_TERMS])();
const char *TermNames[MAX_TERMS];
size_t NumTerms;
} // unnamed namespace
// Expose this for i_main_except.cpp
void call_terms()
{
while (NumTerms > 0)
{
TermFuncs[--NumTerms]();
}
}
void addterm(void (*func)(), const char *name)
{
// Make sure this function wasn't already registered.
for (size_t i = 0; i < NumTerms; ++i)
{
if (TermFuncs[i] == func)
{
return;
}
}
if (NumTerms == MAX_TERMS)
{
func();
I_FatalError("Too many exit functions registered.");
}
TermNames[NumTerms] = name;
TermFuncs[NumTerms] = func;
++NumTerms;
}
void popterm()
{
if (NumTerms)
{
--NumTerms;
}
}
void Mac_I_FatalError(const char* const message) void Mac_I_FatalError(const char* const message)
{ {

View file

@ -36,9 +36,9 @@
#include "doomerrors.h" #include "doomerrors.h"
#include "vm.h" #include "vm.h"
#include "atterm.h"
// Import some functions from i_main.mm // Import some functions from i_main.mm
void call_terms();
void Mac_I_FatalError(const char* const message); void Mac_I_FatalError(const char* const message);
void OriginalMainTry(int argc, char** argv); void OriginalMainTry(int argc, char** argv);

View file

@ -48,6 +48,7 @@
#include "v_text.h" #include "v_text.h"
#include "x86.h" #include "x86.h"
#include "cmdlib.h" #include "cmdlib.h"
#include "atterm.h"
EXTERN_CVAR(String, language) EXTERN_CVAR(String, language)

View file

@ -54,6 +54,7 @@
#include "v_text.h" #include "v_text.h"
#include "version.h" #include "version.h"
#include "doomerrors.h" #include "doomerrors.h"
#include "atterm.h"
#include "gl/system/gl_framebuffer.h" #include "gl/system/gl_framebuffer.h"
#include "vulkan/system/vk_framebuffer.h" #include "vulkan/system/vk_framebuffer.h"

View file

@ -89,10 +89,6 @@ void I_Quit (void);
void I_Tactile (int on, int off, int total); void I_Tactile (int on, int off, int total);
void addterm (void (*func)(void), const char *name);
#define atterm(t) addterm (t, #t)
void popterm ();
void I_DebugPrint (const char *cp); void I_DebugPrint (const char *cp);
// Print a console string // Print a console string

View file

@ -43,6 +43,7 @@
#include "m_argv.h" #include "m_argv.h"
#include "doomerrors.h" #include "doomerrors.h"
#include "swrenderer/r_swrenderer.h" #include "swrenderer/r_swrenderer.h"
#include "atterm.h"
IVideo *Video; IVideo *Video;

View file

@ -56,6 +56,7 @@
#include "doomerrors.h" #include "doomerrors.h"
#include "i_system.h" #include "i_system.h"
#include "g_game.h" #include "g_game.h"
#include "atterm.h"
// MACROS ------------------------------------------------------------------ // MACROS ------------------------------------------------------------------
@ -89,47 +90,9 @@ FArgs *Args;
// PRIVATE DATA DEFINITIONS ------------------------------------------------ // PRIVATE DATA DEFINITIONS ------------------------------------------------
static void (*TermFuncs[MAX_TERMS]) ();
static const char *TermNames[MAX_TERMS];
static int NumTerms;
// CODE -------------------------------------------------------------------- // CODE --------------------------------------------------------------------
void addterm (void (*func) (), const char *name)
{
// Make sure this function wasn't already registered.
for (int i = 0; i < NumTerms; ++i)
{
if (TermFuncs[i] == func)
{
return;
}
}
if (NumTerms == MAX_TERMS)
{
func ();
I_FatalError (
"Too many exit functions registered.\n"
"Increase MAX_TERMS in i_main.cpp");
}
TermNames[NumTerms] = name;
TermFuncs[NumTerms++] = func;
}
void popterm ()
{
if (NumTerms)
NumTerms--;
}
void call_terms ()
{
while (NumTerms > 0)
{
// printf ("term %d - %s\n", NumTerms, TermNames[NumTerms-1]);
TermFuncs[--NumTerms] ();
}
}
static void NewFailure () static void NewFailure ()
{ {

View file

@ -51,6 +51,7 @@
#include "d_net.h" #include "d_net.h"
#include "g_game.h" #include "g_game.h"
#include "c_dispatch.h" #include "c_dispatch.h"
#include "atterm.h"
#include "gameconfigfile.h" #include "gameconfigfile.h"

View file

@ -42,6 +42,7 @@
#include "doomdef.h" #include "doomdef.h"
#include "i_system.h" #include "i_system.h"
#include "c_cvars.h" #include "c_cvars.h"
#include "atterm.h"
// MACROS ------------------------------------------------------------------ // MACROS ------------------------------------------------------------------

View file

@ -64,6 +64,7 @@
#include "actorinlines.h" #include "actorinlines.h"
#include "g_game.h" #include "g_game.h"
#include "i_system.h" #include "i_system.h"
#include "atterm.h"
// EXTERNAL DATA DECLARATIONS ---------------------------------------------- // EXTERNAL DATA DECLARATIONS ----------------------------------------------

View file

@ -55,6 +55,7 @@
#include "templates.h" #include "templates.h"
#include "r_utility.h" #include "r_utility.h"
#include "r_renderer.h" #include "r_renderer.h"
#include "atterm.h"
#include <atomic> #include <atomic>
FDynamicColormap NormalLight; FDynamicColormap NormalLight;

View file

@ -48,6 +48,7 @@
#include "r_data/sprites.h" #include "r_data/sprites.h"
#include "vm.h" #include "vm.h"
#include "i_system.h" #include "i_system.h"
#include "atterm.h"
// MACROS ------------------------------------------------------------------ // MACROS ------------------------------------------------------------------

View file

@ -46,6 +46,7 @@
#include "vm.h" #include "vm.h"
#include "dobject.h" #include "dobject.h"
#include "menu/menu.h" #include "menu/menu.h"
#include "atterm.h"

View file

@ -83,6 +83,7 @@
#include "g_levellocals.h" #include "g_levellocals.h"
#include "vm.h" #include "vm.h"
#include "g_game.h" #include "g_game.h"
#include "atterm.h"
// MACROS ------------------------------------------------------------------ // MACROS ------------------------------------------------------------------

97
src/utility/atterm.cpp Normal file
View file

@ -0,0 +1,97 @@
/*
** attern.cpp
** Termination handling
**
**---------------------------------------------------------------------------
** Copyright 1998-2007 Randy Heit
** Copyright 2019 Christoph Oelckers
** 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 <algorithm>
#include "tarray.h"
#include "atterm.h"
static TArray<std::pair<void (*)(void), const char *>> TermFuncs;
//==========================================================================
//
// atterm
//
// Our own atexit because atexit can be problematic under Linux, though I
// forget the circumstances that cause trouble.
//
//==========================================================================
void addterm(void (*func)(), const char *name)
{
// Make sure this function wasn't already registered.
for (auto &term : TermFuncs)
{
if (term.first == func)
{
return;
}
}
TermFuncs.Push(std::make_pair(func, name));
}
//==========================================================================
//
// call_terms
//
//==========================================================================
void call_terms()
{
for(int i = TermFuncs.Size()-1; i >= 0; i--)
{
TermFuncs[i].first();
}
TermFuncs.Clear();
}
//==========================================================================
//
// popterm
//
// Removes the most recently register atterm function.
//
//==========================================================================
void popterm()
{
if (TermFuncs.Size() > 0)
{
TermFuncs.Pop();
}
}

6
src/utility/atterm.h Normal file
View file

@ -0,0 +1,6 @@
#pragma once
void addterm (void (*func)(void), const char *name);
#define atterm(t) addterm (t, #t)
void popterm ();
void call_terms();

View file

@ -69,6 +69,7 @@
#include "version.h" #include "version.h"
#include "g_levellocals.h" #include "g_levellocals.h"
#include "am_map.h" #include "am_map.h"
#include "atterm.h"
EXTERN_CVAR(Int, menu_resolution_custom_width) EXTERN_CVAR(Int, menu_resolution_custom_width)
EXTERN_CVAR(Int, menu_resolution_custom_height) EXTERN_CVAR(Int, menu_resolution_custom_height)

View file

@ -50,6 +50,7 @@
#include "doomerrors.h" #include "doomerrors.h"
#include "i_system.h" #include "i_system.h"
#include "swrenderer/r_swrenderer.h" #include "swrenderer/r_swrenderer.h"
#include "atterm.h"
EXTERN_CVAR(Int, vid_enablevulkan) EXTERN_CVAR(Int, vid_enablevulkan)

View file

@ -46,6 +46,7 @@
#include "i_cd.h" #include "i_cd.h"
#include "helperthread.h" #include "helperthread.h"
#include "atterm.h"
extern HWND Window; extern HWND Window;
extern HINSTANCE g_hInst; extern HINSTANCE g_hInst;

View file

@ -92,6 +92,7 @@
#include "doomerrors.h" #include "doomerrors.h"
#include "i_system.h" #include "i_system.h"
#include "g_levellocals.h" #include "g_levellocals.h"
#include "atterm.h"
// Prototypes and declarations. // Prototypes and declarations.
#include "rawinput.h" #include "rawinput.h"

View file

@ -74,6 +74,7 @@
#include "vm.h" #include "vm.h"
#include "i_system.h" #include "i_system.h"
#include "gstrings.h" #include "gstrings.h"
#include "atterm.h"
#include "stats.h" #include "stats.h"
#include "st_start.h" #include "st_start.h"
@ -153,65 +154,9 @@ DYN_WIN32_SYM(SHGetKnownFolderPath);
static const WCHAR WinClassName[] = WGAMENAME "MainWindow"; static const WCHAR WinClassName[] = WGAMENAME "MainWindow";
static HMODULE hwtsapi32; // handle to wtsapi32.dll static HMODULE hwtsapi32; // handle to wtsapi32.dll
static void (*TermFuncs[MAX_TERMS])(void);
static int NumTerms;
// CODE -------------------------------------------------------------------- // CODE --------------------------------------------------------------------
//==========================================================================
//
// atterm
//
// Our own atexit because atexit can be problematic under Linux, though I
// forget the circumstances that cause trouble.
//
//==========================================================================
void atterm (void (*func)(void))
{
// Make sure this function wasn't already registered.
for (int i = 0; i < NumTerms; ++i)
{
if (TermFuncs[i] == func)
{
return;
}
}
if (NumTerms == MAX_TERMS)
{
func ();
I_FatalError ("Too many exit functions registered.\nIncrease MAX_TERMS in i_main.cpp");
}
TermFuncs[NumTerms++] = func;
}
//==========================================================================
//
// popterm
//
// Removes the most recently register atterm function.
//
//==========================================================================
void popterm ()
{
if (NumTerms)
NumTerms--;
}
//==========================================================================
//
// call_terms
//
//==========================================================================
static void call_terms (void)
{
while (NumTerms > 0)
{
TermFuncs[--NumTerms]();
}
}
#ifdef _MSC_VER #ifdef _MSC_VER
static int NewFailure (size_t size) static int NewFailure (size_t size)

View file

@ -84,6 +84,7 @@
#include "doomstat.h" #include "doomstat.h"
#include "i_system.h" #include "i_system.h"
#include "textures/bitmap.h" #include "textures/bitmap.h"
#include "atterm.h"
#include "optwin32.h" #include "optwin32.h"

View file

@ -80,9 +80,6 @@ void I_Quit (void);
void I_Tactile (int on, int off, int total); void I_Tactile (int on, int off, int total);
void atterm (void (*func)(void));
void popterm ();
// Set the mouse cursor. The texture must be 32x32. // Set the mouse cursor. The texture must be 32x32.
class FTexture; class FTexture;
bool I_SetCursor(FTexture *cursor); bool I_SetCursor(FTexture *cursor);