From 5b57d28ffb6e1ef86b50f7d05d977826eae89bfe Mon Sep 17 00:00:00 2001 From: Kiyoshi Aman Date: Fri, 1 Feb 2019 22:55:37 +0000 Subject: initial population --- usr.bin/tput/clear.sh | 38 ++++++++++ usr.bin/tput/tput.1 | 139 +++++++++++++++++++++++++++++++++++ usr.bin/tput/tput.c | 195 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 372 insertions(+) create mode 100644 usr.bin/tput/clear.sh create mode 100644 usr.bin/tput/tput.1 create mode 100644 usr.bin/tput/tput.c (limited to 'usr.bin/tput') diff --git a/usr.bin/tput/clear.sh b/usr.bin/tput/clear.sh new file mode 100644 index 0000000..5fffaf0 --- /dev/null +++ b/usr.bin/tput/clear.sh @@ -0,0 +1,38 @@ +#!/bin/sh - +# $NetBSD: clear.sh,v 1.2 1994/12/07 08:49:09 jtc Exp $ +# +# Copyright (c) 1989, 1993 +# The Regents of the University of California. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. All advertising materials mentioning features or use of this software +# must display the following acknowledgement: +# This product includes software developed by the University of +# California, Berkeley and its contributors. +# 4. Neither the name of the University nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# @(#)clear.sh 8.1 (Berkeley) 6/6/93 +# + +exec tput clear diff --git a/usr.bin/tput/tput.1 b/usr.bin/tput/tput.1 new file mode 100644 index 0000000..1ea0bb4 --- /dev/null +++ b/usr.bin/tput/tput.1 @@ -0,0 +1,139 @@ +.\" $NetBSD: tput.1,v 1.16 2012/04/21 12:27:30 roy Exp $ +.\" +.\" Copyright (c) 1989, 1990, 1993 +.\" The Regents of the University of California. All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)tput.1 8.2 (Berkeley) 3/19/94 +.\" +.Dd April 5, 2012 +.Dt TPUT 1 +.Os +.Sh NAME +.Nm tput , +.Nm clear +.Nd terminal capability interface +.Sh SYNOPSIS +.Nm +.Op Fl T Ar term +.Ar attribute +.Op Ar attribute-args +.Ar ... +.Sh DESCRIPTION +.Nm +makes terminal-dependent information available to users or shell +applications. +The options are as follows: +.Bl -tag -width Ds +.It Fl T +The terminal name as specified in the +.Xr terminfo 5 +database, for example, +.Dq vt100 +or +.Dq xterm . +If not specified, +.Nm +retrieves the +.Dq Ev TERM +variable from the environment. +.El +.Pp +.Nm +outputs a string if the +.Ar attribute +is of type string; a number if it is of type integer. +Otherwise, +.Nm +exits 0 if the terminal has the capability and 1 if it does not, +without further action. +.Pp +If the +.Ar attribute +is of type string, and takes arguments (e.g. cursor movement, +the terminfo +.Dq cup +sequence) the arguments are taken from the command line immediately +following the attribute. +.Pp +The following special attributes are available: +.Bl -tag -width Ar +.It clear +Clear the screen (the +.Xr terminfo 5 +.Dq cl +sequence). +.It init +Initialize the terminal (the +.Xr terminfo 5 +.Dq is2 +sequence). +.It longname +Print the descriptive name of the user's terminal type. +.It reset +Reset the terminal (the +.Xr terminfo 5 +.Dq rs1 , rs2 , rs3 +and +.Dq rf +sequence). +.El +.Sh EXIT STATUS +The exit status of +.Nm +is based on the last attribute specified. +If the attribute is of type string or of type integer, +.Nm +exits 0 if the attribute is defined for this terminal type and 1 +if it is not. +If the attribute is of type boolean, +.Nm +exits 0 if the terminal has this attribute, and 1 if it does not. +.Nm +exits 2 if any error occurred. +.Sh EXAMPLES +.Bl -tag -width "tput cm 6 11 DC 6" -compact +.It Li "tput cl cm 5 10" +clear the screen and goto line 5 column 10 +.Pp +.It Li "tput cm 6 11 DC 6" +goto line 6 column 11 and delete 6 characters +.El +.Sh SEE ALSO +.Xr termcap 3 , +.Xr terminfo 3 , +.Xr terminfo 5 +.Sh HISTORY +The +.Nm +command appears in +.Bx 4.4 . +.Sh BUGS +.Nm +can't really distinguish between different types of attributes. +.Pp +Not all terminfo entries contain the reset sequence, so using the init +sequence may be more useful. diff --git a/usr.bin/tput/tput.c b/usr.bin/tput/tput.c new file mode 100644 index 0000000..0e8da2f --- /dev/null +++ b/usr.bin/tput/tput.c @@ -0,0 +1,195 @@ +/* $NetBSD: tput.c,v 1.26 2013/02/05 11:31:56 roy Exp $ */ + +/*- + * Copyright (c) 1980, 1988, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +#ifndef lint +__COPYRIGHT("@(#) Copyright (c) 1980, 1988, 1993\ + The Regents of the University of California. All rights reserved."); +#endif /* not lint */ + +#ifndef lint +#if 0 +static char sccsid[] = "@(#)tput.c 8.3 (Berkeley) 4/28/95"; +#endif +__RCSID("$NetBSD: tput.c,v 1.26 2013/02/05 11:31:56 roy Exp $"); +#endif /* not lint */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static void usage(void) __dead; +static char **process(const char *, const char *, char **); + +int +main(int argc, char **argv) +{ + int ch, exitval, n; + char *term; + const char *p, *s; + size_t pl; + + term = NULL; + while ((ch = getopt(argc, argv, "T:")) != -1) + switch(ch) { + case 'T': + term = optarg; + break; + case '?': + default: + usage(); + } + argc -= optind; + argv += optind; + + if (!term && !(term = getenv("TERM"))) + errx(2, "No terminal type specified and no TERM " + "variable set in the environment."); + setupterm(term, 0, NULL); + for (exitval = 0; (p = *argv) != NULL; ++argv) { + switch (*p) { + case 'c': + if (!strcmp(p, "clear")) + p = "clear"; + break; + case 'i': + if (!strcmp(p, "init")) { + s = tigetstr("is1"); + if (s != NULL) + putp(s); + p = "is2"; + } + break; + case 'l': + if (!strcmp(p, "longname")) { + (void)printf("%s\n", longname()); + continue; + } + break; + case 'r': + if (!strcmp(p, "reset")) { + s = tigetstr("rs1"); + if (s != NULL) + putp(s); + p = "rs2"; + } + break; + } + pl = strlen(p); + if (((s = tigetstr(p)) != NULL && s != (char *)-1) || + (pl <= 2 && (s = tgetstr(p, NULL)) != NULL)) + argv = process(p, s, argv); + else if ((((n = tigetnum(p)) != -1 && n != -2 ) || + (pl <= 2 && (n = tgetnum(p)) != -1))) + (void)printf("%d\n", n); + else { + exitval = tigetflag(p); + if (exitval == -1) { + if (pl <= 2) + exitval = !tgetflag(p); + else + exitval = 1; + } else + exitval = !exitval; + } + + if (argv == NULL) + break; + } + return argv ? exitval : 2; +} + +static char ** +process(const char *cap, const char *str, char **argv) +{ + static const char errfew[] = + "Not enough arguments (%d) for capability `%s'"; + static const char erresc[] = + "Unknown %% escape (%s) for capability `%s'"; + static const char errnum[] = + "Expected a numeric argument [%d] (%s) for capability `%s'"; + static const char errcharlong[] = + "Platform does not fit a string into a long for capability '%s'"; + int i, nparams, piss[TPARM_MAX]; + long nums[TPARM_MAX]; + char *strs[TPARM_MAX], *tmp; + + /* Count how many values we need for this capability. */ + errno = 0; + memset(&piss, 0, sizeof(piss)); + nparams = _ti_parm_analyse(str, piss, TPARM_MAX); + if (errno == EINVAL) + errx(2, erresc, str, cap); + + /* Create our arrays of integers and strings */ + for (i = 0; i < nparams; i++) { + if (*++argv == NULL || *argv[0] == '\0') + errx(2, errfew, nparams, cap); + if (piss[i]) { + if (sizeof(char *) > sizeof(long) /* CONSTCOND */) + errx(2, errcharlong, cap); + strs[i] = *argv; + } else { + errno = 0; + nums[i] = strtol(*argv, &tmp, 0); + if ((errno == ERANGE && + (nums[i] == LONG_MIN || nums[i] == LONG_MAX)) || + (errno != 0 && nums[i] == 0) || + tmp == str || + *tmp != '\0') + errx(2, errnum, i + 1, *argv, cap); + } + } + + /* And output */ +#define p(i) (i <= nparams ? \ + (piss[i - 1] ? (long)strs[i - 1] : nums[i - 1]) : 0) + putp(tparm(str, p(1), p(2), p(3), p(4), p(5), p(6), p(7), p(8), p(9))); + + return argv; +} + +static void +usage(void) +{ + (void)fprintf(stderr, + "Usage: %s [-T term] attribute [attribute-args] ...\n", + getprogname()); + exit(2); +} -- cgit v1.2.3-60-g2f50