113920Sedward #ifndef lint 2*16280Sedward static char *sccsid = "@(#)main.c 3.18 84/04/05"; 313920Sedward #endif 413920Sedward 513969Sedward #include "defs.h" 616110Sedward #include <sys/signal.h> 716110Sedward #include <stdio.h> 813920Sedward 914286Sedward #define next(a) (*++*(a) ? *(a) : (*++(a) ? *(a) : (char *)usage())) 1014169Sedward 1114407Sedward /*ARGSUSED*/ 1214169Sedward main(argc, argv) 1314169Sedward char **argv; 1413920Sedward { 1513920Sedward register char *p; 1614677Sedward char fflag = 0; 1714677Sedward char dflag = 0; 1814846Sedward char xflag = 0; 19*16280Sedward char *cmd = 0; 20*16280Sedward char tflag = 0; 2113920Sedward 2214286Sedward if (p = rindex(*argv, '/')) 2314286Sedward p++; 2414286Sedward else 2514286Sedward p = *argv; 2614286Sedward debug = strcmp(p, "a.out") == 0; 2714169Sedward while (*++argv) { 2814169Sedward if (**argv == '-') { 2914169Sedward switch (*++*argv) { 3014286Sedward case 'f': 3114677Sedward fflag++; 3214286Sedward break; 33*16280Sedward case 'c': 34*16280Sedward if (cmd != 0) { 35*16280Sedward (void) fprintf(stderr, 36*16280Sedward "Only one -c allowed.\n"); 37*16280Sedward (void) usage(); 38*16280Sedward } 39*16280Sedward cmd = next(argv); 40*16280Sedward break; 4114169Sedward case 'e': 4214169Sedward setescape(next(argv)); 4314169Sedward break; 4414169Sedward case 't': 45*16280Sedward tflag++; 4614169Sedward break; 4714286Sedward case 'd': 4814677Sedward dflag++; 4914677Sedward break; 5014677Sedward case 'D': 5115025Sedward debug = !debug; 5214286Sedward break; 5314846Sedward case 'x': 5414846Sedward xflag++; 5514846Sedward break; 5614169Sedward default: 5714407Sedward (void) usage(); 5814169Sedward } 5914169Sedward } else 6014407Sedward (void) usage(); 6114169Sedward } 6216231Sedward nbufline = 48; /* compatible */ 6316231Sedward escapec = CTRL(p); 6414286Sedward if ((shell = getenv("SHELL")) == 0) 6514286Sedward shell = "/bin/csh"; 6614286Sedward if (shellname = rindex(shell, '/')) 6714286Sedward shellname++; 6814286Sedward else 6914286Sedward shellname = shell; 7015360Sedward #ifndef O_4_1A 7116110Sedward (void) gettimeofday(&starttime, (struct timezone *)0); 7215360Sedward #endif 7313962Sedward if (wwinit() < 0) { 7414895Sedward (void) fprintf(stderr, "%s.\n", wwerror()); 7513962Sedward exit(1); 7613962Sedward } 7714846Sedward if (debug) 7814286Sedward wwnewtty.ww_tchars.t_quitc = wwoldtty.ww_tchars.t_quitc; 7914846Sedward if (xflag) { 8014846Sedward wwnewtty.ww_tchars.t_stopc = wwoldtty.ww_tchars.t_stopc; 8114846Sedward wwnewtty.ww_tchars.t_startc = wwoldtty.ww_tchars.t_startc; 8214846Sedward } 8314846Sedward if (debug || xflag) 8414407Sedward (void) wwsettty(0, &wwnewtty); 8514407Sedward 8614407Sedward if ((cmdwin = wwopen(WWO_REVERSE, 1, wwncol, 0, 0, 0)) == 0) { 8714407Sedward (void) wwflush(); 8814895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 8913962Sedward goto bad; 9013962Sedward } 9116110Sedward cmdwin->ww_nointr = 1; 9214772Sedward if ((framewin = wwopen(WWO_GLASS|WWO_FRAME, wwnrow, wwncol, 0, 0, 0)) 9314772Sedward == 0) { 9414407Sedward (void) wwflush(); 9514895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 9614407Sedward goto bad; 9714407Sedward } 9814407Sedward wwadd(framewin, &wwhead); 9914720Sedward if ((boxwin = wwopen(WWO_GLASS, wwnrow, wwncol, 0, 0, 0)) == 0) { 10014720Sedward (void) wwflush(); 10114895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 10214720Sedward goto bad; 10314720Sedward } 10416253Sedward fgwin = framewin; 10516253Sedward bgwin = &wwhead; 10614407Sedward 10714407Sedward wwupdate(); 10813969Sedward wwflush(); 10913920Sedward (void) signal(SIGCHLD, wwchild); 11015671Sedward setvars(); 111*16280Sedward 112*16280Sedward setterse(tflag); 113*16280Sedward setcmd(1); 114*16280Sedward if (cmd != 0) 115*16280Sedward dolongcmd(cmd); 116*16280Sedward if (!fflag) { 11714677Sedward if (dflag || doconfig() < 0) 11814286Sedward dodefault(); 119*16280Sedward if (selwin != 0) 120*16280Sedward setcmd(0); 12114286Sedward } 12214895Sedward 12314895Sedward mloop(); 12414895Sedward 12514407Sedward wwupdate(); 12614407Sedward wwflush(); 12713920Sedward bad: 12813920Sedward wwend(); 12913920Sedward return 0; 13013920Sedward } 13114169Sedward 13214169Sedward usage() 13314169Sedward { 13414677Sedward (void) fprintf(stderr, "window: [-e escape-char] [-t] [-f] [-d]\n"); 13514454Sedward exit(1); 13614454Sedward return 0; /* for lint */ 13714169Sedward } 138