/*============================================================================ WCSLIB 4.3 - an implementation of the FITS WCS standard. Copyright (C) 1995-2007, Mark Calabretta This file is part of WCSLIB. WCSLIB is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. WCSLIB 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. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with WCSLIB. If not, see . Correspondence concerning WCSLIB may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: prj_f.c,v 4.3 2007/12/27 05:48:07 cal103 Exp $ *===========================================================================*/ #include #include /* Fortran name mangling. */ #include #define prjini_ F77_FUNC(prjini, PRJINI) #define prjput_ F77_FUNC(prjput, PRJPUT) #define prjget_ F77_FUNC(prjget, PRJGET) #define prjprt_ F77_FUNC(prjprt, PRJPRT) #define PRJ_FLAG 100 #define PRJ_CODE 101 #define PRJ_R0 102 #define PRJ_PV 103 #define PRJ_PHI0 104 #define PRJ_THETA0 105 #define PRJ_BOUNDS 106 #define PRJ_NAME 200 #define PRJ_CATEGORY 201 #define PRJ_PVRANGE 202 #define PRJ_SIMPLEZEN 203 #define PRJ_EQUIAREAL 204 #define PRJ_CONFORMAL 205 #define PRJ_GLOBAL 206 #define PRJ_DIVERGENT 207 #define PRJ_X0 208 #define PRJ_Y0 209 #define PRJ_W 210 #define PRJ_N 211 /*--------------------------------------------------------------------------*/ int prjini_(int *prj) { return prjini((struct prjprm *)prj); } /*--------------------------------------------------------------------------*/ int prjput_(int *prj, const int *what, const void *value, const int *m) { const char *cvalp; const int *ivalp; const double *dvalp; struct prjprm *prjp; /* Cast pointers. */ prjp = (struct prjprm *)prj; cvalp = (const char *)value; ivalp = (const int *)value; dvalp = (const double *)value; prjp->flag = 0; switch (*what) { case PRJ_FLAG: prjp->flag = *ivalp; break; case PRJ_CODE: strncpy(prjp->code, cvalp, 3); prjp->code[3] = '\0'; break; case PRJ_R0: prjp->r0 = *dvalp; break; case PRJ_PV: prjp->pv[*m] = *dvalp; break; case PRJ_PHI0: prjp->phi0 = *dvalp; break; case PRJ_THETA0: prjp->theta0 = *dvalp; break; case PRJ_BOUNDS: prjp->bounds = *ivalp; break; default: return 1; } return 0; } /*--------------------------------------------------------------------------*/ int prjget_(const int *prj, const int *what, void *value) { int m; char *cvalp; int *ivalp; double *dvalp; const struct prjprm *prjp; /* Cast pointers. */ prjp = (const struct prjprm *)prj; cvalp = (char *)value; ivalp = (int *)value; dvalp = (double *)value; switch (*what) { case PRJ_FLAG: *ivalp = prjp->flag; break; case PRJ_CODE: strncpy(cvalp, prjp->code, 3); break; case PRJ_R0: *dvalp = prjp->r0; break; case PRJ_PV: for (m = 0; m < PVN; m++) { *(dvalp++) = prjp->pv[m]; } break; case PRJ_PHI0: *dvalp = prjp->phi0; break; case PRJ_THETA0: *dvalp = prjp->theta0; break; case PRJ_BOUNDS: *ivalp = prjp->bounds; break; case PRJ_NAME: strncpy(cvalp, prjp->name, 40); break; case PRJ_CATEGORY: *ivalp = prjp->category; break; case PRJ_PVRANGE: *ivalp = prjp->pvrange; break; case PRJ_SIMPLEZEN: *ivalp = prjp->simplezen; break; case PRJ_EQUIAREAL: *ivalp = prjp->equiareal; break; case PRJ_CONFORMAL: *ivalp = prjp->conformal; break; case PRJ_GLOBAL: *ivalp = prjp->global; break; case PRJ_DIVERGENT: *ivalp = prjp->divergent; break; case PRJ_X0: *dvalp = prjp->x0; break; case PRJ_Y0: *dvalp = prjp->y0; break; case PRJ_W: for (m = 0; m < 10; m++) { *(dvalp++) = prjp->w[m]; } break; case PRJ_N: *ivalp = prjp->n; break; default: return 1; } return 0; } /*--------------------------------------------------------------------------*/ int prjprt_(int *prj) { return prjprt((struct prjprm *)prj); } /*--------------------------------------------------------------------------*/ #define PRJSET_FWRAP(pcode, PCODE) \ int F77_FUNC(pcode##set, PCODE##SET)(int *prj) \ {return prjset((struct prjprm *)prj);} #define PRJS2X_FWRAP(pcode, PCODE) \ int F77_FUNC(pcode##s2x, PCODE##S2X)( \ int *prj, \ const int *nphi, \ const int *ntheta, \ const int *spt, \ const int *sxy, \ const double phi[], \ const double theta[], \ double x[], \ double y[], \ int stat[]) \ {return prj##s2x((struct prjprm *)prj, *nphi, *ntheta, *spt, *sxy, \ phi, theta, x, y, stat);} #define PRJX2S_FWRAP(pcode, PCODE) \ int F77_FUNC(pcode##x2s, PRJ##X2S)( \ int *prj, \ const int *nx, \ const int *ny, \ const int *sxy, \ const int *spt, \ const double x[], \ const double y[], \ double phi[], \ double theta[], \ int stat[]) \ {return pcode##x2s((struct prjprm *)prj, *nx, *ny, *sxy, *spt, x, y, \ phi, theta, stat);} #define PRJ_FWRAP(pcode, PCODE) \ PRJSET_FWRAP(pcode, PCODE) \ PRJS2X_FWRAP(pcode, PCODE) \ PRJX2S_FWRAP(pcode, PCODE) PRJ_FWRAP(prj, PRJ) PRJ_FWRAP(azp, AZP) PRJ_FWRAP(szp, SZP) PRJ_FWRAP(tan, TAN) PRJ_FWRAP(stg, STG) PRJ_FWRAP(sin, SIN) PRJ_FWRAP(arc, ARC) PRJ_FWRAP(zpn, ZPN) PRJ_FWRAP(zea, ZEA) PRJ_FWRAP(air, AIR) PRJ_FWRAP(cyp, CYP) PRJ_FWRAP(cea, CEA) PRJ_FWRAP(car, CAR) PRJ_FWRAP(mer, MER) PRJ_FWRAP(sfl, SFL) PRJ_FWRAP(par, PAR) PRJ_FWRAP(mol, MOL) PRJ_FWRAP(ait, AIT) PRJ_FWRAP(cop, COP) PRJ_FWRAP(coe, COE) PRJ_FWRAP(cod, COD) PRJ_FWRAP(coo, COO) PRJ_FWRAP(bon, BON) PRJ_FWRAP(pco, PCO) PRJ_FWRAP(tsc, TSC) PRJ_FWRAP(csc, CSC) PRJ_FWRAP(qsc, QSC) PRJ_FWRAP(hpx, HPX)