1 /* 2 SDL - Simple DirectMedia Layer 3 Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Sam Lantinga 4 5 This library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Library General Public 7 License as published by the Free Software Foundation; either 8 version 2 of the License, or (at your option) any later version. 9 10 This library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Library General Public License for more details. 14 15 You should have received a copy of the GNU Library General Public 16 License along with this library; if not, write to the Free 17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 19 Sam Lantinga 20 slouken (at) libsdl.org 21 */ 22 23 /* 24 SDL_main.cpp 25 The Epoc executable startup functions 26 27 Epoc version by Hannu Viitala (hannu.j.viitala (at) mbnet.fi) 28 */ 29 30 #include <e32std.h> 31 #include <e32def.h> 32 #include <e32svr.h> 33 #include <e32base.h> 34 #include <estlib.h> 35 #include <stdlib.h> 36 #include <stdio.h> 37 #include <w32std.h> 38 #include <apgtask.h> 39 40 #include "SDL_error.h" 41 42 #ifndef EXPORT_C 43 # ifdef __VC32__ 44 # define IMPORT_C __declspec(dllexport) 45 # define EXPORT_C __declspec(dllexport) 46 # endif 47 # ifdef __GCC32__ 48 # define IMPORT_C 49 # define EXPORT_C __declspec(dllexport) 50 # endif 51 #endif 52 53 #if defined(__WINS__) 54 #include <estw32.h> 55 IMPORT_C void RegisterWsExe(const TDesC &aName); 56 #endif 57 58 /* The prototype for the application's main() function */ 59 #define main SDL_main 60 extern "C" int main (int argc, char *argv[], char *envp[]); 61 extern "C" void exit (int ret); 62 63 64 /* Epoc main function */ 65 66 GLDEF_C TInt E32Main() 67 { 68 /* Get the clean-up stack */ 69 CTrapCleanup* cleanup = CTrapCleanup::New(); 70 71 #if defined(__WINS__) 72 /* arrange for access to Win32 stdin/stdout/stderr */ 73 RWin32Stream::StartServer(); 74 #endif 75 76 /* Arrange for multi-threaded operation */ 77 SpawnPosixServerThread(); 78 79 /* Get args and environment */ 80 int argc=0; 81 char** argv=0; 82 char** envp=0; 83 __crt0(argc,argv,envp); 84 85 #if defined(__WINS__) 86 /* Cause the graphical Window Server to come into existence */ 87 RSemaphore sem; 88 sem.CreateGlobal(_L("WsExeSem"),0); 89 RegisterWsExe(sem.FullName()); 90 #endif 91 92 93 /* Start the application! */ 94 95 /* Create stdlib */ 96 _REENT; 97 98 /* Set process and thread priority */ 99 RThread currentThread; 100 101 currentThread.Rename(_L("SdlProgram")); 102 currentThread.SetProcessPriority(EPriorityLow); 103 currentThread.SetPriority(EPriorityMuchLess); 104 105 /* Call stdlib main */ 106 int ret = main(argc, argv, envp); /* !! process exits here if there is "exit()" in main! */ 107 108 /* Call exit */ 109 exit(ret); /* !! process exits here! */ 110 111 /* Free resources and return */ 112 CloseSTDLIB(); 113 delete cleanup; 114 return(KErrNone); 115 } 116 117 /* Epoc dll entry point */ 118 #if defined(__WINS__) 119 GLDEF_C TInt E32Dll(TDllReason) 120 { 121 return(KErrNone); 122 } 123 124 EXPORT_C TInt WinsMain(TAny *) 125 { 126 E32Main(); 127 return KErrNone; 128 } 129 #endif 130