diff options
author | rgrimes <rgrimes@FreeBSD.org> | 1994-05-27 12:33:43 +0000 |
---|---|---|
committer | rgrimes <rgrimes@FreeBSD.org> | 1994-05-27 12:33:43 +0000 |
commit | f9ab90d9d6d02989a075d0f0074496d5b1045e4b (patch) | |
tree | add7e996bac5289cdc55e6935750c352505560a9 /usr.bin/tput | |
parent | be22b15ae2ff8d7fe06b6e14fddf0c5b444a95da (diff) | |
download | FreeBSD-src-f9ab90d9d6d02989a075d0f0074496d5b1045e4b.zip FreeBSD-src-f9ab90d9d6d02989a075d0f0074496d5b1045e4b.tar.gz |
BSD 4.4 Lite Usr.bin Sources
Diffstat (limited to 'usr.bin/tput')
-rw-r--r-- | usr.bin/tput/Makefile | 12 | ||||
-rw-r--r-- | usr.bin/tput/clear.sh | 37 | ||||
-rw-r--r-- | usr.bin/tput/tput.1 | 117 | ||||
-rw-r--r-- | usr.bin/tput/tput.c | 226 |
4 files changed, 392 insertions, 0 deletions
diff --git a/usr.bin/tput/Makefile b/usr.bin/tput/Makefile new file mode 100644 index 0000000..abec983 --- /dev/null +++ b/usr.bin/tput/Makefile @@ -0,0 +1,12 @@ +# @(#)Makefile 8.1 (Berkeley) 6/6/93 + +PROG= tput +DPADD= ${LIBTERMCAP} +LDADD= -ltermcap +MLINKS= tput.1 clear.1 + +beforeinstall: + install -c -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \ + ${.CURDIR}/clear.sh ${DESTDIR}/usr/bin/clear + +.include <bsd.prog.mk> diff --git a/usr.bin/tput/clear.sh b/usr.bin/tput/clear.sh new file mode 100644 index 0000000..add589b --- /dev/null +++ b/usr.bin/tput/clear.sh @@ -0,0 +1,37 @@ +#!/bin/sh - +# +# 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..9a348431 --- /dev/null +++ b/usr.bin/tput/tput.1 @@ -0,0 +1,117 @@ +.\" 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. 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. +.\" +.\" @(#)tput.1 8.2 (Berkeley) 3/19/94 +.\" +.Dd March 19, 1994 +.Dt TPUT 1 +.Os BSD 4.4 +.Sh NAME +.Nm tput +.Nd terminal capability interface +.Sh SYNOPSIS +.Nm tput +.Op Fl T Ar term +.Ar attribute +.Sh DESCRIPTION +.Nm Tput +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 termcap +database, for example, ``vt100'' or ``xterm''. +If not specified, +.Nm tput +retrieves the +.Dq Ev TERM +variable from the environment. +.El +.Pp +.Nm Tput +outputs a string if the +.Ar attribute +is of type string; a number if it is of type integer. +Otherwise, +.Nm tput +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 termcap +.Dq cm +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 termcap +``cl'' sequence). +.It init +Initialize the terminal (the +.Xr termcap +``is'' sequence). +.It longname +Print the descriptive name of the user's terminal type. +.It reset +Reset the terminal (the +.Xr termcap +``rs'' sequence). +.Sh DIAGNOSTICS +The exit value of +.Nm tput +is based on the last attribute specified. +If the attribute is of type string or of type integer, +.Nm tput +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 tput +exits 0 if the terminal has this attribute, and 1 if it does not. +.Nm Tput +exits 2 if any error occurred. +.Sh SEE ALSO +.Xr termcap 3 , +.Xr termcap 5 +.Sh BUGS +.Nm Tput +can't really distinguish between different types of attributes. +.Sh HISTORY +The +.Nm +command appears in +.Bx 4.4 . diff --git a/usr.bin/tput/tput.c b/usr.bin/tput/tput.c new file mode 100644 index 0000000..8da0be7 --- /dev/null +++ b/usr.bin/tput/tput.c @@ -0,0 +1,226 @@ +/*- + * 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. 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. + */ + +#ifndef lint +static char copyright[] = +"@(#) Copyright (c) 1980, 1988, 1993\n\ + The Regents of the University of California. All rights reserved.\n"; +#endif /* not lint */ + +#ifndef lint +static char sccsid[] = "@(#)tput.c 8.2 (Berkeley) 3/19/94"; +#endif /* not lint */ + +#include <sys/termios.h> + +#include <err.h> +#include <curses.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +static void prlongname __P((char *)); +static void setospeed __P((void)); +static void outc __P((int)); +static void usage __P((void)); +static char **process __P((char *, char *, char **)); + +int +main(argc, argv) + int argc; + char **argv; +{ + extern char *optarg; + extern int optind; + int ch, exitval, n; + char *cptr, *p, *term, buf[1024], tbuf[1024]; + + term = NULL; + while ((ch = getopt(argc, argv, "T:")) != EOF) + 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 environmental variable."); + if (tgetent(tbuf, term) != 1) + err(2, "tgetent failure"); + setospeed(); + for (exitval = 0; (p = *argv) != NULL; ++argv) { + switch (*p) { + case 'c': + if (!strcmp(p, "clear")) + p = "cl"; + break; + case 'i': + if (!strcmp(p, "init")) + p = "is"; + break; + case 'l': + if (!strcmp(p, "longname")) + prlongname(tbuf); + continue; + case 'r': + if (!strcmp(p, "reset")) + p = "rs"; + break; + } + cptr = buf; + if (tgetstr(p, &cptr)) + argv = process(p, buf, argv); + else if ((n = tgetnum(p)) != -1) + (void)printf("%d\n", n); + else + exitval = !tgetflag(p); + } + exit(exitval); +} + +static void +prlongname(buf) + char *buf; +{ + int savech; + char *p, *savep; + + for (p = buf; *p && *p != ':'; ++p); + savech = *(savep = p); + for (*p = '\0'; p >= buf && *p != '|'; --p); + (void)printf("%s\n", p + 1); + *savep = savech; +} + +static char ** +process(cap, str, argv) + char *cap, *str, **argv; +{ + static char errfew[] = + "not enough arguments (%d) for capability `%s'"; + static char errmany[] = + "too many arguments (%d) for capability `%s'"; + static char erresc[] = + "unknown %% escape `%c' for capability `%s'"; + char *cp; + int arg_need, arg_rows, arg_cols; + + /* Count how many values we need for this capability. */ + for (cp = str, arg_need = 0; *cp != '\0'; cp++) + if (*cp == '%') + switch (*++cp) { + case 'd': + case '2': + case '3': + case '.': + case '+': + arg_need++; + break; + case '%': + case '>': + case 'i': + case 'r': + case 'n': + case 'B': + case 'D': + break; + default: + /* + * hpux has lot's of them, but we complain + */ + errx(2, erresc, *cp, cap); + } + + /* And print them. */ + switch (arg_need) { + case 0: + (void)tputs(str, 1, outc); + break; + case 1: + arg_cols = 0; + + if (*++argv == NULL || *argv[0] == '\0') + errx(2, errfew, 1, cap); + arg_rows = atoi(*argv); + + (void)tputs(tgoto(str, arg_cols, arg_rows), 1, outc); + break; + case 2: + if (*++argv == NULL || *argv[0] == '\0') + errx(2, errfew, 2, cap); + arg_cols = atoi(*argv); + + if (*++argv == NULL || *argv[0] == '\0') + errx(2, errfew, 2, cap); + arg_rows = atoi(*argv); + + (void) tputs(tgoto(str, arg_cols, arg_rows), arg_rows, outc); + break; + + default: + errx(2, errmany, arg_need, cap); + } + return (argv); +} + +static void +setospeed() +{ +#undef ospeed + extern short ospeed; + struct termios t; + + if (tcgetattr(STDOUT_FILENO, &t) != -1) + ospeed = 0; + else + ospeed = cfgetospeed(&t); +} + +static void +outc(c) + int c; +{ + (void)putchar(c); +} + +static void +usage() +{ + (void)fprintf(stderr, "usage: tput [-T term] attribute ...\n"); + exit(1); +} |