TweetFollow Us on Twitter

March 94 - Print Hints

Print Hints

TRACKING QUICKDRAW GX MESSAGES

PETE ("LUKE") ALEXANDER

[IMAGE 032-035_Print_Hints_rev1.GIF]

In this column, I'd like to bring a tool called MessageWatcher to your attention. This tool, which is provided on this issue's CD, will help you understand the messages sent to your QuickDraw GX printer driver or printing extension when an application prints a document through the QuickDraw GX system.

A LITTLE BACKGROUND
develop Issue 15 gave an overview of QuickDraw GX in the article "Getting Started With QuickDraw GX" and discussed the QuickDraw GX messaging system in "Developing QuickDraw GX Printing Extensions." You can also learn about QuickDraw GX printing and messaging inInside Macintosh: QuickDraw GX Printing Extensions and Drivers . If you've read these and don't need a refresher, you can just skip to the next section.

QuickDraw GX's extensible printing architecture makes writing printer drivers easier than ever. Easier yet is writing printing extensions, which allow you to modify the behavior of the QuickDraw GX printing system (similar to the way system extensions let you change the system by patching traps).

When an application prints through the QuickDraw GX system, QuickDraw GX either performs the requested task or sends a message (via the Message Manager) to the printer driver to perform the task. The QuickDraw GX printing system defines over 150 messages. For many tasks, QuickDraw GX provides a default implementation for the associated message, but sends a message to the driver anyway. The driver can then perform the task in its own way or massage the message parameters before forwarding the message on to the default implementation. In a printing extension, you can intercept and override any message before it gets to the printer driver.

ABOUT MESSAGEWATCHER AND OUR EXAMPLE
With over 150 messages in the QuickDraw GX printing system, it's a little difficult to follow the flow of the messages through the system or figure out their default implementation. MessageWatcher helps you with this by showing the messages being sent while an application is printing a document. This "live" view is very helpful toward understanding the calling chain and hierarchy of messages.

The MessageWatcher application and system extension are on this issue's CD. To use MessageWatcher, first drop the system extension into the System Folder and reboot; then launch the MessageWatcher application. Whenever any application initiates a print job, a window corresponding to that job will be opened in MessageWatcher and the messages sent as part of the job will scroll past. The title of each MessageWatcher window contains the internal ID of the job. (You should view the internal ID of a job similar to the way you view a file reference number today.)

The QuickDraw GX Finder printing extension (which is part of the QuickDraw GX system extension) and PrinterShare GX are treated like any other applications printing through the QuickDraw GX printing system. So they each have a print job associated with them, andMessageWatcher displays windows for them as well. If you were to create a desktop printer with the Chooser, there would also be a window for the Chooser.

As an example, we're going to print a document created and displayed by the "All Shapes with Printing" sample application, which is part of the sample code included with QuickDraw GX. This sample creates all of the shapes possible within the graphics system. Below is the code that prints the page of shapes; keep it in mind while going through the example of using MessageWatcher in the next section.

OSErr DoPrintOneCopy (WindowPtr myWindow)
{
	Str255windowTitle;
	OSErr printError = noErr;
	
	if (myWindow)
	{
		GetWTitle(myWindow, windowTitle);
		// Start sending the job. The job has the 
		// same name as our window and contains 
		// one page. This name appears in the
		// status messages sent to the desktop
		// printer.
		GXStartJob(gDocumentJob, windowTitle, 1);
		
		// Send the entire page of shapes to the
		// printer. (All the shapes being printed
		// have been collected into the GX picture
		// shape: gthePage.)
		GXPrintPage(gDocumentJob, 1, 
				GXGetJobFormat(gDocumentJob, 1), 
				gthePage);
		
		// Tell QuickDraw GX printing we're done
		// sending the job, so terminate the
		// spooling process.
		GXFinishJob(gDocumentJob);
		
		if (GXGetJobError(gDocumentJob) != noErr) 
			// Your error-handling code here!
	}
}

We're going to look at our sample application printing to a LaserWriter II SC, so the message sequence displayed by MessageWatcher contains messages that are sent to a raster printer. Note that most of the messages would be different if we were printing to a PostScript® printer or to a plotter.

Each line in a MessageWatcher window consists of a message preceded by one of the following labels: send message, send object, and send object to. These labels represent the similarly named API calls in the Message Manager -- for example, "send message" corresponds to the SendMessage call. All the "send" labels are roughly equivalent, so you'll be able to follow along well enough without distinguishing between them; if you do want more information about the Message Manager calls, see Chapter 6, "Message Manager," inInside Macintosh: QuickDraw GX Environment and Utilities .

While going through the various MessageWatcher windows in the next section, I won't bore you with a line-by-line discussion of everything displayed in each window. I'll give you the general idea behind the information presented; by checking out the documentation and trying out MessageWatcher yourself on different applications, you'll be able to figure out these details easily enough.

WHAT MESSAGEWATCHER DISPLAYS
The first time our sample application calls the QuickDraw GX printing API, the QuickDraw GX Finder printing extension initializes the default printer and then shuts down. The MessageWatcher window for this extension contains the following (the window title is shown in boldface; the ID displayed in each title will be different when you run MessageWatcher yourself):

Finder: 0x0000fac4

send object to: initialize
send object: defaultPrinter
send object to: shutDown

You'll also see PrinterShare GX start up a couple of times: The first time, it performs some general spool file and desktop printer queue management; it examines all the spool files and makes sure that the print jobs that are waiting are handled in the appropriate order. The second time it runs, it starts up the print job. The MessageWatcher window for PrinterShare GX displays this:

PrinterShare GX: 0x0000fa3c

send object to: initialize
send object: defaultPrinter
send object to: initialize
send object: defaultPrinter
send object: defaultPaperType
send object: defaultFormat
send object: defaultJob
send object: defaultPaperType
send object to: shutDown

Notice that MessageWatcher indents some of information in the window, allowing you to see the message hierarchy. For example, the above window shows that the recipient of the defaultJob message sent the message in the indented line below it, defaultPaperType.

The next application to send messages through the system is our sample application, All Shapes with Printing. In this case, we chose Print One Copy from the File menu of the application to start the printing process. The application starts by setting up various default printing structures associated with the print job.

All Shapes with Printing: 0x00990c

send object to: initialize
send object: defaultPrinter
send object to: initialize
send object: defaultPrinter
send object: defaultPaperType
send object: defaultFormat
send object: defaultJob
	send object: defaultPaperType

Now we'll see the actual messages sent to print a document. Our sample application is ready to start up the print job and create the spool file. It uses GXPrintPage to print the document; you'll see the startJob and finishJob messages in the MessageWatcher window because GXPrintPage sends these messages in its default implementation. Next, the data contained on the page is spooled to disk. Finally, the print job is finished, and the spool file is closed and waiting for PrinterShare GX to find it and send it to the printer.

send object: startJob
	send message: createSpoolFile
	send object: jobStatus
send object: printPage
	send message: StartPage
		send object: jobStatus
	send message: finishPage
		send message: spoolPage
			send message: spoolData
			send message: spoolData
			send message: spoolData
			send message: spoolData
			send message: spoolData
send object: finishJob
	send message: completeSpoolFile
		send object: spoolResource
	send object: jobStatus
send object to: shutDown

The QuickDraw GX printing system is now ready to send the data contained in the spool file to the printer. PrinterShare GX starts by checking the status of the printer and then writing (that is, sending) the data. It continues to write the data and check the device status until all the data is sent. If a status check were to reveal that an error had occurred, the error would be available via GXGetJobError to the driver or extension (not to the application, which is usually out of the printing process at this point). Once all the data has been sent to the printer, PrinterShare GX checks the status of the printer one last time, makes sure the print job was successful, closes the spool file, and shuts down. We now have a piece of paper coming out of the printer.

PrinterShare GX: 0x00092520

send message: getDeviceStatus
send message: writeData
	send message: getDeviceStatus
		lots of writeData and getDeviceStatus
		messages to send the data to the printer
	send message: writeData
	send message: checkStatus
send object: jobStatus
send object: closeSpoolFile
send object to: shutDown

The MessageWatcher window for the QuickDraw GX Finder printing extension shows the messages it receives to update the status information being displayed in the desktop printer's window. In this case, the status is updated six times during the process of printing the document. To see exactly what status information is being sent to the desktop printer's window, you could open the window yourself and take a look. Remember, the messages will be slightly different for different types of printers -- PostScript, raster (QuickDraw based), and plotter.

Finder: 0x000912dc

send object: writeStatusToDTPWindow
send object: writeStatusToDTPWindow
send object: writeStatusToDTPWindow
send object: writeStatusToDTPWindow
send object: writeStatusToDTPWindow
send object: writeStatusToDTPWindow

WATCH OUT NOW . . .
Following the flow of messages through the QuickDraw GX printing system will give you a better understanding of the calling chain and hierarchy of messages that are sent while a document is being printed. With MessageWatcher, you have the power to peek into the world of QuickDraw GX messaging. Happy exploring!

THE RETURN OF 'STR ' (-8192)

In the Print Hints column in Issue 13 of develop , I talked about the disappearance of 'STR ' (-8192) and'PAPA' (-8192) resources from a system running QuickDraw GX and how your application should be prepared to handle this situation. The 'PAPA' (-8192) resource is still gone, but the 'STR ' (-8192) resource, containing the name of the default printer driver, has returned. Unfortunately, there are a few applications that require this resource to be present to run correctly -- in some cases, to run at all. Since we wanted old applications to have the highest possible compatibility while printing through a QuickDraw GX system, we put the resource back. However, as mentioned in Issue 13, it's still not a good idea to depend on the information in 'STR ' (-8192).

REFERENCES

  • Inside Macintosh: QuickDraw GX Printer Drivers and Extensions  and Inside Macintosh: QuickDraw GX Environment and Utilities.  On-line versions accompany QuickDraw GX releases; printed manuals will soon be available (Addison-Wesley, 1994).
  • "Getting Started With QuickDraw GX" by Pete ("Luke") Alexander and "Developing QuickDraw GX Printing Extensions" by Sam Weiss, develop  Issue 15.
  • "Print Hints: Looking Ahead to QuickDraw GX" by Pete ("Luke") Alexander, develop Issue 13.

PETE ("LUKE") ALEXANDER will tell you that life at Apple is hard. He spends long days (and frequent nights) with smart people trying to figure out what the right thing is and how to make it happen. Then he gets sent all over the world to tell people about what's new and happening. Last year Luke went to London and walked around the streets for ten hours trying to fend off jet lag and punk rockers, to Madrid where he had an unforgettable chocolate shake, to Milan where he saw the basement of the Apple building and tried not to take it personally that they wouldn't let him near a window, to Munich and Frankfurt where he finally understood why Germans gush about their beer, and to Sweden where he gave his QuickDraw GX talk in a discotheque filled with engineers who couldn't get the beat. After these whirlwind tours, Luke soars above the stress in his glider, but only occasionally takes an Apple Evangelist along, since they seem to think they've got connections up there and are forever telling him how to fly. Yes, life at Apple is hard, but after five years, Luke's beginning to get the hang of it. *

Buried deep within QuickDraw GX is an About box. The exercise of how to get to this box is left for the reader. *

Thanks to Hugo Ayala, Tom Dowdy, and Dave Hersey for reviewing this column. *

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Chromium 64.0.3282.167 - Fast and stable...
Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all Internet users to experience the web. Version 64.0.3282.167: [806388] High CVE-2018-6056:... Read more
Parallels Desktop 13.3.0 - Run Windows a...
Parallels allows you to run Windows and Mac applications side by side. Choose your view to make Windows invisible while still using its applications, or keep the familiar Windows background and... Read more
Bookends 13.0.6 - Reference management a...
Bookends is a full-featured bibliography/reference and information-management system for students and professionals. Bookends uses the cloud to sync reference libraries on all the Macs you use.... Read more
macOS 10.13.3 Supplemental Update 1.0 -...
macOS High Sierra Supplemental Update includes security improvements to Safari and WebKit to mitigate the effects of Spectre. Version 1.0: Update fixes an issue where using certain character... Read more
ffWorks 1.0.6 - Convert multimedia files...
ffWorks (was iFFmpeg), focused on simplicity, brings a fresh approach to the use of FFmpeg, allowing you to create ultra-high-quality movies without the need to write a single line of code on the... Read more
Adobe Acrobat 18.011.20035 - Powerful PD...
Acrobat DC is available only as a part of Adobe Creative Cloud, and can only be installed and/or updated through Adobe's Creative Cloud app. Adobe Acrobat DC with Adobe Document Cloud services is... Read more
Adobe Acrobat Reader 18.011.20035 - View...
Adobe Acrobat Reader allows users to view PDF documents. You may not know what a PDF file is, but you've probably come across one at some point. PDF files are used by companies and even the IRS to... Read more
EtreCheck 4.0.3 - For troubleshooting yo...
EtreCheck is an app that displays the important details of your system configuration and allow you to copy that information to the Clipboard. It is meant to be used with Apple Support Communities to... Read more
Yummy FTP Pro 2.0 - $29.99
Yummy FTP Pro is an advanced Mac file transfer app which provides a full-featured professional toolkit combined with blazing speeds and impeccable reliability, so whether you want to transfer a few... Read more
Opera 51.0.2830.34 - High-performance We...
Opera is a fast and secure browser trusted by millions of users. With the intuitive interface, Speed Dial and visual bookmarks for organizing favorite sites, news feature with fresh, relevant content... Read more

Latest Forum Discussions

See All

Check out these 5 games that are a lot l...
So you're in love with Minecraft, but you're looking for something else to play as well? You've come to the right place then, because this list is all about games that are a bit like Minecraft. Some of them, more than others. [Read more] | Read more »
Our top 5 characters from casual RPG Cre...
Creature Quest definitely lives up to its name with a host of collectible creatures based on fantasy tales and world mythologies. To celebrate Creature Quest’s first birthday, we’re going to lay out what we think are the five best characters in the... | Read more »
Around the Empire: What have you missed...
Did you know that Steel Media has a whole swathe of other sites dedicated to all aspects of mobile gaming? Sure you'll get the very best iPhone news, reviews, and opinions right here at 148Apps, but we don't want you missing out on a single piece... | Read more »
All the best games on sale for iPhone an...
Oh hi there, and welcome to our round-up of the best games that are currently on sale for iPhone and iPad. You thought I didn't see you there, did you, skulking behind the bushes? Trust me though, the bushes aren't where the best deals are. The... | Read more »
The Battle of Polytopia Guide - How to H...
A new update just released for The Battle of Polytopia (formerly Super Tribes), which introduces online multiplayer. For all the fans of Midjiwan’s lite take on Civilization, this is certainly welcome news, but playing online isn’t as easy and... | Read more »
Here are the very best mobile games to p...
It's Valentine's Day! Did you get loads of cards and chocolates and other tacky, simple expressions of human affection? Did you send out tat because you find it almost impossible to express emotion unless there's a section dedicated to it at your... | Read more »
Florence (Games)
Florence 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: Florence is an interactive storybook from the award-winning lead designer of Monument Valley about the heart-racing highs and... | Read more »
Purrfect Date (Games)
Purrfect Date 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: Cats are a lil’ like marmite. Either you absolutely head-over-heels love’ em, or… nahhh, who are we kidding?! Everyone... | Read more »
More monsters to collect and evolve in C...
A laid-back mix of RPG and TCG, Creature Quest is all about building your deck, evolving your creatures and winning in battle. It’s the creation of VC Mobile, set up by Might and Magic producer Jon Van Caneghem. There are elements of that classic... | Read more »
Check out this awesome hands-on with the...
Well, PlayerUnknown's Battlegrounds has come out on mobile. This isn't a clone, this isn't a riff on the battleroyale mechanics of the game, it's the official mobile port by Tencent. But there's a little bit of a hitch. [Read more] | Read more »

Price Scanner via MacPrices.net

Apple refurbished Mac minis in stock again st...
Apple has restocked Certified Refurbished Mac minis starting at $419. Apple’s one-year warranty is included with each mini, and shipping is free: – 1.4GHz Mac mini: $419 $80 off MSRP – 2.6GHz Mac... Read more
Tuesday MacBook Deals: $250 off 15″ 2.9GHz Ma...
Adorama has the Silver 15″ 2.9GHz Apple MacBook Pro on sale today for $250 off MSRP. Shipping is free, and Adorama charges sales tax for residents in NY & NJ only: – 15″ 2.9GHz Silver MacBook Pro... Read more
Save up to $350 with these Apple Certified Re...
Apple has a full line of Certified Refurbished iMacs available for up to $350 off original MSRP. Apple’s one-year warranty is standard, and shipping is free. The following models are available: – 27... Read more
B&H offers $200 discount on Silver 15″ Ma...
B&H Photo has Silver 15″ Apple MacBook Pros on sale for $200 off MSRP. Shipping is free, and B&H charges sales tax for NY & NJ residents only: – 15″ 2.8GHz Touch Bar MacBook Pro Silver (... Read more
12″ Apple iPad Pro Sale of the Year! Models u...
B&H Photo has 12″ #iPad Pros on sale for up to $150 off MSRP. Shipping is free, and B&H charges sales tax in NY & NJ only: – 12″ 64GB WiFi iPad Pro: $719 $80 off MSRP – 12″ 256GB WiFi... Read more
Deals on 32GB 9″ iPads: Up to $50 off MSRP, s...
B&H Photo has 2017 9.7″ 32GB iPads on sale for $299 including free shipping plus NY & NJ sales tax only. Their price is $30 off MSRP, and it’s currently the lowest price available for these... Read more
15″ 2.2GHz Retina MacBook Pro available for o...
Apple has Certified Refurbished 15″ 2.2GHz Retina MacBook Pros available for $1699. That’s $300 off MSRP for this model, and it’s the lowest price available for a 15″ MacBook Pro currently offered by... Read more
13″ 3.1GHz/256GB Silver Touch Bar MacBook Pro...
Amazon has the Silver 13″ 3.1GHz/256GB Touch Bar MacBook Pro (MPXX2LL/A) on sale for $1649.99 including free shipping. Their price is $150 off MSRP, and it’s the lowest price available for a new 13″... Read more
Saturday Sale: Amazon offers 13″ 1.8GHz/256GB...
Amazon has the 13″ 1.8GHz/256B Apple MacBook Air on sale today for $250 off MSRP including free shipping: – 13″ 1.8GHz/256GB MacBook Air (MQD42LL/A): $949.99, $250 off MSRP Their price is the lowest... Read more
Roundup of Apple Certified Refurbished 12″ Ma...
Apple has Certified Refurbished 2017 12″ Retina MacBooks available for $200-$240 off the cost of new models. Apple will include a standard one-year warranty with each MacBook, and shipping is free.... Read more

Jobs Board

*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
Strategist, *Apple* Media Products, Content...
# Strategist, Apple Media Products, Content and Marketing Job Number: 113399632 Santa Clara Valley, California, United States Posted: 20-Feb-2018 Weekly Hours: 40.00 Read more
*Apple* Store Leader - Retail District Manag...
Job Description:Job SummaryAs more and more people discover Apple , they visit our retail stores seeking ways to incorporate our products into their lives. It's your Read more
*Apple* Retail - Multiple Positions - Apple,...
Job Description:SalesSpecialist - Retail Customer Service and SalesTransform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.