
                        Haywire Software (HSw)

                              presents:
                    __________  _____ __________
                    \____    / /  _  \\______   \ 
                      /     / /  /_\  \|     ___/
                     /     /_/    |    |    |
                    /_______ \____|__  /____|
                            \/       \/

   __________       .__                                ________
   \______   \ ____ |  |   ____ _____    ______ ____   \_____  \
    |       _// __ \|  | _/ __ \\__  \  /  ___// __ \   /  ____/
    |    |   \  ___/|  |_\  ___/ / __ \_\___ \\  ___/  /       \
    |____|_  /\___  >____/\___  >____  /____  >\___  > \_______ \
           \/     \/          \/     \/     \/     \/          \/



                     (C)Copyright 1994-1996  HiPE
								 
      
                              Main coder:

                             Andr Jonsson

                 eldajn@student.tt.luth.se (preferred)
                          haywire@ludd.luth.se
							

                           Additional coding:

                    Andreas Wiklund & Jonas Umander
								   

						 





                       Contents of this manual:

  
                           1. Disclaimer
                           2. Introduction
                           3. Requirements
                           4. Installation
                           5. Features
                           6. Syntax & usage
                           7. Bugs & reports
                           8. Various
                           9. Development
                          10. Authors
                          11. Background
                          12. Future ideas
                          13. History









1.  DISCLAIMER (disk-lamer :-)
	
	USE THIS PROGRAM AT YOUR OWN RISK!
    THE AUTHOR(S) DO NOT TAKE ANY RESPONSABILITY FOR ANY LOSS, 
    OR DAMAGE, OF NEITHER SOFTWARE NOR HARDWARE, FROM DIRECT OR INDIRECT
	USAGE OF THIS PROGRAM.


2.  INTRODUCTION

    Zap is the answer to your dreams; it's the ultimate file
    and directory removal utility! (strange dreams, ehh?!)
    Zap's strong side is the multiple of switches available, very useful
    in scripts (BAT) and such.

    From 2.51, it even features a self-virus detecting mechanism! 
    In a primitive manner though, but it works for most viruses 
    that link into the executable.

    If you use this program, please e-mail me, and tell me your 
    thoughts about it. I desperately need some feedback!


3.  REQUIREMENTS

    A computer.

    More specific: an IBM "compatible" PC.
	
    Even more specific:

        CPU: 386 or higher
        MEM: about 40k
        DOS: v6.x        (probably works on older)
        Free disk space: ~20k (see MEM)
	
    (to put it to some good use a HD is recommended)

    NOTE: If any of you desperatly requires an 8086 version, e-mail me.
          And could you please tell me if the programs works on any older
          versions of DOS (pre 6.x that is).


4.  INSTALLATION

    Copy the executable file 'zap.exe' to any directory, preferrably
    to one that you have search-path to (it's more convienient that way).
    If you don't like the name of the program, you may rename it to 
    something else, the program will adapt itself (that is all textual
    presentation will reflect show the new name of the program).


5.  FEATURES

    * Deleting files or directories does not differ

    * REAL wildcards, like UNIX (but only * and ?)

    * Exclusion

    * Multi template

    * Recursive deletion

    * Search mode, no deleting

    * Overwrite

    * Report gain on volumes after delete session

    * "Easy" to use configuration screen


6.  SYNTAX AND USAGE

    Zap has presently a syntax like this:
	
       ZAP <switches and/or filetemplates>

    The switches can be one or more of the following:
    (listed in alphabetical order)
	  
          /0 : Temporarily clear all switches (turns them off)
          /* : Temporarily set/toggle all 
          /a : Attribute: delete files with specified attributes
          /c : Invoke configuration screen
          /g : Gained space: show how many bytes You gained by deleting
          /m : Multiple delete, repeat operation several times.
          /o : Overwrite file before deleteing
          /p : Ask about every file, before deleting it (overrides '/y')
          /q : Quiet-mode: don't produce any output to stdout (or screen)
          /r : Recursive file delete
          /s : Search mode, print names only.
          /w : Wipeout, no query when deleting all ('*.*')
          /y : Assume yes: when propted for delete of directory
          /? : Help page


    NOTE: /d,f : Delete only Files or Directories (Now obsolete, see '/a')
		  
    Additional argument features:

         T!X : Exlude: delete files matching T, but exclude matches
               for template X
           ; : Logical OR between single template-entries.


    The <files> parameter is simply a list of file-templates, such as
    '*.exe',using standard MS-DOS wildcards (see the '!' function).

    The various switches and file-templates can appear anywhere on the
    commandline.
    The switches can be separated: "/q /g", or grouped: "/qg".

    Most of these switches may be pre-set in the configuration screen
    (see '/c' switch).
  
  
  * The '!' function - Exclude files/dirs. (new v2.0, rev every version)

      ZAP !*.exe

    This will delete all files BUT the ones ending with '.EXE' (this includes
    directories too). If you want to NOT delete many diffrent files, 
    then read on: As from version 2.40 this is now possible with 
    the new ';' (read: OR), feature. Have a look at this:

      ZAP !*.com;*.exe

    Everything BUT the .com and .exe files will be deleted.
    As of v2.60, some more & complex exclude and matching is possible:

      ZAP *.bak;*.~de!*1.*;*2.*

    This will delete all files(or dirs) matching '*.bak' or
    '*.~de' but will exclude both entries matching '*1.*' and '*2.*'.
    Only one directory-scan will be done per argument. (in the above example,
    only one time in total)

    The ';' separator character can ofcourse be used on both sides of the
    '!' character.

    A more complex usage could look something like this:

      ZAP d:\win95\*.ini;*.exe!user.exe

    This results in deletion of all ini & exe files but not user.exe.

    IMPORTANT: The path, d:\win95\, is handled first, then each file/dir-
    template is interpreted. This means that all templates originate from
    the same path (all templates in one argument).


  * The '/0' switch - Temporarely clear all switches. (new v2.50)

    This isn't a complicated one. It simply clear all switches to default, 
    wich is off, but it's only temporarely (i.e only really useable on the
    configuration screen to clear all switches).


  * The '/*' switch - Temporarely set all switches. (new v2.65)

    This is about the same as the '/0' switch, with a small differance.
    If all switches is set, all are cleared, else they are all set.
    This is most useful in the configuration.


  * The '/?' switch - Help page (new v0.1, rev all versions)

    This will summon the help-page. Due to the ammount of switches, the
    page can't be viewed on a standard 80x25 page all at once, but still
    the most important stuff, the switches, are visible. But hey, why use
    80x25 when 80x50 is soooo much nicer (...or maybe 80x60 or 132x60 ?).
       

  * The '/a' switch - Attribute specification. (before v1.24, BIG rev v2.65)

    As of 2.65, Zap has now a very advanced attribute matching system.
    All of MS-DOS' attributes can be specified: File, Directory, Archive,
    System, Hidden, Read-only, Netware(I think) and one called Unknown.
    This can be specified using the following scheme:

      ZAP /afhs *.*

    This will delete all files(f) with the hidden(h) and system(s)
    bits set. Any omitted bits will not be matched with the file-attribute.
    Techies: You may say that the attribute-bits are AND:ed together and
    if the result is the same as the found file/dir's attribute the result
    is true. To put it in another way: it works just like in the DIR
    command in MS-DOS, with some added features ofcourse.

    Negation(-) is possible. And with the aid of '*' (all/none) some very
    complex attribute specification can be achieved:

      ZAP /a*-r *.*

    This will delete everything(*) but read-only(r) ones. If you want to
    negate more than one, the negation(-) must be put in front of them also:

      ZAP /a*-r-h-d *.*

    All files with read-only(r) or hidden(h) bits and any directories(D)
    will NOT be deleted, everything will.

    The attributes you set on the configuration-screen, is somewhat a
    diffrent story: these bits are merely _default_ attributes.
    This means that if you don't use the '/a' switch the file attributes will
    be compared to these default-bits. Example: say we have only the Archive
    bit set in the default field. Now when we try this:

      ZAP /r *.tmp

    All files matching *.tmp with the Archive set(or cleared) will be deleted
    (recursivly), files with any more/other bits will not be deleted.
    Note that the File bit can not be altered on the config-screen, so if
    you want to disable file matching, you have to do it by hand ('/a-f').
    

    If neither of F or D is specified it will fall back to matching
    the default files and directories (FD).

    The attribute specification may be ended with a dot ('.'), if you want
    to have other switches after the same '/'.

    Note: The switches '/f' and '/d' are with this improvement now obsolete,
          but they still work though. The same result is achieved by
          specifying '/ad' or '/af', or even '/adf' to match both.

  * The '/b' switch - Report gained drivespace. (new v1.45)

    This is now(from v2.65) obsolete, see switch '/g'.


  * The '/c' switch - Configuration screen. (new v2.50, rev v2.65)

    As from v2.65, this part of the program has been greatly improved,
    and it's easier to use (I hope). It's menu-driven with help-text
    at the bottom of the screen and such. 

    The configuration is a little complex to describe in whole, but I
    think you'll manage. Just read the on-screen instructions.

    All switches, except '/c', '/0' and '/*' (see above), can be preset.
    Also the exclude char and the separation char, can be changed (normally
    you wouldn't need to change these).

    The keys '0' and '*' works in the switch and attribute settings
    (see the '/0' and switch).

    The config is saved in the executable, so no extra files will mess up
    things for you (and/or take up space). Therefore, the ZAPCMD env-
    variable is now obsolete (you can trash it).

    Due to that the config data is in a specific position in the executable,
    this may prevent certain viruses from spreading, i.e Zap writes a
    warning message when the config can't be found in the normal position,
    informing you about possible virus contamination (neat eh?).

    Also, any flags following the 'c' is ignored.

    Note: For the same reason mentioned above, the executable should not be
          tampered with, i.e packed or otherwise altered (It's infact already
          packed with wwpack v3.04a (shareware version), to prevent that kind 
          of things). If you do alter the executable anyway(why!?), the 
          virus detection can be overridden by invoking the configuration-
          screen ('/c'), and then save the config (ENTER).
          (Ofcourse, device-packers like Stacker and DoubleSpace will work)


  * The '/g' switch - Report gained drivespace. (new v1.45, rev v2.65)

    NOTE: Up to version 2.65 this switch was called '/b', it has now been
          renamed to '/g', the function in exactly the same. However '/b'
          still works.

      ZAP c:\. /a.qg
  
    This is not a wise thing to do! (but you can try it if you want to :-)
    This will infact wipe your harddisk (C:) clean, from the root and up,
    all system and hidden files, without asking a single question!
    On the bright side though, you'll be told just how much you _had_ on 
    your harddisk :-). (The directory you're presently standing in, can
    ofcourse not be deleted)

  * The '/m' switch - Multiple delete. (new v2.61)

    It's sometimes useful to do a delete procedure more than one time
    (i.e when you're cleaning floppies). So the idea for the '/m' switch,
    came to form (thanx for the idea Tobias Bodn). All it does, is 
    question the user after normal delete procedure, if (s)he want's to do 
    the same thing over again. A simple tap on 'y' (or space) will do it 
    again, while 'Q' will quit.


  * The '/o' switch - Overwrite files. (new v2.44a, rev v2.65b)

    Have you ever wanted a file to be permanently deleted from the disk
    (or at least VERY difficult to recover) ? If not then skip ths part.
    If you have, then read on.

    This switch overwrites the whole file with random data picked from
    memory, then it truncates it to zero(0) bytes, and then, as a bonus,
    the file will be renamed to a special name (the same for alla files),
    and finally it will be deleted.
    This prevents even the filename to be found (pretty nasty isn't it?).
	
    When deleting whole directories (without the recursive '/r' option),
    the files in that directory will not be affected by this switch.
    When using recursive mode '/r' files in possible subdirectories will
    be affected by this flag too.


  * The '/q' switch - Quiet mode. (before 1.24)

    This is a simple one, it simply suppresses any output to the screen.


  * The '/r' switch - Recursive file-delete. (new v2.47a)

    The recursive algorithm in Zap works a little diffrent from ordinary
    deleter programs. It deletes only files, the directories themselves
    will remain untouched.

      ZAP *.bak /r

    Every .exe file, throughout the tree(from where you're standing), 
    will be deleted recursively.
    Special attributed dirs does not get examined further.
    When deleting many types of files recursively, a useful feature is
    the ';' separator. Examples:

      ZAP /r *.bak;*.tmp;*.~de
	or
      ZAP /r *.bak *.tmp *.~de

    The first choice is a lot faster, because Zap only scans the 
    paths ONCE. The second example causes it to scan once per argument!
    (in this case, three scans will be made).


  * The '/s' switch - Search mode. (new v2.48, rev v2.61)

    This is a simple implementation of a file-searcher. Combined with
    the '/r' switch, all files matching any template can be searched 
    for, recursively through the directory tree. Found entries will be
    reported to the screen. NOTHING will be deleted (see disclaimer).


  * The '/w' switch - Disable warning when deleting '*.*'. (new v2.13, rev 2.50)

    When trying to delete all files in a directory (i.e c:\*.*), Zap warns 
    you about this fact, by setting the '/w' switch the query gets disabled.
    If you answer Yes on the query Zap will NOT ask anything further, 
    and subsequently, delete everything (if the '/a' switch is not set, 
    only the normal files & dirs will be deleted). If the '/w' switch is 
    not set all the normal queries will appear. By also setting the 
    switch '/y', it will not warn about anything
    (I assume you know what you're doing... :-).


  * The '/y' switch - Assume yes on all queries. (before v1.24)
	
    Passing the switch '/y', tells Zap not to ask about anything, just assumes
    Yes on all queries (infact the question isn't displayed at all). 
    This switch overrides the '/p' switch.


  * Directory delete and stuff.

    When deleting a file, for example: 'ZAP shit.exe', Zap will delete it, 
    (WOW!!) without questions. Multiple files, maybe using wildcards, will
    not ask anything either. The '/p' switch will cause Zap to ask in both
    of these cases
    When deleting mulitple files and such, any files with attributes
    that do not match the '/a' switch will not be deleted.

    When trying to delete a directory (empty or non-empty), Zap
    will ask the follow question:

      'Delete directory "SPOCK" [Yes=<space>/No/All] ?'

    Pressing <space> or 'y' will delete the whole directory, disregarding
    of it's content (subdirectorys, hidden- and/or systemfiles).
    Pressing 'a' will assume Yes for all possible further questions.
    Pressing ANY other key will NOT delete the directory (like RETURN for
    example).
  

 ** A T T E N T I O N ! ! **

    Due to self-made (first by Jonas Umander, and now Andreas Wiklund)
    filename-matcher, the question mark '?' wildcard, means EXACTLY
    one (1) character. In MS-DOS (like dir and such) it _can_ mean
    nothing if it is at the end of the name (ehh.. is this a strange
    behaviour or what?!?).
	
    Also we made it to work like it's supposed to: '*a.*' means exactly
    what it says. MS-DOS translates the '*' to '????????' or '???',
    depending on wether it's before or after the dot, and causing the
    'a' to be letter number 9 (outside the namelimit), and thus ignored.

    To pu it short: Zap does as it's told (See DISCLAIMER).
    Altough this major change in behaviour, the dot ('.') has the same     
    significance as in MS-DOS: the '*' or '?' will not match the dot.


7.  BUGS

    No bugs known at this time.


    BUGREPORTS

    Any reports of bugs that you may find, is greatly appreciated.
    Send it to eldajn@student.tt.luth.se.
    Please state the nature of the fault, when it did appear,
    program version, and any other information you may think help me
    finding the bug.
    Remember, the better information you give me, the easier it will
    be for me to find, and hopefully fix it.


8.  VARIOUS

    The followinf speed-test was made with version 1.33:
    Several tests prove that Zap is atleast 15% faster than deltree 
    (diskspeed not included). And that's with the '/q' switch unset! So some 
    text is also output to stdout when deleted trees. (performance with 
    '/q' switch set has yet to be seen).
	
    Version 1.48 has proved to be a wee bit slower than it's predecessors.
	
    The all-new and very optimized delete routiunes of Zap Release 2 has 
    been successfully tested on a Pentium66, with SCSI-II HD, without 
    smartdrive, and it outperformed deltree by approximately a factor of 2!

    Though, in a special case: 'del *.*' the 'del' command is much faster.
    It must some trick I haven't thought of yet...


9.  DEVELOPMENT

    Program   : C-source    : approx 48 kbytes (in 2100 rows).
                Exe-file    : approx 64 kbytes.
                Compile time: approx 8 secs (on a P100)

    Software  : Borland C/C++ 3.1 for DOS

    Hardware  : AST Power Premium 4/50d
                AST Premmia GX P/100

    Documentation: Created with EDIT 1.0 & 2.0.026 and GNU Emacs
                   approx 1000 rows


10. AUTHORS

    This program was written by Andr Jonsson. I'm from Skellefte, Sweden.
    Please visit my homepage: http://www.ludd.luth.se/~haywire. All new
    revisions of my programs will be downloadable from there (after following
    some links).

    Programming started in early autumn of 1994, based upon an idea by
    Andreas Wiklund, and will probably never be finished, ever (as usual).


11. SPECIAL THANKS

    Thanks goes to the following people: 

      - Torbjrn Brandvold (C/C++ teacher/mentor)
      - Andreas Wiklund (inital idea, initial/additional coding, -testing),
      - Jonas Umander (-testing, additional coding),
      - Tobias Bodn (-testing )
      - rjan Lundberg (-testing)
        ...and the rest of electronic/computer-class of '94
        (testing in real-life)
      - Authors of Figlet, on Amiga (for the ASCII-art at the top).
 

12. FUTURE IDEAS

    This are just results of my personal fantasies, these features
    may, or may not be implemented. If you would like one (or anything
    else for that matter) implemented please let me know (see top).

    Use interrupt for deleteing all files in a directory, same as used in
    del and deltree.
   

    ()  : Implement paranthesis to make template specification better.
          (and maybe AND OR and such)

    '/S:N(+/-)'
        : Delete files larger(+) or smaller(-) than N bytes.
  
    '/D:YY.MM.DD(+/-)' 
        : Delete entries older(+) or newer(-) than date YY.MM.DD.
          The date separator '.' should be configureble.
 
    '/Dy:N(+/-)'
    '/Dm:N(+/-)'
    '/Dd:N(+/-)'
        : Delete entries older(+) or newer(-) than N years(y),
          N months(m), or N days(d).
   
    '/?<switch>'
        : Show detailed help on any switch. Maybe external help-file.
    
    '/?/'
        : Only prints enabled switches.

    '@' : Read arguments from a file instead of command line. 
            (example 'ZAP @delwin95.now'). Useful in scripts.

    '/c<switches-to-configure>'
        : Improve configuration switch, to able configuration "on-the-fly",
          i.e "zap /cgw0", which sets the '/g'-switch and clears
          the '/w'-switch.


    32bit version, maybe, to better "co-operate" with WinNT & 95.
    And maybe make it handle the long-file-names-joke in Win95.



13. PROGRAM HISTORY

     Here follows the, oh-so long, history of the project Zap of HSd.

	 
        History prefix explanations:

           *NEW* = New feature or a big change in the program.
           *MIN* = A not-so-big (minor) change.
           *BUG* = 'Just' a bug-fix.
           *TXT* = Text-related change, of program or documentation.


     Newest revision first.

    v2.66 :
         *BUG* Attribute switches regarding filetype (f,d,l), always
               deleted directories. Fixed.

         *BUG* All errormessages are printed to stderr instead of stdout.
               Excuse: just never came to think about it.

         *MIN* Remade the overwrite function to really overwrite the file.
               Hinted by <you know who you are>.

         *TXT* Added a 'features' label for the documetation (this file). 


    v2.65 :
         *BUG* A bug in v2.61 has been brought to my attention, when trying
               switches /BWAFR, zap didn't delete anything, but since all
               that code has been replaced in v2.65 this should be gone now.

         *BUG* Well maybe this isn't a bug, but I discovered a new,
               undocumented file-attribute '0x80', I came to the
               conclusion that it could be a NetWare specific attribute,
               as it only appeared on the Novell network-volumes.
               This new attribute is named 'N', see above.
               I added in the same process the remaining attribute-
               bit left in the attribute-byte. I named it 'Unknown' ('U').

         *BUG* The attribute setup function, had a little bug: File type
               always matched everything (File Dir Label). Fixed.

         *NEW* An all new super-improved menu-driven configuration-screen
               is born! Hopefully it's much easier to use. Help text at the
               bottom of the screen, and such useful stuff.
               Version bumped to 2.0.

         *MIN* Rewrote the whole delete-report section, was tired
               of the psycho structure it had, now smaller, and better.

         *MIN* Renamed switch '/b' to '/g' as in Gained space, instead
               of gained Bytes as before. ('/b' still works though)

         *MIN* If nothing was deleted it will say 'Nothin deleted',
               before it could say 'No such file or directory'.
               Some other cosmetic changes also.

         *TXT* All references to 'flag' is hereby replaced by the word
               'switch', which is a more correct name.

         *TXT* Adjusted some errormessages.


    v2.64 :
         *BUG* A long timer-bug caused Zap to delete read-only files
               when not told to (thanx for reminding me Koenraad!).
               Now fixed.

         *BUG* If a file/or dir had special attributes and it could
               not be deleted it is now restored to it's original
               state (thought I fixed this long time ago?!?).
               Now really fixed.

         *NEW* Implemented better attribute specification, like in
               MS-DOS dir's switch '/A' as described above.

         *MIN* Overworked the configuration screen due to the new
               attribute stuff. Version bumped to 1.0.

         *MIN* Overworked the delete-report section to make reports
               more sane. (sometimes it could be a little strange)

         *MIN* Now shows drive label(if any) in the bytegain report.

         *MIN* Manual file(this text) renamed to zap.txt (was zap.doc).
               (hinted by Koenraad Rutgers)

         *TXT* Changed most of the answer remarks of the questions.


    v2.62 :
         *BUG* A rather embarassing minor bug, the search-mode underline
               was printed when NOT in search-mode, hmm... Fixed.

         *NEW* All new, super improved, pattern-matcher implemented!
               It's atleast twice as fast, and just a quarter in size.
               It works just the same. Written by Andreas Wiklund.

         *TXT* New cool busy-indicator...


    v2.61 :
         *BUG* There was a little bug in the file-template-parser,
               no harm could be done though (I think...). Fixed.
			   
         *NEW* Added switch '/m' as described above.

         *MIN* Tidied up the behaviour of the '/s' switch. No confusing
               '## files deleted', changed to '## files found'.

         *TXT* Implemented new, cool, "busy"-indicator.

         *TXT* Added version of implementation on each switch in the docs.

		 
    v2.60 :
         *BUG* Mysterious bug in the matcher, rarely popped up in v2.53
               (don't really know), and it puzzeled me for quite some time,
               but it should now be fixed.

         *BUG* Little memory-bug in the user-query-routine. Fixed.

         *NEW* Improved template-matching. 
               See above under "The '!' function".

         *NEW* Added switch '/m' as described above.
		 
         *MIN* Included more sanity-checks and error-messages.
               Zap now refuses to run when unpacked ;-). 
               (even '/c' is rejected)

         *TXT* Corrected the usual typos in the manual and the program.

         *MIN* Configuration improved. Separation character can now
               be altered. Some cosmetic changes too.

         NOTE: Filenames containing the configured Exclude- or Separator
               character, can not be deleted. This can however be worked 
               around by changing the excludechar. I know it's a bit crude, 
               but it's an easy solution :-). 

	
    v2.53 :
         *BUG* A little nasty memory-bug. 
               Caused zap to behave very strange sometimes. Fixed.
		 
         *BUG* An argument bug.
               You could try and delete "a.b.c", and pray that your files
               weren't deleted all at once... Fixed.

         *NEW* First public release! Uploaded to SimTel.

         *MIN* The automatic virus detection, can now be overridden,
			   by spawning the configuration screen with '/c'.

         *MIN* The simulation switch '/s' now disables the 'delete all'
               question.

         *MIN* Changed the random rename function when overwriting.
               Now only renames all files to the same specific name.

         *MIN* Now clearly indicates if simulation mode is selected ('/s').

         *MIN* Managed to shrink executable to less than 14000 bytes.

         *TXT* Corrected the usual typos in the manual (this text).

         *TXT* Re-fitted help-page to 80x25 screen _again_ :)


    v2.51 :    
         *NEW* Automatic "virus detection". See above.
			   
         *MIN* The configuration screen does not accept alpha
               or digit chars for the exclude-character.


    v2.50 :
         *NEW* Configuration screen, invoked by switch '/c'.
               ZAPCMD no longer used or needed.
               See above for more info.

         *NEW* Added switch '/0', as described above.

         *NEW* switch '/w: Warning' has changed meaning to
               'Wipeout', as described above. 
		 
         *NEW* Renamed switch '/n' to '/s'.

         *TXT* Help page reworked, now fits on a 80x25 page again.


    v2.48 :
         *NEW* Added switch '/n', as described above.

         *TXT* Mispel in the help-page (argh).


    v2.47a:
         *BUG* The help-page would refuse to get showed when you had an 
               error in ZAPCMD env-string. Fixed.
		
         *NEW* Added switch '/r', as described above.

         *MIN* The '/o' switch tried to rename files to something invalid
               sometimes.

         *MIN* Dynamic template allocation implemented.
               Length and amount of templates now only limited to
               free memory (conventional of course).
							  
         *TXT* 'Check gained drive space' in the help-page, changed to
               'Show gained drive space'.


    v2.45 :
         *BUG* If you wrote a quite long template, Zap could do strange
               things, such as reporting '38743 files deleted'. Fixed.

         *MIN* The '/o' switch has been reworked to operate at lightning-
               speed, instead of Windows-speed, same management though.

         *TXT* The '/b' switch wrote the drive, that we gained bytes on,
               after a newline ('\n'). Was a bit difficult to read if there 
               was many lines, altered.


    v2.44a:
         *BUG* Tried to delete 'current dir' ('.'), wich can't be done,
               anyhow, so no damage could be done. Fixed.
               This bug derived from changes in v2.43 (not documented).

         *NEW* Added switch '/o', as described above.
	
         *MIN* Used to abort whole operation when an invalid template
               (i.e "c:") was found. Now only skips such entries.

         *MIN* Template only consisting of: '!' would result in attempting 
               to delete everything (which is logical: 
               NOT(nothing) => everything. Zap now skips such entries.


    v2.42b:
         *BUG* Zap could not be breaked at the query-prompt. Fixed.

         *MIN* Increased number of file-templates (16 => 32), and the
               size of them (32 => 64).

         *MIN* Some other code modifications also made, not noticable by
               the user, however.
		 
         *TXT* New cool comments, on query-answers.

         NOTE: Zap has by now gone through heavy testing for a long period
               of time, and NO bugs have been found.
               Maybe the public is ready for this product?
						  

    v2.40:
         *NEW* Templates can be combined with ';' between them =>
               '*.exe;*.com' counts as ONE template combined with an logic
               OR, very useful when using the '!' feature.
               This will also make Zap to scan the path only once!


    v2.36 :
         *MIN* Zap recompiled to .COM => exe-size reduced to 16k!


    v2.35 :
         *BUG* If the bytegain switch was on and you deleted nothing (or
               something on another drive), it would produce some very 
               strange ouput. Fixed.

         *BUG* If you deleted a file (or several), without wildcars, 
               the bytegain info report wasn't outputted. Fixed.

         *MIN* The bytegain switch now outputs the number of gained bytes
               for every drive you have deleted something on. Used to
               check only the current drive.


    v2.34 :
         *MIN* Only change attribut when needed. Used to change it always.


    v2.33f:
         *BUG* Path-Template separator produced incorrect result: nothing
               deleted. Fixed.

         *TXT* Help-page rework a bit, shows 'none' at "Enabled switches:",
               if none is enabled :-)


   v2.33d :
         *MIN* Zap now uses directvideo output. Maybe a little nasty,
               but it's _considerably_ faster! Compare with "dir /?".
               This does however disables the pipe function in MS-DOS.
               (use switch '/q' instead)

         *MIN* Zap can be breaked now. If you regret your zapping, 
               press CTRL-C as quickly as you can.

         *MIN* The env-variable-name now changes with the program 
               name.
		 
         *MIN* The help-page mixed up the switches '/d' and '/f', when
               showing them on the settings-line.
                                                  

    v2.3d : 
         *BUG* The exclude prefix ('!'), didn't work properly. Fixed.

         *MIN* Delete report is only shown when wildcards have been
               used.


     v2.3 :
         *MIN* Help page shows settings in ZAPCMD and options set
               before '/?' on the cmd-line.

         *MIN* Previously optimized code in v2.28, further optimized.


    v2.28 :
         *MIN* Optimized deleting of whole directories.


    v2.24 :
         *MIN* Results of the delete-operation is now showed, only
               when wildcards have been used.

         *TXT* Help-page & manual tidied up a bit.


    v2.22 : 
         *MIN* Rearranged code, a whole function(in C) could be 
               removed => smaller & faster.

         *TXT* Moved date in help-page to far right.
	 

    v2.21 : 
         *MIN* Removed FPU emulation. (why would a delete-command need
               to do float-calculations?? beats me...)
               Because of this, the executable size shrinked to 20k!

         *MIN* The bytegain info now shows: '203 297 bytes', 
               instead of: '203297 bytes' => easier to read.
			   

    v2.20 :
         *MIN* Project changed to freeware.


    v2.19 : 
         *BUG* Caused infinit loops occasionally. Fixed.

         *MIN* Argument conversion: ('.*' => '*.*'), removed,
               Wasn't very useful anyhow.


    v2.17 : 
         *NEW* Changed switch character to the one specified in
               int 0x21. Therefore the switch '--' is now obsolete,
               and removed.


    v2.13 :
         *NEW* Added '/w' switch as described above.

         *MIN* Removed the 'q' answer. Didn't do any good.


    v2.09 :
         *BUG* ** WARNING ** Zap could wipe your harddisk clean, whether 
               you want it or not. DO NOT USE any Zap older than v2.09 !!
               (before v2.0 is ok though). Now fixed (phew).

         *NEW* Added warning when deleting '*.*', as described above.


    v2.06 :
         *NEW* Added switches '/f' and '/d', as described above.

         *NEW* When asking about deleting anything (file or dir), possible
               answer 'q'.

         *TXT* Help-page rearranged a bit (example explanation removed).

         *MIN* Using FPU emulation, FPU no longer required.
               Executable size increased because of this.
		 
         NOTE: Disregard the comment for v2.0! ;-]


     v2.0 :
         *NEW* Fully working version of ZAP 2.0!


     v2.0 BETA rev. 75 :
         *BUG* switch reader caused infinite loop sometimes. Fixed.
		 
         *NEW* Environment-variable implemented, AND renamed to
               ZAPCMD from ZAPOPT (new users can ignore that fact).

         *TXT* Help-page rearranged to fit a 80x25 screen.

         *MIN* The program increased in size, because of FPU usage.


     v2.0 BETA rev. 67 :
         *BUG* Filename matcher did not work properly. Fixed.
		 
         *BUG* The switch '/p' didn't work at all. Fixed.

         *NEW* switch '/!x' added as described above.


     v2.0 BETA rev. 57 :
         *BUG* Various bugs removed, hopefully they're all gone now.

         *NEW* Zap's matching routine now works exactly like dir's
               (or alikes), except for handling of '?' sign. See above.

         *MIN* Options for switch '/a' removed, they never did work
               like I wanted them to.

         *TXT* Added another coder name to the title (wow).
	 

     v2.0 BETA rev. 33 :
         *NEW* Added options for the switch '/a', as described above.

         *NEW* Added prefix/switch '!', as described above.


     v2.0 BETA rev. 17 :
         *BUG* When entering 'empty' files such as: 'C:' Zap would
               not interpret it as wrong. Fixed.

         *NEW* A total rewrite.

         *NEW* Deleting whole directories has been speed-optimized
               substancially.

         *NEW* Argument handling has also been reworked, plus
               various other improvements as well (described above).

         *NEW* switch '--' added as described above.

         *MIN* The switch '/b' has changed in function. Now, Zap only
               checks free space on the current drive before, and
               after the operation, thus improved speed.

         *MIN* Executable size shrinked by 4k (to 16k)!

         *TXT* The help-page now shows the _real_ program name,
               see above under INSTALLATION.

         NOTE: Handling of the environment variable, ZAPOPT, is not 
               implemented yet (will be in full version of 2.0).





        ********* SOURCE CODE MYSTERIOUSLY DISAPPEARD !! *********
        *********     HAD TO RESTART FROM SCRATCH !!     *********
                     (mindnote: always take backups!)




    v1.48 :
         *BUG* A very annoying bug has been removed: hidden directories,
               needed a two pass run to be deleted.

         *NEW* switch '/p' added, as described above. 
			

    v1.45 : 
         *BUG* The option-parser was not very functional, don't know 
               how this got through our hard bug testing (NOT!). 

         *NEW* switch '/b' added, as described above.


    v1.40 : 
         *NEW* Added env-variable handling, so options can be set
               with the variable 'ZAPOPT' in DOS.

         *MIN* switches can now also have the prefix '/', like standard
               MS-DOS programs.


    v1.33 : 
         *MIN* switches can now be together after one '/'. If a switch 
               is written several times on the commandline it will 
			   toggle (on<=>off).

         *TXT* Directory-delete-prompt-answers changed.


    v1.29b:
         *BUG* Just a small bug. Not a dangerous(or big) one.
			   Too small to mention here.

    v1.29 : 
         *MIN* A slight rearrangement in function. No noticable 
               change to the user however.


    v1.28 : 
         *MIN* Added 'always' option when prompted for deletion of 
               a directory.
		 
         *MIN* Zap now only asks when deleting directories, 
               not files.


    v1.24 : 
         *NEW* First fully working version (i think).


      Older than v1.24 is 'ancient history' (and very hard to come by).



-----------------------------------------------------------------------------


  Laws of Computer Programming:

    (1) Any given program, when running, is obsolete.
    (2) Any given program costs more and takes longer.
    (3) If a program is useful, it will have to be changed.
    (4) If a program is useless, it will have to be documented.
    (5) Any given program will expand to fill all available memory.
    (6) The value of a program is porportional to the
        weight of its output.
    (7) Program complexity grows until it exceeds the capability of the
        programmer who must maintain it.
    (8) Make it possible for programmers to write in English and you
        will find the programmers cannot write in English.

