Mouse driver and AxWin
[tpg/acess2.git] / Usermode / Applications / axwin2_src / WM / messages.c
1 /*
2  * Acess GUI (AxWin) Version 2
3  * By John Hodge (thePowersGang)
4  */
5 #include "common.h"
6 #include <acess/sys.h>
7 #include <net.h>
8 #include <axwin/messages.h>
9
10 #define STATICBUF_SIZE  64
11
12 // === TYPES ===
13 typedef void tMessages_Handle_Callback(int, size_t,void*);
14
15 // === PROTOTYPES ===
16 void    Messages_PollIPC();
17 void    Messages_RespondIPC(int ID, size_t Length, void *Data);
18 void    Messages_Handle(tAxWin_Message *Msg, tMessages_Handle_Callback *Respond, int ID);
19
20 // === GLOBALS ===
21  int    giIPCFileHandle;
22
23 // === CODE ===
24 void IPC_Init(void)
25 {
26         // TODO: Check this
27         giIPCFileHandle = open("/Devices/ip/loop/udpc", OPENFLAG_READ|OPENFLAG_EXEC);
28 //      ioctl(giIPCFileHandle, );
29 }
30
31 void Messages_PollIPC()
32 {
33          int    len;
34         pid_t   tid = 0;
35         char    staticBuf[STATICBUF_SIZE];
36         tAxWin_Message  *msg;
37         
38         // Wait for a message
39         while( (len = SysGetMessage(&tid, NULL)) == 0 )
40                 sleep();
41         
42         // Allocate the space for it
43         if( len <= STATICBUF_SIZE )
44                 msg = (void*)staticBuf;
45         else {
46                 msg = malloc( len );
47                 if(!msg) {
48                         fprintf(
49                                 stderr,
50                                 "ERROR - Unable to allocate message buffer, ignoring message from %i\n",
51                                 tid);
52                         SysGetMessage(NULL, GETMSG_IGNORE);
53                         return ;
54                 }
55         }
56         
57         // Get message data
58         SysGetMessage(NULL, msg);
59         
60         Messages_Handle(msg, Messages_RespondIPC, tid);
61 }
62
63 void Messages_RespondIPC(int ID, size_t Length, void *Data)
64 {
65         SysSendMessage(ID, Length, Data);
66 }
67
68 void Messages_Handle(tAxWin_Message *Msg, tMessages_Handle_Callback *Respond, int ID)
69 {
70         switch(Msg->ID)
71         {
72         #if 0
73         case MSG_SREQ_PING:
74                 Msg->ID = MSG_SRSP_VERSION;
75                 Msg->Size = 2;
76                 Msg->Data[0] = 0;
77                 Msg->Data[1] = 1;
78                 *(uint16_t*)&Msg->Data[2] = -1;
79                 Messages_RespondIPC(ID, sizeof(Msg->ID), Msg);
80                 break;
81         #endif
82         default:
83                 fprintf(stderr, "WARNING: Unknown message %i from %i (%p)\n", Msg->ID, ID, Respond);
84                 _SysDebug("WARNING: Unknown message %i from %i (%p)\n", Msg->ID, ID, Respond);
85                 break;
86         }
87 }
88

UCC git Repository :: git.ucc.asn.au