tapview change log
==================


Version 1.2
-----------

Format auto-detection
  - The image format is now detected from the file's contents rather
    than only its extension.  A format is accepted only if the whole file
    parses cleanly as that format (TAP trailers must match their headers
    and the last block must end exactly at EOF).  If both TAP and TPC
    qualify, the extension breaks the tie.
  - If neither qualifies, the file is shown as fixed 512-byte blocks
    ("RAW"), with no tape marks.
  - New keys: t = TAP, c = TPC, r = RAW 512, d = auto-detect again.
  - New options: -t/--tap, -c/--tpc, -r/--raw force a format.
  - The status bar shows the current format ("auto" if detected).
  - Block reads that would run past the end of the file now fail cleanly.

AWS and HET tape images
  - New AWS/HET format (.aws, .het): AWSTAPE and Hercules HET images, with
    6-byte block headers.  Records spanning several physical blocks are
    shown as one block.  HET blocks compressed with zlib or bzip2 are
    decompressed, so lengths and contents are those of the original data.
  - Detected automatically like TAP and TPC (the whole file must parse
    cleanly, with consistent previous-block lengths and record flags);
    new key w and option -w/--aws/--het force it.
  - EBCDIC character translation starts out on for this format.
  - zlib and bzip2 support is on by default and can be turned off with
    WITH_ZLIB=no / WITH_BZIP2=no in the Makefile; without a library, blocks
    using that compression are shown still compressed.
  - A progress bar and percentage appear if opening a tape (or switching
    format) takes more than about half a second, as can happen with a big
    compressed HET image.  Quick opens stay silent.  Pressing q cancels:
    while opening it exits, and while switching format it keeps the
    previous format.
  - The statistics are now computed the first time they're wanted (the s
    key), not when the tape is opened, which roughly halves the open time
    for large compressed images.
  - Internals: each format is now a module (src/fmt_*.c) exporting a
    TapeFormat struct of function pointers (detection, parsing, block
    reading) and per-format defaults (hotkey, extensions, dump and
    character display modes), registered in one table in tape.c.  The core,
    the format keys, the options, and the help and status text are all driven
    by that table, so a new format needs no changes elsewhere.

TAP odd-length padding
  - TAP images in which odd-length records are padded with one byte to an
    even length (as SIMH writes them) are now detected and read; which
    layout an image uses is worked out from its contents.
  - A TAP or TPC record whose length runs past the end of the file (a
    truncated final record, or a SIMH bad-record flag, erase gap, or half gap,
    which are not interpreted) is now cut down to the bytes actually present,
    so the block list stays readable and never claims more data than the file
    holds.

Automated tests
  - New "make test" builds and runs tests/test_formats.c, which generates
    images of every format in memory (including compressed HET for each
    enabled library) and checks detection, parsing, data, forced formats,
    malformed images, statistics, format switching, and progress and
    cancellation.  No tape image files are needed or shipped.

Color schemes
  - New "mono" (no colors; reverse video and bold only) and
    "high-contrast" (bright on explicit black) schemes alongside the
    original "default".
  - New keys: m = next scheme, M = previous scheme.  The status bar shows
    the current scheme.
  - The TAPVIEW_COLORS environment variable selects the starting scheme
    (works the same on Linux and MacOS X); the new -C/--colors option
    overrides it.

Version 1.1
-----------

EBCDIC character display
  - New 'e' key toggles translation of the character columns of the dump
    panel (the ASCII sidebar in hex and octal modes, and the text in ASCII
    mode) from EBCDIC to ASCII.  Hex and octal byte values are never
    altered.
  - ASCII searches are converted to EBCDIC before matching while
    translation is on, so text is typed as it appears in the dump.  Hex
    searches always match raw byte values.
  - The dump title bar shows "EBC" when translation is on.

High-bit (8th bit) masking
  - New '7' key masks the high bit of displayed characters; '8' (the
    default) displays them unmasked.  When translation is also on, the
    mask is applied to the translated character.
  - The dump title bar shows the current setting (7 or 8).

Help screen, man page, and USAGE.md document the new keys.

The EBCDIC translation and 8th-bit masking features were submitted by
Dennis Boone <drb@msu.edu>.

Other changes
  - Source files moved to src/, documentation moved to docs/.  The
    Makefile remains in the project root; build from there.
  - Source reformatted for consistency with project style.
  - Version number shown on the help screen.
  - Extract (x / X) now asks for confirmation before overwriting an
    existing file.
  - A hex search with an invalid pattern no longer disturbs the previous
    search pattern.
  - Unrecognized command-line options now print usage and exit with
    status 1.
  - Unused escape sequences (Insert, Delete, function keys) are ignored
    instead of being mistaken for Esc, which could quit the program.
  - Out-of-memory while loading a tape image is now reported instead of
    exiting silently.
  - "make install" creates the destination bin directory if needed.


Version 1.0
-----------

Initial release.
