[an error occurred while processing this directive]

HP OpenVMS Systems

ask the wizard
Content starts here

Terminals and Attached Printers? (take II)

» close window

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;
    }
 
 

answer written or last revised on ( 11-OCT-2000 )

» close window