/*============================================================================ 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: tab_f.c,v 4.3 2007/12/27 05:48:07 cal103 Exp $ *===========================================================================*/ #include /* Fortran name mangling. */ #include #define tabini_ F77_FUNC(tabini, TABINI) #define tabmem_ F77_FUNC(tabmem, TABMEM) #define tabcpy_ F77_FUNC(tabcpy, TABCPY) #define tabput_ F77_FUNC(tabput, TABPUT) #define tabget_ F77_FUNC(tabget, TABGET) #define tabfree_ F77_FUNC(tabfree, TABFREE) #define tabprt_ F77_FUNC(tabprt, TABPRT) #define tabset_ F77_FUNC(tabset, TABSET) #define tabx2s_ F77_FUNC(tabx2s, TABX2S) #define tabs2x_ F77_FUNC(tabs2x, TABS2X) #define TAB_FLAG 100 #define TAB_M 101 #define TAB_K 102 #define TAB_MAP 103 #define TAB_CRVAL 104 #define TAB_INDEX 105 #define TAB_COORD 106 #define TAB_NC 200 #define TAB_SENSE 201 #define TAB_P0 202 #define TAB_DELTA 203 #define TAB_EXTREMA 204 /*--------------------------------------------------------------------------*/ int tabini_(const int *M, const int *K, int *tab) { return tabini(1, *M, K, (struct tabprm *)tab); } /*--------------------------------------------------------------------------*/ int tabmem_(int *tab) { return tabmem((struct tabprm *)tab); } /*--------------------------------------------------------------------------*/ int tabcpy_(const int *tabsrc, int *tabdst) { return tabcpy(1, (const struct tabprm *)tabsrc, (struct tabprm *)tabdst); } /*--------------------------------------------------------------------------*/ int tabput_( int *tab, const int *what, const void *value, const int *m, const int *k) { int k0, m0; const int *ivalp; const double *dvalp; struct tabprm *tabp; /* Cast pointers. */ tabp = (struct tabprm *)tab; ivalp = (const int *)value; dvalp = (const double *)value; /* Convert 1-relative FITS axis numbers to 0-relative C array indices. */ m0 = *m - 1; k0 = *k - 1; tabp->flag = 0; switch (*what) { case TAB_FLAG: tabp->flag = *ivalp; break; case TAB_M: tabp->M = *ivalp; break; case TAB_K: tabp->K[m0] = *ivalp; break; case TAB_MAP: tabp->map[m0] = *ivalp; break; case TAB_CRVAL: tabp->crval[m0] = *dvalp; break; case TAB_INDEX: tabp->index[m0][k0] = *dvalp; break; case TAB_COORD: tabp->coord[m0] = *dvalp; break; default: return 1; } return 0; } /*--------------------------------------------------------------------------*/ int tabget_(const int *tab, const int *what, void *value) { int i, k, m, n; int *ivalp; double *dvalp; const struct tabprm *tabp; /* Cast pointers. */ tabp = (const struct tabprm *)tab; ivalp = (int *)value; dvalp = (double *)value; switch (*what) { case TAB_FLAG: *ivalp = tabp->flag; break; case TAB_M: *ivalp = tabp->M; break; case TAB_K: for (m = 0; m < tabp->M; m++) { *(ivalp++) = tabp->K[m]; } break; case TAB_MAP: for (m = 0; m < tabp->M; m++) { *(ivalp++) = tabp->map[m]; } break; case TAB_CRVAL: for (m = 0; m < tabp->M; m++) { *(dvalp++) = tabp->crval[m]; } break; case TAB_INDEX: for (m = 0; m < tabp->M; m++) { for (k = 0; k < tabp->K[m]; k++) { *(dvalp++) = tabp->index[m][k]; } } break; case TAB_COORD: /* Don't rely on tabprm.nc being set. */ n = tabp->M; for (m = 0; m < tabp->M; m++) { n *= tabp->K[m]; } for (i = 0; i < n; i++) { *(dvalp++) = tabp->coord[i]; } break; case TAB_NC: *ivalp = tabp->nc; break; case TAB_SENSE: for (m = 0; m < tabp->M; m++) { *(ivalp++) = tabp->sense[m]; } break; case TAB_P0: for (m = 0; m < tabp->M; m++) { *(ivalp++) = tabp->p0[m]; } break; case TAB_DELTA: for (m = 0; m < tabp->M; m++) { *(dvalp++) = tabp->delta[m]; } break; case TAB_EXTREMA: n = 2 * tabp->M; for (m = 1; m < tabp->M; m++) { n *= tabp->K[m]; } for (i = 0; i < n; i++) { *(dvalp++) = tabp->extrema[i]; } break; default: return 1; } return 0; } /*--------------------------------------------------------------------------*/ int tabfree_(int *tab) { return tabfree((struct tabprm *)tab); } /*--------------------------------------------------------------------------*/ int tabprt_(const int *tab) { return tabprt((const struct tabprm *)tab); } /*--------------------------------------------------------------------------*/ int tabset_(int *tab) { return tabset((struct tabprm *)tab); } /*--------------------------------------------------------------------------*/ int tabx2s_( int *tab, const int *ncoord, const int *nelem, const double x[], double world[], int stat[]) { return tabx2s((struct tabprm *)tab, *ncoord, *nelem, x, world, stat); } /*--------------------------------------------------------------------------*/ int tabs2x_( struct tabprm* tab, const int *ncoord, const int *nelem, const double world[], double x[], int stat[]) { return tabs2x((struct tabprm *)tab, *ncoord, *nelem, world, x, stat); }