Mostly implement the pc98 scheme. The partition table has no LBA
fields at all, so we're entirely dependent upon CHS addressing.
And CHS addressing is what needs more work.
Mostly implement the vtoc8 scheme. The vtoc8 scheme uses cylinders for
the beginning of partitions, which makes it sensitive to geometry.
Again, we'll need to revisit this.
Allow schemes to specify a maximum sector size. The minimum is fixed
at 512. This allows checking of the sector size up-front when given
on the command line.
Move setting CHS fields to mbr_chs() in preparation of ...
First batch of media control:
1.  Change -h to -H and change -t to -T. Use -H to specify the number of
    heads and -T to specify the track size (number of sectors per track).
2.  Add -S and -P. Use -S to specify the logical sector size and -P to
    specify the physical sector size.

Default to 512 for both the logical and physical sector size.
Set nheads and nsecs to 1 by default.
Add scheme_max_secsz() for returning the maximum sector size supported
by the partitioning scheme.
1.  Add -v option to increase vebosity levels
2.  Fix copy-paste bug -- acrually check secsz for being a power of 2
3.  Check secsz and blksz parameters
4.  Print the sector and block size when -v is given
Fix writing the start and size fields.
Remove trksz, which was hardcoded to 1, and replace it by secs, which
can be set on the command line.
1.  When calculating block addresses, round to the physical block
    size.
2.  Replace scheme_first_block() & scheme_next_block() with
    scheme_metadata(). When we round to block sizes, we can't
    reliably fixup any miscalculations.
3.  In scheme_write, calculate ncyls (number of cyclinders), based
    on the total size, sectors/track and number of heads.
4.  Add verbosity when constructing the partitions. This includes
    the starting block address and size in bytes and blocks.
5.  Add verbosity about the sectors/track and number of heads.
Give vtoc8 a change to work: when setting the physical block size to 4K,
sectors/track to 8 and number or heads to 1, partitions that are block
aligned are also cyclinder aligned. With that trick, fix the vtoc8:
1.  Set physcyls, ncyls, altcyls, nheads and nsecs appropriately.
2.  Truncate the image size to exactly ncyls * nheads * nsecs * secsz.
3.  Properly write the cylinder number as the start of the partition.
4.  Oh, and actually calculate the checksum of the label...
Remember operator precedence?
Properly fill in d_nsectors, d_ntracks, d_ncylinders & d_secpercyl.
Round the image size to a multiple of the cyclinder size.
Remove the -z flag. Let's just write a sparse file whenever we can.
Partitions start on track boundaries.
Partitions start on track boundaries.
Partitions start on cylinder boundaries.
Write sparse files by default (when SPARSE_FILE is defined).
While here, detect errors when writing to stdout.
Write verbosity to stderr. The image may be written to stdout.
While here, fix writing to stderr, by not calling errc()
unconditionally, but only when there's an error.
Use :- and not :! for pipes. ! needs to be escaped, which adds to the
hassle.