Amiga Dünyası sayı 12, sayfa 28

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 28

şu Window'umuzun boyutlarını ifade etmektedir. Üçüncü word window'un enini ve dördüncü word boyunu temsil eder.

dc.b 0,1 Bunların arkasından iki byte sırası ile window'un zemin ve çizgi renklerini ifade eder.

dc.l 0

Bundan sonra gelen Long word değer ise sistemin, örneğimizdeki window için IDCMP flaglarının kontrolünü gerçekleştiren bir sayıdır. Bu flaglar yardımı ile window'umuzun bir sürü özelliklerinden yararlanabiliriz. Bilirsiniz; mesela Amiga Workbench sisteminde herhangi bir window açtıktan sonra sol üst köşedeki kutucuk (window close symbol) yardımı ile kapatabiliriz. Ve bizim bu örnek programımızın window'unda da kapama sembolü var. Fakat sol tuş ile bu sembole ne kadar basarsanız basın kapatamazsınız. Yani söylemek istediğim bu gibi işlemleri programınızda, ufak rutincikleri oluşturarak gerçekleştiriyoruz. Nasıl mı? Aşağıda anlatacağım gibi.

En basitinden window kapama işlemini de; bu flaglar vasıtası ile yapacağız. Window structure'ındaki IDCMP flaglarına yazacağımız sayılar ile window kapama, boyut değiştirme, gadget aktif hale gelimi, Window'a bağlı bir menü seçimi gibi window aktiviteleri kontrol edilebilir. Bunlara ek olarak window aktif halde iken bir tuşa basılı olup olmadığı veya sürücülerde disket sokup çıkarılması gibi durumları da işlenebilir.

IDCMP flaglarının geniş bir açıklamasını yapmak, size tam anlamı ile bu olayı en derin noktasına kadar açıklamak isterdim. Fakat genel olarak assembler yazı dizimizdeki akışı yavaşlatmamak ve bir konuda takılı kalıp diğer bilgilerinizi zedelemek istemiyorum. Şimdilik bu kadar bilgi yeterli olacaktır. Şu andaki örneğin açıklaması bitiminde IDCMP flaglarının programa eklenmesi üzerine bir ek yapacağız. Şimdilik bu örnekte gördüğünüz gibi window'u mouse'un sağ tuşunu kendi adresinden bekleterek kapatıyoruz.

Bu örnekte IDCMP flaglarını kullanmadığımız için buradaki long word değere 0 değeri yazmamız yeterlidir.

dc.l $1+$2+$4+$8 IDCMP flagları longword'u ardından window'umuzun özelliklerini belirteceğimiz longword'a sıra geliyor. Buradaki longword'a yazımızın sonundaki tabloda bulunan rakamları yazarak, window'un intuition'ın verdiği özellikleri kazandırabiliriz. Kullanım açısından birinci sınıfa giren flagları karşısına açıklamalarını yapacağız.

dc.l 0,0 Buradaki ilk longword window'un içinde gadget bulunup bulunmadığını belirler. Buraya; tabii eğer window'da gadget varsa, ilk gadget'ın structure adresini yazarız. Şu anda sizin bu konuda bilginiz olmadığını düşünerek ve şimdilik bu longword'dan bu kadar şey bilmeniz yeterlidir.

dc.l WINNAME Eğlenceli bir satır olarak görülebilir. Window'umuzun isminin bulunduğu adresi buraya yazacağız. Örnekte bir WIN-NAME label'ını kullandık. Anlamı, örnekte buradan beş satır aşağıdaki data satırıdır. Orada WINNAME isimli label'ın karşısında text olarak window'un ismi durmaktadır. Structure'da isim tanımlama kısmı; aynen böyle olmalıdır. Başka bir kullanım şekli yoktur.

dc.l 0,0 Bu satırdaki ilk longword; window'un ekran structure pointer'ının adresini girmek içindir. Eğer window'u yeni bir ekranda değil de o an kullanılan ekranda açıyorsanız, yani bu ekran çoğunlukla standart Workbench ekranı olur; bu longword değeri 0 girilmelidir. Ya da yeni bir ekran açılmış ise, o ekranın programınızdaki structure adresini girmelisiniz.

Buradaki ikinci longword ise window yeni bir ekranda açılmış ise söz konusu ekranın bitmap adresinin buraya girilmesi gerekir.

dc.w 200,50 dc.w 400,200 Bu dört word modunda değer window'un bulunduğu ekrandaki maksi- mum ve minimum hareket koordinatlarını oluşturmaktadır.

dc.w 1

Bu word değer ise ekran tipini belirler.

WINNAME: dc.b "Benim Window'um",0

Bu satır window structure'ı içerisinde ekran isminin tanımlamasının bir kısmıdır.

11 LOOP: btst #10,$dff016 12 bne LOOP 11. ve 12. satırlarda, mouse'un sağ düğmesine basılıp basılmadığını kontrol ettiriyoruz. 12. satırda, eğer bu düğmeye basılmamışsa, işlemciyi tekrar kontrol et anlamında bir üst satıra yönlendiriyoruz.

Görüldüğü gibi, işlemciye bu satırlara gelene kadar iki ana iş yaptırdık. İlk olarak intuition library'yi açtık, ikinci iş olarak, intuition library'yi kullanarak bir window açtık. Ve tabii son olarak anlattığımız kısım, basit bir bekleme döngüsüdür.

Onbirinci satırdaki $dff016 adresi, Copper listesi içinde olup word olarak hesaplarsak onuncu biti ya da byte olarak hesaplarsak $dff017 adresinin sıfır nolu bit'i mouse'un sağ tuşunun basılı olup olmamasına denk gelmektedir. Eğer bu adresin bu bit'inde 0 değeri varsa bu tuş basılı ve 1 değeri varsa tuş basılı değil anlamına geliyor.

Örneğin üçüncü kısmının ne anlama geldiğini anladığınızı tahmin ediyorum. Bu kısım programın ana parçasını oluşturmaktadır. Tabii bu kısa örneğin ana teması, sadece bir window'u açmak olduğundan, örneğin ana parçasını sadece window açıldıktan sonraki bekleme döngüsü oluşturmakta.

Böylece örneğimizin başlangıç ve ana kısımlarını anlatmış bulunmaktayım. Anlatımlarımızın bu kadar uzun sürmesi; yani 20 satırlık programı üç sayıda anlatmamızın sebebi, yazı dizimizin ilk örneğimizi anlatırken kafanızda en küçük bir soru bile kalmamasını sağlamaya çalışıyorum. Örnekleri incelerken tek bir satırı bile yeterince iyi kavrayamamanız, ileride aynı tür kullanımları da anlayamamanıza sebep olabilir. Ayrıca size en önemli tavsiyem, yazı dizisinin bir kısmını okuyup da anlayamadığınız bir durumda, sabırlı olup anlayana kadar defalarca tekrar etmenizdir. Bu işlemde hiçbir gariplik yoktur ve bence bunu başka türlü halletmeniz mümkün değildir.

Defalarca okuyup, yine anlayamadığınız kısımlar olursa, sorularınızı dergimiz adresine assembler kursu adı altında yazabilirsiniz. Mektuplarınızı size geri gönderebilmem için pul koymayı ihmal etmeyin.

Yazı dizimize bu aylık son veriyoruz. Gelecek sayıda örneğimizin anlatımını bitireceğiz.

Şimdilik hoşçakalın.

Bit Değer Anlamı 0 $0000001 WINDOWSIZING WINDOW'UN BOYUTLARI DEĞİŞEBİLİR 1 $0000002 WINDOWDRAG WINDOW EKRANDA HAREKET EDEBİLİR 2 $0000004 WINDOWDEPTH WINDOW ÖNE VE ARKAYA GİDEBİLİR S0000010 SIZEBRIGHT WINDOW'A BİR MESAJ GELİNCE REFRESH

4 $0000020 SIZEBOTTOM 5 $0000040 SIMPLE REFRFSH 6 $0000080 SUPER BITMAP 7 SOOOOIOO BACKDROP WINDOW EKRANDA EN ARKADA KALIR 8 $0000200 REPORTMOUSE 9 $0000400 GIMMFZFROZFRO 10 $0000800 BORDERLESS ÇERÇEVESİZ WINDOW 11 SOOOIOOO ACTIVATE WINDOW İLK AÇILDIĞINDA AKTİF 12 $0002000 WINDOWACTIVE WINDOW AKTİF 13 $0004000 IN REQUEST 14 $0008000 MENUSTATE 15 S001()()()() RMBTRAP WINDOW'UN MENÜSÜ YOK 16 $0020000 NOCAREREFRESH REFRESH MESAJI VERİLMEMESİ

24 $1000000 W1NDOWREFRFSH 25 $2000000 WBENCHWINDOW

Klavyeyle gezinmek için ← ve → tuşları.