Python scripts. I guess a tl tool is just a luxury now.
Build MSG from a null-delimited, UTF-8 text file:
Code:
import sys
import string
import struct
import os
import codecs
import re
fileT = open(sys.argv[1], "r+b")
fileTString = str(fileT.read())
name = str(os.path.splitext(os.path.basename(fileT.name))[0])
extension = '.msg'
msgName = "".join((name, extension))
print(msgName)
msgFile = open(msgName, "w+b")
msgFile.write("\x4d\x53\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3A\x00\x00\x00\x00\x0A\xEC\x00\x10\x01\xE0\x00\x00\x00\x00")
utf16Text = fileTString.decode('utf-8-sig').encode('utf-16be')
sizeText = str(struct.pack('>L', len(utf16Text)))
msgFile.seek(36, 0)
msgFile.write(sizeText)
msgFile.seek(0, 2)
print(msgFile.tell())
textPointer = int(0)
lineAmount = int(0)
print(textPointer)
textSize = int(len(utf16Text))
print(textSize)
for line in re.split('\0', utf16Text.decode('utf-16be')):
line = line.encode('utf-16be')
withNulls = int(len(line)) + 2
msgFile.write(str(struct.pack('>L', withNulls)))
msgFile.write(str(struct.pack('>L', textPointer)))
textPointer += withNulls
lineAmount += 1
textSize -= withNulls
if textSize <= int(0):
break
msgFile.seek(32, 0)
msgFile.write(str(struct.pack('>H', lineAmount)))
lineAmount *= int(8)
checkFiller = int(lineAmount)
checkFiller %= int(16)
msgFile.seek(0, 2)
if checkFiller != int(0):
msgFile.write("\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD")
lineAmount += int(8)
lineAmount += int(16)
totalSize = int(lineAmount)
totalSize += int(len(utf16Text))
msgFile.seek(42, 0)
msgFile.write(str(struct.pack('>H', lineAmount)))
msgFile.seek(16, 0)
msgFile.write(str(struct.pack('>L', totalSize)))
totalSize += int(32)
msgFile.seek(0, 2)
msgFile.write(utf16Text)
Insert MSG into .SCB:
Code:
import sys
import string
import struct
import os
fileD = open(sys.argv[1], "r+b")
fileP = open(sys.argv[2], "r+b")
filePString = str(fileP.read())
fileDString = str(fileD.read())
fileP.seek(0, 2)
endP = str(struct.pack('>L', int(fileP.tell())))
fileP.write(fileDString)
fileP.seek(148,0)
totalSize = int(len(fileDString))
fileP.write(str(struct.pack('>L', totalSize)))
fileP.write(endP)
Add file to .BNA:
Code:
import sys
import string
import struct
import os
fileT = open(sys.argv[1], "r+b")
fileP = open(sys.argv[2], "r+b")
filePString = str(fileP.read())
fileTString = str(fileT.read())
name = str(os.path.basename(fileT.name))
size = str(struct.pack('>L', len(fileTString)))
packedOffset = str(struct.pack('>L', int(filePString.find(name))))
offsetOffset = filePString.find(packedOffset)
fileP.seek(0, 2)
endP = str(struct.pack('>L', int(fileP.tell())))
fileP.write(fileTString)
fileP.seek(offsetOffset)
fileP.seek(4, 1)
fileP.write(endP)
fileP.write(size)
fileT.close()
fileP.close()