xref: /csrg-svn/usr.bin/window/main.c (revision 16309)
113920Sedward #ifndef lint
2*16309Sedward static	char *sccsid = "@(#)main.c	3.21 84/04/08";
313920Sedward #endif
413920Sedward 
513969Sedward #include "defs.h"
616110Sedward #include <sys/signal.h>
716110Sedward #include <stdio.h>
8*16309Sedward #include "char.h"
913920Sedward 
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;
2016280Sedward 	char *cmd = 0;
2116280Sedward 	char tflag = 0;
2213920Sedward 
2314286Sedward 	if (p = rindex(*argv, '/'))
2414286Sedward 		p++;
2514286Sedward 	else
2614286Sedward 		p = *argv;
2714286Sedward 	debug = strcmp(p, "a.out") == 0;
2814169Sedward 	while (*++argv) {
2914169Sedward 		if (**argv == '-') {
3014169Sedward 			switch (*++*argv) {
3114286Sedward 			case 'f':
3214677Sedward 				fflag++;
3314286Sedward 				break;
3416280Sedward 			case 'c':
3516280Sedward 				if (cmd != 0) {
3616280Sedward 					(void) fprintf(stderr,
3716280Sedward 						"Only one -c allowed.\n");
3816280Sedward 					(void) usage();
3916280Sedward 				}
4016280Sedward 				cmd = next(argv);
4116280Sedward 				break;
4214169Sedward 			case 'e':
4314169Sedward 				setescape(next(argv));
4414169Sedward 				break;
4514169Sedward 			case 't':
4616280Sedward 				tflag++;
4714169Sedward 				break;
4814286Sedward 			case 'd':
4914677Sedward 				dflag++;
5014677Sedward 				break;
5114677Sedward 			case 'D':
5215025Sedward 				debug = !debug;
5314286Sedward 				break;
5414846Sedward 			case 'x':
5514846Sedward 				xflag++;
5614846Sedward 				break;
5714169Sedward 			default:
5814407Sedward 				(void) usage();
5914169Sedward 			}
6014169Sedward 		} else
6114407Sedward 			(void) usage();
6214169Sedward 	}
6316231Sedward 	nbufline = 48;				/* compatible */
64*16309Sedward 	escapec = ctrl(p);
6514286Sedward 	if ((shell = getenv("SHELL")) == 0)
6614286Sedward 		shell = "/bin/csh";
6714286Sedward 	if (shellname = rindex(shell, '/'))
6814286Sedward 		shellname++;
6914286Sedward 	else
7014286Sedward 		shellname = shell;
7115360Sedward #ifndef O_4_1A
7216110Sedward 	(void) gettimeofday(&starttime, (struct timezone *)0);
7315360Sedward #endif
7413962Sedward 	if (wwinit() < 0) {
7514895Sedward 		(void) fprintf(stderr, "%s.\n", wwerror());
7613962Sedward 		exit(1);
7713962Sedward 	}
7814846Sedward 	if (debug)
7914286Sedward 		wwnewtty.ww_tchars.t_quitc = wwoldtty.ww_tchars.t_quitc;
8014846Sedward 	if (xflag) {
8114846Sedward 		wwnewtty.ww_tchars.t_stopc = wwoldtty.ww_tchars.t_stopc;
8214846Sedward 		wwnewtty.ww_tchars.t_startc = wwoldtty.ww_tchars.t_startc;
8314846Sedward 	}
8414846Sedward 	if (debug || xflag)
8514407Sedward 		(void) wwsettty(0, &wwnewtty);
8614407Sedward 
8714407Sedward 	if ((cmdwin = wwopen(WWO_REVERSE, 1, wwncol, 0, 0, 0)) == 0) {
8814407Sedward 		(void) wwflush();
8914895Sedward 		(void) fprintf(stderr, "%s.\r\n", wwerror());
9013962Sedward 		goto bad;
9113962Sedward 	}
9216110Sedward 	cmdwin->ww_nointr = 1;
93*16309Sedward 	cmdwin->ww_noupdate = 1;
9414772Sedward 	if ((framewin = wwopen(WWO_GLASS|WWO_FRAME, wwnrow, wwncol, 0, 0, 0))
9514772Sedward 	    == 0) {
9614407Sedward 		(void) wwflush();
9714895Sedward 		(void) fprintf(stderr, "%s.\r\n", wwerror());
9814407Sedward 		goto bad;
9914407Sedward 	}
10014407Sedward 	wwadd(framewin, &wwhead);
10114720Sedward 	if ((boxwin = wwopen(WWO_GLASS, wwnrow, wwncol, 0, 0, 0)) == 0) {
10214720Sedward 		(void) wwflush();
10314895Sedward 		(void) fprintf(stderr, "%s.\r\n", wwerror());
10414720Sedward 		goto bad;
10514720Sedward 	}
10616253Sedward 	fgwin = framewin;
10714407Sedward 
10814407Sedward 	wwupdate();
10913969Sedward 	wwflush();
11013920Sedward 	(void) signal(SIGCHLD, wwchild);
11115671Sedward 	setvars();
11216280Sedward 
11316280Sedward 	setterse(tflag);
11416280Sedward 	setcmd(1);
11516280Sedward 	if (cmd != 0)
11616299Sedward 		(void) dolongcmd(cmd);
11716280Sedward 	if (!fflag) {
11814677Sedward 		if (dflag || doconfig() < 0)
11914286Sedward 			dodefault();
12016280Sedward 		if (selwin != 0)
12116280Sedward 			setcmd(0);
12214286Sedward 	}
12314895Sedward 
12414895Sedward 	mloop();
12514895Sedward 
12614407Sedward 	wwupdate();
12714407Sedward 	wwflush();
12813920Sedward bad:
12913920Sedward 	wwend();
13013920Sedward 	return 0;
13113920Sedward }
13214169Sedward 
13314169Sedward usage()
13414169Sedward {
13514677Sedward 	(void) fprintf(stderr, "window: [-e escape-char] [-t] [-f] [-d]\n");
13614454Sedward 	exit(1);
13714454Sedward 	return 0;			/* for lint */
13814169Sedward }
139