BOOL CReg::RenameKey(LPCTSTR pOld, LPCTSTR pNew) {_STTEX(); CRKey *pRk = FindKey( pOld ); if ( pRk == NULL ) return FALSE; return pRk->SetName( pNew ); }
BOOL CRKey::DeleteSubKeys(HKEY hRoot, LPCTSTR pKey) {_STTEX(); HKEY hKey; char szKey[ CWF_STRSIZE ]; DWORD dwSize = CWF_STRSIZE - 1; // Open The Key if( RegOpenKeyEx( hRoot, pKey, 0, KEY_ALL_ACCESS, &hKey ) != ERROR_SUCCESS ) return FALSE; // For each sub key while ( RegEnumKeyEx( hKey, 0, szKey, &dwSize, NULL, NULL, NULL, NULL ) == ERROR_SUCCESS ) { // A little recursion DeleteSubKeys( hKey, szKey ); // Attempt to delete the key RegDeleteKey( hKey, szKey ); // Reset size dwSize = CWF_STRSIZE - 1; } // end while // Close the key RegCloseKey( hKey ); return TRUE; }
BOOL CAutoReg::SetDefault( LPREGENTRY pReg, DWORD dwDef, void* pvoidDef, DWORD dwDefLength ) {_STTEX(); if ( pReg == NULL ) return FALSE; pReg->dwDef = dwDef; if ( pvoidDef == NULL ) { pReg->dwDefSource = 1; pReg->pvoidDef = NULL; pReg->dwDefLength = sizeof( DWORD ); } // end if else { if ( dwDefLength == 0 ) { pReg->dwDefSource = 2; pReg->pvoidDef = NULL; strcpy( pReg->szDef, (char*)pvoidDef ); pReg->dwDefLength = strlen( pReg->szDef ) + 1; } // end if else { pReg->dwDefSource = 0; pReg->dwDefLength = dwDefLength; pReg->pvoidDef = pvoidDef; } // end else } // end else return TRUE; }
LPREGVALUE CRKey::Get( LPCTSTR pName, double *pd ) {_STTEX(); if ( pName == NULL || pd == NULL ) return NULL; LPREGVALUE prv = (LPREGVALUE)Find( pName ); if ( prv == NULL ) return NULL; return Get( prv, pd ); }
LPCTSTR CRKey::GetSz(LPCTSTR pName, LPCTSTR pDefault) {_STTEX(); // Get the reg object if ( pName == NULL ) pName = ""; LPREGVALUE prv = (LPREGVALUE)Find( pName ); return GetSz( prv, pDefault ); }
BOOL CCfgFile::Copy(HGROUP hGroup, CRKey *pRk) {_STTEX(); // Sanity check if ( hGroup == NULL || pRk == NULL ) return FALSE; LPREGVALUE prv = NULL; while ( ( prv = (LPREGVALUE)pRk->GetNext( prv ) ) != NULL ) { switch ( prv->type ) { case REG_DWORD : SetValue( hGroup, prv->cpkey, *( (LPDWORD)prv->data ) ); break; case REG_SZ : SetValue( hGroup, prv->cpkey, (LPCTSTR)prv->pcdata ); break; default : SetValue( hGroup, prv->cpkey, prv->data, prv->size ); break; } // end switch } // end while return TRUE; }
BOOL CRKey::GetKeyFromName(LPCTSTR pName, PHKEY phKey, LPSTR pKey) {_STTEX(); if ( pName == NULL ) return FALSE; // Get key name DWORD k, keys = sizeof( g_keytypes ) / sizeof( KEYTYPES ); for ( k = 0; k < keys && strnicmp( pName, g_keytypes[ k ].name, strlen( g_keytypes[ k ].name ) ) != 0; k++ ); // Do they want the root key if ( k < keys ) { if ( phKey != NULL ) *phKey = g_keytypes[ k ].key; } else if ( phKey != NULL ) phKey = NULL; // Do they want the key name if ( pKey != NULL ) { // Skip key type DWORD off = strlen( g_keytypes[ k ].name ); // Find separator and skip while ( pName[ off ] != 0 && pName[ off ] == '/' || pName[ off ] == '\\' ) off++; while ( pName[ off ] == '/' || pName[ off ] == '\\' ) off++; // Copy the key name if ( k < keys && pName[ off ] != 0 ) strcpy( pKey, &pName[ off ] ); else *pKey = 0; } // end if return ( k < keys ); }
CStr& CStr::operator =(int i) {_STTEX(); char num[ 32 ]; wsprintf( num, "%i", i ); copy( num ); return *this; }
LPCTSTR CStr::Set(double n, LPCTSTR pTemplate) {_STTEX(); char num[ 32 ]; sprintf( num, pTemplate, n ); *this = num; return str(); }
CStr& CStr::operator =(unsigned long ul) {_STTEX(); char num[ 32 ]; wsprintf( num, "%lu", ul ); copy( num ); return *this; }
CStr& CStr::operator =(unsigned int ui) {_STTEX(); char num[ 32 ]; wsprintf( num, "%u", ui ); copy( num ); return *this; }
CStr& CStr::operator +=(CStr &str) {_STTEX(); DWORD end = strlen(); if ( grow( str.strlen() + end + 1 ) ) strcpy( &( ptr()[ end ] ), str.ptr() ); return *this; }
BOOL CReg::DeleteValue(LPCTSTR pKey, LPCTSTR pValue) {_STTEX(); CRKey *pRk = FindKey( pKey ); if ( pRk == NULL ) return FALSE; return pRk->DeleteValue( pValue ); }
DWORD CReg::ahtoul( LPCTSTR pBuffer, BYTE ucBytes ) {_STTEX(); DWORD num, i; num = 0; // For Each ASCII Digit for ( i = 0; i < ucBytes; i++ ) { // Convert ASCII Digit Between 0 And 9 if ( pBuffer[ i ] >= '0' && pBuffer[ i ] <= '9' ) num = ( num << 4 ) + ( pBuffer[ i ] - '0' ); // Convert ASCII Digit Between A And F else if ( pBuffer[ i ] >= 'A' && pBuffer[ i ] <= 'F' ) num = ( num << 4 ) + ( pBuffer[ i ] - 'A' ) + 10; // Convert ASCII Digit Between a And f else if ( pBuffer[ i ] >= 'a' && pBuffer[ i ] <= 'f' ) num = ( num << 4 ) + ( pBuffer[ i ] - 'a' ) + 10; } // end for return num; } // end ahtou()
void CCfgFile::Destroy() {_STTEX(); // For each group while ( m_pHead != NULL ) { LPCFGGROUPINFO next = m_pHead->pNext; // Delete all elements DeleteElements( m_pHead ); // For good measure m_pHead->tail = NULL; m_pHead->size = 0; // Delete this element delete m_pHead; m_pHead = next; } // end while m_pTail = NULL; m_dwSize = 0; m_dwErrors = 0; m_hCurGroup = NULL; *m_szFileName = 0; }
CStr& CStr::operator =(long n) {_STTEX(); char num[ 32 ]; wsprintf( num, "%li", n ); copy( num ); return *this; }
HGROUP CCfgFile::AddGroup(LPCTSTR pGroup) {_STTEX(); // Does this group already exist? LPCFGGROUPINFO node = FindGroup( pGroup ); if ( node != NULL ) return node; // Create new group node node = new CFGGROUPINFO; if ( node == NULL ) return NULL; ZeroMemory( node, sizeof( CFGGROUPINFO ) ); // Copy group name if ( pGroup != NULL ) { strcpy_sz( node->name, pGroup ); } else *node->name = 0; // Add this node to the list node->pNext = NULL; node->pPrev = m_pTail; if ( m_pTail == NULL ) m_pHead = node; else m_pTail->pNext = node; m_pTail = node; m_dwSize++; return node; }
CStr& CStr::operator =(double n) {_STTEX(); char num[ 32 ]; sprintf( num, "%g", n ); copy( num ); return *this; }
BOOL CVar::RemoveVar(LPCTSTR pVar) {_STTEX(); LPVAR node = FindVar( pVar ); if ( node == NULL ) return FALSE; Delete( node ); return TRUE; }
CStr& CStr::operator +=(long n) {_STTEX(); char num[ 32 ]; wsprintf( num, "%li", n ); *this += num; return *this; }
LPREGVALUE CRKey::Get( LPCTSTR pName, LPDWORD pdw ) {_STTEX(); if ( pName == NULL || pdw == NULL ) return NULL; LPREGVALUE prv = (LPREGVALUE)Find( pName ); if ( prv == NULL ) return NULL; return Get( prv, pdw ); }
CStr& CStr::operator +=(LPCTSTR str) {_STTEX(); DWORD end = strlen(); if ( grow( ::strlen( str ) + end + 1 ) ) strcpy( &( ptr()[ end ] ), str ); return *this; }
LPREGVALUE CRKey::Get(LPCTSTR pName, void *ptr, DWORD size) {_STTEX(); if ( pName == NULL || ptr == NULL || size == 0 ) return NULL; LPREGVALUE prv = (LPREGVALUE)Find( pName ); if ( prv == NULL ) return NULL; return Get( prv, ptr, size ); }
CStr& CStr::operator +=(double n) {_STTEX(); char num[ 32 ]; sprintf( num, "%f", n ); *this += num; return *this; }
CRKey::~CRKey() {_STTEX(); m_name.destroy(); m_num.destroy(); Destroy(); }
BOOL CCfgFile::RemoveElement(LPCTSTR pGroup, LPCTSTR pElement) {_STTEX(); HGROUP hGroup = FindGroup( pGroup ); LPCFGELEMENTINFO pcei = FindElement( hGroup, pElement ); return RemoveElement( hGroup, pcei ); }
BOOL CRKey::Replace(LPCTSTR pSrc, LPCTSTR pDst) {_STTEX(); // Open files CWinFile src, dst; if ( !src.OpenExisting( pSrc, GENERIC_READ ) ) return FALSE; if ( !dst.OpenNew( pDst, GENERIC_WRITE ) ) return FALSE; // Read in data TMem< BYTE > in; if ( !in.allocate( src.Size() ) ) return FALSE; if ( !src.Read( in.ptr(), in.size() ) ) return FALSE; src.Close(); // Run replace function CPipe outpipe; DWORD op = 0, i = 0; char token[ 256 ]; while ( Replace( &outpipe, &op, in.str(), in.size(), NULL, NULL, token, NULL, &i ) ) { } // end while // Write out the data return dst.Write( outpipe.GetBuffer(), outpipe.GetBufferSize() ); }
BOOL CCfgFile::CanonicalizeBuffer(LPSTR str, LPBYTE buf, DWORD size) {_STTEX(); // Sanity check if ( str == NULL || buf == NULL || size == 0 ) return FALSE; DWORD i = 0, p = 0; while ( i < size ) { // Normal characters if ( buf[ i ] > ' ' && buf[ i ] <= '~' && buf[ i ] != '=' && buf[ i ] != '\"' && buf[ i ] != '&' && buf[ i ] != '%' && buf[ i ] != '+' ) str[ p++ ] = buf[ i++ ]; // Binary characters else { wsprintf( &str[ p ], "%%%02lX", (DWORD)buf[ i++ ] ); p += 3; } // end else } // end for // NULL terminate str[ p ] = NULL; return TRUE; }
BOOL CAutoReg::DeleteSubKeys ( HKEY hRoot, LPCTSTR pKey ) {_STTEX(); HKEY hKey; char szKey[ MAX_PATH ]; DWORD dwSize = MAX_PATH - 1; FILETIME ft; ZeroMemory( (LPVOID)&ft, sizeof( FILETIME ) ); // Open The Key if( RegOpenKeyEx( hRoot, pKey, 0, KEY_ALL_ACCESS, &hKey ) != ERROR_SUCCESS ) return FALSE; // For each sub key while ( RegEnumKeyEx( hKey, 0, szKey, &dwSize, NULL, NULL, NULL, &ft ) == ERROR_SUCCESS ) { // A little recursion DeleteSubKeys( hKey, szKey ); // Attempt to delete the key RegDeleteKey( hKey, szKey ); dwSize = MAX_PATH - 1; } // end while // Close the key RegCloseKey( hKey ); return TRUE; }
CRKey* CReg::GetKey(LPCTSTR pKey) {_STTEX(); LPREGKEY prk = AddKey( pKey ); if ( prk == NULL ) return NULL; return prk->key; }