10 ! ----- SUBMIT_FILE.FUN ----- ! ! ----- FUNCTION TO ENTER A FILE INTO A VMS BATCH QUEUE ----- ! ----- (OPTIONALLY, FOR A SPECIFIC USERNAME (CMKRNL PRIVILEGE ----- ! ----- REQUIRED)) ----- ! ! ----- IF THE PASSED ENTRY_NUMBER IS 1, THEN THE FILESPEC WILL ----- ! ----- BE DELETED AFTER IT HAS EXECUTED ----- ! ! ----- PASSED: ----- ! ! ----- FILESPEC = FILE SPECIFICATION TO BE SUBMITTED ----- ! ! ----- QUEUE = NAME OF VMS BATCH QUEUE TO SUBMIT TO ----- ! ! ----- ENTRY_NUMBER = 1 TO APPEND THE /DELETE QUALIFIER ----- ! ----- TO THE FILESPEC BEING SUBMITTED, ----- ! ----- 0 (OR ANYTHING ELSE) TO NOT APPEND ----- ! ----- ANY /DELETE QUALIFIER TO THE ----- ! ----- FILESPEC BEING SUBMITTED ----- ! ! ----- THE_USERNAME = USERNAME ON BEHALF OF WHOM THE ----- ! ----- SUBMIT REQUEST IS MADE (CMKRNL ----- ! ----- PRIVILEGE REQUIRED), OR BLANK TO ----- ! ----- SUBMIT THIS JOB UNDER THE CURRENT ----- ! ----- PROCESS'S USERNAME ----- ! ! ----- LOG_DIR = DEVICE/DIRECTORY SPECIFICATION OF WHERE ----- ! ----- THE LOG FILE IS TO BE LOCATED (OR BLANK ----- ! ----- TO USE THE NORMAL DEFAULT OF THE ----- ! ----- USERNAME'S SYS$LOGIN: DIRECTORY) ----- ! ! ----- RETURNED: ----- ! ! ----- SUBMIT_FILE = VMS EXIT STATUS (SS$_NORMAL IF ----- ! ----- SUCCESS) ----- ! ! ----- ENTRY_NUMBER = ENTRY NUMBER OF SUBMITTED JOB, IF ----- ! ----- SUBMIT_FILE RETURNS SS$_NORMAL ----- ! ! ----- JOB_STATUS = RETURNED JOB STATUS FROM SUBMIT REQUEST --- ! ! ----- 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 SUBMIT_FILE(STRING FILESPEC, STRING QUEUE, & LONG ENTRY_NUMBER, STRING JOB_STATUS, STRING LOG_DIR, & STRING THE_USERNAME) OPTION TYPE = EXPLICIT ! ENSURE EVERYTHING IS DECLARED EXTERNAL LONG CONSTANT JBC$_NORMAL ! NORMAL SUCCESS STATUS EXTERNAL LONG CONSTANT SJC$_DELETE_FILE ! "SUBMIT/DELETE" EXTERNAL LONG CONSTANT SJC$_ENTER_FILE ! CREATE A BATCH JOB EXTERNAL LONG CONSTANT SJC$_ENTRY_NUMBER_OUTPUT ! RETURN ENTRY # EXTERNAL LONG CONSTANT SJC$_FILE_SPECIFICATION ! FILESPEC EXTERNAL LONG CONSTANT SJC$_JOB_STATUS_OUTPUT ! RETURN JOB STAT EXTERNAL LONG CONSTANT SJC$_LOG_SPECIFICATION ! LOG FILE SPEC EXTERNAL LONG CONSTANT SJC$_NO_LOG_SPOOL! "SUBMIT/NOPRINT" EXTERNAL LONG CONSTANT SJC$_QUEUE ! QUEUE NAME TO USE EXTERNAL LONG CONSTANT SJC$_USERNAME ! USERNAME 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 ENTRY_NUMBER_LENGTH! LENGTH OF THE_ENTRY_NUMBER DECLARE WORD FILESPEC_LENGTH ! LENGTH OF FILESPEC DIM LONG IOSB(1%) ! I/O STATUS BLOCK DECLARE WORD JOB_STATUS_LENGTH ! LENGTH OF THE_JOB_STATUS DECLARE WORD LAST_ARRAY_INDEX ! LAST ARRAY INDEX USED DECLARE WORD LOG_FILE_LENGTH ! LENGTH OF THE_LOG_FILE DECLARE WORD QUEUE_LENGTH ! LENGTH OF QUEUE DIM JBCREC SNDJBC(8%) ! RECORD FOR SYS$SNDJBCW DECLARE LONG SYS_STATUS ! VMS EXIT STATUS DECLARE WORD USERNAME_LENGTH ! LENGTH OF THE_USERNAME MAP (SMBSND) LONG THE_ENTRY_NUMBER, & STRING THE_FILESPEC = 79%, & STRING THE_QUEUE = 39%, & STRING THE_JOB_STATUS = 255%, & STRING THE_LOG_FILE = 255% THE_FILESPEC = FILESPEC ! MOVE TO MAP THE_QUEUE = QUEUE ! MOVE TO MAP THE_LOG_FILE = LOG_DIR ! MOVE TO MAP ! ----- 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 = 255% SNDJBC(2%)::ITEM_CODE = SJC$_JOB_STATUS_OUTPUT SNDJBC(2%)::BUFFER_ADDRESS = LOC(THE_JOB_STATUS) SNDJBC(2%)::RETURN_LENGTH_ADDR = LOC(JOB_STATUS_LENGTH) SNDJBC(3%)::BUFFER_LENGTH = 4% SNDJBC(3%)::ITEM_CODE = SJC$_ENTRY_NUMBER_OUTPUT SNDJBC(3%)::BUFFER_ADDRESS = LOC(THE_ENTRY_NUMBER) SNDJBC(3%)::RETURN_LENGTH_ADDR = LOC(ENTRY_NUMBER_LENGTH) SNDJBC(4%)::BUFFER_LENGTH = 0% SNDJBC(4%)::ITEM_CODE = SJC$_NO_LOG_SPOOL SNDJBC(4%)::BUFFER_ADDRESS = 0% SNDJBC(4%)::RETURN_LENGTH_ADDR = 0% LAST_ARRAY_INDEX = 4% ! ----- SEE IF USER WANTS TO DELETE THE FILESPEC ----- IF ENTRY_NUMBER = 1% THEN SNDJBC(5%)::BUFFER_LENGTH = 0% SNDJBC(5%)::ITEM_CODE = SJC$_DELETE_FILE SNDJBC(5%)::BUFFER_ADDRESS = 0% SNDJBC(5%)::RETURN_LENGTH_ADDR = 0% LAST_ARRAY_INDEX = 5% END IF ! ----- SEE IF USER SPECIFIED A USERNAME TO SUBMIT JOB FOR ----- IF THE_USERNAME <> " " THEN LAST_ARRAY_INDEX = LAST_ARRAY_INDEX + 1% SNDJBC(LAST_ARRAY_INDEX)::BUFFER_LENGTH = & LEN(THE_USERNAME) SNDJBC(LAST_ARRAY_INDEX)::ITEM_CODE = SJC$_USERNAME SNDJBC(LAST_ARRAY_INDEX)::BUFFER_ADDRESS = & LOC(THE_USERNAME) SNDJBC(LAST_ARRAY_INDEX)::RETURN_LENGTH_ADDR = & LOC(USERNAME_LENGTH) END IF ! ----- SEE IF USER SPECIFIED A LOG FILE SPECIFICATION ----- IF LOG_DIR <> "" THEN LAST_ARRAY_INDEX = LAST_ARRAY_INDEX + 1% SNDJBC(LAST_ARRAY_INDEX)::BUFFER_LENGTH = & LEN(LOG_DIR) SNDJBC(LAST_ARRAY_INDEX)::ITEM_CODE = & SJC$_LOG_SPECIFICATION SNDJBC(LAST_ARRAY_INDEX)::BUFFER_ADDRESS = & LOC(THE_LOG_FILE) SNDJBC(LAST_ARRAY_INDEX)::RETURN_LENGTH_ADDR = & LOC(LOG_FILE_LENGTH) END IF SNDJBC(LAST_ARRAY_INDEX + 1%)::LIST_TERMINATOR = 0% 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 ! ----- RETURN ANY JOB STATUS TO CALLING PROGRAM ----- JOB_STATUS = LEFT(THE_JOB_STATUS, JOB_STATUS_LENGTH) IF SYS_STATUS <> SS$_NORMAL THEN SUBMIT_FILE = SYS_STATUS ! RETURN VMS STATUS ELSE ! ----- SEE IF ANY ERROR STATUS IS SET ----- SELECT IOSB(0%) CASE JBC$_NORMAL ! ----- JOB WAS SUBMITTED SUCCESSFULLY ----- ! ----- (RETURN VMS SUCCESS STATUS) ----- SUBMIT_FILE = SS$_NORMAL ! ----- RETURN ENTRY NUMBER OF THE ----- ! ----- SUBMITTED JOB ----- ENTRY_NUMBER = THE_ENTRY_NUMBER CASE ELSE ! ----- RETURN VMS ERROR STATUS ----- SUBMIT_FILE = IOSB(0%) END SELECT END IF END FUNCTION