118727Sedward /* 233514Sbostic * Copyright (c) 1983 Regents of the University of California. 333514Sbostic * All rights reserved. 433514Sbostic * 533514Sbostic * Redistribution and use in source and binary forms are permitted 634909Sbostic * provided that the above copyright notice and this paragraph are 734909Sbostic * duplicated in all such forms and that any documentation, 834909Sbostic * advertising materials, and other materials related to such 934909Sbostic * distribution and use acknowledge that the software was developed 1034909Sbostic * by the University of California, Berkeley. The name of the 1134909Sbostic * University may not be used to endorse or promote products derived 1234909Sbostic * from this software without specific prior written permission. 1334909Sbostic * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 1434909Sbostic * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 1534909Sbostic * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. 1618727Sedward */ 1718727Sedward 1833514Sbostic #ifndef lint 19*35330Sedward static char sccsid[] = "@(#)main.c 3.34 (Berkeley) 08/04/88"; 2033514Sbostic #endif /* not lint */ 2133514Sbostic 2213969Sedward #include "defs.h" 2316110Sedward #include <sys/signal.h> 2416110Sedward #include <stdio.h> 2516313Sedward #include "string.h" 2616309Sedward #include "char.h" 2716398Sedward #include "local.h" 2813920Sedward 2914286Sedward #define next(a) (*++*(a) ? *(a) : (*++(a) ? *(a) : (char *)usage())) 3014169Sedward 3114407Sedward /*ARGSUSED*/ 3214169Sedward main(argc, argv) 3314169Sedward char **argv; 3413920Sedward { 3513920Sedward register char *p; 3614677Sedward char fflag = 0; 3714677Sedward char dflag = 0; 3814846Sedward char xflag = 0; 3916280Sedward char *cmd = 0; 4016280Sedward char tflag = 0; 4113920Sedward 4217734Sedward escapec = ESCAPEC; 4314286Sedward if (p = rindex(*argv, '/')) 4414286Sedward p++; 4514286Sedward else 4614286Sedward p = *argv; 4714286Sedward debug = strcmp(p, "a.out") == 0; 4814169Sedward while (*++argv) { 4914169Sedward if (**argv == '-') { 5014169Sedward switch (*++*argv) { 5114286Sedward case 'f': 5214677Sedward fflag++; 5314286Sedward break; 5416280Sedward case 'c': 5516280Sedward if (cmd != 0) { 5616280Sedward (void) fprintf(stderr, 5716280Sedward "Only one -c allowed.\n"); 5816280Sedward (void) usage(); 5916280Sedward } 6016280Sedward cmd = next(argv); 6116280Sedward break; 6214169Sedward case 'e': 6314169Sedward setescape(next(argv)); 6414169Sedward break; 6514169Sedward case 't': 6616280Sedward tflag++; 6714169Sedward break; 6814286Sedward case 'd': 6914677Sedward dflag++; 7014677Sedward break; 7114677Sedward case 'D': 7215025Sedward debug = !debug; 7314286Sedward break; 7414846Sedward case 'x': 7514846Sedward xflag++; 7614846Sedward break; 7714169Sedward default: 7814407Sedward (void) usage(); 7914169Sedward } 8014169Sedward } else 8114407Sedward (void) usage(); 8214169Sedward } 8316313Sedward if ((p = getenv("SHELL")) == 0) 8416398Sedward p = SHELL; 85*35330Sedward if ((default_shellfile = str_cpy(p)) == 0) 8616313Sedward nomem(); 87*35330Sedward if (p = rindex(default_shellfile, '/')) 8816313Sedward p++; 8914286Sedward else 90*35330Sedward p = default_shellfile; 91*35330Sedward default_shell[0] = p; 92*35330Sedward default_shell[1] = 0; 93*35330Sedward default_nline = NLINE; 94*35330Sedward default_smooth = 1; 9516110Sedward (void) gettimeofday(&starttime, (struct timezone *)0); 9613962Sedward if (wwinit() < 0) { 9714895Sedward (void) fprintf(stderr, "%s.\n", wwerror()); 9813962Sedward exit(1); 9913962Sedward } 10014846Sedward if (debug) 10114286Sedward wwnewtty.ww_tchars.t_quitc = wwoldtty.ww_tchars.t_quitc; 10214846Sedward if (xflag) { 10314846Sedward wwnewtty.ww_tchars.t_stopc = wwoldtty.ww_tchars.t_stopc; 10414846Sedward wwnewtty.ww_tchars.t_startc = wwoldtty.ww_tchars.t_startc; 10514846Sedward } 10614846Sedward if (debug || xflag) 10717407Sedward (void) wwsettty(0, &wwnewtty, &wwoldtty); 10814407Sedward 10931137Sedward if ((cmdwin = wwopen(wwbaud > 2400 ? WWO_REVERSE : 0, 1, wwncol, 11031137Sedward 0, 0, 0)) == 0) { 11114407Sedward (void) wwflush(); 11214895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 11313962Sedward goto bad; 11413962Sedward } 11516312Sedward cmdwin->ww_mapnl = 1; 11616110Sedward cmdwin->ww_nointr = 1; 11716309Sedward cmdwin->ww_noupdate = 1; 11816313Sedward cmdwin->ww_unctrl = 1; 11914772Sedward if ((framewin = wwopen(WWO_GLASS|WWO_FRAME, wwnrow, wwncol, 0, 0, 0)) 12014772Sedward == 0) { 12114407Sedward (void) wwflush(); 12214895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 12314407Sedward goto bad; 12414407Sedward } 12514407Sedward wwadd(framewin, &wwhead); 12614720Sedward if ((boxwin = wwopen(WWO_GLASS, wwnrow, wwncol, 0, 0, 0)) == 0) { 12714720Sedward (void) wwflush(); 12814895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 12914720Sedward goto bad; 13014720Sedward } 13116253Sedward fgwin = framewin; 13214407Sedward 13314407Sedward wwupdate(); 13413969Sedward wwflush(); 13513920Sedward (void) signal(SIGCHLD, wwchild); 13615671Sedward setvars(); 13716280Sedward 13816280Sedward setterse(tflag); 13916280Sedward setcmd(1); 14016280Sedward if (cmd != 0) 14116443Sedward (void) dolongcmd(cmd, (struct value *)0, 0); 142*35330Sedward if (!fflag) 14314677Sedward if (dflag || doconfig() < 0) 14414286Sedward dodefault(); 145*35330Sedward if (selwin != 0) 146*35330Sedward setcmd(0); 14714895Sedward 14814895Sedward mloop(); 14914895Sedward 15013920Sedward bad: 15113920Sedward wwend(); 15213920Sedward return 0; 15313920Sedward } 15414169Sedward 15514169Sedward usage() 15614169Sedward { 15716313Sedward (void) fprintf(stderr, "Usage: window [-e escape-char] [-c command] [-t] [-f] [-d]\n"); 15814454Sedward exit(1); 15914454Sedward return 0; /* for lint */ 16014169Sedward } 16116313Sedward 16216313Sedward nomem() 16316313Sedward { 16416313Sedward (void) fprintf(stderr, "Out of memory.\n"); 16516313Sedward exit(1); 16616313Sedward } 167