foreground and background windows
[unix-history] / usr / src / usr.bin / window / main.c
CommitLineData
fc38b21b 1#ifndef lint
e1dba5dd 2static char *sccsid = "@(#)main.c 3.17 84/03/29";
fc38b21b
EW
3#endif
4
2b44d852 5#include "defs.h"
b1189050
EW
6#include <sys/signal.h>
7#include <stdio.h>
fc38b21b 8
db4a5bb1 9#define next(a) (*++*(a) ? *(a) : (*++(a) ? *(a) : (char *)usage()))
a9353152 10
bb05dfb5 11/*ARGSUSED*/
a9353152
EW
12main(argc, argv)
13char **argv;
fc38b21b 14{
fc38b21b 15 register char *p;
c8ec0306
EW
16 char fflag = 0;
17 char dflag = 0;
5a7d5d43 18 char xflag = 0;
fc38b21b 19
db4a5bb1
EW
20 if (p = rindex(*argv, '/'))
21 p++;
22 else
23 p = *argv;
24 debug = strcmp(p, "a.out") == 0;
a9353152
EW
25 while (*++argv) {
26 if (**argv == '-') {
27 switch (*++*argv) {
db4a5bb1 28 case 'f':
c8ec0306 29 fflag++;
db4a5bb1 30 break;
a9353152
EW
31 case 'e':
32 setescape(next(argv));
33 break;
34 case 't':
35 terse++;
36 break;
db4a5bb1 37 case 'd':
c8ec0306
EW
38 dflag++;
39 break;
40 case 'D':
ad5cb1cc 41 debug = !debug;
db4a5bb1 42 break;
5a7d5d43
EW
43 case 'x':
44 xflag++;
45 break;
a9353152 46 default:
bb05dfb5 47 (void) usage();
a9353152
EW
48 }
49 } else
bb05dfb5 50 (void) usage();
a9353152 51 }
4222244b
EW
52 nbufline = 48; /* compatible */
53 escapec = CTRL(p);
db4a5bb1
EW
54 if ((shell = getenv("SHELL")) == 0)
55 shell = "/bin/csh";
56 if (shellname = rindex(shell, '/'))
57 shellname++;
58 else
59 shellname = shell;
57fc9db6 60#ifndef O_4_1A
b1189050 61 (void) gettimeofday(&starttime, (struct timezone *)0);
57fc9db6 62#endif
4711df8b 63 if (wwinit() < 0) {
b416f8a6 64 (void) fprintf(stderr, "%s.\n", wwerror());
4711df8b
EW
65 exit(1);
66 }
5a7d5d43 67 if (debug)
db4a5bb1 68 wwnewtty.ww_tchars.t_quitc = wwoldtty.ww_tchars.t_quitc;
5a7d5d43
EW
69 if (xflag) {
70 wwnewtty.ww_tchars.t_stopc = wwoldtty.ww_tchars.t_stopc;
71 wwnewtty.ww_tchars.t_startc = wwoldtty.ww_tchars.t_startc;
db4a5bb1 72 }
5a7d5d43
EW
73 if (debug || xflag)
74 (void) wwsettty(0, &wwnewtty);
bb05dfb5
EW
75
76 if ((cmdwin = wwopen(WWO_REVERSE, 1, wwncol, 0, 0, 0)) == 0) {
77 (void) wwflush();
b416f8a6 78 (void) fprintf(stderr, "%s.\r\n", wwerror());
bb05dfb5
EW
79 goto bad;
80 }
b1189050 81 cmdwin->ww_nointr = 1;
2357b64e
EW
82 if ((framewin = wwopen(WWO_GLASS|WWO_FRAME, wwnrow, wwncol, 0, 0, 0))
83 == 0) {
bb05dfb5 84 (void) wwflush();
b416f8a6 85 (void) fprintf(stderr, "%s.\r\n", wwerror());
4711df8b
EW
86 goto bad;
87 }
bb05dfb5 88 wwadd(framewin, &wwhead);
43c1dd56
EW
89 if ((boxwin = wwopen(WWO_GLASS, wwnrow, wwncol, 0, 0, 0)) == 0) {
90 (void) wwflush();
b416f8a6 91 (void) fprintf(stderr, "%s.\r\n", wwerror());
43c1dd56
EW
92 goto bad;
93 }
e1dba5dd
EW
94 fgwin = framewin;
95 bgwin = &wwhead;
bb05dfb5 96
bb05dfb5 97 wwupdate();
2b44d852 98 wwflush();
fc38b21b 99 (void) signal(SIGCHLD, wwchild);
6e1c2156 100 setvars();
b416f8a6 101 if (fflag)
b1189050 102 wwcurwin = 0;
b416f8a6 103 else {
bb05dfb5
EW
104 if (!terse)
105 wwadd(cmdwin, &wwhead);
c8ec0306 106 if (dflag || doconfig() < 0)
db4a5bb1 107 dodefault();
0201d1be 108 if (selwin != 0) {
b1189050 109 wwcurwin = selwin;
73218728 110 wwcursor(selwin, 0);
bb05dfb5
EW
111 }
112 if (!terse) {
113 wwdelete(cmdwin);
114 reframe();
0201d1be 115 }
db4a5bb1 116 }
b416f8a6
EW
117
118 mloop();
119
bb05dfb5
EW
120 wwupdate();
121 wwflush();
fc38b21b 122bad:
fc38b21b
EW
123 wwend();
124 return 0;
125}
a9353152
EW
126
127usage()
128{
c8ec0306 129 (void) fprintf(stderr, "window: [-e escape-char] [-t] [-f] [-d]\n");
30647f51
EW
130 exit(1);
131 return 0; /* for lint */
a9353152 132}