aboutsummaryrefslogtreecommitdiff
path: root/pkg/tbtables/fitsio/ftpbit.f
diff options
context:
space:
mode:
authorJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
committerJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
commit40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch)
tree4464880c571602d54f6ae114729bf62a89518057 /pkg/tbtables/fitsio/ftpbit.f
downloadiraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'pkg/tbtables/fitsio/ftpbit.f')
-rw-r--r--pkg/tbtables/fitsio/ftpbit.f111
1 files changed, 111 insertions, 0 deletions
diff --git a/pkg/tbtables/fitsio/ftpbit.f b/pkg/tbtables/fitsio/ftpbit.f
new file mode 100644
index 00000000..793a8509
--- /dev/null
+++ b/pkg/tbtables/fitsio/ftpbit.f
@@ -0,0 +1,111 @@
+C----------------------------------------------------------------------
+ subroutine ftpbit(setbit,wrbit,buffer)
+
+C encode the individual bits within the byte as specified by
+C the input logical array. The corresponding bit is set to
+C 1 if the logical array element is true. Only the bits
+C between begbit and endbit, inclusive, are set or reset;
+C the remaining bits, if any, remain unchanged.
+
+C setbit l input array of logical data values corresponding
+C to the bits to be set in the output buffer
+C TRUE means corresponding bit is to be set.
+C wrbit l input array of logical values indicating which
+C bits in the byte are to be modified. If FALSE,
+C then the corresponding bit should remain unchanged.
+C buffer i output integer containing the encoded byte
+C
+C written by Wm Pence, HEASARC/GSFC, May 1992
+
+ integer buffer,tbuff,outbit
+ logical setbit(8),wrbit(8)
+
+ outbit=0
+ tbuff=buffer
+
+C test each of the 8 bits, starting with the most significant
+ if (tbuff .gt. 127)then
+C the bit is currently set in the word
+ if (wrbit(1) .and. (.not.setbit(1)))then
+C only in this case do we reset the bit
+ else
+C in all other cases we want the bit to be set
+ outbit=outbit+128
+ end if
+ tbuff=tbuff-128
+ else
+C bit is currently not set; set it only if requested to
+ if (wrbit(1) .and. setbit(1))outbit=outbit+128
+ end if
+
+ if (tbuff .gt. 63)then
+ if (wrbit(2) .and. (.not.setbit(2)))then
+ else
+ outbit=outbit+64
+ end if
+ tbuff=tbuff-64
+ else
+ if (wrbit(2) .and. setbit(2))outbit=outbit+64
+ end if
+
+ if (tbuff .gt. 31)then
+ if (wrbit(3) .and. (.not.setbit(3)))then
+ else
+ outbit=outbit+32
+ end if
+ tbuff=tbuff-32
+ else
+ if (wrbit(3) .and. setbit(3))outbit=outbit+32
+ end if
+
+ if (tbuff .gt. 15)then
+ if (wrbit(4) .and. (.not.setbit(4)))then
+ else
+ outbit=outbit+16
+ end if
+ tbuff=tbuff-16
+ else
+ if (wrbit(4) .and. setbit(4))outbit=outbit+16
+ end if
+
+ if (tbuff .gt. 7)then
+ if (wrbit(5) .and. (.not.setbit(5)))then
+ else
+ outbit=outbit+8
+ end if
+ tbuff=tbuff-8
+ else
+ if (wrbit(5) .and. setbit(5))outbit=outbit+8
+ end if
+
+ if (tbuff .gt. 3)then
+ if (wrbit(6) .and. (.not.setbit(6)))then
+ else
+ outbit=outbit+4
+ end if
+ tbuff=tbuff-4
+ else
+ if (wrbit(6) .and. setbit(6))outbit=outbit+4
+ end if
+
+ if (tbuff .gt. 1)then
+ if (wrbit(7) .and. (.not.setbit(7)))then
+ else
+ outbit=outbit+2
+ end if
+ tbuff=tbuff-2
+ else
+ if (wrbit(7) .and. setbit(7))outbit=outbit+2
+ end if
+
+ if (tbuff .eq. 1)then
+ if (wrbit(8) .and. (.not.setbit(8)))then
+ else
+ outbit=outbit+1
+ end if
+ else
+ if (wrbit(8) .and. setbit(8))outbit=outbit+1
+ end if
+
+ buffer=outbit
+ end