diff options
Diffstat (limited to 'usr.bin/tset/tset.c')
-rw-r--r-- | usr.bin/tset/tset.c | 303 |
1 files changed, 0 insertions, 303 deletions
diff --git a/usr.bin/tset/tset.c b/usr.bin/tset/tset.c deleted file mode 100644 index 7198e96..0000000 --- a/usr.bin/tset/tset.c +++ /dev/null @@ -1,303 +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. - */ - -#ifndef lint -static char copyright[] = -"@(#) Copyright (c) 1980, 1991, 1993\n\ - The Regents of the University of California. All rights reserved.\n"; -#endif /* not lint */ - -#ifndef lint -static char sccsid[] = "@(#)tset.c 8.1 (Berkeley) 6/9/93"; -#endif /* not lint */ - -#include <sys/types.h> -#include <sys/ioctl.h> -#include <termios.h> -#include <errno.h> -#include <unistd.h> -#include <stdlib.h> -#include <stdio.h> -#include <ctype.h> -#include <string.h> -#include "extern.h" - -void obsolete __P((char *[])); -void report __P((char *, int, u_int)); -void usage __P((void)); - -struct termios mode, oldmode; - -int erasechar; /* new erase character */ -int intrchar; /* new interrupt character */ -int isreset; /* invoked as reset */ -int killchar; /* new kill character */ -int lines, columns; /* window size */ - -int -main(argc, argv) - int argc; - char *argv[]; -{ -#ifdef TIOCGWINSZ - struct winsize win; -#endif - int ch, noinit, noset, quiet, Sflag, sflag, showterm, usingupper; - char savech, *p, *t, *tcapbuf, *ttype; - - if (tcgetattr(STDERR_FILENO, &mode) < 0) - err("standard error: %s", strerror(errno)); - - oldmode = mode; - ospeed = cfgetospeed(&mode); - - if (p = strrchr(*argv, '/')) - ++p; - else - p = *argv; - usingupper = isupper(*p); - if (!strcasecmp(p, "reset")) { - isreset = 1; - reset_mode(); - } - - obsolete(argv); - noinit = noset = quiet = Sflag = sflag = showterm = 0; - while ((ch = getopt(argc, argv, "-a:d:e:Ii:k:m:np:QSrs")) != EOF) { - switch (ch) { - case '-': /* display term only */ - noset = 1; - break; - case 'a': /* OBSOLETE: map identifier to type */ - add_mapping("arpanet", optarg); - break; - case 'd': /* OBSOLETE: map identifier to type */ - add_mapping("dialup", optarg); - break; - case 'e': /* erase character */ - erasechar = optarg[0] == '^' && optarg[1] != '\0' ? - optarg[1] == '?' ? '\177' : CTRL(optarg[1]) : - optarg[0]; - break; - case 'I': /* no initialization strings */ - noinit = 1; - break; - case 'i': /* interrupt character */ - intrchar = optarg[0] == '^' && optarg[1] != '\0' ? - optarg[1] == '?' ? '\177' : CTRL(optarg[1]) : - optarg[0]; - break; - case 'k': /* kill character */ - killchar = optarg[0] == '^' && optarg[1] != '\0' ? - optarg[1] == '?' ? '\177' : CTRL(optarg[1]) : - optarg[0]; - break; - case 'm': /* map identifier to type */ - add_mapping(NULL, optarg); - break; - case 'n': /* OBSOLETE: set new tty driver */ - break; - case 'p': /* OBSOLETE: map identifier to type */ - add_mapping("plugboard", optarg); - break; - case 'Q': /* don't output control key settings */ - quiet = 1; - break; - case 'S': /* output TERM/TERMCAP strings */ - Sflag = 1; - break; - case 'r': /* display term on stderr */ - showterm = 1; - break; - case 's': /* output TERM/TERMCAP strings */ - sflag = 1; - break; - case '?': - default: - usage(); - } - } - argc -= optind; - argv += optind; - - if (argc > 1) - usage(); - - ttype = get_termcap_entry(*argv, &tcapbuf); - - if (!noset) { - columns = tgetnum("co"); - lines = tgetnum("li"); - -#ifdef TIOCGWINSZ - /* Set window size */ - (void)ioctl(STDERR_FILENO, TIOCGWINSZ, &win); - if (win.ws_row == 0 && win.ws_col == 0 && - lines > 0 && columns > 0) { - win.ws_row = lines; - win.ws_col = columns; - (void)ioctl(STDERR_FILENO, TIOCSWINSZ, &win); - } -#endif - set_control_chars(); - set_conversions(usingupper); - - if (!noinit) - set_init(); - - /* Set the modes if they've changed. */ - if (memcmp(&mode, &oldmode, sizeof(mode))) - tcsetattr(STDERR_FILENO, TCSADRAIN, &mode); - } - - /* Get the terminal name from the entry. */ - p = tcapbuf; - if (p != NULL && *p != ':') { - t = p; - if (p = strpbrk(p, "|:")) { - savech = *p; - *p = '\0'; - if ((ttype = strdup(t)) == NULL) - err("%s", strerror(errno)); - *p = savech; - } - } - - if (noset) - (void)printf("%s\n", ttype); - else { - if (showterm) - (void)fprintf(stderr, "Terminal type is %s.\n", ttype); - /* - * If erase, kill and interrupt characters could have been - * modified and not -Q, display the changes. - */ - if (!quiet) { - report("Erase", VERASE, CERASE); - report("Kill", VKILL, CKILL); - report("Interrupt", VINTR, CINTR); - } - } - - if (Sflag) { - (void)printf("%s ", ttype); - wrtermcap(tcapbuf); - } - - if (sflag) { - /* - * Figure out what shell we're using. A hack, we look for an - * environmental variable SHELL ending in "csh". - */ - if ((p = getenv("SHELL")) && - !strcmp(p + strlen(p) - 3, "csh")) { - p = "set noglob;\nsetenv TERM %s;\nsetenv TERMCAP '"; - t = "';\nunset noglob;\n"; - } else { - p = "TERM=%s;\nTERMCAP='"; - t = "';\nexport TERMCAP TERM;\n"; - } - (void)printf(p, ttype); - wrtermcap(tcapbuf); - (void)printf(t); - } - - exit(0); -} - -/* - * Tell the user if a control key has been changed from the default value. - */ -void -report(name, which, def) - char *name; - int which; - u_int def; -{ - u_int old, new; - char *bp, buf[1024]; - - new = mode.c_cc[which]; - old = oldmode.c_cc[which]; - - if (old == new && old == def) - return; - - (void)fprintf(stderr, "%s %s ", name, old == new ? "is" : "set to"); - - bp = buf; - if (tgetstr("kb", &bp) && new == buf[0] && buf[1] == '\0') - (void)fprintf(stderr, "backspace.\n"); - else if (new == 0177) - (void)fprintf(stderr, "delete.\n"); - else if (new < 040) { - new ^= 0100; - (void)fprintf(stderr, "control-%c (^%c).\n", new, new); - } else - (void)fprintf(stderr, "%c.\n", new); -} - -/* - * Convert the obsolete argument form into something that getopt can handle. - * This means that -e, -i and -k get default arguments supplied for them. - */ -void -obsolete(argv) - char *argv[]; -{ - for (; *argv; ++argv) { - if (argv[0][0] != '-' || argv[1] && argv[1][0] != '-' || - argv[0][1] != 'e' && argv[0][1] != 'i' && - argv[0][1] != 'k' || argv[0][2] != '\0') - continue; - switch(argv[0][1]) { - case 'e': - argv[0] = "-e^H"; - break; - case 'i': - argv[0] = "-i^C"; - break; - case 'k': - argv[0] = "-k^U"; - break; - } - } -} - -void -usage() -{ - (void)fprintf(stderr, -"usage: tset [-IQrSs] [-] [-e ch] [-i ch] [-k ch] [-m mapping] [terminal]\n"); - exit(1); -} |