1 /*
2 * Copyright (c) 1983, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Edward Wang at The University of California, Berkeley.
7 *
8 * %sccs.include.redist.c%
9 */
10
11 #ifndef lint
12 char copyright[] =
13 "@(#) Copyright (c) 1983, 1993\n\
14 The Regents of the University of California. All rights reserved.\n";
15 #endif /* not lint */
16
17 #ifndef lint
18 static char sccsid[] = "@(#)main.c 8.2 (Berkeley) 04/02/94";
19 #endif /* not lint */
20
21 #include "defs.h"
22 #include <paths.h>
23 #include <stdio.h>
24 #include "string.h"
25 #include "char.h"
26 #include "local.h"
27
28 #define next(a) (*++*(a) ? *(a) : (*++(a) ? *(a) : (char *)usage()))
29
30 /*ARGSUSED*/
main(argc,argv)31 main(argc, argv)
32 char **argv;
33 {
34 register char *p;
35 char fflag = 0;
36 char dflag = 0;
37 char xflag = 0;
38 char *cmd = 0;
39 char tflag = 0;
40
41 escapec = ESCAPEC;
42 if (p = rindex(*argv, '/'))
43 p++;
44 else
45 p = *argv;
46 debug = strcmp(p, "a.out") == 0;
47 while (*++argv) {
48 if (**argv == '-') {
49 switch (*++*argv) {
50 case 'f':
51 fflag++;
52 break;
53 case 'c':
54 if (cmd != 0) {
55 (void) fprintf(stderr,
56 "Only one -c allowed.\n");
57 (void) usage();
58 }
59 cmd = next(argv);
60 break;
61 case 'e':
62 setescape(next(argv));
63 break;
64 case 't':
65 tflag++;
66 break;
67 case 'd':
68 dflag++;
69 break;
70 case 'D':
71 debug = !debug;
72 break;
73 case 'x':
74 xflag++;
75 break;
76 default:
77 (void) usage();
78 }
79 } else
80 (void) usage();
81 }
82 if ((p = getenv("SHELL")) == 0)
83 p = _PATH_BSHELL;
84 if ((default_shellfile = str_cpy(p)) == 0) {
85 (void) fprintf(stderr, "Out of memory.\n");
86 exit(1);
87 }
88 if (p = rindex(default_shellfile, '/'))
89 p++;
90 else
91 p = default_shellfile;
92 default_shell[0] = p;
93 default_shell[1] = 0;
94 default_nline = NLINE;
95 default_smooth = 1;
96 (void) gettimeofday(&starttime, (struct timezone *)0);
97 if (wwinit() < 0) {
98 (void) fprintf(stderr, "%s.\n", wwerror());
99 exit(1);
100 }
101
102 #ifdef OLD_TTY
103 if (debug)
104 wwnewtty.ww_tchars.t_quitc = wwoldtty.ww_tchars.t_quitc;
105 if (xflag) {
106 wwnewtty.ww_tchars.t_stopc = wwoldtty.ww_tchars.t_stopc;
107 wwnewtty.ww_tchars.t_startc = wwoldtty.ww_tchars.t_startc;
108 }
109 #else
110 if (debug) {
111 wwnewtty.ww_termios.c_cc[VQUIT] =
112 wwoldtty.ww_termios.c_cc[VQUIT];
113 wwnewtty.ww_termios.c_lflag |= ISIG;
114 }
115 if (xflag) {
116 wwnewtty.ww_termios.c_cc[VSTOP] =
117 wwoldtty.ww_termios.c_cc[VSTOP];
118 wwnewtty.ww_termios.c_cc[VSTART] =
119 wwoldtty.ww_termios.c_cc[VSTART];
120 wwnewtty.ww_termios.c_iflag |= IXON;
121 }
122 #endif
123 if (debug || xflag)
124 (void) wwsettty(0, &wwnewtty);
125
126 if ((cmdwin = wwopen(wwbaud > 2400 ? WWO_REVERSE : 0, 1, wwncol,
127 0, 0, 0)) == 0) {
128 wwflush();
129 (void) fprintf(stderr, "%s.\r\n", wwerror());
130 goto bad;
131 }
132 cmdwin->ww_mapnl = 1;
133 cmdwin->ww_nointr = 1;
134 cmdwin->ww_noupdate = 1;
135 cmdwin->ww_unctrl = 1;
136 if ((framewin = wwopen(WWO_GLASS|WWO_FRAME, wwnrow, wwncol, 0, 0, 0))
137 == 0) {
138 wwflush();
139 (void) fprintf(stderr, "%s.\r\n", wwerror());
140 goto bad;
141 }
142 wwadd(framewin, &wwhead);
143 if ((boxwin = wwopen(WWO_GLASS, wwnrow, wwncol, 0, 0, 0)) == 0) {
144 wwflush();
145 (void) fprintf(stderr, "%s.\r\n", wwerror());
146 goto bad;
147 }
148 fgwin = framewin;
149
150 wwupdate();
151 wwflush();
152 setvars();
153
154 setterse(tflag);
155 setcmd(1);
156 if (cmd != 0)
157 (void) dolongcmd(cmd, (struct value *)0, 0);
158 if (!fflag)
159 if (dflag || doconfig() < 0)
160 dodefault();
161 if (selwin != 0)
162 setcmd(0);
163
164 mloop();
165
166 bad:
167 wwend(1);
168 return 0;
169 }
170
usage()171 usage()
172 {
173 (void) fprintf(stderr, "Usage: window [-e escape-char] [-c command] [-t] [-f] [-d]\n");
174 exit(1);
175 return 0; /* for lint */
176 }
177