diff options
Diffstat (limited to 'kdm/kfrontend/kconsole.cpp')
-rw-r--r-- | kdm/kfrontend/kconsole.cpp | 183 |
1 files changed, 0 insertions, 183 deletions
diff --git a/kdm/kfrontend/kconsole.cpp b/kdm/kfrontend/kconsole.cpp deleted file mode 100644 index 834507bdb..000000000 --- a/kdm/kfrontend/kconsole.cpp +++ /dev/null @@ -1,183 +0,0 @@ -/* - -xconsole widget for TDM - -Copyright (C) 2002-2003 Oswald Buddenhagen <[email protected]> - - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -*/ - -#include <config.h> - -#ifdef WITH_TDM_XCONSOLE - -#include <stdlib.h> -#include <stdio.h> -#include <unistd.h> -#include <fcntl.h> -#include <errno.h> -#include <sys/ioctl.h> - -#ifdef HAVE_TERMIOS_H -/* for HP-UX (some versions) the extern C is needed, and for other - platforms it doesn't hurt */ -extern "C" { -#include <termios.h> -} -#endif -#if !defined(__osf__) -#ifdef HAVE_TERMIO_H -/* needed at least on AIX */ -#include <termio.h> -#endif -#endif - -#if defined (_HPUX_SOURCE) -#define _TERMIOS_INCLUDED -#include <bsdtty.h> -#endif - - -#include "kconsole.h" -#include "tdmconfig.h" -#include "tdm_greet.h" - -#include <klocale.h> -#include <kpty.h> - -#include <tqsocketnotifier.h> - -KConsole::KConsole( TQWidget *_parent ) - : inherited( _parent ) - , pty( 0 ) - , notifier( 0 ) - , fd( -1 ) -{ - setReadOnly( true ); - setWordWrap( NoWrap ); - setTextFormat( PlainText ); - - if (!OpenConsole()) - append( i18n("Cannot open console") ); -} - -KConsole::~KConsole() -{ - CloseConsole(); -} - -int -KConsole::OpenConsole() -{ -#ifdef TIOCCONS - static const char on = 1; -#endif - - if (*_logSource) { - if ((fd = open( _logSource, O_RDONLY | O_NONBLOCK )) >= 0) - goto gotcon; - LogError( "Cannot open log source %s, " - "falling back to /dev/console.\n", _logSource ); - } - - pty = new KPty; - if (!pty->open()) { - delete pty; - pty = 0; - return 0; - } - -#ifdef TIOCCONS - if (ioctl( pty->slaveFd(), TIOCCONS, &on ) < 0) { - perror( "ioctl TIOCCONS" ); - delete pty; - pty = 0; - return 0; - } -#else - int consfd; - if ((consfd = open( "/dev/console", O_RDONLY )) < 0) { - perror( "opening /dev/console" ); - delete pty; - pty = 0; - return 0; - } - if (ioctl( consfd, SRIOCSREDIR, slave_fd ) < 0) { - perror( "ioctl SRIOCSREDIR" ); - ::close( consfd ); - delete pty; - pty = 0; - return 0; - } - ::close( consfd ); -#endif - fd = pty->masterFd(); - - gotcon: - notifier = new TQSocketNotifier( fd, TQSocketNotifier::Read, this ); - connect( notifier, TQT_SIGNAL(activated( int )), TQT_SLOT(slotData()) ); - return 1; -} - -void -KConsole::CloseConsole() -{ - delete notifier; - notifier = 0; - if (pty) { - delete pty; - pty = 0; - } else - ::close( fd ); - fd = -1; -} - -void -KConsole::slotData() -{ - int n; - char buffer[1024]; - - if ((n = read( fd, buffer, sizeof(buffer) )) <= 0) { - CloseConsole(); - if (!n) - if (!OpenConsole()) - append( i18n("\n*** Cannot open console log source ***") ); - } else { - bool as = !verticalScrollBar()->isVisible() || - (verticalScrollBar()->value() == - verticalScrollBar()->maxValue()); - TQString str( TQString::fromLocal8Bit( buffer, n ).remove( '\r' ) ); - int pos, opos; - for (opos = 0; (pos = str.find( '\n', opos )) >= 0; opos = pos + 1) { - if (paragraphs() == 100) - removeParagraph( 0 ); - if (!leftover.isEmpty()) { - append( leftover + str.mid( opos, pos - opos ) ); - leftover = TQString::null; - } else - append( str.mid( opos, pos - opos ) ); - } - leftover += str.mid( opos ); - if (as) - scrollToBottom(); - } -} - -#include "kconsole.moc" - -#endif |