bool wxRegKey::GetFirstKey(wxString& strKeyName, long& lIndex) { if ( !Open(Read) ) return false; lIndex = 0; return GetNextKey(strKeyName, lIndex); }
void XKeyScale::Execute( XSPActObj spActObj, XSPBaseLayer spLayer, float fOverSec ) { // const auto bPlaying = spActObj->GetpSprObj()->IsPlaying(); auto pSprObj = spActObj->GetpSprObj(); auto bPlaying = pSprObj->IsPlaying(); if( pSprObj->GetpParent() ) bPlaying = pSprObj->GetpParent()->IsPlaying(); auto spLayerMove = std::static_pointer_cast<XLayerMove>( spLayer ); if( XASSERT( spLayerMove ) ) { auto& cn = spLayerMove->GetcnScaleMutable(); // 실시간으로 이 키의 뒤에 같은타입의 키가 있는지 찾는다 auto pNextKey = dynamic_cast<XKeyScale *>( GetNextKey() ); if( pNextKey ) { cn.interpolation = m_Interpolation; if( bPlaying ) cn.vScaleDest = pNextKey->GetvScaleRandomed(); else cn.vScaleDest = pNextKey->GetvScaleOrig(); // cn.vScaleSrc = m_vScaleOrig; cn.vScaleSrc = GetvScaleRandomed(); cn.fNextKeyFrame = pNextKey->GetfFrame(); cn.fStartKeyFrame = GetfFrame(); } else { cn.interpolation = xSpr::xNONE; cn.vScaleDest = m_vScaleOrig; cn.vScaleSrc = GetvScaleRandomed(); cn.fNextKeyFrame = GetfFrame(); cn.fStartKeyFrame = GetfFrame(); } if( bPlaying ) m_vScaleRandomed = AssignRandom(); // 다음 보간을 위해 랜덤값 만듬. else m_vScaleRandomed = m_vScaleOrig; // 에디팅 모드에선 오리지날 값만 씀. } // if( XASSERT( spLayerMove ) ) { // spLayerMove->SetScale( m_vScale ); // CHANNEL_SCALE cn; // cn.vScale = m_vScale; // cn.interpolation = m_Interpolation; // // spLayerMove->SetScale( m_fScaleX, m_fScaleY ); // // 실시간으로 이 키의 뒤에 같은타입의 키가 있는지 찾는다 // auto pNextKey = dynamic_cast<XKeyScale *>( GetNextKey() ); // if( m_Interpolation && pNextKey ) { // 다음키가 있으면 보간으로 움직이도록 한다 // cn.vScaleDest = pNextKey->GetvScale(); // cn.vScaleSrc = m_vScale; // cn.fNextKeyFrame = pNextKey->GetfFrame(); // cn.fStartKeyFrame = GetfFrame(); // } else { // cn.interpolation = xSpr::xNONE; // cn.vScaleDest.Set( 1.f ); // cn.vScaleSrc.Set( 1.f ); // cn.fNextKeyFrame = 0; // cn.fStartKeyFrame = 0; // } // // 채널정보 씀 // spLayerMove->SetcnScale( cn ); // } }
// ---------------------------------------------------------------------------- // delete keys/values // ---------------------------------------------------------------------------- bool wxRegKey::DeleteSelf() { { wxLogNull nolog; if ( !Open() ) { // it already doesn't exist - ok! return true; } } // prevent a buggy program from erasing one of the root registry keys or an // immediate subkey (i.e. one which doesn't have '\\' inside) of any other // key except HKCR (HKCR has some "deleteable" subkeys) if ( m_strKey.empty() || ((m_hRootKey != (WXHKEY) aStdKeys[HKCR].hkey) && (m_strKey.Find(REG_SEPARATOR) == wxNOT_FOUND)) ) { wxLogError(_("Registry key '%s' is needed for normal system operation,\ndeleting it will leave your system in unusable state:\noperation aborted."), GetFullName(this)); return false; } // we can't delete keys while enumerating because it confuses GetNextKey, so // we first save the key names and then delete them all wxArrayString astrSubkeys; wxString strKey; long lIndex; bool bCont = GetFirstKey(strKey, lIndex); while ( bCont ) { astrSubkeys.Add(strKey); bCont = GetNextKey(strKey, lIndex); } size_t nKeyCount = astrSubkeys.Count(); for ( size_t nKey = 0; nKey < nKeyCount; nKey++ ) { wxRegKey key(*this, astrSubkeys[nKey]); if ( !key.DeleteSelf() ) return false; } // now delete this key itself Close(); m_dwLastError = RegDeleteKey((HKEY) m_hRootKey, m_strKey.t_str()); // deleting a key which doesn't exist is not considered an error if ( m_dwLastError != ERROR_SUCCESS && m_dwLastError != ERROR_FILE_NOT_FOUND ) { wxLogSysError(m_dwLastError, _("Can't delete key '%s'"), GetName().c_str()); return false; } return true; }
HRESULT RegistryClassEnum::GetKey (LPTSTR lpName, const DWORD dwNameLen, PFILETIME lpftLastWriteTime, const bool fGetFirst) { if ((NULL == lpName) || (dwNameLen <= 1)) return ERROR_BAD_ARGUMENTS; DWORD cbName=dwNameLen; HRESULT hr=(fGetFirst ? GetFirstKey(lpName, &cbName, lpftLastWriteTime) : GetNextKey(lpName, &cbName, lpftLastWriteTime)); if (hr != S_OK) return hr; if (cbName >= dwNameLen) return ERROR_BUFFER_OVERFLOW; lpName[cbName] = _T('\0'); // just making sure return S_OK; }
bool wxRegKey::Copy(wxRegKey& keyDst) { bool ok = true; // copy all sub keys to the new location wxString strKey; long lIndex; bool bCont = GetFirstKey(strKey, lIndex); while ( ok && bCont ) { wxRegKey key(*this, strKey); wxString keyName; keyName << GetFullName(&keyDst) << REG_SEPARATOR << strKey; ok = key.Copy(keyName); if ( ok ) bCont = GetNextKey(strKey, lIndex); else wxLogError(_("Failed to copy the registry subkey '%s' to '%s'."), GetFullName(&key), keyName.c_str()); } // copy all values wxString strVal; bCont = GetFirstValue(strVal, lIndex); while ( ok && bCont ) { ok = CopyValue(strVal, keyDst); if ( !ok ) { wxLogSysError(m_dwLastError, _("Failed to copy registry value '%s'"), strVal.c_str()); } else { bCont = GetNextValue(strVal, lIndex); } } if ( !ok ) { wxLogError(_("Failed to copy the contents of registry key '%s' to '%s'."), GetFullName(this), GetFullName(&keyDst)); } return ok; }
char* CNWNXHashSet::OnRequest(char* gameObject, char* Request, char* Parameters) { char* presult = NULL; Log(2, "Request: \"%s\"\n", Request); Log(3, "Params: \"%s\"\n", Parameters); if (strcmp(Request, "LOOKUP") == 0) presult = Lookup(gameObject, Parameters); else if (strcmp(Request, "INSERT") == 0) presult = Insert(gameObject, Parameters); else if (strcmp(Request, "DELETE") == 0) presult = Delete(gameObject, Parameters); else if (strcmp(Request, "STATUS") == 0) presult = (char *)(iLastOperation ? "1" : "0"); else if (strcmp(Request, "VALID") == 0) presult = Valid(gameObject, Parameters); else if (strcmp(Request, "EXISTS") == 0) presult = Exists(gameObject, Parameters); else if (strcmp(Request, "GETFIRSTKEY") == 0) presult = GetFirstKey(gameObject, Parameters); else if (strcmp(Request, "GETNEXTKEY") == 0) presult = GetNextKey(gameObject, Parameters); else if (strcmp(Request, "GETCURRENTKEY") == 0) presult = GetCurrentKey(gameObject, Parameters); else if (strcmp(Request, "GETNTHKEY") == 0) presult = GetNthKey(gameObject, Parameters); else if (strcmp(Request, "HASNEXT") == 0) presult = HasNext(gameObject, Parameters); else if (strcmp(Request, "GETSIZE") == 0) presult = GetSize(gameObject, Parameters); else if (strcmp(Request, "DESTROY") == 0) presult = Destroy(gameObject, Parameters); else if (strcmp(Request, "CREATE") == 0) presult = Create(gameObject, Parameters); Log(4, "hashset returns[%s]\n", presult); // a return value of NULL tells NWNX that it shouldn't copy // any values, a non zero pointer tells NWNX that it should copy // the null terminated string pointed to by that pointer back into NWN. return presult; }
bool wxRegKey::DoExport(wxOutputStream& ostr) const { // write out this key name if ( !WriteAsciiChar(ostr, '[') ) return false; if ( !WriteAsciiString(ostr, GetName(false /* no short prefix */)) ) return false; if ( !WriteAsciiChar(ostr, ']') || !WriteAsciiEOL(ostr) ) return false; // dump all our values long dummy; wxString name; wxRegKey& self = const_cast<wxRegKey&>(*this); bool cont = self.GetFirstValue(name, dummy); while ( cont ) { if ( !DoExportValue(ostr, name) ) return false; cont = GetNextValue(name, dummy); } // always terminate values by blank line, even if there were no values if ( !WriteAsciiEOL(ostr) ) return false; // recurse to subkeys cont = self.GetFirstKey(name, dummy); while ( cont ) { wxRegKey subkey(*this, name); if ( !subkey.DoExport(ostr) ) return false; cont = GetNextKey(name, dummy); } return true; }
int VP8LBuildHuffmanTable(HuffmanCode* const root_table, int root_bits, const int code_lengths[], int code_lengths_size) { HuffmanCode* table = root_table; // next available space in table int total_size = 1 << root_bits; // total size root table + 2nd level table int* sorted = NULL; // symbols sorted by code length int len; // current code length int symbol; // symbol index in original or sorted table // number of codes of each length: int count[MAX_ALLOWED_CODE_LENGTH + 1] = { 0 }; // offsets in sorted table for each length: int offset[MAX_ALLOWED_CODE_LENGTH + 1]; assert(code_lengths_size != 0); assert(code_lengths != NULL); assert(root_table != NULL); assert(root_bits > 0); // Build histogram of code lengths. for (symbol = 0; symbol < code_lengths_size; ++symbol) { if (code_lengths[symbol] > MAX_ALLOWED_CODE_LENGTH) { return 0; } ++count[code_lengths[symbol]]; } // Error, all code lengths are zeros. if (count[0] == code_lengths_size) { return 0; } // Generate offsets into sorted symbol table by code length. offset[1] = 0; for (len = 1; len < MAX_ALLOWED_CODE_LENGTH; ++len) { if (count[len] > (1 << len)) { return 0; } offset[len + 1] = offset[len] + count[len]; } sorted = (int*)WebPSafeMalloc(code_lengths_size, sizeof(*sorted)); if (sorted == NULL) { return 0; } // Sort symbols by length, by symbol order within each length. for (symbol = 0; symbol < code_lengths_size; ++symbol) { const int symbol_code_length = code_lengths[symbol]; if (code_lengths[symbol] > 0) { sorted[offset[symbol_code_length]++] = symbol; } } // Special case code with only one value. if (offset[MAX_ALLOWED_CODE_LENGTH] == 1) { HuffmanCode code; code.bits = 0; code.value = (uint16_t)sorted[0]; ReplicateValue(table, 1, total_size, code); WebPSafeFree(sorted); return total_size; } { int step; // step size to replicate values in current table uint32_t low = -1; // low bits for current root entry uint32_t mask = total_size - 1; // mask for low bits uint32_t key = 0; // reversed prefix code int num_nodes = 1; // number of Huffman tree nodes int num_open = 1; // number of open branches in current tree level int table_bits = root_bits; // key length of current table int table_size = 1 << table_bits; // size of current table symbol = 0; // Fill in root table. for (len = 1, step = 2; len <= root_bits; ++len, step <<= 1) { num_open <<= 1; num_nodes += num_open; num_open -= count[len]; if (num_open < 0) { WebPSafeFree(sorted); return 0; } for (; count[len] > 0; --count[len]) { HuffmanCode code; code.bits = (uint8_t)len; code.value = (uint16_t)sorted[symbol++]; ReplicateValue(&table[key], step, table_size, code); key = GetNextKey(key, len); } } // Fill in 2nd level tables and add pointers to root table. for (len = root_bits + 1, step = 2; len <= MAX_ALLOWED_CODE_LENGTH; ++len, step <<= 1) { num_open <<= 1; num_nodes += num_open; num_open -= count[len]; if (num_open < 0) { WebPSafeFree(sorted); return 0; } for (; count[len] > 0; --count[len]) { HuffmanCode code; if ((key & mask) != low) { table += table_size; table_bits = NextTableBitSize(count, len, root_bits); table_size = 1 << table_bits; total_size += table_size; low = key & mask; root_table[low].bits = (uint8_t)(table_bits + root_bits); root_table[low].value = (uint16_t)((table - root_table) - low); } code.bits = (uint8_t)(len - root_bits); code.value = (uint16_t)sorted[symbol++]; ReplicateValue(&table[key >> root_bits], step, table_size, code); key = GetNextKey(key, len); } } // Check if tree is full. if (num_nodes != 2 * offset[MAX_ALLOWED_CODE_LENGTH] - 1) { WebPSafeFree(sorted); return 0; } } WebPSafeFree(sorted); return total_size; }
bool pgRegKey::GetFirstKey(pgRegKey *&pkey, long &lIndex) const { lIndex = 0; return GetNextKey(pkey, lIndex); }
// ---------------------------------------------------------------------------- // delete keys/values // ---------------------------------------------------------------------------- bool wxRegKey::DeleteSelf() { { wxLogNull nolog; if ( !Open() ) { // it already doesn't exist - ok! return true; } } // prevent a buggy program from erasing one of the root registry keys or an // immediate subkey (i.e. one which doesn't have '\\' inside) of any other // key except HKCR (HKCR has some "deleteable" subkeys) if ( m_strKey.empty() || ((m_hRootKey != (WXHKEY) aStdKeys[HKCR].hkey) && (m_strKey.Find(REG_SEPARATOR) == wxNOT_FOUND)) ) { wxLogError(_("Registry key '%s' is needed for normal system operation,\ndeleting it will leave your system in unusable state:\noperation aborted."), GetFullName(this)); return false; } // we can't delete keys while enumerating because it confuses GetNextKey, so // we first save the key names and then delete them all wxArrayString astrSubkeys; wxString strKey; long lIndex; bool bCont = GetFirstKey(strKey, lIndex); while ( bCont ) { astrSubkeys.Add(strKey); bCont = GetNextKey(strKey, lIndex); } size_t nKeyCount = astrSubkeys.Count(); for ( size_t nKey = 0; nKey < nKeyCount; nKey++ ) { wxRegKey key(*this, astrSubkeys[nKey]); if ( !key.DeleteSelf() ) return false; } // now delete this key itself Close(); // deleting a key which doesn't exist is not considered an error #if wxUSE_DYNLIB_CLASS wxDynamicLibrary dllAdvapi32(wxT("advapi32")); // Minimum supported OS for RegDeleteKeyEx: Vista, XP Pro x64, Win Server 2008, Win Server 2003 SP1 if(dllAdvapi32.HasSymbol(wxT("RegDeleteKeyEx"))) { typedef LONG (WINAPI *RegDeleteKeyEx_t)(HKEY, LPCTSTR, REGSAM, DWORD); wxDYNLIB_FUNCTION(RegDeleteKeyEx_t, RegDeleteKeyEx, dllAdvapi32); m_dwLastError = (*pfnRegDeleteKeyEx)((HKEY) m_hRootKey, m_strKey.t_str(), GetMSWViewFlags(m_viewMode), 0); // This parameter is reserved and must be zero. } else #endif // wxUSE_DYNLIB_CLASS { m_dwLastError = RegDeleteKey((HKEY) m_hRootKey, m_strKey.t_str()); } if ( m_dwLastError != ERROR_SUCCESS && m_dwLastError != ERROR_FILE_NOT_FOUND ) { wxLogSysError(m_dwLastError, _("Can't delete key '%s'"), GetName().c_str()); return false; } return true; }
//-------------------------------------------------------- // void ConfigActionHandler(dword key) { int count, result; switch ( chosenConfigLine ) { case 1 : switch ( key ) // Model type { case RKEY_VolUp: if ( currentModelType == TF5800 ) { currentModelType = TF5000; CreateTF5000Keys( &localKeyCodes ); } else { currentModelType = TF5800; CreateTF5800Keys( &localKeyCodes ); } DisplayConfigLine( chosenConfigLine ); DisplayConfigLine( 3 ); // update the activation key code break; case RKEY_VolDown: if ( currentModelType == TF5800 ) { currentModelType = TF5000; CreateTF5000Keys( &localKeyCodes ); } else { currentModelType = TF5800; CreateTF5800Keys( &localKeyCodes ); } DisplayConfigLine( chosenConfigLine ); DisplayConfigLine( 3 ); // update the activation key code break; case RKEY_Ok : break; default : break; } break; case 2 : // Language break; case 3 : switch ( key ) // Activation key { case RKEY_VolUp: CurrentActivationKey = GetNextKey( &localKeyCodes, CurrentActivationKey ); DisplayConfigLine( chosenConfigLine ); break; case RKEY_VolDown: CurrentActivationKey = GetPreviousKey( &localKeyCodes, CurrentActivationKey ); DisplayConfigLine( chosenConfigLine ); break; case RKEY_Ok : DirectEnterActivateKey(); break; default : break; } break; case 4 : switch ( key ) // Logo highlight { case RKEY_VolUp: SelectNextHighlight( ¤tHighlight ); DisplayConfigLine( chosenConfigLine ); break; case RKEY_VolDown: SelectPreviousHighlight( ¤tHighlight ); DisplayConfigLine( chosenConfigLine ); break; default : break; } break; case 5 : switch ( key ) // Selection sytle { case RKEY_VolUp: if ( displayOption < 1 ) displayOption++; else displayOption = 0; DisplayConfigLine( chosenConfigLine ); break; case RKEY_VolDown: if ( displayOption > 0 ) displayOption--; else displayOption = 1; DisplayConfigLine( chosenConfigLine ); break; default : break; } break; case 6 : switch ( key ) // NowNext Tag { case RKEY_VolUp: if ( currentNowNextTag < 1 ) currentNowNextTag++; else currentNowNextTag = 0; DisplayConfigLine( chosenConfigLine ); break; case RKEY_VolDown: if ( currentNowNextTag > 0 ) currentNowNextTag--; else currentNowNextTag = 1; DisplayConfigLine( chosenConfigLine ); break; default : break; } break; case 7 : switch ( key ) // Progress Information { case RKEY_VolUp: if ( currentProgressInfo < 1 ) currentProgressInfo++; else currentProgressInfo = 0; DisplayConfigLine( chosenConfigLine ); break; case RKEY_VolDown: if ( currentProgressInfo > 0 ) currentProgressInfo--; else currentProgressInfo = 1; DisplayConfigLine( chosenConfigLine ); break; default : break; } break; case 8 : switch ( key ) // Recall Key Option { case RKEY_VolUp: if ( currentRecallKey < 1 ) currentRecallKey++; else currentRecallKey = 0; DisplayConfigLine( chosenConfigLine ); break; case RKEY_VolDown: if ( currentRecallKey > 0 ) currentRecallKey--; else currentRecallKey = 1; DisplayConfigLine( chosenConfigLine ); break; default : break; } break; case 9 : switch ( key ) // Screen Fade Options 0 - 600seconds { case RKEY_VolUp: if ( currentScreenFade < 600 ) currentScreenFade++; else currentScreenFade = 0; DisplayConfigLine( chosenConfigLine ); break; case RKEY_Forward: if (currentScreenFade > 2) { if ( currentScreenFade < 591 ) currentScreenFade=currentScreenFade+10; else currentScreenFade = 600; } else currentScreenFade = 10; DisplayConfigLine( chosenConfigLine ); break; case RKEY_VolDown: if ( currentScreenFade > 0 ) currentScreenFade--; else currentScreenFade = 600; DisplayConfigLine( chosenConfigLine ); break; case RKEY_Rewind: if (currentScreenFade > 2) { if (currentScreenFade >11) currentScreenFade=currentScreenFade-10; else currentScreenFade = 2; DisplayConfigLine( chosenConfigLine ); } break; default : break; } break; case 11 : switch ( key ) // Channel Start Option { case RKEY_VolUp: if ( currentStartChannel < 1 ) currentStartChannel++; else currentStartChannel = 0; DisplayConfigLine( chosenConfigLine ); break; case RKEY_VolDown: if ( currentStartChannel > 0 ) currentStartChannel--; else currentStartChannel = 1; DisplayConfigLine( chosenConfigLine ); break; default : break; } break; case 12 : switch ( key ) // Timer Start Offset 0 - 60minutes { case RKEY_VolUp: if ( currentStartOffset < 60 ) currentStartOffset++; else currentStartOffset = 0; DisplayConfigLine( chosenConfigLine ); break; case RKEY_Forward: if ( currentStartOffset < 55 ) currentStartOffset=currentStartOffset+5; else currentStartOffset = 60; DisplayConfigLine( chosenConfigLine ); break; case RKEY_VolDown: if ( currentStartOffset > 0 ) currentStartOffset--; else currentStartOffset = 60; DisplayConfigLine( chosenConfigLine ); break; case RKEY_Rewind: if (currentStartOffset >6) currentStartOffset=currentStartOffset-5; else currentStartOffset = 0; DisplayConfigLine( chosenConfigLine ); break; default : break; } break; case 13 : switch ( key ) // Timer End Offset 0 - 60minutes { case RKEY_VolUp: if ( currentEndOffset < 60 ) currentEndOffset++; else currentEndOffset = 0; DisplayConfigLine( chosenConfigLine ); break; case RKEY_Forward: if ( currentEndOffset < 55 ) currentEndOffset=currentEndOffset+5; else currentEndOffset = 60; DisplayConfigLine( chosenConfigLine ); break; case RKEY_VolDown: if ( currentEndOffset > 0 ) currentEndOffset--; else currentEndOffset = 60; DisplayConfigLine( chosenConfigLine ); break; case RKEY_Rewind: if (currentEndOffset >6) currentEndOffset=currentEndOffset-5; else currentEndOffset = 0; DisplayConfigLine( chosenConfigLine ); break; default : break; } break; case 14 : switch ( key ) // Guide Startup Option { case RKEY_VolUp: if ( currentGuideStart < 2 ) currentGuideStart++; else currentGuideStart = 0; DisplayConfigLine( chosenConfigLine ); break; case RKEY_VolDown: if ( currentGuideStart > 0 ) currentGuideStart--; else currentGuideStart = 2; DisplayConfigLine( chosenConfigLine ); break; default : break; } break; case 15 : switch ( key ) // TV Ratio Option { case RKEY_VolUp: if ( currentTvRatio < 1 ) currentTvRatio++; else currentTvRatio = 0; DisplayConfigLine( chosenConfigLine ); break; case RKEY_VolDown: if ( currentTvRatio > 0 ) currentTvRatio--; else currentTvRatio = 1; DisplayConfigLine( chosenConfigLine ); break; default : break; } break; case 16 : switch ( key ) // Guide Window Option { case RKEY_VolUp: if ( currentGuideWindowOption < 1 ) currentGuideWindowOption++; else currentGuideWindowOption = 0; DisplayConfigLine( chosenConfigLine ); break; case RKEY_VolDown: if ( currentGuideWindowOption > 0 ) currentGuideWindowOption--; else currentGuideWindowOption = 1; DisplayConfigLine( chosenConfigLine ); break; default : break; } break; case 17 : switch ( key ) // Progress Bar colours { case RKEY_VolUp: if (currentProgressBarOption < 3) currentProgressBarOption = currentProgressBarOption + 1; else currentProgressBarOption = 0; DisplayConfigLine( chosenConfigLine ); break; case RKEY_VolDown: if (currentProgressBarOption > 0) currentProgressBarOption = currentProgressBarOption - 1; else currentProgressBarOption = 3; DisplayConfigLine( chosenConfigLine ); break; default : break; } break; case 18 : switch ( key ) // Progress Bar colours { case RKEY_VolDown: case RKEY_VolUp: currentChannelNumberOption = !currentChannelNumberOption; DisplayConfigLine( chosenConfigLine ); break; default : break; } break; case 10 : case 20 : // bottom line commands : Save, or Cancel switch ( key ) { case RKEY_VolUp: if ( configOption < 1 ) configOption++; else configOption = 0; break; case RKEY_VolDown: if ( configOption > 0 ) configOption--; else configOption = 1; break; case RKEY_Ok : switch ( configOption ) { case 0 : SaveConfiguration(); // save break; case 1 : break; // cancel default : break; } CloseConfigWindow(); // Close the edit window redrawWindow = TRUE; // will cause a redraw of timer list break; default : break; } DisplayConfigLine( chosenConfigLine ); break; default : break; } }
bool CEntityMapData::GetFirstKey( char *keyName, char *value ) { m_pCurrentKey = m_pEntData; // reset the status pointer return GetNextKey( keyName, value ); }
int CKeyFile::GetFirstKey( CKeyPair * key ) { ReOpen( "rt" ); return GetNextKey(key); }