March 93 - PRINT TIPS
PRINT TIPS
LOOKING AHEAD TO QUICKDRAW GX
PETE ("LUKE" ALEXANDER
With the release of QuickDraw GX later this year, there are a few changes in store for print land. In
this column, I'm going to talk about two of these changes -- the disappearance of the PDEF 10
resource from the QuickDraw GX LaserWriter driver, and the disappearance of the 'STR ' (-8192)
and 'PAPA' (-8192) resources from a system running QuickDraw GX.
Like most changes, the fact that these resources are going away is both good news and bad news. The
good news is that printing is going to work much better in the GX world than it does today. For one
thing, the new printer driver architecture provides functionality that used to be unavailable through
the Printing Manager, which is why people got involved in directly grabbing resources in the first
place. The bad news is that if youare currently grabbing these resources, you're going to have some
problems running under QuickDraw GX, and you need to decide now how you're going to deal with
this.
Before we get into solutions, however, let's back up a bit, and answer the question, What's a PDEF,
anyway? A PDEF is just a code resource for printer drivers. All printer drivers contain multiple
PDEFs, each of which implements a piece of the driver's functionality, like displaying dialog boxes or
alerts. PDEF 10 contains the printer access protocol (PAP) code that enables a LaserWriter driver to
communicate with a network printer. (For details about the interface to PAP, see Chapter 10,
"Printer Access Protocol," inInside AppleTalk.) Some applications that need the PAP code have
acquired it by sucking PDEF 10 out of the LaserWriter driver. Before Apple put together its PAP
software licensing package, grabbing PDEF 10 like this was a quick and easy way to get what you
needed. But it's an approach that's unsupported by Apple and that has always carried the seeds of
compatibility problems.
So what should you do if you're currently grabbing PDEF 10 out of the LaserWriter driver? You've
got the following possible solutions:
- Continue to grab PDEF 10, but make sure you're prepared to handle failure gracefully when you
can't get it. Basically, you'll need to let the user know that your application isn't compatible with
the version of system software being used -- that is, the QuickDraw GX-based system. Not a very
user-friendly solution, but that might be OK for your application.
- If all you need to do is download a PostScriptTM file to the LaserWriter, use the PostScriptHandle
PicComment and a basic print loop. Most applications need to do a lot more than send a bunch of
PostScript code down the pipe -- for instance, they need to set the characteristics of the
PostScript printer -- but if your application's needs are really this limited, it can be happy in the
GX world. If you're interested in this approach, take a look at the Technical Notes "A Printing
Loop That Cares . . ." and "PicComments -- The Real Deal." You can also look at the
PostScriptHandleDemo snippet in the Snippets folder on theDeveloper CD Seriesdisc.
- Write your own PAP interface files. This is a relatively time-consuming operation, but it gives you
total ownership of the code, and your application is unlikely to break with future system software
releases. Quite a few developers have had success with this approach.
- License Apple's PAP library code -- the same library that's used within the LaserWriter Font
Utility. The latest version (v. 1.5) of the library improves on the last version and has more
complete documentation. If you're interested in licensing this library, please contact
Software Licensing
Apple Computer, Inc.
20525 Mariani Avenue, M/S 38-I
Cupertino, CA 95014
AppleLink: SW.LICENSE
Phone: (408)974-4667
- Use Apple's LaserWriter Font Utility and add your custom features to it. In System 7, the
LaserWriter Font Utility can handle drop-in enhancements called UTILs. UTILs take care of all
the communication issues for you, and they give you quite a bit of power and flexibility. If you're
interested in this approach, take a look at "PostScript Enhancements for the LaserWriter Font
Utility" in Issue 10 ofdevelop.
At this point, you're probably wondering which solution is the best for you. It all depends on your
requirements. From my point of view, any solution besides the first is acceptable if it will keep your
users happy and keep you compatible with future system software releases.
Now let's turn to the disappearance of the 'STR '
(-8192) and 'PAPA' (-8192) resources. On a non-QuickDraw GX system, the 'STR ' resource
contains the name of the currently chosen printer driver, while the 'PAPA' resource contains the
name and network address of the current PAP printer. Because QuickDraw GX will allow more than
one active printer at a time, these resources will become obsolete.
Why is this a problem? Only because some applications currently grab the 'STR ' and 'PAPA'
resources to automatically select a printer without going through the Chooser. Under QuickDraw
GX, it will be possible to redirect a print job to another printer via the Printing Manager's public
API. So new applications and applications revised to work under QuickDraw GX will be able to
programmatically redirect print jobs on the fly in a clean, supported manner.
If your application isn't GX-smart, the simplest way to deal with the disappearance of the 'STR ' and
'PAPA' resources is probably just to remove your application's feature of circumventing the Chooser.
If your application absolutely requires this functionality, however, make sure that when these
resources aren't available, you tell the user to go use the Chooser. This way your application will
print on a QuickDraw GX system without any problems.
This column has looked at a couple of compatibility problems that can emerge when non-
QuickDraw GX applications run under QuickDraw GX, and also at some of the ways that you can
avoid these problems. As long as you're prepared to implement one of the solutions recommended
here, your application will run just fine under QuickDraw GX. And on the bright side, QuickDraw
GX is going to allow your application to access and control a vast amount of information at print
time. QuickDraw GX will provide the API your application requires to take care of all the user's
printing needs without having to cruise through printer driver or system resources. You asked for it,
and soon you'll have it!
REFERENCES
- Inside AppleTalk (Addison-Wesley, 1990), Chapter 10, "Printer Access Protocol."
- Macintosh Technical Notes "PicComments -- The Real Deal" (formerly #91), "A Printing Loop That Cares
. . . " (formerly #161), and "Printer Access Protocol Q&As" under "Using PAP & code for finding printer
driver under System 7."
- "PostScript Enhancements for the LaserWriter Font Utility" by Bryan K. Ressler, develop Issue 10.
PETE ("LUKE") ALEXANDER In the winter, Luke likes to hit the cross-country ski tracks. There you'll find him striding across
meadows and down hills on long strips of fiberglass. One day he agreed to a "small" uphill ski at a friend's urging, only
to discover halfway into it a virtually vertical two-mile climb! Weighing the risks of descending uncontrollably from there
versus continuing on, Luke forged ahead, arriving at the summit an hour (and a lot of side stepping) later. Since then, he's
been particularly wary of
e-mails beginning "Dear Luke, I have this small printing problem."*
Grabbing the PAP driver from PDEF 10 is described both in the Macintosh Technical Note "Printer Access Protocol Q&As"
under "Using PAP & code for finding printer driver under System 7" and in the article by Mike Schuster called "Laser Print
DA for PostScript" in MacTutor Volume 2, Number 2.*
To find out whether the QuickDraw GX Printing Manager is installed, call the Gestalt function with the 'pmgr' selector. *
Thanks to Hugo Ayala, Tom Dowdy, Dave Hersey, Jim Luther, and Scott ("Zz") Zimmerman for reviewing this column. *