Wednesday, October 17, 2018

#1 2006-02-25 06:32:04 pm

Adam Bell
Administrator
From:: Nova Scotia, Canada
Registered: 2005-10-04
Posts: 4664

System Attributes

Some time ago, Nigel Garvey posted a script for finding AppleScript version and System version that was derived from earlier work by Richard Morton.

Using that trick, I produced a few more as one-liners:

Applescript:

tell (system attribute "ascv") to set vAS to (it mod 4096 div 256 & "." & it mod 256 div 16 & "." & it mod 16) as string
tell (system attribute "sysv") to set vSys to ("1" & it mod 4096 div 256 & "." & it mod 256 div 16 & "." & it mod 16)
tell (system attribute "cpkr") to set vColorPk to (it mod 4096 div 256 & "." & it mod 256 div 16 & "." & it mod 16) as string
tell ((system attribute "qtvv") mod 65536) to set vQT to (it mod 4096 div 256 & "." & it mod 256 div 16 & "." & it mod 16) as string
tell ((system attribute "qtim") mod 65536) to set vQT to (it mod 4096 div 256 & "." & it mod 256 div 16 & "." & it mod 16) as string -- same as "qtvv"

For some other versions, just plain vanilla will do, and this straight-forward approach seems to work for any of the applications that have versions displayed in the Script Editor "Open Dictionary" window from the File Menu. Asking for the version will open the application to find out, of course.

Applescript:

-- Examples:
version of application "Script Editor"
version of application "System Events"
version of application "Foxfire" -- doesn't work. It does not declare its version to the system.

Interested in what I could find out beyond those two, I found two files buried deep in the system with a lot of such information in them: Gestalt.h, and Gestalt.r, both found in /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/Headers.

Here are some of the interesting ones (there are many more, but not all return something to a script):

Applescript:

system attribute "ata " -- uses ata drive
system attribute "cbon" -- carbon version
system attribute "cpus" -- number of CPUs running.
system attribute "fbcv" -- 4 if OS X, 3 if OS9 (find type)
system attribute "help" -- 0 if present
system attribute "kbd " -- keyboard type --> 34 = USB Pro Keyboard w/ F16 key Domestic (ANSI) Keyboard */
system attribute "qdrw" -- 47 this is the quickdraw attribute, not sure what it returns
system attribute "bclm" -- bus speed MHz.
system attribute "otra" -- 82 could you find out if user was connected?
system attribute "mclk" -- CPU clock in MHz (there's another that returns how fast it's actually running when not busy).
system attribute "ramm" -- RAM in MB
-- The next one is a combination of three to get the system version in a one-line vanilla applescript:
((system attribute "sys1") & "." & (system attribute "sys2") & "." & (system attribute "sys3")) as string
system attribute "cput" -- processor type; dual-core G5 = 324 or Ox144 -- see partial list below
system attribute "bclk" -- bus clock

There are a few shell script probes as well:

Applescript:

-- The following produces exactly the same result as the system attribute with a shell script approach
do shell script "sw_vers -productVersion" -- no decoding required
set Darwin to (do shell script "uname -r") -- the version of Darwin
set ProcType to do shell script "machine" -- the flavor of processor

This is what it says about processor versions:

CPU68000                 0                    /*  Various 68k CPUs...     */
CPU68010                 1
CPU68020                 2
CPU68030                 3
CPU68040                 4
CPU601                     0x0101                /*  IBM 601 */
CPU603                     0x0103
CPU604                     0x0104
CPU603e                     0x0106
CPU603ev                 0x0107
CPU750                     0x0108                /*  Also 740 - "G3"  */
CPU604e                     0x0109
CPU604ev                 0x010A                /*  Mach 5, 250Mhz and up  */
CPUG4                     0x010C                /*  Max  */
CPUG47450                 0x0110                /*  Vger , Altivec  */

CPUApollo                 0x0111                /*  Apollo , Altivec, G4 7455  */
CPUG47447                 0x0112
CPU750FX                 0x0120                /*  Sahara,G3 like thing  */
CPU970                     0x0139                /*  G5  */
CPU970FX                 0x013C                /*  another G5  */

                                            /*  x86 CPUs all start with 'i' in the high nybble  */
CPU486                     'i486'
CPUPentium                 'i586'
CPUPentiumPro             'i5pr'
CPUPentiumII             'i5ii'
CPUX86                     'ixxx'
CPUPentium4              'i5iv'


iMac running OS X 10.13.1

Offline

 

#2 2006-02-27 01:52:07 am

kai
Member
From:: Brighton, UK
Registered: 2005-05-28
Posts: 912

Re: System Attributes

Adam Bell wrote:

Applescript:

tell (system attribute "ascv") to set vAS to (it mod 4096 div 256 & "." & it mod 256 div 16 & "." & it mod 16) as string


Nice work, Adam. Perhaps I could add this alternative to the vanilla collection (especially since it's about 30+ faster). wink

Applescript:

AppleScript's version


kai

Offline

 

#3 2006-02-27 06:13:07 am

Nigel Garvey
Moderator
From:: Warwickshire, England
Registered: 2002-11-20
Posts: 4690

Re: System Attributes

I lot of interesting stuff there, Adam. Thanks. It's certainly faster than quizzing System Profiler!

Two points with regard to your one-liners. Firstly, I think the "qtvv" and "qtim" adjustments should be 'div 65536' rather than 'mod 65636'. That's what gives the correct results on my machines, anyway.

Applescript:

tell ((system attribute "qtim") div 65536) to set vQT to (it mod 4096 div 256 & "." & it mod 256 div 16 & "." & it mod 16) as string -- same as "qtvv"

Secondly, since your string-building technique here starts with an integer, you're actually performing a series of list coercions and concatenations, with the final list being coerced to string. This of course raises questions of efficiency and of text item delimiters. It would be safer to do such one-liners like this:

Applescript:

tell ((system attribute "qtvv") div 65536) to set vQT to (it mod 4096 div 256 as string) & "." & it mod 256 div 16 & "." & it mod 16

A few of the 'system attribute' parameters you mention appear to be fairly recent additions. The following just produce empty strings on my Jaguar machine: "ata ", "cpus", "bclm", "mclk", "ramm", "sys1", "sys2", and "sys3". They all produce numbers on my Tiger machine, except for "ata ".

The shell scripts all work in Jaguar, except that the specifying parameter has no effect with "sw_vers". You have to parse what you want from the three-paragraph result:

"ProductName:    Mac OS X
ProductVersion:    10.2.8
BuildVersion:    6R73"

Last edited by Nigel Garvey (2006-02-27 06:29:05 am)


NG

Offline

 

#4 2006-03-22 09:56:28 am

orso
Member
From:: germany
Registered: 2006-03-21
Posts: 28

Re: System Attributes

I read your postings and I found them most inspiring. Got hold of all documentation I could find about Gestalt management and read it. Now I'm wondering, where are the values for things related to monitor and display? VRAM, and so on? Or network? Is this something that doesn't belong to Gestalt?
Since system profiler is displaying them, where does he gets them? Or he's getting this kind of information in a totally different way? Can AS get them thru a do shell (wouldn't like to itemize "system profile")?

I sort of remember that MacOs X.2.xx was not displaying them completely, like VRAM wasn't there, but Graphic card vendor was, if I remember correctly, but I couldn't be sure.
I put together 216 flags, collecting them from various sources, mostly the Gestalt Manager Reference from developer. Couldn't find anything about PCI/AGP. At least not so that I could recognize. Some things are indeed exotic ("otva"??) and I also can easily have misunderstood some of them.

I put up a filemaker with all flags and loaded a script that cycles all flags with an applescript for storing the result in a field. Just to be able to see what happens on my computer at a glance. Most of them are not set (134 of them aren't set under my today's configuration, for what this is worth as information…). This didn't surprise me. But why not things like Machine Type "mach", or file system "fs  "?
And on it goes with questions…
Fascinating, it is.:rolleyes:

Orso

Model: PoweBook g4, 1500
AppleScript: 1.9.3
Browser: Safari 312.6
Operating System: Mac OS X (10.3.9)

Offline

 

#5 2006-03-24 11:23:50 am

Adam Bell
Administrator
From:: Nova Scotia, Canada
Registered: 2005-10-04
Posts: 4664

Re: System Attributes

Hi, orso;

For screens, see this link: http://bbs.applescript.net/viewtopic.php?id=15425


iMac running OS X 10.13.1

Offline

 

#6 2018-10-07 08:12:54 am

Mr. Science
Member
From:: Satellite Beach, Florida
Registered: 2015-08-13
Posts: 20
Website

Re: System Attributes

I know this series of posts goes way back, but it came up in my search to understand why running "return computer" in Script Editor on my MacPro/Yosemite would change itself automatically to "return system attribute". Which would result in {"TMPDIR", "SHELL", "HOME", "Apple_PubSub_Socket_Render", "SSH_AUTH_SOCK", "LOGNAME", "PATH", "XPC_SERVICE_NAME", "COMMAND_MODE", "USER", "SECURITYSESSIONID", "XPC_FLAGS", "__CF_USER_TEXT_ENCODING"}

  So I thought I'd share this script I made which incorporates many of the previous MacScripters'  suggestions with these other Environmental Variables into a tidy printout for reference.

  If if you know of other Env Vars to add or test (certainly there are many), simply add them to either the 'myEnvironmentalVariables' list or the 'shellScriptProbes' list to include them in the result. I didn't add an error handler so be careful what you add to the 'shellScriptProbes'!

Thanks all!

Applescript:



set rprt to "MY ENVIRONMENTAL VARIABLES:" & return
-----------------Environmental Variables-----------------
set EnvironmentalVariables to {"ata ", "cbon", "cpus", "fbcv", "help", "kbd ", "qdrw", "bclm", "otra", "mclk", "ramm", "sys1", "sys2", "sys3", "cput", "bclk", "qtim", "qtvv"}
set EnvironmentalVariables to EnvironmentalVariables & (system attribute)
repeat with envVarName in EnvironmentalVariables
   set saEVN to system attribute envVarName
   set rprt to rprt & "" & envVarName & ":    " & saEVN & return & return
end repeat
-----------------shell Script 'Probes'---------------------
set shellScriptProbes to {"sw_vers -productVersion", "uname -r", "machine", "whoami"}
repeat with ssProbs in shellScriptProbes
   set val to (do shell script ssProbs)
   set rprt to rprt & ssProbs & ":    " & val & return & return
end repeat
--------report---------
return rprt

Model: Mac Pro, Yosemite
AppleScript: 2.7
Browser: Safari 601.2.7
Operating System: macOS 10.14


"Fail and fail until you fail to fail!"   ~   http://www.theMrScienceShow.com

Offline

 

#7 2018-10-07 09:20:30 am

Nigel Garvey
Moderator
From:: Warwickshire, England
Registered: 2002-11-20
Posts: 4690

Re: System Attributes

Mr. Science wrote:

… but it came up in my search to understand why running "return computer" in Script Editor on my MacPro/Yosemite would change itself automatically to "return system attribute".


system attribute has been a StandardAdditions command since the introduction of OS X. But before that, it was a Finder command called computer. The token, «event fndrgstl», shows its Finder origins. The token was kept so that earlier scripts would continue to work. The term computer must still be hanging around in the StandardAdditions dictionary!  smile

Last edited by Nigel Garvey (2018-10-07 09:23:37 am)


NG

Offline

 

Board footer

Powered by FluxBB

RSS (new topics) RSS (active topics)