HP OpenVMS Systemsask the wizard |
The Question is: is there anyway I can emulate the ALL-IN-1 function PRINT_TO_PORT from VMS to allow DCL users, accessing via terminal emulation, to print diectly to the printer attached to the PC. Cheers The Answer is :
Please see topics 2490, 2680, and 4935.
Assuming the terminal or terminal emulator correctly emulates the
printer port support, the attached DCL and C example code can also
potentially provide a starting point.
$ ON Control_Y THEN Goto trap
$ ON Error THEN Goto trap
$!
$ Esc[0,7] = %X1B
$ FF[0,7] = %X0C
$ Printer_on = ESC + "[5;6i"
$!Printer_on = esc + "[5i" + esc + "[28;0s" !left margin 28
$ Printer_off = ESC + "[4i" + ESC + "[7i"
$!
$ If P1 .eqs. "" then Inquire P1 "File name"
$ COUNT = 1
$ If P2 .NES. "" Then COUNT = F$INTEGER(P2)
$ File_name = "''P1'"
$ If F$Search(File_name) .EQS. "" Then Goto Filnotfound
$!
$ Set Terminal/Nobroadcast/Page=66/Noscope/form/Notab
$!
$ Write SYS$OUTPUT Printer_on
$!Write SYS$OUTPUT FF
$!
$AGAIN:
$ Type 'P1'
$ COUNT = COUNT-1
$Done:
$ Write SYS$OUTPUT FF
$ IF COUNT .GT. 0 THEN GOTO AGAIN
$ Write SYS$OUTPUT Printer_off
$ wait 00:00:10.0
$ Set Terminal/Page=24/Broadcast/Scope/Noform/Tab
$ exit
$!
$Filnotfound:
$ Write SYS$OUTPUT "%PORT - File not found"
$ EXIT
$!
$trap:
$ count = 0
$ goto done
#module EXAMPLE "SRH X1.0-000"
#pragma builtins
/*
** COPYRIGHT (c) 1992 BY
** DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS.
** ALL RIGHTS RESERVED.
**
** THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIED
** ONLY IN ACCORDANCE OF THE TERMS OF SUCH LICENSE AND WITH THE
** INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER
** COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY
** OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY
** TRANSFERRED.
**
** THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
** AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
** CORPORATION.
**
** DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
** SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
*/
/*
**++
** Facility:
**
** Examples
**
** Version: V1.0
**
** Abstract:
**
** Example of working with the $QIO Extended Read
**
** Author:
** Steve Hoffman
**
** Creation Date: 1-Jan-1990
**
** Modification History:
**--
*/
#include <descrip.h>
#include <iodef.h>
#include <ssdef.h>
#include <stsdef.h>
#include <trmdef.h>
main()
{
unsigned long int retstat;
unsigned short int target_chan;
char *target_device = "SYS$OUTPUT";
char target_reply[255];
unsigned long int *rply;
retstat = open_target( target_device, &target_chan );
if (!$VMS_STATUS_SUCCESS( retstat )) return retstat;
retstat = write_target_with_reply( target_chan, "\033[?15n", target_reply );
if (!$VMS_STATUS_SUCCESS( retstat )) return retstat;
rply = &target_reply[2];
switch (*rply )
{
case '?10n':
printf("Printer ready\n");
break;
case '?11n':
printf("Printer not ready\n");
break;
case '?13n':
printf("No printer\n");
break;
case '?18n':
printf("Printer busy\n");
break;
default:
printf("Unrecognized response\n");
break;
}
retstat = close_target( target_chan );
if (!$VMS_STATUS_SUCCESS( retstat )) return retstat;
return SS$_NORMAL;
}
open_target( char *trgdev, unsigned short int *chn )
{
unsigned long int retstat;
struct dsc$descriptor trgdsc;
trgdsc.dsc$w_length = strlen( trgdev );
trgdsc.dsc$b_dtype = DSC$K_DTYPE_T;
trgdsc.dsc$b_class = DSC$K_CLASS_S;
trgdsc.dsc$a_pointer = trgdev;
retstat = sys$assign( &trgdsc, chn, 0, 0, 0 );
if (!$VMS_STATUS_SUCCESS( retstat )) return retstat;
return retstat;
}
close_target( unsigned short int chn )
{
unsigned long int retstat;
retstat = sys$dassgn( chn );
if (!$VMS_STATUS_SUCCESS( retstat )) return retstat;
return retstat;
}
write_target_with_reply( unsigned short int chn,
char *wrbuf, char *rdbuf )
{
unsigned long int retstat;
struct qioiosb
{
short retstat;
short terminator_offset;
char terminator_char;
char reserved;
char terminator_length;
char cursor_position;
} rdiosb, wriosb;
struct itemlist_3
{
unsigned short int itmlen;
unsigned short int itmcod;
unsigned char *itmbuf;
unsigned short int *itmrla;
} itmlst[]=
{
{
0, TRM$_ESCTRMOVR, 64, 0
},
{
0, TRM$_MODIFIERS,
TRM$M_TM_ESCAPE | TRM$M_TM_TRMNOECHO |
TRM$M_TM_NOFILTR | TRM$M_TM_NORECALL,
0
}
};
retstat = sys$qio( 0, chn,
IO$_READVBLK | IO$M_EXTEND, &rdiosb, 0, 0,
rdbuf, 255, 0, 0, itmlst, sizeof(itmlst));
if (!$VMS_STATUS_SUCCESS( retstat )) return retstat;
retstat = sys$qiow( 0, chn,
IO$_WRITEVBLK, &wriosb, 0, 0,
wrbuf, strlen(wrbuf), 0, 0, 0, 0);
if (!$VMS_STATUS_SUCCESS( retstat )) return retstat;
retstat = sys$synch(0, &wriosb );
retstat = sys$synch(0, &rdiosb );
return retstat;
}
|