146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL - Simple DirectMedia Layer 346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga 446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner This library is free software; you can redistribute it and/or 646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner modify it under the terms of the GNU Library General Public 746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner License as published by the Free Software Foundation; either 846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner version 2 of the License, or (at your option) any later version. 946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 1046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner This library is distributed in the hope that it will be useful, 1146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner but WITHOUT ANY WARRANTY; without even the implied warranty of 1246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Library General Public License for more details. 1446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 1546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner You should have received a copy of the GNU Library General Public 1646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner License along with this library; if not, write to the Free 1746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 1846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 1946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Sam Lantinga 2046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner slouken@libsdl.org 2146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner*/ 2246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 2346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* 2446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SDL_main.cpp 2546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner The Epoc executable startup functions 2646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 2746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner Epoc version by Hannu Viitala (hannu.j.viitala@mbnet.fi) 2846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner*/ 2946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 3046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include <e32std.h> 3146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include <e32def.h> 3246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include <e32svr.h> 3346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include <e32base.h> 3446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include <estlib.h> 3546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include <stdlib.h> 3646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include <stdio.h> 3746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include <w32std.h> 3846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include <apgtask.h> 3946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 4046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include "SDL_error.h" 4146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 4246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#ifndef EXPORT_C 4346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# ifdef __VC32__ 4446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# define IMPORT_C __declspec(dllexport) 4546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# define EXPORT_C __declspec(dllexport) 4646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# endif 4746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# ifdef __GCC32__ 4846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# define IMPORT_C 4946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# define EXPORT_C __declspec(dllexport) 5046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner# endif 5146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif 5246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 5346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#if defined(__WINS__) 5446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#include <estw32.h> 5546be48730333120a7b939116cef075e61c12c703David 'Digit' TurnerIMPORT_C void RegisterWsExe(const TDesC &aName); 5646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif 5746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 5846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* The prototype for the application's main() function */ 5946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#define main SDL_main 6046be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern "C" int main (int argc, char *argv[], char *envp[]); 6146be48730333120a7b939116cef075e61c12c703David 'Digit' Turnerextern "C" void exit (int ret); 6246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 6346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 6446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Epoc main function */ 6546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 6646be48730333120a7b939116cef075e61c12c703David 'Digit' TurnerGLDEF_C TInt E32Main() 6746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 6846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Get the clean-up stack */ 6946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner CTrapCleanup* cleanup = CTrapCleanup::New(); 7046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 7146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner #if defined(__WINS__) 7246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* arrange for access to Win32 stdin/stdout/stderr */ 7346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner RWin32Stream::StartServer(); 7446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner #endif 7546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 7646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Arrange for multi-threaded operation */ 7746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner SpawnPosixServerThread(); 7846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 7946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Get args and environment */ 8046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner int argc=0; 8146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner char** argv=0; 8246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner char** envp=0; 8346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner __crt0(argc,argv,envp); 8446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 8546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner #if defined(__WINS__) 8646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Cause the graphical Window Server to come into existence */ 8746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner RSemaphore sem; 8846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner sem.CreateGlobal(_L("WsExeSem"),0); 8946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner RegisterWsExe(sem.FullName()); 9046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner #endif 9146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 9246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 9346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Start the application! */ 9446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 9546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Create stdlib */ 9646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner _REENT; 9746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 9846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Set process and thread priority */ 9946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner RThread currentThread; 10046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 10146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner currentThread.Rename(_L("SdlProgram")); 10246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner currentThread.SetProcessPriority(EPriorityLow); 10346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner currentThread.SetPriority(EPriorityMuchLess); 10446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 10546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Call stdlib main */ 10646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner int ret = main(argc, argv, envp); /* !! process exits here if there is "exit()" in main! */ 10746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 10846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Call exit */ 10946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner exit(ret); /* !! process exits here! */ 11046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 11146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner /* Free resources and return */ 11246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner CloseSTDLIB(); 11346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner delete cleanup; 11446be48730333120a7b939116cef075e61c12c703David 'Digit' Turner return(KErrNone); 11546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 11646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 11746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner/* Epoc dll entry point */ 11846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#if defined(__WINS__) 11946be48730333120a7b939116cef075e61c12c703David 'Digit' TurnerGLDEF_C TInt E32Dll(TDllReason) 12046be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 12146be48730333120a7b939116cef075e61c12c703David 'Digit' Turner return(KErrNone); 12246be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 12346be48730333120a7b939116cef075e61c12c703David 'Digit' Turner 12446be48730333120a7b939116cef075e61c12c703David 'Digit' TurnerEXPORT_C TInt WinsMain(TAny *) 12546be48730333120a7b939116cef075e61c12c703David 'Digit' Turner { 12646be48730333120a7b939116cef075e61c12c703David 'Digit' Turner E32Main(); 12746be48730333120a7b939116cef075e61c12c703David 'Digit' Turner return KErrNone; 12846be48730333120a7b939116cef075e61c12c703David 'Digit' Turner } 12946be48730333120a7b939116cef075e61c12c703David 'Digit' Turner#endif 130