gtaRwBool gtaRwFrameList::StreamWrite(gtaRwStream *stream) { if(!gtaRwStreamWriteVersionedChunkHeader(stream, rwID_FRAMELIST, GetStreamSize() - 12, gtaRwVersion, gtaRwBuild)) return false; if(!gtaRwStreamWriteVersionedChunkHeader(stream, rwID_STRUCT, 4 + frameCount * 56, gtaRwVersion, gtaRwBuild)) return false; if(!gtaRwStreamWrite(stream, &frameCount, 4)) return false; for(gtaRwInt32 i = 0; i < frameCount; i++) { if(!gtaRwStreamWrite(stream, &frames[i], 56)) return false; } for(gtaRwInt32 i = 0; i < frameCount; i++) { if(!gtaRwStreamWriteVersionedChunkHeader(stream, rwID_EXTENSION, frames[i].Extension.nodeName.GetStreamSize() + frames[i].Extension.hAnim.GetStreamSize(), gtaRwVersion, gtaRwBuild)) return false; if(!frames[i].Extension.hAnim.StreamWrite(stream)) return false; if(!frames[i].Extension.nodeName.StreamWrite(stream)) return false; } return true; }
/* Get CRC32 of stream */ ULONG CTStream::GetStreamCRC32_t(void) { // remember where stream is now SLONG slOldPos = GetPos_t(); // go to start of file SetPos_t(0); // get size of file SLONG slFileSize = GetStreamSize(); ULONG ulCRC; CRC_Start(ulCRC); // for each block in file const SLONG slBlockSize = 4096; for(SLONG slPos=0; slPos<slFileSize; slPos+=slBlockSize) { // read the block UBYTE aubBlock[slBlockSize]; SLONG slThisBlockSize = Min(slFileSize-slPos, slBlockSize); Read_t(aubBlock, slThisBlockSize); // checksum it CRC_AddBlock(ulCRC, aubBlock, slThisBlockSize); } // restore position SetPos_t(slOldPos); CRC_Finish(ulCRC); return ulCRC; }
bool gtaRwMaterialUVAnim::StreamWrite(gtaRwStream *stream) { if(enabled) { if(!gtaRwStreamWriteVersionedChunkHeader(stream, rwID_UVANIM, GetStreamSize() - 12, gtaRwVersion, gtaRwBuild)) return false; if(!gtaRwStreamWriteVersionedChunkHeader(stream, rwID_STRUCT, GetStreamSize() - 24, gtaRwVersion, gtaRwBuild)) return false; if(!gtaRwStreamWrite(stream, &animSlotsMap, 4)) return false; if(animNames) { if(!gtaRwStreamWrite(stream, animNames, numAnimNames * 32)) return false; } } return true; }
attachment::attachment(message& mapi_message, const uint32_t attach_num) throw(mapi_exception) : object(mapi_message.get_session(), "attachment"), m_attach_num(attach_num), m_bin_data(NULL), m_data_size(0), m_filename("") { if (OpenAttach(&mapi_message.data(), attach_num, &m_object) != MAPI_E_SUCCESS) throw mapi_exception(GetLastError(), "attachment::attachment : OpenAttach"); property_container properties = get_property_container(); properties << PR_ATTACH_FILENAME << PR_ATTACH_LONG_FILENAME << PR_ATTACH_SIZE << PR_ATTACH_DATA_BIN << PR_ATTACH_METHOD; properties.fetch(); const char* filename = static_cast<const char*>(properties[PR_ATTACH_LONG_FILENAME]); if (!filename) { filename = static_cast<const char*>(properties[PR_ATTACH_FILENAME]); } if (filename) m_filename = filename; m_data_size = *(static_cast<const uint32_t*>(properties[PR_ATTACH_SIZE])); const Binary_r* attachment_data = static_cast<const Binary_r*>(properties[PR_ATTACH_DATA_BIN]); // Don't load PR_ATTACH_DATA_BIN if it's embedded in message. // NOTE: Use RopOpenEmbeddedMessage when it is implemented. const uint32_t attach_method = *static_cast<const uint32_t*>(properties[PR_ATTACH_METHOD]); if (attach_method != ATTACH_BY_VALUE) return; // Get Binary Data. if (attachment_data) { m_data_size = attachment_data->cb; m_bin_data = new uint8_t[m_data_size]; memcpy(m_bin_data, attachment_data->lpb, attachment_data->cb); } else { mapi_object_t obj_stream; mapi_object_init(&obj_stream); if (OpenStream(&m_object, (enum MAPITAGS)PidTagAttachDataBinary, OpenStream_ReadOnly, &obj_stream) != MAPI_E_SUCCESS) throw mapi_exception(GetLastError(), "attachment::attachment : OpenStream"); if (GetStreamSize(&obj_stream, &m_data_size) != MAPI_E_SUCCESS) throw mapi_exception(GetLastError(), "attachment::attachment : GetStreamSize"); m_bin_data = new uint8_t[m_data_size]; uint32_t pos = 0; uint16_t bytes_read = 0; do { if (ReadStream(&obj_stream, m_bin_data+pos, 1024, &bytes_read) != MAPI_E_SUCCESS) throw mapi_exception(GetLastError(), "attachment::attachment : ReadStream"); pos += bytes_read; } while (bytes_read && pos < m_data_size); mapi_object_release(&obj_stream); } }
UINT CVqf::GetTime() { if(!m_bEnable) { return 0; } DWORD dwTime = GetRate()*1000/8; dwTime = GetStreamSize()/dwTime; return dwTime; }
bool gtaRwMaterialMatFX::StreamWrite(gtaRwStream *stream) { if(enabled) { if(!gtaRwStreamWriteVersionedChunkHeader(stream, rwID_MATFX, GetStreamSize() - 12, gtaRwVersion, gtaRwBuild)) return false; if(!gtaRwStreamWrite(stream, &effectType, 4)) return false; if(!effect1.StreamWrite(stream)) return false; if(!effect2.StreamWrite(stream)) return false; } return true; }
gtaRwBool gtaRwGeometryList::StreamWrite(gtaRwStream *stream) { if(!gtaRwStreamWriteVersionedChunkHeader(stream, rwID_GEOMETRYLIST, GetStreamSize() - 12, gtaRwVersion, gtaRwBuild)) return false; if(!gtaRwStreamWriteVersionedChunkHeader(stream, rwID_STRUCT, 4, gtaRwVersion, gtaRwBuild)) return false; if(!gtaRwStreamWrite(stream, &geometryCount, 4)) return false; for(gtaRwInt8 i = 0; i < geometryCount; i++) { if(!geometries[i].StreamWrite(stream)) return false; } return true; }
bool gtaRwMaterialList::StreamWrite(gtaRwStream *stream) { if(!gtaRwStreamWriteVersionedChunkHeader(stream, rwID_MATLIST, GetStreamSize() - 12, gtaRwVersion, gtaRwBuild)) return false; if(!gtaRwStreamWriteVersionedChunkHeader(stream, rwID_STRUCT, 4 + materialCount * 4, gtaRwVersion, gtaRwBuild)) return false; if(!gtaRwStreamWrite(stream, &materialCount, 4)) return false; if(materialCount > 0) { if(!gtaRwStreamWrite(stream, materialValues, materialCount * 4)) return false; for(gtaRwInt32 i = 0; i < materialCount; i++) { if(!materials[i].StreamWrite(stream)) return false; } } return true; }
bool gtaRwFrameHAnim::StreamWrite(gtaRwStream *stream) { if(enabled) { if(!gtaRwStreamWriteVersionedChunkHeader(stream, rwID_HANIM, GetStreamSize() - 12, gtaRwVersion, gtaRwBuild)) return false; if(!gtaRwStreamWrite(stream, &hAnimVersion, 12)) return false; if(numNodes > 0) { if(!gtaRwStreamWrite(stream, &flags, 8)) return false; for(gtaRwInt32 i = 0; i < numNodes; i++) { if(!gtaRwStreamWrite(stream, &nodes[i].nodeID, 12)) return false; } } } return true; }
gtaRwBool gtaGeometry2dEffect::StreamWrite(gtaRwStream *Stream) { if(enabled) { if(!gtaRwStreamWriteVersionedChunkHeader(Stream, gtaID_2DEFFECT, GetStreamSize() - 12, gtaRwVersion, gtaRwBuild)) return false; if(!gtaRwStreamWrite(Stream, &effectCount, 4)) return false; for(gtaRwInt32 i = 0; i < effectCount; i++) { if(!gtaRwStreamWrite(Stream, &effects[i], 20)) return false; if(effects[i].size > 0) { if(!gtaRwStreamWrite(Stream, &effects[i].light, effects[i].size)) return false; } } } return true; }
gtaRwBool gtaRwGeometryNative::gtaNativeOGl::StreamWrite(gtaRwStream *Stream, gtaRwUInt32 NumVertices) { if(generated) { gtaRwUInt32 stride = 0; if(!gtaRwStreamWriteVersionedChunkHeader(Stream, rwID_NATIVEDATA, GetStreamSize(NumVertices) - 12, gtaRwVersion, gtaRwBuild)) return false; if(!gtaRwStreamWrite(Stream, &numVertexElements, 4)) return false; for(gtaRwInt32 i = 0; i < numVertexElements; i++) { if(!gtaRwStreamWrite(Stream, &vertexElements[i].paramType, 24)) return false; stride = vertexElements[i].stride; } if(vertexBuffer && stride > 0) { if(!gtaRwStreamWrite(Stream, vertexBuffer, NumVertices * stride)) return false; } } return true; }