xref: /csrg-svn/usr.bin/window/main.c (revision 13920)
1*13920Sedward #ifndef lint
2*13920Sedward static	char *sccsid = "@(#)main.c	1.1 83/07/12";
3*13920Sedward #endif
4*13920Sedward 
5*13920Sedward #include "ww.h"
6*13920Sedward #include <signal.h>
7*13920Sedward 
8*13920Sedward struct ww *w1, *w2;
9*13920Sedward 
10*13920Sedward main()
11*13920Sedward {
12*13920Sedward 	register n;
13*13920Sedward 	register char *p;
14*13920Sedward 	int wwchild();
15*13920Sedward 	int imask;
16*13920Sedward 	char buf[512];
17*13920Sedward 	char escape = 0;
18*13920Sedward 
19*13920Sedward 	w1 = wwopen(12, 80, 0, 0);
20*13920Sedward 	w2 = wwopen(12, 80, 12, 0);
21*13920Sedward 	wwsetcurrent(w1);
22*13920Sedward 	noecho();
23*13920Sedward 	crmode();
24*13920Sedward 	(void) signal(SIGCHLD, wwchild);
25*13920Sedward 	switch (wwfork(w1)) {
26*13920Sedward 	case -1:
27*13920Sedward 		perror("wwfork");
28*13920Sedward 		goto bad;
29*13920Sedward 	case 0:
30*13920Sedward 		wwexecl(w1, "/bin/csh", "csh", 0);
31*13920Sedward 		perror("wwexecl(w1)");
32*13920Sedward 		goto bad;
33*13920Sedward 	}
34*13920Sedward 	switch (wwfork(w2)) {
35*13920Sedward 	case -1:
36*13920Sedward 		perror("wwfork");
37*13920Sedward 		goto bad;
38*13920Sedward 	case 0:
39*13920Sedward 		wwexecl(w2, "/bin/csh", "csh", 0);
40*13920Sedward 		perror("wwexecl(w2)");
41*13920Sedward 		goto bad;
42*13920Sedward 	}
43*13920Sedward 	for (;;) {
44*13920Sedward 		wwflushall();
45*13920Sedward 		if (!wwhaschildren())
46*13920Sedward 			break;
47*13920Sedward 		imask = 1<<0;
48*13920Sedward 		while (wwforce(&imask) < 0)
49*13920Sedward 			;
50*13920Sedward 		if (imask & 1<<0) {
51*13920Sedward 			n = read(0, buf, sizeof buf);
52*13920Sedward 			for (p = buf; n-- > 0; p++) {
53*13920Sedward 				*p &= 0x7f;
54*13920Sedward 				if (escape) {
55*13920Sedward 					escape = 0;
56*13920Sedward 					switch (*p) {
57*13920Sedward 					case '\\':
58*13920Sedward 						write(_wwcurrent->ww_pty, p, 1);
59*13920Sedward 						break;
60*13920Sedward 					case '1':
61*13920Sedward 						wwsetcurrent(w1);
62*13920Sedward 						break;
63*13920Sedward 					case '2':
64*13920Sedward 						wwsetcurrent(w2);
65*13920Sedward 						break;
66*13920Sedward 					default:
67*13920Sedward 						write(_wwcurrent->ww_pty,
68*13920Sedward 							"\\", 1);
69*13920Sedward 						write(_wwcurrent->ww_pty, p, 1);
70*13920Sedward 					}
71*13920Sedward 				} else {
72*13920Sedward 					if (*p == '\\')
73*13920Sedward 						escape++;
74*13920Sedward 					else
75*13920Sedward 						write(_wwcurrent->ww_pty, p, 1);
76*13920Sedward 				}
77*13920Sedward 			}
78*13920Sedward 		}
79*13920Sedward 	}
80*13920Sedward bad:
81*13920Sedward 	echo();
82*13920Sedward 	nocrmode();
83*13920Sedward 	wwend();
84*13920Sedward 	return 0;
85*13920Sedward }
86