module Makedisk (D : DISKDATA) : DISK =
  struct
    let block_size = D.block_size
    let block_nb = D.block_nb
    let blocks = D.blocks

    let read b buffer offset =
      assert ((Array.length buffer - offset) >= block_size);
      Array.blit blocks.(b) 0 buffer offset block_size

    let write b buffer offset =
      assert ((Array.length buffer - offset) >= block_size);
      Array.blit  buffer offset blocks.(b) 0 block_size

    let dump filename =
      let chan = open_out filename in
      try_finalize
        begin fun () ->
          output_binary_int chan block_size;
          output_binary_int chan block_nb;
          Array.iter (Array.iter (output_binary_int chan)) blocks
        end () close_out chan
  end;;