xref: /csrg-svn/usr.bin/window/main.c (revision 45033)
118727Sedward /*
233514Sbostic  * Copyright (c) 1983 Regents of the University of California.
333514Sbostic  * All rights reserved.
433514Sbostic  *
542954Sbostic  * This code is derived from software contributed to Berkeley by
642954Sbostic  * Edward Wang at The University of California, Berkeley.
742954Sbostic  *
842835Sbostic  * %sccs.include.redist.c%
918727Sedward  */
1018727Sedward 
1133514Sbostic #ifndef lint
12*45033Sedward static char sccsid[] = "@(#)main.c	3.42 (Berkeley) 08/12/90";
1333514Sbostic #endif /* not lint */
1433514Sbostic 
1513969Sedward #include "defs.h"
1637862Sbostic #include <paths.h>
1716110Sedward #include <stdio.h>
1816313Sedward #include "string.h"
1916309Sedward #include "char.h"
2016398Sedward #include "local.h"
2113920Sedward 
2214286Sedward #define next(a) (*++*(a) ? *(a) : (*++(a) ? *(a) : (char *)usage()))
2314169Sedward 
2414407Sedward /*ARGSUSED*/
2514169Sedward main(argc, argv)
2614169Sedward char **argv;
2713920Sedward {
2813920Sedward 	register char *p;
2914677Sedward 	char fflag = 0;
3014677Sedward 	char dflag = 0;
3114846Sedward 	char xflag = 0;
3216280Sedward 	char *cmd = 0;
3316280Sedward 	char tflag = 0;
3413920Sedward 
3517734Sedward 	escapec = ESCAPEC;
3614286Sedward 	if (p = rindex(*argv, '/'))
3714286Sedward 		p++;
3814286Sedward 	else
3914286Sedward 		p = *argv;
4014286Sedward 	debug = strcmp(p, "a.out") == 0;
4114169Sedward 	while (*++argv) {
4214169Sedward 		if (**argv == '-') {
4314169Sedward 			switch (*++*argv) {
4414286Sedward 			case 'f':
4514677Sedward 				fflag++;
4614286Sedward 				break;
4716280Sedward 			case 'c':
4816280Sedward 				if (cmd != 0) {
4916280Sedward 					(void) fprintf(stderr,
5016280Sedward 						"Only one -c allowed.\n");
5116280Sedward 					(void) usage();
5216280Sedward 				}
5316280Sedward 				cmd = next(argv);
5416280Sedward 				break;
5514169Sedward 			case 'e':
5614169Sedward 				setescape(next(argv));
5714169Sedward 				break;
5814169Sedward 			case 't':
5916280Sedward 				tflag++;
6014169Sedward 				break;
6114286Sedward 			case 'd':
6214677Sedward 				dflag++;
6314677Sedward 				break;
6414677Sedward 			case 'D':
6515025Sedward 				debug = !debug;
6614286Sedward 				break;
6714846Sedward 			case 'x':
6814846Sedward 				xflag++;
6914846Sedward 				break;
7014169Sedward 			default:
7114407Sedward 				(void) usage();
7214169Sedward 			}
7314169Sedward 		} else
7414407Sedward 			(void) usage();
7514169Sedward 	}
7616313Sedward 	if ((p = getenv("SHELL")) == 0)
7737461Sbostic 		p = _PATH_BSHELL;
7839293Sedward 	if ((default_shellfile = str_cpy(p)) == 0) {
7939293Sedward 		(void) fprintf(stderr, "Out of memory.\n");
8039293Sedward 		exit(1);
8139293Sedward 	}
8235330Sedward 	if (p = rindex(default_shellfile, '/'))
8316313Sedward 		p++;
8414286Sedward 	else
8535330Sedward 		p = default_shellfile;
8635330Sedward 	default_shell[0] = p;
8735330Sedward 	default_shell[1] = 0;
8835330Sedward 	default_nline = NLINE;
8935330Sedward 	default_smooth = 1;
9016110Sedward 	(void) gettimeofday(&starttime, (struct timezone *)0);
9113962Sedward 	if (wwinit() < 0) {
9214895Sedward 		(void) fprintf(stderr, "%s.\n", wwerror());
9313962Sedward 		exit(1);
9413962Sedward 	}
9542834Sedward 
96*45033Sedward #ifdef OLD_TTY
9714846Sedward 	if (debug)
9814286Sedward 		wwnewtty.ww_tchars.t_quitc = wwoldtty.ww_tchars.t_quitc;
9914846Sedward 	if (xflag) {
10014846Sedward 		wwnewtty.ww_tchars.t_stopc = wwoldtty.ww_tchars.t_stopc;
10114846Sedward 		wwnewtty.ww_tchars.t_startc = wwoldtty.ww_tchars.t_startc;
10214846Sedward 	}
10342834Sedward #else
10442834Sedward 	if (debug) {
10542834Sedward 		wwnewtty.ww_termios.c_cc[VQUIT] =
10642834Sedward 			wwoldtty.ww_termios.c_cc[VQUIT];
10742834Sedward 		wwnewtty.ww_termios.c_lflag |= ISIG;
10842834Sedward 	}
10942834Sedward 	if (xflag) {
11042834Sedward 		wwnewtty.ww_termios.c_cc[VSTOP] =
11142834Sedward 			wwoldtty.ww_termios.c_cc[VSTOP];
11242834Sedward 		wwnewtty.ww_termios.c_cc[VSTART] =
11342834Sedward 			wwoldtty.ww_termios.c_cc[VSTART];
11442834Sedward 		wwnewtty.ww_termios.c_iflag |= IXON;
11542834Sedward 	}
11642834Sedward #endif
11714846Sedward 	if (debug || xflag)
118*45033Sedward 		(void) wwsettty(0, &wwnewtty);
11914407Sedward 
12031137Sedward 	if ((cmdwin = wwopen(wwbaud > 2400 ? WWO_REVERSE : 0, 1, wwncol,
12131137Sedward 			     0, 0, 0)) == 0) {
12238563Sedward 		wwflush();
12314895Sedward 		(void) fprintf(stderr, "%s.\r\n", wwerror());
12413962Sedward 		goto bad;
12513962Sedward 	}
12616312Sedward 	cmdwin->ww_mapnl = 1;
12716110Sedward 	cmdwin->ww_nointr = 1;
12816309Sedward 	cmdwin->ww_noupdate = 1;
12916313Sedward 	cmdwin->ww_unctrl = 1;
13014772Sedward 	if ((framewin = wwopen(WWO_GLASS|WWO_FRAME, wwnrow, wwncol, 0, 0, 0))
13114772Sedward 	    == 0) {
13238563Sedward 		wwflush();
13314895Sedward 		(void) fprintf(stderr, "%s.\r\n", wwerror());
13414407Sedward 		goto bad;
13514407Sedward 	}
13614407Sedward 	wwadd(framewin, &wwhead);
13714720Sedward 	if ((boxwin = wwopen(WWO_GLASS, wwnrow, wwncol, 0, 0, 0)) == 0) {
13838563Sedward 		wwflush();
13914895Sedward 		(void) fprintf(stderr, "%s.\r\n", wwerror());
14014720Sedward 		goto bad;
14114720Sedward 	}
14216253Sedward 	fgwin = framewin;
14314407Sedward 
14414407Sedward 	wwupdate();
14513969Sedward 	wwflush();
14615671Sedward 	setvars();
14716280Sedward 
14816280Sedward 	setterse(tflag);
14916280Sedward 	setcmd(1);
15016280Sedward 	if (cmd != 0)
15116443Sedward 		(void) dolongcmd(cmd, (struct value *)0, 0);
15235330Sedward 	if (!fflag)
15314677Sedward 		if (dflag || doconfig() < 0)
15414286Sedward 			dodefault();
15535330Sedward 	if (selwin != 0)
15635330Sedward 		setcmd(0);
15714895Sedward 
15814895Sedward 	mloop();
15914895Sedward 
16013920Sedward bad:
16113920Sedward 	wwend();
16213920Sedward 	return 0;
16313920Sedward }
16414169Sedward 
16514169Sedward usage()
16614169Sedward {
16716313Sedward 	(void) fprintf(stderr, "Usage: window [-e escape-char] [-c command] [-t] [-f] [-d]\n");
16814454Sedward 	exit(1);
16914454Sedward 	return 0;			/* for lint */
17014169Sedward }
171