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*39293Sedward static char sccsid[] = "@(#)main.c 3.38 (Berkeley) 10/13/89"; 2033514Sbostic #endif /* not lint */ 2133514Sbostic 2213969Sedward #include "defs.h" 2337862Sbostic #include <paths.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) 8437461Sbostic p = _PATH_BSHELL; 85*39293Sedward if ((default_shellfile = str_cpy(p)) == 0) { 86*39293Sedward (void) fprintf(stderr, "Out of memory.\n"); 87*39293Sedward exit(1); 88*39293Sedward } 8935330Sedward if (p = rindex(default_shellfile, '/')) 9016313Sedward p++; 9114286Sedward else 9235330Sedward p = default_shellfile; 9335330Sedward default_shell[0] = p; 9435330Sedward default_shell[1] = 0; 9535330Sedward default_nline = NLINE; 9635330Sedward default_smooth = 1; 9716110Sedward (void) gettimeofday(&starttime, (struct timezone *)0); 9813962Sedward if (wwinit() < 0) { 9914895Sedward (void) fprintf(stderr, "%s.\n", wwerror()); 10013962Sedward exit(1); 10113962Sedward } 10214846Sedward if (debug) 10314286Sedward wwnewtty.ww_tchars.t_quitc = wwoldtty.ww_tchars.t_quitc; 10414846Sedward if (xflag) { 10514846Sedward wwnewtty.ww_tchars.t_stopc = wwoldtty.ww_tchars.t_stopc; 10614846Sedward wwnewtty.ww_tchars.t_startc = wwoldtty.ww_tchars.t_startc; 10714846Sedward } 10814846Sedward if (debug || xflag) 10917407Sedward (void) wwsettty(0, &wwnewtty, &wwoldtty); 11014407Sedward 11131137Sedward if ((cmdwin = wwopen(wwbaud > 2400 ? WWO_REVERSE : 0, 1, wwncol, 11231137Sedward 0, 0, 0)) == 0) { 11338563Sedward wwflush(); 11414895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 11513962Sedward goto bad; 11613962Sedward } 11716312Sedward cmdwin->ww_mapnl = 1; 11816110Sedward cmdwin->ww_nointr = 1; 11916309Sedward cmdwin->ww_noupdate = 1; 12016313Sedward cmdwin->ww_unctrl = 1; 12114772Sedward if ((framewin = wwopen(WWO_GLASS|WWO_FRAME, wwnrow, wwncol, 0, 0, 0)) 12214772Sedward == 0) { 12338563Sedward wwflush(); 12414895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 12514407Sedward goto bad; 12614407Sedward } 12714407Sedward wwadd(framewin, &wwhead); 12814720Sedward if ((boxwin = wwopen(WWO_GLASS, wwnrow, wwncol, 0, 0, 0)) == 0) { 12938563Sedward wwflush(); 13014895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 13114720Sedward goto bad; 13214720Sedward } 13316253Sedward fgwin = framewin; 13414407Sedward 13514407Sedward wwupdate(); 13613969Sedward wwflush(); 13715671Sedward setvars(); 13816280Sedward 13916280Sedward setterse(tflag); 14016280Sedward setcmd(1); 14116280Sedward if (cmd != 0) 14216443Sedward (void) dolongcmd(cmd, (struct value *)0, 0); 14335330Sedward if (!fflag) 14414677Sedward if (dflag || doconfig() < 0) 14514286Sedward dodefault(); 14635330Sedward if (selwin != 0) 14735330Sedward setcmd(0); 14814895Sedward 14914895Sedward mloop(); 15014895Sedward 15113920Sedward bad: 15213920Sedward wwend(); 15313920Sedward return 0; 15413920Sedward } 15514169Sedward 15614169Sedward usage() 15714169Sedward { 15816313Sedward (void) fprintf(stderr, "Usage: window [-e escape-char] [-c command] [-t] [-f] [-d]\n"); 15914454Sedward exit(1); 16014454Sedward return 0; /* for lint */ 16114169Sedward } 162