Encyclopedia > TECO

  Article Content


TECO (pronounced /tee'koh/; originally an acronym for '[paper] Tape Editor and COrrector', but later 'Text Editor and COrrector') was a text editor developed at MIT and modified by just about everybody. With all the dialects included, TECO may have been the most prolific editor in use before Emacs, to which it was directly ancestral.

TECO, noted for its unspeakably hairy syntax, can be considered a general-purpose, interpreted programming language targeted for text manipulation. Almost every character is a command -- a 1- or 2-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 used to be mentally working out what the TECO commands corresponding to human names did.

Richard Stallman's original Emacs was implemented in TECO. Later versions of Emacs, first Multics Emacs and then GNU Emacs, however, were implemented in LISP.

TECO was available for several operating systems, including ITS[?] on the PDP-6 and PDP-10, and TOPS-10[?] and TOPS-20 on the PDP-10. 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/Windows environment. A version of TECO was provided with all DEC operating systems; Compaq still provides TECO with VMS.

Example TECO code

  • 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)

Example TECO program

This is a simple interchange sort of the current text buffer, based on 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 (except tab, 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 !
  <j 0aua l                       ! load 1st char into register A !

  <0aub                           ! load 1st char of next line into B !

  qa-qb"g xa k -l ga -1uz '       ! if A>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 !

This article is based on an entry in the jargon file, which is in the public domain.

All Wikipedia text is available under the terms of the GNU Free Documentation License

  Search Encyclopedia

Search over one million articles, find something about almost anything!
  Featured Article
Grand Prix

... ...

This page was created in 33.4 ms