LaserWriter PAPA Resource
Volume Number: 13 (1997)
Issue Number: 12
Column Tag: develop
LaserWriter 8.5.1: The Extended 'PAPA' Resource
by Richard Blanchard, RBI Software Systems Inc., Ingrid Kelly, Apple Computer Inc. and Chorng-Shyan Lin, RBI Software Systems Inc.
Overview
Starting with LaserWriter 8.5.1, in order to support different types of desktop printers, the 'PAPA' -8192 resource has been extended from 103 to 1024 bytes long. This TechNote discusses the additional bytes and in what way the LaserWriter 8.5.1 driver uses them.
Note: If your code relies on the size of the 'PAPA' resource, it may crash with LaserWriter 8.5.1 unless you update it to support the extended 'PAPA' resource.
The 'PAPA' Resource
The new 'PAPA' looks just like an old style 'PAPA' at the front of the resource; that is, the 'PAPA' resource begins with three packed Pascal strings representing the printer name, the network type (usually LaserWriter), and the printer's zone. After these strings comes the 4-byte network address.
The new extended 'PAPA' then adds desktop printer (DTP) data beginning at the 104th byte in the resource. The data from bytes 104 to 1024 (1-based indices) is a series of tagged blocks where each block contains a 4-byte tag, followed by a 2-byte length value, and then the actual data. A series of these tagged blocks can reside in bytes 104 to 1024.
Tag Requirements
There are a few requirements for the tagged blocks that go into the extended 'PAPA.' They are:
- The only required block in an extended 'PAPA' is the 'TAGS' tag which gives the number of valid tag blocks in the extended resource. The 'TAGS' block must be the first tag in the extended record and serves as a validity check.
- When the extended portion of the 'PAPA' contains multiple tag blocks, each block is required to start on a word (16-bit) boundary. Thus, if a tag block has an odd length, there should be a byte of padding before the start of the next tag block.
- In order to limit the number of clients that need to understand the extended 'PAPA' format, and to make it easier to change the format in the future, the SettingsLib provides routines for creating and accessing the extended 'PAPA.' Relying on the extended 'PAPA' format rather than using SettingsLib is a bad idea. For more information on SettingsLib, please see Apple's TechNote web site.
Tag Types
Tag: 'TAGS'
Value Size: sizeof(UInt16), 2 bytes
The value of the 'TAGS' block provides the number of valid tag blocks in the extended print record including itself. The 'TAGS' block must be the first tag in the extended print record; a valid extended print record must therefore begin with the byte sequence: 0x5441 0x4753 0x0002.
Tag: 'TYPE'
Value Size: sizeof(OSType), 4 bytes
This tag is optional as its contents are redundant given the PAPA zone name string. If this tag does exists, then its value must match, not literally but in meaning, the DTP type implied by the zone string. Here are the zone string mappings to 'TYPE' values:
Zone Name 'Type' Definition
String tag value
=Hld 'Hold' Creates and holds spool files. The
spool files are never processed and the
DTP is not connected to a real printer.
=Fil* '=Fil' Creates PostScript or EPS files, is
not connected to a real printer.
=Cst* '=Cst' Creates a PostScript file and then launches
an application to post-process the file.
=LPR* '=LPR' Sends a PostScript job using the
LPR protocol.
=Ird* '=Ird' Sends a PostScript job over an irda,
infrared, channel.
Valid Zone string 'PAP' Uses the AppleTalk PAP protocol to print
the job.
In the preceding mapping, the '*' in the zone name string is a wildcard which can be replaced by zero or more characters of any value. The DTP Utility uses this part of the zone name string to differentiate between DTP printers of the same type with the same name located in different folders.
Beside the tag values 'Hold', '=Fil', '=Cst', '=LPR', '=Ird', and 'PAP ,' other tag values may be added in the future for new DTP types.
Tag: 'TCP '
Value Size: variable size string
If the DTP printer type requires a TCP/IP network address, it is placed in the extended PAPA using the 'TCP ' tag. The value of the tag block is the network address of the printer either as a fully qualified network address, such as colorlaser.apple.com, or in dot format, such as 204.188.109.151.
This tag is required for DTP printers of type '=LPR.'
The length of the string is determined from the block length.
Tag: 'Q'
Value Size: variable size string.
If a DTP can use a print queue name, as can LPR DTPs, then the print queue name is placed in a tag value block of type 'Q .'
The length of the string is determined from the block length.
Summary of DTP type, zone names, and tags.
DTP Type PAPA Zone String Extended Data Tags
PAP Actual Zone Name 'TYPE' is 'PAP '
Hold " " " 'TYPE' is 'Hold'
Save to File =Fil* 'TYPE' is '=Fil'
Custom =Cst* 'TYPE' is '=Cst'
LPR =LPR* 'TYPE'is'=LPR'
'TCP'is printer's net address
'Q'is optional and is the name of
the print spooler.
InfraRed =Ird 'TYPE'is'=Ird'
Summary
This TechNote has documented the changes in the 'PAPA' resource in LaserWriter 8.5.1. Please beware if your application depends on the size of the 'PAPA' as it may no longer work with LaserWriter 8.5.1.
Further Reference
Acknowledgements
Thanks to Leticia Alarc'n, John Blanchard and Paul Danbold
Richard Blanchard has been programming LaserWriter 8 since its inception and one day hopes to finish it. Working at RBI Software Systems, Inc. Richard, from day to day, codes in C, C++, and Java and tries to draw a bead on the future of network printing.
Ingrid Kelly works in Apple’s Developer Technical Support group. She was sad to see the Blue Angels air show season end this year, but never fear, she is already counting down the days until the start of next year’s air show season. 99...98...97...
Chorng-Shyan Lin is a Macintosh developer at RBI Software Systems, Inc. He can be reached via email at lin@rbi.com.