int _LibMain( int hdll, int reason, void *reserved ) { thread_data *tdata; int rc = 0; switch( reason ) { case DLL_THREAD_ATTACH: tdata = ( thread_data * )RdosAllocateMem( __ThreadDataSize ); if( tdata ) { memset( tdata, 0, __ThreadDataSize ); tdata->__data_size = __ThreadDataSize; __RdosAddThread( tdata ); } break; case DLL_PROCESS_ATTACH: __InitRtns( INIT_PRIORITY_THREAD ); tdata = ( thread_data * )RdosAllocateMem( __ThreadDataSize ); memset( tdata, 0, __ThreadDataSize ); tdata->__data_size = __ThreadDataSize; __InitThreadData( tdata ); __RdosInit( 1, tdata, hdll ); __InitRtns( 255 ); __CommonInit(); __sig_init_rtn(); if( !__RdosThreadInit() ) return( -1 ); __InitMultipleThread(); rc = LibMain( hdll, reason, reserved ); if( !rc ) { __FiniRtns( 0, 255 ); } break; case DLL_THREAD_DETACH: __RdosRemoveThread(); break; case DLL_PROCESS_DETACH: __FiniRtns( 0, FINI_PRIORITY_EXIT - 1 ); __RdosRemoveThread(); RdosFreeMem( __FirstThreadData ); __FirstThreadData = NULL; break; } return( rc ); }
void __F_NAME(__NTMain,__wNTMain)( void ) /***************************************/ { #if defined(__SW_BR) #if defined(_M_IX86) REGISTRATION_RECORD rr; __NewExceptionFilter( &rr ); #endif __process_fini = __FiniRtns; __InitRtns( 255 ); __CommonInit(); exit( __F_NAME(main( ___Argc, ___Argv ),wmain( ___wArgc, ___wArgv )) ); #else REGISTRATION_RECORD rr; thread_data *tdata; __InitRtns( INIT_PRIORITY_THREAD ); tdata = __alloca( __ThreadDataSize ); memset( tdata, 0, __ThreadDataSize ); // tdata->__allocated = 0; tdata->__data_size = __ThreadDataSize; __InitThreadData( tdata ); __NTMainInit( &rr, tdata ); __F_NAME(__CMain,__wCMain)(); #endif }
void __F_NAME(__WinMain,__wWinMain)( void ) { #ifdef __SW_BR { #ifdef _M_IX86 REGISTRATION_RECORD rr; __NewExceptionFilter( &rr ); #endif __process_fini = __FiniRtns; __InitRtns( 255 ); } #else { REGISTRATION_RECORD rr; thread_data *tdata; __InitRtns( INIT_PRIORITY_THREAD ); tdata = __alloca( __ThreadDataSize ); memset( tdata, 0, __ThreadDataSize ); // tdata->__allocated = 0; tdata->__data_size = __ThreadDataSize; __InitThreadData( tdata ); __NTMainInit( &rr, tdata ); /* allocate alternate stack for F77 */ __ASTACKPTR = (char *)alloca( __ASTACKSIZ ) + __ASTACKSIZ; } #endif __CommonInit(); exit( __F_NAME(WinMain,wWinMain)( GetModuleHandle( NULL ), 0, __F_NAME(_LpCmdLine,_LpwCmdLine), SW_SHOWDEFAULT ) ); }
void __LinuxInit( void *ptr ) /***************************/ { unsigned *tmp; __InitThreadData( ptr ); __FirstThreadData = ptr; // following is very tricky _STACKLOW intialization tmp = &_STACKLOW; #undef _STACKLOW *tmp = _STACKLOW; }
thread_data *__AllocInitThreadData( thread_data *tdata ) /******************************************************/ { if( tdata == NULL ) { tdata = lib_calloc( 1, __ThreadDataSize ); if( tdata != NULL ) { tdata->__allocated = 1; tdata->__data_size = __ThreadDataSize; } } __InitThreadData( tdata ); return( tdata ); }
void __LinuxInit( struct thread_data *ptr ) /*****************************************/ { unsigned *tmp; #if defined( __MT__ ) __InitThreadData( ptr ); __FirstThreadData = ptr; #endif // following is very tricky _STACKLOW intialization tmp = &_STACKLOW; #undef _STACKLOW *tmp = _STACKLOW; }
int FInitDataThread( void *td ) //============================== { __InitFThreadData( td ); return( __InitThreadData( td ) ); }