
import sys
from struct import unpack

def main(argv = None):
    if argv is None:
        argv = sys.argv
    filename = argv[1]
    
    osf_file = file(filename, "rb")
    read_int = lambda: unpack("I", osf_file.read(4))[0]
    read_double = lambda: unpack("d", osf_file.read(8))[0]
    
    cafebabe = read_int()
    assert cafebabe == 0xCAFEBABE, "%x" % cafebabe
    teamid = read_int()
    scenario_id = read_int()
    
    print "Team ", teamid
    print "Scenario ID ", scenario_id
    
    
    def osf_frame():
        time_step = read_int()
        count = read_int()
        print "TIME:", time_step
        print "COUNT:", count
        if count:
            return dict(            
                time_step = time_step,
                count = count,
            )
    
    flight_plan = []
    add_step = flight_plan.append
    frame = osf_frame()
    while frame:
        port_values = {}
        for i in xrange(frame['count']):
            addr = read_int()
            value = read_double()
            print "PORT", addr, "=", value
            port_values[addr] = value        
        add_step((frame['time_step'], port_values))
        frame = osf_frame()
        
    print flight_plan
    
    from chimp import Chimpanzee
    from simulation import run_simulation
    import translated_binaries

    X = 0x2
    Y = 0x3
    
    binary_name = "bin%i" % (scenario_id / 1000)
    translated_binaries = __import__("translated_binaries.%s" % binary_name)
    binary = getattr(translated_binaries, binary_name)

    run_simulation(
        binary.OrbitalVirtualMachine(),
        scenario_id,
        Chimpanzee(
            *flight_plan
        )
    )
    

if __name__ == "__main__":
    sys.exit(main())

