module sdl3::sdl; typedef PropertiesID = uint; enum PropertyType : inline CInt { PROPERTY_TYPE_INVALID, PROPERTY_TYPE_POINTER, PROPERTY_TYPE_STRING, PROPERTY_TYPE_NUMBER, PROPERTY_TYPE_FLOAT, PROPERTY_TYPE_BOOLEAN } extern fn PropertiesID get_global_properties() @extern("SDL_GetGlobalProperties"); extern fn PropertiesID create_properties() @extern("SDL_CreateProperties"); extern fn bool copy_properties(PropertiesID src, PropertiesID dst) @extern("SDL_CopyProperties"); extern fn bool lock_properties(PropertiesID props) @extern("SDL_LockProperties"); extern fn void unlock_properties(PropertiesID props) @extern("SDL_UnlockProperties"); alias CleanupPropertyCallback = fn void(void* userdata, void* value); extern fn bool set_pointer_property_with_cleanup(PropertiesID props, ZString name, void* value, CleanupPropertyCallback cleanup, void* userdata) @extern("SDL_SetPointerPropertyWithCleanup"); extern fn bool set_pointer_property(PropertiesID props, ZString name, void* value) @extern("SDL_SetPointerProperty"); extern fn bool set_string_property(PropertiesID props, ZString name, ZString value) @extern("SDL_SetStringProperty"); extern fn bool set_number_property(PropertiesID props, ZString name, long value) @extern("SDL_SetNumberProperty"); extern fn bool set_float_property(PropertiesID props, ZString name, float value) @extern("SDL_SetFloatProperty"); extern fn bool set_boolean_property(PropertiesID props, ZString name, bool value) @extern("SDL_SetBooleanProperty"); extern fn bool has_property(PropertiesID props, ZString name) @extern("SDL_HasProperty"); extern fn PropertyType get_property_type(PropertiesID props, ZString name) @extern("SDL_GetPropertyType"); extern fn void* get_pointer_property(PropertiesID props, ZString name, void* default_value) @extern("SDL_GetPointerProperty"); extern fn ZString get_string_property(PropertiesID props, ZString name, ZString default_value) @extern("SDL_GetStringProperty"); extern fn long get_number_property(PropertiesID props, ZString name, long default_value) @extern("SDL_GetNumberProperty"); extern fn float get_float_property(PropertiesID props, ZString name, float default_value) @extern("SDL_GetFloatProperty"); extern fn bool get_boolean_property(PropertiesID props, ZString name, bool default_value) @extern("SDL_GetBooleanProperty"); extern fn bool clear_property(PropertiesID props, ZString name) @extern("SDL_ClearProperty"); alias EnumeratePropertiesCallback = fn void(void* userdata, PropertiesID props, ZString name); extern fn bool enumerate_properties(PropertiesID props, EnumeratePropertiesCallback callback, void* userdata) @extern("SDL_EnumerateProperties"); extern fn void destroy_properties(PropertiesID props) @extern("SDL_DestroyProperties");