CURL_CFILES = \
slist_wc.c \
+ terminal.c \
tool_binmode.c \
tool_bname.c \
tool_cb_dbg.c \
CURL_HFILES = \
slist_wc.h \
+ terminal.h \
tool_binmode.h \
tool_bname.h \
tool_cb_dbg.h \
--- /dev/null
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at https://curl.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * SPDX-License-Identifier: curl
+ *
+ ***************************************************************************/
+#include "tool_setup.h"
+
+#ifdef HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
+
+#include "terminal.h"
+
+#include "memdebug.h" /* keep this as LAST include */
+
+#ifdef HAVE_TERMIOS_H
+# include <termios.h>
+#elif defined(HAVE_TERMIO_H)
+# include <termio.h>
+#endif
+
+/*
+ * get_terminal_columns() returns the number of columns in the current
+ * terminal. It will return 79 on failure. Also, the number can be very big.
+ */
+
+unsigned int get_terminal_columns(void)
+{
+ unsigned int width = 0;
+ char *colp = curl_getenv("COLUMNS");
+ if(colp) {
+ char *endptr;
+ long num = strtol(colp, &endptr, 10);
+ if((endptr != colp) && (endptr == colp + strlen(colp)) && (num > 20) &&
+ (num < 10000))
+ width = (unsigned int)num;
+ curl_free(colp);
+ }
+
+ if(!width) {
+ int cols = 0;
+
+#ifdef TIOCGSIZE
+ struct ttysize ts;
+ if(!ioctl(STDIN_FILENO, TIOCGSIZE, &ts))
+ cols = ts.ts_cols;
+#elif defined(TIOCGWINSZ)
+ struct winsize ts;
+ if(!ioctl(STDIN_FILENO, TIOCGWINSZ, &ts))
+ cols = (int)ts.ws_col;
+#elif defined(_WIN32)
+ {
+ HANDLE stderr_hnd = GetStdHandle(STD_ERROR_HANDLE);
+ CONSOLE_SCREEN_BUFFER_INFO console_info;
+
+ if((stderr_hnd != INVALID_HANDLE_VALUE) &&
+ GetConsoleScreenBufferInfo(stderr_hnd, &console_info)) {
+ /*
+ * Do not use +1 to get the true screen-width since writing a
+ * character at the right edge will cause a line wrap.
+ */
+ cols = (int)
+ (console_info.srWindow.Right - console_info.srWindow.Left);
+ }
+ }
+#endif /* TIOCGSIZE */
+ if(cols >= 0 && cols < 10000)
+ width = (unsigned int)cols;
+ }
+ if(!width)
+ width = 79;
+ return width; /* 79 for unknown, might also be very small or very big */
+}
--- /dev/null
+#ifndef HEADER_CURL_TERMINAL_H
+#define HEADER_CURL_TERMINAL_H
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+ *
+ * This software is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution. The terms
+ * are also available at https://curl.se/docs/copyright.html.
+ *
+ * You may opt to use, copy, modify, merge, publish, distribute and/or sell
+ * copies of the Software, and permit persons to whom the Software is
+ * furnished to do so, under the terms of the COPYING file.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ * SPDX-License-Identifier: curl
+ *
+ ***************************************************************************/
+#include "tool_setup.h"
+
+unsigned int get_terminal_columns(void);
+
+#endif /* HEADER_CURL_TERMINAL_H */
***************************************************************************/
#include "tool_setup.h"
-#ifdef HAVE_SYS_IOCTL_H
-#include <sys/ioctl.h>
-#endif
-
#define ENABLE_CURLX_PRINTF
/* use our own printf() functions */
#include "curlx.h"
#include "tool_cb_prg.h"
#include "tool_util.h"
#include "tool_operate.h"
+#include "terminal.h"
#include "memdebug.h" /* keep this as LAST include */
#define MAX_BARLENGTH 256
-#ifdef HAVE_TERMIOS_H
-# include <termios.h>
-#elif defined(HAVE_TERMIO_H)
-# include <termio.h>
-#endif
-
/* 200 values generated by this perl code:
my $pi = 3.1415;
return 0;
}
-/*
- * get_terminal_columns() returns the number of columns in the current
- * terminal. It will return 79 on failure. Also, the number can be very big.
- */
-
-unsigned int get_terminal_columns(void)
-{
- unsigned int width = 0;
- char *colp = curl_getenv("COLUMNS");
- if(colp) {
- char *endptr;
- long num = strtol(colp, &endptr, 10);
- if((endptr != colp) && (endptr == colp + strlen(colp)) && (num > 20) &&
- (num < 10000))
- width = (unsigned int)num;
- curl_free(colp);
- }
-
- if(!width) {
- int cols = 0;
-
-#ifdef TIOCGSIZE
- struct ttysize ts;
- if(!ioctl(STDIN_FILENO, TIOCGSIZE, &ts))
- cols = ts.ts_cols;
-#elif defined(TIOCGWINSZ)
- struct winsize ts;
- if(!ioctl(STDIN_FILENO, TIOCGWINSZ, &ts))
- cols = (int)ts.ws_col;
-#elif defined(_WIN32)
- {
- HANDLE stderr_hnd = GetStdHandle(STD_ERROR_HANDLE);
- CONSOLE_SCREEN_BUFFER_INFO console_info;
-
- if((stderr_hnd != INVALID_HANDLE_VALUE) &&
- GetConsoleScreenBufferInfo(stderr_hnd, &console_info)) {
- /*
- * Do not use +1 to get the true screen-width since writing a
- * character at the right edge will cause a line wrap.
- */
- cols = (int)
- (console_info.srWindow.Right - console_info.srWindow.Left);
- }
- }
-#endif /* TIOCGSIZE */
- if(cols >= 0 && cols < 10000)
- width = (unsigned int)cols;
- }
- if(!width)
- width = 79;
- return width; /* 79 for unknown, might also be very small or very big */
-}
-
void progressbarinit(struct ProgressData *bar,
struct OperationConfig *config)
{
void progressbarinit(struct ProgressData *bar,
struct OperationConfig *config);
-unsigned int get_terminal_columns(void);
-
/*
** callback for CURLOPT_PROGRESSFUNCTION
*/
#include "tool_util.h"
#include "tool_version.h"
#include "tool_cb_prg.h"
+#include "terminal.h"
#include "memdebug.h" /* keep this as LAST include */
#include "tool_cfgable.h"
#include "tool_msgs.h"
+#include "tool_cb_prg.h"
+#include "terminal.h"
#include "memdebug.h" /* keep this as LAST include */
const char *fmt,
va_list ap)
{
- size_t width = (79 - strlen(prefix));
+ size_t width = (get_terminal_columns() - strlen(prefix));
DEBUGASSERT(!strchr(fmt, '\n'));
if(!config->silent) {
size_t len;