home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Mac Game Programming Gurus
/
TricksOfTheMacGameProgrammingGurus.iso
/
Information
/
CSMP Digest
/
volume 2
/
csmp-v2-007.txt
< prev
next >
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
NeXTSTEP
RISC OS/Acorn
UTF-8
Wrap
Text File
|
1994-12-08
|
53.5 KB
|
1,474 lines
|
[
TEXT/R*ch
]
C.S.M.P. Digest Sat, 30 Jan 93 Volume 2 : Issue 7
Today's Topics:
Problem with patch to HFSDispatch
How do I find a hole in the DeskTop?!
Volume icons?
Suppl. Gestalt Selectors List 1.2
The Comp.Sys.Mac.Programmer Digest is moderated by Michael A. Kelly.
The digest is a collection of article threads from the internet newsgroup
comp.sys.mac.programmer. It is designed for people who read c.s.m.p. semi-
regularly and want an archive of the discussions. If you don't know what a
newsgroup is, you probably don't have access to it. Ask your systems
administrator(s) for details. If you don't have access to news, there is
no way that I know of for you to post articles to the group.
Each issue of the digest contains one or more sets of articles (called
threads), with each set corresponding to a 'discussion' of a particular
subject. The articles are not edited; all articles included in this digest
are in their original posted form (as received by our news server at
cs.uoregon.edu). Article threads are not added to the digest until the last
article added to the thread is at least one month old (this is to ensure that
the thread is dead before adding it to the digest). Article threads that
consist of only one message are generally not included in the digest.
The entire digest is available for anonymous ftp from ftp.cs.uoregon.edu
[128.223.8.8] in the directory /pub/mac/csmp-digest. Be sure to read the
file /pub/mac/csmp-digest/README before downloading any files. The most
recent issues are available from sumex-aim.stanford.edu [36.44.0.6] in the
directory /info-mac/digest/csmp. If you don't have ftp capability, the sumex
archive has a mail server; send a message with the text '$MACarch help' (no
quotes) to LISTSERV@ricevm1.rice.edu for more information.
The digest is also available via email. Just send a note saying that you
want to be on the digest mailing list to mkelly@cs.uoregon.edu, and you will
automatically receive each new issue as it is created. Sorry, back issues
are not available through the mailing list.
Send administrative mail to mkelly@cs.uoregon.edu.
-------------------------------------------------------
From: rmah@panix.com (Robert Mah)
Subject: Problem with patch to HFSDispatch
Date: 22 Dec 92 18:27:10 GMT
Organization: PANIX Public Access Unix, NYC
In an extension that works fine on most systems, but some people seem to
be getting freezes when they shut down/restart their machine. I'm not
sure, but I think it might be related to my patching HFSDispatch.
I'm using register a1 to hold the adress of the real trap -- is there
something wrong with this? Anyone care to comment?
Some code...
/*
* We need to trap whenever the user moves a directory (selector 5).
*/
pascal void FSDispatchPatch()
{
asm{
movem.l a4, -(sp) ; save registers
lea main, a4 ; setup globals
cmp.w #5, d0 ; if not CatMove
bne.s @1
move.w #1, gNeedsUpdate ; set the gNeedsUpdate flag
@1 move.l realHFSDispatchTrap, a1 ; grab the addr of the real thing
movem.l (sp)+, a4 ; restore registers
jmp (a1) ; jump to real HFSDispatch
}
}
Happy Holdiays,
Rob
- --
[--------------------------------------------------]
[ Robert S. Mah | "Every day an adventure, ]
[ rmah@panix.com | every moment a challenge." ]
[--------------------------------------------------]
+++++++++++++++++++++++++++
From: leonardr@netcom.com (Leonard Rosenthol)
Date: 23 Dec 92 00:30:46 GMT
Organization: Netcom Online Communications Services (408-241-9760 login: guest)
In article <1992Dec22.182710.26751@panix.com> rmah@panix.com (Robert Mah) writes:
>In an extension that works fine on most systems, but some people seem to
>be getting freezes when they shut down/restart their machine. I'm not
>sure, but I think it might be related to my patching HFSDispatch.
>
>I'm using register a1 to hold the adress of the real trap -- is there
>something wrong with this? Anyone care to comment?
>
Yup, that's your problem. A1 & A2 are "special" for the HFSDispatch
routine and "may" contain useful information. Using A3 should work just
fine.
- --
- -----------------------------------------------------------------------------
Leonard Rosenthol Internet: leonardr@netcom.com
Director of Advanced Technology AppleLink: MACgician
Aladdin Systems, Inc. GEnie: MACgician
+++++++++++++++++++++++++++
From: absurd@apple.apple.com (Tim Dierks, software saboteur)
Date: 23 Dec 92 03:10:35 GMT
Organization: MacDTS Marauders
In article <1992Dec22.182710.26751@panix.com>, rmah@panix.com (Robert Mah)
wrote:
>
> In an extension that works fine on most systems, but some people seem to
> be getting freezes when they shut down/restart their machine. I'm not
> sure, but I think it might be related to my patching HFSDispatch.
>
> I'm using register a1 to hold the adress of the real trap -- is there
> something wrong with this? Anyone care to comment?
>
> Some code...
>
> /*
> * We need to trap whenever the user moves a directory (selector 5).
> */
> pascal void FSDispatchPatch()
> {
> asm{
> movem.l a4, -(sp) ; save registers
> lea main, a4 ; setup globals
> cmp.w #5, d0 ; if not CatMove
> bne.s @1
> move.w #1, gNeedsUpdate ; set the gNeedsUpdate flag
> @1 move.l realHFSDispatchTrap, a1 ; grab the addr of the real thing
> movem.l (sp)+, a4 ; restore registers
> jmp (a1) ; jump to real HFSDispatch
> }
> }
Your problem is that you're destroying A1; it's used as a parameter by
some HFSDispatch selectors.
While you could do this by trashing a different register, which isn't
used, you could always use the slightly more complex but somewhat more
clever method.
clr.l -(sp) ; save room for forwarding
address
> movem.l a4, -(sp) ; save registers
> lea main, a4 ; setup globals
> cmp.w #5, d0 ; if not CatMove
> bne.s @1
> move.w #1, gNeedsUpdate ; set the gNeedsUpdate flag
@1 move.l realHFSDispatchTrap,4(a7) ; store forwarding address on
stack
> movem.l (sp)+, a4 ; restore registers
rts ; jump to real HFSDispatch
Note that this preserves all the registers by using the trick of using
an RTS to pop the jump address off of the stack, allowing you to restore
all your registers first.
(Well, I always thought it was neat, anyway.)
Have a great holiday, one and all- I'm off to home till Jan 6; I'll
be gone (netwise) till then.
Tim Dierks
MacDTS pinball addict
+++++++++++++++++++++++++++
From: d88-jwa@hemul.nada.kth.se (Jon Wtte)
Date: 23 Dec 92 11:05:45 GMT
Organization: Royal Institute of Technology, Stockholm, Sweden
In <1992Dec22.182710.26751@panix.com> rmah@panix.com (Robert Mah) writes:
>I'm using register a1 to hold the adress of the real trap -- is there
>something wrong with this? Anyone care to comment?
>@1 move.l realHFSDispatchTrap, a1 ; grab the addr of the real thing
> movem.l (sp)+, a4 ; restore registers
> jmp (a1) ; jump to real HFSDispatch
Yes, this trashes register a1.
Instead, you should "reserve space" on the stack for the
chain address, save the registers, do your thing, put
the registers back into shape and RTS _to_the_next_routine_.
Something like:
subq #4, a7
movem.l a1/a4, -(a7)
...
do stuff
...
move.l realHFSDispatchTrap, a1
move.l a1, 8(a7)
movem.l (a7)+, a1/a4
rts
Note that this _IS_ a head patch, since the "RTS" actually
is used as a jump to the next function, leaving stack and
registers intact.
Cheers,
/ h+
- --
-- Jon W{tte, h+@nada.kth.se, Mac Hacker Deluxe --
"It was, in fact, cool as all get-out. Fortunately it was a little
too late (historically speaking) to be groovy."
-- Dennis Pelton
+++++++++++++++++++++++++++
From: rmah@panix.com (Robert Mah)
Date: 28 Dec 92 02:25:59 GMT
Organization: PANIX Public Access Unix, NYC
In <absurd-221292190600@seuss.apple.com> absurd@apple.apple.com (Tim Dierks, software saboteur) writes:
>Your problem is that you're destroying A1; it's used as a parameter by
>some HFSDispatch selectors.
>While you could do this by trashing a different register, which isn't
>used, you could always use the slightly more complex but somewhat more
>clever method.
> clr.l -(sp) ; save room for forwarding address
>> movem.l a4, -(sp) ; save registers
>> lea main, a4 ; setup globals
>> cmp.w #5, d0 ; if not CatMove
>> bne.s @1
>> move.w #1, gNeedsUpdate ; set the gNeedsUpdate flag
>> @1 move.l realHFSDispatchTrap,4(a7) ; store forwarding address on stack
>> movem.l (sp)+, a4 ; restore registers
> rts ; jump to real HFSDispatch
>Note that this preserves all the registers by using the trick of using
>an RTS to pop the jump address off of the stack, allowing you to restore
>all your registers first.
Thanks I'll try it and see how it works. But won't changing the return
address mess up some toolbox things. I seem to recall that that was why
"tail patches" were not allowed -- of course, I could be totally confused
here :->
Thanks again,
Rob
- --
[--------------------------------------------------]
[ Robert S. Mah | "Every day an adventure, ]
[ rmah@panix.com | every moment a challenge." ]
[--------------------------------------------------]
+++++++++++++++++++++++++++
From: rmah@panix.com (Robert Mah)
Date: 28 Dec 92 02:28:01 GMT
Organization: PANIX Public Access Unix, NYC
Jon,
Thanks a bunch. Also clears up a question I had regarding return addresses
that I asked Tim Dierks about in his reply.
Cool runnin'
Rob
- --
[--------------------------------------------------]
[ Robert S. Mah | "Every day an adventure, ]
[ rmah@panix.com | every moment a challenge." ]
[--------------------------------------------------]
+++++++++++++++++++++++++++
From: d88-jwa@dront.nada.kth.se (Jon Wtte)
Date: 28 Dec 92 10:41:04 GMT
Organization: Royal Institute of Technology, Stockholm, Sweden
In <1992Dec28.022559.2496@panix.com> rmah@panix.com (Robert Mah) writes:
>Thanks I'll try it and see how it works. But won't changing the return
>address mess up some toolbox things. I seem to recall that that was why
>"tail patches" were not allowed -- of course, I could be totally confused
>here :->
But that's the beauty of it; we DON'T change the normal return
address. The stack will look a little like:
<Junk>
Return Address
<Saved Space>
<Saved registers>
Then we push the address to chain to:
<Junk>
Return Address
Chain Address
<Saved registers>
and restore registers and do an RTS:
<Junk>
Return Address
The stack looks JUST like it did on entry to our routine!
The patch has preserved all registers and the original return
address, so it isn't a tail patch and it isn't zapping any
registers; it's clean.
- --
-- Jon W{tte, h+@nada.kth.se, Mac Hacker Deluxe --
"From now on I will re-label the EQ on the deck as Fizz and Wobble
instead of HF and LF."
---------------------------
From: yjc@po.cwru.edu (Jerome 'TofuSoft' Chan)
Subject: How do I find a hole in the DeskTop?!
Date: 25 Dec 1992 06:29:04 GMT
Organization: The Tofu Society of Singapore
How do I find a clear section of the desktop which is NOT covered by
Windows?! I've want my clock application window to slowly creep to the
nearest uncovered region on the desktop.
- ---
The Evil Tofu
+++++++++++++++++++++++++++
From: grobbins@Apple.COM (Grobbins)
Date: 27 Dec 92 01:02:48 GMT
Organization: Apple Computer Inc, Cupertino, CA
In article <yjc-251292012254@yjc-slip.dialin.cwru.edu> yjc@po.cwru.edu (Jerome 'TofuSoft' Chan) writes:
>How do I find a clear section of the desktop which is NOT covered by
>Windows?! I've want my clock application window to slowly creep to the
>nearest uncovered region on the desktop.
Hmm. Well, one way would be to make certain that your application is
the backmost and open a window which covers the whole desktop (the same
size as the gray rgn bounding box.) Then the visRgn of that window
would be all of the desktop area minus all of the open windows of all
applications.
Making your application the backmost would be a small pain, and opening
a window which covers the whole screen would make an ugly flash, so
that's not a good solution. Besides, you would either have to keep the
window open and visible or else reopen it periodically to keep monitoring
its visRgn.
A more promising solution is to use the visRgn of the System 7 Finder's
Desktop window, since that region also reflects the whole screen minus
any open windows (including your app's open window). There's no documented
way to get the WindowPtr to the Desktop window, however, though doing
something like patching OpenWindow or GetNewWindow at INIT time would
probably work. The window is named Desktop, though there is no
guarantee that the Finder window list won't have other windows
coincidentally named Desktop, so checking its bounds against the the
real desktop (grayrgn) bounds is probably a good idea to makesure you've
gotten the right window.
Good luck.
Grobbins grobbins@apple.com
+++++++++++++++++++++++++++
From: rmah@panix.com (Robert Mah)
Date: 28 Dec 92 02:40:44 GMT
Organization: PANIX Public Access Unix, NYC
In <yjc-251292012254@yjc-slip.dialin.cwru.edu> yjc@po.cwru.edu (Jerome 'TofuSoft' Chan) writes:
>How do I find a clear section of the desktop which is NOT covered by
>Windows?! I've want my clock application window to slowly creep to the
>nearest uncovered region on the desktop.
GREAT IDEA. I'm gonna use it too, if you don't mind.
Anyway, you just gotta look at the structure regions of all the windows that
are visible. Each application keeps a list of windows starting at the global
WindowList. The only problem is to get WindowList for each application.
One possible way is to patch InitWindows and grab that app's WindowList
global. Don't forget to patch ExitToShell to catch the application's quitting.
Another option is to track all window creation, deletion, hiding and showing.
On second thought, does GrayRgn hold the VISIBLE desktop or the whole thing?
Not sure on this...but a little experimentation should clear it up.
Cheers,
Rob
- --
[--------------------------------------------------]
[ Robert S. Mah | "Every day an adventure, ]
[ rmah@panix.com | every moment a challenge." ]
[--------------------------------------------------]
+++++++++++++++++++++++++++
From: phaedrus@halcyon.com (Mark Phaedrus)
Date: 28 Dec 92 05:26:51 GMT
Organization: The 23:00 News and Mail Service
In article <1992Dec28.024044.3652@panix.com> rmah@panix.com (Robert Mah) writes:
>In <yjc-251292012254@yjc-slip.dialin.cwru.edu> yjc@po.cwru.edu (Jerome 'TofuSoft' Chan) writes:
>>How do I find a clear section of the desktop which is NOT covered by
>>Windows?! I've want my clock application window to slowly creep to the
>>nearest uncovered region on the desktop.
>GREAT IDEA. I'm gonna use it too, if you don't mind.
I'm not sure that this is such a good idea. The user is always supposed
to be in control of the Mac interface. When I put a window somewhere on my
screen, it means that I've decided that that's a perfectly fine place for that
window, and I would just assume it didn't try to crawl somewhere else on its
own, thank you very much. :)
If you do decide to do this, be sure to make it user-configurable. And
while you're making it user-configurable, add the option to make the window
just teleport to a clear location, rather than "creeping" there. Even if I
wanted this feature, I'm not sure that I'd want a background application
like a clock using up the CPU time required to slowly move its window across
the screen.
- --
\o\ Internet: phaedrus@halcyon.com (Seattle, WA Public Access Unix) \o\
\o\ "How'd you like to move a few steps down the food chain, pal?" \o\
\o\ If you enjoy fantasy/SF stories with transformation themes, email me \o\
\o\ for a copy of the Transformation Stories List. \o\
+++++++++++++++++++++++++++
From: yjc@po.cwru.edu (Jerome 'TofuSoft' Chan)
Date: 28 Dec 92 19:19:03 GMT
Organization: The Tofu Society of Singapore
In article <1992Dec28.024044.3652@panix.com>, rmah@panix.com (Robert Mah)
wrote:
> GREAT IDEA. I'm gonna use it too, if you don't mind.
Please go ahead and use it.
Maybe someone could put up a window behind such a hole and do neat little
animations, like maybe a cartoon of the talking moose playing chess with
the dogcow. :)
- ---
The Evil Tofu
---------------------------
From: UC525655@mizzou1.missouri.edu (Mark Eaton)
Subject: Volume icons?
Date: 20 Dec 92 22:41:12 GMT
Organization: University of Missouri
Hi all-
Where can i find the icon definition for a mounted volume?
I have looked through all the (I think) relevant material in
IM I-VI, but obviously I've missed something somewhere, but all
IM talks about are file icons. Help!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Mark Eaton | Opinions? We're not allowed to have
UC525655@MIZZOU1.MISSOURI.EDU | opinions at Mizzou... get back to me
| in '94 when I graduate... ;)
+++++++++++++++++++++++++++
From: jacman@magicbb.uucp (Jordan Christensen)
Date: 22 Dec 92 12:32:28 GMT
Organization: MAGIC - Macintosh Awareness Group In Canada
>Hi all-
>Where can i find the icon definition for a mounted volume?
>I have looked through all the (I think) relevant material in
>IM I-VI, but obviously I've missed something somewhere, but all
>IM talks about are file icons. Help!
The volume icons are stored in an invisible file called 'Icon' in the root
directory, it's id is (not sure of this) '-16455'.
Hoped This Helped
+++++++++++++++++++++++++++
From: dmitry@chemistry.chem.utah.edu (Dmitry Boldyrev)
Date: 29 Dec 92 18:39:56 GMT
Organization: University of Utah
>Hi all-
>Where can i find the icon definition for a mounted volume?
>I have looked through all the (I think) relevant material in
>IM I-VI, but obviously I've missed something somewhere, but all
>IM talks about are file icons. Help!
>
>
>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>Mark Eaton | Opinions? We're not allowed to have
>UC525655@MIZZOU1.MISSOURI.EDU | opinions at Mizzou... get back to me
> | in '94 when I graduate... ;)
Hello Mark,
Here, I have smth for you...
============================ CUT HERE ============================
/* this is the data structure pointed to in the result of the
disk driver call csCode=21 (get ICN#/comment). This call
works on all devices.
*/
typedef struct TInfoBlk {
unsigned char icon[128]; /* icon */
unsigned char mask[128]; /* mask */
Str255 infoString; /* info string (for get info) */
} TInfoBlk,*TInfoPtr;
void GetDiskInfo(short driverRefNum,short driveNum,TInfoPtr *dataBlk);
void DrawInfo(TInfoPtr infoBlock);
void GetAllInfo(void);
void GetAllInfoYourWay(void);
void main(void)
{
WindowPtr theWindow;
Rect wBounds;
#ifdef THINK_C
InitGraf(&thePort);
#else
InitGraf(&qd.thePort);
#endif
InitFonts();
InitWindows();
InitMenus();
TEInit();
InitDialogs(nil);
FlushEvents(everyEvent,0);
InitCursor();
SetRect(&wBounds,40,40,100,100);
theWindow = NewWindow
(nil,&wBounds,(StringPtr)"\pIcons",true,documentProc,
(WindowPtr)(-1),true,0L);
SetPort(theWindow);
GetAllInfo();
DisposeWindow(theWindow);
}
/* This routine traverses the currently mounted volumes
index using PBHGetVInfo(). The drive # and device
driver number for each volume is extracted from the
parameter block, and passed into GetDiskInfo() to
call the disk drivers.
Once the data has been retrieved, the icon is plotted
*/
void GetAllInfo(void)
{
HParamBlockRec vBlock; /* volume parameter block used to traverse
mounted vols */
OSErr err;
TInfoPtr dataBlk; /* pointer used to point to result of csCode=21 call
*/
vBlock.volumeParam.ioNamePtr = nil;
vBlock.volumeParam.ioVRefNum = 0;
vBlock.volumeParam.ioVolIndex = 1;
do {
err = PBHGetVInfo (&vBlock,false);
vBlock.volumeParam.ioVolIndex++;
if (err==noErr) {
GetDiskInfo(vBlock.volumeParam.ioVDRefNum,
vBlock.volumeParam.ioVDrvInfo,&dataBlk);
if (dataBlk)
DrawInfo(dataBlk);
}
} while (err==noErr);
}
/* GetDiskInfo() makes the call to the volume's driver to get the
volume icon and info string. A pointer to this data is returned
by reference in dataBlk
This routine tries to call the disk's driver with csCode=22,
which attempts to get info on a specific physical volume.
If the csCode=22 call fails, I call csCode=21 to get the generalized
media icon.
Both calls are documented in IM V-470
*/
void GetDiskInfo(short driverRefNum,short driveNum,TInfoPtr *dataBlk)
{
CntrlParam pBlock;
OSErr err;
pBlock.ioVRefNum = driveNum;
pBlock.ioCRefNum = driverRefNum;
pBlock.csCode = 22;
err = PBControl(&pBlock,false);
if (err==controlErr) {
pBlock.ioVRefNum = driveNum;
pBlock.ioCRefNum = driverRefNum;
pBlock.csCode = 21;
err = PBControl(&pBlock,false);
}
if (err==noErr)
*dataBlk = (TInfoPtr) *(Ptr *)pBlock.csParam; /* messy way to get the
locn out */
else *dataBlk = nil;
}
/* this routine uses CopyBits to draw the icon on the screen (ignoring
the mask and
the info string). Make sure you put up a window and call SetPort()
first!
*/
void DrawInfo(TInfoPtr infoBlock)
{
BitMap iconMap;
Rect destRect;
iconMap.baseAddr = (Ptr)infoBlock;
iconMap.rowBytes = 4;
SetRect(&iconMap.bounds,0,0,32,32);
SetRect(&destRect,0,0,32,32);
OffsetRect(&destRect,10,10);
CopyBits(&iconMap,&thePort->portBits,&iconMap.bounds,&destRect,
srcCopy,nil);
while (!Button());
while (Button());
}
============================ CUT HERE ============================
Guess, it make sense..
.................................................
Dmitry Boldyrev,
Department of Chemistry, University of Utah.
Internet: dmitry@chemistry.chem.utah.edu
-- "I only know that I know nothing"
- Socrates
---------------------------
From: rgaros@bio.vu.nl (Rene G.A. Ros)
Subject: Suppl. Gestalt Selectors List 1.2
Organization: VU Biology, Amsterdam, The Netherlands
Date: Tue, 1 Dec 1992 12:10:58 GMT
Archive-name: gestalt-list
Last Modified: 1992/11/30
Version: 1.2
Supplemental Gestalt Selectors List 1.2
=======================================
Last modified: November 30, 1992, 21:50 CET (GMT+1)
Supplemental to the selector codes listed in the Gestalt Chapter of
Inside Macintosh VI (IM VI), that is.
These can include selector codes installed by Apple's (system)
software or by software from third parties (your software?).
(NIM Operating System Utilities has been delayed from Winter 1992 to
June 1993, according to Addison-Wesley Holland).
I don't have all the documentation or knowledge and I don't want to.
I would like to see this list to become a combined effort by different
persons who have together access to a wide area of information.
This list may contain (educated) guesses and perhaps even false
information, so no guarantee is made about the contents.
You can use this information freely, but when you find information not
included in IM VI or in this list; please mail it me.
If you have additions, corrections, comments, suggestions, news about
available software, etc., please mail me. Please, also mention the
source you used.
For ways to contact me, see the end of this list.
This list is originally distributed in the following ways:
USENET newsgroup comp.sys.mac.programmer (c.s.m.p.)
I will post every new version of the list to c.s.m.p., but the last
version will be reposted once a month.
FTP-site
sumex-aim.stanford.edu
Every new version (except bug-release) is submitted to the info-mac
archives at sumex-aim.stanford.edu. (/info-mac/tech/gestalt-list-XX.txt)
It is also available on its mirror sites (e.g. in Europe: lth.se).
FINGER
You can also read this list by using finger to 'rgaros@bio.vu.nl'.
Tip: 'finger rgaros@bio.vu.nl | more' or
'finger rgaros@bio.vu.nl > filename'
My .plan file that you see when you do this, may be more up-to-date and
may include small corrections, or contains a preliminary version of the
next version to be published.
MAIL LIST
Every person on this mail list gets automatically an update by email whenever
there are some changes. If you want to join this mail list you need to send
me an email asking to be included. The same applies when you want to be
removed from the list.
This service is only possible to those who have an account on Internet or
any other network reachable from Internet. I can not provide mailing of
printed versions or on disk by normal surface mail.
CONTENTS
# Changes
# Definitions and Format
# Gestalt Selector Codes & Responses
= Apple System Software
= Apple Additional Software
= Third Parties Software
# Gestalt Selector Codes, Responses Unknown
= Apple System Software
= Apple Additional Software
= Third Parties Software
# Abbreviations
# Format version numbers
= 4-byte words
= BCD
= INTEGER
# AppleShare File & Print Server selector codes
# Glue code
# Sources
# Related Software
# Acknowledgements
# Legal Stuff
= Notice of Liability
= Trademarks
= Distribution
# Moderator
####Changes (since v1.1)
Added selectors
Apple System : alis, fxfr, misc, term,
Apple Add. : arb
Third Parties : CKI3
Added unknown
Apple System : OSType(7), OSType(13)
Apple Add. :
Third Parties : AP17, GtOp, gV00..gV04, LFnt, PBUf, PBUt, RQDC
Changed
Apple System : atkv, conn, hdwr, mach, ppc , rsrc, tabl
Apple Add. : qtim
Third Parties : YeHa
Previously unknown
Apple System : ctbm, ctbu, sccr, sccw, vmbs
Apple Add. : strm
Third Parties : ApoL (incl. complete description)
Added "Glue Code" chapter about selectors 'glue-ed' by programming
software, when the Gestalt Manager is not available. (Suggested
by Marco Piovanelli).
Marco also went hunting for the Gestalt Selector Table and found
probably the correct meaning of the 'tabl' selector.
Meanwhile he also found two unusual selectors, OSType(7) and
OSType(13) ("Charlie's selectors" !? ;-) ) These are listed at
the end of unknown Apple System Software selectors.
Added "Legal Stuff" chapter (US legal system is famous :-) ).
More entries in 'Related software'-chapter, including the location
of related New Technical Notes on ftp.apple.com.
Selectors 'dict' and 'tsmv' were incorrectly listed as known.
Dave Radcliffe (Mac DTS, Author TN Apple) clarified the two
contradictions in the previous version.
Jeremy Roussak (Author Apollo ext) allowed including the chapter
'Programmers' Information' from the Apollo 1.0 documentation.
Victor Tan (Author SpeedyFinder7 cp) provided some remarks about
the selector installed by SP7.
And yes, when there are more 'Third Party'-selectors they will
get their own, separate list.
####Definitions and Format
Apple System Software
Selectors installed by normal System Software.
IM VI: "Apple reserves for its own use all four-character
sequences consisting solely of lowercase letters and
nonalphabetic ASCII characters".
Apple Additional Software
Selectors installed by additional software by Apple Inc.
See also quote above.
Third Parties Software
Selectors installed by software from parties other than Apple Inc.
IM VI: "If you have registered a creator string with Apple, you
are strongly encouraged to use that sequence as your
selector code".
Format used to display information about selector code:
| ****'selector code' (Application [available in version])
| name (description, documentation) OR description
|
| CONST declaration; {remark} *ref.number to source
|
| contradiction:
| source A says "X"
| source B says "Y"
If a selector code is installed by Apple software the entry also
includes if it is in addition to or not listed in IM VI.
The source reference number may also be used in other places than
indicated above. It then applies to other parts of then entry.
Some constant-names may not originate from official publications.
Any response value described is what was found by others or myself on
different machine(s) with its configuration.
####Gestalt Selector Codes & Responses
====Apple System Software
****'alis' (System [7.0])
gestaltAliasMgrAttr (addition by AppleTalk Remote Access)
gestaltAliasMgrSupportsRemoteAppletalk = 1; {supports Remote Access} *9
See also remarks with 'qtim' selector.
****'atkv' (System [since 7.0, AT 56])
gestaltATalkVersion *4 (not listed)
Returns AppleTalk version in 4-byte words.
This is different from 'atlk' !
With the release of the System 7 Tuner product, AppleTalk will not be
loaded at startup, if prior to the previous shutdown AppleTalk was
turned off in the Chooser. Under this circumstance, the 'atkv' selector
is not available. If the 'atkv' selector is not available under System 7,
this is an indicator that AppleTalk cannot be turned on without doing so
in the Chooser and rebooting the system. *4
gestaltATalkVersion = 'atkv'; *3/5
****'atlk' (System [since 6.0.4])
gestaltAppleTalkVersion (addition)
Returns the version of the .MPP driver in INTEGER.
LAPMgrExists := (AppleTalkVersion >= 53); *4
****'conn' (System, CTB installed [since 7.0])
gestaltConnMgrAttr (addition)
Under System 6, this Gestalt selector isn't implemented when the
Communications Toolbox is installed (Michael Hecht).
additional responses exist but unknown (bit 2 & 3).
****'ctbm' (System, CTB installed)
gestaltCTBManagersAttr (not listed)
Communications Toolbox Managers, bitmask of which managers are present.
gestaltCTBManagersAttr = 'ctbm'; *7
****'ctbu' (System, CTB installed)
gestaltCTBUtilsAttr (not listed)
Communications Toolbox Utilities Attr
gestaltCTBUtilsAttr = 'ctbu'; *7
gestaltCTBUtilsPresent = 0; *7
****'eajt' (Easy Access cp [since 7.0])
gestaltEasyAccessJTable (not listed)
Returns the base address of the Easy Access jump-trap table.
gestaltEasyAccessJTable = 'eajt'; *3
****'flag' (Network Extension ext [since System 7.0 *4])
gestaltFlagshipAttr (not listed)
gestaltFlagshipAttr = 'flag'; *3
gestaltFlagshipPresent = 0; *3
gestaltFlagshipRegistered = 1; *3
****'fpu ' (System [since 6.0.4])
gestaltFPUType (addition)
gestal68040FPU = 3; *2
****'fs ' (System)
gestaltFSAttr (addition)
gestaltHasFileSystemManager = 2; *2
****'font' (System [since 7.0])
gestaltFontMgrAttr (addition)
additional System 7.1 responses exist but unknown.
****'fxfr' (System [since 7.0])
gestaltFXfrMgrAttr (addition)
gestaltFXfrMgrErrorString = 1; *7
****'hdwr' (System [since 6.0.4])
gestaltHardwareAttr (additions)
gestaltHasRBV = 2; {RBV} *3
gestaltHasOSS = 5; {OSS} *3
gestaltHasSCSIDMA = 6; {53C80 SCSI DMA} *3
gestaltHasSWIMIOP = 8; {SWIM IOP} *3
gestaltHasSCCIOP = 9; {SCC IOP} *3
gestaltHasFitch = 10; {Fitch memory Controller} *8
gestaltHasIWM = 11; {IWM} *3
gestaltHasPWM = 12; {PWM disk speed buffer} *8
gestaltHasRAMSndBuff = 13; {RAM-based sound buffer} *8
gestaltHasVideoDAConv = 14; {Video D/A Converter} *8
gestaltHasPGC = 15; {PGC (parity control)} *8
gestaltHasSoftPowerOff = 19; *2
gestaltHasSonic = 20; {Sonic} *3
gestaltHasSCSI961 = 21; {Int. 53C96 SCSI} *1
gestaltHasSCSI962 = 22; {Ext. 53C96 SCSI} *1
gestaltHasDAFBVideo = 23; {DAFB Video} *3
See for more information the TN "M.OV.GestaltSysenvirons".
****'kbd ' (System [since 6.0.4])
gestaltKeyboardType (additions)
gestaltPwrBookADBKbd = 12; {PowerBook ADB Keyboard} *1
gestaltPwrBookISOADBKbd = 13; {PowerBook ISO ADB Keyboard} *1
****'mach' (System [since 6.0.4])
gestaltMachineType (additions)
gestaltQuadra900 = 20; {Macintosh Quadra 900} *1
gestaltPowerBook170 = 21; {Macintosh PowerBook 170} *1
gestaltQuadra700 = 22; {Macintosh Quadra 700} *1
gestaltClassicII = 23; {Macintosh Classic II} *1
gestaltPowerBook100 = 24; {Macintosh PowerBook 100} *1
gestaltPowerBook140 = 25; {Macintosh PowerBook 140} *1
gestaltQuadra950 = 26; {Macintosh Quadra 950} *1
gestaltPowerBook210 = 29; {Macintosh PowerBook 210}
gestaltPowerBook230 = 32; {Macintosh PowerBook 230}
gestaltPowerBook180 = 33; {Macintosh PowerBook 180}
gestaltPowerBook160 = 34; {Macintosh PowerBook 160}
gestaltMacLCII = 37; {Macintosh LC II}
gestaltMacIIvi = 44; {Macintosh IIvi}
gestaltPerforma600 = 45; {Macintosh Performa 600}
gestaltMacIIvx = 48; {Macintosh IIvx}
gestaltPowerBook145 = 54; {Macintosh PowerBook 145}
Exceptions with systems prior to System 7.1:
gestaltMacLCII = 19; {Macintosh LC & LC II}
gestaltPowerBook145 = 25; {Macintosh PowerBook 140 & 145}
****'misc' (System [since 6.0.5])
gestaltMiscAttr (addition)
gestaltBootGlobals = 1; {Boot Globals} *8
****'mmu ' (System [since 6.0.4])
gestaltMMUType (addition)
gestalt68040MMU = 4; {68040 built-in} *2
****'ppc ' (System [since 7.0])
gestaltPPCToolboxAttr (addition)
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 initialized (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)
gestaltPPCToolboxAttr = 'ppc ';
gestaltPPCToolboxPresent = 0x0000, {Requires PPCInit to be called}
gestaltPPCSupportsIncoming = 0x0001; {Deny incoming net requests}
gestaltPPCSupportsOutGoing = 0x0002; {Deny outgoing net requests}
gestaltPPCSupportsRealTime = 0x1000; {Supports real-time delivery}
****'proc' (System [since 6.0.4])
gestaltProcessorType (addition)
gestalt68040 = 5; *2
****'qdrw' (System [since 7.0])
gestaltQuickDrawFeaturesAttr (not listed)
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 try this:
gHasColorQuickDraw := (Gestalt(gestaltQuickDrawVersion,
qdVersion) = noErr) & (qdVersion >= gestaltQuickDraw8Bit);
gestaltQuickDrawFeaturesAttr = 'qdrw'; *2
gestaltHasColor = 0; *2
gestaltHasDeepGWorlds = 1; *2
gestaltHasDirectPixMaps = 2; *2
gestaltHasGrayishTextOr = 3; *2]
****'rsrc' (System [should work since 7.0?])
gestaltResourceMgrAttr (addition)
Under System 7, bit 0 that tells if you have partial resource
support doesn't work right. This selector is undefined under
System 7.0 and 7.0.1 even though the partial resource calls are
available. (Michael Hecht, Quinn)
additional response exist but unknown (bit 1).
****'sccr' (System [6.0.4, discontinued])
gestaltSCCReadPortsAddr (not listed)
Returns the address of SCC read ports.
gestaltSCCReadPortsAddr = 'sccr';
****'sccw' (System [6.0.4, discontinued])
gestaltSCCWritePortsAddr (not listed)
Returns the address of SCC write ports.
gestaltSCCWritePortsAddr = 'sccw';
****'sysv' (System [since 6.0.4])
gestaltSystemVersion (listed in IM VI; question)
Returns the version number of currently active System file in BCD.
Is it correct system 6.0.8 returns 0x0607? Can you determine if it
is actually 6.0.8 in another way?
****'tabl' (System [since 6.0.4])
gestaltSelectorTable (not listed)
Returns a handle to the Gestalt selector table itself.
The Gestalt selector table is kept in a resizable block in the system
heap. The last item in the table is a dummy entry (INVALID), marked by
a selector OSType(MaxLongInt). (Marco Piovanelli, he has also some
snippet Pascal code to list all selectors)
gestaltSelectorTable = 'tabl';
****'term' (System [7.1?])
gestaltTermMgrAttr (addition)
gestaltTermMgrErrorString = 1; *7
****'via1' (System [6.0.4, discontinued])
gestaltVIA1Addr (not listed)
Returns the address of VIA 1.
gestaltVIA1Addr = 'via1';
****'via2' (System [6.0.4, discontinued])
gestaltVIA2Addr (not listed)
Returns the address of VIA 2.
gestaltVIA2Addr = 'via1';
****'vmbs' (System, VM on [since 7.0])
gestaltVMBackingStoreRef (not listed)
Returns the ioRefNum of the VM storage file.
gestaltVMBackingStoreRef = 'vmbs';
****'wma.' (System [since 7.0])
gestaltResponderAttr (Workstation Management Agent aka Responder,
not listed)
gestaltResponderAttr = 'wma.';
gestaltResponderPresent = 0;
****'xttt' (System [since 6.0.8])
gestaltExtToolboxTable (not listed)
Returns the base address of the Extended Toolbox trap table.
gestaltExtToolboxTable = 'xttt';
====Apple Additional Software
****'admn' (AppleShare Admin appl [since 3.0])
gestaltASAdminAttr
gestaltASAdminAttr = 'admn';
gestaltASAdminPresent = 0;
****'arb ' (AppleTalk Remote Access [1.0])
gestaltArbitorAttr (Serial Port Arbitration) *9
gestaltArbitorAttr = 'arb ';
gestaltSerialArbitrationExists = 0; {Serial Port Arbitration installed}
****'asps' (AppleShare Print Server appl [since 3.0])
gestaltASPrintServerAttr
gestaltASPrintServerAttr = 'asps';
gestaltASPrintServerPresent = 0;
****'aucd' (Audio CD Access ext [since 4.0])
gestaltAudioCDAccessVersion (CD-ROM Software 4.0)
Returns Audio CD Access version in BCD.
Version 4.0.1 of the CD-ROM Software will still return 0x0400.
gestaltAudioCDAccessVersion = 'aucd';
****'font' (TrueType INIT for System 6.x)
This selector is also installed by the TT INIT.
See for details IM VI.
****'hgfd' (AppleShare File Server appl [since 3.0])
gestaltASFileServerAttr
gestaltASFileServerAttr = 'hgfd';
gestaltASFileServerPresent = 0;
****'hscd' (High Sierra File Access ext [since 4.0])
gestaltHighSierraFAVersion (CD-ROM Software 4.0)
Returns High Sierra File Access version in BCD.
Version 4.0.1 of the CD-ROM Software will still return 0x0400.
gestaltHighSierraFAVersion = 'hscd';
****'mtcp' (MacTCP cp [since 1.1])
gestaltMacTCPAttr
0x0000 is returned if MacTCP is present but unopened, *5
0x0001 is returned for MacTCP when it is opened. *5
gestaltMacTCPAttr = 'mtcp';
gestaltMacTCPOpened = 0; *5
I have seen this selector returning 0x0002 on a PB140 with System 7.1,
unknown MacTCP version.
****'qtim' (QuickTime ext [since 1.0])
gestaltQuickTimeVersion
Returns QuickTime version in 4-byte words.
If you install QuickTime under System 6, a major portion of the Alias
Manager and FSSpec support is also added. But, QT doesn't implement
the Gestalt selectors because the implementation is not complete. You
must check for either Alias Mgr or QuickTime. (Michael Hecht)
gestaltQuickTimeVersion = 'qtim';
****'strm' (AppleTalk Remote Access [1.0])
gestaltRemoteAccessAttr *9
gestaltRemoteAccessAttr = 'strm';
gestaltRemoteAccessExists = 0; {RA Connection Interface is available)
****'ufox' (Foreign File Access ext [since 4.0])
gestaltForeignFAVersion (CD-ROM Software 4.0)
Returns Foreign File Access version in BCD.
Version 4.0.1 of the CD-ROM Software will still return 0x0400.
gestaltForeignFAVersion = 'ufox';
====Third Parties Software
****'ApoL' (Apollo ext [since 1.0])
gestaltApolloTable
Returns a handle to an instance of the following structure (described
in C):
struct
{ long version; // same as first 4 bytes of 'vers' resource
short attr; // attribute bits
Boolean (*Control)(Boolean) // control function
};
See for more information the Programmers' Information chapter in the
Apollo 1.0 documentation. (Jeremy Roussak)
gestaltApolloTable = 'ApoL';
****'CKI3' (AETracker cp [since 3.0])
gestaltAETrackerAddr
This selector returns a pointer to the external interface routine for
AETracker, details of which are in the AETracker interface guide.
(C.K. Haun)
gestaltAETrackerAddr = 'CKI3';
****'SLip' (StuffIt SpaceSaver ext)
gestaltSItSpaceSaverAddr
Returns the address of the SpaceSaver "command module" which allows
developers to access all the functions of SS. (Leonard Rosenthol)
gestaltSItSpaceSaverAddr = 'SLip';
####Gestalt Selector Codes, Responses Unknown
====Apple System Software
****'BSDa' (CloseView cp)
(developed by Berkeley Systems, Inc.)
****'bugz' (System (Tuna Helper INIT rsrc) [since 7.0]/Tune-up ext)
IIx (701/111): $02f7f33f, PB140 (71): $1ffffaff
****'dict' (System [since 7.1])
gestaltDictionaryMgrAttr/Version? (Dictionary Manager, not listed)
gestaltDictionaryMgr??? = 'dict';
PB140 (71): $00000001
****'icon' (System? [?])
Icon Utilities Attr?
****'nubs' (System [6.0.4, 6.0.5, 6.0.7, discontinued])
gestaltNuBusCount?
Returns count of NuBus slots?
Plus: $00000000, IIx: $00000006
****'rbv ' (System [6.0.4, discontinued])
Plus: $00000000, IIx: -
(Installed but unknown response on MacIIx)
****'slot' (System [6.0.4, 6.0.5, discontinued])
Plus: $00000000, IIx: $00000003
****'slt1' (System [6.0.4, 6.0.5, discontinued])
Returns first slot# in hexadecimal?
Plus: -, IIx: $00000009
(Installed but unknown response on MacPlus)
****'tsmv' (System [since 7.1])
gestaltTextServicesMgrVersion? (not listed)
gestaltTextServicesMgrVersion = 'tsmv';
new System 7.1 response exists but unknown
****'vmcl' (System, VM on [since 7.0])
****OSType(7) (System [since 6.0.4])
Returns LongInt('carl') and a result code of noErr.
****OSType(13) (System [since 6.0.4])
Returns LongInt('bbmc') and a result code of noErr.
====Apple Additional Software
****'cpnt' (QuickTime ext [since 1.0])
gestaltComponentMgrAttr/Version? (Component Manager)
gestaltComponentMgr??? = 'cpnt';
gestaltComponentMgrPresent = 0; (guess)
****'icmp' (QuickTime ext [since 1.0])
gestaltCompressionMgrAttr (ImageCompression Manager) *6
gestaltCompressionMgrAttr = 'icmp'; *6
****'kpcd' (Apple Photo Access ext [since 1.0])
gestaltApplePhotoAccess??? (CD-ROM Software 4.0)
Response unknown ($fffffff7).
gestaltApplePhotoAccess??? = 'kpcd';
****'slnk' (AppleTalk Remote Access MNPlink? [1.0])
====Third Parties Software
Especially the Third Party selectors may change with every new release
and are therefore only listed in the 'known selectors' chapter when
the author has described the structure in the documentation or by
mail to me.
****'AP17' (?)
****'AzNe' (NameView cp)
****'ESOC' (Serial of Champions ext)
****'GtOp' (?)
****'gV00', 'gV01', 'gV02', 'gV03', 'gV04' (PowerPort cp???)
****'He20' (Helium cp)
****'Intj' (Interjection ext)
****'LFnt' (Dialog View cp, formerly List Font cp)
****'MV10' (TearOFF cp)
****'NMBT' (Attention cp [since 0.6])
****'PBUf' (?)
****'PBUt' (?)
****'RQDC' (DropCheck cp)
****'YeHa' (SpeedyFinder7 cp)
The structure to which the _Gestalt selector refers changes almost
invariably from version to version of SF7. Should someone work out
parts of the structure of the selector keep in mind that it will
almost certainly change in the next minor release and definitley with
the next major release. (Victor Tan)
####Abbreviations
ADB - Apple Desktop Bus
AS - AppleShare
ASC - Apple Sound Chip
CPU - Central Processing Unit
DAFB - ???
DMA - Direct Memory Access
DN - Developer Note
FPU - Floating Point Unit
IM - Inside Macintosh (old volumes I-VI)
IOP - Input/Output Processor
IWM - Integrated Woz Machine
MMU - Memory Management Unit
NIM - New Inside Macintosh
OSS - ???
PGC - ???
PPC - Process-to-Process Communication
PWM - ???
RBV - RAM-Based Video
SCC - Serial Communications Controller
SCSI - Small Computer System Interface
SIMM - Single In-line Memory Module
Sonic - ???
SWIM - Super Integrated Woz Machine?
TN - Technical Note
VIA - Versatile Interface Adapter
VM - Virtual Memory
appl - application
cp - control panel
ext - extension
FA - File Access
RA - Remote Access
####Format version numbers
====4-byte words
The format of the LONGINT result is as follows:
(based on posting by Ivan M Cavero Belaunde)
MMmbSSss (e.g. 01524050)
Where:
MM is major revision release in BCD 1
m is minor revision release in BCD 5
b is bug fix release in BCD 2
SS is development stage b
(dev=10,alpha=20,beta=40,release=80)
ss is dev. stage # in BCD 50
------- +
1.5.2b50 :-)
The 'atkv' selector returns the major revision release in hexadecimal.
====BCD (Binary Coded Decimal)
0x0400 means 4.0.0 (MMmb, see above)
====INTEGER
The decimal representation of the returned value is the version.
####AppleShare File & Print Server selector codes
The selectors are defined when the application has run.
If it is still running (or wasn't properly quit) the response
is one. When the application has properly quit the response
is zero.
'admn' AppleShare Admin
'asps' AppleShare Print Server
'hgfd' AppleShare File Server
####Glue code
The following programming software includes glue-code to return some
responses even if the Gestalt Manager is not available. Every entry
includes the selectors of which the Glue-code can return a response.
****Symantec THINK Pascal [at least since 4.0.1]:
atlk, fpu , kbd , kbd , lram, mach, mmu , qd , ram , sysv, vers
####Sources
*1 Apple Inc.; TN M.OV.GestaltSysenvirons, May 1987, rev. Sep. 1992
*2 Symantec Corp.; THINK Pascal 4.0.1
*3 Carl C.Hewitt; Gestalt DA 1990
*4 Apple Inc.; TN M.NW.AppleTalk2, Feb. 1992, rev. Sep. 1992
*5 Apple Inc.; MacTCP 1.1 Programmer's Guide.
*6 Apple Inc.; QuickTime ImageCompression source files (with QT 1.0)
*7 Symantec Corp.; Think C GestaltGlue source files
*8 Eric Simenel, Apple Computer France; Gestalt dcmd 1.0
*9 Apple Inc.; AppleTalk Remote Access API External Reference
Specification
####Related Software
****AEgestalt
Uses Apple Events to get Gestalt response from remote machine,
includes C-source. (Requires color?? Doesn't want to run on MacPlus)
FTP: bric-a-brac.apple.com
/dts/mac/sc/snippets/platforms.tools/aegestalt-1-0.hqx
****Gestalt DCMD
This dcmd (debugger command for MacsBug) allows you to "use"
Gestalt when you're in MacsBug.
FTP: bric-a-brac.apple.com
/dts/mac/sc/snippets/platforms.tools/gestalt-dcmd.hqx
****DisplayGestalt
Small application displays configuration using Gestalt Mgr,
includes C-source.
FTP: mac.archive.umich.edu
/development/libraries/displaygestalt.cpt.hqx
****Gestalt!
Displays responses from know installed selectors.
FTP: ftp.lu.se
/pub/mac/util/Gestalt!_X.X.X.cpt.hqx
/pub/mac/util/Gestalt!_X.X.X.cpt.hqx.txt
****GestaltDA
Displays responses from installed selectors.
****GestaltExt
External for 4TH Dimension Relational Database application from
ACI/ACIUS.
FTP: ftp.scri.fsu.edu
/pub/4d/4d-GestaltExt.external.hqx
****GestaltGlue
Glue code in C.
FTP: ics.uci.edu
/mac/think-c/symantec/pre-5.0stuff/gestalt.hqx
****Technical Notes 'M.OV.GestaltSysenvirons' and 'M.NW.AppleTalk2'
M.OV.GestaltSysenvirons discusses Gestalt and SysEnvirons
M.NW.AppleTalk2 discusses AppleTalk
FTP: bric-a-brac.apple.com
/dts/mac/tn/overview/gestalt-and-system-environs.hqx
/dts/mac/tn/networking/appletalk2.hqx
****Test Gestalt
Examples to test for QuickDraw version and Virtual Memory status,
includes C-source.
FTP: bric-a-brac.apple.com
/dts/mac/sc/snippets/toolbox/testgestalt.hqx
####Acknowledgements
I want to thank the following persons for their contribution
to this list:
C.K. Haun (Author AETracker cp) <haun@apple.com>
Chris Wysocki <wysocki@netcom.com>
Dave Radcliffe (Author TN GestaltSysenvirons) <radcliff@apple.com>
Ivan M Cavero Belaunde <ivanski@world.std.com>
Jeremy Roussak (Author Apollo ext) <jeremyr@dcs.qmw.ac.uk>
Jon Watte <d88-jwa@nada.kth.se>
Lawrence D'Oliveiro <ldo@waikato.ac.nz>
Leonard Rosenthol <leonardr@netcom.com>
Marco Piovanelli <piovanel@ghost.dsi.unimi.it>
Mark B. Johnson <mjohnson@Apple.com>
Michael Hecht <Michael_Hecht@mac.sas.com>
Pete Resnick <resnick@cogsci.uiuc.edu>
Quinn <quinn@cs.uwa.edu.au>
Robert Hess <robert_hess@macweek.ziff.com>
Roland Mansson (Author Gestalt! appl) <roland.mansson@ldc.lu.se>
Victor Tan (Author SpeedyFinder7 cp) <victort@extro.ucc.su.oz.au>
and the Computer Department at the Biology Faculty of the
Free University in Amsterdam (The Netherlands) for their help and
support.
These persons provided information used in this list. They did this
on personal title, NOT on behalf of their employer.
I assume information you mail to me about Gestalt selectors may be
used in this list. Information made available to the general public
(e.g. a posting to a USENET newsgroup) is also included and the
persons name added to this chapter (and to the mail list).
I will mail you back to thank you and include the parts from the
list which, according the information you provided, were changed
to let you check them.
BTW Persons are only listed with any software they wrote when
these are mentioned somewhere in this list.
####Legal Stuff
====Notice of Liability
The information in this list is distributed on a "AS IS" basis, without
warranty. While every precaution has been taken in the preparation of
this list, neither the moderator nor any contributor shall have any
liability to any person or entity with respect to any liability, loss,
or damage caused or alleged to be caused directly or indirectly by the
information contained in this list or by the computer software and
hardware products described herein.
====Trademarks
Throughout this list trademarked names are used. Rather than put a
trademark symbol in every occurrence of a trademarked name, I state I am
using the names only in an editorial fashion and to the benefit of the
trademark owner with no intention of infringement of the trademark.
====Distribution
The information in this list may be used freely for NON-COMMERCIAL
purposes only. If you DO USE the information in this list for
COMMERCIAL purposes, you may consider sending the moderator a donation.
If you (start to) redistribute this list outside Internet (especially
printed, on disk or CD-ROM) you are kindly asked to notify the moderator.
You are not allowed to distribute modified versions of this list,
including, but not limited to, deleting, adding or moving text or
adding non-text parts. Distribution in any electronical format except
a normal text file is not allowed without permission.
You are not allowed to redistribute it with any other name than
'gestalt-list-XX.txt' (where XX is the version number) unless because
of technical reasons.
####Moderator
Rene G.A. Ros (student Computer Science)
D.C. van Krimpenstraat 3
1067 SG Amsterdam
The Netherlands, Europe
Bank : Postbank 4762669
Phone# : +31 20 611 92 74 / +31 20 611 87 00
Fax# : +31 20 611 60 06
Internet : rgaros@bio.vu.nl
rgaros@nikhefk.nikhef.nl
rener@htsa.aha.nl (you can send a carbon copy of urgent
messages to this address)
CompuServe: 100112,1363 (not preferred)
>INTERNET: rgaros@bio.vu.nl
---------------------------
End of C.S.M.P. Digest
**********************