import parse_hex_edid
import sys

def getMonitorNames():
        if sys.platform == 'linux2':
                try:
                        import nv_control_targets
                        mons=nv_control_targets.monitorNamesFromNVCtrl(0)
                        if len(mons)>0 and len(mons[0])>0:
                                return mons
                except:
                        pass

                edid = parse_hex_edid.getEDIDFromXorgLog()
                if len(edid)< 128: return ()
                monitor = parse_hex_edid.parseHexEDID(edid)
                return (monitor,)

        if sys.platform == 'win32':
                try:
			import win32RegistryMonitorEDID
			edids=win32RegistryMonitorEDID.getMonitorHexEDIDFromRegistry()
			monsl = []
			for edid in edids:
                		if len(edid)>=128:
                			monitor = parse_hex_edid.parseHexEDID(edid)
					if len(monitor)>0:
						monsl.append(monitor)
			return tuple(monsl)
                except:
                        pass

        if sys.platform == 'darwin':
                try:
			import OSXRegistryMonitorEDID
			edids=OSXRegistryMonitorEDID.getMonitorHexEDIDFromIORegistry()
			"""
			import subprocess
			import popen2
			(child_stdout, child_stdin) = popen2.popen2(["ioreg", "-cAppleDisplay","-w0"])
			out=child_stdout.readlines()
			child_stdout.close()
			child_stdin.close()
			(child_stdout, child_stdin) = popen2.popen2(["ioreg", "-cAppleBacklightDisplay","-w0"])
			out2=child_stdout.readlines()
			child_stdout.close()
			child_stdin.close()
			out.extend(out2)
			edids = []
			for l in out:
				if l.find("EDID")>-1:
					if l.find("=")>-1:
						tmpl = l.split("=")[1].strip()
						if tmpl.find("<")>-1:
							tmpl = tmpl.split("<")[1].strip()
							if tmpl.find(">")>-1:
								tmpl = tmpl.split(">")[0].strip()
								edids.append(tmpl)
			"""
			edids = tuple(set(edids))
			monsl = []
			for edid in edids:
                		if len(edid)>=128:
                			monitor = parse_hex_edid.parseHexEDID(edid)
					if len(monitor)>0:
						monsl.append(monitor)
			return tuple(monsl)
			
                except:
			exc_type, exc_value,exc_tb = sys.exc_info()[:3]
			print exc_type
			print exc_value
			import traceback
			traceback.print_tb(exc_tb)
                        pass


        return ()

if __name__ == "__main__":
	if "-quit" in sys.argv:
		sys.exit()
        print getMonitorNames()
