docs: public void deallocate(long block)
      throws IOException
      {
          int size;
  
          if (readOnly) {
              throw (new FileManagerException("Attempt to deallocate in read only mode"));
          }
          block = block - HDR_SIZE;
          if (block < FIRST_TAIL) {
              throw (new FileManagerException("Illegal block address passed to deallocate"));
          }
          size = get_block_size(block);
          if (size >= 0) {
              throw (new FileManagerException("Attempt to deallocate block with illegal size"));
          }
          size = abs(size);
          deallocs++;
          seek_and_count(block);
          writeInt(size);
          add_to_freelist(block, size);
          allocated_blocks--;
          allocated_words -= size;
      }