CLEAR *Example 1 set talk off lcPlatform = "(Unknown)" #IF ! 'VISUAL' $ UPPER(VERSION()) lcOS = OS() ? os() #ELSE lcOS = OS(1) ? OS(1) #ENDIF DO CASE CASE "5.01" $ lcOS lcPlatform = "WINXP" CASE "5.0" $ lcOS lcPlatform = "WIN2000" CASE "NT" $ lcOS lcPlatform = "WINNT" CASE "4.0" $ lcOS OR "3.9" $ lcOS lcPlatform = "WIN95" CASE "4.1" $ lcOS lcPlatform = "WIN98" CASE "4.9" $ lcOS lcPlatform = "WINME" CASE "3." $ lcOS lcPlatform = "WIN31" ENDCASE ? lcPlatform *Example 2 #DEFINE VER_PLATFORM_WIN32S 0 #DEFINE VER_PLATFORM_WIN32_WINDOWS 1 #DEFINE VER_PLATFORM_WIN32_NT 2 DECLARE RtlMoveMemory IN WIN32API ; INTEGER @DestNumeric, ; STRING @pVoidSource, ; INTEGER nLength declare short GetVersionEx in win32API ; string @ lpVersionInfo lpVersionInfo = chr(128+5*4)+replicate(chr(0),128+5*4-1) ? GetVersionEx(@lpVersionInfo) ? 'Major version :', DWord2Str(lpVersionInfo, 5) ? 'Minor version :', DWord2Str(lpVersionInfo, 9) ? 'Build number :', DWord2Str(lpVersionInfo, 13) ? 'Platform id :', DWord2Str(lpVersionInfo, 17) function DWord2Str lparameters tcStr, tnOffsett local lnValue lnValue=0 RtlMoveMemory(@lnValue, substr(tcStr,tnOffsett,4), 4) return lnValueOf course, you could always just do something like this too: