Release Notes/suite3270/4.0alpha3

From The x3270 Wiki

Major changes

Task engine

The scripting infrastructure has been rewritten. It is now called the task engine. There are no longer any artificial dependencies between actions initiated by different sources (keyboard, scripts, HTTP requests, etc.). Accidental blocking behavior has been (almost) eliminated. Unrelated operations are now properly concurrent, within the limitations of there still being just one emulated terminal and host session to control. For example, c3270 and wc3270 now continue to respond to host messages while at the prompt or while a printer dialog is showing.

Tasks also carry context consistently now. For example, the Wait(Output) now works with HTTP requests.

The state of the task engine can be displayed with the Tasks query.


A new emulator has been created, b3270. It is a common back-end process that handles the 3270 protocol and host interactions, communicating with different user-interface implementations using a simple XML-based protocol. None of the existing emulators have been converted to use b3270, but a new Windows emulator (wx3270) uses it.

x3270 prompt

The c3270 prompt has been generalized and is available to all of the 3270 emulators as the x3270 prompt. The Prompt() action (or a menu option) creates a new instance of the prompt in a window. The prompt now uses color to distinguish error messages.

tcl3270 re-implementation

tcl3270 has been re-implemented as a simple wrapper around s3270. This eliminates many of the arbitrary limitations and blocking behaviors of the previous implementation.

Show() / Query() merge and expansion

The common Query() action and the c3270/wc3270-specific Show() action have been merged and expanded. Show() is an alias for Query(), and many queries have been added or changed:

Set()/Toggle() changes

A new Set() action has been added, which is similar to the Toggle() action. The difference between Set() and Toggle() happens when no value is specified for a setting. Without a value specified, Set() will display the current value; Toggle() will (if the setting is Boolean) invert the setting's value. Both actions list the current values of all settings if no parameters are given.

Many additional resources can now be changed at run-time via Set() or Toggle().

These previously-deprecated resources were removed:

  • cursorPos (assumed true now)
  • dsTrace
  • eventTrace
  • dftBufferSize

x3270 APL mode

APL keyboard operation on x3270 has changed. There is no longer a fixed APL keymap. Instead, the key combination Shift-Escape toggles a new APL mode, which changes how how paste operations are handled (preferring the APL definitions for Unicode characters that have both APL and non-APL mappings), as well as setting a temporary keyboard map and a temporary compose map.

The separate APL host code page has been removed; APL text can be displayed using any host code page.


A Wiki has been created for x3270, It is still a work in progress, but in time, all of the documentation will be moved to the Wiki.

Minor changes

New connection states

The Operator Information Area now displays more information about the state of pending host sessions, explicitly indicating what stage of negotiation the emulator is in. For example:

  • [DNS]: Name resolution
  • [TCP]: TCP connection
  • [Proxy]: Proxy protocol negotiation
  • [TLS]: TLS protocol negotiation
  • [TELNET]: TELNET protocol negotiation
  • [TN3270E]: TN3270E protocol negotiation

Console selection

The console window used for tracing and the x3270 prompt can now be configured via the console resource, and many consoles besides xterm are now automatically supported.

1-origin actions and queries

Actions and queries have been added to supplement existing 0-origin versions with 1-origin versions.

NVT character display

The restriction has been removed that required a character to be defined in the current host code page in order to display it in NVT mode.

Keyboard disable during script execution

Scripts and files read by Source() now implicitly disable the keyboard while they are running. A new KeyboardDisable() action action can be used to explicitly enable or disable the keyboard.

Temporary compose maps

A new TemporaryComposeMap() action has been added to x3270. It allows a temporary compose map to be installed and removed. It is used in APL mode.

Offset-based cursor addressing

The MoveCursor() and MoveCursor1() actions can now take a single argument, which is the cursor offset.

New ReadBuffer Options

The ReadBuffer() action supports two new modes. Unicode mode reports buffer positions as hexadecimal Unicode code points. Field mode reports only on the current field instead of the entire buffer, and includes a preamble describing the field attributes and length.

Scripting improvements

The Script() action now accepts a number of options to control script invocation. For example, POSIX-based systems can now use an s3270 protocol socket for script commands (as is the default on Windows), and scripts can use HTTP for script commands.

HTTP server improvements

The HTTP server can now produce replies in JSON format. (This was previously only teased at.)

The Script() action now takes an -Http option, which causes a new instance of the HTTP server to be created for the script, with the URL passed in an environment variable.

Scripting improvements

The Script() action now accepts a number of options to control script invocation.

New TLS information

The server's TLS certificate can now be displayed via the TlsCertInfo query.

c3270 progress displays

The c3270 Operator Information Area is now used to display information about the progress of connections and file transfers. These were formerly displayed at the prompt.

x3270 high-resolution display support

x3270 now has limited support for high-resolution displays. It will automatically scale its basic visual elements based on the setting of the Xft.dpi resource, which can be overridden by the dpi resource. Fonts can be automatically scaled via the x3270a utility.

Insert mode

Support has been added for always-insert mode, which puts x3270 into insert mode after each keyboard reset (while in 3270 mode). When always-insert mode is true, a Reset no longer clears insert mode, so it must be explicitly turned off via Set(insertMode) or Toggle(insertMode).

A new insertMode resource is used to control insert mode. The Insert() action is now deprecated, and is an alias for Set(insertMode). The ToggleInsert() action is now deprecated, and is an alias for Toggle(insertMode).

Right-to-left language support changes

Right-to-left display mode is now controlled by toggling the rightToLeftMode resource. The Flip() action is now deprecated, and is an alias for Toggle(rightToLeftMode).

Reverse-input mode is now controlled by toggling the reverseInputMode resource. The ToggleReverse() action is now deprecated, and is an alias for Toggle(reverseInputMode).

Model configuration changes

The -color and -extended options, and the corresponding m3279 and extended resources have been removed. Their functions have long since been subsumed by the model resource and -model command-line option.

Charset becomes codepage

The -charset option and charset resource have been replaced by the -codepage command-line option and codePage resource respectively.

Other removed and changed resources

The color8 resource has been removed.

The cursorPos resource has been removed. The emulator now operates as if cursorPos were set to true.

The dftBufferSize resource was replaced by the ftBufferSize resource some time ago, and has now been removed.

The dsTrace and eventTrace resources have long been deprecated aliases for the trace resource, and have now been removed.

The tls resource has been changed to the startTls resource.

TELNET disable prefix

A new T prefix turns off the TELNET protocol for the session.

Transfer action syntax

Parameters to the Transfer() action are no longer required to use keyword=value syntax. Values can just follow the keyword sequentially, so "HostFile=xxx text a" can be given as HostFile,"xxx text a".

Proxy usernames and passwords

The HTTP, SOCKS4 and SOCKS5 proxies can now accept a username and password, delimited by an @ character. E.g., -proxy http:myuser:mypass@proxyhost:8080.

Release date

30. December 2019