Detect DX version (and OpenGL version) installed?

BlitzMax Forums/BlitzMax Programming/Detect DX version (and OpenGL version) installed?

Here's a STRICT version made into a function:

' -----------------------------------------------------------------------------
' ccGetDirectXVersion: Returns the DirectX version as a string
' By Qube and MichaelB 
' -----------------------------------------------------------------------------
Function ccGetDirectXVersion$()
	Local strVersion:String = ""

	?win32
	Local hbank:TBank = CreateBank(4)
	RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\Microsoft\DirectX",BankBuf(hbank))
	Local hKey = PeekInt(hbank,0)
	
	Local value_bank:TBank = CreateBank(100)
	Local value_bank_size:TBank = CreateBank(4)
	Local type_bank:TBank = CreateBank(4)
	
	PokeInt(type_bank,0,0)
	PokeInt(value_bank_size,0,100)
	   
	RegQueryValueEx(hKey,"Version",0,BankBuf(type_bank),BankBuf(value_bank),BankBuf(value_bank_size))
	
	Local dx_version:String = ""
	For Local char=0 To PeekInt(value_bank_size,0)-1
		If PeekByte(value_bank,char)=0 Then Exit
		dx_version = dx_version + Chr(PeekByte(value_bank,char))
	Next
	
	RegCloseKey(hKey)
	
	Select dx_version
	    Case "4.02.0095"
	        strVersion = "1.0"
	    Case "4.03.00.1096"
	        strVersion = "2.0"
	    Case "4.04.0068"
	        strVersion = "3.0"
	    Case "4.04.0069"
	        strVersion = "3.0"
	    Case "4.05.00.0155"
	        strVersion = "5.0"
	    Case "4.05.01.1721"
	        strVersion = "5.0"
	    Case "4.05.01.1998"
	        strVersion = "5.0"
	    Case "4.06.02.0436"
	        strVersion = "6.0"
	    Case "4.07.00.0700"
	        strVersion = "7.0"
	    Case "4.07.00.0716"
	        strVersion = "7.0a"
	    Case "4.08.00.0400"
	        strVersion = "8.0"
	    Case "4.08.01.0881"
	        strVersion = "8.1"
	    Case "4.08.01.0810"
	        strVersion = "8.1"
	    Case "4.09.0000.0900"
	        strVersion = "9.0"
	    Case "4.09.00.0900"
	        strVersion = "9.0"
	    Case "4.09.0000.0901"
	        strVersion = "9.0a"
	    Case "4.09.00.0901"
	        strVersion = "9.0a"
	    Case "4.09.0000.0902"
	        strVersion = "9.0b"
	    Case "4.09.00.0902"
	        strVersion = "9.0b"
	    Case "4.09.00.0904"
	        strVersion = "9.0c"
	    Case "4.09.0000.0904"
	        strVersion = "9.0c"
	End Select
	?
	
	Return strVersion
End Function


And a handy checking function:

' -----------------------------------------------------------------------------
' ccDirectXVersionIsValid: Returns 1 if DirectX Version is >=7 (which is required for BlitzMax)
' -----------------------------------------------------------------------------
Function ccDirectXVersionIsValid%()
	Local v$ = ccGetDirectXVersion()
	Print v$
	Local valid=1
	'There is no 4.0!
	If v$ = "1.0" Or v$="2.0" Or v$="3.0" Or v$="5.0" Or v$="6.0" Then
		valid=0
	EndIf
	Return valid
End Function