Mercurial > sdl-ios-xcode
comparison src/joystick/win32/SDL_mmjoystick.c @ 2176:cbe06fa842cd
Fixed joystick name detection - merged from revision 3226 on SDL 1.2 branch
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Thu, 12 Jul 2007 05:31:08 +0000 |
parents | 6051761b5934 |
children | 99210400e8b9 |
comparison
equal
deleted
inserted
replaced
2175:2590d4e5fb89 | 2176:cbe06fa842cd |
---|---|
76 /* | 76 /* |
77 see if there is a joystick for the current | 77 see if there is a joystick for the current |
78 index (1-16) listed in the registry | 78 index (1-16) listed in the registry |
79 */ | 79 */ |
80 char *name = NULL; | 80 char *name = NULL; |
81 HKEY hTopKey; | |
81 HKEY hKey; | 82 HKEY hKey; |
82 DWORD regsize; | 83 DWORD regsize; |
83 LONG regresult; | 84 LONG regresult; |
84 unsigned char regkey[256]; | 85 char regkey[256]; |
85 unsigned char regvalue[256]; | 86 char regvalue[256]; |
86 unsigned char regname[256]; | 87 char regname[256]; |
87 | 88 |
88 SDL_snprintf((char *) regkey, SDL_arraysize(regkey), "%s\\%s\\%s", | 89 SDL_snprintf(regkey, SDL_arraysize(regkey), "%s\\%s\\%s", |
89 REGSTR_PATH_JOYCONFIG, szRegKey, REGSTR_KEY_JOYCURR); | 90 REGSTR_PATH_JOYCONFIG, szRegKey, REGSTR_KEY_JOYCURR); |
90 regresult = RegOpenKeyExA(HKEY_LOCAL_MACHINE, | 91 hTopKey = HKEY_LOCAL_MACHINE; |
91 (LPTSTR) & regkey, 0, KEY_READ, &hKey); | 92 regresult = RegOpenKeyExA(hTopKey, regkey, 0, KEY_READ, &hKey); |
93 if (regresult != ERROR_SUCCESS) { | |
94 hTopKey = HKEY_CURRENT_USER; | |
95 regresult = RegOpenKeyExA(hTopKey, regkey, 0, KEY_READ, &hKey); | |
96 } | |
97 if (regresult != ERROR_SUCCESS) { | |
98 return NULL; | |
99 } | |
100 | |
101 /* find the registry key name for the joystick's properties */ | |
102 regsize = sizeof(regname); | |
103 SDL_snprintf(regvalue, SDL_arraysize(regvalue), "Joystick%d%s", index + 1, | |
104 REGSTR_VAL_JOYOEMNAME); | |
105 regresult = | |
106 RegQueryValueExA(hKey, regvalue, 0, 0, (LPBYTE) regname, ®size); | |
107 RegCloseKey(hKey); | |
108 | |
109 if (regresult != ERROR_SUCCESS) { | |
110 return NULL; | |
111 } | |
112 | |
113 /* open that registry key */ | |
114 SDL_snprintf(regkey, SDL_arraysize(regkey), "%s\\%s", REGSTR_PATH_JOYOEM, | |
115 regname); | |
116 regresult = RegOpenKeyExA(hTopKey, regkey, 0, KEY_READ, &hKey); | |
117 if (regresult != ERROR_SUCCESS) { | |
118 return NULL; | |
119 } | |
120 | |
121 /* find the size for the OEM name text */ | |
122 regsize = sizeof(regvalue); | |
123 regresult = | |
124 RegQueryValueExA(hKey, REGSTR_VAL_JOYOEMNAME, 0, 0, NULL, ®size); | |
92 if (regresult == ERROR_SUCCESS) { | 125 if (regresult == ERROR_SUCCESS) { |
93 /* | 126 /* allocate enough memory for the OEM name text ... */ |
94 find the registry key name for the | 127 name = (char *) SDL_malloc(regsize); |
95 joystick's properties | 128 if (name) { |
96 */ | 129 /* ... and read it from the registry */ |
97 regsize = sizeof(regname); | 130 regresult = RegQueryValueExA(hKey, |
98 SDL_snprintf((char *) regvalue, SDL_arraysize(regvalue), | |
99 "Joystick%d%s", index + 1, REGSTR_VAL_JOYOEMNAME); | |
100 regresult = RegQueryValueExA(hKey, | |
101 (char *) regvalue, 0, 0, | |
102 (LPBYTE) & regname, (LPDWORD) & regsize); | |
103 RegCloseKey(hKey); | |
104 if (regresult == ERROR_SUCCESS) { | |
105 /* open that registry key */ | |
106 SDL_snprintf((char *) regkey, SDL_arraysize(regkey), | |
107 "%s\\%s", REGSTR_PATH_JOYOEM, regname); | |
108 regresult = | |
109 RegOpenKeyExA(HKEY_LOCAL_MACHINE, (char *) regkey, 0, | |
110 KEY_READ, &hKey); | |
111 if (regresult == ERROR_SUCCESS) { | |
112 /* find the size for the OEM name text */ | |
113 regsize = sizeof(regvalue); | |
114 regresult = | |
115 RegQueryValueExA(hKey, | |
116 REGSTR_VAL_JOYOEMNAME, | |
117 0, 0, NULL, (LPDWORD) & regsize); | |
118 if (regresult == ERROR_SUCCESS) { | |
119 /* | |
120 allocate enough memory | |
121 for the OEM name text ... | |
122 */ | |
123 name = (char *) SDL_malloc(regsize); | |
124 /* ... and read it from the registry */ | |
125 regresult = | |
126 RegQueryValueExA(hKey, | |
127 REGSTR_VAL_JOYOEMNAME, 0, 0, | 131 REGSTR_VAL_JOYOEMNAME, 0, 0, |
128 (LPBYTE) name, (LPDWORD) & regsize); | 132 (LPBYTE) name, ®size); |
129 RegCloseKey(hKey); | 133 } |
130 } | 134 } |
131 } | 135 RegCloseKey(hKey); |
132 } | 136 |
133 } | |
134 return (name); | 137 return (name); |
135 } | 138 } |
136 | 139 |
137 /* Function to scan the system for joysticks. | 140 /* Function to scan the system for joysticks. |
138 * This function should set SDL_numjoysticks to the number of available | 141 * This function should set SDL_numjoysticks to the number of available |