Apple IIgs #77
Print Manager & AppleTalk Configuration Files

Written by Jim Luther (January 1990)

This Technical Note describes the Print Manager user configuration file Printer.Setup and the AppleTalk user configuration file ATInit. This Note also describes a limitation of the Print Manager call PrGetUserName, which is a result of the way configuration information is stored in the Printer.Setup file.


Printer.Setup and ATInit

What Are the Printer.Setup and ATInit Files?

The Print Manager user configuration file Printer.Setup, which is found in the System:Drivers directory of the Apple IIGS boot disk, is used by the Print Manager tool set to keep the name of the printer driver and port driver you've selected between system boots. In addition, if you've selected a network printer, Printer.Setup contains the selected printer's network address and your machine's User Name. The file format of Printer.Setup has not been published because revisions have been made, and may be made again, to the Apple IIGS System Software, which can change Printer.Setup's file format.

The AppleTalk user configuration file ATInit, which is found in the System:System.Setup directory of the Apple IIGS boot disk, is used to keep the default AppleShare startup application, the default AppleShare prefix, the default AppleTalk User Name, and the default AppleTalk printer entity name (the network printer entity used by AppleTalk's Remote Print Manager) between system boots. The file format of the ATInit file was published incorrectly in the AppleShare Programmer's Guide for the Apple IIGS. The correct file format for ATInit will be discussed later in this Note.

It is important to remember that the Print Manager tool set uses the information from the Printer.Setup file only, and that AppleTalk and AppleShare use the information contained in the ATInit file only. It is also important to note that the Print Manger tool set, which is used to print QuickDraw II graphics, and AppleTalk's Remote Print Manager (RPM), which is used to print ASCII data to network printers, are not the same thing even though both contain the words "Print Manager."

What Writes to the Printer.Setup and ATInit Files?

Before Apple IIGS System Software 5.0, Printer.Setup and ATInit were handled as completely separate configuration files. The Print Manager call PrChoosePrinter allowed you to select the printer and port drivers the Print Manager would use and wrote the printer and port driver selections to the Printer.Setup file. The AppleTalk application Chooser.II let you select the printer AppleTalk's Remote Print Manager would use and wrote the printer entity selection to the ATInit file.

With System Software 5.0 all printer selections for both the Print Manager and AppleTalk are made by using one of the Control Panel NDA's printer CDevs. All printer CDevs (e.g., DirectConnect, ATIWriter, ATLQIWriter, and ATLWriter) write the new printer and port driver selections to the Printer.Setup file. However, if the printer selected uses the AppleTalk port (i.e., the selection is made with the ATIWriter, ATLQIWriter, or ATLWriter printer CDevs), then the selected printer's network address and your User Name are written to both the Printer.Setup and the ATInit files. The DirectConnect CDev does not write any information to the ATInit file. If AppleShare is installed, then the AppleShare CDev will also write your User Name to the ATInit file.

On AppleShare file servers with the Apple II Setup option installed, the ATInit file in User folders will also be written to by the AppleShare Admin application when the Apple II startup information is set.

When are the Printer.Setup and ATInit Files Read?

The Printer.Setup file is read by the Print Manager and by the printer CDevs. The Print Manager reads the information contained in the Printer.Setup file whenever the Print Manager needs to load a printer driver or a port driver into memory. A printer CDev reads the information contained in the Printer.Setup file when that CDev is selected so it can know the current printer and port selections.

Ways the printer driver and the port driver might be unloaded and need to be loaded (which will cause Printer.Setup to be read by the Print Manager) are as follows:

An application can load one or both of the drivers (which will cause Printer.Setup to be read by the Print Manager) by making the PMLoadDriver call. The AppleTalk user configuration information contained in the ATInit file is read during system startup as part of AppleTalk's initialization.

Network Booting and Printer.Setup

When Apple IIGS computers are booted over an AppleShare network, they all share a single copy of the Printer.Setup file. That means all machines must use the same printer and port driver selections that are stored in the Printer.Setup file. If all machines are expected to be able to print using the Print Manager tool set, then the printer and port selection stored in Printer.Setup must be something that all can use. The only two options are:

The server administrator should set the default printer selection, which will be used by all machines, by using one of the Control Panel NDA's printer CDevs. Then, the access privileges to the server's System:Drivers directory should be set to "Bulletin Board" (i.e., Everyone See Folders, Everyone See Files, Owner Make Changes) so other machines cannot change the printer and port selection.

Using User Names

The User Name We Use

You may have noticed that you see your AppleTalk User Name in the Control Panel's AppleShare and printer CDevs. AppleShare allows a machine's User Name to be up to 31 characters long. The CDevs read the User Name from the ATInit file. The AppleShare and printer CDevs also store the complete User Name back into the ATInit file.

PrGetUserName (Almost)

The Printer.Setup file sets aside 15 characters for the User Name so the printer CDevs store only the first 15 characters of the User Name in the Printer.Setup file. This limitation is leftover from early Print Manager implementations of the PrChoosePrinter call, which limited the User Name length to 15 characters.

Since the Print Manager gets the User Name it uses from the Printer.Setup file, the User Name returned by the Print Manager call PrGetUserName will be truncated to 15 characters if the complete AppleTalk User Name is 16 characters or longer.

Where to Get the Complete User Name

If your application needs the complete default AppleTalk User Name, it can be read from the ATInit file. When an Apple IIGS is booted from a local disk volume that has AppleShare or at least one of the AppleTalk network printers installed, ATInit will be found in the System:System.Setup directory of the local boot volume. When an Apple IIGS is booted over AppleTalk, ATInit will be found in the Users:YourName:Setup directory of the AppleShare boot volume (where YourName is the User Name used to log on to the boot server).

The ATInit File Format

The AppleShare Programmer's Guide for the Apple IIGS shows the file format of the ATInit file as it is stored on an AppleShare boot volume. However, the file format of ATInit is not always as shown in that manual. In all cases, ATInit will contain the three required data fields UserName, PrinterFlags, and PrinterTuple at the end of the file. Before those data fields, ATInit may also contain executable code or additional data fields. Since the three required data fields are directly before ATInit's end-of-file (EOF), you can find them relative to ATInit's EOF using the displacements listed in Table 1.


Displacement to
ATInit EOF          Size      Field Name    Description
_____________________________________________________________________________
133                 33 Bytes  UserName      A Pascal-type string containing 
                                            the default User Name.  It 
                                            consists of a length byte 
                                            followed by up to 31 bytes of 
                                            ASCII data and a single, unused 
                                            byte.  This field is always 33 
                                            bytes long.
100                 Byte      PrinterFlags  This is the Flags field used by 
                                            the Remote Print Manager's 
                                            default network printer.
99                  99 Bytes  PrinterTuple  This field specifies the name of 
                                            the default network printer used 
                                            by the Remote Print Manager.  The 
                                            PrinterTuple field is in standard 
                                            Name Binding Protocol (NBP) 
                                            format.  This field is always 99 
                                            bytes long.
_____________________________________________________________________________

                 Table 1 - Offsets of Required Data Fields

If the ATInit file is on an AppleShare server, it will have 6 additional data fields (PathVolID, PathDirID, Path, PrefixVolID, PrefixDirID, and Prefix) directly before the three required data fields. These fields can also be found relative to ATInit's EOF using the displacements listed in Table 2.


Displacement to
ATInit EOF          Size      Field Name    Description
_____________________________________________________________________________
275                 Word      PathVolID     The Volume ID number of the 
                                            user's AppleTalk startup 
                                            application.
273                 Long      PathDirID     The Directory ID number of the 
                                            user's AppleTalk startup 
                                            application.
269                 65 Bytes  Path          The Pathname of the user's 
                                            AppleTalk startup application.
204                 Word      PrefixVolID   The Volume ID number of the 
                                            user's AppleTalk default prefix.
202                 Long      PrefixDirID   The Directory ID number of the 
                                            user's AppleTalk default prefix.
198                 65 Bytes  Prefix        The user's AppleTalk default 
                                            prefix.
_____________________________________________________________________________

                 Table 2 - Offsets of Optional Data Fields

The displacements in Tables 1 and 2 can be used with the GS/OS SetMark call to move the file mark to the beginning of any of the above fields. The SetMark call's base field should be set to $0001 so the mark will be set equal to EOF minus the displacement.

Further Reference


This and all of the other Apple II Technical Notes have been converted to HTML by Aaron Heiss as a public service to the Apple II community, with permission by Apple Computer, Inc. Any and all trademarks, registered and otherwise, are properties of their owners.