1 ! Copyright (C) 2008 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien alien.c-types classes.struct accessors kernel
4 math namespaces windows windows.kernel32 windows.advapi32 words
5 combinators vocabs.loader system-info.backend system
6 alien.strings windows.errors specialized-arrays.ushort ;
7 IN: system-info.windows
9 : system-info ( -- SYSTEM_INFO )
10 SYSTEM_INFO <struct> [ GetSystemInfo ] keep ;
13 system-info dwPageSize>> ;
15 ! 386, 486, 586, 2200 (IA64), 8664 (AMD_X8664)
16 : processor-type ( -- n )
17 system-info dwProcessorType>> ;
19 ! 0 = x86, 6 = Intel Itanium, 9 = x64 (AMD or Intel), 10 = WOW64, 0xffff = Unk
20 : processor-architecture ( -- n )
21 system-info dwOemId>> HEX: ffff0000 bitand ;
23 : os-version ( -- os-version )
24 OSVERSIONINFO <struct>
25 OSVERSIONINFO heap-size >>dwOSVersionInfoSize
26 dup GetVersionEx win32-error=0/f ;
28 : windows-major ( -- n )
29 os-version dwMajorVersion>> ;
31 : windows-minor ( -- n )
32 os-version dwMinorVersion>> ;
34 : windows-build# ( -- n )
35 os-version dwBuildNumber>> ;
37 : windows-platform-id ( -- n )
38 os-version dwPlatformId>> ;
40 : windows-service-pack ( -- string )
41 os-version szCSDVersion>> alien>native-string ;
43 : feature-present? ( n -- ? )
44 IsProcessorFeaturePresent zero? not ;
47 PF_XMMI64_INSTRUCTIONS_AVAILABLE feature-present? ;
50 PF_SSE3_INSTRUCTIONS_AVAILABLE feature-present? ;
52 : get-directory ( word -- str )
53 [ MAX_UNICODE_PATH [ <ushort-array> ] keep dupd ] dip
54 execute win32-error=0/f alien>native-string ; inline
56 : windows-directory ( -- str )
57 \ GetWindowsDirectory get-directory ;
59 : system-directory ( -- str )
60 \ GetSystemDirectory get-directory ;
62 : system-windows-directory ( -- str )
63 \ GetSystemWindowsDirectory get-directory ;
67 { [ os wince? ] [ "system-info.windows.ce" ] }
68 { [ os winnt? ] [ "system-info.windows.nt" ] }