xref: /csrg-svn/usr.bin/window/main.c (revision 15025)
113920Sedward #ifndef lint
2*15025Sedward static	char *sccsid = "@(#)main.c	3.12 83/09/19";
313920Sedward #endif
413920Sedward 
513969Sedward #include "defs.h"
613920Sedward 
714286Sedward char escapec = CTRL(p);
814841Sedward int nbufline = 48;			/* compatible */
914169Sedward 
1014286Sedward #define next(a) (*++*(a) ? *(a) : (*++(a) ? *(a) : (char *)usage()))
1114169Sedward 
1214407Sedward /*ARGSUSED*/
1314169Sedward main(argc, argv)
1414169Sedward char **argv;
1513920Sedward {
1613920Sedward 	register char *p;
1714677Sedward 	char fflag = 0;
1814677Sedward 	char dflag = 0;
1914846Sedward 	char xflag = 0;
2014407Sedward 	struct timezone timezone;
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;
3314169Sedward 			case 'e':
3414169Sedward 				setescape(next(argv));
3514169Sedward 				break;
3614169Sedward 			case 't':
3714169Sedward 				terse++;
3814169Sedward 				break;
3914286Sedward 			case 'd':
4014677Sedward 				dflag++;
4114677Sedward 				break;
4214677Sedward 			case 'D':
43*15025Sedward 				debug = !debug;
4414286Sedward 				break;
4514846Sedward 			case 'x':
4614846Sedward 				xflag++;
4714846Sedward 				break;
4814169Sedward 			default:
4914407Sedward 				(void) usage();
5014169Sedward 			}
5114169Sedward 		} else
5214407Sedward 			(void) usage();
5314169Sedward 	}
5414286Sedward 	if ((shell = getenv("SHELL")) == 0)
5514286Sedward 		shell = "/bin/csh";
5614286Sedward 	if (shellname = rindex(shell, '/'))
5714286Sedward 		shellname++;
5814286Sedward 	else
5914286Sedward 		shellname = shell;
6014407Sedward 	(void) gettimeofday(&starttime, &timezone);
6113962Sedward 	if (wwinit() < 0) {
6214407Sedward 		(void) fflush(stdout);
6314895Sedward 		(void) fprintf(stderr, "%s.\n", wwerror());
6413962Sedward 		exit(1);
6513962Sedward 	}
6614846Sedward 	if (debug)
6714286Sedward 		wwnewtty.ww_tchars.t_quitc = wwoldtty.ww_tchars.t_quitc;
6814846Sedward 	if (xflag) {
6914846Sedward 		wwnewtty.ww_tchars.t_stopc = wwoldtty.ww_tchars.t_stopc;
7014846Sedward 		wwnewtty.ww_tchars.t_startc = wwoldtty.ww_tchars.t_startc;
7114846Sedward 	}
7214846Sedward 	if (debug || xflag)
7314407Sedward 		(void) wwsettty(0, &wwnewtty);
7414407Sedward 
7514407Sedward 	if ((cmdwin = wwopen(WWO_REVERSE, 1, wwncol, 0, 0, 0)) == 0) {
7614407Sedward 		(void) wwflush();
7714895Sedward 		(void) fprintf(stderr, "%s.\r\n", wwerror());
7813962Sedward 		goto bad;
7913962Sedward 	}
8014772Sedward 	if ((framewin = wwopen(WWO_GLASS|WWO_FRAME, wwnrow, wwncol, 0, 0, 0))
8114772Sedward 	    == 0) {
8214407Sedward 		(void) wwflush();
8314895Sedward 		(void) fprintf(stderr, "%s.\r\n", wwerror());
8414407Sedward 		goto bad;
8514407Sedward 	}
8614407Sedward 	wwadd(framewin, &wwhead);
8714720Sedward 	if ((boxwin = wwopen(WWO_GLASS, wwnrow, wwncol, 0, 0, 0)) == 0) {
8814720Sedward 		(void) wwflush();
8914895Sedward 		(void) fprintf(stderr, "%s.\r\n", wwerror());
9014720Sedward 		goto bad;
9114720Sedward 	}
9214407Sedward 
9314407Sedward 	wwupdate();
9413969Sedward 	wwflush();
9513920Sedward 	(void) signal(SIGCHLD, wwchild);
9614895Sedward 	if (fflag)
9714895Sedward 		incmd = 1;
9814895Sedward 	else {
9914407Sedward 		if (!terse)
10014407Sedward 			wwadd(cmdwin, &wwhead);
10114677Sedward 		if (dflag || doconfig() < 0)
10214286Sedward 			dodefault();
10314294Sedward 		if (selwin != 0) {
10414892Sedward 			incmd = 0;
10514762Sedward 			wwcursor(selwin, 0);
10614294Sedward 		}
10714407Sedward 		if (!terse) {
10814407Sedward 			wwdelete(cmdwin);
10914407Sedward 			reframe();
11014407Sedward 		}
11114286Sedward 	}
11214895Sedward 
11314895Sedward 	mloop();
11414895Sedward 
11514407Sedward 	wwupdate();
11614407Sedward 	wwflush();
11713920Sedward bad:
11813920Sedward 	wwend();
11913920Sedward 	return 0;
12013920Sedward }
12114169Sedward 
12214169Sedward usage()
12314169Sedward {
12414677Sedward 	(void) fprintf(stderr, "window: [-e escape-char] [-t] [-f] [-d]\n");
12514454Sedward 	exit(1);
12614454Sedward 	return 0;			/* for lint */
12714169Sedward }
128