|
|
1.1 root 1: .\" Copyright (c) 1986, 1990 The Regents of the University of California.
2: .\" All rights reserved.
3: .\"
4: .\" This code is derived from software contributed to Berkeley by
5: .\" James A. Woods, derived from original work by Spencer Thomas
6: .\" and Joseph Orost.
7: .\"
8: .\" Redistribution and use in source and binary forms are permitted provided
9: .\" that: (1) source distributions retain this entire copyright notice and
10: .\" comment, and (2) distributions including binaries display the following
11: .\" acknowledgement: ``This product includes software developed by the
12: .\" University of California, Berkeley and its contributors'' in the
13: .\" documentation or other materials provided with the distribution and in
14: .\" all advertising materials mentioning features or use of this software.
15: .\" Neither the name of the University nor the names of its contributors may
16: .\" be used to endorse or promote products derived from this software without
17: .\" specific prior written permission.
18: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
19: .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
20: .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
21: .\"
22: .\" @(#)compress.1 6.8 (Berkeley) 7/24/90
23: .\"
24: .Dd July 24, 1990
25: .Dt COMPRESS 1
26: .Os BSD 4.3
27: .Sh NAME
28: .Nm compress ,
29: .Nm uncompress ,
30: .Nm zcat
31: .Nd compress and expand data
32: .Sh SYNOPSIS
33: .Nm compress
34: .Op Fl f
35: .Op Fl v
36: .Op Fl c
37: .Op Fl b Ar bits
38: .Ar
39: .br
40: .Nm uncompress
41: .Op Fl f
42: .Op Fl v
43: .Op Fl c
44: .Ar
45: .br
46: .Nm zcat
47: .Ar
48: .Sh DESCRIPTION
49: .Nm Compress
50: reduces the size of the named files using adaptive Lempel-Ziv coding.
51: Whenever possible,
52: each
53: .Ar file
54: is replaced by one with the extension
55: .Ar \&.Z ,
56: while keeping the same ownership modes, access and modification times.
57: If no files are specified, the standard input is compressed to the
58: standard output.
59: Compressed files can be restored to their original form using
60: .Nm uncompress
61: or
62: .Nm zcat
63: .Tw Ds
64: .Tp Fl f
65: Force compression of
66: .Ar file ,
67: even if it does not actually shrink
68: or the corresponding
69: .Ar file.Z
70: file already exists.
71: Except when run in the background under
72: .Pa /bin/sh ,
73: if
74: .Fl f
75: is not given the user is prompted as to whether an existing
76: .Ar file.Z
77: file should be overwritten.
78: .Pp
79: .Tp Fl c
80: (``cat'') makes
81: .Nm compress/uncompress
82: write to the standard output; no files are changed.
83: The nondestructive behavior of
84: .Nm zcat
85: is identical to that of
86: .Nm uncompress
87: .Fl c.
88: .Tp Fl b
89: Specify
90: .Ar bits
91: code limit (see below).
92: .Tp Fl v
93: Print the percentage reduction of each file.
94: .Tp
95: .Pp
96: .Nm Compress
97: uses the modified Lempel-Ziv algorithm popularized in
98: "A Technique for High Performance Data Compression",
99: Terry A. Welch,
100: .Em IEEE Computer ,
101: vol. 17, no. 6 (June 1984), pp. 8-19.
102: Common substrings in the file are first replaced by 9-bit codes 257 and up.
103: When code 512 is reached, the algorithm switches to 10-bit codes and
104: continues to use more bits until the
105: limit specified by the
106: .Fl b
107: flag is reached (default 16).
108: .Ar Bits
109: must be between 9 and 16. The default can be changed in the source to allow
110: .Nm compress
111: to be run on a smaller machine.
112: .Pp
113: After the
114: .Ar bits
115: limit is attained,
116: .Nm compress
117: periodically checks the compression ratio. If it is increasing,
118: .Nm compress
119: continues to use the existing code dictionary. However,
120: if the compression ratio decreases,
121: .Nm compress
122: discards the table of substrings and rebuilds it from scratch. This allows
123: the algorithm to adapt to the next "block" of the file.
124: .Pp
125: Note that the
126: .Fl b
127: flag is omitted for
128: .Ar uncompress
129: since the
130: .Ar bits
131: parameter specified during compression
132: is encoded within the output, along with
133: a magic number to ensure that neither decompression of random data nor
134: recompression of compressed data is attempted.
135: .Pp
136: .ne 8
137: The amount of compression obtained depends on the size of the
138: input, the number of
139: .Ar bits
140: per code, and the distribution of common substrings.
141: Typically, text such as source code or English
142: is reduced by 50\-60%.
143: Compression is generally much better than that achieved by
144: Huffman coding (as used in
145: .Xr pack ) ,
146: or adaptive Huffman coding (as
147: used in
148: .Xr compact ) ,
149: and takes less time to compute.
150: .Pp
151: If an error occurs, exit status is 1, else
152: if the last file was not compressed because it became larger, the status
153: is 2; else the status is 0.
154: .Sh DIAGNOSTICS
155: Usage: compress
156: .Op Fl fvc
157: .Op Fl b Ar maxbits
158: .Ar
159: .Dl Invalid options were specified on the command line.
160: .Pp
161: Missing maxbits
162: .Df I
163: Maxbits must follow
164: .Fl b .
165: .De
166: .Pp
167: .Ar file :
168: not in compressed format
169: .Df I
170: The file specified to
171: .Ar uncompress
172: has not been compressed.
173: .De
174: .Pp
175: .Ar file :
176: compressed with
177: .Ar xx
178: bits, can only handle
179: .Ar yy
180: bits
181: .Df I
182: .Ar File
183: was compressed by a program that could deal with
184: more
185: .Ar bits
186: than the compress code on this machine.
187: Recompress the file with smaller
188: .Ar bits .
189: .De
190: .Pp
191: .Ar file :
192: already has .Z suffix -- no change
193: .Df I
194: The file is assumed to be already compressed.
195: Rename the file and try again.
196: .De
197: .Pp
198: .Ar file :
199: filename too long to tack on .Z
200: .Df I
201: The file cannot be compressed because its name is longer than
202: 12 characters.
203: Rename and try again.
204: This message does not occur on BSD systems.
205: .De
206: .Pp
207: .Ar file
208: already exists; do you wish to overwrite (y or n)?
209: .Df I
210: Respond "y" if you want the output file to be replaced; "n" if not.
211: .De
212: .Pp
213: uncompress: corrupt input
214: .Df I
215: A SIGSEGV violation was detected which usually means that the input file is
216: corrupted.
217: .De
218: .Pp
219: Compression:
220: .Em xx.xx%
221: .Df I
222: Percentage of the input saved by compression.
223: (Relevant only for
224: .Fl v . )
225: .De
226: .Pp
227: -- not a regular file: unchanged
228: .Df I
229: When the input file is not a regular file,
230: (e.g. a directory), it is
231: left unaltered.
232: .De
233: .Pp
234: -- has
235: .Ar xx
236: other links: unchanged
237: .Df I
238: The input file has links; it is left unchanged. See
239: .Xr ln 1
240: for more information.
241: .De
242: .Pp
243: -- file unchanged
244: .Df I
245: No savings is achieved by
246: compression. The input remains virgin.
247: .De
248: .Pp
249: .Sh FILES
250: .Tw file.Z
251: .Tp Pa file.Z
252: compressed file is file.Z
253: .Tp
254: .Sh HISTORY
255: Appeared in 4.3 BSD.
256: .Sh "BUGS"
257: Although compressed files are compatible between machines with large memory,
258: .Cx Fl b
259: .Ar 12
260: .Cx
261: should be used for file transfer to architectures with
262: a small process data space (64KB or less, as exhibited by the DEC PDP
263: series, the Intel 80286, etc.)
264: .Pp
265: .Nm Compress
266: should be more flexible about the existence of the `.Z' suffix.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.