Devilution
Diablo devolved - magic behind the 1996 computer game
tmsg.cpp
Go to the documentation of this file.
1 #include "all.h"
2 
4 
6 
7 int tmsg_get(BYTE *pbMsg, DWORD dwMaxLen)
8 {
9  int len;
10  TMsg *head;
11 
12  if (!sgpTimedMsgHead)
13  return 0;
14 
15  if ((int)(sgpTimedMsgHead->hdr.dwTime - SDL_GetTicks()) >= 0)
16  return 0;
17  head = sgpTimedMsgHead;
18  sgpTimedMsgHead = head->hdr.pNext;
19  len = head->hdr.bLen;
20  // BUGFIX: ignores dwMaxLen
21  memcpy(pbMsg, head->body, len);
22  mem_free_dbg(head);
23  return len;
24 }
25 
26 void tmsg_add(BYTE *pbMsg, BYTE bLen)
27 {
28  TMsg **tail;
29 
30  TMsg *msg = (TMsg *)DiabloAllocPtr(bLen + sizeof(*msg));
31  msg->hdr.pNext = NULL;
32  msg->hdr.dwTime = SDL_GetTicks() + 500;
33  msg->hdr.bLen = bLen;
34  memcpy(msg->body, pbMsg, bLen);
35  for (tail = &sgpTimedMsgHead; *tail; tail = &(*tail)->hdr.pNext) {
36  ;
37  }
38  *tail = msg;
39 }
40 
41 void tmsg_start()
42 {
44 }
45 
47 {
48  TMsg *next;
49 
50  while (sgpTimedMsgHead) {
51  next = sgpTimedMsgHead->hdr.pNext;
53  sgpTimedMsgHead = next;
54  }
55 }
56 
tmsg_start
void tmsg_start()
Definition: tmsg.cpp:41
tmsg_cleanup
void tmsg_cleanup()
Definition: tmsg.cpp:46
tmsg_get
int tmsg_get(BYTE *pbMsg, DWORD dwMaxLen)
Definition: tmsg.cpp:7
MemFreeDbg
#define MemFreeDbg(p)
Definition: defs.h:157
all.h
TMsg::hdr
TMsgHdr hdr
Definition: structs.h:1461
assert
#define assert(exp)
Definition: defs.h:168
DEVILUTION_END_NAMESPACE
#define DEVILUTION_END_NAMESPACE
Definition: types.h:10
TMsg
Definition: structs.h:1460
TMsgHdr::bLen
BYTE bLen
Definition: structs.h:1457
TMsgHdr::pNext
TMsg * pNext
Definition: structs.h:1455
DiabloAllocPtr
BYTE * DiabloAllocPtr(DWORD dwBytes)
Multithreaded safe malloc.
Definition: engine.cpp:765
TMsg::body
unsigned char body[3]
Definition: structs.h:1464
TMsgHdr::dwTime
int dwTime
Definition: structs.h:1456
mem_free_dbg
void mem_free_dbg(void *p)
Multithreaded safe memfree.
Definition: engine.cpp:786
DEVILUTION_BEGIN_NAMESPACE
Definition: sha.cpp:10
tmsg_add
void tmsg_add(BYTE *pbMsg, BYTE bLen)
Definition: tmsg.cpp:26
sgpTimedMsgHead
static DEVILUTION_BEGIN_NAMESPACE TMsg * sgpTimedMsgHead
Definition: tmsg.cpp:5