TECO (metin düzenleyici) - TECO (text editor)

TEKNO
Orijinal yazar(lar) Dan Murphy
İlk sürüm 1962/63
İşletim sistemi OS/8 , ITS , TOPS-10 , TOPS-20 , RT-11 , RSTS/E , RSX-11 , OpenVMS , Multics
Tip Metin düzeltici

TECO (Tee'koh / / t i k / ), Metin Düzenleyici & Düzeltici bir karakter odaklı hem metin editörü ve üzerinde kullanılmak üzere 1962 yılında geliştirilen bir programlama dili, Digital Equipment Corporation, bilgisayarlar ve yana kullanılabilir hale gelmiştir üzerine PC'ler ve Unix . Dan Murphy, TECO'yu Massachusetts Teknoloji Enstitüsü'nde (MIT) öğrenciyken geliştirdi .

Murphy'ye göre, ilk kısaltma "Teyp Düzenleyici ve Düzeltici" idi çünkü " PDP-1'imizde program kaynağının depolanması için tek ortam " zımbalanmış kağıt banttı. Sabit disk, disket, manyetik bant (magtape) yoktu), veya ağ." TECO genel kullanıma sunulduğunda, PDP-1 sürümü bile diğer medyaları desteklediğinden, adı "Metin Düzenleyici ve Düzeltici" olmuştu. Bu sonradan başka birçok kişi tarafından değiştirilebilir ve doğrudan atası olan Emacs aslen TECO makrolar uygulanmıştır.

Açıklama

TECO sadece bir editör değil, aynı zamanda metin işleme için yorumlanmış bir programlama dilidir . Metin aramak ve değiştirmek için keyfi programlar ("makrolar" olarak adlandırılır) ona büyük güç verir. Bununla birlikte, normal ifadelerden farklı olarak , bazı sürümlerde dize aramasında bir "veya" operatörü olmasına rağmen , dil zorunluydu .

TECO'nun gerçekten sözdizimi yoktur ; bir programdaki her karakter, karşılık gelen rutine gönderilen zorunlu bir komuttur. Bu rutin, program akışından daha fazla karakter okuyabilir (dize argümanlarının etkisini vererek), "program sayacının" konumunu değiştirebilir (kontrol yapılarının etkisini vererek) veya değerleri bir değer yığınına itebilir (iç içe geçmişin etkisini vererek). parantez). Ancak sözdizimi ve ayrıştırma olmadığı için bir yorumun ortasına atlama gibi işlemleri engelleyecek hiçbir şey yoktur.

TECO, büyük/ küçük harf ve boşlukları yok sayar ( bir ekleme komutu olan tab dışında ).

Bilgisayar programlama üzerine hicivli bir makale olan Real Programmers Don't Use Pascal , TECO hayranları için ortak bir oyunun adlarını bir komut dizisi olarak girmek ve sonra ne olacağını anlamaya çalışmak olduğunu öne sürdü. TECO'yu tanımlarken aynı makale , "Sen istedin , sen aldın " anlamına gelen YAFIYGI kısaltmasını türetti ( WYSIWYG gibi ).

Darbe

EMACS aslen tarafından başlatılmış editör David A. Ay ve Guy L. Steele Jr. Editör makrolar kümesi olarak TECO hayata geçirildi. TECO , 1964 yılında MIT'nin Project MAC'inde geliştirilen Digital Equipment Corporation (DEC) PDP-6 uygulamasının ardından daha yaygın bir şekilde kullanılmaya başlandı . Bu uygulama, düzenlenen metni sürekli olarak bir CRT ekranında görsel olarak gösterdi ve etkileşimli bir çevrimiçi düzenleyici olarak kullanıldı. TECO'nun sonraki sürümleri , VT52 veya VT100 gibi çeşitli DEC RS232 video terminallerinde tam ekran modunu çalıştırabiliyordu .

TECO, PDP-1 bilgisayarı, PDP-8 (OS/8 altında), PDP-6 ve PDP-10 üzerindeki Uyumsuz Zaman Paylaşım Sistemi (ITS) ve TOPS-10 dahil olmak üzere çeşitli işletim sistemleri ve bilgisayarlar için mevcuttu ve BAŞLıKLARıNıZıN-20 ile PDP-10 . Tüm DEC işletim sistemlerinde bir TECO sürümü sağlandı; RT11 için mevcut olan versiyon , GT40 grafik ekranını çalıştırabiliyorken, RSTS/E için mevcut versiyon , çok kullanıcılı bir çalışma zamanı sistemi olarak uygulandı ve kullanıcının eksiksiz işletim ortamı olarak kullanılabilir; kullanıcı hiçbir zaman TECO'dan çıkmak zorunda kalmadı. VTEDIT (Video Terminali Editör) TECO makro genellikle kullanıldı RSTS / E ve VAX direkt imleç kontrolü yapabilen terminalleri (örn sistemlerde VT52 ve VT100 eş geliştirilen benzer işlev tam ekran görsel editörü sağlamak) Emacs .

TECO dahil edilmeye devam OpenVMS VSI tarafından ve ile çağrılır EDIT/TECOkomuta.

PDP-10 için dağıtılan DEC sürümünün soyundan gelen bir sürüm, MS-DOS / Microsoft Windows ortamı için birkaç kısmi uygulamanın yanı sıra İnternet'te hala mevcuttur .

Tarih

TECO ilk olarak 1963 yılında MIT'de Daniel L. Murphy tarafından , her ikisi de MIT'nin Bina 26'sında bulunan farklı departmanlara ait iki PDP-1 bilgisayarda kullanılmak üzere geliştirildi. Bu makinelerde, normal geliştirme süreci bir Friden Flekso Yazıcı kullanımını içeriyordu. kesintisiz bir delikli kağıt bant şeridi üzerinde çevrimdışı kaynak kodu hazırlamak için. Büyük programcıları IBM ana geleneksel olarak kendi delikli kaynak kodu ile ilgili kart kullanılarak, önemli zımbalar , insanlar tarafından okunabilir baskılı nokta vuruşlu her makine tarafından okunabilen bir karakter delinmiş aynı zamanda her bir kart üst kısmı boyunca karakter. Böylece IBM programcıları, destedeki kartları fiziksel olarak manipüle ederek kod satırlarını okuyabilir, ekleyebilir, silebilir ve taşıyabilir. Delikli kağıt bant, çevrimiçi düzenlemenin gelişmesine yol açan böyle bir olanak sunmadı.

PDP-1'in ilk editörü " Pahalı Daktilo " olarak adlandırıldı . Stephen D. Piner tarafından yazılan bu kitap, hayal edilebilecek en temel satır yönelimli editördü ve arama ve değiştirme yeteneklerinden bile yoksundu. Adı, " Colossal Typewriter " adlı daha önceki, oldukça şişirilmiş bir editörde alaycı bir dürtme olarak seçildi . O günlerde bile çevrimiçi düzenleme, hata ayıklama döngüsünde zaman kazandırabilirdi. PDP-1 hackerları tarafından yazılan bir diğer program da benzer şekilde Expensive Desk Calculator idi .

TECO'nun orijinal belirtilen amacı, PDP-1'in daha verimli kullanılmasını sağlamaktı. Kılavuzda öngörüldüğü gibi, bir konsolda oturarak "pahalı" bir düzenleme yapmak yerine , hatalı metni inceleyip metin üzerinde yapılacak düzenleme işlemlerini açıklayan bir "düzeltme bandı" hazırlayacaktır. Kaynak bant ve düzeltme bandı, yüksek hızlı (saniyede 200 karakter) okuyucusu aracılığıyla PDP-1'e verimli bir şekilde beslenebilir. TECO'yu çalıştırırken, yüksek hızlı (saniyede 60 karakter) delgisiyle hemen düzenlenmiş bir kaseti deler. Daha sonra, çevrimiçi düzenlemede zaman kaybetmeden hemen montajcıyı yüklemeye ve çalıştırmaya devam edilebilir.

TECO'nun karmaşık arama operasyonları, çevrimdışı Flekso Yazıcı çıktılarının satır numaralı olmaması gerçeğiyle motive edildi. Bu nedenle, düzenleme konumlarının satır numarasından ziyade bağlama göre belirtilmesi gerekiyordu. Düzeltme bandı için yeterli açıklayıcı güç sağlamak amacıyla çeşitli döngü ve koşullu yapılar (TECO Turing'i tamamlamıştır ) dahil edilmiştir. Kısa sözdizimi, düzeltme bandını hazırlamak için gereken tuş vuruşlarının sayısını en aza indirdi.

Düzeltme bandı bir programdı ve diğer tüm programlar gibi hata ayıklama gerektiriyordu. En basit küresel arama ve değiştirme işleminin bile tuzakları çok geçmeden ortaya çıktı. Pratikte, TECO düzenlemesi, Pahalı Daktilo'da olduğu gibi çevrimiçi olarak gerçekleştirildi (TECO, Pahalı Daktilo'dan kesinlikle daha eksiksiz bir düzenleyici olmasına rağmen, bu nedenle düzenleme TECO ile çok daha verimli oldu). Orijinal PDP-1 versiyonunda ekran görüntüsü yoktu. Düzenleme işlemi sırasında metnin durumunu gözlemlemenin tek yolu, metnin (veya bölümlerinin) konsol daktilosunda yazılmasına neden olacak komutları yazmaktı.

1964'te, MIT'deki PDP-6'da TECO'nun özel bir Sürümü ( TECO-6 ) uygulandı . Bu sürüm, düzenleme arabelleğinin içeriğini gerçek zamanlı olarak gösteren ve değiştikçe güncellenen bir ekran kullanarak görsel düzenlemeyi destekledi. TECO-6'nın yaratıcıları arasında Richard Greenblatt ve Stewart Nelson vardı .

MIT'de, TECO geliştirmesi 1971 sonbaharında devam etti. Carl Mikkelsen, TECO-6 grafik konsol komutlarına gevşek bir şekilde dayanan, ancak yeni kurulan Datapoint -3300 CRT metin ekranlarıyla çalışan bir gerçek zamanlı düzenleme modu uygulamıştı. Bununla birlikte, TECO arabellek uygulaması, tek karakter ekleme veya silme işlevlerini işlemek için çok yetersizdi - düzenleme, PDP-10'un %100'ünü tüketti. İle Richard Greenblatt 'in destek 1972 yazında Carl TECO tampon belleği reimplemented ve doğal PDP-10 kod olarak makro yeniden. Gerçek zamanlı moda girmek cntl+ yazarak olduğundan R, bu kontrol-R modu olarak biliniyordu. Aynı zamanda, Rici Liknaitski , yürütüldüğünde değil, komut dizisinin okunması olarak çalışan giriş zamanı makroları ( cntl+ ]) ekledi . Okuma zamanı makroları, Q-kayıtları adı verilen TECO yardımcı metin arabelleklerini daha kullanışlı hale getirdi. Carl, Q-register ad alanını genişletti. Okuma zamanı makroları, büyük bir Q-register ad alanı ve verimli arabellek işlemleriyle, her anahtarı bir makroya bağlamak için aşama ayarlandı. Bu düzenleme makroları, Emacs'a dönüştü .

VMS uygulamasının uzun bir geçmişi vardır - PDP-8 montajında ​​uygulanan TECO-8 olarak başlamıştır. Bu kod, TECO-11'i üretmek için PDP-11 derlemesine çevrildi. TECO-11, PDP-11 uyumluluk modunda VAX/VMS'nin ilk sürümlerinde kullanıldı. Daha sonra TECO32 üretmek için PDP-11 düzeneğinden VAX düzeneğine çevrildi. TECO32 ardından OpenVMS ile uyumlu hale getirmek için YELEK ve AEST ikili çeviri programları ile dönüştürüldü Alpha ve Itanium sırasıyla.

OS/8 MUNG komutu

OS/8 CCL MUNG komutu, belirtilen .TE TECO makrosunu okumak ve yürütmek için TECO'yu çağırdı. İsteğe bağlı komut satırı parametreleri, ek uyarlanabilirlik sağladı.

Bir programcının aracı olarak

Delikli kart çağının olduğu yıllarda ve hemen sonrasında, delikli kart tabanlı olarak başlayan kaynak programlar vardı . Yorumlar genellikle tek marjinal yıldız işaretleri ve üst/alt tam yıldız işaretleri içeren bir dizi satırdı. Kartlar çevrimiçi olarak aktarıldıktan sonra, marjinal yıldızları yeniden hizalamak bir angaryaydı. TECO kurtarmaya...

Bir programlama dili olarak

TECO programlama dilinin belirsizliği, Ed Post'tan Datamation'a Temmuz 1983 tarihli bir mektup olan " Real Programmers Don't Use Pascal " dan alınan aşağıdaki alıntıda açıklanmıştır :

Bir TECO komut dizisinin, okunabilir metinden daha çok iletim hattı gürültüsüne benzediği gözlemlenmiştir. TECO ile oynamak için en eğlenceli oyunlardan biri, adınızı komut satırına yazıp ne yapacağını tahmin etmeye çalışmaktır. TECO ile konuşurken olası herhangi bir yazım hatası muhtemelen programınızı mahvedecek, hatta daha da kötüsü - bir zamanlar çalışan bir alt programda ince ve gizemli hatalar ortaya çıkaracaktır.

The Craft of Text Editing'in yazarı Craig Finseth'e göre , TECO " salt yazılır " bir dil olarak tanımlanıyor , bu da bir program TECO'da yazıldığında, uygun belgeler olmadan ne yaptığını anlamanın son derece zor olduğunu ima ediyor.

Sözdizimine rağmen, TECO komut dili son derece güçlüydü ve MS-DOS ve Unix için klonlar hala mevcut .

TECO komutları karakterlerdir (kontrol karakterleri dahil) ve bilgi istemi tek bir yıldız işaretidir:

*

Çıkış tuşu dolar işareti olarak görüntülenir, bir argüman gerektiren bir komutun sonunu tanımladıktan sonra basıldığında ve iki kez basıldığında, girilen komutların yürütülmesini başlatır:

*$$

Örnek kod

Aşağıdaki içeriğe sahip merhaba.c adlı bir dosya verildi:

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

"Merhaba"yı "Hoşçakal" olarak değiştirmek için aşağıdaki TECO oturumu kullanılabilir (istemin "*" ve "$" ifadesinin ESC'nin nasıl yankılandığına dikkat ederek):

*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

Bu iki örnek program, PDP-11 TECO Kullanıcı Kılavuzu'ndan alınan her satırın 1. karakterine dayalı olarak mevcut metin arabelleğinin basit bir değiş tokuş türüdür. Bir " goto " ve " yapılandırılmış " versiyon gösterilir.

örnek 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 !

Örnek 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 !

Notlar

Referanslar

Dış bağlantılar

Bu makale kısmen kamuya açık olan Jargon Dosyasına dayanmaktadır .