CRTSTY was kind of like "screen", in that it ran a virtual terminal through something like a pseudo TTY. The terminal interpreted SUPDUP protocol into any terminal type that CRTSTY supported. And you could disconnect and reattach to it later to restore your processes, to change terminals or survive a flakey modem or ARPA connection dropping out.

But even without CRTSTY, ITS gave everyone the ability to reattach to their processes after they got disconnected, and even pass processes like Lisp interpreters and Zork games around from user to user to share like a joint, by detatching and reattaching them to different TTYs!

https://github.com/PDP-10/its/blob/master/doc/_info_/its.pri...

>VIII.B. CRTSTY

>For display terminals which are not handled directly by the
system there exists a program called CRTSTY. This provides the software
support to permit these terminals to take advantage of their display
characteristics. Among the terminals supported by CRTSTY are: ADM3's,
Concept 100's, Hazeltine 1500's, Perkins Elmer FOX's, Datamedias,
Control Data Corporation 713's, and a host of others. You should try
:INFO CRTSTY and :INFO TERMS to see if your terminal is included. If it
isn't, the maintainers of CRTSTY are usually willing to help you add it.
In the CRTSTY section of INFO the information you must provide to have a
new terminal supported is listed. You can communicate with the
maintainers of CRTSTY by sending mail to BUG-CRTSTY.

https://github.com/PDP-10/its/blob/master/doc/humor/jargon.6...

>SUPDUP v. To communicate with another ARPAnet host using the SUPDUP
program, which is a SUPer-DUPer TELNET talking a special display
protocol used mostly in talking to ITS sites. Sometimes
abbreviated to SD.

https://datatracker.ietf.org/doc/rfc734/

>NWG/RFC# 734 MRC 07-OCT-77 08:46 41953 SUPDUP Display Protocol Page 1 Network Working Group Mark Crispin Request for Comments 734 SU-AI NIC 41953 7 October 1977

>SUPDUP Protocol

>This document describes the SUPDUP protocol, a highly efficient display telnet protocol. It originally started as a private protocol between the ITS systems at MIT to allow a user at any one of these systems to use one of the others as a display. At the current writing, SUPDUP user programs also exist for Data Disc and Datamedia displays at SU-AI and for Datamedias at SRI-KL. The author is not aware of any SUPDUP servers other than at the four MIT ITS sites.

>The advantage of the SUPDUP protocol over an individual terminal's protocol is that SUPDUP defines a "virtual" or "software" display terminal that implements relevant cursor motion operations. The protocol is not built on any particular display terminal but rather on the set of functions common to all display terminals; hence it is completely device- independent. In addition, the protocol also provides for terminals which cannot handle certain operations, such as line or character insert/delete. In fact, it is more than this. It provides for terminals which are missing any set of features, all the way down to model 33 Teletypes.

>The advantage over the TELNET protocol is that SUPDUP takes advantage of the full capabilities of display terminals, although it also has the ability to run printing terminals.

https://its.victor.se/wiki/_media/ai_wp_235.pdf

>The SUPDUP protocol [Crispin 77] is a highly efficient display telnet protocol. The advantage over the TELNET protocol is that SUPDUP takes advantage of the full capabilities of display terminals, although it also has the ability to run printing terminals. When you use the SUPDUP protocol, you do not need to tell the remote host which you are connecting to what type of terminal you have or what the terminal's capabilities are. The host you are SUPDUPing from handles the actual display support for your terminal.

>Additionally, SUPDUP defines a network graphics protpcol [Stallman 78] which makes it easy for network hosts to draw pictures along in addition to text.

SUPDUP Graphics Extension:

https://github.com/PDP-10/its/blob/master/doc/sysdoc/grphcs....

You didn't need CRTSTY to implement the SUPDUP protocol, but CRTSTY translated SUPDUP to standard terminal escape sequences, and provided buffering and optimization. Lisp machines and Knight TVs had their own SUPDUP terminal programs, and I made one for my Apple ][ in Forth.

SUPDUP had a line saving extension that RMS hacked into ITS Emacs, so it can stash lines on the screen in local memory before overpainting them, then almost instantly pop them back on the screen later, so you can scroll back and forth through text really fast at 300 baud (plus Devon McCullough made ZipMod with Huffman encoding to make it even faster on top of that):

https://news.ycombinator.com/item?id=15539983

I wrote a terminal emulator for the Apple ][ + Videx 80 column card in FORTH and reverse polish notation 6502 code, that supported SUPDUP including the line saving protocol that RMS hacked into ITS and EMACS (%TDSAV %TDRES), so Emacs could stash lines on the screen in a memory buffer (on the Apple's bank switched RAM card) and restore them later to paint the screen quickly when scrolling back and forth. (That was great at 300 baud!)

This is just the part of it that interprets SUPDUP codes -- layered on top of the rest of the terminal emulator that emulated H19 (VT52 + character/line insert/delete):

http://www.donhopkins.com/home/archive/forth/supdup.f

https://news.ycombinator.com/item?id=37973838

At 300 baud over a congested ARPA connection, we had a lot of time to think about how to optimize terminal emulation while waiting for the screen to repaint...

When James Gosling later implemented his Unix version of Emacs, he created a super-hot screen update algorithm that automatically took into account the capabilities of terminals and the length of their escape codes and padding required (some slow terminals needed padding when performing line/character insert/delete operations, otherwise they would miss characters. It used dynamic programming to figure out the optimal way of updating the screen, which was really great at low baud rates like 300 or 1200 baud.

Read the paper and display.c code I linked to in the above linked comment, and see the wikipedia page on dynamic programming:

>James Gosling's Emacs screen redisplay algorithm also used similar "dynamic programming techniques" to compute the minimal cost path through a cost matrix of string edit operations (the costs depended i.e. on the number of characters to draw, length of the escape codes to insert/delete lines/characters, padding for slow terminals, etc).

[...]

https://news.ycombinator.com/item?id=37974319

The comments in this old PDP-10 SUPDUP code [5] are hilarious!

SUPDUP on ITS was so smart and opinionated, it had its own ideas about who was a loser and who was a winner, how to figure it out by checking INQUIR entries and relationships, and who it should never or always hassle about net-hopping (hopping through a PDP-10 over the net just to use it as a glorified terminal emulator).

It never hassled gumby or cstacy (because they were free to do whatever they wanted to, like flushing whiny annoying over-entitled alcoholic science fiction writers [1] [2] [3] [4]), but always hassled rms (because it was usually an imposter logging in as rms with password rms just to net hop through the system.)

[...]

;;; these people aren't hassled
wintab: irp x,,[gumby,alan,cstacy,cent,devon,dph,oaf,mly,jtw,jnc,klotz,cbf,sra,ed,swa,map,jbvb]
sixbit/x/
termin
winlen==.-wintab

;;; These people are always hassled
lostab: irp x,,[tk,hewitt,rms]
sixbit/x/
termin
loslen==.-lostab

[...]