Skip to content
Snippets Groups Projects
Select Git revision
  • f416c6a98d78cefc6acd9d94396ce9e438f784c3
  • next default protected
  • movie-netcode-fixes
  • movie
  • next-test
  • master protected
  • softcode-info
  • acs
  • clipmidtex
  • custom-map-names
  • nogravity-trampolines
  • 2214-pre4
  • 2214-pre3
  • just-in-case
  • fix-opengl-parameter-crash
  • 2214-pre2
  • 2214-pre1
  • delfile2
  • cleanupmusic
  • gametype-refactor-1
  • extra-textures
  • SRB2_release_2.2.15
  • SRB2_release_2.2.13
  • SRB2_release_2.2.12
  • SRB2_release_2.2.11
  • SRB2_release_2.2.10
  • SRB2_release_2.2.9
  • SRB2_release_2.2.8
  • SRB2_release_2.2.7
  • SRB2_release_2.2.6
  • SRB2_release_2.2.5
  • SRB2_release_2.2.4
  • SRB2_release_2.2.3
  • SRB2_release_2.2.2
  • SRB2_release_2.2.1
  • SRB2_release_2.2.0
  • SRB2_release_2.1.25
  • SRB2_release_2.1.24
  • SRB2_release_2.1.23
  • SRB2_release_2.1.22
  • SRB2_release_2.1.21
41 results

p_saveg.c

Blame
  • i_main.c 5.94 KiB
    // Emacs style mode select   -*- C++ -*-
    //-----------------------------------------------------------------------------
    //
    // Copyright (C) 1993-1996 by id Software, Inc.
    // Copyright (C) 1998-2000 by DooM Legacy Team.
    //
    // This program is free software; you can redistribute it and/or
    // modify it under the terms of the GNU General Public License
    // as published by the Free Software Foundation; either version 2
    // of the License, or (at your option) any later version.
    //
    // This program is distributed in the hope that it will be useful,
    // but WITHOUT ANY WARRANTY; without even the implied warranty of
    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    // GNU General Public License for more details.
    //-----------------------------------------------------------------------------
    /// \file
    /// \brief Main program, simply calls D_SRB2Main and D_SRB2Loop, the high level loop.
    
    #include "../doomdef.h"
    #include "../m_argv.h"
    #include "../d_main.h"
    #include "../i_system.h"
    
    #ifdef __GNUC__
    #include <unistd.h>
    #endif
    
    #ifdef _WII
    #include <limits.h>
    #include <network.h>
    #include <fat.h>
    #ifdef REMOTE_DEBUGGING
    #include <debug.h>
    #endif
    static char wiicwd[PATH_MAX] = "sd:/";
    static char localip[16] = {0};
    static char gateway[16] = {0};
    static char netmask[16] = {0};
    #endif
    
    #ifdef _PSP
    #include <pspmoduleinfo.h>
    #include <pspthreadman.h>
    PSP_HEAP_SIZE_KB(24*1024);
    PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_USER | PSP_THREAD_ATTR_VFPU);
    PSP_MAIN_THREAD_NAME("SRB2");
    PSP_MAIN_THREAD_STACK_SIZE_KB(256);
    #endif
    
    #ifdef HAVE_SDL
    
    #ifdef HAVE_TTF
    #include "SDL.h"
    #include "i_ttf.h"
    #endif
    
    #if defined (_WIN32) && !defined (main)
    #define SDLMAIN
    #endif
    
    #ifdef SDLMAIN
    #include "SDL_main.h"
    #elif defined(FORCESDLMAIN)
    extern int SDL_main(int argc, char *argv[]);
    #endif
    
    #ifdef LOGMESSAGES
    FILE *logstream = NULL;
    #endif
    
    #ifndef DOXYGEN
    #ifndef O_TEXT
    #define O_TEXT 0
    #endif
    
    #ifndef O_SEQUENTIAL
    #define O_SEQUENTIAL 0
    #endif
    #endif
    
    #if defined (_WIN32) && !defined (_XBOX)
    #include "../win32/win_dbg.h"
    typedef BOOL (WINAPI *p_IsDebuggerPresent)(VOID);
    #endif
    
    #ifdef _arch_dreamcast
    #include <arch/arch.h>
    KOS_INIT_FLAGS(INIT_DEFAULT
    //| INIT_NET
    //| INIT_MALLOCSTATS
    //| INIT_QUIET
    //| INIT_OCRAM
    //| INIT_NO_DCLOAD
    );
    #endif
    
    #if defined (_WIN32) && !defined (_XBOX) && !defined (_WIN32_WCE)
    static inline VOID MakeCodeWritable(VOID)
    {
    #ifdef USEASM // Disable write-protection of code segment
    	DWORD OldRights;
    	const DWORD NewRights = PAGE_EXECUTE_READWRITE;
    	PBYTE pBaseOfImage = (PBYTE)GetModuleHandle(NULL);
    	PIMAGE_DOS_HEADER dosH =(PIMAGE_DOS_HEADER)pBaseOfImage;
    	PIMAGE_NT_HEADERS ntH = (PIMAGE_NT_HEADERS)(pBaseOfImage + dosH->e_lfanew);
    	PIMAGE_OPTIONAL_HEADER oH = (PIMAGE_OPTIONAL_HEADER)
    		((PBYTE)ntH + sizeof (IMAGE_NT_SIGNATURE) + sizeof (IMAGE_FILE_HEADER));
    	LPVOID pA = pBaseOfImage+oH->BaseOfCode;
    	SIZE_T pS = oH->SizeOfCode;
    #if 1 // try to find the text section
    	PIMAGE_SECTION_HEADER ntS = IMAGE_FIRST_SECTION (ntH);
    	WORD s;
    	for (s = 0; s < ntH->FileHeader.NumberOfSections; s++)
    	{
    		if (memcmp (ntS[s].Name, ".text\0\0", 8) == 0)
    		{
    			pA = pBaseOfImage+ntS[s].VirtualAddress;
    			pS = ntS[s].Misc.VirtualSize;
    			break;
    		}
    	}
    #endif
    
    	if (!VirtualProtect(pA,pS,NewRights,&OldRights))
    		I_Error("Could not make code writable\n");
    #endif
    }
    #endif
    
    
    /**	\brief	The main function
    
    	\param	argc	number of arg
    	\param	*argv	string table
    
    	\return	int
    */
    #if defined (_XBOX) && defined (__GNUC__)
    void XBoxStartup()
    {
    	const char *logdir = NULL;
    	myargc = -1;
    	myargv = NULL;
    #else
    #ifdef FORCESDLMAIN
    FUNCNORETURN
    int SDL_main(int argc, char **argv)
    #else
    FUNCNORETURN
    int main(int argc, char **argv)
    #endif
    {
    	const char *logdir = NULL;
    	myargc = argc;
    	myargv = argv; /// \todo pull out path to exe from this string
    #endif
    
    #ifdef HAVE_TTF
    #ifdef _PS3
    	// apparently there is a bug in SDL_PSL1GHT which needs this to be set to work around
    	SDL_setenv("SDL_VIDEODRIVER", "psl1ght", 1);
    	I_StartupTTF(FONTPOINTSIZE, SDL_INIT_VIDEO, SDL_SWSURFACE|SDL_DOUBLEBUF);
    #elif defined(_WIN32)
    	I_StartupTTF(FONTPOINTSIZE, SDL_INIT_VIDEO|SDL_INIT_AUDIO, SDL_SWSURFACE);
    #else
    	I_StartupTTF(FONTPOINTSIZE, SDL_INIT_VIDEO, SDL_SWSURFACE);
    #endif
    #endif
    
    #ifdef _PS3
    	// initialise controllers.
    	//ioPadInit(7);
    #endif
    
    // init Wii-specific stuff
    #ifdef _WII
    	// Start network
    	if_config(localip, netmask, gateway, TRUE);
    
    #ifdef REMOTE_DEBUGGING
    #if REMOTE_DEBUGGING == 0
    	DEBUG_Init(GDBSTUB_DEVICE_TCP, GDBSTUB_DEF_TCPPORT); // Port 2828
    #elif REMOTE_DEBUGGING > 2
    	DEBUG_Init(GDBSTUB_DEVICE_TCP, REMOTE_DEBUGGING); // Custom Port
    #elif REMOTE_DEBUGGING < 0
    	DEBUG_Init(GDBSTUB_DEVICE_USB, GDBSTUB_DEF_CHANNEL); // Slot 1
    #else
    	DEBUG_Init(GDBSTUB_DEVICE_USB, REMOTE_DEBUGGING-1); // Custom Slot
    #endif
    #endif
    	// Start FAT filesystem
    	fatInitDefault();
    
    	if (getcwd(wiicwd, PATH_MAX))
    		I_PutEnv(va("HOME=%ssrb2wii", wiicwd));
    #endif
    
    	logdir = D_Home();
    
    #ifdef LOGMESSAGES
    #if defined(_WIN32_WCE) || defined(GP2X)
    	logstream = fopen(va("%s.log",argv[0]), "wt");
    #elif defined (_WII)
    	logstream = fopen(va("%s/log.txt",logdir), "wt");
    #elif defined (DEFAULTDIR)
    	if (logdir)
    		logstream = fopen(va("%s/"DEFAULTDIR"/log.txt",logdir), "wt");
    	else
    #endif
    		logstream = fopen("./log.txt", "wt");
    #endif
    
    	//I_OutputMsg("I_StartupSystem() ...\n");
    	I_StartupSystem();
    #if defined (_WIN32) && !defined (_XBOX)
    #ifndef _WIN32_WCE
    	{
    		p_IsDebuggerPresent pfnIsDebuggerPresent = (p_IsDebuggerPresent)GetProcAddress(GetModuleHandleA("kernel32.dll"), "IsDebuggerPresent");
    		if ((!pfnIsDebuggerPresent || !pfnIsDebuggerPresent())
    #ifdef BUGTRAP
    			&& !InitBugTrap()
    #endif
    			)
    		{
    			LoadLibraryA("exchndl.dll");
    		}
    	}
    #endif
    	prevExceptionFilter = SetUnhandledExceptionFilter(RecordExceptionInfo);
    #ifndef _WIN32_WCE
    	MakeCodeWritable();
    #endif
    #endif
    	// startup SRB2
    	CONS_Printf("Setting up SRB2...\n");
    	D_SRB2Main();
    	CONS_Printf("Entering main game loop...\n");
    	// never return
    	D_SRB2Loop();
    
    #ifdef BUGTRAP
    	// This is safe even if BT didn't start.
    	ShutdownBugTrap();
    #endif
    
    	// return to OS
    #ifndef __GNUC__
    	return 0;
    #endif
    }
    #endif