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 6*34909Sbostic * provided that the above copyright notice and this paragraph are 7*34909Sbostic * duplicated in all such forms and that any documentation, 8*34909Sbostic * advertising materials, and other materials related to such 9*34909Sbostic * distribution and use acknowledge that the software was developed 10*34909Sbostic * by the University of California, Berkeley. The name of the 11*34909Sbostic * University may not be used to endorse or promote products derived 12*34909Sbostic * from this software without specific prior written permission. 13*34909Sbostic * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 14*34909Sbostic * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 15*34909Sbostic * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. 1618727Sedward */ 1718727Sedward 1833514Sbostic #ifndef lint 19*34909Sbostic static char sccsid[] = "@(#)main.c 3.33 (Berkeley) 06/29/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 nbufline = NLINE; 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) 8516398Sedward p = SHELL; 8616313Sedward if ((shellfile = str_cpy(p)) == 0) 8716313Sedward nomem(); 8816313Sedward if (p = rindex(shellfile, '/')) 8916313Sedward p++; 9014286Sedward else 9116313Sedward p = shellfile; 9216313Sedward shell[0] = p; 9316313Sedward shell[1] = 0; 9416110Sedward (void) gettimeofday(&starttime, (struct timezone *)0); 9513962Sedward if (wwinit() < 0) { 9614895Sedward (void) fprintf(stderr, "%s.\n", wwerror()); 9713962Sedward exit(1); 9813962Sedward } 9914846Sedward if (debug) 10014286Sedward wwnewtty.ww_tchars.t_quitc = wwoldtty.ww_tchars.t_quitc; 10114846Sedward if (xflag) { 10214846Sedward wwnewtty.ww_tchars.t_stopc = wwoldtty.ww_tchars.t_stopc; 10314846Sedward wwnewtty.ww_tchars.t_startc = wwoldtty.ww_tchars.t_startc; 10414846Sedward } 10514846Sedward if (debug || xflag) 10617407Sedward (void) wwsettty(0, &wwnewtty, &wwoldtty); 10714407Sedward 10831137Sedward if ((cmdwin = wwopen(wwbaud > 2400 ? WWO_REVERSE : 0, 1, wwncol, 10931137Sedward 0, 0, 0)) == 0) { 11014407Sedward (void) wwflush(); 11114895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 11213962Sedward goto bad; 11313962Sedward } 11416312Sedward cmdwin->ww_mapnl = 1; 11516110Sedward cmdwin->ww_nointr = 1; 11616309Sedward cmdwin->ww_noupdate = 1; 11716313Sedward cmdwin->ww_unctrl = 1; 11814772Sedward if ((framewin = wwopen(WWO_GLASS|WWO_FRAME, wwnrow, wwncol, 0, 0, 0)) 11914772Sedward == 0) { 12014407Sedward (void) wwflush(); 12114895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 12214407Sedward goto bad; 12314407Sedward } 12414407Sedward wwadd(framewin, &wwhead); 12514720Sedward if ((boxwin = wwopen(WWO_GLASS, wwnrow, wwncol, 0, 0, 0)) == 0) { 12614720Sedward (void) wwflush(); 12714895Sedward (void) fprintf(stderr, "%s.\r\n", wwerror()); 12814720Sedward goto bad; 12914720Sedward } 13016253Sedward fgwin = framewin; 13114407Sedward 13214407Sedward wwupdate(); 13313969Sedward wwflush(); 13413920Sedward (void) signal(SIGCHLD, wwchild); 13515671Sedward setvars(); 13616280Sedward 13716280Sedward setterse(tflag); 13816280Sedward setcmd(1); 13916280Sedward if (cmd != 0) 14016443Sedward (void) dolongcmd(cmd, (struct value *)0, 0); 14116280Sedward if (!fflag) { 14214677Sedward if (dflag || doconfig() < 0) 14314286Sedward dodefault(); 14416280Sedward if (selwin != 0) 14516280Sedward setcmd(0); 14614286Sedward } 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