#ifdef __cplusplus
extern "C" {
#endif
        void joystick_init();
        void joystick_close();
        void joystick_poll();
        
        typedef struct plat_joystick_t
        {
                char name[64];
                
                int a[8];
                int b[32];
                int p[4];
                
                struct
                {
                        char name[32];
                        int id;
                } axis[8];
                
                struct
                {
                        char name[32];
                        int id;
                } button[32];
                
                struct
                {
                        char name[32];
                        int id;
                } pov[4];
                
                int nr_axes;
                int nr_buttons;
                int nr_povs;
        } plat_joystick_t;

        #define MAX_PLAT_JOYSTICKS 8

        extern plat_joystick_t plat_joystick_state[MAX_PLAT_JOYSTICKS];
        extern int joysticks_present;

        #define POV_X 0x80000000
        #define POV_Y 0x40000000
        
        typedef struct joystick_t
        {
                int axis[8];
                int button[32];
                int pov[4];
                
                int plat_joystick_nr;
                int axis_mapping[8];
                int button_mapping[32];
                int pov_mapping[4][2];
        } joystick_t;

        #define MAX_JOYSTICKS 4
        extern joystick_t joystick_state[MAX_JOYSTICKS];

        #define JOYSTICK_PRESENT(n) (joystick_state[n].plat_joystick_nr != 0)

#ifdef __cplusplus
}
#endif