ALERROR WriteHeader (int iGameFile, CSymbolTable &Resources, CDataFile &Out) { ALERROR error; CMemoryWriteStream Stream; DWORD dwSave; if (error = Stream.Create()) { printf("Out of memory\n"); return error; } // Signature dwSave = TDB_SIGNATURE; Stream.Write((char *)&dwSave, sizeof(dwSave)); // Version dwSave = TDB_VERSION; Stream.Write((char *)&dwSave, sizeof(dwSave)); // Game file entry dwSave = iGameFile; Stream.Write((char *)&dwSave, sizeof(dwSave)); // Game title CString sGameTitle = CONSTLIT("Transcendence: The March of the Heretic"); sGameTitle.WriteToStream(&Stream); // Resource map CString sSave; if (error = CObject::Flatten(&Resources, &sSave)) { printf("Unable to flatten resources map\n"); return error; } sSave.WriteToStream(&Stream); // Write out the header Stream.Close(); CString sData(Stream.GetPointer(), Stream.GetLength(), TRUE); int iEntry; if (error = Out.AddEntry(sData, &iEntry)) { printf("Unable to write out header\n"); return error; } Out.SetDefaultEntry(iEntry); return NOERROR; }
void IEffectPainter::WriteToStream (IWriteStream *pStream) { CString sUNID = GetCreator()->GetUNIDString(); sUNID.WriteToStream(pStream); CString sClass = GetCreator()->GetTag(); sClass.WriteToStream(pStream); OnWriteToStream(pStream); }
void CTextPainter::OnWriteToStream (IWriteStream *pStream) // OnWriteToStream // // Writes to a stream // // CString m_sText { m_sText.WriteToStream(pStream); }
void CEffectCreator::WritePainterToStream (IWriteStream *pStream, IEffectPainter *pPainter) // WritePainterToStream // // Writes the painter to the stream (pPainter may be NULL) { if (pPainter) pPainter->WriteToStream(pStream); else { // Write the UNID CString sNull; sNull.WriteToStream(pStream); // Write the Class sNull.WriteToStream(pStream); } }
void CTopologyNode::WriteToStream (IWriteStream *pStream) // WriteToStream // // Writes out the variable portions of the node // // CString m_sID // DWORD m_SystemUNID // DWORD m_pMap (UNID) // DWORD m_xPos // DWORD m_yPos // CString m_sName // CString m_sAttributes // DWORD m_iLevel // DWORD m_dwID // // DWORD No of named gates // CString gate: sName // CString gate: sDestNode // CString gate: sDestEntryPoint // // DWORD No of variant labels // CString variant label // // CAttributeDataBlock m_Data // DWORD flags // // CString m_sEpitaph // CString m_sEndGameReason { int i; DWORD dwSave; m_sID.WriteToStream(pStream); pStream->Write((char *)&m_SystemUNID, sizeof(DWORD)); dwSave = (m_pMap ? m_pMap->GetUNID() : 0); pStream->Write((char *)&dwSave, sizeof(DWORD)); pStream->Write((char *)&m_xPos, sizeof(DWORD)); pStream->Write((char *)&m_yPos, sizeof(DWORD)); m_sName.WriteToStream(pStream); m_sAttributes.WriteToStream(pStream); pStream->Write((char *)&m_iLevel, sizeof(DWORD)); pStream->Write((char *)&m_dwID, sizeof(DWORD)); DWORD dwCount = m_NamedGates.GetCount(); pStream->Write((char *)&dwCount, sizeof(DWORD)); for (i = 0; i < (int)dwCount; i++) { StarGateDesc *pDesc = (StarGateDesc *)m_NamedGates.GetValue(i); CString sName = m_NamedGates.GetKey(i); sName.WriteToStream(pStream); pDesc->sDestNode.WriteToStream(pStream); pDesc->sDestEntryPoint.WriteToStream(pStream); } dwCount = m_VariantLabels.GetCount(); pStream->Write((char *)&dwCount, sizeof(DWORD)); for (i = 0; i < (int)dwCount; i++) m_VariantLabels[i].WriteToStream(pStream); // Write opaque data m_Data.WriteToStream(pStream); // Flags dwSave = 0; dwSave |= (m_bKnown ? 0x00000001 : 0); pStream->Write((char *)&dwSave, sizeof(DWORD)); // Write end game data m_sEpitaph.WriteToStream(pStream); m_sEndGameReason.WriteToStream(pStream); }
void COrderList::WriteToStream (IWriteStream *pStream, CSystem *pSystem) // WriteToStream // // Writes to stream // // DWORD No. of orders // // For each order: // DWORD LOWORD = dwOrderType; HIWORD = dwDataType // DWORD Target reference // // DWORD or (Depends on dwDataType) // CString { int i; DWORD dwSave; dwSave = m_List.GetCount(); pStream->Write((char *)&dwSave, sizeof(DWORD)); for (i = 0; i < m_List.GetCount(); i++) { SOrderEntry *pEntry = &m_List[i]; dwSave = MAKELONG(pEntry->dwOrderType, pEntry->dwDataType); pStream->Write((char *)&dwSave, sizeof(DWORD)); pSystem->WriteObjRefToStream(pEntry->pTarget, pStream); switch (pEntry->dwDataType) { case IShipController::dataInteger: case IShipController::dataPair: pStream->Write((char *)&pEntry->dwData, sizeof(DWORD)); break; case IShipController::dataString: { CString *pString = (CString *)pEntry->dwData; if (pString) pString->WriteToStream(pStream); else { CString sNull; sNull.WriteToStream(pStream); } break; } case IShipController::dataVector: { CVector *pVector = (CVector *)pEntry->dwData; if (pVector) pStream->Write((char *)pVector, sizeof(CVector)); else pStream->Write((char *)&NullVector, sizeof(CVector)); break; } } } }