http://invisible-island.net/vttest/
Copyright © 2018 by Thomas E. Dickey


VTTEST – Checksums

Background

The VT420 (and VT5200 series) support a couple of features which compute checksums for the terminal's state:

DECRQCRA
Request Checksum of Rectangular Area
DSR
Memory Checksum DSR

The available documentation gives the format of the controls and responses, but leaves out some useful information, i.e., how the terminal computes the checksum.

I noticed this in 2012, when I was improving the implementation of rectangle operations in xterm by making those take into account the left/right margin settings supported in VT420. At the time I was using evaluation copies of a couple of well-known terminal emulators to cross-check against the documentation. Neither implemented this feature properly (one did not respond correctly and the other always computed zero), though both claimed to emulate VT420.

As a minor, rarely used feature, it was “good enough” to just return the sum of the data from the screen. That was xterm patch #279 (May 2012).

A few years later, George Nachman found a use for the checksum feature, and sent a bug report pointing out that an identifier-parameter (sent by the application and part of the response) was parsed at the wrong position. That problem existed in both of the checksum features, and I saw only one (because the parameter numbering differs between the two). The memory checksum (unused!) was fixed in xterm patch #315 (March 2015). A few years (more!) passed, before I decided to investigate his application which used this feature.

Besides my belated fix for the response of DECRQCRA, I suggested other improvements to Nachman's scripts, which he split-out as a separate project esctest. (The prehistory is buried in iTerm2). As part of that, I decided to modify the logic for DECRQCRA to eliminate an xterm-specific feature. That was xterm patch #335 (August 2018).

Meanwhile, I had begun vetting a few other (commercial) terminal emulators to gauge their usefulness for cross-checking some terminal descriptions. While discussing some issues I had found, Markus Schmidt (one of the developers) commented that he had access to a DEC VT520. His feedback (and screenshots) were helpful in determining the checksum algorithm used by the DEC terminal. I factored out the differences between xterm #335 and the VT520 as configurable extensions (the checksumExtension resource), leaving the default behavior of DECRQCRA matching the hardware terminal (xterm patch #336).

Doing the analysis required some experimentation. A successful test will match these screenshots exactly (with the same highlighting and use of bold, underline shown).

ASCII (GL)

xterm running DECRQCRA test for GL

vt520 running DECRQCRA test for GL

Latin-1 (GR)

xterm running DECRQCRA test for GR

vt520 running DECRQCRA test for GR