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 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 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 Bod‚n). 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=/No/All] ?' Pressing 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: - Torbj”rn Brandvold (C/C++ teacher/mentor) - Andreas Wiklund (inital idea, initial/additional coding, á-testing), - Jonas Umander (á-testing, additional coding), - Tobias Bod‚n (á-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). '/?' : 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' : 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 . *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.