08cefc729e391a1271af4f5420e5acf5e099baa1
[tpg/acess2.git] / Usermode / Applications / axwin2_src / WM / input.c
1 /*
2  * Acess GUI (AxWin) Version 2
3  * By John Hodge (thePowersGang)
4  */
5 #include "common.h"
6 #include <acess/sys.h>
7
8 // === CODE ===
9 int Input_Init(void)
10 {
11         struct {
12                  int    Num, Value;
13         }       num_value;
14
15         // Open mouse for RW
16         giMouseFD = open(gsMouseDevice, 3);
17
18         // Set mouse limits
19         num_value.Num = 0;
20         num_value.Value = giScreenWidth;
21         ioctl(giMouseFD, 6, &num_value);
22
23         num_value.Num = 1;
24         num_value.Value = giScreenHeight;
25         ioctl(giMouseFD, 6, &num_value);
26
27         return 0;
28 }
29
30 void Input_FillSelect(int *nfds, fd_set *set)
31 {
32         if(*nfds < giTerminalFD)        *nfds = giTerminalFD;
33         if(*nfds < giMouseFD)   *nfds = giMouseFD;
34         FD_SET(giTerminalFD, set);
35         FD_SET(giMouseFD, set);
36 }
37
38 void Input_HandleSelect(fd_set *set)
39 {
40         if(FD_ISSET(giTerminalFD, set))
41         {
42                 uint32_t        codepoint;
43                 if( read(giTerminalFD, &codepoint, sizeof(codepoint)) != sizeof(codepoint) )
44                 {
45                         // oops, error
46                 }
47                 // TODO: pass on to message handler
48                 _SysDebug("Keypress 0x%x", codepoint);
49         }
50
51         if(FD_ISSET(giMouseFD, set))
52         {
53                 struct sMouseInfo {
54                         uint16_t        NAxies;
55                         uint16_t        NButtons;
56                         struct sMouseAxis {
57                                  int16_t        MinValue;
58                                  int16_t        MaxValue;
59                                  int16_t        CurValue;
60                                 uint16_t        CursorPos;
61                         }       Axies[2];
62                         uint8_t Buttons[3];
63                 }       mouseinfo;
64         
65                 seek(giMouseFD, 0, SEEK_SET);
66                 if( read(giMouseFD, &mouseinfo, sizeof(mouseinfo)) != sizeof(mouseinfo) )
67                 {
68                         // Not a 3 button mouse, oops
69                         return ;
70                 }
71
72 //              _SysDebug("sizeof(uint16_t) = %i, sizeof(int16_t) = %i",
73 //                      sizeof(uint16_t), sizeof(int16_t));
74 //              _SysDebug("NAxies=%i,NButtons=%i", mouseinfo.NAxies, mouseinfo.NButtons);
75 //              _SysDebug("offsetof(Axies[0].MinValue) = %i", offsetof(struct sMouseInfo, Axies[0].MinValue));
76 //              _SysDebug("[0] = {MinValue=%i,MaxValue=%i,CurValue=%i}",
77 //                      mouseinfo.Axies[0].MinValue, mouseinfo.Axies[0].MaxValue,
78 //                      mouseinfo.Axies[0].CurValue
79 //                      );
80                 // Handle movement
81 //              Video_SetCursorPos( mouseinfo.Axies[0], mouseinfo.Axies[1] );
82                 _SysDebug("Cursor to %i,%i", mouseinfo.Axies[0].CursorPos, mouseinfo.Axies[1].CursorPos);
83         }
84 }

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