src/joystick/win32/SDL_mmjoystick.c
changeset 938 fa2ce068b0b6
parent 937 1e6366bde299
child 1135 cf6133247d34
equal deleted inserted replaced
937:1e6366bde299 938:fa2ce068b0b6
    50 
    50 
    51 
    51 
    52 /* array to hold joystick ID values */
    52 /* array to hold joystick ID values */
    53 static UINT	SYS_JoystickID[MAX_JOYSTICKS];
    53 static UINT	SYS_JoystickID[MAX_JOYSTICKS];
    54 static JOYCAPS	SYS_Joystick[MAX_JOYSTICKS];
    54 static JOYCAPS	SYS_Joystick[MAX_JOYSTICKS];
    55 static char	*SYS_JoystickNames[MAX_JOYSTICKS];
    55 static char	*SYS_JoystickName[MAX_JOYSTICKS];
    56 
    56 
    57 /* The private structure used to keep track of a joystick */
    57 /* The private structure used to keep track of a joystick */
    58 struct joystick_hwdata
    58 struct joystick_hwdata
    59 {
    59 {
    60 	/* joystick ID */
    60 	/* joystick ID */
    70 
    70 
    71 /* Convert a win32 Multimedia API return code to a text message */
    71 /* Convert a win32 Multimedia API return code to a text message */
    72 static void SetMMerror(char *function, int code);
    72 static void SetMMerror(char *function, int code);
    73 
    73 
    74 
    74 
    75 static char *GetJoystickName(const char *szRegKey)
    75 static char *GetJoystickName(int index, const char *szRegKey)
    76 {
    76 {
    77 	/* added 7/24/2004 by Eckhard Stolberg */
    77 	/* added 7/24/2004 by Eckhard Stolberg */
    78 	/*
    78 	/*
    79 		see if there is a joystick for the current
    79 		see if there is a joystick for the current
    80 		index (1-16) listed in the registry
    80 		index (1-16) listed in the registry
    99 			find the registry key name for the
    99 			find the registry key name for the
   100 			joystick's properties
   100 			joystick's properties
   101 		*/
   101 		*/
   102 		regsize = sizeof(regname);
   102 		regsize = sizeof(regname);
   103 		sprintf(regvalue,
   103 		sprintf(regvalue,
   104 			"Joystick%d%s", i+1,
   104 			"Joystick%d%s", index+1,
   105 			REGSTR_VAL_JOYOEMNAME);
   105 			REGSTR_VAL_JOYOEMNAME);
   106 		regresult = RegQueryValueExA(hKey,
   106 		regresult = RegQueryValueExA(hKey,
   107 			regvalue, 0, 0, (LPBYTE) &regname,
   107 			regvalue, 0, 0, (LPBYTE) &regname,
   108 			(LPDWORD) &regsize);
   108 			(LPDWORD) &regsize);
   109 		RegCloseKey(hKey);
   109 		RegCloseKey(hKey);
   166 	}
   166 	}
   167 
   167 
   168 
   168 
   169 	for ( i = 0; i < MAX_JOYSTICKS; i++ ) {
   169 	for ( i = 0; i < MAX_JOYSTICKS; i++ ) {
   170 		SYS_JoystickID[i] = JOYSTICKID1 + i;
   170 		SYS_JoystickID[i] = JOYSTICKID1 + i;
   171 		SYS_JoystickNames[i] = NULL;
   171 		SYS_JoystickName[i] = NULL;
   172 	}
   172 	}
   173 
   173 
   174 
   174 
   175 	for ( i = 0; (i < maxdevs); ++i ) {
   175 	for ( i = 0; (i < maxdevs); ++i ) {
   176 		
   176 		
   183 		if ( result == JOYERR_NOERROR ) {
   183 		if ( result == JOYERR_NOERROR ) {
   184 			result = joyGetDevCaps(SYS_JoystickID[i], &joycaps, sizeof(joycaps));
   184 			result = joyGetDevCaps(SYS_JoystickID[i], &joycaps, sizeof(joycaps));
   185 			if ( result == JOYERR_NOERROR ) {
   185 			if ( result == JOYERR_NOERROR ) {
   186 				SYS_JoystickID[numdevs] = SYS_JoystickID[i];
   186 				SYS_JoystickID[numdevs] = SYS_JoystickID[i];
   187 				SYS_Joystick[numdevs] = joycaps;
   187 				SYS_Joystick[numdevs] = joycaps;
   188 				SYS_JoystickName[numdevs] = GetJoystickName(joycaps.szRegKey);
   188 				SYS_JoystickName[numdevs] = GetJoystickName(numdevs, joycaps.szRegKey);
   189 				numdevs++;
   189 				numdevs++;
   190 			}
   190 			}
   191 		}
   191 		}
   192 	}
   192 	}
   193 	return(numdevs);
   193 	return(numdevs);
   194 }
   194 }
   195 
   195 
   196 /* Function to get the device-dependent name of a joystick */
   196 /* Function to get the device-dependent name of a joystick */
   197 const char *SDL_SYS_JoystickName(int index)
   197 const char *SDL_SYS_JoystickName(int index)
   198 {
   198 {
   199 	if ( SYS_JoystickNames[index] != NULL ) {
   199 	if ( SYS_JoystickName[index] != NULL ) {
   200 		return(SYS_JoystickNames[index]);
   200 		return(SYS_JoystickName[index]);
   201 	} else {
   201 	} else {
   202 		return(SYS_Joystick[index].szPname);
   202 		return(SYS_Joystick[index].szPname);
   203 	}
   203 	}
   204 }
   204 }
   205 
   205 
   371 /* Function to perform any system-specific joystick related cleanup */
   371 /* Function to perform any system-specific joystick related cleanup */
   372 void SDL_SYS_JoystickQuit(void)
   372 void SDL_SYS_JoystickQuit(void)
   373 {
   373 {
   374 	int i;
   374 	int i;
   375 	for (i = 0; i < MAX_JOYSTICKS; i++) {
   375 	for (i = 0; i < MAX_JOYSTICKS; i++) {
   376 		if ( SYS_JoystickNames[i] != NULL ) {
   376 		if ( SYS_JoystickName[i] != NULL ) {
   377 			free(SYS_JoystickNames[i]);
   377 			free(SYS_JoystickName[i]);
   378 		}
   378 		}
   379 	}
   379 	}
   380 }
   380 }
   381 
   381 
   382 
   382