Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

343 lines
6.8 KiB

/***************************************************************************
* msctls.c
*
* Utils library initialization code
*
***************************************************************************/
#include "ctlspriv.h"
#ifndef WIN32
#pragma code_seg(CODESEG_INIT)
#endif
HINSTANCE g_hinst;
int g_cProcesses = 0;
#ifdef WIN32
CRITICAL_SECTION g_csControls = {{0},0, 0, NULL, NULL, 0 };
#ifdef DEBUG
int g_CriticalSectionCount=0;
DWORD g_CriticalSectionOwner=0;
#ifdef WINNT
#include <stdio.h>
extern UINT wDebugMask;
#endif
#endif
#endif // WIN32
BOOL FAR PASCAL InitAnimateClass(HINSTANCE hInstance);
BOOL ListView_Init(HINSTANCE hinst);
BOOL TV_Init(HINSTANCE hinst);
BOOL FAR PASCAL Header_Init(HINSTANCE hinst);
BOOL FAR PASCAL Tab_Init(HINSTANCE hinst);
void Mem_Terminate();
int PASCAL _ProcessAttach(HANDLE hInstance)
{
#ifdef WIN32
BOOL fSuccess = TRUE;
#endif
g_hinst = hInstance;
#ifdef WIN32
#ifndef WINNT
ReinitializeCriticalSection(&g_csControls);
#else
InitializeCriticalSection(&g_csControls);
#endif
g_cProcesses++;
#ifndef WINNT
DebugMsg(DM_TRACE, TEXT("commctrl:ProcessAttach: %d"), g_cProcesses);
#endif
#endif
InitGlobalMetrics(0);
InitGlobalColors();
#ifdef DEBUG
#ifdef WINNT
/*
* read wDebugMask entry from win.ini for COMCTL32.DLL.
* The default is 0x000E, which includes DM_WARNING, DM_ERROR,
* and DM_ASSERT. The default has DM_TRACE and DM_ALLOC turned
* off.
*/
{
CHAR szDebugMask[ 80 ];
if (GetProfileStringA( "ComCtl32", "DebugMask", "0x000E",
szDebugMask, ARRAYSIZE(szDebugMask)) > 0 )
{
sscanf( szDebugMask, "%i", &wDebugMask );
}
}
#endif
#endif
#ifndef WIN31 // WIN31 wants the tab control and the updown
if (!InitToolbarClass(HINST_THISDLL))
return(0);
if (!InitToolTipsClass(HINST_THISDLL))
return(0);
if (!InitStatusClass(HINST_THISDLL))
return(0);
if (!ListView_Init(HINST_THISDLL))
return 0;
if (!Header_Init(HINST_THISDLL))
return 0;
#endif //!WIN31
if (!Tab_Init(HINST_THISDLL))
return 0;
#ifndef WIN31
if (!TV_Init(HINST_THISDLL))
return 0;
#ifndef WIN32
#ifdef WANT_SUCKY_HEADER
if (!InitHeaderClass(HINST_THISDLL))
return(0);
#endif
if (!InitButtonListBoxClass(HINST_THISDLL))
return(0);
#endif //Win32
if (!InitTrackBar(HINST_THISDLL))
return(0);
#endif // !WIN31
if (!InitUpDownClass(HINST_THISDLL))
#ifndef WIN31
return(0);
#else
{
WNDCLASS wc;
// Check if already registered by old commctrl
if (!GetClassInfo(GetModuleHandle("COMMCTRL"),s_szUpdownClass,&wc))
return(0);
}
#endif
#ifndef WIN31
if (!InitProgressClass(HINST_THISDLL))
return(0);
if (!InitHotKeyClass(HINST_THISDLL))
return(0);
#endif // !WIN31
#ifdef WIN32
if (!InitAnimateClass(HINST_THISDLL))
return 0;
#endif
return 1; /* success */
}
void NEAR PASCAL _ProcessDetach(HANDLE hInstance)
{
// BUGBUG serialize
ENTERCRITICAL
if (--g_cProcesses == 0) {
// terminate shared data
// Mem_Terminate must be called after all other termination routines
Mem_Terminate();
}
LEAVECRITICAL;
#ifdef WINNT
DeleteCriticalSection(&g_csControls);
#endif
}
#ifndef WINNT
#pragma data_seg(DATASEG_READONLY)
#endif
TCHAR const c_szCommCtrlDll[] = TEXT("commctrl.dll");
TCHAR const c_szComCtl32Dll[] = TEXT("comctl32.dll");
#ifndef WINNT
#pragma data_seg()
#endif
#ifdef WIN32
#ifndef WINNT
BOOL WINAPI Cctl1632_ThunkConnect32(LPCSTR pszDll16,LPCSTR pszDll32,HANDLE hIinst,DWORD dwReason);
#endif
BOOL APIENTRY LibMain(HANDLE hDll, DWORD dwReason, LPVOID lpReserved)
{
#ifndef WINNT
if (!Cctl1632_ThunkConnect32(c_szCommCtrlDll, c_szComCtl32Dll, hDll, dwReason))
return FALSE;
#endif
switch(dwReason) {
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hDll);
_ProcessAttach(hDll);
break;
case DLL_PROCESS_DETACH:
_ProcessDetach(hDll);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
default:
break;
} // end switch()
return TRUE;
} // end DllEntryPoint()
void Controls_EnterCriticalSection(void)
{
EnterCriticalSection(&g_csControls);
#ifdef DEBUG
if (g_CriticalSectionCount++ == 0)
g_CriticalSectionOwner = GetCurrentThreadId();
#endif
}
void Controls_LeaveCriticalSection(void)
{
#ifdef DEBUG
if (--g_CriticalSectionCount == 0)
g_CriticalSectionOwner = 0;
#endif
LeaveCriticalSection(&g_csControls);
}
#else
int FAR PASCAL LibMain(HANDLE hInstance, WORD wDataSeg, WORD wcbHeapSize, LPSTR lpstrCmdLine)
{
_ProcessAttach(hInstance);
return TRUE;
}
/* WEP
* Windows Exit Procedure
*/
#ifdef WIN31
int FAR PASCAL _loadds WEP(int nParameter)
#else
int FAR PASCAL WEP(int nParameter)
#endif
{
#ifdef WIN31
if (g_hbrGrayText)
DeleteObject(g_hbrGrayText);
if (g_hbrWindow)
DeleteObject(g_hbrWindow);
if (g_hbrWindowText)
DeleteObject(g_hbrWindowText);
if (g_hbrWindowFrame)
DeleteObject(g_hbrWindowFrame);
if (g_hbrBtnFace)
DeleteObject(g_hbrBtnFace);
if (g_hbrBtnHighlight)
DeleteObject(g_hbrBtnHighlight);
if (g_hbrBtnShadow)
DeleteObject(g_hbrBtnShadow);
if (g_hbrHighlight)
DeleteObject(g_hbrHighlight);
if (g_hbrBtnText)
DeleteObject(g_hbrBtnText);
if (g_hbrWhite)
DeleteObject(g_hbrWhite);
if (g_hbrGray)
DeleteObject(g_hbrGray);
if (g_hbrBlack)
DeleteObject(g_hbrBlack);
if (g_hbr3DFace)
DeleteObject(g_hbr3DFace);
if (g_hbr3DShadow)
DeleteObject(g_hbr3DShadow);
if (g_hbr3DHilight)
DeleteObject(g_hbr3DHilight);
if (g_hbr3DLight)
DeleteObject(g_hbr3DLight);
if (g_hbr3DDkShadow)
DeleteObject(g_hbr3DDkShadow);
#endif
return 1;
}
#endif
/* Stub function to call if all you want to do is make sure this DLL is loaded
*/
void WINAPI InitCommonControls(void)
{
}
#ifndef WIN32
#ifndef WIN31
BOOL FAR PASCAL Cctl1632_ThunkConnect16(LPCSTR pszDll16, LPCSTR pszDll32, WORD hInst, DWORD dwReason);
BOOL FAR PASCAL DllEntryPoint(DWORD dwReason, WORD hInst, WORD wDS, WORD wHeapSize, DWORD dwReserved1, WORD wReserved2)
{
if (!(Cctl1632_ThunkConnect16(c_szCommCtrlDll, c_szComCtl32Dll, hInst, dwReason)))
return FALSE;
return TRUE;
}
#endif // WIN31
#endif // WIN32
#if defined(WIN32) && defined(DEBUG)
LRESULT
WINAPI
SendMessageD(
HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam)
{
ASSERTNONCRITICAL;
#ifdef UNICODE
return SendMessageW(hWnd, Msg, wParam, lParam);
#else
return SendMessageA(hWnd, Msg, wParam, lParam);
#endif
}
#endif // defined(WIN32) && defined(DEBUG)