xref: /csrg-svn/usr.bin/window/main.c (revision 66661)
118727Sedward /*
262461Sbostic  * Copyright (c) 1983, 1993
362461Sbostic  *	The Regents of the University of California.  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*66661Sbostic char copyright[] =
13*66661Sbostic "@(#) Copyright (c) 1983, 1993\n\
14*66661Sbostic 	The Regents of the University of California.  All rights reserved.\n";
1533514Sbostic #endif /* not lint */
1633514Sbostic 
17*66661Sbostic #ifndef lint
18*66661Sbostic static char sccsid[] = "@(#)main.c	8.2 (Berkeley) 04/02/94";
19*66661Sbostic #endif /* not lint */
20*66661Sbostic 
2113969Sedward #include "defs.h"
2237862Sbostic #include <paths.h>
2316110Sedward #include <stdio.h>
2416313Sedward #include "string.h"
2516309Sedward #include "char.h"
2616398Sedward #include "local.h"
2713920Sedward 
2814286Sedward #define next(a) (*++*(a) ? *(a) : (*++(a) ? *(a) : (char *)usage()))
2914169Sedward 
3014407Sedward /*ARGSUSED*/
main(argc,argv)3114169Sedward main(argc, argv)
3214169Sedward char **argv;
3313920Sedward {
3413920Sedward 	register char *p;
3514677Sedward 	char fflag = 0;
3614677Sedward 	char dflag = 0;
3714846Sedward 	char xflag = 0;
3816280Sedward 	char *cmd = 0;
3916280Sedward 	char tflag = 0;
4013920Sedward 
4117734Sedward 	escapec = ESCAPEC;
4214286Sedward 	if (p = rindex(*argv, '/'))
4314286Sedward 		p++;
4414286Sedward 	else
4514286Sedward 		p = *argv;
4614286Sedward 	debug = strcmp(p, "a.out") == 0;
4714169Sedward 	while (*++argv) {
4814169Sedward 		if (**argv == '-') {
4914169Sedward 			switch (*++*argv) {
5014286Sedward 			case 'f':
5114677Sedward 				fflag++;
5214286Sedward 				break;
5316280Sedward 			case 'c':
5416280Sedward 				if (cmd != 0) {
5516280Sedward 					(void) fprintf(stderr,
5616280Sedward 						"Only one -c allowed.\n");
5716280Sedward 					(void) usage();
5816280Sedward 				}
5916280Sedward 				cmd = next(argv);
6016280Sedward 				break;
6114169Sedward 			case 'e':
6214169Sedward 				setescape(next(argv));
6314169Sedward 				break;
6414169Sedward 			case 't':
6516280Sedward 				tflag++;
6614169Sedward 				break;
6714286Sedward 			case 'd':
6814677Sedward 				dflag++;
6914677Sedward 				break;
7014677Sedward 			case 'D':
7115025Sedward 				debug = !debug;
7214286Sedward 				break;
7314846Sedward 			case 'x':
7414846Sedward 				xflag++;
7514846Sedward 				break;
7614169Sedward 			default:
7714407Sedward 				(void) usage();
7814169Sedward 			}
7914169Sedward 		} else
8014407Sedward 			(void) usage();
8114169Sedward 	}
8216313Sedward 	if ((p = getenv("SHELL")) == 0)
8337461Sbostic 		p = _PATH_BSHELL;
8439293Sedward 	if ((default_shellfile = str_cpy(p)) == 0) {
8539293Sedward 		(void) fprintf(stderr, "Out of memory.\n");
8639293Sedward 		exit(1);
8739293Sedward 	}
8835330Sedward 	if (p = rindex(default_shellfile, '/'))
8916313Sedward 		p++;
9014286Sedward 	else
9135330Sedward 		p = default_shellfile;
9235330Sedward 	default_shell[0] = p;
9335330Sedward 	default_shell[1] = 0;
9435330Sedward 	default_nline = NLINE;
9535330Sedward 	default_smooth = 1;
9616110Sedward 	(void) gettimeofday(&starttime, (struct timezone *)0);
9713962Sedward 	if (wwinit() < 0) {
9814895Sedward 		(void) fprintf(stderr, "%s.\n", wwerror());
9913962Sedward 		exit(1);
10013962Sedward 	}
10142834Sedward 
10245033Sedward #ifdef OLD_TTY
10314846Sedward 	if (debug)
10414286Sedward 		wwnewtty.ww_tchars.t_quitc = wwoldtty.ww_tchars.t_quitc;
10514846Sedward 	if (xflag) {
10614846Sedward 		wwnewtty.ww_tchars.t_stopc = wwoldtty.ww_tchars.t_stopc;
10714846Sedward 		wwnewtty.ww_tchars.t_startc = wwoldtty.ww_tchars.t_startc;
10814846Sedward 	}
10942834Sedward #else
11042834Sedward 	if (debug) {
11142834Sedward 		wwnewtty.ww_termios.c_cc[VQUIT] =
11242834Sedward 			wwoldtty.ww_termios.c_cc[VQUIT];
11342834Sedward 		wwnewtty.ww_termios.c_lflag |= ISIG;
11442834Sedward 	}
11542834Sedward 	if (xflag) {
11642834Sedward 		wwnewtty.ww_termios.c_cc[VSTOP] =
11742834Sedward 			wwoldtty.ww_termios.c_cc[VSTOP];
11842834Sedward 		wwnewtty.ww_termios.c_cc[VSTART] =
11942834Sedward 			wwoldtty.ww_termios.c_cc[VSTART];
12042834Sedward 		wwnewtty.ww_termios.c_iflag |= IXON;
12142834Sedward 	}
12242834Sedward #endif
12314846Sedward 	if (debug || xflag)
12445033Sedward 		(void) wwsettty(0, &wwnewtty);
12514407Sedward 
12631137Sedward 	if ((cmdwin = wwopen(wwbaud > 2400 ? WWO_REVERSE : 0, 1, wwncol,
12731137Sedward 			     0, 0, 0)) == 0) {
12838563Sedward 		wwflush();
12914895Sedward 		(void) fprintf(stderr, "%s.\r\n", wwerror());
13013962Sedward 		goto bad;
13113962Sedward 	}
13216312Sedward 	cmdwin->ww_mapnl = 1;
13316110Sedward 	cmdwin->ww_nointr = 1;
13416309Sedward 	cmdwin->ww_noupdate = 1;
13516313Sedward 	cmdwin->ww_unctrl = 1;
13614772Sedward 	if ((framewin = wwopen(WWO_GLASS|WWO_FRAME, wwnrow, wwncol, 0, 0, 0))
13714772Sedward 	    == 0) {
13838563Sedward 		wwflush();
13914895Sedward 		(void) fprintf(stderr, "%s.\r\n", wwerror());
14014407Sedward 		goto bad;
14114407Sedward 	}
14214407Sedward 	wwadd(framewin, &wwhead);
14314720Sedward 	if ((boxwin = wwopen(WWO_GLASS, wwnrow, wwncol, 0, 0, 0)) == 0) {
14438563Sedward 		wwflush();
14514895Sedward 		(void) fprintf(stderr, "%s.\r\n", wwerror());
14614720Sedward 		goto bad;
14714720Sedward 	}
14816253Sedward 	fgwin = framewin;
14914407Sedward 
15014407Sedward 	wwupdate();
15113969Sedward 	wwflush();
15215671Sedward 	setvars();
15316280Sedward 
15416280Sedward 	setterse(tflag);
15516280Sedward 	setcmd(1);
15616280Sedward 	if (cmd != 0)
15716443Sedward 		(void) dolongcmd(cmd, (struct value *)0, 0);
15835330Sedward 	if (!fflag)
15914677Sedward 		if (dflag || doconfig() < 0)
16014286Sedward 			dodefault();
16135330Sedward 	if (selwin != 0)
16235330Sedward 		setcmd(0);
16314895Sedward 
16414895Sedward 	mloop();
16514895Sedward 
16613920Sedward bad:
16755911Sedward 	wwend(1);
16813920Sedward 	return 0;
16913920Sedward }
17014169Sedward 
usage()17114169Sedward usage()
17214169Sedward {
17316313Sedward 	(void) fprintf(stderr, "Usage: window [-e escape-char] [-c command] [-t] [-f] [-d]\n");
17414454Sedward 	exit(1);
17514454Sedward 	return 0;			/* for lint */
17614169Sedward }
177