bzip2-0.1pl2

This commit is contained in:
Julian Seward 1997-08-29 22:13:13 +02:00
parent 33d1340302
commit 1eb67a9d8f
9 changed files with 118 additions and 95 deletions

View File

@ -2,7 +2,7 @@
CC = gcc CC = gcc
SH = /bin/sh SH = /bin/sh
CFLAGS = -O3 -fomit-frame-pointer -funroll-loops -Wall -Winline -W CFLAGS = -O3 -fomit-frame-pointer -funroll-loops

16
README
View File

@ -8,7 +8,7 @@ GREETINGS!
for details, see the file LICENSE. Pointers to the algorithms used for details, see the file LICENSE. Pointers to the algorithms used
are in ALGORITHMS. Instructions for use are in bzip2.1.preformatted. are in ALGORITHMS. Instructions for use are in bzip2.1.preformatted.
Please read this file carefully. Please read all of this file carefully.
@ -223,7 +223,15 @@ DISCLAIMER:
I very much hope the opposite is true. bzip2 has been carefully I very much hope the opposite is true. bzip2 has been carefully
constructed and extensively tested. constructed and extensively tested.
End of nasty legalities.
PATENTS:
To the best of my knowledge, bzip2 does not use any patented
algorithms. However, I do not have the resources available to
carry out a full patent search. Therefore I cannot give any
guarantee of the above statement.
End of legalities.
I hope you find bzip2 useful. Feel free to contact me at I hope you find bzip2 useful. Feel free to contact me at
@ -240,4 +248,6 @@ Manchester, UK
25 August 1996 (version 0.21) 25 August 1996 (version 0.21)
Guildford, Surrey, UK Guildford, Surrey, UK
7 August 1997 (bzip2, version 0.0) 7 August 1997 (bzip2, version 0.1)
29 August 1997 (bzip2, version 0.1pl2)

View File

@ -1,20 +1,16 @@
Windows 95 & Windows NT users: As of today (3 March 1998) I've removed the
Win95/NT executables from this distribution, sorry.
1. There's a pre-built executable, bzip2.exe, which You can still get an executable from
should work. You don't need to compile anything. http://www.muraroa.demon.co.uk, or (as a last
You can run the `test.bat' batch file to check resort) by mailing me at jseward@acm.org.
the executable is working ok, if you want.
2. The control-C signal catcher seems pretty dodgy The reason for this change of packaging is that it
under Windows, at least for the executable supplied. makes it easier for me to fix problems with specific
When it catches a control-C, bzip2 tries to delete executables if they are not included in the main
its output file, so you don't get left with a half- distribution.
baked file. But this sometimes seems to fail
under Windows. Caveat Emptor! I think I am doing
something not-quite-right in the signal catching.
Windows-&-C gurus got any suggestions?
Control-C handling all seems to work fine under Unix. J
7 Aug 97

View File

@ -406,6 +406,9 @@ helpful to at least allow
to decompress files created by 0.21, but this would to decompress files created by 0.21, but this would
defeat the primary aim of having a patent-free compressor. defeat the primary aim of having a patent-free compressor.
For a more precise statement about patent issues in
bzip2, please see the README file in the distribution.
Huffman coding necessarily involves some coding inefficiency Huffman coding necessarily involves some coding inefficiency
compared to arithmetic coding. This means that compared to arithmetic coding. This means that
.I bzip2 .I bzip2

View File

@ -425,6 +425,9 @@ RREELLAATTIIOONNSSHHIIPP TTOO bbzziipp--00..2211
to decompress files created by 0.21, but this would defeat to decompress files created by 0.21, but this would defeat
the primary aim of having a patent-free compressor. the primary aim of having a patent-free compressor.
For a more precise statement about patent issues in bzip2,
please see the README file in the distribution.
Huffman coding necessarily involves some coding ineffi- Huffman coding necessarily involves some coding ineffi-
ciency compared to arithmetic coding. This means that ciency compared to arithmetic coding. This means that
_b_z_i_p_2 compresses about 1% worse than 0.21, an unfortunate _b_z_i_p_2 compresses about 1% worse than 0.21, an unfortunate

158
bzip2.c
View File

@ -5,7 +5,7 @@
/*-- /*--
This program is bzip2, a lossless, block-sorting data compressor, This program is bzip2, a lossless, block-sorting data compressor,
version 0.1pl0, dated 17-Aug-1997. version 0.1pl2, dated 29-Aug-1997.
Copyright (C) 1996, 1997 by Julian Seward. Copyright (C) 1996, 1997 by Julian Seward.
Guildford, Surrey, UK Guildford, Surrey, UK
@ -71,6 +71,12 @@
That is not to say this program is inherently unreliable. That is not to say this program is inherently unreliable.
Indeed, I very much hope the opposite is true. bzip2 has been Indeed, I very much hope the opposite is true. bzip2 has been
carefully constructed and extensively tested. carefully constructed and extensively tested.
PATENTS:
To the best of my knowledge, bzip2 does not use any patented
algorithms. However, I do not have the resources available to
carry out a full patent search. Therefore I cannot give any
guarantee of the above statement.
--*/ --*/
@ -111,7 +117,6 @@
#endif #endif
#include <string.h> #include <string.h>
#include <signal.h> #include <signal.h>
#include <errno.h>
#include <math.h> #include <math.h>
#define ERROR_IF_EOF(i) { if ((i) == EOF) ioError(); } #define ERROR_IF_EOF(i) { if ((i) == EOF) ioError(); }
@ -125,6 +130,7 @@
--*/ --*/
#if BZ_UNIX #if BZ_UNIX
#include <sys/types.h>
#include <utime.h> #include <utime.h>
#include <unistd.h> #include <unistd.h>
#include <malloc.h> #include <malloc.h>
@ -512,77 +518,77 @@ UInt32 crc32Table[256] = {
/*-- Ugly, innit? --*/ /*-- Ugly, innit? --*/
0x00000000L, 0x04c11db7L, 0x09823b6eL, 0x0d4326d9L, 0x00000000UL, 0x04c11db7UL, 0x09823b6eUL, 0x0d4326d9UL,
0x130476dcL, 0x17c56b6bL, 0x1a864db2L, 0x1e475005L, 0x130476dcUL, 0x17c56b6bUL, 0x1a864db2UL, 0x1e475005UL,
0x2608edb8L, 0x22c9f00fL, 0x2f8ad6d6L, 0x2b4bcb61L, 0x2608edb8UL, 0x22c9f00fUL, 0x2f8ad6d6UL, 0x2b4bcb61UL,
0x350c9b64L, 0x31cd86d3L, 0x3c8ea00aL, 0x384fbdbdL, 0x350c9b64UL, 0x31cd86d3UL, 0x3c8ea00aUL, 0x384fbdbdUL,
0x4c11db70L, 0x48d0c6c7L, 0x4593e01eL, 0x4152fda9L, 0x4c11db70UL, 0x48d0c6c7UL, 0x4593e01eUL, 0x4152fda9UL,
0x5f15adacL, 0x5bd4b01bL, 0x569796c2L, 0x52568b75L, 0x5f15adacUL, 0x5bd4b01bUL, 0x569796c2UL, 0x52568b75UL,
0x6a1936c8L, 0x6ed82b7fL, 0x639b0da6L, 0x675a1011L, 0x6a1936c8UL, 0x6ed82b7fUL, 0x639b0da6UL, 0x675a1011UL,
0x791d4014L, 0x7ddc5da3L, 0x709f7b7aL, 0x745e66cdL, 0x791d4014UL, 0x7ddc5da3UL, 0x709f7b7aUL, 0x745e66cdUL,
0x9823b6e0L, 0x9ce2ab57L, 0x91a18d8eL, 0x95609039L, 0x9823b6e0UL, 0x9ce2ab57UL, 0x91a18d8eUL, 0x95609039UL,
0x8b27c03cL, 0x8fe6dd8bL, 0x82a5fb52L, 0x8664e6e5L, 0x8b27c03cUL, 0x8fe6dd8bUL, 0x82a5fb52UL, 0x8664e6e5UL,
0xbe2b5b58L, 0xbaea46efL, 0xb7a96036L, 0xb3687d81L, 0xbe2b5b58UL, 0xbaea46efUL, 0xb7a96036UL, 0xb3687d81UL,
0xad2f2d84L, 0xa9ee3033L, 0xa4ad16eaL, 0xa06c0b5dL, 0xad2f2d84UL, 0xa9ee3033UL, 0xa4ad16eaUL, 0xa06c0b5dUL,
0xd4326d90L, 0xd0f37027L, 0xddb056feL, 0xd9714b49L, 0xd4326d90UL, 0xd0f37027UL, 0xddb056feUL, 0xd9714b49UL,
0xc7361b4cL, 0xc3f706fbL, 0xceb42022L, 0xca753d95L, 0xc7361b4cUL, 0xc3f706fbUL, 0xceb42022UL, 0xca753d95UL,
0xf23a8028L, 0xf6fb9d9fL, 0xfbb8bb46L, 0xff79a6f1L, 0xf23a8028UL, 0xf6fb9d9fUL, 0xfbb8bb46UL, 0xff79a6f1UL,
0xe13ef6f4L, 0xe5ffeb43L, 0xe8bccd9aL, 0xec7dd02dL, 0xe13ef6f4UL, 0xe5ffeb43UL, 0xe8bccd9aUL, 0xec7dd02dUL,
0x34867077L, 0x30476dc0L, 0x3d044b19L, 0x39c556aeL, 0x34867077UL, 0x30476dc0UL, 0x3d044b19UL, 0x39c556aeUL,
0x278206abL, 0x23431b1cL, 0x2e003dc5L, 0x2ac12072L, 0x278206abUL, 0x23431b1cUL, 0x2e003dc5UL, 0x2ac12072UL,
0x128e9dcfL, 0x164f8078L, 0x1b0ca6a1L, 0x1fcdbb16L, 0x128e9dcfUL, 0x164f8078UL, 0x1b0ca6a1UL, 0x1fcdbb16UL,
0x018aeb13L, 0x054bf6a4L, 0x0808d07dL, 0x0cc9cdcaL, 0x018aeb13UL, 0x054bf6a4UL, 0x0808d07dUL, 0x0cc9cdcaUL,
0x7897ab07L, 0x7c56b6b0L, 0x71159069L, 0x75d48ddeL, 0x7897ab07UL, 0x7c56b6b0UL, 0x71159069UL, 0x75d48ddeUL,
0x6b93dddbL, 0x6f52c06cL, 0x6211e6b5L, 0x66d0fb02L, 0x6b93dddbUL, 0x6f52c06cUL, 0x6211e6b5UL, 0x66d0fb02UL,
0x5e9f46bfL, 0x5a5e5b08L, 0x571d7dd1L, 0x53dc6066L, 0x5e9f46bfUL, 0x5a5e5b08UL, 0x571d7dd1UL, 0x53dc6066UL,
0x4d9b3063L, 0x495a2dd4L, 0x44190b0dL, 0x40d816baL, 0x4d9b3063UL, 0x495a2dd4UL, 0x44190b0dUL, 0x40d816baUL,
0xaca5c697L, 0xa864db20L, 0xa527fdf9L, 0xa1e6e04eL, 0xaca5c697UL, 0xa864db20UL, 0xa527fdf9UL, 0xa1e6e04eUL,
0xbfa1b04bL, 0xbb60adfcL, 0xb6238b25L, 0xb2e29692L, 0xbfa1b04bUL, 0xbb60adfcUL, 0xb6238b25UL, 0xb2e29692UL,
0x8aad2b2fL, 0x8e6c3698L, 0x832f1041L, 0x87ee0df6L, 0x8aad2b2fUL, 0x8e6c3698UL, 0x832f1041UL, 0x87ee0df6UL,
0x99a95df3L, 0x9d684044L, 0x902b669dL, 0x94ea7b2aL, 0x99a95df3UL, 0x9d684044UL, 0x902b669dUL, 0x94ea7b2aUL,
0xe0b41de7L, 0xe4750050L, 0xe9362689L, 0xedf73b3eL, 0xe0b41de7UL, 0xe4750050UL, 0xe9362689UL, 0xedf73b3eUL,
0xf3b06b3bL, 0xf771768cL, 0xfa325055L, 0xfef34de2L, 0xf3b06b3bUL, 0xf771768cUL, 0xfa325055UL, 0xfef34de2UL,
0xc6bcf05fL, 0xc27dede8L, 0xcf3ecb31L, 0xcbffd686L, 0xc6bcf05fUL, 0xc27dede8UL, 0xcf3ecb31UL, 0xcbffd686UL,
0xd5b88683L, 0xd1799b34L, 0xdc3abdedL, 0xd8fba05aL, 0xd5b88683UL, 0xd1799b34UL, 0xdc3abdedUL, 0xd8fba05aUL,
0x690ce0eeL, 0x6dcdfd59L, 0x608edb80L, 0x644fc637L, 0x690ce0eeUL, 0x6dcdfd59UL, 0x608edb80UL, 0x644fc637UL,
0x7a089632L, 0x7ec98b85L, 0x738aad5cL, 0x774bb0ebL, 0x7a089632UL, 0x7ec98b85UL, 0x738aad5cUL, 0x774bb0ebUL,
0x4f040d56L, 0x4bc510e1L, 0x46863638L, 0x42472b8fL, 0x4f040d56UL, 0x4bc510e1UL, 0x46863638UL, 0x42472b8fUL,
0x5c007b8aL, 0x58c1663dL, 0x558240e4L, 0x51435d53L, 0x5c007b8aUL, 0x58c1663dUL, 0x558240e4UL, 0x51435d53UL,
0x251d3b9eL, 0x21dc2629L, 0x2c9f00f0L, 0x285e1d47L, 0x251d3b9eUL, 0x21dc2629UL, 0x2c9f00f0UL, 0x285e1d47UL,
0x36194d42L, 0x32d850f5L, 0x3f9b762cL, 0x3b5a6b9bL, 0x36194d42UL, 0x32d850f5UL, 0x3f9b762cUL, 0x3b5a6b9bUL,
0x0315d626L, 0x07d4cb91L, 0x0a97ed48L, 0x0e56f0ffL, 0x0315d626UL, 0x07d4cb91UL, 0x0a97ed48UL, 0x0e56f0ffUL,
0x1011a0faL, 0x14d0bd4dL, 0x19939b94L, 0x1d528623L, 0x1011a0faUL, 0x14d0bd4dUL, 0x19939b94UL, 0x1d528623UL,
0xf12f560eL, 0xf5ee4bb9L, 0xf8ad6d60L, 0xfc6c70d7L, 0xf12f560eUL, 0xf5ee4bb9UL, 0xf8ad6d60UL, 0xfc6c70d7UL,
0xe22b20d2L, 0xe6ea3d65L, 0xeba91bbcL, 0xef68060bL, 0xe22b20d2UL, 0xe6ea3d65UL, 0xeba91bbcUL, 0xef68060bUL,
0xd727bbb6L, 0xd3e6a601L, 0xdea580d8L, 0xda649d6fL, 0xd727bbb6UL, 0xd3e6a601UL, 0xdea580d8UL, 0xda649d6fUL,
0xc423cd6aL, 0xc0e2d0ddL, 0xcda1f604L, 0xc960ebb3L, 0xc423cd6aUL, 0xc0e2d0ddUL, 0xcda1f604UL, 0xc960ebb3UL,
0xbd3e8d7eL, 0xb9ff90c9L, 0xb4bcb610L, 0xb07daba7L, 0xbd3e8d7eUL, 0xb9ff90c9UL, 0xb4bcb610UL, 0xb07daba7UL,
0xae3afba2L, 0xaafbe615L, 0xa7b8c0ccL, 0xa379dd7bL, 0xae3afba2UL, 0xaafbe615UL, 0xa7b8c0ccUL, 0xa379dd7bUL,
0x9b3660c6L, 0x9ff77d71L, 0x92b45ba8L, 0x9675461fL, 0x9b3660c6UL, 0x9ff77d71UL, 0x92b45ba8UL, 0x9675461fUL,
0x8832161aL, 0x8cf30badL, 0x81b02d74L, 0x857130c3L, 0x8832161aUL, 0x8cf30badUL, 0x81b02d74UL, 0x857130c3UL,
0x5d8a9099L, 0x594b8d2eL, 0x5408abf7L, 0x50c9b640L, 0x5d8a9099UL, 0x594b8d2eUL, 0x5408abf7UL, 0x50c9b640UL,
0x4e8ee645L, 0x4a4ffbf2L, 0x470cdd2bL, 0x43cdc09cL, 0x4e8ee645UL, 0x4a4ffbf2UL, 0x470cdd2bUL, 0x43cdc09cUL,
0x7b827d21L, 0x7f436096L, 0x7200464fL, 0x76c15bf8L, 0x7b827d21UL, 0x7f436096UL, 0x7200464fUL, 0x76c15bf8UL,
0x68860bfdL, 0x6c47164aL, 0x61043093L, 0x65c52d24L, 0x68860bfdUL, 0x6c47164aUL, 0x61043093UL, 0x65c52d24UL,
0x119b4be9L, 0x155a565eL, 0x18197087L, 0x1cd86d30L, 0x119b4be9UL, 0x155a565eUL, 0x18197087UL, 0x1cd86d30UL,
0x029f3d35L, 0x065e2082L, 0x0b1d065bL, 0x0fdc1becL, 0x029f3d35UL, 0x065e2082UL, 0x0b1d065bUL, 0x0fdc1becUL,
0x3793a651L, 0x3352bbe6L, 0x3e119d3fL, 0x3ad08088L, 0x3793a651UL, 0x3352bbe6UL, 0x3e119d3fUL, 0x3ad08088UL,
0x2497d08dL, 0x2056cd3aL, 0x2d15ebe3L, 0x29d4f654L, 0x2497d08dUL, 0x2056cd3aUL, 0x2d15ebe3UL, 0x29d4f654UL,
0xc5a92679L, 0xc1683bceL, 0xcc2b1d17L, 0xc8ea00a0L, 0xc5a92679UL, 0xc1683bceUL, 0xcc2b1d17UL, 0xc8ea00a0UL,
0xd6ad50a5L, 0xd26c4d12L, 0xdf2f6bcbL, 0xdbee767cL, 0xd6ad50a5UL, 0xd26c4d12UL, 0xdf2f6bcbUL, 0xdbee767cUL,
0xe3a1cbc1L, 0xe760d676L, 0xea23f0afL, 0xeee2ed18L, 0xe3a1cbc1UL, 0xe760d676UL, 0xea23f0afUL, 0xeee2ed18UL,
0xf0a5bd1dL, 0xf464a0aaL, 0xf9278673L, 0xfde69bc4L, 0xf0a5bd1dUL, 0xf464a0aaUL, 0xf9278673UL, 0xfde69bc4UL,
0x89b8fd09L, 0x8d79e0beL, 0x803ac667L, 0x84fbdbd0L, 0x89b8fd09UL, 0x8d79e0beUL, 0x803ac667UL, 0x84fbdbd0UL,
0x9abc8bd5L, 0x9e7d9662L, 0x933eb0bbL, 0x97ffad0cL, 0x9abc8bd5UL, 0x9e7d9662UL, 0x933eb0bbUL, 0x97ffad0cUL,
0xafb010b1L, 0xab710d06L, 0xa6322bdfL, 0xa2f33668L, 0xafb010b1UL, 0xab710d06UL, 0xa6322bdfUL, 0xa2f33668UL,
0xbcb4666dL, 0xb8757bdaL, 0xb5365d03L, 0xb1f740b4L 0xbcb4666dUL, 0xb8757bdaUL, 0xb5365d03UL, 0xb1f740b4UL
}; };
/*---------------------------------------------*/ /*---------------------------------------------*/
void initialiseCRC ( void ) void initialiseCRC ( void )
{ {
globalCrc = 0xffffffffL; globalCrc = 0xffffffffUL;
} }
@ -2579,7 +2585,7 @@ INLINE Int32 getRLEpair ( FILE* src )
/*--- Because I have no idea what kind of a value EOF is. ---*/ /*--- Because I have no idea what kind of a value EOF is. ---*/
if (ch == EOF) { if (ch == EOF) {
ERROR_IF_NOT_ZERO ( errno ); ERROR_IF_NOT_ZERO ( ferror(src));
return (1 << 16) | MY_EOF; return (1 << 16) | MY_EOF;
} }
@ -2595,7 +2601,7 @@ INLINE Int32 getRLEpair ( FILE* src )
if ( ungetc ( chLatest, src ) == EOF ) if ( ungetc ( chLatest, src ) == EOF )
panic ( "getRLEpair: ungetc failed" ); panic ( "getRLEpair: ungetc failed" );
} else { } else {
ERROR_IF_NOT_ZERO ( errno ); ERROR_IF_NOT_ZERO ( ferror(src) );
} }
/*--- Conditional is just a speedup hack. ---*/ /*--- Conditional is just a speedup hack. ---*/
@ -3442,7 +3448,6 @@ void compress ( Char *name )
} }
/*--- Now the input and output handles are sane. Do the Biz. ---*/ /*--- Now the input and output handles are sane. Do the Biz. ---*/
errno = 0;
outputHandleJustInCase = outStr; outputHandleJustInCase = outStr;
compressStream ( inStr, outStr ); compressStream ( inStr, outStr );
outputHandleJustInCase = NULL; outputHandleJustInCase = NULL;
@ -3559,7 +3564,6 @@ void uncompress ( Char *name )
} }
/*--- Now the input and output handles are sane. Do the Biz. ---*/ /*--- Now the input and output handles are sane. Do the Biz. ---*/
errno = 0;
outputHandleJustInCase = outStr; outputHandleJustInCase = outStr;
magicNumberOK = uncompressStream ( inStr, outStr ); magicNumberOK = uncompressStream ( inStr, outStr );
outputHandleJustInCase = NULL; outputHandleJustInCase = NULL;
@ -3667,7 +3671,6 @@ void testf ( Char *name )
} }
/*--- Now the input handle is sane. Do the Biz. ---*/ /*--- Now the input handle is sane. Do the Biz. ---*/
errno = 0;
allOK = testStream ( inStr ); allOK = testStream ( inStr );
if (allOK && verbosity >= 1) fprintf ( stderr, "ok\n" ); if (allOK && verbosity >= 1) fprintf ( stderr, "ok\n" );
@ -3681,7 +3684,7 @@ void license ( void )
fprintf ( stderr, fprintf ( stderr,
"bzip2, a block-sorting file compressor. " "bzip2, a block-sorting file compressor. "
"Version 0.1pl0, 17-Aug-97.\n" "Version 0.1pl2, 29-Aug-97.\n"
" \n" " \n"
" Copyright (C) 1996, 1997 by Julian Seward.\n" " Copyright (C) 1996, 1997 by Julian Seward.\n"
" \n" " \n"
@ -3711,7 +3714,7 @@ void usage ( Char *fullProgName )
fprintf ( fprintf (
stderr, stderr,
"bzip2, a block-sorting file compressor. " "bzip2, a block-sorting file compressor. "
"Version 0.1pl0, 17-Aug-97.\n" "Version 0.1pl2, 29-Aug-97.\n"
"\n usage: %s [flags and input files in any order]\n" "\n usage: %s [flags and input files in any order]\n"
"\n" "\n"
" -h --help print this message\n" " -h --help print this message\n"
@ -3864,7 +3867,6 @@ IntNative main ( IntNative argc, Char *argv[] )
tt = NULL; tt = NULL;
block = NULL; block = NULL;
zptr = NULL; zptr = NULL;
errno = 0;
smallMode = False; smallMode = False;
keepInputFiles = False; keepInputFiles = False;
verbosity = 0; verbosity = 0;
@ -3980,6 +3982,12 @@ IntNative main ( IntNative argc, Char *argv[] )
exit ( 1 ); exit ( 1 );
} }
if (srcMode == SM_F2O && numFileNames == 0) {
fprintf ( stderr, "%s: -c expects at least one filename.\n",
progName );
exit ( 1 );
}
if (opMode == OM_TEST && srcMode == SM_F2O) { if (opMode == OM_TEST && srcMode == SM_F2O) {
fprintf ( stderr, "%s: -c and -t cannot be used together.\n", fprintf ( stderr, "%s: -c and -t cannot be used together.\n",
progName ); progName );

BIN
bzip2.exe

Binary file not shown.

View File

@ -425,6 +425,9 @@ RELATIONSHIP TO bzip-0.21
to decompress files created by 0.21, but this would defeat to decompress files created by 0.21, but this would defeat
the primary aim of having a patent-free compressor. the primary aim of having a patent-free compressor.
For a more precise statement about patent issues in bzip2,
please see the README file in the distribution.
Huffman coding necessarily involves some coding ineffi- Huffman coding necessarily involves some coding ineffi-
ciency compared to arithmetic coding. This means that ciency compared to arithmetic coding. This means that
bzip2 compresses about 1% worse than 0.21, an unfortunate bzip2 compresses about 1% worse than 0.21, an unfortunate

View File

@ -7,7 +7,7 @@
/*-- /*--
This program is bzip2recover, a program to attempt data This program is bzip2recover, a program to attempt data
salvage from damaged files created by the accompanying salvage from damaged files created by the accompanying
bzip2 program. bzip2-0.1 program.
Copyright (C) 1996, 1997 by Julian Seward. Copyright (C) 1996, 1997 by Julian Seward.
Guildford, Surrey, UK Guildford, Surrey, UK