STET (text editor)

The STET text editor (short for "structured editing tool") may have been the first folding editor; its first version was written in 1977 by Mike Cowlishaw. The editor runs on the IBM VM/CMS operating system.

STET was written to explore an approach to text editing that followed the principles of structured programming. It allows programs and documentation to be written 'top-down', with blocks of code or text kept to a limited size (usually less than a page).

This was "a first attempt to take the structure out of the domain of languages, and into the domain of editors. In addition to conventional editing facilities, STET gives the user a third dimension: a tree structure that may be traversed using Program Function Keys much as scrolling is normally implemented"

Principles
The editor, like many text editors, is a full-screen editor; a window into the file being edited is displayed and the lines displayed can be edited directly on-screen by insertions, deletions, or overtyping. Editing is also effected by pressing programmable action keys or by typing in commands. Commands are either 'top-line commands' (entered in a command entry area on the top line of the screen) or 'line commands' (entered in a 4-character command entry field adjacent to each displayed line of text).

Top-line commands generally apply to the entire file being edited, and include the usual operations such as saving, searching, replacing, movement around the file, and so on (over 60 in all).

Line commands apply to a single line or a number of lines, and allow copying, moving, overlaying, merging, uppercasing and the like. An innovation in STET is the ability to mark a group of lines using the  line command to mark the first and last lines of a group. The group of lines can then be manipulated as a whole; they can be copied, merged, etc., and also make possible the 'structured editing commands' which provide the folding capabilities of the editor.

Structured editing commands
The structured editing facilities of STET are based on the concept that each file is represented as a collection of named blocks of lines. A block is created from an (anonymous) marked group of lines by the command (for example) ' '. This command creates the block with name 'COMMANDS' and replaces the group of lines with a single line with a reference to COMMANDS, identified by its first non-blank character being some special character, by default ' '. This feature makes it easy to create a structured file from a flat file.

The block reference concept is very similar to the idea of links in a Wikipedia file, and indeed in STET a block can also be created by putting a new reference on a line and then 'entering' that reference to edit the block.

The structured editing commands also allow the user to see a map of the tree structure of the file, list the blocks alphabetically, and navigate the structure of the file. Navigation upwards and downwards or to a named block is possible, along with 'go to next block at this level' (that is, go up a level, find the next block reference at that level, and then go down a level). Other commands allow blocks to be renamed, expanded, etc., and also allow a flat file to be built from all or part of the structured file.

Other
The editor is written in PL/I except for the 3270 screen interface which is written in Assembler. STET was written and maintained by Mike Cowlishaw from 1976 to 1979 and then taken over by Steve Davies, who continued to enhance and maintain it through the 1980s. Many of the features in STET were used in later IBM text editors, including XEDIT and LEXX.

Limitations
All files that can be edited are limited to a maximum of 32,767 characters wide (line length) and each block is limited to a maximum of 32,767 lines. An unstructured 'flat file' is edited as a single block.

A structured file is stored on disk in a special format which allows efficient loading and navigation of the blocks in the file. This allows each file to also store useful meta-information (such as statistics of action key usage, total edit time, etc.), but has the disadvantage that a flat file has to be 'built' from the structured file before (for example) it can be processed by a compiler or word-processing utility.