1 ! Copyright (C) 2008 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors alien alien.c-types alien.data alien.strings
4 byte-arrays classes.struct combinators kernel math namespaces
5 specialized-arrays system system-info.backend vocabs.loader
6 windows windows.advapi32 windows.errors windows.kernel32 words ;
7 SPECIALIZED-ARRAY: ushort
8 IN: system-info.windows
10 : system-info ( -- SYSTEM_INFO )
11 SYSTEM_INFO <struct> [ GetSystemInfo ] keep ;
14 system-info dwPageSize>> ;
16 ! 386, 486, 586, 2200 (IA64), 8664 (AMD_X8664)
17 : processor-type ( -- n )
18 system-info dwProcessorType>> ;
20 ! 0 = x86, 6 = Intel Itanium, 9 = x64 (AMD or Intel), 10 = WOW64, 0xffff = Unk
21 : processor-architecture ( -- n )
22 system-info dwOemId>> HEX: ffff0000 bitand ;
24 : os-version ( -- os-version )
25 OSVERSIONINFO <struct>
26 OSVERSIONINFO heap-size >>dwOSVersionInfoSize
27 dup GetVersionEx win32-error=0/f ;
29 : windows-major ( -- n )
30 os-version dwMajorVersion>> ;
32 : windows-minor ( -- n )
33 os-version dwMinorVersion>> ;
35 : windows-build# ( -- n )
36 os-version dwBuildNumber>> ;
38 : windows-platform-id ( -- n )
39 os-version dwPlatformId>> ;
41 : windows-service-pack ( -- string )
42 os-version szCSDVersion>> alien>native-string ;
44 : feature-present? ( n -- ? )
45 IsProcessorFeaturePresent zero? not ;
48 PF_XMMI64_INSTRUCTIONS_AVAILABLE feature-present? ;
51 PF_SSE3_INSTRUCTIONS_AVAILABLE feature-present? ;
53 : get-directory ( word -- str )
54 [ MAX_UNICODE_PATH [ <ushort-array> ] keep dupd ] dip
55 execute win32-error=0/f alien>native-string ; inline
57 : windows-directory ( -- str )
58 \ GetWindowsDirectory get-directory ;
60 : system-directory ( -- str )
61 \ GetSystemDirectory get-directory ;
63 : system-windows-directory ( -- str )
64 \ GetSystemWindowsDirectory get-directory ;
66 M: winnt cpus ( -- n )
67 system-info dwNumberOfProcessors>> ;
69 : memory-status ( -- MEMORYSTATUSEX )
70 MEMORYSTATUSEX <struct>
71 MEMORYSTATUSEX heap-size >>dwLength
72 dup GlobalMemoryStatusEx win32-error=0/f ;
74 M: winnt memory-load ( -- n )
75 memory-status dwMemoryLoad>> ;
77 M: winnt physical-mem ( -- n )
78 memory-status ullTotalPhys>> ;
80 M: winnt available-mem ( -- n )
81 memory-status ullAvailPhys>> ;
83 M: winnt total-page-file ( -- n )
84 memory-status ullTotalPageFile>> ;
86 M: winnt available-page-file ( -- n )
87 memory-status ullAvailPageFile>> ;
89 M: winnt total-virtual-mem ( -- n )
90 memory-status ullTotalVirtual>> ;
92 M: winnt available-virtual-mem ( -- n )
93 memory-status ullAvailVirtual>> ;
95 : computer-name ( -- string )
96 MAX_COMPUTERNAME_LENGTH 1 +
97 [ <byte-array> dup ] keep uint <ref>
98 GetComputerName win32-error=0/f alien>native-string ;
100 : username ( -- string )
102 [ <byte-array> dup ] keep uint <ref>
103 GetUserName win32-error=0/f alien>native-string ;