| $ verification = 'F$VERIFY(0)'
$ !+
$ ! DECWNET.COM
$ ! (by Karl Puder)
$ !-
$ ! formerly
$ ! DECW_NET.COM
$ ! for the CDADEV Mixed Interconnect VAXcluster
$ !
$!
$ ON WARNING THEN GOTO end
$ ON CONTROL_Y THEN GOTO end
$ !
$ CLOSE /ERROR=already_closed $net_link
$already_closed:
$
$ GOTO 'f$mode()'
$
$interactive:
$batch:
$ IF F$LOCATE(":",P1) .EQ. F$LENGTH(P1) THEN GOTO do_net
$! If there is a colon in the nodename, we fall through to here.
$! This path runs the application locally, and sets the display to the
$! specified node. (Just the reverse of the other code path).
$
$! Since we can't make a mailbox from DCL, send the command information in a
$! .TMP file. The detached process' procname tells it the name of the temporary
$! file.
$
$ pid = F$GETJPI("","PID")
$ tmp = "sys$scratch:d''pid'.tmp"
$ OPEN/WRITE t 'tmp'
$ file = F$SEARCH(tmp)
$ procname = F$PARSE(file,,,"NAME") + F$PARSE(file,,,"VERSION")
$
$ nodename = F$EDIT(F$ELEMENT(0,":",P1), "COLLAPSE, UPCASE, UNCOMMENT")
$ command_line = F$EDIT(P2 + " " + P3 + " " + P4 + " " + P5 + " " -
+ P6 + " " + P7 + " " + P8, -
"COMPRESS, TRIM, UNCOMMENT")
$ IF nodename .EQS. "" THEN GOTO end
$ IF command_line .EQS. "" THEN GOTO end
$ WRITE t nodename
$ WRITE t command_line
$ CLOSE t
$
$ ! See label "other" for the receiving end of this "call".
$ RUN/DETACH/AUTHORIZE SYS$SYSTEM:LOGINOUT -
/INPUT='F$ENVIRONMENT("PROCEDURE")/OUTPUT=decwnet.log-
/PROCESS_NAME="''procname'"
$ GOTO end
$
$do_net:
$ nodename = F$EDIT(P1, "COLLAPSE, UPCASE, UNCOMMENT")
$ command_line = F$EDIT(P2 + " " + P3 + " " + P4 + " " + P5 + " " -
+ P6 + " " + P7 + " " + P8, -
"COMPRESS, TRIM, UNCOMMENT")
$ IF nodename .EQS. "" THEN GOTO end
$ IF command_line .EQS. "" THEN GOTO end
$ !
$ OPEN /WRITE $net_link 'nodename'::"0=DECWNET"
$ WRITE $net_link command_line
$ CLOSE $net_link
$ !
$ GOTO end
$ !
$other:
$ set verify
$ procname = F$GETJPI("", "PRCNAM")
$ file = F$PARSE(procname, "sys$scratch:.tmp")
$ OPEN/READ t 'file
$ READ t nodename
$ READ t command_line
$ CLOSE t
$ DELETE 'file
$ username = F$EDIT(F$GETJPI("", "USERNAME"), "TRIM")
$ prefix = ":"
$ GOTO set_and_do
$
$network:
$ set verify
$ sys_net = F$TRNLNM("SYS$NET")
$ show logical sys$net
$!! write sys$error "sys_net=�''sys_net'�" ! cannot write those characters !
$ !
$ OPEN /READ /ERROR=close_link $net_link SYS$NET
$ READ /ERROR=close_link $net_link command_line
$ CLOSE /ERROR=close_link $net_link
$ write sys$error "command_line=�''command_line'�"
$ !
$ username = F$ELEMENT(1, "=", F$ELEMENT(0, "/", sys_net))
$ IF username .NES. F$EDIT(F$GETJPI("", "USERNAME"), "TRIM") THEN GOTO end
$ prefix = "_"
$ !
$ nodename = F$ELEMENT(0, ":", sys_net)
$ !
$set_and_do:
$ IF F$LENGTH(username) .GT. 11 THEN username = F$EXTRACT(0, 11, username)
$ !
$ suffix = 0
$suffix_loop:
$ suffix = suffix + 1
$ SET NOON
$ SET PROCESS /NAME='prefix''username'_'suffix'
$ IF .NOT. $STATUS THEN GOTO suffix_loop
$ SET ON
$ !
$ IF nodename .EQS. F$TRNLNM("SYS$NODE") - "::" .OR. nodename .EQS. "0"
$ THEN
$ SET DISPLAY /CREATE /TRANSPORT=LOCAL
$ ELSE
$ SET DISPLAY /CREATE /TRANSPORT=DECNET /NODE='nodename'
$ ENDIF
$ !
$ 'command_line'
$ !
$ GOTO end
$ !
$close_link:
$ CLOSE /ERROR=end $net_link
$ !
$
$end:
$ IF verification THEN SET VERIFY
$ exit
|