fixed spaceball on freebsd
[sball] / src / main.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <signal.h>
4 #include <errno.h>
5 #include <unistd.h>
6 #include <sys/select.h>
7 #include "sball.h"
8
9 #ifdef __FreeBSD__
10 #define DEFDEV  "/dev/ttyu0"
11 #else
12 #define DEFDEV  "/dev/ttyS0"
13 #endif
14
15 static void sighandler(int s);
16
17 static struct sball *sb;
18 static int quit;
19
20 int main(int argc, char **argv)
21 {
22         int fd;
23         fd_set rdset;
24
25         signal(SIGINT, sighandler);
26
27         if(!(sb = sball_open(argv[1] ? argv[1] : DEFDEV))) {
28                 fprintf(stderr, "Failed to open spaceball at %s\n", argv[1] ? argv[1] : DEFDEV);
29                 return 1;
30         }
31         fd = sball_fd(sb);
32
33         printf("Monitoring device, ctrl-c to quit\n");
34
35         while(!quit) {
36                 FD_ZERO(&rdset);
37                 FD_SET(fd, &rdset);
38
39                 if(select(fd + 1, &rdset, 0, 0, 0) > 0) {
40                         if(FD_ISSET(fd, &rdset)) {
41                                 sball_read(sb);
42                         }
43                 }
44
45         }
46         putchar('\n');
47
48         sball_close(sb);
49         return 0;
50 }
51
52 static void sighandler(int s)
53 {
54         quit = 1;
55 }