# TECO

TECO est un éditeur de texte développé au MIT dans les années 1960, puis modifié par « un peu tout le monde ». Son nom signifiait à l'origine « [paper] Tape Editor and COrrector » (« Éditeur et Correcteur de Bande [papier] »), mais devint plus tard « Text Editor and COrrector » (« Éditeur et Correcteur de Texte »). Compte tenu de tous les dialectes qu'il comprend, TECO a probablement été l'un des éditeurs les plus prolifiques, avant l'arrivée de vi et surtout de Emacs, dont TECO est l'ancêtre direct (Emacs signifiait à l'origine « Editing MACroS running on TECO », « macros d'édition fonctionnant sur TECO »).

## Description et influence

TECO, remarquable pour sa syntaxe complexe, peut être considéré comme un langage de programmation interprété générique destiné à la manipulation de texte. Pratiquement chaque caractère est une commande, des séquences composées d'un ou de deux caractères remplacent les mots-clefs habituellement utilisés dans d'autres programmes d'édition de texte. De ce fait, toute chaîne de caractères peut être considérée comme une séquence de commandes TECO, bien qu'elle ne soit pas forcément utile à quelque chose. Un grand jeu consistait à deviner de tête les commandes TECO auxquelles correspondaient les prénoms des utilisateurs.
L'Emacs initial de Richard Stallman était implémenté en langage TECO. Toutefois, les versions suivantes, Emacs pour Multics puis GNU Emacs, furent implémentées en Lisp et Emacs Lisp. TECO acquit sa célébrité à la suite de son implémentation sur un PDP-6 de DEC, réalisée par le MIT pour le projet MAC en 1964. Cette implémentation affichait en permanence le texte édité sur un écran à tube cathodique, et permettait une édition en ligne interactive (ce qui n'était pourtant ni sa vocation, ni le mode dans lequel il était prévu pour fonctionner). Les versions suivantes de TECO étaient capables de piloter le mode plein écran de différents terminaux vidéo DEC RS-232.
TECO était disponible pour plusieurs systèmes d'exploitation et ordinateurs, notamment le PDP-1, ITS sur le PDP-6 et le PDP-10, ainsi que TOPS-10 et TOPS-20 sur le PDP-10.
Un descendant de la version DEC distribuée pour le PDP-10 est toujours disponible sur Internet, ainsi que plusieurs implémentations partielles pour l'environnement MS-DOS/Windows.
Une version de TECO était fournie avec tous les systèmes d'exploitation DEC. La version disponible sur RT11 était capable de piloter l'afficheur graphique GT40, tandis que la version pour RSTS/E était tout bonnement implémentée comme un « environnement d'exécution » (RunTime System) multi-utilisateur et pouvait servir de système d'exploitation pour l'utilisateur. Il n'était même plus nécessaire de quitter TECO ! HP, ayant racheté Compaq/DEC, fournit toujours TECO avec VMS.

## Histoire
### Daniel Murphy

Daniel Murphy est hacker au MIT de 1961 à 1965, Daniel L. Murphy est le créateur de l'éditeur de texte TECO.
Il développe TECO entre 1962 et 1963, en langage machine pour le système DEC PDP-1. TECO fut ensuite amélioré par de nombreux hackers, y compris Richard Stallman et porté sur d'autres systèmes. Les contributions majeures apportées par RMS dans le milieu des années 1970 en font le premier moteur d'emacs.
Mais les différentes implémentations d'Emacs sur des machines Lisp vont convaincre Richard Stallman d'abandonner TECO pour Lisp
Daniel Murphy participera ensuite au développement du système d'exploitation propriétaire TENEX, d'abord chez BBN Technologies puis pour DEC (système TOPS-20).
Dans un texte publié fin 2009, Dan Murphy précise dans sa conclusion que TECO fut développé selon les principes du logiciel libre. Les hackers pouvaient exécuter le programme, pour tous les usages; ils pouvaient étudier son fonctionnement, et l'adapter à leurs besoins; le code source était disponible. Ils pouvaient redistribuer des copies à l'identique ou des versions modifiées. Le logiciel libre était la norme du milieu hacker, un concept formalisé plus tard par Richard Stallman.

### Développement

TECO a été développé à l'origine au MIT vers 1963 par Daniel Murphy, afin de l'utiliser sur deux ordinateurs PDP-1 appartenant à deux départements différents, tous deux abrités dans le même Bâtiment 26. Sur ces machines, le processus normal de développement impose l'utilisation d'un Friden Flexowriter pour préparer le code source hors-ligne, sur une bande continue de papier perforé. Les programmeurs des gros mainframes IBM avait coutume de perforer leur code source sur des cartes perforées, en utilisant des perforatrices qui écrivaient des caractères matriciels lisibles par les humains en haut de chaque carte en même temps qu'elles la perforaient avec le langage machine. Ainsi, les programmeurs IBM pouvaient lire, insérer, effacer ou déplacer des lignes de code en manipulant directement les cartes. La bande perforée continue n'offrait pas un tel confort, et nécessité fut mère de l'édition en ligne.
Un des tout premiers éditeurs pour PDP-1 fut (officiellement !) nommé Expensive Typewriter (« Machine à écrire coûteuse »). Écrit par Stephen D. Piner, il s'agissait du plus rudimentaire des éditeurs ligne par ligne que l'on puisse imaginer, ne disposant pas même de la fonctionnalité « rechercher/remplacer ». Son nom a été choisi comme clin d'œil ironique à un précédent éditeur, plutôt lourd, appelé Colossal Typewriter (« Machine à écrire colossale »). Même à cette époque, l'édition en ligne permettait de gagner du temps dans le cycle de débogage. Un autre programme dans la même veine, Expensive Desk Calculator, fut écrit par les hackers du PDP-1.
L'objectif initialement fixé pour TECO était d'utiliser plus efficacement le PDP-1. Comme envisagé dans le manuel, plutôt que d'effectuer l'édition de façon « coûteuse » en restant devant une console, l'opérateur pouvait examiner le texte fautif et préparer une « bande corrective », décrivant les opérations d'édition à effectuer sur le texte. Il lui suffisait ensuite de donner les bandes contenant les sources et la correction au PDP-1, via le lecteur de bande haute-vitesse (200 caractères par seconde). En exécutant TECO, la bande corrigée était alors immédiatement perforée avec la perforatrice rapide (60 caractères par seconde). Il restait alors juste à charger et à exécuter l'assembleur, sans que du temps soit perdu pour l'édition en ligne.
Les opérations de recherches sophistiquées (pour cette époque) de TECO ont été motivées par le fait que les bandes produites hors ligne par la Flexowriter ne disposaient pas de numéros de ligne. Par conséquent, l'emplacement des éditions devaient être précisées par le contexte plutôt que par un numéro de ligne. Les différentes structures de contrôle de TECO (boucles et conditions, faisant de TECO un langage Turing-complet) furent introduites afin de fournir des capacités de description suffisantes à la bande corrective. La syntaxe concise minimisait le nombre de touches nécessaires pour préparer la bande corrective.
La bande corrective était en réalité un programme, qui nécessitait un débogage comme n'importe quel autre programme. Les pièges de la plus simple des opérations globales de rechercher/remplacer devinrent évidents. En pratique, l'édition avec TECO était effectuée en ligne, comme elle était faite avec Expensive Typewriter (bien que TECO soit certainement un éditeur bien plus complet en termes de fonctionnalités, rendant l'édition nettement plus efficace). La version initiale du PDP-1 n'avait pas d'afficheur vidéo. La seule façon d'observer l'état du texte durant le processus d'édition était d'entrer des commandes permettant d'imprimer le texte (ou une sous-partie) sur la console télétype.

## Exemple de code TECO

| Code | Explication |
| ER fichier $ | Ouvrir un fichier en lecture |
| [ q ... ] q | Empiler ... dépiler dans le registre Q (qui peut contenir des nombres, du texte ou du code) |
| < code > | Itérer le code. Il existe des instructions équivalentes aux next, break, continue... |

## Exemple de programmes TECO

Le programme qui suit est un tri appliqué au tampon de texte courant, basé sur le premier caractère de chaque ligne, repris du PDP-11 TECO User's Guide. Deux versions, la « goto » et la « structurée », sont présentées. TECO ignore la casse et les espaces (à l'exception des tabulations, la tabulation étant une commande d'insertion).

### Exemple 2
## Anecdotes

* La plupart des langages de commande DEC interprétaient la commande MAKE nomfichier comme une demande de démarrage de TECO et de création du fichier appelé "nomfichier". De nombreux (sinon la plupart) des TECO répondaient à la commande MAKE LOVE (« faire l'amour ») par le message Not war? (« Pas la guerre ? »).
* TECO était considéré comme l'un des premiers langages « Write-Only » (écriture uniquement). Cela signifie que vous pouvez tout à fait écrire un programme TECO, mais il est bien peu probable que vous puissiez décrire ce que fait un programme arbitraire en TECO juste en le regardant. Plus récemment, d'autres langages, tels que APL, Perl ou Forth, ont aussi acquis cette réputation bien peu flatteuse.
* TINT est une des premières implémentations TECO. Son nom est un acronyme récursif qui signifie en anglais « TINT Is Not TECO » (littéralement, « TINT n'est pas TECO»). Il s'agit d'après le site GNU$^,$ du premier acronyme récursif utilisé dans le milieu hacker.
* L'outil de macro pour la ligne de commande TECO s'appelait MUNG. Il exécutait le programme ou la macro TECO spécifiée sur le fichier spécifié. MUNG est l'un des tout premiers acronymes récursifs, signifiant MUNG Until No Good.
* Lorsque le VAX fut introduit, DEC annonça un éditeur de texte plein écran plus « convivial », EDT, pour remplacer TECO. Quand les utilisateurs se plaignaient que leur éditeur favori n'avait plus de support, ils s'entendaient dire que « TECO n'est pas un éditeur de texte, c'est un langage de programmation ».