]> gitweb.factorcode.org Git - factor.git/blob - basis/system-info/macosx/macosx.factor
endian: replaces io.binary and io.binary.fast.
[factor.git] / basis / system-info / macosx / macosx.factor
1 ! Copyright (C) 2008 Doug Coleman, John Benediktsson.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien.c-types alien.data alien.strings alien.syntax
4 arrays assocs byte-arrays core-foundation endian
5 io.encodings.utf8 kernel libc sequences specialized-arrays
6 splitting system system-info unix.users ;
7 SPECIALIZED-ARRAY: int
8 IN: system-info.macosx
9
10 <PRIVATE
11
12 TYPEDEF: SInt16 OSErr
13 TYPEDEF: UInt32 OSType
14 FUNCTION: OSErr Gestalt ( OSType selector, SInt32* response )
15
16 : gestalt ( selector -- response )
17     { SInt32 } [ Gestalt 0 assert= ] with-out-parameters ;
18
19 : system-version ( -- n ) "sysv" be> gestalt ;
20 : system-version-major ( -- n ) "sys1" be> gestalt ;
21 : system-version-minor ( -- n ) "sys2" be> gestalt ;
22 : system-version-bugfix ( -- n ) "sys3" be> gestalt ;
23
24 CONSTANT: system-code-names H{
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" }
36     { { 10 7 } "Lion" }
37     { { 10 6 } "Snow Leopard" }
38     { { 10 5 } "Leopard" }
39     { { 10 4 } "Tiger" }
40     { { 10 3 } "Panther" }
41     { { 10 2 } "Jaguar" }
42     { { 10 1 } "Puma" }
43     { { 10 0 } "Cheetah" }
44 }
45
46 : system-code-name ( -- str/f )
47     system-version-major system-version-minor 2array
48     system-code-names at ;
49
50 PRIVATE>
51
52 M: macosx os-version
53     system-version-major
54     system-version-minor
55     system-version-bugfix 3array ;
56
57 ! See /usr/include/sys/sysctl.h for constants
58
59 LIBRARY: libc
60 FUNCTION: int sysctl ( int* name, uint namelen, void* oldp, size_t* oldlenp, void* newp, size_t newlen )
61
62 : (sysctl-query) ( name namelen oldp oldlenp -- oldp )
63     over [ f 0 sysctl io-error ] dip ;
64
65 : sysctl-query ( seq n -- byte-array )
66     [ [ int >c-array ] [ length ] bi ] dip
67     [ <byte-array> ] [ uint <ref> ] bi (sysctl-query) ;
68
69 : sysctl-query-string ( seq -- n )
70     4096 sysctl-query utf8 alien>string ;
71
72 : sysctl-query-uint ( seq -- n )
73     4 sysctl-query uint deref ;
74
75 : sysctl-query-ulonglong ( seq -- n )
76     8 sysctl-query ulonglong deref ;
77
78 : machine ( -- str ) { 6 1 } sysctl-query-string ;
79 : model ( -- str ) { 6 2 } sysctl-query-string ;
80 M: macosx cpus { 6 3 } sysctl-query-uint ;
81 : byte-order ( -- n ) { 6 4 } sysctl-query-uint ;
82
83 ! Only an int, not large enough. Deprecated.
84 ! M: macosx physical-mem { 6 5 } sysctl-query-int ;
85 ! : user-mem ( -- n ) { 6 6 } sysctl-query-uint ;
86
87 : page-size ( -- n ) { 6 7 } sysctl-query-uint ;
88 : disknames ( -- n ) { 6 8 } 8 sysctl-query ;
89 : diskstats ( -- n ) { 6 9 } 8 sysctl-query ;
90 : epoch ( -- n ) { 6 10 } sysctl-query-uint ;
91 : floating-point ( -- n ) { 6 11 } sysctl-query-uint ;
92 : machine-arch ( -- n ) { 6 12 } sysctl-query-string ;
93 : vector-unit ( -- n ) { 6 13 } sysctl-query-uint ;
94 : bus-frequency ( -- n ) { 6 14 } sysctl-query-uint ;
95 M: macosx cpu-mhz { 6 15 } sysctl-query-uint ;
96 : cacheline-size ( -- n ) { 6 16 } sysctl-query-uint ;
97 : l1-icache-size ( -- n ) { 6 17 } sysctl-query-uint ;
98 : l1-dcache-size ( -- n ) { 6 18 } sysctl-query-uint ;
99 : l2-cache-settings ( -- n ) { 6 19 } sysctl-query-uint ;
100 : l2-cache-size ( -- n ) { 6 20 } sysctl-query-uint ;
101 : l3-cache-settings ( -- n ) { 6 21 } sysctl-query-uint ;
102 : l3-cache-size ( -- n ) { 6 22 } sysctl-query-uint ;
103 : tb-frequency ( -- n ) { 6 23 } sysctl-query-uint ;
104 M: macosx physical-mem { 6 24 } sysctl-query-ulonglong ;
105 : available-cpus ( -- n ) { 6 25 } sysctl-query-uint ;
106
107 M: macosx computer-name { 1 10 } sysctl-query-string "." split1 drop ;
108 M: macosx username real-user-name ;