mirror of https://github.com/lianthony/NT4.0
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.
191 lines
5.0 KiB
191 lines
5.0 KiB
//---------------------------------------------------------------------------
|
|
// FILE: DLLMAIN.C
|
|
//
|
|
// DESCRIPTION: This file contains DllMain and functions it calls to
|
|
// initialize global variables declared here. It also contains
|
|
// functions used for debugging.
|
|
//
|
|
// FUNCTIONS: DllMain
|
|
// BusyOn
|
|
// BusyOff
|
|
// PrtStartDebug
|
|
// PrtStartFirstDebug
|
|
// PrtEndDebug
|
|
// PrtErrorDebug
|
|
//
|
|
/* $Log: S:\oiwh\print\prtdllmn.c_v $
|
|
*
|
|
* Rev 1.6 01 Dec 1995 15:39:20 RAR
|
|
* Added CloseHandle of mutex handle in DLL_PROCESS_DETACH case in DllMain
|
|
* function.
|
|
*
|
|
* Rev 1.5 28 Jun 1995 14:23:48 RAR
|
|
* Fixed print error codes.
|
|
*
|
|
* Rev 1.4 23 Jun 1995 09:45:34 RAR
|
|
* Protection against simultaneous access of shared data by multiple threads and
|
|
* multiple processes.
|
|
*
|
|
* Rev 1.3 21 Jun 1995 16:17:36 RAR
|
|
* Moved all global vars to prtintl.h.
|
|
*
|
|
* Rev 1.2 20 Jun 1995 16:53:20 RAR
|
|
* Use thread local storage to store print prop.
|
|
*
|
|
* Rev 1.1 13 Jun 1995 16:46:14 RAR
|
|
* Print options are now stored in static mem rather than associated with window
|
|
* handle.
|
|
*
|
|
* Rev 1.0 25 Apr 1995 17:00:36 RAR
|
|
* Initial entry
|
|
*/
|
|
//---------------------------------------------------------------------------
|
|
|
|
#define PRTDLLMN_C
|
|
|
|
#include <windows.h>
|
|
#include "prtintl.h"
|
|
|
|
|
|
#if DEBUG_SEQPRINT
|
|
int nStartCount;
|
|
#endif
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// FUNCTION: DllMain
|
|
//
|
|
// DESCRIPTION: This is the DLL initialization/termination routine.
|
|
//---------------------------------------------------------------------------
|
|
|
|
BOOL __stdcall DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
|
|
{
|
|
|
|
switch (dwReason)
|
|
{
|
|
case DLL_PROCESS_ATTACH:
|
|
hInst = hModule;
|
|
|
|
if ((dwTlsIndex = TlsAlloc()) == 0xFFFFFFFF)
|
|
return FALSE;
|
|
|
|
if (!(hPrtOptsMutex = CreateMutex(NULL, FALSE, szPrtOptsMutexName)))
|
|
return FALSE;
|
|
|
|
InitializeCriticalSection(&csPrtOpts);
|
|
InitializeCriticalSection(&csCursor);
|
|
hHourGlass = LoadCursor(NULL, IDC_WAIT);
|
|
InitPrtTbl();
|
|
break;
|
|
|
|
case DLL_THREAD_ATTACH:
|
|
break;
|
|
|
|
case DLL_THREAD_DETACH:
|
|
break;
|
|
|
|
case DLL_PROCESS_DETACH:
|
|
TermPrtTbl();
|
|
TlsFree(dwTlsIndex);
|
|
CloseHandle(hPrtOptsMutex);
|
|
DeleteCriticalSection(&csPrtOpts);
|
|
DeleteCriticalSection(&csCursor);
|
|
break;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
// FUNCTION: BusyOn
|
|
//
|
|
// DESCRIPTION: Let the user know the application is busy by changing
|
|
// the mouse cursor to an hourglass.
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __stdcall BusyOn(void)
|
|
{
|
|
EnterCriticalSection(&csCursor);
|
|
|
|
if (!nCursorCount++)
|
|
{
|
|
hOldCursor = SetCursor(hHourGlass);
|
|
ShowCursor(TRUE) ;
|
|
}
|
|
|
|
LeaveCriticalSection(&csCursor);
|
|
return;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
// FUNCTION: BusyOff
|
|
//
|
|
// DESCRIPTION: Terminate the busy period by returning the cursor
|
|
// to its previous state (i.e., remove the hourglass).
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __stdcall BusyOff(void)
|
|
{
|
|
EnterCriticalSection(&csCursor);
|
|
|
|
if (!--nCursorCount)
|
|
{
|
|
SetCursor(hOldCursor);
|
|
ShowCursor(FALSE);
|
|
}
|
|
|
|
LeaveCriticalSection(&csCursor);
|
|
return;
|
|
}
|
|
|
|
#if DEBUG_SEQPRINT // Start of Debug Code
|
|
|
|
//---------------------------------------------------------------------------
|
|
// FUNCTION: PrtStartDebug
|
|
//
|
|
// DESCRIPTION: Provides for easy debugging of printer code.
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __stdcall PrtStartDebug(void)
|
|
{
|
|
if (!nStartCount++)
|
|
PrtStartFirstDebug();
|
|
|
|
return;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
// FUNCTION: PrtStartFirstDebug
|
|
//
|
|
// DESCRIPTION: Provides for easy debugging of printer code.
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __stdcall PrtStartFirstDebug(void)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
// FUNCTION: PrtEndDebug
|
|
//
|
|
// DESCRIPTION: Provides for easy debugging of printer code.
|
|
//---------------------------------------------------------------------------
|
|
|
|
void __stdcall PrtEndDebug(void)
|
|
{
|
|
nStartCount--;
|
|
return;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
// FUNCTION: PrtErrorDebug
|
|
//
|
|
// DESCRIPTION: Provides for easy debugging of printer code.
|
|
//---------------------------------------------------------------------------
|
|
|
|
int __stdcall PrtErrorDebug(int nStatus)
|
|
{
|
|
return (nStatus);
|
|
}
|
|
|
|
#endif // End of Debug Code
|