xref: /csrg-svn/usr.bin/window/main.c (revision 16280)
113920Sedward #ifndef lint
2*16280Sedward static	char *sccsid = "@(#)main.c	3.18 84/04/05";
313920Sedward #endif
413920Sedward 
513969Sedward #include "defs.h"
616110Sedward #include <sys/signal.h>
716110Sedward #include <stdio.h>
813920Sedward 
914286Sedward #define next(a) (*++*(a) ? *(a) : (*++(a) ? *(a) : (char *)usage()))
1014169Sedward 
1114407Sedward /*ARGSUSED*/
1214169Sedward main(argc, argv)
1314169Sedward char **argv;
1413920Sedward {
1513920Sedward 	register char *p;
1614677Sedward 	char fflag = 0;
1714677Sedward 	char dflag = 0;
1814846Sedward 	char xflag = 0;
19*16280Sedward 	char *cmd = 0;
20*16280Sedward 	char tflag = 0;
2113920Sedward 
2214286Sedward 	if (p = rindex(*argv, '/'))
2314286Sedward 		p++;
2414286Sedward 	else
2514286Sedward 		p = *argv;
2614286Sedward 	debug = strcmp(p, "a.out") == 0;
2714169Sedward 	while (*++argv) {
2814169Sedward 		if (**argv == '-') {
2914169Sedward 			switch (*++*argv) {
3014286Sedward 			case 'f':
3114677Sedward 				fflag++;
3214286Sedward 				break;
33*16280Sedward 			case 'c':
34*16280Sedward 				if (cmd != 0) {
35*16280Sedward 					(void) fprintf(stderr,
36*16280Sedward 						"Only one -c allowed.\n");
37*16280Sedward 					(void) usage();
38*16280Sedward 				}
39*16280Sedward 				cmd = next(argv);
40*16280Sedward 				break;
4114169Sedward 			case 'e':
4214169Sedward 				setescape(next(argv));
4314169Sedward 				break;
4414169Sedward 			case 't':
45*16280Sedward 				tflag++;
4614169Sedward 				break;
4714286Sedward 			case 'd':
4814677Sedward 				dflag++;
4914677Sedward 				break;
5014677Sedward 			case 'D':
5115025Sedward 				debug = !debug;
5214286Sedward 				break;
5314846Sedward 			case 'x':
5414846Sedward 				xflag++;
5514846Sedward 				break;
5614169Sedward 			default:
5714407Sedward 				(void) usage();
5814169Sedward 			}
5914169Sedward 		} else
6014407Sedward 			(void) usage();
6114169Sedward 	}
6216231Sedward 	nbufline = 48;				/* compatible */
6316231Sedward 	escapec = CTRL(p);
6414286Sedward 	if ((shell = getenv("SHELL")) == 0)
6514286Sedward 		shell = "/bin/csh";
6614286Sedward 	if (shellname = rindex(shell, '/'))
6714286Sedward 		shellname++;
6814286Sedward 	else
6914286Sedward 		shellname = shell;
7015360Sedward #ifndef O_4_1A
7116110Sedward 	(void) gettimeofday(&starttime, (struct timezone *)0);
7215360Sedward #endif
7313962Sedward 	if (wwinit() < 0) {
7414895Sedward 		(void) fprintf(stderr, "%s.\n", wwerror());
7513962Sedward 		exit(1);
7613962Sedward 	}
7714846Sedward 	if (debug)
7814286Sedward 		wwnewtty.ww_tchars.t_quitc = wwoldtty.ww_tchars.t_quitc;
7914846Sedward 	if (xflag) {
8014846Sedward 		wwnewtty.ww_tchars.t_stopc = wwoldtty.ww_tchars.t_stopc;
8114846Sedward 		wwnewtty.ww_tchars.t_startc = wwoldtty.ww_tchars.t_startc;
8214846Sedward 	}
8314846Sedward 	if (debug || xflag)
8414407Sedward 		(void) wwsettty(0, &wwnewtty);
8514407Sedward 
8614407Sedward 	if ((cmdwin = wwopen(WWO_REVERSE, 1, wwncol, 0, 0, 0)) == 0) {
8714407Sedward 		(void) wwflush();
8814895Sedward 		(void) fprintf(stderr, "%s.\r\n", wwerror());
8913962Sedward 		goto bad;
9013962Sedward 	}
9116110Sedward 	cmdwin->ww_nointr = 1;
9214772Sedward 	if ((framewin = wwopen(WWO_GLASS|WWO_FRAME, wwnrow, wwncol, 0, 0, 0))
9314772Sedward 	    == 0) {
9414407Sedward 		(void) wwflush();
9514895Sedward 		(void) fprintf(stderr, "%s.\r\n", wwerror());
9614407Sedward 		goto bad;
9714407Sedward 	}
9814407Sedward 	wwadd(framewin, &wwhead);
9914720Sedward 	if ((boxwin = wwopen(WWO_GLASS, wwnrow, wwncol, 0, 0, 0)) == 0) {
10014720Sedward 		(void) wwflush();
10114895Sedward 		(void) fprintf(stderr, "%s.\r\n", wwerror());
10214720Sedward 		goto bad;
10314720Sedward 	}
10416253Sedward 	fgwin = framewin;
10516253Sedward 	bgwin = &wwhead;
10614407Sedward 
10714407Sedward 	wwupdate();
10813969Sedward 	wwflush();
10913920Sedward 	(void) signal(SIGCHLD, wwchild);
11015671Sedward 	setvars();
111*16280Sedward 
112*16280Sedward 	setterse(tflag);
113*16280Sedward 	setcmd(1);
114*16280Sedward 	if (cmd != 0)
115*16280Sedward 		dolongcmd(cmd);
116*16280Sedward 	if (!fflag) {
11714677Sedward 		if (dflag || doconfig() < 0)
11814286Sedward 			dodefault();
119*16280Sedward 		if (selwin != 0)
120*16280Sedward 			setcmd(0);
12114286Sedward 	}
12214895Sedward 
12314895Sedward 	mloop();
12414895Sedward 
12514407Sedward 	wwupdate();
12614407Sedward 	wwflush();
12713920Sedward bad:
12813920Sedward 	wwend();
12913920Sedward 	return 0;
13013920Sedward }
13114169Sedward 
13214169Sedward usage()
13314169Sedward {
13414677Sedward 	(void) fprintf(stderr, "window: [-e escape-char] [-t] [-f] [-d]\n");
13514454Sedward 	exit(1);
13614454Sedward 	return 0;			/* for lint */
13714169Sedward }
138