/******************** *** EGC_DYNLIB.C *** ********************/ #include "egc_dynlib.h" #include "eif_sig.h" RT_LNK HANDLE ghInstance; RT_LNK HINSTANCE eif_hInstance; RT_LNK HINSTANCE eif_hPrevInstance; extern void egc_init_plug(); void init_rt (void) { #ifdef EIF_THREADS eif_thr_register(1); initsig(); initstk(); #endif } BOOL WINAPI DllMain (HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpvReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: ghInstance = hInst; eif_hInstance = hInst; eif_hPrevInstance = hInst; { int argc = 1; char *argv[] = {"",""}; eif_alloc_init(); #ifdef EIF_THREADS eif_thr_init_root (); #endif { GTCX; egc_init_plug(); initsig(); initstk(); eif_rtinit(argc, argv, (char **)0); } } EIF_EXIT_EIFFEL; break; case DLL_PROCESS_DETACH: #ifdef EIF_THREADS { GTCX; if (eif_globals) { EIF_ENTER_EIFFEL; reclaim(); } } #else reclaim(); #endif break; case DLL_THREAD_ATTACH: #ifdef EIF_THREADS init_rt(); EIF_EXIT_EIFFEL; #endif break; case DLL_THREAD_DETACH: #ifdef EIF_THREADS { GTCX; if (eif_globals) { EIF_ENTER_EIFFEL; eif_thr_exit(); } } #endif break; } return TRUE; }