![]() |
![]() 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; }
|