Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
lbrate(1)		       Archive Extraction		       lbrate(1)

NAME
     lbrate - extract/decompress CP/M LBR archives

SYNOPSIS
     lbrate [-chlntv] [archive.lbr] [match1 [match2 ... ]]

DESCRIPTION
     lbrate lists, extracts, or tests CP/M LBR archives. It does this in an `un-
     zip'-like	manner, mostly hiding the details of individually compressed and
     renamed files, and transparently deals with the required decompression  and
     renaming.

     (It  can also work on CP/M-ish compressed files (`squeezed', etc.)  outside
     of such archives, treating them as if they were really single-member LBRs.)

     The default action is to extract all files in the	specified  archive;  see
     OPTIONS below for how to do other things instead.

OPTIONS
     -c     use/show  creation	date  (and time) rather than last-modified. (But
	    note that many LBRs lack date/time stamps entirely.)

     -h     give terse usage help.

     -l     list files in archive. If verbose listings are enabled, it shows the
	    filename (and the modified filename actually given in  the	LBR,  if
	    the  file  is  compressed), compression method, compressed size (the
	    uncompressed size can't be easily determined), and CRC; but  by  de-
	    fault, it just shows the filename and compressed size.

     -n     don't decompress files, just extract the files precisely as they are
	    stored  in	the LBR. This also means the possibly-modified LBR file-
	    names are used (see FILENAME ISSUES  below),  even	when  used  with
	    `-l'.

     -t     test  files  in  archive  -  check	file CRCs at the LBR level, also
	    checking file checksums for any compressed files. (If used	together
	    with `-n', only LBR CRCs are checked.)

     -v     give verbose output (when used with `-l').	Using `-lv' is the easi-
	    est way to see the filenames specified in the LBR, which are (due to
	    compression/renaming) usually not the original filenames.

     archive.lbr
	    the archive to operate on. You can also specify a CP/M-ish individu-
	    ally-compressed  file  (these  have names like `foo.tqt', `bar.dzc',
	    and `baz.cym'); these are treated as if they were single-entry LBRs.

     match1 etc.
	    optionally specify which archive members to list/extract/test. Those
	    which match any of these filenames/wildcards are processed. Wildcard
	    operators supported are shell-like `*' and `?', but don't forget  to
	    quote  arguments  which  use these (e.g.  `lbrate foo.lbr '*.bar'').
	    Note that, unless you're using `-n', these matches are always on the
	    original filename (the one lbrate normally shows you), and	not  the
	    (often modified) filename stored in the LBR.

FILENAME ISSUES
     All this talk of modified filenames is probably rather confusing, so here's
     a	brief  summary	of  what the deal is with LBR files for those unfamiliar
     with the situation.

     The LBR format in itself is a pure, uncompressed  archival  format;  a  bit
     like  tar files. But while tar files are normally compressed after the com-
     ponent files get bundled together, LBR files normally bundle together  com-
     pressed files.

     Now,  CP/M is limited to 8.3 file naming, so compressed files weren't indi-
     cated by adding an extension, but (loosely speaking) by  changing	the  2nd
     character	of  the extension. So foo.txt becomes foo.tqt, for example. What
     happens to the original name? Easy, it gets stored in the compressed  file,
     and is restored when it's decompressed.

     So, there we have the justification for lbrate's behaviour - LBRs are often
     full  of weirdly-named files, so it's generally best to peek into the start
     of any compressed files, find the real filename, and use  that.  Since  the
     compressed  file  formats all have `magic numbers' and can be very reliably
     detected, this approach is pretty much ideal.

EXTRACTING MULTIPLE ARCHIVES
     lbrate follows the `unzip'-like practice of working on only one archive per
     run, with further `filenames' given on the command-line actually specifying
     files to extract (or whatever). The easiest way to work on  multiple  files
     with lbrate is simply to run it multiple times using for; for example:

     for i in *.{lbr,LBR}; do lbrate -t $i; done

     The  above  would	test all LBR archives in the current directory.  Another
     example, this time to extract all the squeezed/crunched files:

     for i in *.?[qzQZ]*; do lbrate $i; done

TIMESTAMPS
     While the LBR format did support file dates/times, there are a lot of  LBRs
     which  lack  them. lbrate's approach to this is simply to use them whenever
     available. The last-modified date/time is used/shown  by  default;  specify
     `-c' to get creation date/time instead.

DIAGNOSTICS
     Given the two-level nature of the extraction process (the raw extraction of
     the  file from the LBR, then any required decompression), there are (unless
     `-n' is used) two different ways that a corrupted archive can cause reading
     from the LBR to fail. lbrate tries to communicate this  in  the  way  which
     seems most reasonable given the way it's being run, as described here.

     When  testing  an archive, lbrate gives priority to LBR CRC errors. It only
     mentions an error decompressing when there wasn't a CRC error  at	the  LBR
     level.

     When  extracting an archive, lbrate considers decompression errors more im-
     portant; and note that currently, a decompression error means no file  data
     is  written.  (Though  in this case it does say `seems valid at LBR level?'
     if the LBR CRC was ok.) If there's `only' an LBR CRC  mismatch,  then  file
     data is written, but with a warning.

BUGS
     The  CRC  used  by LBR is only 16-bit, so `-t' is a less-than-perfect test.
     The additional checksum test  for	compressed  files  may	improve  matters
     slightly.

SEE ALSO
     nomarch(1), tar(1), gzip(1), bzip2(1)

     The CP/M programs `lt' and `lbrext' do something similar.

AUTHOR
     Russell Marks (rus@svgalib.org).

     The  LZH  decompression  is  based  on  code  by Haruhiko Okumura, Haruyasu
     Yoshizaki, and Kenji Rikitake.

Version 1.1		       30th November, 2001		       lbrate(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=lbrate&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help