This repository has been archived on 2024-01-04. You can view files and clone it, but cannot push or open issues or pull requests.
ncsa-mosaic/libdtm/deccvt.c

224 lines
4.8 KiB
C

/*****************************************************************************
*
* NCSA DTM version 2.3
* May 1, 1992
*
* NCSA DTM Version 2.3 source code and documentation are in the public
* domain. Specifically, we give to the public domain all rights for future
* licensing of the source code, all resale rights, and all publishing rights.
*
* We ask, but do not require, that the following message be included in all
* derived works:
*
* Portions developed at the National Center for Supercomputing Applications at
* the University of Illinois at Urbana-Champaign.
*
* THE UNIVERSITY OF ILLINOIS GIVES NO WARRANTY, EXPRESSED OR IMPLIED, FOR THE
* SOFTWARE AND/OR DOCUMENTATION PROVIDED, INCLUDING, WITHOUT LIMITATION,
* WARRANTY OF MERCHANTABILITY AND WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE
*
*****************************************************************************/
/*********************************************************************
**
** $Header: /X11/mosaic/cvsroot/xmosaic3/libdtm/deccvt.c,v 1.1.1.1 1995/01/11 00:02:58 alanb Exp $
**
**********************************************************************/
#ifdef RCSLOG
$Log: deccvt.c,v $
Revision 1.1.1.1 1995/01/11 00:02:58 alanb
New CVS source tree, Mosaic 2.5 beta 4
* Revision 2.5 1994/12/29 23:39:34 alanb
* I'm committing with a new symbolic revision number.
*
* Revision 1.1.1.1 1994/12/28 21:37:30 alanb
*
* Revision 1.1.1.1 1993/07/04 00:03:10 marca
* Mosaic for X version 2 distribution
*
* Revision 1.1 1993/01/18 21:50:12 marca
* I think I got it now.
*
* Revision 1.4 92/04/30 20:25:27 jplevyak
* Changed Version to 2.3.
*
* Revision 1.3 1992/04/03 18:25:50 jplevyak
* Fixed indice computation problem.
*
* Revision 1.2 1991/06/11 15:22:22 sreedhar
* diclaimer added
*
* Revision 1.1 1991/05/30 15:52:54 sreedhar
* Initial revision
*
* Revision 1.2 1990/11/08 16:48:12 jefft
* Fixed dtm_triplet and dtm_complex conversion routines. 'size' is set
* first instead of only on return.
*
* Revision 1.1 90/11/08 16:40:06 jefft
* Initial revision
*
#endif
#include <stdio.h>
#include <sys/types.h>
#include <netinet/in.h>
#include "dtmint.h"
#include "debug.h"
#define swap(x,y) x ^= y; y ^= x; x ^= y
static int dtm_char(mode, buf, size)
int mode, size;
char *buf;
{
DBGFLOW("# dtm_char called.\n");
return size;
}
static int dtm_short(mode, buf, size)
int mode, size;
char *buf;
{
int nShorts, i;
DBGFLOW("# dtm_short called.\n");
nShorts = (mode == DTMLOCAL) ? (size / 2) : size;
if (buf)
for ( i = 0; i < nShorts ; i++ ) {
swap(*buf, *(buf+1));
buf += 2;
}
return ((mode == DTMLOCAL) ? (size / 2) : (size * 2));
}
static int dtm_int(mode, buf, size)
int mode, size;
char *buf;
{
int nWords, i;
DBGFLOW("# dtm_int called.\n");
nWords = (mode == DTMLOCAL) ? (size / 4) : size;
size = ((mode == DTMLOCAL) ? (size / 4) : (size * 4));
if (buf)
for ( i=0 ; i < nWords ; i++ ) {
swap( *buf, *(buf+3) );
swap( *(buf+1), *(buf+2) );
buf += 4;
}
return size;
}
static int dtm_float(mode, buf, size)
int mode, size;
char *buf;
{
int nWords, i;
DBGFLOW("# dtm_float called.\n");
nWords = (mode == DTMLOCAL) ? (size / 4) : size;
size = ((mode == DTMLOCAL) ? (size / 4) : (size * 4));
if (buf)
for ( i=0 ; i < nWords ; i++ ) {
swap( *buf, *(buf+3) );
swap( *(buf+1), *(buf+2) );
buf += 4;
}
return size;
}
static int dtm_double(mode, buf, size)
int mode, size;
char *buf;
{
int nWords, i;
DBGFLOW("# dtm_flt64 called.\n");
nWords = (mode == DTMLOCAL) ? (size / 4) : size * 2;
if (buf)
for ( i=0 ; i < nWords ; i++ ) {
swap( *buf, *(buf+3) );
swap( *(buf+1), *(buf+2) );
buf += 4;
}
return ((mode == DTMLOCAL) ? (size / 8) : (size * 8));
}
static int dtm_complex(mode, buf, size)
int mode, size;
char *buf;
{
int nWords, i;
DBGFLOW("# dtm_complex called.\n");
nWords = (mode == DTMLOCAL) ? (size / 4) : size * 2;
size = ((mode == DTMLOCAL) ? (size / 8) : (size * 8));
if (buf)
for ( i=0 ; i < nWords ; i++ ) {
swap( *buf, *(buf+3) );
swap( *(buf+1), *(buf+2) );
buf += 4;
}
return size;
}
static int dtm_triplet(mode, buf, size)
int mode, size;
char *buf;
{
int nWords, i;
DBGFLOW("# dtm_triplet called.\n");
nWords = (mode == DTMLOCAL) ? (size / 4) : size * 4;
size = ((mode == DTMLOCAL) ? (size / 16) : (size * 16));
if (buf)
for ( i=0 ; i < nWords ; i++ ) {
swap( *buf, *(buf+3) );
swap( *(buf+1), *(buf+2) );
buf += 4;
}
return size;
}
/* conversion routine function table */
int (*DTMconvertRtns[])() = {
dtm_char,
dtm_short,
dtm_int,
dtm_float,
dtm_double,
dtm_complex,
dtm_triplet
};