
/*
 * Copyright (C) 2002,  The Regents of the University of California.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *      This product includes software developed by the Visualization
 *      Group at Lawrence Berkeley National Laboratory.
 * 4. Neither the name of the University of California, Berkeley nor of the 
 *    Lawrence Berkeley National Laboratory may be used to endorse or 
 *    promote products derived from this software without specific prior 
 *    written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 *
 * This work is supported by the U. S. Department of Energy under contract 
 * number DE-AC03-76SF00098 between the U. S. Department of Energy and the 
 * University of California.
 *
 *	Author: Wes Bethel
 *		Lawrence Berkeley National Laboratory
 *              Berkeley, California 
 *
 *  "this software is 100% hand-crafted by a human being in the USA"
 */
#include <stdio.h>

void
convertEndianOrder(void *src,
		   void *dst,
		   int nFourByteWords)
{
    /*
     * converts endian order of a bunch of 4-byte words.
     * src and dst can be the same hunk of memory.
     */

    char *s,tmp,*d;
    int i;

    s = (char *)src;
    d = (char *)dst;
    for (i=0;i<nFourByteWords;i++, s += 4, d += 4)
    {
	tmp = s[0];
	d[0] = s[3];
	d[3] = tmp;

	tmp = s[1];
	d[1] = s[2];
	d[2] = tmp;
    }
}

main(int ac,
     char *av[])
{
    /*
     * usage: conv infile outfile
     * purpose: endian conversion between platforms. will always change
     * endian order of whatever is in infile and write to outfile. The
     * only restriction is that the input size must be an even multiple
     * of 4 bytes.
     *
     * this utility was originally written to convert piles of floating
     * point data from one arch to another.
     */
    FILE *fin, *fout;
    char bin[8192], bout[8192];
    int bsize=8192;
    int nread=0;

    if ((fin = fopen(av[1],"rb")) == NULL)
    {
	perror(" error opening input file. ");
	exit(-1);
    }
    if ((fout = fopen(av[2],"wb")) == NULL)
    {
	perror(" error opening output file. ");
	exit(-1);
    }

    nread = fread((void *)bin, sizeof(char), bsize, fin);
    while ((nread != 0) && (!feof(fin)))
    {
	convertEndianOrder((void *)bin, (void *)bout, nread/4);
	fwrite((void *)bout, sizeof(char), nread, fout);
	nread = fread((void *)bin, sizeof(char), bsize, fin);
    }

    fclose(fout);
    fclose(fin);
}
