Gestalt Selectors List

Apple System Software (P-R)

This chapter lists selector codes of which the meaning is documented and the first character of the selector code is in the P-R range.

pccd (System? [7.5.3?])
     gestaltCardServicesAttr &AD24 &AS26
     Returns information about the PC Card Manager (for managing i.e.
     PCMCIA cards).

     enum {
     #define gestaltCardServicesAttr 'pccd', /* Card Services attributes */
     gestaltCardServicesPresent   = 0,  /* PC Card 2.0 (68K) API present */
     gestaltPCCardFamilyPresent   = 1,  /* PC Card 3.x (PowerPC) API
     gestaltPCCardHasPowerControl = 2,  /* PCCardSetPowerLevel is
                                           supported */
     gestaltPCCardSupportsCardBus = 3,  /* CardBus is supported */

     /* constant names also listed, but believed to be obsolete */
     gestaltPCCardDispatchExists = 0,  /* if set, 68K support is present*/
     gestaltCardServicesSupportsRequestIO = 1};
                                       /* if set, CSRequest/ReleaseIO are

     This selector is not implemented with any current system software
     (7.5.1) on the PowerBook 500 Series computers.

     On a PowerBook 3400c/180 (with Mac OS 7.6) this selectors returns
     0x02, so bit 1 isn't set!? (Rene Ros)

     The two sources: PCMCIA API Manual (AD24) and the later PCCard.h header
     file on Dev.CD Apr 97 SDK1; PC Card 3.0 SDK (AS26) each list different
     constant names.

pclk (System [7.5.2]) INF?
     gestaltProcClkSpeed &AS22
     Returns the processor clock speed in Hz.

     #define gestaltProcClkSpeed 'pclk'

     Only on Power Macintosh, not on 68K computers?

     On a PowerBook 5300c with System 7.5.2 this selector returns 99.9999 Mhz,
     not 100. Small 'off-by-one' bug? (Rene Ros)

     Some 604-based Power Computing models return the wrong value. This may
     be because the ROM doesn't properly handle speeds above 200 MHz.
     (Jean-Pierre Curcio and others)

     A Power Macintosh 700 (PPC upgraded Quadra 700) using System 7.5.5
     returns 5 MHz. The 'bclk' value is also incorrect.

     A Centris 610 (System 7.1) returns 12672. (Daniel C. Kueng)

     A Daystar Genesis MP (4x 604e at 200 MHz each) returns a value of
     200 MHz. There is no sign of a selector which returns the number of

     Mac OS in the Blue Box under Rhapsody returns a value for 80 MHz.

     See also 'bclk' in this chapter.

pcxg (PC Exchange cp? [???])
     (File Exchange cp? [???] part of Mac OS 8.5?)
     gestaltPCXAttr &AS04/AS05
     Returns information about PC Exchange.

     enum {
     #define gestaltPCXAttr 'pcxg'   /* PC Exchange attributes */
     gestaltPCXHas8and16BitFAT = 0,  /* PC Exchange supports both 8 and
                                         16 bit FATs */
     gestaltPCXHasProDOS       = 1,  /* PC Exchange supports ProDOS */
     gestalt???                = 2,  /* with Mac OS 8.5 */
     gestalt???                = 3}; /* with Mac OS 8.5 */

     [This selector] isn't supported by all versions of PCExchange.
     [...] to find out if MS-DOS (or ProDOS) disks can be mounted you can
     use the File System Manager' GetFSInfo routine to determine what
     FSM-based file systems are installed. (Jim Luther)

pgsz (System [6.0.4])
     Returns the logical page size in bytes.

     #define gestaltLogicalPageSize 'pgsz' /* logical page size */

     The value is unknown on 68000 machines, Gestalt will return an error.

pop! (System [7.0])
     Returns information about the pop-up control definition.

     enum {
     #define gestaltPopupAttr 'pop!' /* pop-up CDEF attributes */
     gestaltPopupPresent = 0}; /* pop-up CDEF available */

powr (System [6.0.4])
     Returns information about the Power Manager, if present.

     enum {
     #define gestaltPowerMgrAttr 'powr' /* Power Mgr attributes */
     gestaltPMgrExists         = 0,  /* Power Mgr is present */
     gestaltPMgrCPUIdle        = 1,  /* CPU can idle */
     gestaltPMgrSCC            = 2,  /* can stop SCC clock */
     gestaltPMgrSound          = 3,  /* can shut off sound circuits */
     gestaltPMgrDispatchExists = 4,  /* dispatch routines are present */
     gestaltPMgrSupportsAVPowerStateAtSleepWake = 5}; /* &AS28 */

     Bit 4 seen set on Power Macs (starting with System 7.5.2?)
     This is because some desktop machines support the Power Manager for
     things like Energy Star compliance. (Two anonymous contributors)

     See also the 'pwrv' selector.

ppc  (System [7.0])
     Returns information about the capabilities of the PPC Toolbox as
     bit masks.

     enum {
     #define gestaltPPCToolboxAttr 'ppc '  /* PPC Toolbox attributes */
     gestaltPPCToolboxPresent            = 0x0000,  /* Requires PPCInit to
                                                      be called */
     gestaltPPCSupportsIncoming          = 0x0001,  /* Allow incoming net
                                                      requests */
     gestaltPPCSupportsOutGoing          = 0x0002,  /* Allow outgoing net
                                                      requests */
     gestaltPPCSupportsTCP_IP            = 0x0004,  /* supports TCP/IP */
     gestaltPPCSupportsIncomingAppleTalk = 0x0010,
     gestaltPPCSupportsIncomingTCP_IP    = 0x0020,
     gestaltPPCSupportsOutgoingAppleTalk = 0x0100,
     gestaltPPCSupportsOutgoingTCP_IP    = 0x0200
     gestaltPPCSupportsRealTime          = 0x1000}; /* Supports real-time
                                                      delivery */

     The first thing that is confusing is that, unlike other selectors
     returning attributes, the responses are not bit values, but bit masks.
     This means you simply AND the value with the response to test the bit.
     The second thing that is confusing is how to interpret
          gestaltPPCToolboxPresent = 0x0000.
     What this means is that if the PPC toolbox is present, but has not
     been initialised (by calling PPCInit), then gestaltPPCToolboxAttr
     returns 0x0000. In reality, PPCInit gets called by the Process
     Manager before any applications get launched, so no applications will
     actually see this response. (Dave Radcliffe)

proc (System [6.0.4])
     Returns a value that indicates the type of processor that is
     currently running (or emulated on Power Macs or under MAE).

     enum {
     #define gestaltProcessorType 'proc' /* processor type */
     gestalt68000 = 1,  /* MC68000 */
     gestalt68010 = 2,  /* MC68010 */
     gestalt68020 = 3,  /* MC68020 */
     gestalt68030 = 4,  /* MC68030 */
     gestalt68040 = 5}; /* MC68040 &S01 */

     The 68LC040 responds as type gestalt68040 but doesn't have a FPU. The
     user can swap out the 68LC040 and put in a real 68040 with FPU, so
     just checking the machineType or the processorType isn't enough.
     (Dave Radcliffe)

     Has there been a 68EC030 processor??? I assume it returns
     gestalt68030 but doesn't have an MMU. (Rene Ros)

     On a Power Macintosh the Gestalt function returns, although a 68LC040
     is emulated, the value gestalt68020. This return value is intended to
     highlight the two ways in which the 68LC040 Emulator more closely
     resembles a 68020 processor than a 68040 processor. &AD11

prpv (PowerTalk ext [1.0?], part of PowerTalk)
     Returns the SDP Prompt version as INTEGER. Returns zero if not
     present and available.

     #define gestaltSDPPromptVersion 'prpv' /* SDP Prompt version */

prty (System [6.0.4])
     Returns information about the parity-checking abilities of the

     enum {
     #define gestaltParityAttr 'prty' /* parity attributes */
     gestaltHasParityCapability = 0,
     gestaltParityEnabled       = 1};

pwky (System Update enbl [7.5 upd 2.0])
     Returns a pointer to a routine of type

     typedef pascal OSErr (*PwrKeyProc)(short item, short action);

     to enable/disable the PowerKey and/or Shutdown Alert.

     #define gestaltPowerKeyAddr? 'pwky'

     See TechNote 1017 (System 7.5 Update 2.0 / System 7.5.3) for more
     detailed information.

pwrv (System? [???])
     Returns the Power Manager version as ???

     #define gestaltPowerMgrVers 'pwrv'

     See also the 'powr' selector.

qd   (System [6.0.4])
     Returns the version of QuickDraw currently present as 2-byte value.

     enum {
     #define gestaltQuickdrawVersion 'qd  ' /* QuickDraw version */
     gestaltOriginalQD  = 0x0000,
     gestaltOriginalQD1 = 0x0001,
     gestalt8BitQD      = 0x0100,
     gestalt32BitQD     = 0x0200,
     gestalt32BitQD11   = 0x0210,
     gestalt32BitQD12   = 0x0220,
     gestalt32BitQD13   = 0x0230,
     gestalt32BitQD135? = 0x0235,  /* with System 7.1.2, ROM = 3072K? */
     gestalt32BitQD139? = 0x0239,  /* with System 7.5.1 on Power Macs
                                      &AT12 */
     gestalt32BitQD141? = 0x0241,  /* with System 7.5.2 */
     gestaltAllegroQD   = 0x0250,  /* Allegro QD OS 8.5, test versions? */
     gestalt32BitQD251? = 0x0251}; /* with Mac OS 8.5 final */

     Possible Combinations of ROM Versions and System Software Versions
     ROM Class             System Version         Gestalt Value
     Black-and-white class <  7.0                 gestaltOriginalQD
     (ROM < 256K)          >= 7.0                 gestaltOriginalQD and
                                             gestaltSystemVersion >= 0x0700

     Color QD class        <  7.0, no INITs       gestalt8BitQD
     (ROM = 256K)          6.0.3/6.0.4 and        gestalt32BitQD
                           32-Bit QD INIT 1.0
                           6.0.5-6.0.8 and        gestalt32BitQD12
                           32-Bit QD INIT 1.2
                           >= 7.0                 gestalt32BitQD13

     ci class              6.0.4                  gestalt32BitQD + 1
     (256K < ROM >= 3072K) 6.0.5-6.0.8            gestalt32BitQD12
                           >= 7.0                 gestalt32BitQD13
     SuperROM?             7.1.2-7.5?             gestalt32BitQD135?
     (ROM = 3072K)         7.5.1?                 gestalt32BitQD139?
                           7.5.2-8.0?             gestalt32BitQD141?
                           8.5-9.0                gestalt32BitQD251?
     (Original source: D e v e l o p 14, June 1993, p. 56;
      Info on System 7.1.2 and later based on observations and technical

     gestalt32BitQD11 is never returned and gestalt32BitQD + 1 means
     0x0201 as response value and doesn't has a constant defined.
     Another QuickDraw version is System 7 with a black-and-white class

     Color QuickDraw is only available on 68020 and greater CPUs, and
     this selector always returns gestaltOriginalQD on 68000 machines,
     even when running System 7. &AT11

qdrw (System [7.0])
     gestaltQuickDrawFeatures &S01
     Returns information about QuickDraw.

     enum {
     #define gestaltQuickDrawFeatures 'qdrw'     /* QuickDraw attributes */
     #define gestaltQuickDrawFeaturesAttr 'qdrw' /* used in some headers */
     gestaltHasColor          = 0,
     gestaltHasDeepGWorlds    = 1,
     gestaltHasDirectPixMaps  = 2,
     gestaltHasGrayishTextOr  = 3,
     gestaltSupportsMirroring = 4,  /* &AD12 */
     gestaltQDHasLongRowBytes = 5}; /* Long rowBytes supported in GWorlds*/

     There is a bug in the 'qdrw' selector that causes it to report that
     Color QuickDraw is always present, even on machines that don't support
     it. Apple has acknowledged this bug on AppleLink. (Chris Wysocki)
     Use SysEnvirons instead or test for the QD version ('qd  ') being
     8-bit QD or later.

qtim (QuickTime ext [1.0])
     Returns QuickTime version as NumVersion.

     #define gestaltQuickTime 'qtim' /* Movie Toolbox Availability */
     #define gestaltQuickTimeVersion 'qtim' /* Movie Toolbox version */

     The returned version is obtained from 'vers' resource ID# 1.

     Initially the name 'gestaltQuickTime' was used to test for the
     availability of QuickTime. The fact that is always returned a
     version number was not documented until later. Then the name
     'gestaltQuickTimeVersion' was defined. (Rene Ros)

     See 'Reports' chapter (QuickTime section) for more information.

qtrs (QuickTime PowerPlug ext [1.0?])
     gestaltQuickTimeFeatures &AS06
     Returns information about QuickTime.

     enum {
     #define gestaltQuickTimeFeatures 'qtrs' /* QT Features attributes */
     gestaltPPCQuickTimeLibPresent = 0}; /* PowerPC QT glue library is
                                             present */

     The gestaltPPCQuickTimeLibPresent bit indicates that the native
     QuickTime interface library is available and can be called by native
     PowerPC applications. (Dave Radcliffe)
     See for more info Technical Note
     'QT 01 - Inside Macintosh: QuickTime Addendum'.

qtsf (QuickTime ext [4.0])
     Returns information about QuickTime Streaming.

     #define gestaltQuickTimeStreamingFeatures 'qtsf'

qtst (QuickTime? ext [4.0?])
     Returns the version of QuickTime Streaming as BCD?

     #define gestaltQuickTimeStreamingVersion 'qtst'

qtvr (QuickTime VR ext [2.0])
     Returns information about QuickTime VR.

     enum {
     #define gestaltQTVRMgrAttr 'qtvr' /* QuickTime VR attributes */
     gestaltQTVRMgrPresent            = 0,  /* QTVR API is present */
     gestaltQTVRObjMoviesPresent      = 1,  /* QTVR runtime knows about
                                                object movies */
     gestaltQTVRCylinderPanosPresent  = 2}; /* QTVR runtime knows about
                                                cylindrical panoramic
                                                movies */

qtvv (QuickTime VR ext [2.0])
     Returns the version of QuickTime VR as NumVersion.

     #define gestaltQTVRMgrVers 'qtvv'

     Versions before QuickTime VR 2.0 returned the version as BCD?

ram  (System [6.0.4])
     Returns the number of bytes of the physical RAM currently installed.

     #define gestaltPhysicalRAMSize 'ram ' /* physical RAM */

     See also 'lram' and 'uram'.

rbv  (System [6.0.4, discontinued?]) &AS04
     Returns the address of the RBV.

     #define gestaltRBVAddr 'rbv ' /* RBV address */

reno (Apple Guide ext [1.2?], part of System 7.5 and later)
     Returns a pointer to the Apple Guide globals. (Anonymous)

     #define gestaltRenoAddr? 'reno'

     Indicates presence "of the Reno system extension." (Reno is the
     mechanism behind Apple Guide for managing the help data-bases?)

rmbg (System [7.5.2])
     Returns information to determine both the presence of the native
     Resource Manager and the ordering of resources returned by the
     GetIndType and Get1IndType. &AT13

     enum {
     #define gestaltResourceMgrBugFixAttrs 'rmbg'
     #define kResourceBugFixesAttrs gestaltResourceMgrBugFixAttrs
     gestaltRMForceSysHeapRolledIn        = 0,
     gestaltRMFakeAppleMenuItemsRolledIn  = 1,
     gestaltSanityCheckResourceFiles      = 2,  /* does sanity checking */
     kGestaltRMTypeIndexOrderingUndefined = 3,  /* ordering information
                                                   unavailable */
     gestaltRMTypeIndexOrderingReverse    = 8}; /* opposite order */

     See also the gestaltResourceMgrAttr ('rsrc') selector.

rom  (System [6.0.4]) INF
     Returns the size of the installed ROM in bytes.

     #define gestaltROMSize 'rom ' /* ROM size */

     On Power Macintosh computers this selector returns the ROM size minus
     the 68K emulator portion, which uses about 1 MB. &AD18

romv (System [6.0.4]) INF
     Returns the version number of the installed ROM.

     #define gestaltROMVersion 'romv' /* ROM version */

rsrc (System [should work since 7.0?])
     Returns information about the Resource Manager.

     enum {
     #define gestaltResourceMgrAttr 'rsrc' /* Resource Mgr attributes */
     gestaltPartialRsrcs       = 0,
     gestaltResourceOverrides? = 1}; /* resource map overrides? */

     Under System 7, bit 0 that tells if you have partial resource support
     doesn't work right. The selector is undefined under System 7.0 and
     7.0.1 even though the partial resource calls are available. This has
     been acknowledged by Apple. (Michael Hecht, Quinn)

     See also the gestaltResourceMgrBugFixAttrs ('rmbg') selector.

rtmr (System? [7.1.1?])
     Returns information about the Realtime Manager.

     enum {
     #define gestaltRealtimeMgrAttr 'rtmr' /* Realtime Mgr attributes */
     gestaltRealtimeMgrPresent = 0}; /* Realtime Mgr is present */

     If the RealTime Mgr is present this means the ARTA routines are
     available to determine if and how many DSPs are installed.
     (Zalman Stern)