from construct import *
import datetime
import sys

Header = Struct("resType" / Byte,
                "extraHeader" / Byte,
                "version" / Int32ul,
                "unknown" / Int16ul,
                "maxNum" / Int16ul,
                "count" / Int16ul)
Record = Struct("noun" / Byte,
                "verb" / Byte,
                "case" / Byte,
                "seq" / Byte,
                "talker" / Byte,
                "offset" / Int16ul,
                "refNoun" / Byte,
                "refVerb" / Byte,
                "refCond" / Byte,
                "refSeq" / Byte)

Comment = Struct("text" / CString(),
                 "timestamp" / Int32ul,
                 "msgnum" / Int16ul)

if len(sys.argv)<2:
	print("Missing file name")
	sys.exit(1)

#f=open("210.MSG","rb")
f=open(sys.argv[1],"rb")
header = Header.parse_stream(f)
records = list()

if header.version // 1000 != 4:
	print("Message version not supported.")
	sys.exit(1)

for k in range(header.count):
    record = Record.parse_stream(f)
    records.append(record)
for v in records:
    f.seek(v.offset+2)
    v.string = CString().parse_stream(f)

setglobalfullprinting(True)
count = 0
while True:
    try:
        c = Comment.parse_stream(f)
        c.timestamp = datetime.datetime.fromtimestamp(c.timestamp)
        records[count].comment = c
        count += 1
    except:
        break

for r in records:
    print(r)

