From fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Wed, 8 Jul 2015 20:46:52 -0400 Subject: Initial commit --- pkg/tbtables/cfitsio/swapproc.c | 98 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 pkg/tbtables/cfitsio/swapproc.c (limited to 'pkg/tbtables/cfitsio/swapproc.c') diff --git a/pkg/tbtables/cfitsio/swapproc.c b/pkg/tbtables/cfitsio/swapproc.c new file mode 100644 index 00000000..247e4933 --- /dev/null +++ b/pkg/tbtables/cfitsio/swapproc.c @@ -0,0 +1,98 @@ +/* This file, swapproc.c, contains general utility routines that are */ +/* used by other FITSIO routines to swap bytes. */ + +/* The FITSIO software was written by William Pence at the High Energy */ +/* Astrophysic Science Archive Research Center (HEASARC) at the NASA */ +/* Goddard Space Flight Center. */ + +#include +#include +#include "fitsio2.h" +/*--------------------------------------------------------------------------*/ +void ffswap2(short *svalues, /* IO - pointer to shorts to be swapped */ + long nvals) /* I - number of shorts to be swapped */ +/* + swap the bytes in the input short integers: ( 0 1 -> 1 0 ) +*/ +{ + register char *cvalues; + register long ii; + + union u_tag { + char cvals[2]; /* equivalence an array of 4 bytes with */ + short sval; /* a short */ + } u; + + cvalues = (char *) svalues; /* copy the initial pointer value */ + + for (ii = 0; ii < nvals;) + { + u.sval = svalues[ii++]; /* copy next short to temporary buffer */ + + *cvalues++ = u.cvals[1]; /* copy the 2 bytes to output in turn */ + *cvalues++ = u.cvals[0]; + } + return; +} +/*--------------------------------------------------------------------------*/ +void ffswap4(INT32BIT *ivalues, /* IO - pointer to floats to be swapped */ + long nvals) /* I - number of floats to be swapped */ +/* + swap the bytes in the input 4-byte integer: ( 0 1 2 3 -> 3 2 1 0 ) +*/ +{ + register char *cvalues; + register long ii; + + union u_tag { + char cvals[4]; /* equivalence an array of 4 bytes with */ + INT32BIT ival; /* a float */ + } u; + + cvalues = (char *) ivalues; /* copy the initial pointer value */ + + for (ii = 0; ii < nvals;) + { + u.ival = ivalues[ii++]; /* copy next float to buffer */ + + *cvalues++ = u.cvals[3]; /* copy the 4 bytes in turn */ + *cvalues++ = u.cvals[2]; + *cvalues++ = u.cvals[1]; + *cvalues++ = u.cvals[0]; + } + return; +} +/*--------------------------------------------------------------------------*/ +void ffswap8(double *dvalues, /* IO - pointer to doubles to be swapped */ + long nvals) /* I - number of doubles to be swapped */ +/* + swap the bytes in the input doubles: ( 01234567 -> 76543210 ) +*/ +{ + register char *cvalues; + register long ii; + register char temp; + + cvalues = (char *) dvalues; /* copy the pointer value */ + + for (ii = 0; ii < nvals*8; ii += 8) + { + temp = cvalues[ii]; + cvalues[ii] = cvalues[ii+7]; + cvalues[ii+7] = temp; + + temp = cvalues[ii+1]; + cvalues[ii+1] = cvalues[ii+6]; + cvalues[ii+6] = temp; + + temp = cvalues[ii+2]; + cvalues[ii+2] = cvalues[ii+5]; + cvalues[ii+5] = temp; + + temp = cvalues[ii+3]; + cvalues[ii+3] = cvalues[ii+4]; + cvalues[ii+4] = temp; + } + return; +} + -- cgit