summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Cedilnik <andy.cedilnik@kitware.com>2004-09-16 14:58:56 (GMT)
committerAndy Cedilnik <andy.cedilnik@kitware.com>2004-09-16 14:58:56 (GMT)
commit6a4071b5d213c52631fe2e73f6f8f51b40ac2e0b (patch)
treefb460f476d46ccefbe0107a2ccdd50a1d88f6e0d
parentd349d6ff18c046df2c9f775a22d28f8e9c10fc7d (diff)
downloadCMake-6a4071b5d213c52631fe2e73f6f8f51b40ac2e0b.zip
CMake-6a4071b5d213c52631fe2e73f6f8f51b40ac2e0b.tar.gz
CMake-6a4071b5d213c52631fe2e73f6f8f51b40ac2e0b.tar.bz2
ENH: Add method to retrieve the terminal width
-rw-r--r--Source/kwsys/SystemTools.cxx34
-rw-r--r--Source/kwsys/SystemTools.hxx.in7
2 files changed, 41 insertions, 0 deletions
diff --git a/Source/kwsys/SystemTools.cxx b/Source/kwsys/SystemTools.cxx
index 3f6ee37..1643c16 100644
--- a/Source/kwsys/SystemTools.cxx
+++ b/Source/kwsys/SystemTools.cxx
@@ -35,6 +35,8 @@
#include <stdlib.h>
#include <sys/param.h>
#include <sys/wait.h>
+#include <sys/ioctl.h>
+#include <unistd.h>
#endif
#if defined(_WIN32) && (defined(_MSC_VER) || defined(__BORLANDC__) || defined(__MINGW32__))
@@ -1846,6 +1848,38 @@ bool SystemTools::GetLineFromStream(kwsys_ios::istream& is, kwsys_stl::string& l
return haveData;
}
+int SystemTools::GetTerminalWidth()
+{
+ int width = -1;
+#ifndef _WIN32
+ struct winsize ws;
+ char *columns; /* Unix98 environment variable */
+ if(ioctl(1, TIOCGWINSZ, &ws) != -1 && ws.ws_col>0 && ws.ws_row>0)
+ {
+ width = ws.ws_col;
+ }
+ if(!isatty(STDOUT_FILENO))
+ {
+ width = -1;
+ }
+ columns = getenv("COLUMNS");
+ if(columns && *columns)
+ {
+ long t;
+ char *endptr;
+ t = strtol(columns, &endptr, 0);
+ if(endptr && !*endptr && (t>0) && (t<1000))
+ {
+ width = (int)t;
+ }
+ }
+ if ( width < 9 )
+ {
+ width = -1;
+ }
+#endif
+ return width;
+}
} // namespace KWSYS_NAMESPACE
#if defined(_MSC_VER) && defined(_DEBUG)
diff --git a/Source/kwsys/SystemTools.hxx.in b/Source/kwsys/SystemTools.hxx.in
index 7c6e2ce..02caf2a 100644
--- a/Source/kwsys/SystemTools.hxx.in
+++ b/Source/kwsys/SystemTools.hxx.in
@@ -276,6 +276,13 @@ public:
*/
static bool GetLineFromStream(kwsys_ios::istream& istr, kwsys_stl::string& line,
bool* has_newline=0);
+
+ /**
+ * Get the width of the terminal window. The code may or may not work, so
+ * make sure you have some resonable defaults prepared if the code returns
+ * some bogus size.
+ */
+ static int GetTerminalWidth();
protected:
// these two functions can be called from ConvertToOutputPath