]> git.xolatile.top Git - xolatile-raylib-ada.git/commitdiff
Removed tabs and added license notice...
authorxolatile <xolatile@proton.me>
Fri, 5 Apr 2024 13:19:28 +0000 (09:19 -0400)
committerxolatile <xolatile@proton.me>
Fri, 5 Apr 2024 13:19:28 +0000 (09:19 -0400)
raylib.ads

index bfbb01cc583dbcf5f46034aa73f21453434379c3..787f07b9ac514fb47fdf9c0ebacba7eea5795618 100644 (file)
@@ -1,4 +1,23 @@
 ------------------------------------------------------------------------
+--
+-- Copyright (c) 2024 - Ognjen 'xolatile' Milan Robovic
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This file was made by altering original Raylib 5.1 C header file. I
+-- used few formatting programs of mine, tho sadly most of the editing
+-- was done manually. Contact me if there are license issues.
+--
+-- Raylib is great game programming library written by 'raysan5', you
+-- can check out original C source code here below, it's under zlib
+-- license. I wrote this because of the lack of good Ada bindings.
+--
+-- https://github.com/raysan5/raylib
+--
+------------------------------------------------------------------------
 
 with System;
 
@@ -6,4455 +25,4457 @@ package Raylib is
 
 ------------------------------------------------------------------------
 
-       type Logical is new Boolean;
-       --
-       for Logical'Size use 32;
-
-       type Config_Flags is (
-               Flag_None,
-               Flag_Fullscreen_Mode,
-               Flag_Window_Resizable,
-               Flag_Window_Undecorated,
-               Flag_Window_Transparent,
-               Flag_MSAA_x4_Hint,
-               Flag_VSync_Hint,
-               Flag_Window_Hidden,
-               Flag_Window_Always_Run,
-               Flag_Window_Minimized,
-               Flag_Window_Maximized,
-               Flag_Window_Unfocused,
-               Flag_Window_Topmost,
-               Flag_Window_High_DPI,
-               Flag_Window_Mouse_Passthrough,
-               Flag_Borderless_Windowed_Mode,
-               Flag_Interlaced_Hint
-       ) with Convention => C;
-
-       for Config_Flags use (
-               Flag_None                     => 16#00000000#,
-               Flag_Fullscreen_Mode          => 16#00000002#,
-               Flag_Window_Resizable         => 16#00000004#,
-               Flag_Window_Undecorated       => 16#00000008#,
-               Flag_Window_Transparent       => 16#00000010#,
-               Flag_MSAA_x4_Hint             => 16#00000020#,
-               Flag_VSync_Hint               => 16#00000040#,
-               Flag_Window_Hidden            => 16#00000080#,
-               Flag_Window_Always_Run        => 16#00000100#,
-               Flag_Window_Minimized         => 16#00000200#,
-               Flag_Window_Maximized         => 16#00000400#,
-               Flag_Window_Unfocused         => 16#00000800#,
-               Flag_Window_Topmost           => 16#00001000#,
-               Flag_Window_High_DPI          => 16#00002000#,
-               Flag_Window_Mouse_Passthrough => 16#00004000#,
-               Flag_Borderless_Windowed_Mode => 16#00008000#,
-               Flag_Interlaced_Hint          => 16#00010000#
-       );
-
-       type Trace_Log_Level is (
-               Log_All,
-               Log_Trace,
-               Log_Debug,
-               Log_Info,
-               Log_Warning,
-               Log_Error,
-               Log_Fatal,
-               Log_None
-       ) with Convention => C;
-
-       type Keyboard_Key is (
-               Key_Null,
-               Key_Space,
-               Key_Apostrophe,
-               Key_Comma,
-               Key_Minus,
-               Key_Period,
-               Key_Slash,
-               Key_0,
-               Key_1,
-               Key_2,
-               Key_3,
-               Key_4,
-               Key_5,
-               Key_6,
-               Key_7,
-               Key_8,
-               Key_9,
-               Key_Semicolon,
-               Key_Equal,
-               Key_A,
-               Key_B,
-               Key_C,
-               Key_D,
-               Key_E,
-               Key_F,
-               Key_G,
-               Key_H,
-               Key_I,
-               Key_J,
-               Key_K,
-               Key_L,
-               Key_M,
-               Key_N,
-               Key_O,
-               Key_P,
-               Key_Q,
-               Key_R,
-               Key_S,
-               Key_T,
-               Key_U,
-               Key_V,
-               Key_W,
-               Key_X,
-               Key_Y,
-               Key_Z,
-               Key_Left_Bracket,
-               Key_Backslash,
-               Key_Right_Bracket,
-               Key_Grave,
-               Key_Escape,
-               Key_Enter,
-               Key_Tab,
-               Key_Backspace,
-               Key_Insert,
-               Key_Delete,
-               Key_Right,
-               Key_Left,
-               Key_Down,
-               Key_Up,
-               Key_Page_Up,
-               Key_Page_Down,
-               Key_Home,
-               Key_End,
-               Key_Caps_Lock,
-               Key_Scroll_Lock,
-               Key_Num_Lock,
-               Key_Print_Screen,
-               Key_Pause,
-               Key_F1,
-               Key_F2,
-               Key_F3,
-               Key_F4,
-               Key_F5,
-               Key_F6,
-               Key_F7,
-               Key_F8,
-               Key_F9,
-               Key_F10,
-               Key_F11,
-               Key_F12,
-               Key_Pad_0,
-               Key_Pad_1,
-               Key_Pad_2,
-               Key_Pad_3,
-               Key_Pad_4,
-               Key_Pad_5,
-               Key_Pad_6,
-               Key_Pad_7,
-               Key_Pad_8,
-               Key_Pad_9,
-               Key_Pad_Decimal,
-               Key_Pad_Divide,
-               Key_Pad_Multiply,
-               Key_Pad_Subtract,
-               Key_Pad_Add,
-               Key_Pad_Enter,
-               Key_Pad_Equal,
-               Key_Left_Shift,
-               Key_Left_Control,
-               Key_Left_Alt,
-               Key_Left_Super,
-               Key_Right_Shift,
-               Key_Right_Control,
-               Key_Right_Alt,
-               Key_Right_Super,
-               Key_KB_Menu
-       ) with Convention => C;
-
-       for Keyboard_Key use (
-               Key_Null          => 0,
-               Key_Space         => 32,
-               Key_Apostrophe    => 39,
-               Key_Comma         => 44,
-               Key_Minus         => 45,
-               Key_Period        => 46,
-               Key_Slash         => 47,
-               Key_0             => 48,
-               Key_1             => 49,
-               Key_2             => 50,
-               Key_3             => 51,
-               Key_4             => 52,
-               Key_5             => 53,
-               Key_6             => 54,
-               Key_7             => 55,
-               Key_8             => 56,
-               Key_9             => 57,
-               Key_Semicolon     => 59,
-               Key_Equal         => 61,
-               Key_A             => 65,
-               Key_B             => 66,
-               Key_C             => 67,
-               Key_D             => 68,
-               Key_E             => 69,
-               Key_F             => 70,
-               Key_G             => 71,
-               Key_H             => 72,
-               Key_I             => 73,
-               Key_J             => 74,
-               Key_K             => 75,
-               Key_L             => 76,
-               Key_M             => 77,
-               Key_N             => 78,
-               Key_O             => 79,
-               Key_P             => 80,
-               Key_Q             => 81,
-               Key_R             => 82,
-               Key_S             => 83,
-               Key_T             => 84,
-               Key_U             => 85,
-               Key_V             => 86,
-               Key_W             => 87,
-               Key_X             => 88,
-               Key_Y             => 89,
-               Key_Z             => 90,
-               Key_Left_Bracket  => 91,
-               Key_Backslash     => 92,
-               Key_Right_Bracket => 93,
-               Key_Grave         => 96,
-               Key_Escape        => 256,
-               Key_Enter         => 257,
-               Key_Tab           => 258,
-               Key_Backspace     => 259,
-               Key_Insert        => 260,
-               Key_Delete        => 261,
-               Key_Right         => 262,
-               Key_Left          => 263,
-               Key_Down          => 264,
-               Key_Up            => 265,
-               Key_Page_Up       => 266,
-               Key_Page_Down     => 267,
-               Key_Home          => 268,
-               Key_End           => 269,
-               Key_Caps_Lock     => 280,
-               Key_Scroll_Lock   => 281,
-               Key_Num_Lock      => 282,
-               Key_Print_Screen  => 283,
-               Key_Pause         => 284,
-               Key_F1            => 290,
-               Key_F2            => 291,
-               Key_F3            => 292,
-               Key_F4            => 293,
-               Key_F5            => 294,
-               Key_F6            => 295,
-               Key_F7            => 296,
-               Key_F8            => 297,
-               Key_F9            => 298,
-               Key_F10           => 299,
-               Key_F11           => 300,
-               Key_F12           => 301,
-               Key_Pad_0         => 320,
-               Key_Pad_1         => 321,
-               Key_Pad_2         => 322,
-               Key_Pad_3         => 323,
-               Key_Pad_4         => 324,
-               Key_Pad_5         => 325,
-               Key_Pad_6         => 326,
-               Key_Pad_7         => 327,
-               Key_Pad_8         => 328,
-               Key_Pad_9         => 329,
-               Key_Pad_Decimal   => 330,
-               Key_Pad_Divide    => 331,
-               Key_Pad_Multiply  => 332,
-               Key_Pad_Subtract  => 333,
-               Key_Pad_Add       => 334,
-               Key_Pad_Enter     => 335,
-               Key_Pad_Equal     => 336,
-               Key_Left_Shift    => 340,
-               Key_Left_Control  => 341,
-               Key_Left_Alt      => 342,
-               Key_Left_Super    => 343,
-               Key_Right_Shift   => 344,
-               Key_Right_Control => 345,
-               Key_Right_Alt     => 346,
-               Key_Right_Super   => 347,
-               Key_KB_Menu       => 348
-       );
-
-       type Mouse_Button is (
-               Mouse_Button_Left,
-               Mouse_Button_Right,
-               Mouse_Button_Middle,
-               Mouse_Button_Side,
-               Mouse_Button_Extra,
-               Mouse_Button_Forward,
-               Mouse_Button_Back
-       ) with Convention => C;
-
-       type Mouse_Cursor is (
-               Mouse_Cursor_Default,
-               Mouse_Cursor_Arrow,
-               Mouse_Cursor_Ibeam,
-               Mouse_Cursor_Crosshair,
-               Mouse_Cursor_Pointing_Hand,
-               Mouse_Cursor_Resize_EW,
-               Mouse_Cursor_Resize_NS,
-               Mouse_Cursor_Resize_NWSE,
-               Mouse_Cursor_Resize_NESW,
-               Mouse_Cursor_Resize_All,
-               Mouse_Cursor_Not_Allowed
-       ) with Convention => C;
-
-       type Gamepad_Button is (
-               Gamepad_Button_Unknown,
-               Gamepad_Button_Left_Face_Up,
-               Gamepad_Button_Left_Face_Right,
-               Gamepad_Button_Left_Face_Down,
-               Gamepad_Button_Left_Face_Left,
-               Gamepad_Button_Right_Face_Up,
-               Gamepad_Button_Right_Face_Right,
-               Gamepad_Button_Right_Face_Down,
-               Gamepad_Button_Right_Face_Left,
-               Gamepad_Button_Left_Trigger_1,
-               Gamepad_Button_Left_Trigger_2,
-               Gamepad_Button_Right_Trigger_1,
-               Gamepad_Button_Right_Trigger_2,
-               Gamepad_Button_Middle_Left,
-               Gamepad_Button_Middle,
-               Gamepad_Button_Middle_Right,
-               Gamepad_Button_Left_Thumb,
-               Gamepad_Button_Right_Thumb
-       ) with Convention => C;
-
-       type Gamepad_Axis is (
-               Gamepad_Axis_Left_X,
-               Gamepad_Axis_Left_Y,
-               Gamepad_Axis_Right_X,
-               Gamepad_Axis_Right_Y,
-               Gamepad_Axis_Left_Trigger,
-               Gamepad_Axis_Right_Trigger
-       ) with Convention => C;
-
-       type Material_Map_Index is (
-               Material_Map_Diffuse,
-               Material_Map_Specular,
-               Material_Map_Normal,
-               Material_Map_Roughness,
-               Material_Map_Occlusion,
-               Material_Map_Emission,
-               Material_Map_Height,
-               Material_Map_Cubemap,
-               Material_Map_Irradiance,
-               Material_Map_Prefilter,
-               Material_Map_BRDF
-       ) with Convention => C;
-
-       type Shader_Location_Index is (
-               Shader_Location_Vertex_Position,
-               Shader_Location_Vertex_Texcoord_1,
-               Shader_Location_Vertex_Texcoord_2,
-               Shader_Location_Vertex_Normal,
-               Shader_Location_Vertex_Tangent,
-               Shader_Location_Vertex_Color,
-               Shader_Location_Matrix_MVP,
-               Shader_Location_Matrix_View,
-               Shader_Location_Matrix_Projection,
-               Shader_Location_Matrix_Model,
-               Shader_Location_Matrix_Normal,
-               Shader_Location_Vector_View,
-               Shader_Location_Color_Diffuse,
-               Shader_Location_Color_Specular,
-               Shader_Location_Color_Ambient,
-               Shader_Location_Map_Diffuse,
-               Shader_Location_Map_Specular,
-               Shader_Location_Map_Normal,
-               Shader_Location_Map_Roughness,
-               Shader_Location_Map_Occlusion,
-               Shader_Location_Map_Emission,
-               Shader_Location_Map_Height,
-               Shader_Location_Map_Cubemap,
-               Shader_Location_Map_Irradiance,
-               Shader_Location_Map_Prefilter,
-               Shader_Location_Map_BRDF
-       ) with Convention => C;
-
-       type Shader_Uniform_Data_Type is (
-               Shader_Uniform_FLOAT,
-               Shader_Uniform_VEC2,
-               Shader_Uniform_VEC3,
-               Shader_Uniform_VEC4,
-               Shader_Uniform_INT,
-               Shader_Uniform_IVEC2,
-               Shader_Uniform_IVEC3,
-               Shader_Uniform_IVEC4,
-               Shader_Uniform_SAMPLER2D
-       ) with Convention => C;
-
-       type Shader_Attribute_Data_Type is (
-               Shader_Attribute_FLOAT,
-               Shader_Attribute_VEC2,
-               Shader_Attribute_VEC3,
-               Shader_Attribute_VEC4
-       ) with Convention => C;
-
-       type Pixel_Format is (
-               Pixel_Format_None,
-               Pixel_Format_Uncompressed_Grayscale,
-               Pixel_Format_Uncompressed_Gray_Alpha,
-               Pixel_Format_Uncompressed_R5G6B5,
-               Pixel_Format_Uncompressed_R8G8B8,
-               Pixel_Format_Uncompressed_R5G5B5A1,
-               Pixel_Format_Uncompressed_R4G4B4A4,
-               Pixel_Format_Uncompressed_R8G8B8A8,
-               Pixel_Format_Uncompressed_R32,
-               Pixel_Format_Uncompressed_R32G32B32,
-               Pixel_Format_Uncompressed_R32G32B32A32,
-               Pixel_Format_Uncompressed_R16,
-               Pixel_Format_Uncompressed_R16G16B16,
-               Pixel_Format_Uncompressed_R16G16B16A16,
-               Pixel_Format_Compressed_DXT1_RGB,
-               Pixel_Format_Compressed_DXT1_RGBA,
-               Pixel_Format_Compressed_DXT3_RGBA,
-               Pixel_Format_Compressed_DXT5_RGBA,
-               Pixel_Format_Compressed_ETC1_RGB,
-               Pixel_Format_Compressed_ETC2_RGB,
-               Pixel_Format_Compressed_ETC2_EAC_RGBA,
-               Pixel_Format_Compressed_PVRT_RGB,
-               Pixel_Format_Compressed_PVRT_RGBA,
-               Pixel_Format_Compressed_ASTC_4x4_RGBA,
-               Pixel_Format_Compressed_ASTC_8x8_RGBA
-       ) with Convention => C;
-
-       type Texture_Filter is (
-               Texture_Filter_Point,
-               Texture_Filter_Bilinear,
-               Texture_Filter_Trilinear,
-               Texture_Filter_Anisotropic_x4,
-               Texture_Filter_Anisotropic_x8,
-               Texture_Filter_Anisotropic_x16
-       ) with Convention => C;
-
-       type Texture_Wrap is (
-               Texture_Wrap_Repeat,
-               Texture_Wrap_Clamp,
-               Texture_Wrap_Mirror_Repeat,
-               Texture_Wrap_Mirror_Clamp
-       ) with Convention => C;
-
-       type Cubemap_Layout is (
-               Cubemap_Layout_Auto_Detect,
-               Cubemap_Layout_Line_Vertical,
-               Cubemap_Layout_Line_Horizontal,
-               Cubemap_Layout_Cross_3_By_4,
-               Cubemap_Layout_Cross_4_By_3,
-               Cubemap_Layout_Panorama
-       ) with Convention => C;
-
-       type Font_Type is (
-               Font_Default,
-               Font_Bitmap,
-               Font_SDF
-       ) with Convention => C;
-
-       type Blend_Mode is (
-               Blend_Alpha,
-               Blend_Additive,
-               Blend_Multiplied,
-               Blend_Add_Colors,
-               Blend_Subtract_Colors,
-               Blend_Alpha_Premultiply,
-               Blend_Custom,
-               Blend_Custom_Separate
-       ) with Convention => C;
-
-       type Gesture is (
-               Gesture_None,
-               Gesture_Tap,
-               Gesture_Doubletap,
-               Gesture_Hold,
-               Gesture_Drag,
-               Gesture_Swipe_Right,
-               Gesture_Swipe_Left,
-               Gesture_Swipe_Up,
-               Gesture_Swipe_Down,
-               Gesture_Pinch_In,
-               Gesture_Pinch_Out
-       ) with Convention => C;
-
-       for Gesture use (
-               Gesture_None        => 0,
-               Gesture_Tap         => 1,
-               Gesture_Doubletap   => 2,
-               Gesture_Hold        => 4,
-               Gesture_Drag        => 8,
-               Gesture_Swipe_Right => 16,
-               Gesture_Swipe_Left  => 32,
-               Gesture_Swipe_Up    => 64,
-               Gesture_Swipe_Down  => 128,
-               Gesture_Pinch_In    => 256,
-               Gesture_Pinch_Out   => 512
-       );
-
-       type Camera_Mode is (
-               Camera_Custom,
-               Camera_Free,
-               Camera_Orbital,
-               Camera_First_Person,
-               Camera_Third_Person
-       ) with Convention => C;
-
-       type Camera_Projection is (
-               Camera_Perspective,
-               Camera_Orthographic
-       ) with Convention => C;
-
-       type NPatch_Layout is (
-               NPatch_Nine_Patch,
-               NPatch_Three_Patch_Vertical,
-               NPatch_Three_Patch_Horizontal
-       ) with Convention => C;
+   type Logical is new Boolean;
+   --
+   for Logical'Size use 32;
+
+   type Config_Flags is (
+      Flag_None,
+      Flag_Fullscreen_Mode,
+      Flag_Window_Resizable,
+      Flag_Window_Undecorated,
+      Flag_Window_Transparent,
+      Flag_MSAA_x4_Hint,
+      Flag_VSync_Hint,
+      Flag_Window_Hidden,
+      Flag_Window_Always_Run,
+      Flag_Window_Minimized,
+      Flag_Window_Maximized,
+      Flag_Window_Unfocused,
+      Flag_Window_Topmost,
+      Flag_Window_High_DPI,
+      Flag_Window_Mouse_Passthrough,
+      Flag_Borderless_Windowed_Mode,
+      Flag_Interlaced_Hint
+   ) with Convention => C;
+
+   for Config_Flags use (
+      Flag_None                     => 16#00000000#,
+      Flag_Fullscreen_Mode          => 16#00000002#,
+      Flag_Window_Resizable         => 16#00000004#,
+      Flag_Window_Undecorated       => 16#00000008#,
+      Flag_Window_Transparent       => 16#00000010#,
+      Flag_MSAA_x4_Hint             => 16#00000020#,
+      Flag_VSync_Hint               => 16#00000040#,
+      Flag_Window_Hidden            => 16#00000080#,
+      Flag_Window_Always_Run        => 16#00000100#,
+      Flag_Window_Minimized         => 16#00000200#,
+      Flag_Window_Maximized         => 16#00000400#,
+      Flag_Window_Unfocused         => 16#00000800#,
+      Flag_Window_Topmost           => 16#00001000#,
+      Flag_Window_High_DPI          => 16#00002000#,
+      Flag_Window_Mouse_Passthrough => 16#00004000#,
+      Flag_Borderless_Windowed_Mode => 16#00008000#,
+      Flag_Interlaced_Hint          => 16#00010000#
+   );
+
+   type Trace_Log_Level is (
+      Log_All,
+      Log_Trace,
+      Log_Debug,
+      Log_Info,
+      Log_Warning,
+      Log_Error,
+      Log_Fatal,
+      Log_None
+   ) with Convention => C;
+
+   type Keyboard_Key is (
+      Key_Null,
+      Key_Space,
+      Key_Apostrophe,
+      Key_Comma,
+      Key_Minus,
+      Key_Period,
+      Key_Slash,
+      Key_0,
+      Key_1,
+      Key_2,
+      Key_3,
+      Key_4,
+      Key_5,
+      Key_6,
+      Key_7,
+      Key_8,
+      Key_9,
+      Key_Semicolon,
+      Key_Equal,
+      Key_A,
+      Key_B,
+      Key_C,
+      Key_D,
+      Key_E,
+      Key_F,
+      Key_G,
+      Key_H,
+      Key_I,
+      Key_J,
+      Key_K,
+      Key_L,
+      Key_M,
+      Key_N,
+      Key_O,
+      Key_P,
+      Key_Q,
+      Key_R,
+      Key_S,
+      Key_T,
+      Key_U,
+      Key_V,
+      Key_W,
+      Key_X,
+      Key_Y,
+      Key_Z,
+      Key_Left_Bracket,
+      Key_Backslash,
+      Key_Right_Bracket,
+      Key_Grave,
+      Key_Escape,
+      Key_Enter,
+      Key_Tab,
+      Key_Backspace,
+      Key_Insert,
+      Key_Delete,
+      Key_Right,
+      Key_Left,
+      Key_Down,
+      Key_Up,
+      Key_Page_Up,
+      Key_Page_Down,
+      Key_Home,
+      Key_End,
+      Key_Caps_Lock,
+      Key_Scroll_Lock,
+      Key_Num_Lock,
+      Key_Print_Screen,
+      Key_Pause,
+      Key_F1,
+      Key_F2,
+      Key_F3,
+      Key_F4,
+      Key_F5,
+      Key_F6,
+      Key_F7,
+      Key_F8,
+      Key_F9,
+      Key_F10,
+      Key_F11,
+      Key_F12,
+      Key_Pad_0,
+      Key_Pad_1,
+      Key_Pad_2,
+      Key_Pad_3,
+      Key_Pad_4,
+      Key_Pad_5,
+      Key_Pad_6,
+      Key_Pad_7,
+      Key_Pad_8,
+      Key_Pad_9,
+      Key_Pad_Decimal,
+      Key_Pad_Divide,
+      Key_Pad_Multiply,
+      Key_Pad_Subtract,
+      Key_Pad_Add,
+      Key_Pad_Enter,
+      Key_Pad_Equal,
+      Key_Left_Shift,
+      Key_Left_Control,
+      Key_Left_Alt,
+      Key_Left_Super,
+      Key_Right_Shift,
+      Key_Right_Control,
+      Key_Right_Alt,
+      Key_Right_Super,
+      Key_KB_Menu
+   ) with Convention => C;
+
+   for Keyboard_Key use (
+      Key_Null          => 0,
+      Key_Space         => 32,
+      Key_Apostrophe    => 39,
+      Key_Comma         => 44,
+      Key_Minus         => 45,
+      Key_Period        => 46,
+      Key_Slash         => 47,
+      Key_0             => 48,
+      Key_1             => 49,
+      Key_2             => 50,
+      Key_3             => 51,
+      Key_4             => 52,
+      Key_5             => 53,
+      Key_6             => 54,
+      Key_7             => 55,
+      Key_8             => 56,
+      Key_9             => 57,
+      Key_Semicolon     => 59,
+      Key_Equal         => 61,
+      Key_A             => 65,
+      Key_B             => 66,
+      Key_C             => 67,
+      Key_D             => 68,
+      Key_E             => 69,
+      Key_F             => 70,
+      Key_G             => 71,
+      Key_H             => 72,
+      Key_I             => 73,
+      Key_J             => 74,
+      Key_K             => 75,
+      Key_L             => 76,
+      Key_M             => 77,
+      Key_N             => 78,
+      Key_O             => 79,
+      Key_P             => 80,
+      Key_Q             => 81,
+      Key_R             => 82,
+      Key_S             => 83,
+      Key_T             => 84,
+      Key_U             => 85,
+      Key_V             => 86,
+      Key_W             => 87,
+      Key_X             => 88,
+      Key_Y             => 89,
+      Key_Z             => 90,
+      Key_Left_Bracket  => 91,
+      Key_Backslash     => 92,
+      Key_Right_Bracket => 93,
+      Key_Grave         => 96,
+      Key_Escape        => 256,
+      Key_Enter         => 257,
+      Key_Tab           => 258,
+      Key_Backspace     => 259,
+      Key_Insert        => 260,
+      Key_Delete        => 261,
+      Key_Right         => 262,
+      Key_Left          => 263,
+      Key_Down          => 264,
+      Key_Up            => 265,
+      Key_Page_Up       => 266,
+      Key_Page_Down     => 267,
+      Key_Home          => 268,
+      Key_End           => 269,
+      Key_Caps_Lock     => 280,
+      Key_Scroll_Lock   => 281,
+      Key_Num_Lock      => 282,
+      Key_Print_Screen  => 283,
+      Key_Pause         => 284,
+      Key_F1            => 290,
+      Key_F2            => 291,
+      Key_F3            => 292,
+      Key_F4            => 293,
+      Key_F5            => 294,
+      Key_F6            => 295,
+      Key_F7            => 296,
+      Key_F8            => 297,
+      Key_F9            => 298,
+      Key_F10           => 299,
+      Key_F11           => 300,
+      Key_F12           => 301,
+      Key_Pad_0         => 320,
+      Key_Pad_1         => 321,
+      Key_Pad_2         => 322,
+      Key_Pad_3         => 323,
+      Key_Pad_4         => 324,
+      Key_Pad_5         => 325,
+      Key_Pad_6         => 326,
+      Key_Pad_7         => 327,
+      Key_Pad_8         => 328,
+      Key_Pad_9         => 329,
+      Key_Pad_Decimal   => 330,
+      Key_Pad_Divide    => 331,
+      Key_Pad_Multiply  => 332,
+      Key_Pad_Subtract  => 333,
+      Key_Pad_Add       => 334,
+      Key_Pad_Enter     => 335,
+      Key_Pad_Equal     => 336,
+      Key_Left_Shift    => 340,
+      Key_Left_Control  => 341,
+      Key_Left_Alt      => 342,
+      Key_Left_Super    => 343,
+      Key_Right_Shift   => 344,
+      Key_Right_Control => 345,
+      Key_Right_Alt     => 346,
+      Key_Right_Super   => 347,
+      Key_KB_Menu       => 348
+   );
+
+   type Mouse_Button is (
+      Mouse_Button_Left,
+      Mouse_Button_Right,
+      Mouse_Button_Middle,
+      Mouse_Button_Side,
+      Mouse_Button_Extra,
+      Mouse_Button_Forward,
+      Mouse_Button_Back
+   ) with Convention => C;
+
+   type Mouse_Cursor is (
+      Mouse_Cursor_Default,
+      Mouse_Cursor_Arrow,
+      Mouse_Cursor_Ibeam,
+      Mouse_Cursor_Crosshair,
+      Mouse_Cursor_Pointing_Hand,
+      Mouse_Cursor_Resize_EW,
+      Mouse_Cursor_Resize_NS,
+      Mouse_Cursor_Resize_NWSE,
+      Mouse_Cursor_Resize_NESW,
+      Mouse_Cursor_Resize_All,
+      Mouse_Cursor_Not_Allowed
+   ) with Convention => C;
+
+   type Gamepad_Button is (
+      Gamepad_Button_Unknown,
+      Gamepad_Button_Left_Face_Up,
+      Gamepad_Button_Left_Face_Right,
+      Gamepad_Button_Left_Face_Down,
+      Gamepad_Button_Left_Face_Left,
+      Gamepad_Button_Right_Face_Up,
+      Gamepad_Button_Right_Face_Right,
+      Gamepad_Button_Right_Face_Down,
+      Gamepad_Button_Right_Face_Left,
+      Gamepad_Button_Left_Trigger_1,
+      Gamepad_Button_Left_Trigger_2,
+      Gamepad_Button_Right_Trigger_1,
+      Gamepad_Button_Right_Trigger_2,
+      Gamepad_Button_Middle_Left,
+      Gamepad_Button_Middle,
+      Gamepad_Button_Middle_Right,
+      Gamepad_Button_Left_Thumb,
+      Gamepad_Button_Right_Thumb
+   ) with Convention => C;
+
+   type Gamepad_Axis is (
+      Gamepad_Axis_Left_X,
+      Gamepad_Axis_Left_Y,
+      Gamepad_Axis_Right_X,
+      Gamepad_Axis_Right_Y,
+      Gamepad_Axis_Left_Trigger,
+      Gamepad_Axis_Right_Trigger
+   ) with Convention => C;
+
+   type Material_Map_Index is (
+      Material_Map_Diffuse,
+      Material_Map_Specular,
+      Material_Map_Normal,
+      Material_Map_Roughness,
+      Material_Map_Occlusion,
+      Material_Map_Emission,
+      Material_Map_Height,
+      Material_Map_Cubemap,
+      Material_Map_Irradiance,
+      Material_Map_Prefilter,
+      Material_Map_BRDF
+   ) with Convention => C;
+
+   type Shader_Location_Index is (
+      Shader_Location_Vertex_Position,
+      Shader_Location_Vertex_Texcoord_1,
+      Shader_Location_Vertex_Texcoord_2,
+      Shader_Location_Vertex_Normal,
+      Shader_Location_Vertex_Tangent,
+      Shader_Location_Vertex_Color,
+      Shader_Location_Matrix_MVP,
+      Shader_Location_Matrix_View,
+      Shader_Location_Matrix_Projection,
+      Shader_Location_Matrix_Model,
+      Shader_Location_Matrix_Normal,
+      Shader_Location_Vector_View,
+      Shader_Location_Color_Diffuse,
+      Shader_Location_Color_Specular,
+      Shader_Location_Color_Ambient,
+      Shader_Location_Map_Diffuse,
+      Shader_Location_Map_Specular,
+      Shader_Location_Map_Normal,
+      Shader_Location_Map_Roughness,
+      Shader_Location_Map_Occlusion,
+      Shader_Location_Map_Emission,
+      Shader_Location_Map_Height,
+      Shader_Location_Map_Cubemap,
+      Shader_Location_Map_Irradiance,
+      Shader_Location_Map_Prefilter,
+      Shader_Location_Map_BRDF
+   ) with Convention => C;
+
+   type Shader_Uniform_Data_Type is (
+      Shader_Uniform_FLOAT,
+      Shader_Uniform_VEC2,
+      Shader_Uniform_VEC3,
+      Shader_Uniform_VEC4,
+      Shader_Uniform_INT,
+      Shader_Uniform_IVEC2,
+      Shader_Uniform_IVEC3,
+      Shader_Uniform_IVEC4,
+      Shader_Uniform_SAMPLER2D
+   ) with Convention => C;
+
+   type Shader_Attribute_Data_Type is (
+      Shader_Attribute_FLOAT,
+      Shader_Attribute_VEC2,
+      Shader_Attribute_VEC3,
+      Shader_Attribute_VEC4
+   ) with Convention => C;
+
+   type Pixel_Format is (
+      Pixel_Format_None,
+      Pixel_Format_Uncompressed_Grayscale,
+      Pixel_Format_Uncompressed_Gray_Alpha,
+      Pixel_Format_Uncompressed_R5G6B5,
+      Pixel_Format_Uncompressed_R8G8B8,
+      Pixel_Format_Uncompressed_R5G5B5A1,
+      Pixel_Format_Uncompressed_R4G4B4A4,
+      Pixel_Format_Uncompressed_R8G8B8A8,
+      Pixel_Format_Uncompressed_R32,
+      Pixel_Format_Uncompressed_R32G32B32,
+      Pixel_Format_Uncompressed_R32G32B32A32,
+      Pixel_Format_Uncompressed_R16,
+      Pixel_Format_Uncompressed_R16G16B16,
+      Pixel_Format_Uncompressed_R16G16B16A16,
+      Pixel_Format_Compressed_DXT1_RGB,
+      Pixel_Format_Compressed_DXT1_RGBA,
+      Pixel_Format_Compressed_DXT3_RGBA,
+      Pixel_Format_Compressed_DXT5_RGBA,
+      Pixel_Format_Compressed_ETC1_RGB,
+      Pixel_Format_Compressed_ETC2_RGB,
+      Pixel_Format_Compressed_ETC2_EAC_RGBA,
+      Pixel_Format_Compressed_PVRT_RGB,
+      Pixel_Format_Compressed_PVRT_RGBA,
+      Pixel_Format_Compressed_ASTC_4x4_RGBA,
+      Pixel_Format_Compressed_ASTC_8x8_RGBA
+   ) with Convention => C;
+
+   type Texture_Filter is (
+      Texture_Filter_Point,
+      Texture_Filter_Bilinear,
+      Texture_Filter_Trilinear,
+      Texture_Filter_Anisotropic_x4,
+      Texture_Filter_Anisotropic_x8,
+      Texture_Filter_Anisotropic_x16
+   ) with Convention => C;
+
+   type Texture_Wrap is (
+      Texture_Wrap_Repeat,
+      Texture_Wrap_Clamp,
+      Texture_Wrap_Mirror_Repeat,
+      Texture_Wrap_Mirror_Clamp
+   ) with Convention => C;
+
+   type Cubemap_Layout is (
+      Cubemap_Layout_Auto_Detect,
+      Cubemap_Layout_Line_Vertical,
+      Cubemap_Layout_Line_Horizontal,
+      Cubemap_Layout_Cross_3_By_4,
+      Cubemap_Layout_Cross_4_By_3,
+      Cubemap_Layout_Panorama
+   ) with Convention => C;
+
+   type Font_Type is (
+      Font_Default,
+      Font_Bitmap,
+      Font_SDF
+   ) with Convention => C;
+
+   type Blend_Mode is (
+      Blend_Alpha,
+      Blend_Additive,
+      Blend_Multiplied,
+      Blend_Add_Colors,
+      Blend_Subtract_Colors,
+      Blend_Alpha_Premultiply,
+      Blend_Custom,
+      Blend_Custom_Separate
+   ) with Convention => C;
+
+   type Gesture is (
+      Gesture_None,
+      Gesture_Tap,
+      Gesture_Doubletap,
+      Gesture_Hold,
+      Gesture_Drag,
+      Gesture_Swipe_Right,
+      Gesture_Swipe_Left,
+      Gesture_Swipe_Up,
+      Gesture_Swipe_Down,
+      Gesture_Pinch_In,
+      Gesture_Pinch_Out
+   ) with Convention => C;
+
+   for Gesture use (
+      Gesture_None        => 0,
+      Gesture_Tap         => 1,
+      Gesture_Doubletap   => 2,
+      Gesture_Hold        => 4,
+      Gesture_Drag        => 8,
+      Gesture_Swipe_Right => 16,
+      Gesture_Swipe_Left  => 32,
+      Gesture_Swipe_Up    => 64,
+      Gesture_Swipe_Down  => 128,
+      Gesture_Pinch_In    => 256,
+      Gesture_Pinch_Out   => 512
+   );
+
+   type Camera_Mode is (
+      Camera_Custom,
+      Camera_Free,
+      Camera_Orbital,
+      Camera_First_Person,
+      Camera_Third_Person
+   ) with Convention => C;
+
+   type Camera_Projection is (
+      Camera_Perspective,
+      Camera_Orthographic
+   ) with Convention => C;
+
+   type NPatch_Layout is (
+      NPatch_Nine_Patch,
+      NPatch_Three_Patch_Vertical,
+      NPatch_Three_Patch_Horizontal
+   ) with Convention => C;
 
 ------------------------------------------------------------------------
 
-       type Color_Range is range 0 .. 2**8  - 1;
-       type Index_Range is range 0 .. 2**16 - 1;
-
-       for Color_Range'Size use 8;
-       for Index_Range'Size use 16;
-
-       type Pointer is access all System.Address;
-
-       type Vector_2D is record
-               X : Float := 0.0;
-               Y : Float := 0.0;
-       end record with Convention => C_Pass_By_Copy;
-
-       type Vector_3D is record
-               X : Float := 0.0;
-               Y : Float := 0.0;
-               Z : Float := 0.0;
-       end record with Convention => C_Pass_By_Copy;
-
-       type Vector_4D is record
-               X : Float := 0.0;
-               Y : Float := 0.0;
-               Z : Float := 0.0;
-               W : Float := 0.0;
-       end record with Convention => C_Pass_By_Copy;
-
-       type Quaternion is new Vector_4D;
-
-       type Matrix_4D is record
-               M00 : Float := 1.0;
-               M10 : Float := 0.0;
-               M20 : Float := 0.0;
-               M30 : Float := 0.0;
-               M01 : Float := 0.0;
-               M11 : Float := 1.0;
-               M21 : Float := 0.0;
-               M31 : Float := 0.0;
-               M02 : Float := 0.0;
-               M12 : Float := 0.0;
-               M22 : Float := 1.0;
-               M32 : Float := 0.0;
-               M03 : Float := 0.0;
-               M13 : Float := 0.0;
-               M23 : Float := 0.0;
-               M33 : Float := 1.0;
-       end record with Convention => C_Pass_By_Copy;
-
-       Id_Matrix : Matrix_4D;
-
-       type Color is record
-               R : Color_Range := 255;
-               G : Color_Range := 255;
-               B : Color_Range := 255;
-               A : Color_Range := 255;
-       end record with Convention => C_Pass_By_Copy;
-
-       No_Color : Color;
-
-       type Rectangle is record
-               X      : Float := 0.0;
-               Y      : Float := 0.0;
-               Width  : Float := 0.0;
-               Height : Float := 0.0;
-       end record with Convention => C_Pass_By_Copy;
-
-       No_Rectangle : Rectangle;
-
-       type Image is record
-               Data    : Pointer      := null;
-               Width   : Integer      := 0;
-               Height  : Integer      := 0;
-               Mipmaps : Integer      := 1;
-               Format  : Pixel_Format := Pixel_Format_None;
-       end record with Convention => C_Pass_By_Copy;
-
-       No_Image : Image;
-
-       type Texture is record
-               Id      : Natural      := 0;
-               Width   : Integer      := 0;
-               Height  : Integer      := 0;
-               Mipmaps : Integer      := 1;
-               Format  : Pixel_Format := Pixel_Format_None;
-       end record with Convention => C_Pass_By_Copy;
-
-       No_Texture : Texture;
-
-       type Render_Texture is record
-               Id    : Natural := 0;
-               Data  : Texture := No_Texture;
-               Depth : Texture := No_Texture;
-       end record with Convention => C_Pass_By_Copy;
-
-       No_Render_Texture : Render_Texture;
-
-       type NPatch_Info is record
-               Source : Rectangle     := No_Rectangle;
-               Left   : Integer       := 0;
-               Top    : Integer       := 0;
-               Right  : Integer       := 0;
-               Bottom : Integer       := 0;
-               Layout : NPatch_Layout := NPatch_Nine_Patch;
-       end record with Convention => C_Pass_By_Copy;
-
-       type Glyph_Info is record
-               Value     : Integer := 0;
-               Offset_X  : Integer := 0;
-               Offset_Y  : Integer := 0;
-               Advance_X : Integer := 0;
-               Data      : Image   := No_Image;
-       end record with Convention => C_Pass_By_Copy;
-
-       type Font is record
-               Base_Size     :        Integer    := 0;
-               Glyph_Count   :        Integer    := 0;
-               Glyph_Padding :        Integer    := 0;
-               Data          :        Texture    := No_Texture;
-               Rectangles    : access Rectangle  := null;
-               Glyphs        : access Glyph_Info := null;
-       end record with Convention => C_Pass_By_Copy;
-
-       No_Font : Font;
-
-       type Camera_3D is record
-               Position      : Vector_3D         := (0.0, 0.0, 0.0);
-               Target        : Vector_3D         := (0.0, 0.0, 0.0);
-               Up            : Vector_3D         := (0.0, 0.0, 0.0);
-               Field_Of_View : Float             := 0.0;
-               Projection    : Camera_Projection := Camera_Perspective;
-       end record with Convention => C_Pass_By_Copy;
-
-       No_Camera_3D : Camera_3D;
-
-       type Camera_2D is record
-               Offset   : Vector_2D := (0.0, 0.0);
-               Target   : Vector_2D := (0.0, 0.0);
-               Rotation : Float     := 0.0;
-               Zoom     : Float     := 0.0;
-       end record with Convention => C_Pass_By_Copy;
-
-       No_Camera_2D : Camera_2D;
-
-       type Mesh is record
-               Vertex_Count          :        Integer     := 0;
-               Triangle_Count        :        Integer     := 0;
-               Vertices              : access Float       := null;
-               Texture_Coordinates   : access Float       := null;
-               Texture_Coordinates_2 : access Float       := null;
-               Normals               : access Float       := null;
-               Tangents              : access Float       := null;
-               Colors                : access Color_Range := null;
-               Indices               : access Index_Range := null;
-               Animation_Vertices    : access Float       := null;
-               Animation_Normals     : access Float       := null;
-               Bone_Ids              : access Color_Range := null;
-               Bone_Weights          : access Float       := null;
-               VAO_Id                :        Natural     := 0;
-               VBO_Id                : access Natural     := null;
-       end record with Convention => C_Pass_By_Copy;
-
-       No_Mesh : Mesh;
-
-       type Shader is record
-               Id        :        Natural := 0;
-               Locations : access Integer := null;
-       end record with Convention => C_Pass_By_Copy;
-
-       No_Shader : Shader;
-
-       type Material_Map is record
-               Data  : Texture := No_Texture;
-               Tint  : Color   := No_Color;
-               Value : Float   := 0.0;
-       end record with Convention => C_Pass_By_Copy;
-
-       No_Material_Map : Material_Map;
-
-       type Float_Array_4        is array (0 .. 3) of Float;
-       type Material_Map_Array_4 is array (0 .. 3) of Material_Map;
-       type Material_Map_Array   is array (Natural range <>) of Material_Map;
-
-       type Material is record
-               Data      :        Shader             := No_Shader;
-               Maps      : access Material_Map_Array := null;
-               Parameter :        Float_Array_4      := (0.0, 0.0, 0.0, 1.0);
-       end record with Convention => C_Pass_By_Copy;
-
-       No_Material : Material;
-
-       type Transform is record
-               Translation : Vector_3D := (0.0, 0.0, 0.0);
-               Rotation    : Vector_4D := (0.0, 0.0, 0.0, 0.0);
-               Scale       : Vector_3D := (0.0, 0.0, 0.0);
-       end record with Convention => C_Pass_By_Copy;
-
-       type Character_Array_32 is array (0 .. 31) of Character;
-
-       Empty : Character_Array_32 := (others => Character'Val (0));
-
-       type Bone_Info is record
-               Name   : Character_Array_32 := Empty;
-               Parent : Integer            := 0;
-       end record with Convention => C_Pass_By_Copy;
-
-       No_Bone_Info : Bone_Info;
-
-       type Material_Array_4 is array (0 .. 3) of Material;
-       type Material_Array is array (Natural range <>) of Material;
-
-       type Model is record
-               Transform      :        Matrix_4D      := Id_Matrix;
-               Mesh_Count     :        Integer        := 0;
-               Material_Count :        Integer        := 0;
-               Meshes         : access Mesh           := null;
-               Materials      : access Material_Array := null;
-               Mesh_Materials : access Integer        := null;
-               Bone_Count     :        Integer        := 0;
-               Bones          : access Bone_Info      := null;
-               --~Bind_Post      : access Transform      := null; ERROR
-       end record with Convention => C_Pass_By_Copy;
-
-       No_Model : Model;
-
-       type Model_Animation is record
-               Bone_Count  :        Integer            := 0;
-               Frame_Count :        Integer            := 0;
-               Bones       : access Bone_Info          := null;
-               Frame_Poses : access Transform          := null;
-               Name        :        Character_Array_32 := Empty;
-       end record with Convention => C_Pass_By_Copy;
-
-       No_Model_Animation : Model_Animation;
-
-       type Ray is record
-               Position  : Vector_3D := (0.0, 0.0, 0.0);
-               Direction : Vector_3D := (0.0, 0.0, 0.0);
-       end record with Convention => C_Pass_By_Copy;
-
-       No_Ray : Ray;
-
-       type Ray_Collision is record
-               Hit      : Logical   := False;
-               Distance : Float     := 0.0;
-               Point    : Vector_3D := (0.0, 0.0, 0.0);
-               Normal   : Vector_3D := (0.0, 0.0, 0.0);
-       end record with Convention => C_Pass_By_Copy;
-
-       No_Ray_Collision : Ray_Collision;
-
-       type Bounding_Box is record
-               Min : Vector_3D := (0.0, 0.0, 0.0);
-               Max : Vector_3D := (0.0, 0.0, 0.0);
-       end record with Convention => C_Pass_By_Copy;
-
-       No_Bounding_Box : Bounding_Box;
-
-       type Wave is record
-               Frame_Count : Natural := 0;
-               Sample_Rate : Natural := 0;
-               Sample_Size : Natural := 0;
-               Channels    : Natural := 0;
-               Data        : Pointer := null;
-       end record with Convention => C_Pass_By_Copy;
-
-       No_Wave : Wave;
-
-       type Audio_Stream is record
-               Buffer      : Pointer := null;
-               Processor   : Pointer := null;
-               Sample_Rate : Natural := 0;
-               Sample_Size : Natural := 0;
-               Channels    : Natural := 0;
-       end record with Convention => C_Pass_By_Copy;
-
-       No_Audio_Stream : Audio_Stream;
-
-       type Sound is record
-               Stream      : Audio_Stream := No_Audio_Stream;
-               Frame_Count : Natural      := 0;
-       end record with Convention => C_Pass_By_Copy;
-
-       No_Sound : Sound;
-
-       type Music is record
-               Stream       : Audio_Stream := No_Audio_Stream;
-               Frame_Count  : Natural      := 0;
-               Looping      : Logical      := False;
-               Context_Type : Integer      := 0;
-               Context_Data : Pointer      := null;
-       end record with Convention => C_Pass_By_Copy;
-
-       No_Music : Music;
-
-       type VR_Device_Info is record
-               Horizontal_Resoultion        : Integer       := 0;
-               Vertical_Resoultion          : Integer       := 0;
-               Horizontal_Screen_Size       : Float         := 0.0;
-               Vertical_Screen_Size         : Float         := 0.0;
-               Vertical_Screen_Center       : Float         := 0.0;
-               Eye_To_Screen_Distance       : Float         := 0.0;
-               Lens_Separate_Distance       : Float         := 0.0;
-               Interpupillary_Distance      : Float         := 0.0;
-               Lens_Distortion_Values       : Float_Array_4 := (0.0, 0.0, 0.0, 0.0);
-               Chroma_Abberation_Correction : Float_Array_4 := (0.0, 0.0, 0.0, 0.0);
-       end record with Convention => C_Pass_By_Copy;
-
-       No_VR_Device_Info : VR_Device_Info;
-
-       type Matrix_4D_Array_2 is array (0 .. 1) of Matrix_4D;
-       type Float_Array_2     is array (0 .. 1) of Float;
-
-       type VR_Stereo_Config is record
-               Projection          : Matrix_4D_Array_2 := (Id_Matrix, Id_Matrix);
-               View_Offset         : Matrix_4D_Array_2 := (Id_Matrix, Id_Matrix);
-               Left_Lens_Center    : Float_Array_2     := (0.0, 0.0);
-               Right_Lens_Center   : Float_Array_2     := (0.0, 0.0);
-               Left_Screen_Center  : Float_Array_2     := (0.0, 0.0);
-               Right_Screen_Center : Float_Array_2     := (0.0, 0.0);
-               Scale               : Float_Array_2     := (0.0, 0.0);
-               Scale_In            : Float_Array_2     := (0.0, 0.0);
-       end record with Convention => C_Pass_By_Copy;
-
-       No_VR_Stereo_Config : VR_Stereo_Config;
-
-       type File_Path_List is record
-               Capacity : Natural := 0;
-               Count    : Natural := 0;
-               Paths    : Pointer := null;
-       end record with Convention => C_Pass_By_Copy;
-
-       type Integer_Array_4 is array (0 .. 3) of Integer;
-
-       type Automation_Event is record
-               Frame      : Natural         := 0;
-               Kind       : Natural         := 0;
-               Parameters : Integer_Array_4 := (0, 0, 0, 0);
-       end record with Convention => C_Pass_By_Copy;
-
-       type Automation_Event_List is record
-               Capacity :        Natural          := 0;
-               Count    :        Natural          := 0;
-               Events   : access Automation_Event := null;
-       end record with Convention => C_Pass_By_Copy;
+   type Color_Range is range 0 .. 2**8  - 1;
+   type Index_Range is range 0 .. 2**16 - 1;
+
+   for Color_Range'Size use 8;
+   for Index_Range'Size use 16;
+
+   type Pointer is access all System.Address;
+
+   type Vector_2D is record
+      X : Float := 0.0;
+      Y : Float := 0.0;
+   end record with Convention => C_Pass_By_Copy;
+
+   type Vector_3D is record
+      X : Float := 0.0;
+      Y : Float := 0.0;
+      Z : Float := 0.0;
+   end record with Convention => C_Pass_By_Copy;
+
+   type Vector_4D is record
+      X : Float := 0.0;
+      Y : Float := 0.0;
+      Z : Float := 0.0;
+      W : Float := 0.0;
+   end record with Convention => C_Pass_By_Copy;
+
+   type Quaternion is new Vector_4D;
+
+   type Matrix_4D is record
+      M00 : Float := 1.0;
+      M10 : Float := 0.0;
+      M20 : Float := 0.0;
+      M30 : Float := 0.0;
+      M01 : Float := 0.0;
+      M11 : Float := 1.0;
+      M21 : Float := 0.0;
+      M31 : Float := 0.0;
+      M02 : Float := 0.0;
+      M12 : Float := 0.0;
+      M22 : Float := 1.0;
+      M32 : Float := 0.0;
+      M03 : Float := 0.0;
+      M13 : Float := 0.0;
+      M23 : Float := 0.0;
+      M33 : Float := 1.0;
+   end record with Convention => C_Pass_By_Copy;
+
+   Id_Matrix : Matrix_4D;
+
+   type Color is record
+      R : Color_Range := 255;
+      G : Color_Range := 255;
+      B : Color_Range := 255;
+      A : Color_Range := 255;
+   end record with Convention => C_Pass_By_Copy;
+
+   No_Color : Color;
+
+   type Rectangle is record
+      X      : Float := 0.0;
+      Y      : Float := 0.0;
+      Width  : Float := 0.0;
+      Height : Float := 0.0;
+   end record with Convention => C_Pass_By_Copy;
+
+   No_Rectangle : Rectangle;
+
+   type Image is record
+      Data    : Pointer      := null;
+      Width   : Integer      := 0;
+      Height  : Integer      := 0;
+      Mipmaps : Integer      := 1;
+      Format  : Pixel_Format := Pixel_Format_None;
+   end record with Convention => C_Pass_By_Copy;
+
+   No_Image : Image;
+
+   type Texture is record
+      Id      : Natural      := 0;
+      Width   : Integer      := 0;
+      Height  : Integer      := 0;
+      Mipmaps : Integer      := 1;
+      Format  : Pixel_Format := Pixel_Format_None;
+   end record with Convention => C_Pass_By_Copy;
+
+   No_Texture : Texture;
+
+   type Render_Texture is record
+      Id    : Natural := 0;
+      Data  : Texture := No_Texture;
+      Depth : Texture := No_Texture;
+   end record with Convention => C_Pass_By_Copy;
+
+   No_Render_Texture : Render_Texture;
+
+   type NPatch_Info is record
+      Source : Rectangle     := No_Rectangle;
+      Left   : Integer       := 0;
+      Top    : Integer       := 0;
+      Right  : Integer       := 0;
+      Bottom : Integer       := 0;
+      Layout : NPatch_Layout := NPatch_Nine_Patch;
+   end record with Convention => C_Pass_By_Copy;
+
+   type Glyph_Info is record
+      Value     : Integer := 0;
+      Offset_X  : Integer := 0;
+      Offset_Y  : Integer := 0;
+      Advance_X : Integer := 0;
+      Data      : Image   := No_Image;
+   end record with Convention => C_Pass_By_Copy;
+
+   type Font is record
+      Base_Size     :        Integer    := 0;
+      Glyph_Count   :        Integer    := 0;
+      Glyph_Padding :        Integer    := 0;
+      Data          :        Texture    := No_Texture;
+      Rectangles    : access Rectangle  := null;
+      Glyphs        : access Glyph_Info := null;
+   end record with Convention => C_Pass_By_Copy;
+
+   No_Font : Font;
+
+   type Camera_3D is record
+      Position      : Vector_3D         := (0.0, 0.0, 0.0);
+      Target        : Vector_3D         := (0.0, 0.0, 0.0);
+      Up            : Vector_3D         := (0.0, 0.0, 0.0);
+      Field_Of_View : Float             := 0.0;
+      Projection    : Camera_Projection := Camera_Perspective;
+   end record with Convention => C_Pass_By_Copy;
+
+   No_Camera_3D : Camera_3D;
+
+   type Camera_2D is record
+      Offset   : Vector_2D := (0.0, 0.0);
+      Target   : Vector_2D := (0.0, 0.0);
+      Rotation : Float     := 0.0;
+      Zoom     : Float     := 0.0;
+   end record with Convention => C_Pass_By_Copy;
+
+   No_Camera_2D : Camera_2D;
+
+   type Mesh is record
+      Vertex_Count          :        Integer     := 0;
+      Triangle_Count        :        Integer     := 0;
+      Vertices              : access Float       := null;
+      Texture_Coordinates   : access Float       := null;
+      Texture_Coordinates_2 : access Float       := null;
+      Normals               : access Float       := null;
+      Tangents              : access Float       := null;
+      Colors                : access Color_Range := null;
+      Indices               : access Index_Range := null;
+      Animation_Vertices    : access Float       := null;
+      Animation_Normals     : access Float       := null;
+      Bone_Ids              : access Color_Range := null;
+      Bone_Weights          : access Float       := null;
+      VAO_Id                :        Natural     := 0;
+      VBO_Id                : access Natural     := null;
+   end record with Convention => C_Pass_By_Copy;
+
+   No_Mesh : Mesh;
+
+   type Shader is record
+      Id        :        Natural := 0;
+      Locations : access Integer := null;
+   end record with Convention => C_Pass_By_Copy;
+
+   No_Shader : Shader;
+
+   type Material_Map is record
+      Data  : Texture := No_Texture;
+      Tint  : Color   := No_Color;
+      Value : Float   := 0.0;
+   end record with Convention => C_Pass_By_Copy;
+
+   No_Material_Map : Material_Map;
+
+   type Float_Array_4        is array (0 .. 3) of Float;
+   type Material_Map_Array_4 is array (0 .. 3) of Material_Map;
+   type Material_Map_Array   is array (Natural range <>) of Material_Map;
+
+   type Material is record
+      Data      :        Shader             := No_Shader;
+      Maps      : access Material_Map_Array := null;
+      Parameter :        Float_Array_4      := (0.0, 0.0, 0.0, 1.0);
+   end record with Convention => C_Pass_By_Copy;
+
+   No_Material : Material;
+
+   type Transform is record
+      Translation : Vector_3D := (0.0, 0.0, 0.0);
+      Rotation    : Vector_4D := (0.0, 0.0, 0.0, 0.0);
+      Scale       : Vector_3D := (0.0, 0.0, 0.0);
+   end record with Convention => C_Pass_By_Copy;
+
+   type Character_Array_32 is array (0 .. 31) of Character;
+
+   Empty : Character_Array_32 := (others => Character'Val (0));
+
+   type Bone_Info is record
+      Name   : Character_Array_32 := Empty;
+      Parent : Integer            := 0;
+   end record with Convention => C_Pass_By_Copy;
+
+   No_Bone_Info : Bone_Info;
+
+   type Material_Array_4 is array (0 .. 3) of Material;
+   type Material_Array is array (Natural range <>) of Material;
+
+   type Model is record
+      Transform      :        Matrix_4D      := Id_Matrix;
+      Mesh_Count     :        Integer        := 0;
+      Material_Count :        Integer        := 0;
+      Meshes         : access Mesh           := null;
+      Materials      : access Material_Array := null;
+      Mesh_Materials : access Integer        := null;
+      Bone_Count     :        Integer        := 0;
+      Bones          : access Bone_Info      := null;
+      --~Bind_Post      : access Transform      := null; ERROR
+   end record with Convention => C_Pass_By_Copy;
+
+   No_Model : Model;
+
+   type Model_Animation is record
+      Bone_Count  :        Integer            := 0;
+      Frame_Count :        Integer            := 0;
+      Bones       : access Bone_Info          := null;
+      Frame_Poses : access Transform          := null;
+      Name        :        Character_Array_32 := Empty;
+   end record with Convention => C_Pass_By_Copy;
+
+   No_Model_Animation : Model_Animation;
+
+   type Ray is record
+      Position  : Vector_3D := (0.0, 0.0, 0.0);
+      Direction : Vector_3D := (0.0, 0.0, 0.0);
+   end record with Convention => C_Pass_By_Copy;
+
+   No_Ray : Ray;
+
+   type Ray_Collision is record
+      Hit      : Logical   := False;
+      Distance : Float     := 0.0;
+      Point    : Vector_3D := (0.0, 0.0, 0.0);
+      Normal   : Vector_3D := (0.0, 0.0, 0.0);
+   end record with Convention => C_Pass_By_Copy;
+
+   No_Ray_Collision : Ray_Collision;
+
+   type Bounding_Box is record
+      Min : Vector_3D := (0.0, 0.0, 0.0);
+      Max : Vector_3D := (0.0, 0.0, 0.0);
+   end record with Convention => C_Pass_By_Copy;
+
+   No_Bounding_Box : Bounding_Box;
+
+   type Wave is record
+      Frame_Count : Natural := 0;
+      Sample_Rate : Natural := 0;
+      Sample_Size : Natural := 0;
+      Channels    : Natural := 0;
+      Data        : Pointer := null;
+   end record with Convention => C_Pass_By_Copy;
+
+   No_Wave : Wave;
+
+   type Audio_Stream is record
+      Buffer      : Pointer := null;
+      Processor   : Pointer := null;
+      Sample_Rate : Natural := 0;
+      Sample_Size : Natural := 0;
+      Channels    : Natural := 0;
+   end record with Convention => C_Pass_By_Copy;
+
+   No_Audio_Stream : Audio_Stream;
+
+   type Sound is record
+      Stream      : Audio_Stream := No_Audio_Stream;
+      Frame_Count : Natural      := 0;
+   end record with Convention => C_Pass_By_Copy;
+
+   No_Sound : Sound;
+
+   type Music is record
+      Stream       : Audio_Stream := No_Audio_Stream;
+      Frame_Count  : Natural      := 0;
+      Looping      : Logical      := False;
+      Context_Type : Integer      := 0;
+      Context_Data : Pointer      := null;
+   end record with Convention => C_Pass_By_Copy;
+
+   No_Music : Music;
+
+   type VR_Device_Info is record
+      Horizontal_Resoultion        : Integer       := 0;
+      Vertical_Resoultion          : Integer       := 0;
+      Horizontal_Screen_Size       : Float         := 0.0;
+      Vertical_Screen_Size         : Float         := 0.0;
+      Vertical_Screen_Center       : Float         := 0.0;
+      Eye_To_Screen_Distance       : Float         := 0.0;
+      Lens_Separate_Distance       : Float         := 0.0;
+      Interpupillary_Distance      : Float         := 0.0;
+      Lens_Distortion_Values       : Float_Array_4 := (0.0, 0.0, 0.0, 0.0);
+      Chroma_Abberation_Correction : Float_Array_4 := (0.0, 0.0, 0.0, 0.0);
+   end record with Convention => C_Pass_By_Copy;
+
+   No_VR_Device_Info : VR_Device_Info;
+
+   type Matrix_4D_Array_2 is array (0 .. 1) of Matrix_4D;
+   type Float_Array_2     is array (0 .. 1) of Float;
+
+   type VR_Stereo_Config is record
+      Projection          : Matrix_4D_Array_2 := (Id_Matrix, Id_Matrix);
+      View_Offset         : Matrix_4D_Array_2 := (Id_Matrix, Id_Matrix);
+      Left_Lens_Center    : Float_Array_2     := (0.0, 0.0);
+      Right_Lens_Center   : Float_Array_2     := (0.0, 0.0);
+      Left_Screen_Center  : Float_Array_2     := (0.0, 0.0);
+      Right_Screen_Center : Float_Array_2     := (0.0, 0.0);
+      Scale               : Float_Array_2     := (0.0, 0.0);
+      Scale_In            : Float_Array_2     := (0.0, 0.0);
+   end record with Convention => C_Pass_By_Copy;
+
+   No_VR_Stereo_Config : VR_Stereo_Config;
+
+   type File_Path_List is record
+      Capacity : Natural := 0;
+      Count    : Natural := 0;
+      Paths    : Pointer := null;
+   end record with Convention => C_Pass_By_Copy;
+
+   type Integer_Array_4 is array (0 .. 3) of Integer;
+
+   type Automation_Event is record
+      Frame      : Natural         := 0;
+      Kind       : Natural         := 0;
+      Parameters : Integer_Array_4 := (0, 0, 0, 0);
+   end record with Convention => C_Pass_By_Copy;
+
+   type Automation_Event_List is record
+      Capacity :        Natural          := 0;
+      Count    :        Natural          := 0;
+      Events   : access Automation_Event := null;
+   end record with Convention => C_Pass_By_Copy;
 
 ------------------------------------------------------------------------
 
-       Version_Major :         constant Integer := 5;
-       Version_Minor :         constant Integer := 1;
-       Version_Patch :         constant Integer := 0;
-       Version       : aliased constant String  := "5.1-dev";
-
-       Pi               : constant Float := 3.14159265358979323846;
-       Tau              : constant Float := 2.0 * Pi;
-       Degree_To_Radius : constant Float := Pi / 180.0;
-       Radius_To_Degree : constant Float := 180.0 / Pi;
-
-       Light_Gray  : constant Color := (200, 200, 200, 255);
-       Gray        : constant Color := (130, 130, 130, 255);
-       Dark_Gray   : constant Color := (80,  80,  80,  255);
-       Yellow      : constant Color := (253, 249, 0,   255);
-       Gold        : constant Color := (255, 203, 0,   255);
-       Orange      : constant Color := (255, 161, 0,   255);
-       Pink        : constant Color := (255, 109, 194, 255);
-       Red         : constant Color := (230, 41,  55,  255);
-       Maroon      : constant Color := (190, 33,  55,  255);
-       Green       : constant Color := (0,   228, 48,  255);
-       Lime        : constant Color := (0,   158, 47,  255);
-       Dark_Green  : constant Color := (0,   117, 44,  255);
-       Sky_Blue    : constant Color := (102, 191, 255, 255);
-       Blue        : constant Color := (0,   121, 241, 255);
-       Dark_Blue   : constant Color := (0,   82,  172, 255);
-       Purple      : constant Color := (200, 122, 255, 255);
-       Violet      : constant Color := (135, 60,  190, 255);
-       Dark_Purple : constant Color := (112, 31,  126, 255);
-       Beige       : constant Color := (211, 176, 131, 255);
-       Brown       : constant Color := (127, 106, 79,  255);
-       Dark_Brown  : constant Color := (76,  63,  47,  255);
-       White       : constant Color := (255, 255, 255, 255);
-       Black       : constant Color := (0,   0,   0,   255);
-       Blank       : constant Color := (0,   0,   0,   0  );
-       Magenta     : constant Color := (255, 0,   255, 255);
-       Ray_White   : constant Color := (245, 245, 245, 255);
+   Version_Major :         constant Integer := 5;
+   Version_Minor :         constant Integer := 1;
+   Version_Patch :         constant Integer := 0;
+   Version       : aliased constant String  := "5.1-dev";
+
+   Pi               : constant Float := 3.14159265358979323846;
+   Tau              : constant Float := 2.0 * Pi;
+   Degree_To_Radius : constant Float := Pi / 180.0;
+   Radius_To_Degree : constant Float := 180.0 / Pi;
+
+   Light_Gray  : constant Color := (200, 200, 200, 255);
+   Gray        : constant Color := (130, 130, 130, 255);
+   Dark_Gray   : constant Color := (80,  80,  80,  255);
+   Yellow      : constant Color := (253, 249, 0,   255);
+   Gold        : constant Color := (255, 203, 0,   255);
+   Orange      : constant Color := (255, 161, 0,   255);
+   Pink        : constant Color := (255, 109, 194, 255);
+   Red         : constant Color := (230, 41,  55,  255);
+   Maroon      : constant Color := (190, 33,  55,  255);
+   Green       : constant Color := (0,   228, 48,  255);
+   Lime        : constant Color := (0,   158, 47,  255);
+   Dark_Green  : constant Color := (0,   117, 44,  255);
+   Sky_Blue    : constant Color := (102, 191, 255, 255);
+   Blue        : constant Color := (0,   121, 241, 255);
+   Dark_Blue   : constant Color := (0,   82,  172, 255);
+   Purple      : constant Color := (200, 122, 255, 255);
+   Violet      : constant Color := (135, 60,  190, 255);
+   Dark_Purple : constant Color := (112, 31,  126, 255);
+   Beige       : constant Color := (211, 176, 131, 255);
+   Brown       : constant Color := (127, 106, 79,  255);
+   Dark_Brown  : constant Color := (76,  63,  47,  255);
+   White       : constant Color := (255, 255, 255, 255);
+   Black       : constant Color := (0,   0,   0,   255);
+   Blank       : constant Color := (0,   0,   0,   0  );
+   Magenta     : constant Color := (255, 0,   255, 255);
+   Ray_White   : constant Color := (245, 245, 245, 255);
 
 ------------------------------------------------------------------------
 
-       procedure Open_Window (
-               Width  : Integer := 640;
-               Height : Integer := 480;
-               Title  : String  := ""
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "InitWindow";
-
-       procedure Close_Window with
-               Import        => True,
-               Convention    => C,
-               External_Name => "CloseWindow";
-
-       function Window_Should_Close return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "WindowShouldClose";
-
-       function Is_Window_Ready return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsWindowReady";
-
-       function Is_Window_Fullscreen return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsWindowFullscreen";
-
-       function Is_Window_Hidden return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsWindowHidden";
-
-       function Is_Window_Minimized return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsWindowMinimized";
-
-       function Is_Window_Maximized return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsWindowMaximized";
-
-       function Is_Window_Focused return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsWindowFocused";
-
-       function Is_Window_Resized return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsWindowResized";
-
-       function Is_Window_State (
-               Flags : Natural := 0
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsWindowState";
-
-       procedure Set_Window_State (
-               Flags : Natural := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetWindowState";
-
-       procedure Clear_Window_State (
-               Flags : Natural := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "ClearWindowState";
-
-       procedure Toggle_Fullscreen with
-               Import        => True,
-               Convention    => C,
-               External_Name => "ToggleFullscreen";
-
-       procedure Toggle_Borderless_Windowed with
-               Import        => True,
-               Convention    => C,
-               External_Name => "ToggleBorderlessWindowed";
-
-       procedure Maximize_Window with
-               Import        => True,
-               Convention    => C,
-               External_Name => "MaximizeWindow";
-
-       procedure Minimize_Window with
-               Import        => True,
-               Convention    => C,
-               External_Name => "MinimizeWindow";
-
-       procedure Restore_Window with
-               Import        => True,
-               Convention    => C,
-               External_Name => "RestoreWindow";
-
-       procedure Set_Window_Icon (
-               Icon : Image := No_Image
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetWindowIcon";
-
-       procedure Set_Window_Icons (
-               Icons : access Image   := null;
-               Count :        Integer := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetWindowIcons";
-
-       procedure Set_Window_Title (
-               Title : String := ""
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetWindowTitle";
-
-       procedure Set_Window_Position (
-               X : Integer := 0;
-               Y : Integer := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetWindowPosition";
-
-       procedure Set_Window_Monitor (
-               Monitor : Integer := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetWindowMonitor";
-
-       procedure Set_Window_Min_Size (
-               Width  : Integer := 0;
-               Height : Integer := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetWindowMinSize";
-
-       procedure Set_Window_Max_Size (
-               Width  : Integer := 0;
-               Height : Integer := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetWindowMaxSize";
-
-       procedure Set_Window_Size (
-               Width  : Integer := 0;
-               Height : Integer := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetWindowSize";
-
-       procedure Set_WindowZ_Opacity (
-               Opacity : Float := 0.0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetWindowOpacity";
-
-       procedure Set_Window_Focused with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetWindowFocused";
-
-       function Get_Window_Handle return Pointer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetWindowHandle";
-
-       function Get_Screen_Width return Integer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetScreenWidth";
-
-       function Get_Screen_Height return Integer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetScreenHeight";
-
-       function Get_Render_Width return Integer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetRenderWidth";
-
-       function Get_Render_Height return Integer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetRenderHeight";
-
-       function Get_Monitor_Count return Integer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetMonitorCount";
-
-       function Get_Current_Monitor return Integer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetCurrentMonitor";
-
-       function Get_Monitor_Position (
-               Monitor : Integer := 0
-       ) return Vector_2D with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetMonitorPosition";
-
-       function Get_Monitor_Width (
-               Monitor : Integer := 0
-       ) return Integer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetMonitorWidth";
-
-       function Get_Monitor_Height (
-               Monitor : Integer := 0
-       ) return Integer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetMonitorHeight";
-
-       function Get_Monitor_Physical_Width (
-               Monitor : Integer := 0
-       ) return Integer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetMonitorPhysicalWidth";
-
-       function Get_Monitor_Physical_Height (
-               Monitor : Integer := 0
-       ) return Integer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetMonitorPhysicalHeight";
-
-       function Get_Monitor_Refresh_Rate (
-               Monitor : Integer := 0
-       ) return Integer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetMonitorRefreshRate";
-
-       function Get_Window_Position return Vector_2D with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetWindowPosition";
-
-       function Get_Window_Scale_DPI return Vector_2D with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetWindowScaleDPI";
-
-       function Get_Monitor_Name (
-               Monitor : Integer := 0
-       ) return Pointer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetMonitorName";
-
-       procedure Set_Clipboard_Text (
-               Text : String := ""
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetClipboardText";
-
-       function Get_Clipboard_Text return Pointer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetClipboardText";
-
-       procedure Enable_Event_Waiting with
-               Import        => True,
-               Convention    => C,
-               External_Name => "EnableEventWaiting";
-
-       procedure Disable_Event_Waiting with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DisableEventWaiting";
-
-       procedure Show_Cursor with
-               Import        => True,
-               Convention    => C,
-               External_Name => "ShowCursor";
-
-       procedure Hide_Cursor with
-               Import        => True,
-               Convention    => C,
-               External_Name => "HideCursor";
-
-       function Is_Cursor_Hidden return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsCursorHidden";
-
-       procedure Enable_Cursor with
-               Import        => True,
-               Convention    => C,
-               External_Name => "EnableCursor";
-
-       procedure Disable_Cursor with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DisableCursor";
-
-       function Is_Cursor_On_Screen return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsCursorOnScreen";
-
-       procedure Clear_Background (
-               Tint : Color := Ray_White
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "ClearBackground";
-
-       procedure Begin_Drawing with
-               Import        => True,
-               Convention    => C,
-               External_Name => "BeginDrawing";
-
-       procedure End_Drawing with
-               Import        => True,
-               Convention    => C,
-               External_Name => "EndDrawing";
-
-       procedure Begin_Mode_2D (
-               Camera : Camera_2D
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "BeginMode2D";
-
-       procedure End_Mode_2D with
-               Import        => True,
-               Convention    => C,
-               External_Name => "EndMode2D";
-
-       procedure Begin_Mode_3D (
-               Camera : Camera_3D
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "BeginMode3D";
-
-       procedure End_Mode_3D with
-               Import        => True,
-               Convention    => C,
-               External_Name => "EndMode3D";
-
-       procedure Begin_Texture_Mode (
-               Data : Render_Texture := No_Render_Texture
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "BeginTextureMode";
-
-       procedure End_Texture_Mode with
-               Import        => True,
-               Convention    => C,
-               External_Name => "EndTextureMode";
-
-       procedure Begin_Shader_Mode (
-               Data : Shader := No_Shader
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "BeginShaderMode";
-
-       procedure End_Shader_Mode with
-               Import        => True,
-               Convention    => C,
-               External_Name => "EndShaderMode";
-
-       procedure Begin_Blend_Mode (
-               Mode : Blend_Mode := Blend_Alpha
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "BeginBlendMode";
-
-       procedure End_Blend_Mode with
-               Import        => True,
-               Convention    => C,
-               External_Name => "EndBlendMode";
-
-       procedure Begin_Scissor_Mode (
-               X      : Integer := 0;
-               Y      : Integer := 0;
-               Width  : Integer := 0;
-               Height : Integer := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "BeginScissorMode";
-
-       procedure End_Scissor_Mode with
-               Import        => True,
-               Convention    => C,
-               External_Name => "EndScissorMode";
-
-       procedure Begin_VR_Stereo_Mode (
-               Config : VR_Stereo_Config := No_VR_Stereo_Config
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "BeginVrStereoMode";
-
-       procedure End_VR_Stereo_Mode with
-               Import        => True,
-               Convention    => C,
-               External_Name => "EndVrStereoMode";
-
-       function Load_VR_Stereo_Config (
-               Device : VR_Device_Info := No_VR_Device_Info
-       ) return VR_Stereo_Config with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadVrStereoConfig";
-
-       procedure Unload_VR_Stereo_Config (
-               Config : VR_Stereo_Config := No_VR_Stereo_Config
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UnloadVrStereoConfig";
-
-       function Load_Shader (
-               Vertex_Shader_File_Path   : String := "";
-               Fragment_Shader_File_Path : String := ""
-       ) return Shader with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadShader";
-
-       function Load_Shader_From_Memory (
-               Vertex_Shader_Code_Path   : String := "";
-               Fragment_Shader_Code_Path : String := ""
-       ) return Shader with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadShaderFromMemory";
-
-       function Is_Shader_Ready (
-               Data : Shader := No_Shader
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsShaderReady";
-
-       function Get_Shader_Location (
-               Data : Shader := No_Shader;
-               Name : String := ""
-       ) return Integer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetShaderLocation";
-
-       function Get_Shader_Location_Attribute (
-               Data : Shader := No_Shader;
-               Name : String := ""
-       ) return Integer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetShaderLocationAttrib";
-
-       procedure Set_Shader_Value (
-               Data           : Shader  := No_Shader;
-               Location_Index : Integer := 0;
-               Value          : Pointer := null;
-               Uniform_Type   : Integer := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetShaderValue";
-
-       procedure Set_Shader_Value_Vector (
-               Data           : Shader  := No_Shader;
-               Location_Index : Integer := 0;
-               Value          : Pointer := null;
-               Uniform_Type   : Integer := 0;
-               Count          : Integer := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetShaderValueV";
-
-       procedure Set_Shader_Value_Matrix (
-               Data           : Shader    := No_Shader;
-               Location_Index : Integer   := 0;
-               Value          : Matrix_4D := Id_Matrix
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetShaderValueMatrix";
-
-       procedure Set_Shader_Value_Texture (
-               Data           : Shader  := No_Shader;
-               Location_Index : Integer := 0;
-               Value          : Texture := No_Texture
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetShaderValueTexture";
-
-       procedure Unload_Shader (
-               Data : Shader := No_Shader
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UnloadShader";
-
-       function Get_Mouse_Ray (
-               Mouse_Position : Vector_2D := (0.0, 0.0);
-               Camera         : Camera_3D := No_Camera_3D
-       ) return Ray with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetMouseRay";
-
-       function Get_Camera_Matrix_3D (
-               Camera : Camera_3D := No_Camera_3D
-       ) return Matrix_4D with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetCameraMatrix";
-
-       function Get_Camera_Matrix_2D (
-               Camera : Camera_2D := No_Camera_2D
-       ) return Matrix_4D with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetCameraMatrix2D";
-
-       function Get_World_To_Screen_3D (
-               Position : Vector_3D := (0.0, 0.0, 0.0);
-               Camera   : Camera_3D := No_Camera_3D
-       ) return Vector_2D with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetWorldToScreen";
-
-       function Get_Screen_To_World_2D (
-               Position : Vector_2D := (0.0, 0.0);
-               Camera   : Camera_2D := No_Camera_2D
-       ) return Vector_2D with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetScreenToWorld2D";
-
-       function Get_World_To_Screen_Ex (
-               Position : Vector_3D := (0.0, 0.0, 0.0);
-               Camera   : Camera_3D := No_Camera_3D;
-               Width    : Integer   := 0;
-               Height   : Integer   := 0
-       ) return Vector_2D with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetWorldToScreenEx";
-
-       function Get_World_To_Screen_2D (
-               Position : Vector_2D := (0.0, 0.0);
-               Camera   : Camera_2D := No_Camera_2D
-       ) return Vector_2D with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetWorldToScreen2D";
-
-       procedure Set_Target_FPS (
-               FPS : Integer := 60
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetTargetFPS";
-
-       function Get_Frame_Time return Float with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetFrameTime";
-
-       function Get_Time return Long_Float with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetTime";
-
-       function Get_FPS return Integer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetFPS";
-
-       procedure Swap_Screen_Buffer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SwapScreenBuffer";
-
-       procedure Poll_Input_Events with
-               Import        => True,
-               Convention    => C,
-               External_Name => "PollInputEvents";
-
-       procedure Wait_Time (
-               Seconds : Long_Float := 0.0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "WaitTime";
-
-       procedure Set_Random_Seed (
-               Seed : Natural := 16#0EADBEEF#
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetRandomSeed";
-
-       function Get_Random_Value (
-               Min : Integer := 0;
-               Max : Integer := 255
-       ) return Integer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetRandomValue";
-
-       function Load_Random_Sequence (
-               Count : Natural := 0;
-               Min   : Integer := 0;
-               Max   : Integer := 0
-       ) return access Integer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadRandomSequence";
-
-       procedure Unload_Random_Sequence (
-               Sequence : access Integer := null
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UnloadRandomSequence";
-
-       procedure Take_Screenshot (
-               File_Name : String := "Screenshot.png"
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "TakeScreenshot";
-
-       procedure Set_Config_Flags (
-               Flags : Config_Flags := Flag_None
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetConfigFlags";
-
-       procedure Open_URL (
-               URL : String := ""
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "OpenURL";
-
-       --~procedure TraceLog (int logLevel, const char *text, ...) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "TraceLog";
-
-       procedure Set_Trace_Log_Level (
-               Level : Trace_Log_Level := Log_All
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetTraceLogLevel";
-
-       function Allocate (
-               Size : Natural := 0
-       ) return Pointer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "MemAlloc";
-
-       function Reallocate (
-               Data : Pointer := null;
-               Size : Natural := 0
-       ) return Pointer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "MemRealloc";
-
-       procedure Deallocate (
-               Data : Pointer := null
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "MemFree";
-
-       function Load_File_Data (
-               File_Name :        String  := "";
-               Data_Size : access Integer := null
-       ) return access Character with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadFileData";
-
-       procedure Unload_File_Data (
-               Data : Pointer := null
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UnloadFileData";
-
-       --~function bool SaveFileData (const char *fileName, void *data, int dataSize) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "SaveFileData";
-
-       --~function bool ExportDataAsCode (const unsigned char *data, int dataSize, const char *fileName) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "ExportDataAsCode";
-
-       --~function char *LoadFileText (const char *fileName) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "LoadFileText";
-
-       --~procedure UnloadFileText (char *text) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "UnloadFileText";
-
-       --~function bool SaveFileText (const char *fileName, char *text) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "SaveFileText";
-
-       --~function bool FileExists (const char *fileName) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "FileExists";
-
-       --~function bool DirectoryExists (const char *dirPath) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "DirectoryExists";
-
-       --~function bool IsFileExtension (const char *fileName, const char *ext) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "IsFileExtension";
-
-       --~function int GetFileLength (const char *fileName) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "GetFileLength";
-
-       --~function const char *GetFileExtension (const char *fileName) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "GetFileExtension";
-
-       --~function const char *GetFileName (const char *filePath) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "GetFileName";
-
-       --~function const char *GetFileNameWithoutExt (const char *filePath) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "GetFileNameWithoutExt";
-
-       --~function const char *GetDirectoryPath (const char *filePath) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "GetDirectoryPath";
-
-       --~function const char *GetPrevDirectoryPath (const char *dirPath) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "GetPrevDirectoryPath";
-
-       --~function const char *GetWorkingDirectory (void) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "GetWorkingDirectory";
-
-       --~function const char *GetApplicationDirectory (void) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "GetApplicationDirectory";
-
-       --~function bool ChangeDirectory (const char *dir) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "ChangeDirectory";
-
-       --~function bool IsPathFile (const char *path) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "IsPathFile";
-
-       --~function FilePathList LoadDirectoryFiles (const char *dirPath) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "LoadDirectoryFiles";
-
-       --~function FilePathList LoadDirectoryFilesEx (const char *basePath, const char *filter, bool scanSubdirs) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "LoadDirectoryFilesEx";
-
-       --~procedure UnloadDirectoryFiles (FilePathList files) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "UnloadDirectoryFiles";
-
-       --~function bool IsFileDropped (void) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "IsFileDropped";
-
-       --~function FilePathList LoadDroppedFiles (void) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "LoadDroppedFiles";
-
-       --~procedure UnloadDroppedFiles (FilePathList files) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "UnloadDroppedFiles";
-
-       --~function long GetFileModTime (const char *fileName) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "GetFileModTime";
-
-       --~function unsigned char *CompressData (const unsigned char *data, int dataSize, int *compDataSize) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "CompressData";
-
-       --~function unsigned char *DecompressData (const unsigned char *compData, int compDataSize, int *dataSize) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "DecompressData";
-
-       --~function char *EncodeDataBase64 (const unsigned char *data, int dataSize, int *outputSize) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "EncodeDataBase64";
-
-       --~function unsigned char *DecodeDataBase64 (const unsigned char *data, int *outputSize) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "DecodeDataBase64";
-
-       --~function AutomationEventList LoadAutomationEventList (const char *fileName) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "LoadAutomationEventList";
-
-       --~procedure UnloadAutomationEventList (AutomationEventList *list) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "UnloadAutomationEventList";
-
-       --~function bool ExportAutomationEventList (AutomationEventList list, const char *fileName) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "ExportAutomationEventList";
-
-       --~procedure SetAutomationEventList (AutomationEventList *list) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "SetAutomationEventList";
-
-       --~procedure SetAutomationEventBaseFrame (int frame) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "SetAutomationEventBaseFrame";
-
-       --~procedure StartAutomationEventRecording (void) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "StartAutomationEventRecording";
-
-       --~procedure StopAutomationEventRecording (void) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "StopAutomationEventRecording";
-
-       --~procedure PlayAutomationEvent (AutomationEvent event) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "PlayAutomationEvent";
-
-       function Is_Key_Pressed (
-               Key : Keyboard_Key := Key_Null
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsKeyPressed";
-
-       function Is_Key_Pressed_Repeat (
-               Key : Keyboard_Key := Key_Null
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsKeyPressedRepeat";
-
-       function Is_Key_Down (
-               Key : Keyboard_Key := Key_Null
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsKeyDown";
-
-       function Is_Key_Released (
-               Key : Keyboard_Key := Key_Null
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsKeyReleased";
-
-       function Is_Key_Up (
-               Key : Keyboard_Key := Key_Null
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsKeyUp";
-
-       function Get_Key_Pressed return Keyboard_Key with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetKeyPressed";
-
-       function Get_Character_Pressed return Character with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetCharPressed";
-
-       procedure Set_Exit_Key (
-               Key : Keyboard_Key := Key_Escape
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetExitKey";
-
-       --~function bool IsGamepadAvailable (int gamepad) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function const char *GetGamepadName (int gamepad) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function bool IsGamepadButtonPressed (int gamepad, int button) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function bool IsGamepadButtonDown (int gamepad, int button) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function bool IsGamepadButtonReleased (int gamepad, int button) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function bool IsGamepadButtonUp (int gamepad, int button) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function int GetGamepadButtonPressed (void) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function int GetGamepadAxisCount (int gamepad) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function float GetGamepadAxisMovement (int gamepad, int axis) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function int SetGamepadMappings (const char *mappings) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       function Is_Mouse_Button_Pressed (
-               Button : Mouse_Button := Mouse_Button_Left
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsMouseButtonPressed";
-
-       function Is_Mouse_Button_Down (
-               Button : Mouse_Button := Mouse_Button_Left
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsMouseButtonDown";
-
-       function Is_Mouse_Button_Released (
-               Button : Mouse_Button := Mouse_Button_Left
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsMouseButtonReleased";
-
-       function Is_Mouse_Button_Up (
-               Button : Mouse_Button := Mouse_Button_Left
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsMouseButtonUp";
-
-       function Get_Mouse_X return Integer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetMouseX";
-
-       function Get_Mouse_Y return Integer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetMouseY";
-
-       function Get_Mouse_Position return Vector_2D with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetMousePosition";
-
-       function Get_Mouse_Delta return Vector_2D with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetMouseDelta";
-
-       procedure Set_Mouse_Position (
-               X : Integer := 0;
-               Y : Integer := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetMousePosition";
-
-       procedure Set_Mouse_Offset (
-               X : Integer := 0;
-               Y : Integer := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetMouseOffset";
-
-       procedure Set_Mouse_Scale (
-               X : Float := 0.0;
-               Y : Float := 0.0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetMouseScale";
-
-       function Get_Mouse_Wheel_Move return Float with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetMouseWheelMove";
-
-       function Get_Mouse_Wheel_Move_V return Vector_2D with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetMouseWheelMoveV";
-
-       procedure Set_Mouse_Cursor (
-               Cursor : Mouse_Cursor := Mouse_Cursor_Default
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetMouseCursor";
-
-       --~function int GetTouchX (void) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function int GetTouchY (void) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Vector2 GetTouchPosition (int index) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function int GetTouchPointId (int index) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function int GetTouchPointCount (void) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure SetGesturesEnabled (unsigned int flags) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function bool IsGestureDetected (unsigned int gesture) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function int GetGestureDetected (void) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function float GetGestureHoldDuration (void) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Vector2 GetGestureDragVector (void) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function float GetGestureDragAngle (void) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Vector2 GetGesturePinchVector (void) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function float GetGesturePinchAngle (void) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       procedure Update_Camera (
-               Data : access Camera_3D   := null;
-               Mode :        Camera_Mode := Camera_First_Person
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UpdateCamera";
-
-       procedure Update_Camera_Pro (
-               Data     : access Camera_3D := null;
-               Movement :        Vector_3D := (0.0, 0.0, 0.0);
-               Rotation :        Vector_3D := (0.0, 0.0, 0.0);
-               Zoom     :        Float     := 0.0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UpdateCameraPro";
-
-       procedure Set_Shapes_Texture (
-               Data   : Texture   := No_Texture;
-               Source : Rectangle := No_Rectangle
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetShapesTexture";
-
-       procedure Draw_Pixel (
-               X    : Integer := 0;
-               Y    : Integer := 0;
-               Tint : Color   := White
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawPixel";
-
-       procedure Draw_Pixel_V (
-               Position : Vector_2D := (0.0, 0.0);
-               Tint     : Color     := White
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawPixelV";
-
-       procedure Draw_Line (
-               X0   : Integer := 0;
-               Y0   : Integer := 0;
-               X1   : Integer := 0;
-               Y1   : Integer := 0;
-               Tint : Color   := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawLine";
-
-       procedure Draw_Line_V (
-               From : Vector_2D := (0.0, 0.0);
-               To   : Vector_2D := (0.0, 0.0);
-               Tint : Color     := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawLineV";
-
-       procedure Draw_Line_Ex (
-               From  : Vector_2D := (0.0, 0.0);
-               To    : Vector_2D := (0.0, 0.0);
-               Thick : Float     := 0.0;
-               Tint  : Color     := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawLineEx";
-
-       procedure Draw_Line_Strip (
-               Points      : access Vector_2D := null;
-               Point_Count :        Natural   := 0;
-               Tint        :        Color     := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawLineStrip";
-
-       procedure Draw_Line_Bezier (
-               From  : Vector_2D := (0.0, 0.0);
-               To    : Vector_2D := (0.0, 0.0);
-               Thick : Float     := 0.0;
-               Tint : Color   := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawLineBezier";
-
-       procedure Draw_Circle (
-               X      : Integer := 0;
-               Y      : Integer := 0;
-               Radius : Float   := 0.0;
-               Tint   : Color   := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawCircle";
-
-       procedure Draw_Circle_Sector (
-               Center   : Vector_2D := (0.0, 0.0);
-               Radius   : Float     := 0.0;
-               From     : Float     := 0.0;
-               To       : Float     := 0.0;
-               Segments : Integer   := 0;
-               Tint     : Color     := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawCircleSector";
-
-       procedure Draw_Circle_Sector_Lines (
-               Center   : Vector_2D := (0.0, 0.0);
-               Radius   : Float     := 0.0;
-               From     : Float     := 0.0;
-               To       : Float     := 0.0;
-               Segments : Integer   := 0;
-               Tint     : Color     := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawCircleSectorLines";
-
-       procedure Draw_Circle_Gradient (
-               X      : Integer := 0;
-               Y      : Integer := 0;
-               Radius : Float   := 0.0;
-               Tint_1 : Color   := Black;
-               Tint_2 : Color   := White
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawCircleGradient";
-
-       procedure Draw_Circle_V (
-               Center : Vector_2D := (0.0, 0.0);
-               Radius : Float     := 0.0;
-               Tint   : Color     := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawCircleV";
-
-       procedure Draw_Circle_Lines (
-               X      : Integer := 0;
-               Y      : Integer := 0;
-               Radius : Float   := 0.0;
-               Tint   : Color   := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawCircleLines";
-
-       procedure Draw_Circle_Lines_V (
-               Center : Vector_2D := (0.0, 0.0);
-               Radius : Float     := 0.0;
-               Tint   : Color     := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawCircleLinesV";
-
-       procedure Draw_Ellipse (
-               X          : Integer := 0;
-               Y          : Integer := 0;
-               Horizontal : Float   := 0.0;
-               Vertical   : Float   := 0.0;
-               Tint       : Color   := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawEllipse";
-
-       procedure Draw_Ellipse_Lines (
-               X          : Integer := 0;
-               Y          : Integer := 0;
-               Horizontal : Float   := 0.0;
-               Vertical   : Float   := 0.0;
-               Tint       : Color   := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawEllipseLines";
-
-       procedure Draw_Ring (
-               Center       : Vector_2D := (0.0, 0.0);
-               Inner_Radius : Float     := 0.0;
-               Outer_Radius : Float     := 0.0;
-               From         : Float     := 0.0;
-               To           : Float     := 0.0;
-               Segments     : Integer   := 0;
-               Tint         : Color     := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawRing";
-
-       procedure Draw_Ring_Lines (
-               Center       : Vector_2D := (0.0, 0.0);
-               Inner_Radius : Float     := 0.0;
-               Outer_Radius : Float     := 0.0;
-               From         : Float     := 0.0;
-               To           : Float     := 0.0;
-               Segments     : Integer   := 0;
-               Tint         : Color     := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawRingLines";
-
-       procedure Draw_Rectangle (
-               X      : Integer := 0;
-               Y      : Integer := 0;
-               Width  : Integer := 0;
-               Height : Integer := 0;
-               Tint   : Color   := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawRectangle";
-
-       procedure Draw_Rectangle_V (
-               Position : Vector_2D := (0.0, 0.0);
-               Size     : Vector_2D := (0.0, 0.0);
-               Tint     : Color     := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawRectangleV";
-
-       procedure Draw_Rectangle_Rec (
-               Data : Rectangle := No_Rectangle;
-               Tint : Color     := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawRectangleRec";
-
-       procedure Draw_Rectangle_Pro (
-               Data     : Rectangle := No_Rectangle;
-               Origin   : Vector_2D := (0.0, 0.0);
-               Rotation : Float     := 0.0;
-               Tint     : Color     := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawRectanglePro";
-
-       procedure Draw_Rectangle_Gradient_V (
-               X       : Integer := 0;
-               Y       : Integer := 0;
-               Width   : Integer := 0;
-               Height  : Integer := 0;
-               Color_1 : Color   := Black;
-               Color_2 : Color   := White
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawRectangleGradientV";
-
-       procedure Draw_Rectangle_Gradient_H (
-               X       : Integer := 0;
-               Y       : Integer := 0;
-               Width   : Integer := 0;
-               Height  : Integer := 0;
-               Color_1 : Color   := Black;
-               Color_2 : Color   := White
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawRectangleGradientH";
-
-       procedure Draw_Rectangle_Gradient_Ex (
-               Data    : Rectangle := No_Rectangle;
-               Color_1 : Color     := Red;
-               Color_2 : Color     := Green;
-               Color_3 : Color     := Blue;
-               Color_4 : Color     := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawRectangleGradientEx";
-
-       procedure Draw_Rectangle_Lines (
-               X      : Integer := 0;
-               Y      : Integer := 0;
-               Width  : Integer := 0;
-               Height : Integer := 0;
-               Tint   : Color   := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawRectangleLines";
-
-       procedure Draw_Rectangle_Lines_Ex (
-               Data      : Rectangle := No_Rectangle;
-               Thickness : Float     := 1.0;
-               Tint      : Color     := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawRectangleLinesEx";
-
-       procedure Draw_Rectangle_Rounded (
-               Data      : Rectangle := No_Rectangle;
-               Roundness : Float     := 1.0;
-               Segments  : Integer   := 1;
-               Tint      : Color     := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawRectangleRounded";
-
-       procedure Draw_Rectangle_Rounded_Lines (
-               Data      : Rectangle := No_Rectangle;
-               Roundness : Float     := 1.0;
-               Segments  : Integer   := 1;
-               Thickness : Float     := 1.0;
-               Tint      : Color     := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawRectangleRoundedLines";
-
-       --~procedure DrawTriangle (Vector2 v1, Vector2 v2, Vector2 v3, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawTriangleLines (Vector2 v1, Vector2 v2, Vector2 v3, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawTriangleFan (Vector2 *points, int pointCount, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawTriangleStrip (Vector2 *points, int pointCount, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawPoly (Vector2 center, int sides, float radius, float rotation, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawPolyLines (Vector2 center, int sides, float radius, float rotation, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawPolyLinesEx (Vector2 center, int sides, float radius, float rotation, float lineThick, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawSplineLinear (Vector2 *points, int pointCount, float thick, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawSplineBasis (Vector2 *points, int pointCount, float thick, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawSplineCatmullRom (Vector2 *points, int pointCount, float thick, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawSplineBezierQuadratic (Vector2 *points, int pointCount, float thick, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawSplineBezierCubic (Vector2 *points, int pointCount, float thick, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawSplineSegmentLinear (Vector2 p1, Vector2 p2, float thick, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawSplineSegmentBasis (Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float thick, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawSplineSegmentCatmullRom (Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float thick, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawSplineSegmentBezierQuadratic (Vector2 p1, Vector2 c2, Vector2 p3, float thick, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawSplineSegmentBezierCubic (Vector2 p1, Vector2 c2, Vector2 c3, Vector2 p4, float thick, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Vector2 GetSplinePointLinear (Vector2 startPos, Vector2 endPos, float t) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Vector2 GetSplinePointBasis (Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float t) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Vector2 GetSplinePointCatmullRom (Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float t) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Vector2 GetSplinePointBezierQuad (Vector2 p1, Vector2 c2, Vector2 p3, float t) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Vector2 GetSplinePointBezierCubic (Vector2 p1, Vector2 c2, Vector2 c3, Vector2 p4, float t) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function bool CheckCollisionRecs (Rectangle rec1, Rectangle rec2) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function bool CheckCollisionCircles (Vector2 center1, float radius1, Vector2 center2, float radius2) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function bool CheckCollisionCircleRec (Vector2 center, float radius, Rectangle rec) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function bool CheckCollisionPointRec (Vector2 point, Rectangle rec) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function bool CheckCollisionPointCircle (Vector2 point, Vector2 center, float radius) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function bool CheckCollisionPointTriangle (Vector2 point, Vector2 p1, Vector2 p2, Vector2 p3) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function bool CheckCollisionPointPoly (Vector2 point, Vector2 *points, int pointCount) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function bool CheckCollisionLines (Vector2 startPos1, Vector2 endPos1, Vector2 startPos2, Vector2 endPos2, Vector2 *collisionPoint) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function bool CheckCollisionPointLine (Vector2 point, Vector2 p1, Vector2 p2, int threshold) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Rectangle GetCollisionRec (Rectangle rec1, Rectangle rec2) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Image LoadImage (const char *fileName) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Image LoadImageRaw (const char *fileName, int width, int height, int format, int headerSize) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Image LoadImageSvg (const char *fileNameOrString, int width, int height) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Image LoadImageAnim (const char *fileName, int *frames) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Image LoadImageFromMemory (const char *fileType, const unsigned char *fileData, int dataSize) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Image LoadImageFromTexture (Texture2D texture) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Image LoadImageFromScreen (void) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function bool IsImageReady (Image image) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure UnloadImage (Image image) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function bool ExportImage (Image image, const char *fileName) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function unsigned char *ExportImageToMemory (Image image, const char *fileType, int *fileSize) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function bool ExportImageAsCode (Image image, const char *fileName) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Image GenImageColor (int width, int height, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Image GenImageGradientLinear (int width, int height, int direction, Color start, Color end) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Image GenImageGradientRadial (int width, int height, float density, Color inner, Color outer) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Image GenImageGradientSquare (int width, int height, float density, Color inner, Color outer) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Image GenImageChecked (int width, int height, int checksX, int checksY, Color col1, Color col2) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Image GenImageWhiteNoise (int width, int height, float factor) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Image GenImagePerlinNoise (int width, int height, int offsetX, int offsetY, float scale) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Image GenImageCellular (int width, int height, int tileSize) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Image GenImageText (int width, int height, const char *text) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Image ImageCopy (Image image) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Image ImageFromImage (Image image, Rectangle rec) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Image ImageText (const char *text, int fontSize, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Image ImageTextEx (Font font, const char *text, float fontSize, float spacing, Color tint) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageFormat (Image *image, int newFormat) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageToPOT (Image *image, Color fill) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageCrop (Image *image, Rectangle crop) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageAlphaCrop (Image *image, float threshold) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageAlphaClear (Image *image, Color color, float threshold) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageAlphaMask (Image *image, Image alphaMask) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageAlphaPremultiply (Image *image) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageBlurGaussian (Image *image, int blurSize) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageKernelConvolution (Image *image, float* kernel, int kernelSize) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageResize (Image *image, int newWidth, int newHeight) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageResizeNN (Image *image, int newWidth,int newHeight) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageResizeCanvas (Image *image, int newWidth, int newHeight, int offsetX, int offsetY, Color fill) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageMipmaps (Image *image) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageDither (Image *image, int rBpp, int gBpp, int bBpp, int aBpp) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageFlipVertical (Image *image) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageFlipHorizontal (Image *image) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageRotate (Image *image, int degrees) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageRotateCW (Image *image) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageRotateCCW (Image *image) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageColorTint (Image *image, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageColorInvert (Image *image) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageColorGrayscale (Image *image) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageColorContrast (Image *image, float contrast) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageColorBrightness (Image *image, int brightness) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageColorReplace (Image *image, Color color, Color replace) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Color *LoadImageColors (Image image) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Color *LoadImagePalette (Image image, int maxPaletteSize, int *colorCount) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure UnloadImageColors (Color *colors) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure UnloadImagePalette (Color *colors) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Rectangle GetImageAlphaBorder (Image image, float threshold) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Color GetImageColor (Image image, int x, int y) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageClearBackground (Image *dst, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageDrawPixel (Image *dst, int posX, int posY, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageDrawPixelV (Image *dst, Vector2 position, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageDrawLine (Image *dst, int startPosX, int startPosY, int endPosX, int endPosY, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageDrawLineV (Image *dst, Vector2 start, Vector2 end, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageDrawCircle (Image *dst, int centerX, int centerY, int radius, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageDrawCircleV (Image *dst, Vector2 center, int radius, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageDrawCircleLines (Image *dst, int centerX, int centerY, int radius, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageDrawCircleLinesV (Image *dst, Vector2 center, int radius, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageDrawRectangle (Image *dst, int posX, int posY, int width, int height, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageDrawRectangleV (Image *dst, Vector2 position, Vector2 size, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageDrawRectangleRec (Image *dst, Rectangle rec, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageDrawRectangleLines (Image *dst, Rectangle rec, int thick, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageDraw (Image *dst, Image src, Rectangle srcRec, Rectangle dstRec, Color tint) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageDrawText (Image *dst, const char *text, int posX, int posY, int fontSize, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure ImageDrawTextEx (Image *dst, Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       function Load_Texture (
-               File_Path : String := ""
-       ) return Texture with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadTexture";
-
-       --~function Texture2D LoadTextureFromImage (Image image) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function TextureCubemap LoadTextureCubemap (Image image, int layout) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function RenderTexture2D LoadRenderTexture (int width, int height) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function bool IsTextureReady (Texture2D texture) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       procedure Unload_Texture (
-               Data : Texture := No_Texture
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UnloadTexture";
-
-       function Is_Render_Texture_Ready (
-               Target : Render_Texture := No_Render_Texture
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsRenderTextureReady";
-
-       procedure Unload_Render_Texture (
-               Target : Render_Texture := No_Render_Texture
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UnloadRenderTexture";
-
-       procedure Update_Texture (
-               Data   : Texture := No_Texture;
-               Pixels : Pointer := null
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UpdateTexture";
-
-       procedure Update_Texture_Rec (
-               Data   : Texture   := No_Texture;
-               Source : Rectangle := No_Rectangle;
-               Pixels : Pointer   := null
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UpdateTextureRec";
-
-       procedure Gen_Texture_Mipmaps (
-               Data : Texture := No_Texture
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GenTextureMipmaps";
-
-       procedure Set_Texture_Filter (
-               Data   : Texture        := No_Texture;
-               Filter : Texture_Filter := Texture_Filter_Point
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetTextureFilter";
-
-       procedure Set_Texture_Wrap (
-               Data : Texture      := No_Texture;
-               Wrap : Texture_Wrap := Texture_Wrap_Repeat
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetTextureWrap";
-
-       procedure Draw_Texture (
-               Data : Texture := No_Texture;
-               X    : Integer := 0;
-               Y    : Integer := 0;
-               Tint : Color   := White
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawTexture";
-
-       procedure Draw_Texture_V (
-               Data     : Texture   := No_Texture;
-               Position : Vector_2D := (0.0, 0.0);
-               Tint     : Color     := White
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawTextureV";
-
-       procedure Draw_Texture_Ex (
-               Data     : Texture   := No_Texture;
-               Position : Vector_2D := (0.0, 0.0);
-               Rotation : Float     := 0.0;
-               Scale    : Float     := 0.0;
-               Tint     : Color     := White
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawTextureEx";
-
-       procedure Draw_Texture_Rec (
-               Data     : Texture   := No_Texture;
-               Source   : Rectangle := No_Rectangle;
-               Position : Vector_2D := (0.0, 0.0);
-               Tint     : Color     := White
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawTextureRec";
-
-       procedure Draw_Texture_Pro (
-               Data        : Texture   := No_Texture;
-               Source      : Rectangle := No_Rectangle;
-               Destination : Rectangle := No_Rectangle;
-               Origin      : Vector_2D := (0.0, 0.0);
-               Rotation    : Float     := 0.0;
-               Tint        : Color     := White
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawTexturePro";
-
-       --~procedure DrawTextureNPatch (Texture2D texture, NPatchInfo nPatchInfo, Rectangle dest, Vector2 origin, float rotation, Color tint) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Color Fade (Color color, float alpha) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function int ColorToInt (Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Vector4 ColorNormalize (Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Color ColorFromNormalized (Vector4 normalized) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Vector3 ColorToHSV (Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Color ColorFromHSV (float hue, float saturation, float value) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Color ColorTint (Color color, Color tint) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Color ColorBrightness (Color color, float factor) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Color ColorContrast (Color color, float contrast) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Color ColorAlpha (Color color, float alpha) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Color ColorAlphaBlend (Color dst, Color src, Color tint) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Color GetColor (unsigned int hexValue) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Color GetPixelColor (void *srcPtr, int format) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure SetPixelColor (void *dstPtr, Color color, int format) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function int GetPixelDataSize (int width, int height, int format) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       function Get_Font_Default return Font with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetFontDefault";
-
-       function Load_Font (
-               File_Name : String := ""
-       ) return Font with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadFont";
-
-       function Load_Font_Ex (
-               File_Name        :        String  := "";
-               Font_Size        :        Integer := 32;
-               Code_Points      : access Integer := null;
-               Code_Point_Count :        Natural := 0
-       ) return Font with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadFontEx";
-
-       function Load_Font_From_Image (
-               Data            : Image := No_Image;
-               Key             : Color := White;
-               First_Character : Integer := 0
-       ) return Font with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadFontFromImage";
-
-       function Load_Font_From_Memory (
-               File_Type        :        String  := "";
-               File_Data        :        Pointer := null;
-               Data_Size        :        Natural := 0;
-               Font_Size        :        Integer := 32;
-               Code_Points      : access Integer := null;
-               Code_Point_Count :        Natural := 0
-       ) return Font with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadFontFromMemory";
-
-       function Is_Font_Ready (
-               Data : Font := No_Font
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsFontReady";
-
-       function Load_Font_Data (
-               File_Data        :        Pointer := null;
-               Data_Size        :        Natural := 0;
-               Font_Size        :        Integer := 32;
-               Code_Points      : access Integer := null;
-               Code_Point_Count :        Natural := 0;
-               Kind             :        Integer := 0
-       ) return access Glyph_Info with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadFontData";
-
-       function Gen_Image_Font_Atlas (
-               Glyphs           : access Glyph_Info := null;
-               Glyph_Rectangles : access Rectangle  := null;
-               Glyph_Count      :        Integer    := 0;
-               Font_Size        :        Integer    := 32;
-               Padding          :        Integer    := 0;
-               Pack_Method      :        Integer    := 0
-       ) return Image with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GenImageFontAtlas";
-
-       procedure Unload_Font_Data (
-               Glyphs      : access Glyph_Info := null;
-               Glyph_Count :        Integer    := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UnloadFontData";
-
-       procedure Unload_Font (
-               Data : Font := No_Font
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UnloadFont";
-
-       function Export_Font_As_Code (
-               Data      : Font   := No_Font;
-               File_Name : String := ""
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "ExportFontAsCode";
-
-       procedure Draw_FPS (
-               X : Integer := 0;
-               Y : Integer := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawFPS";
-
-       procedure Draw_Text (
-               Text : String  := "";
-               X    : Integer := 0;
-               Y    : Integer := 0;
-               Size : Integer := 32;
-               Tint : Color   := White
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawText";
-
-       procedure Draw_Text_Ex (
-               Data      : Font      := Get_Font_Default;
-               Text      : String    := "";
-               Position  : Vector_2D := (0.0, 0.0);
-               Font_Size : Float     := 0.0;
-               Spacing   : Float     := 0.0;
-               Tint      : Color     := White
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawTextEx";
-
-       procedure Draw_Text_Pro (
-               Data      : Font      := Get_Font_Default;
-               Text      : String    := "";
-               Position  : Vector_2D := (0.0, 0.0);
-               Origin    : Vector_2D := (0.0, 0.0);
-               Rotation  : Float     := 0.0;
-               Font_Size : Float     := 0.0;
-               Spacing   : Float     := 0.0;
-               Tint      : Color     := White
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawTextPro";
-
-       --~procedure DrawTextCodepoint (Font font, int codepoint, Vector2 position, float fontSize, Color tint) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawTextCodepoints (Font font, const int *codepoints, int codepointCount, Vector2 position, float fontSize, float spacing, Color tint) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       procedure Set_Text_Line_Spacing (
-               Spacing : Integer := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetTextLineSpacing";
-
-       function Measure_Text (
-               Text      : String  := "";
-               Font_Size : Integer := 0
-       ) return Integer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "MeasureText";
-
-       function Measure_Text_Ex (
-               Data      : Font   := Get_Font_Default;
-               Text      : String := "";
-               Font_Size : Float  := 0.0;
-               Spacing   : Float  := 0.0
-       ) return Vector_2D with
-               Import        => True,
-               Convention    => C,
-               External_Name => "MeasureTextEx";
-
-       function Get_Glyph_Index (
-               Data       : Font    := Get_Font_Default;
-               Code_Point : Integer := 0
-       ) return Integer with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetGlyphIndex";
-
-       function Get_Glyph_Info (
-               Data       : Font    := Get_Font_Default;
-               Code_Point : Integer := 0
-       ) return Glyph_Info with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetGlyphInfo";
-
-       function Get_Glyph_Atlas_Rec (
-               Data       : Font    := Get_Font_Default;
-               Code_Point : Integer := 0
-       ) return Rectangle with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetGlyphAtlasRec";
-
-       function Load_UTF8 (
-               Code_Points : access Integer := null;
-               Length      :        Integer := 0
-       ) return access Character with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadUTF8";
-
-       procedure Unload_UTF8 (
-               Text : access Character := null
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UnloadUTF8";
-
-       --~function int *LoadCodepoints (const char *text, int *count) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure UnloadCodepoints (int *codepoints) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function int GetCodepointCount (const char *text) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function int GetCodepoint (const char *text, int *codepointSize) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function int GetCodepointNext (const char *text, int *codepointSize) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function int GetCodepointPrevious (const char *text, int *codepointSize) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function const char *CodepointToUTF8 (int codepoint, int *utf8Size) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function int TextCopy (char *dst, const char *src) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function bool TextIsEqual (const char *text1, const char *text2) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function unsigned int TextLength (const char *text) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function const char *TextFormat (const char *text, ...) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function const char *TextSubtext (const char *text, int position, int length) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function char *TextReplace (char *text, const char *replace, const char *by) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function char *TextInsert (const char *text, const char *insert, int position) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function const char *TextJoin (const char **textList, int count, const char *delimiter) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function const char **TextSplit (const char *text, char delimiter, int *count) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure TextAppend (char *text, const char *append, int *position) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function int TextFindIndex (const char *text, const char *find) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function const char *TextToUpper (const char *text) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function const char *TextToLower (const char *text) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function const char *TextToPascal (const char *text) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function int TextToInteger (const char *text) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawLine3D (Vector3 startPos, Vector3 endPos, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawPoint3D (Vector3 position, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawCircle3D (Vector3 center, float radius, Vector3 rotationAxis, float rotationAngle, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawTriangle3D (Vector3 v1, Vector3 v2, Vector3 v3, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawTriangleStrip3D (Vector3 *points, int pointCount, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       procedure Draw_Cube (
-               Position : Vector_3D := (0.0, 0.0, 0.0);
-               Width    : Float     := 0.0;
-               Height   : Float     := 0.0;
-               Length   : Float     := 0.0;
-               Tint     : Color     := White
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawCube";
-
-       --~procedure DrawCubeV (Vector3 position, Vector3 size, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       procedure Draw_Cube_Wires (
-               Position : Vector_3D := (0.0, 0.0, 0.0);
-               Width    : Float     := 0.0;
-               Height   : Float     := 0.0;
-               Length   : Float     := 0.0;
-               Tint     : Color     := Black
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawCubeWires";
-
-       --~procedure DrawCubeWiresV (Vector3 position, Vector3 size, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawSphere (Vector3 centerPos, float radius, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawSphereEx (Vector3 centerPos, float radius, int rings, int slices, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawSphereWires (Vector3 centerPos, float radius, int rings, int slices, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawCylinder (Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawCylinderEx (Vector3 startPos, Vector3 endPos, float startRadius, float endRadius, int sides, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawCylinderWires (Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawCylinderWiresEx (Vector3 startPos, Vector3 endPos, float startRadius, float endRadius, int sides, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawCapsule (Vector3 startPos, Vector3 endPos, float radius, int slices, int rings, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawCapsuleWires (Vector3 startPos, Vector3 endPos, float radius, int slices, int rings, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       procedure Draw_Plane (
-               Center : Vector_3D := (0.0, 0.0, 0.0);
-               Size   : Vector_2D := (0.0, 0.0);
-               Tint   : Color := White
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawPlane";
-
-       --~procedure DrawRay (Ray ray, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure DrawGrid (int slices, float spacing) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       function Load_Model (
-               File_Name : String := ""
-       ) return Model with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadModel";
-
-       --~function Model LoadModelFromMesh (Mesh mesh) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function bool IsModelReady (Model model) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       procedure Unload_Model (
-               Data : Model := No_Model
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UnloadModel";
-
-       --~function BoundingBox GetModelBoundingBox (Model model) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       procedure Draw_Model (
-               Data     : Model     := No_Model;
-               Position : Vector_3D := (0.0, 0.0, 0.0);
-               Scale    : Float     := 1.0;
-               Tint     : Color     := White
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawModel";
-
-       procedure Draw_Model_Ex (
-               Data     : Model     := No_Model;
-               Position : Vector_3D := (0.0, 0.0, 0.0);
-               Axis     : Vector_3D := (0.0, 0.0, 0.0);
-               Angle    : Float     := 0.0;
-               Scale    : Vector_3D := (1.0, 1.0, 1.0);
-               Tint     : Color     := White
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawModelEx";
-
-       --~procedure DrawModelWires (Model model, Vector3 position, float scale, Color tint) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       procedure Draw_Model_Wires_Ex (
-               Data     : Model     := No_Model;
-               Position : Vector_3D := (0.0, 0.0, 0.0);
-               Axis     : Vector_3D := (0.0, 0.0, 0.0);
-               Angle    : Float     := 0.0;
-               Scale    : Vector_3D := (1.0, 1.0, 1.0);
-               Tint     : Color     := White
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawModelWiresEx";
-
-       --~procedure DrawBoundingBox (BoundingBox box, Color color) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       procedure Draw_Billboard (
-               Camera      : Camera_3D := No_Camera_3D;
-               Billboard   : Texture   := No_Texture;
-               Position    : Vector_3D := (0.0, 0.0, 0.0);
-               Size        : Float     := 0.0;
-               Tint        : Color     := White
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawBillboard";
-
-       --~procedure DrawBillboardRec (Camera camera, Texture2D texture, Rectangle source, Vector3 position, Vector2 size, Color tint) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       procedure Draw_Billboard_Pro (
-               Camera      : Camera_3D := No_Camera_3D;
-               Billboard   : Texture   := No_Texture;
-               Source      : Rectangle := No_Rectangle;
-               Position    : Vector_3D := (0.0, 0.0, 0.0);
-               Up          : Vector_3D := (0.0, 0.0, 0.0);
-               Size        : Vector_2D := (0.0, 0.0);
-               Origin      : Vector_2D := (0.0, 0.0);
-               Rotation    : Float     := 0.0;
-               Tint        : Color     := White
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawBillboardPro";
-
-       procedure Upload_Mesh (
-               Data    : access Mesh    := null;
-               Dynamic :        Logical := False
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UploadMesh";
-
-       --~procedure UpdateMeshBuffer (Mesh mesh, int index, const void *data, int dataSize, int offset) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure UnloadMesh (Mesh mesh) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       procedure Draw_Mesh (
-               Data      : Mesh      := No_Mesh;
-               Pixels    : Material  := No_Material;
-               Transform : Matrix_4D := (others => 0.0)
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DrawMesh";
-
-       --~procedure DrawMeshInstanced (Mesh mesh, Material material, const Matrix *transforms, int instances) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function BoundingBox GetMeshBoundingBox (Mesh mesh) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~procedure GenMeshTangents (Mesh *mesh) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function bool ExportMesh (Mesh mesh, const char *fileName) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function bool ExportMeshAsCode (Mesh mesh, const char *fileName) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       --~function Mesh GenMeshPoly (int sides, float radius) with
-               --~Import        => True,
-               --~Convention    => C,
-               --~External_Name => "";
-
-       function Gen_Mesh_Plane (
-               Width  : Float   := 1.0;
-               Height : Float   := 1.0;
-               X      : Integer := 1;
-               Z      : Integer := 1
-       ) return Mesh with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GenMeshPlane";
-
-       function Gen_Mesh_Cube (
-               Width  : Float := 0.0;
-               Height : Float := 0.0;
-               Length : Float := 0.0
-       ) return Mesh with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GenMeshCube";
-
-       function Gen_Mesh_Sphere (
-               Radius : Float   := 0.0;
-               Rings  : Integer := 0;
-               Slices : Integer := 0
-       ) return Mesh with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GenMeshSphere";
-
-       function Gen_Mesh_Hemisphere (
-               Radius : Float   := 0.0;
-               Rings  : Integer := 0;
-               Slices : Integer := 0
-       ) return Mesh with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GenMeshHemiSphere";
-
-       function Gen_Mesh_Cylinder (
-               Radius : Float   := 0.0;
-               Height : Float   := 0.0;
-               Slices : Integer := 0
-       ) return Mesh with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GenMeshCylinder";
-
-       function Gen_Mesh_Cone (
-               Radius : Float   := 0.0;
-               Height : Float   := 0.0;
-               Slices : Integer := 0
-       ) return Mesh with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GenMeshCone";
-
-       function Gen_Mesh_Torus (
-               Radius   : Float   := 0.0;
-               Size     : Float   := 0.0;
-               Segments : Integer := 0;
-               Sides    : Integer := 0
-       ) return Mesh with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GenMeshTorus";
-
-       function Gen_Mesh_Knot (
-               Radius   : Float   := 0.0;
-               Size     : Float   := 0.0;
-               Segments : Integer := 0;
-               Sides    : Integer := 0
-       ) return Mesh with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GenMeshKnot";
-
-       function Gen_Mesh_Height_Map (
-               Height_Map : Image     := No_Image;
-               Size       : Vector_3D := (0.0, 0.0, 0.0)
-       ) return Mesh with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GenMeshHeightmap";
-
-       function Gen_Mesh_Cubic_Map (
-               Cubic_Map : Image     := No_Image;
-               Size      : Vector_3D := (0.0, 0.0, 0.0)
-       ) return Mesh with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GenMeshCubicmap";
-
-       function Load_Materials (
-               File_Name :        String  := "";
-               Counts    : access Integer := null
-       ) return access Material with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadMaterials";
-
-       function Load_Material_Default return Material with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadMaterialDefault";
-
-       function Is_Material_Ready (
-               Data : Material := No_Material
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsMaterialReady";
-
-       procedure Unload_Material (
-               Data : Material := No_Material
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UnloadMaterial";
-
-       procedure Set_Material_Texture (
-               Data : access Material           := null;
-               Kind :        Material_Map_Index := Material_Map_Height;
-               This :        Texture            := No_Texture
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetMaterialTexture";
-
-       procedure Set_Model_Mesh_Material (
-               Data        : access Model   := null;
-               Mesh_Id     :        Integer := 0;
-               Material_Id :        Integer := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetModelMeshMaterial";
-
-       function Load_Model_Animations (
-               File_Name :        String  := "";
-               Counts    : access Integer := null
-       ) return access Model_Animation with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadModelAnimations";
-
-       procedure Update_Model_Animation (
-               Data      : Model           := No_Model;
-               Animation : Model_Animation := No_Model_Animation;
-               Frame     : Integer         := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UpdateModelAnimation";
-
-       procedure Unload_Model_Animation (
-               Animation : Model_Animation := No_Model_Animation
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UnloadModelAnimation";
-
-       procedure Unload_Model_Animations (
-               Animations      : access Model_Animation := null;
-               Animation_Count :        Natural         := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UnloadModelAnimations";
-
-       function Is_Model_Animation_Valid (
-               Data      : Model           := No_Model;
-               Animation : Model_Animation := No_Model_Animation
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsModelAnimationValid";
-
-       function Check_Collision_Spheres (
-               Center_1 : Vector_3D := (0.0, 0.0, 0.0);
-               Radius_1 : Float     := 0.0;
-               Center_2 : Vector_3D := (0.0, 0.0, 0.0);
-               Radius_2 : Float     := 0.0
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "CheckCollisionSpheres";
-
-       function Check_Collision_Boxes (
-               Box_1 : Bounding_Box := No_Bounding_Box;
-               Box_2 : Bounding_Box := No_Bounding_Box
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "CheckCollisionBoxes";
-
-       function Check_Collision_Box_Sphere (
-               Box    : Bounding_Box := No_Bounding_Box;
-               Center : Vector_3D    := (0.0, 0.0, 0.0);
-               Radius : Float        := 0.0
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "CheckCollisionBoxSphere";
-
-       function Get_Ray_Collision_Sphere (
-               Hit    : Ray       := No_Ray;
-               Center : Vector_3D := (0.0, 0.0, 0.0);
-               Radius : Float     := 0.0
-       ) return Ray_Collision with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetRayCollisionSphere";
-
-       function Get_Ray_Collision_Box (
-               Hit : Ray          := No_Ray;
-               Box : Bounding_Box := No_Bounding_Box
-       ) return Ray_Collision with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetRayCollisionBox";
-
-       function Get_Ray_Collision_Mesh (
-               Hit       : Ray       := No_Ray;
-               Data      : Mesh      := No_Mesh;
-               Transform : Matrix_4D := Id_Matrix
-       ) return Ray_Collision with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetRayCollisionMesh";
-
-       function Get_Ray_Collision_Triangle (
-               Hit     : Ray       := No_Ray;
-               Point_1 : Vector_3D := (0.0, 0.0, 0.0);
-               Point_2 : Vector_3D := (0.0, 0.0, 0.0);
-               Point_3 : Vector_3D := (0.0, 0.0, 0.0)
-       ) return Ray_Collision with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetRayCollisionTriangle";
-
-       function Get_Ray_Collision_Quad (
-               Hit     : Ray       := No_Ray;
-               Point_1 : Vector_3D := (0.0, 0.0, 0.0);
-               Point_2 : Vector_3D := (0.0, 0.0, 0.0);
-               Point_3 : Vector_3D := (0.0, 0.0, 0.0);
-               Point_4 : Vector_3D := (0.0, 0.0, 0.0)
-       ) return Ray_Collision with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetRayCollisionQuad";
-
-       procedure Open_Audio_Device with
-               Import        => True,
-               Convention    => C,
-               External_Name => "InitAudioDevice";
-
-       procedure Close_Audio_Device with
-               Import        => True,
-               Convention    => C,
-               External_Name => "CloseAudioDevice";
-
-       function Is_Audio_Device_Ready return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsAudioDeviceReady";
-
-       procedure Set_Master_Volume (Volume : Float := 1.0) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetMasterVolume";
-
-       function Get_Master_Volume return Float with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetMasterVolume";
-
-       function Load_Wave (
-               File_Name : String  := ""
-       ) return Wave with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadWave";
-
-       function Load_Wave_From_Memory (
-               File_Type : String  := "";
-               File_Data : Pointer := null;
-               Data_Size : Natural := 0
-       ) return Wave with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadWaveFromMemory";
-
-       function Is_Wave_Ready (
-               Data : Wave := No_Wave
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsWaveReady";
-
-       function Load_Sound (
-               File_Name : String := ""
-       ) return Sound with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadSound";
-
-       function Load_Sound_From_Wave (
-               Data : Wave := No_Wave
-       ) return Sound with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadSoundFromWave";
-
-       function Load_Sound_Alias (
-               Source : Sound := No_Sound
-       ) return Sound with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadSoundAlias";
-
-       function Is_Sound_Ready (
-               Source : Sound := No_Sound
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsSoundReady";
-
-       procedure Update_Sound (
-               Source       : Sound   := No_Sound;
-               Data         : Pointer := null;
-               Sample_Count : Integer := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UpdateSound";
-
-       procedure Unload_Wave (
-               Data : Wave := No_Wave
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UnloadWave";
-
-       procedure Unload_Sound (
-               Data : Sound := No_Sound
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UnloadSound";
-
-       procedure Unload_Sound_Alias (
-               Alias : Sound := No_Sound
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UnloadSoundAlias";
-
-       function Export_Wave (
-               Data      : Wave   := No_Wave;
-               File_Name : String := ""
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "ExportWave";
-
-       function Export_Wave_As_Code (
-               Data      : Wave   := No_Wave;
-               File_Name : String := ""
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "ExportWaveAsCode";
-
-       procedure Play_Sound (
-               Data : Sound := No_Sound
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "PlaySound";
-
-       procedure Stop_Sound (
-               Data : Sound := No_Sound
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "StopSound";
-
-       procedure Pause_Sound (
-               Data : Sound := No_Sound
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "PauseSound";
-
-       procedure Resume_Sound (
-               Data : Sound := No_Sound
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "ResumeSound";
-
-       function Is_Sound_Playing (
-               Data : Sound := No_Sound
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsSoundPlaying";
-
-       procedure Set_Sound_Volume (
-               Data   : Sound := No_Sound;
-               Volume : Float := 0.0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetSoundVolume";
-
-       procedure Set_Sound_Pitch (
-               Data  : Sound := No_Sound;
-               Pitch : Float := 0.0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetSoundPitch";
-
-       procedure Set_Sound_Pan (
-               Data : Sound := No_Sound;
-               Pan  : Float := 0.0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetSoundPan";
-
-       function Wave_Copy (
-               Data : Wave := No_Wave
-       ) return Wave with
-               Import        => True,
-               Convention    => C,
-               External_Name => "WaveCopy";
-
-       procedure Wave_Crop (
-               Data         : access Wave    := null;
-               First_Sample :        Integer := 0;
-               Final_Sample :        Integer := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "WaveCrop";
-
-       procedure Wave_Format (
-               Data        : access Wave    := null;
-               Sample_Rate :        Integer := 0;
-               Sample_Size :        Integer := 0;
-               Channels    :        Integer := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "WaveFormat";
-
-       function Load_Wave_Samples (
-               Data : Wave := No_Wave
-       ) return access Float with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadWaveSamples";
-
-       procedure Unload_Wave_Samples (
-               Samples : access Float := null
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UnloadWaveSamples";
-
-       function Load_Music_Stream (
-               File_Name : String := ""
-       ) return Music with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadMusicStream";
-
-       function Load_Music_Stream_From_Memory (
-               File_Type : String  := "";
-               Data      : Pointer := null;
-               Data_Size : Integer := 0
-       ) return Music with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadMusicStreamFromMemory";
-
-       function Is_Music_Ready (
-               Data : Music := No_Music
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsMusicReady";
-
-       procedure Unload_Music_Stream (
-               Data : Music := No_Music
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UnloadMusicStream";
-
-       procedure Play_Music_Stream (
-               Data : Music := No_Music
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "PlayMusicStream";
-
-       function Is_Music_Stream_Playing (
-               Data : Music := No_Music
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsMusicStreamPlaying";
-
-       procedure Update_Music_Stream (
-               Data : Music := No_Music
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UpdateMusicStream";
-
-       procedure Stop_Music_Stream (
-               Data : Music := No_Music
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "StopMusicStream";
-
-       procedure Pause_Music_Stream (
-               Data : Music := No_Music
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "PauseMusicStream";
-
-       procedure Resume_Music_Stream (
-               Data : Music := No_Music
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "ResumeMusicStream";
-
-       procedure Seek_Music_Stream (
-               Data     : Music := No_Music;
-               Position : Float := 0.0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SeekMusicStream";
-
-       procedure Set_Music_Volume (
-               Data   : Music := No_Music;
-               Volume : Float := 0.0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetMusicVolume";
-
-       procedure Set_Music_Pitch (
-               Data  : Music := No_Music;
-               Pitch : Float := 0.0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetMusicPitch";
-
-       procedure Set_Music_Pan (
-               Data : Music := No_Music;
-               Pan  : Float := 0.0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetMusicPan";
-
-       function Get_Music_Time_Length (
-               Data : Music := No_Music
-       ) return Float with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetMusicTimeLength";
-
-       function Get_Music_Time_Played (
-               Data : Music := No_Music
-       ) return Float with
-               Import        => True,
-               Convention    => C,
-               External_Name => "GetMusicTimePlayed";
-
-       function Load_Audio_Stream (
-               Sample_Rate : Natural := 0;
-               Sample_Size : Natural := 0;
-               Channels    : Natural := 0
-       ) return Audio_Stream with
-               Import        => True,
-               Convention    => C,
-               External_Name => "LoadAudioStream";
-
-       function Is_Audio_Stream_Ready (
-               Data : Audio_Stream := No_Audio_Stream
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsAudioStreamReady";
-
-       procedure Unload_Audio_Stream (
-               Data : Audio_Stream := No_Audio_Stream
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UnloadAudioStream";
-
-       procedure Update_Audio_Stream (
-               Data        : Audio_Stream := No_Audio_Stream;
-               Raw_Data    : Pointer      := null;
-               Frame_Count : Integer      := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "UpdateAudioStream";
-
-       function Is_Audio_Stream_Processed (
-               Data : Audio_Stream := No_Audio_Stream
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsAudioStreamProcessed";
-
-       procedure Play_Audio_Stream (
-               Data : Audio_Stream := No_Audio_Stream
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "PlayAudioStream";
-
-       procedure Pause_Audio_Stream (
-               Data : Audio_Stream := No_Audio_Stream
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "PauseAudioStream";
-
-       procedure Resume_Audio_Stream (
-               Data : Audio_Stream := No_Audio_Stream
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "ResumeAudioStream";
-
-       function Is_Audio_Stream_Playing (
-               Data : Audio_Stream := No_Audio_Stream
-       ) return Logical with
-               Import        => True,
-               Convention    => C,
-               External_Name => "IsAudioStreamPlaying";
-
-       procedure Stop_Audio_Stream (
-               Data : Audio_Stream := No_Audio_Stream
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "StopAudioStream";
-
-       procedure Set_Audio_Stream_Volume (
-               Data   : Audio_Stream := No_Audio_Stream;
-               Volume : Float        := 0.0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetAudioStreamVolume";
-
-       procedure Set_Audio_Stream_Pitch (
-               Data  : Audio_Stream := No_Audio_Stream;
-               Pitch : Float        := 0.0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetAudioStreamPitch";
-
-       procedure Set_Audio_Stream_Pan (
-               Data : Audio_Stream := No_Audio_Stream;
-               Pan  : Float        := 0.0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetAudioStreamPan";
-
-       procedure Set_Audio_Stream_Buffer_Size_Default (
-               Size : Integer := 0
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "SetAudioStreamBufferSizeDefault";
-
-       procedure Attach_Audio_Stream_Processor (
-               Stream    : Audio_Stream := No_Audio_Stream;
-               Processor : Pointer      := null
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "AttachAudioStreamProcessor";
-
-       procedure Detach_Audio_Stream_Processor (
-               Stream    : Audio_Stream := No_Audio_Stream;
-               Processor : Pointer      := null
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DetachAudioStreamProcessor";
-
-       procedure Attach_Audio_Mixed_Processor (
-               Processor : Pointer := null
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "AttachAudioMixedProcessor";
-
-       procedure Detach_Audio_Mixed_Processor (
-               Processor : Pointer := null
-       ) with
-               Import        => True,
-               Convention    => C,
-               External_Name => "DetachAudioMixedProcessor";
+   procedure Open_Window (
+      Width  : Integer := 640;
+      Height : Integer := 480;
+      Title  : String  := ""
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "InitWindow";
+
+   procedure Close_Window with
+      Import        => True,
+      Convention    => C,
+      External_Name => "CloseWindow";
+
+   function Window_Should_Close return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "WindowShouldClose";
+
+   function Is_Window_Ready return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsWindowReady";
+
+   function Is_Window_Fullscreen return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsWindowFullscreen";
+
+   function Is_Window_Hidden return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsWindowHidden";
+
+   function Is_Window_Minimized return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsWindowMinimized";
+
+   function Is_Window_Maximized return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsWindowMaximized";
+
+   function Is_Window_Focused return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsWindowFocused";
+
+   function Is_Window_Resized return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsWindowResized";
+
+   function Is_Window_State (
+      Flags : Natural := 0
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsWindowState";
+
+   procedure Set_Window_State (
+      Flags : Natural := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetWindowState";
+
+   procedure Clear_Window_State (
+      Flags : Natural := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "ClearWindowState";
+
+   procedure Toggle_Fullscreen with
+      Import        => True,
+      Convention    => C,
+      External_Name => "ToggleFullscreen";
+
+   procedure Toggle_Borderless_Windowed with
+      Import        => True,
+      Convention    => C,
+      External_Name => "ToggleBorderlessWindowed";
+
+   procedure Maximize_Window with
+      Import        => True,
+      Convention    => C,
+      External_Name => "MaximizeWindow";
+
+   procedure Minimize_Window with
+      Import        => True,
+      Convention    => C,
+      External_Name => "MinimizeWindow";
+
+   procedure Restore_Window with
+      Import        => True,
+      Convention    => C,
+      External_Name => "RestoreWindow";
+
+   procedure Set_Window_Icon (
+      Icon : Image := No_Image
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetWindowIcon";
+
+   procedure Set_Window_Icons (
+      Icons : access Image   := null;
+      Count :        Integer := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetWindowIcons";
+
+   procedure Set_Window_Title (
+      Title : String := ""
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetWindowTitle";
+
+   procedure Set_Window_Position (
+      X : Integer := 0;
+      Y : Integer := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetWindowPosition";
+
+   procedure Set_Window_Monitor (
+      Monitor : Integer := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetWindowMonitor";
+
+   procedure Set_Window_Min_Size (
+      Width  : Integer := 0;
+      Height : Integer := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetWindowMinSize";
+
+   procedure Set_Window_Max_Size (
+      Width  : Integer := 0;
+      Height : Integer := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetWindowMaxSize";
+
+   procedure Set_Window_Size (
+      Width  : Integer := 0;
+      Height : Integer := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetWindowSize";
+
+   procedure Set_WindowZ_Opacity (
+      Opacity : Float := 0.0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetWindowOpacity";
+
+   procedure Set_Window_Focused with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetWindowFocused";
+
+   function Get_Window_Handle return Pointer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetWindowHandle";
+
+   function Get_Screen_Width return Integer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetScreenWidth";
+
+   function Get_Screen_Height return Integer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetScreenHeight";
+
+   function Get_Render_Width return Integer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetRenderWidth";
+
+   function Get_Render_Height return Integer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetRenderHeight";
+
+   function Get_Monitor_Count return Integer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetMonitorCount";
+
+   function Get_Current_Monitor return Integer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetCurrentMonitor";
+
+   function Get_Monitor_Position (
+      Monitor : Integer := 0
+   ) return Vector_2D with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetMonitorPosition";
+
+   function Get_Monitor_Width (
+      Monitor : Integer := 0
+   ) return Integer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetMonitorWidth";
+
+   function Get_Monitor_Height (
+      Monitor : Integer := 0
+   ) return Integer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetMonitorHeight";
+
+   function Get_Monitor_Physical_Width (
+      Monitor : Integer := 0
+   ) return Integer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetMonitorPhysicalWidth";
+
+   function Get_Monitor_Physical_Height (
+      Monitor : Integer := 0
+   ) return Integer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetMonitorPhysicalHeight";
+
+   function Get_Monitor_Refresh_Rate (
+      Monitor : Integer := 0
+   ) return Integer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetMonitorRefreshRate";
+
+   function Get_Window_Position return Vector_2D with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetWindowPosition";
+
+   function Get_Window_Scale_DPI return Vector_2D with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetWindowScaleDPI";
+
+   function Get_Monitor_Name (
+      Monitor : Integer := 0
+   ) return Pointer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetMonitorName";
+
+   procedure Set_Clipboard_Text (
+      Text : String := ""
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetClipboardText";
+
+   function Get_Clipboard_Text return Pointer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetClipboardText";
+
+   procedure Enable_Event_Waiting with
+      Import        => True,
+      Convention    => C,
+      External_Name => "EnableEventWaiting";
+
+   procedure Disable_Event_Waiting with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DisableEventWaiting";
+
+   procedure Show_Cursor with
+      Import        => True,
+      Convention    => C,
+      External_Name => "ShowCursor";
+
+   procedure Hide_Cursor with
+      Import        => True,
+      Convention    => C,
+      External_Name => "HideCursor";
+
+   function Is_Cursor_Hidden return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsCursorHidden";
+
+   procedure Enable_Cursor with
+      Import        => True,
+      Convention    => C,
+      External_Name => "EnableCursor";
+
+   procedure Disable_Cursor with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DisableCursor";
+
+   function Is_Cursor_On_Screen return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsCursorOnScreen";
+
+   procedure Clear_Background (
+      Tint : Color := Ray_White
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "ClearBackground";
+
+   procedure Begin_Drawing with
+      Import        => True,
+      Convention    => C,
+      External_Name => "BeginDrawing";
+
+   procedure End_Drawing with
+      Import        => True,
+      Convention    => C,
+      External_Name => "EndDrawing";
+
+   procedure Begin_Mode_2D (
+      Camera : Camera_2D
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "BeginMode2D";
+
+   procedure End_Mode_2D with
+      Import        => True,
+      Convention    => C,
+      External_Name => "EndMode2D";
+
+   procedure Begin_Mode_3D (
+      Camera : Camera_3D
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "BeginMode3D";
+
+   procedure End_Mode_3D with
+      Import        => True,
+      Convention    => C,
+      External_Name => "EndMode3D";
+
+   procedure Begin_Texture_Mode (
+      Data : Render_Texture := No_Render_Texture
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "BeginTextureMode";
+
+   procedure End_Texture_Mode with
+      Import        => True,
+      Convention    => C,
+      External_Name => "EndTextureMode";
+
+   procedure Begin_Shader_Mode (
+      Data : Shader := No_Shader
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "BeginShaderMode";
+
+   procedure End_Shader_Mode with
+      Import        => True,
+      Convention    => C,
+      External_Name => "EndShaderMode";
+
+   procedure Begin_Blend_Mode (
+      Mode : Blend_Mode := Blend_Alpha
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "BeginBlendMode";
+
+   procedure End_Blend_Mode with
+      Import        => True,
+      Convention    => C,
+      External_Name => "EndBlendMode";
+
+   procedure Begin_Scissor_Mode (
+      X      : Integer := 0;
+      Y      : Integer := 0;
+      Width  : Integer := 0;
+      Height : Integer := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "BeginScissorMode";
+
+   procedure End_Scissor_Mode with
+      Import        => True,
+      Convention    => C,
+      External_Name => "EndScissorMode";
+
+   procedure Begin_VR_Stereo_Mode (
+      Config : VR_Stereo_Config := No_VR_Stereo_Config
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "BeginVrStereoMode";
+
+   procedure End_VR_Stereo_Mode with
+      Import        => True,
+      Convention    => C,
+      External_Name => "EndVrStereoMode";
+
+   function Load_VR_Stereo_Config (
+      Device : VR_Device_Info := No_VR_Device_Info
+   ) return VR_Stereo_Config with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadVrStereoConfig";
+
+   procedure Unload_VR_Stereo_Config (
+      Config : VR_Stereo_Config := No_VR_Stereo_Config
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UnloadVrStereoConfig";
+
+   function Load_Shader (
+      Vertex_Shader_File_Path   : String := "";
+      Fragment_Shader_File_Path : String := ""
+   ) return Shader with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadShader";
+
+   function Load_Shader_From_Memory (
+      Vertex_Shader_Code_Path   : String := "";
+      Fragment_Shader_Code_Path : String := ""
+   ) return Shader with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadShaderFromMemory";
+
+   function Is_Shader_Ready (
+      Data : Shader := No_Shader
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsShaderReady";
+
+   function Get_Shader_Location (
+      Data : Shader := No_Shader;
+      Name : String := ""
+   ) return Integer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetShaderLocation";
+
+   function Get_Shader_Location_Attribute (
+      Data : Shader := No_Shader;
+      Name : String := ""
+   ) return Integer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetShaderLocationAttrib";
+
+   procedure Set_Shader_Value (
+      Data           : Shader  := No_Shader;
+      Location_Index : Integer := 0;
+      Value          : Pointer := null;
+      Uniform_Type   : Integer := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetShaderValue";
+
+   procedure Set_Shader_Value_Vector (
+      Data           : Shader  := No_Shader;
+      Location_Index : Integer := 0;
+      Value          : Pointer := null;
+      Uniform_Type   : Integer := 0;
+      Count          : Integer := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetShaderValueV";
+
+   procedure Set_Shader_Value_Matrix (
+      Data           : Shader    := No_Shader;
+      Location_Index : Integer   := 0;
+      Value          : Matrix_4D := Id_Matrix
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetShaderValueMatrix";
+
+   procedure Set_Shader_Value_Texture (
+      Data           : Shader  := No_Shader;
+      Location_Index : Integer := 0;
+      Value          : Texture := No_Texture
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetShaderValueTexture";
+
+   procedure Unload_Shader (
+      Data : Shader := No_Shader
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UnloadShader";
+
+   function Get_Mouse_Ray (
+      Mouse_Position : Vector_2D := (0.0, 0.0);
+      Camera         : Camera_3D := No_Camera_3D
+   ) return Ray with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetMouseRay";
+
+   function Get_Camera_Matrix_3D (
+      Camera : Camera_3D := No_Camera_3D
+   ) return Matrix_4D with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetCameraMatrix";
+
+   function Get_Camera_Matrix_2D (
+      Camera : Camera_2D := No_Camera_2D
+   ) return Matrix_4D with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetCameraMatrix2D";
+
+   function Get_World_To_Screen_3D (
+      Position : Vector_3D := (0.0, 0.0, 0.0);
+      Camera   : Camera_3D := No_Camera_3D
+   ) return Vector_2D with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetWorldToScreen";
+
+   function Get_Screen_To_World_2D (
+      Position : Vector_2D := (0.0, 0.0);
+      Camera   : Camera_2D := No_Camera_2D
+   ) return Vector_2D with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetScreenToWorld2D";
+
+   function Get_World_To_Screen_Ex (
+      Position : Vector_3D := (0.0, 0.0, 0.0);
+      Camera   : Camera_3D := No_Camera_3D;
+      Width    : Integer   := 0;
+      Height   : Integer   := 0
+   ) return Vector_2D with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetWorldToScreenEx";
+
+   function Get_World_To_Screen_2D (
+      Position : Vector_2D := (0.0, 0.0);
+      Camera   : Camera_2D := No_Camera_2D
+   ) return Vector_2D with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetWorldToScreen2D";
+
+   procedure Set_Target_FPS (
+      FPS : Integer := 60
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetTargetFPS";
+
+   function Get_Frame_Time return Float with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetFrameTime";
+
+   function Get_Time return Long_Float with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetTime";
+
+   function Get_FPS return Integer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetFPS";
+
+   procedure Swap_Screen_Buffer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SwapScreenBuffer";
+
+   procedure Poll_Input_Events with
+      Import        => True,
+      Convention    => C,
+      External_Name => "PollInputEvents";
+
+   procedure Wait_Time (
+      Seconds : Long_Float := 0.0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "WaitTime";
+
+   procedure Set_Random_Seed (
+      Seed : Natural := 16#0EADBEEF#
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetRandomSeed";
+
+   function Get_Random_Value (
+      Min : Integer := 0;
+      Max : Integer := 255
+   ) return Integer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetRandomValue";
+
+   function Load_Random_Sequence (
+      Count : Natural := 0;
+      Min   : Integer := 0;
+      Max   : Integer := 0
+   ) return access Integer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadRandomSequence";
+
+   procedure Unload_Random_Sequence (
+      Sequence : access Integer := null
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UnloadRandomSequence";
+
+   procedure Take_Screenshot (
+      File_Name : String := "Screenshot.png"
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "TakeScreenshot";
+
+   procedure Set_Config_Flags (
+      Flags : Config_Flags := Flag_None
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetConfigFlags";
+
+   procedure Open_URL (
+      URL : String := ""
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "OpenURL";
+
+   --~procedure TraceLog (int logLevel, const char *text, ...) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "TraceLog";
+
+   procedure Set_Trace_Log_Level (
+      Level : Trace_Log_Level := Log_All
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetTraceLogLevel";
+
+   function Allocate (
+      Size : Natural := 0
+   ) return Pointer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "MemAlloc";
+
+   function Reallocate (
+      Data : Pointer := null;
+      Size : Natural := 0
+   ) return Pointer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "MemRealloc";
+
+   procedure Deallocate (
+      Data : Pointer := null
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "MemFree";
+
+   function Load_File_Data (
+      File_Name :        String  := "";
+      Data_Size : access Integer := null
+   ) return access Character with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadFileData";
+
+   procedure Unload_File_Data (
+      Data : Pointer := null
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UnloadFileData";
+
+   --~function bool SaveFileData (const char *fileName, void *data, int dataSize) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "SaveFileData";
+
+   --~function bool ExportDataAsCode (const unsigned char *data, int dataSize, const char *fileName) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "ExportDataAsCode";
+
+   --~function char *LoadFileText (const char *fileName) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "LoadFileText";
+
+   --~procedure UnloadFileText (char *text) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "UnloadFileText";
+
+   --~function bool SaveFileText (const char *fileName, char *text) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "SaveFileText";
+
+   --~function bool FileExists (const char *fileName) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "FileExists";
+
+   --~function bool DirectoryExists (const char *dirPath) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "DirectoryExists";
+
+   --~function bool IsFileExtension (const char *fileName, const char *ext) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "IsFileExtension";
+
+   --~function int GetFileLength (const char *fileName) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "GetFileLength";
+
+   --~function const char *GetFileExtension (const char *fileName) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "GetFileExtension";
+
+   --~function const char *GetFileName (const char *filePath) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "GetFileName";
+
+   --~function const char *GetFileNameWithoutExt (const char *filePath) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "GetFileNameWithoutExt";
+
+   --~function const char *GetDirectoryPath (const char *filePath) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "GetDirectoryPath";
+
+   --~function const char *GetPrevDirectoryPath (const char *dirPath) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "GetPrevDirectoryPath";
+
+   --~function const char *GetWorkingDirectory (void) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "GetWorkingDirectory";
+
+   --~function const char *GetApplicationDirectory (void) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "GetApplicationDirectory";
+
+   --~function bool ChangeDirectory (const char *dir) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "ChangeDirectory";
+
+   --~function bool IsPathFile (const char *path) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "IsPathFile";
+
+   --~function FilePathList LoadDirectoryFiles (const char *dirPath) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "LoadDirectoryFiles";
+
+   --~function FilePathList LoadDirectoryFilesEx (const char *basePath, const char *filter, bool scanSubdirs) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "LoadDirectoryFilesEx";
+
+   --~procedure UnloadDirectoryFiles (FilePathList files) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "UnloadDirectoryFiles";
+
+   --~function bool IsFileDropped (void) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "IsFileDropped";
+
+   --~function FilePathList LoadDroppedFiles (void) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "LoadDroppedFiles";
+
+   --~procedure UnloadDroppedFiles (FilePathList files) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "UnloadDroppedFiles";
+
+   --~function long GetFileModTime (const char *fileName) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "GetFileModTime";
+
+   --~function unsigned char *CompressData (const unsigned char *data, int dataSize, int *compDataSize) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "CompressData";
+
+   --~function unsigned char *DecompressData (const unsigned char *compData, int compDataSize, int *dataSize) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "DecompressData";
+
+   --~function char *EncodeDataBase64 (const unsigned char *data, int dataSize, int *outputSize) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "EncodeDataBase64";
+
+   --~function unsigned char *DecodeDataBase64 (const unsigned char *data, int *outputSize) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "DecodeDataBase64";
+
+   --~function AutomationEventList LoadAutomationEventList (const char *fileName) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "LoadAutomationEventList";
+
+   --~procedure UnloadAutomationEventList (AutomationEventList *list) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "UnloadAutomationEventList";
+
+   --~function bool ExportAutomationEventList (AutomationEventList list, const char *fileName) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "ExportAutomationEventList";
+
+   --~procedure SetAutomationEventList (AutomationEventList *list) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "SetAutomationEventList";
+
+   --~procedure SetAutomationEventBaseFrame (int frame) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "SetAutomationEventBaseFrame";
+
+   --~procedure StartAutomationEventRecording (void) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "StartAutomationEventRecording";
+
+   --~procedure StopAutomationEventRecording (void) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "StopAutomationEventRecording";
+
+   --~procedure PlayAutomationEvent (AutomationEvent event) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "PlayAutomationEvent";
+
+   function Is_Key_Pressed (
+      Key : Keyboard_Key := Key_Null
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsKeyPressed";
+
+   function Is_Key_Pressed_Repeat (
+      Key : Keyboard_Key := Key_Null
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsKeyPressedRepeat";
+
+   function Is_Key_Down (
+      Key : Keyboard_Key := Key_Null
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsKeyDown";
+
+   function Is_Key_Released (
+      Key : Keyboard_Key := Key_Null
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsKeyReleased";
+
+   function Is_Key_Up (
+      Key : Keyboard_Key := Key_Null
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsKeyUp";
+
+   function Get_Key_Pressed return Keyboard_Key with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetKeyPressed";
+
+   function Get_Character_Pressed return Character with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetCharPressed";
+
+   procedure Set_Exit_Key (
+      Key : Keyboard_Key := Key_Escape
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetExitKey";
+
+   --~function bool IsGamepadAvailable (int gamepad) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function const char *GetGamepadName (int gamepad) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function bool IsGamepadButtonPressed (int gamepad, int button) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function bool IsGamepadButtonDown (int gamepad, int button) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function bool IsGamepadButtonReleased (int gamepad, int button) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function bool IsGamepadButtonUp (int gamepad, int button) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function int GetGamepadButtonPressed (void) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function int GetGamepadAxisCount (int gamepad) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function float GetGamepadAxisMovement (int gamepad, int axis) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function int SetGamepadMappings (const char *mappings) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   function Is_Mouse_Button_Pressed (
+      Button : Mouse_Button := Mouse_Button_Left
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsMouseButtonPressed";
+
+   function Is_Mouse_Button_Down (
+      Button : Mouse_Button := Mouse_Button_Left
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsMouseButtonDown";
+
+   function Is_Mouse_Button_Released (
+      Button : Mouse_Button := Mouse_Button_Left
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsMouseButtonReleased";
+
+   function Is_Mouse_Button_Up (
+      Button : Mouse_Button := Mouse_Button_Left
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsMouseButtonUp";
+
+   function Get_Mouse_X return Integer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetMouseX";
+
+   function Get_Mouse_Y return Integer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetMouseY";
+
+   function Get_Mouse_Position return Vector_2D with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetMousePosition";
+
+   function Get_Mouse_Delta return Vector_2D with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetMouseDelta";
+
+   procedure Set_Mouse_Position (
+      X : Integer := 0;
+      Y : Integer := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetMousePosition";
+
+   procedure Set_Mouse_Offset (
+      X : Integer := 0;
+      Y : Integer := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetMouseOffset";
+
+   procedure Set_Mouse_Scale (
+      X : Float := 0.0;
+      Y : Float := 0.0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetMouseScale";
+
+   function Get_Mouse_Wheel_Move return Float with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetMouseWheelMove";
+
+   function Get_Mouse_Wheel_Move_V return Vector_2D with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetMouseWheelMoveV";
+
+   procedure Set_Mouse_Cursor (
+      Cursor : Mouse_Cursor := Mouse_Cursor_Default
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetMouseCursor";
+
+   --~function int GetTouchX (void) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function int GetTouchY (void) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Vector2 GetTouchPosition (int index) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function int GetTouchPointId (int index) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function int GetTouchPointCount (void) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure SetGesturesEnabled (unsigned int flags) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function bool IsGestureDetected (unsigned int gesture) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function int GetGestureDetected (void) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function float GetGestureHoldDuration (void) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Vector2 GetGestureDragVector (void) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function float GetGestureDragAngle (void) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Vector2 GetGesturePinchVector (void) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function float GetGesturePinchAngle (void) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   procedure Update_Camera (
+      Data : access Camera_3D   := null;
+      Mode :        Camera_Mode := Camera_First_Person
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UpdateCamera";
+
+   procedure Update_Camera_Pro (
+      Data     : access Camera_3D := null;
+      Movement :        Vector_3D := (0.0, 0.0, 0.0);
+      Rotation :        Vector_3D := (0.0, 0.0, 0.0);
+      Zoom     :        Float     := 0.0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UpdateCameraPro";
+
+   procedure Set_Shapes_Texture (
+      Data   : Texture   := No_Texture;
+      Source : Rectangle := No_Rectangle
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetShapesTexture";
+
+   procedure Draw_Pixel (
+      X    : Integer := 0;
+      Y    : Integer := 0;
+      Tint : Color   := White
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawPixel";
+
+   procedure Draw_Pixel_V (
+      Position : Vector_2D := (0.0, 0.0);
+      Tint     : Color     := White
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawPixelV";
+
+   procedure Draw_Line (
+      X0   : Integer := 0;
+      Y0   : Integer := 0;
+      X1   : Integer := 0;
+      Y1   : Integer := 0;
+      Tint : Color   := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawLine";
+
+   procedure Draw_Line_V (
+      From : Vector_2D := (0.0, 0.0);
+      To   : Vector_2D := (0.0, 0.0);
+      Tint : Color     := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawLineV";
+
+   procedure Draw_Line_Ex (
+      From  : Vector_2D := (0.0, 0.0);
+      To    : Vector_2D := (0.0, 0.0);
+      Thick : Float     := 0.0;
+      Tint  : Color     := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawLineEx";
+
+   procedure Draw_Line_Strip (
+      Points      : access Vector_2D := null;
+      Point_Count :        Natural   := 0;
+      Tint        :        Color     := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawLineStrip";
+
+   procedure Draw_Line_Bezier (
+      From  : Vector_2D := (0.0, 0.0);
+      To    : Vector_2D := (0.0, 0.0);
+      Thick : Float     := 0.0;
+      Tint : Color   := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawLineBezier";
+
+   procedure Draw_Circle (
+      X      : Integer := 0;
+      Y      : Integer := 0;
+      Radius : Float   := 0.0;
+      Tint   : Color   := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawCircle";
+
+   procedure Draw_Circle_Sector (
+      Center   : Vector_2D := (0.0, 0.0);
+      Radius   : Float     := 0.0;
+      From     : Float     := 0.0;
+      To       : Float     := 0.0;
+      Segments : Integer   := 0;
+      Tint     : Color     := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawCircleSector";
+
+   procedure Draw_Circle_Sector_Lines (
+      Center   : Vector_2D := (0.0, 0.0);
+      Radius   : Float     := 0.0;
+      From     : Float     := 0.0;
+      To       : Float     := 0.0;
+      Segments : Integer   := 0;
+      Tint     : Color     := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawCircleSectorLines";
+
+   procedure Draw_Circle_Gradient (
+      X      : Integer := 0;
+      Y      : Integer := 0;
+      Radius : Float   := 0.0;
+      Tint_1 : Color   := Black;
+      Tint_2 : Color   := White
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawCircleGradient";
+
+   procedure Draw_Circle_V (
+      Center : Vector_2D := (0.0, 0.0);
+      Radius : Float     := 0.0;
+      Tint   : Color     := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawCircleV";
+
+   procedure Draw_Circle_Lines (
+      X      : Integer := 0;
+      Y      : Integer := 0;
+      Radius : Float   := 0.0;
+      Tint   : Color   := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawCircleLines";
+
+   procedure Draw_Circle_Lines_V (
+      Center : Vector_2D := (0.0, 0.0);
+      Radius : Float     := 0.0;
+      Tint   : Color     := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawCircleLinesV";
+
+   procedure Draw_Ellipse (
+      X          : Integer := 0;
+      Y          : Integer := 0;
+      Horizontal : Float   := 0.0;
+      Vertical   : Float   := 0.0;
+      Tint       : Color   := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawEllipse";
+
+   procedure Draw_Ellipse_Lines (
+      X          : Integer := 0;
+      Y          : Integer := 0;
+      Horizontal : Float   := 0.0;
+      Vertical   : Float   := 0.0;
+      Tint       : Color   := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawEllipseLines";
+
+   procedure Draw_Ring (
+      Center       : Vector_2D := (0.0, 0.0);
+      Inner_Radius : Float     := 0.0;
+      Outer_Radius : Float     := 0.0;
+      From         : Float     := 0.0;
+      To           : Float     := 0.0;
+      Segments     : Integer   := 0;
+      Tint         : Color     := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawRing";
+
+   procedure Draw_Ring_Lines (
+      Center       : Vector_2D := (0.0, 0.0);
+      Inner_Radius : Float     := 0.0;
+      Outer_Radius : Float     := 0.0;
+      From         : Float     := 0.0;
+      To           : Float     := 0.0;
+      Segments     : Integer   := 0;
+      Tint         : Color     := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawRingLines";
+
+   procedure Draw_Rectangle (
+      X      : Integer := 0;
+      Y      : Integer := 0;
+      Width  : Integer := 0;
+      Height : Integer := 0;
+      Tint   : Color   := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawRectangle";
+
+   procedure Draw_Rectangle_V (
+      Position : Vector_2D := (0.0, 0.0);
+      Size     : Vector_2D := (0.0, 0.0);
+      Tint     : Color     := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawRectangleV";
+
+   procedure Draw_Rectangle_Rec (
+      Data : Rectangle := No_Rectangle;
+      Tint : Color     := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawRectangleRec";
+
+   procedure Draw_Rectangle_Pro (
+      Data     : Rectangle := No_Rectangle;
+      Origin   : Vector_2D := (0.0, 0.0);
+      Rotation : Float     := 0.0;
+      Tint     : Color     := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawRectanglePro";
+
+   procedure Draw_Rectangle_Gradient_V (
+      X       : Integer := 0;
+      Y       : Integer := 0;
+      Width   : Integer := 0;
+      Height  : Integer := 0;
+      Color_1 : Color   := Black;
+      Color_2 : Color   := White
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawRectangleGradientV";
+
+   procedure Draw_Rectangle_Gradient_H (
+      X       : Integer := 0;
+      Y       : Integer := 0;
+      Width   : Integer := 0;
+      Height  : Integer := 0;
+      Color_1 : Color   := Black;
+      Color_2 : Color   := White
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawRectangleGradientH";
+
+   procedure Draw_Rectangle_Gradient_Ex (
+      Data    : Rectangle := No_Rectangle;
+      Color_1 : Color     := Red;
+      Color_2 : Color     := Green;
+      Color_3 : Color     := Blue;
+      Color_4 : Color     := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawRectangleGradientEx";
+
+   procedure Draw_Rectangle_Lines (
+      X      : Integer := 0;
+      Y      : Integer := 0;
+      Width  : Integer := 0;
+      Height : Integer := 0;
+      Tint   : Color   := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawRectangleLines";
+
+   procedure Draw_Rectangle_Lines_Ex (
+      Data      : Rectangle := No_Rectangle;
+      Thickness : Float     := 1.0;
+      Tint      : Color     := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawRectangleLinesEx";
+
+   procedure Draw_Rectangle_Rounded (
+      Data      : Rectangle := No_Rectangle;
+      Roundness : Float     := 1.0;
+      Segments  : Integer   := 1;
+      Tint      : Color     := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawRectangleRounded";
+
+   procedure Draw_Rectangle_Rounded_Lines (
+      Data      : Rectangle := No_Rectangle;
+      Roundness : Float     := 1.0;
+      Segments  : Integer   := 1;
+      Thickness : Float     := 1.0;
+      Tint      : Color     := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawRectangleRoundedLines";
+
+   --~procedure DrawTriangle (Vector2 v1, Vector2 v2, Vector2 v3, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawTriangleLines (Vector2 v1, Vector2 v2, Vector2 v3, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawTriangleFan (Vector2 *points, int pointCount, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawTriangleStrip (Vector2 *points, int pointCount, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawPoly (Vector2 center, int sides, float radius, float rotation, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawPolyLines (Vector2 center, int sides, float radius, float rotation, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawPolyLinesEx (Vector2 center, int sides, float radius, float rotation, float lineThick, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawSplineLinear (Vector2 *points, int pointCount, float thick, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawSplineBasis (Vector2 *points, int pointCount, float thick, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawSplineCatmullRom (Vector2 *points, int pointCount, float thick, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawSplineBezierQuadratic (Vector2 *points, int pointCount, float thick, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawSplineBezierCubic (Vector2 *points, int pointCount, float thick, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawSplineSegmentLinear (Vector2 p1, Vector2 p2, float thick, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawSplineSegmentBasis (Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float thick, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawSplineSegmentCatmullRom (Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float thick, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawSplineSegmentBezierQuadratic (Vector2 p1, Vector2 c2, Vector2 p3, float thick, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawSplineSegmentBezierCubic (Vector2 p1, Vector2 c2, Vector2 c3, Vector2 p4, float thick, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Vector2 GetSplinePointLinear (Vector2 startPos, Vector2 endPos, float t) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Vector2 GetSplinePointBasis (Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float t) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Vector2 GetSplinePointCatmullRom (Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, float t) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Vector2 GetSplinePointBezierQuad (Vector2 p1, Vector2 c2, Vector2 p3, float t) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Vector2 GetSplinePointBezierCubic (Vector2 p1, Vector2 c2, Vector2 c3, Vector2 p4, float t) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function bool CheckCollisionRecs (Rectangle rec1, Rectangle rec2) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function bool CheckCollisionCircles (Vector2 center1, float radius1, Vector2 center2, float radius2) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function bool CheckCollisionCircleRec (Vector2 center, float radius, Rectangle rec) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function bool CheckCollisionPointRec (Vector2 point, Rectangle rec) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function bool CheckCollisionPointCircle (Vector2 point, Vector2 center, float radius) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function bool CheckCollisionPointTriangle (Vector2 point, Vector2 p1, Vector2 p2, Vector2 p3) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function bool CheckCollisionPointPoly (Vector2 point, Vector2 *points, int pointCount) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function bool CheckCollisionLines (Vector2 startPos1, Vector2 endPos1, Vector2 startPos2, Vector2 endPos2, Vector2 *collisionPoint) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function bool CheckCollisionPointLine (Vector2 point, Vector2 p1, Vector2 p2, int threshold) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Rectangle GetCollisionRec (Rectangle rec1, Rectangle rec2) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Image LoadImage (const char *fileName) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Image LoadImageRaw (const char *fileName, int width, int height, int format, int headerSize) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Image LoadImageSvg (const char *fileNameOrString, int width, int height) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Image LoadImageAnim (const char *fileName, int *frames) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Image LoadImageFromMemory (const char *fileType, const unsigned char *fileData, int dataSize) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Image LoadImageFromTexture (Texture2D texture) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Image LoadImageFromScreen (void) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function bool IsImageReady (Image image) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure UnloadImage (Image image) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function bool ExportImage (Image image, const char *fileName) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function unsigned char *ExportImageToMemory (Image image, const char *fileType, int *fileSize) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function bool ExportImageAsCode (Image image, const char *fileName) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Image GenImageColor (int width, int height, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Image GenImageGradientLinear (int width, int height, int direction, Color start, Color end) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Image GenImageGradientRadial (int width, int height, float density, Color inner, Color outer) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Image GenImageGradientSquare (int width, int height, float density, Color inner, Color outer) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Image GenImageChecked (int width, int height, int checksX, int checksY, Color col1, Color col2) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Image GenImageWhiteNoise (int width, int height, float factor) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Image GenImagePerlinNoise (int width, int height, int offsetX, int offsetY, float scale) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Image GenImageCellular (int width, int height, int tileSize) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Image GenImageText (int width, int height, const char *text) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Image ImageCopy (Image image) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Image ImageFromImage (Image image, Rectangle rec) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Image ImageText (const char *text, int fontSize, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Image ImageTextEx (Font font, const char *text, float fontSize, float spacing, Color tint) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageFormat (Image *image, int newFormat) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageToPOT (Image *image, Color fill) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageCrop (Image *image, Rectangle crop) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageAlphaCrop (Image *image, float threshold) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageAlphaClear (Image *image, Color color, float threshold) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageAlphaMask (Image *image, Image alphaMask) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageAlphaPremultiply (Image *image) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageBlurGaussian (Image *image, int blurSize) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageKernelConvolution (Image *image, float* kernel, int kernelSize) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageResize (Image *image, int newWidth, int newHeight) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageResizeNN (Image *image, int newWidth,int newHeight) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageResizeCanvas (Image *image, int newWidth, int newHeight, int offsetX, int offsetY, Color fill) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageMipmaps (Image *image) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageDither (Image *image, int rBpp, int gBpp, int bBpp, int aBpp) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageFlipVertical (Image *image) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageFlipHorizontal (Image *image) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageRotate (Image *image, int degrees) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageRotateCW (Image *image) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageRotateCCW (Image *image) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageColorTint (Image *image, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageColorInvert (Image *image) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageColorGrayscale (Image *image) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageColorContrast (Image *image, float contrast) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageColorBrightness (Image *image, int brightness) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageColorReplace (Image *image, Color color, Color replace) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Color *LoadImageColors (Image image) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Color *LoadImagePalette (Image image, int maxPaletteSize, int *colorCount) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure UnloadImageColors (Color *colors) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure UnloadImagePalette (Color *colors) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Rectangle GetImageAlphaBorder (Image image, float threshold) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Color GetImageColor (Image image, int x, int y) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageClearBackground (Image *dst, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageDrawPixel (Image *dst, int posX, int posY, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageDrawPixelV (Image *dst, Vector2 position, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageDrawLine (Image *dst, int startPosX, int startPosY, int endPosX, int endPosY, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageDrawLineV (Image *dst, Vector2 start, Vector2 end, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageDrawCircle (Image *dst, int centerX, int centerY, int radius, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageDrawCircleV (Image *dst, Vector2 center, int radius, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageDrawCircleLines (Image *dst, int centerX, int centerY, int radius, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageDrawCircleLinesV (Image *dst, Vector2 center, int radius, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageDrawRectangle (Image *dst, int posX, int posY, int width, int height, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageDrawRectangleV (Image *dst, Vector2 position, Vector2 size, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageDrawRectangleRec (Image *dst, Rectangle rec, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageDrawRectangleLines (Image *dst, Rectangle rec, int thick, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageDraw (Image *dst, Image src, Rectangle srcRec, Rectangle dstRec, Color tint) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageDrawText (Image *dst, const char *text, int posX, int posY, int fontSize, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure ImageDrawTextEx (Image *dst, Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   function Load_Texture (
+      File_Path : String := ""
+   ) return Texture with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadTexture";
+
+   --~function Texture2D LoadTextureFromImage (Image image) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function TextureCubemap LoadTextureCubemap (Image image, int layout) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function RenderTexture2D LoadRenderTexture (int width, int height) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function bool IsTextureReady (Texture2D texture) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   procedure Unload_Texture (
+      Data : Texture := No_Texture
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UnloadTexture";
+
+   function Is_Render_Texture_Ready (
+      Target : Render_Texture := No_Render_Texture
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsRenderTextureReady";
+
+   procedure Unload_Render_Texture (
+      Target : Render_Texture := No_Render_Texture
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UnloadRenderTexture";
+
+   procedure Update_Texture (
+      Data   : Texture := No_Texture;
+      Pixels : Pointer := null
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UpdateTexture";
+
+   procedure Update_Texture_Rec (
+      Data   : Texture   := No_Texture;
+      Source : Rectangle := No_Rectangle;
+      Pixels : Pointer   := null
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UpdateTextureRec";
+
+   procedure Gen_Texture_Mipmaps (
+      Data : Texture := No_Texture
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GenTextureMipmaps";
+
+   procedure Set_Texture_Filter (
+      Data   : Texture        := No_Texture;
+      Filter : Texture_Filter := Texture_Filter_Point
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetTextureFilter";
+
+   procedure Set_Texture_Wrap (
+      Data : Texture      := No_Texture;
+      Wrap : Texture_Wrap := Texture_Wrap_Repeat
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetTextureWrap";
+
+   procedure Draw_Texture (
+      Data : Texture := No_Texture;
+      X    : Integer := 0;
+      Y    : Integer := 0;
+      Tint : Color   := White
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawTexture";
+
+   procedure Draw_Texture_V (
+      Data     : Texture   := No_Texture;
+      Position : Vector_2D := (0.0, 0.0);
+      Tint     : Color     := White
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawTextureV";
+
+   procedure Draw_Texture_Ex (
+      Data     : Texture   := No_Texture;
+      Position : Vector_2D := (0.0, 0.0);
+      Rotation : Float     := 0.0;
+      Scale    : Float     := 0.0;
+      Tint     : Color     := White
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawTextureEx";
+
+   procedure Draw_Texture_Rec (
+      Data     : Texture   := No_Texture;
+      Source   : Rectangle := No_Rectangle;
+      Position : Vector_2D := (0.0, 0.0);
+      Tint     : Color     := White
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawTextureRec";
+
+   procedure Draw_Texture_Pro (
+      Data        : Texture   := No_Texture;
+      Source      : Rectangle := No_Rectangle;
+      Destination : Rectangle := No_Rectangle;
+      Origin      : Vector_2D := (0.0, 0.0);
+      Rotation    : Float     := 0.0;
+      Tint        : Color     := White
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawTexturePro";
+
+   --~procedure DrawTextureNPatch (Texture2D texture, NPatchInfo nPatchInfo, Rectangle dest, Vector2 origin, float rotation, Color tint) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Color Fade (Color color, float alpha) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function int ColorToInt (Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Vector4 ColorNormalize (Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Color ColorFromNormalized (Vector4 normalized) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Vector3 ColorToHSV (Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Color ColorFromHSV (float hue, float saturation, float value) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Color ColorTint (Color color, Color tint) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Color ColorBrightness (Color color, float factor) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Color ColorContrast (Color color, float contrast) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Color ColorAlpha (Color color, float alpha) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Color ColorAlphaBlend (Color dst, Color src, Color tint) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Color GetColor (unsigned int hexValue) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Color GetPixelColor (void *srcPtr, int format) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure SetPixelColor (void *dstPtr, Color color, int format) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function int GetPixelDataSize (int width, int height, int format) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   function Get_Font_Default return Font with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetFontDefault";
+
+   function Load_Font (
+      File_Name : String := ""
+   ) return Font with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadFont";
+
+   function Load_Font_Ex (
+      File_Name        :        String  := "";
+      Font_Size        :        Integer := 32;
+      Code_Points      : access Integer := null;
+      Code_Point_Count :        Natural := 0
+   ) return Font with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadFontEx";
+
+   function Load_Font_From_Image (
+      Data            : Image := No_Image;
+      Key             : Color := White;
+      First_Character : Integer := 0
+   ) return Font with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadFontFromImage";
+
+   function Load_Font_From_Memory (
+      File_Type        :        String  := "";
+      File_Data        :        Pointer := null;
+      Data_Size        :        Natural := 0;
+      Font_Size        :        Integer := 32;
+      Code_Points      : access Integer := null;
+      Code_Point_Count :        Natural := 0
+   ) return Font with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadFontFromMemory";
+
+   function Is_Font_Ready (
+      Data : Font := No_Font
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsFontReady";
+
+   function Load_Font_Data (
+      File_Data        :        Pointer := null;
+      Data_Size        :        Natural := 0;
+      Font_Size        :        Integer := 32;
+      Code_Points      : access Integer := null;
+      Code_Point_Count :        Natural := 0;
+      Kind             :        Integer := 0
+   ) return access Glyph_Info with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadFontData";
+
+   function Gen_Image_Font_Atlas (
+      Glyphs           : access Glyph_Info := null;
+      Glyph_Rectangles : access Rectangle  := null;
+      Glyph_Count      :        Integer    := 0;
+      Font_Size        :        Integer    := 32;
+      Padding          :        Integer    := 0;
+      Pack_Method      :        Integer    := 0
+   ) return Image with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GenImageFontAtlas";
+
+   procedure Unload_Font_Data (
+      Glyphs      : access Glyph_Info := null;
+      Glyph_Count :        Integer    := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UnloadFontData";
+
+   procedure Unload_Font (
+      Data : Font := No_Font
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UnloadFont";
+
+   function Export_Font_As_Code (
+      Data      : Font   := No_Font;
+      File_Name : String := ""
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "ExportFontAsCode";
+
+   procedure Draw_FPS (
+      X : Integer := 0;
+      Y : Integer := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawFPS";
+
+   procedure Draw_Text (
+      Text : String  := "";
+      X    : Integer := 0;
+      Y    : Integer := 0;
+      Size : Integer := 32;
+      Tint : Color   := White
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawText";
+
+   procedure Draw_Text_Ex (
+      Data      : Font      := Get_Font_Default;
+      Text      : String    := "";
+      Position  : Vector_2D := (0.0, 0.0);
+      Font_Size : Float     := 0.0;
+      Spacing   : Float     := 0.0;
+      Tint      : Color     := White
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawTextEx";
+
+   procedure Draw_Text_Pro (
+      Data      : Font      := Get_Font_Default;
+      Text      : String    := "";
+      Position  : Vector_2D := (0.0, 0.0);
+      Origin    : Vector_2D := (0.0, 0.0);
+      Rotation  : Float     := 0.0;
+      Font_Size : Float     := 0.0;
+      Spacing   : Float     := 0.0;
+      Tint      : Color     := White
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawTextPro";
+
+   --~procedure DrawTextCodepoint (Font font, int codepoint, Vector2 position, float fontSize, Color tint) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawTextCodepoints (Font font, const int *codepoints, int codepointCount, Vector2 position, float fontSize, float spacing, Color tint) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   procedure Set_Text_Line_Spacing (
+      Spacing : Integer := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetTextLineSpacing";
+
+   function Measure_Text (
+      Text      : String  := "";
+      Font_Size : Integer := 0
+   ) return Integer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "MeasureText";
+
+   function Measure_Text_Ex (
+      Data      : Font   := Get_Font_Default;
+      Text      : String := "";
+      Font_Size : Float  := 0.0;
+      Spacing   : Float  := 0.0
+   ) return Vector_2D with
+      Import        => True,
+      Convention    => C,
+      External_Name => "MeasureTextEx";
+
+   function Get_Glyph_Index (
+      Data       : Font    := Get_Font_Default;
+      Code_Point : Integer := 0
+   ) return Integer with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetGlyphIndex";
+
+   function Get_Glyph_Info (
+      Data       : Font    := Get_Font_Default;
+      Code_Point : Integer := 0
+   ) return Glyph_Info with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetGlyphInfo";
+
+   function Get_Glyph_Atlas_Rec (
+      Data       : Font    := Get_Font_Default;
+      Code_Point : Integer := 0
+   ) return Rectangle with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetGlyphAtlasRec";
+
+   function Load_UTF8 (
+      Code_Points : access Integer := null;
+      Length      :        Integer := 0
+   ) return access Character with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadUTF8";
+
+   procedure Unload_UTF8 (
+      Text : access Character := null
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UnloadUTF8";
+
+   --~function int *LoadCodepoints (const char *text, int *count) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure UnloadCodepoints (int *codepoints) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function int GetCodepointCount (const char *text) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function int GetCodepoint (const char *text, int *codepointSize) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function int GetCodepointNext (const char *text, int *codepointSize) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function int GetCodepointPrevious (const char *text, int *codepointSize) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function const char *CodepointToUTF8 (int codepoint, int *utf8Size) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function int TextCopy (char *dst, const char *src) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function bool TextIsEqual (const char *text1, const char *text2) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function unsigned int TextLength (const char *text) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function const char *TextFormat (const char *text, ...) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function const char *TextSubtext (const char *text, int position, int length) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function char *TextReplace (char *text, const char *replace, const char *by) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function char *TextInsert (const char *text, const char *insert, int position) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function const char *TextJoin (const char **textList, int count, const char *delimiter) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function const char **TextSplit (const char *text, char delimiter, int *count) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure TextAppend (char *text, const char *append, int *position) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function int TextFindIndex (const char *text, const char *find) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function const char *TextToUpper (const char *text) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function const char *TextToLower (const char *text) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function const char *TextToPascal (const char *text) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function int TextToInteger (const char *text) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawLine3D (Vector3 startPos, Vector3 endPos, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawPoint3D (Vector3 position, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawCircle3D (Vector3 center, float radius, Vector3 rotationAxis, float rotationAngle, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawTriangle3D (Vector3 v1, Vector3 v2, Vector3 v3, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawTriangleStrip3D (Vector3 *points, int pointCount, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   procedure Draw_Cube (
+      Position : Vector_3D := (0.0, 0.0, 0.0);
+      Width    : Float     := 0.0;
+      Height   : Float     := 0.0;
+      Length   : Float     := 0.0;
+      Tint     : Color     := White
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawCube";
+
+   --~procedure DrawCubeV (Vector3 position, Vector3 size, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   procedure Draw_Cube_Wires (
+      Position : Vector_3D := (0.0, 0.0, 0.0);
+      Width    : Float     := 0.0;
+      Height   : Float     := 0.0;
+      Length   : Float     := 0.0;
+      Tint     : Color     := Black
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawCubeWires";
+
+   --~procedure DrawCubeWiresV (Vector3 position, Vector3 size, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawSphere (Vector3 centerPos, float radius, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawSphereEx (Vector3 centerPos, float radius, int rings, int slices, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawSphereWires (Vector3 centerPos, float radius, int rings, int slices, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawCylinder (Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawCylinderEx (Vector3 startPos, Vector3 endPos, float startRadius, float endRadius, int sides, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawCylinderWires (Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawCylinderWiresEx (Vector3 startPos, Vector3 endPos, float startRadius, float endRadius, int sides, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawCapsule (Vector3 startPos, Vector3 endPos, float radius, int slices, int rings, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawCapsuleWires (Vector3 startPos, Vector3 endPos, float radius, int slices, int rings, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   procedure Draw_Plane (
+      Center : Vector_3D := (0.0, 0.0, 0.0);
+      Size   : Vector_2D := (0.0, 0.0);
+      Tint   : Color := White
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawPlane";
+
+   --~procedure DrawRay (Ray ray, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure DrawGrid (int slices, float spacing) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   function Load_Model (
+      File_Name : String := ""
+   ) return Model with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadModel";
+
+   --~function Model LoadModelFromMesh (Mesh mesh) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function bool IsModelReady (Model model) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   procedure Unload_Model (
+      Data : Model := No_Model
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UnloadModel";
+
+   --~function BoundingBox GetModelBoundingBox (Model model) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   procedure Draw_Model (
+      Data     : Model     := No_Model;
+      Position : Vector_3D := (0.0, 0.0, 0.0);
+      Scale    : Float     := 1.0;
+      Tint     : Color     := White
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawModel";
+
+   procedure Draw_Model_Ex (
+      Data     : Model     := No_Model;
+      Position : Vector_3D := (0.0, 0.0, 0.0);
+      Axis     : Vector_3D := (0.0, 0.0, 0.0);
+      Angle    : Float     := 0.0;
+      Scale    : Vector_3D := (1.0, 1.0, 1.0);
+      Tint     : Color     := White
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawModelEx";
+
+   --~procedure DrawModelWires (Model model, Vector3 position, float scale, Color tint) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   procedure Draw_Model_Wires_Ex (
+      Data     : Model     := No_Model;
+      Position : Vector_3D := (0.0, 0.0, 0.0);
+      Axis     : Vector_3D := (0.0, 0.0, 0.0);
+      Angle    : Float     := 0.0;
+      Scale    : Vector_3D := (1.0, 1.0, 1.0);
+      Tint     : Color     := White
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawModelWiresEx";
+
+   --~procedure DrawBoundingBox (BoundingBox box, Color color) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   procedure Draw_Billboard (
+      Camera      : Camera_3D := No_Camera_3D;
+      Billboard   : Texture   := No_Texture;
+      Position    : Vector_3D := (0.0, 0.0, 0.0);
+      Size        : Float     := 0.0;
+      Tint        : Color     := White
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawBillboard";
+
+   --~procedure DrawBillboardRec (Camera camera, Texture2D texture, Rectangle source, Vector3 position, Vector2 size, Color tint) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   procedure Draw_Billboard_Pro (
+      Camera      : Camera_3D := No_Camera_3D;
+      Billboard   : Texture   := No_Texture;
+      Source      : Rectangle := No_Rectangle;
+      Position    : Vector_3D := (0.0, 0.0, 0.0);
+      Up          : Vector_3D := (0.0, 0.0, 0.0);
+      Size        : Vector_2D := (0.0, 0.0);
+      Origin      : Vector_2D := (0.0, 0.0);
+      Rotation    : Float     := 0.0;
+      Tint        : Color     := White
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawBillboardPro";
+
+   procedure Upload_Mesh (
+      Data    : access Mesh    := null;
+      Dynamic :        Logical := False
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UploadMesh";
+
+   --~procedure UpdateMeshBuffer (Mesh mesh, int index, const void *data, int dataSize, int offset) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure UnloadMesh (Mesh mesh) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   procedure Draw_Mesh (
+      Data      : Mesh      := No_Mesh;
+      Pixels    : Material  := No_Material;
+      Transform : Matrix_4D := (others => 0.0)
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DrawMesh";
+
+   --~procedure DrawMeshInstanced (Mesh mesh, Material material, const Matrix *transforms, int instances) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function BoundingBox GetMeshBoundingBox (Mesh mesh) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~procedure GenMeshTangents (Mesh *mesh) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function bool ExportMesh (Mesh mesh, const char *fileName) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function bool ExportMeshAsCode (Mesh mesh, const char *fileName) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   --~function Mesh GenMeshPoly (int sides, float radius) with
+      --~Import        => True,
+      --~Convention    => C,
+      --~External_Name => "";
+
+   function Gen_Mesh_Plane (
+      Width  : Float   := 1.0;
+      Height : Float   := 1.0;
+      X      : Integer := 1;
+      Z      : Integer := 1
+   ) return Mesh with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GenMeshPlane";
+
+   function Gen_Mesh_Cube (
+      Width  : Float := 0.0;
+      Height : Float := 0.0;
+      Length : Float := 0.0
+   ) return Mesh with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GenMeshCube";
+
+   function Gen_Mesh_Sphere (
+      Radius : Float   := 0.0;
+      Rings  : Integer := 0;
+      Slices : Integer := 0
+   ) return Mesh with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GenMeshSphere";
+
+   function Gen_Mesh_Hemisphere (
+      Radius : Float   := 0.0;
+      Rings  : Integer := 0;
+      Slices : Integer := 0
+   ) return Mesh with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GenMeshHemiSphere";
+
+   function Gen_Mesh_Cylinder (
+      Radius : Float   := 0.0;
+      Height : Float   := 0.0;
+      Slices : Integer := 0
+   ) return Mesh with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GenMeshCylinder";
+
+   function Gen_Mesh_Cone (
+      Radius : Float   := 0.0;
+      Height : Float   := 0.0;
+      Slices : Integer := 0
+   ) return Mesh with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GenMeshCone";
+
+   function Gen_Mesh_Torus (
+      Radius   : Float   := 0.0;
+      Size     : Float   := 0.0;
+      Segments : Integer := 0;
+      Sides    : Integer := 0
+   ) return Mesh with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GenMeshTorus";
+
+   function Gen_Mesh_Knot (
+      Radius   : Float   := 0.0;
+      Size     : Float   := 0.0;
+      Segments : Integer := 0;
+      Sides    : Integer := 0
+   ) return Mesh with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GenMeshKnot";
+
+   function Gen_Mesh_Height_Map (
+      Height_Map : Image     := No_Image;
+      Size       : Vector_3D := (0.0, 0.0, 0.0)
+   ) return Mesh with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GenMeshHeightmap";
+
+   function Gen_Mesh_Cubic_Map (
+      Cubic_Map : Image     := No_Image;
+      Size      : Vector_3D := (0.0, 0.0, 0.0)
+   ) return Mesh with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GenMeshCubicmap";
+
+   function Load_Materials (
+      File_Name :        String  := "";
+      Counts    : access Integer := null
+   ) return access Material with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadMaterials";
+
+   function Load_Material_Default return Material with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadMaterialDefault";
+
+   function Is_Material_Ready (
+      Data : Material := No_Material
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsMaterialReady";
+
+   procedure Unload_Material (
+      Data : Material := No_Material
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UnloadMaterial";
+
+   procedure Set_Material_Texture (
+      Data : access Material           := null;
+      Kind :        Material_Map_Index := Material_Map_Height;
+      This :        Texture            := No_Texture
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetMaterialTexture";
+
+   procedure Set_Model_Mesh_Material (
+      Data        : access Model   := null;
+      Mesh_Id     :        Integer := 0;
+      Material_Id :        Integer := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetModelMeshMaterial";
+
+   function Load_Model_Animations (
+      File_Name :        String  := "";
+      Counts    : access Integer := null
+   ) return access Model_Animation with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadModelAnimations";
+
+   procedure Update_Model_Animation (
+      Data      : Model           := No_Model;
+      Animation : Model_Animation := No_Model_Animation;
+      Frame     : Integer         := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UpdateModelAnimation";
+
+   procedure Unload_Model_Animation (
+      Animation : Model_Animation := No_Model_Animation
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UnloadModelAnimation";
+
+   procedure Unload_Model_Animations (
+      Animations      : access Model_Animation := null;
+      Animation_Count :        Natural         := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UnloadModelAnimations";
+
+   function Is_Model_Animation_Valid (
+      Data      : Model           := No_Model;
+      Animation : Model_Animation := No_Model_Animation
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsModelAnimationValid";
+
+   function Check_Collision_Spheres (
+      Center_1 : Vector_3D := (0.0, 0.0, 0.0);
+      Radius_1 : Float     := 0.0;
+      Center_2 : Vector_3D := (0.0, 0.0, 0.0);
+      Radius_2 : Float     := 0.0
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "CheckCollisionSpheres";
+
+   function Check_Collision_Boxes (
+      Box_1 : Bounding_Box := No_Bounding_Box;
+      Box_2 : Bounding_Box := No_Bounding_Box
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "CheckCollisionBoxes";
+
+   function Check_Collision_Box_Sphere (
+      Box    : Bounding_Box := No_Bounding_Box;
+      Center : Vector_3D    := (0.0, 0.0, 0.0);
+      Radius : Float        := 0.0
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "CheckCollisionBoxSphere";
+
+   function Get_Ray_Collision_Sphere (
+      Hit    : Ray       := No_Ray;
+      Center : Vector_3D := (0.0, 0.0, 0.0);
+      Radius : Float     := 0.0
+   ) return Ray_Collision with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetRayCollisionSphere";
+
+   function Get_Ray_Collision_Box (
+      Hit : Ray          := No_Ray;
+      Box : Bounding_Box := No_Bounding_Box
+   ) return Ray_Collision with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetRayCollisionBox";
+
+   function Get_Ray_Collision_Mesh (
+      Hit       : Ray       := No_Ray;
+      Data      : Mesh      := No_Mesh;
+      Transform : Matrix_4D := Id_Matrix
+   ) return Ray_Collision with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetRayCollisionMesh";
+
+   function Get_Ray_Collision_Triangle (
+      Hit     : Ray       := No_Ray;
+      Point_1 : Vector_3D := (0.0, 0.0, 0.0);
+      Point_2 : Vector_3D := (0.0, 0.0, 0.0);
+      Point_3 : Vector_3D := (0.0, 0.0, 0.0)
+   ) return Ray_Collision with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetRayCollisionTriangle";
+
+   function Get_Ray_Collision_Quad (
+      Hit     : Ray       := No_Ray;
+      Point_1 : Vector_3D := (0.0, 0.0, 0.0);
+      Point_2 : Vector_3D := (0.0, 0.0, 0.0);
+      Point_3 : Vector_3D := (0.0, 0.0, 0.0);
+      Point_4 : Vector_3D := (0.0, 0.0, 0.0)
+   ) return Ray_Collision with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetRayCollisionQuad";
+
+   procedure Open_Audio_Device with
+      Import        => True,
+      Convention    => C,
+      External_Name => "InitAudioDevice";
+
+   procedure Close_Audio_Device with
+      Import        => True,
+      Convention    => C,
+      External_Name => "CloseAudioDevice";
+
+   function Is_Audio_Device_Ready return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsAudioDeviceReady";
+
+   procedure Set_Master_Volume (Volume : Float := 1.0) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetMasterVolume";
+
+   function Get_Master_Volume return Float with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetMasterVolume";
+
+   function Load_Wave (
+      File_Name : String  := ""
+   ) return Wave with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadWave";
+
+   function Load_Wave_From_Memory (
+      File_Type : String  := "";
+      File_Data : Pointer := null;
+      Data_Size : Natural := 0
+   ) return Wave with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadWaveFromMemory";
+
+   function Is_Wave_Ready (
+      Data : Wave := No_Wave
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsWaveReady";
+
+   function Load_Sound (
+      File_Name : String := ""
+   ) return Sound with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadSound";
+
+   function Load_Sound_From_Wave (
+      Data : Wave := No_Wave
+   ) return Sound with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadSoundFromWave";
+
+   function Load_Sound_Alias (
+      Source : Sound := No_Sound
+   ) return Sound with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadSoundAlias";
+
+   function Is_Sound_Ready (
+      Source : Sound := No_Sound
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsSoundReady";
+
+   procedure Update_Sound (
+      Source       : Sound   := No_Sound;
+      Data         : Pointer := null;
+      Sample_Count : Integer := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UpdateSound";
+
+   procedure Unload_Wave (
+      Data : Wave := No_Wave
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UnloadWave";
+
+   procedure Unload_Sound (
+      Data : Sound := No_Sound
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UnloadSound";
+
+   procedure Unload_Sound_Alias (
+      Alias : Sound := No_Sound
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UnloadSoundAlias";
+
+   function Export_Wave (
+      Data      : Wave   := No_Wave;
+      File_Name : String := ""
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "ExportWave";
+
+   function Export_Wave_As_Code (
+      Data      : Wave   := No_Wave;
+      File_Name : String := ""
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "ExportWaveAsCode";
+
+   procedure Play_Sound (
+      Data : Sound := No_Sound
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "PlaySound";
+
+   procedure Stop_Sound (
+      Data : Sound := No_Sound
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "StopSound";
+
+   procedure Pause_Sound (
+      Data : Sound := No_Sound
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "PauseSound";
+
+   procedure Resume_Sound (
+      Data : Sound := No_Sound
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "ResumeSound";
+
+   function Is_Sound_Playing (
+      Data : Sound := No_Sound
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsSoundPlaying";
+
+   procedure Set_Sound_Volume (
+      Data   : Sound := No_Sound;
+      Volume : Float := 0.0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetSoundVolume";
+
+   procedure Set_Sound_Pitch (
+      Data  : Sound := No_Sound;
+      Pitch : Float := 0.0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetSoundPitch";
+
+   procedure Set_Sound_Pan (
+      Data : Sound := No_Sound;
+      Pan  : Float := 0.0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetSoundPan";
+
+   function Wave_Copy (
+      Data : Wave := No_Wave
+   ) return Wave with
+      Import        => True,
+      Convention    => C,
+      External_Name => "WaveCopy";
+
+   procedure Wave_Crop (
+      Data         : access Wave    := null;
+      First_Sample :        Integer := 0;
+      Final_Sample :        Integer := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "WaveCrop";
+
+   procedure Wave_Format (
+      Data        : access Wave    := null;
+      Sample_Rate :        Integer := 0;
+      Sample_Size :        Integer := 0;
+      Channels    :        Integer := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "WaveFormat";
+
+   function Load_Wave_Samples (
+      Data : Wave := No_Wave
+   ) return access Float with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadWaveSamples";
+
+   procedure Unload_Wave_Samples (
+      Samples : access Float := null
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UnloadWaveSamples";
+
+   function Load_Music_Stream (
+      File_Name : String := ""
+   ) return Music with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadMusicStream";
+
+   function Load_Music_Stream_From_Memory (
+      File_Type : String  := "";
+      Data      : Pointer := null;
+      Data_Size : Integer := 0
+   ) return Music with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadMusicStreamFromMemory";
+
+   function Is_Music_Ready (
+      Data : Music := No_Music
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsMusicReady";
+
+   procedure Unload_Music_Stream (
+      Data : Music := No_Music
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UnloadMusicStream";
+
+   procedure Play_Music_Stream (
+      Data : Music := No_Music
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "PlayMusicStream";
+
+   function Is_Music_Stream_Playing (
+      Data : Music := No_Music
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsMusicStreamPlaying";
+
+   procedure Update_Music_Stream (
+      Data : Music := No_Music
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UpdateMusicStream";
+
+   procedure Stop_Music_Stream (
+      Data : Music := No_Music
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "StopMusicStream";
+
+   procedure Pause_Music_Stream (
+      Data : Music := No_Music
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "PauseMusicStream";
+
+   procedure Resume_Music_Stream (
+      Data : Music := No_Music
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "ResumeMusicStream";
+
+   procedure Seek_Music_Stream (
+      Data     : Music := No_Music;
+      Position : Float := 0.0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SeekMusicStream";
+
+   procedure Set_Music_Volume (
+      Data   : Music := No_Music;
+      Volume : Float := 0.0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetMusicVolume";
+
+   procedure Set_Music_Pitch (
+      Data  : Music := No_Music;
+      Pitch : Float := 0.0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetMusicPitch";
+
+   procedure Set_Music_Pan (
+      Data : Music := No_Music;
+      Pan  : Float := 0.0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetMusicPan";
+
+   function Get_Music_Time_Length (
+      Data : Music := No_Music
+   ) return Float with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetMusicTimeLength";
+
+   function Get_Music_Time_Played (
+      Data : Music := No_Music
+   ) return Float with
+      Import        => True,
+      Convention    => C,
+      External_Name => "GetMusicTimePlayed";
+
+   function Load_Audio_Stream (
+      Sample_Rate : Natural := 0;
+      Sample_Size : Natural := 0;
+      Channels    : Natural := 0
+   ) return Audio_Stream with
+      Import        => True,
+      Convention    => C,
+      External_Name => "LoadAudioStream";
+
+   function Is_Audio_Stream_Ready (
+      Data : Audio_Stream := No_Audio_Stream
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsAudioStreamReady";
+
+   procedure Unload_Audio_Stream (
+      Data : Audio_Stream := No_Audio_Stream
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UnloadAudioStream";
+
+   procedure Update_Audio_Stream (
+      Data        : Audio_Stream := No_Audio_Stream;
+      Raw_Data    : Pointer      := null;
+      Frame_Count : Integer      := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "UpdateAudioStream";
+
+   function Is_Audio_Stream_Processed (
+      Data : Audio_Stream := No_Audio_Stream
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsAudioStreamProcessed";
+
+   procedure Play_Audio_Stream (
+      Data : Audio_Stream := No_Audio_Stream
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "PlayAudioStream";
+
+   procedure Pause_Audio_Stream (
+      Data : Audio_Stream := No_Audio_Stream
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "PauseAudioStream";
+
+   procedure Resume_Audio_Stream (
+      Data : Audio_Stream := No_Audio_Stream
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "ResumeAudioStream";
+
+   function Is_Audio_Stream_Playing (
+      Data : Audio_Stream := No_Audio_Stream
+   ) return Logical with
+      Import        => True,
+      Convention    => C,
+      External_Name => "IsAudioStreamPlaying";
+
+   procedure Stop_Audio_Stream (
+      Data : Audio_Stream := No_Audio_Stream
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "StopAudioStream";
+
+   procedure Set_Audio_Stream_Volume (
+      Data   : Audio_Stream := No_Audio_Stream;
+      Volume : Float        := 0.0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetAudioStreamVolume";
+
+   procedure Set_Audio_Stream_Pitch (
+      Data  : Audio_Stream := No_Audio_Stream;
+      Pitch : Float        := 0.0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetAudioStreamPitch";
+
+   procedure Set_Audio_Stream_Pan (
+      Data : Audio_Stream := No_Audio_Stream;
+      Pan  : Float        := 0.0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetAudioStreamPan";
+
+   procedure Set_Audio_Stream_Buffer_Size_Default (
+      Size : Integer := 0
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "SetAudioStreamBufferSizeDefault";
+
+   procedure Attach_Audio_Stream_Processor (
+      Stream    : Audio_Stream := No_Audio_Stream;
+      Processor : Pointer      := null
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "AttachAudioStreamProcessor";
+
+   procedure Detach_Audio_Stream_Processor (
+      Stream    : Audio_Stream := No_Audio_Stream;
+      Processor : Pointer      := null
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DetachAudioStreamProcessor";
+
+   procedure Attach_Audio_Mixed_Processor (
+      Processor : Pointer := null
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "AttachAudioMixedProcessor";
+
+   procedure Detach_Audio_Mixed_Processor (
+      Processor : Pointer := null
+   ) with
+      Import        => True,
+      Convention    => C,
+      External_Name => "DetachAudioMixedProcessor";
+
+------------------------------------------------------------------------
 
 end Raylib;