docs: private int combine_blocks(long addr)
      throws IOException
      {
          long cum_length;
          int length;
          long next_addr = addr;
  
          length = readInt();
          if (length > 0) {
              while ((length > 0) && (next_addr + length < tail_ptr)) {
                  next_addr += length;
                  seek(next_addr);
                  length = readInt();
              }
              if (length < 0) {
                  cum_length = next_addr - addr;
                  seek(addr);
                  writeInt((int) cum_length);
              } else {
                  cum_length = tail_ptr - addr;
              }
              return(int) cum_length;
          } else {
              return length;
          }
      }