Setting up a VISTA Printer: Difference between revisions
mNo edit summary |
Moved newer method to top of page |
||
| Line 2: | Line 2: | ||
== | === GT.M pipe for print DEVICE: === | ||
With the introduction of the pipe device to GT.M (version V5.3-003) this simple, secure, and elegant method can be used: | |||
NAME: HP-PHOTOSMART | |||
$I: <pipe> | |||
PRE-OPEN EXECUTE: X "o ""p"":(command=""lpr"")::""pipe"" s IO=""p""" | |||
POST-CLOSE EXECUTE: X "c ""p""" | |||
SUBTYPE: P-OTHER80 | |||
TYPE: OTHER | |||
Note: We use TYPE:Other rather than Host File Server. No host file needed; output will be "piped" to the default CUPS printer. Also the fancy stuff is in the PRE-OPEN EXECUTE. Thus one could do: | |||
PRE-OPEN EXECUTE: X "o ""p"":(command=""lpr -P Photosmart_@192.168.5.103 -o cpi=12 -o lpi=8 -o page-left=72"")::""pipe"" s IO=""p""" | |||
In human (ok in geekspeak), this last PRE-OPEN EXECUTE says, "Open a pipe device named "p" with the command to print to the CUPS printer named "Photosmart_@192.168.5.103" with the previously mentioned details set, and then set IO to that device." FileMan will then send his output to IO. Finally the POST-CLOSE just closes the pipe. No Linux /tmp/print.txt file to clean up. No fuss, no muss. '''What's not to love?!?!''' | |||
--[[User:JohnLeoZ|gra'pa Z]] 22:30, 12 Aug 2009 (CDT) | |||
---- | ---- | ||
''' | |||
=== VistA output to a temporary linux file: === | |||
Below is an older way of setting up a linux printer. | |||
'''Calls to Routine ^TMGPRNTR''' | |||
Here is | Here is the DEVICE file entry: | ||
NAME: S121-LAUGHLIN-LASER | NAME: S121-LAUGHLIN-LASER | ||
| Line 19: | Line 39: | ||
SUBTYPE: P-OTHER80 | SUBTYPE: P-OTHER80 | ||
TYPE: HOST FILE SERVER | TYPE: HOST FILE SERVER | ||
Here are the supporting calls to routine ^TMGPRNTR that create a file for writing, and then send the output file to the Linux lpr system | Here are the supporting calls to routine ^TMGPRNTR that create a file for writing, and then send the output file to the Linux lpr system | ||
GETJOBNM() | GETJOBNM() | ||
| Line 77: | Line 93: | ||
quit | quit | ||
---- | |||
=== '''Bare bones print via a Linux /tmp/file''' === | |||
''' | |||
On a Linux system with CUPS. | On a Linux system with CUPS. | ||
NAME: PRINTSERVER | NAME: PRINTSERVER | ||
| Line 94: | Line 106: | ||
TYPE: HOST FILE SERVER | TYPE: HOST FILE SERVER | ||
And for an elaboration of this method | And for an elaboration of this method | ||
| Line 110: | Line 120: | ||
---- | ---- | ||
Revision as of 14:06, 13 August 2009
Back to Programming VistA Issues
GT.M pipe for print DEVICE:
With the introduction of the pipe device to GT.M (version V5.3-003) this simple, secure, and elegant method can be used:
NAME: HP-PHOTOSMART
$I: <pipe>
PRE-OPEN EXECUTE: X "o ""p"":(command=""lpr"")::""pipe"" s IO=""p"""
POST-CLOSE EXECUTE: X "c ""p"""
SUBTYPE: P-OTHER80
TYPE: OTHER
Note: We use TYPE:Other rather than Host File Server. No host file needed; output will be "piped" to the default CUPS printer. Also the fancy stuff is in the PRE-OPEN EXECUTE. Thus one could do:
PRE-OPEN EXECUTE: X "o ""p"":(command=""lpr -P Photosmart_@192.168.5.103 -o cpi=12 -o lpi=8 -o page-left=72"")::""pipe"" s IO=""p"""
In human (ok in geekspeak), this last PRE-OPEN EXECUTE says, "Open a pipe device named "p" with the command to print to the CUPS printer named "Photosmart_@192.168.5.103" with the previously mentioned details set, and then set IO to that device." FileMan will then send his output to IO. Finally the POST-CLOSE just closes the pipe. No Linux /tmp/print.txt file to clean up. No fuss, no muss. What's not to love?!?!
--gra'pa Z 22:30, 12 Aug 2009 (CDT)
VistA output to a temporary linux file:
Below is an older way of setting up a linux printer. Calls to Routine ^TMGPRNTR
Here is the DEVICE file entry:
NAME: S121-LAUGHLIN-LASER
$I: <TO BE SET IN PRE-OPEN EX.>
LOCATION OF TERMINAL: Laughlin_Office
SUPPRESS FORM FEED AT CLOSE: YES
PAGE LENGTH: 70
PRE-OPEN EXECUTE: SET IO=$$GETJOBNM^TMGPRNTR()
POST-CLOSE EXECUTE: DO FINISH^TMGPRNTR("laughlin_laser")
SUBTYPE: P-OTHER80
TYPE: HOST FILE SERVER
Here are the supporting calls to routine ^TMGPRNTR that create a file for writing, and then send the output file to the Linux lpr system
GETJOBNM()
;"Purpose: To create a unique printer job name.
;" This will be used during a printing process
;" that writes the printer file to the host file system,
;" then passes file to Linux
;" printing system.
;"Output: Returns name of file to put output into
;"UNIQUE will generate a filename based on time and job number
;" i.e. 'Print-Job-628233034.tmp
;"write !,"here in GETJOBNM^TMGPRNTR",!
new cJobs set cJobs="PRINT JOBS"
new Filename set Filename=$$UNIQUE^%ZISUTL("/tmp/Print-Job.tmp")
;"Now store Filename for later transfer to Linux lpr
new index set index=$order(^TMP("TMG",cJobs,$J,""))
if index="" set index=1
set ^TMP("TMG",cJobs,$J,index)=Filename
;"write !,"Print job name will be:",Filename,!
quit Filename ;"result returned by altering Filename
FINISH(Printer)
;"Purpose: to complete the printing process by sending the now-created file
;" to Linux CUPS (the printing system).
;"Note: The lpr system itself will delete this print file when
;" done (option -r)
;"Input: Printer OPTIONAL -- the name of the linux printer to send the job to.
new cJobs set cJobs="PRINT JOBS"
new index set index=$order(^TMP("TMG",cJobs,$J,""))
new Filename set Filename=$get(^TMP("TMG",cJobs,$J,index))
close IO
kill IO(1,IO)
kill ^TMP("TMG",cJobs,$J,index)
if Filename'="" do
. new CmdStr
. set CmdStr="lpr "
. if $get(Printer)'="" set CmdStr=CmdStr_"-P "_Printer
. ;"option -r --> lpr deletes file after printing done.
. set CmdStr=CmdStr_" -r "_Filename_" &"
. ;"write !,"Here is where I call:",!,"ZSYSTEM "_CmdStr,!
. zsystem CmdStr
. ;"write "Back from zsystem. Returning to Fileman.",!
quit
Bare bones print via a Linux /tmp/file
On a Linux system with CUPS.
NAME: PRINTSERVER
$I: /tmp/vistaprint.txt
LOCATION OF TERMINAL: lpr
OPEN COUNT: 1
POST-CLOSE EXECUTE: X "ZSYSTEM ""lpr -r /tmp/vistaprint.txt"""
SUBTYPE: P-OTHER80
TYPE: HOST FILE SERVER
And for an elaboration of this method
NAME: HP-PHOTOSMART
$I: <TO BE SET IN PRE-OPEN EXECUTE>
PRE-OPEN EXECUTE: S IO="/tmp/"_$J_"print.txt"
POST-CLOSE EXECUTE: X "ZSYSTEM ""lpr -P Photosmart_@192.168.5.103 -r /tmp/""_$J_""print.txt"""
SUBTYPE: P-OTHER80
TYPE: HOST FILE SERVER
Note: This DEVICE does not require the calls to ^TMGPRNTR. And, by exposing the lpr call in the POST-CLOSE EXECUTE, it allows more flexibility. For example, this relatively simple change will direct output to the default CUPS printer with 12 characters/inch, 8 lines/inch and a 1 inch left margin. :
POST-CLOSE EXECUTE: X "ZSYSTEM ""lpr -o cpi=12 -o lpi=8 -o page-left=72 -r /tmp/""_$J_""print.txt"""