diff options
Diffstat (limited to 'contrib/ncurses/progs/tset.c')
-rw-r--r-- | contrib/ncurses/progs/tset.c | 90 |
1 files changed, 58 insertions, 32 deletions
diff --git a/contrib/ncurses/progs/tset.c b/contrib/ncurses/progs/tset.c index 3d60912..6a4d2d61 100644 --- a/contrib/ncurses/progs/tset.c +++ b/contrib/ncurses/progs/tset.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. * + * Copyright (c) 1998-2007,2008 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -89,9 +89,12 @@ char *ttyname(int fd); #endif -/* this is just to stifle a missing-prototype warning */ -#ifdef linux -# include <sys/ioctl.h> +#if HAVE_SIZECHANGE +# if !defined(sun) || !TERMIOS +# if HAVE_SYS_IOCTL_H +# include <sys/ioctl.h> +# endif +# endif #endif #if NEED_PTEM_H @@ -104,7 +107,27 @@ char *ttyname(int fd); #include <dump_entry.h> #include <transform.h> -MODULE_ID("$Id: tset.c,v 1.70 2007/10/13 22:22:04 tom Exp $") +MODULE_ID("$Id: tset.c,v 1.76 2008/10/11 19:26:19 tom Exp $") + +/* + * SCO defines TIOCGSIZE and the corresponding struct. Other systems (SunOS, + * Solaris, IRIX) define TIOCGWINSZ and struct winsize. + */ +#ifdef TIOCGSIZE +# define IOCTL_GET_WINSIZE TIOCGSIZE +# define IOCTL_SET_WINSIZE TIOCSSIZE +# define STRUCT_WINSIZE struct ttysize +# define WINSIZE_ROWS(n) n.ts_lines +# define WINSIZE_COLS(n) n.ts_cols +#else +# ifdef TIOCGWINSZ +# define IOCTL_GET_WINSIZE TIOCGWINSZ +# define IOCTL_SET_WINSIZE TIOCSWINSZ +# define STRUCT_WINSIZE struct winsize +# define WINSIZE_ROWS(n) n.ws_row +# define WINSIZE_COLS(n) n.ws_col +# endif +#endif extern char **environ; @@ -168,7 +191,7 @@ failed(const char *msg) char temp[BUFSIZ]; unsigned len = strlen(_nc_progname) + 2; - if (len < sizeof(temp) - 12) { + if ((int) len < (int) sizeof(temp) - 12) { strcpy(temp, _nc_progname); strcat(temp, ": "); } else { @@ -440,11 +463,15 @@ add_mapping(const char *port, char *arg) mapp->conditional = ~mapp->conditional & (EQ | GT | LT); /* If user specified a port with an option flag, set it. */ - done:if (port) { - if (mapp->porttype) - badmopt:err("illegal -m option format: %s", copy); + done: + if (port) { + if (mapp->porttype) { + badmopt: + err("illegal -m option format: %s", copy); + } mapp->porttype = port; } + free(copy); #ifdef MAPDEBUG (void) printf("port: %s\n", mapp->porttype ? mapp->porttype : "ANY"); (void) printf("type: %s\n", mapp->type); @@ -780,16 +807,16 @@ reset_mode(void) #ifdef NLDLY | NLDLY #endif -#ifdef CRDLY +#ifdef CRDLY | CRDLY #endif -#ifdef TABDLY +#ifdef TABDLY | TABDLY #endif -#ifdef BSDLY +#ifdef BSDLY | BSDLY #endif -#ifdef VTDLY +#ifdef VTDLY | VTDLY #endif #ifdef FFDLY @@ -863,13 +890,13 @@ set_control_chars(void) { #ifdef TERMIOS if (DISABLED(mode.c_cc[VERASE]) || terasechar >= 0) - mode.c_cc[VERASE] = terasechar >= 0 ? terasechar : default_erase(); + mode.c_cc[VERASE] = (terasechar >= 0) ? terasechar : default_erase(); if (DISABLED(mode.c_cc[VINTR]) || intrchar >= 0) - mode.c_cc[VINTR] = intrchar >= 0 ? intrchar : CINTR; + mode.c_cc[VINTR] = (intrchar >= 0) ? intrchar : CINTR; if (DISABLED(mode.c_cc[VKILL]) || tkillchar >= 0) - mode.c_cc[VKILL] = tkillchar >= 0 ? tkillchar : CKILL; + mode.c_cc[VKILL] = (tkillchar >= 0) ? tkillchar : CKILL; #endif } @@ -1128,17 +1155,14 @@ usage(void) static char arg_to_char(void) { - return (optarg[0] == '^' && optarg[1] != '\0') - ? ((optarg[1] == '?') ? '\177' : CTRL(optarg[1])) - : optarg[0]; + return (char) ((optarg[0] == '^' && optarg[1] != '\0') + ? ((optarg[1] == '?') ? '\177' : CTRL(optarg[1])) + : optarg[0]); } int main(int argc, char **argv) { -#if defined(TIOCGWINSZ) && defined(TIOCSWINSZ) - struct winsize win; -#endif int ch, noinit, noset, quiet, Sflag, sflag, showterm; const char *p; const char *ttype; @@ -1218,9 +1242,9 @@ main(int argc, char **argv) can_restore = TRUE; original = oldmode = mode; #ifdef TERMIOS - ospeed = cfgetospeed(&mode); + ospeed = (NCURSES_OSPEED) cfgetospeed(&mode); #else - ospeed = mode.sg_ospeed; + ospeed = (NCURSES_OSPEED) mode.sg_ospeed; #endif if (!strcmp(_nc_progname, PROG_RESET)) { @@ -1234,15 +1258,17 @@ main(int argc, char **argv) tcolumns = columns; tlines = lines; -#if defined(TIOCGWINSZ) && defined(TIOCSWINSZ) +#if HAVE_SIZECHANGE if (opt_w) { - /* Set window size */ - (void) ioctl(STDERR_FILENO, TIOCGWINSZ, &win); - if (win.ws_row == 0 && win.ws_col == 0 && + STRUCT_WINSIZE win; + /* Set window size if not set already */ + (void) ioctl(STDERR_FILENO, IOCTL_GET_WINSIZE, &win); + if (WINSIZE_ROWS(win) == 0 && + WINSIZE_COLS(win) == 0 && tlines > 0 && tcolumns > 0) { - win.ws_row = tlines; - win.ws_col = tcolumns; - (void) ioctl(STDERR_FILENO, TIOCSWINSZ, &win); + WINSIZE_ROWS(win) = tlines; + WINSIZE_COLS(win) = tcolumns; + (void) ioctl(STDERR_FILENO, IOCTL_SET_WINSIZE, &win); } } #endif @@ -1293,7 +1319,7 @@ main(int argc, char **argv) * environmental variable SHELL ending in "csh". */ if ((var = getenv("SHELL")) != 0 - && ((len = strlen(leaf = _nc_basename(var))) >= 3) + && ((len = (int) strlen(leaf = _nc_basename(var))) >= 3) && !strcmp(leaf + len - 3, "csh")) p = "set noglob;\nsetenv TERM %s;\nunset noglob;\n"; else |