home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 October / maximum-cd-2011-10.iso / DiscContents / digsby_setup.exe / lib / util / pyppmd.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-06-22  |  2.4 KB  |  79 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. import ctypes
  5. import sys
  6. import struct
  7.  
  8. class Ppmd7Error(Exception):
  9.     pass
  10.  
  11.  
  12. class Ppmd7DecodeError(Ppmd7Error):
  13.     pass
  14.  
  15.  
  16. class Ppmd7EncodeError(Ppmd7Error):
  17.     pass
  18.  
  19. MAGICPREFIX = 'ppmd7'
  20. ppmd = None
  21.  
  22. def _load_ppmd():
  23.     global ppmd
  24.     if ppmd is None:
  25.         ppmd = ctypes.cdll.ppmd7
  26.     
  27.     return ppmd
  28.  
  29.  
  30. def encode(buffer, order = 64, memsize = 201326592):
  31.     ppmd = _load_ppmd()
  32.     outBuffer = ctypes.POINTER(ctypes.c_char)()
  33.     outBufferSize = ctypes.c_int()
  34.     buffer_size = len(buffer)
  35.     ret = ppmd.encode(buffer, buffer_size, order, memsize, ctypes.byref(outBuffer), ctypes.byref(outBufferSize))
  36.     if ret < 0:
  37.         raise Ppmd7EncodeError()
  38.     ret < 0
  39.     val = ctypes.string_at(outBuffer, outBufferSize)
  40.     ppmd.kill(ctypes.byref(outBuffer))
  41.     return val
  42.  
  43.  
  44. def pack(buffer):
  45.     buffer_size = len(buffer)
  46.     val = encode(buffer)
  47.     return MAGICPREFIX + struct.pack('!I', buffer_size) + val
  48.  
  49.  
  50. def unpack(buffer):
  51.     ppmd = _load_ppmd()
  52.     if not buffer.startswith(MAGICPREFIX):
  53.         raise Ppmd7DecodeError('invalid header')
  54.     buffer.startswith(MAGICPREFIX)
  55.     buffer = buffer[len(MAGICPREFIX):]
  56.     (size,) = struct.unpack('!I', buffer[:4])
  57.     buffer = buffer[4:]
  58.     return decode(buffer, size)
  59.  
  60.  
  61. def decode(buffer, expected, order = 64, memsize = 201326592):
  62.     outBuffer = ctypes.POINTER(ctypes.c_char)()
  63.     outBufferSize = ctypes.c_int()
  64.     expected = ctypes.c_int(expected)
  65.     if -1 == ppmd.decode(buffer, len(buffer), order, memsize, expected, ctypes.byref(outBuffer), ctypes.byref(outBufferSize)):
  66.         raise Ppmd7DecodeError()
  67.     -1 == ppmd.decode(buffer, len(buffer), order, memsize, expected, ctypes.byref(outBuffer), ctypes.byref(outBufferSize))
  68.     val = ctypes.string_at(outBuffer, outBufferSize)
  69.     ppmd.kill(ctypes.byref(outBuffer))
  70.     return val
  71.  
  72. if __name__ == '__main__':
  73.     s = 'test foo foo bar foo foo bar'
  74.     enc = pack(s)
  75.     dec = unpack(enc)
  76.     print s
  77.     print dec
  78.  
  79.