prophecy 0.0.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 664f421dec68cf4be951b6dd1cee254d4a4212db
4
- data.tar.gz: 2a52c0e4d1dee00a4e0638dcf0f9b3648431988a
3
+ metadata.gz: 9959daf03e7c4d2814dd1215b4a6d21285ad6d98
4
+ data.tar.gz: f65277ead6d4ca1004e62a0ec8802f9c97f09ced
5
5
  SHA512:
6
- metadata.gz: 616caacd224f5c3907c69657d21bc88f2329fe294ad87496399235e5b237e09cc10f29570688a8ddd5fb74876fb8b0bf7383ef5c17e4a3b1687db49eaf549f33
7
- data.tar.gz: bdd15b87b0b4b145d251c987d61e7f1e89ee51427f7427ed628522c87ef07603bd3372790383483be6fd6c0d7dd9587fdf74c6a3533a4f9f40be9d94dc04a75b
6
+ metadata.gz: 6af98cf06de73ec0b857aae7e5a8b44702389b014583806383817bd79176cd56d1cb726ed0331197f8bda7eddc97c5a96dbcc5ddb9fec3fb570d33251eed4618
7
+ data.tar.gz: 0bff05d7c38f97b8751454c6368818c4c564897c5766472935e65280ec44f96a957121d7cb5de0f2282798eca321050dee4fa5ccde431d6fa275328e7c3e64ea
data/README.md CHANGED
@@ -11,11 +11,11 @@ of pain.
11
11
  Sounds like the machine should be doing this, and we just go and
12
12
  meditate on peace.
13
13
 
14
- ## Let's see that:
14
+ ## Let's see that
15
15
 
16
16
  Screencast.
17
17
 
18
- ## And then this happens:
18
+ ## And then this happens
19
19
 
20
20
  - Screeshots
21
21
 
data/bin/epubcheck ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # parses 'epubcheck builds/epub/book.epub'
4
+ book_epub = ARGV.shift
5
+ epubcheck_jar = File.join(File.dirname(__FILE__), '..', 'epubcheck_dir/epubcheck.jar')
6
+
7
+ cmd = system("java -jar #{epubcheck_jar} #{book_epub}")
data/bin/kindlegen CHANGED
@@ -6,7 +6,6 @@ book_mobi = ARGV.shift
6
6
  if RUBY_PLATFORM =~ /linux|cygwin/
7
7
  executable = 'kindlegen_linux'
8
8
  elsif RUBY_PLATFORM =~ /darwin/
9
- puts "its darwin"
10
9
  executable = 'kindlegen_mac'
11
10
  elsif RUBY_PLATFORM =~ /mingw|mswin32/
12
11
  executable = 'kindlegen.exe'
@@ -15,4 +14,4 @@ else
15
14
  end
16
15
 
17
16
  executable = File.join(File.dirname(__FILE__), executable)
18
- system(executable + " " + $*.join(" ") + book_mobi)
17
+ system(executable + " " + $*.join(" ") + book_mobi)
@@ -0,0 +1,237 @@
1
+ #!/usr/bin/env python
2
+ # vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
3
+ #
4
+ # This is a python script. You need a Python interpreter to run it.
5
+ # For example, ActiveState Python, which exists for windows.
6
+ #
7
+ # This script strips the penultimate record from a Mobipocket file.
8
+ # This is useful because the current KindleGen add a compressed copy
9
+ # of the source files used in this record, making the ebook produced
10
+ # about twice as big as it needs to be.
11
+ #
12
+ #
13
+ # This is free and unencumbered software released into the public domain.
14
+ #
15
+ # Anyone is free to copy, modify, publish, use, compile, sell, or
16
+ # distribute this software, either in source code form or as a compiled
17
+ # binary, for any purpose, commercial or non-commercial, and by any
18
+ # means.
19
+ #
20
+ # In jurisdictions that recognize copyright laws, the author or authors
21
+ # of this software dedicate any and all copyright interest in the
22
+ # software to the public domain. We make this dedication for the benefit
23
+ # of the public at large and to the detriment of our heirs and
24
+ # successors. We intend this dedication to be an overt act of
25
+ # relinquishment in perpetuity of all present and future rights to this
26
+ # software under copyright law.
27
+ #
28
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
29
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
30
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
31
+ # IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
32
+ # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
33
+ # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
34
+ # OTHER DEALINGS IN THE SOFTWARE.
35
+ #
36
+ # For more information, please refer to <http://unlicense.org/>
37
+ #
38
+ # Written by Paul Durrant, 2010-2011, paul@durrant.co.uk, pdurrant on mobileread.com
39
+ # With enhancements by Kevin Hendricks, KevinH on mobileread.com
40
+ #
41
+ # Changelog
42
+ # 1.00 - Initial version
43
+ # 1.10 - Added an option to output the stripped data
44
+ # 1.20 - Added check for source files section (thanks Piquan)
45
+ # 1.30 - Added prelim Support for K8 style mobis
46
+ # 1.31 - removed the SRCS section but kept a 0 size entry for it
47
+ # 1.32 - removes the SRCS section and its entry, now updates metadata 121 if needed
48
+ # 1.33 - now uses and modifies mobiheader SRCS and CNT
49
+ # 1.34 - added credit for Kevin Hendricks
50
+ # 1.35 - fixed bug when more than one compilation (SRCS/CMET) records
51
+
52
+ __version__ = '1.35.0'
53
+
54
+ import sys
55
+ import struct
56
+ import binascii
57
+
58
+
59
+ class Unbuffered(object):
60
+
61
+ def __init__(self, stream):
62
+ self.stream = stream
63
+
64
+ def write(self, data):
65
+ self.stream.write(data)
66
+ self.stream.flush()
67
+
68
+ def __getattr__(self, attr):
69
+ return getattr(self.stream, attr)
70
+
71
+
72
+ class StripException(Exception):
73
+ pass
74
+
75
+
76
+ class SectionStripper(object):
77
+ def loadSection(self, section):
78
+ if (section + 1 == self.num_sections):
79
+ endoff = len(self.data_file)
80
+ else:
81
+ endoff = self.sections[section + 1][0]
82
+ off = self.sections[section][0]
83
+ return self.data_file[off:endoff]
84
+
85
+ def patch(self, off, new):
86
+ self.data_file = self.data_file[:off] + new + self.data_file[off + len(new):]
87
+
88
+ def strip(self, off, len):
89
+ self.data_file = self.data_file[:off] + self.data_file[off + len:]
90
+
91
+ def patchSection(self, section, new, in_off=0):
92
+ if (section + 1 == self.num_sections):
93
+ endoff = len(self.data_file)
94
+ else:
95
+ endoff = self.sections[section + 1][0]
96
+ off = self.sections[section][0]
97
+ assert off + in_off + len(new) <= endoff
98
+ self.patch(off + in_off, new)
99
+
100
+ def updateEXTH121(self, srcs_secnum, srcs_cnt, mobiheader):
101
+ mobi_length, = struct.unpack('>L', mobiheader[0x14:0x18])
102
+ exth_flag, = struct.unpack('>L', mobiheader[0x80:0x84])
103
+ exth = 'NONE'
104
+ try:
105
+ if exth_flag & 0x40:
106
+ exth = mobiheader[16 + mobi_length:]
107
+ if (len(exth) >= 4) and (exth[:4] == 'EXTH'):
108
+ nitems, = struct.unpack('>I', exth[8:12])
109
+ pos = 12
110
+ for i in xrange(nitems):
111
+ type, size = struct.unpack('>II', exth[pos: pos + 8])
112
+ # print type, size
113
+ if type == 121:
114
+ boundaryptr, = struct.unpack('>L', exth[pos + 8: pos + size])
115
+ if srcs_secnum <= boundaryptr:
116
+ boundaryptr -= srcs_cnt
117
+ prefix = mobiheader[0:16 + mobi_length + pos + 8]
118
+ suffix = mobiheader[16 + mobi_length + pos + 8 + 4:]
119
+ nval = struct.pack('>L', boundaryptr)
120
+ mobiheader = prefix + nval + suffix
121
+ pos += size
122
+ except:
123
+ pass
124
+ return mobiheader
125
+
126
+ def __init__(self, datain):
127
+ if datain[0x3C:0x3C + 8] != 'BOOKMOBI':
128
+ raise StripException("invalid file format")
129
+ self.num_sections, = struct.unpack('>H', datain[76:78])
130
+
131
+ # get mobiheader and check SRCS section number and count
132
+ offset0, = struct.unpack_from('>L', datain, 78)
133
+ offset1, = struct.unpack_from('>L', datain, 86)
134
+ mobiheader = datain[offset0:offset1]
135
+ srcs_secnum, srcs_cnt = struct.unpack_from('>2L', mobiheader, 0xe0)
136
+ if srcs_secnum == 0xffffffff or srcs_cnt == 0:
137
+ raise StripException("File doesn't contain the sources section.")
138
+
139
+ print("Found SRCS section number {0}, and count {1}".format(srcs_secnum, srcs_cnt))
140
+ # find its offset and length
141
+ next = srcs_secnum + srcs_cnt
142
+ srcs_offset, flgval = struct.unpack_from('>2L', datain, 78 + (srcs_secnum * 8))
143
+ next_offset, flgval = struct.unpack_from('>2L', datain, 78 + (next * 8))
144
+ srcs_length = next_offset - srcs_offset
145
+ if datain[srcs_offset:srcs_offset + 4] != 'SRCS':
146
+ raise StripException("SRCS section num does not point to SRCS.")
147
+ print(" beginning at offset {0} and ending at offset {1}".format(srcs_offset, srcs_length))
148
+
149
+ # it appears bytes 68-71 always contain (2*num_sections) + 1
150
+ # this is not documented anyplace at all but it appears to be some sort of next
151
+ # available unique_id used to identify specific sections in the palm db
152
+ self.data_file = datain[:68] + struct.pack('>L', ((self.num_sections - srcs_cnt) * 2 + 1))
153
+ self.data_file += datain[72:76]
154
+
155
+ # write out the number of sections reduced by srtcs_cnt
156
+ self.data_file = self.data_file + struct.pack('>H', self.num_sections - srcs_cnt)
157
+
158
+ # we are going to remove srcs_cnt SRCS sections so the offset of every entry in the table
159
+ # up to the srcs secnum must begin 8 bytes earlier per section removed (each table entry is 8 )
160
+ delta = -8 * srcs_cnt
161
+ for i in xrange(srcs_secnum):
162
+ offset, flgval = struct.unpack_from('>2L', datain, 78 + (i * 8))
163
+ offset += delta
164
+ self.data_file += struct.pack('>L', offset) + struct.pack('>L', flgval)
165
+
166
+ # for every record after the srcs_cnt SRCS records we must start it
167
+ # earlier by 8*srcs_cnt + the length of the srcs sections themselves)
168
+ delta = delta - srcs_length
169
+ for i in xrange(srcs_secnum + srcs_cnt, self.num_sections):
170
+ offset, flgval = struct.unpack_from('>2L', datain, 78 + (i * 8))
171
+ offset += delta
172
+ flgval = 2 * (i - srcs_cnt)
173
+ self.data_file += struct.pack('>L', offset) + struct.pack('>L', flgval)
174
+
175
+ # now pad it out to begin right at the first offset
176
+ # typically this is 2 bytes of nulls
177
+ first_offset, flgval = struct.unpack_from('>2L', self.data_file, 78)
178
+ self.data_file += '\0' * (first_offset - len(self.data_file))
179
+
180
+ # now finally add on every thing up to the original src_offset
181
+ self.data_file += datain[offset0:srcs_offset]
182
+
183
+ # and everything afterwards
184
+ self.data_file += datain[srcs_offset + srcs_length:]
185
+
186
+ #store away the SRCS section in case the user wants it output
187
+ self.stripped_data_header = datain[srcs_offset:srcs_offset + 16]
188
+ self.stripped_data = datain[srcs_offset + 16:srcs_offset + srcs_length]
189
+
190
+ # update the number of sections count
191
+ self.num_section = self.num_sections - srcs_cnt
192
+
193
+ # update the srcs_secnum and srcs_cnt in the mobiheader
194
+ offset0, flgval0 = struct.unpack_from('>2L', self.data_file, 78)
195
+ offset1, flgval1 = struct.unpack_from('>2L', self.data_file, 86)
196
+ mobiheader = self.data_file[offset0:offset1]
197
+ mobiheader = mobiheader[:0xe0] + struct.pack('>L', 0xffffffff) + struct.pack('>L', 0) + mobiheader[0xe8:]
198
+
199
+ # if K8 mobi, handle metadata 121 in old mobiheader
200
+ mobiheader = self.updateEXTH121(srcs_secnum, srcs_cnt, mobiheader)
201
+ self.data_file = self.data_file[0:offset0] + mobiheader + self.data_file[offset1:]
202
+ print("done")
203
+
204
+ def getResult(self):
205
+ return self.data_file
206
+
207
+ def getStrippedData(self):
208
+ return self.stripped_data
209
+
210
+ def getHeader(self):
211
+ return self.stripped_data_header
212
+
213
+
214
+ if __name__ == "__main__":
215
+ sys.stdout = Unbuffered(sys.stdout)
216
+ print('KindleStrip v{0}. Written 2010-2012 by Paul Durrant and Kevin Hendricks.'.format(__version__))
217
+ if len(sys.argv) < 3 or len(sys.argv) > 4:
218
+ print("Strips the Sources record from Mobipocket ebooks")
219
+ print("For ebooks generated using KindleGen 1.1 and later that add the source")
220
+ print("Usage:")
221
+ print(" {0} <infile> <outfile> <strippeddatafile>".format(sys.argv[0]))
222
+ print("<strippeddatafile> is optional.")
223
+ sys.exit(1)
224
+ else:
225
+ infile = sys.argv[1]
226
+ outfile = sys.argv[2]
227
+ data_file = file(infile, 'rb').read()
228
+ try:
229
+ strippedFile = SectionStripper(data_file)
230
+ file(outfile, 'wb').write(strippedFile.getResult())
231
+ print("Header Bytes: {0}".format(binascii.b2a_hex(strippedFile.getHeader())))
232
+ if len(sys.argv) == 4:
233
+ file(sys.argv[3], 'wb').write(strippedFile.getStrippedData())
234
+ except StripException as e:
235
+ print("Error: {0}".format(e))
236
+ sys.exit(1)
237
+ sys.exit(0)
data/bin/zip.exe ADDED
Binary file
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2007 Adobe Systems Incorporated
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the "Software"), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
7
+ the Software, and to permit persons to whom the Software is furnished to do so,
8
+ subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
15
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
16
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19
+
@@ -0,0 +1,61 @@
1
+ This folder contains the distribution of epubcheck project.
2
+
3
+ EpubCheck is a tool to validate IDPF Epub files. It can detect many
4
+ types of errors in Epub. OCF container structure, OPF and OPS mark-up,
5
+ and internal reference consistency are checked. EpubCheck can be run
6
+ as a standalone command-line tool, installed as a web application or
7
+ used as a library.
8
+
9
+ Epubcheck project home: http://code.google.com/p/epubcheck/
10
+
11
+ BUILDING
12
+
13
+ To build epubcheck from the sources you need Java Development Kit (JDK) 1.5 or above
14
+ and Apache ant (http://ant.apache.org/) 1.6 or above installed
15
+
16
+ Run
17
+
18
+ ant -f build.xml
19
+
20
+ RUNNING
21
+
22
+ To run the tool you need Java Runtime (1.5 or above). Any OS should do. Run
23
+ it from the command line:
24
+
25
+ java -jar epubcheck-x.x.x.jar file.epub
26
+
27
+ All detected errors are simply printed to stderr.
28
+
29
+ USING AS A LIBRARY
30
+
31
+ You can also use EpubCheck as a library in your Java application. EpubCheck
32
+ public interfaces can be found in com.adobe.epubcheck.api package. EpubCheck
33
+ class can be used to instantiate a validation engine. Use one of its
34
+ constructors and then call validate() method. Report is an interface that
35
+ you can implement to get a list of the errors and warnings reported by the
36
+ validation engine (instead of the error list being printed out).
37
+
38
+ LICENSING
39
+
40
+ See COPYING.txt
41
+
42
+ AUTHORS
43
+
44
+ Peter Sorotokin
45
+ Garth Conboy
46
+ Markus Gylling
47
+ Piotr Kula
48
+
49
+ Most of the EpubCheck functionality comes from the schema validation tool Jing
50
+ and schemas that were developed by IDPF and DAISY. EpubCheck development was
51
+ largely done at Adobe Systems.
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
@@ -0,0 +1,12 @@
1
+ Jing Copying Conditions
2
+
3
+ Copyright (c) 2001-2003 Thai Open Source Software Center Ltd
4
+ All rights reserved.
5
+
6
+ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
7
+
8
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
9
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
10
+ * Neither the name of the Thai Open Source Software Center Ltd nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
11
+
12
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,36 @@
1
+ Contents of the Zip 3.0 for "Windows 32-bit x86" binary distribution:
2
+
3
+ Contents you are reading it...
4
+ LICENSE the Info-ZIP software license
5
+ README general information about Zip 3.0
6
+ README.CR Information and usage terms for the built-in crypt
7
+ WHATSNEW Coarse description of new features in this release
8
+ WHERE Information about distribution packages
9
+ zip30.ann more detailed "user-visible" feature history
10
+ zip.txt user manual for Zip
11
+ zipcloak.txt user manual for ZipCloak
12
+ zipnote.txt user manual for ZipNote
13
+ zipsplit.txt user manual for ZipSplit
14
+ zip.exe Zip program
15
+ zipnote.exe ZipNote program
16
+ zipsplit.exe ZipSplit program
17
+ zipcloak.exe ZipCloak program
18
+
19
+ The binaries have been built using Microsoft Visual C/C++ 6.0 SP6; they are
20
+ linked against the static single-threading runtime library and do not require
21
+ any additional runtime environment besides the basic Win32 system service dlls
22
+ supplied by every basic Windows installation.
23
+ The programs should run on every Windows version that supports 32-bit x86
24
+ executables: Windows 9x/ME, Windows NT3.x/NT4/2000/XP/2003/Vista/2008.
25
+ The Windows port of Zip 3.0 supports Unicode (UTF-8 coded) archive entry names;
26
+ on the "non-unicode" Windows variants 95/98/ME, this unicode support is limited
27
+ to the character subset supported by the active "single/double byte charcodes"
28
+ system codepage of the operating system.
29
+
30
+ The programs have been built without the optional assembler code for CRC-32
31
+ and the deflate inner loop. Some coarse test resulted in the impression that
32
+ the performance of the standard C code seems to be better on modern CPUs
33
+ (Pentium 3, Pentium 4, etc...). Additionally, the main Zip program has been
34
+ compiled with the optional bzip2 compression support enabled.
35
+
36
+ 2008-10-19, Info-ZIP
@@ -0,0 +1,60 @@
1
+ This is version 2007-Mar-4 of the Info-ZIP license.
2
+ The definitive version of this document should be available at
3
+ ftp://ftp.info-zip.org/pub/infozip/license.html indefinitely and
4
+ a copy at http://www.info-zip.org/pub/infozip/license.html.
5
+
6
+
7
+ Copyright (c) 1990-2007 Info-ZIP. All rights reserved.
8
+
9
+ For the purposes of this copyright and license, "Info-ZIP" is defined as
10
+ the following set of individuals:
11
+
12
+ Mark Adler, John Bush, Karl Davis, Harald Denker, Jean-Michel Dubois,
13
+ Jean-loup Gailly, Hunter Goatley, Ed Gordon, Ian Gorman, Chris Herborth,
14
+ Dirk Haase, Greg Hartwig, Robert Heath, Jonathan Hudson, Paul Kienitz,
15
+ David Kirschbaum, Johnny Lee, Onno van der Linden, Igor Mandrichenko,
16
+ Steve P. Miller, Sergio Monesi, Keith Owens, George Petrov, Greg Roelofs,
17
+ Kai Uwe Rommel, Steve Salisbury, Dave Smith, Steven M. Schweda,
18
+ Christian Spieler, Cosmin Truta, Antoine Verheijen, Paul von Behren,
19
+ Rich Wales, Mike White.
20
+
21
+ This software is provided "as is," without warranty of any kind, express
22
+ or implied. In no event shall Info-ZIP or its contributors be held liable
23
+ for any direct, indirect, incidental, special or consequential damages
24
+ arising out of the use of or inability to use this software.
25
+
26
+ Permission is granted to anyone to use this software for any purpose,
27
+ including commercial applications, and to alter it and redistribute it
28
+ freely, subject to the above disclaimer and the following restrictions:
29
+
30
+ 1. Redistributions of source code (in whole or in part) must retain
31
+ the above copyright notice, definition, disclaimer, and this list
32
+ of conditions.
33
+
34
+ 2. Redistributions in binary form (compiled executables and libraries)
35
+ must reproduce the above copyright notice, definition, disclaimer,
36
+ and this list of conditions in documentation and/or other materials
37
+ provided with the distribution. The sole exception to this condition
38
+ is redistribution of a standard UnZipSFX binary (including SFXWiz) as
39
+ part of a self-extracting archive; that is permitted without inclusion
40
+ of this license, as long as the normal SFX banner has not been removed
41
+ from the binary or disabled.
42
+
43
+ 3. Altered versions--including, but not limited to, ports to new operating
44
+ systems, existing ports with new graphical interfaces, versions with
45
+ modified or added functionality, and dynamic, shared, or static library
46
+ versions not from Info-ZIP--must be plainly marked as such and must not
47
+ be misrepresented as being the original source or, if binaries,
48
+ compiled from the original source. Such altered versions also must not
49
+ be misrepresented as being Info-ZIP releases--including, but not
50
+ limited to, labeling of the altered versions with the names "Info-ZIP"
51
+ (or any variation thereof, including, but not limited to, different
52
+ capitalizations), "Pocket UnZip," "WiZ" or "MacZip" without the
53
+ explicit permission of Info-ZIP. Such altered versions are further
54
+ prohibited from misrepresentative use of the Zip-Bugs or Info-ZIP
55
+ e-mail addresses or the Info-ZIP URL(s), such as to imply Info-ZIP
56
+ will provide support for the altered versions.
57
+
58
+ 4. Info-ZIP retains the right to use the names "Info-ZIP," "Zip," "UnZip,"
59
+ "UnZipSFX," "WiZ," "Pocket UnZip," "Pocket Zip," and "MacZip" for its
60
+ own source and binary releases.