Job Control and Window Sizes: a common ground solution
Moderator, John Quarterman
std-unix at ut-sally.UUCP
Tue Nov 4 06:05:27 AEST 1986
From: dave%garfield.mun.cdn%ubc.csnet at RELAY.CS.NET (David Janes)
Date: Sun, 2 Nov 86 11:29:02 pst
The tty driver should provide a character i/o interface to the outside
world, and nothing else.
SIGWINCH, SIGSTOP, SIGCONT, etc. all have a similar purpose: to
inform the user process that there has been a change in the `environment'
that the process is using. (The real purpose of SIGCONT, besides
putting a process back in run queue, is to inform a process that its
output screen has been dirtied.) In addition to signals, ioctls have been
added to ask the tty driver about it's environment: how big is my screen,
and so on. All these are currently implemented as tty driver `aids', and
really have no place there.
The Solution: an `environment' file should be available for
every tty device (including pseudo-ttys.)
All changes to the tty's environment are reflected into this
file. If the window size is changed (by whatever), the window
size part of that file is modified. If the screen is `dirtied',
a `dirty screen' flag is set, and so on.
The environment file is a normal UNIX file. Some programs like init,
and so on may need to be modified to keep this file with the
right protections and so on, but this is basically minor.
Processes (including the kernel for some implementations) which change
the environment of the tty merely update this file when they
make those changes.
One kernel change must be added. A SIGIO signal should be
sent when this file is modified to all interested processes (who
declare the interest via `fnctl' or some similar mechanism.)
This change can be justified outside the concept of `environments'
as a reasonable extension to the SIGIO facility.
The stopping and restarting of processes can be implemented
sensibly and independantly of this scheme.
NOTES:
[1] this could be added to system V to make job control as `nice'
to the user as Berkeley job control, and still be entirely backwards
compatable.
[2] window management process (even if implemented in the kernel)
simply write their changes to the environment file if
the screen size gets changed.
[3] simple window management, which doesn't redraw screens,
can be implemented under the same scheme. Thus, many styles
of `job control' (in the broad sense) may be implemented.
dave
--
.o.o. The UUCP: {utcsri,ihnp4,allegra,philabs}!garfield!dave
.:O:. Mercenary CDNNET: David Janes <dave at garfield.mun.cdn>
.o.o. Programmer "There can only be one!"
Volume-Number: Volume 8, Number 24
More information about the Mod.std.unix
mailing list