Document DWDecode v1.02 Documentation @$VER: DWDecode v1.02 Copyright ©1996-97 by Dick Whiting DWDecode v1.02 Documentation Copyright ©1996-1997 by Dick Whiting Standard Disclaimer: I wrote it, it works for me, I don't guarantee that it will do anything productive for anyone else, etc. etc. ;-) HOWEVER, if you do find a use for it: I homeschool my kids and they would love a postcard from where EVER you live. Instant Geography Lesson;) Postcards: Dick Whiting 28590 S. Beavercreek Rd. Mulino, Oregon 97042 USA Email: Dick Whiting 1. Requirements --------------- You will need several programs/libraries from Aminet: RexxArpLib by Willy Langeveld - util/rexx/ral3p3.lha FlashFind by Frank Würkner - util/cli/FlashFind1.2.lha A UUdecoder e.g. UUout by Nicolas Dade - util/arc/uuOut114.lha A Base64 decoder e.g. Base64coders by Edmund Vermeulen - comm/mail/Base64coders.lha A BinHex decoder e.g. binhex374 by Nik Soggia - util/arc/binhex374.lha And, of course, some Use Net files with encoded binaries;) FILES INCLUDED IN THIS ARCHIVE: DWdecode - the REAL program. DWdecode.Base64.Types - means of identifying Base64 first lines DWdecode.Binary.Types - means of identifying filenames in subject DWdecode.Doc - text format of documentation DWdecode.Encode.Types - MIME encoding types DWdecode.Guide - Amiga guide documentation DWdecode.Guide.info - info file for guide DWdecode.Prefs - a starter preference file DWdecode.Readme - copy of the Aminet readme file DWdecode.Section.Types - describes Section lines of UUencoded files DWdecode.Skip.Froms - allows for filtering based on From: lines DWdecode.Skip.Subjects - allows for filtering based on Subject: lines Samples/.... - subdirectory with example script(s) arexxqsort.lha - handles sorting of stem variables. by Willy Langeveld - originally found on Aminet 2. Basics --------- This program does MASS decoding of Use Net files. It decodes ALL binaries that it is able to recognize, which is most;) from the source directory and optionally from ALL subdirectories as well. 2.1. What It Handles -------------------- It uses information from MIME content lines, section lines, begin lines and (if it must) the subject line to determine what kind of encoding is used and which parts go together. It reports on files that have missing parts and on ones that it is unable to obtain complete information for. It handles either single directories or can handle COMPLETE directory trees. It handles files with SINGLE & MULTIPLE UUencoded OR Base64 binaries within them and Multipart UUencoded or Base64 files. It handles files with APPLE/DOUBLE format. My logic uses the LAST file of a given name within a SINGLE input file. This forces the APPLE portion to be considered a duplicate and not processed. It allows you to filenote the decoded binaries with a variety of substitution values as well as literals. It is quite 'smart' and generally can figure out most files. It is highly configurable and using external files can 'learn'. It should work with almost ANY Base64 and UU decoder. See WARNING below about pathname removal. It allows for filtering based on From: and/or Subject: lines. It allows for deleting input files after decoding, deleting duplicates, deleting input files based on From: &/or Subject: lines, deleting files that have ONLY text in them, and deleting files based on their age. Reporting can be tailored by setting/unsetting a variety of switches on the command line or in the prefs file. Probably other things ... but this IS enough. WARNING!!: I strip ALL pathing off of encoded filenames prior to envoking the Decoders. I thought about making this an option, but decided not to. It would be TOO easy for someone to overlay one of your system files. For Base64 (using Base64Decode) the stripped filename is created in DEST directory. UUout uses WHATEVER it finds on the begin line and I can't override it. For UUdecoding, assuming you use UUout, specify USEBASENAME as an option. This will prevent an encoded file of S:Startup-Sequence (for example) overlaying YOURS! I do not suggest using a decoder that does not have this option! 2.2. Limitations ---------------- 1) If someone REALLY tries to mislead this program; he CAN. I do alot of matching logic to locate parts xx/yy and associate them with the correct part 1/yy, but nothing is certain. EXAMPLE OF HOW TO CONFUSE DWDECODE: 1) Multipart file with part 1 subject totally different from others 2) Multipart file with wrong xx/yy information, or swapped xx/yy 3) BASE64 file that has bad numbers in the subject. SOME people use 1/2 to mean 'I sent TWO files and here is the FIRST one'. This WILL show on the error report and you can hand edit the subject. Just as a minor point, these would be ALMOST impossible to figure out using your brain instead of a program. You would have to ASSUME too many things to even have a chance of being able to assemble the parts, or you could just try all of the combinations until one worked;) 2) Very few error conditions are returned from UUOUT or BASE64, so I am able to catch very few. Generally I have found that even if I CAN detect an error, there is really no way to fix it -- generally the input file is corrupt. The only REAL exception is that UUOUT demands an 'end ' statement and you can go in and add one or fix the existing one (note that 'end ' should have a blank after the 'd'). 3) It DOES NOT handle: a) Files that include both UUencoded AND Base64 encoded pieces within the SAME file. (I have NEVER seen one, but you never know ...) b) MultiPart files that include portions of more than 1 encoded binary. (I know that wasn't clear, but ...) For example: You encoded 3 pictures and spread them across 6 files with no 1 file containing a complete piece. Again, I haven't seen this, but ... oops!, figures;), just received one!! c) It will probably have problems with joining files with dozens of parts because of the length of the command that is constructed. This has never been a problem for me since I NEVER have gotten ALL the necessary parts when I needed more than 4;) Actually, I SELDOM end up with all 3 of a 3/3 file. d) It does not handle multipart BinHex files. I can not tell that parts xx/yy are in BinHex format rather than Base64. If YOU know how to tell by 'looking' that a file is in BinHex rather than Base64 please email me. Thanks. 3. How To Get Started ---------------------- Unload the archive to somewhere (make sure the 'S' protection bit is set for the program - DWdecode to make it easier to envoke) Get any required programs from Aminet and install according to their documentation. If you put them ALL in the SAME directory as DWdecode, then you do not HAVE to modify the prefs file to get started. Modify DWdecode.prefs to use YOUR decoding programs, etc. See `Run time Options & Internal Defaults' for a complete description of all the possible options, variables, etc. and how to specify them. Also look at the included files so that you will know how to add to them if necessary. Run from a CLI or directory utility specifying a source directory and a destination directory. IF YOU INSTALL DIFFERENT PROGRAMS or LOCATE THEM ELSEWHERE: Change these in YOUR prefs file as necessary (these are MY values): Base64cmd='AmiTCP:bin/Base64Decode %sf %df USEMINLEN > nil:' B64cmdFail=20 #Return Code of 'DISK FULL' for Base64Decode BinHexCmd='Utils:BHD data=%DF %SF' BinCmdFail=20 #Return Code of 'DISK FULL' for BHD ScanProg='Utils:FlashFind' UUcmd='AmiTCP:bin/UUout %sf BUFSIZE=150 IGNORETERMINATION USEBASENAME > nil:' UUcmdFail=10 #Return Code of 'DISK FULL' for UUOUT 4. Filenoting of Input Files ---------------------------- I filenote all of the files in the SOURCE= directory(s). The filenote is in the following format: xyy SUBJET-LINE-FOUND-IN-THIS-FILE where x='S' means the file was skipped due to a match on SKIPSUBJECT x='F' means the file was skipped due to a match on SKIPFROM x='O' means the file is older than the value for KEEPDAYS x=' ' for all others. where yy=' ' for text files yy='UU' for UU encoded files yy='64' for Base64 encoded files yy='BH' for BinHex encoded files This makes it fairly easy to check if files have been properly identified. I suggest using Dopus (or another), sorting the files by comment and examining them. This makes it easy to ensure that all 'text' files are really text. I look for high byte counts and then check them. Usually I find that someone has quoted the first 400 lines of an encoded file;) Doing this also makes it easy to look at the subject lines and see if parts were properly put together. Needless to say, if you specify some of the DELETExxxx options, there may be nothing to examine;) 5. Run time Options & Internal Defaults --------------------------------------- Command line options override the prefs file and the prefs file options will override the internal defaults. All commands can be specified using the ALIAS or the fullname. Commands have a 'TYPE' indicated. 'B' is Boolean (YES/NO, TRUE/FALSE, ON/OFF, 1/0) 'N' is Numeric (any positive integer) 'F' is a file. The program checks for its existence 'S' is a character string. Any alphanumeric string is accepted All options with a type of 'B' may be turned ON by specifying just the command or its alias. ------------------------------------------------------------------------------- FORMAT of documentation: (options are grouped according to function) Command-Option Alias Type Default-Value ------------------------------------------------------------------------------- A complete alphabetical listing can be gotten by envoking DWDecode as: DWDecode -h OR DWDecode ? OR DWDecode HELP ------------------------------------------------------------------------------- 5.01. Decoders and their Failure Codes -------------------------------------- Base64Cmd BC F Base64Decode %SF %DF USEMINLEN > nil: B64cmdFail BF N 20 BinHexCmd BHC F Xbin -v %SF BincmdFail BHF N 0 UUcmd UC F UUout %SF BUFSIZE=150 IGNORETERMINATION USEBASENAME > nil: UUcmdFail UF N 10 ------------------------------------------------------------------------------- These options control which decoders are used and what is considered a FATAL error such as 'Disk Full'. If you use different decoders you will have to construct your own command line string for them. They accept the following substitution variables: %SF is replaced with the complete name (including path) of the input file %DF is replaced with the complete name (including path) of the output file %SD is replaced with the name of the input directory %DD is replaced with the name of the output directory Likewise, you will HAVE to determine the appropriate xxxcmdFail value. The easiest way is just to direct decoding to a floppy disk and see what value is returned when the disk fills up and you select CANCEL on the requestor. I do a change directory to the output prior to envoking the decoders, so if yours does not require an output filename AND used the current directory you will not need to specify it. If you do NOT place them in the same directory as DWDecode, they you must specify the path information also. Such as: Base64Cmd='AmiTCP:bin/Base64Decode %SF %DF USEMINLEN > nil:' 5.02. Files used for Determining Decoding Information ----------------------------------------------------- Base64TypesFile B64F F DWdecode.Base64.Types BinTypesFile BTF F DWdecode.Binary.Types EncTypesFile ETF F DWdecode.Encode.Types SectionTypesFile STF F DWdecode.Section.Types ------------------------------------------------------------------------------- These FILES contain information for determining how a file is encoded, where parts begin and end, and what words in a subject line MIGHT be a valid part name. See the individual file for further documentation. These files are required and are part of the DWDecode distribution. 5.03. Variables used for Determining Decoding Information --------------------------------------------------------- MaxHeader MH N 25 MinEncoded ME N 4 ------------------------------------------------------------------------------- After the output of the SCAN program has been checked, what are usually text files are searched looking for lines that might be UUencoded or B64 encoded. Usually, any found will be part xx/yy of files. The MAXHEADER values says to only read nn lines looking for encoded lines. The MINENCODED value says that there MUST be at least nn lines that seem to be the SAME kind of encoding and that no other lines may appear within this group of nn lines. The default values seem to work well. If you see encoded files being indicated as text files, you can modify these values. 5.04. Files used for Setting Runtime Options -------------------------------------------- PrefsFile P F DWdecode.Prefs ------------------------------------------------------------------------------- This file is used to set your personal preferences. You can have as many different preference files as you wish. Just specify: DWDecode P='pref-file-this-time' to use a file with a different name. This is the VERY FIRST option that is checked from the command line and is used (if present) to load the current runs options. 5.05. Directories and Input and Output -------------------------------------- Source S F (NO default value) Recursive REC B YES Dest D F (NO default value) FileNote FN S %LLQ2 : %SUBJECT Replace REP B NO ------------------------------------------------------------------------------- SOURCE= and DEST= are used as the input for the USENET news files and as the output directory for decoded files. The RECURSIVE option controls whether SOURCE= is treated as a single directory or if it is considered as the highest level of a directory tree. RECURSIVE=YES will result in decoding ALL of the files in SOURCE= plus ALL of the files in ALL of the subdirectories of SOURCE= FILENOTE= controls the format of the filenote attached to decoded output files. Any character string is valid. However, substitution variables MUST be separated from other characters by at least 1 blank. The string may contain the following substitution variables: For the following examples assume input file is from directory: INTERNET:UUNEWS/alt/binaries/pictures/animals/cute/fuzzy %LLQn is replaced by the last n levels of the INPUT directory name. if n is NOT specified the default is n=1 i.e. specifying FN='%LLQ2 : keep' would result in filenotes of 'cute fuzzy : keep' %HLQn is replaced by the first n levels of the INPUT directory name. if n is NOT specified the default is the top level only (n=1) i.e. specifying FN='%HLQ2 : keep' would result in filenotes of 'INTERNET UUNEWS : keep' %QUALxy is replaced with a portion of the INPUT directory name starting with the xth level for y levels. If xy are not specified then the COMPLETE directory name is used. If y is missing, then all levels starting with the xth are used. i.e. specifying FN='%QUAL53 : keep' would result in 'pictures animals cute : keep' %DATE is replaced with the date from the Date: HEADER in the input file. %FROM is replaced with the value from the From: HEADER in the input file. %SUBJECT is replaced with the Subject: HEADER in the input file. %SOURCE is replaced with the FULL source directory name. If RECURSIVE=YES this will be the actual subdirectory name. REPLACE=YES says to replace existing files in the output directory with new ones from the input directory. This may result in the same file being created multiple times each time overlaying the previously created one. With all of the cross posting that occurs, this can be a considerable nuisance. However, there ARE times that you may wish to turn this on. 5.06. Filtering of Input Files ------------------------------ KeepDays KD N 30 MarkOld MO B YES SkipFrom SF B YES SkipFromFile SFF F DWdecode.Skip.Froms SkipSubject SS B YES SkipSubjectFile SSF F DWdecode.Skip.Subjects ------------------------------------------------------------------------------- SKIPFROM=YES uses the values in the SKIPFROMFILE to bypass processing of certain input files. Files matching a SKIPFROMFILE value will have an 'F' in their filenote comment string. Use Dopus or another directory to check these. If DELETEFROM=YES then these files will be deleted PRIOR to any decoding. The SKIPSUBJECT=YES and SKIPSUBJECTFILE= options also work together in the same way. The input files that match will have an 'S' in their comment. These will disappear without ever being seen if DELETESUBJECT=YES. KEEPDAYS=nn specifies how many days (based on the Date: header) to keep an input file. If MARKOLD=YES then these files will go through the normal decoding logic and then have 'O' (old) placed in their filenote comments. If DELETEOLD=YES, then they will be deleted instead of being marked. 5.07. Report Control Options ---------------------------- ShowDecode SHDE B YES ShowDirs SHDI B YES ShowFiles SHF B YES ShowParts SHP B YES ShowStats SHS B YES DumpOpts DO B NO ------------------------------------------------------------------------------- These options control which reports appear on the console or log (see LOG=) SHOWDIRS switches on/off the complete list of ALL directories processed SHOWFILES switches on/off the reporting by file SHOWPARTS switches on/off the reporting by partname SHOWDECODE switches on/off the reporting of the decoding process SHOWSTATS switches on/off the reporting of various stats for each directory DUMPOPTS switches on/off the reporting of the runtime options 5.08. Delete Options -------------------- SUGGESTION: Don't turn these options on until you are REALLY secure with my program. Test SKIP options thoroughly BEFORE making them into DELETEs. ------------------------------------------------------------------------------- DeleteAfter DELA B NO DeleteDups DELD B NO DeleteFrom DELF B NO DeleteOld DELO B NO DeleteSubject DELS B NO DeleteText DELT B NO XDELETE XD B NO ------------------------------------------------------------------------------- These options control which (if any) input files are deleted after decoding and/or filtering. DELETEAFTER=YES deletes all files used in a 'successful' decode. DELETEDUPS=YES works in combination with REPLACE= If REPLACE=NO then DELETEDUPS will delete files that specify an output file that ALREADY exists. If REPLACE=YES then DELETEDUPS will delete files that name SAME output file as one decoded in the current run. DELETETEXT=YES deletes any files that DWDecode 'thinks' are just text. DELETEFROM=YES deletes any files identified during the SKIPFROM logic. DELETESUBJECT=YES deletes files identified by SKIPSUBJECT logic. DELETEOLD=YES deletes any files identified as older than keepdays, but this is done AFTER attempting to decode them. XDELETE=YES turns ON ALL DELETE options. Very dangerous, but it's there. 5.09. Debugging Options ----------------------- These are probably useless to most of you, but since I left them in, I thought I should document them--a very little;) ------------------------------------------------------------------------------- Debug DB B NO DumpBase64Types D64T B NO DumpBinTypes DBT B NO DumpDates DD B NO DumpEncTypes DET B NO DumpFiles DF B NO DumpFroms DFR B NO DumpMisc DM B NO DumpOpts DO B NO DumpPhase2 DP2 B NO DumpSectionTypes DST B NO DumpSkipFroms DSF B NO DumpSkipSubjects DSS B NO DumpSubjects DS B NO TrapAllBegs TAB B NO TrapAllEncs TAE B NO TrapAllSecs TAS B NO ------------------------------------------------------------------------------- Debug - turns on ALL debugging options DumpBase64Types - writes the Base64TypesFile to the console/log DumpBinTypes - writes the BinTypesFile to the console/log DumpDates - writes ALL Date: header lines to the console/log DumpEncTypes - writes the EncTypesFile to the console/log DumpFiles - writes the Files. array to the console/log DumpFroms - writes ALL From: header lines to the console/log DumpMisc - writes the MiscInfo. array to the console/log DumpOpts - writes all of the runtime options to the console/log DumpPhase2 - writes various arrays to the console/log DumpSectionTypes - writes the SectionTypesFile to the console/log DumpSkipFroms - writes the SkipFromFile to the console/log DumpSkipSubjects - writes the SkipSubjectsFile to the console/log DumpSubjects - writes ALL Subject: header lines to the console/log TrapAllBegs - writes ALL lines containing 'begin' to the console/log TrapAllEncs - writes ALL 'Content-Transfer-Encoding:' lines TrapAllSecs - writes ALL lines containing 'section' to console/log 5.10. Logging Options --------------------- Log L B YES LogFile LF S DWdecode.Log ------------------------------------------------------------------------------- LOG=YES says to write reports to a file instead of the console LOGFILE is used to specify the name of the log file. 5.11. Miscellaneous Runtime Options ----------------------------------- DWassignIN DWI S DW: DWtemp DWT F T: Quiet Q B NO RunBack RB S run > nil: ScanOnly SO B NO ScanProg SP F FlashFind ------------------------------------------------------------------------------- DWassignIN - within the program I use this assign for the input directory. you would only need to change it if there was a conflict with an existing assign - it is removed at the end of program. DWtemp - this is used as the target of temporary files. Might need to changed if T: can't handle the amount of bytes necessary? QUIET - if set to YES will suppress almost all console messages. I recommend leaving it set to NO so that you have something to watch as the decode process progresses. RunBack - this runs QuickSort. You could change it to use c:asyncrun or some other program -- why I'm not really sure. ScanOnly - if set to YES will have the program do everything EXCEPT the actual decoding and deleting of files. If you are nervous about running this or just curious about the output - try this. It was mostly useful when I was doing the coding. ScanProg - originally I had intended allowing for different Scan/search programs, but the AmigaDos Search command was tooooo slow, and others wrote strange characters. FlashFind was fast AND it was easy to parse the output. So this option MUST be FlashFind with its path (if you put in a different directory) 5.12. Making DWDecode Smarter ----------------------------- TrapNewEncs TNE B YES TrapNewEncsFile TNEF S DWdecode.Trap.Encodes TrapNewSecs TNS B YES TrapNewSecsFile TNSF S DWdecode.Trap.Sections ------------------------------------------------------------------------------- TrapNewEncs - enables trapping of NEW 'Content-Transfer-Encoding:' lines. This enables you to add them as you discover them. TrapNewEncsFile is the file where the NEW encoding lines are logged. TrapNewSecs - enables trapping of NEW section lines. These are lines that start with the word section and do not match ones in the STF TrapNewSecsFile is the file where the NEW section lines are logged SUGGESTION: Check these files occasionally and add the necessary info to the corresponding file. Also, I would appreciate it if you would send any new section lines or encoding lines to me (email) and I will add them for future updates. 5.13. Summary List ------------------ Command-Option Alias Internal Value ----------------------------------------------------------------------------- B64cmdFail BF 20 Base64Cmd BC Base64Decode %SF %DF USEMINLEN > nil: Base64TypesFile B64F DWdecode.Base64.Types BinCmdFail BHF 20 BinHexCmd BHC BHD data=%DF %SF BinTypesFile BTF DWdecode.Binary.Types Debug DB NO DeleteAfter DELA NO DeleteDups DELD NO DeleteFrom DELF NO DeleteOld DELO NO DeleteSubject DELS NO DeleteText DELT NO Dest D == none == DumpBase64Types D64T NO DumpBinTypes DBT NO DumpDates DD NO DumpEncTypes DET NO DumpFiles DF NO DumpFroms DFR NO DumpMisc DM NO DumpOpts DO NO DumpPhase2 DP2 NO DumpSectionTypes DST NO DumpSkipFroms DSF NO DumpSkipSubjects DSS NO DumpSubjects DS NO DWassignIN DWI DW: DWtemp DWT T: EncTypesFile ETF DWdecode.Encode.Types FileNote FN %LLQ2 : %SUBJECT KeepDays KD 30 Log L YES LogFile LF DWdecode.Log MarkOld MO YES MaxHeader MH 25 MinEncoded ME 4 PrefsFile P DWdecode.Prefs Quiet Q NO Recursive REC YES Replace REP NO RunBack RB run > nil: ScanOnly SO NO ScanProg SP FlashFind SectionTypesFile STF DWdecode.Section.Types ShowDecode SHDE YES ShowDirs SHDI YES ShowFiles SHF YES ShowParts SHP YES ShowStats SHS YES SkipFrom SF YES SkipFromFile SFF DWdecode.Skip.Froms SkipSubject SS YES SkipSubjectFile SSF DWdecode.Skip.Subjects Source S == none == TrapAllBegs TAB NO TrapAllEncs TAE NO TrapAllSecs TAS NO TrapNewEncs TNE YES TrapNewEncsFile TNEF DWdecode.Trap.Encodes TrapNewSecs TNS YES TrapNewSecsFile TNSF DWdecode.Trap.Sections UUcmd UC UUout %SF BUFSIZE=150 IGNORETERMINATION USEBASENAME > nil: UUcmdFail UF 10 XDELETE XD NO 5.14. Index of Options ---------------------- B64cmdFail `Decoders and their Failure Codes' Base64Cmd `Decoders and their Failure Codes' Base64TypesFile `Files used for Determining Decoding Information' BincmdFail `Decoders and their Failure Codes' BinHexCmd `Decoders and their Failure Codes' BinTypesFile `Files used for Determining Decoding Information' Debug `Debugging Options' DeleteAfter `Delete Options' DeleteDups `Delete Options' DeleteFrom `Delete Options' DeleteOld `Delete Options' DeleteSubject `Delete Options' DeleteText `Delete Options' Dest `Directories and Input and Output' DumpBase64Types `Debugging Options' DumpBinTypes `Debugging Options' DumpDates `Debugging Options' DumpEncTypes `Debugging Options' DumpFiles `Debugging Options' DumpFroms `Debugging Options' DumpMisc `Debugging Options' DumpOpts `Debugging Options' DumpOpts `Report Control Options' DumpPhase2 `Debugging Options' DumpSectionTypes `Debugging Options' DumpSkipFroms `Debugging Options' DumpSkipSubjects `Debugging Options' DumpSubjects `Debugging Options' DWassignIN `Miscellaneous Runtime Options' DWtemp `Miscellaneous Runtime Options' EncTypesFile `Files used for Determining Decoding Information' FileNote `Directories and Input and Output' KeepDays `Filtering of Input Files' Log `Logging Options' LogFile `Logging Options' MarkOld `Filtering of Input Files' MaxHeader `Variables used for Determining Decoding Information' MinEncoded `Variables used for Determining Decoding Information' PrefsFile `Files used for Setting Runtime Options' Quiet `Miscellaneous Runtime Options' Recursive `Directories and Input and Output' Replace `Directories and Input and Output' RunBack `Miscellaneous Runtime Options' ScanOnly `Miscellaneous Runtime Options' ScanProg `Miscellaneous Runtime Options' SectionTypesFile `Files used for Determining Decoding Information' ShowDecode `Report Control Options' ShowDirs `Report Control Options' ShowFiles `Report Control Options' ShowParts `Report Control Options' ShowStats `Report Control Options' SkipFrom `Filtering of Input Files' SkipFromFile `Filtering of Input Files' SkipSubject `Filtering of Input Files' SkipSubjectFile `Filtering of Input Files' Source `Directories and Input and Output' TrapAllBegs `Debugging Options' TrapAllEncs `Debugging Options' TrapAllSecs `Debugging Options' TrapNewEncs `Making DWDecode Smarter' TrapNewEncsFile `Making DWDecode Smarter' TrapNewSecs `Making DWDecode Smarter' TrapNewSecsFile `Making DWDecode Smarter' UUcmd `Decoders and their Failure Codes' UUcmdFail `Decoders and their Failure Codes' XDELETE `Delete Options' 6. History ----------- v1.02 Fixes: Finally, I HOPE, have fixed adding libraries during init. Several people told me I hadn't... must have been some other program;) v1.01 Fixes: Discovered that RexxTricks.Library uses the SAME function name as QuickSort, BUT in a different format. Added code to test if RexxTricks is present and to call QSORT in that format if necessary instead of W.L's. The SORTS are faster if RexxTricks.Library is NOT present, so try to do decoding prior to anything that might add it. Can NOW place in directory named DWDECODE and have it WORK!! Really stupid error - thanks to Paul Copsey for finding this one. Now correctly deletes parts greater than 1 of multipart input files when DeleteDups is specified. If DWdecode MUST resort to using just Subject: line information will now consider the SAME partname appearing multiple times in the subject, IFF it is the only name present, as THE name to use. Added support for BinHex files (only 1/1 type files). New variables w/defaults: BinHexCmd='BHD data=%DF %SF' BinCmdFail=20 Removed unused variable DumpB64Files from preferences/help. Now handles PC type lines with Ctrl-M's Now filenotes output files containing parens in their names Now writes FileNote errors to log/console as requested Made maximum filename length on report = 30 characters. Added message referring user to logfile for errors. Added Guide format of 'documentation'. v1.0 Initial Release 7. Bugs -------- As of the date of uploading this program, I have stopped being able to break it. This does not mean it is bug free. If you find any, please email me so that I can correct it for others. Also, when you find NEW Section lines or MIME encoding types, I would appreciate you emailing them on to me and I will add them to future updates, changes, etc. Thanks. 8. Thanks --------- Thank you's to: Willy Langeveld for RexxArpLib, VLT, QuickSort, et. al. Frank Würkner for FlashFind Nicolas Dade for UUout Edmund Vermeulen for Base64coders Nik Soggia for binhex374 Stephan Sürken for Text2Guide (without it I would not have done a Guide format documentation) Marcel Beck for YAM - the BEST way to contact me Holger Kruse for MIAMI - the BEST way to hook YAM to the net;) AND ... all of the other shareware, freeware, etc. programmers for the AMIGA who make it possible for US to still use our favorite machine;) Dick Whiting April 02, 1997