Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
/* 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;
}
Exemplo n.º 3
0
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;
}
Exemplo n.º 4
0
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);
	}
}
Exemplo n.º 5
0
UINT CVqf::GetTime()
{
	if(!m_bEnable)
	{
		return 0;
	}
	DWORD dwTime = GetRate()*1000/8;
	dwTime = GetStreamSize()/dwTime;
	return dwTime;
}
Exemplo n.º 6
0
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;
}
Exemplo n.º 7
0
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;
}
Exemplo n.º 8
0
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;
}
Exemplo n.º 9
0
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;
}
Exemplo n.º 10
0
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;
}
Exemplo n.º 11
0
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;
}