-/*\r
- * This function replaces the constructor method in the JS library.\r
- */\r
-static void fghJoystickInit( int ident )\r
-{\r
- if( ident >= MAX_NUM_JOYSTICKS )\r
- fgError( "Too large a joystick number: %d", ident );\r
-\r
- if( fgJoystick[ ident ] )\r
- fgError( "illegal attempt to initialize joystick device again" );\r
-\r
- fgJoystick[ ident ] =\r
- ( SFG_Joystick * )calloc( sizeof( SFG_Joystick ), 1 );\r
-\r
- /* Set defaults */\r
- fgJoystick[ ident ]->num_axes = fgJoystick[ ident ]->num_buttons = 0;\r
- fgJoystick[ ident ]->error = GL_TRUE;\r
-\r
-#if TARGET_HOST_MACINTOSH\r
- fgJoystick[ ident ]->id = ident;\r
- snprintf( fgJoystick[ ident ]->fname, sizeof(fgJoystick[ ident ]->fname), "/dev/js%d", ident ); /* FIXME */\r
- fgJoystick[ ident ]->error = GL_FALSE;\r
-#endif\r
-\r
-#if TARGET_HOST_MAC_OSX\r
- fgJoystick[ ident ]->id = ident;\r
- fgJoystick[ ident ]->error = GL_FALSE;\r
- fgJoystick[ ident ]->num_axes = 0;\r
- fgJoystick[ ident ]->num_buttons = 0;\r
-\r
- if( numDevices < 0 )\r
- {\r
- /* do first-time init (since we can't over-ride jsInit, hmm */\r
- numDevices = 0;\r
-\r
- mach_port_t masterPort;\r
- IOReturn rv = IOMasterPort( bootstrap_port, &masterPort );\r
- if( rv != kIOReturnSuccess )\r
- {\r
- fgWarning( "error getting master Mach port" );\r
- return;\r
- }\r
- fghJoystickFindDevices( masterPort );\r
- }\r
-\r
- if ( ident >= numDevices )\r
- {\r
- fgJoystick[ ident ]->error = GL_TRUE;\r
- return;\r
- }\r
-\r
- /* get the name now too */\r
- CFDictionaryRef properties = getCFProperties( ioDevices[ ident ] );\r
- CFTypeRef ref = CFDictionaryGetValue( properties,\r
- CFSTR( kIOHIDProductKey ) );\r
- if (!ref)\r
- ref = CFDictionaryGetValue(properties, CFSTR( "USB Product Name" ) );\r
-\r
- if( !ref ||\r
- !CFStringGetCString( ( CFStringRef )ref, name, 128,\r
- CFStringGetSystemEncoding( ) ) )\r
- {\r
- fgWarning( "error getting device name" );\r
- name[ 0 ] = '\0';\r
- }\r
-#endif\r
-\r
-#if TARGET_HOST_MS_WINDOWS && !defined(_WIN32_WCE)\r
- switch( ident )\r
- {\r
- case 0:\r
- fgJoystick[ ident ]->js_id = JOYSTICKID1;\r
- fgJoystick[ ident ]->error = GL_FALSE;\r
- break;\r
- case 1:\r
- fgJoystick[ ident ]->js_id = JOYSTICKID2;\r
- fgJoystick[ ident ]->error = GL_FALSE;\r
- break;\r
- default:\r
- fgJoystick[ ident ]->num_axes = 0;\r
- fgJoystick[ ident ]->error = GL_TRUE;\r
- return;\r
- }\r
-#endif\r