15#ifndef _POSIX_C_SOURCE 
   16#define _POSIX_C_SOURCE 
   32#define READONLYMODE "r" 
   33#define MAXLINELENGTH (1024) 
   34#define NOOFPARAMS (15) 
   35#define NOOFCOEFFICIENTS (7) 
   37#define _DEGREE_NOT_FOUND (-2) 
   38#define CALCULATE_NUMTERMS(N) (N * (N + 1) / 2 + N) 
   43#define INCL_ERROR_BASE (0.20) 
   44#define DECL_ERROR_OFFSET_BASE (0.36) 
   45#define F_ERROR_BASE (130) 
   46#define DECL_ERROR_SLOPE_BASE (5000) 
   47#define WMM_ERROR_MULTIPLIER 1.21 
   48#define IGRF_ERROR_MULTIPLIER 1.21 
   53#define WMMHR_UNCERTAINTY_F 134 
   54#define WMMHR_UNCERTAINTY_H 130 
   55#define WMMHR_UNCERTAINTY_X 135 
   56#define WMMHR_UNCERTAINTY_Y 85 
   57#define WMMHR_UNCERTAINTY_Z 134 
   58#define WMMHR_UNCERTAINTY_I 0.19 
   59#define WMMHR_UNCERTAINTY_D_OFFSET 0.25 
   60#define WMMHR_UNCERTAINTY_D_COEF 5205 
   62#define WMM_UNCERTAINTY_F 138 
   63#define WMM_UNCERTAINTY_H 133 
   64#define WMM_UNCERTAINTY_X 137 
   65#define WMM_UNCERTAINTY_Y 89 
   66#define WMM_UNCERTAINTY_Z 141 
   67#define WMM_UNCERTAINTY_I 0.20 
   68#define WMM_UNCERTAINTY_D_OFFSET 0.26 
   69#define WMM_UNCERTAINTY_D_COEF 5417 
   72#define M_PI ((2) * (acos(0.0))) 
   75#define RAD2DEG(rad) ((rad) * (180.0L / M_PI)) 
   76#define DEG2RAD(deg) ((deg) * (M_PI / 180.0L)) 
   77#define ATanH(x) (0.5 * log((1 + x) / (1 - x))) 
   86#define MAG_PS_MIN_LAT_DEGREE \ 
   88#define MAG_PS_MAX_LAT_DEGREE \ 
   90#define MAG_UTM_MIN_LAT_DEGREE \ 
   92#define MAG_UTM_MAX_LAT_DEGREE \ 
   95#define MAG_GEO_POLE_TOLERANCE 1e-5 
   96#define MAG_USE_GEOID \ 
   99#define LAT_BOUND_MIN -90 
  100#define LAT_BOUND_MAX 90 
  101#define LON_BOUND_MIN -180 
  102#define LON_BOUND_MAX 360 
  103#define ALT_BOUND_MIN -10 
  104#define NO_ALT_MAX -99999 
  105#define USER_GAVE_UP -1 
  106#define DEC_YEAR_BOUND_MIN 2024.866 
  107#define DEC_YEAR_BOUND_MAX 2030 
  125  double *Main_Field_Coeff_G;  
 
  127  double *Main_Field_Coeff_H;  
 
  129  double *Secular_Var_Coeff_G; 
 
  131  double *Secular_Var_Coeff_H; 
 
  135  int SecularVariationUsed; 
 
  137  double CoefficientFileEndDate;
 
 
  153  double HeightAboveEllipsoid; 
 
  154  double HeightAboveGeoid;     
 
 
  184      *RelativeRadiusPower; 
 
 
  215  float *GeoidHeightBuffer;
 
  217  int Geoid_Initialized; 
 
 
  238  double CentralMeridian;
 
  239  double ConvergenceOfMeridians;
 
 
  261enum COEFFICIENTS { IE, N, M, GNM, HNM, DGNM, DHNM };
 
  263enum YYYYMMDD { YEAR, MONTH, DAY };
 
  279int MAG_robustReadMagModels(
char *filename,
 
  287void MAG_Error(
int control);
 
  296int MAG_Warnings(
int control, 
double value,
 
  308                            char values[][MAXLINELENGTH]);
 
  326void MAG_PrintEMMFormat(
char *filename, 
char *filenameSV,
 
  329void MAG_PrintSHDFFormat(
char *filename,
 
  334int MAG_readMagneticModel_SHDF(
char *filename,
 
  338char *MAG_Trim(
char *str);
 
  341void MAG_BaseErrors(
double DeclCoef, 
double DeclBaseline, 
double InclOffset,
 
  342                    double FOffset, 
double Multiplier, 
double H,
 
  343                    double *DeclErr, 
double *InclErr, 
double *FErr);
 
  345int MAG_CalculateGeoMagneticElements(
 
  353int MAG_CalculateSecularVariationElements(
 
  366int MAG_DateToYear(
MAGtype_Date *Calendar_Date, 
char *Error);
 
  368void MAG_DegreeToDMSstring(
double DegreesOfArc, 
int UnitDepth, 
char *DMSstring);
 
  370void MAG_DMSstringToDegree(
char *DMSstring, 
double *DegreesOfArc);
 
  392int MAG_GetUTMParameters(
double Latitude, 
double Longitude, 
int *Zone,
 
  393                         char *Hemisphere, 
double *CentralMeridian);
 
  395int MAG_isNaN(
double d);
 
  403                              double *y, 
double *z);
 
  409void MAG_TMfwd4(
double Eps, 
double Epssq, 
double K0R4, 
double K0R4oa,
 
  410                double Acoeff[], 
double Lam0, 
double K0, 
double falseE,
 
  411                double falseN, 
int XYonly, 
double Lambda, 
double Phi, 
double *X,
 
  412                double *Y, 
double *pscale, 
double *CoM);
 
  424int MAG_ComputeSphericalHarmonicVariables(
 
  440int MAG_PcupHigh(
double *Pcup, 
double *dPcup, 
double x, 
int nMax);
 
  442int MAG_PcupLow(
double *Pcup, 
double *dPcup, 
double x, 
int nMax);
 
  486int MAG_GetGeoidHeight(
double Latitude, 
double Longitude, 
double *DeltaHeight,
 
  500void MAG_EquivalentLatLon(
double lat, 
double lon, 
double *repairedLat,
 
  501                          double *repairedLon);
 
  505void MAG_PrintUserDataWithUncertainty(
 
  510double MAG_dtstr_to_dyear(
char *edit_date);
 
  511size_t MAG_strlcpy_equivalent(
char *dst, 
char *src, 
size_t dstlen);