addes osinfo_* modules
This commit is contained in:
parent
1536415146
commit
a2d78c562c
5 changed files with 437 additions and 9 deletions
42
lib/pure/osinfo_posix.nim
Normal file
42
lib/pure/osinfo_posix.nim
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Nimrod's Runtime Library
|
||||||
|
# (c) Copyright 2010 Andreas Rumpf, Dominik Picheta
|
||||||
|
#
|
||||||
|
# See the file "copying.txt", included in this
|
||||||
|
# distribution, for details about the copyright.
|
||||||
|
#
|
||||||
|
|
||||||
|
import posix, strutils, os
|
||||||
|
|
||||||
|
proc getSystemVersion*(): string =
|
||||||
|
## retrieves the system name ("Linux", "Mac OS X") & the system version.
|
||||||
|
## The implementation uses ``posix.uname``.
|
||||||
|
var info: TUtsname
|
||||||
|
if uname(info) < 0'i32: OSError()
|
||||||
|
case $info.sysname
|
||||||
|
of "Linux":
|
||||||
|
result = "Linux " & $info.release & " " & $info.machine
|
||||||
|
of "Darwin":
|
||||||
|
result = "Mac OS X "
|
||||||
|
if "10" in $info.release:
|
||||||
|
result.add("v10.6 Snow Leopard")
|
||||||
|
elif "0" in $info.release:
|
||||||
|
result.add("Server 1.0 Hera")
|
||||||
|
elif "1.3" in $info.release:
|
||||||
|
result.add("v10.0 Cheetah")
|
||||||
|
elif "1.4" in $info.release:
|
||||||
|
result.add("v10.1 Puma")
|
||||||
|
elif "6" in $info.release:
|
||||||
|
result.add("v10.2 Jaguar")
|
||||||
|
elif "7" in $info.release:
|
||||||
|
result.add("v10.3 Panther")
|
||||||
|
elif "8" in $info.release:
|
||||||
|
result.add("v10.4 Tiger")
|
||||||
|
elif "9" in $info.release:
|
||||||
|
result.add("v10.5 Leopard")
|
||||||
|
else:
|
||||||
|
result = $info.sysname & " " & $info.release
|
||||||
|
|
||||||
|
when isMainModule:
|
||||||
|
echo(getSystemVersion())
|
||||||
390
lib/pure/osinfo_win.nim
Normal file
390
lib/pure/osinfo_win.nim
Normal file
|
|
@ -0,0 +1,390 @@
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Nimrod's Runtime Library
|
||||||
|
# (c) Copyright 2010 Dominik Picheta
|
||||||
|
#
|
||||||
|
# See the file "copying.txt", included in this
|
||||||
|
# distribution, for details about the copyright.
|
||||||
|
#
|
||||||
|
|
||||||
|
import winlean
|
||||||
|
|
||||||
|
const
|
||||||
|
INVALID_HANDLE_VALUE = int(- 1) # GetStockObject
|
||||||
|
|
||||||
|
type
|
||||||
|
TMEMORYSTATUSEX {.final, pure.} = object
|
||||||
|
dwLength: int32
|
||||||
|
dwMemoryLoad: int32
|
||||||
|
ullTotalPhys: int64
|
||||||
|
ullAvailPhys: int64
|
||||||
|
ullTotalPageFile: int64
|
||||||
|
ullAvailPageFile: int64
|
||||||
|
ullTotalVirtual: int64
|
||||||
|
ullAvailVirtual: int64
|
||||||
|
ullAvailExtendedVirtual: int64
|
||||||
|
|
||||||
|
SYSTEM_INFO {.final, pure.} = object
|
||||||
|
wProcessorArchitecture*: int16
|
||||||
|
wReserved*: int16
|
||||||
|
dwPageSize*: int32
|
||||||
|
lpMinimumApplicationAddress*: pointer
|
||||||
|
lpMaximumApplicationAddress*: pointer
|
||||||
|
dwActiveProcessorMask*: int32
|
||||||
|
dwNumberOfProcessors*: int32
|
||||||
|
dwProcessorType*: int32
|
||||||
|
dwAllocationGranularity*: int32
|
||||||
|
wProcessorLevel*: int16
|
||||||
|
wProcessorRevision*: int16
|
||||||
|
|
||||||
|
LPSYSTEM_INFO = ptr SYSTEM_INFO
|
||||||
|
|
||||||
|
TMemoryInfo* = object
|
||||||
|
MemoryLoad*: int ## occupied memory, in percent
|
||||||
|
TotalPhysMem*: int64 ## Total Physical memory, in bytes
|
||||||
|
AvailablePhysMem*: int64 ## Available physical memory, in bytes
|
||||||
|
TotalPageFile*: int64 ## The current committed memory limit
|
||||||
|
## for the system or the current process, whichever is smaller, in bytes.
|
||||||
|
AvailablePageFile*: int64 ## The maximum amount of memory the current process can commit, in bytes.
|
||||||
|
TotalVirtualMem*: int64 ## Total virtual memory, in bytes
|
||||||
|
AvailableVirtualMem*: int64 ## Available virtual memory, in bytes
|
||||||
|
|
||||||
|
TOSVERSIONINFOEX {.final, pure.} = object
|
||||||
|
dwOSVersionInfoSize: int32
|
||||||
|
dwMajorVersion: int32
|
||||||
|
dwMinorVersion: int32
|
||||||
|
dwBuildNumber: int32
|
||||||
|
dwPlatformId: int32
|
||||||
|
szCSDVersion: array[0..127, char]
|
||||||
|
wServicePackMajor: int16
|
||||||
|
wServicePackMinor: int16
|
||||||
|
wSuiteMask: int16
|
||||||
|
wProductType: int8
|
||||||
|
wReserved: char
|
||||||
|
|
||||||
|
TVersionInfo* = object
|
||||||
|
majorVersion*: int
|
||||||
|
minorVersion*: int
|
||||||
|
buildNumber*: int
|
||||||
|
platformID*: int
|
||||||
|
SPVersion*: string ## Full Service pack version string
|
||||||
|
SPMajor*: int ## Major service pack version
|
||||||
|
SPMinor*: int ## Minor service pack version
|
||||||
|
SuiteMask*: int
|
||||||
|
ProductType*: int
|
||||||
|
|
||||||
|
TPartitionInfo* = tuple[FreeSpace, TotalSpace: biggestInt]
|
||||||
|
|
||||||
|
# All Windows editions...
|
||||||
|
const
|
||||||
|
# SuiteMask - VersionInfo.SuiteMask
|
||||||
|
VER_SUITE_BACKOFFICE* = 0x00000004
|
||||||
|
VER_SUITE_BLADE* = 0x00000400
|
||||||
|
VER_SUITE_COMPUTE_SERVER* = 0x00004000
|
||||||
|
VER_SUITE_DATACENTER* = 0x00000080
|
||||||
|
VER_SUITE_ENTERPRISE* = 0x00000002
|
||||||
|
VER_SUITE_EMBEDDEDNT* = 0x00000040
|
||||||
|
VER_SUITE_PERSONAL* = 0x00000200
|
||||||
|
VER_SUITE_SINGLEUSERTS* = 0x00000100
|
||||||
|
VER_SUITE_SMALLBUSINESS* = 0x00000001
|
||||||
|
VER_SUITE_SMALLBUSINESS_RESTRICTED* = 0x00000020
|
||||||
|
VER_SUITE_STORAGE_SERVER* = 0x00002000
|
||||||
|
VER_SUITE_TERMINAL* = 0x00000010
|
||||||
|
VER_SUITE_WH_SERVER* = 0x00008000
|
||||||
|
|
||||||
|
# ProductType - VersionInfo.ProductType
|
||||||
|
VER_NT_DOMAIN_CONTROLLER* = 0x0000002
|
||||||
|
VER_NT_SERVER* = 0x0000003
|
||||||
|
VER_NT_WORKSTATION* = 0x0000001
|
||||||
|
|
||||||
|
VER_PLATFORM_WIN32_NT* = 2
|
||||||
|
|
||||||
|
# Product Info - getProductInfo() - (Remove unused ones ?)
|
||||||
|
PRODUCT_BUSINESS* = 0x00000006
|
||||||
|
PRODUCT_BUSINESS_N* = 0x00000010
|
||||||
|
PRODUCT_CLUSTER_SERVER* = 0x00000012
|
||||||
|
PRODUCT_DATACENTER_SERVER* = 0x00000008
|
||||||
|
PRODUCT_DATACENTER_SERVER_CORE* = 0x0000000C
|
||||||
|
PRODUCT_DATACENTER_SERVER_CORE_V* = 0x00000027
|
||||||
|
PRODUCT_DATACENTER_SERVER_V* = 0x00000025
|
||||||
|
PRODUCT_ENTERPRISE* = 0x00000004
|
||||||
|
PRODUCT_ENTERPRISE_E* = 0x00000046
|
||||||
|
PRODUCT_ENTERPRISE_N* = 0x0000001B
|
||||||
|
PRODUCT_ENTERPRISE_SERVER* = 0x0000000A
|
||||||
|
PRODUCT_ENTERPRISE_SERVER_CORE* = 0x0000000E
|
||||||
|
PRODUCT_ENTERPRISE_SERVER_CORE_V* = 0x00000029
|
||||||
|
PRODUCT_ENTERPRISE_SERVER_IA64* = 0x0000000F
|
||||||
|
PRODUCT_ENTERPRISE_SERVER_V* = 0x00000026
|
||||||
|
PRODUCT_HOME_BASIC* = 0x00000002
|
||||||
|
PRODUCT_HOME_BASIC_E* = 0x00000043
|
||||||
|
PRODUCT_HOME_BASIC_N* = 0x00000005
|
||||||
|
PRODUCT_HOME_PREMIUM* = 0x00000003
|
||||||
|
PRODUCT_HOME_PREMIUM_E* = 0x00000044
|
||||||
|
PRODUCT_HOME_PREMIUM_N* = 0x0000001A
|
||||||
|
PRODUCT_HYPERV* = 0x0000002A
|
||||||
|
PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT* = 0x0000001E
|
||||||
|
PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING* = 0x00000020
|
||||||
|
PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY* = 0x0000001F
|
||||||
|
PRODUCT_PROFESSIONAL* = 0x00000030
|
||||||
|
PRODUCT_PROFESSIONAL_E* = 0x00000045
|
||||||
|
PRODUCT_PROFESSIONAL_N* = 0x00000031
|
||||||
|
PRODUCT_SERVER_FOR_SMALLBUSINESS* = 0x00000018
|
||||||
|
PRODUCT_SERVER_FOR_SMALLBUSINESS_V* = 0x00000023
|
||||||
|
PRODUCT_SERVER_FOUNDATION* = 0x00000021
|
||||||
|
PRODUCT_SMALLBUSINESS_SERVER* = 0x00000009
|
||||||
|
PRODUCT_STANDARD_SERVER* = 0x00000007
|
||||||
|
PRODUCT_STANDARD_SERVER_CORE * = 0x0000000D
|
||||||
|
PRODUCT_STANDARD_SERVER_CORE_V* = 0x00000028
|
||||||
|
PRODUCT_STANDARD_SERVER_V* = 0x00000024
|
||||||
|
PRODUCT_STARTER* = 0x0000000B
|
||||||
|
PRODUCT_STARTER_E* = 0x00000042
|
||||||
|
PRODUCT_STARTER_N* = 0x0000002F
|
||||||
|
PRODUCT_STORAGE_ENTERPRISE_SERVER* = 0x00000017
|
||||||
|
PRODUCT_STORAGE_EXPRESS_SERVER* = 0x00000014
|
||||||
|
PRODUCT_STORAGE_STANDARD_SERVER* = 0x00000015
|
||||||
|
PRODUCT_STORAGE_WORKGROUP_SERVER* = 0x00000016
|
||||||
|
PRODUCT_UNDEFINED* = 0x00000000
|
||||||
|
PRODUCT_ULTIMATE* = 0x00000001
|
||||||
|
PRODUCT_ULTIMATE_E* = 0x00000047
|
||||||
|
PRODUCT_ULTIMATE_N* = 0x0000001C
|
||||||
|
PRODUCT_WEB_SERVER* = 0x00000011
|
||||||
|
PRODUCT_WEB_SERVER_CORE* = 0x0000001D
|
||||||
|
|
||||||
|
PROCESSOR_ARCHITECTURE_AMD64* = 9 ## x64 (AMD or Intel)
|
||||||
|
PROCESSOR_ARCHITECTURE_IA64* = 6 ## Intel Itanium Processor Family (IPF)
|
||||||
|
PROCESSOR_ARCHITECTURE_INTEL* = 0 ## x86
|
||||||
|
PROCESSOR_ARCHITECTURE_UNKNOWN* = 0xffff ## Unknown architecture.
|
||||||
|
|
||||||
|
# GetSystemMetrics
|
||||||
|
SM_SERVERR2 = 89
|
||||||
|
|
||||||
|
proc GlobalMemoryStatusEx(lpBuffer: var TMEMORYSTATUSEX){.stdcall, dynlib: "kernel32",
|
||||||
|
importc: "GlobalMemoryStatusEx".}
|
||||||
|
|
||||||
|
proc getMemoryInfo*(): TMemoryInfo =
|
||||||
|
## Retrieves memory info
|
||||||
|
var statex: TMEMORYSTATUSEX
|
||||||
|
statex.dwLength = sizeof(statex)
|
||||||
|
|
||||||
|
GlobalMemoryStatusEx(statex)
|
||||||
|
result.MemoryLoad = statex.dwMemoryLoad
|
||||||
|
result.TotalPhysMem = statex.ullTotalPhys
|
||||||
|
result.AvailablePhysMem = statex.ullAvailPhys
|
||||||
|
result.TotalPageFile = statex.ullTotalPageFile
|
||||||
|
result.AvailablePageFile = statex.ullAvailPageFile
|
||||||
|
result.TotalVirtualMem = statex.ullTotalVirtual
|
||||||
|
result.AvailableVirtualMem = statex.ullAvailExtendedVirtual
|
||||||
|
|
||||||
|
proc GetVersionEx(lpVersionInformation: var TOSVERSIONINFOEX): WINBOOL{.stdcall,
|
||||||
|
dynlib: "kernel32", importc: "GetVersionExA".}
|
||||||
|
|
||||||
|
proc GetProcAddress(hModule: int, lpProcName: cstring): pointer{.stdcall,
|
||||||
|
dynlib: "kernel32", importc: "GetProcAddress".}
|
||||||
|
|
||||||
|
proc GetModuleHandleA(lpModuleName: cstring): int{.stdcall,
|
||||||
|
dynlib: "kernel32", importc.}
|
||||||
|
|
||||||
|
proc getVersionInfo*(): TVersionInfo =
|
||||||
|
## Retrieves operating system info
|
||||||
|
var osvi: TOSVERSIONINFOEX
|
||||||
|
osvi.dwOSVersionInfoSize = sizeof(osvi)
|
||||||
|
discard GetVersionEx(osvi)
|
||||||
|
result.majorVersion = osvi.dwMajorVersion
|
||||||
|
result.minorVersion = osvi.dwMinorVersion
|
||||||
|
result.buildNumber = osvi.dwBuildNumber
|
||||||
|
result.platformID = osvi.dwPlatformId
|
||||||
|
result.SPVersion = $osvi.szCSDVersion
|
||||||
|
result.SPMajor = osvi.wServicePackMajor
|
||||||
|
result.SPMinor = osvi.wServicePackMinor
|
||||||
|
result.SuiteMask = osvi.wSuiteMask
|
||||||
|
result.ProductType = osvi.wProductType
|
||||||
|
|
||||||
|
proc getProductInfo*(majorVersion, minorVersion, SPMajorVersion, SPMinorVersion: int): int =
|
||||||
|
## Retrieves Windows' ProductInfo, this function only works in Vista and 7
|
||||||
|
|
||||||
|
var pGPI = cast[proc (dwOSMajorVersion, dwOSMinorVersion,
|
||||||
|
dwSpMajorVersion, dwSpMinorVersion: int32, outValue: Pint32)](GetProcAddress(
|
||||||
|
GetModuleHandleA("kernel32.dll"), "GetProductInfo"))
|
||||||
|
|
||||||
|
if pGPI != nil:
|
||||||
|
var dwType: int32
|
||||||
|
pGPI(int32(majorVersion), int32(minorVersion), int32(SPMajorVersion), int32(SPMinorVersion), addr(dwType))
|
||||||
|
result = int(dwType)
|
||||||
|
else:
|
||||||
|
return PRODUCT_UNDEFINED
|
||||||
|
|
||||||
|
proc GetSystemInfo(lpSystemInfo: ptr SYSTEM_INFO){.stdcall, dynlib: "kernel32",
|
||||||
|
importc: "GetSystemInfo".}
|
||||||
|
|
||||||
|
proc getSystemInfo*(): TSYSTEM_INFO =
|
||||||
|
## Returns the SystemInfo
|
||||||
|
|
||||||
|
# Use GetNativeSystemInfo if it's available
|
||||||
|
var pGNSI = cast[proc (lpSystemInfo: LPSYSTEM_INFO)](GetProcAddress(
|
||||||
|
GetModuleHandleA("kernel32.dll"), "GetNativeSystemInfo"))
|
||||||
|
|
||||||
|
var systemi: TSYSTEM_INFO
|
||||||
|
if pGNSI != nil:
|
||||||
|
pGNSI(addr(systemi))
|
||||||
|
else:
|
||||||
|
GetSystemInfo(addr(systemi))
|
||||||
|
|
||||||
|
return systemi
|
||||||
|
|
||||||
|
proc GetSystemMetrics(nIndex: int32): int32{.stdcall, dynlib: "user32",
|
||||||
|
importc: "GetSystemMetrics".}
|
||||||
|
|
||||||
|
proc `$`*(osvi: TVersionInfo): string =
|
||||||
|
## Turns a VersionInfo object, into a string
|
||||||
|
|
||||||
|
if osvi.platformID == VER_PLATFORM_WIN32_NT and osvi.majorVersion > 4:
|
||||||
|
result = "Microsoft "
|
||||||
|
|
||||||
|
var si = getSystemInfo()
|
||||||
|
# Test for the specific product
|
||||||
|
if osvi.majorVersion == 6:
|
||||||
|
if osvi.minorVersion == 0:
|
||||||
|
if osvi.ProductType == VER_NT_WORKSTATION:
|
||||||
|
result.add("Windows Vista ")
|
||||||
|
else: result.add("Windows Server 2008 ")
|
||||||
|
elif osvi.minorVersion == 1:
|
||||||
|
if osvi.ProductType == VER_NT_WORKSTATION:
|
||||||
|
result.add("Windows 7 ")
|
||||||
|
else: result.add("Windows Server 2008 R2 ")
|
||||||
|
|
||||||
|
var dwType = getProductInfo(osvi.majorVersion, osvi.minorVersion, 0, 0)
|
||||||
|
case dwType
|
||||||
|
of PRODUCT_ULTIMATE:
|
||||||
|
result.add("Ultimate Edition")
|
||||||
|
of PRODUCT_PROFESSIONAL:
|
||||||
|
result.add("Professional")
|
||||||
|
of PRODUCT_HOME_PREMIUM:
|
||||||
|
result.add("Home Premium Edition")
|
||||||
|
of PRODUCT_HOME_BASIC:
|
||||||
|
result.add("Home Basic Edition")
|
||||||
|
of PRODUCT_ENTERPRISE:
|
||||||
|
result.add("Enterprise Edition")
|
||||||
|
of PRODUCT_BUSINESS:
|
||||||
|
result.add("Business Edition")
|
||||||
|
of PRODUCT_STARTER:
|
||||||
|
result.add("Starter Edition")
|
||||||
|
of PRODUCT_CLUSTER_SERVER:
|
||||||
|
result.add("Cluster Server Edition")
|
||||||
|
of PRODUCT_DATACENTER_SERVER:
|
||||||
|
result.add("Datacenter Edition")
|
||||||
|
of PRODUCT_DATACENTER_SERVER_CORE:
|
||||||
|
result.add("Datacenter Edition (core installation)")
|
||||||
|
of PRODUCT_ENTERPRISE_SERVER:
|
||||||
|
result.add("Enterprise Edition")
|
||||||
|
of PRODUCT_ENTERPRISE_SERVER_CORE:
|
||||||
|
result.add("Enterprise Edition (core installation)")
|
||||||
|
of PRODUCT_ENTERPRISE_SERVER_IA64:
|
||||||
|
result.add("Enterprise Edition for Itanium-based Systems")
|
||||||
|
of PRODUCT_SMALLBUSINESS_SERVER:
|
||||||
|
result.add("Small Business Server")
|
||||||
|
of PRODUCT_STANDARD_SERVER:
|
||||||
|
result.add("Standard Edition")
|
||||||
|
of PRODUCT_STANDARD_SERVER_CORE:
|
||||||
|
result.add("Standard Edition (core installation)")
|
||||||
|
of PRODUCT_WEB_SERVER:
|
||||||
|
result.add("Web Server Edition")
|
||||||
|
else:
|
||||||
|
nil
|
||||||
|
# End of Windows 6.*
|
||||||
|
|
||||||
|
if osvi.majorVersion == 5 and osvi.minorVersion == 2:
|
||||||
|
if GetSystemMetrics(SM_SERVERR2) != 0:
|
||||||
|
result.add("Windows Server 2003 R2, ")
|
||||||
|
elif (osvi.SuiteMask and VER_SUITE_PERSONAL) != 0: # Not sure if this will work
|
||||||
|
result.add("Windows Storage Server 2003")
|
||||||
|
elif (osvi.SuiteMask and VER_SUITE_WH_SERVER) != 0:
|
||||||
|
result.add("Windows Home Server")
|
||||||
|
elif osvi.ProductType == VER_NT_WORKSTATION and
|
||||||
|
si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64:
|
||||||
|
result.add("Windows XP Professional x64 Edition")
|
||||||
|
else:
|
||||||
|
result.add("Windows Server 2003, ")
|
||||||
|
|
||||||
|
# Test for the specific product
|
||||||
|
if osvi.ProductType != VER_NT_WORKSTATION:
|
||||||
|
if ze(si.wProcessorArchitecture) == PROCESSOR_ARCHITECTURE_IA64:
|
||||||
|
if (osvi.SuiteMask and VER_SUITE_DATACENTER) != 0:
|
||||||
|
result.add("Datacenter Edition for Itanium-based Systems")
|
||||||
|
elif (osvi.SuiteMask and VER_SUITE_ENTERPRISE) != 0:
|
||||||
|
result.add("Enterprise Edition for Itanium-based Systems")
|
||||||
|
elif ze(si.wProcessorArchitecture) == PROCESSOR_ARCHITECTURE_AMD64:
|
||||||
|
if (osvi.SuiteMask and VER_SUITE_DATACENTER) != 0:
|
||||||
|
result.add("Datacenter x64 Edition")
|
||||||
|
elif (osvi.SuiteMask and VER_SUITE_ENTERPRISE) != 0:
|
||||||
|
result.add("Enterprise x64 Edition")
|
||||||
|
else:
|
||||||
|
result.add("Standard x64 Edition")
|
||||||
|
else:
|
||||||
|
if (osvi.SuiteMask and VER_SUITE_COMPUTE_SERVER) != 0:
|
||||||
|
result.add("Compute Cluster Edition")
|
||||||
|
elif (osvi.SuiteMask and VER_SUITE_DATACENTER) != 0:
|
||||||
|
result.add("Datacenter Edition")
|
||||||
|
elif (osvi.SuiteMask and VER_SUITE_ENTERPRISE) != 0:
|
||||||
|
result.add("Enterprise Edition")
|
||||||
|
elif (osvi.SuiteMask and VER_SUITE_BLADE) != 0:
|
||||||
|
result.add("Web Edition")
|
||||||
|
else:
|
||||||
|
result.add("Standard Edition")
|
||||||
|
# End of 5.2
|
||||||
|
|
||||||
|
if osvi.majorVersion == 5 and osvi.minorVersion == 1:
|
||||||
|
result.add("Windows XP ")
|
||||||
|
if (osvi.SuiteMask and VER_SUITE_PERSONAL) != 0:
|
||||||
|
result.add("Home Edition")
|
||||||
|
else:
|
||||||
|
result.add("Professional")
|
||||||
|
# End of 5.1
|
||||||
|
|
||||||
|
if osvi.majorVersion == 5 and osvi.minorVersion == 0:
|
||||||
|
result.add("Windows 2000 ")
|
||||||
|
if osvi.ProductType == VER_NT_WORKSTATION:
|
||||||
|
result.add("Professional")
|
||||||
|
else:
|
||||||
|
if (osvi.SuiteMask and VER_SUITE_DATACENTER) != 0:
|
||||||
|
result.add("Datacenter Server")
|
||||||
|
elif (osvi.SuiteMask and VER_SUITE_ENTERPRISE) != 0:
|
||||||
|
result.add("Advanced Server")
|
||||||
|
else:
|
||||||
|
result.add("Server")
|
||||||
|
# End of 5.0
|
||||||
|
|
||||||
|
# Include service pack (if any) and build number.
|
||||||
|
if len(osvi.SPVersion) > 0:
|
||||||
|
result.add(" ")
|
||||||
|
result.add(osvi.SPVersion)
|
||||||
|
|
||||||
|
result.add(" (build " & $osvi.buildNumber & ")")
|
||||||
|
|
||||||
|
if osvi.majorVersion >= 6:
|
||||||
|
if ze(si.wProcessorArchitecture) == PROCESSOR_ARCHITECTURE_AMD64:
|
||||||
|
result.add(", 64-bit")
|
||||||
|
elif ze(si.wProcessorArchitecture) == PROCESSOR_ARCHITECTURE_INTEL:
|
||||||
|
result.add(", 32-bit")
|
||||||
|
|
||||||
|
else:
|
||||||
|
# Windows 98 etc...
|
||||||
|
result = "Unknown version of windows[Kernel version <= 4]"
|
||||||
|
|
||||||
|
|
||||||
|
proc GetDiskFreeSpaceEx(lpDirectoryName: cstring, lpFreeBytesAvailableToCaller,
|
||||||
|
lpTotalNumberOfBytes, lpTotalNumberOfFreeBytes: var filetime): WINBOOL{.
|
||||||
|
stdcall, dynlib: "kernel32", importc: "GetDiskFreeSpaceExA".}
|
||||||
|
|
||||||
|
proc getPartitionInfo*(partition: string): TPartitionInfo =
|
||||||
|
## Retrieves partition info, for example ``partition`` may be ``"C:\"``
|
||||||
|
var FreeBytes, TotalBytes, TotalFreeBytes: filetime
|
||||||
|
var res = GetDiskFreeSpaceEx(r"C:\", FreeBytes, TotalBytes, TotalFreeBytes)
|
||||||
|
return (rdFileTime(FreeBytes), rdFileTime(TotalBytes))
|
||||||
|
|
||||||
|
when isMainModule:
|
||||||
|
var r = getMemoryInfo()
|
||||||
|
echo("Memory load: ", r.MemoryLoad, "%")
|
||||||
|
var osvi = getVersionInfo()
|
||||||
|
|
||||||
|
echo($osvi)
|
||||||
|
echo(getPartitionInfo(r"C:\")[0])
|
||||||
|
|
@ -444,8 +444,7 @@ proc addf(s: var string, formatstr: string, a: openarray[string]) =
|
||||||
case formatstr[i+1] # again we use the fact that strings
|
case formatstr[i+1] # again we use the fact that strings
|
||||||
# are zero-terminated here
|
# are zero-terminated here
|
||||||
of '#':
|
of '#':
|
||||||
if not isNil(a[num]):
|
add s, a[num]
|
||||||
add s, a[num]
|
|
||||||
inc i, 2
|
inc i, 2
|
||||||
inc num
|
inc num
|
||||||
of '$':
|
of '$':
|
||||||
|
|
|
||||||
|
|
@ -14,15 +14,15 @@ tinout.nim;7;for a 'var' type a variable needs to be passed
|
||||||
tinvalidnewseq.nim;10;type mismatch: got (array[0..6, string], int)
|
tinvalidnewseq.nim;10;type mismatch: got (array[0..6, string], int)
|
||||||
tinvwhen.nim;6;invalid indentation
|
tinvwhen.nim;6;invalid indentation
|
||||||
titer4.nim;2;iterator within for loop context expected
|
titer4.nim;2;iterator within for loop context expected
|
||||||
tnamspc.nim;5;Error: undeclared identifier: 'global'
|
tnamspc.nim;5;undeclared identifier: 'global'
|
||||||
tnoop.nim;6;expression 'a()' cannot be called
|
tnoop.nim;6;expression 'a()' cannot be called
|
||||||
tnot.nim;9;type mismatch
|
tnot.nim;9;type mismatch
|
||||||
topaque.nim;11;undeclared field: 'buffer'
|
topaque.nim;11;undeclared field: 'buffer'
|
||||||
topena1.nim;4;invalid type
|
topena1.nim;4;invalid type
|
||||||
toverl.nim;6;attempt to redefine 'TNone'
|
toverl.nim;6;attempt to redefine 'TNone'
|
||||||
trawstr.nim;5;closing " expected
|
trawstr.nim;5;closing " expected
|
||||||
trecinca.nim;3;recursive dependency: 'tests/trecincb.nim'
|
trecinca.nim;3;recursive dependency: 'tests/reject/trecincb.nim'
|
||||||
trecincb.nim;4;recursive dependency: 'tests/trecincb.nim'
|
trecincb.nim;4;recursive dependency: 'tests/reject/trecincb.nim'
|
||||||
treciter.nim;4;recursive dependency: 'myrec'
|
treciter.nim;4;recursive dependency: 'myrec'
|
||||||
trectype.nim;20;internal error: cannot generate C type for: PA
|
trectype.nim;20;internal error: cannot generate C type for: PA
|
||||||
trefs.nim;15;type mismatch
|
trefs.nim;15;type mismatch
|
||||||
|
|
|
||||||
|
Can't render this file because it contains an unexpected character in line 23 and column 23.
|
|
|
@ -29,9 +29,7 @@ type
|
||||||
data: string
|
data: string
|
||||||
|
|
||||||
proc myExec(cmd: string): string =
|
proc myExec(cmd: string): string =
|
||||||
#echo("Executing: " & cmd)
|
|
||||||
result = osproc.execProcess(cmd)
|
result = osproc.execProcess(cmd)
|
||||||
#echo("Received: " & result)
|
|
||||||
|
|
||||||
var
|
var
|
||||||
pegLineError = peg"{[^(]*} '(' {\d+} ', ' \d+ ') Error:' \s* {.*}"
|
pegLineError = peg"{[^(]*} '(' {\d+} ', ' \d+ ') Error:' \s* {.*}"
|
||||||
|
|
@ -155,7 +153,6 @@ proc compile(r: var TResults, pattern, options: string) =
|
||||||
var t = extractFilename(test)
|
var t = extractFilename(test)
|
||||||
inc(r.total)
|
inc(r.total)
|
||||||
var given = callCompiler(test, options)
|
var given = callCompiler(test, options)
|
||||||
echo given.msg, "##", given.err
|
|
||||||
r.addResult(t, "", given.msg, not given.err)
|
r.addResult(t, "", given.msg, not given.err)
|
||||||
if not given.err: inc(r.passed)
|
if not given.err: inc(r.passed)
|
||||||
|
|
||||||
|
|
@ -187,7 +184,7 @@ for i in 1.. paramCount():
|
||||||
add(options, " ")
|
add(options, " ")
|
||||||
add(options, paramStr(i))
|
add(options, paramStr(i))
|
||||||
|
|
||||||
#reject(rejectRes, "tests/reject", options)
|
reject(rejectRes, "tests/reject", options)
|
||||||
#compile(compileRes, "tests/accept/compile/t*.nim", options)
|
#compile(compileRes, "tests/accept/compile/t*.nim", options)
|
||||||
compile(compileRes, "examples/*.nim", options)
|
compile(compileRes, "examples/*.nim", options)
|
||||||
#compile(compileRes, "examples/gtk/*.nim", options)
|
#compile(compileRes, "examples/gtk/*.nim", options)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue