MAG Disk (Mar 1991) : Zoom / Zoom.doc

========================= Zoom/ZoomCheck 4.1 =========================
======================================================================
A  floppy disk tracking and archiving utility, written by Olaf `Olsen'
Barthel   of   MXM.    ©   Copyright   1990,1991   by   MXM,  Lh  data
compression/decompression  code  ©  Copyright  1990,1991  by Holger P.
Krekel  & Olaf Barthel.  Shareware, all rights reserved.  No guarantee
of any kind is made that the program(s) described in this document are
100% reliable.  You use this material on your own risk.

============== A word on trojan horses and link viruses ==============
======================================================================
I  didn't  want  to  create  a 4.0 version yet, but circumstances have
forced  me  to  bump  the current release to this version number.  You
might  have  heard  the  story  of  `Zoom!'  being a new link virus in
disguise.   As  far  as authorized copies of the previous releases are
concerned this is and was NOT the case!
   When  I  heard  that `Zoom!' was accused of being a kind of `Trojan
Horse'  I checked all support files and checksums and did NOT find any
evidence!    So   this   either  was  supposed  to  be  a  joke  or  a
misunderstanding.   I  was  quite  surprised  to  hear that especially
`Zoom!'  was  infected  since  it  is the first program to include CRC
program checksums and an anti-link-virus selftest.

======================= READ THIS OR MISS OUT ========================
======================================================================
On  startup  both  `Zoom'  and `ZoomCheck' will examine their internal
hunk structures: if anything is not in its correct place both programs
will  put up alerts.  To discover what was wrong enter `Zoom SELFTEST'
or `ZoomCheck SELFTEST'.
   If possible both programs will read their executables from disk and
calculate  a checksum (Note:  `Zoom!' will try to read the file `Zoom'
from the current directory, `ZoomCheck' will try to read `ZoomCheck').
If  this  `WRAP'  checksum  is  nonzero  the  approriate file has been
modified (which can but need not indicate virus infection)!
   Enter  `CRC  Zoom'  and  `CRC  ZoomCheck' to calculate the external
checksums  and  compare  them with the samples given in this document.
Any differences indicate possible virus infection!  If you don't trust
the  sample  checksums  listed  in  this document, send me a letter or
electronic  mail  (adresses  listed  below)  and  ask for the `factory
checksums'.

   THIS AND THE FOLLOWING ZOOM! RELEASES MAY ONLY BE DISTRIBUTED IN
                 THE SELF-EXTRACTING ARCHIVE FORM!!!

========= What if my copy of `Zoom' appears to be infected? ==========
======================================================================
Do  not hesitate to send me a letter or electronic mail containing the
following information:

    1) Where did you get the copy from?
    2) Which files have been infected/modified?
    3) What do you guess: have the files been modified by a virus
       (which virus)?

   As  a  programmer I am about to lose my reputation - and I will not
hesitate  to report the luckless fool who infected the `Zoom!' release
in question and spread it.

============================== Contents ==============================
======================================================================
This  package  consists of six files.  The CRC checksums were obtained
using  the  `CRC'  utility  (also included in this package).  Provided
that  all checksums match the following samples (and this document has
not been modified) no file is virus-infected.

                    Release Date: 09-Jan-91, 14:50

         Zoom           (CRC = $2E79D5C3, Size = 55200 Bytes)
         Zoom.info
         ZoomCheck      (CRC = $2538C75C, Size = 18164 Bytes)
         ZoomCheck.info
         CRC            (CRC = $4F5177B9, Size =  4104 Bytes)

         Zoom.doc       (Size = 30073 Bytes)

   The  new  `CRC' utility will also calculate and print the so-called
`WRAP'  checksum.   For  all  programs in this distribution (including
`Zoom', `ZoomCheck' and `CRC') this checksum MUST be zero (if nonzero,
the approriate file has been modified).
   All  programs  in this distribution are PURE, I suggest setting the
`p' bit if not already done.

===== Why use Zoom! instead of other disk compression utilities? =====
======================================================================
   - Zoom!   performs much faster and compresses better than any other
     currently available disk archiving utility.

   - Zoom!  recognizes about 66 different viruses.

   - Zoom!  has both an Intuition and a Shell interface.

   - Zoom!  can be customized for your own needs.

   - Zoom!  works with Kickstart 2.x!

   - Zoom!   will  also  work  on  Amiga  computers  equipped  with an
     MC68020/30 microprocessor.  No need to buy an extra version!

============================== Purpose ===============================
======================================================================
Disk archiving utilities are becoming increasingly attractive.  Almost
all  other disk compression tools lack a friendly user interface, take
ages to finish their work or simply produce very long output files.
   Zoom!   is  the successor to CompDisk and owes much to the original
tool's design.  Nevertheless, Zoom!  performs faster, produces `safer'
and much smaller output files.
   Zoom!   uses  highly-efficient  data encoding routines derived from
LhArc  (adaptive  Huffman  squeezing)  which  have been converted into
MC680x0  code  (we  call  it `Lh').  Data compression/decompression is
always  much  faster  than displayed by programs such as Warp, LhWarp,
LhArc and LZ.
   To reduce the chance of encoding a virus-infected disk, Zoom!  will
examine  the  bootblock  and  display it if it is of nonstandard type.
The following 66 different bootblock viruses are recognized:

         16 Bit Crew      AEK (MicroMaster)           AIDS
        Alien New Beat        Amigafreak      Australian Parasite
           BamigaS1          Black Flash            Butonics
     Byte Bandit (1 & 2) Byte Warrior (1 & 2)     CCCP (1 & 2)
      ClaasAbraham (MCA)     CList Virus             Coder
             DAG              Destructor       DiskDoctor (1 - 3)
       Digital Emotion      Diskguard V1.0          F.A.S.T.
           F.I.C.A.             Forpib              Gadaffi
           Graffiti            Gremlins             GX Team
             ICE              Incognito               JITR
        Joshua (1 & 2)    Julie (Tick Virus)         Kauki
         LAMER (1 - 3)           LSD               Megamaster
         Microsytems         Morbid Angel           Obelisk
            OPAPA           Phantastograph            Rene
           REVENGE         REV. Boot Loader       SCA (1 & 2)
           Scarface           Selfwriter           Sendarian
      Sinister Syndicate     Supply Team           Switch OFF
            Target            Termigator         The INCOGNITO
           TIMEBOMB              TURK           U.K. Lamerstyle
           Ultrafox            Warhawk

   Ralf  Thanner,  author of the `Berserker' virus killer, donated the
bootblock scanner and rewrote the 16-bit CRC routines, thanks a lot!

============================ Installation ============================
======================================================================
Copy `arp.library' to your LIBS:  directory, both Zoom!  and ZoomCheck
require  it.   ENV:   (default AmigaDOS environment storage directory)
should be assigned to somewhere, but needn't.

========================= Zoom! Shell usage ==========================
======================================================================
The following command line template is displayed if you type `Zoom ?':

 From,To,Check/K,T=Text/K,S=Start/K,E=End/K,C=Crypt/K,D=ClearData/S,
           B=ClearBlocks/S,V=Verify/S,Q=Quiet/S,Selftest/S

From .......... Name  of  the file to be read and written back to disk
                (`decode')  or  the  name of the filing device to read
                the data from to be encoded.

                Examples: `Zoom from df0: to ram:doodle'
                          `Zoom from ram:doodle to df0:'

To ............ Name of the device to store the decoded data on or the
                name of the file to send the encoded data to.

Check ......... This  is  a  tiny  implementation  of a file integrity
                testing  tool  (such as  `ZoomCheck').  A file created
                by  Zoom!  will be read and tested.  If  a checksum is
                not  in  its  correct  place  an error message will be
                displayed.

                Example: `Zoom check ram:doodle'

Text .......... Zoom!  can attach a text file to an archive file which
                will be displayed while/before data decoding. It  will
                be read and encoded before the  actual  disk  encoding
                takes place.

Start ......... The  track number to start encoding at.  This argument
                is  optional  and  does  not  need  to be entered.  By
                default the starting track is zero (= 0).

                Example: `Zoom df0: to ram:dodo start 17 end 22'

End ........... The number of the last track to encode.  Note that you
                cannot  ask  for  a starting track and omit the ending
                track  (and the other way round).  Both arguments must
                be used.

Crypt ......... Files  created  by  Zoom!   may  be  encrypted  with a
                special  password.   The  same  password (Note:  it is
                case  sensitive) will be required to decode the output
                file.

                Example: `Zoom df0: to ram:doodle crypt Secret'

Cleardata ..... This  switch  may  reduce  the size of the output file
                produced by encoding.  Under the `old' filing system a
                data  block  contains  the  number  of bytes which are
                actually occupied by data.  The rest of the data block
                usually  contains  random  data.   If  this  switch is
                active  the  unused  portion of the data block will be
                set  to  zero.  Note:  due to the different data block
                format  this  switch  has  no effect if used on a disk
                formatted by the fast filing system.

Clearblocks ... Not  all  blocks of a disk may be actually occupied by
                data.   Zoom!  uses the disk Bitmap to determine which
                blocks  to  read and to encode.  By default the Bitmap
                is  ignored.   This  switch  will cause Zoom!  to skip
                unused  blocks.   Note:  this feature will be disabled
                if the disk to be encoded is not a valid AmigaDOS disk
                with  a  properly  initialized  root/boot  block and a
                valid  Bitmap  flag.  Also important:  this switch has
                no  effect if a set of tracks is to be encoded instead
                of the default 0..79.

Verify ........ Each  write  access  to  disk will be verified if this
                switch  is  active.  The actual data verification will
                be  handled  by the blitter, so it won't slow down the
                decoding process too much.

Selftest ...... This  shell  option was added to help you to verify if
                your  Zoom!   program  has  been  infected by a virus.
                Zoom!   will  examine  its internal hunk structure and
                complain  if  a  hunk  is  not in its standard size or
                place.   These  are conditions which can, but need not
                indicate  link  virus infection.  While this technique
                does  not  entirely  prevent  the  creation  of trojan
                horse-versions of Zoom!  or that an extremely `clever'
                virus infects Zoom!, it will probably catch all `dumb'
                link  viruses  which  put their virus code in front of
                the first hunk or behind the last hunk of a program.

======================= Zoom! Workbench usage ========================
======================================================================
If  called  from  Workbench  (or  from  Shell without any arguments) a
window  will  pop  up under the mouse pointer containing the following
gadgets:

Select file ........... Select   the   name   of   the   file   to  be
                        encoded/decoded.   It  will  be  put  into the
                        string gadget to the left of this button.

Select drive .......... Select the the drive to write/read the data to
                        be  decoded/encoded to/from.  This button will
                        cycle  through  all  filing  systems which are
                        exactly  80  tracks  in size.  The name of the
                        filing  system  will  be  put  into the string
                        gadget to the left of this button.

Start data Encoding ... Click  this  button  to  start  data encoding,
                        click it again to stop the process.

Start data Decoding ... Click  this  button  to  start  data decoding,
                        click it again to stop the process.

From track to track ... The starting and ending tracks to encode, note
                        that   this   feature   has   to  be  selected
                        explicitely.

Clear unused data ..... Unused  data  in  standard  file system blocks
                        will  be  set  to  zero  if  this  feature  is
                        enabled.

Clear unused blocks ... Unused  blocks  will be skipped if this switch
                        is  in effect.  Note:  cannot  be  mixed  with
                        `from track to track'.

Verify write .......... Enables  write  verification  while data files
                        are   decoded.  This   switch  has  no  effect
                        during data encoding.

   The  display  on  the right hand side of the Zoom!  window contains
the following elements:

Disk .................. The space left on the destination drive.

Mem ................... System memory currently available.

Size .................. Size  of  the  last  encoded/decoded track(s).
                        Usually  two  values  will  appear  here:  the
                        first one denotes the size of the buffer after
                        pre-compression,  the  second  value indicates
                        the final size after Lh-compression.

File .................. The size of the encoded data file.

Time .................. Time elapsed during data encoding/decoding.

Track ................. Current track counter (read / to go).

Status ................ The action currently executed.

   If  an  output  file does not fit on the destination disk, encoding
wil  be  terminated.   The starting and ending tracks will be adjusted
accordingly to allow the user to continue to encode the disk where the
first encoding run stopped.
   The  `name' of the file to be decoded may be a wildcard expression.
Zoom!  will try to locate and decode all files which match the pattern
(note:  only the Intuition interface supports this feature).
   Multiple  selection is supported as well:  to decode a row of Zoom!
output  files,  hold  down the shift-key, click the icons of files you
wish to decode, then double-click the Zoom!  icon.  Note:  Zoom!  will
use  the  default  options to decode the files, the online options can
only be changed after all files have been processed!

================ The `ZOOMOPTS' environment variable =================
======================================================================
The current settings displayed in the Intuition interface are saved in
a  default  environment  variable  which  is read again when Zoom!  is
called  again.  This variable is set both in Manx/ARP and in Workbench
1.3 format.  The following template is supported:

   File/K,Drive/K,S=Start/K,E=End/K,D=ClearData/S,B=ClearBlocks/S,
                        V=Verify/S,N=NoIcons/S

File .......... The  default  string  to  appear  in  the  `File name'
                gadget.

Drive ......... The string to appear in the `Drive' gadget.

Start ......... The first track to start data encoding with.

End ........... The last track to encode.

ClearData ..... Whether unused block data is to be zeroed or not.

ClearBlocks ... Whether unused blocks are to be skipped or not.

Verify ........ Whether write verification is enabled or not.

NoIcons ....... Set this flag if you don't want Zoom!  to create icons
                for each output file.

                    A sample `ZOOMOPTS' value is:
        `FILE RAM:Blank.zom DRIVE DF0: CLEARDATA CLEARBLOCKS'

   Zoom!   will  prefer  to set/examine the the `ZOOMOPTS' environment
variable  in the AmigaDOS 1.3 standard.  If this is not possible Zoom!
will set/examine the Manx/ARP standard environment variable instead.

============================= ZoomCheck ==============================
======================================================================
Zoom!   comes  with  an  auxilary program:  ZoomCheck.  ZoomCheck will
examine  the  entire structure of file created by Zoom!  and report if
the  checksums  are in the correct places.
   Notes  and  texts are also displayed while checking (add `QUIET' to
the command line to suppress this feature).
   Notes  are  added  to a Zoom!  file with the `NOTE' option (such as
`ZoomCheck  File.zom NOTE Hello!') or with the `NOTEFROM' option (such
as  `ZoomCheck  File.zom  NOTEFROM ENV:MyTag').  Time and date will be
saved with the note (the note itself will be encrypted).
   Zoom and ZoomCheck use 16-bit CRC routines which catch about 99% of
possible  random  changes (I didn't see the need to use 32-bit CRCs to
catch another half percent!).

===================== ZoomCheck Workbench usage ======================
======================================================================
A  standard  file  requester will be opened to let you select the file
you  want  to  be checked.  A different requester will tell you if the
file structure was entirely correct.
   While  the file is examined, notes and the text attached to it will
be displayed.
   Multiple  selection is supported as well:  hold down the shift key,
click  the icons of the files you want to check, then double-click the
ZoomCheck-icon.

======================= ZoomCheck Shell usage ========================
======================================================================
     The following command line template is diplayed if you type
                            `ZoomCheck ?':

            File,N=Note/K,F=NoteFrom/K,Quiet/S,Selftest/S

File .......... The  name  of the file to be tested.  The text and the
                notes  attached  to the file will be displayed  unless
                the `quiet' option is used.

Note .......... A  note  to  attach  to  the archive file.  Notes  are
                saved with their creation date and are encrypted.

                Example: `ZoomCheck Foo Note Bar'

NoteFrom ...... Similar  to the `Note' keyword this argument will make
                ZoomCheck  attach  a  note  to a given file.  The only
                Difference  is  that the note will be read from a file
                (CAREFUL:    the   note   cannot  be  longer  than  79
                characters, longer strings will be truncated!).

                Example: `ZoomCheck Foo NoteFrom ENV:Bar'

Quiet ......... By  default text and notes associated with an  archive
                file   are  displayed  before  the  file  is  actually
                checked.   This  feature  can  be  disabled  with  the
                `quiet' switch.

Selftest ...... This  command  has  the  same effect as in  the  Zoom!
                main program.

========================== Technical notes ===========================
======================================================================
Zoom!  needs a tiny little bit of memory to perform its jobs:

                  Data Encoding ......... 240 KByte
                  Data Decoding ......... 240 KByte

   Make  sure that enough space is available, or Zoom!  will complain.
Note  that  disabling  write verification will save about 10 KBytes of
chip memory.
   The  Lh  data  encoding/decoding  routines are related to LhArc and
PKZip.   Unlike common data compression/decompression routines such as
employed  by  PowerPacker or Imploder, the performance of Lh cannot be
downgraded  by  adjusting  the data sequence search depth.  This means
that Lh will always encode trying to achieve the best results with the
maximum effort.

======================== How fast Zoom! works ========================
======================================================================
I  suppose  you  are shocked by the amount of memory required for data
compression / decompression.  Well, as it turns out I traded speed for
memory.   I  tested  Zoom!  (encoding a disk) against DMS 1.02, LhWarp
1.4 and Warp 1.2a with the following results:

                            Workbench1.3D:

                Tool   | Output file  | Time
                -------+--------------+--------------
                Warp   | 508226 bytes | 11:49 minutes
                LhWarp | 399187 bytes | 16:39 minutes
                DMS    | 389270 bytes | 11:00 minutes
                Zoom!  | 371432 bytes |  6:15 minutes

   There you are:  Zoom!  really IS faster and more efficient than any
currently  available  disk  compression  /  decompression  program.  I
wouldn't  call  Zoom!   `lightning fast' (Jon Forbes has a license for
that ;-), but I am sure that it will show a `few' tools home!

=========================== Known problems ===========================
======================================================================
Some  features  supported  by  CompDisk/DecompDisk are not included in
Zoom!   and  ZoomCheck  yet  and probably never will (which depends on
your support).  Currently known bugs and problems are:

- Sector  labels  are not saved yet.  Very few applications apparently
  use  them (FFS is rumored to do so, but I couldn't find any evidence
  yet).   Supporting  SecLabels would require two write accesses for a
  single track (yet another bug in the pre-2.x trackdisk.device?!?).

============================== Credits ===============================
======================================================================
Credits  go  to  Arp  Programmers  for  Arp  1.3, to Ralf Thanner, who
contributed   the  assembly  language  CRC  routines  and  the  custom
bootblock  check,  to  Erik Løvendahl Sørensen for the large number of
viruses  he  sent  to  Ralf  and  to  K.  Wiesel  who  contributed the
pre-compression code.

================ Author's request and Share-Ware fee =================
======================================================================
Zoom!   and  ZoomCheck  are  released  as Share-Ware.  If you like the
programs and use them frequently, please dig into your pocket and send
a  contribution of at least DM 50,- or 35$ US (DM currently preferred)
to:

                          Olaf Barthel, MXM
                          Brabeckstrasse 35
                          D-3000 Hannover 71

                     Federal Republic of Germany

   This program was made available for you convenience, so if you like
and  use it, don't just think `well, what the h*ck, some guy will send
some  money - I'll better keep my bucks, who says that Olsen will even
answer  my  letter?'.   Without  your support  there  may be no future
revisions of Zoom!
   A  registered  user will receive the next two major program updates
free of charge.
   If  an  error  shows  up,  do not hesitate to contact me as soon as
possible.  My `real world' adress is given above, the following are my
EMail addresses:

                      Z-Net: O.BARTHEL@A-Link-H
              Fido: Olaf Barthel @ 2:240/1 (New adress!)

   The  entire  Zoom!   package  may be noncommercially redistributed,
provided  that the package is always distributed in its complete form.
A  small  copy  fee for media costs is okay but any kind of commercial
distribution is strictly forbidden!
   Comments  and suggestions how to improve this program are generally
appreciated!

============ Revision history (most recent change first) =============
======================================================================
V4.1    There  was  a  small bug in the disk bitmap reader which could
        corrupt single blocks.  This has been fixed (hope so!)

V4.0    Added  the  wrap checksums, the startup link virus check, made
        some   changes  to  requesters  and  user  interface  (nothing
        spectacular,   though).    Recompiled  and  linked  using  new
        amiga.lib. Also created a  new  CRC  tool.  This  is  a  POST-
        DISASTER release.

V3.10   Changed  the  minimum sequence length LhEncode uses to 2 bytes
        which  will  cause  Zoom!   to emit even smaller output files.
        Thanks  to Holger's brilliant LhDecode routine the file format
        is still compatible with the previous  releases.  If  encoding
        was cancelled a  previously  allocated  text  buffer  was  not
        released (this has been fixed).

V3.9    The  previous  release  had problems if ENV:  was not assigned
        (sorry  to  all those who nearly got mad at this - don't blame
        me, blame Manx!).
           The disk drives to support this feature will eject the disk
        after encoding/decoding (such as the  Applied  Engineering  HD
        disk drive).
           A  text file to be encoded along with a disk is read before
        the actual disk encoding takes place.
           If  started  from Workbench Zoom saves icon images with the
        files it creates.
           If  a  disk is accidentally removed while encoding/decoding
        Zoom!   will  no longer refuse to continue work after the disk
        has been reinserted.
           The   older   release  would  clear  the  contents  of  the
        `ZOOMOPTS' variable after running Zoom!  from Shell.
           Zoom!   and ZoomCheck have been recompiled with our (Oliver
        Paesler's  and  my)  new  SAS/C compiler (sorry Manx, I really
        could't  take  it  any  more!).   Some  real  voodoo magic was
        involved in creating a truly reentrant Arp wrapper package for
        the  darn  startup  code,  but,  alas I am not a perfect SAS/C
        priest  yet:   starting  the  Zoom!   Intuition interface from
        Shell  will  cause  the program to modify its own data hunk (I
        have  checked  any  location  but  couldn't  discover where it
        actually  happens).  This nuisance does not occur if Zoom!  is
        started from Shell using the Shell interface only.  Both Zoom!
        and ZoomCheck support multiple icon selection.
           ZoomCheck  will  read  notes  from  a file.  I reworked the
        compression code a bit.
           The documentation was rearranged and partly rewritten  (the
        original  file  was  as  close  to  a  long-run-midnight-near-
        delirium-hack as it could possibly be).
           I   forgot   to  describe  the  format  of  the  `ZOOMOPTS'
        environment  variable.   The  power LED will no longer flicker
        during    encoding/decoding    (another   `benefit'   of   the
        Manx<->SAS/C conversion).
           My  old  UUCP/SubNet addresses have ceased to exist, I will
        try  to supply an alternative gateway path if anybody needs it
        (use Fido or standard snail instead).
        
V3.7    This  is  a  kludge  solution:  I  use  rstart.o to create the
        resident  part  of  Zoom!   and ZoomCheck:  both programs will
        only  be  reentrant if used in conjunction with the Arp shell.
        This  release  includes  a data precompressor which provides a
        welcome  speedup  for  large  rows  of  equal bytes.  The data
        format is no longer compatible with previous Zoom!  releases.

V2.6    Both  Zoom and ZoomCheck have become reentrant (don't say that
        you didn't think it was possible with Aztec `C' 5.0!).

V2.3    Added  new Shell  options, fixed a couple of bugs and added an
        option  to protect files by passwords.  The settings displayed
        in  the Intuition interface are saved in environment variables
        (both Manx standard and AmigaDOS 1.3 environment variables are
        supported).   Restarting  Zoom  will  cause  it to restore the
        previously  saved  settings.   Note  that  only  the Intuition
        interface will read these defaults, the Shell interface always
        uses the default settings.  The disk drive motor is turned off
        while  data  is encoded/decoded/written (TrackSalve used to do
        this job under Kick1.3, but wouldn't do under Kick2.x!).

V2.2    Added  a  couple  of  new  options  to  Zoom!, such as a small
        ZoomCheck.    Texts   and   notes  are  displayed  after/while
        decompression  and  also  appear  in  the  Shell  window.  The
        ZoomNote functions have moved into ZoomCheck.

V2.1    Added  back  the  dreaded  command line interface.  Also added
        wildcard support for decompression (intuition interface only).
        There's a new support file:  ZoomNote.

V2.0    Better   FFS  support,  Zoom!   has  become  faster  and  more
        efficient.   This  release is incompatible with previous Zoom!
        releases.

V1.1    New  user  interface!   Thanks to Holger, Ralf & Michael a few
        bugs  were traced (and fixed?). Added write verification and a
        few more gimmicks.  The docs were partly rewritten, as was the
        program.

V1.0    First semi-public release.

                                  *

             Do only its possibilities make it an Amiga?

                        WHERE IS THE MAGIC ???