XNSPrintingUIDoc.tioga
Copyright Ó 1986, 1987, 1989 by Xerox Corporation. All rights reserved.
Bill Jackson (bj) February 24, 1987 8:12:37 pm PST
Tim Diebert: February 6, 1987 4:44:45 pm PST
Rick Beach, November 28, 1987 1:34:42 pm PST
gbb February 15, 1989 6:23:09 pm PST
XNSPRINTINGUI
CEDAR 7.0 — FOR INTERNAL XEROX USE ONLY
XNSPrintingUI
Commands for using an XNS Print Service
Bill Jackson
© Copyright 1986, 1987 Xerox Corporation. All rights reserved.
Abstract: XNSPrintingUI supplies a user interface and a client interface to procedures exported by the Printing Courier Program which is available on product printer servers (8044's, 8045's, 4050's) and on the Cedar Interpress print server. The Commander Operations of SendIPMaster, GetPrintStatus, GetPrintProperties, and XNSPrintRequestWatcher are supported. I've added the manipulative interface XNSPrintRequestWatcher which allows one to check on the progress of a print request; it's just a little too hard for users to type a multi word Opaque data type at the commander, and I'd rather not invent a heuristic (since my creativity is pretty drained right now).
Created by: Bill Jackson (with credits to Jules Bloomenthal)
Maintained by: Bill Jackson <BJackson>
Keywords: Courier, fonts, Interpress, network tools, printing, Sirocco, Tioga documents, XNS
XEROX  Xerox Corporation
   Palo Alto Research Center
   3333 Coyote Hill Road
   Palo Alto, California 94304

For Internal Xerox Use Only
1. Context
Scope of the package
XNSPrintingUI is a transport mechanism which will deliver a document to a printer. Appearance of the finished product is totally dependent upon the actions of the printer with respect to the instructions supplied in the Interpress master. This document touches on some other topics, such as where printers are and example of creating Interpress masters, but for a more complete description the "truth" lies elsewhere. Hopefully there is enough here to get started, or to stimulate your memory.
2. UserProfile
Recommendations
The user profile entries Hardcopy.InterpressPrinter, Hardcopy.Stapled, Hardcopy.TwoSided, and Hardcopy.PigeonHole are recommended. In particular, it is quite helpful to define your standard Interpress printer, as all commands take advantage of the default value of this option. Most of the other values have been included for completeness, but it is clearly much easier to use command line options to alter their values for particular print requests.
CommandTool.NewUser (or BootCommands)
Alias QPrint (File) TiogaToInterpress File.IP$ ← File; SendIP -h Quoth File.IP$; Delete File.IP$
Alias Print (File) TiogaToInterpress File.IP$ ← File \"AnacapaCedar\" style; SendIP File.IP$; Delete File.IP$
CommandTool.PerLogin
CreateButton Print Print $FileNameSelection$
HardCopy options
BANNER: ROPE ~  "Hardcopy.Banner";    -- ""
COPYCOUNT: ROPE ~ "Hardcopy.CopyCount";   -- 1
FAX: ROPE ~   "Hardcopy.FaxPhoneNumber"; -- ""
IPPRINTER: ROPE ~ "Hardcopy.InterpressPrinter"; -- "Huh? -- no printer!"
KEY: ROPE ~   "Hardcopy.Key";     -- 0
MEDIUM: ROPE ~  "Hardcopy.Medium";    -- "usLetter"
PIGEONHOLE: ROPE ~ "Hardcopy.PigeonHole";   -- senderName
PAGEFIRST: ROPE ~ "Hardcopy.PageFirst";   -- 1
PAGELAST: ROPE ~  "Hardcopy.PageLast";   -- 177777B (max)
PRIORITY: ROPE ~  "Hardcopy.Priority";    -- "normal"
STAPLED: ROPE ~  "Hardcopy.Stapled";    -- FALSE
TWOSIDED: ROPE ~ "Hardcopy.TwoSided";   -- TRUE
AUTOOPEN: ROPE ~ "HardcopyWatcher.AutoOpen";-- FALSE
Be sure to quote the name of the printer option on Hardcopy.InterpressPrinter entry.
3. Introduction to Printing on product servers
Printer types and locations
Zipper
Zipper is an alias for the 4050 printer located in the pod 3 maze. A 4050 is a duplex printer (prints two-sided pages) that prints at 50 pages a minute. The xerographic print quality is excellent, producing the best laser printer output at PARC. A 4050 comes as two boxes, a printer based on the 1090 copier and a control system (ESS) based on an LSI-11 microprocessor. The 4050 is part of the 9700 family of data center printers, and as such, it inherits a number of "design features" that assume a knowledgeable operator. While adding paper and fixing paper jams on the printer are based on the 1090 copier, determine the status of the ESS is a tricky business and should be left to key operators.
The 4050 is registered as [Warning Appearance Errors:Parc:Xerox] and supports only the Interpress 3.0 Commercial Set functionality (text at 90 degree rotations, raster images and simple rectangles -- no curves, no fancy fonts).
If you choose to use the 4050 from Cedar, you should use the command InterpressToCompressedIP to create a page bitmap from your Interpress master (see InterpressConvertersDoc.tioga) and then send the commpressed Interpress master to Zipper.
If you choose to use the 4050 from ViewPoint or XDE, you should use the print service Perfector instead. Perfector is described below.
Perfector
[Perfector:Parc:Xerox] is an alternate route to the 4050 at PARC. It is a print service running on a Dandelion server that accepts Interpress masters (Interpress 2.1 reference level subset, mainly supporting ViewPoint features) and simplifies them for forwarding to Zipper. All ViewPoint and XDE users will probably prefer to use Perfector to access the 4050 printer.
Cedar Print Servers
PARC has installed several Interpress 3.0 Professional Graphics Set print servers based on the Cedar Imager and Interpress implementations. These printers will print any Interpress master generated by Cedar, ViewPoint, XDE or Interpress ToolKit applications (subject to resource limitations on the Dandelion processor, mainly virtual memory limits). Here is a list of printers near CSL.
Service Name Location
[Quoth:Parc:Xerox] Bld 35 # 2106 -- with Clover/Quoth
[Quill:Parc:Xerox] Bld 35 # 2400 -- in the middle of Pod 4
[TimsPrinter:Parc:Xerox] Bld 35 # Tim's annex -- an experimental system
8044's & 8045's
804x's are the most prevalent Interpress printers around PARC. You can find them listed under NS PRINTERS in [Indigo]<Registrar>ParcPhoneList.txt; here are a few near CSL:
Service Name Location
[Scripto:Parc:Xerox] Bld 35 # 2106 -- with Clover/Quoth
[Papermate:Parc:Xerox] Bld 35 # 3307 -- with Wonder
Some of these have Raven (2700) print engines attached and others have Banhsee (4045) engines. This should make no difference other than speed/paper capacity/blackness. The key is what version of software is on the server.
Also, there are fonts to be found just about anywhere, but there is a set of "Required Fonts" that you can normally expect to find. The software folks have the complete rundown of what is in the "Required Fonts" set, and what extra fonts have been installed on each printer.
Interpress Master Creation
Tioga documents
Well, there's a lot more about creating Interpress masters than I can hope to cover here, but here's a simple example. For more information look at TiogaImagerDoc.tioga, or contact the folks in the Imaging Group. (Caution: InterpressToCompressedIP takes a while even on a Dorado and consumes substantial disk space.)
% TiogaToInterpress XNSPrintingUIDoc.tioga
Reading []<>Users>Beach.pa>7.0>XNSPrintingUI>XNSPrintingUIDoc.tioga!2 . . . [1] [2] [3] [4] [5] [6] [7]
[]<>Users>Beach.pa>7.0>XNSPrintingUI>XNSPrintingUIDoc.interpress!2 written.
% InterpressToCompressedIP XNSPrintingUIDoc-4050.interpress ← XNSPrintingUIDoc.interpress
Reading []<>Users>Beach.pa>7.0>XNSPrintingUI>XNSPrintingUIDoc.interpress!2 . . . [1] [2] [3] [4] [5] [6] [7] []<>Users>Beach.pa>7.0>XNSPrintingUI>XNSPrintingUIDoc-4050.interpress!1 written.
% SendIPMaster -h Zipper XNSPrintingUIDoc-4050.interpress
Sending [ShangriLa]<Cedar>Users>Beach.pa>7.0>XNSPrintingUI>XNSPrintingUIDoc-4050.interpress to Zipper
Service: [Warning Appearance Errors:PARC:xerox]
RequestID: [39722, 52311, 0, 43571, 1428]
Slides
Slides are a little unique, as you want to start with the specialized form in order to have available to you some of the characters which are only available on the Interpress printers (press has a smaller character set).
% Form BitsOnPaper.tioga ← AnacapaSlides
% TiogaToInterpress BitsOnPaper.tioga
Reading []<>Temp>BitsOnPaper.tioga!6 . . . [1] [2] [3]
[]<>Temp>BitsOnPaper.interpress!9 written.
% SendIPMaster -h Perfector BitsOnPaper.interpress
Sending [Oriskany]<Cedar>Temp>BitsOnPaper.interpress to Perfector
Service: [Perfector:Parc:Xerox]
RequestID: [0, 43520, 29765, 5478, 9077]
4. Introduction to the User Interface for XNS Printing
Commander operations
SendIPMaster
A quick synopsis: SendIPMaster transmits an Interpress master to a print service (a piece of software). In actuality, nothing checks to see if the contents of the file is an actual master, so this is actually a slight deception. Furthermore, SendIPMaster knows nothing about Interpress, nothing about the imaging software on the print service side, nor what the intended appearance of the "file" actually is. The job of SendIPMaster is simply to deliver (reliably) the contents of the file in question to the printer. In order to understand what the printer is going to do with this master, you need to look at the print service documentation. It would be wonderful if everything simply printing Interpress 3.0!
% ? SendIPMaster
SendIPMaster <IPMaster> [-c <copies> -h <serviceName> -1 -2 -f <firstPageNumber> -l <lastPageNumber>]
Transmit a master to an XNS based printer.
Switches:
-1 print one-sided
-2 print two-sided
-a correct color (Lamming-Rhodes, includes -b)
-b balance grays
-c <copies> print multiple copies
-h <serviceName> print on that service
-f <firstPageNumber>
-l <lastPageNumber>
{implementor: ^SendIPMasterImpl.SendMasterProc}
% SendIPMaster -h Quill Log.ip
Sending [Oriskany]<Cedar>Users>BJackson.pa>PrintUI>Log.ip to Quill
Service: [Quill:PARC:Xerox]
RequestID: [0, 43520, 36359, 8694, 9058]
FaxIPMaster
A quick synopsis: FaxIPMaster transmits an Interpress master to a print service (a piece of software) identically to the way SendIPMaster does, but the "message" field of the protocol is filled in with an encoding of the destination phone number of the remote Fax machine, so when the document is "printed" it is actually sent over telephone lines to a fax machine somewhere out there in the *real* world.
Some notes on acceptable formats of phone numbers are in order here, but for now, the software is stupid. Suffice it to say, strings of digits work, assume anything else doesn't.
% ? FaxIPMaster
FaxIPMaster <IPMaster> [-t <telephone number> -c <copies> -h <serviceName> -1 -2 -f <firstPageNumber> -l <lastPageNumber>]
Send a master through an XNS based server to a remote FAX machine.
Switches:
-t <telephone number> FAX phone number
-c <copies> print multiple copies
-h <serviceName> print on that service
-1 print one-sided
-2 print two-sided
-f <firstPageNumber>
-l <lastPageNumber>
{implementor: ^SendIPMasterImpl.SendMasterProc}
% FaxIPMaster -h "Universal FAX:Osbu North" -t "9(415)4944241" Log.ip
Sending [Oriskany]<Cedar>Users>BJackson.pa>7.0>Printing>Log.ip to Universal FAX:Osbu North
Service: [Universal Fax:OSBU North:Xerox]
RequestID: [0, 43520, 9404, 27290, 9092]
GetPrintStatus
A quick synopsis: GetPrintStatus queries the print service to determine the present state. There are 4 interesting aspects: spooler, formatter, printer, and media. Spooler status explains the current state of the ability of ther print service to accept print requests, formatter status explains the current state of the Interpress master decomposition software, printer status explains the current state of the marking engine, and media status explains the currently available materials upon which masters can be rendered.
% ? GetPrintStatus
GetPrintStatus {Printer}*
Find out the status of an XNS based printer.
{implementor: ^GetPrintStatusImpl.GetPrintStatusProc}
% GetPrintStatus Quill
Service: [Quill:PARC:Xerox]
Spooler: available, Formatter: available, Printer: available
Media: [ [Medium(paper): Paper(knownSize): usLetter], [Medium(paper): Paper(knownSize): usLegal] ]
GetPrintProperties
A quick synopsis: GetPrintProperties queries the print service to determine the present abilites of the printer. There are 3 interesting properties: media, staple, and twoSided. Media properties describe the currently available materials upon which masters can be rendered, staple & twoSided describe the availablity of the stapling and duplex printing services.
% ? GetPrintProperties
GetPrintProperties {Printer}*
Find out the properties of an XNS based printer.
{implementor: ^GetPrintPropertiesImpl.GetPrintPropertiesProc}
% GetPrintProperties Quill
Service: [Quill:PARC:Xerox]
Staple: FALSE, TwoSided: FALSE
Media: [ [Medium(paper): Paper(knownSize): usLetter], [Medium(paper): Paper(knownSize): usLegal] ]
XNSPrintRequestWatcher
A quick synopsis: XNSPrintRequestWatcher provides the ability to create/open a manipulative interface for dealing with active print requests (documents previously transmitted to print services). More below...
% ? XNSPrintRequestWatcher
XNSPrintRequestWatcher
Create viewer to monitor and/or manipulate XNS print requests
{implementor: ^XNSPrintRequestWatcher.RequestWatcherCmd}
% XNSPrintRequestWatcher
% (either creates a viewer or opens an existing viewer)
XNSPrintRequestWatcher
Button poking
A quick synopsis: Currently, there are some bugs, and the functionality should be inhanced, but poking on the button which corresponds to a print request will query the service and display the print requests' current state. Buttons currently include <service, request id, filename>; the interesting part of a request id is the 4th word 4 which seems to be a sequentially assigned value on Services 10.0 printers. Display is via a typescript which gets logged on the file ///Temp/XNSPrintRequestWatcher.TypeScript
poke a button => a log entry
Beginning of Typescript...
Checking: [Oriskany]<Cedar>Users>BJackson.pa>PrintUI>Log.ip
RequestStatus: [
(0) JobStatus(status): completed
(1) JobStatus(statusMessage): ""]