1 os_message* CreateMessage(void* message)
2 {
3 os_message* temp_message;
4
5 temp_message = (os_thread*)g_freemessages;
6
7 if (temp_message == NULL) return -1;
8
9 // pop a free thread from the list
10 g_freemessages = temp_message->next;
11
12 // push the free thread on the used threads list
13 temp_message->next = g_usedmessages;
14 g_usedmessages = temp_message;
15
16 temp_message->message = message;
17
18 return temp_message;
19 }
20 void FreeMessage(os_message* message)
21 {
22 // message should always equal g_usedmessage since its a queue
23 g_usedmessages = message->next;
24
25 message->next = g_freemessages;
26 g_freemessages = message;
27 }
28 void SendMessage(os_thread* thread, void* message)
29 {
30 os_message* temp_message;
31
32 if (thread != NULL)
33 {
34 if (thread->message == NULL)
35 {
36 thread->message = CreateMessage(message);
37 temp_message = thread->message;
38 }
39 else
40 {
41 temp_message = thread->message;
42 while (temp_message->next != NULL)
43 {
44 temp_message = temp_message->next;
45 }
46 temp_message->next = CreateMessage(message);
47 }
48 }
49 }
50 void* ReceiveMessage(os_thread* thread)
51 {
52 os_message* temp_message;
53 void* msgVal;
54
55 if (thread != NULL)
56 {
57 if (thread->message != NULL)
58 {
59 temp_message = thread->message;
60 msgVal = temp_message->message;
61
62 thread->message = temp_message->next;
63 FreeMessage(temp_message);
64
65 return msgVal;
66 }
67 }
68 return NULL;
69 }