SUPDUP Grafik Uzantısı
Network Working Group
Request for Comments: 746
Yazar: Richard Stallman (MIT-AI)
Tarih: 17 Mart 1978
NIC: 43976
SUPDUP Grafik Uzantısı
... SUPDUP’u, terminal ekranında yalnızca metnin değil aynı zamanda çizimlerin de görüntülenmesine izin verecek şekilde genişletir. Sürekli olarak, Crispin tarafından RFC 734 "SUPDUP Protocol" içinde açıklanan SUPDUP protokolünün belgelerine atıfta bulunuyoruz.
Bu uzantı hiçbir zaman uygulanmadığından, muhtemelen bazı sorunlar içermektedir. Öneriler istemek ve birinin bunu çalışır hale getirmeyi denemesini teşvik etmek amacıyla yayımlanmaktadır.
Başlıca kazanımlar şunlardır:
- Basit şeyleri yapmak kolaydır.
- Sunucu ana makinesindeki herhangi bir program, herhangi bir zamanda resim çıktısı üretmeye başlayabilir. Özel bir hazırlık gerekmez.
- Ek ağ bağlantılarına ihtiyaç yoktur. Grafik komutları normal metin çıktı bağlantısından geçer.
- Aslında ağ ile doğrudan bir ilişkisi yoktur. Yerel olarak bağlanmış akıllı görüntüleme terminalleriyle, terminalden bağımsız bir biçimde kullanılmaya uygundur; bu da programların yerel mi yoksa uzak mı kullanıldıklarını bilmesine gerek olmadığı anlamına gelir. Grafik çıktısının ifade edilmesi için, hedefi ne olursa olsun, evrensel bir araç olarak kullanılabilir. Programlar, ağ dışı terminaller için çok az kullanım kolaylığı kaybıyla bunu kullanacak şekilde yazılabilir ve otomatik olarak ARPA ağı üzerinden de kullanılabilir hale gelir.
- Çıktının kaybolması (örneğin kullanıcı tarafından yazılan bir "silence" komutu nedeniyle) kullanıcı ana makinesini karışık bir duruma sokmaz.
- Terminalin, görüntülenen resmin iç "anlamsal" yapısını hatırlayabilmesi gerekmez; yalnızca çizgileri ve noktaları, hatta sadece bir bit matrisindeki bitleri hatırlaması yeterlidir.
- Sunucu ana makinesinin, standart bir dili terminalin kullanabileceği bir dile dönüştürmek için terminale bağımlı keyfi yazılımları çağırabilmesi gerekmez. Bunun yerine, tüm programlanabilir terminallerin kolayca yorumlayabileceği standart bir dil tanımlanır. Terminaller arasındaki büyük farklar, çıktı akışına yeterli miktarda fazladan bilgi eklenmesini sağlayan kurallarla ele alınır; böylece terminaller bir komuttan diğerine kullanılabilir biçimde hatırlayamasa bile, ihtiyaç duydukları bilgi gerektiği anda mevcut olur.
Ağ grafikleriyle ilgilenenlerin, temel amacı aynı olan fakat varsayımları oldukça farklı olan Multics Graphics System hakkında okumaları önerilir (her ne kadar bu önerideki bazı özelliklere esin kaynağı olmuş olsa da).
SUPDUP Başlangıç Görüşmesi
Yeni bir isteğe bağlı değişken olan SMARTS değişkeni tanımlanır. Bu değişken, SUPDUP kullanıcı sürecinin SUPDUP sunucu sürecine gönderdiği diğer değişkenleri takip etmelidir. Bu değişkenin sol yarı sözcüğündeki bit ve alanlara %TQ ile başlayan adlar verilir. Sağ yarıdaki bit ve alanlara ise %TR ile başlayan adlar verilir. SMARTS değişkeninin tamamı grafik protokolü ile ilgili değildir, ancak büyük kısmı ilgilidir. Terminal grafik çıktısını destekliyorsa %TQGRF biti 1 olmalıdır.
Grafik Protokolünü Başlatma
Grafik modu, çıktı akışında yer alan bir %TDGRF (sekizlik 231) kodu ile başlatılır. Ardından gelen 0–177 aralığındaki karakterler grafik protokolüne göre yorumlanır. 200 veya daha büyük herhangi bir karakter (bir %TD kodu) grafik modundan çıkar ve ardından normal anlamına göre yorumlanır. Böylece sunucu terminalin grafik modunda olduğunu unutsa bile, terminal uzun süre karışık bir durumda kalmaz.
Grafik moduna girildiğinde, çıktı akışı her biri kendi argümanlarıyla takip edilen bir dizi grafik protokol komutu içermelidir. Komut olarak sıfır kullanılması hiçbir işlem yapmayan bir komuttur. Grafik modundan bilinçli şekilde çıkmak için en iyi yöntem %TDNOP kullanmaktır.
Koordinatlar
Grafik modu, grafik modunda kalındığı sürece bir grafik komutundan diğerine hatırlanan bir imleç konumu kullanır. Grafik modu imleci, normal yazı çıktısında kullanılan imleçle aynı değildir: grafik protokol komutları normal yazı çıktısı imlecini etkilemez ve normal yazı çıktısı da grafik modu imlecini etkilemez.
Ayrıca grafik imlecinin konumu karakterler yerine noktalar (dots) cinsinden ölçülür. Bu iki birim (nokta ve karakter) arasındaki ilişki, terminalin SMARTS değişkenindeki %TQHGT ve %TQWID alanlarında tutulur; bu alanlar bir karakterin kapladığı kutunun nokta cinsinden yüksekliğini ve genişliğini içerir.
Ekranın herhangi bir yöndeki boyutu, karakter kutusunun uzunluğunun ekranda o yönde bulunan karakter sayısıyla çarpılması olarak varsayılır. Eğer ekran gerçekte bundan daha büyükse, fazlalık kısım görünür alanın parçası olabilir veya olmayabilir; program bunun varlığını bilmez.
İmleç konumunun her koordinatı 14 bitlik işaretli bir sayıdır ve sıfır noktası ekranın merkezindedir (ekran boyutu nokta cinsinden çift sayıysa, görünür negatif noktalar iki'nin tümleyeni biçimine uygun olarak pozitiflerden bir birim daha uzağa uzanır). Koordinatların aşırı büyük değerleri ekran dışında kalır ancak yine de anlamlıdır.
Alternatif bir mod da tanımlanmıştır; bazı terminaller bunu destekleyebilir ve bu modda sanal koordinatlar kullanılır. Belirtilen koordinatlar yine 14 bitlik işaretli sayılardır, ancak terminal üzerindeki fiziksel noktalar yerine +4000 sekizlik değeri ekranın üstünü veya sağ kenarını, -4000 sekizlik değeri ise ekranın altını veya sol kenarını temsil eder. Terminal, bu sanal koordinatları ekran noktalarına ölçeklemekten sorumludur.
Tüm terminallerin bu yeteneğe sahip olması gerekmez; SMARTS değişkenindeki %TQVIR biti bu özelliğin var olduğunu gösterir. Sanal koordinatları kullanmak için sunucu bir %GOVIR göndermelidir; tekrar fiziksel koordinatlara dönmek için %GOPHY gönderilmelidir. Terminal her durumda anahtarın durumunu hatırlamaya çalışmak zorunda olsa da, bu komutlar belirli aralıklarla —örneğin grafik moduna girildiğinde— tekrarlanmalıdır. Bu tekrar, bazı çıktılar kaybolduğunda sınırsız bir karışıklığın oluşmasını önler.
Sanal koordinatlar kare temeline dayanır. Terminaldeki görünür alan kare değilse, standart sanal aralık ekranın merkezini çevreleyen bir kareye karşılık gelmeli ve görünür alanın geri kalanı normalde görünür aralığın biraz ötesindeki sanal koordinatlara karşılık gelmelidir.
Grafik protokol komutları iki tür imleç konumu argümanı alır: mutlak ve göreli.
Adres argümanı alan komutların genellikle her adres türü için birer biçimi vardır.
- Bir göreli adres, eski imleç konumundan olan iki kaymadan oluşur: delta-X ve delta-Y. Her kayma 7 bitlik iki'nin tümleyeni sayısıdır ve bir karakter yer kaplar.
- Bir mutlak adres, her biri 14 bit uzunluğunda olan iki koordinattan oluşur ve iki karakter yer kaplar (her biri 7 bit taşır).
X koordinatı veya kayması Y’den önce gelir. Her iki adres türü de, eğer sonraki adres göreli ise kullanılacak olan çalışır durumdaki imleç konumunu ayarlar.
Nesnelerin bazı kısımlarının ekran dışına çıkması tamamen geçerlidir. Bunun nasıl ele alındığı çok önemli değildir; yeter ki felaket olmasın, imleç konumunun hesaplanmasını bozmasın ve imleç tekrar ekran içine geldiğinde daha sonra çizilecek nesnelerin hatalı çizilmesine neden olmasın.
Ekrandaki belirli bir noktanın mutlak mı yoksa göreli adresle mi belirtildiği önemli değildir. Çizildikleri sıra da önemli değildir. Her nesne diğerlerinden bağımsızdır ve onu oluşturan komutun belirttiği konumda bulunur.
Göreli adresler veri sıkıştırma amacıyla sağlanmıştır; programların mutlak ve göreli adresler arasında dönüşüm yapmasını önlemek için değildir. Ayrıca bir nesne taşındığında veya silindiğinde birkaç nesnenin birlikte yer değiştirmesine neden olmak için de tasarlanmamıştır. Terminallerin, çizildikten sonra nesneler arasındaki herhangi bir ilişkiyi hatırlaması beklenmez.
Grafik moduna girildiğinde imleç konumu son çıkıştan kalan değeri korusa da, kaybolan çıktının etkilerini sınırlamak için uzun bir aktarım başlamadan önce %GOMVA komutuyla yeniden başlatılması akıllıca olacaktır.
Komutlar
Bir nesne çizmeye yönelik komutların her zaman aynı nesneyi silen karşılıkları vardır.
- Bir bit matrisi terminalinde, silme ve çizme neredeyse aynı işlemlerdir.
- Bir display list terminalinde, silme işlemi belirtilen özelliklere sahip bir nesneyi görüntü listesinden arayıp silmeyi içerir.
%TOERS biti ayarlı olan herhangi bir terminalin grafik nesnelerini silebildiği varsayılır.
Nesne çizmeye yönelik komutlar 100 ile 137 arasında yer alırken, silmeye yönelik komutlar paralel bir dizide 140 ile 177 arasındadır. Diğer işlemler 100’ün altındaki komut kodlarını kullanır. Komut kodundaki 20 biti, argüman olarak hangi tür adreslerin kullanıldığını gösterir:
- 20 biti ayarlıysa, mutlak adresler kullanılır.
Grafik komutlarının adları %GO ile başlar.
Karakter Çıktısı
Grafikler çoğu zaman karakterler kullanır. %GODCH komutunu, sıfır ile sonlandırılan bir karakter dizisi takip eder. Karakterler tek konumlu yazdırma karakterleri olmalıdır.
Çoğu terminalde bu, ASCII grafik karakterleriyle sınırlıdır. TTYOPT değişkeninde %TOSAI ayarlı olan terminaller tüm 0–177 karakterlerine izin verir.
Karakterler mevcut grafik imleç konumunda çıktılanır (ilk karakterin dikdörtgeninin sol alt köşesi oraya yerleştirilir). Karakterler çizildikçe imleç hareket eder.
- Normal yazı çıktısı imleci etkilenmez.
- Çizim konumu normal metin satırları ve sütunları arasında olabilir.
%GOECH komutu %GODCH ile benzerdir ancak belirtilen karakterleri siler.
Bir bit matrisi terminalinde karakter konumlarından oluşan bir satırı metni tekrar belirtmeden temizlemek için dikdörtgen komutu kullanılabilir.
Örnek
%TDRST ; Tüm grafik modlarını sıfırla
%TDGRF ; Grafik moduna gir
%GOCLR ; Ekranı temizle
%GOMVA xx yy; İmleci ayarla
%GODLA xx yy; Buradan bir çizgi çiz
<< her çizgi için son iki komutu tekrarla >>
%TDNOP ; Grafik modundan çık
Grafik Girişi
SMARTS değişkeninin sağ yarısındaki %TRGIN biti, terminalin istek üzerine imleç konumu biçiminde grafik girişi sağlayabildiğini gösterir.
Bir %GOGIN komutu göndermek terminalden imleç konumunu okumasını ister. Bu komutun ardından, yanıta eklenecek ve yanıtın istekle ilişkilendirilmesini sağlayacak bir argüman karakter gelmelidir.
Yanıt biçimi:
- Bir Top-Y karakteri (kod 4131)
- Yanıt kodu karakteri
- Bir mutlak imleç konumu
Top-Y normalde giriş olarak anlamlı olmadığından, %GOGIN yanıtları klavye girişinden güvenilir biçimde ayırt edilebilir.
İstenmeden gönderilen grafik girişleri Top-Y yerine Top-X kullanılarak gönderilmelidir; böylece program bunları ayırt edebilir. Yanıt kodu yerine terminal, giriş aygıtında birden fazla düğme varsa kullanıcı tarafından basılan düğmelerin bir kodlamasını göndermelidir.
Kümeler
Terminaller "nesne kümesi" kavramını tanımlayabilir. En fazla 200 farklı küme bulunabilir ve her biri keyfi sayıda nesne içerebilir.
Herhangi bir anda bir küme seçilmiş durumdadır:
- Çizilen nesneler o kümenin parçası olur.
- Silinen nesneler o kümeden çıkarılır.
Seçili olmayan bir kümedeki nesneler o kümeye geçmeden silinemez.
Bir küme silinmeden geçici olarak görünmez yapılabilir ve daha sonra anında yeniden görünür hale getirilebilir. Tüm kümeler ayrıca taşınabilir.
Her kümenin merkez olarak tanımlanan bir noktası vardır. Kümedeki tüm nesneler bu merkeze göre hatırlanır. Merkezin taşınması kümedeki tüm nesneleri aynı anda taşır. Bu nedenle bir kümeyi kullanmadan önce program merkezini mutlak bir konuma taşımalıdır.
Bir küme merkezinin taşınması nesnelerin ekran dışına çıkmasına neden olabilir. Bu kabul edilebilir bir durumdur; yeter ki konumları unutulmasın ve hareket tersine çevrildiğinde doğru şekilde geri gelsinler.
Kümeler bit matrisi terminallerinde kolay uygulanamaz, bu nedenle bu terminaller küme işlemlerini yok saymalıdır (belki yanıp sönme ile ilgili sınırlı bir yorum dışında). SMARTS değişkenindeki %TQSET biti, terminalin birden fazla küme uyguladığını gösterir.
Birden fazla küme destekleyen terminallerde %GOCLR komutu:
- Tüm kümeleri boşaltmalıdır
- Tüm kümeleri görünür olarak işaretlemelidir (her biri için bir %GOVIS gerçekleştirilir)
Aynı durum %TDCLR SUPDUP komutu için de geçerlidir. Bu nedenle ekranı temizleyerek başlayan herhangi bir programın tüm kümelerin durumlarını ayrıca başlatmasına gerek kalmaz.
SUPDUP Grafik Uzantısı
Yanıp Sönme
Bazı terminaller ekrandaki nesneleri yanıp söndürme yeteneğine sahiptir. %GOBNK komutu mevcut kümenin yanıp sönmesini sağlar. Kümedeki tüm nesneler hemen yanıp sönmeye başlar ve yeni nesneler de yanıp söner. %GOVIS veya %GOINV, %GOBNK etkisini iptal ederek kümedeki nesneleri kalıcı olarak görünür ya da görünmez yapar. %TQBNK, terminalin ekranda yanıp sönmeyi desteklediğini gösterir.
Ancak bir sorun vardır: bazı akıllı bit matrisi terminalleri, nesneler çizilmeden önce önceden bildirilmeleri koşuluyla birkaç nesneyi yanıp söner biçimde uygulayabilir. Ancak %GOBNK komutunun keyfi kullanımını destekleyemezler.
Bu sorunun çözümü, %GOBNK kullanımına ilişkin bir kuraldır. Küme işlemleri için basitleştirilmiş tanımlarla birlikte, bu kural yanıp sönmeyi destekleyen herhangi bir terminalde güvenilir şekilde çalışan komutlar vermeyi mümkün kılar.
%TQBNK ayarlı fakat %TQSET ayarlı olmayan bir terminalde %GOBNK, bundan sonra çizilen nesnelerin yanıp söner biçimde çizilmesine neden olacak şekilde tanımlanır. %GOSET bunu iptal eder ve ardından gelen nesneler yanıp sönmeden çizilir. Bu durum %GOSET argümanından bağımsızdır.
Böylece bir programın %TQBNK özelliğine sahip tüm terminallerde —kümeleri gerçekten desteklesin ya da desteklemesin— çalışabilmesinin yolu şudur: yanıp sönen bir resim yazmak için normal kümeniz dışında bir küme seçin (küme 1 uygun olacaktır), %GOBNK komutunu verin, resmi çıktılayın ve tekrar küme 0’ı seçin. Siz küme 0’da çizimler yaparken resim yanıp sönecektir. Daha fazla yanıp sönen nesne çizmek için tekrar küme 1’i seçmeli ve yeniden %GOBNK yapmalısınız. Yalnızca küme 1’i yeniden seçmek yeterli olmayacaktır; çünkü kümeleri gerçekten desteklemeyen terminaller yanıp sönen nesnelerin "küme 1’de" olduğunu ve "küme 0’da" olmadığını hatırlamaz.
Yanıp sönen bir nesnenin silinmesi, yanıp sönmeyi uygulayan herhangi bir terminalde onun kaybolmasına neden olmalıdır. Bit matrisi terminallerinde yanıp sönme MUTLAKA XOR işlemi kullanılarak yapılmalıdır; böylece yanıp sönmeyen arka plan bozulmaz.
Kümeleri desteklemeyen fakat yanıp sönmeyi destekleyen bir terminalde %GOCLS, tüm yanıp sönen nesneleri silmelidir. Böylece tüm yanıp sönen nesneleri silme kuralı şu olur: küme 1’i seç, %GOCLS yap ve tekrar küme 0’ı seç. Bu tüm terminallerde istenen etkiyi sağlar. %GOCLS için yapılan bu tanım küme desteklemeyen terminallerde sorun çıkarmaz; çünkü %GOCLS zaten onlar için başka türlü anlamlı olmayacaktır.
Yanıp sönen nesnelerin yanıp sönmesini durdurup görünür kalmalarını sağlamak, kümeleri destekleyen bir terminalde %GOVIS kullanılarak mümkündür. Ancak genel olarak bunu yapmanın tek yolu, onları silip kalıcı olarak yeniden çizmektir.
Dikdörtgenler ve XOR
Bit matris terminalleri, görüntü listesi terminallerinin kopyalayamayacağı kendi işlemlerine sahiptir. Her şeyden önce XOR kipine sahiptirler; bu kipte çizilen nesneler, üst üste geldiklerinde mevcut nesneleri iptal eder. Bu kipte bir nesneyi çizmek ile onu silmek aynı işlemdir. Tüm %GOD.. komutları, karşılık gelen %GOE.. komutlarıyla AYNI ŞEKİLDE davranır.
XOR kipine %GOXOR ile girilir ve %GOIOR ile çıkılır. Görüntü listesi terminalleri her iki komutu da yok sayacaktır. Bu nedenle program, XOR kipinde bile çizme komutlarını silme komutlarından ayırmaya devam etmelidir. %TQXOR, XOR kipini gerçekleştiren bir terminali gösterir. XOR kipi ayarlandığında, grafik kipinden çıkılıp yeniden girilse bile ayarlı kalır. Ancak çıktı kaybolma ihtimaline karşı zaman zaman yeniden belirtilmesi akıllıca olur.
Bit matris terminalleri ayrıca dolu dikdörtgenler de çizebilir. Böylece %GODRR, %GODRA, %GOERR ve %GOERA komutlarını uygulayabilirler. Bir dikdörtgen, mevcut imleç konumu köşelerden biri kabul edilerek ve karşı köşenin adresi verilerek tanımlanır. Bu, göreli bir adresle ya da mutlak bir adresle yapılabilir. %TQREC biti, terminalin dikdörtgen komutlarını uyguladığını gösterir.
Elbette yeterince gelişmiş bir bit matris terminali, bit matrisiyle birlikte gereksiz görünen görüntü listelerini hatırlayarak ve bir %GOMSR veya %GOVIS yapıldığında matrisi güncellemek için bunları kullanarak bir görüntü listesi terminalinin tüm özelliklerini sağlayabilir. Ancak çoğu bit matris terminalinin bu kadar ileri gitmesi beklenmez.
Birden Fazla Sürecin Birbirine Müdahale Etmeden Tek Bir Terminalde Nasıl Çizim Yapabileceği
Girdi akışı durumu bilgisini, bir komutun içeriğinde bulunanlar dışında herhangi bir komutun davranışını etkileyebilecek her türlü bilgi olarak tanımlarsak, birden fazla sürecin her birinin kendi girdi akışı durum değişkenleri kümesine sahip olması gerekir.
Bu, %GOPSH komutunun sağlanmasıyla gerçekleştirilir. %GOPSH komutu, grafik kipinden çıkıldığında geri yüklenmek üzere bu tür tüm girdi akışı bilgilerini kaydeder. Süreçler kesintiye uğramadan karakter blokları göndermeyi düzenleyebiliyorsa, her bloğa bir %GOPSH ile başlayıp ardından girdi akışı durum bilgilerini istedikleri gibi başlatan komutları verebilirler. Her grafik çıktı bloğu, terminali diğer tüm süreçler için "normal" durumunda bırakan bir %TDNOP ile sonlandırılmalıdır; bu aynı zamanda %GOPSH komutunun yığına eklediği bilgiyi de geri çıkarır.
Girdi akışı durum bilgisi şunlardan oluşur:
- İmleç konumu
- XOR kipinin durumu (varsayılan: KAPALI)
- Seçili küme (varsayılan: 0)
- Kullanılan koordinat birimi (fiziksel noktalar veya sanal) (varsayılan: fiziksel)
- Çıktının görüntü ekranına mı yoksa bir sabit çıktı aygıtına mı gönderildiği (varsayılan: ekran)
- Ekranın hangi bölümünün kullanımda olduğu ("Ekranın Yalnızca Bir Bölümünü Kullanma" bölümüne bakın) (varsayılan: tamamı)
Girdi akışı durumunun her birimi, bu bilginin varlığını bilmeyen programlar için bir varsayılan değere sahiptir. Bunun istisnası imleç konumudur; çünkü tüm programlar onun var olduğunu bilmek zorundadır. Bir %TDINI veya %TDRST komutu tüm değişkenleri varsayılan değerlerine ayarlamalıdır.
Mevcut kümenin durumu (görünür olup olmadığı ve merkezinin nerede olduğu) girdi akışı durum bilgisinin bir parçası değildir; çünkü öyle olsaydı bunun ne anlama geldiğini söylemek zor olurdu. Ayrıca mevcut küme numarası girdi akışı durum bilgisinin bir parçasıdır, bu nedenle farklı süreçler farklı kümeleri kullanabilir. Kümelerin süreçlere tahsisi sunucu ana bilgisayarın kendi işidir.
Ekranın Yalnızca Bir Bölümünü Kullanma
Bazen ekranın bir bölümünü resim, bir bölümünü de metin için kullanmak istenir. Bu durumda metni silmeden resmi temizlemek istenebilir. Görüntü listesi terminallerinde %GOCLR bunu yapmalıdır.
Ancak bit matris terminallerinde %GOCLR, hangi bitlerin grafikler tarafından, hangilerinin metin gösterimi tarafından ayarlandığını ayırt edemez. Bu nedenle %GOLMT komutu sağlanmıştır. Bu komut iki imleç konumunu argüman olarak alır ve bir dikdörtgen belirtir. Grafiklerin bu dikdörtgenle sınırlı olacağını bildirir; böylece %GOCLR ekranın yalnızca o bölümünü temizlemelidir.
Grafik çıktısını metin çıktısından ayrı olarak hatırlayabilen ve ilkini seçici biçimde temizleyebilen bir terminalde %GOLMT komutunun bir şey yapması gerekmez; yine de bu tür terminallerde bile işlenmesi arzu edilen bir özellik olurdu.
%GOLMT, ekranı kendi aralarında paylaşan birkaç süreçten birinin bit matris terminalinde yalnızca kendi çizdiği resmi temizleyebilmesini sağlamak için kullanılabilir. Hem %GOLMT hem de farklı kümeler kullanılarak neredeyse her terminalle başarılı biçimde çalışmak mümkündür; çünkü bit matris terminalleri %GOLMT komutunu uygular ve görüntü listesi terminalleri neredeyse her zaman kümeleri uygular.
%TDCLR komutu, %GOLMT komutunu yok sayarak grafik çıktısı dahil tüm ekranı temizlemelidir.
Hatalar
Genel olarak grafik komutlarındaki hatalar yok sayılmalıdır.
Çıktı ve girdi akışları özellikle düzenlenmedikçe senkronize olmadığından, bir hatayı onu üreten programın tam olarak hangi komutun geçersiz olduğunu belirleyebileceği kadar iyi raporlamanın basit bir yolu yoktur. Bu yüzden denememek daha iyidir.
Herhangi bir tek komutun hatası olmayan, örneğin görüntü listeleri için belleğin tükenmesi gibi hatalar da mümkün olduğunca yok sayılmalıdır. Bu, izlenemeyen komutların tamamen görmezden gelinmesi anlamına GELMEZ; mümkün olduğu ölçüde uygulanmaları anlamına gelir: imlecin taşınması, kümelerin seçilmesi vb. komutlarda belirtildiği gibi yapılmalı, böylece yürütülebilecek sonraki komutlar amaçlandığı gibi yürütülür.
Genişletmeler
Bu protokol, bir resim çizme aygıtının sahip olabileceği düşünülebilecek her özelliği ele alan komutları tanımlamaya çalışmaz. Ek özellikler, ihtiyaç duyulana ve doğru şekilde nasıl yapılacağı iyi anlaşılana kadar bekletilmelidir.
Grafik Komutlarının Dosyalarda Saklanması
Bu kesinlikle yapılabilir. Grafik komutları yalnızca ASCII 0–177 karakterlerinden oluştuğundan, ASCII metin tutabilen herhangi bir dosya bir resmi çizmek için gerekli komutları da tutabilir.
Ancak bu düşündüğünüzden daha az kullanışlıdır. Bir resmi herhangi bir gevşek anlamda düzenleyen bir programın, gösterilen nesneler arasındaki ilişkileri belirleyen ve program komutlarının yorumlanmasını kontrol eden kendi iç verileri olacaktır. Bu verilerin tamamı, resmi görüntülemek için kullanılan SUPDUP grafik komutlarında kaybolacaktır.
Bu nedenle böyle her programın, programın iç veri yapısına uygun biçimde resimleri dosyalarda saklamak için kendi biçimine sahip olması gerekir. Bir dosyaya gerçek grafik komutlarının dahil edilmesi yalnızca dosyanın tek amacının görüntülenmek olduğu durumlarda yararlı olacaktır.
Komut Kodlaması
Not: Bu komutların değerleri 8 bitlik sekizlik (oktal) baytlar olarak gösterilir. Komutların argümanları küçük harfle ve köşeli ayraç içinde verilmiştir.
Çizim Komutları
101 — %GODLR
İmleçten<p>noktasına göreli çizgi çiz.102 — %GODPR
<p>konumunda göreli nokta çiz.103 — %GODRR
Köşeleri<p>ve mevcut imleç konumu olan göreli dikdörtgen çiz.104 — %GODCH
<0> <string>içindeki karakterleri mevcut grafik imleci konumundan başlayarak görüntüle.121 — %GODLA
İmleçten<p>noktasına mutlak çizgi çiz. Etkisi %GODLR ile aynıdır ancak argüman mutlak adrestir.122 — %GODPA
<p>konumunda mutlak nokta çiz.123 — %GODRA
Köşeleri<p>ve mevcut imleç konumu olan mutlak dikdörtgen çiz.
Silme Komutları
141 — %GOELR
İmleçten<p>noktasına göreli çizgiyi sil.142 — %GOEPR
<p>konumundaki göreli noktayı sil.143 — %GOERR
Köşeleri<p>ve mevcut imleç konumu olan göreli dikdörtgeni sil.144 — %GOECH
<0> <string>içindeki karakterleri mevcut grafik imleci konumundan başlayarak sil.161 — %GOELA
İmleçten<p>noktasına mutlak çizgiyi sil.162 — %GOEPA
<p>konumundaki mutlak noktayı sil.163 — %GOERA
Köşeleri<p>ve mevcut imleç konumu olan mutlak dikdörtgeni sil.
Çeşitli Komutlar
001 — %GOMVR
İmleci<p>noktasına taşı.021 — %GOMVA
İmleci<p>noktasına taşı, mutlak adres.002 — %GOXOR
XOR kipini aç (yalnızca bit matris terminalleri).022 — %GOIOR
XOR kipini kapat.003 — %GOSET
Küme seç.<n>0–177 aralığında 1 karakterlik bir küme numarasıdır.004 — %GOMSR
Küme başlangıç noktasını<p>konumuna taşı (yalnızca görüntü listesi terminalleri).024 — %GOMSA
Küme başlangıç noktasını<p>konumuna taşı, mutlak adres.006 — %GOINV
Mevcut kümeyi görünmez yap.026 — %GOVIS
Mevcut kümeyi görünür yap.007 — %GOBNK
Mevcut kümeyi yanıp söner yap. %GOINV veya %GOVIS tarafından iptal edilir.010 — %GOCLR
Tüm ekranı sil.030 — %GOCLS
Mevcut kümenin tamamını sil (görüntü listesi terminalleri).011 — %GOPSH
Grafik kipinden çıkıldığında geri yüklenmek üzere tüm girdi akışı durum bilgilerini yığına ekle.012 — %GOVIR
Sanal koordinatları kullanmaya başla.032 — %GOPHY
Koordinatları tekrar nokta birimleriyle vermeye devam et.013 — %GOHRD
Çıktıyı<n>numaralı çıktı alt aygıtına yönlendir.<n> = 0ana görüntü ekranını yeniden seçer.014 — %GOGIN
Grafik girdisi iste (fare, tablet vb.).<n>yanıta eklenecek cevap kodudur.015 — %GOLMT
Grafikleri ekranın bir alt dikdörtgeniyle sınırlar. %GOCLR yalnızca o alanı temizler. Bu, geri kalan kısmı metin için kullanacak olanlar içindir.
SMARTS Değişkeninde Grafiklerle İlgili Bitler
Not: Bu bitlerin değerleri, PDP-10 geleneğine uygun olarak sol ve sağ 18 bitlik yarım sözcük iki virgülle ayrılmış şekilde gösterilen sekizlik 36 bitlik sözcükler olarak verilmiştir.
%TQGRF — 000001,,0
Terminal grafik protokolünü anlar.%TQSET — 000002,,0
Terminal birden fazla kümeyi destekler.%TQREC — 000004,,0
Terminal dikdörtgen komutlarını uygular.%TQXOR — 000010,,0
Terminal XOR kipini uygular.%TQBNK — 000020,,0
Terminal yanıp sönmeyi uygular.%TQVIR — 000040,,0
Terminal sanal koordinatları uygular.%TQWID — 001700,,0
Karakter genişliği, nokta cinsinden.%TQHGT — 076000,,0
Karakter yüksekliği, nokta cinsinden.%TRGIN — 0,,400000
Terminal grafik girdisi sağlayabilir.%TRGHC — 0,,200000
Terminalde çıktının yönlendirilebileceği bir sabit kopya aygıtı vardır.