aboutsummaryrefslogtreecommitdiff
path: root/contrib/libmpq/bindings/python/mpq.py
diff options
context:
space:
mode:
authorclick <none@none>2010-06-05 23:00:30 +0200
committerclick <none@none>2010-06-05 23:00:30 +0200
commit6a9357b13d7ea6bd7d77dbfc6587af9028caa401 (patch)
treec35f00eeac2348e141143fce2afe8924e26c20a3 /contrib/libmpq/bindings/python/mpq.py
parentfd28bc6aff6fe356262b5ac20e152c6ec8569c43 (diff)
Move contrib/libmpq into dep as an external dependency + remove extra libmpq-source found in map-extractor
--HG-- branch : trunk rename : contrib/libmpq/AUTHORS => dep/libmpq/AUTHORS rename : contrib/libmpq/COPYING => dep/libmpq/COPYING rename : contrib/libmpq/FAQ => dep/libmpq/FAQ rename : contrib/libmpq/Makefile.am => dep/libmpq/Makefile.am rename : contrib/libmpq/NEWS => dep/libmpq/NEWS rename : contrib/libmpq/README => dep/libmpq/README rename : contrib/libmpq/THANKS => dep/libmpq/THANKS rename : contrib/libmpq/TODO => dep/libmpq/TODO rename : contrib/libmpq/autogen.sh => dep/libmpq/autogen.sh rename : contrib/libmpq/bindings/Makefile.am => dep/libmpq/bindings/Makefile.am rename : contrib/libmpq/bindings/d/Makefile.am => dep/libmpq/bindings/d/Makefile.am rename : contrib/libmpq/bindings/d/dsss.conf => dep/libmpq/bindings/d/dsss.conf rename : contrib/libmpq/bindings/d/mpq.d => dep/libmpq/bindings/d/mpq.d rename : contrib/libmpq/bindings/python/Makefile.am => dep/libmpq/bindings/python/Makefile.am rename : contrib/libmpq/bindings/python/mpq-info => dep/libmpq/bindings/python/mpq-info rename : contrib/libmpq/bindings/python/mpq.py => dep/libmpq/bindings/python/mpq.py rename : contrib/libmpq/configure.ac => dep/libmpq/configure.ac rename : contrib/libmpq/debian/changelog => dep/libmpq/debian/changelog rename : contrib/libmpq/debian/compat => dep/libmpq/debian/compat rename : contrib/libmpq/debian/control => dep/libmpq/debian/control rename : contrib/libmpq/debian/copyright => dep/libmpq/debian/copyright rename : contrib/libmpq/debian/libmpq-dev.dirs => dep/libmpq/debian/libmpq-dev.dirs rename : contrib/libmpq/debian/libmpq-dev.install => dep/libmpq/debian/libmpq-dev.install rename : contrib/libmpq/debian/libmpq0.dirs => dep/libmpq/debian/libmpq0.dirs rename : contrib/libmpq/debian/libmpq0.docs => dep/libmpq/debian/libmpq0.docs rename : contrib/libmpq/debian/libmpq0.install => dep/libmpq/debian/libmpq0.install rename : contrib/libmpq/debian/python-mpq.install => dep/libmpq/debian/python-mpq.install rename : contrib/libmpq/debian/rules => dep/libmpq/debian/rules rename : contrib/libmpq/doc/Makefile.am => dep/libmpq/doc/Makefile.am rename : contrib/libmpq/doc/man1/Makefile.am => dep/libmpq/doc/man1/Makefile.am rename : contrib/libmpq/doc/man1/libmpq-config.1 => dep/libmpq/doc/man1/libmpq-config.1 rename : contrib/libmpq/doc/man3/Makefile.am => dep/libmpq/doc/man3/Makefile.am rename : contrib/libmpq/doc/man3/libmpq.3 => dep/libmpq/doc/man3/libmpq.3 rename : contrib/libmpq/doc/man3/libmpq__archive_close.3 => dep/libmpq/doc/man3/libmpq__archive_close.3 rename : contrib/libmpq/doc/man3/libmpq__archive_files.3 => dep/libmpq/doc/man3/libmpq__archive_files.3 rename : contrib/libmpq/doc/man3/libmpq__archive_offset.3 => dep/libmpq/doc/man3/libmpq__archive_offset.3 rename : contrib/libmpq/doc/man3/libmpq__archive_open.3 => dep/libmpq/doc/man3/libmpq__archive_open.3 rename : contrib/libmpq/doc/man3/libmpq__archive_packed_size.3 => dep/libmpq/doc/man3/libmpq__archive_packed_size.3 rename : contrib/libmpq/doc/man3/libmpq__archive_unpacked_size.3 => dep/libmpq/doc/man3/libmpq__archive_unpacked_size.3 rename : contrib/libmpq/doc/man3/libmpq__archive_version.3 => dep/libmpq/doc/man3/libmpq__archive_version.3 rename : contrib/libmpq/doc/man3/libmpq__block_close_offset.3 => dep/libmpq/doc/man3/libmpq__block_close_offset.3 rename : contrib/libmpq/doc/man3/libmpq__block_open_offset.3 => dep/libmpq/doc/man3/libmpq__block_open_offset.3 rename : contrib/libmpq/doc/man3/libmpq__block_read.3 => dep/libmpq/doc/man3/libmpq__block_read.3 rename : contrib/libmpq/doc/man3/libmpq__block_unpacked_size.3 => dep/libmpq/doc/man3/libmpq__block_unpacked_size.3 rename : contrib/libmpq/doc/man3/libmpq__file_blocks.3 => dep/libmpq/doc/man3/libmpq__file_blocks.3 rename : contrib/libmpq/doc/man3/libmpq__file_compressed.3 => dep/libmpq/doc/man3/libmpq__file_compressed.3 rename : contrib/libmpq/doc/man3/libmpq__file_encrypted.3 => dep/libmpq/doc/man3/libmpq__file_encrypted.3 rename : contrib/libmpq/doc/man3/libmpq__file_imploded.3 => dep/libmpq/doc/man3/libmpq__file_imploded.3 rename : contrib/libmpq/doc/man3/libmpq__file_number.3 => dep/libmpq/doc/man3/libmpq__file_number.3 rename : contrib/libmpq/doc/man3/libmpq__file_offset.3 => dep/libmpq/doc/man3/libmpq__file_offset.3 rename : contrib/libmpq/doc/man3/libmpq__file_packed_size.3 => dep/libmpq/doc/man3/libmpq__file_packed_size.3 rename : contrib/libmpq/doc/man3/libmpq__file_read.3 => dep/libmpq/doc/man3/libmpq__file_read.3 rename : contrib/libmpq/doc/man3/libmpq__file_unpacked_size.3 => dep/libmpq/doc/man3/libmpq__file_unpacked_size.3 rename : contrib/libmpq/doc/man3/libmpq__version.3 => dep/libmpq/doc/man3/libmpq__version.3 rename : contrib/libmpq/libmpq-config.in => dep/libmpq/libmpq-config.in rename : contrib/libmpq/libmpq.pc.in => dep/libmpq/libmpq.pc.in rename : contrib/libmpq/libmpq/Makefile.am => dep/libmpq/libmpq/Makefile.am rename : contrib/libmpq/libmpq/common.c => dep/libmpq/libmpq/common.c rename : contrib/libmpq/libmpq/common.h => dep/libmpq/libmpq/common.h rename : contrib/libmpq/libmpq/crypt_buf.h => dep/libmpq/libmpq/crypt_buf.h rename : contrib/libmpq/libmpq/explode.c => dep/libmpq/libmpq/explode.c rename : contrib/libmpq/libmpq/explode.h => dep/libmpq/libmpq/explode.h rename : contrib/libmpq/libmpq/extract.c => dep/libmpq/libmpq/extract.c rename : contrib/libmpq/libmpq/extract.h => dep/libmpq/libmpq/extract.h rename : contrib/libmpq/libmpq/huffman.c => dep/libmpq/libmpq/huffman.c rename : contrib/libmpq/libmpq/huffman.h => dep/libmpq/libmpq/huffman.h rename : contrib/libmpq/libmpq/mpq-internal.h => dep/libmpq/libmpq/mpq-internal.h rename : contrib/libmpq/libmpq/mpq.c => dep/libmpq/libmpq/mpq.c rename : contrib/libmpq/libmpq/mpq.h => dep/libmpq/libmpq/mpq.h rename : contrib/libmpq/libmpq/wave.c => dep/libmpq/libmpq/wave.c rename : contrib/libmpq/libmpq/wave.h => dep/libmpq/libmpq/wave.h rename : contrib/libmpq/tools/Makefile.am => dep/libmpq/tools/Makefile.am rename : contrib/libmpq/tools/crypt_buf_gen.c => dep/libmpq/tools/crypt_buf_gen.c rename : contrib/libmpq/win/VS100/libmpq.vcxproj => dep/libmpq/win/VS100/libmpq.vcxproj rename : contrib/libmpq/win/config.h => dep/libmpq/win/config.h rename : contrib/libmpq/win/libmpq_VC90.sln => dep/libmpq/win/libmpq_VC90.sln rename : contrib/libmpq/win/stdint.h => dep/libmpq/win/stdint.h
Diffstat (limited to 'contrib/libmpq/bindings/python/mpq.py')
-rw-r--r--contrib/libmpq/bindings/python/mpq.py322
1 files changed, 0 insertions, 322 deletions
diff --git a/contrib/libmpq/bindings/python/mpq.py b/contrib/libmpq/bindings/python/mpq.py
deleted file mode 100644
index cf6ecaae800..00000000000
--- a/contrib/libmpq/bindings/python/mpq.py
+++ /dev/null
@@ -1,322 +0,0 @@
-"""wrapper for libmpq"""
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-import ctypes
-import ctypes.util
-import os
-
-libmpq = ctypes.CDLL(ctypes.util.find_library("mpq"))
-
-class Error(Exception):
- pass
-
-errors = {
- -1: (IOError, "open"),
- -2: (IOError, "close"),
- -3: (IOError, "seek"),
- -4: (IOError, "read"),
- -5: (IOError, "write"),
- -6: (MemoryError,),
- -7: (Error, "file is not an mpq or is corrupted"),
- -8: (AssertionError, "not initialized"),
- -9: (AssertionError, "buffer size too small"),
- -10: (IndexError, "file not in archive"),
- -11: (AssertionError, "decrypt"),
- -12: (AssertionError, "unpack"),
-}
-
-def check_error(result, func, arguments, errors=errors):
- try:
- error = errors[result]
- except KeyError:
- return result
- else:
- raise error[0](*error[1:])
-
-libmpq.libmpq__version.restype = ctypes.c_char_p
-
-libmpq.libmpq__archive_open.errcheck = check_error
-libmpq.libmpq__archive_close.errcheck = check_error
-libmpq.libmpq__archive_packed_size.errcheck = check_error
-libmpq.libmpq__archive_unpacked_size.errcheck = check_error
-libmpq.libmpq__archive_offset.errcheck = check_error
-libmpq.libmpq__archive_version.errcheck = check_error
-libmpq.libmpq__archive_files.errcheck = check_error
-
-libmpq.libmpq__file_packed_size.errcheck = check_error
-libmpq.libmpq__file_unpacked_size.errcheck = check_error
-libmpq.libmpq__file_offset.errcheck = check_error
-libmpq.libmpq__file_blocks.errcheck = check_error
-libmpq.libmpq__file_encrypted.errcheck = check_error
-libmpq.libmpq__file_compressed.errcheck = check_error
-libmpq.libmpq__file_imploded.errcheck = check_error
-libmpq.libmpq__file_number.errcheck = check_error
-libmpq.libmpq__file_read.errcheck = check_error
-
-libmpq.libmpq__block_open_offset.errcheck = check_error
-libmpq.libmpq__block_close_offset.errcheck = check_error
-libmpq.libmpq__block_unpacked_size.errcheck = check_error
-libmpq.libmpq__block_read.errcheck = check_error
-
-__version__ = libmpq.libmpq__version()
-
-
-class Reader(object):
- def __init__(self, file, libmpq=libmpq):
- self._file = file
- self._pos = 0
- self._buf = []
- self._cur_block = 0
- libmpq.libmpq__block_open_offset(self._file._archive._mpq,
- self._file.number)
-
- def __iter__(self):
- return self
-
- def __repr__(self):
- return "iter(%r)" % self._file
-
- def seek(self, offset, whence=os.SEEK_SET, os=os):
- if whence == os.SEEK_SET:
- pass
- elif whence == os.SEEK_CUR:
- offset += self._pos
- elif whence == os.SEEK_END:
- offset += self._file.unpacked_size
- else:
- raise ValueError, "invalid whence"
-
- if offset >= self._pos:
- self.read(offset - self._pos)
- else:
- self._pos = 0
- self._buf = []
- self._cur_block = 0
- self.read(offset)
-
- def tell(self):
- return self._pos
-
- def _read_block(self, ctypes=ctypes, libmpq=libmpq):
- block_size = ctypes.c_uint64()
- libmpq.libmpq__block_unpacked_size(self._file._archive._mpq,
- self._file.number, self._cur_block, ctypes.byref(block_size))
- block_data = ctypes.create_string_buffer(block_size.value)
- libmpq.libmpq__block_read(self._file._archive._mpq,
- self._file.number, self._cur_block,
- block_data, ctypes.c_uint64(len(block_data)), None)
- self._buf.append(block_data.raw)
- self._cur_block += 1
-
- def read(self, size=-1):
- while size < 0 or sum(map(len, self._buf)) < size:
- if self._cur_block == self._file.blocks:
- break
- self._read_block()
- buf = "".join(self._buf)
- if size < 0:
- ret = buf
- self._buf = []
- else:
- ret = buf[:size]
- self._buf = [buf[size:]]
- self._pos += len(ret)
- return ret
-
- def readline(self, os=os):
- line = []
- while True:
- char = self.read(1)
- if char == "":
- break
- if char not in '\r\n' and line and line[-1] in '\r\n':
- self.seek(-1, os.SEEK_CUR)
- break
- line.append(char)
- return ''.join(line)
-
- def next(self):
- line = self.readline()
- if not line:
- raise StopIteration
- return line
-
- def readlines(self, sizehint=-1):
- res = []
- while sizehint < 0 or sum(map(len, res)) < sizehint:
- line = self.readline()
- if not line:
- break
- res.append(line)
- return res
-
- xreadlines = __iter__
-
- def __del__(self, libmpq=libmpq):
- libmpq.libmpq__block_close_offset(self._file._archive._mpq,
- self._file.number)
-
-
-class File(object):
- def __init__(self, archive, number, ctypes=ctypes, libmpq=libmpq):
- self._archive = archive
- self.number = number
-
- for name, atype in [
- ("packed_size", ctypes.c_uint64),
- ("unpacked_size", ctypes.c_uint64),
- ("offset", ctypes.c_uint64),
- ("blocks", ctypes.c_uint32),
- ("encrypted", ctypes.c_uint32),
- ("compressed", ctypes.c_uint32),
- ("imploded", ctypes.c_uint32),
- ]:
- data = atype()
- func = getattr(libmpq, "libmpq__file_"+name)
- func(self._archive._mpq, self.number, ctypes.byref(data))
- setattr(self, name, data.value)
-
- def __str__(self, ctypes=ctypes, libmpq=libmpq):
- data = ctypes.create_string_buffer(self.unpacked_size)
- libmpq.libmpq__file_read(self._archive._mpq, self.number,
- data, ctypes.c_uint64(len(data)), None)
- return data.raw
-
- def __repr__(self):
- return "%r[%i]" % (self._archive, self.number)
-
- def __iter__(self, Reader=Reader):
- return Reader(self)
-
-
-class Archive(object):
- def __init__(self, source, ctypes=ctypes, File=File, libmpq=libmpq):
- self._source = source
- if isinstance(source, File):
- assert not source.encrypted
- assert not source.compressed
- assert not source.imploded
- self.filename = source._archive.filename
- offset = source._archive.offset + source.offset
- else:
- self.filename = source
- offset = -1
-
- self._mpq = ctypes.c_void_p()
- libmpq.libmpq__archive_open(ctypes.byref(self._mpq), self.filename,
- ctypes.c_uint64(offset))
- self._opened = True
-
- for field_name, field_type in [
- ("packed_size", ctypes.c_uint64),
- ("unpacked_size", ctypes.c_uint64),
- ("offset", ctypes.c_uint64),
- ("version", ctypes.c_uint32),
- ("files", ctypes.c_uint32),
- ]:
- func = getattr(libmpq, "libmpq__archive_" + field_name)
- data = field_type()
- func(self._mpq, ctypes.byref(data))
- setattr(self, field_name, data.value)
-
- def __del__(self, libmpq=libmpq):
- if getattr(self, "_opened", False):
- libmpq.libmpq__archive_close(self._mpq)
-
- def __len__(self):
- return self.files
-
- def __contains__(self, item, ctypes=ctypes, libmpq=libmpq):
- if isinstance(item, str):
- data = ctypes.c_uint32()
- try:
- libmpq.libmpq__file_number(self._mpq, ctypes.c_char_p(item),
- ctypes.byref(data))
- except IndexError:
- return False
- return True
- return 0 <= item < self.files
-
- def __getitem__(self, item, ctypes=ctypes, File=File, libmpq=libmpq):
- if isinstance(item, str):
- data = ctypes.c_int()
- libmpq.libmpq__file_number(self._mpq, ctypes.c_char_p(item),
- ctypes.byref(data))
- item = data.value
- else:
- if not 0 <= item < self.files:
- raise IndexError, "file not in archive"
- return File(self, item)
-
- def __repr__(self):
- return "mpq.Archive(%r)" % self._source
-
-# Remove clutter - everything except Error and Archive.
-del os, check_error, ctypes, errors, File, libmpq, Reader
-
-if __name__ == "__main__":
- import sys, random
- archive = Archive(sys.argv[1])
- print repr(archive)
- for k, v in archive.__dict__.iteritems():
- #if k[0] == '_': continue
- print " " * (4 - 1), k, v
- assert '(listfile)' in archive
- assert 0 in archive
- assert len(archive) == archive.files
- files = [x.strip() for x in archive['(listfile)']]
- files.extend(xrange(archive.files))
- for key in files: #sys.argv[2:] if sys.argv[2:] else xrange(archive.files):
- file = archive[key]
- print
- print " " * (4 - 1), repr(file)
- for k, v in file.__dict__.iteritems():
- #if k[0] == '_': continue
- print " " * (8 - 1), k, v
-
- a = str(file)
-
- b = iter(file).read()
-
- reader = iter(file)
- c = []
- while True:
- l = random.randrange(1, 10)
- d = reader.read(l)
- if not d: break
- assert len(d) <= l
- c.append(d)
- c = "".join(c)
-
- d = []
- reader.seek(0)
- for line in reader:
- d.append(line)
- d = "".join(d)
-
- assert a == b == c == d, map(hash, [a,b,c,d])
- assert len(a) == file.unpacked_size
-
- repr(iter(file))
-
-
- reader.seek(0)
- a = reader.readlines()
-
- reader.seek(0)
- b = list(reader)
-
- assert a == b