XNSPrintingUIDoc.tioga
Copyright © 1986 by Xerox Corporation. All rights reserved.
Bill Jackson (bj) November 8, 1986 9:15:45 pm PST
XNSPrintingUI
CEDAR 6.1 — FOR INTERNAL XEROX USE ONLY
XNSPrintingUI
Commands for using an XNS Print Service
Bill Jackson
© Copyright 1986 Xerox Corporation. All rights reserved.
Abstract: XNSPrintingUI supplies a user interface to procedures exported by the Printing Courier Program which is available on product printers (8044's, 8045's, and 4050's) 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: GetPrintProperties, GetPrintStatus, SendIPMaster, XNSPrintRequestWatcher. XNS, Anacapa, Courier, NCP, late-night-hackery, Print Service, Sirocco, Aux-Procs
XEROX  Xerox Corporation
   Palo Alto Research Center
   3333 Coyote Hill Road
   Palo Alto, California 94304

For Internal Xerox Use Only
i. 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.
ii. UserProfile Tags
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.
UserProfile Tags
BANNER: ROPE ~ "Hardcopy.Banner";  -- ""
CFNAME: ROPE ~ "Hardcopy.CFName";  -- "No File Name"
COPYCOUNT: ROPE ~ "Hardcopy.CopyCount"; -- 1
CREATEDATE: ROPE ~ "Hardcopy.CreateDate"; -- BasicTime.nullGMT
IPPRINTER: ROPE ~ "Hardcopy.InterpressPrinter"; -- "Huh? -- no printer!"
KEY: ROPE ~ "Hardcopy.Key";  -- 0
MEDIUM: ROPE ~ "Hardcopy.Medium";  -- "paper"
PIGEONHOLE: ROPE ~ "Hardcopy.PigeonHole"; -- senderName
PAGEFIRST: ROPE ~ "Hardcopy.PageFirst";  -- 1
PAGELAST: ROPE ~ "Hardcopy.PageLast";  -- 177777B (max)
PRINTSIZE: ROPE ~ "Hardcopy.PrintSize";  -- 0
PRIORITY: ROPE ~ "Hardcopy.Priority";  -- "normal"
STAPLED: ROPE ~ "Hardcopy.Stapled";  -- FALSE
TWOSIDED: ROPE ~ "Hardcopy.TwoSided";  -- TRUE
AUTOOPEN: ROPE ~ "HardcopyWatcher.AutoOpen"; -- FALSE
1. Introduction to Printing on product servers
Printer types and locations
Perfector
Perfector is a rather unique beast here at PARC. It is a print server built out of an Anacapa print engine with an LSI-11 based network processor. The printer itself is registered as [Warning Appearance Errors:Parc:Xerox], and has limited interpress functionality (xx subset).
In order to enhance the functionality of this print service, a separate server was acquired which runs the "PassThru Print Service" and decomposes documents into a simpler form which can be handled by "Warning Appearance Errors". This service acts as if it were an normal print service and is available as [Perfector:Parc:Xerox]. After decomposition, the documents are send to the printer and appear in the output tray as if they had been sent directly.
Walking up to either to determine the status of your print job is tricky business, and I won't discuss it here. Check with the software support folks if you need help.
8044's & 8045's
804x's are the most prevalent interpress printers. Around PARC we a bunch of them, they are listed in [Indigo]<Registrar>ParcPhoneList.txt, here are a few:
Service Name  Location
[Scripto:Parc:Xerox]  Bld 35 # 2106 -- with Clover/Quoth
[Quill:Parc:Xerox]  Bld 35 # 2400 -- in the middle of Pod 4
[Papermate:Parc:Xerox] Bld 35 # 3307 -- with Wonder
[Bic:Parc:Xerox]   Bld 34 # 86 -- last seen near the Fab line
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.
% TiogaToInterpress XNSPrintingUIDoc.tioga "AnacapaCedar" style
Reading []<>Temp>XNSPrintingUIDoc.tioga!10 . . . [1] [2] [3] [4] [5]
[]<>Temp>XNSPrintingUIDoc.interpress!2 written.
% SendIPMaster -h Perfector XNSPrintingUIDoc.interpress
Sending [Oriskany]<Cedar>Temp>XNSPrintingUIDoc.interpress to Perfector
Service: [Perfector:Parc:Xerox]
RequestID: [0, 43520, 29765, 5477, 9077]
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]
2. 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 check to see if the contents of the file is an actual master, so this is actually a 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.
% ? SendIPMaster
///Commands/SendIPMaster <IPMaster> [-c <copies> -h <serviceName> -1 -2 -f <firstPageNumber> -l <lastPageNumber>]
Transmit a master to an XNS based printer.
Switches:
-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}
% 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]
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
///Commands/GetPrintStatus {Printer}*
Find out the status of an XNS based printer.
Switches: <none yet>
{implementor: ^GetPrintStatusImpl.GetPrintStatusProc}
% GetPrintStatus Quill
Service: [Quill:PARC:Xerox]
PrinterStatus: [
(0) ServiceStatus(spooler): available
(1) ServiceStatus(formatter): available
(2) ServiceStatus(printer): available
(3) ServiceStatus(media): Media: [
(0) Medium(paper): Paper(knownSize): usLetter]
(0) Medium(paper): Paper(knownSize): usLetter]]
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
///Commands/GetPrintProperties {Printer}*
Find out the properties of an XNS based printer.
Switches: <none yet>
{implementor: ^GetPrintPropertiesImpl.GetPrintPropertiesProc}
% GetPrintProperties Quill
Service: [Quill:PARC:Xerox]
PrinterProperties: [
(0) Property(ppmedia): Media: [
(0) Medium(paper): Paper(knownSize): usLetter
(1) Medium(paper): Paper(knownSize): usLetter]
(1) Property(ppstaple): FALSE
(2) Property(pptwoSided): FALSE]
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
///Commands/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): ""]