TECO (éditeur de texte) - TECO (text editor)

TECO
Auteur(s) original(aux) Dan Murphy
Première version 1962/63
Système opérateur OS/8 , ITS , TOPS-10 , TOPS-20 , RT-11 , RSTS/E , RSX-11 , OpenVMS , Multics
Taper Éditeur de texte

TECO (Tee'koh / / t Ï k / ), éditeur de texte et Correcteur est à la fois un caractère orienté éditeur de texte et un langage de programmation, qui a été développé en 1962 pour une utilisation sur Digital Equipment Corporation des ordinateurs, et est depuis devenu disponible sur PC et Unix . Dan Murphy a développé TECO alors qu'il était étudiant au Massachusetts Institute of Technology (MIT).

Selon Murphy, l'acronyme initial était « Tape Editor and Corrector » car « la bande de papier perforé était le seul support pour le stockage de la source du programme sur notre PDP-1. Il n'y avait pas de disque dur, de disquette, de bande magnétique (magtape), ou réseau." Au moment où TECO a été mis à disposition pour une utilisation générale, le nom était devenu « éditeur de texte et correcteur », puisque même la version PDP-1 prenait alors en charge d'autres médias. Il a ensuite été modifié par de nombreuses autres personnes et est un ancêtre direct d' Emacs , qui a été initialement implémenté dans les macros TECO.

La description

TECO n'est pas seulement un éditeur mais aussi un langage de programmation interprété pour la manipulation de texte. Les programmes arbitraires (appelés "macros") pour rechercher et modifier du texte lui confèrent une grande puissance. Contrairement aux expressions régulières , cependant, le langage était impératif , bien que certaines versions aient un opérateur "ou" dans la recherche de chaîne.

TECO n'a pas vraiment de syntaxe ; chaque caractère dans un programme est une commande impérative, envoyée à sa routine correspondante. Cette routine peut lire d'autres caractères du flux de programme (donnant l'effet d'arguments de chaîne), changer la position du "compteur de programme" (donnant l'effet de structures de contrôle), ou pousser des valeurs sur une pile de valeurs (donnant l'effet d'imbrication parenthèses). Mais rien n'empêche des opérations comme sauter au milieu d'un commentaire, puisqu'il n'y a ni syntaxe ni analyse.

TECO ignore la casse et les espaces (sauf tab , qui est une commande d'insertion).

Un essai satirique sur la programmation informatique, Real Programmers Don't Use Pascal , suggérait qu'un jeu courant pour les fans de TECO consistait à saisir leur nom sous forme de séquence de commandes, puis à essayer de comprendre ce qui se passerait. Le même essai décrivant TECO a inventé l' acronyme YAFIYGI , signifiant « Vous l'avez demandé, vous l'avez obtenu » (comme WYSIWYG ).

Impacter

L' éditeur EMACS lancé à l'origine par David A. Moon et Guy L. Steele Jr. a été implémenté dans TECO en tant qu'ensemble d'éditeur MACroS. TECO est devenu plus largement utilisé à la suite d'une implémentation PDP-6 de Digital Equipment Corporation (DEC) développée lors du projet MAC du MIT en 1964. Cette implémentation affichait en continu le texte édité visuellement sur un écran CRT et était utilisée comme éditeur interactif en ligne. Les versions ultérieures de TECO étaient capables de piloter le mode plein écran sur divers terminaux vidéo DEC RS232 tels que le VT52 ou le VT100 .

TECO était disponible pour plusieurs systèmes d'exploitation et ordinateurs, y compris l' ordinateur PDP-1 , le PDP-8 (sous OS/8), l' Incompatible Timesharing System (ITS) sur les PDP-6 et PDP-10 , et TOPS-10 et TOPS-20 sur le PDP-10 . Une version de TECO a été fournie avec tous les systèmes d'exploitation DEC ; la version disponible pour RT11 était capable de piloter l'écran graphique GT40 tandis que la version disponible pour RSTS/E était implémentée en tant que système d' exécution multi-utilisateurs et pouvait être utilisée comme environnement d'exploitation complet de l'utilisateur ; l'utilisateur n'a jamais eu à quitter TECO. La macro TECO VTEDIT (Video Terminal Editor) était couramment utilisée sur les systèmes RSTS/E et VAX avec des terminaux capables de contrôler directement le curseur (par exemple VT52 et VT100 ) pour fournir un éditeur visuel plein écran similaire en fonction à Emacs développé à l'époque .

TECO continue d'être inclus dans OpenVMS par VSI et est invoqué avec la EDIT/TECOcommande.

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 / Microsoft Windows .

Histoire

TECO a été initialement développé au MIT vers 1963 par Daniel L. Murphy pour être utilisé sur deux ordinateurs PDP-1 , appartenant à différents départements, tous deux hébergés dans le bâtiment 26 du MIT. Sur ces machines, le processus de développement normal impliquait l'utilisation d'un Friden Flexowriter pour préparer le code source hors ligne sur une bande continue de ruban de papier perforé. Les programmeurs des gros mainframes IBM perforaient habituellement leur code source sur des cartes , en utilisant des perforatrices qui imprimaient des caractères matriciels lisibles par l'homme sur le dessus de chaque carte en même temps qu'ils perforaient chaque caractère lisible par machine. Ainsi, les programmeurs IBM pouvaient lire, insérer, supprimer et déplacer des lignes de code en manipulant physiquement les cartes du jeu. Le ruban de papier perforé n'offrait pas de telles commodités, ce qui a conduit au développement de l'édition en ligne.

Un des premiers éditeurs du PDP-1 s'appelait " Expensive Typewriter ". Écrit par Stephen D. Piner, c'était l'éditeur orienté ligne le plus rudimentaire imaginable, manquant même de capacités de recherche et de remplacement. Son nom a été choisi comme un clin d'œil à un éditeur antérieur, plutôt gonflé, appelé " Colossal Typewriter ". Même à cette époque, l'édition en ligne pouvait faire gagner du temps dans le cycle de débogage. Un autre programme écrit par les pirates PDP-1 était Expensive Desk Calculator , dans la même veine.

L'objectif initial déclaré de TECO était d'utiliser plus efficacement le PDP-1. Comme envisagé dans le manuel, plutôt que d'effectuer une édition « coûteuse » en s'asseyant devant une console , il suffit d'examiner le texte défectueux et de préparer une « bande de correction » décrivant les opérations d'édition à effectuer sur le texte. On alimenterait efficacement la bande source et la bande de correction dans le PDP-1 via son lecteur haute vitesse (200 caractères par seconde). En exécutant TECO, il perforait immédiatement une bande éditée avec son perforateur haute vitesse (60 caractères par seconde). On pouvait alors procéder immédiatement au chargement et à l'exécution de l'assembleur, sans perdre de temps en édition en ligne.

Les opérations de recherche sophistiquées de TECO étaient motivées par le fait que les impressions Flexowriter hors ligne n'étaient pas numérotées par ligne. Les emplacements d'édition devaient donc être spécifiés par contexte plutôt que par numéro de ligne. Les diverses constructions en boucle et conditionnelles (qui ont rendu TECO Turing-complet ) ont été incluses afin de fournir une puissance descriptive suffisante pour la bande de correction. La syntaxe laconique a minimisé le nombre de frappes nécessaires pour préparer la bande de correction.

La bande de correction était un programme et nécessitait un débogage comme n'importe quel autre programme. Les pièges de la recherche et du remplacement mondiaux les plus simples sont vite devenus évidents. Dans la pratique, l'édition TECO était effectuée en ligne comme elle l'avait été avec Expensive Typewriter (bien que TECO était certainement un éditeur plus complet que Expensive Typewriter, l'édition était donc beaucoup plus efficace avec TECO). La version originale du PDP-1 n'avait pas d'affichage à l'écran. La seule façon d'observer l'état du texte pendant le processus d'édition était de saisir des commandes qui entraîneraient la saisie du texte (ou de parties de celui-ci) sur la machine à écrire de la console.

En 1964, une version spéciale de TECO ( TECO-6 ) avait été implémentée sur le PDP-6 au MIT. Cette version prenait en charge l'édition visuelle, en utilisant un affichage à l'écran qui montrait le contenu du tampon d'édition en temps réel, se mettant à jour au fur et à mesure qu'il changeait. Parmi les créateurs de TECO-6 figuraient Richard Greenblatt et Stewart Nelson .

Au MIT, le développement de TECO s'est poursuivi à l'automne 1971. Carl Mikkelsen avait implémenté un mode d'édition en temps réel vaguement basé sur les commandes de la console graphique TECO-6, mais fonctionnant avec les affichages de texte Datapoint -3300 CRT nouvellement installés . La mise en œuvre du tampon TECO, cependant, était terriblement inefficace pour le traitement des fonctions d'insertion ou de suppression de caractère unique - l'édition consommait 100% du PDP-10. Avec le soutien de Richard Greenblatt , à l'été 1972, Carl a réimplémenté le stockage tampon TECO et a réformé les macros en code PDP-10 natif. Comme entrer dans le mode temps réel se faisait en tapant cntl+ R, c'était ce qu'on appelait le mode contrôle-R. Dans le même temps, Rici Liknaitski a ajouté des macros de temps d'entrée ( cntl+ ]), qui fonctionnaient lorsque la chaîne de commande était lue plutôt que lorsqu'elle était exécutée. Les macros de temps de lecture ont rendu les tampons de texte auxiliaires TECO, appelés registres Q, plus utiles. Carl a élargi l'espace de noms du registre Q. Avec des macros de lecture, un grand espace de noms de registre Q et des opérations de tampon efficaces, la scène était prête pour lier chaque clé à une macro. Ces macros d'édition ont évolué vers Emacs .

L'implémentation du VMS a une longue histoire - elle a commencé sous le nom de TECO-8, implémentée dans l'assemblage PDP-8. Ce code a été traduit en assemblage PDP-11 pour produire TECO-11. TECO-11 a été utilisé dans les premières versions de VAX/VMS en mode de compatibilité PDP-11. Il a ensuite été traduit de l'assemblage PDP-11 en assemblage VAX pour produire TECO32. TECO32 a ensuite été converti avec les utilitaires de traduction binaire VEST et AEST pour le rendre compatible avec OpenVMS sur Alpha et Itanium respectivement.

Commande OS/8 MUNG

La commande OS/8 CCL MUNG a appelé TECO pour lire et exécuter la macro .TE TECO spécifiée. Les paramètres de ligne de commande facultatifs ont donné une adaptabilité supplémentaire.

En tant qu'outil de programmeur

Pendant et peu de temps après les années de l'ère des cartes perforées , il y avait des programmes sources qui avaient commencé comme basés sur des cartes perforées . Les commentaires étaient souvent une série de lignes comprenant des astérisques marginaux simples et des lignes complètes d'astérisques haut/bas. Une fois les cartes transférées en ligne, c'était une corvée de réaligner les étoiles marginales. TECO à la rescousse...

En tant que langage de programmation

L'obscurité du langage de programmation TECO est décrite dans la citation suivante de " Real Programmers Don't Use Pascal ", une lettre d'Ed Post à Datamation, juillet 1983 :

Il a été observé qu'une séquence de commandes TECO ressemble plus à un bruit de ligne de transmission qu'à un texte lisible. L'un des jeux les plus amusants à jouer avec TECO est de taper votre nom en ligne de commande et d'essayer de deviner ce qu'il fait. À peu près n'importe quelle erreur de frappe possible lors d'une conversation avec TECO détruira probablement votre programme, ou pire encore - introduira des bogues subtils et mystérieux dans un sous-programme qui fonctionnait autrefois.

Selon Craig Finseth, auteur de The Craft of Text Editing , TECO a été décrit comme un langage " en écriture seule ", ce qui implique qu'une fois qu'un programme est écrit en TECO, il est extrêmement difficile de comprendre ce qu'il a fait sans la documentation appropriée.

Malgré sa syntaxe, le langage de commande TECO était extrêmement puissant et des clones sont toujours disponibles pour MS-DOS et pour Unix .

Les commandes TECO sont des caractères (y compris les caractères de contrôle) et l'invite est un seul astérisque :

*

La touche d'échappement s'affiche sous la forme d'un signe dollar, pressée une fois pour délimiter la fin d'une commande nécessitant un argument et pressée deux fois pour lancer l'exécution des commandes saisies :

*$$

Exemple de code

Étant donné un fichier nommé hello.c avec le contenu suivant :

 int main(int argc, char **argv)
 {
     printf("Hello world!\n");
     return 0;
 }

on pourrait utiliser la session TECO suivante (en notant que l'invite est "*" et "$" est la façon dont ESC est renvoyé) pour changer "Bonjour" en "Au revoir":

*EBhello.c$$                     Open file for read/write with backup
*P$$                             Read in the first page
*SHello$0TT$$                    Search for "Hello" and print the line (pointer placed after searched string)
    printf("Hello world!\n");    The line
*-5DIGoodbye$0TT$$               Delete five characters before pointer (ie "Hello"), insert "Goodbye", and print the line
    printf("Goodbye world!\n");  The updated line
*EX$$                            Copy the remainder of the file and exit

Ces deux exemples de programmes sont un simple tri d'échange du tampon de texte actuel, basé sur le 1er caractère de chaque ligne, tiré du Guide de l'utilisateur PDP-11 TECO. Une version " goto " et " structurée " sont affichées.

Exemple 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 !

Exemple 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 !

Remarques

Les références

Liens externes

Cet article est basé en partie sur le Jargon File , qui est dans le domaine public.