int InitGUI (int argc, const char* agr[]) { int step = 1; __mg_quiting_stage = _MG_QUITING_STAGE_RUNNING; #ifdef _MGRM_PROCESSES const char* name; if ((name = strrchr (agr [0], '/')) == NULL) name = agr [0]; else name ++; if (!strcmp (name, "mginit")) mgIsServer = TRUE; #endif #ifdef HAVE_SETLOCALE setlocale (LC_ALL, "C"); #endif /* Save original termio */ #ifdef _MGRM_PROCESSES if (mgIsServer) #endif //#ifndef WIN32 #ifndef __NOUNIX__ tcgetattr (0, &savedtermio); #endif /*Initialize default window process*/ __mg_def_proc[0] = PreDefMainWinProc; __mg_def_proc[1] = PreDefDialogProc; __mg_def_proc[2] = PreDefControlProc; if (!mg_InitFixStr ()) { err_message (step, "Can not initialize Fixed String heap!\n"); return step; } step++; if (!mg_InitMisc ()) { err_message (step, "Can not initialize miscellous things!"); return step; } step++; #ifdef _MGRM_PROCESSES if (mgIsServer && !kernel_IsOnlyMe ()) { err_message (step, "There is already an instance of 'mginit'!"); return step; } step++; #endif #ifdef _MGRM_PROCESSES if (!mgIsServer) { if (!client_ClientStartup ()) { err_message (step, "Can not start client (Please run mginit first)!"); return step; } step++; if ((mgSharedRes = kernel_AttachSharedResource ()) == NULL) { err_message (step, "Can not attach shared resource (Please run mginit first)!"); return step; } atexit (kernel_UnattachSharedResource); } #endif /* Init GAL engine. */ switch (mg_InitGAL ()) { case ERR_CONFIG_FILE: err_message (step, "Reading configuration failure!"); return step; case ERR_NO_ENGINE: err_message (step, "No graphics engine defined!"); return step; case ERR_NO_MATCH: err_message (step, "Can not get graphics engine information!"); return step; case ERR_GFX_ENGINE: err_message (step, "Can not initialize graphics engine!"); return step; } step++; atexit (mg_TerminateGAL); /* install signal handlers */ #ifdef _MGRM_PROCESSES if (mgIsServer) #endif InstallSEGVHandler (); /** initialize icon bitmap resource.*/ if (mg_InitSystemRes () == FALSE) { fprintf (stderr, "KERNEL>IniGUI: init system res error!\n"); return step; } step++; /* DK[11/29/10]: For fix bug 4440, avoid double free. */ /* atexit (mg_TerminateSystemRes); */ if (!mg_InitGDI ()) { err_message (step, "Initialization of GDI resource failure!\n"); return step; } step++; atexit (mg_TerminateGDI); /* Init Master Screen DC here */ if (!mg_InitScreenDC (__gal_screen)) { err_message (step, "Can not initialize screen DC!"); return step; } step++; atexit (mg_TerminateScreenDC); g_rcScr.left = 0; g_rcScr.top = 0; g_rcScr.right = GetGDCapability (HDC_SCREEN_SYS, GDCAP_MAXX) + 1; g_rcScr.bottom = GetGDCapability (HDC_SCREEN_SYS, GDCAP_MAXY) + 1; #ifdef _MGRM_PROCESSES if (mgIsServer) { /* Load shared resource and create shared memory. */ if ((mgSharedRes = kernel_LoadSharedResource ()) == NULL) { err_message (step, "Can not load shared resource!"); return step; } atexit (kernel_UnloadSharedResource); SHAREDRES_TERMIOS = savedtermio; } step++; #endif if (!mg_InitLFManager ()) { err_message (step, "Can not initialize LFManager!\n"); return step; } step++; atexit (mg_TerminateLFManager); #ifdef _MGRM_PROCESSES if (mgIsServer) #endif { license_create(); splash_draw_framework(); splash_delay(); } /* Initialize resource */ if (!InitResource ()) { err_message (step, "Can not initialize resource!"); return step; } step++; #ifdef _MGRM_STANDALONE /* Init IAL engine.. */ if (!mg_InitLWEvent ()) { err_message (step, "Can not initialize low level event!"); return step; } step++; atexit (mg_TerminateLWEvent); SetDskIdleHandler (salone_IdleHandler4StandAlone); if (!salone_StandAloneStartup ()) { fprintf (stderr, "KERNEL>InitGUI: Can not start MiniGUI-StandAlone version.\n"); return step; } #else if (mgIsServer) { /* Init IAL engine.. */ if (!mg_InitLWEvent ()) { err_message (step, "Can not initialize low level event!"); return step; } step++; atexit (mg_TerminateLWEvent); SetDskIdleHandler (server_IdleHandler4Server); } else { SetDskIdleHandler (client_IdleHandler4Client); } #endif SetKeyboardLayout ("default"); mg_TerminateMgEtc (); return 0; }
int InitGUI (void) { int step = 1; // Save original termio #ifndef _STAND_ALONE if (mgIsServer) #endif tcgetattr (0, &savedtermio); if (!InitMisc ()) { err_message (step, "Can not initialize miscellous things!"); return step; } step++; #ifndef _STAND_ALONE if (mgIsServer && !IsOnlyMe ()) { err_message (step, "There is already an instance of 'mginit'!"); return step; } step++; #endif // Init GAL engine. switch (InitGAL ()) { case ERR_CONFIG_FILE: err_message (step, "Reading configuration failure!"); return step; case ERR_NO_ENGINE: err_message (step, "No graphics engine defined!"); return step; case ERR_NO_MATCH: err_message (step, "Can not get graphics engine information!"); return step; case ERR_GFX_ENGINE: err_message (step, "Can not initialize graphics engine!"); return step; } step++; atexit (TerminateGAL); /* install signal handlers */ #ifndef _STAND_ALONE if (mgIsServer) #endif InstallSEGVHandler (); if (!InitGDI ()) { err_message (step, "MiniGUI: Initialization of GDI resource failure!\n"); return step; } step++; atexit (TerminateGDI); /* Init Screen DC here */ if (!InitScreenDC ()) { err_message (step, "Can not initialize screen DC!"); return step; } step++; atexit (TerminateScreenDC); g_rcScr.left = 0; g_rcScr.top = 0; g_rcScr.right = GetGDCapability (HDC_SCREEN, GDCAP_MAXX) + 1; g_rcScr.bottom = GetGDCapability (HDC_SCREEN, GDCAP_MAXY) + 1; if (!InitWindowElementColors ()) { err_message (step, "Can not initialize colors of window element!"); return step; } step++; #ifndef _STAND_ALONE if (mgIsServer) { // Load shared resource and create shared memory. if ((mgSharedRes = LoadSharedResource ()) == NULL) { err_message (step, "Can not load shared resource!"); return step; } atexit (UnloadSharedResource); SHAREDRES_TERMIOS = savedtermio; } else { if ((mgSharedRes = AttachSharedResource ()) == NULL) { err_message (step, "Can not attach shared resource!"); return step; } atexit (UnattachSharedResource); } step++; #endif // Initialize resource if (!InitResource ()) { err_message (step, "Can not initialize resource!"); return step; } step++; #ifdef _STAND_ALONE // Init IAL engine.. if (!InitLWEvent ()) { err_message (step, "Can not initialize low level event!"); return step; } step++; atexit (TerminateLWEvent); __mg_dsk_msgs.OnIdle = IdleHandler4StandAlone; if (!StandAloneStartup ()) { fprintf (stderr, "Can not start MiniGUI-Lite StandAlone version.\n"); return step; } #else if (mgIsServer) { // Init IAL engine.. if (!InitLWEvent ()) { err_message (step, "Can not initialize low level event!"); return step; } step++; atexit (TerminateLWEvent); __mg_dsk_msgs.OnIdle = IdleHandler4Server; if (!ServerStartup ()) { fprintf (stderr, "Can not start the server of MiniGUI-Lite: mginit.\n"); return step; } } else { if (!ClientStartup ()) { err_message (step, "Can not start client!"); return step; } step++; __mg_dsk_msgs.OnIdle = IdleHandler4Client; } #endif SetKeyboardLayout ("default"); TerminateMgEtc (); return 0; }