tnz
TN3270 terminal class.
Low level APIs for telnet-3270 for Z tool and library.
Usage
from tnz import tnz
Environment variables used
SESSION_PS_SIZE SESSION_SECLEVEL SESSION_SSL_VERIFY TNZ_COLORS TNZ_LOGGING ZTI_SECLEVEL
Copyright 2021, 2025 IBM Inc. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
Classes
Tnz
One instance for each terminal and the connection.
Methods for actions taken at the terminal
attn ATTN enter ENTER clear CLEAR key_backspace Backspace key_backtab Backtab key_curdown Down key_curleft Left key_curright Right key_curup Up key_data characters/string key_delete Delete key_end (End) key_eraseeof Erase EOF key_eraseinput ERASE INPUT key_home Home key_insdata insert characters/string key_newline NL key_tab Tab key_wordl (Word Left) key_wordr (Word Right) pa2, pa2, pa3 PAx pfX (pf1, pf2, … pf24) PFxx
Additional methods to enhance the terminal experience
paste_data multiline characters/string
Characters in the terminal
scrstr Method to get characters/string
Attributes in the terminal
plane_fa Field attributes plane_eh Extended highlighting plane_fg Forground color plane_bg Background color
Various methods perform actions taken by the remote application. Use the wait method to wait for the remote application to request actions and for the instance to process them.
The data in the 3270 terminal is located by an address. This may be different from other applications that use a row and column or an x position and a y position. In addition, vectors described using addresses typically wrap - for instance from address 2 to address 1 produces a vector start at address 2, continues to the end of the terminal, continues at the beginning of the terminal, and terminates at address 1.
The send method and the send_* methods send data to the remote host.
Attributes
addr16bit
instance-attribute
addr16bit = False
aid
instance-attribute
aid = 96
alt
instance-attribute
alt = 0
amaxcol
instance-attribute
amaxcol = 80
amaxrow
instance-attribute
amaxrow = 24
bufadd
instance-attribute
bufadd = 0
buffer_size
instance-attribute
buffer_size = maxrow * maxcol
bytes_received
instance-attribute
bytes_received = 0
bytes_sent
instance-attribute
bytes_sent = 0
capable_color
instance-attribute
capable_color = False
cert_verified
property
cert_verified
Bool indicating if secure and cert was verified as trusted.
codec_info
instance-attribute
codec_info = {}
colors
instance-attribute
colors = int(getenv('TNZ_COLORS', '768'))
curadd
instance-attribute
curadd = 0
ddmdata
instance-attribute
ddmdata = None
ddmdict
instance-attribute
ddmdict = {}
ddmrecv
instance-attribute
ddmrecv = False
ddmsend
instance-attribute
ddmsend = False
dmaxcol
instance-attribute
dmaxcol = 80
dmaxrow
instance-attribute
dmaxrow = 24
encoding
property
writable
encoding
Name of encoding.
file_appends
instance-attribute
file_appends = None
host_verified
property
host_verified
Bool indicating if secure and host was verified.
inop
instance-attribute
inop = 6
inpid
instance-attribute
inpid = 0
lastcmd
instance-attribute
lastcmd = None
local_do
instance-attribute
local_do = []
local_dont
instance-attribute
local_dont = []
local_will
instance-attribute
local_will = []
local_wont
instance-attribute
local_wont = []
lu_name
instance-attribute
lu_name = None
maxcol
instance-attribute
maxcol = dmaxcol
maxrow
instance-attribute
maxrow = dmaxrow
name
instance-attribute
name = name
plane_bg
instance-attribute
plane_bg = bytearray(buffer_size)
plane_cs
instance-attribute
plane_cs = bytearray(buffer_size)
plane_dc
instance-attribute
plane_dc = bytearray(buffer_size)
plane_eh
instance-attribute
plane_eh = bytearray(buffer_size)
plane_fa
instance-attribute
plane_fa = bytearray(buffer_size)
plane_fg
instance-attribute
plane_fg = bytearray(buffer_size)
pwait
instance-attribute
pwait = False
read_state
instance-attribute
read_state = NORMAL
readlines
instance-attribute
readlines = None
readlines_pa2
instance-attribute
readlines_pa2 = True
remote_do
instance-attribute
remote_do = []
remote_dont
instance-attribute
remote_dont = []
remote_will
instance-attribute
remote_will = []
remote_wont
instance-attribute
remote_wont = []
secure
property
secure
Bool indicating if connection is secure.
seslost
instance-attribute
seslost = False
start_tls_completed
property
start_tls_completed
Bool indicating if start_tls completed.
system_lock_wait
instance-attribute
system_lock_wait = True
terminal_type
instance-attribute
terminal_type = 'IBM-DYNAMIC'
tn3270
property
tn3270
Bool indicating if NOT NVT mode.
tn3270e
property
tn3270e
Bool indicating if using TN3270E.
updated
instance-attribute
updated = False
use_tn3270e
instance-attribute
use_tn3270e = False
Functions
address
address(address_bytes)
Return an integer buffer address for the input encoded byte string address.
address_bytes
address_bytes(address)
Return an encoded byte string for the input integer buffer address.
attn
attn()
Send 3270 ATTN
char_addrs
char_addrs(saddr=None, eaddr=None)
A generator of character data address ranges.
clear
clear(zti=None)
Send CLEAR
close
close()
Close the connection.
connect
connect(host=None, port=None, secure=False, verifycert=True, *, event=None)
Connect to the host.
ddm_in_progress
ddm_in_progress()
Return bool indicating if ddm is in progress.
download
download()
Return current Download (or None).
enter
enter(text=None, zti=None)
Send ENTER
extended_color_mode
extended_color_mode()
Return bool indicating if screen using extended colors.
fav_repr
staticmethod
fav_repr(fav)
Return string representation of field attribute value.
field
field(address)
Return field address and attribute value as tuple.
Get the field address and attribute value associated with the input address.
fields
fields(saddr=None, eaddr=None)
A generator of all fields as (address, attribute).
get_file
get_file(parms, filename, assist=True)
Get host file into local file.
Would be nice, when the local system is Z, to transfer in binary. However, when transfer is done in binary, no information about the record format comes across. So, there is no knowledge if the host records were fixed-80 or variable length - so there is no indication as to where the line breaks should be.
Transfering using the ASCII CRLF options seems to cause the host to convert between cp037 and iso8859-1. If something other than cp037 is expected/needed, support must be added to translate back from iso8859-1 to cp037. Then using the desired code page (e.g. cp1047) to translate to Unicode.
getpeername
getpeername()
Return remote address to which socket is connected.
getsockettype
getsockettype()
Return type of socket.
group_addrs
group_addrs(saddr, eaddr)
A generator of character data address range groups.
A generator function that iterates through groups of characters. The characters in each group have all the same attributes. Each iteration returns a tuple with the start and end addresses.
It is assumed that the input address(es) are valid for the current buffer size. They are in the range from 0 to buffer_size-1, inclusive.
is_detectable_attr
staticmethod
is_detectable_attr(attr)
Return whether or not the input field attribute is for a selector-pen-detectable field.
is_displayable_attr
staticmethod
is_displayable_attr(attr)
Return whether or not the input field attribute is for a displayable field.
is_intensified_attr
staticmethod
is_intensified_attr(attr)
Return whether or not the input field attribute is for an intensified field.
is_modified_attr
staticmethod
is_modified_attr(attr)
Return whether or not the input field attribute is for a modified field.
is_normal_attr
staticmethod
is_normal_attr(attr)
Return whether or not the input field attribute is for a normal field.
is_numeric_attr
staticmethod
is_numeric_attr(attr)
Return whether or not the input field attribute is for a numeric field.
is_pen_detectable
is_pen_detectable(address)
Return True or False to indicate if the address is selector-pen detectable
is_protected
is_protected(address)
Return True or False to indicate if the address is protected
is_protected_attr
staticmethod
is_protected_attr(attr)
Return whether or not the input field attribute is for a protected field.
is_unprotected
is_unprotected()
Return True or False to indicate if all fields are unprotected
iterow
iterow(saddr, eaddr)
Iterate through rows of bytes in the input bytearray.
Note that the inputs are addresses and the outputs are positions. In other words, the outputs for each iteration will always have the start less than the end and buffer_size is used when the vector goes to the end of the bytearray.
key_aid
key_aid(aid)
Process an aid key.
key_backspace
key_backspace(zti=None)
Process backspace key, which behaves like a cursor left followed by a delete as long as cursor is not on a field attribute nor is there a field attribute to the left.
key_backtab
key_backtab(zti=None)
Process backtab key.
key_curdown
key_curdown(zti=None)
Process cursor down key.
key_curleft
key_curleft(zti=None)
Process cursor left key.
key_curright
key_curright(zti=None)
Process cursor right key.
key_curup
key_curup(zti=None)
Process cursor up key.
key_data
key_data(text, onerow=False, zti=None)
Process keyboard character data.
key_delete
key_delete(zti=None)
Process delete key.
key_end
key_end()
Process End key - go to end of text in field.
End is not a 3270 key, but common on modern keyboard.
Cursor will move onto a null character in the current field where the character to the left is not a null character and all characters to the right are null characters.
If cursor is in an unprotected field and the field does not end in a null character, the cursor will be put on the last character in the field.
If cursor is in a protected field and the field does not end in a null character, the cursor will be put on the field attribute of the next field.
key_eraseeof
key_eraseeof(zti=None)
Process eraseeof key.
key_eraseinput
key_eraseinput(zti=None)
Process ERASE INPUT key.
key_home
key_home(zti=None)
Process home key.
key_ins_data
key_ins_data(text, zti=None)
Process keyboard character data in insert mode.
key_newline
key_newline(zti=None)
Process newline key.
key_tab
key_tab(zti=None)
Process tab key.
key_word_left
key_word_left()
Move cursor left to the previous word.
key_word_right
key_word_right()
Move cursor right to the next word.
logging
classmethod
logging()
Initialize logging
next_data
next_data(saddr, eaddr=None)
Get the address range of the next field data.
next_field
next_field(saddr, eaddr=None, offset=1)
Get the address and attribute value of the next field.
Get the address and attribute value associated with the next field relative to the input field address. The first location for searching is the address AFTER the input saddr. If eaddr is specified.
pa1
pa1()
Send PA1
pa2
pa2()
Send PA2
pa3
pa3()
Send PA3
paste_data
paste_data(data, zti=None)
Process pasted character data.
pf1
pf1()
Send PF1
pf10
pf10()
Send PF10
pf11
pf11()
Send PF11
pf12
pf12()
Send PF12
pf13
pf13()
Send PF13
pf14
pf14()
Send PF14
pf15
pf15()
Send PF15
pf16
pf16()
Send PF16
pf17
pf17()
Send PF17
pf18
pf18()
Send PF18
pf19
pf19()
Send PF19
pf2
pf2()
Send PF2
pf20
pf20()
Send PF20
pf21
pf21()
Send PF21
pf22
pf22()
Send PF22
pf23
pf23()
Send PF23
pf24
pf24()
Send PF24
pf3
pf3()
Send PF3
pf4
pf4()
Send PF4
pf5
pf5()
Send PF5
pf6
pf6()
Send PF6
pf7
pf7()
Send PF7
pf8
pf8()
Send PF8
pf9
pf9()
Send PF9
put_file
put_file(filename, parms, assist=True)
Put host file from local file.
rcba
staticmethod
rcba(value, start, stop)
read circular byte array
value: byte array start: first index into byte array stop: last index into byte array returns copy of data from array
scrstr
scrstr(saddr=0, eaddr=0, rstrip=None)
Return a string representation of the character buffer.
selector_pen
selector_pen(address, zti=None)
send
send(data=None)
Send input byte array as data to the host. This method will escape IAC bytes.
send_3270_data
send_3270_data(value)
Send input byte array as a 3270-DATA record to the host. This method will escape IAC bytes and send EOR after the data.
send_aid
send_aid(aid, short=None)
Process the sending of an AID (enter command). Used by methods with the name of the AID (e.g. enter).
send_command
send_command(code)
Send telnet command to the host.
Send a single-byte telnet command to the remote.
Supported commands
NAME CODE MEANING NOP 241 No operation. Data Mark 242 The data stream portion of a Synch. Break 243 NVT character BRK. Interrupt Process 244 The function IP. Abort output 245 The function AO. Are You There 246 The function AYT. Erase character 247 The function EC. Erase Line 248 The function EL. Go ahead 249 The GA signal.
See other methods for other commands
NAME METHOD EOR send_rec() SE send_sub() SB send_sub() WILL send_will() WON'T send_wont() DO send_do() DON'T send_dont()
send_do
send_do(opt, buffer=False)
Send DO to the host.
send_dont
send_dont(opt, buffer=False)
Send DON'T to the host.
send_rec
send_rec(value)
Send input byte array as a record to the host. This method will escape IAC bytes and send EOR after the data.
send_sub
send_sub(value, buffer=False)
Send input subcommand data to the host. This method will bookend the data with IAC SB adn IAC SE.
send_terminal_type
send_terminal_type(buffer=False)
Send the terminal type to the host.
send_will
send_will(opt, buffer=False)
Send WILL to the host.
send_wont
send_wont(opt, buffer=False)
Send WON'T to the host.
set_cursor_address
set_cursor_address(address)
Set the cursor address to the input address.
set_cursor_position
set_cursor_position(row, col)
Set the cursor address from the input row and column.
First (row, col) is (1, 1).
shutdown
shutdown()
Shut down the connection.
start_readlines
start_readlines()
Initialize readlines.
ucba
staticmethod
ucba(dst, start, src, begidx=0, endidx=None)
update circular byte array
dst: target circular byte array start: first index into target byte array src: data to copy to array begidx: start index in data to copy (default is 0) endidx: end index in data to copy (default is len(src))
upload
upload(file)
Upload data from file-like object to remote server.
uploading
uploading()
Return bool indicating if currently uploading.
wait
wait(timeout=None, zti=None, key=None)
Wait for event.
Returns after timeout seconds or when data is received.
word_at
word_at(address)
Return the word at the input address.
TnzError
Bases: Exception
General Tnz error.
TnzTerminalError
Bases: TnzError
May be related to terminal characteristics.
TnzTransferError
Bases: TnzError
Error processing file transfer.
Functions
bit6
bit6(control_int)
Translate 6-bit control characters to printable characters. This is used for bytes that have bits 0 and 1 reserved in order to make the byte a printable character. See figure D-1 in Data Stream Programmers Reference.
connect
connect(host=None, port=None, secure=None, verifycert=None, name=None, *, event=None)
Create a new Tnz object and connect to the host.
secure = False if do not care about security secure = True for encrypted connection verifycert only has meaning when secure is True