xref: /csrg-svn/usr.bin/window/main.c (revision 16253)
113920Sedward #ifndef lint
2*16253Sedward static	char *sccsid = "@(#)main.c	3.17 84/03/29";
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;
1913920Sedward 
2014286Sedward 	if (p = rindex(*argv, '/'))
2114286Sedward 		p++;
2214286Sedward 	else
2314286Sedward 		p = *argv;
2414286Sedward 	debug = strcmp(p, "a.out") == 0;
2514169Sedward 	while (*++argv) {
2614169Sedward 		if (**argv == '-') {
2714169Sedward 			switch (*++*argv) {
2814286Sedward 			case 'f':
2914677Sedward 				fflag++;
3014286Sedward 				break;
3114169Sedward 			case 'e':
3214169Sedward 				setescape(next(argv));
3314169Sedward 				break;
3414169Sedward 			case 't':
3514169Sedward 				terse++;
3614169Sedward 				break;
3714286Sedward 			case 'd':
3814677Sedward 				dflag++;
3914677Sedward 				break;
4014677Sedward 			case 'D':
4115025Sedward 				debug = !debug;
4214286Sedward 				break;
4314846Sedward 			case 'x':
4414846Sedward 				xflag++;
4514846Sedward 				break;
4614169Sedward 			default:
4714407Sedward 				(void) usage();
4814169Sedward 			}
4914169Sedward 		} else
5014407Sedward 			(void) usage();
5114169Sedward 	}
5216231Sedward 	nbufline = 48;				/* compatible */
5316231Sedward 	escapec = CTRL(p);
5414286Sedward 	if ((shell = getenv("SHELL")) == 0)
5514286Sedward 		shell = "/bin/csh";
5614286Sedward 	if (shellname = rindex(shell, '/'))
5714286Sedward 		shellname++;
5814286Sedward 	else
5914286Sedward 		shellname = shell;
6015360Sedward #ifndef O_4_1A
6116110Sedward 	(void) gettimeofday(&starttime, (struct timezone *)0);
6215360Sedward #endif
6313962Sedward 	if (wwinit() < 0) {
6414895Sedward 		(void) fprintf(stderr, "%s.\n", wwerror());
6513962Sedward 		exit(1);
6613962Sedward 	}
6714846Sedward 	if (debug)
6814286Sedward 		wwnewtty.ww_tchars.t_quitc = wwoldtty.ww_tchars.t_quitc;
6914846Sedward 	if (xflag) {
7014846Sedward 		wwnewtty.ww_tchars.t_stopc = wwoldtty.ww_tchars.t_stopc;
7114846Sedward 		wwnewtty.ww_tchars.t_startc = wwoldtty.ww_tchars.t_startc;
7214846Sedward 	}
7314846Sedward 	if (debug || xflag)
7414407Sedward 		(void) wwsettty(0, &wwnewtty);
7514407Sedward 
7614407Sedward 	if ((cmdwin = wwopen(WWO_REVERSE, 1, wwncol, 0, 0, 0)) == 0) {
7714407Sedward 		(void) wwflush();
7814895Sedward 		(void) fprintf(stderr, "%s.\r\n", wwerror());
7913962Sedward 		goto bad;
8013962Sedward 	}
8116110Sedward 	cmdwin->ww_nointr = 1;
8214772Sedward 	if ((framewin = wwopen(WWO_GLASS|WWO_FRAME, wwnrow, wwncol, 0, 0, 0))
8314772Sedward 	    == 0) {
8414407Sedward 		(void) wwflush();
8514895Sedward 		(void) fprintf(stderr, "%s.\r\n", wwerror());
8614407Sedward 		goto bad;
8714407Sedward 	}
8814407Sedward 	wwadd(framewin, &wwhead);
8914720Sedward 	if ((boxwin = wwopen(WWO_GLASS, wwnrow, wwncol, 0, 0, 0)) == 0) {
9014720Sedward 		(void) wwflush();
9114895Sedward 		(void) fprintf(stderr, "%s.\r\n", wwerror());
9214720Sedward 		goto bad;
9314720Sedward 	}
94*16253Sedward 	fgwin = framewin;
95*16253Sedward 	bgwin = &wwhead;
9614407Sedward 
9714407Sedward 	wwupdate();
9813969Sedward 	wwflush();
9913920Sedward 	(void) signal(SIGCHLD, wwchild);
10015671Sedward 	setvars();
10114895Sedward 	if (fflag)
10216110Sedward 		wwcurwin = 0;
10314895Sedward 	else {
10414407Sedward 		if (!terse)
10514407Sedward 			wwadd(cmdwin, &wwhead);
10614677Sedward 		if (dflag || doconfig() < 0)
10714286Sedward 			dodefault();
10814294Sedward 		if (selwin != 0) {
10916110Sedward 			wwcurwin = selwin;
11014762Sedward 			wwcursor(selwin, 0);
11114294Sedward 		}
11214407Sedward 		if (!terse) {
11314407Sedward 			wwdelete(cmdwin);
11414407Sedward 			reframe();
11514407Sedward 		}
11614286Sedward 	}
11714895Sedward 
11814895Sedward 	mloop();
11914895Sedward 
12014407Sedward 	wwupdate();
12114407Sedward 	wwflush();
12213920Sedward bad:
12313920Sedward 	wwend();
12413920Sedward 	return 0;
12513920Sedward }
12614169Sedward 
12714169Sedward usage()
12814169Sedward {
12914677Sedward 	(void) fprintf(stderr, "window: [-e escape-char] [-t] [-f] [-d]\n");
13014454Sedward 	exit(1);
13114454Sedward 	return 0;			/* for lint */
13214169Sedward }
133