113920Sedward #ifndef lint 2*17734Sedward static char sccsid[] = "@(#)main.c 3.28 01/18/85"; 313920Sedward #endif 413920Sedward 513969Sedward #include "defs.h" 616110Sedward #include <sys/signal.h> 716110Sedward #include <stdio.h> 816313Sedward #include "string.h" 916309Sedward #include "char.h" 1016398Sedward #include "local.h" 1113920Sedward 1214286Sedward #define next(a) (*++*(a) ? *(a) : (*++(a) ? *(a) : (char *)usage())) 1314169Sedward 1414407Sedward /*ARGSUSED*/ 1514169Sedward main(argc, argv) 1614169Sedward char **argv; 1713920Sedward { 1813920Sedward register char *p; 1914677Sedward char fflag = 0; 2014677Sedward char dflag = 0; 2114846Sedward char xflag = 0; 2216280Sedward char *cmd = 0; 2316280Sedward char tflag = 0; 2413920Sedward 25*17734Sedward nbufline = NLINE; 26*17734Sedward escapec = ESCAPEC; 2714286Sedward if (p = rindex(*argv, '/')) 2814286Sedward p++; 2914286Sedward else 3014286Sedward p = *argv; 3114286Sedward debug = strcmp(p, "a.out") == 0; 3214169Sedward while (*++argv) { 3314169Sedward if (**argv == '-') { 3414169Sedward switch (*++*argv) { 3514286Sedward case 'f': 3614677Sedward fflag++; 3714286Sedward break; 3816280Sedward case 'c': 3916280Sedward if (cmd != 0) { 4016280Sedward (void) fprintf(stderr, 4116280Sedward "Only one -c allowed.\n"); 4216280Sedward (void) usage(); 4316280Sedward } 4416280Sedward cmd = next(argv); 4516280Sedward break; 4614169Sedward case 'e': 4714169Sedward setescape(next(argv)); 4814169Sedward break; 4914169Sedward case 't': 5016280Sedward tflag++; 5114169Sedward break; 5214286Sedward case 'd': 5314677Sedward dflag++; 5414677Sedward break; 5514677Sedward case 'D': 5615025Sedward debug = !debug; 5714286Sedward break; 5814846Sedward case 'x': 5914846Sedward xflag++; 6014846Sedward break; 6114169Sedward default: 6214407Sedward (void) usage(); 6314169Sedward } 6414169Sedward } else 6514407Sedward (void) usage(); 6614169Sedward } 6716313Sedward if ((p = getenv("SHELL")) == 0) 6816398Sedward p = SHELL; 6916313Sedward if ((shellfile = str_cpy(p)) == 0) 7016313Sedward nomem(); 7116313Sedward if (p = rindex(shellfile, '/')) 7216313Sedward p++; 7314286Sedward else 7416313Sedward p = shellfile; 7516313Sedward shell[0] = p; 7616313Sedward shell[1] = 0; 7716110Sedward (void) gettimeofday(&starttime, (struct timezone *)0); 7813962Sedward if (wwinit() < 0) { 7914895Sedward (void) fprintf(stderr, "%s.\n", wwerror()); 8013962Sedward exit(1); 8113962Sedward } 8214846Sedward if (debug) 8314286Sedward wwnewtty.ww_tchars.t_quitc = wwoldtty.ww_tchars.t_quitc; 8414846Sedward if (xflag) { 8514846Sedward wwnewtty.ww_tchars.t_stopc = wwoldtty.ww_tchars.t_stopc; 8614846Sedward wwnewtty.ww_tchars.t_startc = wwoldtty.ww_tchars.t_startc; 8714846Sedward } 8814846Sedward if (debug || xflag) 8917407Sedward (void) wwsettty(0, &wwnewtty, &wwoldtty); 9014407Sedward 9114407Sedward if ((cmdwin = wwopen(WWO_REVERSE, 1, wwncol, 0, 0, 0)) == 0) { 9214407Sedward (void) wwflush(); 9314895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 9413962Sedward goto bad; 9513962Sedward } 9616312Sedward cmdwin->ww_mapnl = 1; 9716110Sedward cmdwin->ww_nointr = 1; 9816309Sedward cmdwin->ww_noupdate = 1; 9916313Sedward cmdwin->ww_unctrl = 1; 10014772Sedward if ((framewin = wwopen(WWO_GLASS|WWO_FRAME, wwnrow, wwncol, 0, 0, 0)) 10114772Sedward == 0) { 10214407Sedward (void) wwflush(); 10314895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 10414407Sedward goto bad; 10514407Sedward } 10614407Sedward wwadd(framewin, &wwhead); 10714720Sedward if ((boxwin = wwopen(WWO_GLASS, wwnrow, wwncol, 0, 0, 0)) == 0) { 10814720Sedward (void) wwflush(); 10914895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 11014720Sedward goto bad; 11114720Sedward } 11216253Sedward fgwin = framewin; 11314407Sedward 11414407Sedward wwupdate(); 11513969Sedward wwflush(); 11613920Sedward (void) signal(SIGCHLD, wwchild); 11715671Sedward setvars(); 11816280Sedward 11916280Sedward setterse(tflag); 12016280Sedward setcmd(1); 12116280Sedward if (cmd != 0) 12216443Sedward (void) dolongcmd(cmd, (struct value *)0, 0); 12316280Sedward if (!fflag) { 12414677Sedward if (dflag || doconfig() < 0) 12514286Sedward dodefault(); 12616280Sedward if (selwin != 0) 12716280Sedward setcmd(0); 12814286Sedward } 12914895Sedward 13014895Sedward mloop(); 13114895Sedward 13214407Sedward wwupdate(); 13314407Sedward wwflush(); 13413920Sedward bad: 13513920Sedward wwend(); 13613920Sedward return 0; 13713920Sedward } 13814169Sedward 13914169Sedward usage() 14014169Sedward { 14116313Sedward (void) fprintf(stderr, "Usage: window [-e escape-char] [-c command] [-t] [-f] [-d]\n"); 14214454Sedward exit(1); 14314454Sedward return 0; /* for lint */ 14414169Sedward } 14516313Sedward 14616313Sedward nomem() 14716313Sedward { 14816313Sedward (void) fprintf(stderr, "Out of memory.\n"); 14916313Sedward exit(1); 15016313Sedward } 151