You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

49 lines
1.0 KiB

//HEADER_GOES_HERE
#include "../types.h"
static TMsg *sgpTimedMsgHead;
int __fastcall tmsg_get(BYTE *pbMsg, DWORD dwMaxLen)
{
int len;
TMsg *head;
if ( !sgpTimedMsgHead )
return 0;
if ( (int)(sgpTimedMsgHead->hdr.dwTime - GetTickCount()) >= 0 )
return 0;
head = sgpTimedMsgHead;
sgpTimedMsgHead = head->hdr.pNext;
len = head->hdr.bLen;
// BUGFIX: ignores dwMaxLen
memcpy(pbMsg, head->body, len);
mem_free_dbg(head);
return len;
}
void __fastcall tmsg_add(BYTE *pbMsg, BYTE bLen)
{
TMsg **tail;
TMsg *msg = (TMsg*)DiabloAllocPtr(bLen + sizeof(*msg));
msg->hdr.pNext = NULL;
msg->hdr.dwTime = GetTickCount() + 500;
msg->hdr.bLen = bLen;
memcpy(msg->body, pbMsg, bLen);
for ( tail = &sgpTimedMsgHead; *tail; tail = &(*tail)->hdr.pNext );
*tail = msg;
}
void* __cdecl tmsg_cleanup()
{
while ( sgpTimedMsgHead ) {
TMsg *next = sgpTimedMsgHead->hdr.pNext;
TMsg *head = sgpTimedMsgHead;
sgpTimedMsgHead = NULL;
mem_free_dbg(head);
sgpTimedMsgHead = next;
}
return sgpTimedMsgHead;
}