$ BKGVFY = F$VERIFY(0) !******Start of BACKGROUND******
$!*DOC+
$!*
$!* Procedure : BACKGROUND.COM
$!*
$!* Abstract : Invoke Commands in Background
$!*
$!* Prototype : @MYDCL:BACKGROUND "RUN PROG1" "@COMFIL" "RUN PROG2"
$!*
$!* Description: This utility is used to run background spawned jobs. It
$!* will return control after all of the jobs have run.
$!*
$!* Note: Requires GRPNAM or SYSNAM Privilege
$!*
$!* Parameters : P1 = Background Command (Required)
$!* P2 = Background Command (Optional)
$!* P3 = Background Command (Optional)
$!* P4 = Background Command (Optional)
$!* P5 = Background Command (Optional)
$!* P6 = Background Command (Optional)
$!* P7 = Background Command (Optional)
$!* P8 = Background Command (Optional)
$!*
$!* Change Control Log:
$!*
$!* Who Date Description
$!* --------------- ---------- -----------
$!* Scott Kelbell 02/16/2010 Initial version
$!*
$!*DOC-
$ !
$ ! VALIDATION
$ !
$ IF P1 .EQS. "" .OR. P1 .EQS. "HELP" .OR. P1 .EQS. "?" THEN EXIT
$ IF F$PRIVILEGE("GRPNAM")
$ THEN
$ BKGPRIV = "GROUP"
$ ELSE
$ IF F$PRIVILEGE("SYSNAM")
$ THEN
$ BKGPRIV = "SYSTEM"
$ ELSE
$ WRITE SYS$OUTPUT "%BACKGROUND-F-IPRV, insufficient priv (GRPNAM)"
$ EXIT
$ ENDIF
$ ENDIF
$ !
$ ! INITIALIZATION
$ !
$ BKGN = "BKG" + F$UNIQUE() ! Background Logical Prefix
$ BKGFIL = "SYS$LOGIN:" + BKGN ! Background File Prefix
$ BKGCNT = 0 ! Parameter Counter
$ !
$ ! MAINLINE
$ !
$ LOOP:
$ IF BKGCNT .EQ. 8 THEN GOTO LOOP_WAIT
$ BKGCNT = BKGCNT + 1
$ IF P'BKGCNT' .NES. "" ! For each parameter
$ THEN
$ BKGLOG = BKGFIL + ".LOG_" + F$STRING(BKGCNT)
$ CREATE/FDL=NL: 'BKGFIL'.TMP_'BKGCNT' ! Create the command procedure
$ OPEN/APPEND 'BKGN' 'BKGFIL'.TMP_'BKGCNT'
$ BKGLNM = BKGN + "_" + F$STRING(BKGCNT)
$ WRITE 'BKGN' "$ SET VERIFY"
$ WRITE 'BKGN' "$ ! Background Job #", P'BKGCNT', " ", F$TIME()
$ WRITE 'BKGN' "$ SET NOON"
$ WRITE 'BKGN' "$ DEFINE/NOLOG/", BKGPRIV, " ", BKGLNM, " RUNNING"
$ WRITE 'BKGN' "$ ", P'BKGCNT'
$ WRITE 'BKGN' "$ DEFINE/NOLOG/", BKGPRIV, " ", BKGLNM, " FINISHED"
$ WRITE 'BKGN' "$ EXIT ! End of Background Job"
$ CLOSE 'BKGN'
$ DEFINE/'BKGPRIV' 'BKGN'_'BKGCNT' INITIALIZED
$ SPAWN/NOWAIT/OUTPUT='BKGLOG'/NOLOG @'BKGFIL'.TMP_'BKGCNT'
$ GOTO LOOP
$ ENDIF
$ BKGCNT = BKGCNT - 1
$ !
$ ! WAIT LOGIC
$ !
$ LOOP_WAIT:
$ CURLOG = BKGN + "_" + F$STRING(BKGCNT)
$ IF F$TRNLNM("''CURLOG'") .NES. "FINISHED"
$ THEN
$ WAIT 00:00:05
$ GOTO LOOP_WAIT
$ ENDIF
$ DEASSIGN/'BKGPRIV' 'BKGN'_'BKGCNT'
$ DELETE/NOLOG/NOCONFIRM 'BKGFIL'.TMP_'BKGCNT';*
$ BKGCNT = BKGCNT - 1
$ IF BKGCNT .GT. 0 THEN GOTO LOOP_WAIT
$ !
$ ! EXIT LOGIC
$ !
$ EXIT:
$ BKGVFY = F$VERIFY(BKGVFY) !******End of BACKGROUND******