Mac and Linux SDL2 binary snapshots
Edward Rudd
2019-04-09 9cd2e9ec8fc0127393dfce9c0359d500c8c238be
source/src/joystick/haiku/SDL_haikujoystick.cc
@@ -36,7 +36,7 @@
/* The maximum number of joysticks we'll detect */
#define MAX_JOYSTICKS   16
#define MAX_JOYSTICKS   16
/* A list of available joysticks */
    static char *SDL_joyport[MAX_JOYSTICKS];
@@ -50,13 +50,13 @@
        int16 *new_axes;
    };
    static int SDL_SYS_numjoysticks = 0;
    static int numjoysticks = 0;
/* Function to scan the system for joysticks.
 * Joystick 0 should be the system default joystick.
 * It should return 0, or -1 on an unrecoverable fatal error.
 */
    int SDL_SYS_JoystickInit(void)
    static int HAIKU_JoystickInit(void)
    {
        BJoystick joystick;
        int i;
@@ -65,52 +65,59 @@
        /* Search for attached joysticks */
          nports = joystick.CountDevices();
          SDL_SYS_numjoysticks = 0;
          numjoysticks = 0;
          SDL_memset(SDL_joyport, 0, (sizeof SDL_joyport));
          SDL_memset(SDL_joyname, 0, (sizeof SDL_joyname));
        for (i = 0; (SDL_SYS_numjoysticks < MAX_JOYSTICKS) && (i < nports); ++i)
        for (i = 0; (numjoysticks < MAX_JOYSTICKS) && (i < nports); ++i)
        {
            if (joystick.GetDeviceName(i, name) == B_OK) {
                if (joystick.Open(name) != B_ERROR) {
                    BString stick_name;
                      joystick.GetControllerName(&stick_name);
                      SDL_joyport[SDL_SYS_numjoysticks] = SDL_strdup(name);
                      SDL_joyname[SDL_SYS_numjoysticks] = SDL_strdup(stick_name.String());
                      SDL_SYS_numjoysticks++;
                      SDL_joyport[numjoysticks] = SDL_strdup(name);
                      SDL_joyname[numjoysticks] = SDL_strdup(stick_name.String());
                      numjoysticks++;
                      joystick.Close();
                }
            }
        }
        return (SDL_SYS_numjoysticks);
        return (numjoysticks);
    }
    int SDL_SYS_NumJoysticks(void)
    static int HAIKU_JoystickGetCount(void)
    {
        return SDL_SYS_numjoysticks;
        return numjoysticks;
    }
    void SDL_SYS_JoystickDetect(void)
    static void HAIKU_JoystickDetect(void)
    {
    }
/* Function to get the device-dependent name of a joystick */
    const char *SDL_SYS_JoystickNameForDeviceIndex(int device_index)
    static const char *HAIKU_JoystickGetDeviceName(int device_index)
    {
        return SDL_joyname[device_index];
    }
    static int HAIKU_JoystickGetDevicePlayerIndex(int device_index)
    {
        return -1;
    }
/* Function to perform the mapping from device index to the instance id for this index */
    SDL_JoystickID SDL_SYS_GetInstanceIdOfDeviceIndex(int device_index)
    static SDL_JoystickID HAIKU_JoystickGetDeviceInstanceID(int device_index)
    {
        return device_index;
    }
    static void HAIKU_JoystickClose(SDL_Joystick * joystick);
/* Function to open a joystick for use.
   The joystick to open is specified by the device index.
   This should fill the nbuttons and naxes fields of the joystick structure.
   It returns 0, or -1 if there is an error.
 */
    int SDL_SYS_JoystickOpen(SDL_Joystick * joystick, int device_index)
    static int HAIKU_JoystickOpen(SDL_Joystick * joystick, int device_index)
    {
        BJoystick *stick;
@@ -127,7 +134,7 @@
        /* Open the requested joystick for use */
        if (stick->Open(SDL_joyport[device_index]) == B_ERROR) {
            SDL_SYS_JoystickClose(joystick);
            HAIKU_JoystickClose(joystick);
            return SDL_SetError("Unable to open joystick");
        }
@@ -144,18 +151,12 @@
        joystick->hwdata->new_hats = (uint8 *)
            SDL_malloc(joystick->nhats * sizeof(uint8));
        if (!joystick->hwdata->new_hats || !joystick->hwdata->new_axes) {
            SDL_SYS_JoystickClose(joystick);
            HAIKU_JoystickClose(joystick);
            return SDL_OutOfMemory();
        }
        /* We're done! */
        return (0);
    }
/* Function to determine if this joystick is attached to the system right now */
    SDL_bool SDL_SYS_JoystickAttached(SDL_Joystick *joystick)
    {
        return SDL_TRUE;
        return 0;
    }
/* Function to update the state of a joystick - called as a device poll.
@@ -163,7 +164,7 @@
 * but instead should call SDL_PrivateJoystick*() to deliver events
 * and update joystick device state.
 */
    void SDL_SYS_JoystickUpdate(SDL_Joystick * joystick)
    static void HAIKU_JoystickUpdate(SDL_Joystick * joystick)
    {
        static const Uint8 hat_map[9] = {
            SDL_HAT_CENTERED,
@@ -212,7 +213,7 @@
    }
/* Function to close a joystick after use */
    void SDL_SYS_JoystickClose(SDL_Joystick * joystick)
    static void HAIKU_JoystickClose(SDL_Joystick * joystick)
    {
        if (joystick->hwdata) {
            joystick->hwdata->stick->Close();
@@ -224,42 +225,53 @@
    }
/* Function to perform any system-specific joystick related cleanup */
    void SDL_SYS_JoystickQuit(void)
    static void HAIKU_JoystickQuit(void)
    {
        int i;
        for (i = 0; i < SDL_SYS_numjoysticks; ++i) {
        for (i = 0; i < numjoysticks; ++i) {
            SDL_free(SDL_joyport[i]);
        }
        SDL_joyport[0] = NULL;
        for (i = 0; i < SDL_SYS_numjoysticks; ++i) {
        for (i = 0; i < numjoysticks; ++i) {
            SDL_free(SDL_joyname[i]);
        }
        SDL_joyname[0] = NULL;
    }
    SDL_JoystickGUID SDL_SYS_JoystickGetDeviceGUID( int device_index )
    static SDL_JoystickGUID HAIKU_JoystickGetDeviceGUID( int device_index )
    {
        SDL_JoystickGUID guid;
        /* the GUID is just the first 16 chars of the name for now */
        const char *name = SDL_SYS_JoystickNameForDeviceIndex( device_index );
        const char *name = HAIKU_JoystickGetDeviceName( device_index );
        SDL_zero( guid );
        SDL_memcpy( &guid, name, SDL_min( sizeof(guid), SDL_strlen( name ) ) );
        return guid;
    }
    SDL_JoystickGUID SDL_SYS_JoystickGetGUID(SDL_Joystick * joystick)
    static int HAIKU_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms)
    {
        SDL_JoystickGUID guid;
        /* the GUID is just the first 16 chars of the name for now */
        const char *name = joystick->name;
        SDL_zero( guid );
        SDL_memcpy( &guid, name, SDL_min( sizeof(guid), SDL_strlen( name ) ) );
        return guid;
        return SDL_Unsupported();
    }
};                              // extern "C"
    SDL_JoystickDriver SDL_HAIKU_JoystickDriver =
    {
        HAIKU_JoystickInit,
        HAIKU_JoystickGetCount,
        HAIKU_JoystickDetect,
        HAIKU_JoystickGetDeviceName,
        HAIKU_JoystickGetDevicePlayerIndex,
        HAIKU_JoystickGetDeviceGUID,
        HAIKU_JoystickGetDeviceInstanceID,
        HAIKU_JoystickOpen,
        HAIKU_JoystickRumble,
        HAIKU_JoystickUpdate,
        HAIKU_JoystickClose,
        HAIKU_JoystickQuit,
    };
}                              // extern "C"
#endif /* SDL_JOYSTICK_HAIKU */