if bits = 0 then longleftrotate = value: exit function
for lngi = 1 to bits
lngsign = value and &hc0000000
value = (value and &h3fffffff) * 2
value = value or ((lngsign < 0) and 1) or (cbool(lngsign and _
&h40000000) and &h80000000)
next
longleftrotate = value
end function
'
' function to add two unsigned numbers together as in c.
' overflows are ignored!
'
private function longoverflowadd(val1 as long, val2 as long) as long
dim lnghighword as long
dim lnglowword as long
dim lngoverflow as long
lnglowword = (val1 and &hffff&) + (val2 and &hffff&)
lngoverflow = lnglowword \ 65536
lnghighword = (((val1 and &hffff0000) \ 65536) + ((val2 and &hffff0000) \ 65536) + lngoverflow) and &hffff&
longoverflowadd = unsignedtolong((lnghighword * 65536#) + (lnglowword and &hffff&))
end function
'
' function to add two unsigned numbers together as in c.
' overflows are ignored!
'
private function longoverflowadd4(val1 as long, val2 as long, val3 as long, val4 as long) as long
dim lnghighword as long
dim lnglowword as long
dim lngoverflow as long
lnglowword = (val1 and &hffff&) + (val2 and &hffff&) + (val3 and &hffff&) + (val4 and &hffff&)
lngoverflow = lnglowword \ 65536
lnghighword = (((val1 and &hffff0000) \ 65536) + _
((val2 and &hffff0000) \ 65536) + _
((val3 and &hffff0000) \ 65536) + _
((val4 and &hffff0000) \ 65536) + _
lngoverflow) and &hffff&
longoverflowadd4 = unsignedtolong((lnghighword * 65536#) + (lnglowword and &hffff&))
end function
'
' convert an unsigned double into a long
'
private function unsignedtolong(value as double) as long
if value < 0 or value >= offset_4 then error 6 ' overflow
if value <= maxint_4 then
unsignedtolong = value
else
unsignedtolong = value - offset_4
end if
end function
'
' convert a long to an unsigned double
'
private function longtounsigned(value as long) as double
if value < 0 then
longtounsigned = value + offset_4
else
longtounsigned = value
end if