#!/usr/bin/python
import os
import sys

import shutil
import parted
import subprocess
import optparse
import tempfile


def main():
    def usage():
        sys.exit(1)

    def cleanup():
        pass


    def mount(src, dst, options=None):
        if os.path.exists(src):
            if not os.path.exists(dst):
                os.makedir(dst)
            if options is None:
                args = ("/bin/mount", src, dst)
            else:
                args = ("/bin/mount", options, src, dst)
            rc = subprocess.call(args)
            return rc
        return


    def umount(src):
        if os.path.exists(src):
                args = ("/bin/umount", src)
                rc = subprocess.call(args)
                return rc
        return


    def copy(src, dst):
        if os.path.exists(src):
            shutil.copy(src, dst)


    def move(src, dst):
        if os.path.exists(src):
            shutil.mopve(src, dst)


    def losetup(src, dst, offset=None):
        if os.path.exists(src):
            if os.path.exists(dst):
                if offset is None:
                    args = ("/sbin/losetup", src, dst)
                else:
                    args = ("/sbin/losetup", "-o", offset, src, dst)
                rc = subprocess.call(args)
        return rc

    def null():
        fd = open("/dev/null", "w")
        return fd

    def lo():
        args = ("/sbin/losetup", "--find")
        rc = subprocess.call(args, stdout=open(null())).communicate()[0].rstrip()
        return rc


    def mkimage(bs, count):
        tmp = tempfile.mkstemp()
        image = tmp[1]
        args = ("/bin/dd", "if=/dev/zero",
                 "of=%s"%image, "bs=%s"%bs, "count=%s"%count)
        rc = subprocess.call(args)
        return image


    def size(ent):
        if os.path.exists(ent):
            return os.stat(ent).st_size

    def bs(size):
        return size / 2048


    def setup(x86, x64, multi):

        sz = size(x86) + size(x64)
        count = bs(sz)
        blsz = str(2048)

        multi = mkimage(blsz, count)    
        losetup(multi, lo())         
 


    def parse(x86, x64, multi):
        for file in x86, x64, multi:
            if os.path.exists(file):
                pass
            else:
                usage()
        setup(x86, x64, multi)





    try: 
        parse(sys.argv[1], sys.argv[2], sys.argv[3])
    except:
        usage()



        
        


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