#ifdef __cplusplus
extern "C"
{
#endif

#ifndef gpsproj_h
#define gpsproj_h


#include "gps.h"

void GPS_Math_Albers_LatLon_To_EN(double phi, double lambda, double *E,
				  double *N, double phi1, double phi2,
				  double phi0, double M0, double E0,
				  double N0, double a, double b);
void GPS_Math_Albers_EN_To_LatLon(double E, double N, double *phi,
				  double *lambda, double phi1, double phi2,
				  double phi0, double M0, double E0,
				  double N0, double a, double b);


void GPS_Math_LambertCC_LatLon_To_EN(double phi, double lambda, double *E,
				     double *N, double phi1, double phi2,
				     double phi0, double M0, double E0,
				     double N0, double a, double b);
void GPS_Math_LambertCC_EN_To_LatLon(double E, double N, double *phi,
				     double *lambda, double phi1, double phi2,
				     double phi0, double M0, double E0,
				     double N0, double a, double b);

void GPS_Math_Miller_LatLon_To_EN(double phi, double lambda, double *E,
				  double *N, double M0, double E0,
				  double N0, double a, double b);
void GPS_Math_Miller_EN_To_LatLon(double E, double N, double *phi,
				  double *lambda, double M0, double E0,
				  double N0, double a, double b);

void GPS_Math_Bonne_LatLon_To_EN(double phi, double lambda, double *E,
				 double *N, double phi0, double M0, double E0,
				 double N0, double a, double b);
void GPS_Math_Bonne_EN_To_LatLon(double E, double N, double *phi,
				 double *lambda, double phi0, double M0,
				 double E0, double N0, double a, double b);

void GPS_Math_Cassini_LatLon_To_EN(double phi, double lambda, double *E,
				   double *N, double phi0, double M0,
				   double E0, double N0, double a, double b);
void GPS_Math_Cassini_EN_To_LatLon(double E, double N, double *phi,
				   double *lambda, double phi0, double M0,
				   double E0, double N0, double a, double b);

void GPS_Math_Cylea_LatLon_To_EN(double phi, double lambda, double *E,
				 double *N, double phi0, double M0,
				 double E0, double N0, double a, double b);
void GPS_Math_Cylea_EN_To_LatLon(double E, double N, double *phi,
				 double *lambda, double phi0, double M0,
				 double E0, double N0, double a, double b);

void GPS_Math_EckertIV_LatLon_To_EN(double phi, double lambda, double *E,
				    double *N, double M0, double E0, double N0,
				    double a, double b);
void GPS_Math_EckertIV_EN_To_LatLon(double E, double N, double *phi,
				    double *lambda, double M0, double E0,
				    double N0, double a, double b);

void GPS_Math_EckertVI_LatLon_To_EN(double phi, double lambda, double *E,
				    double *N, double M0, double E0, double N0,
				    double a, double b);
void GPS_Math_EckertVI_EN_To_LatLon(double E, double N, double *phi,
				    double *lambda, double M0, double E0,
				    double N0, double a, double b);

void GPS_Math_Cyled_LatLon_To_EN(double phi, double lambda, double *E,
				 double *N, double phi0, double M0, double E0,
				 double N0, double a, double b);
void GPS_Math_Cyled_EN_To_LatLon(double E, double N, double *phi,
				 double *lambda, double phi0, double M0,
				 double E0, double N0, double a, double b);

void GPS_Math_VderGrinten_LatLon_To_EN(double phi, double lambda, double *E,
				       double *N, double M0, double E0,
				       double N0, double a, double b);
void GPS_Math_VderGrinten_EN_To_LatLon(double E, double N, double *phi,
				       double *lambda, double M0, double E0,
				       double N0, double a, double b);

void GPS_Math_PolarSt_LatLon_To_EN(double phi, double lambda, double *E,
				   double *N, double phi1, double lambda1,
				   double E0, double N0, double a, double b);
void GPS_Math_PolarSt_EN_To_LatLon(double E, double N, double *phi,
				   double *lambda, double phi1, double lambda1,
				   double E0, double N0, double a, double b);

void GPS_Math_Mollweide_LatLon_To_EN(double phi, double lambda, double *E,
				     double *N, double M0, double E0,
				     double N0, double a, double b);
void GPS_Math_Mollweide_EN_To_LatLon(double E, double N, double *phi,
				     double *lambda, double M0, double E0,
				     double N0, double a, double b);

void GPS_Math_Orthog_LatLon_To_EN(double phi, double lambda, double *E,
				  double *N, double phi0, double lambda0,
				  double E0, double N0, double a, double b);
void GPS_Math_Orthog_EN_To_LatLon(double E, double N, double *phi,
				  double *lambda, double phi0, double lambda0,
				  double E0, double N0, double a, double b);

void GPS_Math_Polycon_LatLon_To_EN(double phi, double lambda, double *E,
				   double *N, double phi0, double M0,
				   double E0, double N0, double a, double b);
void GPS_Math_Polycon_EN_To_LatLon(double E, double N, double *phi,
				   double *lambda, double phi0, double M0,
				   double E0, double N0, double a, double b);

void GPS_Math_Sinusoid_LatLon_To_EN(double phi, double lambda, double *E,
				    double *N, double M0, double E0,
				    double N0, double a, double b);
void GPS_Math_Sinusoid_EN_To_LatLon(double E, double N, double *phi,
				    double *lambda, double M0, double E0,
				    double N0, double a, double b);

void GPS_Math_TCylEA_LatLon_To_EN(double phi, double lambda, double *E,
				  double *N, double phi0, double M0, double E0,
				  double N0, double a, double b);
void GPS_Math_TCylEA_EN_To_LatLon(double E, double N, double *phi,
				  double *lambda, double phi0, double M0,
				  double E0, double N0, double a, double b);

void GPS_Math_Mercator_LatLon_To_EN(double phi, double lambda, double *E,
				    double *N, double phi0, double lambda0,
				    double E0, double N0, double a, double b);
void GPS_Math_Mercator_EN_To_LatLon(double E, double N, double *phi,
				    double *lambda, double phi0,
				    double lambda0, double E0, double N0,
				    double a, double b);

void GPS_Math_TMerc_LatLon_To_EN(double phi, double lambda, double *E,
				 double *N, double phi0, double lambda0,
				 double E0, double N0, double F0,
				 double a, double b);
void GPS_Math_TMerc_EN_To_LatLon(double E, double N, double *phi,
				 double *lambda, double phi0, double lambda0,
				 double E0, double N0, double F0,
				 double a, double b);

void GPS_Math_Swiss_LatLon_To_EN(double phi, double lambda, double *E,
				 double *N,double phi0,double lambda0,
				 double E0, double N0, double a, double b);
void GPS_Math_Swiss_EN_To_LatLon(double E, double N, double *phi,
				 double *lambda, double phi0, double lambda0,
				 double E0, double N0, double a, double b);

#endif

#ifdef __cplusplus
}
#endif
