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, &regsize);
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, &regsize);
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, &regsize);
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