Merge branch 'master' of git://factorcode.org/git/factor
[factor/jcg.git] / extra / system-info / macosx / macosx.factor
blobb51fd52995ae448b066274b5b3565273e424571a
1 ! Copyright (C) 2008 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: alien alien.c-types alien.strings alien.syntax
4 byte-arrays kernel namespaces sequences unix
5 system-info.backend system io.encodings.utf8 ;
6 IN: system-info.macosx
8 ! See /usr/include/sys/sysctl.h for constants
10 LIBRARY: libc
11 FUNCTION: int sysctl ( int* name, uint namelen, void* oldp, size_t* oldlenp, void* newp, size_t newlen ) ;
13 : make-int-array ( seq -- byte-array )
14     [ <int> ] map concat ;
16 : (sysctl-query) ( name namelen oldp oldlenp -- oldp )
17     over [ f 0 sysctl io-error ] dip ;
19 : sysctl-query ( seq n -- byte-array )
20     [ [ make-int-array ] [ length ] bi ] dip
21     [ <byte-array> ] [ <uint> ] bi (sysctl-query) ;
23 : sysctl-query-string ( seq -- n )
24     4096 sysctl-query utf8 alien>string ;
26 : sysctl-query-uint ( seq -- n )
27     4 sysctl-query *uint ;
29 : sysctl-query-ulonglong ( seq -- n )
30     8 sysctl-query *ulonglong ;
32 : machine ( -- str ) { 6 1 } sysctl-query-string ;
33 : model ( -- str ) { 6 2 } sysctl-query-string ;
34 M: macosx cpus ( -- n ) { 6 3 } sysctl-query-uint ;
35 : byte-order ( -- n ) { 6 4 } sysctl-query-uint ;
36 M: macosx physical-mem ( -- n ) { 6 5 } sysctl-query-uint ;
37 : user-mem ( -- n ) { 6 6 } sysctl-query-uint ;
38 : page-size ( -- n ) { 6 7 } sysctl-query-uint ;
39 : disknames ( -- n ) { 6 8 } 8 sysctl-query ;
40 : diskstats ( -- n ) { 6 9 } 8 sysctl-query ;
41 : epoch ( -- n ) { 6 10 } sysctl-query-uint ;
42 : floating-point ( -- n ) { 6 11 } sysctl-query-uint ;
43 : machine-arch ( -- n ) { 6 12 } sysctl-query-string ;
44 : vector-unit ( -- n ) { 6 13 } sysctl-query-uint ;
45 : bus-frequency ( -- n ) { 6 14 } sysctl-query-uint ;
46 M: macosx cpu-mhz ( -- n ) { 6 15 } sysctl-query-uint ;
47 : cacheline-size ( -- n ) { 6 16 } sysctl-query-uint ;
48 : l1-icache-size ( -- n ) { 6 17 } sysctl-query-uint ;
49 : l1-dcache-size ( -- n ) { 6 18 } sysctl-query-uint ;
50 : l2-cache-settings ( -- n ) { 6 19 } sysctl-query-uint ;
51 : l2-cache-size ( -- n ) { 6 20 } sysctl-query-uint ;
52 : l3-cache-settings ( -- n ) { 6 21 } sysctl-query-uint ;
53 : l3-cache-size ( -- n ) { 6 22 } sysctl-query-uint ;
54 : tb-frequency ( -- n ) { 6 23 } sysctl-query-uint ;
55 : mem-size ( -- n ) { 6 24 } sysctl-query-ulonglong ;
56 : available-cpus ( -- n ) { 6 25 } sysctl-query-uint ;