home *** CD-ROM | disk | FTP | other *** search
- ?RCS: $Id: byteorder.U,v 3.0.1.1 1994/10/29 16:02:58 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.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:#ifndef NeXT
- ?H:# define BYTEORDER 0x$byteorder /* large digits for MSB */
- ?H:#elif defined(__BIG_ENDIAN__) /* must be NeXT */
- ?H:# define BYTEORDER 0x4321
- ?H:#else /* NeXT && __LITTLE_ENDIAN__ */
- ?H:# define BYTEORDER 0x1234
- ?H:#endif /* !NeXT */
- ?H:.
- ?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");
- }
- EOCP
- if $cc $ccflags try.c -o try >/dev/null 2>&1 ; then
- dflt=`./try`
- case "$dflt" in
- ????|????????) 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
- ;;
- *)
- echo " "
- dflt="$byteorder"
- ;;
- esac
- rp="What is the order of bytes in a long?"
- . ./myread
- byteorder="$ans"
- $rm -f try.c try
-
-