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