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