aboutsummaryrefslogtreecommitdiffstats
path: root/distrib/sdl-1.2.15/src/main/symbian/EKA1/SDL_main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'distrib/sdl-1.2.15/src/main/symbian/EKA1/SDL_main.cpp')
-rw-r--r--distrib/sdl-1.2.15/src/main/symbian/EKA1/SDL_main.cpp152
1 files changed, 152 insertions, 0 deletions
diff --git a/distrib/sdl-1.2.15/src/main/symbian/EKA1/SDL_main.cpp b/distrib/sdl-1.2.15/src/main/symbian/EKA1/SDL_main.cpp
new file mode 100644
index 0000000..683db87
--- /dev/null
+++ b/distrib/sdl-1.2.15/src/main/symbian/EKA1/SDL_main.cpp
@@ -0,0 +1,152 @@
+/*
+ SDL - Simple DirectMedia Layer
+ Copyright (C) 1997-2012 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@devolution.com
+*/
+
+/*
+ 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"
+
+#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 */
+
+#ifdef __WINS__
+
+
+void GetCmdLine(int& aArgc, char**& aArgv)
+ {
+ RChunk chunk;
+
+ if(chunk.OpenGlobal(RThread().Name(), ETrue) != KErrNone)
+ return;
+
+ TUint* ptr = (TUint*) chunk.Base();
+ if(ptr != NULL)
+ {
+ aArgc = (int) *(ptr); // count
+ aArgv = (char**) *(ptr + 1);
+ }
+ chunk.Close();
+ }
+
+#endif
+
+
+TInt E32Main()
+ {
+ /* Get the clean-up stack */
+ CTrapCleanup* cleanup = CTrapCleanup::New();
+
+ /* Arrange for multi-threaded operation */
+ SpawnPosixServerThread();
+
+ /* Get args and environment */
+ int argc=0;
+ char** argv=0;
+ char** envp=0;
+
+#ifndef __WINS__
+ __crt0(argc,argv,envp);
+#else
+ GetCmdLine(argc, argv);
+#endif
+ /* Start the application! */
+
+ /* Create stdlib */
+ _REENT;
+
+ /* Set process and thread priority and name */
+
+ RThread currentThread;
+ RProcess thisProcess;
+ TParse exeName;
+ exeName.Set(thisProcess.FileName(), NULL, NULL);
+ currentThread.Rename(exeName.Name());
+ 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! */
+ //Markus: I do not understand above
+ //I commented it at let this function
+ //to return ret value - was it purpose
+ //that cleanup below is not called at all - why?
+
+ /* Free resources and return */
+
+ _cleanup(); //this is normally called at exit, I call it here, Markus
+
+ CloseSTDLIB();
+ delete cleanup;
+#ifdef __WINS__
+// User::Panic(_L("exit"), ret);
+ // RThread().Kill(ret); //Markus get rid of this thread
+ // RThread().RaiseException(EExcKill);
+#endif
+ return ret;//Markus, or exit(ret); ??
+ //return(KErrNone);
+ }
+
+
+#ifdef __WINS__
+EXPORT_C TInt WinsMain()
+ {
+ return E32Main();
+ // return WinsMain(0, 0, 0);
+ }
+#endif
+
+/* Epoc dll entry point */
+#if defined(__WINS__)
+GLDEF_C TInt E32Dll(TDllReason)
+ {
+ return(KErrNone);
+ }
+#endif
+
+