#include "diablo.h"

TMsg *sgpTimedMsgHead;

int tmsg_get(unsigned char *pbMsg, unsigned int dwMaxLen)
{
	unsigned char *v2; // ebx
	DWORD v3; // eax
	TMsg *v4; // esi
	size_t v6; // edi

	v2 = pbMsg;
	if ( !sgpTimedMsgHead )
		return 0;
	v3 = GetTickCount();
	v4 = sgpTimedMsgHead;
	if ( (signed int)(sgpTimedMsgHead->hdr.dwTime - v3) >= 0 )
		return 0;
	sgpTimedMsgHead = sgpTimedMsgHead->hdr.pNext;
	v6 = v4->hdr.bLen;
	memcpy(v2, v4->body, v6);
	mem_free_dbg(v4);
	return v6;
}

void tmsg_add(const BYTE *pbMsg, unsigned char bLen)
{
	unsigned char v2; // bl
	//unsigned char *v3; // ebp
	size_t v4; // edi
	TMsg *v5; // eax
	TMsg *v6; // esi
	DWORD v7; // eax
	TMsg *v8; // ecx
	TMsg **v9; // eax

	v2 = bLen;
	//v3 = pbMsg;
	v4 = bLen;
	v5 = (TMsg *)DiabloAllocPtr(bLen + 12);
	v6 = v5;
	v5->hdr.pNext = 0;
	v7 = GetTickCount();
	v6->hdr.bLen = v2;
	v6->hdr.dwTime = v7 + 500;
	memcpy(v6->body, pbMsg, v4);
	v8 = sgpTimedMsgHead;
	v9 = &sgpTimedMsgHead;
	while ( v8 )
	{
		v9 = &v8->hdr.pNext;
		v8 = v8->hdr.pNext;
	}
	*v9 = v6;
}

void tmsg_start()
{
	/// ASSERT: assert(! sgpTimedMsgHead);
}

void tmsg_cleanup()
{
	TMsg *v0; // eax
	TMsg *v1; // esi

	v0 = sgpTimedMsgHead;
	if ( sgpTimedMsgHead )
	{
		do
		{
			v1 = v0->hdr.pNext;
			sgpTimedMsgHead = 0;
			mem_free_dbg(v0);
			v0 = v1;
			sgpTimedMsgHead = v1;
		}
		while ( v1 );
	}
}
