-
Notifications
You must be signed in to change notification settings - Fork 16
/
README.html
194 lines (179 loc) · 7.19 KB
/
README.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Common Lisp ZIP library</title>
<style type="text/css">
body {
color: #000000;
background-color: #ffffff;
margin-bottom: 10%;
padding-left: 30px;
}
h1,h2,h3 {
margin-left: -30px;
}
pre {
background-color: #eeeeee;
border: solid 1px #d0d0d0;
padding: 1em;
margin-right: 10%;
}
.def {
background-color: #ddddff;
font-weight: bold;
}
.nomargin {
margin-bottom: 0;
margin-top: 0;
}
</style>
</head>
<body>
<h1>Common Lisp ZIP library</h1>
<p>A library for .zip-file reading and writing, written in Common Lisp.</p>
<p>
Credits: David Lichteblau, Tomas Hlavaty. Thanks to everyone who
has contributed patches.
</p>
<p>
Send bug reports to <a
href="mailto:[email protected]"><[email protected]></a>
(<a
href="http://common-lisp.net/cgi-bin/mailman/listinfo/zip-devel">list information</a>).
</p>
<p>
Thanks to <a href="http://common-lisp.net">common-lisp.net</a> for
web site and mailing list hosting. Please note the repository
on <a href="https://github.com/bluelisp/zip">github</a>.
</p>
<p>
Uses <a href="http://www.xach.com/lisp/salza2/">salza2</a> for
compression, <a
href="http://www.weitz.de/flexi-streams/">flexi-streams</a> for external
format support, <a
href="http://common-lisp.net/project/cl-plus-ssl/#trivial-gray-streams">trivial-gray-streams</a>
for gray streams portability, and includes <a
href="http://opensource.franz.com/deflate/">inflate.cl</a>
for decompression.
</p>
<h2>Recent changes</h2>
<p>
2015: Move to github, and backport of changes from downstream fork
(Thanks to Tomas Hlavaty.)
<p>
<p>
2006 -- 2011: During this time a fork occurred. The
common-lisp.net version of the library received little attention,
except that it was ported to ASDF2. (Thanks to Faré Rideau.)
<p>
<p>
2006: Fixed the gray stream port, including a data corruption bug
that was in CVS for some time. (Thanks to Kevin Reid and others.)
Switched to flexi-stream external-format functions for
portability. Uses trivial-gray-streams now. Allegro 8.0 fix
(thanks to Edi Weitz). Comment support (thanks to Surendra
Singhi). Incompatible change: Don't bind
<tt>*locale*</tt> on Allegro anymore.
<p>
</p>
2005-04-05: ACL fixes (thank to Edi Weitz). Lispworks port
(thanks to Sean Ross). Store <tt>file-write-date</tt> (also fixes
FilZip compatibility).
</p>
<h2>Download</h2>
<ul>
<li>Using Quicklisp (if in doubt,
this is a good way to get started):<br/>
<pre>(ql:quickload :zip)</pre></li>
<li>From github: <pre>git clone https://github.com/bluelisp/zip</pre></li>
<li>Using clbuild2 from github: <pre>clbuild install-from-upstream zip</pre> -- For the one or two clbuild users out there</li>
<li>Using clbuild2 via QuickLisp: <pre>clbuild quickload zip</pre> -- Ditto</li>
<li>Tarball releases -- Unfortunately we are not currently offering a release tarball for download.</li>
</ul>
<h2>Portability</h2>
<p>
Needs gray streams. The original version had separate support
out-of-the-box on SBCL, Lispworks, and ACL. The fork briefly
introduced some features specific to simple-stream / ACL. We
believe the library to currently be portable to most popular
Common Lisp implementations, but patches are welcome.
</p>
<h2>ZIP-file reading</h2>
<p>
Zip archives are represented as opaque handles. Entries of the
zip-file are named by strings and represented as objects, too.
</p>
<div class="def">Function OPEN-ZIPFILE (pathname) => zipfile</div>
<p>
Open .zip-file <tt>pathname</tt> for reading and return a handle for it.
</p>
<div class="def">Function CLOSE-ZIPFILE (zipfile)</div>
<p>
Close the file handle.
</p>
<div class="def">Macro WITH-ZIPFILE ((var pathname) &body body) => result of body</div>
<p>
Bind <tt>var</tt> to the result of <tt>open-zipfile</tt>, evaluate
body as an implicit progn and call <tt>close-zipfile</tt> before
exiting.
</p>
<div class="def">Function GET-ZIPFILE-ENTRY (name zipfile) => zipfile-entry</div>
<p>Return an entry handle for the file called <tt>name</tt>.</p>
<div class="def">Function ZIPFILE-ENTRIES (zipfile) => hash-table</div>
<p>
Return a hash-table mapping filenames to entry handles for all
files contained in the zip archive.
</p>
<div class="def">Macro DO-ZIPFILE-ENTRIES ((name-var entry-var zipfile) &body body) => nil</div>
<p>
Map over all entries in <tt>zipfile</tt> binding <tt>name-var</tt>
and <tt>entry-var</tt> to each file name and entry handle in
turn. Establish implicit block named <tt>nil</tt> around the
loop.
</p>
<div class="def">Function ZIPFILE-ENTRY-NAME (zipfile-entry) => string</div>
<p>Return an entry's file name as a string.</p>
<div class="def">Function ZIPFILE-ENTRY-CONTENTS (entry &optional
stream) => see below</div>
<p>
If <tt>stream</tt> is given, extract <tt>entry</tt> to the
<tt>(unsigned-byte 8)</tt> stream given as the argument.
Otherwise, return the entry contents as an <tt>(unsigned-byte
8)</tt> vector.
</p>
<div class="def">Function UNZIP (pathname target-directory &key if-exists verbose) => nil</div>
<p>
Extract all entries from the zip archive at <tt>pathname</tt> into
<tt>target-directory</tt>. <tt>if-exists</tt> as for <a
href="http://www.xach.com/clhs.php?open">cl:open</a>.
</p>
<h2>ZIP-file writing</h2>
<p>
<tt>zipwriter</tt>s are handles used to create zip archives. They
are distinct from the zip handles used for reading.
</p>
<div class="def">Macro WITH-OUTPUT-TO-ZIPFILE ((var pathname &key if-exists) &body body)</div>
<p>
</p>
<div class="def">Function WRITE-ZIPENTRY (zipwriter name data &key file-write-date)</div>
<p>
Append a new entry called <tt>name</tt> to <tt>zipwriter</tt>.
Read data from <tt>(unsigned-byte 8)</tt> stream <tt>data</tt>
until EOF and compress it into "deflate"-format.
Use <tt>file-write-date</tt> as the entry's date and time.
Default to <tt>(file-write-date data)</tt>, use 1980-01-01T00:00
if <tt>nil</tt>.
</p>
<div class="def">Function ZIP (pathname source-directory &key if-exists)</div>
<p>
Compress all files in <tt>source-directory</tt> recursively into a
new zip archive at <tt>pathname</tt>. Note that entry file names
will not contain the name <tt>source-directory</tt>.
</p>
<h2>Bookmark</h2>
<p>
<a href="http://www.pkware.com/company/standards/appnote/appnote.txt">spec</a>
</p>
</body>
</html>