Products   Support   Download   Contact

SETTING UP TO PRINT FROM WINDOWS NT TO SCRIPTSERVER QUEUES RUNNING ON DEC OPENVMS

Contents | Index | About the Icons

Abstract

If your Digital Equipment Corporation (DEC) OpenVMS system has a TCP/IP stack that can be configured with an LPD listener, then you can pass print jobs from Microsoft Windows NT (or any other operating system that implements the LPR client side of the LPD protocol, such as Unix) through to VMS queues.

This technical memo deals specifically with MultiNet's TCP/IP implementation, but others should be similar.

The Components that need to be Configured

You will need to set up:

You may need to additionally install TCP/IP printing services and a PostScript driver or PPD on your NT Server.

Setting up the ScriptServer Queue

Although ScriptServer does provide some functionality with PCL-only printers, best results occur when printing to PostScript printers. For this reason and because of some issues on the NT side, for the purposes of this explanation you should set up a ScriptServer queue that points to a PostScript printer. An existing ScriptServer queue will do. A ScriptServer queue which is PostScript-ready will have one or more of characteristics 7,8 and 9 at sites which use characteristics. You can check this with SHOW QUEUE/FULL:

$ SHOW QUEUE/FULL HYDRO
Printer queue HYDRO, idle, on SQUALL::"hydro.graysoft.com", mounted form DEFAULT
<ScriptServer V5.1-1 Queue on HP LaserJet 4 Plus "Hydro" [idle]>
/BASE_PRIORITY=4 /CHAR=(4,6,9,10,11,20,21,22,23,24,25,26,27,28,29,30,31,32,33,
34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55)
/DEFAULT=(FEED,FORM=DEFAULT) /LIBRARY=SSV$DEVCTL Lowercase /OWNER=[1,4]
/PROCESSOR=SSV$SMB /PROTECTION=(S:M,O:D,G:R,W:S)

Setting up MultiNet's LPD Listener

For this demonstration we set up the LPD listener (or server) under TGV MultiNet V3.5 Rev B-X on OpenVMS AXP 7.0.

By default the LPD listener is enabled when MultiNet is installed, but only the local host (the machine that the listener is running on) has access.

Granting access from other hosts

Run the MultiNet Server Configuration Utility:

$ MULTINET CONFIG/SERVERS

Set your context for LPD configuration:

SERVER-CONFIG> SELECT LPD
[The Selected SERVER entry is now LPD]

Add the host TCP/IP address of your NT server:

SERVER-CONFIG> SET ACCEPT-HOSTS
Delete address "IP-204.96.79.252" ? [NO]
You can now add new addresses for LPD. An empty line terminates.
Add Address:
204.96.79.253
Add Address:

Refresh the "hot" configuration:

SERVER-CONFIG> RESTART

Setting a default username

By default MultiNet's LPD listener will queue jobs using the same username as that with which the job was submitted under NT. This has good and bad points. If your VMS usernames correspond to the NT ones, then you can do printing chargeback using the VMS Accounting facility. However if the usernames do not correspond, your users will not be able to print. In that case, you need to set up a default username for the print jobs to be submitted under.

That process looks something like this, presuming you have a VMS user named "NTUSER":

$ MULTINET CONFIG
NET-CONFIG> SET LPD-DEFAULT-USERNAME NTUSER

The change won't take effect until the next reboot. To get it working right away, define an additional logical name:

$ DEF/SYS/EXEC MULTINET_LPD_DEFAULT_USERNAME NTUSER

Setting up the NT Server Queue

The next thing to do is to set up a printer on your NT server. This discussion assumes you're logged in to NT Server 4.0.

NOTE: You must have TCP/IP Print Services installed and started.

From the Start menu, choose Settings and then Printers.

You should now see a window with the known printers, and an additional item, "Add a printer". Double-click on "Add a printer".

On the first screen where you choose how the printer is connected, make sure that "My Computer" is selected. The printer is going to be hosted on this node as far as your NT domain is concerned.

On the second screen, you need to associate the queue with an LPR port. First click on Add Port.. Choose LPR Port from the list and then click New Port… For the name or address of the server providing LPD, enter the domain name or TCP/IP address of the VMS system. For the name of the printer or print queue, enter the name of the ScriptServer print queue.

After this you will need to choose and configure a driver. (You will probably want to have your NT Server installation CD-ROM handy when you do this). Be sure to choose a PostScript driver. We urge you to read the next section on drivers.

A Discussion Concerning Device Drivers under NT Server 4.0

Unfortunately device drivers under NT Server 4.0 are not always what they seem, in our experience. For instance the HP Laserjet 4M Plus driver does not generate PostScript output, in spite of the fact that PostScript is an extra-cost option in this printer. Additionally, resist the easy conclusion that you're printing to some particular type of printer; you're not, you're printing to a network queue. So choose a printer driver that generates clean unadorned PostScript; we've found that earlier-model Apple LaserWriters fit this bill nicely.

Yes, the printer properties will not necessarily match what is available on the actual printer; but that should be a side issue for a proof of concept. At the moment we don't provide a PPD specifically for ScriptServer. You can choose one of the existing ones supplied with NT Server 4.0, or even modify one to suit your needs.

How do you know if you've chosen well? The two basic guidelines are:

How can you tell? The best way is to create some simple document with WordPad and then print it to a file (there's a checkbox in the print dialog for this purpose). Once you've printed to a file, open the resulting .PRN file with WordPad and take a look at it.

PCL with additional PJL commands

Here is a sample of a PCL print job, with some additional PJL commands at the beginning. PCL is a rendering language, analogous to PostScript; you won't see PCL and PostScript mixed in the same .PRN file. PJL however is a printer configuration language created by HP. You may find that your driver is inserting PJL, or something similar, at the beginning and end of what is otherwise a perfectly passable PostScript file.

The first three lines of this file are PJL commands. The remainder is the PCL to print the job. It consists of escape sequences and the text of the test file, "this is a test…":

_%-12345X@PJL SET PAGEPROTECT=AUTO
@PJL SET RESOLUTION=600
@PJL ENTER LANGUAGE=PCL
_E_*t600R_&u600D_*r0F_&l0O_&l0S_&l0H_&l2a8c1E_*p0x0Y_*c0t5760x7656Y_&l1X_*b0M
_(19U_(s16901t0b0s10v1P_*p600X_*p555Ythis is a test...__E_%-12345X

Good clean PostScript

This is good clean PostScript. Notice that the first line starts with %!PS-Adobe.

%!PS-Adobe-3.0
%%Title: Output.prn
%%Creator: Windows NT 4.0
%%CreationDate: 14:28 9/28/1997
%%Pages: (atend)
%%BoundingBox: 16 9 597 784
%%LanguageLevel: 1
%%DocumentNeededFonts: (atend)
%%DocumentSuppliedFonts: (atend)
%%EndComments
%%BeginProlog
%%BeginResource: procset NTPSOct95
/NTPSOct95 100 dict dup begin/bd{bind def}bind def/ld{load def}bd/ed{exch def}
bd/a{currentpoint}bd/c/curveto ld/d/dup ld/e/eofill ld/f/fill ld/tr/translate
ld/gr/grestore ld/gs/gsave ld/j/setlinejoin ld/L/lineto ld/M/moveto ld/n
/newpath ld/cp/closepath ld/rm/rmoveto ld/sl/setlinewidth ld/sd/setdash ld/g
/setgray ld/r/setrgbcolor ld/s/stroke ld/t/show ld/aw/awidthshow ld/im
/imagemask ld/MS{moveto show}bd/SF{findfont exch scalefont setfont}bd/SM{cmtx
setmatrix}bd/MF{findfont exch makefont setfont}bd/CM{/cmtx matrix currentmatrix
def}bd/B{M exch dup 0 rlt exch 0 exch rlt neg 0 rlt}bd/CB{B cp eoclip}bd/EA{1
index 0/G0 put 4 string 1 1 4 -1 roll{3 copy neg exch cvs dup 0 71 put cvn 3 -1
roll exch put}for pop}bd/rlt/rlineto ld/L2?/languagelevel where{pop
languagelevel 2 ge}{false}ifelse def end def
%%EndResource
%%EndProlog
%%BeginSetup
[{0
/languagelevel where{pop languagelevel 2 ge}{false}ifelse
{1 dict dup/JobTimeout 4 -1 roll put setuserparams}
{statusdict/setjobtimeout get exec}ifelse
}stopped cleartomark
[{240
/languagelevel where{pop languagelevel 2 ge}{false}ifelse
{1 dict dup/WaitTimeout 4 -1 roll put setuserparams}
{statusdict/waittimeout 3 -1 roll put}ifelse
}stopped cleartomark
/#copies 1 def
[{
%%BeginFeature: *PageSize Letter
statusdict /lettertray get exec
%%EndFeature
} stopped cleartomark
%%EndSetup
NTPSOct95 begin
%%Page: 1 1
NTPSOct95 /PageSV save put
16 784 translate 72 300 div dup neg scale
0 0 transform .25 add round .25 sub exch .25 add round .25 sub exch itransform translate
n
1799 44 309 267 B
1 g
f
%%IncludeFont: Courier
[42 0 0 -42 0 0]/Courier MF
0 g
(this is a test...)309 300 MS
showpage
PageSV restore
%%Trailer
%%DocumentNeededFonts:
%%+ Courier
%%DocumentSuppliedFonts:
end
%%Pages: 1
%%EOF
_
© 2020 GrayMatter Software Corporation