mirror of https://github.com/tongzx/nt5src
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.
182 lines
3.7 KiB
182 lines
3.7 KiB
//-----------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1997.
|
|
//
|
|
// File: A T M U T I L . C P P
|
|
//
|
|
// Contents: Utility function declaration
|
|
//
|
|
// Notes:
|
|
//
|
|
// Author: tongl 3 Feb 1997
|
|
//
|
|
//-----------------------------------------------------------------------
|
|
#include "pch.h"
|
|
#pragma hdrstop
|
|
|
|
#include "atmutil.h"
|
|
#include "ncmisc.h"
|
|
//#include "ncreg.h"
|
|
#include "ncstl.h"
|
|
|
|
void GetLowerIp(tstring& strIpRange, tstring * pstrLowerIp)
|
|
{
|
|
size_t iSeparator = strIpRange.find(c_chSeparator);
|
|
if(iSeparator != tstring::npos)
|
|
{
|
|
// get the first half of the string
|
|
*pstrLowerIp = strIpRange.substr(0, iSeparator);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
void GetUpperIp(tstring& strIpRange, tstring * pstrUpperIp)
|
|
{
|
|
size_t iSeparator = strIpRange.find(c_chSeparator);
|
|
if(iSeparator != tstring::npos)
|
|
{
|
|
// get the first half of the string
|
|
*pstrUpperIp = strIpRange.substr(iSeparator+1);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
BOOL IsValidIpRange(tstring& strIpLower, tstring& strIpUpper)
|
|
{
|
|
if (strIpLower > strIpUpper)
|
|
return FALSE;
|
|
else
|
|
return TRUE;
|
|
}
|
|
|
|
void MakeIpRange(tstring& strIpLower, tstring& strIpUpper, tstring * pstrNewIpRange)
|
|
{
|
|
tstring strNewIpRange = strIpLower;
|
|
strNewIpRange += c_chSeparator;
|
|
strNewIpRange += strIpUpper;
|
|
|
|
*pstrNewIpRange = strNewIpRange;
|
|
|
|
return;
|
|
}
|
|
|
|
void InitComboWithStringArray(HWND hDlg, int nIDDlgItem,
|
|
int csid, const int* asid)
|
|
{
|
|
while (csid--)
|
|
{
|
|
SendDlgItemMessage(hDlg, nIDDlgItem, CB_ADDSTRING,
|
|
0, (LPARAM)((PWSTR) SzLoadIds(* asid++)));
|
|
}
|
|
}
|
|
|
|
void ConvertBinaryToHexString(BYTE * pbData, DWORD cbData, tstring * pstrData)
|
|
{
|
|
Assert(pstrData);
|
|
Assert(pbData);
|
|
|
|
tstring strData = c_szEmpty;
|
|
WCHAR szByte[3];
|
|
|
|
while (cbData>0)
|
|
{
|
|
ConvertByteToSz(pbData, szByte);
|
|
strData += szByte;
|
|
|
|
pbData ++;
|
|
cbData --;
|
|
}
|
|
|
|
*pstrData = strData;
|
|
}
|
|
|
|
void ConvertByteToSz(BYTE * pbData, PWSTR pszByte)
|
|
{
|
|
// high 4 bits
|
|
BYTE bHighData = *pbData;
|
|
bHighData &= 0xF0;
|
|
bHighData >>= 4;
|
|
pszByte[0] = (bHighData < 10) ? L'0'+bHighData : L'A'+(bHighData-10);
|
|
|
|
// low 4 bits
|
|
BYTE bLowData = *pbData;
|
|
bLowData &= 0x0F;
|
|
pszByte[1] = (bLowData < 10) ? L'0'+bLowData : L'A'+(bLowData-10);
|
|
|
|
// terminater.
|
|
pszByte[2] = L'\0';
|
|
}
|
|
|
|
void ConvertHexCharToByte(WCHAR ch, BYTE * pByte)
|
|
{
|
|
*pByte =0;
|
|
|
|
if ((ch >= L'0') && (ch <= L'9'))
|
|
*pByte = ch-L'0';
|
|
else if ((ch >= L'A') && (ch <= L'F'))
|
|
*pByte = ch-L'A'+10;
|
|
else if ((ch >= L'a') && (ch <= L'f'))
|
|
*pByte = ch-L'a'+10;
|
|
else
|
|
AssertSz(FALSE, "Invalid hex character.");
|
|
}
|
|
|
|
void ConvertHexStringToBinaryWithAlloc(PCWSTR pszData, LPBYTE * ppbData, LPDWORD pcbData)
|
|
{
|
|
// Initialize the output parameters.
|
|
*ppbData = NULL;
|
|
*pcbData = 0;
|
|
|
|
LPBYTE pbBuffer = NULL;
|
|
DWORD cbBuffer = wcslen(pszData)/2;
|
|
const WCHAR * pChar = pszData;
|
|
|
|
if ((*pszData == L'0') &&
|
|
((*(pszData+1) == L'x') || (*(pszData+1) == L'X')))
|
|
{
|
|
cbBuffer -=2;
|
|
pChar +=2;
|
|
}
|
|
|
|
if (cbBuffer)
|
|
{
|
|
pbBuffer = new BYTE[cbBuffer];
|
|
|
|
if (pbBuffer == NULL)
|
|
{
|
|
AssertSz(FALSE, "new returned a NULL pointer");
|
|
return;
|
|
}
|
|
|
|
BYTE * pByte = pbBuffer;
|
|
|
|
if (pByte != NULL)
|
|
{
|
|
while (*pChar)
|
|
{
|
|
*pByte=0;
|
|
|
|
BYTE bData;
|
|
|
|
// first 4 bits
|
|
ConvertHexCharToByte(*pChar, &bData);
|
|
bData <<= 4;
|
|
*pByte |= bData;
|
|
pChar++;
|
|
|
|
// second 4 bits
|
|
ConvertHexCharToByte(*pChar, &bData);
|
|
*pByte |= bData;
|
|
pChar++;
|
|
|
|
pByte++;
|
|
}
|
|
}
|
|
}
|
|
|
|
*ppbData = pbBuffer;
|
|
*pcbData = cbBuffer;
|
|
}
|