/* * cdfutilc.c * * Utility routines for CDF. * * Calls the CDF library which is distributed by the National Space Science * Data Center and available from * ftp://nssdcftp.gsfc.nasa.gov/standards/cdf/dist/cdf27/unix/cdf27-dist-all.tar.gz * * Copyright 1984-2001 The MathWorks, Inc. * $Revision: 1.1.6.2 $ $Date: 2004/07/21 06:18:59 $ */ #include "cdf.h" #include "cdfutils.h" #include "mex.h" void msg_handler(CDFstatus status) { char msg_text[CDF_STATUSTEXT_LEN + 1]; /* Get status message from CDF library. */ CDFlib(SELECT_, CDF_STATUS_, status, GET_, STATUS_TEXT_, msg_text, NULL_); if (status < CDF_WARN) { /* Error status. */ CDFlib(CLOSE_, CDF_, NULL_); mexErrMsgTxt(msg_text); } else if (status < CDF_OK) { mexWarnMsgTxt(msg_text); } } mxArray * epoch_to_ML_datestr(double epoch_date) { char datestr[EPOCHx_STRING_MAX]; encodeEPOCHx(epoch_date, "-- ::.", datestr); return mxCreateString(datestr); } bool isOpteron(void) { #if defined(MGLNXA64) || defined(__x86_64__) return true; #else return false; #endif } void swapBytes(mxArray *array) { int p, numel; numel = mxGetNumberOfElements(array); switch (mxGetElementSize(array)) { case 1: return; break; case 2: { uint16_T tmp; uint16_T *data; data = mxGetData(array); for (p = 0; p < numel; p++) { tmp = 0; tmp |= (data[p]) << 8; tmp |= (data[p]) >> 8; data[p] = tmp; } } break; case 4: { uint32_T tmp; uint32_T *data; data = mxGetData(array); for (p = 0; p < numel; p++) { tmp = 0; tmp |= (data[p]) << 24; tmp |= (data[p] & 0x0000ff00) << 8; tmp |= (data[p] & 0x00ff0000) >> 8; tmp |= (data[p]) >> 24; data[p] = tmp; } } break; case 8: swap64Bits((uint64_T *) mxGetData(array), numel); break; } } void swap64Bits(uint64_T *data, int numel) { uint64_T tmp; int p; for (p = 0; p < numel; p++) { tmp = 0; tmp |= (data[p] << 56); tmp |= (data[p] & 0x000000000000ff00) << 40; tmp |= (data[p] & 0x0000000000ff0000) << 24; tmp |= (data[p] & 0x00000000ff000000) << 8; tmp |= (data[p] & 0x000000ff00000000) >> 8; tmp |= (data[p] & 0x0000ff0000000000) >> 24; tmp |= (data[p] & 0x00ff000000000000) >> 40; tmp |= (data[p] >> 56); data[p] = tmp; } }