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.
245 lines
4.9 KiB
245 lines
4.9 KiB
/*++
|
|
|
|
Copyright (c) 1990-2003 Microsoft Corporation
|
|
All Rights Reserved
|
|
|
|
Module Name:
|
|
|
|
util.c
|
|
|
|
Abstract:
|
|
|
|
This module provides all the utility functions for localui.
|
|
|
|
// @@BEGIN_DDKSPLIT
|
|
|
|
Revision History:
|
|
// @@END_DDKSPLIT
|
|
--*/
|
|
|
|
#include "precomp.h"
|
|
#pragma hdrstop
|
|
|
|
#include "spltypes.h"
|
|
#include "local.h"
|
|
#include "localui.h"
|
|
|
|
PWSTR
|
|
ConstructXcvName(
|
|
PCWSTR pServerName,
|
|
PCWSTR pObjectName,
|
|
PCWSTR pObjectType
|
|
)
|
|
{
|
|
size_t cchOutput;
|
|
PWSTR pOut;
|
|
|
|
cchOutput = pServerName ? (wcslen(pServerName) + 2) : 1; /* "\\Server\," */
|
|
cchOutput += wcslen(pObjectType) + 2; /* "\\Server\,XcvPort _" */
|
|
cchOutput += pObjectName ? wcslen(pObjectName) : 0; /* "\\Server\,XcvPort Object_" */
|
|
|
|
if (pOut = AllocSplMem(cchOutput * sizeof (pOut [0]))) {
|
|
|
|
if (pServerName) {
|
|
StringCchCopy(pOut, cchOutput, pServerName);
|
|
StringCchCat (pOut, cchOutput, L"\\,");
|
|
}
|
|
else
|
|
{
|
|
StringCchCopy (pOut, cchOutput, L",");
|
|
}
|
|
|
|
StringCchCat (pOut, cchOutput, pObjectType);
|
|
StringCchCat (pOut, cchOutput, L" ");
|
|
|
|
if (pObjectName)
|
|
{
|
|
StringCchCat (pOut, cchOutput, pObjectName);
|
|
}
|
|
}
|
|
|
|
return pOut;
|
|
}
|
|
|
|
|
|
BOOL
|
|
IsCOMPort(
|
|
PCWSTR pPort
|
|
)
|
|
{
|
|
//
|
|
// Must begin with szCom
|
|
//
|
|
if ( _wcsnicmp( pPort, szCOM, 3 ) )
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
//
|
|
// wcslen guarenteed >= 3
|
|
//
|
|
return pPort[ wcslen( pPort ) - 1 ] == L':';
|
|
}
|
|
|
|
BOOL
|
|
IsLPTPort(
|
|
PCWSTR pPort
|
|
)
|
|
{
|
|
//
|
|
// Must begin with szLPT
|
|
//
|
|
if ( _wcsnicmp( pPort, szLPT, 3 ) )
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
//
|
|
// wcslen guarenteed >= 3
|
|
//
|
|
return pPort[ wcslen( pPort ) - 1 ] == L':';
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Message
|
|
*
|
|
* Displays a message by loading the strings whose IDs are passed into
|
|
* the function, and substituting the supplied variable argument list
|
|
* using the varargs macros.
|
|
*
|
|
*/
|
|
int Message(HWND hwnd, DWORD Type, int CaptionID, int TextID, ...)
|
|
{
|
|
WCHAR MsgText[2*MAX_PATH + 1];
|
|
WCHAR MsgFormat[256];
|
|
WCHAR MsgCaption[40];
|
|
va_list vargs;
|
|
|
|
if( ( LoadString( hInst, TextID, MsgFormat,
|
|
sizeof MsgFormat / sizeof *MsgFormat ) > 0 )
|
|
&& ( LoadString( hInst, CaptionID, MsgCaption,
|
|
sizeof MsgCaption / sizeof *MsgCaption ) > 0 ) )
|
|
{
|
|
va_start( vargs, TextID );
|
|
StringCchVPrintf ( MsgText, COUNTOF(MsgText), MsgFormat, vargs );
|
|
va_end( vargs );
|
|
|
|
MsgText[COUNTOF(MsgText) - 1] = L'\0';
|
|
|
|
return MessageBox(hwnd, MsgText, MsgCaption, Type);
|
|
}
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
|
|
INT
|
|
ErrorMessage(
|
|
HWND hwnd,
|
|
DWORD dwStatus
|
|
)
|
|
{
|
|
WCHAR MsgCaption[MAX_PATH];
|
|
PWSTR pBuffer = NULL;
|
|
INT iRet = 0;
|
|
|
|
FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM |
|
|
FORMAT_MESSAGE_ALLOCATE_BUFFER,
|
|
NULL,
|
|
dwStatus,
|
|
0,
|
|
(PWSTR) &pBuffer,
|
|
0,
|
|
NULL);
|
|
|
|
if (pBuffer) {
|
|
if (LoadString( hInst, IDS_LOCALMONITOR, MsgCaption,
|
|
sizeof MsgCaption / sizeof *MsgCaption) > 0) {
|
|
|
|
iRet = MessageBox(hwnd, pBuffer, MsgCaption, MSG_ERROR);
|
|
}
|
|
|
|
LocalFree(pBuffer);
|
|
}
|
|
|
|
return iRet;
|
|
}
|
|
|
|
|
|
LPWSTR
|
|
AllocSplStr(
|
|
LPCWSTR pStr
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This function will allocate enough local memory to store the specified
|
|
string, and copy that string to the allocated memory
|
|
|
|
Arguments:
|
|
|
|
pStr - Pointer to the string that needs to be allocated and stored
|
|
|
|
Return Value:
|
|
|
|
NON-NULL - A pointer to the allocated memory containing the string
|
|
|
|
FALSE/NULL - The operation failed. Extended error status is available
|
|
using GetLastError.
|
|
|
|
--*/
|
|
|
|
{
|
|
LPWSTR pMem;
|
|
DWORD cbStr;
|
|
|
|
if (!pStr) {
|
|
return NULL;
|
|
}
|
|
|
|
cbStr = wcslen(pStr)*sizeof(WCHAR) + sizeof(WCHAR);
|
|
|
|
if (pMem = AllocSplMem( cbStr )) {
|
|
CopyMemory( pMem, pStr, cbStr );
|
|
}
|
|
return pMem;
|
|
}
|
|
|
|
|
|
LPVOID
|
|
AllocSplMem(
|
|
DWORD cbAlloc
|
|
)
|
|
|
|
{
|
|
return GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT, cbAlloc);
|
|
}
|
|
|
|
|
|
// -----------------------------------------------------------------------
|
|
//
|
|
// DEBUG Stuff
|
|
//
|
|
// -----------------------------------------------------------------------
|
|
|
|
DWORD SplDbgLevel = 0;
|
|
|
|
VOID cdecl DbgMsg( LPWSTR MsgFormat, ... )
|
|
{
|
|
WCHAR MsgText[1024];
|
|
|
|
va_list pArgs;
|
|
va_start( pArgs, MsgFormat);
|
|
|
|
StringCchVPrintf (MsgText, COUNTOF (MsgText), MsgFormat, pArgs);
|
|
StringCchCat( MsgText, COUNTOF (MsgText), L"\r");
|
|
|
|
va_end( pArgs);
|
|
|
|
OutputDebugString(MsgText);
|
|
}
|
|
|