|
|
1.1 root 1: /*
2: * UAE - The Un*x Amiga Emulator
3: *
4: * Win32 interface
5: *
6: * Copyright 1997 Mathias Ortmann
7: */
8:
9: #ifdef __GNUC__
10: #define __int64 long long
11: #include "machdep/winstuff.h"
12: #else
13: #include <windows.h>
14: #include <ddraw.h>
15: #include <stdlib.h>
16: #include <stdarg.h>
17: #include <commctrl.h>
18: #include <commdlg.h>
19: #include <stdio.h>
20: #include <fcntl.h>
21: #include <sys/stat.h>
22: #include <io.h>
23: #endif
24:
25: #include "config.h"
26: #include "sysconfig.h"
27: #include "sysdeps.h"
28: #include "options.h"
29: #include "osdep/win32gui.h"
30: #include "include/memory.h"
31: #include "resource.h"
32: #include "osdep/win32.h"
33:
34: /* Joystick emulation, Win32 interface */
35: #define MAXJOYSTICKS 2
36:
37: static int joystickpresent[MAXJOYSTICKS];
38: static int unplugged[MAXJOYSTICKS];
39: static int warned[MAXJOYSTICKS];
40: static JOYCAPS jc[MAXJOYSTICKS];
41: static JOYINFOEX ji =
42: {sizeof (ji), JOY_RETURNBUTTONS | JOY_RETURNX | JOY_RETURNY};
43:
44: void read_joystick (int nr, short *dir, int *button)
45: {
46: int left = 0, right = 0, top = 0, bot = 0;
47: int joyerr;
48:
49: *dir = *button = 0;
50: if (!joystickpresent[nr])
51: return;
52:
53: if (unplugged[nr]) {
54: unplugged[nr]--;
55: return;
56: }
57: switch (joyerr = joyGetPosEx (JOYSTICKID1 + nr, &ji)) {
58: case JOYERR_NOERROR:
59: warned[nr] = 0;
60: break;
61: case JOYERR_UNPLUGGED:
62: if (!warned[nr]) {
63: fprintf (stderr, "Joystick %d seems to be unplugged.\n", nr);
64: warned[nr] = 1;
65: }
66: unplugged[nr] = 200;
67: return;
68: default:
69: fprintf (stderr, "Error reading joystick %d: %d.\n", nr, joyerr);
70: unplugged[nr] = 100;
71: return;
72: }
73:
74: if (ji.dwXpos < (jc[nr].wXmin + 2 * (jc[nr].wXmax - jc[nr].wXmin) / 5))
75: left = 1;
76: else if (ji.dwXpos > (jc[nr].wXmin + 3 * (jc[nr].wXmax - jc[nr].wXmin) / 5))
77: right = 1;
78:
79: if (ji.dwYpos < (jc[nr].wYmin + 2 * (jc[nr].wYmax - jc[nr].wYmin) / 5))
80: top = 1;
81: else if (ji.dwYpos > (jc[nr].wYmin + 3 * (jc[nr].wYmax - jc[nr].wYmin) / 5))
82: bot = 1;
83:
84: if (left)
85: top = !top;
86: if (right)
87: bot = !bot;
88: *dir = bot | (right << 1) | (top << 8) | (left << 9);
89: *button = ji.dwButtons;
90: }
91:
92: void init_joystick (void)
93: {
94: int nr;
95: int found = 0;
96:
97: for (nr = 0; nr < MAXJOYSTICKS; nr++) {
98: if (joyGetDevCaps (JOYSTICKID1 + nr, jc + nr, sizeof (jc)) == JOYERR_NOERROR) {
99: printf ("Joystick %d: %s with %d buttons\n", nr, jc[nr].szPname, jc[nr].wNumButtons);
100: joystickpresent[nr] = 1;
101: found++;
102: }
103: }
104:
105: fprintf (stdout, "%d joystick(s) found.\n", found);
106: }
107:
108: void close_joystick (void)
109: {
110: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.