1 ! Copyright (C) 2008 Doug Coleman, John Benediktsson.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: alien.c-types alien.data alien.strings alien.syntax arrays
4 assocs byte-arrays core-foundation endian io.encodings.utf8 kernel
5 libc sequences splitting system system-info unix.sysctl unix.users ;
11 TYPEDEF: UInt32 OSType
12 FUNCTION: OSErr Gestalt ( OSType selector, SInt32* response )
14 : gestalt ( selector -- response )
15 { SInt32 } [ Gestalt 0 assert= ] with-out-parameters ;
17 : system-version ( -- n ) "sysv" be> gestalt ;
18 : system-version-major ( -- n ) "sys1" be> gestalt ;
19 : system-version-minor ( -- n ) "sys2" be> gestalt ;
20 : system-version-bugfix ( -- n ) "sys3" be> gestalt ;
22 CONSTANT: system-code-names H{
24 { { 13 0 } "Ventura" }
25 { { 12 0 } "Monterey" }
26 { { 11 0 } "Big Sur" }
27 { { 10 16 } "Big Sur" }
28 { { 10 15 } "Catalina" }
29 { { 10 14 } "Mojave" }
30 { { 10 13 } "High Sierra" }
31 { { 10 12 } "Sierra" }
32 { { 10 11 } "El Capitan" }
33 { { 10 10 } "Yosemite" }
34 { { 10 9 } "Mavericks" }
35 { { 10 8 } "Mountain Lion" }
37 { { 10 6 } "Snow Leopard" }
38 { { 10 5 } "Leopard" }
40 { { 10 3 } "Panther" }
43 { { 10 0 } "Cheetah" }
46 : system-code-name ( -- str/f )
48 dup 10 = [ system-version-minor ] [ 0 ] if 2array
49 system-code-names at ;
56 system-version-bugfix 3array ;
58 ! See /usr/include/sys/sysctl.h for constants
60 : machine ( -- str ) { 6 1 } sysctl-query-string ;
61 : model ( -- str ) { 6 2 } sysctl-query-string ;
62 M: macosx cpus { 6 3 } sysctl-query-uint ;
63 : byte-order ( -- n ) { 6 4 } sysctl-query-uint ;
65 ! Only an int, not large enough. Deprecated.
66 ! M: macosx physical-mem { 6 5 } sysctl-query-int ;
67 ! : user-mem ( -- n ) { 6 6 } sysctl-query-uint ;
69 : page-size ( -- n ) { 6 7 } sysctl-query-uint ;
70 : disknames ( -- n ) { 6 8 } 8 sysctl-query ;
71 : diskstats ( -- n ) { 6 9 } 8 sysctl-query ;
72 : epoch ( -- n ) { 6 10 } sysctl-query-uint ;
73 : floating-point ( -- n ) { 6 11 } sysctl-query-uint ;
74 : machine-arch ( -- n ) { 6 12 } sysctl-query-string ;
75 : vector-unit ( -- n ) { 6 13 } sysctl-query-uint ;
76 : bus-frequency ( -- n ) { 6 14 } sysctl-query-uint ;
77 M: macosx cpu-mhz { 6 15 } sysctl-query-uint ;
78 : cacheline-size ( -- n ) { 6 16 } sysctl-query-uint ;
79 : l1-icache-size ( -- n ) { 6 17 } sysctl-query-uint ;
80 : l1-dcache-size ( -- n ) { 6 18 } sysctl-query-uint ;
81 : l2-cache-settings ( -- n ) { 6 19 } sysctl-query-uint ;
82 : l2-cache-size ( -- n ) { 6 20 } sysctl-query-uint ;
83 : l3-cache-settings ( -- n ) { 6 21 } sysctl-query-uint ;
84 : l3-cache-size ( -- n ) { 6 22 } sysctl-query-uint ;
85 : tb-frequency ( -- n ) { 6 23 } sysctl-query-uint ;
86 M: macosx physical-mem { 6 24 } sysctl-query-ulonglong ;
87 : available-cpus ( -- n ) { 6 25 } sysctl-query-uint ;
89 M: macosx computer-name { 1 10 } sysctl-query-string "." split1 drop ;
90 M: macosx username real-user-name ;