mirror of
https://github.com/galaxyhaxz/devilution
synced 2025-02-23 12:44:54 +00:00
81 lines
1.3 KiB
C++
81 lines
1.3 KiB
C++
|
#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 );
|
||
|
}
|
||
|
}
|