home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / sound / psslib2 / lha.man next >
Text File  |  1991-12-04  |  56KB  |  1,296 lines

  1.                 User's Manual for LHA v1.30 (13 April 1991)
  2.                 -------------------------------------------
  3.  
  4. Program & documentation by: Roger Burrows
  5.  
  6. Based on: LHarc version 1.13b (for MS-DOS),
  7.           Copyright(c) Haruyasu Yoshizaki (Yoshi),1988-89
  8.           Documentation dated 1989-3-4
  9.  
  10.  
  11.  
  12.                     I. Introduction to LHA
  13.                     ----------------------
  14.  
  15. 1. What is LHA?
  16.  
  17.   LHA is an archiving program: that is, it allows you to collect together a
  18.   number of files and store them under one file name.  This is convenient
  19.   for transferring files between users and to/from bulletin boards, as it
  20.   makes it easy to keep related files together.  Besides collecting files
  21.   together, LHA also compresses them so that they (almost always) take up
  22.   less space than they would do on their own.
  23.  
  24.   The files LHA creates are called LZH archives, since the filenames end
  25.   with .LZH.  This archive format was invented by a programmer in Japan,
  26.   and implemented in an MS-DOS program called LHARC.  LHA is based on
  27.   version 1.13b of LHARC, but with a number of extensions and a great deal
  28.   of optimisation to improve its speed.
  29.  
  30.  
  31.  
  32.  
  33. 2. Terms and Conditions
  34.  
  35.   As of version 1.30, LHA is available in two formats: non-registered
  36.   and registered.  Both formats have all the functions that you need to
  37.   process LZH archives, but registered copies have additional functions
  38.   to make LHA easier to use.  Registered copies are also supplied with
  39.   a number of other programs written by myself.  Please refer to the
  40.   README.1ST file in this distribution for a list of the programs
  41.   included.
  42.  
  43.   The non-registered format may be made freely available on bulletin
  44.   boards, and I encourage you to pass it on to your friends.  However,
  45.   please note that LHA is copyrighted by Roger Burrows, and therefore
  46.   NEITHER format is in the Public Domain.
  47.  
  48.   The registered version is available from Roger Burrows at the address
  49.   given at the very end of this document.  To order, please refer to the
  50.   file README.1ST which is part of this distribution.  If you're reading
  51.   this manual as part of your registration package, thank you!  Your
  52.   contribution will encourage me to keep improving this package.
  53.  
  54.  
  55.  
  56.  
  57.  
  58.                     II. LHA Reference Manual
  59.                     ------------------------
  60.  
  61. 1. Optional command usage summary (registered users only)
  62.  
  63.   Registered copies of LHA support an optional command set which simplifies
  64.   the use of LHA in most circumstances, by assuming a standard set of
  65.   switches.  The full range of commands and switches is still available at
  66.   all times should you need them.  The syntax from a shell like Gulam is:
  67.  
  68.       LHA <command> <Archive[.LZH]> [<File> ... ]
  69.  
  70.   If you are running LHA from the Desktop, double-click on LHA.TTP, and
  71.   enter:
  72.  
  73.       <command> <Archive[.LZH]> [<File> ... ]
  74.  
  75.   In either case:
  76.       <Archive>    is the archive name; by default, the extension '.LZH'
  77.                    is assumed
  78.  
  79.       <File> ...   is one or more filenames
  80.  
  81.       <command>    is one of the following.  Note the '-' prefix which
  82.                    MUST be specified:
  83.  
  84.           -add      adds the specified files
  85.  
  86.           -backup   like -add, but also includes files from all directories
  87.                     beneath the specified directory; all file names are
  88.                     stored completely (i.e. including the full path)
  89.  
  90.           -update   adds the specified files to the archive if either:
  91.                     an older file by the same name already exists in the
  92.                     archive or: a file by the same name does not already
  93.                     exist in the archive
  94.  
  95.           -move     equivalent to -add except that files that are added
  96.                     successfully are deleted from the specified directory
  97.                     after addition
  98.  
  99.           -freshen  adds the specified files to the archive if and only
  100.                     if an older file by the same name already exists in
  101.                     the archive
  102.  
  103.           -delete   deletes the specified files from the archive
  104.  
  105.           -extract  extracts the specified files; the logical counterpart
  106.                     of the -add command
  107.  
  108.           -restore  the logical counterpart of the -backup command: will
  109.                     extract files from an archive using any directory
  110.                     information present, creating any (sub)directories 
  111.                     needed which do not exist.
  112.  
  113.           -display  like -extract, but the extracted data is displayed on
  114.                     standard output
  115.  
  116.           -print    same as -display
  117.  
  118.           -test     tests the integrity of the specified files in archive;
  119.                     equivalent to -extract except that the extracted files
  120.                     are not saved
  121.  
  122.           -list     displays information about the specified archived files
  123.                     including full path names and any attached comments
  124.  
  125.   As a convenience to the user, LHA may be invoked without arguments; in
  126.   this case, a help message is displayed, followed by a prompt for the
  127.   command.
  128.  
  129.   If the simplified command set does not provide the exact features
  130.   required, you may use the basic command set (see section 3 below).
  131.  
  132.   A technical note to the curious: the simplified command set is
  133.   translated internally into the basic command set (the translation
  134.   used is shown along side the command name in section 2 below).  It is
  135.   therefore possible to add/override switches to the simplified command
  136.   set, although this hybrid command form is probably more confusing than
  137.   just using the basic command set with switches.
  138.  
  139.  
  140.  
  141.  
  142. 2. Detailed description of optional commands
  143.  
  144.   1) Archive modifying commands
  145.     These commands can operate on only one archive.  Wild-card characters
  146.     may NOT be used to specify the archive.
  147.  
  148.     -add (equivalent basic command: ah+t+)
  149.  
  150.         LHA -add Archive.LZH project.*
  151.  
  152.         ACTION:  all files matching 'project.*' are archived and added
  153.         to 'Archive.LZH'.  The timestamp of the archive is set equal
  154.         to that of the latest file in the archive.
  155.  
  156.         NOTE:  If the archive 'Archive.LZH' does not exist, then LHA
  157.         creates it.  If any file matching 'project.*' is already in
  158.         the archive, then LHA replaces it with the external file.
  159.  
  160.  
  161.     -backup (equivalent basic command: ah+r+t+)
  162.  
  163.         LHA -backup Archive.LZH project.*
  164.  
  165.         ACTION:  all files matching 'project.*' in the specified
  166.         directory AND all its subdirectories are archived and added
  167.         to 'Archive.LZH'.  Files are stored with full pathnames, ready
  168.         for extraction by the '-restore' command.  The timestamp of
  169.         the archive is set equal to that of the latest file in the
  170.         archive.
  171.  
  172.         NOTE:  If the archive 'Archive.LZH' does not exist, then LHA
  173.         creates it.  If any file matching 'project.*' is already in
  174.         the archive, then LHA replaces it with the external file.
  175.  
  176.  
  177.     -update (equivalent basic command: uh+t+)
  178.  
  179.         LHA -update csource file1.c file2.c
  180.  
  181.         ACTION:  'file1.c' and 'file2.c' are archived into 'csource.LZH'
  182.         exactly as though by the 'a' command, except that if either
  183.         file already exists in the archive, LHA checks the date/time
  184.         stamps of the archive version against that of the external
  185.         version.  LHA keeps the newer one and ignores the other.
  186.  
  187.  
  188.     -move (equivalent basic command: mh+t+)
  189.  
  190.         LHA -move zoom.lzh file.ext
  191.  
  192.         ACTION:  'file.ext' is archived into 'zoom.lzh' in the same
  193.         way as with the 'u' command.  If the external file 'file.ext'
  194.         is, in fact, added to the archive, then the external copy of
  195.         it is deleted.  Otherwise, the external copy is retained.
  196.  
  197.  
  198.     -freshen (equivalent basic command: fh+t+)
  199.  
  200.         LHA -freshen headers.lzh *.h
  201.  
  202.         ACTION:  if any external file that matches '*.h' already
  203.         exists in 'headers.lzh', then it will be replaced if the
  204.         external copy of the file is newer than the archive copy.
  205.  
  206.         NOTE:  This is the same as the 'u' command, except that
  207.         nothing will be done if the matching file does not already
  208.         exist in the archive.
  209.  
  210.  
  211.     -delete (equivalent basic command: dh+t+)
  212.  
  213.         LHA -delete bigarc small.txt
  214.  
  215.         ACTION:  deletes 'small.txt' from the archive 'bigarc.lzh'.
  216.  
  217.  
  218.   2) Archive extraction commands
  219.     These commands may operate on one or more archives. Multiple archives
  220.     are specified through wild-card characters.
  221.  
  222.     -extract (equivalent basic command: eh+)
  223.  
  224.         LHA -extract download.lzh *.doc
  225.  
  226.         ACTION:  extracts all files matching '*.doc' from 'download.lzh'.
  227.  
  228.         LHA -extract *
  229.  
  230.         ACTION:  extracts all files from all archives in the current
  231.         directory.
  232.  
  233.         NOTE:  If there is a file with the same name in the target
  234.         directory, then LHA refrains from extraction if the existing
  235.         file has the same time stamp or is newer.
  236.  
  237.  
  238.     -restore (equivalent basic command: eh+x+)
  239.  
  240.         LHA -restore *
  241.  
  242.         ACTION:  extracts all files from all archives in the current
  243.         directory.  If full pathnames (i.e. including subdirectories)
  244.         are present, then those subdirectories will be recreated.
  245.  
  246.         NOTE:  If there is a file with the same name in the target
  247.         directory, then LHA refrains from extraction if the existing
  248.         file has the same time stamp or is newer.
  249.  
  250.  
  251.     -display or -print (equivalent basic command: ph+)
  252.  
  253.         LHA -display sample sample.txt
  254.  
  255.         ACTION:  extracts 'sample.txt' from the archive 'sample.lzh'
  256.         to the standard output.
  257.  
  258.  
  259.     -test (equivalent basic command: th+)
  260.  
  261.         LHA -test new
  262.  
  263.         ACTION:  tests specified members (in this case, all members)
  264.         of archive 'new.lzh', by extracting each of them and
  265.         performing a CRC check.  CRC mismatches are reported; the
  266.         extracted files are not kept.
  267.  
  268.  
  269.     -list (equivalent basic command: lh+x+c+)
  270.  
  271.         LHA -list save
  272.  
  273.         ACTION:  displays the names of each of the specified files
  274.         (in this case, all the files) in 'save.lzh' together with
  275.         the file size (compressed & uncompressed), attributes,
  276.         date/time, CRC value and compression method.  The listing
  277.         for each file occupies one output line, unless comments
  278.         are present, in which case an additional line is used to
  279.         display the comment.
  280.  
  281.  
  282.  
  283.  
  284. 3. Basic command usage summary (available to all users)
  285.  
  286.   The following summarises the basic command format which is available to
  287.   all users.  From a command-line shell, such as Gulam, the syntax to run
  288.   LHA is:
  289.  
  290.     LHA {aumfexpstdlv}[switches] [-[switches] ... ] <Archive[.LZH]>
  291.         [<Base directory>\ | <Base drive>:] [<File> ... ]
  292.  
  293.   If you are running LHA from the Desktop, double-click on LHA.TTP, and
  294.   enter:
  295.  
  296.     {aumfexpstdlv}[switches] [-[switches] ... ] <Archive[.LZH]>
  297.         [<Base directory>\ | <Base drive>:] [<File> ... ]
  298.  
  299.   In either case, the parameters should be entered on one line (they are
  300.   split on to two lines above for readability only).  As a convenience to
  301.   the user, LHA may be invoked without arguments; in this case, a help
  302.   message is displayed, followed by a prompt for the command.  Otherwise,
  303.   the command is entered as the first argument.
  304.  
  305.   One of the eleven listed commands must be specified.  Switches (see below
  306.   for a complete list) are optional; they may be concatenated as desired,
  307.   with the exception of the 'g', 'v' and 'w' switches, which each take
  308.   everything following in the string as an argument and thus must be the
  309.   last switches in a string.  Switches are normally placed immediately
  310.   following the command; however, they may also be separated from the
  311.   command and immediately preceded by a '-'; this allows for the case when
  312.   you wish to specify more than one of the 'g', 'v' or 'w' switches.
  313.   Commands and switches may be entered in upper or lower case, as desired.
  314.  
  315.   The remaining specifications may contain pathnames.  As a convenience for
  316.   those used to Un*x-style pathnames, directories may be separated by '/'
  317.   or '\' characters transparently.
  318.  
  319.   The Archive must be specified; if the file extension is omitted, it is
  320.   assumed to be .LZH.  If it is specified, and is not .LZH, and the command
  321.   could update the archive, and the 'm' (no prompt) switch is not set, then
  322.   the user will be asked to verify the update.
  323.  
  324.   The Base directory or Base drive is optional, and is indicated by a name
  325.   ending with a '\' or ':'.  If specified, everything happens as if this
  326.   directory or drive were the current directory or drive.  Specifically:
  327.     1) when updating an archive with the 'x' switch, there will be no
  328.        record of this directory name in the archive, and
  329.     2) when extracting files from an archive, the extracted files will
  330.        be written to this directory by default.
  331.   In practice, you will probably never wish to specify this; see section 4
  332.   (concepts and terminology) for more details, and also the 'Important Note'
  333.   below.
  334.  
  335.   One or more files may be specified, either as unique filenames or with
  336.   standard GEMDOS wild-card specifications; if omitted, a default of '*.*'
  337.   (i.e. all files in the current or Base directory) is assumed for all
  338.   commands except 'd' (delete).  For safety, the filename(s) or wild-card
  339.   specification(s) must be explicitly entered for the delete command.
  340.   The case of filenames and pathnames is ignored in comparisons.  This
  341.   allows the selective extraction of files created on other systems that
  342.   support lower case in filenames (e.g. Un*x).
  343.  
  344.   As noted above, just type LHA to see the help menu.
  345.  
  346.   Important Note:
  347.   ---------------
  348.   In early versions of LHA, files could only be extracted to directories
  349.   other than the default directory by specifying a Base directory or Base
  350.   drive.  This feature was a carry-over from the original MS-DOS lharc
  351.   program.  Since this is incompatible with ARCSHELL and standard ARC
  352.   syntax, a compatibility feature was added to LHA in version 1.10.  As
  353.   of version 1.10, you may continue to use the Base drive/directory
  354.   syntax, OR you may use an ARC-like syntax:
  355.  
  356.     e myarc.lzh g:\some\abc.def
  357.  
  358.   will extract file abc.def from the 'myarc.lzh' archive into the 'g:\some'
  359.   directory.  In order for LHA to use the ARCSHELL-compatible syntax, the
  360.   following must be true:
  361.     1) the 'p' switch must be zero
  362.     2) the Base drive/directory must be omitted.
  363.  
  364.  
  365.  
  366.  
  367. 4. Detailed description of basic commands
  368.  
  369.   1) Archive modifying commands [aumfd]
  370.     These commands can operate on only one archive.  Wild-card characters
  371.     may NOT be used to specify the archive.
  372.  
  373.     a (Add)
  374.  
  375.        LHA a Archive.LZH project.*
  376.  
  377.          ACTION:  all files matching 'project.*' are archived and added
  378.          to 'Archive.LZH'.
  379.  
  380.          NOTE:  If the archive 'Archive.LZH' does not exist, then LHA
  381.          creates it.  If any file matching 'project.*' is already in
  382.          the archive, then LHA replaces it with the external file.
  383.  
  384.  
  385.     u (Update)
  386.  
  387.        LHA u csource file1.c file2.c
  388.  
  389.          ACTION:  'file1.c' and 'file2.c' are archived into 'csource.LZH'
  390.          exactly as though by the 'a' command, except that if either
  391.          file already exists in the archive, LHA checks the date/time
  392.          stamps of the archive version against that of the external
  393.          version.  LHA keeps the newer one and ignores the other.
  394.  
  395.          NOTE:  If the 'i' switch is specified, the 'u' command is
  396.          exactly the same as the 'a' command.
  397.  
  398.  
  399.     m (Move)
  400.  
  401.        LHA m zoom.lzh file.ext
  402.  
  403.          ACTION:  'file.ext' is archived into 'zoom.lzh' in the same
  404.          way as with the 'u' command.  If the external file 'file.ext'
  405.          is, in fact, added to the archive, then the external copy of
  406.          it is deleted.  Otherwise, the external copy is retained.
  407.  
  408.  
  409.     f (Freshen)
  410.  
  411.        LHA f headers.lzh *.h
  412.  
  413.          ACTION:  if any external file that matches '*.h' already
  414.          exists in 'headers.lzh', then it will be replaced if the
  415.          external copy of the file is newer than the archive copy.
  416.  
  417.          NOTE:  This is the same as the 'u' command, except that
  418.          nothing will be done if the matching file does not already
  419.          exist in the archive.  The 'i' switch may be specified to
  420.          force replacement without regard to date/time checking.
  421.  
  422.  
  423.     d (Delete)
  424.  
  425.        LHA d bigarc small.txt
  426.  
  427.          ACTION:  deletes 'small.txt' from the archive 'bigarc.lzh'.
  428.  
  429.  
  430.   2) Archive extraction commands [expstlv]
  431.     These commands may operate on one or more archives. Multiple archives
  432.     are specified through wild-card characters.
  433.  
  434.     e (Extract) or x (eXtract)
  435.  
  436.        LHA e download.lzh *.doc
  437.  
  438.          ACTION:  extracts all files matching '*.doc' from 'download.lzh'.
  439.  
  440.        LHA x *
  441.  
  442.          ACTION:  extracts all files from all archives in the current
  443.          directory.
  444.  
  445.          NOTE:  If there is a file with the same name in the target
  446.          directory, then LHA refrains from extraction if the existing
  447.          file has the same time stamp or is newer.  The 'i' switch
  448.          will force LHA to ignore the time stamp check.
  449.  
  450.  
  451.     p (disPlay) or s (diSplay)
  452.  
  453.        LHA s sample sample.txt
  454.  
  455.          ACTION:  extracts 'sample.txt' from the archive 'sample.lzh'
  456.          to the standard output.
  457.  
  458.          NOTE:  The 'v' switch may be specified to allow browsing
  459.          through the output; it functions by writing the standard
  460.          output to a temporary file instead, and invoking a utility
  461.          program to browse the file; the temporary file is deleted
  462.          automatically afterwards.  The default utility invoked is
  463.          'less' (supplied with the LHA registration package), but this
  464.          may be overridden by specifying the name of the utility
  465.          immediately following the 'v' switch.  For example,
  466.              LHA pvmore archive.lzh file1.ext file2.ext
  467.          will write 'file1.ext' and 'file2.ext' to a temporary file
  468.          and invoke the 'more' command to browse it.
  469.  
  470.  
  471.     t (Test)
  472.  
  473.        LHA t new
  474.  
  475.          ACTION:  tests specified members (in this case, all members)
  476.          of archive 'new.lzh', by extracting each of them and
  477.          performing a CRC check.  CRC mismatches are reported; the
  478.          extracted files are not kept.
  479.  
  480.  
  481.     l (List)
  482.  
  483.        LHA l save
  484.  
  485.          ACTION:  displays the names of each of the specified files
  486.          (in this case, all the files) in 'save.lzh' together with
  487.          the file size (compressed & uncompressed), attributes,
  488.          date/time, CRC value and compression method.  The listing
  489.          for each file occupies one output line.
  490.  
  491.          NOTE:  The 'x' switch may be specified to cause listing of
  492.          the full stored pathname; if the stored pathname includes
  493.          subdirectories, this requires one additional line per file.
  494.          The 'c' switch may be specified to cause listing of any
  495.          stored comments; if present, this requires one additional
  496.          line per file.
  497.  
  498.  
  499.     v (Verbose list)
  500.  
  501.        LHA v foobar.xxx *.h
  502.  
  503.          ACTION:  displays the full stored pathname of each of the
  504.          files in 'foobar.xxx' (assumed to be a .LZH archive) that
  505.          has a file extension of '.h'.  The following information
  506.          is also listed: their size (compressed & uncompressed),
  507.          attributes, date/time, CRC value, compression method, and
  508.          comment (if present).
  509.  
  510.          NOTE:  This is exactly the same display as produced by the
  511.          'l' command with the 'x' switch.
  512.  
  513.  
  514.  
  515.  
  516. 5. Detailed switch description
  517.  
  518.   General:
  519.     You may specify switch(es) immediately following the command, and/or
  520.     following a '-'.  If you want to specify more than one switch, type
  521.     characters continuously without any spaces between (for example,
  522.     -rxw or -cxv).  When the switches 'g', 'v' or 'w' are used with
  523.     other switch(es), they must be specified at the end of the sequence.
  524.  
  525.     You may place a '+' or '-' sign after switches with the following
  526.     meanings:  '+' sets the switch on, and '-' sets the switch off.  In
  527.     addition, a '2' may be placed after the 'r' or 'v' switch with a
  528.     special meaning (as described later).  A switch on its own acts as
  529.     a toggle; if the option was off, it is turned on, and vice versa.
  530.  
  531.  
  532.     a[-|+] (any Attribute)
  533.  
  534.        Applicable commands: {aum}
  535.        ACTION:  allows files with any attributes to be archived.  If
  536.        the 'a' switch is not specified, files with the Hidden or
  537.        System attribute are not included when building the list of
  538.        files to be added.  If the 'a' switch is specified, these
  539.        files are included in addition to 'Normal' and Read-Only files.
  540.        Example:
  541.            LHA aa test *.*
  542.        adds all files in the current directory to 'test.lzh',
  543.        including those with Hidden or System attributes.
  544.  
  545.  
  546.     b[-|+] (retain Backup)
  547.  
  548.        Applicable commands: {aumfd}
  549.        ACTION:  preserves the archive prior to the update as a .BAK
  550.        file.  Note that any existing .BAK file will be removed if
  551.        the update is successful.
  552.  
  553.  
  554.     c[-|+] (use Comments)
  555.  
  556.        Applicable commands: {aumflv}
  557.        ACTION:  adds or displays comments that have been stored in
  558.        a format compatible with that used by LHARC051, as follows:
  559.        a) the command is one of {aumf}.  In this case, the 'c'
  560.           switch allows comments to be tagged to a file as it is
  561.           added to the archive.  As each file is added, the user
  562.           will be prompted for a comment of up to 50 characters
  563.           in length.
  564.        b) the command is one of {lv}.  In this case, any stored
  565.           comments will be displayed as part of the output,
  566.           enclosed by square brackets [].
  567.  
  568.        NOTE: Certain archivers (including LHARC102) create archive
  569.        headers that appear to contain LHARC051-style comments, but
  570.        in fact contain extension information, some of which is
  571.        non-printable.  When displaying such archives with this
  572.        switch set, the displayed comment line will contain an
  573.        interpretation of the extension information, rather than
  574.        a literal display of the data.  The interpreted data will
  575.        be enclosed in curly braces {}.
  576.  
  577.  
  578.     g[-|+|<encryption key>] (set encryption key)
  579.  
  580.        Applicable commands: {aumfexpst}
  581.        ACTION:  encrypts or decrypts archive members, as follows:
  582.        a) the command is one of {aumf}, and thus an archive is
  583.           being updated.  The added members will be encrypted
  584.           with the specified encryption key as they are added.
  585.        b) the command is one of {expst}, and thus a member is
  586.           being extracted.  The extracted members will be
  587.           decrypted with the specified encryption key as they
  588.           are extracted.
  589.        Note that if an encryption key is present, the switch is
  590.        always set, i.e. it is always treated as 'g+'.
  591.        Example:
  592.            LHA agAAA new secret.txt
  593.        adds an encrypted copy of 'secret.txt' to the archive
  594.        'new.lzh'.  The copy is encrypted with the key AAA.
  595.  
  596.  
  597.     h[-|+] (Hold screen)
  598.  
  599.        Applicable commands: {aumfdexpstlv}
  600.        ACTION:  causes the program to wait for a keypress before
  601.        exiting.  This is mostly intended for when LHA is called
  602.        from the desktop, to allow program messages to be read
  603.        before the desktop is redisplayed.
  604.  
  605.  
  606.     i[-|+] (Ignore comparison of time stamp)
  607.  
  608.        Applicable commands: {aumfexpst}
  609.        ACTION:  causes date/time stamps of files to be ignored
  610.        when adding to, or extracting from, archives.
  611.        Example:
  612.            LHA ei old file1.ext file2.ext
  613.        extracts 'file1.ext' and 'file2.ext' from 'old.lzh',
  614.        overwriting any existing files of the same name, regardless
  615.        of date/time stamps.
  616.  
  617.  
  618.     m[-|+] (no Message)
  619.  
  620.        Applicable commands: {aumfdexpst}
  621.        ACTION:  suppresses program prompt in the following cases:
  622.        a) the command is one of {aumfd}, the archive file
  623.           extension is specified, and it is not '.LZH'.  In this
  624.           case, the program will continue, with the (initial)
  625.           assumption that the archive file is valid.
  626.        b) the command is one of {ex}, and a directory must be
  627.           created to receive the extracted file.  In this case,
  628.           the directory will be created automatically, without
  629.           prompting the user.
  630.        c) the command is one of {ex}, and an existing file would
  631.           be overwritten by a file being extracted from the
  632.           archive (either due to a more recent time stamp, or
  633.           through specifying the 'i' switch).  In this case, the
  634.           file will be silently overwritten.
  635.        Example:
  636.            LHA xm archive temp\file1.ext
  637.        will cause LHA to create the directory 'temp' if it does
  638.        not already exist, or to overwrite the file 'file1.ext' in
  639.        directory 'temp' if it does exist, without prompting.
  640.  
  641.  
  642.     n[-|+] (No indicator)
  643.  
  644.        Applicable commands: {aumfexpst}
  645.        ACTION:  suppresses the display of the progress indicator
  646.        when compressing or decompressing files.
  647.  
  648.  
  649.     p[-|+] (Precise)
  650.  
  651.        Applicable commands: {fdexpstlv}
  652.        ACTION:  allows the user to precisely distinguish between
  653.        archived files, that have the same filename but are stored
  654.        with different pathnames.  Assume an archive cc.lzh contains
  655.        both \stat.h and \sys\stat.h:
  656.            LHA e cc stat.h
  657.        will extract both files to 'stat.h' in the current directory;
  658.        as a result, the one with the older date/time stamp will be
  659.        overwritten by the other.
  660.            LHA ep cc.lzh stat.h
  661.        will extract only \stat.h to 'stat.h'.
  662.            LHA ep cc.lzh sys\stat.h
  663.        will extract only sys\stat.h to 'stat.h'.
  664.  
  665.        NOTE:  As of LHA version 1.10, specifying the 'p' switch also
  666.        has the side effect of turning off ARCSHELL compatibility;
  667.        this should not be a concern, since ARCSHELL itself never
  668.        sets the 'p' switch.
  669.  
  670.  
  671.     r[-|+|2] (Recursively search directories)
  672.  
  673.        Applicable commands: {aum}
  674.        ACTION:  recursively searches directories for files to be
  675.        archived.  If the 'r' switch is not specified, only files
  676.        in the Base or Current directory will be archived.  If the
  677.        'r' switch is specified, it selects one of two modes:
  678.        a) filename mode, if 'r' or 'r+' is specified
  679.           This disregards directory names, and adds to the archive
  680.           all the files in the Base or Current directory (and its
  681.           subdirectories) with names that match the specified
  682.           filename.
  683.        b) directory mode, if 'r2' is specified
  684.           This disregards filenames, and adds to the archive all
  685.           files under the Base or Current directory (and its
  686.           subdirectories).  This is normally used to archive a
  687.           complete directory.
  688.        Examples:
  689.            LHA ar cstuff *.c
  690.        adds to archive 'cstuff.lzh' all the files with the
  691.        extension .c under the current directory.
  692.            LHA ar2 documents.lzh \doc\
  693.        archives all the files in the \doc\ directory (and
  694.        subdirectories) into documents.lzh.  Normally used to
  695.        archive a complete directory.
  696.  
  697.        NOTE:  Switches 'r' and 'r2' automatically set the 'x'
  698.        switch.  If you wish to have 'r' or 'r2' without 'x',
  699.        set the 'x' switch off (by using 'x-') after the 'r'
  700.        or 'r2' specification.
  701.  
  702.  
  703.     t[-|+] (archive Time-stamp)
  704.  
  705.        Applicable commands: {aumfd}
  706.        ACTION:  causes the output archive to be time-stamped
  707.        with the date and time of the most recent file in the
  708.        archive, rather than the current date & time.
  709.  
  710.  
  711.     v[-|+|2|<browse command name>] (View by page)
  712.  
  713.        Applicable commands: {ps}
  714.        ACTION:  allows browsing of output produced by the 'p'/'s'
  715.        command.  Instead of copying the output to stdout, a
  716.        temporary file LHA.TMP is created, and a browse utility
  717.        is invoked to access it.  The name of the browse utility
  718.        follows the 'v' switch; if not specified, the default
  719.        browse utility is 'less'.  After the browse utility ends,
  720.        the temporary file is deleted automatically.  The standard
  721.        'v' switch generates a separator line between each file
  722.        copied to LHA.TMP so that the user can distinguish them;
  723.        the 'v2' switch suppresses this separator line.  This is
  724.        primarily to facilitate viewing binary files with a dump
  725.        utility.
  726.        Note that if a browse command name is present, the switch
  727.        is always set.  If 'v2' was specified, it remains a '2';
  728.        otherwise it is treated as 'v+'.
  729.        Examples:
  730.            LHA pv myarc *.doc
  731.        allows browsing of all '.doc' files in 'myarc.lzh', using
  732.        the 'less' utility.
  733.            LHA pv2xd hexarc
  734.        allows browsing of all files in 'hexarc.lzh', using the
  735.        'xd' utility.
  736.  
  737.  
  738.     w[-|+|<working directory name>] (set Work directory name)
  739.  
  740.        Applicable commands: {aumfdps}
  741.        ACTION:  causes any temporary files that are needed to be
  742.        created in the specified working directory (the directory
  743.        must already exist).  If no directory name is specified,
  744.        the current directory becomes the working directory.
  745.        Temporary files are needed in two circumstances:
  746.        a) the command is one of {aumfd}, and thus an archive is
  747.           being updated.  The updated archive is created in the
  748.           working directory, the old archive is deleted, and the
  749.           updated archive is put back into the current directory.
  750.           This is done by renaming the file (if possible), or by
  751.           copying the file to the current directory.
  752.        b) the command is one of {ps}, and the 'v' switch is set to
  753.           allow browsing the output.  The browse file is created
  754.           in the working directory, and deleted when the browse
  755.           utility terminates.
  756.        Note that if a work directory name is present, the switch is
  757.        always set, i.e. it is always treated as 'w+'.
  758.        Example:
  759.            LHA awm:\tmp xyzzy file1.ext file2.ext
  760.        adds 'file1.ext' and 'file2.ext' to the archive 'xyzzy.lzh',
  761.        placing the updated archive in directory 'm:\tmp' temporarily.
  762.  
  763.        There are two common uses for this feature:
  764.        1) you have no room in the directory where the .LZH file
  765.           resides, or
  766.        2) you want your work done silently and swiftly on a ram disk.
  767.  
  768.  
  769.     x[-|+] (eXtend)
  770.     z[-|+]
  771.  
  772.        Applicable commands: {aumexlv}
  773.        ACTION:  extends file names with directory names, in the
  774.        following cases:
  775.        a) the command is one of {aum}.  In this case, the 'x'
  776.           switch will include the pathname (excluding drivename)
  777.           in the filename stored in the archive.  Suppose you are
  778.           in the root directory \, and you have a file stat.h in
  779.           directory \cc\include\sys:
  780.               LHA a Archive.LZH \cc\include\sys\stat.h
  781.           will store the filename as stat.h only.
  782.               LHA ax Archive.LZH \cc\include\sys\stat.h
  783.           will store the filename as \cc\include\sys\stat.h.
  784.        b) the command is one of {ex}.  In this case, the 'x'
  785.           switch will extend the filenames so that files are
  786.           restored to the appropriate subdirectories.  Suppose
  787.           you are in the root directory \, and Archive.LZH was
  788.           created with the 'x' switch and contains the stat.h
  789.           file from directory \cc\include\sys\:
  790.               LHA e Archive.LZH stat.h
  791.           will extract the stat.h file to the current directory.
  792.               LHA ez Archive.LZH stat.h
  793.           will extract stat.h into the directory \cc\include\sys
  794.           (if one or more of the directories in the path does not
  795.           exist, you will be prompted whether to create it).
  796.        c) the command is {l}.  In this case, the full stored
  797.           pathname is listed for each member of the archive (the
  798.           'l' command with the 'x' option is exactly equivalent
  799.           to the 'v' command).
  800.  
  801.        NOTE 1:  You may specify this function with the 'z' switch
  802.        instead of the 'x' switch; they are interchangeable.  The
  803.        'z' switch is introduced in LHA v1.30 for compatibility
  804.        with the 'Include Subdirectories' feature of ARCSHELL v2.3.
  805.  
  806.        NOTE 2:  Switches 'r' and 'r2' automatically set the 'x'
  807.        switch.  If you wish to have 'r' or 'r2' without 'x', set
  808.        the 'x' switch off (by using 'x-') after the 'r' or 'r2'
  809.        specification.
  810.  
  811.  
  812.  
  813.  
  814. 6. Encryption technique
  815.   The encryption technique used is simple and therefore does not have
  816.   significant performance overhead, yet it provides effective protection
  817.   against casual efforts at breaking.  It is based on exclusive ORing a
  818.   variable-length key with the data; the same technique will recover the
  819.   original data.
  820.  
  821.   Since no other archiver currently provides encryption, you may wish to
  822.   avoid using this feature to encrypt archives that you are providing to
  823.   others, unless you are sure that they are using LHA v1.30 or above.
  824.  
  825.   For anyone wishing to add this feature to another archiver, the following
  826.   fragment of C code demonstrates the technique used:
  827.  
  828.   char *key;            /* ptr to start of variable-length key */
  829.   char *keyptr;         /* work ptr; NULL if no key */
  830.   /*
  831.    * crypt - encryption/decryption routine
  832.    */
  833.   int crypt(int c)      /* c is the CHARACTER to encode */
  834.   {
  835.       if (keyptr) {             /* key supplied ? */
  836.           if (!*keyptr)         /* at end of key ? */
  837.               keyptr = key;     /* yes - reinitialise */
  838.           return c^*keyptr++;   /* XOR it */
  839.       }
  840.       return c;                 /* no key, no change */
  841.   }
  842.  
  843.  
  844.  
  845.  
  846. 7. Concepts and terminology
  847.  
  848.   1) Base directory/drive
  849.  
  850.   This is a concept inherited from the original PC version of LHARC,
  851.   and retained since it allows for complex processing of subdirectory
  852.   structures that would not otherwise be possible.  As of LHA version
  853.   1.10, it is not necessary to use (or understand) it, UNLESS you are
  854.   extracting files using the 'p' switch (however, if you're comfortable
  855.   with the concept, don't panic: you can can still use it at any time).
  856.  
  857.   If you DO use the 'p' switch, in order to distinguish between archived
  858.   files of the same name in different subdirectories, then you WILL need
  859.   to use the Base directory/drive if you wish to restore the files to
  860.   directory(ies) other than the ones they are archived under.  The use
  861.   of Base directory/drive is probably best explained by examples.
  862.  
  863.   Example 1: to extract from an archive to another drive/directory:
  864.       lha  x  z:\temp99\boring  m:\somedir\  *.txt
  865.                                             ^
  866.                                          SEE NOTE
  867.   This extracts all .txt files from the boring archive to subdirectory
  868.   somedir of drive m:.  NOTE: there are one or more spaces between
  869.   the target directory name and the file specification.  In this example,
  870.       z:\temp99\boring     is the ARCHIVE
  871.       m:\somedir\          is the BASE directory
  872.       *.txt                is the file specification
  873.  
  874.   Example 2: suppose your archive contains a pathname of \ABC\DEF\FILE.DOC.
  875.    a) lha x archive file.doc      puts FILE.DOC into current directory
  876.    b) lha xx archive file.doc     puts FILE.DOC into subdirectory \ABC\DEF
  877.                                   within the current directory
  878.    c) lha x archive z: file.doc   puts FILE.DOC into drive Z
  879.    d) lha xx archive z: file.doc  puts FILE.DOC into subdirectory \ABC\DEF
  880.                                   within drive Z.
  881.  
  882.   You've probably noticed that neither of the above two examples uses
  883.   the 'p' switch: thus they could in fact be done by using the more
  884.   familiar syntax of ARC.  Example 1 becomes:
  885.       lha  x  z:\temp99\boring  m:\somedir\*.txt
  886.   Example 2 becomes:
  887.    a) lha x archive file.doc      puts FILE.DOC into current directory
  888.    b) lha xx archive file.doc     puts FILE.DOC into subdirectory \ABC\DEF
  889.                                   within the current directory
  890.    c) lha x archive z:file.doc    puts FILE.DOC into drive Z
  891.    d) lha xx archive z:file.doc   puts FILE.DOC into subdirectory \ABC\DEF
  892.                                   within drive Z.
  893.   However, the next example illustrates why Base directory/drive may be
  894.   required when using the 'p' switch.
  895.  
  896.   Example 3: suppose you've got an archive containing two different files,
  897.   stored with full pathnames as follows:
  898.       \abc\test.txt
  899.       \def\test.txt
  900.   and you want to extract the first one into c:\pqr\test.txt and the second
  901.   into d:\def\test.txt.  This can be done as follows:
  902.       lha xp archive c:\pqr\ \abc\test.txt
  903.       lha xp archive d:\def\ \def\test.txt
  904.   An alternative way of doing the second is:
  905.       lha xpx archive d: \def\test.txt
  906.   Of course, most people would just extract the files into the directories
  907.   named in the archive, and move them afterwards; but the code to implement
  908.   the 'p' switch was already there, and it took me hours to figure out what
  909.   it meant.  So I left the code in and tried to document its usage: who
  910.   knows, someone might use it one day !
  911.  
  912.  
  913.   2) Drive name, Path name, Directory name, File name:
  914.  
  915.         drive name
  916.         ||
  917.         a:\cc\include\stdio.h
  918.         |<--- path name --->|
  919.         |<---------->||<--->|
  920.        directory name file name
  921.  
  922.  
  923.  
  924.  
  925. 8. Environment variables
  926.  
  927.   The following environment variables are examined by LHA.  They are
  928.   independent, except that the working directory may be specified by
  929.   any of them; in case of such conflict, ARCTEMP overrides LHA which
  930.   overrides TMP.
  931.  
  932.     ARCTEMP: may be used to specify the working directory.  For example,
  933.              to set the working directory to d:\tmp, use:
  934.                  ARCTEMP=d:\tmp\
  935.              Note that the trailing \ in ARCTEMP is optional.  ARCTEMP
  936.              is overridden by the 'w' switch if specified in the program
  937.              arguments.  ARCTEMP is supported for full compatibility
  938.              with the ARCSHELL program.
  939.  
  940.     LHA:     may be used to set switches.  For example, to set switches
  941.              'x' and 'm', use:
  942.                  LHA=xm
  943.              The LHA environment variable is modified by program arguments.
  944.  
  945.     TMP:     may be used to specify the working directory.  For example,
  946.              to set the working directory to d:\tmp, use:
  947.                  TMP=d:\tmp\
  948.              Note that the trailing \ in TMP is optional.  The TMP
  949.              environment variable is overridden by the 'w' switch from
  950.              the 'LHA' environment variable, by the ARCTEMP environment
  951.              variable, or by the 'w' switch from program arguments.
  952.  
  953.  
  954.  
  955.  
  956. 9. Result codes
  957.  
  958.   LHA returns the following result codes on termination:
  959.         0   normal termination.
  960.  
  961.         1   an error has occurred:
  962.             a) the user denied permission to update an archive file that
  963.                did not have the standard '.LZH' extension, or
  964.             b) some specified pathname was not used, or
  965.             c) a header checksum error was detected in an existing archive,
  966.                or
  967.             d) a CRC error occurred during an unarchiving command (one of
  968.                {expst}).  Note that, since CRCs are calculated based on the
  969.                unarchived & non-encrypted text, specification of the wrong
  970.                encryption key when decrypting will cause a CRC error.
  971.  
  972.         2   a fatal error has occurred.  In most cases, no archive will
  973.             have been created or moved, but check the displayed error
  974.             messages for more detailed information.
  975.  
  976.         3   a fatal error has occurred while copying the temporary output
  977.             archive to the permanent output.  The original archive has
  978.             been deleted; the temporary archive is named LHA.)2( and is
  979.             located in the work directory specified by the 'w' switch.
  980.             Try renaming LHA.)2( to your archive's name, although note
  981.             that it could be damaged.
  982.  
  983.  
  984.  
  985.  
  986. 10. Temporary Files
  987.  
  988.   The following filenames are used for temporary files during LHA
  989.   processing:
  990.  
  991.     LHA.)1(  Old archive file after rename.
  992.     LHA.)2(  New archive file before rename.
  993.     LHA.TMP  Work file when the 'w' switch, or the 'p' command with the
  994.              'v' switch, is specified.
  995.  
  996.   If a file with any of these names already exists, then LHA may not
  997.   operate normally.
  998.  
  999.  
  1000.  
  1001.  
  1002. 11. Using LHA with ARC Shell v2.3
  1003.  
  1004.   ARC Shell (by Charles F. Johnson) is a shareware GEM program which adds
  1005.   a GEM interface to archiving programs, letting you point and click to
  1006.   select the various options instead of typing a command line.  The latest
  1007.   version of ARC Shell (v2.3) has some improvements which LHA v1.30 now
  1008.   takes advantage of.
  1009.  
  1010.   LHA v1.30 is now compatible with ARC Shell v2.3 in all of the basic
  1011.   functions, including subdirectory processing.  There are still some
  1012.   minor incompatibilities: certain ARC Shell buttons have no effect on
  1013.   LHA, and certain functions of LHA are not currently available via
  1014.   ARC Shell.  The following summarises the interface betweeen LHA v1.30
  1015.   and ARC Shell v2.3:
  1016.  
  1017.     a) The following ARC Shell buttons are fully compatible with LHA:
  1018.          Add, Move, Update, Freshen, Delete, Test, eXtract,
  1019.          copy to Stdout, List, Verbose list, Hold Screen,
  1020.          Keep Backup, Include Subdirectories, Encrypt, LZH comments
  1021.  
  1022.     b) The following ARC Shell button is not passed to LHA, and therefore
  1023.        has no effect:
  1024.          Overwrite Existing Files
  1025.  
  1026.     c) The following ARC Shell buttons are not supported by LHA and will
  1027.        cause an error message to be issued:
  1028.          Run, cOnvert, Suppress compression
  1029.  
  1030.     d) The following ARCSHELL buttons have unexpected effects:
  1031.          Suppress Messages
  1032.              This is interpreted by LHA as specifying a working directory
  1033.              and if Suppress Notes and/or LZH Comments are set, they will
  1034.              be treated as the working directory name.
  1035.              DON'T USE THIS SWITCH !
  1036.          Suppress Notes
  1037.              This actually suppresses display of the progress indicator.
  1038.  
  1039.     e) The following LHA switches provide functions that are NOT supported
  1040.        by ARC Shell:
  1041.          a (any Attribute), i (Ignore comparison of time stamp),
  1042.          m (no Message), p (Precise), r (Recursively search directories),
  1043.          t (archive Time-stamp), v (View by page)
  1044.        Lack of access to these options will probably not cause problems
  1045.        to most users of ARC Shell.
  1046.  
  1047.     f) The 'Printer Name' for LHA on the ARC Shell configuration screen
  1048.        should be PRN:, not PRT:.
  1049.  
  1050.   I would like to make LHA as compatible with ARC Shell as possible, and
  1051.   I would like to thank Charles Johnson for changes to ARC Shell which
  1052.   have made it easier to be compatible; I have added some additional
  1053.   compatibility features in LHA v1.30 as a result.  I welcome any
  1054.   suggestions for further increasing compatibility with ARC Shell, or
  1055.   with any other graphic shell you use.  Priority, as always, will be
  1056.   given to suggestions from registered users !
  1057.  
  1058.  
  1059.  
  1060.  
  1061. 12. Performance
  1062.  
  1063.   A great amount of time has been spent fine-tuning the code to increase
  1064.   compression & decompression speeds.  For most files, the elapsed time for
  1065.   adding files to an archive is around 40% less than that of LHARC v0.51;
  1066.   for extracting files, the elapsed time is around 45% less.  The following
  1067.   table compares LHA to four other utilities that process .LZH files:
  1068.  
  1069.                        ------- LHA -------  LHARC  LHARC 
  1070.     Test               v1.30  v1.21  v1.10   102    051   FSTLZH16  UNLZH11
  1071.     ----               -----  -----  -----  -----  -----  --------  -------
  1072.     Add binary file      20     20     22     23     26      26       n/a
  1073.     Add text file        82    100    106    116    143     147       n/a
  1074.     Extract binary file  11     11     13     18     20      25         8
  1075.     Extract text file    25     25     33     41     44      58        10
  1076.  
  1077.   All processing was done on a RAM disk to eliminate differences due to data
  1078.   location.  All times are in seconds.  File sizes (as reported by an archive
  1079.   list) are as follows:
  1080.  
  1081.                     Original size        Compressed size
  1082.     Binary file           26719                24854
  1083.     Text file            157050                72692
  1084.  
  1085.  
  1086.  
  1087.  
  1088. 13. LHA Revision History
  1089.  
  1090.   Version 1.00    First released version
  1091.  
  1092.   Version 1.10    Fixes the following bugs:
  1093.                   a) when extracting a file which already exists in the
  1094.                      target directory, the comparison for date/time was
  1095.                      incorrect; this caused the message 'Skipped xxx:
  1096.                      same or more recent file exists' to be issued when
  1097.                      it shouldn't have been, and NOT to be issued when
  1098.                      it should have been.
  1099.  
  1100.                   Changes the following design peculiarities, inherited
  1101.                   from the PC version of LHARC:
  1102.                   a) archives that contain header checksum errors, such
  1103.                      as the 'WORLD.LZH' file on GEnie, are now handled
  1104.                      with a warning message, rather than silently
  1105.                      treating such headers as end-of-archive.
  1106.                   b) extracting identically named files from archives
  1107.                      that contain subdirectories is now handled more
  1108.                      consistently (the situation in which this actually
  1109.                      changes the behaviour of LHA is so obscure that it
  1110.                      is not worth describing).
  1111.  
  1112.                   Adds the following features:
  1113.                   a) ARCSHELL compatibility when extracting files: if
  1114.                      the 'p' switch is not specified, and the 'basedir'
  1115.                      is omitted, the user may specify a fully-qualified
  1116.                      path for each file, and the file will be extracted
  1117.                      to the specified path.  The ARCTEMP environment
  1118.                      variable, which is set by ARCSHELL, is now used by
  1119.                      LHA to control placement of the working directory.
  1120.                   b) comment display, as well as comment addition, is now
  1121.                      controlled by the 'c' switch; this helps in cases
  1122.                      where the "comments" are really garbage (as in
  1123.                      archives created by LHARC102).
  1124.                   c) a smaller i/o buffer size is used when listing
  1125.                      archives; this should speed up archive display,
  1126.                      particularly on slower devices like floppies.
  1127.  
  1128.   Version 1.15    Internal version only: source changed where necessary
  1129.                   to compile under Lattice C v5.04.00.  This mostly
  1130.                   consisted of adding function prototypes where not
  1131.                   already present, and handling small changes in the
  1132.                   library.
  1133.  
  1134.   Version 1.20    Fixes the following bugs:
  1135.                   a) output redirection is now more consistent: for
  1136.                      example, the initial title/usage messages are no
  1137.                      longer subject to redirection.
  1138.                   b) the 'a'/'u'/'m' commands can no longer erroneously
  1139.                      add the temporary file 'lha.)1(' (the temporarily-
  1140.                      renamed existing archive) when updating that archive.
  1141.                      Previously, this could have happened if the filename
  1142.                      specification allowed it (e.g. with a filename spec
  1143.                      of '*.*').
  1144.  
  1145.                   Changes the following design peculiarities, inherited
  1146.                   from the PC version of LHARC:
  1147.                   a) If moving a file to an archive (via the M command)
  1148.                      fails, due to a more recent version of the file
  1149.                      already existing in the archive, the external file
  1150.                      is no longer deleted.  This provides greater safety
  1151.                      in the event that either the archive or file
  1152.                      timestamp is wrong, or that different files have
  1153.                      inadvertently been given the same name.
  1154.  
  1155.                   Adds the following features:
  1156.                   a) the 's' command is now accepted as a synonym for
  1157.                      display: this allows LHA to display files when
  1158.                      running under ARCSHELL v2.1b.
  1159.                   b) LHA now operates more quickly, particularly when
  1160.                      extracting files.  Overall performance is around
  1161.                      5%-30% faster than LHA v1.10.
  1162.  
  1163.   Version 1.21    Fixes the following bugs:
  1164.                   a) the date/time stamp of extracted files (and of output
  1165.                      archive files when the 't' switch is specified) is
  1166.                      finally set correctly when running LHA under TOS 1.0!
  1167.                      This problem has apparently existed in all previous
  1168.                      versions of LHA.  Sincere thanks to Alexander Smith
  1169.                      for pointing this out, and apologies to everyone for
  1170.                      this long-standing major bug; my only defence is that
  1171.                      it always worked correctly under TOS 1.4.
  1172.                   b) the 'h' flag no longer causes the program to hang
  1173.                      under TOS 1.0.  This problem was introduced in v1.20.
  1174.  
  1175.   Version 1.30    Changes the following features:
  1176.                   a) the temporary file in the work directory (if present)
  1177.                      is now renamed (possibly across directories) to the
  1178.                      target file, rather than copied.  This provides some
  1179.                      performance improvement.
  1180.                   b) output from the verbose list function now occupies
  1181.                      the minimum number of lines necessary; in particular,
  1182.                      a verbose list of an archive that does not contain
  1183.                      directory information is now the same as a list of
  1184.                      the same archive.
  1185.  
  1186.                   Adds the following features:
  1187.                   a) the 'g' flag may now be used to specify an
  1188.                      encryption/decryption key.
  1189.                   b) case is ignored when matching filenames, allowing for
  1190.                      the selective extraction of archive members stored
  1191.                      under Un*x-style systems.
  1192.                   c) the extension information stored by lharc102 and
  1193.                      other Un*x-derived versions of lharc is decoded and
  1194.                      displayed when comments display is enabled.
  1195.                   d) LHA now operates more quickly when adding files.
  1196.                      Overall performance is up to 18% faster than
  1197.                      LHA v1.21.
  1198.  
  1199.  
  1200.  
  1201.  
  1202. 14. Our Distribution Policy
  1203.  
  1204.   Under the following conditions, you may freely copy and distribute
  1205.   this software:
  1206.  
  1207.     1. Under all circumstances, 'Copyright by Roger Burrows' and
  1208.        'Copyright by Haruyasu Yoshizaki' must be attached to the copy.
  1209.  
  1210.     2. This manual or its hardcopy should go together with the software.
  1211.  
  1212.     3. You must try to distribute the newest version available.
  1213.  
  1214.     4. Neither Roger Burrows nor Haruyasu Yoshizaki ("the authors")
  1215.        assume any liability for any damages, consequential or otherwise,
  1216.        that you may sustain in using this software.
  1217.  
  1218.     5. The authors have no obligation to revise the program to correct
  1219.        any fault in this software.
  1220.  
  1221.     6. For the commercial use of this software, the authors add the
  1222.        following:
  1223.  
  1224.        a. Any software that is distributed with, or incorporates, this
  1225.           program shall not be copy protected; that is, the standard copy
  1226.           functions of the GEM disktop shall be capable of making an exact
  1227.           copy.
  1228.  
  1229.        b. Every part of the package shall print the copyright banner.
  1230.  
  1231.        c. The distribution policy of this software shall be printed
  1232.           either in the manual, in the package or on the disk-label.
  1233.  
  1234.  
  1235.  
  1236.  
  1237. 15. Acknowledgments
  1238.  
  1239.   *   Principal thanks to Haruyasu Yoshizaki ('Yoshi') for placing the
  1240.       source code in the public domain, and for writing most of it in C
  1241.       (hooray for portability).
  1242.  
  1243.   *   Special gratitude for H.Okumura who uploaded the code for LZARI in
  1244.       PCVAN on which this LZHuf coding is based.  To K.Miki, who re-posted
  1245.       LZARI to Nifty Serve, and who is the author of Larc we also express
  1246.       our gratitude.  For those who contributed reports and comments and
  1247.       information on bugs in the MSDOS version, we thank you very much.
  1248.  
  1249.   *   For the Atari ST version, thanks to (alphabetically) Walter Cole,
  1250.       Alan Dalgliesh, and Bob Deskin for their efforts in improving the
  1251.       useability of this program, both code and documentation; and for
  1252.       being brave enough to risk an untried file compression program.
  1253.       Thanks also to Alexander Smith for helping to make this a better
  1254.       program by his clear and concise bug reports.
  1255.  
  1256.   *   Although LHA is principally based on LHarc v1.13b, numerous changes
  1257.       were made.  They fall into eight areas:
  1258.       1. to handle the architectural differences between Intel and Motorola
  1259.          processors; this principally affects the order of bytes in 16- and
  1260.          32-bit integers.
  1261.       2. to accommodate the different operating system; although GEMDOS is
  1262.          patterned after MSDOS, there are some differences at the lowest
  1263.          levels.
  1264.       3. to allow the use of a different compiler (currently Lattice C
  1265.          version 5.06.01 for the Atari ST).
  1266.       4. to use different library functions, as provided with the Lattice C
  1267.          compiler.
  1268.       5. to provide additional checking of error codes returned by library
  1269.          functions; I believe that all possible errors are now checked for.
  1270.       6. to split the code into more modules, for easier maintenance.
  1271.       7. to rewrite parts of the code in assembler to improve performance.
  1272.       8. to add support for storing and retrieving comments associated with
  1273.          each archive member; these are stored in a manner compatible with
  1274.          LHARC051.
  1275.  
  1276.   Because of the many revisions, there is a non-zero probability that
  1277.   some bugs have been introduced into the ST version of this program
  1278.   (there may still be bugs lurking from the PC version).  I would
  1279.   appreciate your comments and bug reports.  Please route them to me
  1280.   via the following addresses:
  1281.  
  1282.     1) GEnie:                Userid: R.BURROWS1
  1283.  
  1284.     2) BBS:                  NCAUG Bulletin Board (613) 737-1133
  1285.        (1200/2400 baud)      Userid: Roger Burrows
  1286.  
  1287.     3) Snail-mail:           Roger Burrows
  1288.                              Anodyne Software
  1289.                              6 Cobbler Court
  1290.                              Ottawa
  1291.                              Ontario K1V 0B8
  1292.                              Canada
  1293.  
  1294.   Bug reports and suggestions from registered owners will be handled
  1295.   first, but I will endeavour to fix any bugs reported by any user.
  1296.