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*38563Sedward static char sccsid[] = "@(#)main.c 3.37 (Berkeley) 08/02/89"; 2033514Sbostic #endif /* not lint */ 2133514Sbostic 2213969Sedward #include "defs.h" 2316110Sedward #include <sys/signal.h> 2437862Sbostic #include <paths.h> 2516110Sedward #include <stdio.h> 2616313Sedward #include "string.h" 2716309Sedward #include "char.h" 2816398Sedward #include "local.h" 2913920Sedward 3014286Sedward #define next(a) (*++*(a) ? *(a) : (*++(a) ? *(a) : (char *)usage())) 3114169Sedward 3214407Sedward /*ARGSUSED*/ 3314169Sedward main(argc, argv) 3414169Sedward char **argv; 3513920Sedward { 3613920Sedward register char *p; 3714677Sedward char fflag = 0; 3814677Sedward char dflag = 0; 3914846Sedward char xflag = 0; 4016280Sedward char *cmd = 0; 4116280Sedward char tflag = 0; 4213920Sedward 4317734Sedward escapec = ESCAPEC; 4414286Sedward if (p = rindex(*argv, '/')) 4514286Sedward p++; 4614286Sedward else 4714286Sedward p = *argv; 4814286Sedward debug = strcmp(p, "a.out") == 0; 4914169Sedward while (*++argv) { 5014169Sedward if (**argv == '-') { 5114169Sedward switch (*++*argv) { 5214286Sedward case 'f': 5314677Sedward fflag++; 5414286Sedward break; 5516280Sedward case 'c': 5616280Sedward if (cmd != 0) { 5716280Sedward (void) fprintf(stderr, 5816280Sedward "Only one -c allowed.\n"); 5916280Sedward (void) usage(); 6016280Sedward } 6116280Sedward cmd = next(argv); 6216280Sedward break; 6314169Sedward case 'e': 6414169Sedward setescape(next(argv)); 6514169Sedward break; 6614169Sedward case 't': 6716280Sedward tflag++; 6814169Sedward break; 6914286Sedward case 'd': 7014677Sedward dflag++; 7114677Sedward break; 7214677Sedward case 'D': 7315025Sedward debug = !debug; 7414286Sedward break; 7514846Sedward case 'x': 7614846Sedward xflag++; 7714846Sedward break; 7814169Sedward default: 7914407Sedward (void) usage(); 8014169Sedward } 8114169Sedward } else 8214407Sedward (void) usage(); 8314169Sedward } 8416313Sedward if ((p = getenv("SHELL")) == 0) 8537461Sbostic p = _PATH_BSHELL; 8635330Sedward if ((default_shellfile = str_cpy(p)) == 0) 8716313Sedward nomem(); 8835330Sedward if (p = rindex(default_shellfile, '/')) 8916313Sedward p++; 9014286Sedward else 9135330Sedward p = default_shellfile; 9235330Sedward default_shell[0] = p; 9335330Sedward default_shell[1] = 0; 9435330Sedward default_nline = NLINE; 9535330Sedward default_smooth = 1; 9616110Sedward (void) gettimeofday(&starttime, (struct timezone *)0); 9713962Sedward if (wwinit() < 0) { 9814895Sedward (void) fprintf(stderr, "%s.\n", wwerror()); 9913962Sedward exit(1); 10013962Sedward } 10114846Sedward if (debug) 10214286Sedward wwnewtty.ww_tchars.t_quitc = wwoldtty.ww_tchars.t_quitc; 10314846Sedward if (xflag) { 10414846Sedward wwnewtty.ww_tchars.t_stopc = wwoldtty.ww_tchars.t_stopc; 10514846Sedward wwnewtty.ww_tchars.t_startc = wwoldtty.ww_tchars.t_startc; 10614846Sedward } 10714846Sedward if (debug || xflag) 10817407Sedward (void) wwsettty(0, &wwnewtty, &wwoldtty); 10914407Sedward 11031137Sedward if ((cmdwin = wwopen(wwbaud > 2400 ? WWO_REVERSE : 0, 1, wwncol, 11131137Sedward 0, 0, 0)) == 0) { 112*38563Sedward wwflush(); 11314895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 11413962Sedward goto bad; 11513962Sedward } 11616312Sedward cmdwin->ww_mapnl = 1; 11716110Sedward cmdwin->ww_nointr = 1; 11816309Sedward cmdwin->ww_noupdate = 1; 11916313Sedward cmdwin->ww_unctrl = 1; 12014772Sedward if ((framewin = wwopen(WWO_GLASS|WWO_FRAME, wwnrow, wwncol, 0, 0, 0)) 12114772Sedward == 0) { 122*38563Sedward wwflush(); 12314895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 12414407Sedward goto bad; 12514407Sedward } 12614407Sedward wwadd(framewin, &wwhead); 12714720Sedward if ((boxwin = wwopen(WWO_GLASS, wwnrow, wwncol, 0, 0, 0)) == 0) { 128*38563Sedward wwflush(); 12914895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 13014720Sedward goto bad; 13114720Sedward } 13216253Sedward fgwin = framewin; 13314407Sedward 13414407Sedward wwupdate(); 13513969Sedward wwflush(); 13615671Sedward setvars(); 13716280Sedward 13816280Sedward setterse(tflag); 13916280Sedward setcmd(1); 14016280Sedward if (cmd != 0) 14116443Sedward (void) dolongcmd(cmd, (struct value *)0, 0); 14235330Sedward if (!fflag) 14314677Sedward if (dflag || doconfig() < 0) 14414286Sedward dodefault(); 14535330Sedward if (selwin != 0) 14635330Sedward 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