Advertisement
Guest User

codegrp2file.py

a guest
Dec 18th, 2017
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.50 KB | None | 0 0
  1. import bitstring
  2. import sys
  3. import os
  4.  
  5. def printusage():
  6.     print('Usage: codegrp2file.py infile')
  7.     exit()
  8.  
  9. bs = bitstring.BitStream()
  10. lastchar = 0
  11. digpos = 0
  12. block = 0
  13. s = ''
  14.  
  15. def processline(s):
  16.     global block
  17.     global lastchar
  18.     global digpos
  19.     global bs
  20.     for i in range(len(s)):
  21.         if s[i] in '0123456789':
  22.             block = block * 9 + (ord(s[i]) - 49 - lastchar) % 10
  23.             lastchar = ord(s[i]) - 48
  24.             digpos += 1
  25.             if digpos == 6:
  26.                 digpos = 0
  27.                 tbs = bitstring.Bits(uint=block, length=19)
  28.                 bs.append(tbs)
  29.                 block = 0
  30.  
  31.  
  32. if len(sys.argv) < 2:
  33.     printusage()
  34. infile_name = sys.argv[1]
  35. try:
  36.     f1 = open(infile_name, 'r')
  37. except:
  38.     print('Error opening infile')
  39.     print("Unexpected error:", sys.exc_info()[0])
  40.     printusage()
  41. s = f1.read(512)
  42. if len(s)==0:
  43.     print('Unexpected EOF')
  44.     exit()
  45. processline(s)
  46. print(bs)
  47. failed = True
  48. while failed:
  49.     try:
  50.         fnlen = bs.read('uie')
  51.         print('fnlen=',fnlen)
  52.         failed = False
  53.     except:
  54.         failed = True
  55.         s = f1.read(512)
  56.         if len(s)==0:
  57.             print('Unexpected EOF')
  58.             exit()
  59.         processline(s)
  60. del bs[:bs.pos]
  61. bs.pos = 0
  62. failed = True
  63. while failed:
  64.     try:
  65.         fn = bs.read('bytes:'+str(fnlen))
  66.         print('fn=',fn)
  67.         failed = False
  68.     except:
  69.         failed = True
  70.         s = f1.read(512)
  71.         if len(s)==0:
  72.             print('Unexpected EOF')
  73.             exit()
  74.         processline(s)
  75. del bs[:bs.pos]
  76. bs.pos = 0
  77. outfile_name = fn.decode('utf-8')
  78. try:
  79.     f2 = open(outfile_name, 'wb')
  80. except:
  81.     print('Error opening outfile')
  82.     print("Unexpected error:", sys.exc_info()[0])
  83.     printusage()
  84. failed = True
  85. while failed:
  86.     try:
  87.         flen = bs.read('uie')
  88.         print('flen=',flen)
  89.         failed = False
  90.     except:
  91.         failed = True
  92.         s = f1.read(512)
  93.         if len(s)==0:
  94.             print('Unexpected EOF')
  95.             exit()
  96.         processline(s)
  97. del bs[:bs.pos]
  98. bs.pos = 0
  99. for i in range(flen):
  100.     failed = True
  101.     while failed:
  102.         try:
  103.             nb = bs.read('bytes:1')
  104.             failed = False
  105.         except:
  106.             failed = True
  107.             s = f1.read(512)
  108.             if len(s)==0:
  109.                 print('Unexpected EOF')
  110.                 exit()
  111.             processline(s)
  112.     del bs[:bs.pos]
  113.     bs.pos = 0
  114.     f2.write(nb)
  115.  
  116. f1.close()
  117. f2.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement