]> ncurses.scripts.mit.edu Git - ncurses.git/blobdiff - progs/tset.c
ncurses 5.9 - patch 20141220
[ncurses.git] / progs / tset.c
index 71a1845ff7d0b2512d5b4847bd1b54d2ed246c97..f01acd72109170b94ed9cfa0210e10cbf56e09e2 100644 (file)
@@ -1,5 +1,5 @@
 /****************************************************************************
- * Copyright (c) 1998-2010,2011 Free Software Foundation, Inc.              *
+ * Copyright (c) 1998-2012,2013 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            *
@@ -119,7 +119,7 @@ char *ttyname(int fd);
 #include <dump_entry.h>
 #include <transform.h>
 
-MODULE_ID("$Id: tset.c,v 1.84 2011/05/21 18:55:32 tom Exp $")
+MODULE_ID("$Id: tset.c,v 1.93 2013/12/15 01:05:56 tom Exp $")
 
 /*
  * SCO defines TIOCGSIZE and the corresponding struct.  Other systems (SunOS,
@@ -164,7 +164,10 @@ static bool isreset = FALSE;       /* invoked as reset */
 static int terasechar = -1;    /* new erase character */
 static int intrchar = -1;      /* new interrupt character */
 static int tkillchar = -1;     /* new kill character */
+
+#if HAVE_SIZECHANGE
 static int tlines, tcolumns;   /* window size */
+#endif
 
 #define LOWERCASE(c) ((isalpha(UChar(c)) && isupper(UChar(c))) ? tolower(UChar(c)) : (c))
 
@@ -210,10 +213,10 @@ failed(const char *msg)
     size_t len = strlen(_nc_progname) + 2;
 
     if ((int) len < (int) sizeof(temp) - 12) {
-       strcpy(temp, _nc_progname);
-       strcat(temp, ": ");
+       _nc_STRCPY(temp, _nc_progname, sizeof(temp));
+       _nc_STRCAT(temp, ": ", sizeof(temp));
     } else {
-       strcpy(temp, "tset: ");
+       _nc_STRCPY(temp, "tset: ", sizeof(temp));
     }
     perror(strncat(temp, msg, sizeof(temp) - strlen(temp) - 2));
     exit_error();
@@ -471,9 +474,6 @@ add_mapping(const char *port, char *arg)
        mapp->speed = tbaudrate(p);
     }
 
-    if (arg == (char *) 0)     /* Non-optional type. */
-       goto badmopt;
-
     mapp->type = arg;
 
     /* Terminate porttype, if specified. */
@@ -531,19 +531,19 @@ mapped(const char *type)
                match = TRUE;
                break;
            case EQ:
-               match = (ospeed == mapp->speed);
+               match = ((int) ospeed == mapp->speed);
                break;
            case GE:
-               match = (ospeed >= mapp->speed);
+               match = ((int) ospeed >= mapp->speed);
                break;
            case GT:
-               match = (ospeed > mapp->speed);
+               match = ((int) ospeed > mapp->speed);
                break;
            case LE:
-               match = (ospeed <= mapp->speed);
+               match = ((int) ospeed <= mapp->speed);
                break;
            case LT:
-               match = (ospeed < mapp->speed);
+               match = ((int) ospeed < mapp->speed);
                break;
            default:
                match = FALSE;
@@ -635,13 +635,14 @@ get_termcap_entry(char *userarg)
      * real entry from /etc/termcap.  This prevents us from being fooled
      * by out of date stuff in the environment.
      */
-  found:if ((p = getenv("TERMCAP")) != 0 && !_nc_is_abs_path(p)) {
+  found:
+    if ((p = getenv("TERMCAP")) != 0 && !_nc_is_abs_path(p)) {
        /* 'unsetenv("TERMCAP")' is not portable.
         * The 'environ' array is better.
         */
        int n;
        for (n = 0; environ[n] != 0; n++) {
-           if (!strncmp("TERMCAP=", environ[n], 8)) {
+           if (!strncmp("TERMCAP=", environ[n], (size_t) 8)) {
                while ((environ[n] = environ[n + 1]) != 0) {
                    n++;
                }
@@ -792,14 +793,14 @@ reset_mode(void)
     mode.c_cc[VWERASE] = CHK(mode.c_cc[VWERASE], CWERASE);
 #endif
 
-    mode.c_iflag &= ~(IGNBRK | PARMRK | INPCK | ISTRIP | INLCR | IGNCR
+    mode.c_iflag &= ~((unsigned) (IGNBRK | PARMRK | INPCK | ISTRIP | INLCR | IGNCR
 #ifdef IUCLC
-                     | IUCLC
+                                 | IUCLC
 #endif
 #ifdef IXANY
-                     | IXANY
+                                 | IXANY
 #endif
-                     | IXOFF);
+                                 | IXOFF));
 
     mode.c_iflag |= (BRKINT | IGNPAR | ICRNL | IXON
 #ifdef IMAXBEL
@@ -807,44 +808,44 @@ reset_mode(void)
 #endif
        );
 
-    mode.c_oflag &= ~(0
+    mode.c_oflag &= ~((unsigned) (0
 #ifdef OLCUC
-                     | OLCUC
+                                 | OLCUC
 #endif
 #ifdef OCRNL
-                     | OCRNL
+                                 | OCRNL
 #endif
 #ifdef ONOCR
-                     | ONOCR
+                                 | ONOCR
 #endif
 #ifdef ONLRET
-                     | ONLRET
+                                 | ONLRET
 #endif
 #ifdef OFILL
-                     | OFILL
+                                 | OFILL
 #endif
 #ifdef OFDEL
-                     | OFDEL
+                                 | OFDEL
 #endif
 #ifdef NLDLY
-                     | NLDLY
+                                 | NLDLY
 #endif
 #ifdef CRDLY
-                     | CRDLY
+                                 | CRDLY
 #endif
 #ifdef TABDLY
-                     | TABDLY
+                                 | TABDLY
 #endif
 #ifdef BSDLY
-                     | BSDLY
+                                 | BSDLY
 #endif
 #ifdef VTDLY
-                     | VTDLY
+                                 | VTDLY
 #endif
 #ifdef FFDLY
-                     | FFDLY
+                                 | FFDLY
 #endif
-       );
+                     ));
 
     mode.c_oflag |= (OPOST
 #ifdef ONLCR
@@ -852,19 +853,19 @@ reset_mode(void)
 #endif
        );
 
-    mode.c_cflag &= ~(CSIZE | CSTOPB | PARENB | PARODD | CLOCAL);
+    mode.c_cflag &= ~((unsigned) (CSIZE | CSTOPB | PARENB | PARODD | CLOCAL));
     mode.c_cflag |= (CS8 | CREAD);
-    mode.c_lflag &= ~(ECHONL | NOFLSH
+    mode.c_lflag &= ~((unsigned) (ECHONL | NOFLSH
 #ifdef TOSTOP
-                     | TOSTOP
+                                 | TOSTOP
 #endif
 #ifdef ECHOPTR
-                     | ECHOPRT
+                                 | ECHOPRT
 #endif
 #ifdef XCASE
-                     | XCASE
+                                 | XCASE
 #endif
-       );
+                     ));
 
     mode.c_lflag |= (ISIG | ICANON | ECHO | ECHOE | ECHOK
 #ifdef ECHOCTL
@@ -911,14 +912,23 @@ static void
 set_control_chars(void)
 {
 #ifdef TERMIOS
-    if (DISABLED(mode.c_cc[VERASE]) || terasechar >= 0)
-       mode.c_cc[VERASE] = (terasechar >= 0) ? terasechar : default_erase();
+    if (DISABLED(mode.c_cc[VERASE]) || terasechar >= 0) {
+       mode.c_cc[VERASE] = UChar((terasechar >= 0)
+                                 ? terasechar
+                                 : default_erase());
+    }
 
-    if (DISABLED(mode.c_cc[VINTR]) || intrchar >= 0)
-       mode.c_cc[VINTR] = (intrchar >= 0) ? intrchar : CINTR;
+    if (DISABLED(mode.c_cc[VINTR]) || intrchar >= 0) {
+       mode.c_cc[VINTR] = UChar((intrchar >= 0)
+                                ? intrchar
+                                : CINTR);
+    }
 
-    if (DISABLED(mode.c_cc[VKILL]) || tkillchar >= 0)
-       mode.c_cc[VKILL] = (tkillchar >= 0) ? tkillchar : CKILL;
+    if (DISABLED(mode.c_cc[VKILL]) || tkillchar >= 0) {
+       mode.c_cc[VKILL] = UChar((tkillchar >= 0)
+                                ? tkillchar
+                                : CKILL);
+    }
 #endif
 }
 
@@ -974,9 +984,9 @@ set_conversions(void)
     if (newline != (char *) 0 && newline[0] == '\n' && !newline[1]) {
        /* Newline, not linefeed. */
 #ifdef ONLCR
-       mode.c_oflag &= ~ONLCR;
+       mode.c_oflag &= ~((unsigned) ONLCR);
 #endif
-       mode.c_iflag &= ~ICRNL;
+       mode.c_iflag &= ~((unsigned) ICRNL);
     }
 #ifdef __OBSOLETE__
     if (tgetflag("HD"))                /* Half duplex. */
@@ -1047,11 +1057,18 @@ set_tabs(void)
 {
     if (set_tab && clear_all_tabs) {
        int c;
+       int lim =
+#if HAVE_SIZECHANGE
+       tcolumns
+#else
+       columns
+#endif
+        ;
 
        (void) putc('\r', stderr);      /* Force to left margin. */
        tputs(clear_all_tabs, 0, outc);
 
-       for (c = 8; c < tcolumns; c += 8) {
+       for (c = 8; c < lim; c += 8) {
            /* Get to the right column.  In BSD tset, this
             * used to try a bunch of half-clever things
             * with cup and hpa, for an average saving of
@@ -1277,10 +1294,10 @@ main(int argc, char **argv)
     (void) get_termcap_entry(*argv);
 
     if (!noset) {
+#if HAVE_SIZECHANGE
        tcolumns = columns;
        tlines = lines;
 
-#if HAVE_SIZECHANGE
        if (opt_w) {
            STRUCT_WINSIZE win;
            /* Set window size if not set already */