113920Sedward #ifndef lint 2*16309Sedward static char *sccsid = "@(#)main.c 3.21 84/04/08"; 313920Sedward #endif 413920Sedward 513969Sedward #include "defs.h" 616110Sedward #include <sys/signal.h> 716110Sedward #include <stdio.h> 8*16309Sedward #include "char.h" 913920Sedward 1014286Sedward #define next(a) (*++*(a) ? *(a) : (*++(a) ? *(a) : (char *)usage())) 1114169Sedward 1214407Sedward /*ARGSUSED*/ 1314169Sedward main(argc, argv) 1414169Sedward char **argv; 1513920Sedward { 1613920Sedward register char *p; 1714677Sedward char fflag = 0; 1814677Sedward char dflag = 0; 1914846Sedward char xflag = 0; 2016280Sedward char *cmd = 0; 2116280Sedward char tflag = 0; 2213920Sedward 2314286Sedward if (p = rindex(*argv, '/')) 2414286Sedward p++; 2514286Sedward else 2614286Sedward p = *argv; 2714286Sedward debug = strcmp(p, "a.out") == 0; 2814169Sedward while (*++argv) { 2914169Sedward if (**argv == '-') { 3014169Sedward switch (*++*argv) { 3114286Sedward case 'f': 3214677Sedward fflag++; 3314286Sedward break; 3416280Sedward case 'c': 3516280Sedward if (cmd != 0) { 3616280Sedward (void) fprintf(stderr, 3716280Sedward "Only one -c allowed.\n"); 3816280Sedward (void) usage(); 3916280Sedward } 4016280Sedward cmd = next(argv); 4116280Sedward break; 4214169Sedward case 'e': 4314169Sedward setescape(next(argv)); 4414169Sedward break; 4514169Sedward case 't': 4616280Sedward tflag++; 4714169Sedward break; 4814286Sedward case 'd': 4914677Sedward dflag++; 5014677Sedward break; 5114677Sedward case 'D': 5215025Sedward debug = !debug; 5314286Sedward break; 5414846Sedward case 'x': 5514846Sedward xflag++; 5614846Sedward break; 5714169Sedward default: 5814407Sedward (void) usage(); 5914169Sedward } 6014169Sedward } else 6114407Sedward (void) usage(); 6214169Sedward } 6316231Sedward nbufline = 48; /* compatible */ 64*16309Sedward escapec = ctrl(p); 6514286Sedward if ((shell = getenv("SHELL")) == 0) 6614286Sedward shell = "/bin/csh"; 6714286Sedward if (shellname = rindex(shell, '/')) 6814286Sedward shellname++; 6914286Sedward else 7014286Sedward shellname = shell; 7115360Sedward #ifndef O_4_1A 7216110Sedward (void) gettimeofday(&starttime, (struct timezone *)0); 7315360Sedward #endif 7413962Sedward if (wwinit() < 0) { 7514895Sedward (void) fprintf(stderr, "%s.\n", wwerror()); 7613962Sedward exit(1); 7713962Sedward } 7814846Sedward if (debug) 7914286Sedward wwnewtty.ww_tchars.t_quitc = wwoldtty.ww_tchars.t_quitc; 8014846Sedward if (xflag) { 8114846Sedward wwnewtty.ww_tchars.t_stopc = wwoldtty.ww_tchars.t_stopc; 8214846Sedward wwnewtty.ww_tchars.t_startc = wwoldtty.ww_tchars.t_startc; 8314846Sedward } 8414846Sedward if (debug || xflag) 8514407Sedward (void) wwsettty(0, &wwnewtty); 8614407Sedward 8714407Sedward if ((cmdwin = wwopen(WWO_REVERSE, 1, wwncol, 0, 0, 0)) == 0) { 8814407Sedward (void) wwflush(); 8914895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 9013962Sedward goto bad; 9113962Sedward } 9216110Sedward cmdwin->ww_nointr = 1; 93*16309Sedward cmdwin->ww_noupdate = 1; 9414772Sedward if ((framewin = wwopen(WWO_GLASS|WWO_FRAME, wwnrow, wwncol, 0, 0, 0)) 9514772Sedward == 0) { 9614407Sedward (void) wwflush(); 9714895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 9814407Sedward goto bad; 9914407Sedward } 10014407Sedward wwadd(framewin, &wwhead); 10114720Sedward if ((boxwin = wwopen(WWO_GLASS, wwnrow, wwncol, 0, 0, 0)) == 0) { 10214720Sedward (void) wwflush(); 10314895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 10414720Sedward goto bad; 10514720Sedward } 10616253Sedward fgwin = framewin; 10714407Sedward 10814407Sedward wwupdate(); 10913969Sedward wwflush(); 11013920Sedward (void) signal(SIGCHLD, wwchild); 11115671Sedward setvars(); 11216280Sedward 11316280Sedward setterse(tflag); 11416280Sedward setcmd(1); 11516280Sedward if (cmd != 0) 11616299Sedward (void) dolongcmd(cmd); 11716280Sedward if (!fflag) { 11814677Sedward if (dflag || doconfig() < 0) 11914286Sedward dodefault(); 12016280Sedward if (selwin != 0) 12116280Sedward setcmd(0); 12214286Sedward } 12314895Sedward 12414895Sedward mloop(); 12514895Sedward 12614407Sedward wwupdate(); 12714407Sedward wwflush(); 12813920Sedward bad: 12913920Sedward wwend(); 13013920Sedward return 0; 13113920Sedward } 13214169Sedward 13314169Sedward usage() 13414169Sedward { 13514677Sedward (void) fprintf(stderr, "window: [-e escape-char] [-t] [-f] [-d]\n"); 13614454Sedward exit(1); 13714454Sedward return 0; /* for lint */ 13814169Sedward } 139