Ignore:
Timestamp:
Nov 24, 2011, 6:53:58 PM (14 years ago)
Author:
dmik
Message:

Port GDI32 to GCC.

File:
1 moved

Legend:

Unmodified
Added
Removed
  • branches/gcc-kmk/src/gdi32/initterm.cpp

    r21796 r21816  
    1 /* $Id: initgdi32.cpp,v 1.16 2004-01-11 11:42:17 sandervl Exp $
     1/* $Id: initterm.cpp,v 1.21 2002-07-29 11:26:49 sandervl Exp $
    22 *
    3  * DLL entry point
     3 * GDI32 DLL entry point
    44 *
    55 * Copyright 1998 Sander van Leeuwen
    66 * Copyright 1998 Peter Fitzsimmons
    77 *
    8  *
    98 * Project Odin Software License can be found in LICENSE.TXT
    10  *
    119 */
    1210
    13 /*-------------------------------------------------------------*/
    14 /* INITERM.C -- Source for a custom dynamic link library       */
    15 /*              initialization and termination (_DLL_InitTerm) */
    16 /*              function.                                      */
    17 /*                                                             */
    18 /* When called to perform initialization, this sample function */
    19 /* gets storage for an array of integers, and initializes its  */
    20 /* elements with random integers.  At termination time, it     */
    21 /* frees the array.  Substitute your own special processing.   */
    22 /*-------------------------------------------------------------*/
    23 
    24 
    25 /* Include files */
    2611#define  INCL_DOSMODULEMGR
    2712#define  INCL_DOSPROCESS
     
    3722#include <cpuhlp.h>
    3823#include <dbglog.h>
    39 #include "region.h"
    4024#include <initdll.h>
    4125#include <stats.h>
     26#include <exitlist.h>
     27
     28#include "region.h"
    4229#include "dibsect.h"
    4330#include "rgbcvt.h"
     
    4633#include "dbglocal.h"
    4734
    48 extern "C" {
    49  //Win32 resource table (produced by wrc)
    50  extern DWORD gdi32_PEResTab;
    51 }
     35// Win32 resource table (produced by wrc)
     36extern DWORD gdi32_PEResTab;
    5237
    5338static HMODULE dllHandle = 0;
     
    5540void (_Optlink *pRGB565to555)(WORD *dest, WORD *src, ULONG num) = NULL;
    5641
    57 //******************************************************************************
    58 //******************************************************************************
    5942BOOL WINAPI GdiLibMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad)
    6043{
     
    7457   return FALSE;
    7558}
    76 /****************************************************************************/
    77 /* _DLL_InitTerm is the function that gets called by the operating system   */
    78 /* loader when it loads and frees this DLL for each process that accesses   */
    79 /* this DLL.  However, it only gets called the first time the DLL is loaded */
    80 /* and the last time it is freed for a particular process.  The system      */
    81 /* linkage convention MUST be used because the operating system loader is   */
    82 /* calling this function.                                                   */
    83 /****************************************************************************/
    84 ULONG APIENTRY inittermGdi32(ULONG hModule, ULONG ulFlag)
     59
     60ULONG SYSTEM DLL_InitGdi32(ULONG hModule)
    8561{
    86    size_t i;
    87    APIRET rc;
     62    STATS_InitializeGDI32 ();
    8863
    89    /*-------------------------------------------------------------------------*/
    90    /* If ulFlag is zero then the DLL is being loaded so initialization should */
    91    /* be performed.  If ulFlag is 1 then the DLL is being freed so            */
    92    /* termination should be performed.                                        */
    93    /*-------------------------------------------------------------------------*/
     64    ParseLogStatusGDI32();
    9465
    95    switch (ulFlag) {
    96       case 0 :
    97          STATS_InitializeGDI32 ();         
     66    if (!InitializeKernel32())
     67        return 0;
    9868
    99          ParseLogStatusGDI32();
     69    CheckVersionFromHMOD(PE2LX_VERSION, hModule); /*PLF Wed  98-03-18 05:28:48*/
     70    if(InitRegionSpace() == FALSE)
     71    {
     72        return 0UL;
     73    }
    10074
    101          if (!InitializeKernel32())
    102              return 0;
     75    DIBSection::initDIBSection();
     76    if(CPUFeatures & CPUID_MMX)
     77    {
     78        pRGB555to565 = RGB555to565MMX;
     79        pRGB565to555 = RGB565to555MMX;
     80    }
     81    else
     82    {
     83        pRGB555to565 = RGB555to565;
     84        pRGB565to555 = RGB565to555;
     85    }
    10386
    104          CheckVersionFromHMOD(PE2LX_VERSION, hModule); /*PLF Wed  98-03-18 05:28:48*/
    105          if(InitRegionSpace() == FALSE) {
    106              return 0UL;
    107          }
    108          DIBSection::initDIBSection();
    109          if(CPUFeatures & CPUID_MMX) {
    110              pRGB555to565 = RGB555to565MMX;
    111              pRGB565to555 = RGB565to555MMX;
    112          }
    113          else {
    114              pRGB555to565 = RGB555to565;
    115              pRGB565to555 = RGB565to555;
    116          }
    117          dllHandle = RegisterLxDll(hModule, GdiLibMain, (PVOID)&gdi32_PEResTab,
    118                                    GDI32_MAJORIMAGE_VERSION, GDI32_MINORIMAGE_VERSION,
    119                                    IMAGE_SUBSYSTEM_NATIVE);
    120          if(dllHandle == 0)
    121              return 0UL;
     87    dllHandle = RegisterLxDll(hModule, GdiLibMain, (PVOID)&gdi32_PEResTab,
     88                              GDI32_MAJORIMAGE_VERSION, GDI32_MINORIMAGE_VERSION,
     89                              IMAGE_SUBSYSTEM_NATIVE);
     90    if(dllHandle == 0)
     91        return 0UL;
    12292
    123          dprintf(("gdi32 init %s %s (%x)", __DATE__, __TIME__, inittermGdi32));
     93    dprintf(("gdi32 init %s %s (%x)", __DATE__, __TIME__, inittermGdi32));
    12494
    125          RasEntry (RAS_EVENT_Gdi32InitComplete, &dllHandle, sizeof (dllHandle));
     95    RasEntry (RAS_EVENT_Gdi32InitComplete, &dllHandle, sizeof (dllHandle));
    12696
    127          break;
    128       case 1 :
    129          if(dllHandle) {
    130              DestroyRegionSpace();
    131              UnregisterLxDll(dllHandle);
    132          }
    133          STATS_UninitializeGDI32 ();         
    134          break;
    135       default  :
    136          return 0UL;
    137    }
    13897
    139    /***********************************************************/
    140    /* A non-zero value must be returned to indicate success.  */
    141    /***********************************************************/
    142    return 1UL;
     98    return EXITLIST_GDI32;
    14399}
    144 //******************************************************************************
    145 //******************************************************************************
     100
     101void SYSTEM DLL_TermGdi32(ULONG hModule)
     102{
     103    dprintf(("gdi32 exit"));
     104
     105    if (dllHandle)
     106    {
     107        DestroyRegionSpace();
     108        UnregisterLxDll(dllHandle);
     109    }
     110
     111    STATS_UninitializeGDI32();
     112}
     113
     114ULONG SYSTEM DLL_Init(ULONG hModule)
     115{
     116    if (DLL_InitDefault(hModule) == -1)
     117        return -1;
     118    return DLL_InitGdi32(hModule);
     119}
     120
     121void SYSTEM DLL_Term(ULONG hModule)
     122{
     123    DLL_TermGdi32(hModule);
     124    DLL_TermDefault(hModule);
     125}
Note: See TracChangeset for help on using the changeset viewer.