Dear Readers,

I just got back from sabbatical and it was great: I left and could hardly remember that I
had ever worked for Apple, and now that I'm back I can hardly remember that I ever
left.  It's good, I think, to be fully where you are as you linger.

Upon my return, I wasn't quite sure how, in my advanced state of equilibrium, I was
going to find a way for drivers and clock parts to live together in a logical editorial. So
I decided to throw logic out the window and to stick with what I know: taking an analogy
and stretching it.  Here goes.

Clock parts are carefully crafted according to well-defined rules.  Along with following
the rules, creativity and craftsmanship are brought to bear, so some clocks are more
pleasing, better functioning, and longer lasting than others.  This is how it is with
drivers, too.  Respect for the rules, creativity, and craftsmanship combine to make a
driver tick.

Clock parts as a group (or a watch) keep track of the moment-by-moment passage of
time, freeing us to focus our attention on things more riveting.  Similarly, a
system-level driver lets your application focus on things more interesting (and
useful) than hardware-specific details.

So much for the analogy.  In this issue, Matt provides thorough coverage of the printer
driver: what it does, how it does it, and how to write one for the Apple II GS Zz tells
even more about what your application can do with PostScript code to avoid perils
posed by the LaserWriter driver.  And if you decide to write your own driver, you can
follow the legions before you and launch into assembly language, or you can follow
Tim's lead and try C++.

On another topic, Scott A. Williams writes:

"On page 126, I believe that the AllocHeap method call to InitZone should have
calls toGetZone and SetZone around it, like this:

THz savedZone = GetZone ();
InitZone(nil, kNumDfltMasters, limitPtr, zonePtr);
SetZone(savedZone);

"Inside Macintosh,  volume II, page 29, says, 'InitZone creates a new heap zone,
initializes its header and trailer, and makes it the current zone.' It's the 'makes it  the
current zone' part that's the problem.  Without the calls to GetZone and SetZone,
any handles or pointers created after a call to the AllocHeap method would be
allocated in the new heap created expressly for holding PtrObjects and not in the
application heap where they belong."

Well, when Scott wrote he was right, and now he's sporting a fine new  develop shirt.
When you write, you will too.

Louella Pizzuti Editor

COMMENTS We welcome timely letters to the editor, especially from readers wishing
to react to articles that we publish in develop. Letters should be addressed to Louella
Pizzuti, 20525 Mariani Ave., M/S 75-3B, Cupertino, CA 95014
(AppleLinkPizzuti1). All letters should include name and company name as well as
address and phone number. Letters may be excerpted or edited for clarity (or to make
them look like they say what we wish they did).  *

SUBSCRIPTION INFORMATION Use the order form on the last page of the journal to
subscribe to develop. Please address all subscription (and subscription-related)
inquiries to develop, Apple Computer, Inc.,P.O. Box 531, Mt. Morris, IL 61054,
(AppleLink Dev.Subs). *

BACK ISSUES Back issues of develop are available through APDA (see inside back
cover for APDA information), and are, of course, there for the browsing on each CD.  *