FACT v1.30 (Revision history is at the end of this file) DOS utility: Freeware Archive Conversion Tool Freeware, copyright (c) October 21, 1996 by David Daniel Anderson Reign Ware ** READ REIGNWAR.TXT FOR LEGAL TERMS ** ** NEWS FLASH! FACT support provided in the ILink Compression conference! ** FACT is the world's ONLY freeware archive converter for DOS which preserves complete subdirectory structures and converts ALL nested archives - even those in subdirectories. (FACT is unique in this regard, as far as I know.) FACT is easy to use, small, command-line operated, fully user-expandable AND includes full Pascal source code. FACT also includes a companion utility (SMALLEST.EXE) which will save only the smallest of the newly converted archives. See SMALLEST.DOC for details. DOCUMENT SECTIONS GO TO LINE NUMBER -------------------------------------------------- Preparation, Instant Start 40 Fast Start Information 58 Detailed Explanation 79 The ".INI" Files 146 Compressor Features and Limitations 169 Duplicate Nested Archives 302 The Future of FACT 332 Revision History 358 ////////////////////////////// | PREPARATION, INSTANT START | \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Preparation: Before running FACT, put FACT.EXE and FACT.INI together in one directory. This directory need not be on the PATH -- just run c:\dir\FACT.EXE if the directory is not on the PATH. No other FACT files are needed to run FACT. Instant start: 1) Follow instructions above regarding preparation. 2) Run "FACT" with no parameters to see a help screen. 3) Test thoroughly. 4) Use and enjoy! (You may wish to use "MAKETINY.BAT".) ////////////////////////// | FAST START INFORMATION | \\\\\\\\\\\\\\\\\\\\\\\\\\ Usage : FACT archives .NewExt [-d] [-q] [-w] [-1] Where : "archives" is specification of the archives to convert. : ".NewExt" is the extension(s) you wish to convert them to. : "-d"=del - forces the original archive to be deleted. [Optional] : "-q"=quiet - hides most of the compressors' messages. [Optional] : "-w"=watch - causes FACT to pause after every action. [Optional] : "-1"=1 level - only recompress the _primary_ archive. [Optional] Examples : FACT c:\dls\*.zip .lzh : FACT somefile.arc .arj .zip .uc2 -d : FACT anyfiles.* .rar -d -q Hints : DOS wildcards may be used when specifying the archives. : Multiple ".NewExt" new extensions may be specified at one time. //////////////////////// | DETAILED EXPLANATION | \\\\\\\\\\\\\\\\\\\\\\\\ Command line: FACT archives .NewExt [-d] [-q] [-w] [-1] archives - This is where you specify which archives you wish to convert. FACT will only convert archives which have been defined in FACT.INI, and which FACT is able to validate when it runs. You may use DOS wildcards (* and ?) when specifying which archives to process. Examples: c:\dls\*.* *.zip funnier.ar? d:\temp\bbs\dir01\pk*.lzh .NewExt - Substitute the extensions used by the compressor or compressors that you wish to use. You may specify more than one new extension. Separate with spaces. You *must* include the period at the beginning! Examples: .rar .rar .uc2 .lzh .acb .ha .yc .rar .zip .arj .paq -d - This will cause the original archive to be deleted (delete) when FACT is done processing. FACT is intelligent enough to NOT delete an archive which was simply recompressed. In other words, if you recompress all the archives in a directory to ".arj", and some of them are *already* ARJ files, FACT will not delete any of the ARJ files. -q - QUIET mode causes most of the messages from the (quiet) compressors to be hidden (sent to NUL). A few messages from FACT itself will still be displayed. QUIET and WATCH mode affect different output, so you may use both at the same time. -w - WATCH mode causes FACT to pause after running each (watch) compressor/ decompressor, and at various other times after it has displayed something of note. WATCH mode is especially useful when trying to remedy problem conversions. QUIET and WATCH mode affect different output, so you may use both at the same time. -1 - Only recompress the primary archive. Do NOT recompress (1 level) any nested archives. This can speed up processing. I recommend that all archives intended for redistribution be processed with this switch. Converting nested archives may cause an installation program to function improperly. //////////////////// | THE ".INI" FILES | \\\\\\\\\\\\\\\\\\\\ Like many programs today, FACT.EXE uses an "INI" (rhymes with 'ninny') file to allow the user to "initialize" (or set) various options. FACT.EXE and FACT.INI must be located in the same directory as each other. That is the *only* place where FACT.EXE will look for FACT.INI. The FACT package includes three .INI files. You may use any one of them. Simply rename it to FACT.INI and place in the same directory as FACT.EXE. This is what each contains: 1) FACT.INI - simple INI file with definitions for just six of the most common archives (ARC, ARJ, LZH, RAR, UC2 and ZIP). 2) MINI.INI - same as above. This is a backup or reference copy. 3) FULL.INI - many more archivers defined. Also includes instructions for defining even more, and for revising the existing ones. /////////////////////////////////////// | COMPRESSOR FEATURES AND LIMITATIONS | \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Each compressor has different features, and different command-line options to activate those features. In most cases, FACT is not able to accomplish anything that the compressors themselves cannot. Below is a list of features that I try to support in FACT, with accompanying notes on which compressors actually have those features. *) Processing subdirectories within archives. Very few compressors written prior to about 1991 are able to include subdirectories when creating archives. Unfortunately for people using those compressors, many programs today are distributed with directory structures in the archive. For those compressors that do not include subdirectories, the directory structure is destroyed upon conversion. FACT awkwardly works around this limitation by compressing each subdirectory as a separate archive. This isn't an ideal solution, but I think it helps keeps files separated. The following have been tested, | The following have been tested, and reliably archive subdirectories | and do NOT archive subdirectories -------------------------------------|----------------------------------- ACB | ARC (most versions) AIN | DWC (limited support, see FULL.INI) ARJ | HAP HA | JRC (JRchive) HPK (HPACK) | PUT HYP (HYPER) | SAR LIB (CODEC) | ZOO (incompatible method) LIM (LIMIT) | LZH (LHA) | LZS (LARC, by MIKI et al.) | PAK | PAQ (Quantum) | RAR | SQZ (Squeeze It) | UC2 (Ultra Compressor) | X1 | YC (YAC) | ZIP (PKZIP. INFO-ZIP not tested) | ------------------------------------------------------------------------- *) Authenticity verification/ Security envelopes/ Protection/ etc. PKZIP, ARJ, RAR and UC2 all have some feature to alert the user to the possibility that an archive has been tampered with. In theory, one should avoid converting these archives, since the anti- tampering protection will be removed. I tried to write FACT so that it would detect these anti-tampering schemes, and thus it would avoid converting archives employing them. However, since I was unsuccessful in finding easy and reliable methods of detecting whether they had been used, I was unable to write FACT to respect them. If anybody can and wishes to help me out, please do so! *) Archive and file comments. Many modern compressors allow the user to include comments in the archive. Sometimes comments are also allowed for each included file. FACT does *not* preserve these comments, for these reasons: 1) Many compressors do not support them. 2) The overhead associated with saving and adding them to newly created archives would be horrendous. *) Archive time/ date stamp. When modifying archives, most compressors allow the user to choose to set the archive's time/date stamp to that of the original, that of the newest file contained in the archive, or to the current system date/ time. FACT always sets the archive time to the date of the newest file within. Supporting other options *may* be a feature in future versions of FACT. *) Extensions different from a compressor's default extension. Most compressors allow the user to choose what extension to put on the archive. When modifying the archive, these compressors are able to examine the file itself to determine if it is the expected type. FACT only looks at file extensions, it does not examine the file itself. In other words, if FACT finds a file named "SODA.ZIP", it will assume that it is an archive created by PKZIP, INFO-ZIP or some other compatible archiver. If "SODA.ZIP" is really an ARJ file, a text file or anything *but* an actual ZIP archive, FACT will be unable to decompress it. In that case, FACT will leave it as is. Some archive convertors examine each file, and convert archives base on their "signatures". FACT does not, for the following reasons: 1) Very seldom do archives have an extension other than the default. 2) When they do, it is usually for a good reason: they may be installation files which must remain in their original format in order for the installation program to function properly. *) DOS "PATH" environment variable. Borland Pascal is only able to checking environment variables of 255 characters or less. I am unaware of any reliable methods to work around this limitation. Therefore, the names of any directories which contain compressors that you will be using must either be specified within the first 255 chars of your DOS "PATH" statement, or you must specify the directories as part of the compressor definitions in FACT.INI. *) DOS "PATH" environment variable. Beginning with version 1.30, FACT can run a user-defined external program immediately after decompressing the primary archive. You can run a virus checker, or a file tester, or whatever. Since you can even specify a DOS batch file, you can run any DOS program you wish. See the end of FULL.INI for details on this option. ///////////////////////////// | DUPLICATE NESTED ARCHIVES | \\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Other than the compressor limitations noted above, you should be aware of the following problem that has no ideal solution. When an archive contains two or more archives with the same file name, but different file extensions, and both are in the same subdirectory, only one will be recompressed as specified. For the purposes of the explanations below, assume you have an archive named BRITAIN.ZIP, which contains within it the archives WALES.PAK and WALES.ARC. BRITAIN.ZIP >ÄÄÂÄÄ> WALES.PAK ÀÄÄ> WALES.ARC *) When you tell FACT to convert BRITAIN.ZIP to BRITAIN.ARJ, FACT will simply skip WALES.PAK or WALES.ARC - it only converts the first archive it encounters. *) But if you tell FACT to convert the BRITAIN.ZIP to BRITAIN.PAK, FACT converts the first WALES archive that it encounters, and then renames the other one. When renaming, FACT substitutes a hyphen for the first letter of the file extension. Thus, FACT would either rename WALES.ARC to WALES.-RC or WALES.PAK to WALES.-AK. ////////////////////// | THE FUTURE OF FACT | \\\\\\\\\\\\\\\\\\\\\\ I do have plans for future versions of FACT! Revisions may include: *) An option to specify on the command line which .INI file to use? PLEASE tell me if you want this! *) An option to scan a file that specifies which extensions to use. This would only be needed by compressor enthusiasts, for when the command line isn't long enough. *) Tested definitions for more file compression programs, if possible. Note: I've defined all the compressors that I can locate. If you have other compressors, please contact me so that we may discuss how I may obtain copies of them from you. Thank you! *) Bug fixes, if any are discovered and reported. *) Your suggestions! (email me at: dda@panasia.com) //////////////////// | REVISION HISTORY | \\\\\\\\\\\\\\\\\\\\ 1.00, 28-Mar-1996 First public release. 1.01, 28-Mar-1996 Fixed problem with deleting files that were specified, but *not* recompressed. Stupid! Fixed problem with date/ time stamping archives. Revised an error message or two. 1.10, 28-Mar-1996 Implemented a makeshift solution for the problem of overwriting duplicate-named nested archives. Revised some informative messages. Defined additional compressors (in FULL.INI). 1.20, 2-Apr-1996 Fixed problem where original archive was sometimes being deleted prematurely. Defined additional compressors (in FULL.INI). Revised parameters for many compressor definitions. Added kludges to make some new compressors work. Revised some additional informative messages. Added option to only convert primary archives (-1). Added external program to save the smallest archive (see SMALLEST.DOC/ .EXE), and removed SMALLEST.BTM. Added simple batch file to automate processing (read "MAKETINY.BAT" for details). 1.25, 10-Apr-1996 Increased flexibility by allowing the user to define where on the command line the archive name will be inserted (put "%a" on the "RE=" and "DE=" lines). Removed most of the compressor-specific kludges. FACT is now smaller, and a little more efficient. Revised parameters for some compressor definitions. FACT package includes a 4DOS batch file to read files within archives (see 4AR.BTM). FACT now accepts single character switches. FACT now clears the screen before each primary archive conversion. FACT now informs the user which new extension is going to be used next. 1.27, 23-May-1996 Added a 4DOS batch file which will list the contents of archives (see ARL.BTM). Revised 4AR.BTM to improve operation. Revised FULL.INI to improve operation. Revised switch detection to prevent accidental archive deletion when converting files named xxx-dyyy.ext. Removed kludge for PUT (I found the "QUIET" option). Added my "Archive Feature Comparison Chart" (AFCC.TXT). 1.30, 21-Oct-1996 Improved handling of duplicate internal archives. Improved handling of cleaning up after aborts. Added ability to run a user-defined program after the primary archive is decompressed. See the end of FULL.INI for details on this option. [end]