import os, re

def instGrub(root, winPart, dest):
	grub = linToGrub(root)
	
	menuFile = open('/usr/share/sosinstall/menu.lst.template')
	grubstr = menuFile.readlines()
	menuFile.close()
	
	rootRep = re.compile('\[ROOT\]')
	grubRep = re.compile('\[GRUBROOT\]')
	for i in range(0, len(grubstr)):
		grubstr[i] = rootRep.sub("/dev/" + root, grubstr[i])
		grubstr[i] = grubRep.sub("(" + grub + ")", grubstr[i])
		
	if winPart:
		grubWin = linToGrub(winPart)
		grubstr += ("\n\ntitle Windows\nroot (" + grubWin + ")\nmakeactive\nchainloader +1\n")
	
	os.popen("mkdir /mnt/root")
	os.popen("mount /dev/" + root + " /mnt/root")
	menuFile = open('/mnt/root/boot/grub/menu.lst','w')
	menuFile.writelines(grubstr)
	menuFile.close()
	
	if dest == 0: #MBR
		os.popen("grub-install --root-directory=/mnt/root /dev/" + root[:3])
	else: #Root
		os.popen("grub-install --root-directory=/mnt/root /dev/" + root)
		

def linToGrub(part):
		#Convert linux partition name to grub name
		grubdev = part[:2] + str(ord(part[2:3]) - 97)
		grubpart = int(part[3:]) - 1
		grubfull = grubdev + "," + str(grubpart)
		return grubfull

def findWin():	
	#Detect windows
	disklist = os.popen("cat /proc/diskstats | awk {'print $3'} | grep -E '[hs]d.[0-9]+'")
	partitions = disklist.readlines()
	winPartition = None
	for i in range(0, len(partitions)):
		partitions[i] = partitions[i].replace("\n", "")
		os.popen("mkdir /mnt/" + partitions[i])
		os.popen("mount /dev/" + partitions[i])
		dirs = os.listdir("/mnt/" + partitions[i])
		for dir in dirs:
			if dir == "WINDOWS" or dir == "Windows" or dir == "windows" or dir == "WINNT" or dir == "WIN32" or dir == "Win32" or dir == "win32":
				winPartition = i
				break
		os.popen("umount /mnt/" + partitions[i])
		if winPartition:
			return winPartition
	return None
		