?RCS: $Id: byteorder.U,v 3.0.1.2 1997/02/28 15:24:55 ram Exp $
?RCS:
?RCS: Copyright (c) 1991-1993, Raphael Manfredi
?RCS:
?RCS: You may redistribute only under the terms of the Artistic Licence,
?RCS: as specified in the README file that comes with the distribution.
?RCS: You may reuse parts of this distribution only within the terms of
?RCS: that same Artistic Licence; a copy of which may be found at the root
?RCS: of the source tree for dist 3.0.
?RCS:
?RCS: $Log: byteorder.U,v $
?RCS: Revision 3.0.1.2 1997/02/28 15:24:55 ram
?RCS: patch61: no longer ask the user if the test runs ok
?RCS:
?RCS: Revision 3.0.1.1 1994/10/29 16:02:58 ram
?RCS: patch36: added ?F: line for metalint file checking
?RCS:
?RCS: Revision 3.0 1993/08/18 12:05:28 ram
?RCS: Baseline for dist 3.0 netwide release.
?RCS:
?MAKE:byteorder: cat Myread Oldconfig Loc +cc +ccflags rm
?MAKE: -pick add $@ %<
?S:byteorder:
?S: This variable holds the byte order. In the following, larger digits
?S: indicate more significance. The variable byteorder is either 4321
?S: on a big-endian machine, or 1234 on a little-endian, or 87654321
?S: on a Cray ... or 3412 with weird order !
?S:.
?C:BYTEORDER:
?C: This symbol hold the hexadecimal constant defined in byteorder,
?C: i.e. 0x1234 or 0x4321, etc...
?C:.
?H:#define BYTEORDER 0x$byteorder /* large digits for MSB */
?H:.
?T:xxx_prompt
?F:!try
: check for ordering of bytes in a long
case "$byteorder" in
'')
$cat <<'EOM'
In the following, larger digits indicate more significance. A big-endian
machine like a Pyramid or a Motorola 680?0 chip will come out to 4321. A
little-endian machine like a Vax or an Intel 80?86 chip would be 1234. Other
machines may have weird orders like 3412. A Cray will report 87654321. If
the test program works the default is probably right.
I'm now running the test program...
EOM
$cat >try.c <<'EOCP'
#include <stdio.h>
main()
{
int i;
union {
unsigned long l;
char c[sizeof(long)];
} u;
if (sizeof(long) > 4)
u.l = (0x08070605L << 32) | 0x04030201L;
else
u.l = 0x04030201L;
for (i = 0; i < sizeof(long); i++)
printf("%c", u.c[i]+'0');
printf("\n");
exit(0);
}
EOCP
xxx_prompt=y
if $cc $ccflags try.c -o try >/dev/null 2>&1 && ./try > /dev/null; then
dflt=`./try`
case "$dflt" in
[1-4][1-4][1-4][1-4]|12345678|87654321)
echo "(The test program ran ok.)"
echo "byteorder=$dflt"
xxx_prompt=n
;;
????|????????) echo "(The test program ran ok.)" ;;
*) echo "(The test program didn't run right for some reason.)" ;;
esac
else
dflt='4321'
cat <<'EOM'
(I can't seem to compile the test program. Guessing big-endian...)
EOM
fi
case "$xxx_prompt" in
y)
rp="What is the order of bytes in a long?"
. ./myread
byteorder="$ans"
;;
*) byteorder=$dflt
;;
esac
;;
esac
$rm -f try.c try