add log device ; unused reset routines are nulldev
[unix-history] / usr / src / usr.bin / window / main.c
CommitLineData
fc38b21b 1#ifndef lint
7edc52ec 2static char sccsid[] = "@(#)main.c 3.26 %G%";
fc38b21b
EW
3#endif
4
2b44d852 5#include "defs.h"
b1189050
EW
6#include <sys/signal.h>
7#include <stdio.h>
7ecf4dca 8#include "string.h"
0e64e422 9#include "char.h"
7c38ad4d 10#include "local.h"
fc38b21b 11
db4a5bb1 12#define next(a) (*++*(a) ? *(a) : (*++(a) ? *(a) : (char *)usage()))
a9353152 13
bb05dfb5 14/*ARGSUSED*/
a9353152
EW
15main(argc, argv)
16char **argv;
fc38b21b 17{
fc38b21b 18 register char *p;
c8ec0306
EW
19 char fflag = 0;
20 char dflag = 0;
5a7d5d43 21 char xflag = 0;
ffa20db4
EW
22 char *cmd = 0;
23 char tflag = 0;
fc38b21b 24
db4a5bb1
EW
25 if (p = rindex(*argv, '/'))
26 p++;
27 else
28 p = *argv;
29 debug = strcmp(p, "a.out") == 0;
a9353152
EW
30 while (*++argv) {
31 if (**argv == '-') {
32 switch (*++*argv) {
db4a5bb1 33 case 'f':
c8ec0306 34 fflag++;
db4a5bb1 35 break;
ffa20db4
EW
36 case 'c':
37 if (cmd != 0) {
38 (void) fprintf(stderr,
39 "Only one -c allowed.\n");
40 (void) usage();
41 }
42 cmd = next(argv);
43 break;
a9353152
EW
44 case 'e':
45 setescape(next(argv));
46 break;
47 case 't':
ffa20db4 48 tflag++;
a9353152 49 break;
db4a5bb1 50 case 'd':
c8ec0306
EW
51 dflag++;
52 break;
53 case 'D':
ad5cb1cc 54 debug = !debug;
db4a5bb1 55 break;
5a7d5d43
EW
56 case 'x':
57 xflag++;
58 break;
a9353152 59 default:
bb05dfb5 60 (void) usage();
a9353152
EW
61 }
62 } else
bb05dfb5 63 (void) usage();
a9353152 64 }
7c38ad4d
EW
65 nbufline = NLINE;
66 escapec = ESCAPEC;
7ecf4dca 67 if ((p = getenv("SHELL")) == 0)
7c38ad4d 68 p = SHELL;
7ecf4dca
EW
69 if ((shellfile = str_cpy(p)) == 0)
70 nomem();
71 if (p = rindex(shellfile, '/'))
72 p++;
db4a5bb1 73 else
7ecf4dca
EW
74 p = shellfile;
75 shell[0] = p;
76 shell[1] = 0;
b1189050 77 (void) gettimeofday(&starttime, (struct timezone *)0);
4711df8b 78 if (wwinit() < 0) {
b416f8a6 79 (void) fprintf(stderr, "%s.\n", wwerror());
4711df8b
EW
80 exit(1);
81 }
5a7d5d43 82 if (debug)
db4a5bb1 83 wwnewtty.ww_tchars.t_quitc = wwoldtty.ww_tchars.t_quitc;
5a7d5d43
EW
84 if (xflag) {
85 wwnewtty.ww_tchars.t_stopc = wwoldtty.ww_tchars.t_stopc;
86 wwnewtty.ww_tchars.t_startc = wwoldtty.ww_tchars.t_startc;
db4a5bb1 87 }
5a7d5d43
EW
88 if (debug || xflag)
89 (void) wwsettty(0, &wwnewtty);
bb05dfb5
EW
90
91 if ((cmdwin = wwopen(WWO_REVERSE, 1, wwncol, 0, 0, 0)) == 0) {
92 (void) wwflush();
b416f8a6 93 (void) fprintf(stderr, "%s.\r\n", wwerror());
bb05dfb5
EW
94 goto bad;
95 }
bf3b96e9 96 cmdwin->ww_mapnl = 1;
b1189050 97 cmdwin->ww_nointr = 1;
0e64e422 98 cmdwin->ww_noupdate = 1;
7ecf4dca 99 cmdwin->ww_unctrl = 1;
2357b64e
EW
100 if ((framewin = wwopen(WWO_GLASS|WWO_FRAME, wwnrow, wwncol, 0, 0, 0))
101 == 0) {
bb05dfb5 102 (void) wwflush();
b416f8a6 103 (void) fprintf(stderr, "%s.\r\n", wwerror());
4711df8b
EW
104 goto bad;
105 }
bb05dfb5 106 wwadd(framewin, &wwhead);
43c1dd56
EW
107 if ((boxwin = wwopen(WWO_GLASS, wwnrow, wwncol, 0, 0, 0)) == 0) {
108 (void) wwflush();
b416f8a6 109 (void) fprintf(stderr, "%s.\r\n", wwerror());
43c1dd56
EW
110 goto bad;
111 }
e1dba5dd 112 fgwin = framewin;
bb05dfb5 113
bb05dfb5 114 wwupdate();
2b44d852 115 wwflush();
fc38b21b 116 (void) signal(SIGCHLD, wwchild);
6e1c2156 117 setvars();
ffa20db4
EW
118
119 setterse(tflag);
120 setcmd(1);
121 if (cmd != 0)
bb4a0c0b 122 (void) dolongcmd(cmd, (struct value *)0, 0);
ffa20db4 123 if (!fflag) {
c8ec0306 124 if (dflag || doconfig() < 0)
db4a5bb1 125 dodefault();
ffa20db4
EW
126 if (selwin != 0)
127 setcmd(0);
db4a5bb1 128 }
b416f8a6
EW
129
130 mloop();
131
bb05dfb5
EW
132 wwupdate();
133 wwflush();
fc38b21b 134bad:
fc38b21b
EW
135 wwend();
136 return 0;
137}
a9353152
EW
138
139usage()
140{
7ecf4dca 141 (void) fprintf(stderr, "Usage: window [-e escape-char] [-c command] [-t] [-f] [-d]\n");
30647f51
EW
142 exit(1);
143 return 0; /* for lint */
a9353152 144}
7ecf4dca
EW
145
146nomem()
147{
148 (void) fprintf(stderr, "Out of memory.\n");
149 exit(1);
150}