2 This file is part of Konsole, an X terminal.
4 Copyright 2007-2008 by Robert Knight <robertknight@gmail.com>
5 Copyright 1997,1998 by Lars Doelle <lars.doelle@on-line.de>
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23 #ifndef VT102EMULATION_H
24 #define VT102EMULATION_H
30 #include <QtGui/QKeyEvent>
31 #include <QtCore/QHash>
32 #include <QtCore/QTimer>
35 #include "Emulation.h"
38 #define MODE_AppScreen (MODES_SCREEN+0) // Mode #1
39 #define MODE_AppCuKeys (MODES_SCREEN+1) // Application cursor keys (DECCKM)
40 #define MODE_AppKeyPad (MODES_SCREEN+2) //
41 #define MODE_Mouse1000 (MODES_SCREEN+3) // Send mouse X,Y position on press and release
42 #define MODE_Mouse1001 (MODES_SCREEN+4) // Use Hilight mouse tracking
43 #define MODE_Mouse1002 (MODES_SCREEN+5) // Use cell motion mouse tracking
44 #define MODE_Mouse1003 (MODES_SCREEN+6) // Use all motion mouse tracking
45 #define MODE_Ansi (MODES_SCREEN+7) // Use US Ascii for character sets G0-G3 (DECANM)
46 #define MODE_132Columns (MODES_SCREEN+8) // 80 <-> 132 column mode switch (DECCOLM)
47 #define MODE_Allow132Columns (MODES_SCREEN+9) // Allow DECCOLM mode
48 #define MODE_total (MODES_SCREEN+10)
57 int cu_cs
; // actual charset.
58 bool graphic
; // Some VT100 tricks
59 bool pound
; // Some VT100 tricks
60 bool sa_graphic
; // saved graphic
61 bool sa_pound
; // saved pound
65 * Provides an xterm compatible terminal emulation based on the DEC VT102 terminal.
66 * A full description of this terminal can be found at http://vt100.net/docs/vt102-ug/
68 * In addition, various additional xterm escape sequences are supported to provide
69 * features such as mouse input handling.
70 * See http://rtfm.etla.org/xterm/ctlseq.html for a description of xterm's escape
74 class Vt102Emulation
: public Emulation
79 /** Constructs a new emulation */
83 // reimplemented from Emulation
84 virtual void clearEntireScreen();
86 virtual char eraseChar() const;
89 // reimplemented from Emulation
90 virtual void sendString(const char*,int length
= -1);
91 virtual void sendText(const QString
& text
);
92 virtual void sendKeyEvent(QKeyEvent
*);
93 virtual void sendMouseEvent(int buttons
, int column
, int line
, int eventType
);
96 // reimplemented from Emulation
97 virtual void setMode(int mode
);
98 virtual void resetMode(int mode
);
99 virtual void receiveChar(int cc
);
102 //causes changeTitle() to be emitted for each (int,QString) pair in pendingTitleUpdates
103 //used to buffer multiple title updates
107 unsigned short applyCharset(unsigned short c
);
108 void setCharset(int n
, int cs
);
109 void useCharset(int n
);
110 void setAndUseCharset(int n
, int cs
);
112 void restoreCursor();
113 void resetCharset(int scrno
);
115 void setMargins(int top
, int bottom
);
116 //set margins for all screens back to their defaults
117 void setDefaultMargins();
119 // returns true if 'mode' is set or false otherwise
120 bool getMode (int mode
);
121 // saves the current boolean value of 'mode'
122 void saveMode (int mode
);
123 // restores the boolean value of 'mode'
124 void restoreMode(int mode
);
126 // (except MODE_Allow132Columns)
129 void resetTokenizer();
130 #define MAX_TOKEN_LENGTH 80
131 void addToCurrentToken(int cc
);
132 int tokenBuffer
[MAX_TOKEN_LENGTH
]; //FIXME: overflow?
135 void addDigit(int dig
);
139 void initTokenizer();
141 // Set of flags for each of the ASCII characters which indicates
142 // what category they fall into (printable character, control, digit etc.)
143 // for the purposes of decoding terminal output
146 void reportDecodingError();
148 void processToken(int code
, int p
, int q
);
149 void processWindowAttributeChange();
151 void reportTerminalType();
152 void reportSecondaryAttributes();
154 void reportAnswerBack();
155 void reportCursorPosition();
156 void reportTerminalParms(int p
);
159 void scrollLock(const bool lock
);
161 // clears the screen and resizes it to the specified
163 void clearScreenAndSetColumns(int columnCount
);
165 CharCodes _charset
[2];
170 // Initializes all modes to false
172 { memset(&mode
,false,MODE_total
* sizeof(bool)); }
174 bool mode
[MODE_total
];
177 TerminalState _currentModes
;
178 TerminalState _savedModes
;
180 //hash table and timer for buffering calls to the session instance
181 //to update the name of the session
183 //these calls occur when certain escape sequences are seen in the
184 //output from the terminal
185 QHash
<int,QString
> _pendingTitleUpdates
;
186 QTimer
* _titleUpdateTimer
;
191 #endif // VT102EMULATION_H