Sophie

Sophie

distrib > Mandriva > 2010.2 > i586 > media > contrib-backports > by-pkgid > df29c83ca401d91ec9c00bfcf7fea4ea > files > 133

shedskin-0.8-2mdv2010.2.i586.rpm

#!/usr/bin/env python2
# I, Danny Milosavljevic, hereby place this file into the public domain.

import sys
import struct
import entries
from entries import Entry
import os

class Loader(entries.Loader):
    def __init__(self):
        self.start_addr = 0
        self.end_addr = 0
        self.file_name = ""
        self.size = 0
        self.stream = None
        pass
    def parse(self, stream, file_name):
        beginning_pos = int(stream.tell())
        stream.seek(0, 2)
        end_pos = int(stream.tell())
        stream.seek(0)
        self.file_name = file_name
        self.size = end_pos - beginning_pos
        header_format = "<H"
        header_size = struct.calcsize(header_format)
        data = stream.read(header_size)
        assert(len(data) == header_size)
        # FIXME start_addr, = struct.unpack(header_format, data)
        start_addr = ord(data[0]) | (ord(data[1]) << 8)
        self.start_addr = start_addr
        self.end_addr = self.start_addr + end_pos - 1
        self.stream = stream
        return(self)
    def load_header(self, file_name):
        file_name = os.path.basename(self.file_name) # TODO mangle back to C64 format (16 char filename).
        file_type = 0x82 # PRG
        #type_, file_name, start_addr, stop_addr, data = tape_loader.load_header(file_name)
        print("loading header PRG")
        #return(file_type, file_name, self.start_addr, self.end_addr)
        tape_pos = 0
        return(Entry(B_used = True, file_type = file_type, start_addr = self.start_addr, end_addr = self.end_addr, reserved_a = 0, tape_pos = tape_pos, reserved_b = 0, file_name = file_name))
    def load_data(self, file_name):
        print("loading data PRG")
        self.stream.seek(0)
        data = self.stream.read(self.end_addr - self.start_addr + 1)
        return(data)

if __name__ == "__main__":
    print(Loader().parse(open(sys.argv[1], "rb"), sys.argv[1]).start_addr, sys.argv[1])