home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 515.lha / LZ_v1.80 / lz180.doc < prev    next >
Text File  |  1991-06-08  |  22KB  |  664 lines

  1.  
  2.                       LZ 1.80
  3.                  20th March, 1991
  4.  
  5.                 Written by Jonathan Forbes
  6.             Copyright © 1990, 1991, Xenomiga Technology
  7.  
  8.  
  9.    About LZ
  10.  
  11.    LZ is NOT freeware!  If you use it and like it, please send the appropriate
  12. shareware registration (Cdn.$ or U.S.$) to the address given below.  Note that
  13. source code is NOT available for LZ 1.80 at this time.  Send shareware
  14. contributions to:
  15.  
  16.    Xenomiga Technology
  17.    1132 Bay Street, Suite #1101
  18.    Toronto, Ontario
  19.    M5S 2Z4
  20.    Canada
  21.  
  22.    For a full description of LZ registration and update policy, please read
  23. the file "register.doc", in this archive.
  24.  
  25.  
  26.    Distribution
  27.  
  28.    LZ is a freely distributable, copyrighted piece of software.  You may
  29. upload it wherever you choose, but you are not allowed to sell LZ for profit,
  30. or include LZ on a disk which is sold for profit, without the author's
  31. (Jonathan Forbes) permission.
  32.  
  33.    The LZ package (LZ180.LZH) consists the following files:
  34.  
  35.       LZ           - The archiver/extractor itself
  36.       LZ180.doc    - LZ documentation (this file)
  37.       Update180.doc    - Information on changes to previous versions
  38.       Register.doc     - Registration and how to obtain updates
  39.  
  40.    None of these files is to be altered in any way whatsoever, or removed!
  41. The package may be recompressed with another archiver, however, such as Zoo,
  42. Zip, etc.
  43.  
  44.    And, as mentioned above, LZ is shareware.
  45.  
  46.  
  47.    Disclaimer
  48.  
  49.    I am in no way responsible for anything this program does; you are using it
  50. entirely at your own risk!  If you are using a hacked, edited, or tampered
  51. with version of LZ, you are even more at risk.
  52.  
  53.  
  54.    What is LZ?
  55.  
  56.    Currently, LZ is by far the fastest .LZH archiver and extractor available
  57. for the Amiga!  LZ is compatible with both the original Lharc and the new
  58. LHA.
  59.  
  60.    LZ is currently the only utility available which can handle the new LHA
  61. style archives.
  62.  
  63.  
  64.    Acknowledgements
  65.  
  66.    The original Lharc (MS-DOS) was written by Haruyasu Yoshizaki.  I took his
  67. freely distributable source code "Lzhuf.c", and rewrote it in assembly
  68. language (very highly optimised assembly language, I might add).  I used
  69. "lharc.c" (which is full of MS-DOS specific code) as a reference, but did not
  70. use it as a base for the Amiga version, which I wrote from scratch.
  71.  
  72.    LZ 1.80 is a significant improvement over the original .LZH algorithm in
  73. that it employs modern data compression technology to provide better
  74. compression while doubling or tripling encoding speed and retaining 100%
  75. compatibility with the .LZH format.
  76.  
  77.  
  78.    How fast is LZ?
  79.  
  80.    LZ is currently the fastest .LZH utility for the Amiga.  No other available
  81. Amiga archiver even comes close to LZ's legendary performance for either
  82. compressing or decompressing.  LZ 1.80 can achieve peak compression speeds of
  83. up to three times those of LZ 0.91.
  84.  
  85.    Speedwise, LZ leaves everything else far behind in the dust; LZ outperforms
  86. Lharc 1.3, LharcA .99d, Pkazip 1.01, Lhlib 1.8, and just about every other
  87. Amiga archiving utility in existence.
  88.  
  89.    Every now and then, the programmer of some new disk compressing utility
  90. will make the ridiculous claim that his disk compressor uses some custom
  91. algorithm derived from Lharc that is "superior to anything else out there".
  92. Some will even go so far as to claim speed or compression superiority to LZ.
  93.  
  94.    But the fact is, to date, there is simply NOTHING out there which even
  95. comes close to LZ for degree of compression, and the programs which actually
  96. do come within some large percentage of LZ's compression performance, are
  97. never anywhere near as fast as LZ.  LZ simply smokes the competition in every
  98. conceivable way.
  99.  
  100.    In terms of degree of compression, LZ outperforms every other archiver
  101. currently available for the Amiga.
  102.  
  103.    The files being compressed and decompressed in the test, were those on
  104. Fred Fish disk #245.
  105.  
  106.               * - Different algorithm/encoding scheme
  107.  
  108.                               *
  109.          |  (1.80)  | (.91) | (1.0) | (.99d) | (1.01)
  110.          |    LZ    |   LZ  | Lharc | LharcA | PkaZip
  111. Fish245.LZH  |   5:33   | 11:33 | 26:29 |    ?   |  10:31  compressing
  112.          |   1:38   |  1:43 |  5:12 |   2:34 |   2:53  decompressing
  113.  
  114.  
  115. File     LZ     LZ   Lharc  LharcA  Pkazip   Zoo    Arc    Ape
  116. Name    1.80   0.91   1.3     .99d    1.01   2.01   0.23   1.0
  117. ---------- -----  -----  -----  ------  ------  -----  -----  -----
  118. UserManual    88    244    268     211     164     42    112    614 <- compress
  119.           19     19     35      27      21     12     19    116 <- extract
  120.        64066  66693  66683   66682   61796  78279  80469  66329 <- size
  121.  
  122.  
  123.    LZ is consistently faster than all other archivers by the margins shown here.
  124. LZ also creates output files up to 5% smaller than those produced any other .LZH
  125. archiver.  Although there have been many disputes over the compression achieved
  126. by .ZIP files and .LZH files, this difference may well tip the balance towards
  127. .LZH files.
  128.  
  129.  
  130.    Invokation
  131.  
  132.    Typing "LZ" from the CLI, without any parameters, will reveal a help screen
  133. similar to the following (with copyright and shareware information.)
  134.  
  135.                  Summary of commands:
  136.  
  137.   a    Add file(s) to archive        f   Freshen file(s) in archive
  138.   e,x  Extract file(s) from archive      u   Update file(s) in archive
  139.   l,v  Display archive contents          t   Test archive integrity
  140.   d    Delete file(s) from archive       m   Move file(s) to archive
  141.  
  142.                  Summary of options:
  143.  
  144.   -a  Preserve file attributes          -N  No console output
  145.   -A  Set archive flag              -p  Pause after loading
  146.   -b  Set input/output buffer           -P  Set task priority
  147.   -c  Confirm files             -r  Archive subdiectories
  148.   -D  Alternative display           -t  Text conversion
  149.   -f  Ignore filenotes              -u  Upper case filenames
  150.   -i  Read file list from file          -U  Update rate
  151.   -l  Lower case filenames          -w  Set work directory
  152.   -L  Create list file              -x  Preserve path names
  153.   -m  Disable message query         -z  Store files
  154.   -n  No progress indicator         -Z  Compress archives
  155.  
  156.    The usage line below is also displayed:
  157.  
  158.    Usage: LZ [-options] <Command> <Archive> [FilePatterns] [DestPath]
  159.  
  160.    While items in square brackets are optional, items in angle brackets are
  161. mandatory.  LZ will append a .LZH to the <Archive> parameter if the name of
  162. the archive you supply does not already end in .LZH, but ONLY if there isn't
  163. already a dot ( . ) in the name.  This extra clause is for the benefit of
  164. FidoNet users who have their mail archived in the .LZH format.  i.e.:
  165.  
  166.  
  167.    MyFile     becomes    MyFile.LZH
  168.    MyFile.LZH     remains    MyFile.LZH
  169.    01234567.SA0   remains    01234567.SA0
  170.  
  171.  
  172.    A detailed description of each of LZ's commands follows:
  173.  
  174.  
  175.    Commands
  176.  
  177.    a    Add file(s) to archive
  178.  
  179.     The add command will add files to a .LZH archive.  If the specified
  180.     archive does not already exist, then it will automatically be created.
  181.     It is not possible to add a file which is already present in archive;
  182.     if this is attempted, then an error message will be displayed.
  183.  
  184.     By default, only filenames are stored in the archive; if you wish to
  185.     store path names also, then you will have to use the -x option
  186.     (explained later).  If you wish to store entire subdirectories (i.e.
  187.     descend recursively through a directory tree), then you will have to
  188.     use the -r option (explained later).
  189.  
  190.     Multiple files may be added with one command.  In addition, both
  191.     AmigaDOS and ARP wildcards are also supported.
  192.  
  193.     Examples:
  194.  
  195.     1) To add "BLAH" to "myarchive.LZH", you would enter the following
  196.        command:
  197.  
  198.           Lz a myarchive.LZH blah
  199.  
  200.  
  201.     2) To add "THEFILE", "HI", and "KING" to "myarchive.LZH", you would
  202.        enter the following command:
  203.  
  204.           Lz a myarchive.LZH thefile hi king
  205.  
  206.  
  207.     3) To add everything ending in ".INFO" to "myarchive.LZH", you would
  208.        enter:
  209.  
  210.           Lz a myarchive.LZH #?.info
  211.  
  212.  
  213.    e,x  Extract file(s) from archive
  214.  
  215.     The extract command will extract files from an archive.  If you wish
  216.     to extract files from multiple archives, then you will have to use
  217.     a wildcard.  By default, all files in the archive will be extracted.
  218.     If you wish only specific files to be extracted, then the names of
  219.     these files should follow the archive name (wildcards are accepted here.)
  220.  
  221.     If any file following the archive name ends in a '/' or a ':', then
  222.     that directory will be used as the destination directory in which all
  223.     extracted files will be stored.
  224.  
  225.     By default, existing files will not be overwritten; instead, you will
  226.     be presented with the following:
  227.  
  228.     File 'whatever' already exists -overwrite? (Yes/No/All/Quit):
  229.  
  230.     Your response is hotkeyed, so it is not necessary to hit return.  If
  231.     you enter "Y", then the file will be overwritten.  If you enter "N",
  232.     then it will not be extracted.  If "A" is entered, then all files from
  233.     then on will automatically be overwritten without prompting you.  This
  234.     includes files in other archives, if you asked Lz to extract multiple
  235.     archives, using a wildcard.
  236.  
  237.     If you do not wish to be prompted for existing files, then use the -m
  238.     option (explained later.)
  239.  
  240.     Please note that if you wish to extract files from multiple archives
  241.     with one command, it can only be done with wildcards; you cannot enter
  242.     the name of each archive on the command line.  For example:
  243.  
  244.           Lz x arc1.LZH arc2.LZH arc3.LZH
  245.  
  246.     The above command would attempt to extract "arc2.LZH" and "arc3.LZH"
  247.     from "arc1.LZH".  The way to get around this is to type:
  248.  
  249.           Lz x arc#?.LZH
  250.  
  251.     However, there are often times when a single wildcard cannot cover all
  252.     of the files you wish to extract; if this is the case, you will have
  253.     to invoke Lz more than once.
  254.  
  255.     Examples:
  256.  
  257.     1) To extract all files from "myarchive.LZH", you would enter the
  258.        following command:
  259.  
  260.           Lz x myarchive.LZH
  261.  
  262.  
  263.     2) To extract "BLAH" from "myarchive.LZH", you would enter the
  264.        following command:
  265.  
  266.           Lz x myarchive.LZH blah
  267.  
  268.  
  269.     3) To extract all ".INFO" files from all archives, you would enter the
  270.        following command:
  271.  
  272.           Lz x #?.LZH #?.info
  273.  
  274.  
  275.     4) To extract "BLAH", "WHATEVER", and all ".INFO" files from
  276.        myarchive.LZH to the destination directory "HDISK:ArchiveOutput/",
  277.        you would enter any of the following commands (they all perform
  278.        exactly the same function, since the destination directory may be
  279.        placed anywhere after the archive name):
  280.  
  281.           Lz x myarchive.LZH blah whatever #?.info HDISK:ArchiveOutput/
  282.           Lz x myarchive.LZH HDISK:ArchiveOutput/ blah whatever #?.info
  283.           Lz x myarchive.LZH blah whatever HDISK:ArchiveOutput/ #?.info
  284.  
  285.  
  286.    l,v  List files in archive
  287.  
  288.     The list command will display a verbose listing of the files within the
  289.     specified archive(s) (wildcards are allowed).  The listing will be in
  290.     the following format:
  291.  
  292.     Original Packed Ratio  Date      Time   CRC  Name
  293.     -------- ------  --- --------- -------- ---- ------------
  294.         3026    851  71% 11-Jun-90 19:01:48 E7A9 diskspeed.a3000
  295.          841    524  37% 11-Jun-90 19:01:50 1309 si.a3000
  296.          937    586  37% 11-Jun-90 19:01:52 AE7B speed.a3000
  297.     -------- ------  ---
  298.         4804   1961  59%     3 file(s)
  299.  
  300.     Heading    Meaning
  301.  
  302.     Original - The size of the file before compression
  303.     Packed   - The size of the file after compression
  304.     Ratio    - Compression degree; the higher the better
  305.     Date     - The file's creation date
  306.     Time     - The file's creation time
  307.     CRC      - 16-bit Cyclic Redundancy Check
  308.     Name     - File name (including directory path, if present)
  309.  
  310.     Examples:
  311.  
  312.     1) To list all files in "myarchive.LZH", you would enter the following
  313.        command:
  314.  
  315.           Lz v myarchive.LZH
  316.  
  317.  
  318.     2) To list all files in all archives ending in "e", you would enter the
  319.        following command:
  320.  
  321.           Lz v #?e.LZH
  322.  
  323.        Please note that since Lz automatically appends a .LZH to the
  324.        archive name if it does not already end in .LZH (with one exception
  325.        mentioned earlier), the following command is equally valid to the
  326.        one shown above:
  327.  
  328.           Lz v #?e
  329.  
  330.  
  331.    d    Delete file(s) from archive
  332.  
  333.     The delete command will remove files from the archive.  The names of
  334.     the files to be deleted should follow the archive name.  Wildcards are
  335.     allowed.
  336.  
  337.     Please note that items in subdirectories are also checked, so #?.info
  338.     will delete all .info files in the archive, wherever they may be.
  339.  
  340.     Examples:
  341.  
  342.     1) To delete "BADFILE" from myarchive.LZH, you would enter the
  343.        following command:
  344.  
  345.           Lz d myarchive.LZH badfile
  346.  
  347.  
  348.     2) To delete "BADFILE" and all ".INFO" files from myarchive.LZH, you
  349.        would use the following command:
  350.  
  351.           Lz d myarchive.LZH badfile #?.info
  352.  
  353.  
  354.     3) To delete all "README.BBS" files from ALL of your archives, it is
  355.        only necessary to type:
  356.  
  357.           Lz d #?.LZH README.BBS
  358.  
  359.  
  360.    m    Move file(s) to archive
  361.  
  362.     The move command behaves in exactly the same way as the add command,
  363.     except that files are deleted after they are added to the archive.
  364.  
  365.     Examples:
  366.  
  367.     1) To move "MYFILE" to myarchive.LZH, you would enter the following
  368.        command:
  369.  
  370.           Lz m myarchive.LZH myfile
  371.  
  372.     2) To move all files ending in ".INFO" to myarchive.LZH, you would
  373.        enter the following command:
  374.  
  375.           Lz m myarchive.LZH #?.info
  376.  
  377.  
  378.    f    Freshen file(s) in archive
  379.  
  380.     The freshen command will replace a file in the archive only if the
  381.     file is already present in the archive, and the file to be added has
  382.     a later date.
  383.  
  384.  
  385.    u    Update file(s) in archive
  386.  
  387.     The update command behaves in exactly the same way as the add command,
  388.     unless a file to be added is already present in the archive, in which
  389.     case LZ will compare the dates of both files, and will make sure that
  390.     the newer file is added to/retained in the archive.
  391.  
  392.  
  393.    t    Test archive integrity
  394.  
  395.     The test command will test every file in the archive (by extracting
  396.     it internally), and will inform you of any corrupted files (i.e. files
  397.     which fail their CRC.)
  398.  
  399.     Examples:
  400.  
  401.     1) To test all files in myarchive.LZH, you would enter the following
  402.        command:
  403.  
  404.           Lz t myarchive.LZH
  405.  
  406.     2) To test all files in all archives, you would enter the following
  407.        command:
  408.  
  409.           Lz t #?.LZH
  410.  
  411.     3) To test the file named "boing" in the archive "splat.lzh", you would
  412.        enter the following command:
  413.  
  414.           Lz t splat.LZH boing
  415.  
  416.     4) To test all files starting with "ping" in the archive "bleh.lzh",
  417.        you would enter the following comand:
  418.  
  419.           Lz t bleh.lzh ping#?
  420.  
  421.  
  422.  
  423.    Options
  424.  
  425.    -a   Preserve file attributes
  426.  
  427.     When this option is used, any files added to the archive will have
  428.     their attributes preserved (the default is for all files to be rwed).
  429.     The eight possible attributes are listed below, but will not be
  430.     explained here (a full explanation should be present in any AmigaDOS
  431.     manual):
  432.  
  433.     r: Read
  434.     w: Write
  435.     e: Execute
  436.     d: Delete
  437.     s: Script
  438.     a: Archive
  439.     p: Protect
  440.     h: Hidden
  441.  
  442.     If this option is not specified, then all files archived or extracted
  443.     will automatically be "rwed."  If this flag is used, then all
  444.     attributes (rwedsaph) will be preserved.  Please note that in order for
  445.     attributes to be preserved, the -a option must be used both when
  446.     archiving and extracting.
  447.  
  448.     When extracting, use -a only on files which have been compressed by
  449.     Amiga .LZH archivers; if you don't, you'll end up with files with
  450.     strange attributes, although no harm will be done.  Similarly, if you
  451.     know that your archive might be extracted on an IBM system, you should
  452.     not use the -a option, since they will have similar problems.
  453.  
  454.  
  455.    -A   This option will set the archive flag of any archive LZ creates or
  456.     adds files to.  It will also unset the executable flag.  Thus, your
  457.     archive will have the following flags set:
  458.  
  459.     ---arw-d
  460.  
  461.  
  462.    -b   Set i/o buffer size
  463.  
  464.     This option will set the i/o buffer size to the number immediately
  465.     following the option, which must be expressed in K.  For example,
  466.     -b32 would give you a 32k i/o buffer.  LZ's i/o buffer size is limited
  467.     only by available memory, so very large buffer sizes (128k+) are
  468.     acceptable.
  469.  
  470.     Note that changing the i/o buffer size on an 68000 Amiga when all work
  471.     is being done in a RAM drive doesn't speed things up; these options are
  472.     mainly for floppy drive users and 68020-68040 users.
  473.  
  474.  
  475.    -c   Confirm file names
  476.  
  477.     This option will cause LZ to prompt you with yes/no/all/quit for every
  478.     file to be added to or extracted from an archive.  This option can be
  479.     useful when used in conjunction with wildcards.
  480.  
  481.  
  482.    -D   Alternate display mode
  483.  
  484.     This options alters the layout of LZ's screen updates.  For example,
  485.     -D1 will use the characters -\|/ to mimic MS-DOS pre 1.10 Pkzip, while
  486.     -D2 will mimc MS-DOS Pkzip 1.10's percentage update.  -D0 is the
  487.     default, and activates the standard LZ display.
  488.  
  489.  
  490.    -f   Ignore filenotes
  491.  
  492.     The -f flag will cause LZ to ignore filenotes when archiving or
  493.     extracting files.
  494.  
  495.  
  496.    -i   Read file list from file
  497.  
  498.     This option allows you to specify that LZ read a list of files to be
  499.     archived, from a text file.  Entering -iRAM:FileList will cause LZ
  500.     to read the names of the files stored in RAM:FileList.
  501.  
  502.  
  503.    -l   Lower case filenames
  504.  
  505.     This option forces all file names to lower case.  If used when
  506.     archiving, all files added will have their names converted to lower
  507.     case.  If used when extracting, all files extracted will have their
  508.     names converted to lower case.
  509.  
  510.  
  511.    -L   Create list file
  512.  
  513.     This option causes LZ to create a text file containing a list of all
  514.     files added to an archive.  For example:
  515.  
  516.     LZ -LRAM:ListFile a RAM:Archive.lzh hello/blah1 blah2
  517.  
  518.     will cause LZ to create a file named "ListFile" containing:
  519.  
  520.     hello/blah1
  521.     blah2
  522.  
  523.  
  524.    -m   No message query
  525.  
  526.     Invoking this option will prevent LZ from prompting you for input.  It
  527.     will also cause files to be automatically overwritten if they already
  528.     exist.  This is often useful in conjunction with scripts and BBS's.
  529.  
  530.  
  531.    -n   No progress indicator
  532.  
  533.     This option will prevent LZ from displaying a byte count as it extracts
  534.     or archives files.  This can be useful if you are redirecting the
  535.     output of LZ to a file.
  536.  
  537.  
  538.    -N   No console output (or "absolutely no progress indicator")
  539.  
  540.     If this option is invoked, LZ will not display any text to the screen.
  541.     This option automatically turns on the -m option, so that if LZ ever
  542.     does require input from you, it won't just sit there.
  543.  
  544.     This option is useful in conjunction with BBS software.  Note the
  545.     differences between this option and the -n option.  Also note that this
  546.     option is incompatible with Amiga Lharc, to which -N and -n are one and
  547.     the same.
  548.  
  549.  
  550.    -p   Pause after loading
  551.  
  552.     This option will cause LZ to prompt you for a keypress after it has
  553.     loaded.  This can be useful if you have only one floppy drive, and LZ
  554.     is on another disk.
  555.  
  556.  
  557.    -P   Set task priority
  558.  
  559.     The -P option enables you to set the task priority of LZ.  The task
  560.     priority must immediately follow the -P; for example, -P1, or -P-1.
  561.     This can be useful if wish to set LZ to a negative priority and leave
  562.     it running in the background while you are calling BBS's.
  563.  
  564.  
  565.    -r   Archive subdirectories
  566.  
  567.     This option will cause LZ to recursively collect files from
  568.     subdirectories, and is usually used in conjunction with the -x option.
  569.     For example, to add all files on drive df0: (including subdirectories)
  570.     to mydisk.LZH, you would use:
  571.  
  572.     LZ -x -r a mydisk.LZH DF0:#?
  573.  
  574.  
  575.    -u   Upper case filenames
  576.  
  577.     This option forces all file names to upper case.  If used when
  578.     archiving, all files added will have their names converted to upper
  579.     case.  If used when extracting, all files extracted will have their
  580.     names converted to upper case.  This option is provided for
  581.     compatibility with MS-DOS Lharc.
  582.  
  583.  
  584.    -U   Update rate
  585.  
  586.     This option sets the rate (in bytes) at which LZ updates its byte
  587.     count (or alternate display, if set with -D).  It currently defaults
  588.     to 1024 bytes.  The following example sets the update rate to 4096
  589.     bytes:
  590.  
  591.     -U4096
  592.  
  593.  
  594.    -w   Set work directory
  595.  
  596.     When creating archives, individual files are compressed in the work
  597.     directory, which defaults to T: if it exists, or the current directory
  598.     otherwise.  The -w option allows the location of the work directory to
  599.     be changed; the name of the new work directory should immediately
  600.     follow the -w.
  601.  
  602.  
  603.    -x   Preserve path names
  604.  
  605.     This option forces LZ to preserve the full path names of any files
  606.     added, and is most commonly used in conjunction with the -r option.
  607.  
  608.  
  609.    -z   Zero compression
  610.  
  611.     This option is only valid when adding files, and, if invoked, will
  612.     cause all files added to be merely stored in the archive, not
  613.     compressed.  This is not a very useful option, but has been included
  614.     for the sake of completeness.
  615.  
  616.  
  617.    -Z   Compress archives
  618.  
  619.     By default, LZ will NOT attempt to compress files ending in .lzh, .lhw,
  620.     .zip, .zoo, .arc, .pak, .wrp, .zap, .dms, or .arj, since these files
  621.     are already compressed.  If the -Z option is used, then files with
  622.     these extensions WILL be compressed.
  623.  
  624.  
  625.    Conclusion
  626.  
  627.    LZ (still!) does not yet have all of its commands implemented; the commands
  628. not implemented are:  move, freshen, and update.
  629.  
  630.    Like Amiga Lharc, LZ uses the decimal address of its task structure for
  631. creating temporary filenames, so that multiple copies can run simultaneously
  632. without conflict (and no, LZ is not reentrant; I *like* global variables).
  633.  
  634.    If you find yourself using certain options with LZ most of the time, you
  635. might want to make them an alias.  For example, if you find yourself typing
  636. "Lhunarc" all the time:
  637.  
  638.    alias lhunarc LZ -b32 []
  639.  
  640.    The above two command works only with shells which support aliases.  Your
  641. shell might have a different way of doing it; I use AmigaDOS 1.3 and Arp 1.3.
  642.  
  643.  
  644.    Acknowledgements
  645.  
  646.    Haruyasu Yoshizaki - For lharc.c and lzhuf.c (the algorithm)
  647.  
  648.    Steve Tibbett      - For showing me how to speed up Lhunarc 0.96 by 3%
  649.             For RawDoFmt(), and __tinymain
  650.             For finding the bug in the view command
  651.             For Raw() and Cooked()
  652.             For suggesting a user configurable buffer
  653.  
  654.    Rob Collinsworth   - For finding the bugs in the algorithm implementation
  655.             when it was in Lhwarp
  656.  
  657.    Chris Larcombe     - For finding the zero length file bug in version 0.81
  658.  
  659.    Robert Jung    - For all the information on file compression.
  660.  
  661.    Timothy C. Bell    - For explaining everything from semiadaptive dictionary
  662.    John G. Cleary       techniques and statistical encoding to digital hash
  663.    Ian H. Witten    tries and finite context models.
  664.