Changeset 21816 for branches/gcc-kmk/src/gdi32/initterm.cpp
- Timestamp:
- Nov 24, 2011, 6:53:58 PM (14 years ago)
- File:
-
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
branches/gcc-kmk/src/gdi32/initterm.cpp
r21796 r21816 1 /* $Id: init gdi32.cpp,v 1.16 2004-01-11 11:42:17sandervl Exp $1 /* $Id: initterm.cpp,v 1.21 2002-07-29 11:26:49 sandervl Exp $ 2 2 * 3 * DLL entry point3 * GDI32 DLL entry point 4 4 * 5 5 * Copyright 1998 Sander van Leeuwen 6 6 * Copyright 1998 Peter Fitzsimmons 7 7 * 8 *9 8 * Project Odin Software License can be found in LICENSE.TXT 10 *11 9 */ 12 10 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 */26 11 #define INCL_DOSMODULEMGR 27 12 #define INCL_DOSPROCESS … … 37 22 #include <cpuhlp.h> 38 23 #include <dbglog.h> 39 #include "region.h"40 24 #include <initdll.h> 41 25 #include <stats.h> 26 #include <exitlist.h> 27 28 #include "region.h" 42 29 #include "dibsect.h" 43 30 #include "rgbcvt.h" … … 46 33 #include "dbglocal.h" 47 34 48 extern "C" { 49 //Win32 resource table (produced by wrc) 50 extern DWORD gdi32_PEResTab; 51 } 35 // Win32 resource table (produced by wrc) 36 extern DWORD gdi32_PEResTab; 52 37 53 38 static HMODULE dllHandle = 0; … … 55 40 void (_Optlink *pRGB565to555)(WORD *dest, WORD *src, ULONG num) = NULL; 56 41 57 //******************************************************************************58 //******************************************************************************59 42 BOOL WINAPI GdiLibMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad) 60 43 { … … 74 57 return FALSE; 75 58 } 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 60 ULONG SYSTEM DLL_InitGdi32(ULONG hModule) 85 61 { 86 size_t i; 87 APIRET rc; 62 STATS_InitializeGDI32 (); 88 63 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(); 94 65 95 switch (ulFlag) { 96 case 0 : 97 STATS_InitializeGDI32 (); 66 if (!InitializeKernel32()) 67 return 0; 98 68 99 ParseLogStatusGDI32(); 69 CheckVersionFromHMOD(PE2LX_VERSION, hModule); /*PLF Wed 98-03-18 05:28:48*/ 70 if(InitRegionSpace() == FALSE) 71 { 72 return 0UL; 73 } 100 74 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 } 103 86 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; 122 92 123 93 dprintf(("gdi32 init %s %s (%x)", __DATE__, __TIME__, inittermGdi32)); 124 94 125 95 RasEntry (RAS_EVENT_Gdi32InitComplete, &dllHandle, sizeof (dllHandle)); 126 96 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 }138 97 139 /***********************************************************/ 140 /* A non-zero value must be returned to indicate success. */ 141 /***********************************************************/ 142 return 1UL; 98 return EXITLIST_GDI32; 143 99 } 144 //****************************************************************************** 145 //****************************************************************************** 100 101 void 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 114 ULONG SYSTEM DLL_Init(ULONG hModule) 115 { 116 if (DLL_InitDefault(hModule) == -1) 117 return -1; 118 return DLL_InitGdi32(hModule); 119 } 120 121 void 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.