Taper v2.07                                                 (Release 09-12-2001)
Copyleft 1997-2001 ThunderWare Research Center
Written by Martijn van der Heide

CHANGES AFTER v2.06 (Release 19-07-1999)
----------------------------------------
- Changed the program property from Freeware to GPL General Public License.

CHANGES AFTER v2.05 (Release 14-01-1999)
----------------------------------------
- Linked Workbench! v2.71.8 with the following enhancements:
  - Two minor bugfixes;
  - Changeable mouse speed settings;
  - Added single-sample timer, so that the machine won't lock if your soundcard
    does not respond (while setting the volume in the pre-sampler window);
- Added decoding schemes `Your Sinclair', `Players' and
  `Paul Owens Protection System';
- Solved a `Division by zero' crash bug in the mixer setup routine (which gets
  called just prior to starting the sampler);
- Solved some bugs in the BASIC compiler:
  - A crash was produced if UDGs were used in the form `USR "x"';
  - Complex (sub)expressions were handled completely incorrectly;
  - The DIM command didn't like a variable name in front of the opening bracket;
  - Array indices weren't processed correctly;
  - The USR token didn't like a string expression (for UDGs) unless it was a
    direct string;
- Solved a rounding error in the streaming speed when writing VOC files;
- VOC files are no longer written using chunks of 64Kb - instead, each tape
  block is written as an individual VOC block;
- When converting BASIC to ASCII, inverted graphics were numbered incorrectly;
- Added option `MouseSpeedSetting' to TAPER.INI;
- Solved file handle leak in `Insert' -> `Raw Datablock' menu option;
- When trying to save to an open file, TAPER would bail out to DOS with a fatal
  error message. This is changed into an ErrorRequester;
- In the datablock edit handler, the `Drop' button will rotate the last data
  byte (which is to be dropped) into the parity byte;
- The datablock edit handler would not let you edit the parity byte if the raw
  data size was less than 2;
- Increased stack size from 32Kb to 48Kb.
- Turned the SAMPLING.DOC file into a HTML document with better info and pics.

CHANGES AFTER v2.04 (Release 25-09-1998)
----------------------------------------
- Linked Workbench! v2.71.6 with the following enhancements:
  - Carriage return characters were processed incorrectly in combo windows,
    causing screen corruption when scrolling up and down;
  - After spawning an application while running under Win95 and up, the mouse is
    kept hidden until moved, to avoid the screen corruption caused by Windows's
    bad (un)focus handling;
  - Added special correction for dodgy timers that occasionally forget to raise
    an IRQ on timer overlap (a new `feature' in Win98);
  - Increased timer resolution to 40 bits since it couldn't otherwise handle
    the pass through an hour (max resolution at 32 bits) system time.
    This resulted in errors when playing through the parallel port;
  - Keyboard drag&drop (<F5>) would `work' even if the source window was empty,
    thus corrupting memory;
  - In EditButtons and InputBoxes, <CTRL><P> is remapped to a pound sign (`'),
    since this character cannot otherwise be generated on non-English keyboards;
  - Added check for WindowsNT. If detected, all sound card options are disabled;
  - Solved colouring problem when drawing the current (inverted) combo entry;
- A couple of bad pointers in the configuration reading routine would corrupt
  random memory, easily resulting in a GPF;
- Deleting entries through the menu strip (or <ALT><D>) would pop up a garbage
  requester if the tape window was empty and crash if `Ok' was selected;
- Editing a `Jump To' block would often not save the change;
- `Custom Info' TZX blocks `Pokes', `ZX-Edit Document' and `Picture' would not
  print the General Description word-wrapped in the `View block information'
  window;
- Several of the Insert handlers would insert garbage data if nothing had been
  filled in and `Ok' was selected rather than `Cancel'. Such entries could
  easily result in crashes;
- Changes to the VOC decoder:
  - Solved a bug which handled VOC block ID 8 incorrectly;
  - SpeedLock 1 through 3 need the pilot pulse threshold to be under 25% for the
    clicking pilots to be decoded, while the default had been raised to 30% in
    the previous release. This is now automatically adjusted;
  - SpeedLock 1 through 3 clicking pilots are now written using `Loop' blocks to
    greatly shorten the number of blocks in the (TZX) file;
- Changes to the post-sampler requester (which asks if all went well):
  - Option `Save' would not unghost the menu strip if any data had been decoded;
  - The last used save path would not be remembered;
  - Option `Drop' occasionally resulted in a crash;
- The Playing samplerate was not always correct due to rounding problems with
  SoundBlasters under a SB16. This caused problems with turbo loaders;
- The write sample stream rate is rounded better now;
- TZX files starting with non-sound blocks could not correctly be written to
  either .VOC, .CSW or .RAW format;
- The `TZXStripPauseLengths' did not strip the pause length if the last sound
  block was followed by a `Group End' block that was the last block in the tape;
- If the end of the tape was missing and the user confirmed truncation of the
  last block, a fatal error would occur after it ("Percentage > 100%");
- Zero-sized .TAP blocks (leader plus syncs only, no data) within the tape
  rather than at the end are no longer skipped since some tapes appear to need
  them!
- If a .TAP file had a single spare byte at the end, an endless loop was
  started - more than a single spare byte was no problem;
- Spectrum header filenames that contain TABs would let the rest of the line
  clip off when printed in a combo window;
- Added check for reversed TZX version number 10.01 in stead of 1.10 (an older
  release of MakeTZX created this due to a bug) and a signal to the user after
  correcting;
- Added check if IRQs actually occur when playing through the soundcard.
  If none at all (bad BLASTER setting) or only 1 (no AutoInit DMA support),
  the play operation is aborted with an appropriate error message;
- Added button `Edit' to the BASIC listing window;
- Added option `BASIC Block' to the Insert options window;
  BASIC listings can now be edited/inserted as well!
- Did several code optimizations (for both better program size and speed);
- (Full source is now 3.85Mb and over 60,500 lines of C/asm!)

CHANGES AFTER v2.03 (Release 15-07-1998)
----------------------------------------
- Linked Workbench! v2.71.4 with the following enhancements:
  - Added soundcard sampling support;
  - Added soundcard DSP version detection;
  - Solved a very nasty crash bug, caused by a sometimes-not-initialized
    variable!
  - The TMP directory was stored incorrectly and used the current directory
    instead, making the program very unsuitable to be used on CD or on a drive
    with little space;
  - The ReInitComboWindow routine did not reset the slider StepRate;
    (load a long tape, then a short one and the slider moved trash around...)
  - The timer value would fallover if a timer interrupt occured at the moment
    the value was read. This affected both playing through parallel port and
    sampling, as well as screen FLASHing and mouse click handling;
  - On startup, a check is made for a pending non-acknowledged SoundBlaster IRQ.
    If found, the IRQ is acknowledged. Before, this caused problems if you ran
    a program that used the SB and didn't close it correctly before TAPER.
    The same check is done on exit of TAPER, to ensure correct closure on fatal
    exits.
- Added full support for the TZX v1.12 specification. The used version number
  when saving is still the lowest version needed for the particular tape;
- Added options `ZX-EditPath', `GIFViewerPath', `GIFViewerOptions',
  `JPGViewerPath' and `JPGViewerOptions' to the configuration file to suit the
  TZX v1.12 specification options;
- Added wizards to ask for the above paths when necessary;
- Added Computer model Enterprise to HARDWARE.INC for the TZX v1.12 specs;
- Added option `SBNoHighSpeedDMA' to the configuration file to use normal speed
  DMA even at high samplerates. To be used with soundcards that would otherwise
  crash;
- Added option `Sampler' to the menu strip under `Window', where the user can
  sample directly from a physical tape and let TAPER decode straight away;
- Added option `MixerInputValues' to the configuration file, which holds the
  soundcard software mixer settings to be used for sampling;
- Added menu option `Entry'->`Selected block'->`Group parity', used to check if
  the parity of a SpeedLock 2, 3, 4, 5, 6 or 7 block group is correct;
- The `SysInfo' window will also report the detected soundcard model;
- If the soundcard model is less than a SB 2.0, the Play and Sample options
  are automatically disabled now;
- The [DEL] key would pop up a garbage requester if the tape window was empty;
- Both decoding and playing TZX 'Direct Recording Blocks' didn't work at all!
- Renamed the file VOCDECOD.DOC to SAMPLING.DOC and rearranged it.
- Added full support for Ramsoft's Compressed Square Wave (.CSW) sample files;
- Changes to the VOC decode requester:
  - Raised the default maximum pilot pulse from 2600T to 3200T
  - Raised the default pilot pulse threshold from 25% to 30%
    This solves problems with badly alligned tape heads.
  - Made the SpeedLock type numbering equal to the numbering done by MakeTZX.
    Now we have 7 types in stead of 5;
  - Added decoding scheme `Sinclair User';
  - Added option `CoolEdit Adjust', which adjusts the used sample rate if this
    sampler program has been used;
  - Added option `Frequency Shift', which adjusts the used sample rate to
    correct resampling errors and a rounding error in READVOC.
  - Enhanced the bit repair routines to endure longer noise bursts;
- The `Loading Tape' percentage requester didn't update the percentage done
  during pilot seeks;
- VOC files were written with an invalid version number in the header;
- VOC files could get an invalid sample stream rate (sample rate adjusted due to
  limitations in a VOC header, but the stream rate itself not adjusted);
- 'Custom Info - Instructions' blocks would generate a GPF when viewed if the
  size of the block was above 48Kb;
- File I/O for 'Custom Info - Instructions' blocks was incredibly slow!
- Parallel and serial port addresses are now probed by TAPER itself. The
  configuration window will only let you select port numbers that exist.
  The options 'LPTAddressX' and 'COMAddressX' are no longer used in your
  TAPER.INI file and automatically removed when saving the configuration.
- The window colouring was not consistent through the different windows.
  Eg. delete a tape block with red (error) text and the confirm requester
  would display the line in green instead;
- The path stored internally (to remember) at a 'Save' command if the tape
  didn't have a name yet incorrecly kept the chosen filename as well. This
  caused an invalid path the next time 'Save' or 'Save As' was used.
- (Full source is now 3.78Mb and over 58,600 lines of C/asm!)

CHANGES AFTER v2.02 (Release 13-05-1998)
----------------------------------------
- Linked Workbench! v2.71.3 with the following enhancements:
  - Some minor corrections;
  - When restoring the startup video mode, mode bit 7 is forced 0 to make sure
    the screen is cleared;
- Added option `QuitInTextMode' to the configuration file to force (color) text
  mode on program exit (turned off per default);
- Added option `ParPlayIRQsDisabled' to the configuration file, which will block
  all IRQs 3 through 7 while playing through the Parallel Port;
- Added option `Play IRQs Disabled' to the configuration window, which allows
  the user to adjust the setting;
- Added configuration option `Show Play Time' to the configuration window;
- Turned the option `DirectVideoControl' on per default;
- Changed the Hex Dump window into a fully featured Hex Edit window including
  a search option and a button to start the disassembler at the cursor address.
  Encrypted blocks can be edited as well and are re-encrypted afterward;
- Changes in the disassembler:
  - Several 2-byte 'ED' extended instructions got the correct mnemonic but did
    increase the program counter by 1 only (only the ED). The second byte would
    be printed as another instruction (eg. 'LDIR' was reported as 'LDIR;OR B');
  - The data block was not run through the auto-decryptor;
  - Renamed the `Restart' button to `Go to';
  - The `Go to' button's default address should be the address currently
    displayed at the topmost line of the disassembly window. The 'loaded
    address' (ORG) value was not added to it;
  - Added address wrap protection when saving out the disassembly, so the
    disassembly will stop when address 65535 has been done;
  - Added checks to make sure that the save start address is lower than the end
    address and both within address range of the data block;
  - A GPF would occur when issueing bad addresses when the save range was asked;
  - The default address when adding a symbol did not have the ORG address added;
  - The disassembler would insist that the symbol table had been changed even
    after a fresh load or after saving;
  - Added a button to start the Hex Editor;
- Solved (all of?) the Parallel Port playing problems resulting in the dreaded
  'Sorry, your computer is too slow'!
- Parallel Port playing doesn't start immediately anymore. The user now has time
  to actually start a tape deck when needed :-)
- The `Selected' -> `Make Group' menu function would always take the left
  (source) window;
- The `Selected' -> `Make Loop' menu function did not work at all;
- Both the `Make Group' and `Make Loop' function did not adjust the selection
  bar to account for the inserted entries;
- Editing the Flag byte of a block did not update the calculated parity. Saved
  tapes were then invalid, but this did not show unless the tape was reloaded;
- Added button `Drop' to the block timing info editor, which simply drops the
  last byte of the block (used to correct blocks that had an incomplete last
  byte but were saved in TAP format);
- Appending an entry to a collapsed Group/Loop would append it after the
  Group/Loop Start (i.e. inside the collapsed Group/Loop) rather than the End;
- Block graphics were printed incorrectly when saving out BASIC listings;
- Z80 and SNA snapshots can be loaded now and are on-the-fly converted to
  turbo-loading, compressed tapes;
- (Full source is now 3.47Mb and over 54,000 lines of C/asm!)

CHANGES AFTER v2.01 (Release 24-02-1998)
----------------------------------------
- Linked Workbench! v2.71.2 with the following enhancements:
  - Watcom appeared to report system error messages from the wrong table.
    This job has been taken over;
  - A combo window could occasionally have a vertical slider that was drawn
    through the bottom of the slider bar after resizing the window;
  - Changes in the FileRequester:
    - The `Ok' button is now (un)ghosted while editing the filename field.
      No need to press <TAB> or <ENTER> afterward anymore!
    - The `Refresh' button will force a file system commit before rereading
      the directory (appeared to be needed for Win95 and up);
  - The FileViewRequester would go back to the start of the file when resizing;
  - The FileViewRequester has been adjusted so that also text files created on a
    Macintosh are displayed correctly (single CR as end-of-line delimiter);
  - A view-only combo window (eg. the FileViewRequester) would generate a
    General Protection Fault when <CURSOR UP> was pressed when at the top of the
    file;
  - The LocalMouseHiding routine has been tightened, eliminating the possible
    (small) screen corruption;
  - A 3-button mouse can be simulated from a 2-button mouse using a
    `chord middle' option as in several OSes;
- VOC decoding improvements:
  - GoldWave extension block headers were occasionally incorrectly initialized
    if at the beginning of a VOC file;
  - VOC Sample values below 16 were often incorrectly taken as being header
    blocks, thus distorting the sample stream (and usually making the file
    undecodeable!)
  - Added the much needed echo suppression;
  - Greatly improved distortion correction (all single noise spikes and often
    even longer noise bursts can be repaired!);
  - Turning off the VOC filter will now also turn off the distortion correction!
  - Better automatic recognition of ROM-saved blocks;
  - Bit approximation ('1' = 2 * '0') is now turned on by default and works
    much better;
  - Sync pulses are automatically levelled. These were the biggest reason why
    several decoded VOCs would not load into a Spectrum (emulator);
  - Added option button `Show Decode Graph' to the VOC decode requester, which
    will show a signal graph after each decoded block;
  - Decoding scheme `Firebird Bleepload' didn't work at all anymore since v2.00!
  - The `Standard Syncs' value would not be updated on screen if you pressed
    the `Default' button;
- A header block with (control) characters below 32 in it would shift the line
  to the left (1 position for each control sequence);
- TZX 'Custom Info Blocks' now prints the block length in the tape listing
  window one position more to the right so it aligns again;
- Solved several severe bugs related to multi-line entries (header entries where
  the expanded header name is more than 10 characters are printed on 2 lines);
- Solved several other memory-related bugs that caused dropouts;
- Stripping an incomplete last byte from a `Pure Data' block would in fact add
  the entire incomplete byte (8 bits, padded with zeroes) to the block;
- Added check for infinite loop when playing a tape or writing to VOC file;
- Added option `ShowRemainingPlayTime' to the configuration file, which will
  show a count-down playing timer in the `Playing...' window while playing
  through the SoundBlaster;
- Added option `Emulate3rdMouseButton' to the configuration file, which will
  emulate a 3-button mouse from a 2-button mouse;
- Added option `Show play time' to the menu strip under `System', where the
  above counter can be turned on and off;
- Added option `Get tape play time' to the menu strip under `Window', to
  calculate the play time of the entire tape;
- Added option `Get play time' to the menu strip under `Entry' ->
  `Selected block';
- The 'Custom Block - Instructions' handler now handles importing files created
  on a Macintosh correctly as well (single CR as end-of-line delimiter);
- The 'Custom Block - POKEs' handler would interpret the 'Ignore Bank Number'
  field from the wrong bit, resulting in some strange bank values!
- If you inserted a Header block, the tape file could no longer be saved in the
  TAP format (although the tape was perfectly correct when saved in another
  format);
- The tape FileRequester will remember the last used file mask and path, even
  if the path was cleared due to a `New' request;
- Some instances of premature end-of-file when reading a tape file would
  incorrectly be reported as a corrupt file (would continue correctly though);
- When end-of-file occurs during reading the data of a block, a requester pop up
  where the user can decide whether that block should be dropped or truncated.
  VOC files can be decoded as far as possible;
- Deleting the last entry in a tape would occasionally result in a crash;
- Enlarged and sorted the Insert Entry window;
- Changes in the BASIC listing window:
  - The window lost its `Save' button when it was resized;
  - The `Save' button starts a FileRequester, defaulting to the same directory
    where the tape file is located;
  - The listing would go back to the start when resizing;
  - Added button `Real Numbers';
- The `View As' -> `Memory Dump' menu option will first ask for the address
  where the block will be loaded into Spectrum memory;
- Added `View As' -> `Disassembly' menu option;
- When drawing a window, the default button is `Ok' in stead of `Cancel',
  unless doing irreverseable things like delete confirmation;
- Added file `SPROM48.SYM' to the distribution;
- (Full source is now over 3.25Mb and nearly 50,000 lines of C/asm!)

CHANGES AFTER v2.00 (Release 16-12-1997)
----------------------------------------
- Linked Workbench! v2.71.1 with the following enhancements:
  - Small increase of overall speed;
  - The 'NoLocalMouseHiding' flag is no longer needed for Win95;
  - Win96 (OSR2) and up were incorrectly reported (but correctly detected);
  - Drop-down windows could not be controlled with the keyboard;
  - (Combo windows) <CTRL><INSRT> did not work at all;
  - The menu strip is fully controlable with the keyboard with <F9>;
  - Added mechanism to bail out on recursed faults (reported as double faults).
    This produced a complete crash of the entire machine before;
  - Solved file handle leak in the font reader;
  - Added keyboard drag&drop with <F5>;
  - Combo windows would loose mouse focus if a window was closed on top of it;
  - Solved a bug where characters were occasionally not printed in a combo
    window if they ended at a byte boundary in video memory;
  - Solved bug of the combo window slider bar when the mouse was released off
    the slider while dragging;
  - Processed <ALT>-key combinations would occasionally not be removed from the
    keyboard queue;
- The initial menu ghosting was incorrect after reading a tape;
- Solved file handle leak when reading file HARDWARE.INC;
- Moving an entry with drag&drop (<ALT> pressed) usually produced a crash;
- Playing through the soundcard would corrupt lower memory, often resulting in
  a crash on exit;
- The little `Playing...' window would not no away if you selected a
  non-playable block and selected `Play entry';
- The `Cancel' button in the VOC decoding percentage requester lets you cancel
  during pilot seeks (thus cancelling if decoding doesn't work at all -
  previously you had to wait until the VOC was 100% processed);
- Menu option `Edit Header' got shortcut <ALT><T>;
- Menu option `Selected' -> `Make Group' got shortcut <ALT><Z>;
- <DEL> will delete the currently selected entry (same as <ALT><D>);
- Expand/Collapse of Group/Loop blocks can also be done with the `+'/`-' keys;
- Some problems with paths if the path was in the root directory of the drive;
- The TAP format cannot handle blocks larger than 65534 bytes,
  the LTP format cannot handle blocks larger than 65536 bytes.
  Such blocks are no longer saved and a requester pops up to confirm.
- Editing a BASIC header block would set the last header field (length of
  BASIC part) to a random value, making the file unloadable;
- Displaying an `Archive Info' block would report the Language field as being a
  Comment field;
- Solved problems when writing VOC files:
  - You couldn't write them at all if the PlayDevice was Parallel Port;
  - Some non-data blocks (such as Group blocks) would create an endless loop
    skipping that same block over and over again;
- Raised Parallel Port time-out value from 1 to 2.5 ms.
- Added option `DefaultDecodeROMTiming' to the configuration file. If set, the
  default VOC decoding scheme will be `Force ROM Timing';
- Made the tape windows 1 character wider, so that the block numbers can be
  displayed with 4 digits (e.g. Dinamic Loader files have several thousand
  entries!)
- The `pause length' field of TZX block types 0x10, 0x11, 0x14 and 0x15 is
  written as 0 if it's the last block in the tape or the next block is a 'Stop
  the tape'. This will force emulators that load at high speed (e.g. X128) to
  return to normal speed immediately when the game starts so you can see
  everything;
  This behavior is turned on by default and is (de)activated with a new option
  `TZXStripPauseLengths' in TAPER.INI;
- The mouse cursor is changed into a waiting cursor while processing drag&drop;
- Added menu option `Selected' -> `Edit timing', to edit the timing values of
  all selected (Normal and Custom Speed) entries at once;
- Added submenu `Find match' to compare tape blocks;
- Added menu option `Get tape CRC';
- Added menu option `Match tapes';
- Added button `Save' to the BASIC listing window, to save out the listing to
  an ASCII file;
- Added the detected soundcard software mixer type to the `SysInfo' window;
- Added menu option `Sound volume' to adjust the play output volume;
- Added command line option `-s' to disable the soundcard routines;
- Added command line option `-m' to disable the soundcard mixer routines only;
- (Full source is now over 2.96Mb and 45,000 lines of C/asm!)

CHANGES AFTER v1.03 (Release 08-10-1997)
----------------------------------------
- Linked Workbench! v2.70.9 with the following enhancements:
  - Full conversion to 32-bit protected mode (DPMI based i.s.o. XMS based);
  - Solved some major memory related bugs;
  - Own local mouse hiding routine works in Win95 as well and speeds up a lot;
  - Rewrote window drag routine to gain some more speed;
  - Added HardwareError button `Fail';
  - HardwareError button `Abort' aborts the entire program rather than the
    failing operation!
  - Enlarged SoundBlaster Play DMA buffer maximum from 48K to 64K;
  - SoundBlaster playing would occasionally report a DMA overrun if the
    operation was aborted;
  - Sometimes the global keyboard buffer was not cleared when a window where the
    key came from was closed;
  - Changes in the FileRequester:
    - The FileRequester would produce a FatalError if an empty path was passed
      (e.g. an unset configuration option);
    - Deletion of a single file produced an error unless you explicitely
      selected it first;
    - Due to a problem in Watcom C, the drives (at the bottom of the list) do no
      longer report their volume label, but are listed as `<Drive>' instead;
- Since v2.00, TAPER is fully 32-bit protected mode;
- Added full support for the new `Stop Tape if in 48K Mode' blocks (type 0x2A);
- All TZX's are still saved as v1.10, unless the new block is used;
- Added edit/list/view/play support for all TZX blocks up to version 1.11;
- TZX files of a higher version than TAPER can handle report a notice if blocks
  are found that TAPER cannot handle;
- If a TZX file ends prematurely, the last block is simply dropped and you get a
  message saying so (produced a FatalError before);
- ZXS `Infinite Pause' blocks were incorrectly decoded;
- ZXS timing information blocks were thrown away after being processed;
- The VOC filter destroyed GoldWave extension blocks (so the filter did not work
  at all with such VOC files);
- The VOC filter occasionally skipped VOC headers incorrectly;
- The `Select Block' entry editor did not accept cancel;
- The `Select Block' entry editor did not accept the last block in the tape to
  jump to;
- Simulating a `Select Block' (<CTRL><CURSOR DOWN>) crashed if you pressed a
  key;
- The values in `Jump To' blocks were displayed incorrectly for backward jumps;
- The `Insert' menu does no longer display jumping options in an empty tape;
- The `Insert POKEs Block' did not initialize correctly and generated a garbage
  block, resulting in a General Protection Fault whatever you did;
- An error line ">>>>> Missing Data Block <<<<<" would corrupt the next line;
- The pointer bar was sometimes invalid after a drag&drop;
- Playing would not remove the little `Playing...' window if an error occured
  before the first sound output;
- The `128K' indicator is cleared when a new tape is read;
- When reading a TZX `Hardware Type' block that says the tape needs a 128K
  computer, the `128K' indicator is automatically set;
- Added the `Jupiter ACE' (Computers, ID 0x1A) to HARDWARE.INC;
- Writing a tape back would occasionally ask permission to overwrite a `.BAK';
- (Full source is now over 2.65Mb and 42,500 lines of C/asm!)

CHANGES AFTER v1.02 (Release 20-08-1997)
----------------------------------------
- Linked Workbench! v1.70.8 with the following enhancements:
  - Solved some video bugs;
  - Added input box type;
  - Fixed bug where carriage return characters were incorrectly printed in a
    combo window;
  - The <CURSOR LEFT> and <CURSOR RIGHT> keys moved the wrong slider bar in a
    combo window. The window itself got updated ok though;
  - None of the requesters would clear the keyboard buffer afterward;
  - The edit handler did not handle the numerical keypad correctly;
  - Fixed major bug in the window destroy routine. This caused possible
    activation of NULL windows, which would hang the system;
  - Fixed font change bug in the menu strip;
  - Added `multiple delete' to the FileRequester;
- The menu strip sometimes changed font (and corrupted the top of the screen) if
  both the left and the right mouse button were pressed;
- `Custom Info' and `Snapshot' blocks were handled completely incorrectly;
- If the first block in a tape was a `Custom Speed' block, the tape would not be
  read correctly and it usually resulted in an XMS error;
- If the first block in a VOC was a special block from a decoding scheme, TAPER
  would use a NULL (tape) pointer to add the block to;
- The save routine would sometimes think a loaded tape didn't have a name yet..;
- If no tape was loaded yet, the `Import' function would result in an XMS error;
- You weren't allowed to Play through the Parallel Port if no SoundBlaster had
  been detected;
- Added full support for the `Raw Tape Samples' file format used by emulator
  `Z80em' (Acorn Risc OS);
- Added full support for VOC `GoldWave Extension' blocks;
- Added VOC decode flag `Standard Syncs';
- Added option `SwapInTextMode' to the configuration file;
- Added option `Decrypt any' to the menu strip, which will decrypt any block in
  the tape if set. Useful to try out non-SpeedLock encryptions or SpeedLock
  blocks other than PURE DATA;
- Added option `Set values ...' to the menu strip, where the user can set up the
  decryption values used for auto-decryption;
- There's no need to keep cancelled inserted blocks;
- The editor for block type `Hardware Type' didn't close with the close gadget;
- The editor for block type `Hardware Type' had a memory leak;
- Added full support for `Message Blocks' (type 0x31);
- `Message Blocks' are printed detailed in fixed 30 columns;
- `Archive Info' blocks have a better, multiline editor;
- Header blocks can be edited and inserted;
- All entry headers (in conventional memory) are 1 byte shorter (saves space);
- Added menu option `Edit header' to the menu strip under `Entry';
- Added submenu `Selected block' to the menu strip under `Entry';
- Added list/view/play support for all TZX blocks up to version 1.10;
- All TZX's are saved as v1.10;
- Intuitive grouping - select a range of entries and new menu option
  `Make group' or `Make loop';
- Jump destinations (`Jump to Entry', `Call Block' and `Select Block') are
  automatically adjusted when entries are inserted/deleted;
- Added full support for the new `Loop' blocks (type 0x24);
- Added full support for the new `Call Sequence' blocks (type 0x26);
- Added insert option for the new `Return from Sequence' blocks (type 0x27);
- Added full support for the new `Custom Info - POKEs' blocks (type 0x35);
- Added full support for the new `Custom Info - Instructions' blocks;
- Added full support for the new `Custom Info - Spectrum Screen' blocks;
- Added option `Editor' to the configuration file and window;
- Added keys <CTRL><CURSOR DOWN> to advance blocks as played and
  <CTRL><CURSOR UP> to clear the advance variables (CALL stacks, LOOP counters);
- (Full source is now over 2.5Mb and 40,000 lines of C/asm!)

CHANGES AFTER v1.01 (Release 19-06-1997)
----------------------------------------
- Linked Workbench! v1.70.5 with the following enhancements:
  - All graphics functions are now my own - any startup graphics mode is
    supported and returned to;
  - If the original video mode could not be restored, (color) text mode is used
    as a last resort before reporting an error;
  - SoundBlaster DMA is initialized as High-Speed if above 22 kHz;
  - Added check for IRQ noise if the SoundBlaster IRQ is 7;
  - Added some more diagnostics for unknown swap return codes;
  - Removed crash bug in combo window <PAGE DOWN> key handling;
  - Improved window activation;
  - Improved menu handling;
  - Improved inter-process control messaging;
- Zero sized TAP blocks (noise) are still skipped, but the file will be marked
  changed and a requester is shown after reading;
- Zero sized TZX blocks would not be read right. In fact, TAPER would say that
  it wasn't a TZX file after all ;(
- The WriteTape routine crashed if the blockdata length of the entire tape was 0
  bytes;
- Cancel Quit didn't work at all;
- Inter-block pause between turbo blocks from special decoding schemes was lost;
- The destination window selection bar was invalid after a drag&drop;
- No more Fatal Errors if a filetype is unknown when entering the reader;
- Tape data blocks larger than 99999 bytes had the flag byte and length
  printed immediately after eachother, making it hard to read;
- The active tape window can now be controlled with the keyboard (menu as well);
- Added key [TAB] to switch the active window;
- Gave lots of menu entries shortcut keys;
- The new tape name will be permanent when using `Save As';
- SpeedLock 3/4 turbo block pilots are decoded to be at least 500 pulses;
- Blocks dropped or inserted after a collapsed Group now actually get there :-)
- Added digital VOC filter and a menu option `Default VOC Filter' to have it
  enabled/disabled by default;
- Added decoding scheme `Dinamic Loader';
- Added configuration option `PlayDeviceSoundBlaster' which selects either
  SoundBlaster or Parallel port;
- Added configuration option `PlayWindowsDisabled' which disables Windows
  multitasking while playing a tape (block);
- Playback can now be done either through the SoundBlaster or the Parallel port!
  (pure DOS only)
- Added full support for `Hardware Type' blocks (type 0x33);
- Added full support for `Direct Recording' blocks (type 0x15), including a menu
  option `Decode Block' to decode such blocks like it was an ordinary VOC file;
- Added file `HARDWARE.INC' to the distribution for the above option;
- Added file `DIAGRAM.Z80' to the distribution, with permission;
- TZX files are written as version 1.02;
- (Full source is now over 2.2Mb and 34,500 lines of C/asm!)

CHANGES AFTER v1.00 (Release 21-05-1997)
----------------------------------------
- Linked Workbench! v1.70.4 with the following enhancements:
  - Improved inter-process control messaging;
  - Percentage requesters with a Cancel button attached can also be cancelled
    with the [ESC] key;
  - back-cycling through buttons went wrong when at the first button;
  - Redid the FileRequester:
    - Removed the `Drives' button;
    - All available drives are printed at the bottom of the files list;
- `Normal Speed' blocks were limited to 48Kb, while it can handle up to 64Kb;
- `Normal Speed' blocks cannot have an incomplete byte at the end (not supported
  by the format);
- `Pure Data' blocks were written with a wrong length if the last byte was
  incomplete;
- Blocksizes above 64Kb were printed incorrectly (modulo 64Kb) and corrupted the
  stack;
- Playing a block through the SoundBlaster used the wrong part of the DMA
  buffer if the buffer had been realligned;
- Using `Play Selected' would make a mess if no blocks were selected;
- Adjusted the inter-block pause between TAP blocks when playing or converting
  to VOC: 1 second between a header and a datablock, 2 seconds otherwise;
- SpeedLock 3/4 decoding didn't work in most of the cases ;-(
- Decoding a SpeedLock 3/4 as a SpeedLock 1/2 would overflow all data buffers
  and crash the XMS system;
- Added decoding scheme `Digital Integration';
- Added check for entries that will loose data when saved. These entries are
  printed in bright red;
- `Custom Speed' blocks can be saved in a TAP file, without timing info.
  A confirmation requester pops up for such entries;
- Dropping an entry before the first one would corrupt the end of the tape;
- Found several occasions where the selected status of entries were lost when
  rebuilding the tape directory (eg. multiple delete);
- Dragging tape entries was very messy;
- Added buttons `Make SCR' and `Make GIF' to the `View as screen image' window;
- `Save As' tape names were lost if the tape had no name before;
- Cancelling the VOC decode requester returns to the previous tape in stead of
  an <empty tape>;
- Added font file `SPEC6X8.FNT';
- Group blocks can now be collapsed/expanded;
- Added a Cancel button to the VOC decode progress indicator;
- Added placeholders `LPTPort', `COMPort' and addresses to the configuration;

CHANGES AFTER v1.00b3 (Release 06-05-1997)
------------------------------------------
- Updates to Workbench! v1.70.3:
  - Added support to call or be called from other Workbench! applications;
- Fixed several small bugs/inconsistencies;
- SoundBlaster play still had a `tape loading error' in the last block played;
- Increased initial SoundBlaster play delay to 2 ms (to eliminate the 'plop');
- Added menu option `Save raw data';
- A saved VOC file was not chunked into blocks of around 64Kb;
- A saved VOC file had missing blocks if these blocks were shorter than 16Kb;
- Deleting a tape entry would often result in an XMS error;
- The naming of `New' tapes was inconsistent. Also, when saving such a tape,
  the filename should be blank in the FileRequester;
- `Archive Info' blocks were displayed incorrectly;
- Redid the VOC decoding (window):
  - Moved the decoding scheme to the top;
  - Made bit approximation a flag rather than a decoding scheme;
  - `Drop Partial End' was turned on by default. This is not a good idea;
  - The default `Threshold Standard' was 24. This was too high (now 15);
  - Added decoding schemes Alkatraz, SpeedLock 1, 2, 3 (both variations) and 4;
- Added full support for the tape file format .LTP;
- Added automatic SpeedLock 2-4 block decryption when a `Group Start' entry was
  found with a name starting with `SpeedLock 2', `SpeedLock 3' or `SpeedLock 4'
  and a menu option `Auto-decrypt' to turn it on/off;
- Added automatic Group block adjustment: each `Group Start' has a matching
  `Group End' and no nesting is allowed;
- Added automatic Jump To block limiting: if the destination is outside the
  tape, it is limited to the first/last entry;
- Removed `Group End' from the `Insert' menu options;
- You can edit/insert `Row Of Pulses', `Jump To' and `Archive Info' blocks;
- Added a `VOC decoding' documentation file to the distribution;
- Added a `Help' button in the VOC decoding window, which shows this file;
- Changed menu strip: `L Window' and `R Window' (and Entry) now have an arrow
  in stead of the `L' and `R';

CHANGES AFTER v1.00b2 (Release 01-05-1997)
------------------------------------------
- Updates to Workbench! v1.70.3:
  - You could not drag an entry to right after the next one;
- Pure Data blocks were still written incorrectly;
- There sometimes were inconsistencies when inserting an entry;
- Inserting an entry in an empty tape would cause an XMS error;
- Inserting an entry before the first one would cause an XMS error;
- When a block has no flag byte, the first data byte is displayed as such;
- When a block has no parity byte, the last data byte is displayed as such;
- The block timers editor (type 0x10 and 0x11) now allows editing the flag byte;
- Added DMA overrun check in the SoundBlaster play routines;
- Fixed the SoundBlaster `tape loading error' bug;
- Added option `TraceSoundBlocks' to the configuration file, configuration
  window and menu strip;
- The types 0x10, 0x11 and 0x14 can all be converted into eachother in stead of
  only 0x10 and 0x11;
- Rebuilding a tape catalog was very messy;
- Added a `Size' field to the tape windows, which displays the total amount of
  (virtual) memory that this tape uses;
- You can insert a `raw datablock', which is stored as type 0x10 or 0x11
  depending on the size of the file to insert;
- You can edit/insert Pure Tone blocks;
- Adjusted handling of infinite pause when playing SoundBlaster - [ESC] aborts;
- Increased stacksize from 16Kb to 20Kb;


CHANGES AFTER v1.00b1 (Release 28-04-1997)
------------------------------------------
- TZX files were written as version 1.00 in stead of version 1.01;
- Pure Data blocks were written incorrectly;
- Pure Data blocks were hard to find in the tape catalog. They are now printed
  exactly like normal data blocks in black, with the size at the end;
- Pure Data blocks had the menu entry `View As ...' ghosted;
- Added possibility to edit block types Normal Speed, Turbo Speed and Pure Data;
