.lib "User32.dll"
BlitzUtility_User32_ClientToScreen%(hwnd%, point*)										: "ClientToScreen"
BlitzUtility_User32_ClipCursor%(rect*)													: "ClipCursor"
BlitzUtility_User32_ClipCursorI%(ptr%)													: "ClipCursor"
BlitzUtility_User32_GetActiveWindow%()													: "GetActiveWindow"
BlitzUtility_User32_GetSystemMetrics%(index%)											: "GetSystemMetrics"
BlitzUtility_User32_SetWindowLong%(hwnd%, nIndex%, dwNewLong%)							: "SetWindowLongA"
BlitzUtility_User32_GetWindowLong%(hwnd%, index%)										: "GetWindowLongA"
BlitzUtility_User32_GetWindowRect%(hwnd%, rect*)										: "GetWindowRect"
BlitzUtility_User32_GetClientRect%(hwnd%, rect*)										: "GetClientRect"
BlitzUtility_User32_SetWindowPos%(hwnd%, hWndInsertAfter%, x%, y%, cx%, cy%, wFlags%)	: "SetWindowPos" 

.lib "Kernel32.dll"
BlitzUtility_Kernel32_FlushFileBuffers%(hFile%)											: "FlushFileBuffers"

.lib "BlitzUtility.dll"
; Containers - BlitzList
BU_BlitzList_New%(obj*)																	: "BlitzList_New"
BU_BlitzList_Activate(list%)															: "BlitzList_Activate"
BU_BlitzList_Deactivate(list%)															: "BlitzList_Deactivate"
BU_BlitzList_Destroy(list%)																: "BlitzList_Delete"
; Containers - BlitzList - Backward Compatability
BlitzUtility_List_New%(obj*)															: "BlitzList_New"
BlitzUtility_List_Activate(list%)														: "BlitzList_Activate"
BlitzUtility_List_Deactivate(list%)														: "BlitzList_Deactivate"
BlitzUtility_List_Destroy(list%)														: "BlitzList_Delete"

; Database - SQLite3
SQLite3_LibVersion$()																	: "sqlite3_libversion"
; Opening and Closing ------------------------------------------------
SQLite3_Open%(Filename$, DatabaseHandle*)												: "sqlite3_open"
SQLite3_Open_V2%(Filename$, DatabaseHandle*, Flags%, VFS%)								: "sqlite3_open_v2"
SQLite3_Close%(DatabaseHandle)															: "sqlite3_close"
; Misc ---------------------------------------------------------------
SQLite3_Busy_TimeOut%(DatabaseHandle, TimeOut)											: "sqlite3_busy_timeout"
SQLite3_Get_AutoCommit%(DatabaseHandle)													: "sqlite3_get_autocommit"
SQLite3_Interrupt(DatabaseHandle)														: "sqlite3_interrupt"
; Errors -------------------------------------------------------------
SQLite3_ErrCode%(DatabaseHandle)														: "sqlite3_errcode"
SQLite3_ErrMsg$(DatabaseHandle)															: "sqlite3_errmsg"
; Executing SQL without results --------------------------------------
; As Blitz3D doesn't have function pointers the CallBack is pointless
; and this can only really be used for result-less SQL statements.
; Also, I've never got the Error return to work. So just pass in
; zeros for the last three parameters and use SQLite3_ErrMsg if you
; need to get the error message.
SQLite3_Exec%(DatabaseHandle, SQL$, CallBack, FirstParam, Error)						: "sqlite3_exec"
SQLite3_Changes%(DatabaseHandle)														: "sqlite3_changes"
SQLite3_Total_Changes%(DatabaseHandle)													: "sqlite3_total_changes"
SQLite3_Last_Insert_RowID%(DatabaseHandle)												: "sqlite3_last_insert_rowid"
; Executing SQL with results -----------------------------------------
; Never got the SQLTail to work so just pass in a zero.
SQLite3_Prepare%(DatabaseHandle, SQL$, LengthOfSQL, StatementHandle*, SQLTail)			: "sqlite3_prepare"
SQLite3_Step%(StatementHandle)															: "sqlite3_step"
SQLite3_Reset%(StatementHandle)															: "sqlite3_reset"
SQLite3_Finalize%(StatementHandle)														: "sqlite3_finalize"
SQLite3_Data_Count%(StatementHandle)													: "sqlite3_data_count"
SQLite3_DB_Handle%(StatementHandle)														: "sqlite3_db_handle"
; SQL Parameter Binding ----------------------------------------------
SQLite3_Bind_Parameter_Count%(StatementHandle)											: "sqlite3_bind_parameter_count"
SQLite3_Bind_Parameter_Index%(StatementHandle, ParameterName$)							: "sqlite3_bind_parameter_index"
SQLite3_Bind_Parameter_Name$(StatementHandle, ParameterIndex)							: "sqlite3_bind_parameter_name"
; Never tested this for real, but it should work.
SQLite3_Transfer_Bindings%(StatementHandle1, StatementHandle2)							: "sqlite3_transfer_bindings"
SQLite3_Bind_Null%(StatementHandle, Index)												: "sqlite3_bind_null"
SQLite3_Bind_Int%(StatementHandle, Index, Value)										: "sqlite3_bind_int"
; If you pass -1 for LengthOfText it will work it out for itself. Pass a zero in for Destructor.
SQLite3_Bind_Text%(StatementHandle, Index, Value$, LengthOfText, Destructor)			: "sqlite3_bind_text"
; Never tried this so it probably won't work. Pass a zero in for Destructor.
SQLite3_Bind_Blob%(StatementHandle, Index, Value, LengthOfBlob, Destructor)				: "sqlite3_bind_blob"
; Doesn't seem to work unfortunately.
SQLite3_Bind_Double%(StatementHandle, Index, Value#)									: "sqlite3_bind_double"
; Helpers
SQLite3_Bind_Int64%(StatementHandle, Index, Left, Right)								: "sqlite3_bind_int64_ex"
SQLite3_Bind_Float%(StatementHandle, Index, Value#)										: "sqlite3_bind_float"
; Getting values from executed SQL  ----------------------------------
SQLite3_Column_Count%(StatementHandle)													: "sqlite3_column_count"
SQLite3_Column_Name$(StatementHandle, ColumnIndex)										: "sqlite3_column_name"
SQLite3_Column_Type%(StatementHandle, ColumnIndex)										: "sqlite3_column_type"
SQLite3_Column_DeclType$(StatementHandle, ColumnIndex)									: "sqlite3_column_decltype"
SQLite3_Column_Int%(StatementHandle, ColumnIndex)										: "sqlite3_column_int"
SQLite3_Column_Double#(StatementHandle, ColumnIndex)									: "sqlite3_column_double"
SQLite3_Column_Text$(StatementHandle, ColumnIndex)										: "sqlite3_column_text"
SQLite3_Column_Bytes%(StatementHandle, ColumnIndex)										: "sqlite3_column_bytes"
; Never tried this so it probably won't work.
SQLite3_Column_Blob%(StatementHandle, ColumnIndex)										: "sqlite3_column_blob"
; Helpers
SQLite3_Column_Int64(StatementHandle, ColumnIndex, outPtr*)								: "sqlite3_column_int64_ex"
SQLite3_Column_Float#(StatementHandle, ColumnIndex)										: "sqlite3_column_float"
; Helpers ------------------------------------------------------------
SQLite_Version$()																		: "sqlite3_libversion"
SQLite_Close%(DatabaseHandle)															: "sqlite3_close"
SQLite_SetTimeOut%(DatabaseHandle, TimeOut)												: "sqlite3_busy_timeout"
SQLite_Get_AutoCommit%(DatabaseHandle)													: "sqlite3_get_autocommit"
SQLite_Interrupt(DatabaseHandle)														: "sqlite3_interrupt"
SQLite_ErrCode%(DatabaseHandle)															: "sqlite3_errcode"
SQLite_ErrMsg$(DatabaseHandle)															: "sqlite3_errmsg"
SQLite_Changes%(DatabaseHandle)															: "sqlite3_changes"
SQLite_Total_Changes%(DatabaseHandle)													: "sqlite3_total_changes"
SQLite_Last_Insert_RowID%(DatabaseHandle)												: "sqlite3_last_insert_rowid"
SQLite_Step%(StatementHandle)															: "sqlite3_step"
SQLite_Reset%(StatementHandle)															: "sqlite3_reset"
SQLite_Finalize%(StatementHandle)														: "sqlite3_finalize"
SQLite_Data_Count%(StatementHandle)														: "sqlite3_data_count"
SQLite_DB_Handle%(StatementHandle)														: "sqlite3_db_handle"
SQLite_Bind_Parameter_Count%(StatementHandle)											: "sqlite3_bind_parameter_count"
SQLite_Bind_Parameter_Index%(StatementHandle, ParameterName$)							: "sqlite3_bind_parameter_index"
SQLite_Bind_Parameter_Name$(StatementHandle, ParameterIndex)							: "sqlite3_bind_parameter_name"
SQLite_Transfer_Bindings%(StatementHandle1, StatementHandle2)							: "sqlite3_transfer_bindings"
SQLite_Bind_Null%(StatementHandle, Index)												: "sqlite3_bind_null"
SQLite_Bind_Int%(StatementHandle, Index, Value)											: "sqlite3_bind_int"
SQLite_Bind_Int64%(StatementHandle, Index, Left, Right)									: "sqlite3_bind_int64_ex"
;SQLite_Bind_Text%(StatementHandle, Index, Value$, LengthOfText, Destructor)				: "sqlite3_bind_text"
;SQLite_Bind_Blob%(StatementHandle, Index, Value, LengthOfBlob, Destructor)				: "sqlite3_bind_blob"
SQLite_Bind_Double%(StatementHandle, Index, Value#)										: "sqlite3_bind_double"
SQLite_Bind_Float%(StatementHandle, Index, Value#)										: "sqlite3_bind_float"
SQLite_Column_Count%(StatementHandle)													: "sqlite3_column_count"
SQLite_Column_Name$(StatementHandle, ColumnIndex)										: "sqlite3_column_name"
SQLite_Column_Type%(StatementHandle, ColumnIndex)										: "sqlite3_column_type"
SQLite_Column_DeclType$(StatementHandle, ColumnIndex)									: "sqlite3_column_decltype"
SQLite_Column_Int%(StatementHandle, ColumnIndex)										: "sqlite3_column_int"
SQLite_Column_Double#(StatementHandle, ColumnIndex)										: "sqlite3_column_double"
SQLite_Column_Text$(StatementHandle, ColumnIndex)										: "sqlite3_column_text"
SQLite_Column_Bytes%(StatementHandle, ColumnIndex)										: "sqlite3_column_bytes"
SQLite_Column_Blob%(StatementHandle, ColumnIndex)										: "sqlite3_column_blob"
SQLite_Column_Float#(StatementHandle, ColumnIndex)										: "sqlite3_column_float"

; Math - Vector2
Vector2_Set(vector*, value#)															: "Vector2_Set"
Vector2_SetP(vector*, x#, y#)															: "Vector2_SetP"
Vector2_SetV(vector*, other*)															: "Vector2_SetV"
Vector2_Add(vector*, value#)															: "Vector2_Add"
Vector2_AddP(vector*, x#, y#)															: "Vector2_AddP"
Vector2_AddV(vector*, other*)															: "Vector2_AddV"
Vector2_Sub(vector*, value#)															: "Vector2_Sub"
Vector2_SubP(vector*, x#, y#)															: "Vector2_SubP"
Vector2_SubV(vector*, other*)															: "Vector2_SubV"
Vector2_Mul(vector*, value#)															: "Vector2_Mul"
Vector2_MulP(vector*, x#, y#)															: "Vector2_MulP"
Vector2_MulV(vector*, other*)															: "Vector2_MulV"
Vector2_Div(vector*, value#)															: "Vector2_Div"
Vector2_DivP(vector*, x#, y#)															: "Vector2_DivP"
Vector2_DivV(vector*, other*)															: "Vector2_DivV"
Vector2_Length#(vector*)																: "Vector2_Length"
Vector2_DistanceP#(vector*, x#, y#)														: "Vector2_DistanceP"
Vector2_DistanceV#(vector*, other*)														: "Vector2_DistanceV"
Vector2_DotP#(vector*, x#, y#)															: "Vector2_DotP"
Vector2_DotV#(vector*, other*)															: "Vector2_DotV"
Vector2_Normalize(vector*)																: "Vector2_Normalize"
Vector2_Rotate(vector*, rotation#)														: "Vector2_Rotate"
Vector2_RotateAroundP(vector*, x#, y#, rotation#)										: "Vector2_RotateAroundP"
Vector2_RotateAroundV(vector*, other*, rotation#)										: "Vector2_RotateAroundV"
Vector2_DeltaRotation#(vector*)															: "Vector2_DeltaRotation"
Vector2_DeltaRotationP#(vector*, x#, y#)												: "Vector2_DeltaRotationP"
Vector2_DeltaRotationV#(vector*, other*)												: "Vector2_DeltaRotationV"
Vector2_Serialize$(vector*)																: "Vector2_Serialize"
Vector2_Deserialize(vector*, serial$)													: "Vector2_Deserialize"

; Math - Vector3
Vector3_Set(vector*, value#)															: "Vector3_Set"
Vector3_SetP(vector*, x#, y#, z#)														: "Vector3_SetP"
Vector3_SetV(vector*, other*)															: "Vector3_SetV"
Vector3_Add(vector*, value#)															: "Vector3_Add"
Vector3_AddP(vector*, x#, y#, z#)														: "Vector3_AddP"
Vector3_AddV(vector*, other*)															: "Vector3_AddV"
Vector3_Sub(vector*, value#)															: "Vector3_Sub"
Vector3_SubP(vector*, x#, y#, z#)														: "Vector3_SubP"
Vector3_SubV(vector*, other*)															: "Vector3_SubV"
Vector3_Mul(vector*, value#)															: "Vector3_Mul"
Vector3_MulP(vector*, x#, y#, z#)														: "Vector3_MulP"
Vector3_MulV(vector*, other*)															: "Vector3_MulV"
Vector3_Div(vector*, value#)															: "Vector3_Div"
Vector3_DivP(vector*, x#, y#, z#)														: "Vector3_DivP"
Vector3_DivV(vector*, other*)															: "Vector3_DivV"
Vector3_Length#(vector*)																: "Vector3_Length"
Vector3_DistanceP#(vector*, x#, y#, z#)													: "Vector3_DistanceP"
Vector3_DistanceV#(vector*, other*)														: "Vector3_DistanceV"
Vector3_DotP#(vector*, x#, y#, z#)														: "Vector3_DotP"
Vector3_DotV#(vector*, other*)															: "Vector3_DotV"
Vector3_CrossP(vector*, x#, y#, z#, out*)												: "Vector3_CrossP"
Vector3_CrossV(vector*, other*, out*)													: "Vector3_CrossV"
Vector3_Normalize(vector*)																: "Vector3_Normalize"
Vector3_Rotate(vector*, pitch#, yaw#, roll#)											: "Vector3_Rotate"
Vector3_RotateAroundP(vector*, x#, y#, z#, pitch#, yaw#, roll#)							: "Vector3_RotateAroundP"
Vector3_RotateAroundV(vector*, other*, pitch#, yaw#, roll#)								: "Vector3_RotateAroundV"
Vector3_DeltaPitch#(vector*)															: "Vector3_DeltaPitch"
Vector3_DeltaPitchP#(vector*, x#, y#, z#)												: "Vector3_DeltaPitchP"
Vector3_DeltaPitchV#(vector*, other*)													: "Vector3_DeltaPitchV"
Vector3_DeltaYaw#(vector*)																: "Vector3_DeltaYaw"
Vector3_DeltaYawP#(vector*, x#, y#, z#)													: "Vector3_DeltaYawP"
Vector3_DeltaYawV#(vector*, other*)														: "Vector3_DeltaYawV"
Vector3_Serialize$(vector*)																: "Vector3_Serialize"
Vector3_Deserialize(vector*, serial$)													: "Vector3_Deserialize"

; Utility - Displays
BU_Display_Enumerate()																	: "Display_Enumerate"
BU_Display_Count%()																		: "Display_Count"
BU_Display_Get(id%, rectangle*)															: "Display_Get"
; Utility - Displays - Backward Compatability
BlitzUtility_EnumerateDisplays()														: "Display_Enumerate"
BlitzUtility_GetDisplayCount%()															: "Display_Count"
BlitzUtility_GetDisplay(id%, rectangle*)												: "Display_Get"

; Utility - Indexing
BU_Indexer_Create%()																	: "Indexer_Create"
BU_Indexer_GetFreeIndex%(indexer%)														: "Indexer_GetFreeIndex"
BU_Indexer_MarkFreeIndex(indexer%, index%)												: "Indexer_MarkFreeIndex"
BU_Indexer_Destroy(indexer%)															: "Indexer_Destroy"
; Utility - Indexing - Backward Compatability
Indexer_Create%()																		: "Indexer_Create"
Indexer_GetFreeIndex%(indexer%)															: "Indexer_GetFreeIndex"
Indexer_MarkFreeIndex(indexer%, index%)													: "Indexer_MarkFreeIndex"
Indexer_Destroy(indexer%)																: "Indexer_Destroy"

; Utility - Window Messages
BU_WindowMessageHandler_InstallHandler(hwnd%)											: "WindowMessageHandler_Install"
BU_WindowMessageHandler_UninstallHandler(hwnd%)											: "WindowMessageHandler_Uninstall"
BU_WindowMessageHandler_Message_Close%(hwnd%)											: "WindowMessageHandler_Message_Close"
BU_WindowMessageHandler_Message_Destroy%(hwnd%)											: "WindowMessageHandler_Message_Destroy"
BU_WindowMessageHandler_Message_Resize%(hwnd%, point*)									: "WindowMessageHandler_Message_Resize"
; Utility - Window Messages - Backward Compatability
BlitzUtility_InstallCloseHandler(hwnd%)													: "WindowMessageHandler_InstallHandler"
BlitzUtility_UninstallCloseHandler(hwnd%)												: "WindowMessageHandler_UninstallHandler"
BlitzUtility_GetCloseCount%(hwnd%)														: "WindowMessageHandler_CountCloseMessages"
