aboutsummaryrefslogtreecommitdiff
path: root/sys/osb/shift.c
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
committerJoseph Hunkeler <jhunkeler@gmail.com>2015-07-08 20:46:52 -0400
commitfa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch)
treebdda434976bc09c864f2e4fa6f16ba1952b1e555 /sys/osb/shift.c
downloadiraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz
Initial commit
Diffstat (limited to 'sys/osb/shift.c')
-rw-r--r--sys/osb/shift.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/sys/osb/shift.c b/sys/osb/shift.c
new file mode 100644
index 00000000..86eacfb3
--- /dev/null
+++ b/sys/osb/shift.c
@@ -0,0 +1,49 @@
+/* Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
+ */
+
+#define import_spp
+#define import_knames
+#include <iraf.h>
+
+/*
+ * SHIFT.C -- Bitwise shift operators. A positive bitshift shifts to the left,
+ * zero-filling at the right, i.e., a left shift by 1 is equivalent to a
+ * multiplication by 2 (but does not cause integer overflow). A negative shift
+ * shifts to the right and is equivalent to a division.
+ */
+
+/* SHIFTI -- Bitwise boolean SHIFT of two integer variables.
+ */
+XINT
+SHIFTI (
+ XINT *a_a, /* operand to be shifted */
+ XINT *a_bits /* number of bits to shift */
+)
+{
+ register XINT a = *a_a, bits = *a_bits;
+ return (bits > 0 ? (a << bits) : (a >> -bits));
+}
+
+/* SHIFTS -- Bitwise boolean SHIFT of two short-integer variables.
+ */
+XSHORT
+SHIFTS (
+ XSHORT *a_a, /* operand to be shifted */
+ XSHORT *a_bits /* number of bits to shift */
+)
+{
+ register XSHORT a = *a_a, bits = *a_bits;
+ return (bits > 0 ? (a << bits) : (a >> -bits));
+}
+
+/* SHIFTL -- Bitwise boolean SHIFT of two long-integer variables.
+ */
+XLONG
+SHIFTL (
+ XLONG *a_a, /* operand to be shifted */
+ XLONG *a_bits /* number of bits to shift */
+)
+{
+ register XLONG a = *a_a, bits = *a_bits;
+ return (bits > 0 ? (a << bits) : (a >> -bits));
+}