ftp.nice.ch/pub/next/unix/developer/pcn.2.0.s.tar.gz#/src/Support/byte_ord.c

This is byte_ord.c in view mode; [Download] [Up]

/*
 * PCN Abstract Machine Emulator
 * Authors:     Steve Tuecke and Ian Foster
 *              Argonne National Laboratory
 *
 * Please see the DISCLAIMER file in the top level directory of the
 * distribution regarding the provisions under which this software
 * is distributed.
 *
 * byte_ord.c
 *
 * A simple program for figuring out the integer byte ordering used
 * used by a machine.
 *
 * Here are some machines that I have tested:
 *	NeXT (68030):		low byte first, high byte last
 *	Sun 3 (68030):		low byte first, high byte last
 *	Sun 4 (SPARC):		low byte first, high byte last
 * 	Encore (NS32x32):	high byte first, low byte last
 *	Seq. Balance(NS32x32):	high byte first, low byte last
 *	Vax:			high byte first, low byte last
 */

#include <stdio.h>
#include <sys/types.h>
#include <sys/file.h>

main()
{
    int fd;
    int i, j, *k;
    char buf[10];

    if ((fd = open("byte_order.out", O_RDWR | O_CREAT | O_TRUNC, 0777)) == -1)
    {
	printf("Failed to open byte_order.out\n");
	exit(0);
    }

    i = 0x10203040;
    
    write(fd, &i, 4);
    lseek(fd, (off_t) 0, L_SET);
    read(fd, buf, 4);
    lseek(fd, (off_t) 0, L_SET);
    read(fd, &j, 4);
    k = (int *) buf;

    printf("bytes: %x, %x, %x, %x\n",
	   (int) buf[0],
	   (int) buf[1], 
	   (int) buf[2], 
	   (int) buf[3]);
    printf("j  = %x\n", j);
    printf("*k = %x\n", *k);
    if (buf[0] == 0x10
	&& buf[1] == 0x20
	&& buf[2] == 0x30
	&& buf[3] == 0x40)
    {
	printf("Integers are low order byte first, high order byte last\n");
    }
    else if (buf[0] == 0x40
	&& buf[1] == 0x30
	&& buf[2] == 0x20
	&& buf[3] == 0x10)
    {
	printf("Integers are high order byte first, low order byte last\n");
    }
    else
    {
	printf("Integers are some wierd ordering\n");
    }
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Marcel Waldvogel and Netfuture.ch.