From e9a637e9c98a006de9801a4c9e4d78c438f2e0a2 Mon Sep 17 00:00:00 2001 From: peter <peter@FreeBSD.org> Date: Fri, 26 Nov 1999 09:33:02 +0000 Subject: [PATCH] To avoid confusion, zap libtermcap. ncurses provides both curses, termcap and termlib (terminfo) support. --- lib/libtermcap/Makefile | 48 --- lib/libtermcap/TEST/tc1.c | 63 ---- lib/libtermcap/TEST/tc2.c | 90 ----- lib/libtermcap/TEST/tc3.c | 112 ------ lib/libtermcap/pathnames.h | 37 -- lib/libtermcap/termcap.3 | 291 -------------- lib/libtermcap/termcap.c | 309 --------------- lib/libtermcap/termcap.h | 53 --- lib/libtermcap/tgoto.c | 227 ----------- lib/libtermcap/tospeed.c | 72 ---- lib/libtermcap/tparm.c | 753 ------------------------------------- lib/libtermcap/tputs.c | 123 ------ 12 files changed, 2178 deletions(-) delete mode 100644 lib/libtermcap/Makefile delete mode 100644 lib/libtermcap/TEST/tc1.c delete mode 100644 lib/libtermcap/TEST/tc2.c delete mode 100644 lib/libtermcap/TEST/tc3.c delete mode 100644 lib/libtermcap/pathnames.h delete mode 100644 lib/libtermcap/termcap.3 delete mode 100644 lib/libtermcap/termcap.c delete mode 100644 lib/libtermcap/termcap.h delete mode 100644 lib/libtermcap/tgoto.c delete mode 100644 lib/libtermcap/tospeed.c delete mode 100644 lib/libtermcap/tparm.c delete mode 100644 lib/libtermcap/tputs.c diff --git a/lib/libtermcap/Makefile b/lib/libtermcap/Makefile deleted file mode 100644 index 73abe154a79d..000000000000 --- a/lib/libtermcap/Makefile +++ /dev/null @@ -1,48 +0,0 @@ -# @(#)Makefile 8.1 (Berkeley) 6/4/93 - -LIB= termcap -SHLIB_MAJOR= 2 -SHLIB_MINOR= 1 -CFLAGS+=-DCM_N -DCM_GT -DCM_B -DCM_D -I${.CURDIR} -SRCS= termcap.c tgoto.c tputs.c tparm.c tospeed.c - -MAN3= termcap.3 -MLINKS= termcap.3 tgetent.3 termcap.3 tgetflag.3 termcap.3 tgetnum.3 \ - termcap.3 tgetstr.3 termcap.3 tgoto.3 termcap.3 tputs.3 \ - termcap.3 tparm.3 termcap.3 __set_ospeed.3 - -LINKS= ${LIBDIR}/libtermcap.a ${LIBDIR}/libtermlib.a -.if ${OBJFORMAT} == aout -.if !defined(NOPIC) -LINKS+= ${SHLIBDIR}/libtermcap.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \ - ${SHLIBDIR}/libtermlib.so.${SHLIB_MAJOR}.${SHLIB_MINOR} -.endif -.endif -.if !defined(NOPROFILE) -LINKS+= ${LIBDIR}/libtermcap_p.a ${LIBDIR}/libtermlib_p.a -.endif - -beforeinstall: - ${INSTALL} -C -o ${BINOWN} -g ${BINGRP} -m 444 ${.CURDIR}/termcap.h \ - ${DESTDIR}/usr/include - -# This is a hack.. Work around a major number bump that should have been -# done differently. Back out this delta when it's time to go to 3.0 for real. -afterinstall: -.if !defined(NOPIC) -.if ${OBJFORMAT} == aout -.for lib in libtermcap libtermlib - rm -f ${DESTDIR}/usr/lib/compat/${lib}.so.3.0 - rm -f ${DESTDIR}/usr/lib/compat/aout/${lib}.so.3.0 - ln -s ${SHLIBDIR}/${lib}.so.${SHLIB_MAJOR}.${SHLIB_MINOR} \ - ${DESTDIR}/usr/lib/compat/aout/${lib}.so.3.0 - rm -f ${DESTDIR}${SHLIBDIR}/${lib}.so.3.0 -.endfor -.endif -.if ${OBJFORMAT} == elf - rm -f ${DESTDIR}${SHLIBDIR}/libtermlib.so - ln -s libtermcap.so.${SHLIB_MAJOR} ${DESTDIR}${SHLIBDIR}/libtermlib.so -.endif -.endif - -.include <bsd.lib.mk> diff --git a/lib/libtermcap/TEST/tc1.c b/lib/libtermcap/TEST/tc1.c deleted file mode 100644 index fd0870adc679..000000000000 --- a/lib/libtermcap/TEST/tc1.c +++ /dev/null @@ -1,63 +0,0 @@ -/*- - * Copyright (c) 1983, 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) 1983, 1993\n\ - The Regents of the University of California. All rights reserved.\n"; -#endif /* not lint */ - -#ifndef lint -static char sccsid[] = "@(#)tc1.c 8.1 (Berkeley) 6/4/93"; -#endif /* not lint */ - -/* - * tc1 [term] - * dummy program to test termlib. - * gets entry, counts it, and prints it. - */ -#include <stdio.h> -char buf[1024]; -char *getenv(); - -main(argc, argv) char **argv; { - char *p; - int rc; - - if (argc < 2) - p = getenv("TERM"); - else - p = argv[1]; - rc = tgetent(buf,p); - printf("tgetent returns %d, len=%d, text=\n'%s'\n",rc,strlen(buf),buf); -} diff --git a/lib/libtermcap/TEST/tc2.c b/lib/libtermcap/TEST/tc2.c deleted file mode 100644 index 1db9d0027e5d..000000000000 --- a/lib/libtermcap/TEST/tc2.c +++ /dev/null @@ -1,90 +0,0 @@ -/*- - * Copyright (c) 1983, 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) 1983, 1993\n\ - The Regents of the University of California. All rights reserved.\n"; -#endif /* not lint */ - -#ifndef lint -static char sccsid[] = "@(#)tc2.c 8.1 (Berkeley) 6/4/93"; -#endif /* not lint */ - -/* - * tc2 [term] - * Dummy program to test out termlib. - * Commands are "tcc\n" where t is type (s for string, f for flag, - * or n for number) and cc is the name of the capability. - */ -#include <stdio.h> -char buf[1024]; -char *getenv(), *tgetstr(); - -main(argc, argv) char **argv; { - char *p, *q; - int rc; - char b[3], c; - char area[200]; - - if (argc < 2) - p = getenv("TERM"); - else - p = argv[1]; - rc = tgetent(buf,p); - for (;;) { - c = getchar(); - if (c < 0) - exit(0); - b[0] = getchar(); - if (b[0] < ' ') - exit(0); - b[1] = getchar(); - b[2] = 0; - getchar(); - switch(c) { - case 'f': - printf("%s: %d\n",b,tgetflag(b)); - break; - case 'n': - printf("%s: %d\n",b,tgetnum(b)); - break; - case 's': - q = area; - printf("%s: %s\n",b,tgetstr(b,&q)); - break; - default: - exit(0); - } - } -} diff --git a/lib/libtermcap/TEST/tc3.c b/lib/libtermcap/TEST/tc3.c deleted file mode 100644 index 3935e10d18eb..000000000000 --- a/lib/libtermcap/TEST/tc3.c +++ /dev/null @@ -1,112 +0,0 @@ -/*- - * Copyright (c) 1983, 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) 1983, 1993\n\ - The Regents of the University of California. All rights reserved.\n"; -#endif /* not lint */ - -#ifndef lint -static char sccsid[] = "@(#)tc3.c 8.1 (Berkeley) 6/4/93"; -#endif /* not lint */ - -/* - * tc3 [term] - * Dummy program to test out termlib. Input two numbers (row and col) - * and it prints out the tgoto string generated. - */ -#include <stdio.h> -char buf[1024]; -char *getenv(), *tgetstr(); -char *rdchar(); -char *tgoto(); -char *CM; -char cmbuff[30]; -char *x; -char *UP; -char *tgout; - -main(argc, argv) char **argv; { - char *p; - int rc; - int row, col; - - if (argc < 2) - p = getenv("TERM"); - else - p = argv[1]; - rc = tgetent(buf,p); - x = cmbuff; - UP = tgetstr("up", &x); - printf("UP = %x = ", UP); pr(UP); printf("\n"); - if (UP && *UP==0) - UP = 0; - CM = tgetstr("cm", &x); - printf("CM = "); pr(CM); printf("\n"); - for (;;) { - if (scanf("%d %d", &row, &col) < 2) - exit(0); - tgout = tgoto(CM, col, row); - pr(tgout); - printf("\n"); - } -} - -pr(p) -register char *p; -{ - for (; *p; p++) - printf("%s", rdchar(*p)); -} - -/* - * rdchar() returns a readable representation of an ASCII character - * using ^ for control, ' for meta. - */ -#include <ctype.h> -char *rdchar(c) -char c; -{ - static char ret[4]; - register char *p = ret; - - if ((c&0377) > 0177) - *p++ = '\''; - c &= 0177; - if (!isprint(c)) - *p++ = '^'; - *p++ = (isprint(c) ? c : c^0100); - *p = 0; - return (ret); -} diff --git a/lib/libtermcap/pathnames.h b/lib/libtermcap/pathnames.h deleted file mode 100644 index e77bab81a0a2..000000000000 --- a/lib/libtermcap/pathnames.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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. - * - * @(#)pathnames.h 8.1 (Berkeley) 6/4/93 - */ - -#define _PATH_DEF ".termcap /usr/share/misc/termcap" -#define _PATH_DEF_SEC "/usr/share/misc/termcap" diff --git a/lib/libtermcap/termcap.3 b/lib/libtermcap/termcap.3 deleted file mode 100644 index 99cc12f54a1e..000000000000 --- a/lib/libtermcap/termcap.3 +++ /dev/null @@ -1,291 +0,0 @@ -.\" Copyright (c) 1980, 1991, 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. -.\" -.\" @(#)termcap.3 8.2 (Berkeley) 12/11/93 -.\" $FreeBSD$ -.\" -.Dd December 11, 1993 -.Dt TERMCAP 3 -.Os BSD 4 -.Sh NAME -.Nm tgetent , -.Nm tgetnum , -.Nm tgetflag , -.Nm tgetstr , -.Nm tgoto , -.Nm tputs , -.Nm tparm , -.Nm __set_ospeed -.Nd terminal independent operation routines -.Sh SYNOPSIS -.Fd #include <termcap.h> -.Vt char PC; -.Vt char *BC; -.Vt char *UP; -.Vt short ospeed; -.Ft int -.Fn tgetent "char *bp" "const char *name" -.Ft int -.Fn tgetnum "const char *id" -.Ft int -.Fn tgetflag "const char *id" -.Ft char * -.Fn tgetstr "const char *id" "char **area" -.Ft char * -.Fn tgoto "const char *cm" "int destcol" "int destline" -.Ft int -.Fn tputs "const char *cp" "int affcnt" "int (*outc)(int)" -.Ft char * -.Fn tparm "const char *cp" "..." -.Ft void -.Fn __set_ospeed "unsigned int speed" -.Sh DESCRIPTION -These functions extract and use capabilities from a terminal capability data -base, usually -.Pa /usr/share/misc/termcap , -the format of which is described in -.Xr termcap 5 . -These are low level routines; -see -.Xr curses 3 -for a higher level package. -.Pp -The -.Fn tgetent -function -extracts the entry for terminal -.Fa name -into the buffer at -.Fa bp . -The -.Fa bp -argument -should be a character buffer of size -1024 and must be retained through all subsequent calls to -.Fn tgetnum , -.Fn tgetflag , -and -.Fn tgetstr . -The -.Fn tgetent -function -returns \-1 if none of the -.Nm termcap -data base files could be opened, -0 if the terminal name given does not have an entry, -and 1 if all goes well. -It will look in the environment for a -.Ev TERMCAP -variable. -If found, and the value does not begin with a slash, -and the terminal type -.Fa name -is the same as the environment string -.Ev TERM , -the -.Ev TERMCAP -string is used instead of reading a -.Nm termcap -file. -If it does begin with a slash, the string is used as a path name -of the -.Nm termcap -file to search. -If -.Ev TERMCAP -does not begin with a slash and -.Fa name -is different from -.Ev TERM , -.Fn tgetent -searches the files -.Pa $HOME/.termcap -and -.Pa /usr/share/misc/termcap , -in that order, unless the environment variable -.Ev TERMPATH -exists, -in which case it specifies a list of file pathnames -(separated by spaces or colons) to be searched instead. -Whenever multiple files are searched and a -.Sy tc -field occurs in the requested entry, the entry it names must be found -in the same file or one of the succeeding files. -This can speed up entry into programs that call -.Fn tgetent , -as well as help debug new terminal descriptions -or make one for your terminal if you can't write the file -.Pa /usr/share/misc/termcap . -.Pp -The -.Fn tgetnum -function -gets the numeric value of capability -.Fa id , -returning \-1 if it is not given for the terminal. -The -.Fn tgetflag -function -returns 1 if the specified capability is present in -the terminal's entry, 0 if it is not. -The -.Fn tgetstr -function -returns the string value of the capability -.Fa id , -places it in the buffer at -.Fa area , -and advances the -.Fa area -pointer. -It decodes the abbreviations for this field described in -.Xr termcap 5 , -except for cursor addressing and padding information. -The -.Fn tgetstr -function -returns -.Dv NULL -if the capability was not found. -.Pp -The -.Fn tgoto -function -returns a cursor addressing string decoded from -.Fa cm -to go to column -.Fa destcol -in line -.Fa destline . -It uses the external variables -.Va UP -(from the -.Sy up -capability) -and -.Va BC -(if -.Sy bc -is given rather than -.Sy bs ) -if necessary to avoid placing -.Sy \en , -.Sy ^D -or -.Sy ^@ -in -the returned string. -(Programs which call -.Fn tgoto -should be sure to turn off the -.Dv XTABS -bit(s), -since -.Fn tgoto -may now output a tab. -Note that programs using termcap should in general turn off -.Dv XTABS -anyway since some terminals use control-I for other functions, -such as nondestructive space.) -If a -.Sy % -sequence is given which is not understood, then -.Fn tgoto -returns -.Pq Dv OOPS . -.Pp -The -.Fn tputs -function -decodes the leading padding information of the string -.Fa cp ; -.Fa affcnt -gives the number of lines affected by the operation, or 1 if this is -not applicable, -.Fa outc -is a routine which is called with each character in turn. -The external variable -.Va PC -should contain a pad character to be used (from the -.SY pc -capability) -if a null -.Pq Sy ^@ -is inappropriate. -The external variable -.Va ospeed -should contain the output speed of the terminal as encoded by -.Xr stty 3 . -The -.Fn __set_ospeed -function converts the speed in cps -.Fa speed -to the closest -.Xr stty 3 -encoded speed and stores the result in -.Va ospeed . -.Pp -The -.Fn tparm -function -instantiates the string -.Fa cp -with the given parameters. -A pointer is returned which points to -the result of -.Fa cp -with the parameters applied. -If a -.Sy % -sequence is given which is not understood, then -.Fn tparm -returns -.Pq Dv OOPS . -.Sh FILES -.Bl -tag -width /usr/share/misc/termcap -compact -.It Pa /usr/lib/libtermcap.a -.Fl l Ar ltermcap -library (also known as -.Fl l Ar ltermlib ) -.It Pa /usr/share/misc/termcap -standard terminal capability data base -.It Pa $HOME/.termcap -user's terminal capability data base -.El -.Sh SEE ALSO -.Xr ex 1 , -.Xr curses 3 , -.Xr termcap 5 -.Sh HISTORY -The -.Nm -functions appeared in -.Bx 4.0 . diff --git a/lib/libtermcap/termcap.c b/lib/libtermcap/termcap.c deleted file mode 100644 index da46e2182291..000000000000 --- a/lib/libtermcap/termcap.c +++ /dev/null @@ -1,309 +0,0 @@ -/* - * Copyright (c) 1980, 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. - * - * $FreeBSD$ - */ - -#ifndef lint -static char sccsid[] = "@(#)termcap.c 8.1 (Berkeley) 6/4/93"; -#endif /* not lint */ - -#include <stdio.h> -#include <ctype.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> -#include <termios.h> -#include <sys/param.h> -#include <signal.h> -#include <errno.h> -#include <sys/syscall.h> -#include "termcap.h" -#include "pathnames.h" - -#define PBUFSIZ MAXPATHLEN /* max length of filename path */ -#define PVECSIZ 32 /* max number of names in path */ -#define TBUFSIZ 1024 /* max length of tgetent buffer */ - -/* - * termcap - routines for dealing with the terminal capability data base - * - * BUG: Should use a "last" pointer in tbuf, so that searching - * for capabilities alphabetically would not be a n**2/2 - * process when large numbers of capabilities are given. - * Note: If we add a last pointer now we will screw up the - * tc capability. We really should compile termcap. - * - * Essentially all the work here is scanning and decoding escapes - * in string capabilities. We don't use stdio because the editor - * doesn't, and because living w/o it is not hard. - */ - -static char *tbuf; /* termcap buffer */ - -static int use_issetugid = 1; /* 0 = not present, 1 = try it, 2 = exists */ - -/* - * Get an entry for terminal name in buffer bp from the termcap file. - */ -int -tgetent(char *bp, const char *name) -{ - register char *p; - register char *cp; - char *dummy; - char **fname; - char *home; - int i; - char pathbuf[PBUFSIZ]; /* holds raw path of filenames */ - char *pathvec[PVECSIZ]; /* to point to names in pathbuf */ - char **pvec; /* holds usable tail of path vector */ - char *termpath; - struct termios tty; - - dummy = NULL; - fname = pathvec; - pvec = pathvec; - tbuf = bp; - p = pathbuf; - cp = getenv("TERMCAP"); - /* - * TERMCAP can have one of two things in it. It can be the - * name of a file to use instead of /etc/termcap. In this - * case it better start with a "/". Or it can be an entry to - * use so we don't have to read the file. In this case it - * has to already have the newlines crunched out. If TERMCAP - * does not hold a file name then a path of names is searched - * instead. The path is found in the TERMPATH variable, or - * becomes "$HOME/.termcap /etc/termcap" if no TERMPATH exists. - */ - if (!cp || *cp != '/') { /* no TERMCAP or it holds an entry */ - if ( (termpath = getenv("TERMPATH")) ) - strncpy(pathbuf, termpath, PBUFSIZ); - else { - if ( (home = getenv("HOME")) ) {/* set up default */ - strncpy(pathbuf, home, PBUFSIZ - 1); /* $HOME first */ - pathbuf[PBUFSIZ - 2] = '\0'; /* -2 because we add a slash */ - p += strlen(pathbuf); /* path, looking in */ - *p++ = '/'; - } /* if no $HOME look in current directory */ - strncpy(p, _PATH_DEF, PBUFSIZ - (p - pathbuf)); - } - } - else /* user-defined name in TERMCAP */ - strncpy(pathbuf, cp, PBUFSIZ); /* still can be tokenized */ - pathbuf[PBUFSIZ - 1] = '\0'; - -#ifdef SYS_issetugid - /* - * This stuff is to try and detect the presence of the issetugid() - * syscall without breaking dynamic linking during compiles.. Sigh. - */ -othersyscall: - if (use_issetugid) { - struct sigaction sa, osa; - int sigsys_installed = 0; - int unsafe; - - if (use_issetugid == 1) { - sigemptyset(&sa.sa_mask); - sa.sa_flags = 0; - sa.sa_handler = SIG_IGN; - if (sigaction(SIGSYS, &sa, &osa) >= 0) - sigsys_installed = 1; - } - errno = 0; - unsafe = syscall(SYS_issetugid); - if (sigsys_installed == 1) { - int oerrno = errno; - sigaction(SIGSYS, &osa, NULL); - errno = oerrno; - } - if (errno == ENOSYS || errno == EINVAL) { - use_issetugid = 0; - goto othersyscall; - } else if (sigsys_installed == 1) - sigsys_installed = 2; - if (unsafe) - strcpy(pathbuf, _PATH_DEF_SEC); - } else -#endif /* SYS_issetugid */ - /* issetugid() not in kernel or undefined - try second best */ - if (getuid() != geteuid() || getgid() != getegid()) - strcpy(pathbuf, _PATH_DEF_SEC); - - *fname++ = pathbuf; /* tokenize path into vector of names */ - while (*++p) - if (*p == ' ' || *p == ':') { - *p = '\0'; - while (*++p) - if (*p != ' ' && *p != ':') - break; - if (*p == '\0') - break; - *fname++ = p; - if (fname >= pathvec + PVECSIZ) { - fname--; - break; - } - } - *fname = (char *) 0; /* mark end of vector */ - if (cp && *cp && *cp != '/') - if (cgetset(cp) < 0) - return(-2); - - i = cgetent(&dummy, pathvec, (char *)name); - - if (i == 0) { - char *pd, *ps, *tok, *s, *tcs; - size_t len; - - pd = bp; - ps = dummy; - if ((tok = strchr(ps, ':')) == NULL) { - len = strlen(ps); - if (len >= TBUFSIZ) - i = -1; - else - strcpy(pd, ps); - goto done; - } - len = tok - ps + 1; - if (pd + len + 1 - bp >= TBUFSIZ) { - i = -1; - goto done; - } - memcpy(pd, ps, len); - ps += len; - pd += len; - *pd = '\0'; - tcs = pd - 1; - for (;;) { - while ((tok = strsep(&ps, ":")) != NULL && - (*tok == '\0' || *tok == '\\' || !isgraph(*tok))) - ; - if (tok == NULL) - break; - for (s = tcs; s != NULL && s[1] != '\0'; s = strchr(s, ':')) { - s++; - if (s[0] == tok[0] && s[1] == tok[1]) - goto skip_it; - } - len = strlen(tok); - if (pd + len + 1 - bp >= TBUFSIZ) { - i = -1; - break; - } - memcpy(pd, tok, len); - pd += len; - *pd++ = ':'; - *pd = '\0'; - skip_it: ; - } - } -done: - if ( i == 0 - && ( tcgetattr(STDERR_FILENO, &tty) != -1 - || tcgetattr(STDOUT_FILENO, &tty) != -1 - ) - ) - __set_ospeed(cfgetospeed(&tty)); - if (dummy) - free(dummy); - /* no tc reference loop return code in libterm XXX */ - if (i == -3) - return(-1); - return(i + 1); -} - -/* - * Return the (numeric) option id. - * Numeric options look like - * li#80 - * i.e. the option string is separated from the numeric value by - * a # character. If the option is not found we return -1. - * Note that we handle octal numbers beginning with 0. - */ -int -tgetnum(const char *id) -{ - long num; - - if (cgetnum(tbuf, (char *)id, &num) == 0) - return(num); - else - return(-1); -} - -/* - * Handle a flag option. - * Flag options are given "naked", i.e. followed by a : or the end - * of the buffer. Return 1 if we find the option, or 0 if it is - * not given. - */ -int -tgetflag(const char *id) -{ - return(cgetcap(tbuf, (char *)id, ':') != NULL); -} - -/* - * Get a string valued option. - * These are given as - * cl=^Z - * Much decoding is done on the strings, and the strings are - * placed in area, which is a ref parameter which is updated. - * No checking on area overflow. - */ -char * -tgetstr(const char *id, char **area) -{ - char ids[3]; - char *s; - int i; - - /* - * XXX - * This is for all the boneheaded programs that relied on tgetstr - * to look only at the first 2 characters of the string passed... - */ - *ids = *id; - ids[1] = id[1]; - ids[2] = '\0'; - - if ((i = cgetstr(tbuf, ids, &s)) < 0) - return NULL; - - strcpy(*area, s); - *area += i + 1; - return(s); -} diff --git a/lib/libtermcap/termcap.h b/lib/libtermcap/termcap.h deleted file mode 100644 index 350390d58cc4..000000000000 --- a/lib/libtermcap/termcap.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 1994,1995 by Andrey A. Chernov, Moscow, Russia. - * 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. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. - */ - -/* $FreeBSD$ */ - -#ifndef _TERMCAP_H_ -#define _TERMCAP_H_ - -#include <sys/cdefs.h> - -__BEGIN_DECLS - -extern char PC, *UP, *BC; -extern short ospeed; - -extern int tgetent __P((char *, const char *)); -extern int tgetflag __P((const char *)); -extern int tgetnum __P((const char *)); -extern char *tgetstr __P((const char *, char **)); - -extern int tputs __P((const char *, int, int (*)(int))); - -extern char *tgoto __P((const char *, int, int)); -extern char *tparm __P((const char *, ...)); - -extern void __set_ospeed __P((unsigned int speed)); - -__END_DECLS - -#endif /* _TERMCAP_H_ */ diff --git a/lib/libtermcap/tgoto.c b/lib/libtermcap/tgoto.c deleted file mode 100644 index 4088fa5f7ff3..000000000000 --- a/lib/libtermcap/tgoto.c +++ /dev/null @@ -1,227 +0,0 @@ -/* - * Copyright (c) 1980, 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 sccsid[] = "@(#)tgoto.c 8.1 (Berkeley) 6/4/93"; -#endif /* not lint */ - -#include <string.h> -#include "termcap.h" - -#define CTRL(c) ((c) & 037) - -#define MAXRETURNSIZE 64 - -char *UP; -char *BC; - -/* - * Routine to perform cursor addressing. - * CM is a string containing printf type escapes to allow - * cursor addressing. We start out ready to print the destination - * line, and switch each time we print row or column. - * The following escapes are defined for substituting row/column: - * - * %d as in printf - * %2 like %2d - * %3 like %3d - * %. gives %c hacking special case characters - * %+x like %c but adding x first - * - * The codes below affect the state but don't use up a value. - * - * %>xy if value > x add y - * %r reverses row/column - * %i increments row/column (for one origin indexing) - * %% gives % - * %B BCD (2 decimal digits encoded in one byte) - * %D Delta Data (backwards bcd) - * - * all other characters are ``self-inserting''. - */ -char * -tgoto(const char *CM, int destcol, int destline) -{ - static char result[MAXRETURNSIZE]; - static char added[10]; - const char *cp = CM; - register char *dp = result; - register int c; - int oncol = 0; - register int which = destline; - - if (cp == 0) { -toohard: - /* - * ``We don't do that under BOZO's big top'' - */ - return ("OOPS"); - } - added[0] = 0; - while ( (c = *cp++) ) { - if (c != '%') { - if (dp >= &result[MAXRETURNSIZE]) - return ("OVERFLOW"); - *dp++ = c; - continue; - } - switch (c = *cp++) { - -#ifdef CM_N - case 'n': - destcol ^= 0140; - destline ^= 0140; - goto setwhich; -#endif - - case 'd': - if (which < 10) - goto one; - if (which < 100) - goto two; - /* fall into... */ - - case '3': - if (dp >= &result[MAXRETURNSIZE]) - return ("OVERFLOW"); - *dp++ = (which / 100) | '0'; - which %= 100; - /* fall into... */ - - case '2': -two: - if (dp >= &result[MAXRETURNSIZE]) - return ("OVERFLOW"); - *dp++ = which / 10 | '0'; -one: - if (dp >= &result[MAXRETURNSIZE]) - return ("OVERFLOW"); - *dp++ = which % 10 | '0'; -swap: - oncol = 1 - oncol; -setwhich: - which = oncol ? destcol : destline; - continue; - -#ifdef CM_GT - case '>': - if (which > *cp++) - which += *cp++; - else - cp++; - continue; -#endif - - case '+': - which += *cp++; - /* fall into... */ - - case '.': -casedot: - /* - * This code is worth scratching your head at for a - * while. The idea is that various weird things can - * happen to nulls, EOT's, tabs, and newlines by the - * tty driver, arpanet, and so on, so we don't send - * them if we can help it. - * - * Tab is taken out to get Ann Arbors to work, otherwise - * when they go to column 9 we increment which is wrong - * because bcd isn't continuous. We should take out - * the rest too, or run the thing through more than - * once until it doesn't make any of these, but that - * would make termlib (and hence pdp-11 ex) bigger, - * and also somewhat slower. This requires all - * programs which use termlib to stty tabs so they - * don't get expanded. They should do this anyway - * because some terminals use ^I for other things, - * like nondestructive space. - */ - if (which == 0 || which == CTRL('d') || /* which == '\t' || */ which == '\n') { - if (oncol || UP) /* Assumption: backspace works */ - /* - * Loop needed because newline happens - * to be the successor of tab. - */ - do { - const char *extra; - - extra = oncol ? (BC ? BC : "\b") : UP; - if (strlen(added) + strlen(extra) >= 10) - return ("OVERFLOW"); - strcat(added, extra); - which++; - } while (which == '\n'); - } - if (dp >= &result[MAXRETURNSIZE]) - return ("OVERFLOW"); - *dp++ = which; - goto swap; - - case 'r': - oncol = 1; - goto setwhich; - - case 'i': - destcol++; - destline++; - which++; - continue; - - case '%': - if (dp >= &result[MAXRETURNSIZE]) - return ("OVERFLOW"); - *dp++ = c; - continue; - -#ifdef CM_B - case 'B': - which = (which/10 << 4) + which%10; - continue; -#endif - -#ifdef CM_D - case 'D': - which = which - 2 * (which%16); - continue; -#endif - - default: - goto toohard; - } - } - if (strlen(added) >= &result[MAXRETURNSIZE] - dp) - return ("OVERFLOW"); - strcpy(dp, added); - return (result); -} diff --git a/lib/libtermcap/tospeed.c b/lib/libtermcap/tospeed.c deleted file mode 100644 index dd2026ad3ecb..000000000000 --- a/lib/libtermcap/tospeed.c +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 1995 by Andrey A. Chernov, Moscow, Russia. - * 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. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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 <termios.h> -#include "termcap.h" - -static struct stable { - speed_t speed; - short code; -} table[] = { - {B115200,17}, - {B57600, 16}, - {B38400, 15}, - {B19200, 14}, - {B9600, 13}, - {B4800, 12}, - {B2400, 11}, - {B1800, 10}, - {B1200, 9}, - {B600, 8}, - {B300, 7}, - {B200, 6}, - {B150, 5}, - {B134, 4}, - {B110, 3}, - {B75, 2}, - {B50, 1}, - {B0, 0}, - {-1, -1} -}; - -void __set_ospeed(speed_t speed) -{ - struct stable *stable; - - if (speed == B0) { - ospeed = 0; - return; - } - for (stable = table; stable->speed > B0; stable++) { - /* nearest one, rounded down */ - if (stable->speed <= speed) { - ospeed = stable->code; - return; - } - } - ospeed = 1; /* 50, min and not hangup */ -} - diff --git a/lib/libtermcap/tparm.c b/lib/libtermcap/tparm.c deleted file mode 100644 index 6a537ce4e90a..000000000000 --- a/lib/libtermcap/tparm.c +++ /dev/null @@ -1,753 +0,0 @@ -/* - * tparm.c - * - * By Ross Ridge - * Public Domain - * 92/02/01 07:30:36 - * - */ - -#include <ctype.h> -#include <stdarg.h> -#include <stdio.h> -#include <string.h> -#include "termcap.h" - -#ifdef USE_SCCS_IDS -static const char SCCSid[] = "@(#) mytinfo tparm.c 3.2 92/02/01 public domain, By Ross Ridge"; -#endif - -#ifndef MAX_PUSHED -#define MAX_PUSHED 32 -#endif - -#define ARG 1 -#define NUM 2 - -#define INTEGER 1 -#define STRING 2 - -#define MAX_LINE 640 - -typedef void* anyptr; - -typedef struct stack_str { - int type; - int argnum; - int value; -} stack; - -static stack S[MAX_PUSHED]; -static stack vars['z'-'a'+1]; -static int pos = 0; - -static struct arg_str { - int type; - int integer; - char *string; -} arg_list[10]; - -static int argcnt; - -static va_list tparm_args; - -static int -pusharg(arg) -int arg; { - if (pos == MAX_PUSHED) - return 1; - S[pos].type = ARG; - S[pos++].argnum = arg; - return 0; -} - -static int -pushnum(num) -int num; { - if (pos == MAX_PUSHED) - return 1; - S[pos].type = NUM; - S[pos++].value = num; - return 0; -} - -/* VARARGS2 */ -static int -getarg(argnum, type, p) -int argnum, type; -anyptr p; { - while (argcnt < argnum) { - arg_list[argcnt].type = INTEGER; - arg_list[argcnt++].integer = (int) va_arg(tparm_args, int); - } - if (argcnt > argnum) { - if (arg_list[argnum].type != type) - return 1; - else if (type == STRING) - *(char **)p = arg_list[argnum].string; - else - *(int *)p = arg_list[argnum].integer; - } else { - arg_list[argcnt].type = type; - if (type == STRING) - *(char **)p = arg_list[argcnt++].string - = (char *) va_arg(tparm_args, char *); - else - *(int *)p = arg_list[argcnt++].integer = (int) va_arg(tparm_args, int); - } - return 0; -} - - -static int -popstring(str) -char **str; { - if (pos-- == 0) - return 1; - if (S[pos].type != ARG) - return 1; - return(getarg(S[pos].argnum, STRING, (anyptr) str)); -} - -static int -popnum(num) -int *num; { - if (pos-- == 0) - return 1; - switch (S[pos].type) { - case ARG: - return (getarg(S[pos].argnum, INTEGER, (anyptr) num)); - case NUM: - *num = S[pos].value; - return 0; - } - return 1; -} - -static int -cvtchar(sp, c) -register char *sp, *c; { - switch(*sp) { - case '\\': - switch(*++sp) { - case '\'': - case '$': - case '\\': - case '%': - *c = *sp; - return 2; - case '\0': - *c = '\\'; - return 1; - case '0': - if (sp[1] == '0' && sp[2] == '0') { - *c = '\0'; - return 4; - } - *c = '\200'; /* '\0' ???? */ - return 2; - default: - *c = *sp; - return 2; - } - default: - *c = *sp; - return 1; - } -} - -static int termcap; - -/* sigh... this has got to be the ugliest code I've ever written. - Trying to handle everything has its cost, I guess. - - It actually isn't to hard to figure out if a given % code is supposed - to be interpeted with its termcap or terminfo meaning since almost - all terminfo codes are invalid unless something has been pushed on - the stack and termcap strings will never push things on the stack - (%p isn't used by termcap). So where we have a choice we make the - decision by wether or not somthing has been pushed on the stack. - The static variable termcap keeps track of this; it starts out set - to 1 and is incremented as each argument processed by a termcap % code, - however if something is pushed on the stack it's set to 0 and the - rest of the % codes are interpeted as terminfo % codes. Another way - of putting it is that if termcap equals one we haven't decided either - way yet, if it equals zero we're looking for terminfo codes, and if - its greater than 1 we're looking for termcap codes. - - Terminfo % codes: - - %% output a '%' - %[[:][-+# ][width][.precision]][doxXs] - output pop according to the printf format - %c output pop as a char - %'c' push character constant c. - %{n} push decimal constant n. - %p[1-9] push paramter [1-9] - %g[a-z] push variable [a-z] - %P[a-z] put pop in variable [a-z] - %l push the length of pop (a string) - %+ add pop to pop and push the result - %- subtract pop from pop and push the result - %* multiply pop and pop and push the result - %& bitwise and pop and pop and push the result - %| bitwise or pop and pop and push the result - %^ bitwise xor pop and pop and push the result - %~ push the bitwise not of pop - %= compare if pop and pop are equal and push the result - %> compare if pop is less than pop and push the result - %< compare if pop is greater than pop and push the result - %A logical and pop and pop and push the result - %O logical or pop and pop and push the result - %! push the logical not of pop - %? condition %t if_true [%e if_false] %; - if condtion evaulates as true then evaluate if_true, - else evaluate if_false. elseif's can be done: -%? cond %t true [%e cond2 %t true2] ... [%e condN %t trueN] [%e false] %; - %i add one to parameters 1 and 2. (ANSI) - - Termcap Codes: - - %% output a % - %. output parameter as a character - %d output parameter as a decimal number - %2 output parameter in printf format %02d - %3 output parameter in printf format %03d - %+x add the character x to parameter and output it as a character -(UW) %-x subtract parameter FROM the character x and output it as a char -(UW) %ax add the character x to parameter -(GNU) %a[+*-/=][cp]x - GNU arithmetic. -(UW) %sx subtract parameter FROM the character x - %>xy if parameter > character x then add character y to parameter - %B convert to BCD (parameter = (parameter/10)*16 + parameter%16) - %D Delta Data encode (parameter = parameter - 2*(paramter%16)) - %i increment the first two parameters by one - %n xor the first two parameters by 0140 -(GNU) %m xor the first two parameters by 0177 - %r swap the first two parameters -(GNU) %b backup to previous parameter -(GNU) %f skip this parameter - - Note the two definitions of %a, the GNU defintion is used if the characters - after the 'a' are valid, otherwise the UW definition is used. - - (GNU) used by GNU Emacs termcap libraries - (UW) used by the University of Waterloo (MFCF) termcap libraries - -*/ - -char *tparm(const char *str, ...) { - static char OOPS[] = "OOPS"; - static char buf[MAX_LINE]; - register const char *sp; - register char *dp; - register char *fmt; - char conv_char; - char scan_for; - int scan_depth = 0, if_depth; - static int i, j; - static char *s, c; - char fmt_buf[MAX_LINE]; - char sbuf[MAX_LINE]; - - va_start(tparm_args, str); - - sp = str; - dp = buf; - scan_for = 0; - if_depth = 0; - argcnt = 0; - pos = 0; - termcap = 1; - while(*sp != '\0') { - switch(*sp) { - case '\\': - if (scan_for) { - if (*++sp != '\0') - sp++; - break; - } - *dp++ = *sp++; - if (*sp != '\0') - *dp++ = *sp++; - break; - case '%': - sp++; - if (scan_for) { - if (*sp == scan_for && if_depth == scan_depth) { - if (scan_for == ';') - if_depth--; - scan_for = 0; - } else if (*sp == '?') - if_depth++; - else if (*sp == ';') { - if (if_depth == 0) - return OOPS; - else - if_depth--; - } - sp++; - break; - } - fmt = NULL; - switch(*sp) { - case '%': - *dp++ = *sp++; - break; - case '+': - if (!termcap) { - if (popnum(&j) || popnum(&i)) - return OOPS; - i += j; - if (pushnum(i)) - return OOPS; - sp++; - break; - } - ;/* FALLTHROUGH */ - case 'C': - if (*sp == 'C') { - if (getarg(termcap - 1, INTEGER, &i)) - return OOPS; - if (i >= 96) { - i /= 96; - if (i == '$') - *dp++ = '\\'; - *dp++ = i; - } - } - fmt = "%c"; - /* FALLTHROUGH */ - case 'a': - if (!termcap) - return OOPS; - if (getarg(termcap - 1, INTEGER, (anyptr) &i)) - return OOPS; - if (*++sp == '\0') - return OOPS; - if ((sp[1] == 'p' || sp[1] == 'c') - && sp[2] != '\0' && fmt == NULL) { - /* GNU aritmitic parameter, what they - realy need is terminfo. */ - int val, lc; - if (sp[1] == 'p' - && getarg(termcap - 1 + sp[2] - '@', - INTEGER, (anyptr) &val)) - return OOPS; - if (sp[1] == 'c') { - lc = cvtchar(sp + 2, &c) + 2; - /* Mask out 8th bit so \200 can be - used for \0 as per GNU doc's */ - val = c & 0177; - } else - lc = 2; - switch(sp[0]) { - case '=': - break; - case '+': - val = i + val; - break; - case '-': - val = i - val; - break; - case '*': - val = i * val; - break; - case '/': - val = i / val; - break; - default: - /* Not really GNU's %a after all... */ - lc = cvtchar(sp, &c); - val = c + i; - break; - } - arg_list[termcap - 1].integer = val; - sp += lc; - break; - } - sp += cvtchar(sp, &c); - arg_list[termcap - 1].integer = c + i; - if (fmt == NULL) - break; - sp--; - /* FALLTHROUGH */ - case '-': - if (!termcap) { - if (popnum(&j) || popnum(&i)) - return OOPS; - i -= j; - if (pushnum(i)) - return OOPS; - sp++; - break; - } - fmt = "%c"; - /* FALLTHROUGH */ - case 's': - if (termcap && (fmt == NULL || *sp == '-')) { - if (getarg(termcap - 1, INTEGER, &i)) - return OOPS; - if (*++sp == '\0') - return OOPS; - sp += cvtchar(sp, &c); - arg_list[termcap - 1].integer = c - i; - if (fmt == NULL) - break; - sp--; - } - if (!termcap) - return OOPS; - ;/* FALLTHROUGH */ - case '.': - if (termcap && fmt == NULL) - fmt = "%c"; - ;/* FALLTHROUGH */ - case 'd': - if (termcap && fmt == NULL) - fmt = "%d"; - ;/* FALLTHROUGH */ - case '2': - if (termcap && fmt == NULL) - fmt = "%02d"; - ;/* FALLTHROUGH */ - case '3': - if (termcap && fmt == NULL) - fmt = "%03d"; - ;/* FALLTHROUGH */ - case ':': case ' ': case '#': case 'u': - case 'x': case 'X': case 'o': case 'c': - case '0': case '1': case '4': case '5': - case '6': case '7': case '8': case '9': - if (fmt == NULL) { - if (termcap) - return OOPS; - if (*sp == ':') - sp++; - fmt = fmt_buf; - *fmt++ = '%'; - while(*sp != 's' && *sp != 'x' && *sp != 'X' && *sp != 'd' && *sp != 'o' && *sp != 'c' && *sp != 'u') { - if (*sp == '\0') - return OOPS; - *fmt++ = *sp++; - } - *fmt++ = *sp; - *fmt = '\0'; - fmt = fmt_buf; - } - conv_char = fmt[strlen(fmt) - 1]; - if (conv_char == 's') { - if (popstring(&s)) - return OOPS; - sprintf(sbuf, fmt, s); - } else { - if (termcap) { - if (getarg(termcap++ - 1, - INTEGER, &i)) - return OOPS; - } else - if (popnum(&i)) - return OOPS; - if (i == 0 && conv_char == 'c') - strcpy(sbuf, "\000"); - else - sprintf(sbuf, fmt, i); - } - sp++; - fmt = sbuf; - while(*fmt != '\0') { - if (*fmt == '$') - *dp++ = '\\'; - *dp++ = *fmt++; - } - break; - case 'r': - if (!termcap || getarg(1, INTEGER, &i)) - return OOPS; - arg_list[1].integer = arg_list[0].integer; - arg_list[0].integer = i; - sp++; - break; - case 'i': - if (getarg(1, INTEGER, &i) - || arg_list[0].type != INTEGER) - return OOPS; - arg_list[1].integer++; - arg_list[0].integer++; - sp++; - break; - case 'n': - if (!termcap || getarg(1, INTEGER, &i)) - return OOPS; - arg_list[0].integer ^= 0140; - arg_list[1].integer ^= 0140; - sp++; - break; - case '>': - if (!termcap) { - if (popnum(&j) || popnum(&i)) - return OOPS; - i = (i > j); - if (pushnum(i)) - return OOPS; - sp++; - break; - } - if (getarg(termcap-1, INTEGER, &i)) - return OOPS; - sp += cvtchar(sp, &c); - if (i > c) { - sp += cvtchar(sp, &c); - arg_list[termcap-1].integer += c; - } else - sp += cvtchar(sp, &c); - sp++; - break; - case 'B': - if (!termcap || getarg(termcap-1, INTEGER, &i)) - return OOPS; - arg_list[termcap-1].integer = 16*(i/10)+i%10; - sp++; - break; - case 'D': - if (!termcap || getarg(termcap-1, INTEGER, &i)) - return OOPS; - arg_list[termcap-1].integer = i - 2 * (i % 16); - sp++; - break; - case 'p': - if (termcap > 1) - return OOPS; - if (*++sp == '\0') - return OOPS; - if (*sp == '0') - i = 9; - else - i = *sp - '1'; - if (i < 0 || i > 9) - return OOPS; - if (pusharg(i)) - return OOPS; - termcap = 0; - sp++; - break; - case 'P': - if (termcap || *++sp == '\0') - return OOPS; - i = *sp++ - 'a'; - if (i < 0 || i > 25) - return OOPS; - if (pos-- == 0) - return OOPS; - switch(vars[i].type = S[pos].type) { - case ARG: - vars[i].argnum = S[pos].argnum; - break; - case NUM: - vars[i].value = S[pos].value; - break; - } - break; - case 'g': - if (termcap || *++sp == '\0') - return OOPS; - i = *sp++ - 'a'; - if (i < 0 || i > 25) - return OOPS; - switch(vars[i].type) { - case ARG: - if (pusharg(vars[i].argnum)) - return OOPS; - break; - case NUM: - if (pushnum(vars[i].value)) - return OOPS; - break; - } - break; - case '\'': - if (termcap > 1) - return OOPS; - if (*++sp == '\0') - return OOPS; - sp += cvtchar(sp, &c); - if (pushnum(c) || *sp++ != '\'') - return OOPS; - termcap = 0; - break; - case '{': - if (termcap > 1) - return OOPS; - i = 0; - sp++; - while(isdigit(*sp)) - i = 10 * i + *sp++ - '0'; - if (*sp++ != '}' || pushnum(i)) - return OOPS; - termcap = 0; - break; - case 'l': - if (termcap || popstring(&s)) - return OOPS; - i = strlen(s); - if (pushnum(i)) - return OOPS; - sp++; - break; - case '*': - if (termcap || popnum(&j) || popnum(&i)) - return OOPS; - i *= j; - if (pushnum(i)) - return OOPS; - sp++; - break; - case '/': - if (termcap || popnum(&j) || popnum(&i)) - return OOPS; - i /= j; - if (pushnum(i)) - return OOPS; - sp++; - break; - case 'm': - if (termcap) { - if (getarg(1, INTEGER, &i)) - return OOPS; - arg_list[0].integer ^= 0177; - arg_list[1].integer ^= 0177; - sp++; - break; - } - if (popnum(&j) || popnum(&i)) - return OOPS; - i %= j; - if (pushnum(i)) - return OOPS; - sp++; - break; - case '&': - if (popnum(&j) || popnum(&i)) - return OOPS; - i &= j; - if (pushnum(i)) - return OOPS; - sp++; - break; - case '|': - if (popnum(&j) || popnum(&i)) - return OOPS; - i |= j; - if (pushnum(i)) - return OOPS; - sp++; - break; - case '^': - if (popnum(&j) || popnum(&i)) - return OOPS; - i ^= j; - if (pushnum(i)) - return OOPS; - sp++; - break; - case '=': - if (popnum(&j) || popnum(&i)) - return OOPS; - i = (i == j); - if (pushnum(i)) - return OOPS; - sp++; - break; - case '<': - if (popnum(&j) || popnum(&i)) - return OOPS; - i = (i < j); - if (pushnum(i)) - return OOPS; - sp++; - break; - case 'A': - if (popnum(&j) || popnum(&i)) - return OOPS; - i = (i && j); - if (pushnum(i)) - return OOPS; - sp++; - break; - case 'O': - if (popnum(&j) || popnum(&i)) - return OOPS; - i = (i || j); - if (pushnum(i)) - return OOPS; - sp++; - break; - case '!': - if (popnum(&i)) - return OOPS; - i = !i; - if (pushnum(i)) - return OOPS; - sp++; - break; - case '~': - if (popnum(&i)) - return OOPS; - i = ~i; - if (pushnum(i)) - return OOPS; - sp++; - break; - case '?': - if (termcap > 1) - return OOPS; - termcap = 0; - if_depth++; - sp++; - break; - case 't': - if (popnum(&i) || if_depth == 0) - return OOPS; - if (!i) { - scan_for = 'e'; - scan_depth = if_depth; - } - sp++; - break; - case 'e': - if (if_depth == 0) - return OOPS; - scan_for = ';'; - scan_depth = if_depth; - sp++; - break; - case ';': - if (if_depth-- == 0) - return OOPS; - sp++; - break; - case 'b': - if (--termcap < 1) - return OOPS; - sp++; - break; - case 'f': - if (!termcap++) - return OOPS; - sp++; - break; - } - break; - default: - if (scan_for) - sp++; - else - *dp++ = *sp++; - break; - } - } - va_end(tparm_args); - *dp = '\0'; - return buf; -} diff --git a/lib/libtermcap/tputs.c b/lib/libtermcap/tputs.c deleted file mode 100644 index 0e8b147b6635..000000000000 --- a/lib/libtermcap/tputs.c +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (c) 1980, 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 sccsid[] = "@(#)tputs.c 8.1 (Berkeley) 6/4/93"; -#endif /* not lint */ - -#include <ctype.h> -#include "termcap.h" - -/* - * The following array gives the number of tens of milliseconds per - * character for each speed as returned by gtty. Thus since 300 - * baud returns a 7, there are 33.3 milliseconds per char at 300 baud. - */ -static -short tmspc10[] = { - 0, 2000, 1333, 909, 743, 666, 500, 333, 166, 83, 55, 41, 20, 10, 5, - 3, 2, 1 -}; - -short ospeed; -char PC; - -/* - * Put the character string cp out, with padding. - * The number of affected lines is affcnt, and the routine - * used to output one character is outc. - */ -int -tputs(const char *cp, int affcnt, int (*outc)(int)) -{ - register int i = 0; - register int mspc10; - - if (cp == 0) - return 0; - - /* - * Convert the number representing the delay. - */ - if (isdigit(*cp)) { - do - i = i * 10 + *cp++ - '0'; - while (isdigit(*cp)); - } - i *= 10; - if (*cp == '.') { - cp++; - if (isdigit(*cp)) - i += *cp - '0'; - /* - * Only one digit to the right of the decimal point. - */ - while (isdigit(*cp)) - cp++; - } - - /* - * If the delay is followed by a `*', then - * multiply by the affected lines count. - */ - if (*cp == '*') - cp++, i *= affcnt; - - /* - * The guts of the string. - */ - while (*cp) - (*outc)(*cp++); - - /* - * If no delay needed, or output speed is - * not comprehensible, then don't try to delay. - */ - if (i == 0) - return 0; - if (ospeed <= 0 || ospeed >= (sizeof tmspc10 / sizeof tmspc10[0])) - return 0; - - /* - * Round up by a half a character frame, - * and then do the delay. - * Too bad there are no user program accessible programmed delays. - * Transmitting pad characters slows many - * terminals down and also loads the system. - */ - mspc10 = tmspc10[ospeed]; - i += mspc10 / 2; - for (i /= mspc10; i > 0; i--) - (*outc)(PC); - return 0; -}