[net.eunice] Interactive VMS jobs from the cshell: solutions.

cbeshers@ccnfld.UUCP (Cliff Beshers) (10/24/84)

I and my cohorts have done some research on this topic.  As far as I can
find out, there are two ways of running interactive VMS jobs from the
Eunice csh, and neither of them are really pretty.

In 'The Handshake', the Eunishare newsletter, somebody came up with
a clever idea.  You see, when you use the vms command within the shell,
it attaches a disk file to SYS$INPUT, the disk file gives a control-z
and back you go to the shell.  SYS$OUTPUT is directed at your terminal
though.  The simple little trick is to change SYS$INPUT so that it points
to the same place as SYS$OUTPUT.  Similarly with SYS$COMMAND and TT:.
This is accomplished by a little front end command procedure and a shell
alias:

	alias int 'vms @eun_usr:\[usr.local\]vms.com'

int is for interactive.  It's an ugly word, I know, but I haven't decided
on a better one yet.  I modified the command procedure that I got from
'The Handshake' so that it didn't print out messages about logical
names being replaced and a few other things.  If you don't pass it
any parameters, then it does an @TT:, which turns your terminal into
a command procedure, and hence an interactive DCL session, assuming
you don't mind $_ as a prompt.  Also, -l and -s mean execute my login.com,
and execute the system login command procedure (which on our system then
executes one's login.com) before doing anything else.

This isn't really a satisfactory solution, because those logical name
assignments are done in user mode, not in executive mode, like they should
be.  I didn't really want to write the privileged image to do that.
I think I may have one of my programmers just redo vms.exe.  It looks
like a simple task.

The OTHER way to get to DCL is just gonna kill you.  One of my programmers
found it by accident.  You know the suspend command in the cshell?  Well,
if you are in a nested cshell, it says 'stopped' and returns you to the
parent cshell.  If you are in your login cshell, it does a lib$spawn.
All your symbols, all your logical names, your default directory.  Everything
gets passed down.  So you want to get to DCL?  You ask yourself, now, am
I in my login cshell?  How many cshells will I have to stop before I get
to my login shell?  Anyway, I don't think you can pass it a command line
argument.  Too bad.

I include the front end command procedure.  Hope this helps.


$ ver = 'f$ver(0)
$ assign 'f$logical("SYS$OUTPUT")' sys$command
$ if "''f$logical("SYS$INPUT")'" .nes. "" then deassign sys$input
$ assign 'f$logical("SYS$OUTPUT")' sys$input
$ assign 'f$logical("SYS$OUTPUT")' tt:
$ if "''p1'" .nes. "-S" then goto check_flag_l
$ @sys$manager:sylogin.com
$ goto kill_p1
$check_flag_l:
$ if "''p1'" .nes. "-L" then goto no_login
$ @sys$login:login.com
$kill_p1:
$ p1 = ""
$no_login:
$ do_command := 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8'
$ if do_command .eqs. "" then goto interactive
$ 'p1' 'p2' 'p3' 'p4' 'p5' 'p6' 'p7' 'p8'
$ exit
$interactive:
$ @tt:
$ exit

+++++++++++++
Cliff Beshers
Carleton College
Northfield, MN 55057
{allegra, decvax, ihnp4}!stolaf!ccnfld!cbeshers
-- 
Cliff Beshers
Carleton College
Northfield, MN 55057
{allegra, decvax, ihnp4}!stolaf!ccnfld!cbeshers