import os, zipfile, sys
if len(sys.argv) < 3:
print('Usage: python maketns.py <output_tns_file.tns> <input_lua_file_1.lua> ... <input_lua_file_n.lua>')
print('Note that different lua source files are simply concatenated.')
sys.exit(0)
outputFileName = sys.argv[1]
inputFileNames = sys.argv[2:len(sys.argv)]
#hex values of a blank tns file
blankTnsHexValues = [
'2a', '54', '49', '4d', '4c', '50', '30', '35',
'30', '30', '14', '00', '00', '00', '0d', '00',
'3c', '17', '8d', '3e', '73', '45', '68', '44',
'40', '01', '00', '00', '93', '02', '00', '00',
'0c', '00', '00', '00', '44', '6f', '63', '75',
'6d', '65', '6e', '74', '2e', '78', '6d', '6c',
'0f', 'ce', 'd8', 'd2', '81', '06', '86', '5b',
'62', '81', 'c2', 'a6', '21', 'a5', 'fd', '08',
'23', '0f', '92', 'ae', '38', '45', '2a', '05',
'66', 'bb', 'c7', 'df', '98', '87', '55', '13',
'61', '47', '75', '24', '66', 'f9', '71', '1f',
'cd', 'e5', 'b3', '41', '5d', '13', '33', '4e',
'72', '0e', '08', 'fb', '76', '87', 'e6', '1d',
'8f', '93', '18', '32', 'e7', '06', '92', '6a',
'58', 'f0', '77', '22', '09', 'ba', 'ca', '25',
'b3', '8e', '7b', '52', '98', 'c5', '54', '9a',
'5f', '8c', '34', '9e', '35', 'f5', '6b', '75',
'45', 'c7', '7a', '10', '8a', '5f', '6e', '0d',
'e6', '4a', '1e', '90', '92', 'ba', '1c', 'd1',
'96', 'b0', 'c1', '19', 'cd', '5c', '0d', '27',
'9b', '19', '2f', '58', '6f', '49', '14', '95',
'0d', 'f1', '3a', 'c8', '99', '82', '2e', 'a3',
'ad', '36', '9e', 'b7', '13', '28', 'aa', '9b',
'89', 'b5', '30', 'fc', '3f', 'd4', 'd2', '45',
'be', 'c4', '7f', '86', '87', '71', '25', '09',
'd1', 'ed', 'b3', 'd3', '92', '69', 'df', 'b5',
'94', '72', 'a6', '37', '58', '58', 'c4', 'd4',
'29', 'd1', 'ba', 'af', '84', '4a', '2e', 'cf',
'2e', '7b', 'fb', 'bd', '91', 'ac', '99', 'ba',
'a8', 'cc', 'c0', '95', '5b', '21', 'e4', '3d',
'58', 'fa', '8f', 'c4', '21', 'c7', '66', 'c5',
'7b', 'a7', '31', '9f', '70', '2d', '1e', 'ce',
'37', '8a', '13', 'e1', 'e8', '1e', '88', '67',
'11', '7c', '3e', '7d', '75', '52', 'bd', '9a',
'40', 'd7', 'af', '3d', 'a1', '10', '3a', 'eb',
'91', 'c8', '8d', '4a', '24', '9b', '38', '85',
'8f', '38', 'b5', '3c', 'b5', 'a3', 'fa', '1b',
'be', '4a', 'ca', '93', 'd7', '41', '69', '02',
'0d', 'ad', '30', '6d', 'ba', '08', '54', 'fc',
'13', 'e8', 'fa', 'eb', 'c0', 'fd', 'e8', 'ad',
'51', '1a', '4a', '89', '95', '3a', '27', 'd4',
'f2', 'cc', '40', '46', 'cd', 'c9', '8a', '14',
'd5', '83', 'df', '60', 'dc', 'ce', '06', '5e',
'9e', '2e', 'b1', 'd3', '54', '97', 'f7', '7b',
'ae', '6f', '51', '4f', '74', 'dc', '57', '6a',
'd4', '7f', '37', '2a', '49', 'ba', '86', '2a']
#xml code which should be placed before and after the lua code
xmlCodeBefore = '<?xml version="1.0" encoding="UTF-8" ?><prob xmlns="urn:TI.Problem" ver="1.0" pbname=""><sym></sym><card clay="0" h1="10000" h2="10000" w1="10000" w2="10000"><isDummyCard>0</isDummyCard><flag>0</flag><wdgt xmlns:sc="urn:TI.ScriptApp" type="TI.ScriptApp" ver="1.0"><sc:mFlags>0</sc:mFlags><sc:value>-1</sc:value><sc:script>'
xmlCodeAfter = '</sc:script></wdgt></card></prob>'
convertedLua = ''
for inputFileName in inputFileNames:
inputFile = open(inputFileName, 'rb')
#encoding special chars of each line in the lua code
for line in inputFile:
conv = line.replace('&', '&')
conv = conv.replace('"', '"')
conv = conv.replace('\'', ''')
conv = conv.replace('<', '<')
conv = conv.replace('>', '>')
convertedLua += conv
inputFile.close()
xmlCode = xmlCodeBefore + convertedLua + xmlCodeAfter
#compressing the generated xml code to temp.zip
tempZip = zipfile.ZipFile('./temp.zip', 'w', zipfile.ZIP_DEFLATED)
tempZip.writestr('Problem1.xml', xmlCode)
tempZip.close()
outputFile = open(outputFileName, 'wb')
#writing blank tns file
for s in blankTnsHexValues:
outputFile.write(chr(eval('0x' + s)))
#appending created zip file
zipFile = open('./temp.zip', 'rb')
outputFile.write(zipFile.read())
zipFile.close()
outputFile.close()
#deleting temp.zip
os.remove('./temp.zip')