initial code for dumping imessages in a reasonable format
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
"""
|
||||
/**************************************************************
|
||||
LZSS.C -- A Data Compression Program
|
||||
***************************************************************
|
||||
4/6/1989 Haruhiko Okumura
|
||||
Use, distribute, and modify this program freely.
|
||||
Please send me your improved versions.
|
||||
PC-VAN SCIENCE
|
||||
NIFTY-Serve PAF01022
|
||||
CompuServe 74050,1022
|
||||
|
||||
**************************************************************/
|
||||
/*
|
||||
* lzss.c - Package for decompressing lzss compressed objects
|
||||
*
|
||||
* Copyright (c) 2003 Apple Computer, Inc.
|
||||
*
|
||||
* DRI: Josh de Cesare
|
||||
*/
|
||||
"""
|
||||
from array import array
|
||||
import struct
|
||||
|
||||
N = 4096
|
||||
F = 18
|
||||
THRESHOLD = 2
|
||||
NIL = N
|
||||
|
||||
def decompress_lzss(str):
|
||||
if str[:8] !="complzss":
|
||||
print "decompress_lzss: complzss magic missing"
|
||||
return
|
||||
decompsize = struct.unpack(">L", str[12:16])[0]
|
||||
text_buf = array("B", " "*(N + F - 1))
|
||||
src = array("B", str[0x180:])
|
||||
srclen = len(src)
|
||||
dst = array("B", " "*decompsize)
|
||||
r = N - F
|
||||
srcidx, dstidx, flags, c = 0, 0, 0, 0
|
||||
|
||||
while True:
|
||||
flags >>= 1
|
||||
if ((flags & 0x100) == 0):
|
||||
if (srcidx >= srclen):
|
||||
break
|
||||
c = src[srcidx]; srcidx += 1
|
||||
flags = c | 0xFF00;
|
||||
|
||||
if (flags & 1):
|
||||
if (srcidx >= srclen):
|
||||
break
|
||||
c = src[srcidx]; srcidx += 1
|
||||
dst[dstidx] = c; dstidx += 1
|
||||
text_buf[r] = c; r += 1
|
||||
r &= (N - 1);
|
||||
else:
|
||||
if (srcidx >= srclen):
|
||||
break
|
||||
i = src[srcidx]; srcidx += 1
|
||||
if (srcidx >= srclen):
|
||||
break
|
||||
j = src[srcidx]; srcidx += 1
|
||||
i |= ((j & 0xF0) << 4)
|
||||
j = (j & 0x0F) + THRESHOLD
|
||||
for k in xrange(j+1):
|
||||
c = text_buf[(i + k) & (N - 1)]
|
||||
dst[dstidx] = c; dstidx += 1
|
||||
text_buf[r] = c; r += 1
|
||||
r &= (N - 1)
|
||||
return dst.tostring()
|
||||
|
||||
Reference in New Issue
Block a user