ARM9-2410教学实验系统下Linux下minigui程序

源代码在线查看: init-lite.c

软件大小: 8511 K
上传用户: myhpgnl
关键词: minigui Linux 2410 ARM
下载地址: 免注册下载 普通下载 VIP

相关代码

				/*				** $Id: init-lite.c,v 1.33 2003/09/26 08:05:09 snig Exp $				**				** init.c: The Initialization/Termination routines				**				** Copyright (C) 1999, 2000, Wei Yongming.				**				** Current maintainer: Wei Yongming.				**				** Create date: 2000/11/05				*/								/*				** This program is free software; you can redistribute it and/or modify				** it under the terms of the GNU General Public License as published by				** the Free Software Foundation; either version 2 of the License, or				** (at your option) any later version.				**				** This program is distributed in the hope that it will be useful,				** but WITHOUT ANY WARRANTY; without even the implied warranty of				** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the				** GNU General Public License for more details.				**				** You should have received a copy of the GNU General Public License				** along with this program; if not, write to the Free Software				** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA				*/								/*				** TODO:				*/								#include 				#include 				#include 				#include 				#include 				#include 								#include "common.h"				#include "minigui.h"				#include "gdi.h"				#include "window.h"				#include "cliprect.h"				#include "gal.h"				#include "internals.h"				#include "ctrlclass.h"				#include "cursor.h"				#include "event.h"				#include "misc.h"				#include "menu.h"				#include "timer.h"				#include "accelkey.h"								#ifndef _STAND_ALONE				  #include "sharedres.h"				  #include "client.h"				  #include "server.h"								  void* mgSharedRes;				  size_t mgSizeRes;								#endif								BOOL GUIAPI ReinitDesktopEx (BOOL init_sys_text)				{				    return SendMessage (HWND_DESKTOP, MSG_REINITSESSION, init_sys_text, 0) == 0;				}								static struct termios savedtermio;								void* GUIAPI GetOriginalTermIO (void)				{				#ifdef _STAND_ALONE				    return &savedtermio;				#else				    return &SHAREDRES_TERMIOS;				#endif				}								static BOOL InitResource (void)				{				    if (!InitFixStr ()) {				        fprintf (stderr, "MiniGUI: Can not initialize Fixed String heap failure!\n");				        goto failure;				    }								#ifdef _CURSOR_SUPPORT				    if (!InitCursor ()) {				        fprintf (stderr, "MiniGUI: Count not initialize mouse cursor!\n");				        goto failure;				    }				#endif								    if (!InitMenu ()) {				        fprintf (stderr, "MiniGUI: Init Menu module failure!\n");				        goto failure;				    }								    if (!InitControlClass ()) {				        fprintf(stderr, "MiniGUI: Init Control Class failure!\n");				        goto failure;				    }								    if (!InitAccel ()) {				        fprintf(stderr, "MiniGUI: Init Accelerator failure!\n");				        goto failure;				    }								    if (!InitDesktop ()) {				        fprintf (stderr, "MiniGUI: Init Desktop error!\n");				        goto failure;				    }								    if (!InitFreeQMSGList ()) {				        fprintf (stderr, "MiniGUI: Init free QMSG list error!\n");				        goto failure;				    }								    if (!InitDskMsgQueue ()) {				        fprintf (stderr, "MiniGUI: Init MSG queue error!\n");				        goto failure;				    }								    return TRUE;								failure:				    return FALSE;				}								#define err_message(step, message) fprintf (stderr, "Error in step %d: %s\n", step, message)								#ifdef _STAND_ALONE								static void segvsig_handler (int v)				{				    TerminateLWEvent ();				    TerminateGAL ();								    if (v == SIGSEGV)				        kill (getpid(), SIGABRT); // cause core dump				    else				        _exit (v);				}								#else								// defined in kernel/sharedres.c.				void delete_sem (void);								static void segvsig_handler (int v)				{				    TerminateLWEvent ();				    TerminateGAL ();				    delete_sem ();								    unlink (LOCKFILE);				    unlink (CS_PATH);								    if (v == SIGSEGV)				        kill (getpid(), SIGABRT); // cause core dump				    else				        _exit (v);				}								#endif								static BOOL InstallSEGVHandler (void)				{				    struct sigaction siga;				    				    siga.sa_handler = segvsig_handler;				    siga.sa_flags = 0;				    				    memset (&siga.sa_mask, 0, sizeof (sigset_t));				    sigaction (SIGSEGV, &siga, NULL);				    sigaction (SIGTERM, &siga, NULL);				    sigaction (SIGINT, &siga, NULL);								    /* ignore the SIGPIPE signal */				    siga.sa_handler = SIG_IGN;				    sigaction (SIGPIPE, &siga, NULL);								    return TRUE;				}								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;				}								void TerminateGUI (int rcByGUI)				{				    DestroyDskMsgQueue ();				    DestroyFreeQMSGList ();				    TerminateDesktop ();				    TerminateAccel ();				    TerminateControlClass ();				    TerminateMenu ();				#ifdef _CURSOR_SUPPORT				    TerminateCursor ();				#endif				    TerminateFixStr ();								#ifdef _STAND_ALONE				    SendMessage (HWND_DESKTOP, MSG_ENDSESSION, 0, 0);								    StandAloneCleanup ();				#else				    if (mgIsServer) {				        SendMessage (HWND_DESKTOP, MSG_ENDSESSION, 0, 0);								        /* Cleanup UNIX domain socket and other IPC objects. */				        ServerCleanup ();				    }				    else {				        ClientCleanup ();				    }				#endif				}											

相关资源