Q3270
A Qt-based 3270 Terminal Emulator
Loading...
Searching...
No Matches
Q3270.h
1/*
2 * Q3270 Terminal Emulator
3 *
4 * Copyright (c) 2020–2025 Andy Styles
5 * SPDX-License-Identifier: BSD-3-Clause
6 *
7 * This file is part of Q3270.
8 * See the LICENSE file in the project root for full license information.
9 */
10
11#ifndef N3270_H
12#define N3270_H
13
14#include <QObject>
15
16#define Q3270_ORG "andyWare"
17#define Q3270_APP "Q3270"
18
19#define CELL_WIDTH 12
20#define CELL_HEIGHT 22
21
22
23/* 3270 Write Commands */
24#define IBM3270_W 0xF1 /* Write */
25#define IBM3270_EW 0xF5 /* Erase Write */
26#define IBM3270_EWA 0x7E /* Erase/Write Alternate */
27#define IBM3270_RB 0xF2 /* Read Buffer */
28#define IBM3270_RM 0xF6 /* Read Modified */
29#define IBM3270_RMA 0x6E /* Read Modified All */
30#define IBM3270_EAU 0x6F /* Erase All Uprotected */
31#define IBM3270_WSF 0xF3 /* Write Structured Field */
32
33/* 3270 CCW Write Commands */
34#define IBM3270_CCW_W 0x01 /* Write */
35#define IBM3270_CCW_EW 0x05 /* Erase/Write */
36#define IBM3270_CCW_EWA 0x0D /* Erase/Write Alternate */
37#define IBM3270_CCW_RB 0x02 /* Read Buffer */
38#define IBM3270_CCW_RM 0x06 /* Read Modified */
39#define IBM3270_CCW_EAU 0x0F /* Erase All Unprotected */
40#define IBM3270_CCW_WSF 0x11 /* Write Structured Field */
41#define IBM3270_CCW_NOP 0x03 /* No Operation */
42#define IBM3270_CCW_SNS 0x04 /* Sense */
43#define IBM3270_CCW_SNSID 0xE4 /* Sense Id */
44
45/* 3270 Orders */
46#define IBM3270_SF 0x1D /* Start Field */
47#define IBM3270_SFE 0x29 /* Start Field Extended */
48#define IBM3270_SBA 0x11 /* Set Buffer Address */
49#define IBM3270_SA 0x28 /* Set Attribute */
50#define IBM3270_MF 0x2C /* Modify field */
51#define IBM3270_IC 0x13 /* Insert Cursor */
52#define IBM3270_PT 0x05 /* Program Tab */
53#define IBM3270_RA 0x3C /* Repeat to Address */
54#define IBM3270_EUA 0x12 /* Erase Unprotected to Address */
55#define IBM3270_GE 0x08 /* Graphic Escape */
56
57/* Constants for some EBCDIC chars */
58#define IBM3270_CHAR_NULL 0x00
59#define IBM3270_CHAR_SPACE 0x40
60#define IBM3270_CHAR_ZERO 0xF0
61
62/* Write Structured Field Commands */
63#define IBM3270_WSF_RESET 0x00
64#define IBM3270_WSF_READPARTITION 0x01
65#define IBM3270_WSF_OB3270DS 0x40
66
67/* Inbound Structured Fields */
68#define IBM3270_SF_QUERYREPLY 0x81
69
70#define IBM3270_SF_QUERYREPLY_SUMMARY 0x80
71#define IBM3270_SF_QUERYREPLY_USABLE 0x81
72#define IBM3270_SF_QUERYREPLY_PARTS 0x84 /* Alphanumeric Partitions */
73#define IBM3270_SF_QUERYREPLY_CHARSETS 0x85 /* Graphic Escape supported for example */
74#define IBM3270_SF_QUERYREPLY_COLOUR 0x86
75#define IBM3270_SF_QUERYREPLY_HIGHLIGHT 0x87
76#define IBM3270_SF_QUERYREPLY_IMPPARTS 0xA6 /* Implicit Partitions */
77
78/* Extended Attributes */
79#define IBM3270_EXT_DEFAULT 0x00
80#define IBM3270_EXT_3270 0xC0
81#define IBM3270_EXT_VALIDATION 0xC1
82#define IBM3270_EXT_OUTLINE 0xC2
83#define IBM3270_EXT_HILITE 0x41
84#define IBM3270_EXT_FG_COLOUR 0x42
85#define IBM3270_EXT_CHARSET 0x43
86#define IBM3270_EXT_BG_COLOUR 0x45
87#define IBM3270_TRANSPARENT 0x46
88
89// This is used when the data stream says 'default colour'
90#define IBM3270_EXT_DEFAULT_COLOR 0x04
91
92#define IBM3270_EXT_HI_DEFAULT 0x00
93#define IBM3270_EXT_HI_NORMAL 0xF0
94#define IBM3270_EXT_HI_BLINK 0xF1
95#define IBM3270_EXT_HI_REVERSE 0xF2
96#define IBM3270_EXT_HI_USCORE 0xF4
97
98/* 3270 AIDs */
99#define IBM3270_AID_NOAID 0x60
100
101#define IBM3270_AID_ENTER 0x7D
102
103#define IBM3270_AID_SF 0x88
104
105#define IBM3270_AID_F1 0xF1
106#define IBM3270_AID_F2 0xF2
107#define IBM3270_AID_F3 0xF3
108#define IBM3270_AID_F4 0xF4
109#define IBM3270_AID_F5 0xF5
110#define IBM3270_AID_F6 0xF6
111#define IBM3270_AID_F7 0xF7
112#define IBM3270_AID_F8 0xF8
113#define IBM3270_AID_F9 0xF9
114#define IBM3270_AID_F10 0x7A
115#define IBM3270_AID_F11 0x7B
116#define IBM3270_AID_F12 0x7C
117#define IBM3270_AID_F13 0xC1
118#define IBM3270_AID_F14 0xC2
119#define IBM3270_AID_F15 0xC3
120#define IBM3270_AID_F16 0xC4
121#define IBM3270_AID_F17 0xC5
122#define IBM3270_AID_F18 0xC6
123#define IBM3270_AID_F19 0xC7
124#define IBM3270_AID_F20 0xC8
125#define IBM3270_AID_F21 0xC9
126#define IBM3270_AID_F22 0x4A
127#define IBM3270_AID_F23 0x4B
128#define IBM3270_AID_F24 0x4C
129
130#define IBM3270_AID_PA1 0x6C
131#define IBM3270_AID_PA2 0x6E
132#define IBM3270_AID_PA3 0x6B
133
134
135#define IBM3270_AID_CLEAR 0x6D
136
137#define TELOPT_TN3270E 0x28 /* TN3270 Extended */
138
139#define TN3270E_ASSOCIATE 0x00
140#define TN3270E_CONNECT 0x01
141#define TN3270E_DEVICE_TYPE 0x02
142#define TN3270E_FUNCTIONS 0x03
143#define TN3270E_IS 0x04
144#define TN3270E_REASON 0x05
145#define TN3270E_REJECT 0x06
146#define TN3270E_REQUEST 0x07
147#define TN3270E_SEND 0x08
148
149#define TN3270E_REASON_CONN_PARTNER 0x00
150#define TN3270E_REASON_DEVICE_IN_USE 0x01
151#define TN3270E_REASON_INV_ASSOCIATE 0x02
152#define TN3270E_REASON_INV_NAME 0x03
153#define TN3270E_REASON_INV_DEVICE_TYPE 0x04
154#define TN3270E_REASON_TYPE_NAME_ERROR 0x05
155#define TN3270E_REASON_UNKNOWN_ERROR 0x06
156#define TN3270E_REASON_UNSUPPORTED_REQ 0x07
157
158#define TN3270E_FUNCTION_BIND_IMAGE 0x00
159#define TN3270E_FUNCTION_DATA_STREAM_CTL 0x01
160#define TN3270E_FUNCTION_RESPONSES 0x02
161#define TN3270E_FUNCTION_SCS_CTL_CODES 0x03
162#define TN3270E_FUNCTION_SYSREQ 0x04
163
164#define TN3270E_DATATYPE_3270_DATA 0x00
165#define TN3270E_DATATYPE_SCS_DATA 0x01
166#define TN3270E_DATATYPE_RESPONSE 0x02
167#define TN3270E_DATATYPE_BIND_IMAGE 0x03
168#define TN3270E_DATATYPE_UNBIND 0x04
169#define TN3270E_DATATYPE_NVT_DATA 0x05
170#define TN3270E_DATATYPE_REQUEST 0x06
171#define TN3270E_DATATYPE_SSCP_LU_DATA 0x07
172#define TN3270E_DATATYPE_PRINT_EOJ 0x08
173
174namespace Q3270 {
175
176 Q_NAMESPACE
177
178 // Telnet states (what to expect next)
179 enum TelnetState {
180 TELNET_STATE_DATA,
181 TELNET_STATE_IAC,
182 TELNET_STATE_IAC_DO,
183 TELNET_STATE_IAC_DONT,
184 TELNET_STATE_IAC_WILL,
185 TELNET_STATE_IAC_WONT,
186 TELNET_STATE_IAC_SB,
187 TELNET_STATE_SB,
188 TELNET_STATE_SB_IAC,
189 TELNET_STATE_SB_TTYPE,
190 TELNET_STATE_SB_TTYPE_SEND,
191 TELNET_STATE_SB_TTYPE_SEND_IAC,
192 TELNET_STATE_SB_TN3270E,
193 TELNET_STATE_SB_TN3270E_SEND,
194 TELNET_STATE_SB_TN3270E_SEND_DEVICE_TYPE
195 };
196
197 // Status bar indicators
198 enum Indicators {
199 Unlocked,
200 SystemLock,
201 TerminalWait,
202 GoElsewhere
203 };
204
205 // Insert & Overtype
206 enum InsertOverType {
207 OvertypeMode,
208 InsertMode
209 };
210
211 // Socket encryption state
212 enum Encryption {
213 Unencrypted = 0,
214 SemiEncrypted = 1,
215 Encrypted = 2
216 };
217
218 // Colours and their 3270 codes
219 enum Colour
220 {
221 Black = 0,
222 Blue = 1,
223 Red = 2,
224 Magenta = 3,
225 Green = 4,
226 Cyan = 5,
227 Yellow = 6,
228 Neutral = 7,
229
230 UnprotectedNormal = 32,
231 ProtectedNormal = 33,
232 UnprotectedIntensified = 34,
233 ProtectedIntensified = 35
234 };
235
236 // Attributes that may have character-specific attributes
237 enum CharAttr
238 {
239 ExtendedAttr,
240 ColourAttr,
241 CharsetAttr,
242 TransparencyAttr
243 };
244
245 // Character-level attribute in effect
246 enum Highlight {
247 NoHighlight,
248 Underscore,
249 Reverse,
250 Blink
251 };
252
253 // Ruler styles
254 enum RulerStyle
255 {
256 CrossHair,
257 Vertical,
258 Horizontal
259 };
260
261 // Font tweak
262 enum FontTweak
263 {
264 None,
265 ZeroDot,
266 ZeroSlash
267 };
268
269 // EAU / EUA flag to reset MDT or not
270 enum class EraseResetMDT {
271 ResetMDT,
272 DoNotResetMDT
273 };
274
275 Q_ENUM_NS(TelnetState)
276 Q_ENUM_NS(RulerStyle)
277 Q_ENUM_NS(Colour)
278 Q_ENUM_NS(CharAttr)
279 Q_ENUM_NS(Indicators)
280 Q_ENUM_NS(InsertOverType)
281 Q_ENUM_NS(FontTweak)
282 Q_ENUM_NS(EraseResetMDT)
283 Q_ENUM_NS(Highlight)
284};
285
286Q_DECLARE_METATYPE(Q3270::RulerStyle)
287
288#define Q3270_TERMINAL_MODEL2 0
289#define Q3270_TERMINAL_MODEL3 1
290#define Q3270_TERMINAL_MODEL4 2
291#define Q3270_TERMINAL_MODEL5 3
292#define Q3270_TERMINAL_DYNAMIC 4
293
294#define Q3270_MOVE_CURSOR_RELATIVE false
295#define Q3270_MOVE_CURSOR_ABSOLUTE true
296
297#define Q3270_NOT_SHORT_READ false
298#define Q3270_SHORT_READ true
299
300// Left Ctrl and Right Ctrl hard wiring; this may break with non-X11 Windowing systems
301#ifdef Q_OS_MAC
302 #define Q3270_META_MOD Qt::ControlModifier
303 #define Q3270_CTRL_MOD Qt::MetaModifier
304 #define Q3270_META_KEY Qt::Key_Control
305 #define Q3270_CTRL_KEY Qt::Key_Meta
306 #define Q3270_LEFT_CTRL 59
307 #define Q3270_RIGHT_CTRL 62
308 #define Q3270_META_TEXT "Cmd"
309#else
310 #define Q3270_CTRL_MOD Qt::ControlModifier
311 #define Q3270_META_MOD Qt::MetaModifier
312 #define Q3270_CTRL_KEY Qt::Key_Control
313 #define Q3270_META_KEY Qt::Key_Meta
314 #define Q3270_LEFT_CTRL 65507
315 #define Q3270_RIGHT_CTRL 65508
316 #define Q3270_META_TEXT "Meta"
317#endif
318
319
320#endif // N3270_H