The heart of VMS printing is the print queue. Users place their print jobs on a queue, which feeds them to a printer one at a time. Each terminal queue sends jobs to one printer. The queues use a shared set of print forms which contain information on how to print the document, such as margins, width, space between page breaks, and what kind of paper is required (so, in theory, VMS can tell the operator to load custom paper when a user asks for it).
Usually, the default mounted form will be something nice, like 1PI (letter-size paper, long side up, 80 columns across, 66 lines per page). You can print using a different form, if necessary: to print the document FOO.TXT on the queue CRPRT using the form 1PX (Landscape 66X158), the user types
To see the characteristics of the form 1PX, type
The VAX responds with
Note that these forms only tell VMS how to send text to the printer (put line feeds every 158 chars and form feeds every 66 lines), and don't actually send the control codes to the printer. To do this, VMS has text library files containing "setup modules" which are documents containing printer codes in the printer's native language (PCL-5 for Hewlett-Packard printers, PostScript for Laserwriters, etc.) which tell the printer how to behave for each print job. The definition of each form contains information on what setup module to use: in the previous example, this is the statement /SETUP=(LJ1PX).
These setup modules are kept in text libraries in the SYS$LIBRARY directory. When initializing a print queue, the system manager tells the VAX which setup library it should use for that printer. You can see what library a queue is using by typing
For example,
The /LIBRARY statement says that this queue is getting its setup modules from the library LJDEVCTL2.TLB (Note that you must omit the .TLB extender when assigning libraries to queues! Otherwise...)
Notice that the library that the modules come from is defined by the queue, but the setup module is determined only by the form used. This enables the same form to be used on different printers. Suppose you have two queues named Apple and Orange. Apple uses the text library APPLE.TLB, orange uses ORANGE.TLB. Suppose you want to produce strawberry tarts out of both printers, but the two printers speak totally different languages. You can create a 2 different modules called TART_MODULE and put one in each library: the one in ORANGE.TLB tells how to make a tart on the Orange printer, the one in APPLE.TLB is specific to Apple printers. Then define a form (TART) which uses the setup module TART_MODULE. Since the library where the module resides is specified by the queue, not the form, if you print using the TART form on both queues, each printer will get the setup module specific to it. Forms at Carleton are designed this way: the user never needs to worry about what sort of printer he/she is using: the form 1PI looks the same from every queue. Or at least, it's supposed to.
The VAX responds:
Make a note of what setup library the queue uses (LJDEVCTL2.TLB in this case).
When the queue is idle, warn the users and then stop it by typing
The /RESET qualifier is important: the queue won't let you play with its setup
library unless you use it. Similarly, use SHOW QUEUE/FULL to find out if any
other queues use the same library and STOP/QUEUE/RESET them as well. Then
insert the text file you created into the library by using the command
The text file MIRROR.TXT becomes a module called MIRROR inside the LJDEVCTL2 text library.
Now restart all the queues you stopped (so the users don't get annoyed) using the command
Finally, we have to define a new form to associate with this setup module.
Do this in the following manner:
This creates a new form called MIRROR. Each form must have a unique but arbitrary number (4321, here) associated with it. Once this is done, the command
should print the file CREDITORS.CHK on the check printer in mirror-image
type.
How to modify an existing setup module
First, extract the old module out of the text library (you
This creates a file called MIRROR.TXT, but leaves the old MIRROR module still in the library. Edit mirror.txt as necessary, then stop/reset the queues and issue a command like
Then restart the queues.
Then create a new queue with matching qualifiers:
Make sure that you omit the extender .TLB from the filename of the library in the /LIBRARY= qualifier.
A common error condition while making setup modules is to have an error message appear on the terminal while printing and a message like "Module !AS not found..." (I forget the exact syntax) on a paper ejected from the printer. This occurs when the setup module defined in the form does not exist in the library specified by the queue. This can happen if you misname the module in the forms definition, misname the library in the queue definition, or accidentally put a .TLB extender in the library file specification of the queue definition.
To get a list of all the setup modules in a setup library, type