|
|
1.1 root 1: /*
2: * Copyright (c) 1983 Regents of the University of California.
3: * 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: * Redistribution and use in source and binary forms are permitted provided
9: * that: (1) source distributions retain this entire copyright notice and
10: * comment, and (2) distributions including binaries display the following
11: * acknowledgement: ``This product includes software developed by the
12: * University of California, Berkeley and its contributors'' in the
13: * documentation or other materials provided with the distribution and in
14: * all advertising materials mentioning features or use of this software.
15: * Neither the name of the University nor the names of its contributors may
16: * be used to endorse or promote products derived from this software without
17: * specific prior written permission.
18: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
19: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
20: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
21: */
22:
23: #ifndef lint
24: static char sccsid[] = "@(#)main.c 3.41 (Berkeley) 6/6/90";
25: #endif /* not lint */
26:
27: #include "defs.h"
28: #include <paths.h>
29: #include <stdio.h>
30: #include "string.h"
31: #include "char.h"
32: #include "local.h"
33:
34: #define next(a) (*++*(a) ? *(a) : (*++(a) ? *(a) : (char *)usage()))
35:
36: /*ARGSUSED*/
37: main(argc, argv)
38: char **argv;
39: {
40: register char *p;
41: char fflag = 0;
42: char dflag = 0;
43: char xflag = 0;
44: char *cmd = 0;
45: char tflag = 0;
46:
47: escapec = ESCAPEC;
48: if (p = rindex(*argv, '/'))
49: p++;
50: else
51: p = *argv;
52: debug = strcmp(p, "a.out") == 0;
53: while (*++argv) {
54: if (**argv == '-') {
55: switch (*++*argv) {
56: case 'f':
57: fflag++;
58: break;
59: case 'c':
60: if (cmd != 0) {
61: (void) fprintf(stderr,
62: "Only one -c allowed.\n");
63: (void) usage();
64: }
65: cmd = next(argv);
66: break;
67: case 'e':
68: setescape(next(argv));
69: break;
70: case 't':
71: tflag++;
72: break;
73: case 'd':
74: dflag++;
75: break;
76: case 'D':
77: debug = !debug;
78: break;
79: case 'x':
80: xflag++;
81: break;
82: default:
83: (void) usage();
84: }
85: } else
86: (void) usage();
87: }
88: if ((p = getenv("SHELL")) == 0)
89: p = _PATH_BSHELL;
90: if ((default_shellfile = str_cpy(p)) == 0) {
91: (void) fprintf(stderr, "Out of memory.\n");
92: exit(1);
93: }
94: if (p = rindex(default_shellfile, '/'))
95: p++;
96: else
97: p = default_shellfile;
98: default_shell[0] = p;
99: default_shell[1] = 0;
100: default_nline = NLINE;
101: default_smooth = 1;
102: (void) gettimeofday(&starttime, (struct timezone *)0);
103: if (wwinit() < 0) {
104: (void) fprintf(stderr, "%s.\n", wwerror());
105: exit(1);
106: }
107:
108: #ifndef POSIX_TTY
109: if (debug)
110: wwnewtty.ww_tchars.t_quitc = wwoldtty.ww_tchars.t_quitc;
111: if (xflag) {
112: wwnewtty.ww_tchars.t_stopc = wwoldtty.ww_tchars.t_stopc;
113: wwnewtty.ww_tchars.t_startc = wwoldtty.ww_tchars.t_startc;
114: }
115: #else
116: if (debug) {
117: wwnewtty.ww_termios.c_cc[VQUIT] =
118: wwoldtty.ww_termios.c_cc[VQUIT];
119: wwnewtty.ww_termios.c_lflag |= ISIG;
120: }
121: if (xflag) {
122: wwnewtty.ww_termios.c_cc[VSTOP] =
123: wwoldtty.ww_termios.c_cc[VSTOP];
124: wwnewtty.ww_termios.c_cc[VSTART] =
125: wwoldtty.ww_termios.c_cc[VSTART];
126: wwnewtty.ww_termios.c_iflag |= IXON;
127: }
128: #endif
129: if (debug || xflag)
130: (void) wwsettty(0, &wwnewtty, &wwoldtty);
131:
132: if ((cmdwin = wwopen(wwbaud > 2400 ? WWO_REVERSE : 0, 1, wwncol,
133: 0, 0, 0)) == 0) {
134: wwflush();
135: (void) fprintf(stderr, "%s.\r\n", wwerror());
136: goto bad;
137: }
138: cmdwin->ww_mapnl = 1;
139: cmdwin->ww_nointr = 1;
140: cmdwin->ww_noupdate = 1;
141: cmdwin->ww_unctrl = 1;
142: if ((framewin = wwopen(WWO_GLASS|WWO_FRAME, wwnrow, wwncol, 0, 0, 0))
143: == 0) {
144: wwflush();
145: (void) fprintf(stderr, "%s.\r\n", wwerror());
146: goto bad;
147: }
148: wwadd(framewin, &wwhead);
149: if ((boxwin = wwopen(WWO_GLASS, wwnrow, wwncol, 0, 0, 0)) == 0) {
150: wwflush();
151: (void) fprintf(stderr, "%s.\r\n", wwerror());
152: goto bad;
153: }
154: fgwin = framewin;
155:
156: wwupdate();
157: wwflush();
158: setvars();
159:
160: setterse(tflag);
161: setcmd(1);
162: if (cmd != 0)
163: (void) dolongcmd(cmd, (struct value *)0, 0);
164: if (!fflag)
165: if (dflag || doconfig() < 0)
166: dodefault();
167: if (selwin != 0)
168: setcmd(0);
169:
170: mloop();
171:
172: bad:
173: wwend();
174: return 0;
175: }
176:
177: usage()
178: {
179: (void) fprintf(stderr, "Usage: window [-e escape-char] [-c command] [-t] [-f] [-d]\n");
180: exit(1);
181: return 0; /* for lint */
182: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.