void DeleteFirstElementOfList(Node _head) { Node _firstElement = GetNextElement(_head); _head->Next = GetNextElement(_firstElement); free(_firstElement); }
void PrintAllListElements(Node _head) { if (IsListEmpty(_head)) { printf("Lista je prazna.\n"); return; } Node _currentElement = GetNextElement(_head); while (!IsOutOfRange(_currentElement)) { PrintListElement(_currentElement); _currentElement = GetNextElement(_currentElement); } }
EXPORT_C TInt CTestConfig::GetElement(const TDesC8& aInput, TChar aDelimiter, TInt aIndex, TPtrC8& aOutput, TBool aTrimOutput) { TLex8 input(aInput); TInt err = KErrNone; TPtrC8 ptr; for (TInt i = 0; i <= aIndex && err == KErrNone; i++) { err = GetNextElement(input, aDelimiter, ptr); } if (err == KErrNone) { if (aTrimOutput) aOutput.Set(Trim(ptr)); else aOutput.Set(ptr); } else { const TInt count = CountElements(aInput, aDelimiter); const TInt len = aInput.Length(); if (len != 0 && count - 1 == aIndex && TChar(aInput[len-1]) == aDelimiter) { aOutput.Set(KNullDesC8); err = KErrNone; } } return err; }
CXMLElement* CXMLElement::Clone(CXMLElement* pParent) const { CXMLElement* pClone = new CXMLElement( pParent, m_sName ); if ( ! pClone ) return NULL; // Out of memory for ( POSITION pos = GetAttributeIterator() ; pos ; ) { CXMLAttribute* pAttribute = GetNextAttribute( pos )->Clone( pClone ); if ( ! pAttribute ) return NULL; // Out of memory CString strNameLower( pAttribute->m_sName ); strNameLower.MakeLower(); // Delete the old attribute if one exists CXMLAttribute* pExisting; if ( pClone->m_pAttributes.Lookup( strNameLower, pExisting ) ) delete pExisting; pClone->m_pAttributes.SetAt( strNameLower, pAttribute ); if ( ! pClone->m_pAttributesInsertion.Find( strNameLower ) ) pClone->m_pAttributesInsertion.AddTail( strNameLower ); // Track output order workaround } for ( POSITION pos = GetElementIterator() ; pos ; ) { CXMLElement* pElement = GetNextElement( pos ); pClone->m_pElements.AddTail( pElement->Clone( pClone ) ); } ASSERT( ! pClone->m_sName.IsEmpty() ); pClone->m_sValue = m_sValue; return pClone; }
BOOL CXMLElement::Equals(CXMLElement* pXML) const { if ( this == NULL || pXML == NULL ) return FALSE; if ( pXML == this ) return TRUE; if ( m_sName != pXML->m_sName ) return FALSE; if ( m_sValue != pXML->m_sValue ) return FALSE; if ( GetAttributeCount() != pXML->GetAttributeCount() ) return FALSE; if ( GetElementCount() != pXML->GetElementCount() ) return FALSE; for ( POSITION pos = GetAttributeIterator() ; pos ; ) { CXMLAttribute* pAttribute1 = GetNextAttribute( pos ); CXMLAttribute* pAttribute2 = pXML->GetAttribute( pAttribute1->m_sName ); if ( pAttribute2 == NULL ) return FALSE; if ( ! pAttribute1->Equals( pAttribute2 ) ) return FALSE; } POSITION pos1 = GetElementIterator(); POSITION pos2 = pXML->GetElementIterator(); for ( ; pos1 && pos2 ; ) { CXMLElement* pElement1 = GetNextElement( pos1 ); CXMLElement* pElement2 = pXML->GetNextElement( pos2 ); if ( pElement1 == NULL || pElement2 == NULL ) return FALSE; if ( ! pElement1->Equals( pElement2 ) ) return FALSE; } if ( pos1 != NULL || pos2 != NULL ) return FALSE; return TRUE; }
void CXMLElement::AddRecursiveWords(CString& strWords) const { for ( POSITION pos = GetAttributeIterator() ; pos ; ) { CXMLAttribute* pAttribute = GetNextAttribute( pos ); CString strText = pAttribute->GetName(); if ( strText.Find( ':' ) >= 0 ) continue; if ( strText.CompareNoCase( _T("SHA1") ) == 0 ) continue; // NOTE: PeerProject/Shareaza Specific if ( ! strWords.IsEmpty() ) strWords += ' '; strWords += pAttribute->GetValue(); } for ( POSITION pos = GetElementIterator() ; pos ; ) { GetNextElement( pos )->AddRecursiveWords( strWords ); } if ( ! m_sValue.IsEmpty() ) { if ( ! strWords.IsEmpty() ) strWords += ' '; strWords += m_sValue; } }
Node GetLastElement(Node _head) { Node _lastElement = _head; while (!IsLastElement(_lastElement)) _lastElement = GetNextElement(_lastElement); return _lastElement; }
void CXMLElement::Serialize(CArchive& ar) { CXMLNode::Serialize( ar ); if ( ar.IsStoring() ) { ar.WriteCount( GetAttributeCount() ); for ( POSITION pos = GetAttributeIterator() ; pos ; ) { GetNextAttribute( pos )->Serialize( ar ); } ar.WriteCount( GetElementCount() ); for ( POSITION pos = GetElementIterator() ; pos ; ) { GetNextElement( pos )->Serialize( ar ); } } else // Loading { for ( int nCount = (int)ar.ReadCount() ; nCount > 0 ; nCount-- ) { CXMLAttribute* pAttribute = new CXMLAttribute( this ); pAttribute->Serialize( ar ); // Skip attribute if name is missing if ( pAttribute->m_sName.IsEmpty() ) { delete pAttribute; continue; } CString strNameLower( pAttribute->m_sName ); strNameLower.MakeLower(); // Delete the old attribute if one exists CXMLAttribute* pExisting; if ( m_pAttributes.Lookup( strNameLower, pExisting ) ) delete pExisting; m_pAttributes.SetAt( strNameLower, pAttribute ); if ( ! m_pAttributesInsertion.Find( strNameLower ) ) m_pAttributesInsertion.AddTail( strNameLower ); // Track output order workaround } for ( int nCount = (int)ar.ReadCount() ; nCount > 0 ; nCount-- ) { CXMLElement* pElement = new CXMLElement( this ); pElement->Serialize( ar ); m_pElements.AddTail( pElement ); } } }
void XDMFParser::SkipToEndTag() { ElementType elementType; // // Read the rest of the start tag and get the next element. // while (GetNextAttribute()) /* do nothing */; elementType = GetNextElement(); // // Keep reading tags until we get a zero nesting level. // int nestingLevel = 1; while (elementType != TYPE_EOF) { switch (elementType) { case TYPE_START_TAG: nestingLevel++; // // Read the rest of the start tag. // while (GetNextAttribute()) /* do nothing */; break; case TYPE_END_TAG: nestingLevel--; break; default: break; } if (nestingLevel == 0) break; elementType = GetNextElement(); } }
int* GetValuesAndDeleteFirstNElements(Node _head, int numberOfElements) { int i; int* firstNElements = (int*)malloc(sizeof(int) * numberOfElements); for (i = 0; i < numberOfElements; i++) { firstNElements[i] = GetNextElement(_head)->Value; Pop(_head); } return firstNElements; }
LPCFGELEMENTINFO CCfgFile::FindElement( HGROUP hGroup, LPCTSTR pName ) {_STTEX(); // Find the NULL group if ( hGroup == NULL ) { hGroup = VerifyGroup( NULL ); if ( hGroup == NULL ) return FALSE; } // end if LPCFGELEMENTINFO pcei = NULL; while ( ( pcei = GetNextElement( hGroup, pcei ) ) != NULL ) if ( !strcmpi( pName, pcei->name ) ) return pcei; return NULL; }
BOOL CCfgFile::CopyGroup( LPCTSTR pGroup, LPCTSTR pNewGroup ) {_STTEX(); HGROUP hGroup = FindGroup( pGroup ); if ( hGroup == NULL ) return FALSE; RemoveGroup( pNewGroup ); HGROUP hNewGroup = AddGroup( pNewGroup ); if ( hNewGroup == NULL ) return FALSE; // Copy each element LPCFGELEMENTINFO pei = NULL; while( ( pei = GetNextElement( hGroup, pei ) ) != NULL ) AddElement( hNewGroup, pei->name, pei->type, pei->size, pei->value ); return TRUE; }
bool Xml::FindElement(FILE * file, const char *element, char *content, size_t maxContentLength) const { if (file == NULL || element == NULL || maxContentLength <= 1) return false; bool result; char element2[MAX_ELEMENT + 1]; do { result = GetNextElement(file, element2, MAX_ELEMENT, content, maxContentLength); if (*element2 == 0) // see if not even an element maybe because EOF { return false; } } while (result && strcmp(element, element2) != 0); return result; }
void CXMLElement::ToString(CString& strXML, BOOL bNewline) const { // strXML += '<' + m_sName; Optimzed: strXML.AppendChar( _T('<') ); strXML.Append( m_sName ); POSITION pos = GetAttributeIterator(); for ( ; pos ; ) { strXML.AppendChar( _T(' ') ); const CXMLAttribute* pAttribute = GetNextAttribute( pos ); pAttribute->ToString( strXML ); } pos = GetElementIterator(); if ( pos == NULL && m_sValue.IsEmpty() ) { strXML.Append( _PT("/>") ); if ( bNewline ) strXML.Append( _PT("\r\n") ); return; } strXML.AppendChar( _T('>') ); if ( bNewline && pos ) strXML.Append( _PT("\r\n") ); while ( pos ) { const CXMLElement* pElement = GetNextElement( pos ); pElement->ToString( strXML, bNewline ); } strXML += Escape( m_sValue ); strXML.Append( _PT("</") ); strXML.Append( m_sName ); strXML.AppendChar( _T('>') ); if ( bNewline ) strXML.Append( _PT("\r\n") ); }
BSLXMLERRCODE CBSLXMLDocumentEx::SkipContainer(CBSLXMLElementEx& oElement) { BSLXMLERRCODE rc = BSLXMLERR_FAILURE; CBSLXMLElementEx oWorkingElement; wxUint32 uiNestedContainerLevel = 0; if (CBSLXMLElementEx::ElementTypeContainer != oElement.GetType()) { return BSLXMLERR_INVALID_PARAMETER; } do { rc = GetNextElement(oWorkingElement); if (BSLXMLERR_SUCCESS == rc) { if (CBSLXMLElementEx::ElementTypeContainer == oWorkingElement.GetType()) { ++uiNestedContainerLevel; } else if (CBSLXMLElementEx::ElementTypeContainerEnd == oWorkingElement.GetType()) { if (0 < uiNestedContainerLevel) { --uiNestedContainerLevel; } else { if (oWorkingElement.GetNameHash() == oElement.GetNameHash()) { break; } } } } } while (BSLXMLERR_SUCCESS == rc); return rc; }
DWORD CCfgFile::SaveToMem(LPBYTE ptr, DWORD len) {_STTEX(); DWORD i = 0; CWinFile file; // Set crypto key if ( *m_szKey ) file.CryptoSetKey( m_szKey ); // Write out header WRITESZ( "; Configuration File\r\n;\r\n" ); LPCFGGROUPINFO pcgi = NULL; while ( ( pcgi = GetNext( pcgi ) ) != NULL ) { // Write out the name if ( *pcgi->name != NULL ) { WRITESZ( "\r\n;-----------------------------------------------------------------" ); WRITESZ( "\r\n[" ); WRITESZ( pcgi->name ); WRITESZ( "]" ); WRITESZ( "\r\n;-----------------------------------------------------------------" ); WRITESZ( "\r\n;\r\n" ); } // end if // Write out file data TMem< char > buf; DWORD size; char msg[ CFG_STRSIZE ]; LPCFGELEMENTINFO pcei = NULL; while ( ( pcei = GetNextElement( pcgi, pcei ) ) != NULL ) { // Write out type if ( pcei->type != 0 ) { wsprintf( msg, "%lu:", pcei->type ); WRITESZ( msg ); } // end if // Write out the name size = GetMinCanonicalizeBufferSize( strlen( pcei->name ) ); if ( buf.allocate( size + 1 ) ) { // Write string if ( CanonicalizeBuffer( buf, (LPBYTE)pcei->name, strlen( pcei->name ) ) ) WRITE( buf, strlen( buf ) ); buf.destroy(); } // end if if ( pcei->size != 0 || pcei->value != NULL || pcei->type != 0 ) { // Write out the equator if ( pcei->type == CFG_DWORD ) WRITESZ( "=#" ); else WRITESZ( "=>" ); // Write out DWORD value if ( pcei->type == CFG_DWORD ) { wsprintf( msg, "%lu:", pcei->value ); WRITESZ( msg ); } // end if else if ( size > 0 ) { // Write out the data size = GetMinCanonicalizeBufferSize( pcei->size ); if ( buf.allocate( size + 1 ) ) { // Write string if ( CanonicalizeBuffer( buf, (LPBYTE)pcei->value, pcei->size ) ) WRITE( buf, strlen( buf ) ); buf.destroy(); } // end if } // end else } // end if WRITESZ( "\r\n" ); } // end while } // end while return i; }
void InsertElement(Node _previous, Node _next) { _next->Next = GetNextElement(_previous); _previous->Next = _next; }
bool ContentElementObject::CreateContext(TextLineObject*pLine,int nID) { ContentElementObject*pNext=GetNextElement(); if(!pNext) return false; return pNext->CreateContext(pLine,nID); }
bool KGUIWin32Wnd::MessageHandler(const KDS_EVENT& event) { bool bHandled = false; if (!bHandled) { switch(event.EventType) { case KET_GUI: break; case KET_MOUSE: { if (event.MouseEvent.Event == KME_MOUSE_MOVED && m_bCapturing && m_CapturedElement != NULL) { return m_CapturedElement->OnEvent(event); } if (event.MouseEvent.Event == KME_MOUSE_MOVED) { // Mouse enter/leave.... UpdateHoveredElement(event); } /*if (event.MouseEvent.Event == KME_LMOUSE_DOWN) { if ( (m_pGUIHover && m_pGUIHover != m_pGUIFocus) || !m_pGUIFocus ) SetFocus(m_pGUIHover); }*/ // sending input to focus //if (m_pGUIFocus && m_pGUIFocus->OnEvent(event)) // return true; // focus could have died in last call if (NULL != m_pGUIHover) { return m_pGUIHover->OnEvent(event); } break; } case KET_KEY: { // send focus changing event if (event.KeyEvent.PressedDown && event.KeyEvent.Key == KEY_TAB) { IGUIElement * pGUINext = GetNextElement(event.KeyEvent.Shift, event.KeyEvent.Control); if (pGUINext && pGUINext != m_pGUIFocus) { if (SetFocus(pGUINext)) return true; } } if (m_pGUIFocus) { return m_pGUIFocus->OnEvent(event); } } break; default: break; } // end switch return false; } return false; }
AXMLElement* AXMLElement::GetNextElement(AXMLElement* pAfterElem,sWORD pStrId, sWORD pElementRef) { AXMLElement *elem = NULL; VString elemname; //gResFile->GetString(elemname,pStrId,pElementRef); return GetNextElement(pAfterElem,elemname); }
HRESULT CXmlHelper::Initialize(IXMLDOMElement *lpRootElem) { TNktComPtr<IXMLDOMElement> cCurrElem, cNextElem; CNktComBStr cElemAttrIdBStr, cNameBstr; HRESULT hRes; SIZE_T i; LONG k; nktMemSet(aFundTypesIndexes, 0, sizeof(aFundTypesIndexes)); hRes = GetFirstChildElement(lpRootElem, &cCurrElem); if (FAILED(hRes)) return hRes; while (cCurrElem != NULL) { cElemAttrIdBStr.Reset(); hRes = GetAttributeValue(cCurrElem, L"id", &cElemAttrIdBStr); if (FAILED(hRes)) { init_on_error: Reset(); return hRes; } if (cElemAttrIdBStr[0] != 0) { //add this element if (nIdElemMapEntriesCount >= nIdElemMapEntriesSize) { ID_ELEM_MAP_ENTRY *lpNew; lpNew = (ID_ELEM_MAP_ENTRY*)nktMemMalloc((nIdElemMapEntriesSize+10240)*sizeof(ID_ELEM_MAP_ENTRY)); if (lpNew == NULL) { hRes = E_OUTOFMEMORY; goto init_on_error; } nIdElemMapEntriesSize += 10240; if (lpIdElemMapEntries != NULL) { nktMemCopy(lpNew, lpIdElemMapEntries, nIdElemMapEntriesCount*sizeof(ID_ELEM_MAP_ENTRY)); nktMemFree(lpIdElemMapEntries); } lpIdElemMapEntries = lpNew; } wcsncpy_s(lpIdElemMapEntries[nIdElemMapEntriesCount].szIdW, cElemAttrIdBStr, 16); lpIdElemMapEntries[nIdElemMapEntriesCount].szIdW[15] = 0; k = GetDbObjectClass(cCurrElem, 1); if (k == -1) { hRes = E_OUTOFMEMORY; goto init_on_error; } if (k == NKT_DBOBJCLASS_Fundamental) { cNameBstr.Reset(); hRes = GetAttributeValue(cCurrElem, L"name", &cNameBstr); if (FAILED(hRes)) goto init_on_error; if (_wcsicmp((LPWSTR)cNameBstr, L"signed char") == 0) k = NKT_DBFUNDTYPE_SignedByte; else if (_wcsicmp((LPWSTR)cNameBstr, L"char") == 0) k = NKT_DBFUNDTYPE_AnsiChar; else if (_wcsicmp((LPWSTR)cNameBstr, L"unsigned char") == 0) k = NKT_DBFUNDTYPE_UnsignedByte; else if (_wcsicmp((LPWSTR)cNameBstr, L"short int") == 0) k = NKT_DBFUNDTYPE_SignedWord; else if (_wcsicmp((LPWSTR)cNameBstr, L"short unsigned int") == 0) k = NKT_DBFUNDTYPE_UnsignedWord; else if (_wcsicmp((LPWSTR)cNameBstr, L"int") == 0 || _wcsicmp((LPWSTR)cNameBstr, L"long int") == 0 || _wcsicmp((LPWSTR)cNameBstr, L"bool") == 0) k = NKT_DBFUNDTYPE_SignedDoubleWord; else if (_wcsicmp((LPWSTR)cNameBstr, L"unsigned int") == 0 || _wcsicmp((LPWSTR)cNameBstr, L"long unsigned int") == 0) k = NKT_DBFUNDTYPE_UnsignedDoubleWord; else if (_wcsicmp((LPWSTR)cNameBstr, L"long long int") == 0) k = NKT_DBFUNDTYPE_SignedQuadWord; else if (_wcsicmp((LPWSTR)cNameBstr, L"long long unsigned int") == 0) k = NKT_DBFUNDTYPE_UnsignedQuadWord; else if (_wcsicmp((LPWSTR)cNameBstr, L"float") == 0) k = NKT_DBFUNDTYPE_Float; else if (_wcsicmp((LPWSTR)cNameBstr, L"double") == 0) k = NKT_DBFUNDTYPE_Double; else if (_wcsicmp((LPWSTR)cNameBstr, L"long double") == 0) k = NKT_DBFUNDTYPE_LongDouble; else if (_wcsicmp((LPWSTR)cNameBstr, L"wchar_t") == 0) k = NKT_DBFUNDTYPE_WideChar; else if (_wcsicmp((LPWSTR)cNameBstr, L"void") == 0) k = NKT_DBFUNDTYPE_Void; else { hRes = E_FAIL; goto init_on_error; } aFundTypesIndexes[k-NKT_DBFUNDTYPE_MIN] = 1; } else k = 0; lpIdElemMapEntries[nIdElemMapEntriesCount].nFundamentalType = (ULONG)k; lpIdElemMapEntries[nIdElemMapEntriesCount].lpElem = cCurrElem; lpIdElemMapEntries[nIdElemMapEntriesCount].lpElem->AddRef(); nIdElemMapEntriesCount++; } //get next element hRes = GetNextElement(cCurrElem, &cNextElem); if (FAILED(hRes)) goto init_on_error; cCurrElem.Attach(cNextElem.Detach()); } //fast fundamental quick check for (k=0; k<X_ARRAYLEN(aFundTypesIndexes); k++) { if (aFundTypesIndexes[k] == 0) { hRes = E_FAIL; goto init_on_error; } } //sort elements by id qsort_s(lpIdElemMapEntries, nIdElemMapEntriesCount, sizeof(ID_ELEM_MAP_ENTRY), IdElemMapEntry_Compare, NULL); //find each fundamental nktMemSet(aFundTypesIndexes, 0, sizeof(aFundTypesIndexes)); for (i=0; i<nIdElemMapEntriesCount; i++) { if (lpIdElemMapEntries[i].nFundamentalType != 0) aFundTypesIndexes[lpIdElemMapEntries[i].nFundamentalType - NKT_DBFUNDTYPE_MIN] = i; } //fast fundamental quick check (should not happen) for (k=0; k<X_ARRAYLEN(aFundTypesIndexes); k++) { if (aFundTypesIndexes[k] == 0) { hRes = E_FAIL; goto init_on_error; } } return S_OK; }
void XDMFParser::PrintFile() { int j; int indent = 0; // // Process the next 100000 elements. This is a precaution against // getting into an infinite loop. It could just as well be a while // true loop. // for (int i = 0; i < 100000; i++) { // // We are getting the element type at the beginning of the // loop so that we can handle the END_TAG now to get the // indentation correct. // ElementType elementType = GetNextElement(); if (elementType == TYPE_END_TAG) indent--; for (int k = 0; k < indent ; k++) cerr << " "; switch (elementType) { case TYPE_PI: cerr << "Processing Information." << endl; break; case TYPE_COMMENT: cerr << "Comment." << endl; break; case TYPE_SPECIAL: cerr << "Special." << endl; break; case TYPE_START_TAG: indent++; cerr << "<" << GetElementName(); j = 0; while (j < 100 && GetNextAttribute()) { cerr << " " << GetAttributeName() << "=\"" << GetAttributeValue() << "\""; j++; } cerr << ">" << endl; break; case TYPE_END_TAG: cerr << "</" << GetElementName() << ">" << endl; break; case TYPE_CDATA: if (GetCDataLength() <= 1023) cerr << GetCDataValue() << endl; else { FILE *file = fopen(fname, "r"); fseek(file, GetCDataOffset(), SEEK_SET); char *buf = new char[GetCDataLength()+1]; fread(buf, 1, GetCDataLength(), file); buf[GetCDataLength()] = '\0'; fclose(file); cerr << buf << endl; delete [] buf; } break; case TYPE_EOF: return; break; case TYPE_ERROR: cerr << "Error." << endl; break; } } }
BOOL CCfgFile::Save(LPCTSTR pFile) {_STTEX(); CWinFile file; // Set crypto key if ( *m_szKey ) file.CryptoSetKey( m_szKey ); // Verify file name if ( pFile == NULL ) pFile = m_szFileName; // Open the file if ( !file.OpenNew( pFile, GENERIC_WRITE ) ) return FALSE; // Write out header file.Write( "; Configuration File\r\n;\r\n" ); LPCFGGROUPINFO pcgi = NULL; while ( ( pcgi = GetNext( pcgi ) ) != NULL ) { // Write out the name if ( *pcgi->name != NULL ) { file.Write( "\r\n;-----------------------------------------------------------------" ); file.Write( "\r\n[" ); file.Write( pcgi->name ); file.Write( "]" ); file.Write( "\r\n;-----------------------------------------------------------------" ); file.Write( "\r\n;\r\n" ); } // end if // Write out file data TMem< char > buf; DWORD size; char msg[ CFG_STRSIZE ]; LPCFGELEMENTINFO pcei = NULL; while ( ( pcei = GetNextElement( pcgi, pcei ) ) != NULL ) { if ( !strcmpi( pcei->name, "font" ) ) { int x = 0; } // Write out type if ( pcei->type != 0 ) { wsprintf( msg, "%lu:", pcei->type ); if ( !file.Write( msg ) ) return FALSE; } // end if // Write out the name size = GetMinCanonicalizeBufferSize( strlen( pcei->name ) ); if ( buf.allocate( size + 1 ) ) { // Write string if ( CanonicalizeBuffer( buf, (LPBYTE)pcei->name, strlen( pcei->name ) ) ) file.Write( buf, strlen( buf ) ); buf.destroy(); } // end if if ( pcei->size != 0 || pcei->value != NULL || pcei->type != 0 ) { // Write out the equator if ( pcei->type == CFG_DWORD ) file.Write( "=#" ); else file.Write( "=>" ); // Write out DWORD value if ( pcei->type == CFG_DWORD ) { wsprintf( msg, "%lu:", pcei->value ); if ( !file.Write( msg ) ) return FALSE; } // end if else if ( size > 0 ) { // Write out the data size = GetMinCanonicalizeBufferSize( pcei->size ); if ( buf.allocate( size + 1 ) ) { // Write string if ( CanonicalizeBuffer( buf, (LPBYTE)pcei->value, pcei->size ) ) file.Write( buf, strlen( buf ) ); buf.destroy(); } // end if } // end else } // end if file.Write( "\r\n" ); } // end while } // end while return TRUE; }