]> gitweb.factorcode.org Git - factor.git/blob - basis/system-info/macosx/macosx.factor
use radix literals
[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
4 USING: alien alien.c-types alien.data alien.strings alien.syntax
5 arrays assocs byte-arrays combinators core-foundation io.binary
6 io.encodings.utf8 kernel math namespaces sequences system
7 system-info unix ;
8
9 IN: system-info.macosx
10
11 <PRIVATE
12
13 TYPEDEF: SInt16 OSErr
14 TYPEDEF: UInt32 OSType
15 FUNCTION: OSErr Gestalt ( OSType selector, SInt32* response ) ;
16
17 : gestalt ( selector -- response )
18     0 SInt32 <ref> [ Gestalt ] keep
19     swap [ throw ] unless-zero le> ;
20
21 : system-version ( -- n ) "sysv" be> gestalt ;
22 : system-version-major ( -- n ) "sys1" be> gestalt ;
23 : system-version-minor ( -- n ) "sys2" be> gestalt ;
24 : system-version-bugfix ( -- n ) "sys3" be> gestalt ;
25
26 CONSTANT: system-code-names H{
27     { 0x1070 "Lion" }
28     { 0x1060 "Snow Leopard" }
29     { 0x1050 "Leopard" }
30     { 0x1040 "Tiger" }
31     { 0x1030 "Panther" }
32     { 0x1020 "Jaguar" }
33     { 0x1010 "Puma" }
34     { 0x1000 "Cheetah" }
35 }
36
37 : system-code-name ( -- str/f )
38     system-version 0xFFF0 bitand system-code-names at ;
39
40 PRIVATE>
41
42 M: macosx os-version
43     system-version-major
44     system-version-minor
45     system-version-bugfix 3array ;
46
47 ! See /usr/include/sys/sysctl.h for constants
48
49 LIBRARY: libc
50 FUNCTION: int sysctl ( int* name, uint namelen, void* oldp, size_t* oldlenp, void* newp, size_t newlen ) ;
51
52 : make-int-array ( seq -- byte-array )
53     [ int <ref> ] map concat ;
54
55 : (sysctl-query) ( name namelen oldp oldlenp -- oldp )
56     over [ f 0 sysctl io-error ] dip ;
57
58 : sysctl-query ( seq n -- byte-array )
59     [ [ make-int-array ] [ length ] bi ] dip
60     [ <byte-array> ] [ uint <ref> ] bi (sysctl-query) ;
61
62 : sysctl-query-string ( seq -- n )
63     4096 sysctl-query utf8 alien>string ;
64
65 : sysctl-query-uint ( seq -- n )
66     4 sysctl-query uint deref ;
67
68 : sysctl-query-ulonglong ( seq -- n )
69     8 sysctl-query ulonglong deref ;
70
71 : machine ( -- str ) { 6 1 } sysctl-query-string ;
72 : model ( -- str ) { 6 2 } sysctl-query-string ;
73 M: macosx cpus ( -- n ) { 6 3 } sysctl-query-uint ;
74 : byte-order ( -- n ) { 6 4 } sysctl-query-uint ;
75 M: macosx physical-mem ( -- n ) { 6 5 } sysctl-query-uint ;
76 : user-mem ( -- n ) { 6 6 } sysctl-query-uint ;
77 : page-size ( -- n ) { 6 7 } sysctl-query-uint ;
78 : disknames ( -- n ) { 6 8 } 8 sysctl-query ;
79 : diskstats ( -- n ) { 6 9 } 8 sysctl-query ;
80 : epoch ( -- n ) { 6 10 } sysctl-query-uint ;
81 : floating-point ( -- n ) { 6 11 } sysctl-query-uint ;
82 : machine-arch ( -- n ) { 6 12 } sysctl-query-string ;
83 : vector-unit ( -- n ) { 6 13 } sysctl-query-uint ;
84 : bus-frequency ( -- n ) { 6 14 } sysctl-query-uint ;
85 M: macosx cpu-mhz ( -- n ) { 6 15 } sysctl-query-uint ;
86 : cacheline-size ( -- n ) { 6 16 } sysctl-query-uint ;
87 : l1-icache-size ( -- n ) { 6 17 } sysctl-query-uint ;
88 : l1-dcache-size ( -- n ) { 6 18 } sysctl-query-uint ;
89 : l2-cache-settings ( -- n ) { 6 19 } sysctl-query-uint ;
90 : l2-cache-size ( -- n ) { 6 20 } sysctl-query-uint ;
91 : l3-cache-settings ( -- n ) { 6 21 } sysctl-query-uint ;
92 : l3-cache-size ( -- n ) { 6 22 } sysctl-query-uint ;
93 : tb-frequency ( -- n ) { 6 23 } sysctl-query-uint ;
94 : mem-size ( -- n ) { 6 24 } sysctl-query-ulonglong ;
95 : available-cpus ( -- n ) { 6 25 } sysctl-query-uint ;