GEOS KURSU-

C-64 ile programlama konusunda biraz tecrübeniz varsa GEOS'a geçişiniz oldukça kolay olacaktır. Programcılıkta yeniyseniz de üzülmeyin. GEOS programcılığın zor ayrıntılarından birçoğunu ortadan kaldırarak tasarımınıza konsantre olmanızı kolaylaştırır. GEOS'u anlatmaya doğallıkla adını açıklayarak başlamak gerek. GE-

OS Graphic Environment Operating System kelimelerinin kısaltılmasından oluşuyor. Yani Grafik Ortam İşletim Sistemi. Amacı daha basit bir kullanıcı arabirimi ve işletim sistemi sağlamak için grafik elementler kullanmak: Bunlar programcılıkta önemli ölçüde zaman tasarrufu sağlamanın yanı sıra uygulamaların kalitesini de artırıyor. Disk kullanımı, bit-mapped ekran manipülasyonu, menüler, ikonlar, diyalog kutuları ve yazıcı desteği gibi işleri kolaylaştırarak program sürecini daha akıcı hale getirir. GEOS'un menülerini, pencere ve başka grafik özelliklerini kullanarak program uygulamalarınızın daha kolay kullanılır cinsten olmasını sağlayabilirsiniz. GEOS aynı zamanda C-

| geos | file | | disk | select | page | options |

64 ile yapılabileceklerin alanını da genişletiyor. Disk-turbo sisteminin varlığı daha çok data yoğun programlara olanak sağlıyor. Böylelikle C-64 ile yazılabilecek programların spektrumu genişliyor.

TEMEL BİLGİLER

GEOS aşağıdaki özelliklere sahip ve kursumuzda bu özelliklerini anlatacağız: İnip çıkan menüler İkonlar Oranlı yerleştirilmiş fontlar Bu fontları kullanan dizgi (string) rutinleri Diyalog kutuları Komple grafik kütüphanesi Komple matematik kütüphanesi Uygulamalar içinde multitasking Hızlı disk ulaşımı Sayfalı dosya sistemi Komple yazıcı arabirim seti GEOS işletim sisteminin merkezi Kernal. Kernal C-64 belleğinde sürekli olarak bulunur ve çalışır. GEOS'un tüm pencere, ikon, menü ve fontlarının desteği Kernal'da bulunur. Diğer yandan deskTop GEOS Kernal'ın bir parçası değil geoWrite ve geoPaint gibi bir uygulamadır. GEOS programcılığı büyük ölçüde menü ve ikonları tanımlamak için masalar oluşturmak ve Kernal'a menü ve ikonlar aktive edildiği zaman çağırılacak rutinleri vermekten oluşmaktadır. Kullanıcının GEOS Kernal'i ile işleyen bir programa yolladığı her tür girdi - bir menüyü açmak, menüyü aktive etmek, metni girmek, mouse'u hareket ettirmek gibi- event (olay) diye adlandırılır. GEOS Kernal'ı eventleri işlemek için destek sağlar. Uygulama, event kullanıcı girdisi ile aktive edildiği zaman kullanılacak servis rutini ve menülerle ikonları tanımlamak için bir tablo sunar. GEOS Kernal bir event olduğunu belirlediği zaman uygun servis rutini çağırır. (Burada aksi belirtilmediği sürece çağırma bir altrutine atlama, return de altrutine dönüş anlamında kullanılmaktadır) Ondan sonra servis rutinleri GEOS metin, grafik, disk turbo ve başka rutinlerini istenen eylemi gerçekleştirmek için kullanırlar. Uygulamalar donanım üzerinde hala direkt kontrole sahip olabilir ama birçok durumda bu destek Kernal'a bırakılabilir. Örnek vermek gerekirse, “mouse click edildi” gibi bir sinyali uygulamaya aktarmak yerine, Kernal mouse hareketleri ve click'lerinden bir menü eventinin gerçekleştiği, bir menünün indirildiği ve seçimin yapıldığı sonucunu çıkartabilir. Kernal içinde dispatchers (çağırıcılar) denilen rutinler kullanıcının ne yaptığını görüp o işi halledecek uygun servis rutinini çağırırlar. Bu tür etkileşime event güdümlü programcılık denir. Burada bir event 1. Kullanıcı tarafından başlatılan bir eylem ya da 2. Kullanıcı tarafından tanımlanmış bir süreç anlamlarında kullanılmaktadır. Sürecin bir örneği bir saati o ana getirmek için her saniye run edilen bir rutin olabilirdi. Uygulama programcısı rutini sağlar ve GEOS Kernal'a onun ne kadar sık run edileceğini söyler. O kadar zamanın geçtiği her sefer de bir event başlatılır. Eğer kullanıcı eylemi söz konusu değilse, yalnızca GEOS Kernal kodu işliyor demektir. Bellek yeri otherPress Vektörü (bastırma vektörü) kullanıcı mouse'u herhangi bir menü ya da ikon dışında click ederse, çağırılacak rutinin adresini içerir. Bellek yeri keyVector (tuş vektörü) klavyede bir tuşa basıldığı zaman çağrılacak rutinin adresini içerir. Ondan sonra uygulama tüm tampon bellek (buffered) girdilerini return eden bir rutin çağırabilir. Bir editör gibi uygulama örneğinde, ekran bir sayfanın belli bir kısmını temsil eder. Ekran alanında mouse'un click edilmesi sayfada bir pozisyon seçilmesi anlamına gelir. Bu pozisyon daha sonra metnin girileceği ve grafiklerin çizileceği pozisyon olur. Kullanıcı mouse'u ekran alanında click ettiği zaman (menü ve ikonların dışında) adresi otherPress Vektöründe depolanmış bulunan rutin çağırılır. Rutin mouse pozisyonunu belirlemek için MouseX pozisyonu ve MouseY pozisyonu değişkenlerine bakabilir. Bir tuşa ya da birkaç tuşa birden basıldığında, Anahtar Vektördeki rutin çağırılır ve kullanıcının girdiği karakterlere dönmek için getNextChar (sonraki karakteri al) rutinini çağırabilir. Vektörler 0 noktasına getirilerek çağırılacak hiçbir rutin olmadığı gösterilir. Uygulamanın başlangıç kodu bu vektörleri uygun rutinlerin adreslerine göre ayarlamalı ya da hiç servis rutini yoksa onları 0'da bırakmalıdır.

ESS VEKTÖRÜ İLE ÇİFTE CLICK

Çifte click mouse'u arka arkaya iki kere click etme anlamına gelir. Bu işlemin bir ikon üzerinde yapılmasını ikonlara geldiğimizde göreceğiz. Burada otherPress Vektör ile çifte click konusundan söz edeceğiz. GEOS Kernal'da bir çifte click şu şekilde gerçekleştirilmektedir. Mouse ekran alanı üzerinde ilk defa click edildiğinde otherPress Vektörü çağırılır. Servis rutinin bir parçası olarak, değişkeninin değerini kontrol eder ve eğer 0 ise, CLICK-COUNT sabitiyle yükleriz. Ondan sonra servis rutinimiz, tek bir click ve sonra return için gereken her şeyi yapar. BAŞLANGIÇ

Bir uygulamanın GEOS deskTOP ile çalıştırıldığı zaman yapması gereken ilk şey menülerini, ikonlarını tanımlamak ve klavye girdileri ve mouse'a basılacak durumlar için çağrılacak servis rutinlerini göstermektir. Aynı zamanda ekranı temizlemeli ve genel ekran görüntüsünü oluşturmak üzere gerek duyduğu grafik biçimleri çizmelidir. Bir kullanıcı uygulamanın ikonuna deskTOP'tan click ederse GEOS Kernal sistemi bir default durumuna getirecek, uygulamayı yükleyecek, ve uygulamanın başlangıç rutinine doğru bir altrutine atlama işlemi gerçekleştirecektir. Başlangıç rutininin adresi uygulamanın Dosya Başı bloğunda gösterilmektedir, bunlara daha sonradan ayrıntılı olarak değineceğiz. Başlangıç rutini menüleri, ikonları ve başka eventleri tanımlamak için data tablolarına sahiptir ve tabloları okuyup eventleri gerçekleştirmek için GEOS rutinlerini çağırırlar. İlk ekranı da çizer. Tamamlandıktan sonra, başlangıç rutini GEOS Kernal'a döner. GEOS Kernal'daki ana program döngüsü şimdi çalışmaya başlamış ve menü seçimi, ikonlara basılması ve başka eventleri halletmek için hazır durumda olacaktır. Herhangi bir event başlatılırsa, GEOS Kernal uygulama tarafından belirlenmiş servis rutinini çağırır. Başlangıç rutinleri gibi, her servis rutini daha sonra GEOS Kernal'a döner.

GEOS KERNAL YAPISI

GEOS Kernal içinde çalışan iki düzey kod vardır. Bunları (MainLoop) Ana Döngü ve (InterruptLevel) Interrupt Düzeyidir.

ANADÖNGÜ

GEOS Kernal AnaDöngüsü uzun bir döngü kodudur. Eventleri tarayıp uygun uygulama servis rutinini çağırır. Devrini tamamladığı her sefer, AnaDöngü kodu kullanıcı girdilerinin olup olmadığına bakar ve anlamını belirler. Örneğin bir mouse click edilmesi: bir ikonun seçilmesi bir menünün açılması açık bir menüden bir maddenin seçilmesi ya da, menü ve ikonların dışında, otherPress Vektörünün aktive edilmesi anlamlarına gelebilir. Klavye girdisi: Kullanıcı ya bir metin girdi ya da GEOS Kernal tarafından işlenecek bir diyalog kutusu için metin girildi. Bir süreç devre arası ise: bir uygulama servis rutinin çalıştırılması gerektiği anlamına gelir. Bu girdiler verildikten sonra, AnaKod ne yapacağına karar verir. Örneğin bir menü olması durumunda 1. bir altmenünün indirilmesi gereği olup olmadığına, menü düzenleme seçeneklerinin gösterilip gösterilmeyeceğine ya da, 2. bir servis rutinini tetikleyen bir maddenin seçildiğine ve uygulama servis rutinin çalıştırılması gerektiğine karar verecektir.

INTERRUPTDÜZEYİ

GEOS Kernal Interrupt (Kesilme) Düzeyi kodu C-64'te bir raster interrupt tarafından saniyede 60 kere tetiklenen 6510 IRQ interrupt ile uğraşır. Saniyenin altmışta birinde, işlemcinin AnaDöngü uygulaması durur, InterruptDüzeyi kodu çalıştırılır. InterruptDüzeyi saniyenin altmışta birinden çok daha çabuk bir sürede tamamlanır. Tüm yaptığı donanımı okumaktır. Böylelikle AnaDöngü saniyenin altmışta birinden daha uzun sürse bile (örneğin çok uzun uygulama servis rutinleri gibi) InterruptDüzeyinin donanımla zamanında etkileşimi sürecektir. Klavyede basılan tuşlar boşa gitmeyecektir. InterruptDüzeyi makinanın o sıradaki durumunu save eder ve donanımla direkt olarak etkileşimi sürdürür. Eğer mouse düğmesine basılırsa, InterruptDüzeyi Ana Döngü tarafından kontrol edilen bir flag (bayrak) yerleştirir. AnaDöngü mouse'un bir ikon, menü ya da başka bir yerde olmasına göre ne yapılacağına karar verir. Böylece bir event dizisinin ilk kısmı her zaman InterruptDüzeyinde başlar. C-64 programcıları kendi AnaDöngü ve InterruptDüzeyi kodlarını yazmaya alışıktırlar. Bu işin GEOS Kernal tarafından zaten yapılmış olduğunu kavramak önemlidir. GEOS Kernal programcının üzerine et koyduğu bir iskelet gibidir. GEOS uyumlu program uygulamaları eventleri ve onları halledecek servis rutinlerini tanımlamak için bir dizi tablodan oluşur. Kontrolün akış yapısı Kernal tarafından belirlenir. Bir servis rutini her zaman AnaDöngüye döner. Her servis rutini ekranı yeniden oluşturabilir, tüm eventleri yeniden başlatabilir, sonra da AnaDöngüye dönebilir. Böylece uygulamanın tüm yeni fonksiyonlarıyla başka bir “ekrana” gitmesini sağlayan bir menü tanımlanabilir. Bu yeni menü ve ikonları başlatabilir. Menü kalemi servis rutini AnaDöngüye döndüğünde, AnaDöngü eventleri kollamaya devam edecektir, ama yalnızca yeni tanımlanmış olanlarını. Daha sonra da genellikle bir ikona basılıp basılmadığına bakılır. Ama bir menü seçildiyse, AnaDöngü ikon kontrolünü atlayacaktır. Çünkü aynı anda bir ikon ve bir menü seçilemez. GEOS Kernal ayak işlerinin çoğunu yaparak programcının her seferinde Amerika'yı yeniden keşfetmek zorunda kalmasını önleyecektir. geoWrite, geoPaint ve deskTOP gibi kompleks program uygulamaları için bile bu durum geçerlidir. Programlamayı daha da kolaylaştırmak üzere, GEOS Kernal pek çok yardımcı rutinler sağlar (grafik, metin, disk). Bunlar uygulamaların geliştirilmesinde yardımcıdırlar.

Gelecek ay bu GEOS Kernal rutinlerinin nasıl çağırıldığı ve kullanıldığı konusuyla kursumuza devam edeceğiz.

TOPLU YANIT

Sevgili okurlarımız; Burada son zamanlarda gelen ve sorudan çok talep ve eleştirilerle dolu olan mektuplara genel bir yanıt veriyoruz. Bir söz vardır, herkesi hoşnut etmeye çalışan hiç kimseyi hoşnut edemez diye. Özellikle genç okurlarımız oyunlara yeterince yer vermediğimizden yakınıp duruyorlar. Yazdan beri oyunlara ayırdığımız bölümü sürekli olarak genişletmeye çalışıyoruz. Bunu sürekli okurlarımız fark etmişlerdir. Örneğin tanıtım bölümünde ayrı bir köşede her ay strateji oyunları da tanıtmaya başladık. Macera peşinde ve tanıtım bölümleri toplam yirmi sayfa kadar yer alıyorlar. Bu arada C-64 oyunlarını biraz ihmal ettiğimiz düşünülüyor. Bir kere, her ay birkaç C-64 oyununa yer vererek dengeyi sağlamaya çalışıyoruz. Ayrıca bazı oyunlar hem C-64'te hem AMIGA'da oynanabiliyor. C-64 oyunu isteyen okurlarımız bunu gözden kaçırmasınlar.

Oyun isteyen ve program isteyen okurlarımızın dikkatini bir noktaya çekmek istiyoruz. Dergimiz ne yalnızca bir oyun dergisi, ne de program dergisi. Özellikle ileri yaşta olan okurlarımız oyunların çokluğundan ve program ve donanım yazılarının azlığından yakınıyorlar. Bu bir kere ancak AMIGA için geçerli olabilecek bir eleştiri. Yoksa C-64 programlarına yer verilen bir döküm ekimiz ve programlama dillerini tanıtan yazı dizilerimiz var. Biz de aynen okurlarımız gibi AMIGA'ya yönelik bu tür yazıların eksikliğini duyduğumuz için bülten tasarısını ortaya çıkarmıştık. Ama bazı arkadaşlarımızın iddia ettiği gibi bilgisayarın sağlığa etkileri, AMIGA müzik programları, animasyon gibi konularda dünyadaki son gelişmelerden haber veren yazıların dergimizi bir bilgisayar dergisi olmaktan uzaklaştırdığı kanısında hiç değiliz. Bülten tasarısına yanıt olarak gelen bazı mektuplarda AMIGA üzerine bir şey yayınlamıyorsunuz ki size bu konuda öneride bulunalım diye görüşlere yer verildi. İyi ya, biz de yayınlamaya başlamak için sizin görüşlerinizi sormuştuk zaten. Okurlarımız talepte bulunur ve eleştiri getirirken, derginin çok çeşitli kesimlerden, orta okul öğrencilerinden, emeklilere kadar uzanan bir yaş spektrumunda bir okur kitlesine sahip olduğunu göz önünde bulundurmalarını rica ediyoruz. Tüm bunlardan eleştiriye karşı olduğumuz sonucu çıkmasın, yoksa, bu eleştiriler dergimizin yayın politikasının oluşturulmasında bize sürekli olarak yol gösteriyorlar. Yalnız, lütfen çok farklı taleplerin de olabileceğini unutmayın. Bir de okur katkılarıyla ilgili bir şey söylemek istiyoruz. Okur katkıları son zamanlarda döküm eki ya da püf noktaları biçiminde gerçekleşiyor. Oysa ilk başlarda okurlarımızın önerdiği yazılar da oluyordu. İlgilendiğiniz konulardaki yazılarınızı göndererek derginin zenginleşmesine katkıda bulunabilirsiniz.

B.D.E.

Sayın Commodore Dergisi yetkilileri; Ben, derginizi 40. sayısından beri takip etmekteyim. Derginizin program döküm eklerindeki programların yazılımında, elimizde kontrol programı olmadığı (B.D.E) için yazım bittikten sonra yazımdan dolayı meydana gelmiş olan hataları bulmak çok zor oluyor. Sizden ricam, (B.D.E) programını, gelecek sayılarda (mümkün olan en yakın sayıda) tekrar yayınlamanız veya bu mümkün değil ise, (B.D.E) programı hangi sayıda yayınlandı ise o sayıyı nasıl bulacağım hakkında bilgi verir misiniz. Saygılarımla...

Cem Çalışkan

Sevgili okurlarımız; Cem Çalışkan gibi birçok yeni okurumuz B.D.E ve M.D.E programları talep ediyorlar. Bu konuda daha birçok mektup aldık. Onlar için gelecek sayımızdaki Döküm Eki'nde bu programları yayınlayacağız.