Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import bitstring
- import sys
- import os
- def printusage():
- print('Usage: codegrp2file.py infile')
- exit()
- bs = bitstring.BitStream()
- lastchar = 0
- digpos = 0
- block = 0
- s = ''
- def processline(s):
- global block
- global lastchar
- global digpos
- global bs
- for i in range(len(s)):
- if s[i] in '0123456789':
- block = block * 9 + (ord(s[i]) - 49 - lastchar) % 10
- lastchar = ord(s[i]) - 48
- digpos += 1
- if digpos == 6:
- digpos = 0
- tbs = bitstring.Bits(uint=block, length=19)
- bs.append(tbs)
- block = 0
- if len(sys.argv) < 2:
- printusage()
- infile_name = sys.argv[1]
- try:
- f1 = open(infile_name, 'r')
- except:
- print('Error opening infile')
- print("Unexpected error:", sys.exc_info()[0])
- printusage()
- s = f1.read(512)
- if len(s)==0:
- print('Unexpected EOF')
- exit()
- processline(s)
- print(bs)
- failed = True
- while failed:
- try:
- fnlen = bs.read('uie')
- print('fnlen=',fnlen)
- failed = False
- except:
- failed = True
- s = f1.read(512)
- if len(s)==0:
- print('Unexpected EOF')
- exit()
- processline(s)
- del bs[:bs.pos]
- bs.pos = 0
- failed = True
- while failed:
- try:
- fn = bs.read('bytes:'+str(fnlen))
- print('fn=',fn)
- failed = False
- except:
- failed = True
- s = f1.read(512)
- if len(s)==0:
- print('Unexpected EOF')
- exit()
- processline(s)
- del bs[:bs.pos]
- bs.pos = 0
- outfile_name = fn.decode('utf-8')
- try:
- f2 = open(outfile_name, 'wb')
- except:
- print('Error opening outfile')
- print("Unexpected error:", sys.exc_info()[0])
- printusage()
- failed = True
- while failed:
- try:
- flen = bs.read('uie')
- print('flen=',flen)
- failed = False
- except:
- failed = True
- s = f1.read(512)
- if len(s)==0:
- print('Unexpected EOF')
- exit()
- processline(s)
- del bs[:bs.pos]
- bs.pos = 0
- for i in range(flen):
- failed = True
- while failed:
- try:
- nb = bs.read('bytes:1')
- failed = False
- except:
- failed = True
- s = f1.read(512)
- if len(s)==0:
- print('Unexpected EOF')
- exit()
- processline(s)
- del bs[:bs.pos]
- bs.pos = 0
- f2.write(nb)
- f1.close()
- f2.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement