10 ! ----- PRINT_FILE.FUN ----- ! ! ----- FUNCTION TO ENTER A FILE INTO A VMS PRINT QUEUE ----- ! ! ----- PASSED: ----- ! ! ----- FILESPEC = FILE SPECIFICATION TO BE PRINTED ----- ! ----- QUEUE = NAME OF VMS PRINT QUEUE TO PRINT TO ----- ! ----- COPIES = NUMBER OF COPIES TO BE PRINTED, ----- ! ----- (NEGATIVE NUMBER OF COPIES TO USE THE ----- ! ----- /DELETE PRINT QUALIFIER ON THE FILESPEC) ----- ! ! ----- RETURNED: ----- ! ! ----- PRINT_FILE = VMS EXIT STATUS ----- ! ! ----- Last Change 05/01/89 by Brian Lomasky ----- ! ! ----- Teradyne, Inc., 179 Lincoln Street, Boston, MA 02111 ----- ! ----- (617) 482-2706, x3259 ----- ! ! ----- Neither Brian Lomasky nor Teradyne, Inc. implicitly or ----- ! ----- explicitly implies this program is usable in any way. ----- ! ----- This program is released to the public domain in an ----- ! ----- "AS-IS" condition. ----- ! ! ----- Restrictions: ----- ! ----- 1) Requires VAX BASIC V2.4 or later. ----- ! ----- 2) Must be linked with JBCDEF and SJCDEF ----- ! FUNCTION LONG PRINT_FILE(STRING FILESPEC, STRING QUEUE, LONG COPIES) OPTION TYPE = EXPLICIT ! ENSURE EVERYTHING IS DECLARED EXTERNAL LONG CONSTANT JBC$_NORMAL ! NORMAL SUCCESS STATUS EXTERNAL LONG CONSTANT SJC$_DELETE_FILE ! "PRINT/DELETE" EXTERNAL LONG CONSTANT SJC$_ENTER_FILE ! CREATE A PRINT JOB EXTERNAL LONG CONSTANT SJC$_FILE_COPIES ! NUMBER OF COPIES EXTERNAL LONG CONSTANT SJC$_FILE_SPECIFICATION ! FILESPEC EXTERNAL LONG CONSTANT SJC$_NO_NOTIFY ! "PRINT/NONOTIFY" EXTERNAL LONG CONSTANT SJC$_NO_PAGINATE ! "PRINT/NOFEED" EXTERNAL LONG CONSTANT SJC$_QUEUE ! QUEUE NAME TO USE EXTERNAL LONG CONSTANT SS$_NORMAL ! NORMAL SUCCESS STATUS RECORD JBCREC ! RECORD FOR $SNDJBC VARIANT CASE WORD BUFFER_LENGTH WORD ITEM_CODE LONG BUFFER_ADDRESS LONG RETURN_LENGTH_ADDR CASE LONG LIST_TERMINATOR END VARIANT END RECORD JBCREC DECLARE WORD CONSTANT TRUE = (1% = 1%) DECLARE WORD CONSTANT FALSE = NOT TRUE DECLARE WORD COPIES_LENGTH ! LENGTH OF COPIES DECLARE LONG DELETE_QUALIFIER ! TRUE TO USE THE /DELETE QUAL DECLARE WORD FILESPEC_LENGTH ! LENGTH OF FILESPEC DIM LONG IOSB(1%) ! I/O STATUS BLOCK DECLARE WORD QUEUE_LENGTH ! LENGTH OF QUEUE DIM JBCREC SNDJBC(6%) ! RECORD FOR SYS$SNDJBCW DECLARE LONG SYS_STATUS ! VMS EXIT STATUS MAP (JBCDAT) LONG THE_COPIES, & STRING THE_FILESPEC = 79%, & STRING THE_QUEUE = 39% THE_FILESPEC = FILESPEC ! MOVE TO MAP THE_QUEUE = QUEUE ! MOVE TO MAP IF COPIES < 0% THEN THE_COPIES = -COPIES ! NUMBER OF COPIES TO PRINT DELETE_QUALIFIER = TRUE ! USE THE /DELETE QUALIFIER ELSE THE_COPIES = COPIES ! NUMBER OF COPIES TO PRINT DELETE_QUALIFIER = FALSE! NO /DELETE QUALIFIER END IF ! ----- SEND TO JOB CONTROLLER AND WAIT ----- EXTERNAL LONG FUNCTION SYS$SNDJBCW ! ----- STORE ITEM LIST FOR $SNDJBCW FUNCTION CALL ----- SNDJBC(0%)::BUFFER_LENGTH = LEN(QUEUE) SNDJBC(0%)::ITEM_CODE = SJC$_QUEUE SNDJBC(0%)::BUFFER_ADDRESS = LOC(THE_QUEUE) SNDJBC(0%)::RETURN_LENGTH_ADDR = LOC(QUEUE_LENGTH) SNDJBC(1%)::BUFFER_LENGTH = LEN(FILESPEC) SNDJBC(1%)::ITEM_CODE = SJC$_FILE_SPECIFICATION SNDJBC(1%)::BUFFER_ADDRESS = LOC(THE_FILESPEC) SNDJBC(1%)::RETURN_LENGTH_ADDR = LOC(FILESPEC_LENGTH) SNDJBC(2%)::BUFFER_LENGTH = 4% SNDJBC(2%)::ITEM_CODE = SJC$_FILE_COPIES SNDJBC(2%)::BUFFER_ADDRESS = LOC(THE_COPIES) SNDJBC(2%)::RETURN_LENGTH_ADDR = LOC(COPIES_LENGTH) SNDJBC(3%)::BUFFER_LENGTH = 0% SNDJBC(3%)::ITEM_CODE = SJC$_NO_PAGINATE SNDJBC(3%)::BUFFER_ADDRESS = 0% SNDJBC(3%)::RETURN_LENGTH_ADDR = 0% SNDJBC(4%)::BUFFER_LENGTH = 0% SNDJBC(4%)::ITEM_CODE = SJC$_NO_NOTIFY SNDJBC(4%)::BUFFER_ADDRESS = 0% SNDJBC(4%)::RETURN_LENGTH_ADDR = 0% IF DELETE_QUALIFIER THEN ! IF /DELETE WANTED: SNDJBC(5%)::BUFFER_LENGTH = 0% SNDJBC(5%)::ITEM_CODE = SJC$_DELETE_FILE SNDJBC(5%)::BUFFER_ADDRESS = 0% SNDJBC(5%)::RETURN_LENGTH_ADDR = 0% SNDJBC(6%)::LIST_TERMINATOR = 0% ELSE SNDJBC(5%)::LIST_TERMINATOR = 0% END IF SYS_STATUS = SYS$SNDJBCW(, ! EVENT FLAG NUMBER & SJC$_ENTER_FILE & BY VALUE, ! FUNCTION CODE & , ! & SNDJBC() BY REF, ! ITEM LIST & IOSB() BY REF, ! I/O STATUS BLOCK & , ! AST ADDRESS & ) ! AST PARAMETER IF SYS_STATUS <> SS$_NORMAL THEN PRINT_FILE = SYS_STATUS ! RETURN VMS STATUS ELSE ! ----- SEE IF ANY ERROR STATUS IS SET ----- SELECT IOSB(0%) CASE JBC$_NORMAL ! ----- JOB WAS PRINTED SUCCESSFULLY ----- ! ----- (RETURN VMS SUCCESS STATUS) ----- PRINT_FILE = SS$_NORMAL CASE ELSE ! ----- RETURN VMS ERROR STATUS ----- PRINT_FILE = IOSB(0%) END SELECT END IF END FUNCTION