LaserWriter PAPA Resource
Volume Number: 13
Issue Number: 12
Column Tag: develop
LaserWriter 8.5.1: The Extended 'PAPA'
by Richard Blanchard, RBI Software Systems Inc., Ingrid Kelly, Apple Computer Inc.
and Chorng-Shyan Lin, RBI Software Systems Inc.
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
• Apple's TechNote web site at
http://devworld.apple.com/dev/technotes.shtml.
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.