Advertisement
Guest User

file2codegrp.py

a guest
Dec 18th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.73 KB | None | 0 0
  1. import bitstring
  2. import sys
  3. import os
  4.  
  5. def printusage():
  6.     print('Usage: file2codegrp.py infile [outfile]')
  7.     exit()
  8.  
  9. def str_base(number, base):
  10.     (d,m) = divmod(number,len(base))
  11.     if d > 0:
  12.         return str_base(d,base)+base[m]
  13.     return base[m]
  14.  
  15. #bitstring.BitArray(uie=1322)
  16.  
  17. bs = bitstring.BitArray()
  18. lastchar = 0
  19. s = []
  20.  
  21. def putchar(c):
  22.     global s
  23.     s += c
  24.     if len(s) >= 5:
  25.         f2.write(' '.join(s[:5])+'. ')
  26.         del s[:5]
  27.  
  28. def putbytes(b):
  29.     global lastchar
  30.     bs.append(b)
  31.     while len(bs) >= 19:
  32.         code = bs[:19].uint
  33.         del bs[:19]
  34.         code = str_base(code, [[0], [1], [2], [3], [4], [5], [6], [7], [8]])
  35.         if len(code) < 6:
  36.             code = [0] * (6 - len(code)) + code
  37.         for i in range(len(code)):
  38.             code[i] = (lastchar + code[i] + 1) % 10
  39.             lastchar = code[i]
  40.             putchar([chr(lastchar+48)])
  41.  
  42. if len(sys.argv) < 2:
  43.     printusage()
  44. infile_name = sys.argv[1]
  45. if len(sys.argv) > 2:
  46.     outfile_name = sys.argv[2]
  47. else:
  48.     outfile_name = infile_name + '.txt'
  49. try:
  50.     f1 = open(infile_name, 'rb')
  51. except:
  52.     print('Error opening infile')
  53.     print("Unexpected error:", sys.exc_info()[0])
  54.     printusage()
  55. try:
  56.     f2 = open(outfile_name, 'w')
  57. except:
  58.     print('Error opening outfile')
  59.     print("Unexpected error:", sys.exc_info()[0])
  60.     printusage()
  61. fn = os.path.basename(infile_name).encode('utf-8')
  62. bs.append(bitstring.Bits(uie=len(fn)))
  63. bs.append(fn)
  64. bs.append(bitstring.Bits(uie=os.stat(infile_name).st_size))
  65. buf = f1.read(512)
  66. while len(buf) > 0:
  67.     putbytes(buf)
  68.     buf = f1.read(512)
  69. f1.close()
  70. putbytes(b'\0' * (((19 - len(bs)) % 19 + 7) // 8))
  71. putchar('0' * ((5 - len(s)) % 5))
  72. f2.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement