Text Editor and Corrector (TECO) について
Text Editor and Corrector(略称:TECO)は、1960年代に
マサチューセッツ工科大学(MIT)で開発された
テキストエディタです。当初は[paper] Tape Editor and COrrectorという名称でした。TECOとその派生エディタは、後に普及するviや
Emacsといった
テキストエディタが台頭する以前に広く使用されていました。特に、
EmacsはTECOのマクロ集から派生したものであり、その影響は非常に大きいです。
概要と影響
TECOは単なる
テキストエディタの枠を超え、テキスト操作のための汎用
インタプリタ型
プログラミング言語としても機能しました。その構文は非常に複雑でしたが、強力なマクロ機能を有しており、現代で言うところの
正規表現に匹敵する高度なマッチング処理が可能でした。ほとんど全ての文字にコマンドが割り当てられており、適当な文字列もTECOプログラムとして解釈されるという特徴がありました。当時のプログラマーの間では、自分の名前をコマンド列として入力した際に何が起こるかを楽しむという遊びも存在したようです。
リチャード・ストールマンは、当初TECO上で
Emacsを実装しました。その後、Multics
EmacsやGNU
EmacsはLISPおよび
Emacs Lispで実装されるようになりました。TECOを有名にしたのは、1964年にMITのProject MACでDEC PDP-6上で実装されたものです。この実装では、編集対象のテキストが画面上に継続的に表示され、対話型のオンラインエディタとして利用されるようになりました。しかし、この使い方は当初のTECOの設計とは異なり、想定されたものではありませんでした。その後、TECOはDECの端末(VT100など)でフルスクリーン表示が可能になり、より使いやすくなりました。
TECOは、PDP-1、PDP-6、PDP-10などの様々なオペレーティングシステムやコンピュータで利用されました。具体的には、
Incompatible Timesharing System (ITS)、
TOPS-10、TOPS-20などが挙げられます。また、DECの各種オペレーティングシステムに対応したバージョンも存在し、RT11用バージョンではGT40グラフィックス端末での利用、
RSTS/E|RSTS_E用バージョンでは一種のオペレーティング環境を提供し、TECO内であらゆる操作が可能でした。現在、
ヒューレット・パッカード(
コンパック経由でDECを取得)の
OpenVMSにもTECOが付属しています。
DECがPDP-10向けに配布した派生バージョンは現在でもインターネット上で入手可能であり、
MS-DOS/
Microsoft Windows環境にも(部分的に)実装した例がいくつか存在します。
歴史
TECOは
1963年頃、MITのダニエル・マーフィーによってPDP-1向けに開発されました。当時、彼が使用できたPDP-1は他の部門のもので、プログラムのソースコードを供給するには紙テープを使用する必要がありました。一方、
IBMの
メインフレームでは
パンチカードにソースコードを1行ずつ記録し、カード上端には人間が読める内容が印字されていました。これにより、
IBMのマシンではカードの並び替えや削除、挿入を手作業で行うことができました。しかし、紙テープにはそのような機能がなく、オンラインでの編集が必要となりました。
PDP-1用の初期のエディタは「高価なタイプライタ」と呼ばれていました。これはスティーブン・パイナーによって開発されたもので、ラインエディタとしての基本的な機能しか持たず、検索・置換機能も備えていませんでした。この名称は、同じくPDP-1向けに開発された「巨大なタイプライタ」と同様の皮肉です。当時のオンラインエディタは、デバッグ時間を大幅に短縮する手段でした。
TECOはPDP-1をより効率的に活用することを目的としていました。当初は、
コンソールを使ってCPU時間を占有して編集を行うのではなく、編集コマンドの紙テープを用意し、バッチ的にテキスト編集を行うことを想定していました。具体的には、編集対象の紙テープと編集コマンドの紙テープをPDP-1にセットし、TECOを実行して編集結果を再び紙テープに出力するという流れです。これにより、オンライン編集による時間の浪費を避けることができました。
TECOの当時としては洗練された検索機能は、オフラインのFlexowriter端末で行番号が印字されず、編集内容でしか場所を指定できないという事情が影響しています。各種ループ機能や条件分岐は、編集コマンドの紙テープで十分な編集機能を発揮するために必要でした(このため、TECOは言語として
チューリング完全となりました)。編集テープをなるべく短くするため、各編集コマンドはなるべく短く設定されました。
しかし、編集テープは一種のプログラムであり、他のプログラムと同様にデバッグを必要としました。そのため、バッチ的な編集という当初の目的は、ちょっとした検索・置換でもさらなるデバッグが必要になるという問題に直面しました。結局、TECOは「高価なタイプライタ」のようにオンライン編集に使われるようになりました(とは言え、TECOの方が機能が豊富で編集が容易でした)。初期のPDP-1バージョンでは画面表示がなく、編集の途中の状態を見るには、編集テープ内に編集対象テキストを
コンソールのタイプライタに印字するコマンドを挿入するしかありませんでした。
TECOの使用例
以下に、`hello.c`というファイルの内容を編集するTECOのセッション例を示します。このファイルの内容は次の通りです。
c
int main(int argc, char *argv)
{
printf("Hello world!
");
return 0;
}
この例では、"Hello"を"Goodbye"に置き換えます。TECOのセッションは次のようになります。
EBhello.c$$
P$$
SHello$0TT$$
printf("Hello world!
");
printf("Goodbye world!
");
EX$$
``はプロンプト、`$$`はESCキーのエコーです。
- - `EBhello.c$$`: バックアップ付きでファイルをリード/ライト・オープン
- - `P$$`: 最初のページを読み込む
- - `SHello$0TT$$`: "Hello"を検索し、その行を表示
- - `-5DIGoodbye$0TT$$`: 5文字削除し、"Goodbye"を挿入、その行を表示
- - `EX$$`: 編集結果をファイルにコピーして終了
TECOは
プログラミング言語としても利用可能で、その文法は独特ですが、非常に強力です。コマンドは文字(制御文字も含む)で構成され、プロンプトはアスタリスク()です。ESCキーを2回押すとコマンドが完了し、画面にはドル記号($$)で表示されます。
TECOプログラムでは、大文字と小文字は区別されず、空白は無視されます。ただし、タブは挿入コマンドであり、無視されません。
TECOプログラム例
以下に、いくつかのTECOプログラム例を示します。
例1: バッファ内の各行を行頭の文字でソートする(
Goto文を使用)。
!START! j 0aua
!CONT! l 0aub
qa-qb"g xa k -l ga 1uz '
qbua
l z-."g -l @o/CONT/ '
qz"g 0uz @o/START/ '
例2: 例1と同じことを、
構造化プログラミングで実現。
0uz
<0aub
qa-qb"g xa k -l ga -1uz '
qbua
l .-z;>
qz>
例3: TECOで記述された
Brainfuckインタプリタ。
@^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)"=^TUT8^TQPJDQT@I//QIJ@O/end/'(0A-91)"=-.+QPA"NQI+1UZQLJMRMB\
- -1J.UI'@O/end/'(0A-93)"=-.+QPA"NQI+1UZQLJMRMC\-1J.UI'@O/end/'!end!QI+1UI(.-Z)"=.=@^a/END/^c^c'C>
参考文献
TECO pocket guide. Digital Equipment Corporation, 1978. Order No. AV-D530A-TK. 17 pp. [1]
TECO 6. PDP-6 Memo No. 2, Memorandum MAC-M-191, October 29, 1964. [2]
脚注
1] : [TECO pocket guide
2] : [PDP-6 Memo No. 2
関連項目
ラインエディタ
テキストエディタの一覧
マイクロチップの魔術師
外部リンク
Dan Murphy's personal site
Pete Siemsen's TECO collection
Tom Almy's TECO page.
Introduction to the TECO syntax
TECO Information