FUNCTION ice_read, cFile, Orig, info=info
    @compile_opt.pro    ; On error, return to caller

nbits = 32L
nRecl = 128

;iVers = lonarr(2)
;cVers = '        '

status = 0B

on_ioerror, CLEANUP

openu, unit, cFile, /get_lun

nstore = lonarr(nRecl)
readu, unit, nstore

nOrig  = nstore[2]
nbit   = nstore[3]
kmax   = nStore[4]
kshift = nStore[5]
lenbit = nStore[6] 
sign   = nStore[7]
ninfo  = nStore[8]
perm   = nStore[8+1:8+kmax-kshift+1]


nPack = 1+(nbit-1)/nbits
Pack = lonarr( ceil( float(nPack)/nRecl ) *nRecl )
readu, unit, Pack
Pack = Pack[0:nPack-1]


info = bytarr(ninfo)
readu, unit, info
info = string(info)


ibit = ice_unpack(nbit, Pack, Orig, kmax=kmax, kshift=kshift, lenbit=lenbit, sign=sign, perm=perm)
iOrig = n_elements(Orig)

message, /info, 'max='+strcompress(kmax, /rem)+     $
        ' ; shift='+strcompress(kshift, /rem)+  $
        ' ; lenbit='+strcompress(lenbit, /rem)+ $
        ' ; sign ='+strcompress(sign)
message, /info, 'perm ='+strjoin( strcompress(perm), /single )

status = ibit EQ nbit AND iOrig EQ nOrig

IF NOT status THEN BEGIN
    message, /info, 'Unpacked'+strcompress(ibit)+   $
        'bits into'+strcompress(iOrig)+' long integers'
    message, /info, 'Expected'+strcompress(nbit)+   $
        'bits into'+strcompress(nOrig)+' long integers'
ENDIF

CLEANUP:

on_ioerror, NULL
IF IsType(unit,/defined) THEN free_lun, unit

RETURN, status  &  END