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

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