resource stack structure that sets up correct resource, new entry points for shared points

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13693 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Stefan Csomor
2002-01-20 16:26:59 +00:00
parent 5b9255698a
commit 53fd991c44
2 changed files with 134 additions and 6 deletions

View File

@@ -374,6 +374,11 @@ void wxMacStringToPascal( const char * from , StringPtr to , bool pc2macEncoding
} }
} }
#ifndef __DARWIN__
// we know it's there ;-)
WXIMPORT char std::__throws_bad_alloc ;
#endif
bool wxApp::Initialize() bool wxApp::Initialize()
{ {
int error = 0 ; int error = 0 ;
@@ -448,6 +453,7 @@ bool wxApp::Initialize()
if ( error ) if ( error )
{ {
wxStAppResource resload ;
short itemHit; short itemHit;
Str255 message; Str255 message;
@@ -621,19 +627,76 @@ void wxApp::CleanUp()
// wxEntry // wxEntry
//---------------------------------------------------------------------- //----------------------------------------------------------------------
int wxEntryStart( int argc, char *argv[] ) short gCurrentResource = -1 ;
wxStAppResource::wxStAppResource()
{
m_currentRefNum = CurResFile() ;
if ( gCurrentResource != -1 )
{
UseResFile( gCurrentResource ) ;
}
}
wxStAppResource::~wxStAppResource()
{
if ( m_currentRefNum != -1 )
{
UseResFile( m_currentRefNum ) ;
}
}
#ifdef WXMAKINGDLL
// for shared libraries we have to manually get the correct resource ref num upon
// initializing and releasing when terminating, therefore the __wxinitialize and __wxterminate
// must be used
#ifdef __cplusplus
extern "C" {
#endif
void __sinit(void); /* (generated by linker) */
pascal OSErr __initialize(const CFragInitBlock *theInitBlock);
pascal void __terminate(void);
#ifdef __cplusplus
}
#endif
pascal OSErr __wxinitialize(const CFragInitBlock *theInitBlock)
{
gCurrentResource = -1;
if (theInitBlock->fragLocator.where == kDataForkCFragLocator) {
gCurrentResource =
FSpOpenResFile(theInitBlock->fragLocator.u.onDisk.fileSpec,
fsRdPerm);
}
return __initialize( theInitBlock ) ;
}
pascal void __wxterminate(void)
{
if (gCurrentResource != -1)
CloseResFile(gCurrentResource);
__terminate() ;
}
#endif
int WXDLLEXPORT wxEntryStart( int argc, char *argv[] )
{ {
return wxApp::Initialize(); return wxApp::Initialize();
} }
int wxEntryInitGui() int WXDLLEXPORT wxEntryInitGui()
{ {
return wxTheApp->OnInitGui(); return wxTheApp->OnInitGui();
} }
void wxEntryCleanup() void WXDLLEXPORT wxEntryCleanup()
{ {
wxApp::CleanUp(); wxApp::CleanUp();
} }
@@ -641,6 +704,7 @@ void wxEntryCleanup()
int wxEntry( int argc, char *argv[] , bool enterLoop ) int wxEntry( int argc, char *argv[] , bool enterLoop )
{ {
gCurrentResource = CurResFile() ;
#ifdef __MWERKS__ #ifdef __MWERKS__
#if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT #if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT
// This seems to be necessary since there are 'rogue' // This seems to be necessary since there are 'rogue'

View File

@@ -374,6 +374,11 @@ void wxMacStringToPascal( const char * from , StringPtr to , bool pc2macEncoding
} }
} }
#ifndef __DARWIN__
// we know it's there ;-)
WXIMPORT char std::__throws_bad_alloc ;
#endif
bool wxApp::Initialize() bool wxApp::Initialize()
{ {
int error = 0 ; int error = 0 ;
@@ -448,6 +453,7 @@ bool wxApp::Initialize()
if ( error ) if ( error )
{ {
wxStAppResource resload ;
short itemHit; short itemHit;
Str255 message; Str255 message;
@@ -621,19 +627,76 @@ void wxApp::CleanUp()
// wxEntry // wxEntry
//---------------------------------------------------------------------- //----------------------------------------------------------------------
int wxEntryStart( int argc, char *argv[] ) short gCurrentResource = -1 ;
wxStAppResource::wxStAppResource()
{
m_currentRefNum = CurResFile() ;
if ( gCurrentResource != -1 )
{
UseResFile( gCurrentResource ) ;
}
}
wxStAppResource::~wxStAppResource()
{
if ( m_currentRefNum != -1 )
{
UseResFile( m_currentRefNum ) ;
}
}
#ifdef WXMAKINGDLL
// for shared libraries we have to manually get the correct resource ref num upon
// initializing and releasing when terminating, therefore the __wxinitialize and __wxterminate
// must be used
#ifdef __cplusplus
extern "C" {
#endif
void __sinit(void); /* (generated by linker) */
pascal OSErr __initialize(const CFragInitBlock *theInitBlock);
pascal void __terminate(void);
#ifdef __cplusplus
}
#endif
pascal OSErr __wxinitialize(const CFragInitBlock *theInitBlock)
{
gCurrentResource = -1;
if (theInitBlock->fragLocator.where == kDataForkCFragLocator) {
gCurrentResource =
FSpOpenResFile(theInitBlock->fragLocator.u.onDisk.fileSpec,
fsRdPerm);
}
return __initialize( theInitBlock ) ;
}
pascal void __wxterminate(void)
{
if (gCurrentResource != -1)
CloseResFile(gCurrentResource);
__terminate() ;
}
#endif
int WXDLLEXPORT wxEntryStart( int argc, char *argv[] )
{ {
return wxApp::Initialize(); return wxApp::Initialize();
} }
int wxEntryInitGui() int WXDLLEXPORT wxEntryInitGui()
{ {
return wxTheApp->OnInitGui(); return wxTheApp->OnInitGui();
} }
void wxEntryCleanup() void WXDLLEXPORT wxEntryCleanup()
{ {
wxApp::CleanUp(); wxApp::CleanUp();
} }
@@ -641,6 +704,7 @@ void wxEntryCleanup()
int wxEntry( int argc, char *argv[] , bool enterLoop ) int wxEntry( int argc, char *argv[] , bool enterLoop )
{ {
gCurrentResource = CurResFile() ;
#ifdef __MWERKS__ #ifdef __MWERKS__
#if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT #if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT
// This seems to be necessary since there are 'rogue' // This seems to be necessary since there are 'rogue'