[comp.os.vms] Running multiple interactive programs under VMS

KARNEY%PPC.MFENET@NMFECC.ARPA (07/19/87)

One of the most objectionable features of VMS is how awkward it is to run
several interactive programs simultaneously.  This seems to be solved
principally by one of two techiques:

* SPAWNing a new subprocess -- this is allowed within several utilities
(DEBUG, MAIL...)

* Running a program in a subprocess, and ATTACHing to the parent when you
want to do something else -- this is a common technique for running editors
like Emacs and EVE.

Unfortunately, each technique involves special VMS code within the utility
to do the spawning/attatching.  This prompts the following question:

Is it possible to run n > 1 vanilla programs (e.g., standard FORTRAN
programs) and bounce between them?  I want to fire up program[i], give it
some input, leave it running, fire up program[i+1], etc.  Program[i] then
runs until it needs to do terminal I/O.  Then it should optionally (a)
hang, (b) notify the user that program[i] needs the terminal, (c) if it only
needs to do output, go ahead and do the output (mingling such output with
that of other programs), (d) again if it is only output, buffer the output
in some suitable place.  I should be able to reconnect the terminal to
program[i], do the required I/O and then hop to another program.

I'm aware of two solutions:

* A commercial package WINDOWS (Clyde Data Systems).  I have not seen
this in operation.  This has the disadvantage that it costs money.

* Start up multiple subprocesses in Gnu Emacs (v 17) and use the PTY
drivers to talk to them.  This has the disadvantage that the I/O happens
through Emacs which can deal with straight text OK, but can't manage
graphics, etc.  Also version 18 of Emacs lost PTY support and can only do
inferior mailbox communication with subprocesses.

It seems to me that it should be possible using the Carosso PTY driver to
write a supervisor program that can manage several programs running in
subprocesses and thus do what I want.  Anyone know of such a beast?

                    Charles Karney
                    PHONE:   609/682-2607
                    MFENET:  Karney@PPC.MFENET
                    ARPANET: Karney%PPC.MFENET@NMFECC.ARPA
                    BITNET:  Karney%PPC.MFENET@ANLVMS.BITNET

CC:
        INFO-VAX@SRI-KL.ARPA
        KARNEY

jkw@a.UUCP (Jay Wooten) (07/20/87)

> Is it possible to run n > 1 vanilla programs (e.g., standard FORTRAN
> programs) and bounce between them?

 Another solution (which also costs $) is to hook your terminal to an
 ethernet terminal server (LAT).  This allows you to switch back and forth
 between multiple sessions very easily.

	   Jay Wooten  Los Alamos National Lab  ARPA: jkw@lanl.gov

MCGUIRE@GRIN2.BITNET (07/23/87)

> Date:         Sun, 19 Jul 87 10:14:21 PDT
> From:         KARNEY%PPC.MFENET@nmfecc.arpa
> Subject:      Running multiple interactive programs under VMS
>
> Is it possible to run n > 1 vanilla programs (e.g., standard FORTRAN
> programs) and bounce between them?  I want to fire up program[i], give it
> some input, leave it running, fire up program[i+1], etc.  Program[i] then
> runs until it needs to do terminal I/O.  Then it should optionally (a)
> hang, (b) notify the user that program[i] needs the terminal, (c) if it only
> needs to do output, go ahead and do the output (mingling such output with
> that of other programs), (d) again if it is only output, buffer the output
> in some suitable place.  I should be able to reconnect the terminal to
> program[i], do the required I/O and then hop to another program.

Here's one way to do this using DCL.

Program i=1:  Type SET PROMPT="1 ".  Fire up program 1.

Program i=2..n:  Press <Ctrl Y>, interrupting all current applications,
which gives you a prompt.  Type SPAWN/NOWAIT/PROMPT="i " to start process
i.  While you have multiple subprocesses running, they'll all prompt you in
whatever order they queued the request.  At prompts 1..i-1, type CONTINUE.
Press <Return> at prompt i, until that's the only one prompting you.  Now,
your current applications are all running where they left off, and you have
a new process.

Terminate a process by typing LOGOUT to it.

Be a bit careful how you terminate processes.  Each process is a child of
the process you used to create it.  When you delete a process, all its
descendants are also deleted.  So type SHOW PROCESS/SUBPROCESSES to see
whether the process you're about to log out has any children.

I have simplified this explanation somewhat.  You'll learn the oddities by
doing it.  Good luck!

Ed

P.S.  Grateful thanks to the folks here on info-vax who taught me how to do
      this.

DHASKIN@CLARKU.BITNET (Denis W. Haskin, Manager, Technical Services) (07/24/87)

>From:         Jay Wooten <beta!a!jkw@hc.dspo.gov>
>
>> Is it possible to run n > 1 vanilla programs (e.g., standard FORTRAN
>> programs) and bounce between them?
>
> Another solution (which also costs $) is to hook your terminal to an
> ethernet terminal server (LAT).  This allows you to switch back and forth
> between multiple sessions very easily.

How about running the vanillas in subprocesses?  Seems to me it might be
possible, although whenever I do a lot of work like that my input and output
streams always seem to merge into one torrent... <sigh>...

It should be possible without resorting to a server; remember that it ain't
just the server you need; if you're not yet networked there's the VAX ethernet
interface, the licenses, the software, the network medium...

% Denis W. Haskin                             Manager, Technical Services %
% ----------------------------------------------------------------------- %
% DHASKIN@CLARKU.BITNET   Office of Information Systems     (617)793-7193 %
% Clark University               950 Main Street      Worcester MA  01610 %

kenw@noah.arc.CDN (Ken Wallewein) (07/26/87)

SPAWN/NOWAIT/PROMPT=1,etc... Almost as good as RSX! The process hangs around,
does it's I/O from the terminal, and doesn't tie it up! I've been using
SPAWN/NOWAIT/INPUT=NL:/COMMAND=... for a long time. Somehow I missed this
one. I shall not forget it. Only problem, I seem to hace dificulty with
using command line recall. If I use ^H^E together with my arrow keys, it
sort of works.

/kenw