GNU Octave
3.8.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
Main Page
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Pages
libgui
qterminal
libqterminal
unix
Vt102Emulation.h
Go to the documentation of this file.
1
/*
2
This file is part of Konsole, an X terminal.
3
4
Copyright (C) 2007, 2013 by Robert Knight <robertknight@gmail.com>
5
Copyright (C) 1997,1998 by Lars Doelle <lars.doelle@on-line.de>
6
7
Rewritten for QT4 by e_k <e_k at users.sourceforge.net>, Copyright (C)2008
8
9
This program is free software; you can redistribute it and/or modify
10
it under the terms of the GNU General Public License as published by
11
the Free Software Foundation; either version 2 of the License, or
12
(at your option) any later version.
13
14
This program is distributed in the hope that it will be useful,
15
but WITHOUT ANY WARRANTY; without even the implied warranty of
16
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
GNU General Public License for more details.
18
19
You should have received a copy of the GNU General Public License
20
along with this program; if not, write to the Free Software
21
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22
02110-1301 USA.
23
*/
24
25
#ifndef VT102EMULATION_H
26
#define VT102EMULATION_H
27
28
// Standard Library
29
#include <stdio.h>
30
31
// Qt
32
#include <QKeyEvent>
33
#include <QtCore/QHash>
34
#include <QtCore/QTimer>
35
36
// Konsole
37
#include "
unix/Emulation.h
"
38
#include "
unix/Screen.h
"
39
40
#define MODE_AppScreen (MODES_SCREEN+0)
41
#define MODE_AppCuKeys (MODES_SCREEN+1)
42
#define MODE_AppKeyPad (MODES_SCREEN+2)
43
#define MODE_Mouse1000 (MODES_SCREEN+3)
44
#define MODE_Mouse1001 (MODES_SCREEN+4)
45
#define MODE_Mouse1002 (MODES_SCREEN+5)
46
#define MODE_Mouse1003 (MODES_SCREEN+6)
47
#define MODE_Ansi (MODES_SCREEN+7)
48
#define MODE_total (MODES_SCREEN+8)
49
50
struct
DECpar
51
{
52
bool
mode
[
MODE_total
];
53
};
54
55
struct
CharCodes
56
{
57
// coding info
58
char
charset
[4];
//
59
int
cu_cs
;
// actual charset.
60
bool
graphic
;
// Some VT100 tricks
61
bool
pound
;
// Some VT100 tricks
62
bool
sa_graphic
;
// saved graphic
63
bool
sa_pound
;
// saved pound
64
};
65
66
/**
67
* Provides an xterm compatible terminal emulation based on the DEC VT102 terminal.
68
* A full description of this terminal can be found at http://vt100.net/docs/vt102-ug/
69
*
70
* In addition, various additional xterm escape sequences are supported to provide
71
* features such as mouse input handling.
72
* See http://rtfm.etla.org/xterm/ctlseq.html for a description of xterm's escape
73
* sequences.
74
*
75
*/
76
class
Vt102Emulation
:
public
Emulation
77
{
78
Q_OBJECT
79
80
public
:
81
82
/** Constructs a new emulation */
83
Vt102Emulation
();
84
~Vt102Emulation
();
85
86
// reimplemented
87
virtual
void
clearEntireScreen
();
88
virtual
void
reset
();
89
90
// reimplemented
91
virtual
char
getErase
()
const
;
92
93
public
slots:
94
95
// reimplemented
96
virtual
void
sendString
(
const
char
*,
int
length
= -1);
97
virtual
void
sendText
(
const
QString&
text
);
98
virtual
void
sendKeyEvent
(QKeyEvent*);
99
virtual
void
sendMouseEvent
(
int
buttons,
int
column,
int
line
,
int
eventType );
100
101
protected
:
102
// reimplemented
103
virtual
void
setMode
(
int
mode);
104
virtual
void
resetMode
(
int
mode);
105
106
// reimplemented
107
virtual
void
receiveChar
(
int
cc);
108
109
110
private
slots:
111
112
//causes changeTitle() to be emitted for each (int,QString) pair in pendingTitleUpdates
113
//used to buffer multiple title updates
114
void
updateTitle
();
115
116
117
private
:
118
unsigned
short
applyCharset
(
unsigned
short
c);
119
void
setCharset
(
int
n,
int
cs);
120
void
useCharset
(
int
n);
121
void
setAndUseCharset
(
int
n,
int
cs);
122
void
saveCursor
();
123
void
restoreCursor
();
124
void
resetCharset
(
int
scrno);
125
126
void
setMargins
(
int
top,
int
bottom);
127
//set margins for all screens back to their defaults
128
void
setDefaultMargins
();
129
130
// returns true if 'mode' is set or false otherwise
131
bool
getMode
(
int
mode);
132
// saves the current boolean value of 'mode'
133
void
saveMode
(
int
mode);
134
// restores the boolean value of 'mode'
135
void
restoreMode
(
int
mode);
136
// resets all modes
137
void
resetModes
();
138
139
void
resetToken
();
140
#define MAXPBUF 80
141
void
pushToToken
(
int
cc);
142
int
pbuf
[
MAXPBUF
];
//FIXME: overflow?
143
int
ppos
;
144
#define MAXARGS 15
145
void
addDigit
(
int
dig);
146
void
addArgument
();
147
int
argv
[
MAXARGS
];
148
int
argc
;
149
void
initTokenizer
();
150
int
tbl
[256];
151
152
void
scan_buffer_report
();
//FIXME: rename
153
void
ReportErrorToken
();
//FIXME: rename
154
155
void
tau
(
int
code,
int
p,
int
q);
156
void
XtermHack
();
157
158
void
reportTerminalType
();
159
void
reportSecondaryAttributes
();
160
void
reportStatus
();
161
void
reportAnswerBack
();
162
void
reportCursorPosition
();
163
void
reportTerminalParms
(
int
p);
164
165
void
onScrollLock
();
166
void
scrollLock
(
const
bool
lock);
167
168
// clears the screen and resizes it to the specified
169
// number of columns
170
void
clearScreenAndSetColumns
(
int
columnCount);
171
172
CharCodes
_charset
[2];
173
174
DECpar
_currParm
;
175
DECpar
_saveParm
;
176
177
//hash table and timer for buffering calls to the session instance
178
//to update the name of the session
179
//or window title.
180
//these calls occur when certain escape sequences are seen in the
181
//output from the terminal
182
QHash<int,QString>
_pendingTitleUpdates
;
183
QTimer*
_titleUpdateTimer
;
184
185
};
186
187
#endif // VT102EMULATION_H
Generated on Mon Dec 30 2013 03:04:20 for GNU Octave by
1.8.1.2