Help with Sunview file descriptor events
chris mcdonald
chris at wacsvax.uwa.oz.au
Fri Feb 2 18:50:41 AEST 1990
I posted this just before Christmas but got no replies. Hopefully everyone
enjoyed their holiday and would now like to offer their help.
I would like a tty subwindow to receive an event when its underlying shell
writes some output to the window. As far as my understanding goes, the
following code segment should come close, but not quite ... My guess is
that if WIN_FD delivers the input fd, then fd+1 is the output descriptor
of the subwindow. This simple bit of code should (I think) just beep when
the shell writes to the window (the first prompt?).
Any help muchly appreciated; if you can answer this in terms of the source
of contool that will be fine, though that uses its own pseudo terminal to
detect the output. Thanks for your help.
Chris McDonald.
Department of Computer Science, ACSnet: chris at wacsvax.oz
University of Western Australia, ARPA: chris%wacsvax.oz at uunet.uu.net
Mounts Bay Road, UUCP: ..!uunet!murtoa!wacsvax!chris
Crawley, Western Australia, 6009. SDI: (31.97 +/-10% S, 115.81 +/-10% E)
PHONE: (09) 380 2533 OVERSEAS: +61 9 380 2533
***** Cut Here *****
#include <stdio.h>
#include <strings.h>
#include <suntool/sunview.h>
#include <suntool/tty.h>
int ttysw_fd;
static Frame base_frame;
static Icon tool_icon;
static Tty ttysw;
static Notify_client client;
Notify_value output_func();
static short tty_image[258] = {
#include <images/terminal.icon>
};
mpr_static(tty_pixrect, 64, 64, 1, tty_image);
main(argc,argv) int argc; char **argv;
{
char *ttyname();
base_frame = window_create((Window)NULL, FRAME,
FRAME_NO_CONFIRM, TRUE,
FRAME_ARGC_PTR_ARGV, &argc, argv,
0);
++argv;
ttysw = window_create(base_frame, TTY,
TTY_ARGV, argv,
TTY_QUIT_ON_CHILD_DEATH,TRUE,
0);
ttysw_fd = (int) window_get(ttysw, WIN_FD) + 1;
/*
If WIN_FD delivers the input fd,
then I guess fd+1 is the output descriptor (?).
*/
tool_icon = icon_create(
ICON_IMAGE, &tty_pixrect,
ICON_LABEL, ttyname(ttysw_fd)+5,
0);
(void) window_set(base_frame,
FRAME_LABEL, ttyname(ttysw_fd),
FRAME_ICON, tool_icon,
0);
notify_set_event_func(client, output_func, NOTIFY_SAFE);
notify_set_output_func(client, output_func, ttysw_fd);
window_main_loop(base_frame);
exit(0);
}
Notify_value output_func(who,fd)
Notify_client who;
int fd;
{
(void) window_bell(base_frame);
(void) printf("in output_func, ttysw_fd=%d, fd=%d\n",ttysw_fd,fd);
notify_set_output_func(who, NOTIFY_FUNC_NULL, fd);
return(NOTIFY_DONE);
}
More information about the Comp.sys.sun
mailing list