

     











                              LhA User's Guide

                         Version 1.38 - August 1992












                         ###      ###       ######
                          ##       ##      ###  ##
                          ##       ##      ##  ###
                          ##       #####   #######
                          ##       ## ###  ##   ##
                          ###  ##  ##  ##  ##   ##
                         #######  ###  ### ###  ###

















                          Written by Stefan Boberg

                   Copyright (c) 1991,92 by Stefan Boberg
                             All rights reserved


     


     V1.38                    LhA User's Guide                   Page 1


     1 - Introduction      

        LhA is  a  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 LhArcA, LZ and
     LhArc   for   the   Amiga.   LhA   sports   fast  compression  and
     decompression  and  has  several commands and options not found in
     any other currently available archiver for the Amiga.  

     1.1 About the manual     

        The manual  is  divided  into  two  main  sections,  the  first
     section  (this  one) contains miscellaneous information related to
     the  program. The second section is a reference section, where all
     commands  and  options  are  explained thoroughly. For information
     about registering read `LICENSE.man' and `Orderform'.  

     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
     68020,   030   and   040-processors   without   sacrificing  68000
     compatibility.  

        Under KickStart  1.3,  LhA requires `arp.library' to be able to
     use other wildcard characters than `*' and `?'.  

     1.4 Terminology       

     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


     


     V1.38                    LhA User's Guide                   Page 2


     better  the  compression.  Most Amiga archivers use the same ratio
     calculation method as I use.  

     CRC   -  CRC  stands  for  `Cyclic  Redundancy  Check'.  It  is  a
     relatively  sophisticated  method  of checking data integrity. The
     version used in LhA is a 16-bit CRC.  

     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
     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
     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/LHA-archivers,  start  as  compiled C-code.
     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 `benchm.txt'. An even better way to see how fast
     LhA is, is to try it yourself! 

     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


     


     V1.38                    LhA User's Guide                   Page 3


     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 archiver then
     creates!  After  the  transfer  the  receiver  just has to use the
     archiver  to extract all files from the archive-file onto his/hers
     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 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
     partition  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


     


     V1.38                    LhA User's Guide                   Page 4


     eliminate different kinds of redundant information.  

     1.8 Compatibility and Amiga-specific features    

        LhA is  aimed  at full compatibility with LHA V2.13 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.13 can process all archives created by
     LhA.  

     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 currently 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
     directories  is also in the pipeline and will be released sometime
     in  1992.  Other  archive formats than LhA-style archives are also
     planned  to  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
     first).  

        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  3  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 too many), so I can fix it right away! 


     


     V1.38                    LhA User's Guide                   Page 5


     2 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.  

     2.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.  

     2.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').  

     2.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' command), so you may
     use  verbose  commands  such as `list' or `add' instead of `l' and
     `a', respectively.  


     


     V1.38                    LhA User's Guide                   Page 6


     2.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 exception being the
     `m' (move files to archive) command.  

     2.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.  

                                    NOTE

          If  you  do  not  specify  any action files, LhA assumes
          that  you  wish  to act upon all files in the archive or
          in the current directory.  


     2.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


     


     V1.38                    LhA User's Guide                   Page 7


       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
       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.  

                                    NOTE

          You  are not supposed to include the home directory name
          in   the  action  file  specifications  after  the  home
          directory    spec.    I.e.    you   should   not   enter
          `devs:printers/         devs:printers/*HP*',         but
          `devs:printers/ *HP*' is correct.  

          The  home  directory  remains active for the rest of the
          command   line   or   until   the  next  home  directory
          specification.  If you want to set the home directory to
          the  current  directory  (as  it is from the beginning),
          use   a   single   slash   (`/')  as  a  home  directory
          specification.  This means you cannot use a single slash
          to  specify  the  parent  directory, to do this you will
          have  to  add  an  additional  slash  (`//' means parent
          directory,  `///'  the  parent's parent directory and so
          on).  


     2.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'.  


     


     V1.38                    LhA User's Guide                   Page 8



       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).  

       Example 5: 

       lha -r a myarc ram:dir1 ram:makefile 

       Will  archive  all  files  in  the  directory  `dir1'  and  its
       subdirectories, as well as the file `ram:makefile'.  

       Example 6: 

       lha -r a myarc ram:dir1 ram:(makefile) 

       Will  do  almost  the  same  as example 5, but will archive ALL
       `makefile's  in  ram:  and  all it's subdirectories (because of
       the parentheses - see note below).  


                                    NOTE

          Explicitly  specified  directories (explicitly = without
          pattern  matching)  will be treated as `dirname/*', i.e.
          all  files  in  the  directory  and it's subdirs will be
          archived.   Explicitly  specified  files  will  only  be
          looked  for  in  the  current home directory, unless the
          filename  is  enclosed in parentheses, in which case the
          file  will  be  looked for recursively. I have chosen to
          implement  it  this  way  because  LhA  can then be used
          better   together   with  directory  utilities  such  as


     


     V1.38                    LhA User's Guide                   Page 9


          Browser or DirectoryOpus.  


     2.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  anywhere  after  the  archive name 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.  

       and so would `lha x project dl:tmp/ *.c'.  

                                    NOTE

          You  can specify a directory that does not already exist
          as  the  destination,  LhA will automatically create the
          directory for you (without asking first).  


     2.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.  

     2.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. If you
       exceed  this limit behaviour is undefined. User reports indicate
       that  AmigaDOS  does not handle pathnames with more than 180-190
       characters properly.  

     o  When  headers  of level 0 are used, filenotes may not be longer


     


     V1.38                    LhA User's Guide                  Page 10


       than  230-{filename  length  (including path)} characters.  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  except with
       exceptionally long filenames and paths).  

     o  The  number  of  files  in an archive files are only limited by
       available  disk  space.  The  size of an archive must not exceed
       2.147.483.648 bytes (2 Gigabytes); LhA will get VERY confused.  

     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
       by  available  RAM memory.  Any number of files may be extracted
       or added to an archive in one go.  

     o  Level  2  headers  must  not be longer than 1024 characters, or
       LhA will not be able to process them.  

     o  Currently  LhA only handles multivolume archives with a maximum
       of  100  volumes.  If  you  create  archives with more than this
       number of volumes, behaviour is undefined.  


     2.2 Environment variables      

        Under KickStart   2.0   LhA  supports  both  local  and  global
     environment  variables.  Local  variables  are not available under
     the  1.3  shell.   Upon  startup  LhA  looks  for  the environment
     variable  `LHAOPTS'  and  includes this as if it had been typed on
     the  command  line  directly  after the `LhA' command name. If you
     don't  want to use the settings from the environment variable, use
     the `-I' switch.  

      EXAMPLE 

       If you set LHAOPTS to `-N -b64' with the following command: 

        1> setenv LHAOPTS -N -b64 

       LhA  would  not  display  any file-progress indicator and use a
       64K  I/O buffer for all following invokations until the machine
       is  reset  or  LHAOPTS  is  changed.  If  you  want to set some
       default  options  that  should survive reset and power off, use
       the  environment  variable  name `ENVARC:LHAOPTS' instead, like
       in: 

        1> setenv ENVARC:LHAOPTS -b64 

       This  would cause the environment variable LHAOPTS to be set to
       `-b64' whenever the machine is rebooted.  


     


     V1.38                    LhA User's Guide                  Page 11


     2.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  2.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'.  

     2.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
     2.3.1  forward.  Also read the sections explaining `how to specify
     action files' and `how to specify archive files'.  

     2.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]').  

     2.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
              ending  in  `d'.   For example `abcd', `abad' and `ab_d'


     


     V1.38                    LhA User's Guide                  Page 12


              but not `abd' or `acid'.  

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


     2.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
              (including  zero)  of  arbitrary characters, followed by
              an `f', and ending in `n'.  

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


     2.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 (equivalent to the `*' token).  

      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'.  

       `#(ha)#(hi)urgh' :  of  `ha':s followed by any number of `hi':s
              followed   by  `urgh'.  For  example  `hahahahahihiurgh'
              matches, and so does `haurgh' and `hahiurgh'.  


     2.3.1.4 Square brackets ([])     



     


     V1.38                    LhA User's Guide                  Page 13


        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'.  


     2.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 

       `(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 2.3.1.6 for details) 


     


     V1.38                    LhA User's Guide                  Page 14


       `(*.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.  


     2.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 (see note about ARP<->KS2.0 below).  

      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'.  


                                    NOTE

            Because  of  a  bug  (or  misfeature) in ARP, the `~'
            token  is  not  correctly handled by LhA when running
            under  KickStart  1.3  under  ARP.  Under  KS2.x  LhA
            handles  it  okay however. In ARP a negation actually
            negates  the ENTIRE EXPRESSION, so `~lha' matches all
            files but `lha'.  


     2.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


     


     V1.38                    LhA User's Guide                  Page 15


     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 may just as well be omitted.  


     2.3.2 KS1.3 ARP and KS2.x pattern matching  

        When running  LhA  (and  other  programs for that matter) under
     KickStart  2.x, the `*' (star) wildcard will be enabled on program
     startup.  The  initial  state  of  the  WILDSTAR  flag will not be
     reset.   If  arp.library  is  not  available  when  running  under
     KickStart   1.3   LhA  will  use  its  internal  pattern  matching
     routines, which only recognizes the `*' and `?' tokens.  

     2.3.3 National characters      

        LhA correctly   converts   national  characters  to  lower-  or
     uppercase  when  the  `-Qn'  option  is  enabled. This causes some
     trouble  on  older  versions  of the KickStart since these did not
     correctly   convert   national   characters   to   uppercase  when
     calculating  the  filename hash value. The `-Qn' option should not
     be used on OFS or FFS disks.  



























     


     V1.38                    LhA User's Guide                  Page 16


     2.4 Commands       

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

     2.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 2.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'.  



     2.4.2 `c' Concatenate/Append archives     

        With this   command  it  is  possible  to  concatenate  several
     archives  to  one  or  to  append  several  archives to the end of
     another.  Currently, LhA does not check for duplicate files, so if
     two  archives  contain a file with the same name there will be two
     entries   with   the   same   name   in   the  resulting  archive.


     


     V1.38                    LhA User's Guide                  Page 17


     Concatenating  and  appending  works  just as if you had extracted
     all  files  from  the  archives  and  then  moved  them all to the
     destination    archive    -    except    that    there    is    no
     decompression/compression involved in the operation.  

        To combine  (concatenate)  several  archives into a new archive
     you  specify  a  non-existant  or  empty  archive  as  the working
     archive - this file will then contain the resultant archive.  

        To append  archives  to  the  end  of  an  archive, specify the
     archive  to  append  to  as  the  working  archive - the remaining
     archives will then be appended to this archive.  

      EXAMPLE 

       `LhA  c  ram:new  arc:csrc  arc:csrc2'  would  combine  the two
       archives  `arc:csrc.lha'  and  `arc:csrc2.lzh' into one archive
       named `ram:new.lha'.  

       `LhA  c  arc:csrc  arc:csrc2' would yield the exact same result
       as   the   above  command  but  the  resulting  archive  is  in
       `arc:csrc.lha'  instead  (`csrc2.lzh' is appended to the end of
       `arc:csrc.lha').  


        Note that  you can use wildcards to specify the files to append
     / concatenate.  

     2.4.3 `d' Delete files from archive   

        This command  removes one or more files from an archive. Please
     note  that  the  message  about  `packing'  does not mean that LhA
     compresses  the  files once more.. Just that it removes the unused
     files from the archive (packs the remaining files closer).  


                                    NOTE

          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.  


     2.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.  


     


     V1.38                    LhA User's Guide                  Page 18



      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 


     2.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  unless  the `-x'
     option  is  disabled  explicitly (with `-x0').  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'.  


        This command  automatically  enables  the `-x' option unless it
     is explicitly disabled on the command line with `-x0'.  

     2.4.7 `h' Hunt for diffs arc <-> filesys 

        This command  is  used to see what files in an archive has been
     changed  since  the  files  were archived. The `-D' (display type)
     option  has  a  special  meaning  with  this  command; The listing
     format is as follows: 


        `-D0' (default)  :  Each differing file is listed with the name
     on  the  right  and  a  `checklist'  on  the left with x-es in the
     appropriate  positions indicating what differs between the archive
     and   the  filesystem.  `Tm'  means  the  last  modification  date
     differs,  `Sz'  means  the  size  is  different,  `Pr'  means  the
     protection  bits has changed, `Fn' means the filenote has changed,
     and `Del' means the file does not exist anymore.  



     


     V1.38                    LhA User's Guide                  Page 19



        `-D1' :  Every  differing  file  is listed with the name on the
     left  followed  by  a  brief  description of what differs. If more
     than  one thing differs a new line will be used for each differing
     attribute.  


        `-D2' :  As  `-D1'  but  all differing attributes are listed on
     the same line.  


        `-D3' :  Only  the  differing filenames are listed, one on each
     line.  

     If  no directory is specified on the command line, LhA assumes you
     want  to  compare  the  archive  to  the  current  directory.  The
     directory  to  compare  to  is  specified  the  same  way  as  the
     destination directory with the `e' and `x' commands.  

      EXAMPLE 

       `lha  h  arc:utils.lha  sys:utilities/' would compare all files
       in  the  archive  `arc:utils.lha' to the corresponding files in
       the `sys:utilities' directory, reporting all differences.  

       `lha  -x0  h  src:misc #?.c misc:' would compare all files with
       names  ending  in  `.c'  in  the  `src:misc.lha' archive to the
       corresponding files in the `misc:' directory.  

       `lha   h   dl:backup'   would  compare  the  files  in  archive
       `dl:backup.lha'  to  the  files  and directories in the current
       directory.  



     2.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.  

        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 



     


     V1.38                    LhA User's Guide                  Page 20


        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.  


     2.4.8.1 `lq' List archive (terse-quick)    

        This command  works  just  like  the  `l' command, but the only
     information   listed   is   the  filenames  without  paths.  Empty
     directories are displayed as an empty line.  


     2.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'.  


     2.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).  


     2.4.15 `r' Replace files     

        This command  works  just  like  the  update/add  commands  but
     replaces  the  files  that already exist in the archive regardless
     of  the  file  modification  time. (Using the `u' command together


     


     V1.38                    LhA User's Guide                  Page 21


     with the `-Qr' option is equivalent to using this command).  


     2.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).  


     2.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.  


     2.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 


     


     V1.38                    LhA User's Guide                  Page 22



        Listing of archive 'dl:c64new.lzh': 
        Original  Packed Ratio    Date     Time    Name 
        -------- ------- ----- --------- --------  ------------- 
           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.  



     2.4.19.1 `vq' List archive (verbose-quick)    

        This command  works  just  like  the  `v' command, but the only
     information listed is the filenames including path.  


     2.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  most  common  DOS  IDs are `A', `U' and `M', where `A' is for
     AmigaDOS,  `U'  is  for  **IX 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  header  level  is also
     displayed,  and  if  any  unhandled extended headers are found, an
     `X' will be listed after the DOS ID.  

        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  L OS 
        -------- ------- ----- --------- -------- -------- ------ ---- ----- 
        S/Stormlord 
           36098   26979 25.2% 20-Oct-91 22:40:16 ----rwed  -lh1- 2093 2 U X 
        S/Stormlord.info 
             482     293 39.2% 20-Oct-91 22:41:36 ----rwed  -lh1- 710E 2 U X 


     


     V1.38                    LhA User's Guide                  Page 23


        PlaySID 
           23016   12100 47.4% 21-Oct-91 08:28:18 ----rwed  -lh5- 89FF 0 ? 
        : New version with `equalizers' 
        -------- ------- ----- --------- -------- 
           59596   39372 33.9% 25-Oct-91 21:22:48   3 files 

        The `-N' option suppresses the copyright notice.  



       2.4.21 `x' Extract files with path   

          This command  works  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.  


       2.4.22 `y' Copy archive with new options  

          This command  takes  an  archive  as  input, and rewrites the
       selected  (or all, if none specified) files with the new options
       given  on the command line or in environment variables. This can
       often  be  useful.  A  couple  of  examples  will surely help to
       clarify; 

        EXAMPLE 

         `lha  -H1  y  dl:#?'  will  convert all archives in the `dl:'
         directory to archives with level-1 headers.  

         `lha  -x0 y ram:files.lha *.c' will remove all paths from all
         files   with   names   ending   in   `.c'   in   the  archive
         `ram:files.lha'.  



                                     NOTE

            LhA  currently ignores the compression method setting,
            so  this  command  cannot  be  used  to re-archive old
            -lh1-  archives  to  new -lh5- archives or vice versa.
            This will be possible in a future release.  











     


     V1.38                    LhA User's Guide                  Page 24


       2.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 2.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 


       2.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


     


     V1.38                    LhA User's Guide                  Page 25


              show  up  on  directory  listings. It is not supported by
              the  current  release of the 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),  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 when archiving (a,f,u,m)
       and disabled by default for all other commands.  

       2.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 OFF by default.  

       2.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



     


     V1.38                    LhA User's Guide                  Page 26


            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
            it  is  unnecessary  to  run  with a large buffer. The
            default  buffer  size  of 32K is a good choice in most
            setups.  


          The default buffer size is 32K (32768 bytes) 

       2.5.4 `-B' (upd) Keep backup of archives  

          When this  option  is  enabled, LhA will always keep a backup
       copy  of  the  archive whenever a file is removed from it by the
       delete,  update, freshen or replace commands. The backup archive
       is  named `<arcname>.bak' (note that the `.lzh' or `.lha' suffix
       is  *NOT*  replaced  by  the  `.bak' suffix - rather, the `.bak'
       suffix is always appended at the end of the filename).  

          This option is OFF by default.  

       2.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.  

       2.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.  

       2.5.6 `-d' (upd) Archive date=newest file   

          When this   option   is   active   LhA   will  set  the  last
       modification  date  of  the archive to the same date as the last
       modified  file in the archive. This more accurately reflects the
       real  age  of  the  archive  contents  than the date of the last
       archive update.  

          This option is OFF by default.  



     


     V1.38                    LhA User's Guide                  Page 27


       2.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.  


        EXAMPLE 

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


                                     NOTE

            When  used  with  the  `h'  command  this option has a
            slightly  different meaning. See the section about the
            `h' command for a detailed explanation.  


          The default progress indication type is 0.  

       2.5.9 `-e' (add) Archive empty directories   

          When this  option  is  used  together  with the `-r' (collect
       files   recursively)   option,   LhA   will  archive  all  empty
       subdirectories.  

          This option  is  OFF by default (empty subdirectories are not


     


     V1.38                    LhA User's Guide                  Page 28


       archived).  

       2.5.10 `-E' (ext) Touch extracted files   

          When this   option   is   enabled,  LhA  will  set  the  file
       modification  date  of  all extracted files to the current time.
       This  can  be useful if you do HD backups by date rather than by
       archive bit.  

          This option  is  OFF  by  default  (the original modification
       dates are restored).  

       2.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) 

       2.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!).  




     


     V1.38                    LhA User's Guide                  Page 29


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

       2.5.13 `-g' (add) Garble files with password  

          This option is not available in the current version.  

       2.5.14 `-G' (ext) Only extract newer files  

          When this  option  is  used  LhA will only extract files that
       already  exists  and have a last modification date that is newer
       than the existing files.  

          This option is OFF by default.  

       2.5.15 `-h' (add) Disable homedirectories    

          When this  option is enabled, the homedirectory specification
       feature of LhA is disabled.  

          This option   is   OFF   by   default   (homedirectories  are
       recognized).  

       2.5.16 `-H' (add) Write header level   

          With this  switch  you  can select which header types to use.
       The  valid  header  levels are currently 0,1 and 2. Please refer
       to   the  section  about  header  levels  for  a  more  detailed
       explanation about the various header types.  

          The default header level is 0.  

       2.5.17 `-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: 


     


     V1.38                    LhA User's Guide                  Page 30



         `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.  

       2.5.18 `-I' (all) Ignore LHAOPTS variable   

          When this  option  is specified, LhA will not try to read the
       defaults  from the LHAOPTS local or global environment variable.
       Note  that this option is special because it has to be specified
       directly after a dash (`-') on the command line.  

          This option is OFF by default.  

       2.5.19 `-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
       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.  

                                     NOTE

            Please  that  in  the  current  release,  for  certain
            errors  all data that has been extracted may not be in
            the  partially extracted file, because of internal I/O
            buffering.  In  this  case,  set the I/O buffer to the


     


     V1.38                    LhA User's Guide                  Page 31


            smallest  value  possible  (8KB) to recover as much as
            possible.  Because  of  this,  small  files may not be
            recovered  at  all.  This  only applies to LHA (-lh5-)
            compression,  LhArc  compressed files will always have
            all extracted data in the partially extracted file.  


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

       2.5.20 `-K' (move) Kill empty directories   

          When this  option  is  used  together  with  the  move  (`m')
       command  LhA  will  delete  all directories that are empty after
       moving  all  files  to  the archive. Useful for moving an entire
       subdirectory  tree  with  the  `-r'  (collect files recursively)
       option.  

          This option  is  OFF  by  default  (empty directories are not
       deleted).  

       2.5.21 `-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 

       2.5.22 `-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'.  


     


     V1.38                    LhA User's Guide                  Page 32


                                     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).  

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

          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  (yes). This option is automatically enabled if the
       standard  input is not interactive (if run in the background for
       example).  

          This option if OFF by default.  

       2.5.24 `-M' (ext) No autoshow files   

          When this  option  is  enabled, LhA will suppress the display
       of autoshow files (files with names ending in `.displayme').  

                                     NOTE

            Autoshow  files  are also suppressed if one or more of
            the `-N', `-q' or `-m' options are enabled.  


          This option   is   OFF   by   default   (autoshow  files  are
       displayed).  

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

          When this  option  is enabled, the byte progress indicator is
       disabled.  LhA  will  still  display  what file it is working on
       however, use `-N' to disable all progress indication.  

          This option is OFF by default.  

       2.5.26 `-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.  


     


     V1.38                    LhA User's Guide                  Page 33



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

       2.5.27 `-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.  

       2.5.28 `-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).  

       2.5.29 `-q' (ALL) Be quiet    

          This option will supress ALL messages from LhA.  

          This option is OFF by default 

       2.5.30 `-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.  

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


     


     V1.38                    LhA User's Guide                  Page 34



          When this  option is used, LhA will recursively collect files
       from subdirectories.  

        EXAMPLE 
         `lha  -r a ram:disk1 df0:' will archive all files on the disk
         in drive 0 to `ram:disk1.lha'.  

         `lha  -r  a ram:disk2src df0:*.c' will archive all `.c' files
         on df0: to `ram:disk2src.lha'.  

         `lha    -r    a    ram:exthup    hd:prg/src/    lha/*.[chasi]
         lhi/*.[chasi]'  will  add  all  `.c',  `.h', `.a', `.s', `.i'
         files  in  `hd:prg/src/lha'  and  `hd:prg/src/lhi'  and their
         subdirectories.  The `hd:prg/src/' part of the names will not
         be  stored  in  the archive (home directory `hd:prg/src/' was
         specified).  

                                     NOTE

            Files  that are specified explicitly (i.e. without any
            pattern  matching)  are looked for only in the current
            (home)   directory,   while   patterns  are  used  for
            matching  in  all  subdirectories.  If  a directory is
            specified   explicitly   without  any  following  file
            pattern  (like  in  `lha -r a ram:test sys:l') it will
            be  treated as if a `/*' was appended to the directory
            name  -  i.e.  all  files  in  the  directory and it's
            subdirectories will be archived.  


          This option  is  OFF by default. Note that the `-x' option is
       automatically  enabled when the -r option is used. If you do not
       want  to  store  pathnames  simply  specify `-x0' on the command
       line.  

       2.5.32 `-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


     


     V1.38                    LhA User's Guide                  Page 35


         called  'myarc.lzh'  or  `myarc.lha' in the current directory
         and its subdirectories.  

          This option is OFF by default.  

       2.5.33 `-s' (add) Add files with a-flag unset 

          When this  option  is  active,  LhA will only add files which
       have  the  A  (for Archived) file protection flag unset. This is
       useful  for  doing  incremental  backups  together with the `-S'
       option.  

          This option  is  OFF by default (add files regardless of file
       protection flags).  

       2.5.34 `-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 -s (Add files without A-flag only).  See
       previous section for more details.  

          This option is OFF by default.  

       2.5.35 `-t' (ext) Only new files   

          When this  option  is  active,  LhA  will  not  overwrite  or
       replace any files.  

                                     NOTE

            This option overrides the `-T' option.  


          This option is OFF by default.  

       2.5.36 `-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.  

                                     NOTE

            This option overrides the `-t' option.  


          This option is OFF by default.  

       2.5.37 `-u' (ALL) Make filenames uppercase   



     


     V1.38                    LhA User's Guide                  Page 36


          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.  

          This option is OFF by default.  

       2.5.38 `-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 kilobytes, 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.  


          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).  

       2.5.39 `-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  anything  for  free,  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  -  best in 99% of all
       cases.  


     


     V1.38                    LhA User's Guide                  Page 37


       2.5.40 `-V' (all) Enable multi-volume archives.   

          This option  enables  the  multi-volume  feature of LhA. Note
       that  in  the  evaluation  version  you  cannot create or update
       multivolume   archives,  only  extract  from  and  list.  Please
       consult   the  section  about  multi-volume  archives  for  more
       information.  Further  options must be separated from the `V' by
       at  least  one  whitespace character. In the registered version,
       the  desired volume size in KB should be specified after the `V'
       character.   If you want LhA to automatically detect what volume
       size it should use, use `-Va' (for `use all available space').  

        EXAMPLE 
         `LhA  -Va  a  df0:MyArc  *.c'  would archive all files in the
         current  directory  with  names ending in `.c' to DF0: if the
         disk  should get full before the archive is finished LhA will
         prompt for a new disk to be inserted.  

          This option is OFF by default.  

       2.5.41 `-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.  

       2.5.42 `-W' (add) Exclude filenames    

          This option is not available in the current version.  

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

          As of  LhA  V1.30,  this option comes in three flavors, which
       mode  LhA  will  use  depends on the digit (if any) that follows
       the `x'.  

          `-x1' or  `-x': When this option is enabled, LhA will use and
       preserve  pathnames  when  extracting  and archiving files. When
       extracting,  LhA  will  create  the  directories  that  does not
       already  exist.  Use  this option when you want to preserve some
       directory  structure.  This option is automatically enabled when


     


     V1.38                    LhA User's Guide                  Page 38


       the `-r' option is used.  

          `-x2': In  this  mode,  which is only useful with the extract
       commands,  LhA  will  use  the  full  paths  of the files in the
       archive  when  selecting  files  to  extract, but disregard them
       when  extracting.  Useful  when  several  files  with  the  same
       filename (but different paths) exists in the archive.  

          `-x3': This  mode  is  the  opposite of `-x2'. LhA disregards
       paths  when  selecting  files  to  extract,  but  uses them when
       extracting.  Useful  when  you're too lazy to remember the exact
       name including path.  

        EXAMPLE 

         `LhA  -x2  e  dl:rexx.lzh examples/Main.c ram:' would extract
         the    file    `examples/Main.c'    from   the   archive   to
         `ram:Main.c'.  

         `LhA  -x3 e dl:src.lzh #?Main#? ram:' would extract all files
         with  names  containing  `Main'.  Notice  that  this  is  not
         equivalent  to the `LhA x dl:src.lzh #?Main#? ram:' since the
         latter  would  extract  files  like  `dir/Maindir/file1.h' as
         well.  


          This option   is  disabled  (`-x0')  by  default  for  update
       operations   and   enabled   (`-x1')   by  default  for  extract
       operations.  

       2.5.44 `-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).  

       2.5.45 `-y' (all) Always append suffix   

          When this  option is enabled, LhA will always append a `.lzh'
       or  `.lha'  suffix  to  the  archive name, even when the archive
       name already contains a suffix.  

          This option  is  OFF by default (a suffix is appended only if
       there is no suffix in the archive name already).  

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

          When this  option  is  enabled,  LhA  will  store  big  files


     


     V1.38                    LhA User's Guide                  Page 39


       (>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).  

       2.5.47 `-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.  

       2.5.48 `-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.  

       2.5.49 `-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.  

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



     


     V1.38                    LhA User's Guide                  Page 40


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

          By default the -lh5- compression is used.  

       2.5.50 `-1' (add) Use LhA compression (-lh4-)  

          This option  causes  LhA  to  use  the  new -lh4- compression
       method  when  updating  archives.  This  compression  method  is
       slightly  faster  than  the  -lh5-  compression  but  has looser
       compression and is generally slightly slower to decompress.  

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

       2.5.51 `-2' (add) Use LhA compression (-lh5-)  

          This option  causes  LhA  to  use  the  new -lh5- compression
       method  when  updating  archives.  This  compression  method  is
       slightly  slower  than 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.  

       2.5.52 `-Qa' (all) Use simple console I/O  

          When this  option is enabled LhA will not try to do any fancy
       stuff  like examining the size of the console window, or turning
       off  or  repositioning  the  cursor.  Enabling  this option also
       disables  the  byte  progress  indicator (like with `-n'), since
       this requires cursor repositioning.  

          This option is OFF by default.  

       2.5.53 `-Qb' (ext) Test archive before extract  

          When this  switch  is  enabled  LhA  will  test  an archive's
       integrity  before extracting. If the archive fails the integrity
       check,  the  archive  is  not  extracted  from at all. Useful in
       certain FIDO BBS setups.  

          This option is OFF by default.  

       2.5.54 `-Qd' (ext) Delete autoshow files   

          When this  option  is  enabled LhA will delete autoshow files


     


     V1.38                    LhA User's Guide                  Page 41


       after displaying them.  

          This option is OFF by default.  

       2.5.55 `-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' or `-1'
       options)  for  collecting  statistics.  The  size of this buffer
       affects  the compression ratio in unpredictable ways (you cannot
       tell  with  certainty  whether  a large buffer will be better or
       worse).  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, in
       kilobytes.  

        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.  

       2.5.56 `-Qn' (all) Set national character mode  

          When this  option  is  enabled,  LhA  will  correctly convert
       national  characters to upper/lowercase. By default LhA does not
       convert  any  characters  with  the MSB set due to the fact that
       older  (pre-2.1)  filesystems does not correctly handle national
       characters  when  computing  hash  values. This switch should be
       used when national filesystems are used (NOFS/NFFS).  

          This option is OFF by default.  

       2.5.57 `-Qo' (all) Ignore options after command  

          When this  option  is enabled LhA will not search the command
       line  for options beyond the archive name. This option is useful
       if you need to specify files with names beginning in `-'.  

          This option is OFF by default.  



     


     V1.38                    LhA User's Guide                  Page 42


       2.5.58 `-Qp' (move) Ignore delete protection flag  

          When you  enable  this  option LhA will delete files with the
       delete protection flag set when using the `m' (move) command.  

          This option  is  OFF  by  default (delete protected files are
       not deleted).  

       2.5.59 `-Qq' (add) Quick add    

          When this  option  is  enabled, LhA will not scan through the
       archive  looking  for  duplicate  files  before  adding  to  the
       archive.  This can be useful when adding one file at a time to a
       large  archive,  knowing  the archive does not contain a file by
       the same name (as is the case in some FIDO BBS setups).  

          This option is OFF by default.  

       2.5.60 `-Qr' (add) Skip datestamp check   

          This option,  when  on, disables the datestamp comparison for
       the  update  (`u') and freshen (`f') commands, so that the files
       that  already  exist  in the archive will be replaced regardless
       of file modification dates.  

          This option is OFF by default for all commands but `r'.  

       2.5.61 `-Qw' (all) Disable wildcards    

          When you  specify  this  option  LhA will not do any wildcard
       matching.  This  is useful for adding files with (illegal) names
       containing wildcard characters (`()#?~%|*').  

          This option is OFF by default.  

       2.6 Autoshow files      

          Autoshow files  are files that are displayed automatically to
       the   user  when  extracting  the  file  from  an  archive.  LhA
       determines  if  a  file  should  be  displayed by looking at the
       filename;  if the filename ends in `.displayme' then the file is
       displayed  unless  autoshow  files  have been disabled (with the
       `-M'  option).  Apart  from  being displayed on-screen, autoshow
       files  are  extracted  just like normal files, without stripping
       off the `.displayme' part (AmigaDOS LhArc 1.30 does this).  

       2.7 Residentability       

          LhA is  multitasking  reentrant  and pure, and it can be made
       resident  with the standard shell resident commands - `resident'
       under  AmigaShell  1.3  and 2.0, and `resi' under WShell. If you
       use  another  shell, please refer to the shell's user manual for


     


     V1.38                    LhA User's Guide                  Page 43


       information about how to make programs resident.  

       2.8 Multi-volume archives      

          Multi-volume archives  are  created  simply  by  splitting  a
       larger  archive  into smaller files. The evaluation version does
       not  do  this  automatically  on  the  fly  (but  the registered
       version  does),  so  you  will need to do it manually unless you
       register.  

          The source  for  two  utilities  used  to  create multivolume
       archives  are  included in the distribution archive. If you have
       access  to a C compiler you can compile the (hopefully) portable
       `splitlzh'  and  `joinlzh' programs simply by entering `make' in
       the  `unixutil'  directory.  These  two programs are useful when
       transferring big archives to and from **IX systems.  

       2.8.1 Multivolume file names     

          The first  file  of a multivolume archive is named `name.lha'
       or  `name.lzh'.   The  following  volumes  are named `name.l01',
       `name.l02'  and  so  on. Multivolume archives spanning more than
       100 volumes are not currently supported.  

       2.9 A bit about headers    

          A `header'  has  to  be written to the archive for every file
       in  order  for  the  archiver to know what the files are called,
       how  they  were  compressed  etc.  The original LhArc had a very
       primitive  header  layout  and  had  no  good way of storing any
       machine-specific  info like filenotes (I created a workaround in
       LhArcA  0.99,  by  putting  the filenote in the filename field -
       LhArc  and  LZ  later  adopted this method). In **IX LhArc V1.02
       the  authors  introduced  a  new type of header (level 1 header)
       that  allowed  slightly  more  info to be stored, but the header
       length  was still limited to 255 bytes. In LHA 2.13 for MS-DOS a
       new  header  type  was  introduced  - level 2 headers. With this
       latest  header  type  an  arbitrary amount of information can be
       stored.  LhA  can both read and write all these header types. To
       select  what  type of headers to write, use the `-H' option. LHA
       for  MSDOS  and LHa for **IX creates level-1 headers by default.
       LhA  uses  level  0 headers by default for compatibility reasons
       (LZ  and  LhArc  does  not  handle  level  1 and level 2 headers
       correctly).  If  you  want to know what header levels an archive
       contains, use the `vv' command.  

       2.10 Some tips for archiving efficiently   

          If you  are  going to archive a big bunch of similar or small
       files  -  text  files  for example - you can improve compression
       performance   greatly  by  first  creating  an  archive  WITHOUT
       compression  (using  the `-z' option), and then add this file to


     


     V1.38                    LhA User's Guide                  Page 44


       archive  (with  compression).  As  an  example  I  added  a  big
       directory  with  various  sources  and some binaries (total 2480
       files, 5102117 bytes).  this way with: 

       LhA -z -r a hd:test msrc: 

       and then compressed it with 

       LhA -Z -Qh64 a hd:msrc hd:test.lha 

       The  final  `hd:msrc.lha'  archive ended up being 1545076 bytes.
       When  compressed  the  normal  way  (`LhA  -r  -Qh64  a  hd:msrc
       msrc:'),   the   archive   was   2114777  bytes  long.  Quite  a
       difference..  

       2.11 Using as little memory as possible  

          When using  the default settings, LhA requires about 300KB to
       archive,  and  180KB  to  extract  files.  To  reduce  this to a
       minimum  you  can  reduce  the  I/O buffer size to 8K. This will
       save  you  about  48K  when  archiving  and  at  least  24K when
       extracting.  You can reduce the archiving memory usage even more
       by  reducing  the  Huffman  buffer  size  to  4K,  but it is not
       recommended    since    compression    performance   will   drop
       significantly.  Please  note  that  the above figures for memory
       usage includes stack and program code.  

       2.12 Creating fully MS-DOS compatible archives   

          In order  to satisfy MSDOS archivers, you may have to disable
       a  few  Amiga-specific  features.  Filenotes  are  not supported
       under  MSDOS  and thus the filenote archiving should be disabled
       with  the  `-f'  option.   Furthermore  you  should disable file
       attribute  preservation with the `-a' option. Autoshow files are
       not  supported  by MSDOS LHA V2.13. If you use header level 1 or
       2  you  don't  have  to worry about disabling the file attribute
       preservation.  LHA V2.13 for MSDOS and LHa 0.04 for **IX creates
       level 1 headers by default.  

          To summarize,  use  the  following options to create archives
       for use with MSDOS LHA: 

          `-H0a0f' 

          In order  to  create archives that are extractible with LhArc
       the following options should be used when creating archives: 

          `-H0 -0' 

          and for MS-DOS LHarc: 

          `-H0a0f -0' 


     


     V1.38                    LhA User's Guide                  Page 45


       2.13 Recovering data from corrupt archives   

          It is  never possible to recover all lost data from a corrupt
       archive,  but you can retrieve as much data as possible by using
       the  `-k'  option  and a small I/O buffer (8K). An example would
       be: 


          LhA -k -b8 x dl:Corrupt ram: 


          This would  extract  as  much  as  possible  from the corrupt
       archive to `ram:'.  

       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  code.   Some  algorithms
                            were  replaced with my own, faster ones but
                            the ideas are the same.  

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

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

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

       Martin Olsson  For  supplying  me with the source for LhA V2.11,
                            which  was  used  as  a reference. (I wrote
                            the   -lh5-  decompression  with  only  the
                            80x86 source available.. hard work!) 

       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


     


     V1.38                    LhA User's Guide                  Page 46


                            registered  will  receive LhI/LhA when it's
                            finished).  

       LhA users  Big  thanks  to  all  who registered so far, and even
                            bigger  thanks  to  those who reported bugs
                            and  problems  with the previous releases -
                            without  you  this  program  would never be
                            what it is now.  


          The license  agreement  was  heavily inspired by 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
       Steven Tress).  

          The program  was  developed  using the Lattice C Compiler and
       Assembler   on   a  25MHz  Amiga  3000.  Great  compiler,  great
       computer!  Furthermore  RCS  and  MKID were used to simplify the
       maintenance and development process greatly.  

          Inspiration provided  (in  order  of  significance)  by Emma,
       Depeche  Mode,  Recoil, Pet Shop Boys, Erasure, OMD, Electronic,
       The   KLF/JAMS,   Yazoo,  Tears  for  Fears,  Simple  Minds  and
       Kraftwerk!! 


                "Infinities of dreams imploding into one ..."
























     


     


                              Table Of Contents

                                  LhA V1.38

       1 - Introduction     .....................................    1
          1.1 About the manual    ...............................    1
          1.2 System requirements     ...........................    1
          1.4 Terminology      ..................................    1
          1.5 LhA - what is it?  ................................    2
          1.6 What is a file archiver anyway? ...................    2
          1.8 Compatibility and Amiga-specific features   .......    4
          1.9 About the author program history and future........    4
       2 Reference guide     ....................................    5
          2.1 Command line syntax    ............................    5
             2.1.1 Specifying options     .......................    5
             2.1.2 Specifying commands     ......................    5
             2.1.3 Specifying archives     ......................    5
             2.1.4 Specifying action files    ...................    6
             2.1.5 Home directories     .........................    6
             2.1.6 Recursive file collection    .................    7
             2.1.7 Specifying destination directory    ..........    9
             2.1.8 `@'-files      ...............................    9
             2.1.9 LhA limitations     ..........................    9
          2.2 Environment variables     .........................   10
          2.3 Pattern matching     ..............................   11
             2.3.0 Exactly what is pattern matching anyway? .....   11
             2.3.1 Accepted pattern tokens    ...................   11
                2.3.1.1 Question mark (?)    ....................   11
                2.3.1.2 Star/Asterisk (*)     ...................   12
                2.3.1.3 Hash mark (#)    ........................   12
                2.3.1.4 Square brackets ([])    .................   12
                2.3.1.5 Parentheses and the vertical bar  .......   13
                2.3.1.6 Tilde (~)     ...........................   14
                2.3.1.7 Percent sign (%)    .....................   14
             2.3.2 KS1.3 ARP and KS2.x pattern matching .........   15
             2.3.3 National characters     ......................   15
          2.4 Commands      .....................................   16
             2.4.1 `a' Add files to archive  ....................   16
             2.4.2 `c' Concatenate/Append archives    ...........   16
             2.4.3 `d' Delete files from archive  ...............   17
             2.4.4 `e' Extract files from archive  ..............   17
             2.4.5 `f' Freshen files in archive  ................   18
             2.4.7 `h' Hunt for diffs arc <-> filesys............   18
             2.4.8 `l' List archive contents (terse)  ...........   19
                2.4.8.1 `lq' List archive (terse-quick)   .......   20
             2.4.9 `m' Move files to archive  ...................   20
             2.4.14 `p' Print files to stdout  ..................   20
             2.4.15 `r' Replace files    ........................   20
             2.4.17 `t' Test archive integrity   ................   21
             2.4.18 `u' Update archive    .......................   21
             2.4.19 `v' List archive (verbose)   ................   21
                2.4.19.1 `vq' List archive (verbose-quick)   ....   22


                                    - I -


     


             2.4.20 `vv' List archive (full)   ..................   22
             2.4.21 `x' Extract files with path  ................   23
             2.4.22 `y' Copy archive with new options ...........   23
          2.5 Options      ......................................   24
             2.5.1 `-a' (upx) Preserve file attributes  .........   24
             2.5.2 `-A' (upd) Set archive attributes  ...........   25
             2.5.3 `-b' (all) Set I/O buffer size ...............   25
             2.5.4 `-B' (upd) Keep backup of archives ...........   26
             2.5.5 `-c' (all) Confirm files   ...................   26
             2.5.6 `-C' (ext) Clear arc-bit on extract ..........   26
             2.5.6 `-d' (upd) Archive date=newest file  .........   26
             2.5.8 `-D' (all) Alternate progress display  .......   26
             2.5.9 `-e' (add) Archive empty directories  ........   27
             2.5.10 `-E' (ext) Touch extracted files  ...........   28
             2.5.11 `-f' (all) Ignore filenotes   ...............   28
             2.5.12 `-F' (all) Use fast progress display ........   28
             2.5.13 `-g' (add) Garble files with password .......   29
             2.5.14 `-G' (ext) Only extract newer files .........   29
             2.5.15 `-h' (add) Disable homedirectories   ........   29
             2.5.16 `-H' (add) Write header level  ..............   29
             2.5.17 `-i' (all) Read filelist from file ..........   29
             2.5.18 `-I' (all) Ignore LHAOPTS variable  .........   30
             2.5.19 `-k' (all) Keep partial files  ..............   30
             2.5.20 `-K' (move) Kill empty directories  .........   31
             2.5.21 `-l' (ALL) Make filenames lowercase  ........   31
             2.5.22 `-L' (ALL) Create filelist   ................   31
             2.5.23 `-m' (ALL) No messages for query ............   32
             2.5.24 `-M' (ext) No autoshow files  ...............   32
             2.5.25 `-n' (upx) No byte progress indicator .......   32
             2.5.26 `-N' (all) No progress indicator  ...........   32
             2.5.27 `-p' (ALL) Pause after loading  .............   33
             2.5.28 `-P' (ALL) Set task priority  ...............   33
             2.5.29 `-q' (ALL) Be quiet   .......................   33
             2.5.30 `-Q' (ALL) Alternate option set  ............   33
             2.5.31 `-r' (add) Collect action files recursively .   33
             2.5.32 `-R' (ALL) Collect archive files recursively    34
             2.5.33 `-s' (add) Add files with a-flag unset.......   35
             2.5.34 `-S' (add) Set A-flag on archived files......   35
             2.5.35 `-t' (ext) Only new files  ..................   35
             2.5.36 `-T' (upx) New and newer files ..............   35
             2.5.37 `-u' (ALL) Make filenames uppercase  ........   35
             2.5.38 `-U' (upx) Set update interval  .............   36
             2.5.39 `-v' (add) Set compression speed  ...........   36
             2.5.40 `-V' (all) Enable multi-volume archives.  ...   36
             2.5.41 `-w' (upd) Set work directory  ..............   37
             2.5.42 `-W' (add) Exclude filenames   ..............   37
             2.5.43 `-x' (all) Preserve and use pathnames .......   37
             2.5.44 `-X' (ALL) Do not append suffix .............   38
             2.5.45 `-y' (all) Always append suffix  ............   38
             2.5.46 `-Y' (add) Store big files with ratio........   38
             2.5.47 `-z' (add) Do not compress files ............   39
             2.5.48 `-Z' (add) Compress archives   ..............   39


                                    - II -


     


             2.5.49 `-0' (add) Use LhArc 1.x compression ........   39
             2.5.50 `-1' (add) Use LhA compression (-lh4-) ......   40
             2.5.51 `-2' (add) Use LhA compression (-lh5-) ......   40
             2.5.52 `-Qa' (all) Use simple console I/O ..........   40
             2.5.53 `-Qb' (ext) Test archive before extract .....   40
             2.5.54 `-Qd' (ext) Delete autoshow files  ..........   40
             2.5.55 `-Qh' (add) Set Huffman buffer size .........   41
             2.5.56 `-Qn' (all) Set national character mode .....   41
             2.5.57 `-Qo' (all) Ignore options after command ....   41
             2.5.58 `-Qp' (move) Ignore delete protection flag ..   41
             2.5.59 `-Qq' (add) Quick add   .....................   42
             2.5.60 `-Qr' (add) Skip datestamp check  ...........   42
             2.5.61 `-Qw' (all) Disable wildcards   .............   42
          2.6 Autoshow files     ................................   42
          2.7 Residentability      ..............................   42
          2.8 Multi-volume archives     .........................   43
          2.8.1 Multivolume file names    .......................   43
          2.9 A bit about headers   .............................   43
          2.10 Some tips for archiving efficiently  .............   43
          2.11 Using as little memory as possible ...............   44
          2.12 Creating fully MS-DOS compatible archives  .......   44
          2.13 Recovering data from corrupt archives  ...........   44
       5 Acknowledgements      ..................................   45































                                   - III -

