summaryrefslogtreecommitdiff
path: root/mcon/U/byteorder.U
diff options
context:
space:
mode:
Diffstat (limited to 'mcon/U/byteorder.U')
-rw-r--r--mcon/U/byteorder.U99
1 files changed, 99 insertions, 0 deletions
diff --git a/mcon/U/byteorder.U b/mcon/U/byteorder.U
new file mode 100644
index 0000000..1ef79f8
--- /dev/null
+++ b/mcon/U/byteorder.U
@@ -0,0 +1,99 @@
+?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
+