Fix exit to shell not working

This commit is contained in:
elasota
2020-11-30 03:18:09 -05:00
parent 553e343abe
commit cab862ed8b
5 changed files with 31 additions and 5 deletions

View File

@@ -5,6 +5,7 @@
#include "WindowManager.h"
#include "PLDrivers.h"
#include "PLSysCalls.h"
int gpAppMain();
void gpAppInit();
@@ -30,7 +31,7 @@ void GpAppInterfaceImpl::ApplicationInit()
int GpAppInterfaceImpl::ApplicationMain()
{
return gpAppMain();
return PLSysCalls::MainExitWrapper(gpAppMain);
}
void GpAppInterfaceImpl::PL_IncrementTickCounter(uint32_t count)

View File

@@ -11,6 +11,7 @@
#include "PLPasStr.h"
#include "PLResources.h"
#include "PLSound.h"
#include "PLSysCalls.h"
#include "PLTimeTaggedVOSEvent.h"
#include "QDPixMap.h"
#include "BitmapImage.h"
@@ -114,9 +115,7 @@ void RedAlert (short errorNumber)
// CenterAlert(rDeathAlertID);
dummyInt = PortabilityLayer::DialogManager::GetInstance()->DisplayAlert(rDeathAlertID, &substitutions);
//ExitToShell();
PL_NotYetImplemented_TODO("Exit");
PLSysCalls::Exit(-1);
}
//-------------------------------------------------------------- CreateOffScreenBitMap

View File

@@ -10,7 +10,7 @@ namespace PortabilityLayer
HostSuspendCallID_Delay,
HostSuspendCallID_CallOnVOSThread,
HostSuspendCallID_ForceSyncFrame
HostSuspendCallID_ForceSyncFrame,
};
}

View File

@@ -16,6 +16,9 @@
#include "PLDrivers.h"
#include <assert.h>
#include <setjmp.h>
static void TranslateMouseInputEvent(const GpVOSEvent &vosEventBase, uint32_t timestamp, PortabilityLayer::EventQueue *queue)
{
const GpMouseInputEvent &vosEvent = vosEventBase.m_event.m_mouseInputEvent;
@@ -198,4 +201,24 @@ namespace PLSysCalls
PortabilityLayer::SuspendApplication(PortabilityLayer::HostSuspendCallID_CallOnVOSThread, args, nullptr);
}
static jmp_buf gs_mainExitWrapper;
static int gs_exitCode = 0;
void Exit(int exitCode)
{
gs_exitCode = exitCode;
longjmp(gs_mainExitWrapper, 1);
}
int MainExitWrapper(int (*mainFunc)())
{
if (!setjmp(gs_mainExitWrapper))
{
int returnCode = mainFunc();
return returnCode;
}
else
return gs_exitCode;
}
}

View File

@@ -9,4 +9,7 @@ namespace PLSysCalls
void Sleep(uint32_t ticks);
void ForceSyncFrame();
void RunOnVOSThread(void(*callback)(void *context), void *context);
void Exit(int exitCode);
int MainExitWrapper(int (*mainFunc)());
}