

     










                              LhA User's Guide

                        Version 1.0 - December 1991












            /~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\
            /~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\
            /~~\___________________________________________/~~\
            /~~\___________________________________________/~~\
            /~~\__/~~\_________/~~\___________/~~~~~~~~\___/~~\
            /~~\__/~~\_________/~~\__________/~~~~~~~~~~\__/~~\
            /~~\__/~~\_________/~~\__________/~~\____/~~\__/~~\
            /~~\__/~~\_________/~~\__________/~~\____/~~\__/~~\
            /~~\__/~~\_________/~~~~~~~~~\___/~~~~~~~~~~\__/~~\
            /~~\__/~~\_________/~~~~~~~~~~\__/~~~~~~~~~~\__/~~\
            /~~\__/~~\_________/~~\____/~~\__/~~\____/~~\__/~~\
            /~~\__/~~\_________/~~\____/~~\__/~~\____/~~\__/~~\
            /~~\__/~~~~~~~~~\__/~~\____/~~\__/~~\____/~~\__/~~\
            /~~\__/~~~~~~~~~\__/~~\____/~~\__/~~\____/~~\__/~~\
            /~~\___________________________________________/~~\
            /~~\___________________________________________/~~\
            /~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\
            /~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\









                          Written by Stefan Boberg
                    Copyright (c) 1991 by Stefan Boberg


     


     V1.0                     LhA User's Guide                   Page 1


     1 - Introduction      

        LhA is  a  new  and  powerful  archiver for the Commodore-Amiga
     computer.  It  is  fully compatible with LHA for MSDOS systems and
     LhArc  for  MSDOS,  Amiga and *NIX.  It is also compatible with LZ
     and  LhArcA  for  the  Amiga.  LhA  sports  fast  compression  and
     decompression  and  has  several commands and options not found in
     any other archiver currently available archiver for the Amiga.  

     1.1 About the manual     

        This manual  describes  LhA,  a  file archiving program for the
     Commodore-Amiga(tm)   computer  series.   LhA  creates  and  reads
     archives  compatible  with the MS-DOS archiver `LHA', and `LhArc',
     which is available for all major operating systems.  

        The manual  is  divided  into  four  major  sections, the first
     section  (this  one)  contains  some  information  related  to the
     program  and  how  it  compares  to  other  similar products.  The
     second  section is a little tutorial to demonstrate how to use LhA
     in  an  efficient  and  flexible  way.   The  third  section  is a
     reference  section,  where  all features, commands and options are
     explained  thoroughly.   The  last  section  contains  the license
     agreement, registration details and disclaimers.  

        I know  that  several pieces of information can be found at two
     or  maybe  even  more  places in this document, but this is mostly
     because  I  feel  that the things I mention is so important that I
     don't  want  anyone  to miss it, even if the person in question is
     only  browsing  through the documentation.  Another reason is that
     this  documentation  was written over a rather long period in time
     and thus I sometimes forgot what I'd previously written...  

        You may  also  notice  that there are some section numbers that
     are  jumped  over in this manual. This is because the commands and
     options  described  in  those  sections  does  not  apply  to  the
     evaluation  version  of  LhA.  They  are  in  the  registered-user
     version  of  the  manual,  however.  There  may  be  some dangling
     references  to  these  sections left in this manual, as I have not
     had  the  time to check everything, my apologies for any confusion
     this  may  cause,  but  it  will hopefully be fixed until the next
     public release.  

     1.2 System requirements      

        LhA will  run  on  any Amiga system with at least 512KB RAM and
     one  diskdrive,  though 1MB RAM and two diskdrives or harddrive is
     recommended  to  get  the  most  out  of LhA.  LhA will run on any
     KickStart  from  version  1.2  and up.  If LhA is used on a system
     with  the  new  KickStart  2.x  it  will adapt to this and utilize
     features  new to this release.  Special care has been taken in the
     program  design to make the program execute as fast as possible on


     


     V1.0                     LhA User's Guide                   Page 2


     68020,   030   and   040-processors   without   sacrificing  68000
     compatibility. Currently, LhA requires `arp.library'.  

     1.3 Installation       

        All you  have  to do to install `LhA' is to copy the executable
     file  `LhA'  and  `LhASetup' to some directory in your shell path,
     and  optionally  run the `LhASetup' program to set up your default
     options in the LHAOPTS environment variable.  

     1.4 Terminology       

        In this  section  I  will  try to explain some of the words and
     expressions that are used throughout this manual.  

     ARCHIVE  -  An archive is a file containing one or more files in a
     compressed  or  non-compressed  state and related information like
     file names, last modification date/time, filenotes etc.  

     COMPRESSION  -  The process of encoding redundant information into
     data  requiring less storage space.  There are a multitude of ways
     you  can  do  this  in.  LhA uses a modified version of Lempel-Ziv
     compression  with  block-adaptive  Huffman coding and a dictionary
     size of 4096 or 8192 characters.  

     COMPRESSION  RATIO - The compression ratio figures reported by LhA
     are  calculated  as  follows:   ratio  =  (1  - (CompressedSize) /
     (OriginalSize))  * 100.  I.e how many percent of the file that was
     GAINED.   Other  archivers may use other methods.  LHA and ARJ for
     MS-DOS,   for   example,   calculates   the   ratio  as:  ratio  =
     (CompressedSize)  / (OriginalSize), i.e.  how large the compressed
     file   is   compared   to   the   original  file.   (MSDOSratio  =
     1-(ADOSratio/100)).   The higher the LhA compression ratio is, the
     better  the  compression.  Most Amiga archivers use the same ratio
     calculation method as I use.  

     EXTRACTION  or DECOMPRESSION - The process of recreating the exact
     information   that   was  previously  compressed  (file  contents,
     modification   date,   filenotes,   protection   flags,  directory
     structure etc.) 

     SELF-EXTRACTION  MODULE  (SFX-Module) - This is an archive that is
     an executable file capable of extracting self-contained files.  


     1.5 LhA - what is it?   

        LhA is  a  file  archiving  program  written especially for the
     Commodore  Amiga  computer.  The  primary  goal  is to provide the
     Amiga   community   with  a  fast,  efficient  and  reliable  file
     archiver.  LhA creates and processes archive files with the '.LZH'
     suffix,  and  is  fully compatible with both MSDOS LhArc and MSDOS


     


     V1.0                     LhA User's Guide                   Page 3


     LhA,  as  well as the Amiga LhArc, LZ, and LhArcA. It handles both
     the  old  LhArc-style  compression  (-lh1-,  -lh0-)  and  the  new
     LHA-style (-lh5-, -lh4-).  

        LhA is  at the time of release by far the fastest LhArc archive
     handler,  and  is more reliable and robust than both LZ and LhArc.
     Neither  LZ  nor  LhArc  even comes close to the speed of LhA. The
     compression  and  decompression  routines  are written entirely in
     what   I'd  call  very  optimized  68000  assembly  language.  The
     routines   were  written  directly  from  scratch  in  pure  68000
     assembler,  and  did  not,  as  in  the other Amiga LZH-archivers,
     start  as  a compiled C-program. Because of this, the routines are
     both  smaller  and,  more importantly, faster than they would have
     been  if  I'd used compiler output as source material. You can get
     an  idea of how fast LhA is compared to other archivers by looking
     at  the  speed  test  results  in section 1.7.1 of this manual. An
     even better way to see how fast LhA is, is to try it yourself! 

        Before writing  this  program I used LhArc a lot, to archive my
     source  codes  automatically  for  example.  But since LhArc often
     behaved  in  a  very  weird  way when updating archives, sometimes
     adding  files  twice,  and  sometimes  not  adding files at all, I
     decided  to write an archiver of my own. And this is the result...
     LZ  was no alternative since it did not have the commands I needed
     (u,f) and was very unreliable at the time.  

     1.6 What is a file archiver anyway?  

        A file  archiver,  as  the  name  implies,  archives  files. It
     collects  the  files  you  specify and stores them all in a single
     archive-file.  Almost  all  file  archivers  (including  LhA) also
     compress  the  files  before  putting them in the archive-file, so
     that  they  occupy  less diskspace. When you wish to retrieve some
     file  from  the  archive,  the  archiver decompresses the file and
     restores  it's file attributes (Last modification date, time, file
     comments,  protection  status  etc.).  A file archiver can usually
     also  process archive files in different ways, for instance delete
     files,   freshen   files,  print  files  etc.  See  the  'ARCHIVER
     COMMANDS'  section  of  this  manual  for  an  explanation  of the
     different actions LhA is capable of performing.  

        The most  common  use  for  a file archiver is for transferring
     several  related  files  via modem. It would be a very tedious and
     cumbersome  task to transfer for instance every single source file
     of  a  big  project  separately,  so why not put them all into one
     single  file?  This is where the file archiver comes in, we simply
     feed  the  archiver  with  all  the files we wish to transmit, and
     then  just  transfer  the  single  archive-file  the  achiver then
     creates!  Then  the  receiver just use the archiver to extract all
     files  from  the archive-file onto his harddisk (or floppy). Also,
     if  the  files were compressed by the archiver, it would take less
     time  to  transfer  the  files  as well, which means the phonecall


     


     V1.0                     LhA User's Guide                   Page 4


     will  cost  us  less.   There  are of course other uses for a file
     archiver,  you can use it as a harddisk-backup program for example
     (if  you  have another harddisk to put the archive file on..), and
     you  can  use it to stuff away files you don't use very often, and
     then  when  you want to use them you simply extract the files from
     the  archive,  and  then  delete  them when you're finished (saves
     disk  space). Personally I use LhA a lot to make automatic backups
     of my source codes for various projects.  

        The file  compression  methods  vary  from  very  simple,  less
     effective,  and  fast (Run-Length Encoding, RLE, for instance), to
     complex,   effective   and   relatively   time-consuming   methods
     (Lempel-Ziv-Huffman,  LZHUF,  as  used in LhA). The method used in
     LZH-Archivers  (LZHUF) is to date probably the best algorithm used
     in  an  archiver.  There  are other similar methods, like ZIP, but
     they  are  not  as  good. Even though the files become smaller you
     don't  lose any information when compressing them, the information
     is   just   stored   in  a  different  way.  Basically,  redundant
     (repeated)  information  is  replaced with a pointer to some other
     part  of  the file, where this information is located. For example
     in  this  text  the word 'archive' appears at several places, this
     is  an example of redundant data. Simply put, if a file compressor
     was  to  compress  this  file  it would let the first occurence of
     'archive'  remain  unchanged,  and then it would replace all other
     occurences  of  'archive'  with  a  pointer to the first one. When
     decompressing  the  file,  the  archiver  uses  these  pointers to
     restore the file to its original state.  

        Files which  have  already  been  compressed with one technique
     can  generally  not  be  compressed any further by feeding them to
     the  same  file  compressing  program  again  (If  that  had  been
     possible,  modem transfers would have been a lot cheaper :), since
     the  redundant  information  has  already  been  eliminated. It is
     possible  though  to  compress files output by certain compressors
     (RunLength-Encoders  for  example)  further  by  feeding them to a
     program   that  uses  another  method  (like  LZHUF),  since  they
     eliminate different kinds of redundant information.  

     1.7 Why should I use LhA?   

        There are  several  reasons  why  you should use LhA instead of
     other archivers for the Amiga; here are some examples: 


     1)  It  extracts  files  faster  than  any other popular archiver,
        including LZ, Zoo, LhArcA, PkAZip, Pkax, Arc, and Ape.  


     2)  It  compresses  files faster than any other archiver, with the
        exception  for  Zoo  V2.01,  which  has much looser compression
        ratio and thus produces much larger archives.  



     


     V1.0                     LhA User's Guide                   Page 5


     3)  It  produces  smaller  archives  than  any other archiver.  LZ
        V1.92  and  Zoo  V2.10 produces archives which are approx.  the
        same  size, but are much slower than LhA on both extraction and
        compression.  


     4)  LhA  has  a  number of features that no other archiver for the
        Amiga  has,  for  example  the  ability  to create and maintain
        multiple-volume archives.  


     5)  I  will  support  and  continue development on LhA and related
        utilities  for  as long as the users supports me by registering
        themselves  as  users  of  LhA  - without your support I cannot
        keep working on this.  



     1.7.1 How fast is it?    

        The following    tables    compares   LhA's   compression   and
     decompression  with  several  other  archivers.  The T field shows
     compression or decompression time in seconds and 

       T(archiver)
     Q=-----------  i.e. how much longer the archiver takes compared
        T(LhA_lh5)  to LhA in -lh5- mode. For example, A Q value of 2
     means  that the archiver in question takes twice as long as LhA in
     -lh5-  mode  to  extract/compress  all files.  The tests were made
     with  a  A3000/25Mhz/4M  SCRAM/2M CHIP and with all files in RAM:.
     A  special  program  (`time')  was  used to measure execution time
     with  the `timer.device'.  The times exclude loading and unloading
     time  to  more  accurately  reflect  the actual program speed. All
     tests  were  made  with  the  programs  in  their  default mode of
     operation,  except  for  LhA  `max' where the optimal command line
     parameters for the files were chosen by hand (-v0 -Qh64).  

                              Extraction speed

                        Archive: `the brown corpus'
         Type: 3.2MB of text, binary and graphics data in 21 files

         +-----+-----+-----+-----+-----+-----+-----+-----+------+------+
         | LhA | LZ  | LhA | LZ  |LhArc| Zoo |Zoo  | Zoo |PkAZip| Pkax |
         |     |V1.92|     |     |     |V2.01|V2.1 |V2.1 |V1.02 | V1.0 |
         |-lh5-|-lh5-|-lh1-|-lh1-|-lh1-| old |old  |-lh5-| imp. |crunch|
      +--+-----+-----+-----+-----+-----+-----+-----+-----+------+------+
      |T |13.3 |27.0 |36.0 |51.2 |90.5 |24.2 |76.1 |57.5 | 45.0 | 51.1 |
      +--+-----+-----+-----+-----+-----+-----+-----+-----+------+------+
      |Q | 1.00| 2.03| 2.71| 3.85| 6.80| 1.82| 5.72| 4.32|  3.38|  3.84|
      +--+-----+-----+-----+-----+-----+-----+-----+-----+------+------+



     


     V1.0                     LhA User's Guide                   Page 6


                           Archive: `dlgmsgs.lha'
                           Type: 760K text file.
         +-----+-----+-----+-----+-----+-----+-----+-----+------+------+
         | LhA | LZ  | LhA | LZ  |LhArc| Zoo |Zoo  | Zoo |PkAZip| Pkax |
         |     |V1.92|     |     |     |V2.01|V2.1 |V2.1 |V1.02 | V1.0 |
         |-lh5-|-lh5-|-lh1-|-lh1-|-lh1-| old |old  |-lh5-|impld.|crunch|
      +--+-----+-----+-----+-----+-----+-----+-----+-----+------+------+
      |T | 3.1 | 6.4 | 9.2 |13.1 |21.8 | 5.9 |19.3 |14.1 | 11.2 | 13.8 |
      +--+-----+-----+-----+-----+-----+-----+-----+-----+------+------+
      |Q | 1.00| 2.07| 2.97| 4.23| 7.03| 1.90| 6.22| 4.54|  3.61|  4.45|
      +--+-----+-----+-----+-----+-----+-----+-----+-----+------+------+

                             Compression speed

                        Archive: `the brown corpus'
         Type: 3.2MB of text, binary and graphics data in 21 files


         +-----+-----+-----+-----+-----+-----+-----+------+------+------+
         | LhA | LZ  | LhA | LZ  |LhArc| Zoo | Zoo |PkAZip|LhArcA| LhA  |
         |     |V1.92|     |     |     |V2.01|V2.1 |V1.02 |V1.01 | V1.0 |
         |-lh5-|-lh5-|-lh1-|-lh1-|-lh1-| old |-lh5-| imp. |-lh1- | max  |
      +--+-----+-----+-----+-----+-----+-----+-----+------+------+------+
      |T | 208 | 396 | 205 | 285 | 571 | 76  | 512 | 394  | 386  |  206 |
      +--+-----+-----+-----+-----+-----+-----+-----+------+------+------+
      |Q | 1.00| 1.90| 0.99| 1.37| 2.75| 0.37| 2.46|  1.89|  1.86|  0.99|
      +--+-----+-----+-----+-----+-----+-----+-----+------+------+------+

         Resulting sizes :   LhA    -lh5-   1139622  1.0000
                             LZ     -lh5-   1139178  0.9996
                             LhA    -lh1-   1199680  1.0527
                             LZ     -lh1-   1199209  1.0523
                             LhArc  -lh1-   1248729  1.0957
                             LhArcA -lh1-   1248729  1.0957
                             PkAZip Impl.   1196698  1.0501
                             Zoo    -lh5-   1140114  1.0004
                             Zoo      old   1491922  1.3091
                             LhA     max    1136244  0.9970 (-Qh64)

                           Archive: `dlgmsgs.lha'
                           Type: 760K text file.


         +-----+-----+-----+-----+------+-----+------+------+------+
         | LhA | LZ  | LhA | LZ  |LhArc | Zoo | Zoo  |PkAZip|LhArcA|
         |     |V1.92|     |     |      |V2.01|V2.1  |V1.02 |V1.01 |
         |-lh5-|-lh5-|-lh1-|-lh1-|-lh1- | old |-lh5- |impld.|-lh1- |
      +--+-----+-----+-----+-----+------+-----+------+------+------+
      |T |30.5 |78.0 |39.8 |63.4 |115.4 |15.8 |120.8 | 45.3 | 84.1 |
      +--+-----+-----+-----+-----+------+-----+------+------+------+
      |Q | 1.00| 2.56| 1.30| 2.07|  3.78| 0.52|  3.96|  1.49|  2.76|
      +--+-----+-----+-----+-----+------+-----+------+-------------+


     


     V1.0                     LhA User's Guide                   Page 7



         Resulting sizes :   LhA    -lh5-   274648  1.0000
                             LZ     -lh5-   274635  1.0000
                             LhA    -lh1-   293076  1.0671
                             LZ     -lh1-   293084  1.0671
                             LhArc  -lh1-   303100  1.1036
                             LhArcA -lh1-   303100  1.0957
                             PkAZip Impl.   278837  1.0153
                             Zoo    -lh5-   274839  1.0001
                             Zoo     old    420212  1.5300
                             LhA     max    273383  0.9954  (-Qh64)



     1.8 Compatibility and Amiga-specific features    

        LhA is  aimed  at full compatibility with LHA V2.12 for MS-DOS,
     which  is  an improvement of the original LhArc V1.13. LhA is also
     compatible  with  LhArc,  LhArcA  and  LZ  for the Commodore Amiga
     computer.  However,  LhArc  and LhArcA cannot process any archives
     with  headers  of  level  1 or 2, or files compressed with the new
     LHA  compression  (-lh5-).  LZ  1.92  cannot process archives with
     headers  of level 2. LHA V2.12 can process all archives created by
     LhA.  

        The LhA-specific  extended  data  structures in the level 2 and
     level 1 headers are laid out as follows: 

        The OS-ID  stored  in  level  1  and level 2 headers is `A' for
     Amiga. The only OS-IDs I know of currently are: 

           ID Operating system 
          --- ---------------- 
          `A' AMIGA 
          `F' OS-9 / FLEX 
          `H' Human68K 
          `K' OS-9 / M68K 
          `M' MS-DOS 
          `m' Mac OS 
          `U' UNIX 
          `2' OS/2 
          `3' OS-386 
          `9' OS-9 


        The OS-ID  indicates  on  what operating system the archive was
     created.  If  an  entry in an archive has an OS-ID other that `A',
     LhA  will  ignore the file attributes and other OS-specific fields
     and  use  the  default  attribute / whatever. If LhA encounters an
     extended  data-field it does not recognize it issues a warning and
     continues  processing.  The  warning  does not generate any return
     code (if nothing goes wrong LhA returns 0 as the return code).  


     


     V1.0                     LhA User's Guide                   Page 8



                            +------------------+
                            |   DISPLAY FILE   |
                            |------------------|
                            | 0x0003 [Length]  |
                            | 0x70   [ID Byte] |
                            +------------------+

     This extension is used to flag files that should be displayed upon
     extraction.

                            +------------------+
                            |    FILENOTE      |
                            +------------------+
                            | WORD   [Length]  |
                            | 0x71   [ID Byte] |
                            | char[] [Notestr] |
                            +------------------+

     Obviously,  this  extension  is used to store filenotes in level 1
     and  level  2  headers.. In level 0 headers the filenote is stored
     in another way.  

                                    NOTE

          The  WORD mentioned above and the 0x0003 in DISPLAY FILE
          are  of  course  like  all  other  words  in the archive
          structure  stored  in  `low-endian' (Intel) format, i.e.
          with the lower byte first followed by the high byte.  


     1.9 About the author program history and future 

        I, Stefan  Boberg  -  the  author  of  the  programs in the LhA
     family,  am  19  years  old  and  studying  `applied  physics  and
     electrical  engineering',  first  year, at the Linköping Institute
     of  Technology.  I started working on LhA mainly because I thought
     there  was  no  real  good  archiver  for the Amiga, the ones that
     existed  at  the  time  (June 1991) I began work on it were either
     too  slow, had loose compression ratios or were bugged/crippled so
     that  they  could  not  do what I needed an archiver to do.  I use
     archivers  mainly  to  back  up sources for my various programming
     projects   automatically,  and  I  also  use  it  a  lot  to  just
     decompress  archives  from  bulletin  board  systems  and computer
     networks.  Another  reason for doing it was to earn a little extra
     money,  which  I  badly  need, being a poor student with a _small_
     allowance..  :) 

        Anyway, I  intend  to  continue  developing LhA and the related
     programs  as  long  as  I  can,  and  will release other, related,
     programs  as well, like an intuition- driven archiver called `LhI'
     for  instance.  A  file  system to enable you to treat archives as


     


     V1.0                     LhA User's Guide                   Page 9


     directories  is also in the pipeline and will be released sometime
     in  the  beginning  in  the  next year. Other archive formats than
     LhA-style  archives  will  also be supported in the filesystem and
     intuition  driven  archiver by means of special resident libraries
     and  handlers.  When  these  will  be finished depends on how much
     time  I  can  devote to developing the programs (have to take care
     of my studies you know).  

        But this  all  depends  on  YOU,  if  I get a good response and
     people  register  I  will  continue  work on the program.  If not,
     well,  then  I  might as well drop it for other projects, and just
     make  minor  bugfixes  to  it instead of continuing development...
     It's  your  choice!   If  you  would like to express your opinions
     about  the  program,  or  have an idea for a feature you'd like to
     see  in  the  next  version,  please drop me a line via EMail (see
     section  4  for  addresses)  or  write  a  letter.  I would really
     appreciate  it!   You MUST report any bugs you find (though I hope
     you won't find any), so I can fix it right away! 




































     


     V1.0                     LhA User's Guide                  Page 10


     2 Tutorial       

        This section  of  the  manual  contains a number of examples on
     how  to  accomplish  various  tasks using the LhA archiver.  There
     are  examples  for the novice user as well as more advanced users.
     Even  if you have used archivers a lot before you may want to take
     a  look  at  the examples to see what the commands and options new
     to LhA can do.  

     <this section is yet to be written> 












































     


     V1.0                     LhA User's Guide                  Page 11


     3 Reference guide      

        This section  of  the manual is intended to be used mostly as a
     reference  guide  when  you  want  to  know  exactly how a certain
     option  or  command  works.   If  you haven't used LhA before (but
     used  other  archivers),  you  should  at least glance through the
     descriptions  of  all  the  commands and options to get an idea of
     what LhA can do.  

     3.1 Command line syntax     

        The command line syntax is as follows: 

     LhA  [-options]  <Command>  <Archive> [[HomeDir] FileSpec] [@file]
     [destdir] 

        The items  in  square  brackets  are optional, and the items in
     angle  brackets  are  mandatory.   Read the following sections for
     exact information on the various items.  


     3.1.1 Specifying options      

        Unlike other  archivers,  LhA lets you specify options anywhere
     on  the  command  line.   The  option specifier is `-' (dash), any
     items  on  the  command  line  that begins with this character are
     considered  to  be  option  switches.   If  you  want to specify a
     filename  or  something  else  that  begins  with a `-' character,
     enclose  the  name  in  double  quotes  or use double dashes.  For
     example,  to  specify  a  filename  of  `-minus',  you could write
     either `"-minus"' or `--minus'.  

        If you  write  `-o' the option `o' is enabled regardless of its
     initial  state.   If  you  want to disable an option, append a `0'
     (zero)  after the option, like in `-o0'.  If an option is followed
     by any other numeric character than `0', the option is enabled.  

        You can  specify  multiple  options  without  having  a dash in
     front  of  every  option  character.  An example would be `-ox0m',
     which  would  enable  option  `o',  disable  option `x' and enable
     option  `m'.   The  only  exception  is options taking multi-digit
     numeric  arguments,  which  must  be  followed  by  whitespace and
     another  dash  if  you want to specify more options (like in `-b32
     -ox0m').  

     3.1.2 Specifying commands      

        The first  non-option  argument on the command line MUST be the
     command  specifier.   The commands are case-insensitive (`l' means
     the  same  thing  as  `L'),  and  only  the first character of the
     argument  is  considered  (except  for  the  `vv',  `mb'  and `mf'
     commands),  so  you  may  use  verbose  commands such as `list' or


     


     V1.0                     LhA User's Guide                  Page 12


     `add' instead of `l' and `a', respectively.  

     3.1.3 Specifying archives      

        The archive   specification   must  be  the  second  non-option
     argument  (the  first  being  the command specification).  In most
     cases  you can specify a pattern here.  The exceptions are the `m'
     (move  files  to  archive),  `r'  (repair  archive)  ,  `s' (split
     archive) commands.  

     3.1.4 Specifying action files     

        The action    files    are    specified   after   the   archive
     specification.  The action file specifications may include pattern
     matching  tokens.  Note  that, as all other file specifications in
     LhA,   action   file  specifications  may  contain  wildcards  for
     directory   names   as  well  -  `hd:*/*/dir/*.h'  is  valid,  for
     example.  

     3.1.5 Home directories      

        Home directories  is  a  new  concept  introduced  with LhA, it
     provides  an  easy  way of specifying what parts of pathnames that
     should  be  preserved  in  the  archive.  It  can  also be used to
     simplify  specifications  of  mutiple files in the same directory.
     It is perhaps best explained with a couple of examples: 

      EXAMPLE 

       Example 1: 

       lha   -x   a  newarc  dh0:files/  file1  dir1/file2  dir2/file3
       dh0:files2/ *.c 

       This would add the following files to `newarc.lha': 

        Added file(s)         Stored as 
        -----------------     -------------- 
        dh0:files/file1       file1 
        dh0:files/dir1/file2  dir1/file2 
        dh0:files/dir2/file3  dir2/file3 
        dh0:files2/*.c        *.c 

       Example 2: 

       lha -r a newarc hd:tmp/ *.c *.h hd:px/ *.s *.snd *.iff 

        This would  add  all  `.c' and `.h' files in `hd:tmp' and it's
       subdirectories,  storing  pathnames, but excluding the `hd:tmp'
       part.   For  instance, the file `hd:tmp/src/foo/arargh.c' would
       be  stored  in  the  archive  with the name `src/foo/arargh.c'.
       Additionally,  all `.s', `.snd' and `.iff' files in `hd:px' and


     


     V1.0                     LhA User's Guide                  Page 13


       its  subdirectories  will be added, excluding the `hd:px/' part
       of the name.  

        Homedir specifications  must  end in `/' or `:', otherwise they
     won't be recognized as such.  

        Homedir specifications  may contain wildcards and other pattern
     matching tokens.  

     3.1.6 Recursive file collection     

        When collecting  files recursively (by using the -r option with
     a   or  u  commands),  action  file  specs  are  treated  somewhat
     differently.  Home  directories  work  the  same  way as usual. In
     recursive  file  collection mode, the last node of the action file
     specification  (i.e. the file name part) is used as a pattern that
     is  compared  to  all  files  in  the  specified directory and its
     subdirectories.   Some  examples to hopefully clarify the somewhat
     fuzzy description: 

      EXAMPLE 

       Example 1: 

       lha -r a myarc * 

       This  will  add  all  files  in  the  current directory and its
       subdirectories to `myarc.lha'.  

       Example 2: 

       lha -r a myarc *.c *.cpp 

       Will  add  all  `.c'  and `.cpp' files in the current directory
       and its subdirectories to `myarc.lha'.  

       Example 3: 

       lha -r a myarc ram:work/* hd:tmp/*.c 

       Will  add  all  files in `ram:work' and its subdirectories - as
       well  as all `.c' files in `hd:tmp' and its subdirectories - to
       `myarc.lha'.  The  full pathnames will be stored (excluding the
       device specification of course).  

       Example 4: 

       lha -r a myarc ram:work/ * hd:tmp/ *.c 

       Will  do  exactly the same as example 3, but LhA will not store
       the  `ram:work/'  and  `hd:tmp/'  parts of the filenames in the
       archive. (Because of the home directory specifications).  


     


     V1.0                     LhA User's Guide                  Page 14





     3.1.7 Specifying destination directory     

        You can  optionally  specify  a  destination  directory for the
     files  written  by  the  extract  commands  by writing the desired
     directory  name  as  the LAST argument on the command line.  If no
     destination  directory  is  specified,  LhA  will  use the current
     directory   as   the   destination.    The  destination  directory
     specification  must  end  in  `:' or `/', just like home directory
     specifications,  or LhA would not be able to distinguish directory
     names from action file specs.  

      EXAMPLE 

       `lha  x corpus ram:' would extract the contents of `corpus.lzh'
       to ram:.  

       `lha  x  project  *.c  dl:tmp/'  would  extract the contents of
       `project.lzh' to the `dl:tmp' directory.  

     3.1.8 `@'-files       

        `@'-files are  files that are treated as if their contents were
     written  on  the command line.  They can be used to specify files,
     options  commands  and  anything  else  can  be  specified  on the
     command  line.   An example would be the command `lha -r e arc.lzh
     *.[chas]  @filelist  ram:', which would extract all files matching
     `*.[chas]'  or  the  files  listed in `filelist' to ram:. Carriage
     returns and linefeeds in `@'-files are treated as whitespace.  

     3.1.9 LhA limitations      

        LhA has  been  written to be as flexible as possible, but there
     are some limitations that you should be aware of as a user: 

     o  LhA pathnames are currently limited to 255 characters.  

     o  When  headers  of level 0 are used, filenotes may not be longer
       than  254-{filename length (including path)} chars.  With header
       level  1  or  2  filenotes may be up to 255 characters (AmigaDOS
       currently  only  supports filenotes of max 80 characters so this
       should not be any problem).  

     o  The  number  of  files  in an archive files are only limited by
       available disk space.  

     o  The  number of arguments on the command line is only limited by
       available RAM memory and the used shell.  

     o  The  allowed  number  of wildcard-matched files is only limited


     


     V1.0                     LhA User's Guide                  Page 15


       by  available  RAM memory.  Any number of files may be extracted
       or added to an archive in one go.  




















































     


     V1.0                     LhA User's Guide                  Page 16


     3.3 Pattern matching      

        This section  describes  how  LhA  handles pattern matching and
     file  collection.   For  a discussion on what commands will accept
     file   patterns,   please  refer  to  section  3.1  (Command  line
     syntax).  

        Pattern matching  in LhA is always case-insensitive.  (i.e.  it
     doesn't  matter  if  you  write  names in upper- or lowercase, `a'
     will match both `a' and `A'.  

     3.3.0 Exactly what is pattern matching anyway?  

        Pattern matching  is  a means of specifying several files in an
     elegant  and  relatively  straightforward manner.  Instead of just
     lining  up  all  the  file  names you would like to work on on the
     command  line  (which  can be very tedious when a lot of files are
     involved)  you  can  use  a  technique  called `pattern matching'.
     With  this technique you - as the name implies - use the fact that
     the  names  of  the  files you wish to work on often share certain
     characteristics.   For  example,  the  names  of  files containing
     C-source  almost  always  end in `.c', so if you would like to add
     all  C-source  files  in  the  current  directory  you  could take
     advantage  of  this  fact  by specifying a pattern to that matches
     these  files  (in  this  case  such  a  pattern  would  be `*.c').
     Exactly  how  these patterns are built up are explained in section
     3.3.1  forward.  Also read the sections explaining `how to specify
     action files' and `how to specify archive files'.  

     3.3.1 Accepted pattern tokens     

        LhA accepts  all valid KickStart 2.x and 1.x pattern tokens, it
     also  accepts  all  ARP tokens (works more or less the same way as
     KS2.x).  

        In the  explanations  that  follow, the term `expression' means
     either  a  single  token  or character (such as `x' or `?'), or an
     alternation  (such as `(ab|cd|ef)'), or a character class (such as
     `[a-z,A-Z]').  

     3.3.1.1 Question mark (?)     

        The question  mark  matches  any  one  _single_  character. The
     question mark is sometimes also referred to as the `wildchar'.  

      EXAMPLE 

       `d?' :  matches  all  two-letter  names  beginning  with  a `d'
              character.  For example `dm' or 'd8'.  


       `ab?d' :  matches all four-letter names beginning with `ab' and


     


     V1.0                     LhA User's Guide                  Page 17


              ending  in  `d'.   For example `abcd', `abad' and `ab_d'
              but not `abd' or `acid'.  


       `f??' :  matches  all three-letter names beginning in `f'.  For
              example  `foo',  `fel',  `fan'  but  not  `ab', `f18' or
              `fini' 



     3.3.1.2 Star/Asterisk (*)      


        The star   matches   any  sequence  of  any  length,  including
     sequences  with  length  zero  (i.e.   the  null string).  The `*'
     character is often called the `wildcard' character.  

      EXAMPLE 

       `a*' :  matches  all  names  starting  with an `a', for example
              `abba', `anette'.  


       `a*z' :  matches `auugaz', `awacz' and `az' and any other names
              starting with an `a' and ending in `z'.  


       `s*f*n' :  matches `stefan', `staffan', `steffen', `sfn' or any
              other  name starting with an `s', followed by any number
              of  arbitrary characters, followed by an `f', and ending
              in `n'.  


       `*.lzh' : matches all names ending in `.lzh' 



     3.3.1.3 Hash mark (#)     

        The hash  mark  matches  a subsequent expression (pattern) 0 or
     more  times.   The  simplest  example  of  this is `#?' which will
     match any filename.  

      EXAMPLE 

       `#a' :  matches  any name consisting of the `a' character only.
              For example `aaaa' and `a'.  


       `b#ad' :  matches  any  name  beginning in `b', followed by any
              number  (including  0)  of `a' characters, and ending in
              `d'.  For example `bad', `bd' and `baaaad'.  


     


     V1.0                     LhA User's Guide                  Page 18





     3.3.1.4 Square brackets ([])     

        The square  brackets  enclose  a  set  of  characters to match.
     They  are  a  bit like the parentheses but match single-characters
     only.   You can either specify just the letters you would like the
     expression  to  match,  as in `[abcx]' (this would match `a', `b',
     `c'  and  `x'), or you can specify ranges, like `[a-c,x-z]' (which
     would match `a', `b', `c' and `x', `y', `z').  

      EXAMPLE 

       `prg.[1-9]' :  matches  any  five-letter  name  beginning  with
              `prg.',  followed  by  a  non-zero  digit.   For example
              `prg.1', 'Prg.8'.  


       `Ver_[1-2].[0-9].[a-z]' :    matches   any   nine-letter   name
              beginning  with `ver_' followed by either a `1' or a `2'
              character,  followed by a dot (`.'), a digit and finally
              a  character  between  `a' and `z' (i.e.  all letters in
              the   english   alphabet).    For  example  `Ver_1.2.a',
              `Ver_2.9.d'.  


       `#[a-z 0-9]'   matches   any  name  containing  any  number  of
              alphanumeric  characters  (i.e.   either in the alphabet
              or  numeric).   For  example `ados' or `PDP11'.  It does
              not  match  `AXE.dat'  however,  since it contains a `.'
              which is not in the specified character range.  


       `*.[chas]' :  matches  any  name  ending in `.c', `.h', `.a' or
              `.s'.  



     3.3.1.5 Parentheses and the vertical bar   

        Parentheses can  be  used to achieve several things.  The first
     way  of  using them is just like in mathematics - to group several
     individual  expressions into one single expression.  The other way
     is  to provide a list of acceptable expressions separated with `|'
     chars.   The  entire  parenthesized  expression  is treated as one
     token  by other tokens (like `#' and `~').  These two are actually
     the  same,  since  the  first is just a special case of the second
     use.  This is easier to explain with a couple of examples: 

      EXAMPLE 



     


     V1.0                     LhA User's Guide                  Page 19


       `(abc|def|xyz)' :  will  match names `abc', `def' and `xyz' and
              no other.  


       `*.(doc|prf|man)' :  will  match  all  names  ending in `.doc',
              `.prf' or `.man'.  


       `~(pfile)' :  will  match  all  names except `pfile'. (NB: this
              expression  is  NOT  the  same  thing  as  `~pfile', see
              section 3.3.1.6 for details) 


       `(*.c|*.h|*.doc|ab*)' :  will  match  all files ending in `.c',
              `.h' or `.doc' and all files beginning with `ab'.  


        Typing an  action-file  spec of `(xxx|yyy|zzz)' is functionally
     equivalent  to  writing  `xxx  yyy  zzz' (xxx, yyy, zzz can be any
     valid patterns, including patterns with parentheses).  

        Parentheses can be nested.  


     3.3.1.6 Tilde (~)      

        The tilde  negates  the  immediately  following expression.  It
     negates  ONLY  the  immediately  following  token or paranthesized
     expressiom,  not  the  entire  following expression as some people
     think.  

      EXAMPLE 

       `~x?' :  matches any two-letter name except those starting with
              `x'.   For  example  `ah',  `ko' or 'ba' but not 'x0' or
              'xi'.  


       `~(x?)' :  matches  anything  except  two-letter names starting
              with  `x'.   For  example  `xaa' or `ab' but not `xa' or
              'x9'.  


       `~(#?)' :  matches  nothing  at  all.   (The  tilde negates the
              `#?', which matches all names).  


       `~lha' :  matches  all strings that doesn't begin with `l', and
              ends  in  'ha'.   For  example  `uha', `why_lha' but not
              'lumbha' or 'lha'.  




     


     V1.0                     LhA User's Guide                  Page 20


     3.3.1.7 Percent sign (%)     

        The percent   sign  represents  the  empty  string.   i.e.   it
     matches  0  characters always.  It is only useful in parenthesized
     expressions  and  must not follow a the `#' token (`#%' would be a
     rather  pointless  pattern,  since  the % always matches exactly 0
     characters).  

      EXAMPLE 

       `lha(.doc|.man|%)' : matches `lha.doc', `lha.man' and `lha'.  


       `l%u%a' :  matches  `lua'  only;  the percent signs are totally
              irrelevant here and can just as well be removed.  







































     


     V1.0                     LhA User's Guide                  Page 21


     3.4 Commands       

        This section  describes  the  commands for archive manipulation
     and  maintenance LhA offers to you.  See section 3.1.2 (Specifying
     commands)  for  details  on how to specify commands on the command
     line.  

     3.4.1 `a' Add files to archive   

        Obviously, this  command  adds a number of files to one or more
     archives.   If  the specified archive does not already exist, then
     it  will  be created.  You cannot add files to an archive if these
     already  exist in the archive.  If you attempt to do so, a warning
     will  be  issued, but LhA will continue adding the other files you
     have specified.  

        Only the  filenames  are  stored  by  default,  if  you want to
     preserve  some  disk  structure and directory names, you will have
     to  use the -x option to turn path preservation on. If you want to
     archive  entire  subdirectories  recursively  you  can  use the -r
     option,  which  will  turn  on  the -x option automatically. These
     options are explained in section 3.5.  

      EXAMPLE 

       `LhA  a  myarchive  dict.txt'  would add the file `dict.txt' to
       the archive `myarchive.lha'.  

       `LhA  a  arc.lzh  *.c *.h' would cause all files in the current
       directory  ending  in  `.c'  or `.h' to be added to the archive
       `arc.lzh' 

       `LhA  -r -0 arch *.c' would cause all `.c' files in the current
       directory  and  all  it's  subdirectories  to  be  added to the
       archive  `arch.lzh'  using  the  -lh1-  (LhArc 1.x) compression
       method.  

       `LhA  -r  archive  src:(lharca|lha)/*.[cha]  asrc:*.asm'  would
       cause  all  `.c',  `.h'  and `.a' files in the `src:lharca' and
       `src:lha'  directories  and  subdirectories,  as  well  as  all
       `.asm'  files  in  the  `asrc:'  directory,  to be added to the
       archive `archive.lha'.  



     3.4.3 `d' Delete files from archive   

        This command removes one or more files from an archive.  


                                    NOTE



     


     V1.0                     LhA User's Guide                  Page 22


          Files  deleted  with the `d' command cannot be recovered
          from  the  archive  file  in  any  way.   Once a file is
          deleted from an archive it is gone forever.  


     3.4.4 `e' Extract files from archive   

        This command  is  used  to  extract  files from an archive.  It
     works  just  like  the  `x' command, except this command takes the
     `-x'  option  into  consideration  (the  `x' command assumes it is
     set).   If  the  `-x'  option  is  disabled,  files  are extracted
     without  their pathnames, and if it's enabled LhA will extract all
     files  with  the  pathnames  and  create the needed directories if
     they do not already exist.  

      EXAMPLE 

       `lha  -x0  e  foo.lzh  ram:'  will  extract  all files from the
       archive  `foo.lzh'  to  ram:,  without paths (all files will be
       put in the ram:  root directory).  

       `lha  x foo.lzh *.c ram:' will extract all files ending in `.c'
       to  ram:,  with  paths  -  i.e.  it  will recreate the original
       directory structure.  

       See the tutorial section for more examples 


     3.4.5 `f' Freshen files in archive   

        This command  is  used  to  freshen  files in an archive.  I.e.
     replace  older  files  in  the  archive  with  new  files from the
     current  directory.   Pathnames  are considered if the `-x' option
     is  enabled.   This command never adds any files to an archive, it
     just  replaces those files that have older modification dates than
     the corresponding files in the current directory.  

      EXAMPLE 

       `lha  f  /aab/lha'  will  freshen  all  files  in  the  archive
       '/aab/lha.lha'.  

       `lha  f  /aab/fsys *.[ch]' will freshen all `.c' and `.h' files
       in the archive '/aab/fsys.lha'.  



     3.4.8 `l' List archive contents (terse)   

        This command  gives  a terse list of the contents of an archive
     file,   including   file   names  (without  paths),  original  and
     compressed length, last modification date and compression ratio.  


     


     V1.0                     LhA User's Guide                  Page 23



        Files with  pathnames  are  indicated by having a `+' character
     in front of the name. See example below.  

        Filenotes are  NOT  displayed  when using this command, use the
     `v' or `vv' command to display those.  

        The action  file  specification is used to determine what files
     to list. If no filespecs are given, all files will be listed.  

      EXAMPLE 

        1> lha -N l dl:c64new 

        Listing of archive 'dl:c64new.lzh': 
        Original  Packed Ratio    Date     Time    Name 
        -------- ------- ----- --------- --------  ------------- 
           36098   26979 25.2% 20-Oct-91 22:40:16 +Stormlord 
             482     293 39.2% 20-Oct-91 22:41:36 +Stormlord.info 
           23016   12100 47.4% 21-Oct-91 08:28:18  PlaySID 
        -------- ------- ----- --------- -------- 
           59596   39372 33.9% 25-Oct-91 21:22:48   3 files 

        The `+'  (plus) signs in front of the first two names indicate
       that  the  file  has a path which is not displayed with the `l'
       command  (use  the  `v' or `vv' command to display pathnames as
       well).  The `-N' suppresses the copyright notice.  


     3.4.9 `m' Move files to archive   

        This command  works  just  like the `a' command, but the source
     files are deleted after successfully adding them to the archive.  

      EXAMPLE 

       `lha   m  includes.lzh  src:*.[hi]'  will  move  all  files  in
       directory  `src:'  having  filenames  ending in `.h' or `.i' to
       the archive `includes.lzh'.  

       `lha  m  myarc.lzh lhb_log.911012 lhb_idx.911012' will move the
       two  specified files (`lhb_log.911012' and `lhb_idx.911012') to
       the archive `myarc.lzh'.  


     3.4.14 `p' Print files to stdout   

        This command  works  just like the extract (`e', `x') commands,
     but  sends the extracted output to stdout (normally the console or
     output redirection file).  




     


     V1.0                     LhA User's Guide                  Page 24


     3.4.17 `t' Test archive integrity    

        This command   tests   the   specified  archives  integrity  by
     extracting  the  files they contain to nowhereland, i.e.  the data
     is  decompressed only, not written to any file.  This command only
     works  on  entire archives, i.e.  you cannot just test one file in
     an  archive.  If this command fails, the archive is corrupted, and
     a warning return code is returned.  

      EXAMPLE 

       `lha  t  work:arcs/*'  will check the integrity of all archives
       in directory `work:arcs'.  

       `lha    t   s:envarc.lzh'   will   check   the   integrity   of
       `s:envarc.lzh' 

       `lha  -R  t  dh0:*' will check the integrity of all archives on
       the `dh0' volume (`-R' = Collect archives recursively).  


     3.4.18 `u' Update archive     

        As the  command name implies, this command updates archives. It
     adds  files  that are not yet in the archive and replaces existing
     but  older files. The last modification date for files are used to
     determine which file is the newest one.  

      EXAMPLE 

       `lha  u  /aab/lha.lzh  *.c'  will update archive `/aab/lha.lzh'
       with all `.c' files in the current directory.  


     3.4.19 `v' List archive (verbose)    

        This command  works just like the `l' command, but displays the
     full  pathname  of the file, while `l' only displays the name node
     without  path.   Another  difference  between `l' and the `v'/`vv'
     commands  is  that  the  `l'  command  does  not  show  filenotes.
     Filenotes  are  displayed on a separate line with a colon (`:') in
     front of it, just like the AmigaDOS `list' command.  

        The action  file  specification is used to determine what files
     to list. If no filespecs are given, all files will be listed.  

      EXAMPLE 

        1> lha -N v dl:c64new 

        Listing of archive 'dl:c64new.lzh': 
        Original  Packed Ratio    Date     Time    Name 


     


     V1.0                     LhA User's Guide                  Page 25


        -------- ------- ----- --------- --------  ------------- 
           36098   26979 25.2% 20-Oct-91 22:40:16  S/Stormlord 
             482     293 39.2% 20-Oct-91 22:41:36  S/Stormlord.info 
           23016   12100 47.4% 21-Oct-91 08:28:18  PlaySID 
        : New version with `equalizers' 
        -------- ------- ----- --------- -------- 
           59596   39372 33.9% 25-Oct-91 21:22:48   3 files 

        The `-N' suppresses the copyright notice.  


     3.4.20 `vv' List archive (full)    

        This command  is  just  like  the `v' command, but displays all
     available   information  in  a  slightly  different  format.   The
     original  and  packed size, last modification date and compression
     ratio   is  listed  just  as  with  the  `v'  command,  plus  file
     attributes  (`Atts'),  compression method, file CRC and DOS ID for
     the  OS  the  files  were compressed on.  If no DOS ID is given in
     the  archive  (header  level  <  1), a question mark is displayed.
     The  currently  known  DOS  IDs  are `A' and `M', where `A' is for
     AmigaDOS  and  `M'  is for MS-DOS.  The filename including path is
     displayed  on  a  separate  line.  File notes are displayed in the
     same  way as the `v' command does it, on a separate line after the
     filename.  

        The action  file  specification is used to determine what files
     to list. If no filespecs are given, all files will be listed.  

      EXAMPLE 

        1> lha -N vv dl:c64new 

        Listing of archive 'dl:c64new.lzh': 
        Original  Packed Ratio    Date     Time     Atts   Method CRC  DOS 
        -------- ------- ----- --------- -------- -------- ------ ---- --- 
        S/Stormlord 
           36098   26979 25.2% 20-Oct-91 22:40:16 ----rwed  -lh1- 2093  ? 
        S/Stormlord.info 
             482     293 39.2% 20-Oct-91 22:41:36 ----rwed  -lh1- 710E  ? 
        PlaySID 
           23016   12100 47.4% 21-Oct-91 08:28:18 ----rwed  -lh5- 89FF  ? 
        : New version with `equalizers' 
        -------- ------- ----- --------- -------- 
           59596   39372 33.9% 25-Oct-91 21:22:48   3 files 

        The `-N' option suppresses the copyright notice.  



       3.4.21 `x' Extract files with path   



     


     V1.0                     LhA User's Guide                  Page 26


          This command  is  exactly the same as the `e' command, but it
       always  extracts  files  with paths (i.e.  same as using the `e'
       command  with  `-x'  option  on), regardless of the state of the
       `-x' option.  


















































     


     V1.0                     LhA User's Guide                  Page 27


       3.5 Options       

          This section   describes   the   various   options  that  are
       available  to  you when using LhA. For a detailed explanation on
       how  to  enable/disable  specific  options  and  where  you  can
       specify  options, see section 3.1.1.  The letters in parantheses
       indicate what commands the options affect.  

           Code  Commands 
           ----- ------------ 
           (add) a,u,f 
           (all) all commands 
           (ext) e,x 
           (upx) a,u,f,e,x 
           (upd) a,u,f,d 


       3.5.1 `-a' (upx) Preserve file attributes   
         This option,  when  enabled,  will  make LhA store and restore
       file protection flags. The eight attributes are listed below: 

           r:  Read  - This flag is set for files which are readable (a
              file is read-protected if the flag is unset).  

           w:  Write  -  This flag is set for files which are writeable
              (a file is write-protected if the flag is unset).  

           e:  Execute   -  This  flag  is  set  for  files  which  are
              executable  (binary load files or shell scripts must have
              this bit set).  

           d:  Delete   -   This  flag  is  set  for  files  which  are
              deleteable  (a  file  is  protected from deletion if this
              flag is unset).  

           a:  Archived   -   This  flag  is  used  by  harddisk-backup
              programs  (and  optionally  LhA)  to  indicate what files
              have  been changed since the last backup. If this flag is
              set  it  indicates  that the file is unchanged, and if it
              is  unset  the  file  has  changed since the last backup.
              The  bit  is  cleared  whenever  a  write  is made to the
              file.  

           p:  Pure  - This flag is set for binary load files which are
              pure  (i.e.   multitasking  reentrant),  and  can be made
              resident  with  the  AmigaDOS  'resident'  or  equivalent
              command.  

           s:  Script - This flag is set for shell script files.  

           h:  Hidden  -  This  flag  is  set for files that should not
              show  up  on  directory  listings. It is not supported by


     


     V1.0                     LhA User's Guide                  Page 28


              AmigaDOS  shell/CLI  commands,  and  should  thus  not be
              used.  

        Please refer   to   an   AmigaDOS   manual  for  more  detailed
       explanation of the various file protection flags.  
        If the  option  is  disabled  (by  issuing `-a0' on the command
       line  or  in  the  LHAOPTS environment variable), the protection
       flags  are  set  to  '----RWED'  for  all extracted and archived
       files.   Important:  You MUST have this option enabled both when
       archiving   and   extracting   to   preserve   file   attributes
       correctly.  

                                     NOTE

            Use  this option only if you know that the archive has
            been  compressed or will be decompressed with an Amiga
            archiver,   since   the   attribute  field  format  is
            different  on different operating systems.  If you use
            archive  headers  of  level  1  or higher you need not
            care  about  this since the archiver then detects what
            OS  the  archive  was  created  on  and  only uses the
            protection  flags  if  it  is  the  native OS.  Always
            leave  this  option enabled when using archive headers
            of level 1 and higher! 

        This option is enabled by default.  

       3.5.2 `-A' (upd) Set archive attributes   
        When this  option  is  active, LhA will set the file protection
       flags of all archives it updates to `----RW-D'.  
        This option is ON by default.  

       3.5.3 `-b' (all) Set I/O buffer size  
        This option  will set the size of the I/O buffers LhA uses when
       reading  and  writing  to archive files.  You can set the buffer
       size  to  anything  from  8KB to 64 KB.  Larger buffers normally
       makes  LhA operate slightly faster (depends on the nature of the
       archive and what files are selected).  

        EXAMPLE 
         'lha  -b64  a  archive.lzh hubba' :  Will add file `hubba' to
         `archive.lzh' using an I/O buffer of 64K.  

                                     NOTE

            Running  LhA with a small I/O buffer on an accelerated
            (68020  and  up)  Amiga  will  degrade  compression  /
            decompression  performance significantly!  The default
            buffer  size  of  32KB  is  enough  in most cases, and
            works  well  on  an unaccelerated Amiga as well.  Also
            note  that when running LhA and doing all work on some
            ram  disk,  the I/O buffer size is less important, and


     


     V1.0                     LhA User's Guide                  Page 29


            it  is  unnecessary  to  run  with a large buffer. The
            default buffer size of 32K is OK for most purposes.  


          The default buffer size is 32K (32768 bytes) 

       3.5.5 `-c' (all) Confirm files    

          When this  option is active LhA will ask you for confirmation
       on all files and archives that are acted upon.  

          This option is OFF by default.  

       3.5.6 `-C' (ext) Clear arc-bit on extract  

          When this  option  is  active  LhA will mask the A-protection
       bit  for  all  files it extracts. This is useful when extracting
       files  from  archives  to  a harddisk, since the extracted files
       would  not  be  recognized as new or changed files by the backup
       program if the A-bit was set.  

          This option is ON by default.  

       3.5.8 `-D' (all) Alternate progress display   

          This switch  is  used to change the look of the byte progress
       indicator   that   LhA   displays  when  it  is  compressing  or
       decompressing  files.  There  are  several  different  types  of
       progress  indicators,  you can specify which one you want with a
       digit after the '-D' string.  


       0:  This  is  the  default  progress  indicator, it displays how
          many  bytes of the file LhA has processed, and how many bytes
          there is in the file like this: 

          (xxxxxxx/yyyyyyy)  where  x  = bytes processed, and y = total
          bytes in the file.  


       1:  This  progress indicator simply shows a `rotating line' that
          is  rotated  45  degrees  every  time  the progress indicator
          display is updated).  


       2:  This  progress  indicator shows how many percent of the file
          LhA has processed.  


       3:  This   progress   indicator  displays  a  growing  bar  that
          indicates how much of the file that has been processed.  



     


     V1.0                     LhA User's Guide                  Page 30



        EXAMPLE 

         `lha  -D2  a  src  *.asm'  will  add  files  to  the  archive
         `src.lha' with a percentage indicator (type 2).  


          The default progress indication type is 0.  

       3.5.11 `-f' (all) Ignore filenotes    

          When this  option  is  enabled, LhA will not store or restore
       any  filenotes.  There is no real need to do this, since it does
       not  cause any compatibility problems with other systems because
       of  the  way the filenotes are stored.  If problems should arise
       anyway,  try  enabling  this option or use headers of level 1 or
       higher if the target system supports it.  

          See the  section  about  compatibility (1.7) for a discussion
       about this and other compatibility issues.  

          This option  is  OFF  by  default  (filenotes  are stored and
       restored) 

       3.5.12 `-F' (all) Use fast progress display  

          In this  mode LhA uses a different method of display progress
       for  the  extract  and  test  commands.  Normally,  LhA  emits a
       linefeed   (LF)   after  each  file  has  been  processed,  thus
       advancing/scrolling  the display one line. In this mode LhA only
       emits  a  LF  when  an  error  occurs. This is useful if you are
       testing  or  extracting files with a lot of small files, and the
       scrolling takes more time than the actual decompression! 

                                     NOTE

            If  you  use  the  default style progress display on a
            very  fast  Amiga  system  (68020+),  beware  that the
            scrolling  of  the  screen may actually take more time
            than  the  actual  decompression!   This is especially
            true  for  archives  with  many small files.  So don't
            use  it  unless  you  really  _have_ to see what files
            have   been   processed.    LhA  scrolls  the  display
            whenever  an  error occurs on a file, so you still can
            see  when  an  error  occurs  (better, even, since the
            only  filenames that remain on screen after the action
            is complete are those that failed!).  


          This option  is  OFF  by  default  (use  old  style  progress
       indication).  



     


     V1.0                     LhA User's Guide                  Page 31


       3.5.16 `-i' (all) Read filelist from file  

          With this  option  you can include an action file list from a
       file instead of specifying all action files on a command line.  

        EXAMPLE 

         If the file `ArcFList' contains the following lines: 

         ---> Start of ArcFList data   (this line is NOT in the file) 

         LhA.c ArcList.c FSys/*.(c|h|i|asm|prf|man|doc|txt) 

         ---> End of ArcFList data     (this line is NOT in the file) 

         The following command line: 

         `lha -iArcFList u /aab/lha.lzh' 

         Will do the same thing as this command: 

         `lha        u        /aab/lha.lzh       LhA.c       ArcList.c
         FSys/*.(c|h|i|asm|prf|man|doc|txt)' 


                                     NOTE

              This  command  works  almost  exactly like entering
              the following command line: 

              LhA ? ???? @file 

              Thus  you  can include options in your -i file. The
              only  difference is that the -i file cannot contain
              a  destination  directory  specification  while you
              can  do this with the @file method. The destination
              directory  will  always  be  taken from the command
              line when using the -i option.  



          See the  section  about  `@'(include)-files  for an alternate
       way of doing this.  

       3.5.17 `-k' (all) Keep partial files   

          This option  will, if it's enabled, prevent LhA from deleting
       temporary  files when an error occurs.  Normally temporary files
       that  fail  the  CRC  check, cause I/O errors or are interrupted
       with  CTRL-C  are  deleted  before  exiting  LhA  with  an error
       message,  with  this  option  you  can  force  LhA to keep those
       (often)  partial  files.   This  can  be  useful  when trying to


     


     V1.0                     LhA User's Guide                  Page 32


       recover  data  from  corrupted  archives  -  LhA will attempt to
       extract  the  data  from  the  erraneous  archive file and put a
       special  filenote on the file to indicate that it failed the CRC
       check and probably is corrupted.  

          This option is OFF by default (partial files are deleted).  

       3.5.18 `-l' (ALL) Make filenames lowercase   

          This option,  when  active,  will  cause  LhA  to convert all
       filenames  to  lowercase.   This is useful when extracting files
       from  archives created on MSDOS systems, whose filenames are all
       uppercase,  which  look  completely  braindead (IMHO).  Use this
       option to make them look nicer! 

        EXAMPLE 
         `LhA    -l   x   myarc'   will   extract   all   files   from
         `myarc.(lzh|lha)', making all filenames lowercase.  

          This option if OFF by default 

       3.5.19 `-L' (ALL) Create filelist    

          When this  option  is  enabled, it will cause LhA to create a
       list  of  the  files  it  has acted upon (i.e. what files in the
       last  operation  that  matched the action file specification you
       gave  on  the  command  line).  The  name  of the list file must
       follow  immediately after the `-L' string. If you need spaces in
       the filename, enclose the name in double quotes.  

        EXAMPLE 

         `lha  -Lram:ListFile  d  src.lzh *.asm' will delete all files
         in  `src.lzh'  with  names ending in `.asm' and create a list
         of the deleted files in the file `ram:ListFile'.  

         `lha   -L"ram:List   File"   u  src.lzh  *.asm'  will  update
         `src.lzh',   and  create  a  list  of  the  files  that  were
         added/replaced in the file `ram:List File'.  

                                     NOTE

            The  file  that  this  option creates is a plain ASCII
            file  with  every  name  on a separate line. The files
            created  by this option are suitable for use as action
            or  exclude  lists  for  LhA  using  the  `@'  or `-i'
            options.  


          This option is OFF by default (no filelist created).  

       3.5.20 `-m' (ALL) No messages for query  


     


     V1.0                     LhA User's Guide                  Page 33



          When this  option  is  active  LhA  will suppress all queries
       that  normally  are issued before overwriting existing files for
       example.   Enabling  this  option  will also cause LhA to ignore
       TelOps  (autoshow  files).   When this option is on you LhA will
       behave  like  you  choose  the default action in response to all
       the queries.  

          This option if OFF by default.  

       3.5.21 `-n' (upx) No byte progress indicator  

          When this  option  is enabled, the byte progress indicator is
       disabled!  This  may  be  desirable  when running the program on
       extremely  fast  processors  (read:   the  MC68040),  if  you're
       running  a  console on a 24bit graphics board, or simply because
       you  think  it  looks  awful  :)...   I  usually  leave it on to
       display  the  speed  at  which  LhA  operates!  It may slow down
       operations  a  bit,  but  the  difference between on and off are
       very  slight.   Turn  it  off  if  you  need  those milliseconds
       badly...  

          This option is OFF by default.  

       3.5.22 `-N' (all) No progress indicator   

          This option  is  similar  to  the  `-n' option, but supresses
       higher-level  progress  indication  (i.e.   the  display of what
       file  LhA  is  bashing).  It  also  disables the short copyright
       banner that is printed at each invokation otherwise.  

                                     NOTE

            This   option's   behaviour  is  different  (and  more
            useful,  IMO).   from  that of LZ's `-N' switch, which
            simply  turns  off  ALL  LZs console output, including
            error   messages   and   queries  (like  using  output
            redirection to NIL:).  


          This option  is  off  by  default  (file  progress indication
       ON).  

       3.5.23 `-o' (upx) On or after date  

          This option  is  used  to specify a date to force LhA to only
       add/extract  files  that  have  a last modification-date that is
       the same or newer than the specified date.  

        EXAMPLE 
         `lha  -o13-dec-90  e  xyzzy ram:' will extract all files last
         modified  on December 13th 1990 or later from 'xyzzy.lzh/lha'


     


     V1.0                     LhA User's Guide                  Page 34


         to ram: 

         `lha  -ojan-91  a  bogus.lzh  *.c'  will add all files in the
         current  directory  ending  in  `.c'  that have been modified
         since January 1st 1991 to the archive file `bogus.lzh'.  

       3.5.25 `-p' (ALL) Pause after loading   

          When selected,  this  option will cause LhA to pause and wait
       for  the  user to press any key before executing a command. This
       is  useful  for  users  with  floppies,  who can then swap disks
       after LhA has been loaded and is waiting for a keypress.  

          This option is OFF by default.  

       3.5.26 `-P' (ALL) Set task priority   

          This option  is  used  to  set  the LhA process priority. The
       priority  may  be  set  to  any  value  in  the  range -5 to +5,
       including  0.  The  higher  priority  you give LhA, the more CPU
       time  it  will  grab  (processes with lower priority will almost
       never    get   the   chance   to   run   since   LhA   is   very
       processor-intensive).   Setting it to a low value (like -5) will
       make  LhA  only  use  the  processor time that nobody else wants
       (nice  when  running  LhA  as  a background task while running a
       comm program).  

          The priority  must  be  specified  with  a single (optionally
       prefixed   with  a  minus  sign  for  negative  priority)  digit
       immediately after the P as in: 

        EXAMPLE 
         `lha  -P-1  a  nonsense.lzh  bogus.txt' will make LhA add the
         file  `bogus.txt'  to  the archive `nonsense.lzh', running at
         priority -1.  

          The default  priority  is  inherited from the calling process
       (i.e.   the CLI or program that called Execute()/RunCommand() ).
       This is usually zero (0).  

       3.5.27 `-q' (ALL) Be quiet    

          This option will supress ALL messages from LhA.  

          This option is OFF by default 

       3.5.28 `-Q' (ALL) Alternate option set   

          This option  character  (`Q') will cause all following option
       characters  until  next  space  character  to  be interpreted as
       extended  options.   These  are  documented  at  the end of this
       section.  


     


     V1.0                     LhA User's Guide                  Page 35


       3.5.29 `-r' (add) Collect action files recursively  


       3.5.30 `-R' (ALL) Collect archive files recursively  

          When this  option  is  enabled  LhA  will  search for archive
       files  recursively using the archive file specification given at
       the  command  line.  This  works  like  the  `-r' option but for
       archive files.  

        EXAMPLE 
         `lha  -R  l  dh0:files/a*'  will  list  the  contents  of all
         archive   files   whose  names  begin  in  `a'  in  directory
         `dh0:files' and its subdirectories.  

         `lha  -R  l *' will list the contents of all archive files in
         the current directory and its subdirectories.  

         `lha  -R  l  myarc'  will  list  the contents of all archives
         called  'myarc.lzh'  or  `myarc.lha' in the current directory
         and its subdirectories.  

          This option is OFF by default.  

       3.5.32 `-S' (add) Set A-flag on archived files 

          When this  option  is  on,  LhA will set the A (for Archived)
       file  protection  flag  on  all  files  that  are  added  to  an
       archive.   This  can  be used to simplify automatic backups when
       used  together with the -O (Add files without A-flag only).  See
       section 3.5.24 for more details.  

          This option is OFF by default.  

       3.5.33 `-t' (upx) Only new files   

          When this  option  is  active,  LhA  will  not  overwrite  or
       replace  any files.  In extract mode, LhA will not even consider
       overwriting any existing files.  

                                     NOTE

            This option overrides the `-T' option.  


          This option is OFF by default.  

       3.5.34 `-T' (upx) New and newer files  

          When this  option  is  active,  LhA will overwrite or replace
       files  that  already exists and are older than the current file,
       and  create files that does not already exist.  In extract mode,


     


     V1.0                     LhA User's Guide                  Page 36


       LhA  will  overwrite only older files and create files that does
       not  already  exist.  In archive update mode, this option is not
       useful since the `u' command already achieves the same effect.  

                                     NOTE

            This option overrides the `-t' option.  


          This option is OFF by default.  

       3.5.35 `-u' (ALL) Make filenames uppercase   

          This option,  when  active,  will  force  LhA  to convert all
       filenames   to  uppercase.   This  can  be  useful  when  making
       archives  that  are supposed to be used on MSDOS-Systems running
       LhArc/LHA.   While  these have no problems with extracting files
       with  mixed-case  filenames,  the pattern matching routines will
       not   work   correctly.   Never  use  this  for  Amiga-archives,
       all-uppercase  filenames  look  very  dull  and reminds me of an
       ancient-looking  brain-damaged  operating system MicroSoft wrote
       once upon a time very long ago (`mess-loss').  

          This option is OFF by default.  

       3.5.36 `-U' (upx) Set update interval   

          This option  is  used to set the interval (in bytes) at which
       LhA  updates  the  byte progress indicator. The desired interval
       must  be  expressed  in bytes (using digits only or the suffixes
       listed  in  section 3.5.37), and must immediately follow the `U'
       character.  

        EXAMPLE 

         `LhA  -U4096  a  bar.lzh  *.c' will add all c-source files in
         the  current directory to `bar.lzh' with a progress indicator
         interval of 4096 (4K) bytes.  

         `LhA  -U32768  a bar.lzh *.c' will do the same as the example
         above, but with a update interval of 32768 bytes (32K).  

                                     NOTE

            This  option does currently not affect the update rate
            of  the  LHA decompression (`-lh5-' compression mode).
            When  LhA  decompresses  files  with  this compression
            mode,  the  update  rate  will  be whatever I/O buffer
            size  is  used  (set with the `-b' option). The reason
            of   this   behaviour  is  that  the  normal  progress
            indication  would  slow  down  decompression.  In  the
            evaluation  version,  only  the -lh1- decompression is


     


     V1.0                     LhA User's Guide                  Page 37


            affected   by   this  option,  for  various  unobvious
            reasons.  


          The default  update interval is 8192 (8K) bytes for -lh1- and
       -lh5-  compression  and 4096 (4K) bytes for -lh1- decompression.
       The  update  rate  for  -lh5- decompression is determined by the
       I/O buffer size setting (see note above).  

       3.5.37 `-v' (add) Set compression speed   

          This option   can   be  used  to  increase  or  decrease  the
       compression  speed.  -v0 is the slowest, and -v9 is the fastest.
       As  usual  you  can't get everything for nothing, so compression
       performance  is  slightly  looser with -v9 than with -v0 but the
       difference  in  speed  can  be significant (especially with some
       binary  graphics  data). Higher compression speed is attained by
       using less statistics in the compression phase.  

          The default  compression  speed  is  5 - works well in 99% of
       all cases.  

          .sect 2 3.5.38 `-w' (upd) Set work directory 

          This option  is used to specify what directory LhA should use
       to  store  temporary  files.  Temporary  files  are created when
       adding  files  to  archives, or when updating an archive in some
       way  (like  deleting  or  freshening  files). The work directory
       name must be specified immediately after the `-w' string.  

        EXAMPLE 

         `LhA   -wrad:tmp  a  MyArc.lzh  *'  will  use  the  directory
         `rad:tmp'  as  temporary  storage  location  when  adding all
         files in the current directory to the archive `MyArc.lzh'.  

          By default  LhA  uses the `T:' directory for temporary files,
       if  this  assign  or  device  does  not  exist, LhA will use the
       current directory.  

       3.5.39 `-x' (all) Preserve and use pathnames  


       3.5.40 `-X' (ALL) Do not append suffix  

          When this  option  is  enabled, LhA will not append an `.lzh'
       or  `.lha'  suffix  to  the  given  archive  name.   The default
       behaviour  is  to append a suffix of `.lha' or `.lzh' (suffix is
       chosen  depending  on  compression  mode)  if  the name does not
       already have an extension.  

          This option is OFF by default (suffixes are appended).  


     


     V1.0                     LhA User's Guide                  Page 38


       3.5.41 `-Y' (add) Store big files with ratio 

          When this  option  is  enabled,  LhA  will  store  big  files
       (>32KB)  without  compression if compression ratio is lower than
       3%.  This is because extraction times of these files are long on
       slower machines.  

          This option is OFF by default (all files are compressed).  

       3.5.42 `-z' (add) Do not compress files  

          This option,  when  active,  will  force  LhA  to  store  all
       updated  or  added  files  in  the archive without attempting to
       compress  them.   Useful  for  making fast backups where archive
       size  is  of  no  importance.   It  is not advisable to use this
       option  when  making  archives  for  distribution  via  modem or
       networks  since  the  archive will end up much larger than if it
       was compressed.  

        EXAMPLE 
         `lha  -z a foo.lha *.bmp' Will store all files in the current
         directory  with  a  suffix  of  `.bmp'  in  the  archive file
         `foo.lha' without compressing them.  

          This option is OFF by default.  

       3.5.43 `-Z' (add) Compress archives    

          This option  will  cause  LhA  to attempt compressing already
       compressed files.  

          By default,  LhA will not attempt to compress files which are
       already  compressed (typically archive files or picture files in
       GIF  or  JPEG  format).  The  file  type  is determined from the
       suffix,  and  files with names ending in `.lzh', `.lha', `.zoo',
       `.zip',  `arj',  `.arc', `.dms', `.wrp', `.lhw', `.zap', `.pak',
       `.pp', `.gif', or `.jpg'.  

          The reason   why  already  compressed  files  should  not  be
       compressed  is  that  the  number  of bytes gained by this is so
       small    that    it    is    not    worth    the    time   spent
       compressing/decompressing it.  

          This option is OFF by default.  

       3.5.45 `-0' (add) Use LhArc 1.x compression  

          This option  causes  LhA  to  use  the  old -lh1- compression
       method  when  updating  archives.  This  compression  method  is
       slightly  faster  than  the  normal  -lh5-  compression  but has
       looser compression and is much slower to decompress.  



     


     V1.0                     LhA User's Guide                  Page 39


          When this   compression   mode   is  used,  LhA  defaults  to
       appending a suffix of `.lzh' when creating archives.  

          When this  option  is specified, option `-2' is automatically
       deactivated.  

          By default the -lh5- compression is used.  

       3.5.46 `-2' (add) Use LhA compression   

          This option  causes  LhA  to  use  the  new -lh5- compression
       method  when  updating  archives.  This  compression  method  is
       slightly  slower  then the old -lh1- compression but has tighter
       compression and is much faster to decompress.  

          When this   compression   mode   is  used,  LhA  defaults  to
       appending a suffix of `.lha' when creating archives.  

          When this  option  is specified, option `-0' is automatically
       deactivated.  

          This is the default compression mode.  

       3.5.49 `-Qh' (add) Set Huffman buffer size  

          This option  can  be  used to set the size of the buffer used
       in  LHA  compression  (default or selected with the `-2' option)
       for  collecting  statistics. The size of this buffer affects the
       compression  ratio  in  unpredictable  ways.  As a general rule,
       keep  this at the default, but if you are compressing homogenous
       data  with  a  relatively  fixed  relative  frequency of symbols
       (like  text  files),  setting this to a large value will improve
       compression.  Binaries  generally compress best with the default
       setting.  

          The Huffman  buffer may be of any size between 4K and 64K and
       must  be  specified immediately following the `-Qh' string, with
       digits only or with the suffixes described in section 3.5.37.  

        EXAMPLE 

         `LhA  -Qh32  -2  a  foo.lha *' will compress all files in the
         current  directory using a Huffman buffer size of 32768 (32K)
         bytes.  

         `LhA  -Qh4  -2  a  foo.lha  *' will compress all files in the
         current  directory  using  a Huffman buffer size of 4096 (4K)
         bytes.  

          The default Huffman buffer size is 16K.  




     


     V1.0                     LhA User's Guide                  Page 40




       3.6 LhA error situations     

          ADD: 

          If a  user-specified  is  not  found during an add operation,
       LhA  will  continue  processing,  and  will keep the archive and
       terminate with an error condition.  

          In a  disk  full  condition  or any other file I/O error, LhA
       will  promptly  terminate with an error condition and delete the
       temporary  archive  file  unless  the  `-k' (keep partial files)
       option has been specified on the command line or in LHAOPTS.  


          MOVE: 

          LhA will  only delete files that have been successfully added
       to   the  archive.   If  you  have  specified  the  `-Qt'  (Test
       temporary  archives)  option,  LhA  will abort on any error.  If
       you  have  specified  the  `-k' (Keep partial files) option, LhA
       will not delete the temporary archive upon an abort.  


          EXTRACT: 

          In a  disk  full  condition  or any other file error LhA will
       promptly  terminate  with  an  error  condition  and  delete the
       current output file (unless the `-k' option has been enabled).  
























     


     V1.0                     LhA User's Guide                  Page 41


       4 Politics       

       4.1 Registration       

          LhA is  a copyrighted product that has been made available to
       you  under  the  concept of "Shareware".  It has never been, nor
       will  it  ever  be  in  the  "Public Domain".  You are granted a
       limited  license in order to evaluate these programs.  If, after
       a  3  or  4  week  period of evaluation, you find that LhA suits
       your  archiving  needs,  please  register.   By cooperating with
       this  concept  you  help to ensure continued development of this
       product.  

          Registered users  will  be  shipped  a  disk  with the latest
       release  version  of  LhA together with a keyfile. This keyfile,
       once   copied   to  your  system,  will  disable  the  ShareWare
       reminders  that always open when you start or quit the Intuition
       driven programs in the LhA family.  

          Site license  information  for  commercial and government use
       can be obtained directly from the author.  

          No person(s)   or   businesses  other  than  the  author  are
       authorized  to  accept  any registration or distribution fees in
       any  form  whatsoever,  except  as specified by the author.  The
       only  people  who  will  be acknowledged as registered users are
       those  who  have  sent SEK 100,- for Nordic addresses (SEK 110,-
       for  other European countries, SEK 115,- for overseas addresses)
       to: 

                               LhA Development
                              c/o Stefan Boberg
                              Rydsvägen 242 A:25
                              S-58251 Linköping
                               Sweden / Europe


          As one  of  the  safest  and  easiest  ways  to  send in your
       registration  fee  from  other  countries,  I  would  suggest an
       international  postal money order -- your local post office will
       be  happy  to  provide you with more information about this.  It
       also  has  the  advantage  that  the  exchange  of currencies is
       handled automatically and the surcharge is negligible.  

          Should the  above  not  work out satisfyingly, you can either
       send  a  cheque  or  money  order  payable  to  Stefan Boberg in
       Swedish  Crowns  or have your bank transfer the registration fee
       to  the  "Svenska  Handelsbanken"  account  145.587.932  "Stefan
       Boberg".  Beware:  International  transfers  via banks are quite
       expensive.  

          In any  case,  be sure to provide me with your name, address,


     


     V1.0                     LhA User's Guide                  Page 42


       fido-nodenumber/InterNet  address and international phone number
       for   filing   purposes.  You  can  send  this  information  via
       electronic  mail,  if  you  wish.   If you don't mind, this data
       will  be  stored  and  processed in electronic form.  There is a
       sample   registration   form   you  can  fill  in  in  the  file
       "OrderForm".  

          Please allow two to eight weeks for delivery.  

       4.2 Distribution       

          Basically, LhA  may  be  distributed  freely  as  long as the
       following conditions are met: 

          The distributor  may  only  charge  a  fee up to the costs of
       obtaining   a  public  domain  diskette  from  Fred  Fish.   The
       distributor  agrees  to cease distributing the programs and data
       involved  if  requested to do so by the author.  The distributor
       may  only distribute an unmodified copy of the original program,
       with  all  the  supplied  documentation  and  copyright  notices
       intact.  

          For more details, see the chapter called "License".  

       4.3 Support       

          If you  have  any  suggestions,  bug  reports  or  questions,
       please  contact  the  author  of  LhA  at  the  address given in
       section 4.1 or at one of the electronic mail addresses below: 

                 InterNet: boberg@lysator.liu.se 
                 or      : stefan_boberg@augs.se 

                 FIDONet : "Stefan Boberg" at node 2:204/404 

          When sending  in bug reports, please state exactly under what
       circumstances  the  bug  occurred,  what  equipment was used and
       what   happened.   If  possible  also  try  to  give  me  enough
       information  to reproduce the bug.  It is very difficult to find
       bugs  when  you  don't know exactly what happened.  Please don't
       just  send  messages  like "it can't extract files from archives
       sometimes",  that  really  doesn't help me.  If possible, submit
       the offending file/archive to me so I can test it myself.  

       4.4 License       

       1.  This  license  applies to the product called "LhA", a set of
          programs  for  the  Commodore-Amiga  computer,  published  by
          Stefan  Boberg  under  the  concepts  of  ShareWare,  and the
          accompanying  documentation,  example files and anything else
          that   comes   with  the  original  distribution.  The  terms
          "Programs"  and  "LhA"  below,  refer  to  this product.  The


     


     V1.0                     LhA User's Guide                  Page 43


          licensee is addressed as "you".  

       2.  You   may   copy  and  distribute  verbatim  copies  of  the
          programs'  executable  code  and documentation as you receive
          it,  in  any  medium,  provided  that  you  conspicuosly  and
          appropriately   publish   only   the   original,   unmodified
          programs,  with  all  copyright  notices  and  disclaimers of
          warranty   intact   and   including   all   the  accompanying
          documentation,  example  files  and  anything  else that came
          with the original.  

                                <file list here>


       3.  You  may  not  copy and/or distribute these programs without
          the  accompanying  documentation  and  other additional files
          that  came  with  the  original.   You  may  not  copy and/or
          distribute modified versions of these programs.  

       4.  You   may   not  copy,  modify,  sublicense,  distribute  or
          transfer  the  programs  except  as  expressly provided under
          this   license.   Any  attempt  otherwise  to  copy,  modify,
          sublicense,  distribute or transfer the programs is void, and
          will  automatically terminate your rights to use the programs
          under  this  license.   However,  parties  who  have received
          copies,  or rights to use copies, from you under this license
          will  not  have  their  licenses  terminated  so long as such
          parties remain in full compliance.  

       5.  By  copying,  distributing  and/or  using  the  programs you
          indicate  your  acceptance  of this license to do so, and all
          its terms and conditions.  

       6.  Each  time  you  redistribute  the  programs,  the recipient
          automatically  receives  a license from the original licensor
          to  copy, distribute and/or use the programs subject to these
          terms  and  conditions.   You  may  not  impose  any  further
          restrictions  on  the  recipients'  exercise  of  the  rights
          granted herein.  

       7.  You  may  not disassemble, decompile, re-source or otherwise
          reverse engineer the programs.  

       8.  You  may  use the programs for a period of up to 30 days for
          evaluation.  After that, you have to register.  

       9.  If  you wish to incorporate parts of the programs into other
          programs, write to the author to ask for permission.  

       10.  You  agree  to  cease  distributing  the  programs and data
          involved if requested to do so by author.  



     


     V1.0                     LhA User's Guide                  Page 44


       11.  You  may  charge  a fee to recover distribution costs.  The
          fee  for  diskette distribution may not be more than the cost
          to obtain a public domain diskette from Fred Fish.  


       4.5 No Warranty      

          THERE IS   NO  WARRANTY  FOR  THE  PROGRAMS,  TO  THE  EXTENT
       PERMITTED  BY  APPLICABLE  LAW.  EXCEPT WHEN OTHERWISE STATED IN
       WRITING  THE  COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE
       PROGRAMS  "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
       OR   IMPLIED,   INCLUDING,  BUT  NOT  LIMITED  TO,  THE  IMPLIED
       WARRANTIES  OF  MERCHANTABILITY  AND  FITNESS  FOR  A PARTICULAR
       PURPOSE.   THE  ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF
       THE  PROGRAMS IS WITH YOU.  SHOULD THE PROGRAMS PROVE DEFECTIVE,
       YOU  ASSUME  THE  COST  OF  ALL  NECESSARY  SERVICING, REPAIR OR
       CORRECTION.  

          IN NO  EVENT  UNLESS  REQUIRED BY APPLICABLE LAW OR AGREED TO
       IN  WRITING  WILL  ANY  COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO
       MAY  REDISTRIBUTE  THE PROGRAMS AS PERMITTED ABOVE, BE LIABLE TO
       YOU  FOR  DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
       CONSEQUENTIAL  DAMAGES  ARISING  OUT  OF THE USE OR INABILITY TO
       USE  THE  PROGRAMS (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR
       DATA  BEING  RENDERED  INACCURATE  OR LOSSES SUSTAINED BY YOU OR
       THIRD  PARTIES  OR A FAILURE OF THE PROGRAMS TO OPERATE WITH ANY
       OTHER  PROGRAMS),  EVEN  IF  SUCH HOLDER OR OTHER PARTY HAS BEEN
       ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.  


       4.6 Disclaimer       

          No warranty,  either express or implied, is made with respect
       to the fitness or merchantability of LhA.  

          Stefan Boberg  (referred  to  as  "the  author"), reserve the
       right to not develop any future versions of LhA.  

          The author   will  try  to  make  a  good  faith  attempt  at
       correcting  any  problems  if  any are discovered, but are in no
       way required, nor bound to correct them.  

          The author  neither  assume  or accept any responsibility for
       the  use  or  misuse  of  these programs.  They also will not be
       held  liable for damages or any compensation beyond the original
       registration  fee  due  to  loss  of profit or any other damages
       arising out of the use, or inability to use these programs.  

          Stefan Boberg  will not be liable for any damage arising from
       the  failure  of  these programs to perform as described, or any
       destruction  of  other  programs  or  data  residing on a system
       attempting  to  run  the  programs.  While I know of no damaging


     


     V1.0                     LhA User's Guide                  Page 45


       errors,  the  user  of  these programs uses it at his or her own
       risk.  




















































     


     V1.0                     LhA User's Guide                  Page 46


       5 Acknowledgements       

       Haruyasu Yoshizaki  For releasing the source of the original LHA
                            for  MSDOS.   The  source  was  used  as  a
                            reference  when  writing  this  program. No
                            actual  code  was  copied from this source,
                            rather  LhA  was  written  from scratch for
                            the Amiga.  

       Haruhiko Okumura  For  devising  the -lh5- and -lh4- compression
                            algorithms,  and for releasing the C source
                            for  these  to  the  public  domain.  These
                            sources  were  used  as  a  reference  when
                            writing  the  680x0  assembler  versions of
                            the  compression  and  decompression  code.
                            Some  algorithms were replaced with my own,
                            faster ones.  

       Robert K.Jung  For making the feature-packed ARJ for MSDOS, from
                            which   several   ideas  for  commands  and
                            features was included in LhA.  

       Paolo Zibetti  For making the first LhArc-style archiver for the
                            Amiga,  which  made  me  interested in file
                            archivers  and  advanced  data  compression
                            techniques.  

       Jonathan Forbes   For   making   the   -lh1-   compression   and
                            decompression   routines   of  LZ  slightly
                            faster    than   those   of   my   previous
                            (unfinished)  program  `LhArcA'.  This made
                            me  start  writing  this  program.  Another
                            reason  for  writing  LhA  was  that LZ had
                            some   misfeatures  and  did  not  work  as
                            intended.  

       Ron Birk  For  digging  out  the  source codes I needed before I
                            gained access to InterNet myself - Thanks! 

       LhArcA users  Big thanks to all of you who registered for LhArcA
                            and  LhA  even  before  the  programs  were
                            finished  (LhArcA  never was, but those who
                            registered  will  receive LhI/LhA when it's
                            finished).  


          The license  agreement was heavily inspired by (almost copied
       from)  the  TrapDoor license, which in turn was inspired by Jack
       Radigan and the GNU General public License.  

          The manual  was  formatted with a modified version of `proff'
       (originally  written  for  VAX/VMS/MSDOS  by  Ozan S.  Yigit and


     


     V1.0                     LhA User's Guide                  Page 47


       Steven Tress).  

          The program  was  developed  using the Lattice C Compiler and
       Assembler  on  a  25MHz  Amiga 3000 - Thanks for a great machine
       Commodore!   And also thanks for a great development environment
       Lattice!  Dying to get C++ for the Amiga...  

          Inspiration provided  (in  order  of  significance) by Linda,
       Depeche  Mode,  Pet Shop Boys, Erasure, Yazoo, OMD, Simple Minds
       and Kraftwerk.  



                    ... Post aspera grata ...  








































     


     


                              Table Of Contents

                                   LhA V1.0

       1 - Introduction     .....................................    1
          1.1 About the manual    ...............................    1
          1.2 System requirements     ...........................    1
          1.3 Installation      .................................    2
          1.4 Terminology      ..................................    2
          1.5 LhA - what is it?  ................................    2
          1.6 What is a file archiver anyway? ...................    3
          1.7 Why should I use LhA?  ............................    4
             1.7.1 How fast is it?   ............................    5
          1.8 Compatibility and Amiga-specific features   .......    7
          1.9 About the author program history and future........    8
       2 Tutorial      ..........................................   10
       3 Reference guide     ....................................   11
          3.1 Command line syntax    ............................   11
             3.1.1 Specifying options     .......................   11
             3.1.2 Specifying commands     ......................   11
             3.1.3 Specifying archives     ......................   12
             3.1.4 Specifying action files    ...................   12
             3.1.5 Home directories     .........................   12
             3.1.6 Recursive file collection    .................   13
             3.1.7 Specifying destination directory    ..........   14
             3.1.8 `@'-files      ...............................   14
             3.1.9 LhA limitations     ..........................   14
          3.3 Pattern matching     ..............................   16
             3.3.0 Exactly what is pattern matching anyway? .....   16
             3.3.1 Accepted pattern tokens    ...................   16
                3.3.1.1 Question mark (?)    ....................   16
                3.3.1.2 Star/Asterisk (*)     ...................   17
                3.3.1.3 Hash mark (#)    ........................   17
                3.3.1.4 Square brackets ([])    .................   18
                3.3.1.5 Parentheses and the vertical bar  .......   18
                3.3.1.6 Tilde (~)     ...........................   19
                3.3.1.7 Percent sign (%)    .....................   19
          3.4 Commands      .....................................   21
             3.4.1 `a' Add files to archive  ....................   21
             3.4.3 `d' Delete files from archive  ...............   21
             3.4.4 `e' Extract files from archive  ..............   22
             3.4.5 `f' Freshen files in archive  ................   22
             3.4.8 `l' List archive contents (terse)  ...........   22
             3.4.9 `m' Move files to archive  ...................   23
             3.4.14 `p' Print files to stdout  ..................   23
             3.4.17 `t' Test archive integrity   ................   23
             3.4.18 `u' Update archive    .......................   24
             3.4.19 `v' List archive (verbose)   ................   24
             3.4.20 `vv' List archive (full)   ..................   25
             3.4.21 `x' Extract files with path  ................   25
          3.5 Options      ......................................   27
             3.5.1 `-a' (upx) Preserve file attributes  .........   27


                                    - I -


     


             3.5.2 `-A' (upd) Set archive attributes  ...........   28
             3.5.3 `-b' (all) Set I/O buffer size ...............   28
             3.5.5 `-c' (all) Confirm files   ...................   29
             3.5.6 `-C' (ext) Clear arc-bit on extract ..........   29
             3.5.8 `-D' (all) Alternate progress display  .......   29
             3.5.11 `-f' (all) Ignore filenotes   ...............   30
             3.5.12 `-F' (all) Use fast progress display ........   30
             3.5.16 `-i' (all) Read filelist from file ..........   30
             3.5.17 `-k' (all) Keep partial files  ..............   31
             3.5.18 `-l' (ALL) Make filenames lowercase  ........   32
             3.5.19 `-L' (ALL) Create filelist   ................   32
             3.5.20 `-m' (ALL) No messages for query ............   32
             3.5.21 `-n' (upx) No byte progress indicator .......   33
             3.5.22 `-N' (all) No progress indicator  ...........   33
             3.5.23 `-o' (upx) On or after date .................   33
             3.5.25 `-p' (ALL) Pause after loading  .............   34
             3.5.26 `-P' (ALL) Set task priority  ...............   34
             3.5.27 `-q' (ALL) Be quiet   .......................   34
             3.5.28 `-Q' (ALL) Alternate option set  ............   34
             3.5.29 `-r' (add) Collect action files recursively .   34
             3.5.30 `-R' (ALL) Collect archive files recursively    35
             3.5.32 `-S' (add) Set A-flag on archived files......   35
             3.5.33 `-t' (upx) Only new files  ..................   35
             3.5.34 `-T' (upx) New and newer files ..............   35
             3.5.35 `-u' (ALL) Make filenames uppercase  ........   36
             3.5.36 `-U' (upx) Set update interval  .............   36
             3.5.37 `-v' (add) Set compression speed  ...........   37
             3.5.39 `-x' (all) Preserve and use pathnames .......   37
             3.5.40 `-X' (ALL) Do not append suffix .............   37
             3.5.41 `-Y' (add) Store big files with ratio........   37
             3.5.42 `-z' (add) Do not compress files ............   38
             3.5.43 `-Z' (add) Compress archives   ..............   38
             3.5.45 `-0' (add) Use LhArc 1.x compression ........   38
             3.5.46 `-2' (add) Use LhA compression  .............   39
             3.5.49 `-Qh' (add) Set Huffman buffer size .........   39
          3.6 LhA error situations    ...........................   40
       4 Politics      ..........................................   41
          4.1 Registration      .................................   41
          4.2 Distribution      .................................   42
          4.3 Support      ......................................   42
          4.4 License      ......................................   42
          4.5 No Warranty     ...................................   44
          4.6 Disclaimer      ...................................   44
       5 Acknowledgements      ..................................   46










                                    - II -

