[comp.unix.questions] pty's and crt windows

dave@micropen (David F. Carlson) (06/12/87)

I am running system V r2 and need to have several processes update
a single terminal screen.  I know Pike's pty model (in user code)
is problably the way to go.  I know the PD wm *might* do some things
right.  What other programs are available to do this sort of tty
multiplexing?

Any assistance would be greatly appreciated.

-- 
David F. Carlson, Micropen, Inc.
...!{seismo}!rochester!ur-valhalla!micropen!dave

"The faster I go, the behinder I get." --Lewis Carroll

rwhite@nu3b2.UUCP (Robert C. White Jr.) (06/16/87)

In article <355@micropen>, dave@micropen (David F. Carlson) writes:
> I am running system V r2 and need to have several processes update
> a single terminal screen.  I know Pike's pty model (in user code)
> is problably the way to go.  I know the PD wm *might* do some things
> right.  What other programs are available to do this sort of tty
> multiplexing?

Might I seggust a curses terminal driver and a somple rondivous?

Juts share a block of memory or use message mode to salve a single curses
program/window/screen.  If you get creative the sme rondivous could be used
on multiple terminals from multiple trees.

define functions to
1) position cursor
2) write text/attributes
3) field erase
4) trigger screen updating

no matter how inefficent 1,2 and 3 are, 4 is the only one doing any work
and curses will optomize that for you.  Steal the input yourself and volia!

Robert.

(-: just a thought 8-)

guy@gorodish.UUCP (06/16/87)

> > I am running system V r2 and need to have several processes update
> > a single terminal screen.  I know Pike's pty model (in user code)
> > is problably the way to go.  I know the PD wm *might* do some things
> > right.  What other programs are available to do this sort of tty
> > multiplexing?
> 
> Might I seggust a curses terminal driver and a somple rondivous?

> Juts share a block of memory or use message mode to salve a single curses
> program/window/screen.  If you get creative the sme rondivous could be used
> on multiple terminals from multiple trees.

Assuming this person wants to have the processes update the terminal
screen *by writing to something they think is a terminal*, that
solves the easy part of his problem, and leaves the hard part
untouched.  Using shared memory or message queues is all very well
and good, but it means you have to change *all* programs run by the
processes to use them for output rather than writing to a terminal.
This means, for example, that you can't just have a UNIX shell
running in a window.

You could also use pipes; however, since pipes don't respond
appropriately to terminal "ioctl"s, lots of programs that have to use
those "ioctl"s will be surprised.  This includes such unimportant
programs as "vi", EMACS, other screen editors, office automation
packages, etc., etc. - or, for that matter, any program that uses
standard I/O for output, and that the user would want to run in
line-buffered mode in a window; if "isatty" says "no", the standard
I/O package will use full buffering for standard output.

The problem is that S5, as distributed by AT&T, doesn't have
pseudo-ttys.  The "as distributed by AT&T" is important; many vendors
have added them to their S5 systems.

There are a couple of pseudo-tty based window managers around:

	1) the one in the S5R3 source directory
	   "/usr/src/lib/libcurses/demo/window", written by Mark Horton.
	   It will take some work to get it running on such an S5
	   system, but not a huge amount.

	2) the one in the 4.3BSD source directory
	   "/usr/src/ucb/window".  The README file says "window only
	   runs on 4.2 machines", which means it requires some
	   functionality present in 4.2BSD but not in all UNIX variants.
	   Some S5 systems may have this, some may not; I don't know
	   what functionality is required other than pseudo-ttys.

There are probably others out there somewhere.
	Guy Harris
	{ihnp4, decvax, seismo, decwrl, ...}!sun!guy
	guy@sun.com