blob: 0139c701a7d88d44d0778473ffa6e98f31a62e53 [file] [log] [blame]
/*
SDL - Simple DirectMedia Layer
Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Sam Lantinga
slouken@libsdl.org
*/
/*
SDL_main.cpp
The Epoc executable startup functions
Epoc version by Hannu Viitala (hannu.j.viitala@mbnet.fi)
*/
#include <e32std.h>
#include <e32def.h>
#include <e32svr.h>
#include <e32base.h>
#include <estlib.h>
#include <stdlib.h>
#include <stdio.h>
#include <w32std.h>
#include <apgtask.h>
#include "SDL_error.h"
#ifndef EXPORT_C
# ifdef __VC32__
# define IMPORT_C __declspec(dllexport)
# define EXPORT_C __declspec(dllexport)
# endif
# ifdef __GCC32__
# define IMPORT_C
# define EXPORT_C __declspec(dllexport)
# endif
#endif
#if defined(__WINS__)
#include <estw32.h>
IMPORT_C void RegisterWsExe(const TDesC &aName);
#endif
/* The prototype for the application's main() function */
#define main SDL_main
extern "C" int main (int argc, char *argv[], char *envp[]);
extern "C" void exit (int ret);
/* Epoc main function */
GLDEF_C TInt E32Main()
{
/* Get the clean-up stack */
CTrapCleanup* cleanup = CTrapCleanup::New();
#if defined(__WINS__)
/* arrange for access to Win32 stdin/stdout/stderr */
RWin32Stream::StartServer();
#endif
/* Arrange for multi-threaded operation */
SpawnPosixServerThread();
/* Get args and environment */
int argc=0;
char** argv=0;
char** envp=0;
__crt0(argc,argv,envp);
#if defined(__WINS__)
/* Cause the graphical Window Server to come into existence */
RSemaphore sem;
sem.CreateGlobal(_L("WsExeSem"),0);
RegisterWsExe(sem.FullName());
#endif
/* Start the application! */
/* Create stdlib */
_REENT;
/* Set process and thread priority */
RThread currentThread;
currentThread.Rename(_L("SdlProgram"));
currentThread.SetProcessPriority(EPriorityLow);
currentThread.SetPriority(EPriorityMuchLess);
/* Call stdlib main */
int ret = main(argc, argv, envp); /* !! process exits here if there is "exit()" in main! */
/* Call exit */
exit(ret); /* !! process exits here! */
/* Free resources and return */
CloseSTDLIB();
delete cleanup;
return(KErrNone);
}
/* Epoc dll entry point */
#if defined(__WINS__)
GLDEF_C TInt E32Dll(TDllReason)
{
return(KErrNone);
}
EXPORT_C TInt WinsMain(TAny *)
{
E32Main();
return KErrNone;
}
#endif