diff src/main/epoc/SDL_main.cpp @ 173:83018110dce8

Added initial support for EPOC/Symbian OS (thanks Hannu!)
author Sam Lantinga <slouken@libsdl.org>
date Tue, 11 Sep 2001 20:38:49 +0000
parents
children e8157fcb3114
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/epoc/SDL_main.cpp	Tue Sep 11 20:38:49 2001 +0000
@@ -0,0 +1,129 @@
+/*
+    SDL - Simple DirectMedia Layer
+    Copyright (C) 1997, 1998, 1999, 2000, 2001  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"
+
+#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