aboutsummaryrefslogtreecommitdiff
path: root/progs/tset.c
diff options
context:
space:
mode:
Diffstat (limited to 'progs/tset.c')
-rw-r--r--progs/tset.c90
1 files changed, 58 insertions, 32 deletions
diff --git a/progs/tset.c b/progs/tset.c
index 3d6091224979..6a4d2d61c3de 100644
--- a/progs/tset.c
+++ b/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