203 lines
4.8 KiB
C++
203 lines
4.8 KiB
C++
//////////////////////////////////////////////////////////////////////
|
|
// Microsoft Internet Explorer //
|
|
// Copyright(c) Microsoft Corp., 1995-1996 //
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// REGUTIL.C - registry functions common between MSHTML and INETCPL.
|
|
//
|
|
|
|
// HISTORY:
|
|
//
|
|
// 8/7/96 t-gpease created.
|
|
//
|
|
|
|
#include "inetcplp.h"
|
|
|
|
//
|
|
// Definintions
|
|
//
|
|
|
|
#define SMALLBUFFER 64
|
|
|
|
//
|
|
// Procedures
|
|
//
|
|
const TCHAR g_cszYes[] = TEXT("yes");
|
|
const TCHAR g_cszNo[] = TEXT("no");
|
|
|
|
|
|
// Conveters and int into a string... ONLY BYTE VALUES!!
|
|
TCHAR *MyIntToStr(TCHAR *pBuf, BYTE iVal)
|
|
{
|
|
int i, t;
|
|
|
|
ASSERT(iVal < 1000);
|
|
|
|
i=0;
|
|
if (t = iVal/100)
|
|
{
|
|
pBuf[i] = L'0' + t;
|
|
i++;
|
|
}
|
|
|
|
if ((t = (iVal % 100) / 10) || (i!=0))
|
|
{
|
|
pBuf[i] = L'0' + t;
|
|
i++;
|
|
}
|
|
|
|
pBuf[i] = L'0' + iVal % 10;
|
|
i++;
|
|
|
|
pBuf[i] = L'\0';
|
|
|
|
return pBuf;
|
|
}
|
|
|
|
// Read the registry for a string (REG_SZ) of comma separated RGB values
|
|
COLORREF RegGetColorRefString( HUSKEY huskey, LPTSTR RegValue, COLORREF Value)
|
|
{
|
|
TCHAR SmallBuf[SMALLBUFFER];
|
|
TCHAR *pBuf;
|
|
DWORD cb;
|
|
int iRed, iGreen, iBlue;
|
|
|
|
cb = ARRAYSIZE(SmallBuf);
|
|
if (SHRegQueryUSValue(huskey,
|
|
RegValue,
|
|
NULL,
|
|
(LPBYTE)&SmallBuf,
|
|
&cb,
|
|
FALSE,
|
|
NULL,
|
|
NULL) == ERROR_SUCCESS)
|
|
{
|
|
iRed = StrToInt(SmallBuf);
|
|
pBuf = SmallBuf;
|
|
|
|
// find the next comma
|
|
while(pBuf && *pBuf && *pBuf!=L',')
|
|
pBuf++;
|
|
|
|
// if valid and not NULL...
|
|
if (pBuf && *pBuf)
|
|
pBuf++; // increment
|
|
|
|
iGreen = StrToInt(pBuf);
|
|
|
|
// find the next comma
|
|
while(pBuf && *pBuf && *pBuf!=L',')
|
|
pBuf++;
|
|
|
|
// if valid and not NULL...
|
|
if (pBuf && *pBuf)
|
|
pBuf++; // increment
|
|
|
|
iBlue = StrToInt(pBuf);
|
|
|
|
// make sure all values are valid
|
|
iRed %= 256;
|
|
iGreen %= 256;
|
|
iBlue %= 256;
|
|
|
|
Value = RGB(iRed, iGreen, iBlue);
|
|
}
|
|
|
|
return Value;
|
|
}
|
|
|
|
// Writes the registry for a string (REG_SZ) of comma separated RGB values
|
|
COLORREF RegSetColorRefString( HUSKEY huskey, LPTSTR RegValue, COLORREF Value)
|
|
{
|
|
TCHAR SmallBuf[SMALLBUFFER];
|
|
TCHAR DigitBuf[4]; // that all we need for '255\0'
|
|
int iRed, iGreen, iBlue;
|
|
|
|
iRed = GetRValue(Value);
|
|
iGreen = GetGValue(Value);
|
|
iBlue = GetBValue(Value);
|
|
|
|
ASSERT(ARRAYSIZE(SmallBuf) >= 3 + 3 + 3 + 2 + 1) // "255,255,255"
|
|
|
|
MyIntToStr(SmallBuf, (BYTE)iRed);
|
|
StrCat(SmallBuf, TEXT(","));
|
|
StrCat(SmallBuf, MyIntToStr(DigitBuf, (BYTE)iGreen));
|
|
StrCat(SmallBuf, TEXT(","));
|
|
StrCat(SmallBuf, MyIntToStr(DigitBuf, (BYTE)iBlue));
|
|
|
|
SHRegWriteUSValue(huskey,
|
|
RegValue,
|
|
REG_SZ,
|
|
(LPVOID)&SmallBuf,
|
|
(lstrlen(SmallBuf)+1) * sizeof(TCHAR),
|
|
SHREGSET_DEFAULT);
|
|
|
|
//
|
|
// FEATURE: Should we do something if this fails?
|
|
//
|
|
|
|
return Value;
|
|
}
|
|
|
|
|
|
// Read the registry for a string (REG_SZ = "yes" | "no") and return a BOOL value
|
|
BOOL RegGetBooleanString(HUSKEY huskey, LPTSTR pszRegValue, BOOL bValue)
|
|
{
|
|
TCHAR szBuf[SMALLBUFFER];
|
|
LPCTSTR pszDefault;
|
|
DWORD cb;
|
|
DWORD cbDef;
|
|
|
|
// get the default setting
|
|
if (bValue)
|
|
pszDefault = g_cszYes;
|
|
else
|
|
pszDefault = g_cszNo;
|
|
|
|
cb = ARRAYSIZE(szBuf);
|
|
cbDef = (lstrlen(pszDefault)+1)*sizeof(TCHAR); // +1 for null term
|
|
if (SHRegQueryUSValue(huskey,
|
|
pszRegValue,
|
|
NULL,
|
|
(LPVOID)&szBuf,
|
|
&cb,
|
|
FALSE,
|
|
(LPVOID)pszDefault,
|
|
cbDef) == ERROR_SUCCESS)
|
|
{
|
|
if (!StrCmpI(szBuf, g_cszYes))
|
|
bValue = TRUE;
|
|
else if (!StrCmpI(szBuf, g_cszNo))
|
|
bValue = FALSE;
|
|
|
|
// else fall thru and return the Default that was passed in
|
|
}
|
|
|
|
return bValue;
|
|
}
|
|
|
|
// Write the registry for a string (REG_SZ) TRUE = "yes", FALSE = "no"
|
|
BOOL RegSetBooleanString(HUSKEY huskey, LPTSTR pszRegValue, BOOL bValue)
|
|
{
|
|
TCHAR szBuf[SMALLBUFFER];
|
|
|
|
if (bValue)
|
|
StrCpyN(szBuf, g_cszYes, ARRAYSIZE(szBuf));
|
|
else
|
|
StrCpyN(szBuf, g_cszNo, ARRAYSIZE(szBuf));
|
|
|
|
SHRegWriteUSValue(huskey,
|
|
pszRegValue,
|
|
REG_SZ,
|
|
(LPVOID)&szBuf,
|
|
(lstrlen(szBuf)+1) * sizeof(TCHAR),
|
|
SHREGSET_DEFAULT);
|
|
|
|
//
|
|
// FEATURE: Should we try to do something if this fails?
|
|
//
|
|
|
|
return bValue;
|
|
}
|
|
|