113920Sedward #ifndef lint 2*18727Sedward static char sccsid[] = "@(#)main.c 3.29 04/24/85"; 313920Sedward #endif 413920Sedward 5*18727Sedward /* 6*18727Sedward * Copyright (c) 1983 Regents of the University of California, 7*18727Sedward * All rights reserved. Redistribution permitted subject to 8*18727Sedward * the terms of the Berkeley Software License Agreement. 9*18727Sedward */ 10*18727Sedward 1113969Sedward #include "defs.h" 1216110Sedward #include <sys/signal.h> 1316110Sedward #include <stdio.h> 1416313Sedward #include "string.h" 1516309Sedward #include "char.h" 1616398Sedward #include "local.h" 1713920Sedward 1814286Sedward #define next(a) (*++*(a) ? *(a) : (*++(a) ? *(a) : (char *)usage())) 1914169Sedward 2014407Sedward /*ARGSUSED*/ 2114169Sedward main(argc, argv) 2214169Sedward char **argv; 2313920Sedward { 2413920Sedward register char *p; 2514677Sedward char fflag = 0; 2614677Sedward char dflag = 0; 2714846Sedward char xflag = 0; 2816280Sedward char *cmd = 0; 2916280Sedward char tflag = 0; 3013920Sedward 3117734Sedward nbufline = NLINE; 3217734Sedward escapec = ESCAPEC; 3314286Sedward if (p = rindex(*argv, '/')) 3414286Sedward p++; 3514286Sedward else 3614286Sedward p = *argv; 3714286Sedward debug = strcmp(p, "a.out") == 0; 3814169Sedward while (*++argv) { 3914169Sedward if (**argv == '-') { 4014169Sedward switch (*++*argv) { 4114286Sedward case 'f': 4214677Sedward fflag++; 4314286Sedward break; 4416280Sedward case 'c': 4516280Sedward if (cmd != 0) { 4616280Sedward (void) fprintf(stderr, 4716280Sedward "Only one -c allowed.\n"); 4816280Sedward (void) usage(); 4916280Sedward } 5016280Sedward cmd = next(argv); 5116280Sedward break; 5214169Sedward case 'e': 5314169Sedward setescape(next(argv)); 5414169Sedward break; 5514169Sedward case 't': 5616280Sedward tflag++; 5714169Sedward break; 5814286Sedward case 'd': 5914677Sedward dflag++; 6014677Sedward break; 6114677Sedward case 'D': 6215025Sedward debug = !debug; 6314286Sedward break; 6414846Sedward case 'x': 6514846Sedward xflag++; 6614846Sedward break; 6714169Sedward default: 6814407Sedward (void) usage(); 6914169Sedward } 7014169Sedward } else 7114407Sedward (void) usage(); 7214169Sedward } 7316313Sedward if ((p = getenv("SHELL")) == 0) 7416398Sedward p = SHELL; 7516313Sedward if ((shellfile = str_cpy(p)) == 0) 7616313Sedward nomem(); 7716313Sedward if (p = rindex(shellfile, '/')) 7816313Sedward p++; 7914286Sedward else 8016313Sedward p = shellfile; 8116313Sedward shell[0] = p; 8216313Sedward shell[1] = 0; 8316110Sedward (void) gettimeofday(&starttime, (struct timezone *)0); 8413962Sedward if (wwinit() < 0) { 8514895Sedward (void) fprintf(stderr, "%s.\n", wwerror()); 8613962Sedward exit(1); 8713962Sedward } 8814846Sedward if (debug) 8914286Sedward wwnewtty.ww_tchars.t_quitc = wwoldtty.ww_tchars.t_quitc; 9014846Sedward if (xflag) { 9114846Sedward wwnewtty.ww_tchars.t_stopc = wwoldtty.ww_tchars.t_stopc; 9214846Sedward wwnewtty.ww_tchars.t_startc = wwoldtty.ww_tchars.t_startc; 9314846Sedward } 9414846Sedward if (debug || xflag) 9517407Sedward (void) wwsettty(0, &wwnewtty, &wwoldtty); 9614407Sedward 9714407Sedward if ((cmdwin = wwopen(WWO_REVERSE, 1, wwncol, 0, 0, 0)) == 0) { 9814407Sedward (void) wwflush(); 9914895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 10013962Sedward goto bad; 10113962Sedward } 10216312Sedward cmdwin->ww_mapnl = 1; 10316110Sedward cmdwin->ww_nointr = 1; 10416309Sedward cmdwin->ww_noupdate = 1; 10516313Sedward cmdwin->ww_unctrl = 1; 10614772Sedward if ((framewin = wwopen(WWO_GLASS|WWO_FRAME, wwnrow, wwncol, 0, 0, 0)) 10714772Sedward == 0) { 10814407Sedward (void) wwflush(); 10914895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 11014407Sedward goto bad; 11114407Sedward } 11214407Sedward wwadd(framewin, &wwhead); 11314720Sedward if ((boxwin = wwopen(WWO_GLASS, wwnrow, wwncol, 0, 0, 0)) == 0) { 11414720Sedward (void) wwflush(); 11514895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 11614720Sedward goto bad; 11714720Sedward } 11816253Sedward fgwin = framewin; 11914407Sedward 12014407Sedward wwupdate(); 12113969Sedward wwflush(); 12213920Sedward (void) signal(SIGCHLD, wwchild); 12315671Sedward setvars(); 12416280Sedward 12516280Sedward setterse(tflag); 12616280Sedward setcmd(1); 12716280Sedward if (cmd != 0) 12816443Sedward (void) dolongcmd(cmd, (struct value *)0, 0); 12916280Sedward if (!fflag) { 13014677Sedward if (dflag || doconfig() < 0) 13114286Sedward dodefault(); 13216280Sedward if (selwin != 0) 13316280Sedward setcmd(0); 13414286Sedward } 13514895Sedward 13614895Sedward mloop(); 13714895Sedward 13814407Sedward wwupdate(); 13914407Sedward wwflush(); 14013920Sedward bad: 14113920Sedward wwend(); 14213920Sedward return 0; 14313920Sedward } 14414169Sedward 14514169Sedward usage() 14614169Sedward { 14716313Sedward (void) fprintf(stderr, "Usage: window [-e escape-char] [-c command] [-t] [-f] [-d]\n"); 14814454Sedward exit(1); 14914454Sedward return 0; /* for lint */ 15014169Sedward } 15116313Sedward 15216313Sedward nomem() 15316313Sedward { 15416313Sedward (void) fprintf(stderr, "Out of memory.\n"); 15516313Sedward exit(1); 15616313Sedward } 157