113920Sedward #ifndef lint 2*16313Sedward static char *sccsid = "@(#)main.c 3.23 84/04/08"; 313920Sedward #endif 413920Sedward 513969Sedward #include "defs.h" 616110Sedward #include <sys/signal.h> 716110Sedward #include <stdio.h> 8*16313Sedward #include "string.h" 916309Sedward #include "char.h" 1013920Sedward 1114286Sedward #define next(a) (*++*(a) ? *(a) : (*++(a) ? *(a) : (char *)usage())) 1214169Sedward 1314407Sedward /*ARGSUSED*/ 1414169Sedward main(argc, argv) 1514169Sedward char **argv; 1613920Sedward { 1713920Sedward register char *p; 1814677Sedward char fflag = 0; 1914677Sedward char dflag = 0; 2014846Sedward char xflag = 0; 2116280Sedward char *cmd = 0; 2216280Sedward char tflag = 0; 2313920Sedward 2414286Sedward if (p = rindex(*argv, '/')) 2514286Sedward p++; 2614286Sedward else 2714286Sedward p = *argv; 2814286Sedward debug = strcmp(p, "a.out") == 0; 2914169Sedward while (*++argv) { 3014169Sedward if (**argv == '-') { 3114169Sedward switch (*++*argv) { 3214286Sedward case 'f': 3314677Sedward fflag++; 3414286Sedward break; 3516280Sedward case 'c': 3616280Sedward if (cmd != 0) { 3716280Sedward (void) fprintf(stderr, 3816280Sedward "Only one -c allowed.\n"); 3916280Sedward (void) usage(); 4016280Sedward } 4116280Sedward cmd = next(argv); 4216280Sedward break; 4314169Sedward case 'e': 4414169Sedward setescape(next(argv)); 4514169Sedward break; 4614169Sedward case 't': 4716280Sedward tflag++; 4814169Sedward break; 4914286Sedward case 'd': 5014677Sedward dflag++; 5114677Sedward break; 5214677Sedward case 'D': 5315025Sedward debug = !debug; 5414286Sedward break; 5514846Sedward case 'x': 5614846Sedward xflag++; 5714846Sedward break; 5814169Sedward default: 5914407Sedward (void) usage(); 6014169Sedward } 6114169Sedward } else 6214407Sedward (void) usage(); 6314169Sedward } 6416231Sedward nbufline = 48; /* compatible */ 6516309Sedward escapec = ctrl(p); 66*16313Sedward if ((p = getenv("SHELL")) == 0) 67*16313Sedward p = "/bin/csh"; 68*16313Sedward if ((shellfile = str_cpy(p)) == 0) 69*16313Sedward nomem(); 70*16313Sedward if (p = rindex(shellfile, '/')) 71*16313Sedward p++; 7214286Sedward else 73*16313Sedward p = shellfile; 74*16313Sedward shell[0] = p; 75*16313Sedward shell[1] = 0; 7615360Sedward #ifndef O_4_1A 7716110Sedward (void) gettimeofday(&starttime, (struct timezone *)0); 7815360Sedward #endif 7913962Sedward if (wwinit() < 0) { 8014895Sedward (void) fprintf(stderr, "%s.\n", wwerror()); 8113962Sedward exit(1); 8213962Sedward } 8314846Sedward if (debug) 8414286Sedward wwnewtty.ww_tchars.t_quitc = wwoldtty.ww_tchars.t_quitc; 8514846Sedward if (xflag) { 8614846Sedward wwnewtty.ww_tchars.t_stopc = wwoldtty.ww_tchars.t_stopc; 8714846Sedward wwnewtty.ww_tchars.t_startc = wwoldtty.ww_tchars.t_startc; 8814846Sedward } 8914846Sedward if (debug || xflag) 9014407Sedward (void) wwsettty(0, &wwnewtty); 9114407Sedward 9214407Sedward if ((cmdwin = wwopen(WWO_REVERSE, 1, wwncol, 0, 0, 0)) == 0) { 9314407Sedward (void) wwflush(); 9414895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 9513962Sedward goto bad; 9613962Sedward } 9716312Sedward cmdwin->ww_mapnl = 1; 9816110Sedward cmdwin->ww_nointr = 1; 9916309Sedward cmdwin->ww_noupdate = 1; 100*16313Sedward cmdwin->ww_unctrl = 1; 10114772Sedward if ((framewin = wwopen(WWO_GLASS|WWO_FRAME, wwnrow, wwncol, 0, 0, 0)) 10214772Sedward == 0) { 10314407Sedward (void) wwflush(); 10414895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 10514407Sedward goto bad; 10614407Sedward } 10714407Sedward wwadd(framewin, &wwhead); 10814720Sedward if ((boxwin = wwopen(WWO_GLASS, wwnrow, wwncol, 0, 0, 0)) == 0) { 10914720Sedward (void) wwflush(); 11014895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 11114720Sedward goto bad; 11214720Sedward } 11316253Sedward fgwin = framewin; 11414407Sedward 11514407Sedward wwupdate(); 11613969Sedward wwflush(); 11713920Sedward (void) signal(SIGCHLD, wwchild); 11815671Sedward setvars(); 11916280Sedward 12016280Sedward setterse(tflag); 12116280Sedward setcmd(1); 12216280Sedward if (cmd != 0) 12316299Sedward (void) dolongcmd(cmd); 12416280Sedward if (!fflag) { 12514677Sedward if (dflag || doconfig() < 0) 12614286Sedward dodefault(); 12716280Sedward if (selwin != 0) 12816280Sedward setcmd(0); 12914286Sedward } 13014895Sedward 13114895Sedward mloop(); 13214895Sedward 13314407Sedward wwupdate(); 13414407Sedward wwflush(); 13513920Sedward bad: 13613920Sedward wwend(); 13713920Sedward return 0; 13813920Sedward } 13914169Sedward 14014169Sedward usage() 14114169Sedward { 142*16313Sedward (void) fprintf(stderr, "Usage: window [-e escape-char] [-c command] [-t] [-f] [-d]\n"); 14314454Sedward exit(1); 14414454Sedward return 0; /* for lint */ 14514169Sedward } 146*16313Sedward 147*16313Sedward nomem() 148*16313Sedward { 149*16313Sedward (void) fprintf(stderr, "Out of memory.\n"); 150*16313Sedward exit(1); 151*16313Sedward } 152