12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455exceptionErrorofstringleterrors=raise(Errors)(*
Debugging utilities.
*)letstring8_of_intx=lets=Bytes.create8infori=0to7doBytes.sets(7-i)(Char.chr(0xffland(xlsr(8*i))))done;Bytes.to_stringsletstring4_of_intx=lets=Bytes.create4infori=0to3doBytes.sets(3-i)(Char.chr(0xffland(xlsr(8*i))))done;Bytes.to_stringsletprint_bits?(pos=0)?lens=letslen=String.lengthsinifpos<0||(pos>0&&pos>=slen)theninvalid_arg"Bi_util.print_bits";letlen=matchlenwithNone->slen-pos|Somelen->iflen>slen-postheninvalid_arg"Bi_util.print_bits"elseleninletr=Bytes.create(len*9)infori=0tolen-1doletk=i*9inletx=Char.codes.[pos+i]inforj=0to7doBytes.setr(k+j)(if(xlsr(7-j))land1=0then'0'else'1')done;Bytes.setr(k+8)(if(i+1)mod8=0then'\n'else' ')done;Bytes.to_stringr(* int size in bits *)letint_size=letc=ref0inletr=ref(-1)inwhile!r<>0dor:=!rlsr1;incrcdone;!c