xref: /titanic_44/usr/src/lib/libxcurses/src/tput/tput.c (revision 7c478bd95313f5f23a4c958a745db2134aa03244)
1*7c478bd9Sstevel@tonic-gate /*
2*7c478bd9Sstevel@tonic-gate  * CDDL HEADER START
3*7c478bd9Sstevel@tonic-gate  *
4*7c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5*7c478bd9Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
6*7c478bd9Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
7*7c478bd9Sstevel@tonic-gate  * with the License.
8*7c478bd9Sstevel@tonic-gate  *
9*7c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*7c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
11*7c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
12*7c478bd9Sstevel@tonic-gate  * and limitations under the License.
13*7c478bd9Sstevel@tonic-gate  *
14*7c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
15*7c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*7c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
17*7c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
18*7c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
19*7c478bd9Sstevel@tonic-gate  *
20*7c478bd9Sstevel@tonic-gate  * CDDL HEADER END
21*7c478bd9Sstevel@tonic-gate  */
22*7c478bd9Sstevel@tonic-gate /*
23*7c478bd9Sstevel@tonic-gate  * Copyright (c) 1996, by Sun Microsystems, Inc.
24*7c478bd9Sstevel@tonic-gate  * All rights reserved.
25*7c478bd9Sstevel@tonic-gate  */
26*7c478bd9Sstevel@tonic-gate 
27*7c478bd9Sstevel@tonic-gate #pragma ident	"%Z%%M%	%I%	%E% SMI"
28*7c478bd9Sstevel@tonic-gate 
29*7c478bd9Sstevel@tonic-gate /*
30*7c478bd9Sstevel@tonic-gate  *	tput.c
31*7c478bd9Sstevel@tonic-gate  *
32*7c478bd9Sstevel@tonic-gate  *	Copyright 1990, 1994 by Mortice Kern Systems Inc.  All rights reserved.
33*7c478bd9Sstevel@tonic-gate  *
34*7c478bd9Sstevel@tonic-gate  *	PORTABILITY:
35*7c478bd9Sstevel@tonic-gate  *	SVID 3 - fully
36*7c478bd9Sstevel@tonic-gate  *	POSIX.2a UPE - needs clarification between SVID 3 exit statues.
37*7c478bd9Sstevel@tonic-gate  *		       In particular exit 1 and 4 for string capnames.
38*7c478bd9Sstevel@tonic-gate  *	not in XPG 3
39*7c478bd9Sstevel@tonic-gate  *
40*7c478bd9Sstevel@tonic-gate  *	SYNOPSIS:
41*7c478bd9Sstevel@tonic-gate  *	tput [-T<term>] capname [parm1..parm9]
42*7c478bd9Sstevel@tonic-gate  *	tput [-T<term>] -S
43*7c478bd9Sstevel@tonic-gate  *
44*7c478bd9Sstevel@tonic-gate  *	DESCRIPTION:
45*7c478bd9Sstevel@tonic-gate  *	tput lets you change your terminal's characteristics. The capname
46*7c478bd9Sstevel@tonic-gate  *	argument indicates how you want to change the characteristics.
47*7c478bd9Sstevel@tonic-gate  *	Some special capnames are:
48*7c478bd9Sstevel@tonic-gate  *
49*7c478bd9Sstevel@tonic-gate  *	clear		clear the screen
50*7c478bd9Sstevel@tonic-gate  *	init		initialize terminal in an implemenation-defined way
51*7c478bd9Sstevel@tonic-gate  *	reset		reset terminal in an implemenation-defined way
52*7c478bd9Sstevel@tonic-gate  *	longname	print the full name of the ternminal (SVID)
53*7c478bd9Sstevel@tonic-gate  *
54*7c478bd9Sstevel@tonic-gate  *	Other capnames are supported and may take from 0 to 9 parameters. A
55*7c478bd9Sstevel@tonic-gate  *	list of them can be found in the SVID 3, vol 3. (SVID)
56*7c478bd9Sstevel@tonic-gate  *
57*7c478bd9Sstevel@tonic-gate  *	tput does its work by outputting approriate character sequences to the
58*7c478bd9Sstevel@tonic-gate  *	standard output. These character sequences are terminal-specific. If
59*7c478bd9Sstevel@tonic-gate  *	you specify  -T <type>, tput assumes that your terminal has the
60*7c478bd9Sstevel@tonic-gate  *	specified type and will issue sequences appropriate to that terminal.
61*7c478bd9Sstevel@tonic-gate  *
62*7c478bd9Sstevel@tonic-gate  *	If you do not specify -T, tput looks for an environment variable
63*7c478bd9Sstevel@tonic-gate  *	named TERM. If TERM exists, its value is assumed to give the terminal
64*7c478bd9Sstevel@tonic-gate  *	type. If TERM does not exist, tput assumes a default terminal type.
65*7c478bd9Sstevel@tonic-gate  *
66*7c478bd9Sstevel@tonic-gate  *	The  -S  option allows more than one capability per invocation of tput.
67*7c478bd9Sstevel@tonic-gate  *	The capabilities must be passed to tput from the standard input instead
68*7c478bd9Sstevel@tonic-gate  *	of the comamnd line. Only one capname is allowed per line.
69*7c478bd9Sstevel@tonic-gate  *
70*7c478bd9Sstevel@tonic-gate  *	EXIT STATUS
71*7c478bd9Sstevel@tonic-gate  *	tput may return the following status values:
72*7c478bd9Sstevel@tonic-gate  *
73*7c478bd9Sstevel@tonic-gate  *	0	Either a boolean capname is set true or a string capname was
74*7c478bd9Sstevel@tonic-gate  *		successfully written to the terminal.
75*7c478bd9Sstevel@tonic-gate  *
76*7c478bd9Sstevel@tonic-gate  *	1	No error message is printed. Returned if a boolean capname is
77*7c478bd9Sstevel@tonic-gate  *		false or a string capname is not defined for the terminal.(SVID)
78*7c478bd9Sstevel@tonic-gate  *
79*7c478bd9Sstevel@tonic-gate  *	2	Usage error.
80*7c478bd9Sstevel@tonic-gate  *
81*7c478bd9Sstevel@tonic-gate  *	3	Unknown terminal <term> or no terminfo database.
82*7c478bd9Sstevel@tonic-gate  *
83*7c478bd9Sstevel@tonic-gate  *	4	Unknown terminfo capability <capname>.
84*7c478bd9Sstevel@tonic-gate  *
85*7c478bd9Sstevel@tonic-gate  *	>4	An error occured.
86*7c478bd9Sstevel@tonic-gate  *
87*7c478bd9Sstevel@tonic-gate  *
88*7c478bd9Sstevel@tonic-gate  *	NOTE 1: If the Caps file that describes the terminfo database changes
89*7c478bd9Sstevel@tonic-gate  *	then a new term.h will be required.  See CURSES/tic related tools.
90*7c478bd9Sstevel@tonic-gate  *
91*7c478bd9Sstevel@tonic-gate  *	NOTE 2: tput has knowledge about the TERMINAL structure.
92*7c478bd9Sstevel@tonic-gate  */
93*7c478bd9Sstevel@tonic-gate #ifdef M_RCSID
94*7c478bd9Sstevel@tonic-gate #ifndef lint
95*7c478bd9Sstevel@tonic-gate static char rcsID[] = "$Id: tput.c 1.28 1995/04/12 09:28:05 ross Exp $";
96*7c478bd9Sstevel@tonic-gate #endif
97*7c478bd9Sstevel@tonic-gate #endif
98*7c478bd9Sstevel@tonic-gate 
99*7c478bd9Sstevel@tonic-gate #include <mks.h>
100*7c478bd9Sstevel@tonic-gate #include <curses.h>
101*7c478bd9Sstevel@tonic-gate #include <term.h>
102*7c478bd9Sstevel@tonic-gate #include <ctype.h>
103*7c478bd9Sstevel@tonic-gate #include <limits.h>
104*7c478bd9Sstevel@tonic-gate #include <stdarg.h>
105*7c478bd9Sstevel@tonic-gate #include <stdio.h>
106*7c478bd9Sstevel@tonic-gate #include <stdlib.h>
107*7c478bd9Sstevel@tonic-gate #include <string.h>
108*7c478bd9Sstevel@tonic-gate 
109*7c478bd9Sstevel@tonic-gate extern char *_cmdname;
110*7c478bd9Sstevel@tonic-gate 
111*7c478bd9Sstevel@tonic-gate 
112*7c478bd9Sstevel@tonic-gate /* Exit Status */
113*7c478bd9Sstevel@tonic-gate #define SUCCESS		0
114*7c478bd9Sstevel@tonic-gate #define NOT_DEFINED	1
115*7c478bd9Sstevel@tonic-gate #define USAGE		2
116*7c478bd9Sstevel@tonic-gate #define BAD_TERMINAL	3
117*7c478bd9Sstevel@tonic-gate #define NOT_VALID	4
118*7c478bd9Sstevel@tonic-gate #define ERROR		5
119*7c478bd9Sstevel@tonic-gate 
120*7c478bd9Sstevel@tonic-gate static int S_flag = 0;
121*7c478bd9Sstevel@tonic-gate static char *term_name;
122*7c478bd9Sstevel@tonic-gate static char dumb_term[] = "dumb";
123*7c478bd9Sstevel@tonic-gate static char usage_msg[] = m_textstr(4931, "\
124*7c478bd9Sstevel@tonic-gate Usage: tput [-W] [-Tterm] capname [parm1..parm9]\n\
125*7c478bd9Sstevel@tonic-gate        tput [-W] [-Tterm] -S\n", "U");
126*7c478bd9Sstevel@tonic-gate 
127*7c478bd9Sstevel@tonic-gate STATREF void build_argv ANSI((int *ac, char ***av));
128*7c478bd9Sstevel@tonic-gate STATREF int do_tput ANSI((int _argc, char **_argv));
129*7c478bd9Sstevel@tonic-gate STATREF void init ANSI((void));
130*7c478bd9Sstevel@tonic-gate STATREF void reset ANSI((void));
131*7c478bd9Sstevel@tonic-gate STATREF int usage ANSI((void));
132*7c478bd9Sstevel@tonic-gate STATREF void err_msg ANSI((char *fmt, ...));	/* GENTEXT: err_msg */
133*7c478bd9Sstevel@tonic-gate STATREF void cat ANSI((char *_Fn));
134*7c478bd9Sstevel@tonic-gate 
135*7c478bd9Sstevel@tonic-gate /*f
136*7c478bd9Sstevel@tonic-gate  * mainline for tput
137*7c478bd9Sstevel@tonic-gate  */
138*7c478bd9Sstevel@tonic-gate int
main(argc,argv)139*7c478bd9Sstevel@tonic-gate main(argc, argv)
140*7c478bd9Sstevel@tonic-gate int argc;
141*7c478bd9Sstevel@tonic-gate char **argv;
142*7c478bd9Sstevel@tonic-gate {
143*7c478bd9Sstevel@tonic-gate 	int opt;
144*7c478bd9Sstevel@tonic-gate 	int err_code;
145*7c478bd9Sstevel@tonic-gate 	setlocale(LC_ALL, "");
146*7c478bd9Sstevel@tonic-gate 	_cmdname = m_cmdname(*argv);
147*7c478bd9Sstevel@tonic-gate 	if ((term_name = getenv("TERM")) == NULL) {
148*7c478bd9Sstevel@tonic-gate 		term_name = dumb_term;
149*7c478bd9Sstevel@tonic-gate 	} else {
150*7c478bd9Sstevel@tonic-gate 		term_name = m_strdup(term_name);
151*7c478bd9Sstevel@tonic-gate 	}
152*7c478bd9Sstevel@tonic-gate 
153*7c478bd9Sstevel@tonic-gate 	/* Default uses the terminfo database without modification. */
154*7c478bd9Sstevel@tonic-gate 	use_env(0);
155*7c478bd9Sstevel@tonic-gate 
156*7c478bd9Sstevel@tonic-gate 	while ((opt = getopt(argc, argv, "ST:W")) != -1) {
157*7c478bd9Sstevel@tonic-gate 		switch (opt) {
158*7c478bd9Sstevel@tonic-gate 		case 'W':
159*7c478bd9Sstevel@tonic-gate 			/* Environment/window size are consulted and may
160*7c478bd9Sstevel@tonic-gate 			 * alter the database entries for lines and columns.
161*7c478bd9Sstevel@tonic-gate 			 */
162*7c478bd9Sstevel@tonic-gate 			use_env(1);
163*7c478bd9Sstevel@tonic-gate 			break;
164*7c478bd9Sstevel@tonic-gate 		case 'S':
165*7c478bd9Sstevel@tonic-gate 			S_flag = 1;
166*7c478bd9Sstevel@tonic-gate 			break;
167*7c478bd9Sstevel@tonic-gate 
168*7c478bd9Sstevel@tonic-gate 		case 'T':
169*7c478bd9Sstevel@tonic-gate 			term_name = optarg;
170*7c478bd9Sstevel@tonic-gate 			break;
171*7c478bd9Sstevel@tonic-gate 
172*7c478bd9Sstevel@tonic-gate 		default:
173*7c478bd9Sstevel@tonic-gate 			return (usage());
174*7c478bd9Sstevel@tonic-gate 		}
175*7c478bd9Sstevel@tonic-gate 	}
176*7c478bd9Sstevel@tonic-gate 
177*7c478bd9Sstevel@tonic-gate 	argc -= optind;
178*7c478bd9Sstevel@tonic-gate 	argv += optind;
179*7c478bd9Sstevel@tonic-gate 
180*7c478bd9Sstevel@tonic-gate 	if ((S_flag ^ (argc <= 0)) == 1)
181*7c478bd9Sstevel@tonic-gate 		return (usage());
182*7c478bd9Sstevel@tonic-gate 	(void) setupterm(term_name, fileno(stdout), &err_code);
183*7c478bd9Sstevel@tonic-gate 	switch (err_code) {
184*7c478bd9Sstevel@tonic-gate 	case 1:
185*7c478bd9Sstevel@tonic-gate 		break;
186*7c478bd9Sstevel@tonic-gate 	case 0:
187*7c478bd9Sstevel@tonic-gate 		err_msg(m_textstr(202, "Unknown terminal \"%s\".\n", "E term"), term_name);
188*7c478bd9Sstevel@tonic-gate 		return (BAD_TERMINAL);
189*7c478bd9Sstevel@tonic-gate 	case -1:
190*7c478bd9Sstevel@tonic-gate 		err_msg(m_textstr(203, "No terminfo database.\n", "E"));
191*7c478bd9Sstevel@tonic-gate 		return (BAD_TERMINAL);
192*7c478bd9Sstevel@tonic-gate 	}
193*7c478bd9Sstevel@tonic-gate 	do {
194*7c478bd9Sstevel@tonic-gate 		if (S_flag) {
195*7c478bd9Sstevel@tonic-gate 			build_argv(&argc, &argv);
196*7c478bd9Sstevel@tonic-gate 			if (argc <= 0)
197*7c478bd9Sstevel@tonic-gate 				break;
198*7c478bd9Sstevel@tonic-gate 		}
199*7c478bd9Sstevel@tonic-gate 		err_code = do_tput(argc, argv);
200*7c478bd9Sstevel@tonic-gate 	} while (S_flag && err_code == SUCCESS);
201*7c478bd9Sstevel@tonic-gate 	return (err_code);
202*7c478bd9Sstevel@tonic-gate }
203*7c478bd9Sstevel@tonic-gate 
204*7c478bd9Sstevel@tonic-gate /*f
205*7c478bd9Sstevel@tonic-gate  *	Get an input line from stdin and then break it up into an argv array.
206*7c478bd9Sstevel@tonic-gate  *	If EOF is reached then S_flag is set to 0. Only the first 10 strings
207*7c478bd9Sstevel@tonic-gate  *	are of any interest. Any extra are ignored.
208*7c478bd9Sstevel@tonic-gate  */
209*7c478bd9Sstevel@tonic-gate STATIC void
build_argv(ac,av)210*7c478bd9Sstevel@tonic-gate build_argv(ac, av)
211*7c478bd9Sstevel@tonic-gate int *ac;
212*7c478bd9Sstevel@tonic-gate char ***av;
213*7c478bd9Sstevel@tonic-gate {
214*7c478bd9Sstevel@tonic-gate 	int i = 0;
215*7c478bd9Sstevel@tonic-gate 	char *p;
216*7c478bd9Sstevel@tonic-gate 	static char *v[10+1];
217*7c478bd9Sstevel@tonic-gate 	static char buf[LINE_MAX];
218*7c478bd9Sstevel@tonic-gate 	if ((*v = fgets(buf, LINE_MAX, stdin)) == NULL) {
219*7c478bd9Sstevel@tonic-gate 		/* End of file or input error */
220*7c478bd9Sstevel@tonic-gate 		S_flag = 0;
221*7c478bd9Sstevel@tonic-gate 	} else {
222*7c478bd9Sstevel@tonic-gate 		if ((p = strchr(buf, '\n')) != NULL)
223*7c478bd9Sstevel@tonic-gate 			*p = '\0';
224*7c478bd9Sstevel@tonic-gate 		for (p = buf; i < 10;) {
225*7c478bd9Sstevel@tonic-gate 			while (isspace(*(unsigned char*) p))
226*7c478bd9Sstevel@tonic-gate 				++p;
227*7c478bd9Sstevel@tonic-gate 			if (*p == '\0')
228*7c478bd9Sstevel@tonic-gate 				break;
229*7c478bd9Sstevel@tonic-gate 			v[i++] = p;
230*7c478bd9Sstevel@tonic-gate 			while (!isspace(*(unsigned char*) p) && *p != '\0')
231*7c478bd9Sstevel@tonic-gate 				++p;
232*7c478bd9Sstevel@tonic-gate 			if (*p == '\0')
233*7c478bd9Sstevel@tonic-gate 				break;
234*7c478bd9Sstevel@tonic-gate 			*p++ = '\0';
235*7c478bd9Sstevel@tonic-gate 		}
236*7c478bd9Sstevel@tonic-gate 	}
237*7c478bd9Sstevel@tonic-gate 	v[i] = NULL;
238*7c478bd9Sstevel@tonic-gate 	*ac = i;
239*7c478bd9Sstevel@tonic-gate 	*av = v;
240*7c478bd9Sstevel@tonic-gate }
241*7c478bd9Sstevel@tonic-gate 
242*7c478bd9Sstevel@tonic-gate /*f
243*7c478bd9Sstevel@tonic-gate  *
244*7c478bd9Sstevel@tonic-gate  */
245*7c478bd9Sstevel@tonic-gate STATIC int
do_tput(_argc,_argv)246*7c478bd9Sstevel@tonic-gate do_tput(_argc, _argv)
247*7c478bd9Sstevel@tonic-gate int _argc;
248*7c478bd9Sstevel@tonic-gate char **_argv;
249*7c478bd9Sstevel@tonic-gate {
250*7c478bd9Sstevel@tonic-gate 	int i;
251*7c478bd9Sstevel@tonic-gate 	long q[9];
252*7c478bd9Sstevel@tonic-gate 	const char *p;
253*7c478bd9Sstevel@tonic-gate 	char *end_num;
254*7c478bd9Sstevel@tonic-gate 
255*7c478bd9Sstevel@tonic-gate 	if (strcmp(*_argv, "init") == 0)
256*7c478bd9Sstevel@tonic-gate 		init();
257*7c478bd9Sstevel@tonic-gate 	else if (strcmp(*_argv, "reset") == 0)
258*7c478bd9Sstevel@tonic-gate 		reset();
259*7c478bd9Sstevel@tonic-gate 	else if (strcmp(*_argv, "longname") == 0)
260*7c478bd9Sstevel@tonic-gate 		(void) printf("%s\n", longname());
261*7c478bd9Sstevel@tonic-gate 	else if ((i = tigetflag(*_argv)) != -1)
262*7c478bd9Sstevel@tonic-gate 		return (!i);
263*7c478bd9Sstevel@tonic-gate 	else if ((i = tigetnum(*_argv)) != -2)
264*7c478bd9Sstevel@tonic-gate 		(void) printf("%d\n", i);
265*7c478bd9Sstevel@tonic-gate 	else if ((p = tigetstr(*_argv)) != (char*) -1) {
266*7c478bd9Sstevel@tonic-gate 		if (p == NULL)
267*7c478bd9Sstevel@tonic-gate 			return (NOT_DEFINED);
268*7c478bd9Sstevel@tonic-gate 		for (i = 0; i < 9; ++i) {
269*7c478bd9Sstevel@tonic-gate 			if (1 < _argc) {
270*7c478bd9Sstevel@tonic-gate 				--_argc;
271*7c478bd9Sstevel@tonic-gate 				q[i] = strtol(*++_argv, &end_num, 0);
272*7c478bd9Sstevel@tonic-gate 				if (*end_num != '\0') {
273*7c478bd9Sstevel@tonic-gate 					/* The parameter must be a string
274*7c478bd9Sstevel@tonic-gate 					 * so we save the pointer instead.
275*7c478bd9Sstevel@tonic-gate 					 */
276*7c478bd9Sstevel@tonic-gate 					q[i] = (long) *_argv;
277*7c478bd9Sstevel@tonic-gate 				}
278*7c478bd9Sstevel@tonic-gate 			} else {
279*7c478bd9Sstevel@tonic-gate 				q[i] = 0L;
280*7c478bd9Sstevel@tonic-gate 			}
281*7c478bd9Sstevel@tonic-gate 		}
282*7c478bd9Sstevel@tonic-gate 		(void) putp(tparm(p, q[0], q[1], q[2], q[3],
283*7c478bd9Sstevel@tonic-gate 			q[4], q[5], q[6], q[7], q[8]
284*7c478bd9Sstevel@tonic-gate 		));
285*7c478bd9Sstevel@tonic-gate 		fflush(stdout);
286*7c478bd9Sstevel@tonic-gate 	} else {
287*7c478bd9Sstevel@tonic-gate 		err_msg(m_textstr(1864, "Unknown terminfo capability \"%s\".\n", "E action"), *_argv);
288*7c478bd9Sstevel@tonic-gate 		return (NOT_VALID);
289*7c478bd9Sstevel@tonic-gate 	}
290*7c478bd9Sstevel@tonic-gate 	return (SUCCESS);
291*7c478bd9Sstevel@tonic-gate }
292*7c478bd9Sstevel@tonic-gate 
293*7c478bd9Sstevel@tonic-gate /*f
294*7c478bd9Sstevel@tonic-gate  *
295*7c478bd9Sstevel@tonic-gate  */
296*7c478bd9Sstevel@tonic-gate STATIC void
init()297*7c478bd9Sstevel@tonic-gate init()
298*7c478bd9Sstevel@tonic-gate {
299*7c478bd9Sstevel@tonic-gate 	if (init_prog != NULL)
300*7c478bd9Sstevel@tonic-gate 		(void) system(init_prog);
301*7c478bd9Sstevel@tonic-gate 	if (init_1string != NULL)
302*7c478bd9Sstevel@tonic-gate 		putp(init_1string);
303*7c478bd9Sstevel@tonic-gate 	if (init_2string != NULL)
304*7c478bd9Sstevel@tonic-gate 		putp(init_2string);
305*7c478bd9Sstevel@tonic-gate #if 0	/* currently not supported by our terminfo database */
306*7c478bd9Sstevel@tonic-gate 	if (clear_margins != NULL)
307*7c478bd9Sstevel@tonic-gate 		putp(clear_margins);
308*7c478bd9Sstevel@tonic-gate 	if (set_left_margin != NULL)
309*7c478bd9Sstevel@tonic-gate 		putp(set_left_margin);
310*7c478bd9Sstevel@tonic-gate 	if (set_right_margin != NULL)
311*7c478bd9Sstevel@tonic-gate 		putp(set_right_margin);
312*7c478bd9Sstevel@tonic-gate #endif
313*7c478bd9Sstevel@tonic-gate 	/* TODO: setting of tabs using clear_all_tabs & set_tab. */
314*7c478bd9Sstevel@tonic-gate 	if (init_file != NULL)
315*7c478bd9Sstevel@tonic-gate 		cat(init_file);
316*7c478bd9Sstevel@tonic-gate 	if (init_3string != NULL)
317*7c478bd9Sstevel@tonic-gate 		putp(init_3string);
318*7c478bd9Sstevel@tonic-gate }
319*7c478bd9Sstevel@tonic-gate 
320*7c478bd9Sstevel@tonic-gate /*f
321*7c478bd9Sstevel@tonic-gate  *
322*7c478bd9Sstevel@tonic-gate  */
323*7c478bd9Sstevel@tonic-gate STATIC void
reset()324*7c478bd9Sstevel@tonic-gate reset()
325*7c478bd9Sstevel@tonic-gate {
326*7c478bd9Sstevel@tonic-gate 	if (reset_1string != NULL)
327*7c478bd9Sstevel@tonic-gate 		putp(reset_1string);
328*7c478bd9Sstevel@tonic-gate 	if (reset_2string != NULL)
329*7c478bd9Sstevel@tonic-gate 		putp(reset_2string);
330*7c478bd9Sstevel@tonic-gate 	if (reset_file != NULL)
331*7c478bd9Sstevel@tonic-gate 		cat(reset_file);
332*7c478bd9Sstevel@tonic-gate 	if (reset_3string != NULL)
333*7c478bd9Sstevel@tonic-gate 		putp(reset_3string);
334*7c478bd9Sstevel@tonic-gate }
335*7c478bd9Sstevel@tonic-gate 
336*7c478bd9Sstevel@tonic-gate /*f
337*7c478bd9Sstevel@tonic-gate  * usage message for tput
338*7c478bd9Sstevel@tonic-gate  */
339*7c478bd9Sstevel@tonic-gate STATIC int
usage()340*7c478bd9Sstevel@tonic-gate usage()
341*7c478bd9Sstevel@tonic-gate {
342*7c478bd9Sstevel@tonic-gate 	(void) fprintf(stderr, m_strmsg(usage_msg));
343*7c478bd9Sstevel@tonic-gate 	return (USAGE);
344*7c478bd9Sstevel@tonic-gate }
345*7c478bd9Sstevel@tonic-gate 
346*7c478bd9Sstevel@tonic-gate /*f
347*7c478bd9Sstevel@tonic-gate  * display error message
348*7c478bd9Sstevel@tonic-gate  */
349*7c478bd9Sstevel@tonic-gate STATIC void
VARARG1(char *,fmt)350*7c478bd9Sstevel@tonic-gate err_msg VARARG1(char*, fmt)
351*7c478bd9Sstevel@tonic-gate {
352*7c478bd9Sstevel@tonic-gate 	va_list ap;
353*7c478bd9Sstevel@tonic-gate 	(void) fprintf(stderr, "%s: ", _cmdname);
354*7c478bd9Sstevel@tonic-gate 	va_start(ap, fmt);
355*7c478bd9Sstevel@tonic-gate 	(void) vfprintf(stderr, m_strmsg(fmt), ap);
356*7c478bd9Sstevel@tonic-gate 	va_end(ap);
357*7c478bd9Sstevel@tonic-gate }
358*7c478bd9Sstevel@tonic-gate 
359*7c478bd9Sstevel@tonic-gate /*
360*7c478bd9Sstevel@tonic-gate  *  Print a file via putp().
361*7c478bd9Sstevel@tonic-gate  */
362*7c478bd9Sstevel@tonic-gate STATIC void
cat(fn)363*7c478bd9Sstevel@tonic-gate cat(fn)
364*7c478bd9Sstevel@tonic-gate char *fn;
365*7c478bd9Sstevel@tonic-gate {
366*7c478bd9Sstevel@tonic-gate 	FILE *fp;
367*7c478bd9Sstevel@tonic-gate 	char buf[LINE_MAX+1];
368*7c478bd9Sstevel@tonic-gate 	if ((fp = fopen(fn, "rb")) == NULL)
369*7c478bd9Sstevel@tonic-gate 		return;
370*7c478bd9Sstevel@tonic-gate 	while (fgets(buf, LINE_MAX, fp) != NULL)
371*7c478bd9Sstevel@tonic-gate 		putp(buf);
372*7c478bd9Sstevel@tonic-gate 	(void) fclose(fp);
373*7c478bd9Sstevel@tonic-gate }
374