source: ogBrowser-Git/qtermwidget/lib/Vt102Emulation.h @ c0cec9d

jenkinsmain
Last change on this file since c0cec9d was 64efc22, checked in by Vadim Troshchinskiy <vtroshchinskiy@…>, 19 months ago

Update qtermwidget to modern version

  • Property mode set to 100644
File size: 6.2 KB
RevLine 
[45157b3]1/*
2    This file is part of Konsole, an X terminal.
3
[64efc22]4    Copyright 2007-2008 by Robert Knight <robertknight@gmail.com>
5    Copyright 1997,1998 by Lars Doelle <lars.doelle@on-line.de>
[45157b3]6
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.
11
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.
16
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
20    02110-1301  USA.
21*/
22
23#ifndef VT102EMULATION_H
24#define VT102EMULATION_H
25
26// Standard Library
[64efc22]27#include <cstdio>
[45157b3]28
[64efc22]29// Qt
30#include <QKeyEvent>
31#include <QHash>
32#include <QTimer>
[45157b3]33
34// Konsole
35#include "Emulation.h"
36#include "Screen.h"
37
[64efc22]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 Highlight 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_Mouse1005       (MODES_SCREEN+7)   // Xterm-style extended coordinates
46#define MODE_Mouse1006       (MODES_SCREEN+8)   // 2nd Xterm-style extended coordinates
47#define MODE_Mouse1015       (MODES_SCREEN+9)   // Urxvt-style extended coordinates
48#define MODE_Ansi            (MODES_SCREEN+10)   // Use US Ascii for character sets G0-G3 (DECANM)
49#define MODE_132Columns      (MODES_SCREEN+11)  // 80 <-> 132 column mode switch (DECCOLM)
50#define MODE_Allow132Columns (MODES_SCREEN+12)  // Allow DECCOLM mode
51#define MODE_BracketedPaste  (MODES_SCREEN+13)  // Xterm-style bracketed paste mode
52#define MODE_total           (MODES_SCREEN+14)
[45157b3]53
54namespace Konsole
55{
56
57struct CharCodes
58{
59  // coding info
60  char charset[4]; //
61  int  cu_cs;      // actual charset.
62  bool graphic;    // Some VT100 tricks
63  bool pound  ;    // Some VT100 tricks
64  bool sa_graphic; // saved graphic
65  bool sa_pound;   // saved pound
66};
67
68/**
69 * Provides an xterm compatible terminal emulation based on the DEC VT102 terminal.
70 * A full description of this terminal can be found at http://vt100.net/docs/vt102-ug/
[64efc22]71 *
72 * In addition, various additional xterm escape sequences are supported to provide
[45157b3]73 * features such as mouse input handling.
74 * See http://rtfm.etla.org/xterm/ctlseq.html for a description of xterm's escape
[64efc22]75 * sequences.
[45157b3]76 *
77 */
78class Vt102Emulation : public Emulation
[64efc22]79{
[45157b3]80Q_OBJECT
81
82public:
83  /** Constructs a new emulation */
84  Vt102Emulation();
[64efc22]85  ~Vt102Emulation() override;
86
87  // reimplemented from Emulation
88  void clearEntireScreen() override;
89  void reset() override;
90  char eraseChar() const override;
91
92public slots:
93  // reimplemented from Emulation
94  void sendString(const char*,int length = -1) override;
95  void sendText(const QString& text) override;
96  void sendKeyEvent(QKeyEvent*, bool fromPaste) override;
97  void sendMouseEvent(int buttons, int column, int line, int eventType) override;
98  virtual void focusLost();
99  virtual void focusGained();
[45157b3]100
[64efc22]101protected:
102  // reimplemented from Emulation
103  void setMode(int mode) override;
104  void resetMode(int mode) override;
105  void receiveChar(wchar_t cc) override;
[45157b3]106
107private slots:
108  //causes changeTitle() to be emitted for each (int,QString) pair in pendingTitleUpdates
109  //used to buffer multiple title updates
110  void updateTitle();
111
112private:
[64efc22]113  wchar_t applyCharset(wchar_t c);
[45157b3]114  void setCharset(int n, int cs);
115  void useCharset(int n);
116  void setAndUseCharset(int n, int cs);
117  void saveCursor();
118  void restoreCursor();
119  void resetCharset(int scrno);
120
121  void setMargins(int top, int bottom);
122  //set margins for all screens back to their defaults
123  void setDefaultMargins();
124
125  // returns true if 'mode' is set or false otherwise
126  bool getMode    (int mode);
127  // saves the current boolean value of 'mode'
128  void saveMode   (int mode);
[64efc22]129  // restores the boolean value of 'mode'
[45157b3]130  void restoreMode(int mode);
131  // resets all modes
[64efc22]132  // (except MODE_Allow132Columns)
[45157b3]133  void resetModes();
134
[64efc22]135  void resetTokenizer();
136  #define MAX_TOKEN_LENGTH 256 // Max length of tokens (e.g. window title)
137  void addToCurrentToken(wchar_t cc);
138  wchar_t tokenBuffer[MAX_TOKEN_LENGTH]; //FIXME: overflow?
139  int tokenBufferPos;
[45157b3]140#define MAXARGS 15
141  void addDigit(int dig);
142  void addArgument();
143  int argv[MAXARGS];
144  int argc;
145  void initTokenizer();
[64efc22]146  int prevCC;
147
148  // Set of flags for each of the ASCII characters which indicates
149  // what category they fall into (printable character, control, digit etc.)
150  // for the purposes of decoding terminal output
151  int charClass[256];
[45157b3]152
[64efc22]153  void reportDecodingError();
[45157b3]154
[64efc22]155  void processToken(int code, wchar_t p, int q);
156  void processWindowAttributeChange();
157  void requestWindowAttribute(int);
[45157b3]158
159  void reportTerminalType();
160  void reportSecondaryAttributes();
161  void reportStatus();
162  void reportAnswerBack();
163  void reportCursorPosition();
164  void reportTerminalParms(int p);
165
166  void onScrollLock();
167  void scrollLock(const bool lock);
168
169  // clears the screen and resizes it to the specified
170  // number of columns
171  void clearScreenAndSetColumns(int columnCount);
172
173  CharCodes _charset[2];
174
[64efc22]175  class TerminalState
176  {
177  public:
178    // Initializes all modes to false
179    TerminalState()
180    { memset(&mode,false,MODE_total * sizeof(bool)); }
[45157b3]181
[64efc22]182    bool mode[MODE_total];
183  };
184
185  TerminalState _currentModes;
186  TerminalState _savedModes;
187
188  //hash table and timer for buffering calls to the session instance
[45157b3]189  //to update the name of the session
190  //or window title.
[64efc22]191  //these calls occur when certain escape sequences are seen in the
[45157b3]192  //output from the terminal
193  QHash<int,QString> _pendingTitleUpdates;
194  QTimer* _titleUpdateTimer;
[64efc22]195
196    bool _reportFocusEvents;
[45157b3]197};
198
199}
200
201#endif // VT102EMULATION_H
Note: See TracBrowser for help on using the repository browser.