term.C

00001 /*
00002  * This file is part of the "Archon" framework.
00003  * (http://files3d.sourceforge.net)
00004  *
00005  * Copyright © 2002 by Kristian Spangsege and Brian Kristiansen.
00006  *
00007  * Permission to use, copy, modify, and distribute this software and
00008  * its documentation under the terms of the GNU General Public License is
00009  * hereby granted. No representations are made about the suitability of
00010  * this software for any purpose. It is provided "as is" without express
00011  * or implied warranty. See the GNU General Public License
00012  * (http://www.gnu.org/copyleft/gpl.html) for more details.
00013  *
00014  * The characters in this file are ISO8859-1 encoded.
00015  *
00016  * The documentation in this file is in "Doxygen" style
00017  * (http://www.doxygen.org).
00018  */
00019 
00020 #include <sys/types.h>
00021 #include <sys/stat.h>
00022 #include <fcntl.h>
00023 #include <termios.h>
00024 #ifndef TIOCGWINSZ
00025 #include <sys/ioctl.h>
00026 #endif
00027 #include <unistd.h>
00028 #include <errno.h>
00029 #include <string.h>
00030 
00031 #include <archon/util/term.H>
00032 
00033 namespace Archon
00034 {
00035   namespace Utilities
00036   {
00040     namespace Term
00041     {
00042       int getWidth()
00043       {
00044         const int tty = open("/dev/tty", O_RDONLY);
00045         if(tty < 0)
00046           ARCHON_THROW1(ResourceException,
00047                         "System::Term::getWidth: Could not open "
00048                         "/dev/tty: " + string(strerror(errno)));
00049         winsize s;
00050         if(ioctl(tty, TIOCGWINSZ, reinterpret_cast<char *>(&s)) < 0)
00051           ARCHON_THROW1(ResourceException,
00052                         "System::Term::getWidth: Could not do "
00053                         "TIOCGWINSZ on /dev/tty: " + string(strerror(errno)));
00054         if(close(tty) < 0)
00055           ARCHON_THROW1(ResourceException,
00056                         "System::Term::getWidth: Could close "
00057                         "/dev/tty: " + string(strerror(errno)));
00058         return s.ws_col;
00059       }
00060     }
00061   }
00062 }

Generated on Sun Jul 30 22:55:45 2006 for Archon by  doxygen 1.4.4