dhesi@bsu-cs.bsu.edu (Rahul Dhesi) (04/05/89)
Checksum: 1047552142 (Verify with "brik -cv") Posting-number: Volume 02, Issue 035 Originally-from: Haruyasu Yoshizaki, K.Okubo, & Paul Homchick <no email addr> Submitted-by: Rahul Dhesi <dhesi@bsu-cs.bsu.edu> Archive-name: lharc/lharc10.txt Here is a user manual for the archiving program lharc 1.0e that was posted here recently. It is by Haruyasu Yoshizaki (Yoshi), the author of lharc, who wrote the manual in Japanese. It has been translated into English by K.Okubo and revised by Paul Homchick. There are really two files here: "lharc10.man", the manual, and "readme", a revision history. Cut at the cut lines to separate the two, or optionally just keep them as one file. The manual was originally called "lharc.man" but I renamed it so there won't be confusion when further versions of the software or the manual appear. -- cut here for "lharc10.man" -- USER's MANUAL for highly effective Archiving Program LHarc version 1.00 Copyright(c) Haruyasu Yoshizaki ( Yoshi ),1988-89 Nifty Serve PFF00253 ASCII pcs pcs02846 ------------------------------------------------------ 1989 - 3 - 4 ---- 0. It came to pass one day.. After reading "Harddisk Cookbook" from Shouei-Press, I had an strong desire to write my own archiving utility. In the Nifty Serve network, I was first exposed to Mr. Miki's Larc which surpassed the well-known pkware in compression rates, as reported in the Forum Software Review and Deview. The next shock came when I saw Mr. Okumura's LZARI which has even better compaction performance. I started to rewrite LZARI in MASM trying to make it run faster, but I could find no way of speeding up the process of de-archiving.. So, as an alternative, I used adaptive Huffman coding with an LZSS encoder to achieve a similar rate of compression with a faster decompression process. This is the idea used in LHarc. No one can be sure of eradicating all possible bugs, yet if SPACE is more valuable than TIME for you, please give this program a try. It may be slower in execution but it achieves the tightest compression rate of any archiver in the public domain. 1. How to use it: [ Synopsis ] LHarc [ command ] [/<switch> [-|+|2|<option> ] ] <archive> <file_name> [ <Home directory_name>\|<Drive_Name>: ] [<path_name> ] You may place switch(es) at any place following the command(s). A sequence of switches can be specified. Just type LHarc to see the help menu. Commands: ======== a (Add) LHarc a Archive.LZH file1.ext file1.ext is archived and added to the Archive.LZH. If the file 'Archive.LZH' does not exists, then LHarc creates it. If 'file1.ext' is already in the archive, then LHarc replaces it with the new file. u (Update) LHarc u Archive.LZH file1.ext 'file1.ext' is archived into 'Archive.LZH' the same as the 'a' command. But now, lharc checks the date of 'file1.ext' when 'file1.ext' already exists in the archive. LHarc keeps the newer one and ignores the other. With the /c switch on, the action is the same as with the 'a' command. m (Move) LHarc m Archive.LZH file1.ext is equivalent to LHarc u Archive.LZH file1.ext del file1.ext Beware of the fact that the second line is always active. You might lose the older 'file1.ext' for eternity. f (Freshen) LHarc f Archive.LZH file1.ext If file1.ext was archived then the file is replaced by new one. The option will not do anything if file1.ext does not exist in the archive. LHarc f /c Archive.LZH file1.ext will replace file1.ext in the archive without checking, /c is to suppress checking. e (Extract) or x (eXtract) LHarc e Archive.LZH extracts all the files from Archive.LZH. LHarc e Archive.LZH file2.ext extracts file2.ext from the archive. If there is a file with the name file2.ext in the target directory, then LHarc refrains from extraction if the existing file has the same time stamp or is newer. The /c switch will force lharc to ignore this time stamp checking. LHarc e archive.lzs* [file.ext] will extract [file.ext] from .lzs* files archived with Larc 3.xx. Note: Larc is another popular archiver in Japanese PDS's. p (Print) LHarc p Archive.LZH [file2.ext] will output un-archived file(s) to standard output. LHarc p /v Archive.LZH [file1.ext file2.ext ....] will usually activate the utility 'less' and will prompt for the output. A temporary file is created. You must delete this file later. Or, you may redirect the output to the "more" command of DOS. d (Delete) LHarc d Archive.lzh filed.ext Deletes filed.ext from the archive Archive.LZH. l (List) LHarc l Archive.LZH List to standard output [+] filename in Archive.LZH in two columns. '+' indicates a pathname exists with filename. LHarc l /x Archive.LZH List filenames in Archive.LZH in full detail standard output. Each line consists of [pathname] '+' filename. Similar to -l switch in UNIX ls command. v (View) LHarc l /x Archive.LZH is equivalent to LHarc v Archive.LZH. s (Self-extract) LHarc s Archive.LZH Create self-extracting file "archive.com" from Archive.LZH. If a home directory is specified, this file will be created in the home directory. * LHarc Archive.LZH file1.ext .....no command specified. Lharc acts exactly as with l command. This optional action is temporary. Don't count on it in the coming version. Switches: ======== Specify switch(es) following the switch character /. If you want to specify more than one switch, type characters continuously without any space between, like: /rxwa or /cxve. When the switches r and v are used with another switch, they must be specified at the end of the sequence as above. You may place a '+' or '-' sign after switches with the following meanings: '+' sets the switch on, and '-' sets the switch off. '2' option will be explained later. '++' means '-'. That is, both '+' and '-' are toggles. Note: '2' creates a special attribute to /r and /v switches. (See below). * You have to use small letters for switches. Capital letters are * reserved for future use. /x[-|+] (eXtend) Extend file_names with directory names. LHarc a Archive.LZH stat.h will archive two files with the same name in two different directories. Suppose if you are in the root directory \, and you have 2 files \tc\include\sys\stat.h and \stat.h in the same directory. LHarc a Archive.LZH stat.h will archive stat.h only. LHarc a /x Archive.LZH stat.h will eXtend the search to the depth of \tc\include\sys\ and archive the other stat.h with the name \tc\include\sys\stat.h. LHarc e /x Archive.LZH stat.h extracts two stat.h files, one on the root directory, and the other in the directory \tc\include\sys. * The /r switch always sets /x simultaneously. If you want to do without * /x then please set /x- after specifying the /r switch. /p[-|+] (Precise) Give a precise distinction between filenames. Suppose your archive tc.lzh has both \stat.h and \sys\stat.h LHarc e TC stat.h will extract both files and one with older date will be overwritten by the other. LHarc e /p TC.lzh stat.h will give you only \stat.h. LHarc e TC.lzh sys\stat.h gives you SYS\STAT.H only. /c[-|+] (ignore Comparison of time stamp) LHarc [efux] /c Archive.LZH [file1.ext file2.ext...] If a file with the same name is to be created, the default is to compare the time stamp of two files and some are overwritten and some are just ignored. This switch forces overwriting of existing files with the extracted one. /m[-|+] (no Message) LHarc [commands] /m Archive.LZH [file1.ext file2.ext...] by default LHarc ask questions like "Overwrite y/n ?". This switch will suppress these prompts and processing continues as if "y" is typed in. /a[-|+] (any Attribute) LHarc a /a Archive.LZH File1.Arc adds File1.ARC to archive with compression. Normally, LHarc just stores files with archive bit set, this switch forces it to add all files regardless of the attribute. /r[-|+|2] (Recursive) LHarc a /r Archive.LZH *.c Adds to Archive.LZH all the files with the extension .c under the specified directory. There are 3 modes in collecting files to be archived: (a) default or /r-. Archive files with specified names only. (b) File_name specified mode. When you specify /r or /r+ switch. Disregards directory names, and adds all the files with the file_name under the current working directory specified. Normally, this is used to archive all the versions or all files of similar nature. (c) directory mode. /r2 LHarc a /r2 Documents.LZH \doc\ This is like unix -r switch. All the files in a directory specified by path_name \doc\ are archived into Documents.LZH. Normally used to archive a complete directory. Switches /r and /r2 will invoke the /x switch simultaneously. You may have to toggle /x switch off after /r or /r2 specification, with /x-. The switch /x is to disregard directories. /w[-|+|<working directory name>] LHarc a /w[ d:\tmp ] Archive.LZH [ File1.EXT File2.EXT....] All the temporary files are created on the drive d:\tmp. In case no directory name is specified, the current directory becomes the working directory. All the temporary files created in the process of archiving reside in this directory and will be deleted later. SET LHarc.TMP d:\ does exactly the same, but may be overridden by /w switch. Normally the switch is necessary when 1 you have no room in the directory where the .LZH file is, or 2 you want your work done silently and swiftly on a Ram Disk. /v[-|+|2|< utility command redirection >] (View by page) LHarc p /v Archive.LZH > more when you want to read formatted output from print command of LHarc. The default utility is less.com. Note: less.com is a tool similar to the DOS more.com and something more, but it is less than the "less" in American Unix Networks. LHarc create an un-archived file LHARC.TMP and invokes the utility. Temporary files will normally be deleted after you review the output. LHarc p /v2 [ <utility name> ] Archive.LZH * LHarc suppress the output of path_name or file_name. The switch is supplied for viewing binary files with a dump command. Definition: Archive Name(Path_name). * All the archived files have the same format as Larc* except for the extension .LZH while Larc uses .LZS. When you use a different extension for the path_name, LHarc will prompt you with that extension. Wildcards are valid in e,x,p,l,v,s commands. LHarc e Archive.LZH *.c un-archive all the files with the extension .c. Definition: Home_directory. * If you specify a home_directory then everything happens on this directory as if it is the current directory. Specify a directory_name ending with either '\' or ':'. In archived files, there will be no record of this home directory name. Example. In the following directory tree: |-- BIN -- | |-- \ --|-- TC --|-- LIB -- | |-- INCLUDE --|-- SYS --|-- STAT.H Type from your root directory \ LHarc a /rx ex Archive.LZH tc\include\ stat.h to have \tc\include\sys\stat.h archived in Archive.LZH with name SYS\STAT.H . Definition: File Name (a Path_name) to be archived. * File_names or Path_names of files to be archived must be specified or LHarc will automatically assume *.* with no directory names. The wildcards behaves exactly as in MS-DOS. You can not use them in specifying directories except in the mode /r2, as UNIX -r option for cp, mv or rm. Terminology: ============ Path name, Directory Name, File_name: a:\tc\include\stdio.h |<---- path_name --->| |<---------->||<--->| directory_name file_name SWITCH character: If you are using some other letter like '-' for the forward slash '/' as switch delimiter from function call 37h, SET VECTOR, you have to place your delimiter, say '-', in front of our '/' like -/cx. You may use '/' for a directory delimiter, using the Unix convention. You can always use '-' as a switch character anyway. The above comment may not be true if you are not using MS-DOS 3.xx. 2. Set switches in environmental variable. * You may set switches by using the Environmental variable 'LHARC'. Example. A>set LHarc=/we: /r2 Set work directory in drive e: and archive files in totally recursive mode. It is, also possible to specify the working directory with environmental variable 'TMP', like set LHarc.TMP=e: but the /w switch override the setting. 3. Self-Extracting Files. If a self-extracting file is executed, then it will try to extract all of the archived files into the current directory. Every extracted file has the attribute 20h. If a file with a name of AUTOLARC.BAT exists, this batch file is activated immediately. It is possible to embed some jokes or even so-called viruses in this autolarc.bat file. The possibility exits even with other SFX files from ARC or PKware. So I have chosen to keep the batch file option active in the present version because the world is now well-prepared for those tricks. 4. Archive file header. Our header is compatible with that of Larc*. Methods of archiving are two: -lh0- stored as it was, -lh1- compressed by LZHuf coding. Larc archived files with extension .lzs may be un-archived by LHarc, if they belong to type 4 and 5. Note: Larc is another Japanese archiver with source code published on a Journal. [It will be uploaded to the American GEnie network soon]. 5. Result Codes. Dos returns the following results codes after batch files. 0 normally finished. 1 Process finished with ignoring the nonexistent filenames in archiving. Or, CRC error occurred during un-archiving. 2 Process terminated by a fatal error. No archives created nor moved. 3 Unable to write in the temporary files into archive. Work file renamed as LHARC.)2(. Original archive was deleted. Try renaming LHARC.)2( as your archive, although it could be damaged. 6.Temporary Files. LHARC.)1( Old archive file renamed. LHARC.)2( Working file to create new archive file. LHARC.TMP Work file to make a list of archived files inside cabinet. If a file with these names already exists, then the normal action of LHarc is not guaranteed. 7. My Distribution Policy. Under conditions which follow, you may freely copy and distribute this software. 1. Under all circumstances, 'Copyright by Haruyasu Yoshizaki' must be attached to the copy. 2. This manual or its hardcopy should go together with the software. 3. You may modify the program, but in that case, you must distribute the complete source code for the program, including your contribution, and you must make it clear that you have made such modifications. 4. You must try to distribute the newest version available. 5. I assume no warranty for the claim of any damage you may sustain by using this software. 6. I have no obligation to revise the program to correct any fault in this software. 7. For the commercial use of this software, I add the following: a. The entire software made incorporating this program should not be copy protected in the sense that DISKCOPY command of MS-DOS makes a perfect copy. b. Every part of the package should print the name LHarc and the copyright banner. c. The distribution policy of this software should be printed either in the manual, in the package or on the disk-label. 8. Acknowledgments. * Special gratitude for H.Okumura who uploaded the code for LZARI in PCVAN on which this LZHuf coding is based. To K.Miki, who re-posted LZARI to Nifty Serve, and who is the author of Larc I, also, express my gratitude. For those who contributed reports and comments and information on bugs, I thank you very much. * The "exe" file for lharc is nearly 2 KiloBytes smaller due to use of pcs27162 by S.Takanami. I honor the utility and thank him for letting me use it in LHarc. * I have made so many revisions to LHarc, yet I do not think I can ever expel all the bugs dwelling inside. I would appreciate your comments and bug reports. Please route them to me via the SDR Forum of Nifty or salon.pds of Ascii Net. [American users of GEnie can send messages to the author via K.OKUBO]. 9. References. 1) AP-Labo :A Harddisk Cook Book Shouei Press,(1987). 2) Kurita,T:Jewlry Box of Computing 43, Huffman Coding, bit, Vol.20, No.7, pp.100-101 (1988). 3) Miki K, Document for Larc : Larc.man (to appear on GEnie). 10.History of Revisions. Ver. 0.01 1. Support of Self-extracting Files. 2. p command added. 3. /c switch applies for more combinations of commands and switches. 4. Error handling revised. 5. Bug fixed in l command. 6. New algorithm introduced in sorting path-names. Ver. 0.02 1. Support of m command. 2. LArc 3.xx compatibility. Type 4, 5 .lzs files are un-archived. 3. Accept systems with different switch characters. 4. Minor bugs fixed with e command. 5. Revised format for l command. Ver. 0.03 1. The environmental variable 'LHARC' sets some of the switches. 2. Made it possible to specify '+', '-' by switches. 3. /v switch included. 4. Now wild cards can be used for archive names for explvs commands 5. Home directory names had some interactions with Kanji-code. Fixed. 6. Fixed header file bugs of self-extracting .exe files. Ver. 0.04 1. Support environmental string 'TMP' . 2. "LHarc p /v a.lzh a_file" used to delete 'a_file' in case of an error. Bug fixed. 3. Checks whether there exists a file with same name in making a self-extracting file. 4. In a self-extracting archive file, if a file with the same name with larger size exists, then LHarc kept difference when overwritten by a smaller file. This bug removed. Ver. 0.05 1. CRC checks extend to self-extracting files. 2. Completely recursive modes are made possible for a, u, m commands. 3. Meet append.exe of MS-DOS version 3.3. 4. You don't have to add \ anymore to the end of working directory name. Ver. 0.06 1. If a file transaction fails with u, m, or f commands, LHarc will leave the archive file as it is. 2. File attributes were misunderstood by f commands sometime. Possibility eliminated. Ver. 0.06b 1. Removed possibility of a damaged cluster appearing in failing to re-create(=freshen) an archive file. 2. Remove the "+" bug in redirecting with p command. Ver. 0.07 1. Prohibition of actions to a write-protected archive. 2. m command now removes files made by older versions. 3. Error handling routine revised in dealing with wild card names for archive files. 4. No commands specified is now interpreted as l command specified. 5. Error level 1 return when CRC checking detect an error in un-archiving. 6. Program now halts when self-extracting process meets an error. 7. Bug in CRC checking when a directory name is met in un-archiving process. Ver. 0.07a 1. Ver. 0.05 ` 0.07 break down Heap areas. Corrected. 2. Accept any directory names with any attributes. Ver. 0.07c 1. Remove bug in detecting memory shortage. 2. Compacted self-extracting program. Ver. 1.00 1. Mode without working file added. 2. /r switch forces /x switch simultaneously. 11.Comments: a. Some other algorithms I have in mind. For some specific files, the compression rates are not as good as PKware's PKZIP. For such files, I may use LZSS compression with correlated arithmetic compression. This is an effective method and My experiment shows that the rates are no less than PK's. Yet, it takes too much time in both archiving and de-archiving processes, with much higher memory consumption. Consequently, I intend to keep on working on this LZHuf algorithm. Naturally, I am ready to accept any comments and I continue to experiment. b. Naming of LH(arc) Some people expressed concerns that the string 'arc' is contained in the name LHarc. I make the following statements for them. The crucial point in the case where Sea sued PK, is the way PK advertised and sold Pk(x)arc with an emphasis on arc-compatibility, with a certain amount of profits from shareware contributions. This is not the case with LHarc. I used a different archiving method and made it a freeware program with a format not compatible with arc. I hope I will not be bothered by similar accusations. -- end of "lharc10.man" -- -- cut here for "readme" -- The accompanying document is a preliminary draft of my personal interpretation of the LHarc User Manual in Japanese contained in LHarc10d.com. I have tested command lines in this English version with LHarc10e.com extracted LHarc.exe 1.00 except for the switching character. The machine I used for the test is Toshiba T5100 with MSDOS 3.30 from Toshiba. The machine is one of those PC-Compatibles. I have had no authorization or checking done on this translation, either from an English speaking native nor from the author of LHarc. I do welcome comments on faults in this document in any respect, language, usage or style. I am willing to revise, and am actually planning to revise this document. For the people in U.S. unfamiliar with Japanese archivers, I think I have to upload the twin archive tool Larc by K.MIKI, very soon. Please notify to the address K.Okubo on GEnie for any comments or questions. [Some further editing of the lharc manual (without the benefit of the Japanese original, which wouldn't have helped anyway) was performed by Paul Homchick, one of the SysOps on GEnie's IBMPC RoundTable]. March 26, 1989 -- end of "readme" --