fallout2-ce/src/win32.cc

98 lines
1.7 KiB
C++
Raw Normal View History

2022-05-19 01:51:26 -07:00
#include "win32.h"
#include "core.h"
#include "main.h"
#include "window_manager.h"
#include <SDL.h>
2022-05-29 10:07:43 -07:00
#include <stdlib.h>
2022-05-19 01:51:26 -07:00
2022-05-29 12:08:13 -07:00
#ifdef _WIN32
2022-05-29 10:07:43 -07:00
#ifdef HAVE_DSOUND
2022-05-19 01:51:26 -07:00
// 0x51E430
DirectSoundCreateProc* gDirectSoundCreateProc = NULL;
2022-05-29 10:07:43 -07:00
#endif
2022-05-19 01:51:26 -07:00
// 0x51E434
HWND gProgramWindow = NULL;
// 0x51E444
bool gProgramIsActive = false;
// GNW95MUTEX
HANDLE _GNW95_mutex = NULL;
2022-05-29 10:07:43 -07:00
#ifdef HAVE_DSOUND
2022-05-19 01:51:26 -07:00
// 0x51E454
HMODULE gDSoundDLL = NULL;
2022-05-29 10:07:43 -07:00
#endif
2022-05-19 01:51:26 -07:00
// 0x4DE700
int main(int argc, char* argv[])
2022-05-19 01:51:26 -07:00
{
_GNW95_mutex = CreateMutexA(0, TRUE, "GNW95MUTEX");
if (GetLastError() == ERROR_SUCCESS) {
SDL_ShowCursor(SDL_DISABLE);
if (_LoadDirectX()) {
gProgramIsActive = true;
falloutMain(argc, argv);
2022-05-19 01:51:26 -07:00
}
CloseHandle(_GNW95_mutex);
}
return 0;
}
// 0x4DE8D0
bool _LoadDirectX()
{
2022-05-29 10:07:43 -07:00
#ifdef HAVE_DSOUND
2022-05-19 01:51:26 -07:00
gDSoundDLL = LoadLibraryA("DSOUND.DLL");
if (gDSoundDLL == NULL) {
goto err;
}
gDirectSoundCreateProc = (DirectSoundCreateProc*)GetProcAddress(gDSoundDLL, "DirectSoundCreate");
if (gDirectSoundCreateProc == NULL) {
goto err;
}
2022-05-29 10:07:43 -07:00
#endif
2022-05-19 01:51:26 -07:00
atexit(_UnloadDirectX);
return true;
err:
_UnloadDirectX();
2022-05-29 10:07:43 -07:00
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "Could not load DirectX", "This program requires DirectX 3.0a or later.", NULL);
2022-05-19 01:51:26 -07:00
return false;
}
// 0x4DE988
void _UnloadDirectX(void)
{
2022-05-29 10:07:43 -07:00
#ifdef HAVE_DSOUND
2022-05-19 01:51:26 -07:00
if (gDSoundDLL != NULL) {
FreeLibrary(gDSoundDLL);
gDSoundDLL = NULL;
}
2022-05-29 10:07:43 -07:00
#endif
2022-05-19 01:51:26 -07:00
}
2022-05-29 12:08:13 -07:00
#else
bool gProgramIsActive = false;
int main(int argc, char* argv[])
{
2022-07-05 05:45:36 -07:00
#if __APPLE__
char* basePath = SDL_GetBasePath();
chdir(basePath);
SDL_free(basePath);
#endif
2022-05-29 12:08:13 -07:00
SDL_ShowCursor(SDL_DISABLE);
gProgramIsActive = true;
return falloutMain(argc, argv);
}
#endif