Bu sayfadaki yazılar
Sayfanın metni
Sayfa 40
Nokta Yüzey Hafıza 7500 7500 442500 byte 15000 15000 885000 byte 22500 22500 1327500 byte 30000 30000 1770000 byte 37500 37500 2212500 byte 45000 45000 2655000 byte
Program, açılışta kendini mümkün olan en yüksek hafıza miktarına göre otomatik olarak ayarlar. Bu şekilde objede kullanılacak maksimum nokta ve yüzey sayısını tanımlayabilirsiniz. Bu, her objede bu kadar nokta ve yüzey kullanılacağı anlamına gelmez. IFF resim ne kadar karışık olursa, nokta ve yüzey sayısı maksimum değeri geçmeyecek şekilde program tarafından otomatik olarak artırılır. Default gadget'ı ile yapılan tüm ayarlamaları diskete kaydedebilirsiniz. Info programı hazırlayanlar ve firma hakkında bilgi almamızı sağlar. Son gadget ise Quit. Bunun yardımıyla programdan çıkabilirsiniz. Evet, bu program da bu kadar. Tekrar hoşçakalın ...
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 41
KICK
Tüm Pascal hayranlarına merhabalar. Söz verdiğim gibi bu aydan itibaren köşe haline gelerek her ay kısa örnek programlar yazacak ve bunların ışığında Amiga sistemi ile ilgili birkaç yararlı bilgi edineceğiz. Bu köşede olduğu gibi, bu örnek programları mümkün olduğunca kısa tutmaya çalışacağım, böylece hatalar en aza indirgenmiş olacak ve siz de programları sıkılmadan yazabileceksiniz. Burada anlatılanlar sadece Pascal ile ilgili konular değil, programları istediğiniz dilde yazabilirsiniz, ama bu köşe dahilinde tüm program örnekleri Pascal dilinde olacak. Belki onuncu defadır tekrarlıyorum, merak ettiğiniz soruları bana yazabilirsiniz. (Cevap bile veriyorum!!), ancak konu seçimini bana bıraktığınız sürece ben belirli bir sıra izlemeden, fazla derin olmayan konulara atlayacağım. Mümkün olduğunca konuları tek yazıda bitirmeye özen göstereceğim. Programlarda sık sık Amiga'nın Library'lerine ve bu Library'lere ait fonksiyonlara rastlayacaksınız. Bu fonksiyonları yazıda basitçe tanıtacağım, kendi programlarını geliştirmek isteyenler mutlaka Addison Wesley'in Amiga ROM Kernel Manual - Includes and Autodocs kitabını edinmeliler. Ben koşullarımı sıraladım, anlaşmaya vardıysak hemen başlayalım. Amiga kullanıcısı ile iletişime geçmek için GUI adı verilen (Graphical User Interface) ve ekranlar, pencereler, tanımlı tuşlar ve menülerden oluşan bir sistem kullanır. Amiga kullanırken sık sık bu sistemin öğeleri ile karşılaşırız. Biraz örnek vererek anlamaya gayret edelim. Ekranların belirli bir çözünürlüğü ve renk sayısı bulunur. Aynı anda farklı özelliklere sahip ekranlar olabilir. Ekran tek başına çalışmaya yetmez, o ekran içinde, içinde bulunduğunun özelliklerini taşıyan pencereler bulunur. Bu pencereler sayesinde çeşitli programlar kullanıcı ile iletişime geçebilirler. (Biliyorum, biliyorum masal kısmı gerçekten sıkıcı). Bu pencereler üzerinde bazı anlamlı düğmeler vardır. Bu düğmeler kullanılarak pencerelerin boyutları değiştirilebilir, ekrandan kaldırılabilir veya içerikleri kaydırılabilir. Amiga sisteminin bir bölümü bu işlerle ilgilenir. Bu kısım Intuition Library'sinden başkası değil. Intuition Library'sini kullanarak ekranlar, pencereler ve bunlara bağlı elemanlar üzerinde tam hakimiyet kurabilirsiniz. Bu ayki amacımız bu olaya biraz açıklık getirmek. Yukarıda kabaca belirttiğim gibi, ekranlar ve pencereler sistemin temel parçalarıdır. Ekranlar, görüntü özelliklerini tanımlarlar. Bu ekranların içinde bu özellikte iletişim elemanları, pencereler yer alır (Bir program çalışmak istiyorsa ve iş verecekse, mutlaka bir pencere açmalıdır.). Bir pencere, içinde bulunduğunun malıdır. Başka bir ekrana geçemez. Ekrana bakarak hareket eder. Bu en temel kavramların ardından ekran ve pencerelerin hafızada nasıl tanımlandığını bilmemiz gerekli. Gerek ekranlar ve gerek pencereler, hafızada özelliklerini anlatan değerlerin arka arkaya yazıldığı listeden ibarettir. Bu listelerin yapısı standarttır. Programlarken, bu tür listelere ulaşmak için Include dosyalarındaki tanımlardan faydalanırız. Hemen örnek veriyorum. Diyelim ki, hafızada herhangi bir ekranın listesinin başlangıç adresini bulduk (Her ne yoldan bulmuşsak, elimizde bir p-screen tipi de var.). Autodocs kitabından arayarak bu listedeki 16. byte'ından itibaren ilk iki byte'ın koordinatını verdiğini bulabiliriz. Ne var ki, bu bilgiyi bu şekilde kullanmayız. Bunun yerine son derece şık bir yöntem olarak Include dosyalarında yapılan tanımlardan yararlanırız. Listenin bu elemanın adı MouseX olarak tanımlanmış. scr dediğimiz p-screen tipi bir değişken olmak üzere (p-screen tipi de, Include dosyalarında tanımlanıyor). Mouse'un X koordinatını bulmak için: mx := scr^.MouseX; demek yeterli oluyor. Dikkat ederseniz, screen bir record pointer'ı olarak tanımlanmış. Gerçekten include dosyalarını karıştırarak bu tanımı bulabilirsiniz. Peki, tanım isimlerini nasıl mı bulacaksınız? Tanımlanan isimler standarttır. Autodocs kitabındaki tanımları kullanabilir veya zahmete girerek include dosyalarını karıştırabilirsiniz. Bu uygulamanın sayısız yararı var. Bir kere program anlaşılır bir hale geliyor. Ayrıca sabit değerler bakımından en önemlisi yeni Kickstart versiyonlarına kolayca uydurulabiliyor. Bakalım ekranda neler tanımlı:
FORI
(Autodocs H-56) NextScreen, FirstWindow, LeftEdge, TopEdge, Width, Height, MouseX, MouseY, Flags, Title, DefaultTitle, BarHeight, BarVborder, BarHborder, MenuVborder, MenuHborder, WBorTop, WBorLeft, WBorRight, WBorBottom, Font, ViewPort, RastPort, BitMap, Layerinfo, FirstGadget, DetailPen, BlockPen, SaveColor0, Barlayer, ExtData, UserData ekranın tüm özelliklerini belirliyor. Bakın, ilginç bir nokta göstermek istiyorum. Tüm yapılarda ortak olan bir özellik bu: Aynı özellikte başka yapılar varsa, bunların adresi belirtiliyor. Belirtilen adres NIL ise, o zaman tüm yapıları kontrol etmiş oluyorsunuz. Mesela bir ekrana ait tüm pencereleri bulmak istiyorsunuz. Dikkat edin, sadece ilk pencerenin yapısının adresi var. Ama pencere yapısında bir Next-
F. Karkaynak
Window bölümü var. Bu şekilde tüm yapıları taramak mümkün. Buraya kadar şu sorunları hallettik: Eğer ekranın başlangıç adresini bulabilirsek, bu ekranın tüm özelliklerini bulmamız mümkün. Hatta bu ekrana bağlı tüm diğer elemanlara da buradan geçebiliriz. Bazı yapıların manaları üzerinde de bir iki kelime edelim (işi son derece iyi anlıyor). NextScreen, bir sonraki ekranı işaret edecektir. FirstWindow ile, ekranın ilk window'una ulaşılabilir (Buradan da tüm window'lara). LeftEdge, ekranın sol taraftan ne kadar kaydığını belirtir. Hooop hooop stop, durun bir dakika (Bunu siz söylemelisiniz). "Karar ol.", "Neden?", "Screenler istedik yükseklikten başlayabilir, ama normal olarak soldan kayamazlar da ondan!". Bu konuda haklısınız. Ancak bu kısım ileride kullanılmak için tasarlanmış, bugünlerde (en azından 1.3'te) kullanımı yok. Listelerde bu şekilde ilerisi için ayrılmış bir özellik bulunur. TopEdge ise, ekranın üst kenardan ne kadar uzak olduğunu belirtir. Width ve Height, ekranın enini ve boyunu belirtecektir. Title, ekranın ismine bir pointer'dır. Gerisinin önemi yok diye kestirip atmayacağım ama hepsini de konuyu dağıtmamak için anlatamayacağım. BlockPen ve DetailPen ise ekranın arka plan rengi ve yazı rengini belirleyecektir (Paletin hangi elemanı olduğunda). RastPort ve ViewPort ise, kendileri birer liste olan elemanlardır (Bunların da elemanları vardır). Sanırım yeteri kadar kafanızı karıştırdım.
ram konumuza:
Gelelim Birden ekranla ıştı nün. n bazen bir karmaşa ie düşüveriyorsunuz. ir program yazalım ki, tüm ekranları Workbench en arkada olacak şekilde dizelim. Dizerken tüm ekranların tepelerinin gözükmesini sam. Nasıl mı?, ilk olarak program: