Home | History | Annotate | Download | only in epoc
      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