- Text Editor and Corrector
TECO (pronounced /tee'koh/; originally an acronym for " [paper] Tape Editor and COrrector", but later "Text Editor and COrrector") is a
text editor originally developed at theMassachusetts Institute of Technology (MIT) in the 1960s, after which it was modified by 'just about everybody'. With all the dialects included, TECO may have been the most prolific editor in use before thevi editor (later included with manyUnix operating system s), and before theEmacs editor, to which TECO was directly ancestral ('Emacs' originally stood for" Editing MACroS "running on TECO).Description and impact
TECO, noted for its complex
syntax , can be considered a general-purpose, interpretedprogramming language for text manipulation. Its great power was the ability to construct complex macros using matching criteria that rival the regular expressions in common use today. Almost every character is a command—a one- or two-character sequence replaces the usual keywords of more verbose languages—thus "any" character string is a TECO program, although not necessarily a useful one. One common game was to imagine editing a file using TECO and typing your name, and then to try to work out what would happen.Richard Stallman 's now famousEmacs editor was originally implemented in TECO. (Later versions of Emacs, firstMultics Emacs and thenGNU Emacs, were implemented in Lisp andEmacs Lisp .) TECO became well-known following aDigital Equipment Corporation (DEC)PDP-6 minicomputer implementation developed at MIT'sProject MAC in 1964. This implementation continuously displayed the edited text visually on a CRT screen, and was used as an interactive online editor. (This was, however, neither its origin nor its originally intended mode of use.) Later versions of TECO were capable of driving full-screen mode on various DECRS232 video terminals.TECO was available for several operating systems and computers, including the
PDP-1 computer, theIncompatible Timesharing System (ITS) on the PDP-6 andPDP-10 minicomputers, andTOPS-10 andTOPS-20 on thePDP-10 .A version of TECO was provided with all DEC operating systems; the version available forRT11 was able to drive the GT40 graphics display while the version available forRSTS/E was implemented as a multi-userrun-time system and could be used as the user's complete operating environment; the user never actually had to exit TECO. The VTEDIT (Video Terminal Editor) TECO macro was commonly used onRSTS/E andVAX systems with terminals capable of direct-cursor control (e.g.VT52 andVT100 ) to provide a full-screen visual editor similar in function to the contemporaneously developedEmacs .Hewlett-Packard , having boughtCompaq (who boughtDigital Equipment Corporation ), still provides TECO with the VMS operating system.A descendant of the version DEC distributed for the PDP-10 is still available on the Internet, along with several partial implementations for the
MS-DOS /Microsoft Windows environment.History
TECO was originally developed at MIT [cite paper
author = (no author shown)
title = Summary of TECO commands
version = From a collection of MIT PDP-1 paper tapes at the Computer History Museum.
url = http://www.bitsavers.org/bits/DEC/pdp1/papertapeImages/20031202/MIT_TS_box1/_text/tecoBlurb.txt
format = text
accessdate = 2007-09-12 ] circa1963 by Daniel L. Murphy for use on twoPDP-1 computers, belonging to different departments, both housed in MIT's Building 26. On these machines, the normal development process involved the use of aFriden Flexowriter to prepare source code offline on a continuous strip of punched paper tape. Programmers of the bigIBM mainframe s customarily punched theirsource code on cards, usingkey punch es which printed human-readabledot-matrix characters along the top of every card at the same time as they punched each machine-readable character. Thus IBM programmers could read, insert, delete, and move lines of code by physically manipulating the cards in the deck. Punched paper tape offered no such amenities, and necessity was the mother of online editing.An early editor for the PDP-1 was (officially!) named "
Expensive Typewriter ." Written by Stephen D. Piner, it was the most rudimentary imaginable line-oriented editor, lacking even search-and-replace capabilities. Its name was chosen as a wry poke at an earlier, rather bloated, editor called "Colossal Typewriter ". Even in those days, on-line editing could save time in the debugging cycle. Another program written by the PDP-1 hackers wasExpensive Desk Calculator , in a similar vein.The original stated purpose of TECO was to make more efficient use of the PDP-1. As envisioned in the manual, rather than performing editing "expensively" by sitting at a console, one would simply examine the faulty text and prepare a "correction tape" describing the editing operations to be performed on the text. One would efficiently feed the source tape and the correction tape into the PDP-1 via its high-speed (200 characters per second) reader. Running TECO, it immediately would punch an edited tape with its high-speed (60 characters per second) punch. One could then immediately proceed to load and run the assembler, with no time wasted in online editing.
TECO's then-sophisticated searching operations were motivated by the fact that the offline Flexowriter printouts were not line-numbered; therefore editing locations needed to be specified by context rather than by line number. The various looping and conditional constructs (which made TECO
Turing-complete ) were included in order to provide sufficient descriptive power for the correction tape. The terse syntax minimized the number of keystrokes needed to prepare the correction tape.The correction tape was, in fact a program, and required debugging just like any other program. The pitfalls of even the simplest global search-and-replace soon became evident. In practice, TECO editing was performed online just as it had been with Expensive Typewriter (although TECO was certainly a more feature-complete editor than Expensive Typewriter, so editing was much more efficient with TECO). The original PDP-1 version had no screen display. The only way to observe the state of the text during the editing process was to type in commands that would cause the text (or portions thereof) to be typed out on the console typewriter.
By 1964, TECO had been implemented on the
PDP-6 . That version supported visual editing, i.e., used a screen display that shows the contents of the editing buffer in real time, updating as it changes. [cite paper
author = Edwards, Daniel J.
title = TECO 6
version = Memorandum MAC-M-191
date = October 29, 1964
pages = 2
url =http://www.transbay.net/~enf/lore/teco/teco-64.html
format =HTML
accessdate = 2007-09-12 ] [cite paper
author = Samson, Peter
title = PDP-6 TECO
version = Memorandum MAC-M-250
pages = 9
format =PDF
url = ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-081.pdf
accessdate = 2007-09-12 ]Example session
Suppose that you had a file named hello.c with the following contents:
and you wanted to change it to say "Goodbye" instead of "Hello". You might use a TECO session like this, noting that the prompt is "*" and "$" is how ESC is echoed:
*EBhello.c$$ Open file for read/write with backup
*P$$ Read in the first page
*SHello$0TT$$ Search for "Hello" and print the line printf("Hello world! "); The line
*-5DIGoodbye$0TT$$ Delete "Hello", insert "Goodbye", and print the line printf("Goodbye world! "); The updated line
*EX$$ Copy the remainder of the file and exitExample code
Code sample Explanation ER "file" $ open file for read access ["q" ... ] "q" push ... pop register Q (can hold number, text, or code) < "code" > iteration; there are codes for "next", "break", "continue", etc. "n"X" "then-code" | "else-code"' if-then-else (X is a test type) The programming language
The obscurity of the TECO programming language is well-described in the following quote from [http://www.ee.ryerson.ca:8080/~elf/hack/realmen.html Real Programmers Don't Use PASCAL] , a letter from Ed Post to Datamation, July
1983 , pp. 263-265:"It has been observed that a TECO command sequence more closely resembles transmission line noise than readable text. One of the more entertaining games to play with TECO is to type your name in as a command line and try to guess what it does. Just about any possible typing error while talking with TECO will probably destroy your program, or even worse -- introduce subtle and mysterious bugs in a once working subroutine."
Despite the odd syntax, the teco command language was tremendously powerful, and clones are still available for
MS-DOS and forUnix .Teco commands are characters (including control-characters), and the prompt is a single star: *
The escape key pressed twice terminated commands, and displayed as a dollar sign: *$$
Example programs
The first two examples are a simple interchange sort of the current text buffer, based on the 1st character of each line, taken from the PDP-11 TECO User's Guide. A "goto" and "structured" version are shown. Note that TECO ignores case and
whitespace (excepttab , which is an insertion command).Example 1
!START! j 0aua ! jump to beginning, load 1st char in register A ! !CONT! l 0aub ! load first char of next line in register B ! qa-qb"g xa k -l ga 1uz ' ! if A>B, switch lines and set flag in register Z ! qbua ! load B into A ! l z-."g -l @o/CONT/ ' ! loop back if another line in buffer ! qz"g 0uz @o/START/ ' ! repeat if a switch was made on last pass !
Example 2
0uz ! clear repeat flag !
B, switch lines and set flag ! qbua ! load B into A ! l .-z;> ! loop back if another line in buffer ! qz;> ! repeat if a switch was made last pass ! The next example is a
Brainfuck interpreter for TECO. It works by executing the buffer as a Brainfuck program, and demonstrates the capabilities of the editor.Example 3
@^UB#@S/{^EQQ,/#@^UC#@S/,^EQQ}/@-1S/{/#@^UR#.U1ZJQZ^SC.,.+-^SXQ-^SDQ1J#@^U9/ [] -+<>.,/<@:-FD/^N^EG9/;>J30000<0@I/ />ZJZUL30000J0U10U20U30U60U7@^U4/ [] /@^U5#<@:S/^EG4/U7Q7;-AU3(Q3-91)"=%1|Q1"=.U6ZJ@i/{/Q2@i/,/Q6@i/}/Q6J0;'-1%1' >#<@:S/ [/UT.U210^T13^TQT;QT"NM5Q2J'>0UP30000J.US.UI<(0A-43)"=QPJ0AUTDQT+1@I//QIJ@O/end/'(0A-45)"=QPJ0AUTDQT-1@I// QIJ@O/end/'(0A-60)"=QP-1UP@O/end/'(0A-62)"=QP+1UP@O/end/'(0A-46)"=-.+QPA^T(-.+QPA-10)"=13^T'@O/end/'(0A-44)"=^TUT 8^TQPJDQT@I//QIJ@O/end/'(0A-91)"=-.+QPA"=QI+1UZQLJMRMB-1J.UI'@O/end/'(0A-93)"=-.+QPA"NQI+1UZQLJMRMC-1J.UI'@O/en d/'!end!QI+1UI(.-Z)"=.=@^a/END/^c^c'C>
Trivia
* Most DEC command languages interpreted the "MAKE filename" command as a command to start TECO and create the named filename. Many (most?) TECOs would respond to "MAKE LOVE" with the message "Not war?". At some TECO installation sites, the resulting file "LOVE" was considered a good-luck charm and was thus accorded heavy file protection (e.g., <777> under TOPS-10), never to be deleted.
* TECO could be considered to be one of the first "write-only" languages. That is, it could be argued that once a program is written in TECO, it would be extremely difficult to comprehend what it did without appropriate documentation.
* TECO's command line macro utility was called MUNG, which would execute the specified TECO program/macro on the specified input file. MUNG itself was one of the first
recursive acronyms , standing for "MUNG Until No Good".* When the VAX was introduced, DEC announced a more "user friendly" screen editor EDT to replace TECO. When users complained about the lack of support for their favorite editor, they were told "TECO is not an editor, it's a programming language!"
* One of the common sayings among exasperated TECO geeks was that it actually stood for Type Everything Completely Over.
ee also
*
Line editor
*Expensive Typewriter
*Colossal Typewriter References
*cite book
title = TECO pocket guide
publisher =Digital Equipment Corporation
date = 1978
pages = 17 pp.
url = http://zane.brouhaha.com/~healyzh/teco/TecoPocketGuide.html
accessdate = 2007-09-12External links
* [http://www.opost.com/dlm/ Dan Murphy's personal site]
* [http://www.sourceforge.net/projects/teco/ Pete Siemsen's TECO collection]
* [http://almy.us/teco.html Tom Almy's TECO page.] Includes a TECO based on Pete Siemsen's TECOC and DECUS documentation. There are MS-DOS, Windows (console), Linux, Mac OS X, and OS/2 versions.
* [http://scienceblogs.com/goodmath/2006/09/worlds_greatest_pathological_l_1.php Introduction to the TECO syntax]
* [http://www.pdp8.net/editors/teco/teco.shtml TECO Information]
Wikimedia Foundation. 2010.