**TECO** (alkujaan sanoista **T**ape **E**ditor and **CO**rrector, myöhemmin **T**ext **E**ditor and **CO**rrector) on alun perin Massachusettsin teknillisessä korkeakoulussa 1960-luvulla kehitetty tekstieditori ja myös ohjelmointikieli. Editorista on olemassa todella monia eri versioita, ja TECO onkin saattanut olla laajimmalle levinnein editori ennen vi:n sekä Emacsin tuloa (jälkimmäistä voidaan pitää TECOn suorana jälkeläisenä, koska se oli alun perin vain kokoelma TECO-makroja).

Yleistä
-------

Monimutkaisesta syntaksistaan tunnettua TECOa voidaan pitää yleiskäyttöisenä tulkattavana ohjelmointikielenä, joka on suunnattu tekstinkäsittelyyn. Sen suurin voima on kyvyssä muodostaa monimutkaisia makroja, joiden käyttämät merkkijonojen tunnistuskriteerit vetävät vertoja nykyään yleisessä käytössä oleville säännöllisille lausekkeille. TECOlle lähes jokainen merkki on komento – hienostuneempien kielten perinteisten avainsanojen sijaan käytetään yhtä tai kahta merkkiä – niinpä mikä tahansa merkkijono on periaatteessa TECO-ohjelma, vaikkakaan ei välttämättä hyödyllinen sellainen. 
(Yhtenä ajanvietteenä TECOa käyttävien keskuudessa on ollut arvailla, mitä oman nimen syöttäminen editorille tekisi jollekin tietylle muokattavana olevalle tiedostolle.)

TECOsta tuli tunnettu sen jälkeen, kun MIT:n Project MAC -tutkimuslaboratorio teki siitä toteutuksen Digital Equipment Corporationin PDP-6-tietokoneelle vuonna 1964. Kyseinen toteutus näytti muokattavan tekstin jatkuvasti kuvaputkinäytöllä, ja sitä käytettiin interaktiivisena online-editorina. (Tämä ei kuitenkaan ollut sen alkuperä eikä aiottu käyttötapakaan.) TECOn myöhemmän versiot kykenivät hyödyntämään koko ruudun moodia DEC:n erilaisilla RS232-liitännäisillä päätteillä. 

TECO on ollut saatavilla useille käyttöjärjestelmille ja tietokoneille. DEC sisällytti sen käytännössä jokaiseen käyttöjärjestelmäänsä. Yhtiön reaaliaikakäyttöjärjestelmä RT-11:n versio kykeni käyttämään GT40-grafiikkanäyttöä. RSTS/E-käyttöjärjestelmän versio puolestaan toteutettiin siten, että se oli eräänlainen käyttöjärjestelmä ihan itsessään; käyttäjän ei työtä tehdessään oikeastaan koskaan tarvinnut poistua TECOsta. Hewlett-Packard (joka osti Compaqin ja siten myös DEC:n) tarjoaa vieläkin TECOa OpenVMS-käyttöjärjestelmän mukana. 

DEC:n alun perin PDP-10-tietokoneelle jakaman TECO-version jälkeläinen on yhä saatavilla Internetissä, useiden osittaisten MS-DOS/Microsoft Windows -toteutusten lisäksi.

Historiaa
---------

Alkuperäisen TECOn kehitti Daniel L. Murphy MIT:ssä noin vuonna 1963, käytettäväksi kahdessa PDP-1-koneessa, jotka kuuluivat korkeakoulun kahdelle eri laitokselle. 

Eräs varhainen PDP-1:lle tarkoitettu editori oli (virallisesti!) nimeltään "Kallis Kirjoituskone" (*Expensive Typewriter*). Tämä Stephen D. Pinerin kirjoittama ohjelma oli yksi alkeellisimmista mahdollisista rivieditoreista: siitä puuttuivat esimerkiksi mahdollisuudet etsiä ja korvata merkkijonoja. Editorin nimi valittiin toiseen, vielä varhaisempaan ja ominaisuuksiltaan paisuneeseen, "Kolossaaliseksi Kirjoituskoneeksi" (*Colossal Typewriter*) kutsuttuun editoriin kohdistuvana vitsinä. Jopa noina aikoina, moisilla ohjelmilla, online-editointi saattoi säästää aikaa debugattaessa jotain softaa. PDP-1-hakkerit kehittivät samoissa fiiliksissä omiin tarpeisiinsa myös "Kalliin Pöytälaskimen" (*Expensive Desk Calculator*). 

TECOn alkuperäinen virallinen tarkoitus oli tehostaa PDP-1:n käyttöä. Editorin manuaalissa visioidaan, että tietokonejärjestelmän käyttäjä,
sen sijaan, että suorittaisi editointia "kalliisti" istumalla tietokoneen konsolin ääressä muokkaamassa jotain juttua pala palalta, yksinkertaisesti tutkisi virheellistä tekstiä ja laatisi tämän perusteella "korjausnauhan" (reikänauha), joka määrittelisi tekstiin tarvittavat editointioperaatiot. Tämän jälkeen käyttäjä syöttäisi alkuperäisen tekstin sisältävän nauhan sekä korjausnauhan tietokoneeseen sen nopean (200 merkkiä/s) reikänauhanlukijan kautta. TECOa ajava tietokone lävistäisi uuden, editoidun ja korjatun nauhan nopealla lävistäjällään (60 merkkiä/s). Tämän jälkeen käyttäjä voisi heti ladata ja ajaa assemblerin, tuhlaamatta aikaa online-editointiin. 

TECOn tuolloin hienostuneet merkkijonon etsintäoperaatiot syntyivät pitkälti sen vuoksi, että Flexowriter-kaukokirjoittimen tulosteet eivät olleet rivinumeroituja, vaan tekstin editointia vaativat kohdat piti määritellä kontekstin avulla. TECOn erilaiset silmukka- ja ehtorakenteet sisällytettiin kieleen, jotta korjausreikänauhojen määrittelyt voitaisiin saada tarpeeksi kuvaaviksi ja tarkoiksi. Kielen vaatimaton syntaksi vähensi korjausnauhan laatimista varten tarvittavaa näppäilyä.

Toisaalta korjausnauhan sisältö oli ohjelma ja vaati debuggausta siinä missä muutkin ohjelmat. Yksinkertaisimpienkin globaalien *etsi-ja-korvaa* -operaatioiden ongelmat 
tulivat pian ilmeisiksi. Käytännössä TECOa käytettiin lopulta samaan tapaan kuin varhaisempaa "Kallista Kirjoituskonetta", eli online-editointiin (vaikkakin editointi monipuolisemman TECOn avulla oli luonnollisesti huomattavasti tehokkaampaa). Alkuperäinen PDP-1-versio ei tukenut minkäänlaista näyttöä; ainoa tapa tarkastella tekstin tilaa editoinnin aikana oli antaa komentoja, jotka tulostivat tekstin (tai sen osan) tietokoneen konsolin kirjoittimelle.

Esimerkki editoinnista TECOlla
------------------------------

Oletetaan, että meillä on tiedosto terve.c, joka sisältää tutun *Terve maailma*
-tyylisen ohjelmakoodin:

```
    int main(int argc, char **argv)
    {
        printf("Terve, maailma!\n");
        return 0;
    }

```

Haluamme muuttaa ohjelman tulostamaan "Hyvästi" "Terve"-sanan sijaan. Voisimme käyttää TECOa tähän vaikka seuraavalla tavalla (asteriski on kehote, ja dollarimerkki kuvastaa ESC-näppäimen painallusta):

```
*EBterve.c$$                     Avataan tiedosto lukemista ja kirjoittamista varten
*P$$                             Luetaan ensimmäinen sivu
*STerve$0TT$$                    Etsitään sanaa "Terve" ja tulostetaan ko. rivi
    printf("Terve, maailma!\n");    Tulostuu...
*-5DIHyvästi$0TT$$               Poistetaan "Terve", vaihdetaan tilalle "Hyvästi", ja tulostetaan rivi
    printf("Hyvästi, maailma!\n");  Tulostuu...
*EX$$                            Poistutaan TECOsta samalla tallentaen

```

Lähteitä
--------

*Tämä artikkeli perustuu osittain Jargon File -dokumenttiin (public domain).*

Aiheesta muualla
----------------

* Daniel Murphyn kotisivu (englanniksi)
* *Worlds Greatest Pathological Language: TECO* (Arkistoitu – Internet Archive) (englanniksi)
* TECO Pocket Guide (Arkistoitu – Internet Archive) (englanniksi)
* Tom Almyn TECO-sivu (englanniksi)