with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
with Interfaces; use Interfaces;
package Support is
function "*"( i : Integer; f : Float ) return Float;
function "*"( f : Float; i : Integer ) return Float;
function "/"( i : Integer; f : Float ) return Float;
function "/"( f : Float; i : Integer ) return Float;
function "-"( f : Float; i : Integer ) return Float;
function "-"( i : Integer; f : Float ) return Float;
function "+"( f : Float; i : Integer ) return Float;
function "+"( i : Integer; f : Float ) return Float;
function "**"( l, r : Long_Float ) return Long_Float;
function Constrain( val, min, max : Float ) return Float;
function Constrain( val, min, max : Integer ) return Integer;
function Div_Ceil( a, b : Integer ) return Integer;
function Floor( x : Float ) return Integer;
function Max( a, b : Integer ) return Integer;
function Max( a, b : Float ) return Float;
function Min( a, b : Integer ) return Integer;
function Min( a, b : Float ) return Float;
function "&"( l : String; r : Unbounded_String ) return String;
function "&"( l : Unbounded_String; r : String ) return String;
function Capitalize( str : String ) return String;
pragma Postcondition( Capitalize'Result'Length = str'Length );
function Case_Eq( l, r : String ) return Boolean;
function Case_Eq( l, r : Unbounded_String ) return Boolean;
function Case_Eq( l : Unbounded_String; r : String ) return Boolean;
function Case_Eq( l : String; r : Unbounded_String ) return Boolean;
function Ends_With( str : String; ending : String ) return Boolean;
procedure Iterate_Words( phrase : String;
examine : access procedure( word : String ) );
function Replace( str : String; from, to : Character ) return String;
function File_Length( path : String ) return Long_Integer;
pragma Postcondition( File_Length'Result >= -1 );
function Source_Ref_To_Unit_Name( ref : String ) return String;
function Contains( ax1, ay1, ax2, ay2, bx, by : Integer ) return Boolean;
function Grid_Snap( point : Integer;
gridSize : Positive;
centered : Boolean := False ) return Integer;
function Intersect( ax1, ay1, ax2, ay2, bx1, by1, bx2, by2 : Integer ) return Boolean;
function Image( i : Integer ) return String;
pragma Postcondition( Image'Result'Length > 0 );
function Image( u : Unsigned_32 ) return String;
pragma Postcondition( Image'Result'Length > 0 );
function Image( f : Float; precision : Natural := 3 ) return String;
pragma Postcondition( Image'Result'Length > 0 );
function Random_32 return Unsigned_32;
private
package OS is
function App_Data_Directory return String;
function Executable_Extension return String;
function Executable_Path return String;
function Home_Directory return String;
procedure Reveal_Path( path : String );
function System_Font_Directory return String;
end OS;
pragma Import( C, "**", "pow" );
end Support;