windows-nt/Source/XPSP1/NT/shell/osshell/regwiz/phbooklib/main.cpp
2020-09-26 16:20:57 +08:00

223 lines
4.9 KiB
C++

// ############################################################################
#include "pch.hpp"
extern "C" {
HINSTANCE g_hInstDll; // instance for this DLL
}
#ifdef WIN16
int CALLBACK LibMain(HINSTANCE hinst,
WORD wDataSeg,
WORD cbHeap,
LPSTR lpszCmdLine )
{
g_hInstDll = hinst;
return TRUE;
}
//+---------------------------------------------------------------------------
//
// Function: PrivateMalloc()
//
// Synopsis: Allocate and initialize memory
//
// Arguments: [size - Size of memory block to be allocated]
//
// Returns: pointer to memory block if successful
// NULL otherwise
//
// History: 7/9/96 VetriV Created
//
//----------------------------------------------------------------------------
void far *PrivateMalloc(size_t size)
{
void far * ReturnValue = NULL;
ReturnValue = malloc(size);
if (NULL != ReturnValue)
memset(ReturnValue, 0, size);
return ReturnValue;
}
//+---------------------------------------------------------------------------
//
// Function: PrivateReAlloc()
//
// Synopsis: Reallocate memory
//
// Arguments: [lpBlock - Block to be reallocated ]
// [size - Size of memory block to be allocated]
//
// Returns: pointer to memory block if successful
// NULL otherwise
//
// History: 7/25/96 ValdonB Created
//
//----------------------------------------------------------------------------
void far *PrivateReAlloc(void far *lpBlock, size_t size)
{
void far *lpRetBlock;
lpRetBlock = PrivateMalloc(size);
if (NULL == lpRetBlock)
return NULL;
if (NULL != lpBlock)
{
size_t OldBlockSize, MoveSize;
OldBlockSize = _msize(lpBlock);
MoveSize = min(OldBlockSize, size);
memmove(lpRetBlock, lpBlock, MoveSize);
PrivateFree(lpBlock);
}
return lpRetBlock;
}
//+---------------------------------------------------------------------------
//
// Function: PrivateFree
//
// Synopsis: Free a block of memory
//
// Arguments: [lpBlock - Block to be freed]
//
// Returns: Nothing
//
// History: 7/9/96 VetriV Created
//
//----------------------------------------------------------------------------
void PrivateFree(void far *lpBlock)
{
free(lpBlock);
}
//+---------------------------------------------------------------------------
//
// Function: SearchPath()
//
// Synopsis: Searchs for the specified file in the given path
//
// Arguments: [lpPath - Address of search path]
// [lpFileName - Address of filename]
// [lpExtension - Address of Extension]
// [nBufferLength - size, in characters, of buffer]
// [lpBuffer - address of buffer for found filename]
// [lpFilePart - address of pointer to file component]
//
// Returns: Length of string copied to buffer (not including terminating
// NULL character) if successful
// 0 otherwise
//
// History: 7/9/96 VetriV Created
//
//----------------------------------------------------------------------------
DWORD SearchPath(LPCTSTR lpPath,LPCTSTR lpFileName, LPCTSTR lpExtension,
DWORD nBufferLength, LPTSTR lpBuffer, LPTSTR *lpFilePart)
{
BOOL bUseExtension = FALSE, bPathContainsFileName = FALSE;
DWORD dwRequiredLength;
LPSTR lpszPath = lpPath;
char szFileName[MAX_PATH+1];
OFSTRUCT OpenBuf;
// Check if extension should be used
//
if ((NULL != lpExtension) && !strchr(lpFileName, '.'))
bUseExtension = TRUE;
//
// Form Filename
//
lstrcpy(szFileName, lpFileName);
if (bUseExtension)
lstrcat(szFileName, lpExtension);
//
// If search path is NULL, then try to OpenFile using OF_SEARCH flag
// get the full path in OpenBuf struct
//
if (NULL == lpszPath)
{
if (HFILE_ERROR != OpenFile(szFileName, &OpenBuf, OF_EXIST | OF_SEARCH))
{
//
// This path contains the file name also
//
lpszPath = &OpenBuf.szPathName[0];
bPathContainsFileName = TRUE;
}
else
return 0;
}
//
// Check if output buffer length is sufficient
//
dwRequiredLength = lstrlen(lpszPath) +
(bPathContainsFileName ? 0 :lstrlen(szFileName)) + 1;
if (nBufferLength < dwRequiredLength)
return 0;
//
// Copy the full name to buffer
//
if (bPathContainsFileName)
lstrcpy(lpBuffer, lpszPath);
else
wsprintf(lpBuffer, "%s\\%s", lpszPath, szFileName);
//
// Do not include the terminating null character in return length
//
return dwRequiredLength - 1;
}
#else // WIN16
#ifdef _NOT_USING_ACTIVEX
extern "C" __declspec(dllexport) BOOL WINAPI DllMain(
HINSTANCE hinstDLL, // handle to DLL module
DWORD fdwReason, // reason for calling function
LPVOID lpvReserved // reserved
)
{
if (fdwReason == DLL_PROCESS_ATTACH)
g_hInstDll = hinstDLL;
return TRUE;
}
#if 0
extern "C" __declspec(dllexport) BOOL WINAPI DllMain(
HINSTANCE hinstDLL, // handle to DLL module
DWORD fdwReason, // reason for calling function
LPVOID lpvReserved // reserved
)
{
if (fdwReason == DLL_PROCESS_ATTACH)
g_hInstDll = hinstDLL;
return TRUE;
}
#endif
#endif
#endif // WIN16