Path: utzoo!utgpu!watmath!clyde!att!rutgers!mailrus!ames!oliveb!amiga!jimm
From: jimm@amiga.UUCP (Jim Mackraz)
Newsgroups: comp.sys.amiga.tech
Subject: Re: Finding The Workbench Screen
Message-ID: <3159@amiga.UUCP>
Date: 1 Dec 88 22:35:27 GMT
References: <1982@van-bc.UUCP>
Reply-To: jimm@cloyd.UUCP (Jim Mackraz)
Organization: Commodore-Amiga Inc, Los Gatos CA
Lines: 45

In article <1982@van-bc.UUCP> lphillips@lpami.van-bc.UUCP (Larry Phillips) writes:
)
)> How can I find the screen structure for the current Workbench
)> Screen short of opening a window on it and then looking in
)> the Window structure? 
)
)  Easiest path for finding the WB screen is through IntuitionBase,
)FirstScreen, Flags. Just walk the screen list until you find the
)one with the Flags bit ($0001) set. This is the WB. It's always
)been first whenever I've looked.
)
)-larry


Very terrible, Larry, on several counts.  (Not that you, yourself, are a
terrible person, he disclaimed, but that this advice is quite so.)

1) The Workbench screen is only FirstScreen when it's frontmost.

2) The identifier SCREENTYPE is four bits.  You would check to
   see if (Flags & SCREENTYPE) == WBENCHSCREEN;  Bit 0 is set for
   custom screens, too (no wonder it was always the first screen).

3) Now that you have your happy pointer to the Workbench screen (if lucky),
   it can be closed at any time, leaving you indirecting through free
   memory.  Nice.   ("Oh, but how often will that happen?" the hacker asked.)

   This is why GetScreenData() makes a copy of the screen, but be
   aware that pointers found in the copy are not guaranteed.

4) You forgot to stress the importance of protecting your walk down a shared
   list.  One uses LockIBase() for this.


Your code is broken, Pal.  With advice like this, who needs Multifinder?

Maybe next time.

	jimm

-- 
	Jim Mackraz, I and I Computing	  
	amiga!jimm	BIX:jmackraz
Opinions are my own.  Comments regarding the Amiga operating system, and
all others, are not to be taken as Commodore official policy.