diff options
author | Clifford Wolf <clifford@clifford.at> | 2017-01-15 10:05:03 +0100 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2017-01-15 10:05:13 +0100 |
commit | 31cc8a1ab94137079c5e0adc722a45900b093762 (patch) | |
tree | 7f6eaddfefff76a43166015ae3b9f40038e8cda1 | |
parent | b1c4784c8ebee596a708f4ecc769aeb87431ebfe (diff) | |
download | icestorm-31cc8a1ab94137079c5e0adc722a45900b093762.tar.gz icestorm-31cc8a1ab94137079c5e0adc722a45900b093762.tar.bz2 icestorm-31cc8a1ab94137079c5e0adc722a45900b093762.zip |
Cleanup icecompr code
-rw-r--r-- | icecompr/.gitignore | 1 | ||||
-rw-r--r-- | icecompr/Makefile | 10 | ||||
-rwxr-xr-x[-rw-r--r--] | icecompr/icecompr.py | 38 |
3 files changed, 30 insertions, 19 deletions
diff --git a/icecompr/.gitignore b/icecompr/.gitignore index 1ebf48a..bb7a7ef 100644 --- a/icecompr/.gitignore +++ b/icecompr/.gitignore @@ -1,5 +1,6 @@ icecompr iceuncompr example_?k.compr +example_?k.compr_py example_?k.ok example_?k.uncompr diff --git a/icecompr/Makefile b/icecompr/Makefile index c98f5d3..b230ffa 100644 --- a/icecompr/Makefile +++ b/icecompr/Makefile @@ -11,18 +11,22 @@ iceuncompr: iceuncompr.c %.compr: %.bin icecompr ./icecompr -v $< $@ - + +%.compr_py: %.bin icecompr.py + ./icecompr.py < $< > $@ %.uncompr: %.compr iceuncompr ./iceuncompr $< $@ -%.ok: %.uncompr %.bin - cmp $^ +%.ok: %.compr %.compr_py %.uncompr %.bin + cmp $(basename $@).compr $(basename $@).compr_py + cmp $(basename $@).uncompr $(basename $@).bin touch $@ clean: rm -f icecompr iceuncompr *.d rm -f example_1k.compr example_8k.compr + rm -f example_1k.compr_py example_8k.compr_py rm -f example_1k.uncompr example_8k.uncompr rm -f example_1k.ok example_8k.ok diff --git a/icecompr/icecompr.py b/icecompr/icecompr.py index 886c1a9..2e2bdaf 100644..100755 --- a/icecompr/icecompr.py +++ b/icecompr/icecompr.py @@ -7,14 +7,13 @@ # binary, for any purpose, commercial or non-commercial, and by any # means. - def make_int_bits(value, nbits): bits = list() for i in range(nbits-1, -1, -1): bits.append((value & (1 << i)) != 0) return bits -def ice_compress(inbits): +def ice_compress_bits(inbits): outbits = list() outbits += make_int_bits(0x49434543, 32) outbits += make_int_bits(0x4f4d5052, 32) @@ -107,23 +106,30 @@ def ice_compress(inbits): return outbits +def ice_compress_bytes(inbytes): + inbits = list() + for byte in inbytes: + for i in range(7, -1, -1): + inbits.append((byte & (1 << i)) != 0) -# ------------------------------------------------------ -# Usage example: -# python3 icecompr.py < example_8k.bin > example_8k.compr + outbits = ice_compress_bits(inbits) -import sys + outbytes = list() + for i in range(0, len(outbits), 8): + byte = 0 + for k in range(i, min(i+8, len(outbits))): + if outbits[k]: byte |= 1 << (7-(k-i)) + outbytes.append(byte) -inbits = list() -for byte in sys.stdin.buffer.read(): - for i in range(7, -1, -1): - inbits.append((byte & (1 << i)) != 0) + return bytes(outbytes) -outbits = ice_compress(inbits) +# ------------------------------------------------------ +# Usage example: +# python3 icecompr.py < example_8k.bin > example_8k.compr -for i in range(0, len(outbits), 8): - byte = 0 - for k in range(i, min(i+8, len(outbits))): - if outbits[k]: byte |= 1 << (7-(k-i)) - sys.stdout.buffer.write(bytes([byte])) +if __name__ == '__main__': + import sys + inbytes = sys.stdin.buffer.read() + outbytes = ice_compress_bytes(inbytes) + sys.stdout.buffer.write(outbytes) |