The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
 1. - for each keynum in name.key file (each current record)
      - get the history
      - for each preamble in the history
        - seen{ preamble }++ (name.tmp.seen dbm file)
        - write to name.tmp.history
          - transnum keynum status [date reclen user]?
 2. - for each record in name.n.dat files (each transaction)
      - die "seen too many times" if seen{ preamble }++ > 1
      - write to name.tmp.transactions
        - transnum keynum status [date reclen user]?
      - if read line from name.md5
        - compare transnum keynum user md5--die if not equal
      - else write to name.md5
        - transnum keynum user md5 (of record data) [date reclen]?

 result:
     name.tmp.seen dbm file(s)       - of no use after step 2.
     name.tmp.history flat file      - can compare to new after migrate
                                           of no use after that
     name.tmp.transactions flat file - can compare to new after migrate
                                           of no use after that
     name.md5 [sha]?                 - can compare to new after migrate
                                           keep around for next validation

 Note: we plan to add optional 'digest' preamble field for one of
       crc, md5, sha  (of record data)
    data scanning procedure:

    read each data record in from_ds
      read first preamble
        get reclen, read record, skip recsep
        read next preamble
        repeat until end of file
    repeat for every datafile