?RCS: $Id$ ?RCS: ?RCS: Copyright (c) 1991-1997, 2004-2006, 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 4.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 int 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 -o try try.c >/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