############################################################################
#
#	File:     bincvt.icn
#
#	Subject:  Procedures to convert binary data
#
#	Author:   Robert J. Alexander
#
#	Date:     October 16, 1996
#
############################################################################
#
#   This file is in the public domain.
#
############################################################################
#
#  unsigned() -- Converts binary byte string into unsigned integer.
#  Detects overflow if number is too large.
#
#  This procedure is normally used for processing of binary data
#  read from a file.
#
#  raw() -- Puts raw bits of characters of string s into an integer.  If
#  the size of s is less than the size of an integer, the bytes are put
#  into the low order part of the integer, with the remaining high order
#  bytes filled with zero.  If the string is too large, the most
#  significant bytes will be lost -- no overflow detection.
#
#  This procedure is normally used for processing of binary data
#  read from a file.
#
#  rawstring() -- Creates a string consisting of the raw bits in the low
#  order "size" bytes of integer i.
#
#  This procedure is normally used for processing of binary data
#  to be written to a file.
#
############################################################################

procedure unsigned(s)
   local i
   i := 0
   every i := ord(!s) + i * 256
   return i
end

procedure raw(s)
   local i
   i := 0
   every i := ior(ord(!s),ishift(i,8))
   return i
end

procedure rawstring(i,size)
   local s
   s := ""
   every 1 to size do {
      s := char(iand(i,16rFF)) || s
      i := ishift(i,-8)
      }
   return s
end
