--*******************************************************************
-- Copyright (C) 2000 ImageLinks Inc. 
--
-- OSSIM 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.
--
-- This software is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
--
-- You should have received a copy of the GNU General Public License
-- along with this software. If not, write to the Free Software 
-- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-
-- 1307, USA.
--
-- See the GPL in the COPYING.GPL file for more details.
--
-- Author: Ken Melero (kmelero@remotesensing.org)
-- Description: Common file for global functions.
--
--*************************************************************************
with Ossim_Constants;
 use Ossim_Constants;
package Ossim_Common is

    Common_H :  Short_Integer := 1;

    function  Cosd(X : Long_Float)  return  Long_Float;
    pragma Import(C, Cosd, "cosd");

    function  Sind(X : Long_Float)  return  Long_Float;
    pragma Import(C, Sind, "sind");

    function  Tand(X : Long_Float)  return  Long_Float;
    pragma Import(C, Tand, "tand");

    function  Acosd(X : Long_Float)  return  Long_Float;
    pragma Import(C, Acosd, "acosd");

    function  Asind(X : Long_Float)  return  Long_Float;
    pragma Import(C, Asind, "asind");

    function  Atand(X : Long_Float)  return  Long_Float;
    pragma Import(C, Atand, "atand");

    function  Atan2d(Y : Long_Float; X : Long_Float)  return  Long_Float;
    pragma Import(C, Atan2d, "atan2d");

    function  OssimIsNan(Val : Long_Float)  return  Boolean;

    function  ossimIsNan(Val : Float)  return  Boolean;

    function  ossimIsNan(Val :  Short_Integer)  return  Boolean;

    function  ossimIsNan(Val : Long_Integer)  return  Boolean;
    pragma Import(C, OssimIsNan, "ossimIsNan");
    
    function  Sinc(X : Long_Float)  return  Long_Float;
    pragma Import(C, Sinc, "sinc");

    function  OssimGetSign(Value : Long_Float)  return   Short_Integer;
    pragma Import(C, OssimGetSign, "ossimGetSign");

    function  Square(X : Long_Float)  return  Long_Float;

    function  Square(X : Long_Integer)  return  Long_Integer;
    pragma Import(C, Square, "square");

    function  Equals(X : Long_Float; Y : Long_Float)  return  Boolean;

    function  Equals(X : Float; Y : Float)  return  Boolean;
    pragma Import(C, Equals, "equals");

    function  Factorial(N :  Short_Integer)  return   Short_Integer;
    pragma Import(C, Factorial, "factorial");

    -- Round a Long_Float to an int correctly.
    --inline int irint(Long_Float d) { return int(floor(d + 0.5)); 
    function  Irint(D : Long_Float)  return   Short_Integer;

    -- Round a Long_Float to an int correctly.
    --inline long irlong(Long_Float d) { return long(floor(d + 0.5)); 
    function  Irlong(D : Long_Float)  return   Short_Integer;

    -- Round a Long_Float to an int correctly.
    --inline int irint(Long_Float d) { return int(floor(d + 0.5)); 
    function  Irint(D : Float)  return   Short_Integer;
    pragma Import(C, Irint, "irint");

    -- Round a Long_Float to an int correctly.
    --inline long irlong(Long_Float d) { return long(floor(d + 0.5)); 
    function  Irlong(D : Float)  return   Short_Integer;
    pragma Import(C, Irlong, "irlong");

    function  Gcd(M :  Short_Integer; N :  Short_Integer)  return
        Short_Integer;
    pragma Import(C, Gcd, "gcd");

    --***
    -- Common conversion functions
    --***
    function  Ft2mtrs(Feet : Long_Float)  return  Long_Float;
    pragma Import(C, Ft2mtrs, "ft2mtrs");

    function  Usft2mtrs(Feet : Long_Float)  return  Long_Float;
    pragma Import(C, Usft2mtrs, "usft2mtrs");

    function  Mtrs2ft(Meters : Long_Float)  return  Long_Float;
    pragma Import(C, Mtrs2ft, "mtrs2ft");

    function  Mtrs2usft(Meters : Long_Float)  return  Long_Float;
    pragma Import(C, Mtrs2usft, "mtrs2usft");

    function  ByteOrder  return  Ossim_Int32;
    pragma Import(C, ByteOrder, "byteOrder");

    function  OssimGetDefaultMin(ScalarType : 
        OssimScalarType)  return Long_Float;
    pragma Import(C, OssimGetDefaultMin, "ossimGetDefaultMin");

    function  OssimGetDefaultMax(ScalarType : 
        OssimScalarType)  return Long_Float;
    pragma Import(C, OssimGetDefaultMax, "ossimGetDefaultMax");

    function  OssimGetDefaultNull(ScalarType : 
        OssimScalarType)  return Long_Float;
    pragma Import(C, OssimGetDefaultNull, "ossimGetDefaultNull");

    function  OssimGetScalarSizeInBytes(ScalarType : 
            OssimScalarType)  return Ossim_Uint32;
    pragma Import(C, OssimGetScalarSizeInBytes,
        "GetScalarSizeInBytes");

        
end Ossim_Common;