ALERROR CMarkovWordGenerator::WriteAsXML (IWriteStream *pOutput) // WriteAsXML // // Writes out the Markov chain data to an XML element { ALERROR error; int i; // Open tag CString sData; sData = CONSTLIT("\t<WordGenerator>\r\n"); if (error = pOutput->Write(sData.GetPointer(), sData.GetLength(), NULL)) return error; // Fragments for (i = 0; i < m_Table.GetCount(); i++) { sData = CONSTLIT("\t\t<Syl>"); if (error = pOutput->Write(sData.GetPointer(), sData.GetLength(), NULL)) return error; sData = strPatternSubst(CONSTLIT("%s;%d;%d;"), strToXMLText(CString(m_Table[i]->sFrag)), m_Table[i]->dwCount, m_Table[i]->dwFlags); if (error = pOutput->Write(sData.GetPointer(), sData.GetLength(), NULL)) return error; SChainChar *pChain = GetChain(m_Table[i]); while ((*(DWORD *)pChain) != 0) { char chChar[2]; chChar[0] = pChain->chChar; chChar[1] = '\0'; CString sChar = strToXMLText(CString(chChar, 1, true)); sData = strPatternSubst(CONSTLIT("%s;%d;"), sChar, pChain->dwCount); if (error = pOutput->Write(sData.GetPointer(), sData.GetLength(), NULL)) return error; pChain++; } sData = CONSTLIT("</Syl>\r\n"); if (error = pOutput->Write(sData.GetPointer(), sData.GetLength(), NULL)) return error; } // Done // Close tag sData = CONSTLIT("\t</WordGenerator>\r\n"); if (error = pOutput->Write(sData.GetPointer(), sData.GetLength(), NULL)) return error; return NOERROR; }
ALERROR CGameSettings::Save (const CString &sFilespec) // Save // // Save game settings to a file (if necessary) { int i; ALERROR error; if (!m_bModified) return NOERROR; // Settings file CString sSettingsFilespec = pathAddComponent(m_sAppData, sFilespec); // Create the file CFileWriteStream DataFile(sSettingsFilespec, FALSE); if (error = DataFile.Create()) return error; // Write the XML header CString sData = CONSTLIT("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\r\n\r\n<TranscendenceSettings>\r\n\r\n"); if (error = DataFile.Write(sData.GetPointer(), sData.GetLength(), NULL)) return error; // Write extension folders if (m_ExtensionFolders.GetCount() > 0) { for (i = 0; i < m_ExtensionFolders.GetCount(); i++) { sData = strPatternSubst(CONSTLIT("\t<ExtensionFolder path=\"%s\"/>\r\n"), m_ExtensionFolders[i]); if (error = DataFile.Write(sData.GetPointer(), sData.GetLength())) return error; } if (error = DataFile.Write("\r\n", 2, NULL)) return error; } // Loop over options for (i = 0; i < OPTIONS_COUNT; i++) { // Compose option element and write sData = strPatternSubst(CONSTLIT("\t<Option name=\"%s\"\tvalue=\"%s\"/>\r\n"), CString(g_OptionData[i].pszName, -1, true), strToXMLText(m_Options[i].sSettingsValue)); if (error = DataFile.Write(sData.GetPointer(), sData.GetLength(), NULL)) return error; } // Write the key map if (error = DataFile.Write("\r\n", 2, NULL)) return error; if (error = m_KeyMap.WriteAsXML(&DataFile)) return error; // Write the extensions list if (error = DataFile.Write("\r\n", 2)) return error; if (error = m_Extensions.WriteAsXML(&DataFile)) return error; // Write additional settings if (m_pExtra) { if (error = DataFile.Write("\r\n", 2, NULL)) return error; if (error = m_pExtra->OnSaveSettings(&DataFile)) return error; } // Done sData = CONSTLIT("\r\n</TranscendenceSettings>\r\n"); if (error = DataFile.Write(sData.GetPointer(), sData.GetLength(), NULL)) return error; if (error = DataFile.Close()) return error; return NOERROR; }