summaryrefslogtreecommitdiff
path: root/qtermwidget/Vt102Emulation.h
diff options
context:
space:
mode:
Diffstat (limited to 'qtermwidget/Vt102Emulation.h')
-rw-r--r--qtermwidget/Vt102Emulation.h192
1 files changed, 192 insertions, 0 deletions
diff --git a/qtermwidget/Vt102Emulation.h b/qtermwidget/Vt102Emulation.h
new file mode 100644
index 0000000..4554c1b
--- /dev/null
+++ b/qtermwidget/Vt102Emulation.h
@@ -0,0 +1,192 @@
+/*
+ This file is part of Konsole, an X terminal.
+
+ Copyright (C) 2007 by Robert Knight <robertknight@gmail.com>
+ Copyright (C) 1997,1998 by Lars Doelle <lars.doelle@on-line.de>
+
+ Rewritten for QT4 by e_k <e_k at users.sourceforge.net>, Copyright (C)2008
+
+ 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.
+*/
+
+#ifndef VT102EMULATION_H
+#define VT102EMULATION_H
+
+// Standard Library
+#include <stdio.h>
+
+// Qt
+#include <QtGui/QKeyEvent>
+#include <QtCore/QHash>
+#include <QtCore/QTimer>
+
+// Konsole
+#include "Emulation.h"
+#include "Screen.h"
+
+#define MODE_AppScreen (MODES_SCREEN+0)
+#define MODE_AppCuKeys (MODES_SCREEN+1)
+#define MODE_AppKeyPad (MODES_SCREEN+2)
+#define MODE_Mouse1000 (MODES_SCREEN+3)
+#define MODE_Mouse1001 (MODES_SCREEN+4)
+#define MODE_Mouse1002 (MODES_SCREEN+5)
+#define MODE_Mouse1003 (MODES_SCREEN+6)
+#define MODE_Ansi (MODES_SCREEN+7)
+#define MODE_total (MODES_SCREEN+8)
+
+namespace Konsole
+{
+
+struct DECpar
+{
+ bool mode[MODE_total];
+};
+
+struct CharCodes
+{
+ // coding info
+ char charset[4]; //
+ int cu_cs; // actual charset.
+ bool graphic; // Some VT100 tricks
+ bool pound ; // Some VT100 tricks
+ bool sa_graphic; // saved graphic
+ bool sa_pound; // saved pound
+};
+
+/**
+ * Provides an xterm compatible terminal emulation based on the DEC VT102 terminal.
+ * A full description of this terminal can be found at http://vt100.net/docs/vt102-ug/
+ *
+ * In addition, various additional xterm escape sequences are supported to provide
+ * features such as mouse input handling.
+ * See http://rtfm.etla.org/xterm/ctlseq.html for a description of xterm's escape
+ * sequences.
+ *
+ */
+class Vt102Emulation : public Emulation
+{
+Q_OBJECT
+
+public:
+
+ /** Constructs a new emulation */
+ Vt102Emulation();
+ ~Vt102Emulation();
+
+ // reimplemented
+ virtual void clearEntireScreen();
+ virtual void reset();
+
+ // reimplemented
+ virtual char getErase() const;
+
+public slots:
+
+ // reimplemented
+ virtual void sendString(const char*,int length = -1);
+ virtual void sendText(const QString& text);
+ virtual void sendKeyEvent(QKeyEvent*);
+ virtual void sendMouseEvent( int buttons, int column, int line , int eventType );
+
+protected:
+ // reimplemented
+ virtual void setMode (int mode);
+ virtual void resetMode (int mode);
+
+ // reimplemented
+ virtual void receiveChar(int cc);
+
+
+private slots:
+
+ //causes changeTitle() to be emitted for each (int,QString) pair in pendingTitleUpdates
+ //used to buffer multiple title updates
+ void updateTitle();
+
+
+private:
+ unsigned short applyCharset(unsigned short c);
+ void setCharset(int n, int cs);
+ void useCharset(int n);
+ void setAndUseCharset(int n, int cs);
+ void saveCursor();
+ void restoreCursor();
+ void resetCharset(int scrno);
+
+ void setMargins(int top, int bottom);
+ //set margins for all screens back to their defaults
+ void setDefaultMargins();
+
+ // returns true if 'mode' is set or false otherwise
+ bool getMode (int mode);
+ // saves the current boolean value of 'mode'
+ void saveMode (int mode);
+ // restores the boolean value of 'mode'
+ void restoreMode(int mode);
+ // resets all modes
+ void resetModes();
+
+ void resetToken();
+#define MAXPBUF 80
+ void pushToToken(int cc);
+ int pbuf[MAXPBUF]; //FIXME: overflow?
+ int ppos;
+#define MAXARGS 15
+ void addDigit(int dig);
+ void addArgument();
+ int argv[MAXARGS];
+ int argc;
+ void initTokenizer();
+ int tbl[256];
+
+ void scan_buffer_report(); //FIXME: rename
+ void ReportErrorToken(); //FIXME: rename
+
+ void tau(int code, int p, int q);
+ void XtermHack();
+
+ void reportTerminalType();
+ void reportSecondaryAttributes();
+ void reportStatus();
+ void reportAnswerBack();
+ void reportCursorPosition();
+ void reportTerminalParms(int p);
+
+ void onScrollLock();
+ void scrollLock(const bool lock);
+
+ // clears the screen and resizes it to the specified
+ // number of columns
+ void clearScreenAndSetColumns(int columnCount);
+
+ CharCodes _charset[2];
+
+ DECpar _currParm;
+ DECpar _saveParm;
+
+ //hash table and timer for buffering calls to the session instance
+ //to update the name of the session
+ //or window title.
+ //these calls occur when certain escape sequences are seen in the
+ //output from the terminal
+ QHash<int,QString> _pendingTitleUpdates;
+ QTimer* _titleUpdateTimer;
+
+};
+
+}
+
+#endif // VT102EMULATION_H