annotate usr/src/cmd/tput/tput.c @ 13862:fd9b980efd06

702 tput calls gets() Reviewed by: Dan McDonald <danmcd@nexenta.com> Reviewed by: Gordon Ross <gordon.w.ross@gmail.com> Approved by: Garrett D'Amore <garrett@damore.org>
author Gary Mills <gary_mills@fastmail.fm>
date Wed, 17 Oct 2012 06:40:09 -0700
parents fe7962c08d1d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
1 /*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
2 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
3 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
4 * The contents of this file are subject to the terms of the
9354
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
5 * Common Development and Distribution License (the "License").
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
6 * You may not use this file except in compliance with the License.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
7 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
9 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
10 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
11 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
12 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
13 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
15 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
16 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
17 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
18 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
19 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
20 */
9354
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
21
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
22 /*
9354
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
24 * Use is subject to license terms.
13862
fd9b980efd06 702 tput calls gets()
Gary Mills <gary_mills@fastmail.fm>
parents: 13292
diff changeset
25 * Copyright (c) 2012 Gary Mills
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
26 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
27
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
28 /* Copyright (c) 1988 AT&T */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
29 /* All Rights Reserved */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
30
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
31 /*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
32 * tput - print terminal attribute
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
33 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
34 * return-codes - command line arguments:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
35 * 0: ok if boolean capname -> TRUE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
36 * 1: for boolean capname -> FALSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
37 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
38 * return-codes - standard input arguments:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
39 * 0: ok; tput for all lines was successful
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
40 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
41 * return-codes - both cases:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
42 * 2 usage error
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
43 * 3 bad terminal type given or no terminfo database
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
44 * 4 unknown capname
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
45 * -1 capname is a numeric variable that is not specified in the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
46 * terminfo database(E.g. tpu -T450 lines).
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
47 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
48 * tput printfs a value if an INT capname was given; e.g. cols.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
49 * putp's a string if a STRING capname was given; e.g. clear. and
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
50 * for BOOLEAN capnames, e.g. hard-copy, just returns the boolean value.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
51 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
52
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
53 #include <curses.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
54 #include <term.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
55 #include <fcntl.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
56 #include <ctype.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
57 #include <stdlib.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
58 #include <string.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
59 #include <sys/types.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
60 #include <unistd.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
61 #include <locale.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
62
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
63 /* externs from libcurses */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
64 extern int tigetnum();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
65
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
66 static int outputcap(char *cap, int argc, char **argv);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
67 static int allnumeric(char *string);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
68 static int getpad(char *cap);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
69 static void setdelay();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
70 static void settabs();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
71 static void cat(char *file);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
72 static void initterm();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
73 static void reset_term();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
74
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
75 static char *progname; /* argv[0] */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
76 static int CurrentBaudRate; /* current baud rate */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
77 static int reset = 0; /* called as reset_term */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
78 static int fildes = 1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
79
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
80 int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
81 main(int argc, char **argv)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
82 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
83 int i, std_argc;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
84 char *term = getenv("TERM");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
85 char *cap, std_input = FALSE;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
86 int setuperr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
87
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
88 (void) setlocale(LC_ALL, "");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
89 #if !defined(TEXT_DOMAIN)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
90 #define TEXT_DOMAIN "SYS_TEST"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
91 #endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
92 (void) textdomain(TEXT_DOMAIN);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
93
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
94 progname = argv[0];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
95
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
96 while ((i = getopt(argc, argv, "ST:")) != EOF) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
97 switch (i) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
98 case 'T':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
99 fildes = -1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
100 (void) putenv("LINES=");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
101 (void) putenv("COLUMNS=");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
102 term = optarg;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
103 break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
104
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
105 case 'S':
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
106 std_input = TRUE;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
107 break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
108
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
109 case '?': /* FALLTHROUGH */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
110 usage: /* FALLTHROUGH */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
111 default:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
112 (void) fprintf(stderr, gettext(
9354
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
113 "usage:\t%s [-T [term]] capname "
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
114 "[parm argument...]\n"), progname);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
115 (void) fprintf(stderr, gettext("OR:\t%s -S <<\n"),
9354
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
116 progname);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
117 exit(2);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
118 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
119 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
120
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
121 if (!term || !*term) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
122 (void) fprintf(stderr,
9354
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
123 gettext("%s: No value for $TERM and no -T specified\n"),
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
124 progname);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
125 exit(2);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
126 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
127
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
128 (void) setupterm(term, fildes, &setuperr);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
129
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
130 switch (setuperr) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
131 case -2:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
132 (void) fprintf(stderr,
9354
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
133 gettext("%s: unreadable terminal descriptor \"%s\"\n"),
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
134 progname, term);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
135 exit(3);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
136 break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
137
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
138 case -1:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
139 (void) fprintf(stderr,
9354
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
140 gettext("%s: no terminfo database\n"), progname);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
141 exit(3);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
142 break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
143
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
144 case 0:
9354
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
145 (void) fprintf(stderr,
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
146 gettext("%s: unknown terminal \"%s\"\n"),
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
147 progname, term);
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
148 exit(3);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
149 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
150
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
151 reset_shell_mode();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
152
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
153 /* command line arguments */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
154 if (!std_input) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
155 if (argc == optind)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
156 goto usage;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
157
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
158 cap = argv[optind++];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
159
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
160 if (strcmp(cap, "init") == 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
161 initterm();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
162 else if (strcmp(cap, "reset") == 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
163 reset_term();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
164 else if (strcmp(cap, "longname") == 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
165 (void) printf("%s\n", longname());
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
166 else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
167 exit(outputcap(cap, argc, argv));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
168 return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
169 } else { /* standard input argumets */
13292
fe7962c08d1d Backed out changeset 0a79ebc0f4b3 - needs more work.
Garrett D'Amore <garrett@nexenta.com>
parents: 13289
diff changeset
170 char buff[128];
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
171 char **v;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
172
13292
fe7962c08d1d Backed out changeset 0a79ebc0f4b3 - needs more work.
Garrett D'Amore <garrett@nexenta.com>
parents: 13289
diff changeset
173 /* allocate storage for the 'faked' argv[] array */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
174 v = (char **)malloc(10 * sizeof (char *));
13292
fe7962c08d1d Backed out changeset 0a79ebc0f4b3 - needs more work.
Garrett D'Amore <garrett@nexenta.com>
parents: 13289
diff changeset
175 for (i = 0; i < 10; i++)
fe7962c08d1d Backed out changeset 0a79ebc0f4b3 - needs more work.
Garrett D'Amore <garrett@nexenta.com>
parents: 13289
diff changeset
176 v[i] = (char *)malloc(32 * sizeof (char));
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
177
13862
fd9b980efd06 702 tput calls gets()
Gary Mills <gary_mills@fastmail.fm>
parents: 13292
diff changeset
178 while (fgets(buff, sizeof (buff), stdin) != NULL) {
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
179 /* read standard input line; skip over empty lines */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
180 if ((std_argc =
13862
fd9b980efd06 702 tput calls gets()
Gary Mills <gary_mills@fastmail.fm>
parents: 13292
diff changeset
181 sscanf(buff,
fd9b980efd06 702 tput calls gets()
Gary Mills <gary_mills@fastmail.fm>
parents: 13292
diff changeset
182 "%31s %31s %31s %31s %31s %31s %31s %31s "
fd9b980efd06 702 tput calls gets()
Gary Mills <gary_mills@fastmail.fm>
parents: 13292
diff changeset
183 "%31s %31s",
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
184 v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7],
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
185 v[8], v[9])) < 1) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
186 continue;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
187 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
188
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
189 cap = v[0];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
190 optind = 1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
191
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
192 if (strcmp(cap, "init") == 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
193 initterm();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
194 } else if (strcmp(cap, "reset") == 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
195 reset_term();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
196 } else if (strcmp(cap, "longname") == 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
197 (void) printf("%s\n", longname());
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
198 } else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
199 (void) outputcap(cap, std_argc, v);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
200 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
201 (void) fflush(stdout);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
202 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
203
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
204 return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
205 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
206 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
207
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
208 static long parm[9] = {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
209 0, 0, 0, 0, 0, 0, 0, 0, 0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
210 };
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
211
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
212 static int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
213 outputcap(char *cap, int argc, char **argv)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
214 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
215 int parmset = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
216 char *thisstr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
217 int i;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
218
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
219 if ((i = tigetflag(cap)) >= 0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
220 return (1 - i);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
221
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
222 if ((i = tigetnum(cap)) >= -1) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
223 (void) printf("%d\n", i);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
224 return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
225 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
226
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
227 if ((thisstr = tigetstr(cap)) != (char *)-1) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
228 if (!thisstr) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
229 return (1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
230 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
231 for (parmset = 0; optind < argc; optind++, parmset++)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
232 if (allnumeric(argv[optind]))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
233 parm[parmset] = atoi(argv[optind]);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
234 else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
235 parm[parmset] = (int)argv[optind];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
236
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
237 if (parmset)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
238 putp(tparm(thisstr,
9354
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
239 parm[0], parm[1], parm[2], parm[3],
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
240 parm[4], parm[5], parm[6], parm[7], parm[8]));
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
241 else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
242 putp(thisstr);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
243 return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
244 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
245
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
246 (void) fprintf(stderr,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
247 gettext("%s: unknown terminfo capability '%s'\n"), progname, cap);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
248
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
249 exit(4);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
250 /* NOTREACHED */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
251 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
252
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
253 /*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
254 * The decision as to whether an argument is a number or not is to simply
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
255 * look at whether there are any non-digits in the string.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
256 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
257 static int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
258 allnumeric(char *string)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
259 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
260 if (*string) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
261 while (*string) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
262 if (!isdigit(*string++)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
263 return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
264 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
265 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
266 return (1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
267 } else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
268 return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
269 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
270 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
271
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
272 /*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
273 * SYSTEM DEPENDENT TERMINAL DELAY TABLES
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
274 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
275 * These tables maintain the correspondence between the delays
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
276 * defined in terminfo and the delay algorithms in the tty driver
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
277 * on the particular systems. For each type of delay, the bits used
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
278 * for that delay must be specified, in XXbits, and a table
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
279 * must be defined giving correspondences between delays and
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
280 * algorithms. Algorithms which are not fixed delays, such
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
281 * as dependent on current column or line number, must be
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
282 * kludged in some way at this time.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
283 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
284 * Some of this was taken from tset(1).
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
285 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
286
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
287 struct delay
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
288 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
289 int d_delay;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
290 int d_bits;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
291 };
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
292
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
293 /* The appropriate speeds for various termio settings. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
294 static int speeds[] = {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
295 0, /* B0, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
296 50, /* B50, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
297 75, /* B75, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
298 110, /* B110, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
299 134, /* B134, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
300 150, /* B150, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
301 200, /* B200, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
302 300, /* B300, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
303 600, /* B600, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
304 1200, /* B1200, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
305 1800, /* B1800, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
306 2400, /* B2400, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
307 4800, /* B4800, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
308 9600, /* B9600, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
309 19200, /* EXTA, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
310 38400, /* EXTB, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
311 57600, /* B57600, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
312 76800, /* B76800, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
313 115200, /* B115200, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
314 153600, /* B153600, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
315 230400, /* B230400, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
316 307200, /* B307200, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
317 460800, /* B460800, */
9354
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
318 921600, /* B921600, */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
319 0,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
320 };
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
321
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
322 #if defined(SYSV) || defined(USG)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
323 /* Unix 3.0 on up */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
324
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
325 /* Carriage Return delays */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
326
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
327 static int CRbits = CRDLY;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
328 static struct delay CRdelay[] =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
329 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
330 0, CR0,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
331 80, CR1,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
332 100, CR2,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
333 150, CR3,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
334 -1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
335 };
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
336
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
337 /* New Line delays */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
338
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
339 static int NLbits = NLDLY;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
340 static struct delay NLdelay[] =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
341 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
342 0, NL0,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
343 100, NL1,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
344 -1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
345 };
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
346
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
347 /* Back Space delays */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
348
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
349 static int BSbits = BSDLY;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
350 static struct delay BSdelay[] =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
351 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
352 0, BS0,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
353 50, BS1,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
354 -1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
355 };
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
356
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
357 /* TaB delays */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
358
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
359 static int TBbits = TABDLY;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
360 static struct delay TBdelay[] =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
361 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
362 0, TAB0,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
363 11, TAB1, /* special M37 delay */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
364 100, TAB2,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
365 /* TAB3 is XTABS and not a delay */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
366 -1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
367 };
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
368
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
369 /* Form Feed delays */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
370
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
371 static int FFbits = FFDLY;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
372 static struct delay FFdelay[] =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
373 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
374 0, FF0,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
375 2000, FF1,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
376 -1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
377 };
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
378
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
379 #else /* BSD */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
380
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
381 /* Carriage Return delays */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
382
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
383 int CRbits = CRDELAY;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
384 struct delay CRdelay[] =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
385 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
386 0, CR0,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
387 9, CR3,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
388 80, CR1,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
389 160, CR2,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
390 -1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
391 };
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
392
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
393 /* New Line delays */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
394
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
395 int NLbits = NLDELAY;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
396 struct delay NLdelay[] =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
397 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
398 0, NL0,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
399 66, NL1, /* special M37 delay */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
400 100, NL2,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
401 -1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
402 };
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
403
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
404 /* Tab delays */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
405
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
406 int TBbits = TBDELAY;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
407 struct delay TBdelay[] =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
408 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
409 0, TAB0,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
410 11, TAB1, /* special M37 delay */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
411 -1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
412 };
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
413
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
414 /* Form Feed delays */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
415
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
416 int FFbits = VTDELAY;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
417 struct delay FFdelay[] =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
418 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
419 0, FF0,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
420 2000, FF1,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
421 -1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
422 };
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
423 #endif /* BSD */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
424
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
425 /*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
426 * Initterm, a.k.a. reset_term, does terminal specific initialization. In
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
427 * particular, the init_strings from terminfo are output and tabs are
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
428 * set, if they aren't hardwired in. Much of this stuff was done by
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
429 * the tset(1) program.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
430 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
431
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
432 /*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
433 * Figure out how many milliseconds of padding the capability cap
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
434 * needs and return that number. Padding is stored in the string as "$<n>",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
435 * where n is the number of milliseconds of padding. More than one
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
436 * padding string is allowed within the string, although this is unlikely.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
437 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
438
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
439 static int
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
440 getpad(char *cap)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
441 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
442 int padding = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
443
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
444 /* No padding needed at speeds below padding_baud_rate */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
445 if (padding_baud_rate > CurrentBaudRate || cap == NULL)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
446 return (0);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
447
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
448 while (*cap) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
449 if ((cap[0] == '$') && (cap[1] == '<')) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
450 cap++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
451 cap++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
452 padding += atoi(cap);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
453 while (isdigit (*cap))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
454 cap++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
455 while (*cap == '.' || *cap == '/' || *cap == '*' ||
9354
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
456 isdigit(*cap))
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
457 cap++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
458 while (*cap == '>')
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
459 cap++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
460 } else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
461 cap++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
462 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
463 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
464
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
465 return (padding);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
466 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
467
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
468 /*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
469 * Set the appropriate delay bits in the termio structure for
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
470 * the given delay.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
471 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
472 static void
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
473 setdelay(delay, delaytable, bits, flags)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
474 register int delay;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
475 struct delay delaytable[];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
476 int bits;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
477 #ifdef SYSV
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
478 tcflag_t *flags;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
479 #else /* SYSV */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
480 unsigned short *flags;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
481 #endif /* SYSV */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
482 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
483 register struct delay *p;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
484 register struct delay *lastdelay;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
485
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
486 /* Clear out the bits, replace with new ones */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
487 *flags &= ~bits;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
488
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
489 /* Scan the delay table for first entry with adequate delay */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
490 for (lastdelay = p = delaytable;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
491 (p -> d_delay >= 0) && (p -> d_delay < delay);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
492 p++) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
493 lastdelay = p;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
494 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
495
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
496 /* use last entry if none will do */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
497 *flags |= lastdelay -> d_bits;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
498 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
499
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
500 /*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
501 * Set the hardware tabs on the terminal, using clear_all_tabs,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
502 * set_tab, and column_address capabilities. Cursor_address and cursor_right
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
503 * may also be used, if necessary.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
504 * This is done before the init_file and init_3string, so they can patch in
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
505 * case we blow this.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
506 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
507
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
508 static void
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
509 settabs()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
510 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
511 register int c;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
512
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
513 /* Do not set tabs if they power up properly. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
514 if (init_tabs == 8)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
515 return;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
516
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
517 if (set_tab) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
518 /* Force the cursor to be at the left margin. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
519 if (carriage_return)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
520 putp(carriage_return);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
521 else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
522 (void) putchar('\r');
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
523
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
524 /* Clear any current tab settings. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
525 if (clear_all_tabs)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
526 putp(clear_all_tabs);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
527
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
528 /* Set the tabs. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
529 for (c = 8; c < columns; c += 8) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
530 /* Get to that column. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
531 (void) fputs(" ", stdout);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
532
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
533 /* Set the tab. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
534 putp(set_tab);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
535 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
536
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
537 /* Get back to the left column. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
538 if (carriage_return)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
539 putp(carriage_return);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
540 else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
541 (void) putchar('\r');
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
542
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
543 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
544 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
545
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
546 /*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
547 * Copy "file" onto standard output.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
548 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
549
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
550 static void
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
551 cat(file)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
552 char *file; /* File to copy. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
553 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
554 register int fd; /* File descriptor. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
555 register ssize_t i; /* Number characters read. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
556 char buf[BUFSIZ]; /* Buffer to read into. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
557
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
558 fd = open(file, O_RDONLY);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
559
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
560 if (fd < 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
561 perror("Cannot open initialization file");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
562 } else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
563 while ((i = read(fd, buf, BUFSIZ)) > (ssize_t)0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
564 (void) write(fileno(stdout), buf, (unsigned)i);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
565 (int)close(fd);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
566 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
567 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
568
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
569 /*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
570 * Initialize the terminal.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
571 * Send the initialization strings to the terminal.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
572 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
573
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
574 static void
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
575 initterm()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
576 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
577 register int filedes; /* File descriptor for ioctl's. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
578 #if defined(SYSV) || defined(USG)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
579 struct termio termmode; /* To hold terminal settings. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
580 struct termios termmodes; /* To hold terminal settings. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
581 int i;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
582 int istermios = -1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
583 #define GTTY(fd, mode) ioctl(fd, TCGETA, mode)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
584 #define GTTYS(fd, mode) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
585 (istermios = ioctl(fd, TCGETS, mode))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
586 #define STTY(fd, mode) ioctl(fd, TCSETAW, mode)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
587 #define STTYS(fd, mode) ioctl(fd, TCSETSW, mode)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
588 #define SPEED(mode) (mode.c_cflag & CBAUD)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
589 #define SPEEDS(mode) (cfgetospeed(&mode))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
590 #define OFLAG(mode) mode.c_oflag
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
591 #else /* BSD */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
592 struct sgttyb termmode; /* To hold terminal settings. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
593 #define GTTY(fd, mode) gtty(fd, mode)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
594 #define STTY(fd, mode) stty(fd, mode)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
595 #define SPEED(mode) (mode.sg_ospeed & 017)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
596 #define OFLAG(mode) mode.sg_flags
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
597 #define TAB3 XTABS
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
598 #endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
599
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
600 /* Get the terminal settings. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
601 /* First try standard output, then standard error, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
602 /* then standard input, then /dev/tty. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
603 #ifdef SYSV
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
604 if ((filedes = 1, GTTYS(filedes, &termmodes) < 0) ||
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
605 (filedes = 2, GTTYS(filedes, &termmodes) < 0) ||
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
606 (filedes = 0, GTTYS(filedes, &termmodes) < 0) ||
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
607 (filedes = open("/dev/tty", O_RDWR),
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
608 GTTYS(filedes, &termmodes) < 0)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
609 #endif /* SYSV */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
610 if ((filedes = 1, GTTY(filedes, &termmode) == -1) ||
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
611 (filedes = 2, GTTY(filedes, &termmode) == -1) ||
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
612 (filedes = 0, GTTY(filedes, &termmode) == -1) ||
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
613 (filedes = open("/dev/tty", O_RDWR),
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
614 GTTY(filedes, &termmode) == -1)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
615 filedes = -1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
616 CurrentBaudRate = speeds[B1200];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
617 } else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
618 CurrentBaudRate = speeds[SPEED(termmode)];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
619 #ifdef SYSV
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
620 termmodes.c_lflag = termmode.c_lflag;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
621 termmodes.c_oflag = termmode.c_oflag;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
622 termmodes.c_iflag = termmode.c_iflag;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
623 termmodes.c_cflag = termmode.c_cflag;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
624 for (i = 0; i < NCC; i++)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
625 termmodes.c_cc[i] = termmode.c_cc[i];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
626 } else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
627 CurrentBaudRate = speeds[SPEEDS(termmodes)];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
628 #endif /* SYSV */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
629
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
630 if (xon_xoff) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
631 #ifdef SYSV
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
632 OFLAG(termmodes) &=
9354
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
633 ~(NLbits | CRbits | BSbits | FFbits | TBbits);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
634 #else /* SYSV */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
635 OFLAG(termmode) &=
9354
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
636 ~(NLbits | CRbits | BSbits | FFbits | TBbits);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
637 #endif /* SYSV */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
638 } else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
639 #ifdef SYSV
9354
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
640 setdelay(getpad(carriage_return),
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
641 CRdelay, CRbits, &OFLAG(termmodes));
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
642 setdelay(getpad(scroll_forward),
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
643 NLdelay, NLbits, &OFLAG(termmodes));
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
644 setdelay(getpad(cursor_left),
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
645 BSdelay, BSbits, &OFLAG(termmodes));
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
646 setdelay(getpad(form_feed),
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
647 FFdelay, FFbits, &OFLAG(termmodes));
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
648 setdelay(getpad(tab),
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
649 TBdelay, TBbits, &OFLAG(termmodes));
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
650 #else /* SYSV */
9354
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
651 setdelay(getpad(carriage_return),
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
652 CRdelay, CRbits, &OFLAG(termmode));
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
653 setdelay(getpad(scroll_forward),
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
654 NLdelay, NLbits, &OFLAG(termmode));
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
655 setdelay(getpad(cursor_left),
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
656 BSdelay, BSbits, &OFLAG(termmode));
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
657 setdelay(getpad(form_feed),
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
658 FFdelay, FFbits, &OFLAG(termmode));
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
659 setdelay(getpad(tab),
9559ac454e7e 6763764 Support for FTDI USB Serial adapters
Tim Marsland <Tim.Marsland@Sun.COM>
parents: 0
diff changeset
660 TBdelay, TBbits, &OFLAG(termmode));
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
661 #endif /* SYSV */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
662 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
663
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
664 /* If tabs can be sent to the tty, turn off their expansion. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
665 if (tab && set_tab || init_tabs == 8) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
666 #ifdef SYSV
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
667 OFLAG(termmodes) &= ~(TAB3);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
668 #else /* SYSV */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
669 OFLAG(termmode) &= ~(TAB3);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
670 #endif /* SYSV */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
671 } else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
672 #ifdef SYSV
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
673 OFLAG(termmodes) |= TAB3;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
674 #else /* SYSV */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
675 OFLAG(termmode) |= TAB3;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
676 #endif /* SYSV */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
677 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
678
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
679 /* Do the changes to the terminal settings */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
680 #ifdef SYSV
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
681 if (istermios < 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
682 int i;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
683
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
684 termmode.c_lflag = termmodes.c_lflag;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
685 termmode.c_oflag = termmodes.c_oflag;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
686 termmode.c_iflag = termmodes.c_iflag;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
687 termmode.c_cflag = termmodes.c_cflag;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
688 for (i = 0; i < NCC; i++)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
689 termmode.c_cc[i] = termmodes.c_cc[i];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
690 (void) STTY(filedes, &termmode);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
691 } else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
692 (void) STTYS(filedes, &termmodes);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
693
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
694 #else /* SYSV */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
695 (void) STTY(filedes, &termmode);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
696 #endif /* SYSV */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
697
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
698 /* Send first initialization strings. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
699 if (init_prog)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
700 (void) system(init_prog);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
701
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
702 if (reset && reset_1string) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
703 putp(reset_1string);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
704 } else if (init_1string) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
705 putp(init_1string);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
706 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
707
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
708 if (reset && reset_2string) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
709 putp(reset_2string);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
710 } else if (init_2string) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
711 putp(init_2string);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
712 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
713
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
714 /* Set up the tabs stops. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
715 settabs();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
716
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
717 /* Send out initializing file. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
718 if (reset && reset_file) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
719 cat(reset_file);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
720 } else if (init_file) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
721 cat(init_file);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
722 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
723
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
724 /* Send final initialization strings. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
725 if (reset && reset_3string) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
726 putp(reset_3string);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
727 } else if (init_3string) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
728 putp(init_3string);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
729 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
730
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
731 if (carriage_return) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
732 putp(carriage_return);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
733 } else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
734 (void) putchar('\r');
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
735 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
736
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
737 /* Send color initialization strings */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
738
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
739 if (orig_colors)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
740 putp(orig_colors);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
741
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
742 if (orig_pair)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
743 putp(orig_pair);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
744
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
745 /* Let the terminal settle down. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
746 (void) fflush(stdout);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
747 (void) sleep(1);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
748 }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
749
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
750 static void
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
751 reset_term()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
752 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
753 reset++;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
754 initterm();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
755 }