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
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; |
|
}
|
|
|