PRO BITS, invalue, BITARR, qprint
;
;+
;NAME:
;	bits
;PURPOSE:
;	Given a byte or integer, return a vector of 8 or 16 values
;	which are the binary representation of the value.
;INPUT:
;	invalue	- The byte or integer value to check
;OUTPUT:
;	bitarr	- The 8-element array with values set
;		  if the bit is set
;HISTORY:
;	Written 1988 by M.Morrison
;	13-Nov-92 (MDM) - Modified to allow integer*2 values
;			  and to allow an array of values.
;	 7-Apr-94 (MDM) - Allow integer*4 values
;	15-Aug-94 (MDM) - Corrected error from 7-Apr-94 mod which
;			  did not allow an array of inputs
;-
;
if (n_elements(qprint) eq 0) then qprint = 0
;
n = n_elements(invalue)
siz = size(invalue)
typ = siz( siz(0)+1 )
nbit = 8
if (typ ne 1) then nbit = 16
if (max(invalue) gt 256*128L) then nbit = 32
;
bitarr = bytarr(nbit, n)
;
for ival=0,n-1 do begin
    if (nbit eq 8) then val = byte(invalue(ival)) else val = long(invalue(ival))
    if (nbit eq 32) and (invalue(ival) lt 0) then val = val + 2.^32
    ;
    FOR I=nbit-1,0,-1 DO IF (val GE 2.^I) THEN BEGIN
	BITARR(I,ival) = 1
	val=val - 2.^I
    END
    ;
    if (qprint) then begin
	str = string(long(invalue(ival))) + '  =  '
	str = str + string(reverse(fix(bitarr(*,ival))), format='(4(1x,4i1,1x,4i1))')
	print, str
    end
end
;
RETURN
END