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*55911Sedward static char sccsid[] = "@(#)main.c 3.43 (Berkeley) 08/16/92"; 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 9645033Sedward #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) 11845033Sedward (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: 161*55911Sedward wwend(1); 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