]> gitweb.factorcode.org Git - factor.git/commitdiff
gestalt vocab for mac.
authorJohn Benediktsson <mrjbq7@gmail.com>
Fri, 19 Aug 2011 23:49:22 +0000 (16:49 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Fri, 19 Aug 2011 23:49:22 +0000 (16:49 -0700)
extra/gestalt/authors.txt [new file with mode: 0644]
extra/gestalt/gestalt.factor [new file with mode: 0644]
extra/gestalt/platforms.txt [new file with mode: 0644]

diff --git a/extra/gestalt/authors.txt b/extra/gestalt/authors.txt
new file mode 100644 (file)
index 0000000..e091bb8
--- /dev/null
@@ -0,0 +1 @@
+John Benediktsson
diff --git a/extra/gestalt/gestalt.factor b/extra/gestalt/gestalt.factor
new file mode 100644 (file)
index 0000000..d88ea9e
--- /dev/null
@@ -0,0 +1,53 @@
+! Copyright (C) 2011 John Benediktsson
+! See http://factorcode.org/license.txt for BSD license
+
+USING: alien.data alien.syntax combinators core-foundation
+formatting io.binary kernel math ;
+
+IN: gestalt
+
+<PRIVATE
+
+TYPEDEF: SInt16 OSErr
+
+TYPEDEF: UInt32 OSType
+
+FUNCTION: OSErr Gestalt ( OSType selector, SInt32* response ) ;
+
+PRIVATE>
+
+: gestalt ( selector -- response )
+    0 SInt32 <ref> [ Gestalt ] keep
+    swap [ throw ] unless-zero le> ;
+
+: system-version ( -- n )
+    "sysv" be> gestalt ;
+
+: system-version-major ( -- n )
+    "sys1" be> gestalt ;
+
+: system-version-minor ( -- n )
+    "sys2" be> gestalt ;
+
+: system-version-bugfix ( -- n )
+    "sys3" be> gestalt ;
+
+: system-version-string ( -- str )
+    system-version-major
+    system-version-minor
+    system-version-bugfix
+    "%s.%s.%s" sprintf ;
+
+: system-code-name ( -- str )
+    system-version HEX: FFF0 bitand {
+        { HEX: 1070 [ "Lion"         ] }
+        { HEX: 1060 [ "Snow Leopard" ] }
+        { HEX: 1050 [ "Leopard"      ] }
+        { HEX: 1040 [ "Tiger"        ] }
+        { HEX: 1030 [ "Panther"      ] }
+        { HEX: 1020 [ "Jaguar"       ] }
+        { HEX: 1010 [ "Puma"         ] }
+        { HEX: 1000 [ "Cheetah"      ] }
+        [ drop "Unknown" ]
+    } case ;
+
diff --git a/extra/gestalt/platforms.txt b/extra/gestalt/platforms.txt
new file mode 100644 (file)
index 0000000..6e806f4
--- /dev/null
@@ -0,0 +1 @@
+macosx