Amiga Dünyası sayı 17, sayfa 79
Sayfanın metni

Sayfa 79

Bursa'dan Mehmet İhtiyar, BASIC'ten CLI'den çalışan programları çalıştırmak istediğini yazmış. Bu programları Open ve Load emirleriyle çalıştırmanız pratik olarak mümkün değil. Bu iş için yine Library Fonksiyonlarına ihtiyacınız olacak. Kısaca mesela Preferences programını BASIC'ten çalıştıracak bir BASIC programı, kısaca şu şekilde olacak:

DECLARE FUNCTION Executes LIBRARY LIBRARY ":bmaps dos.library" p$ ="DF0:Preferences"+CHR$(0) sonuc%=Execute& (SADD(pS),0,0) LIBRARY CLOSE END Programı Hi-Soft Basic'te yazıyorsanız, ilk iki satır yer değiştirmeli. Programı çalıştırırken, ikinci satırda belirtilen Dos adresinde dos.bmap isimli dosyanın bulunmasına özen gösterin. Lütfen dikkat edin, söz konusu dosyanın adı dos.bmap ancak programda dos.library olarak kullanılıyor. Bmap dosyası sayesinde, Amiga Basic Library'lerle işlem yapabiliyor.

b$, çalıştırmak istediğiniz programın tam adresini + sonunu belirlemek için bir 0 karakteri (CHR$(0)) taşıyor. Execute& bir fonksiyon olduğundan, sonuç isimli bir değişken kullanmak durumundayız. İsimden sonra gelen parametreler ise, giriş çıkışın nereden olacağını gösteriyor. 0,0 durumu ile CLI penceresi kastediliyor. Tek sorun programın çalışması için mutlaka bir yerlerde bir CLI penceresi olmalı. Maalesef çalışacak programların da bir sınırlaması var Çok büyük olmamalılar ve temiz bir şekilde sistemi kullanacak şekilde programlanmalılar.

Basic programı, çalışan program bitene dek bekleyecektir. Paralel çalışma istiyorsanız, CLI'nin run emrini kullanın B$ = "df0:C/run df0:Utilities/Clock"+CHR$(0) Gördüğünüz üzere Basic'ten her şeyi yapmak mümkün. Ama her şeyin daha kolay olduğu diller vardır. Eğer fazla Library'ler fonksiyonlarına dayanan, sistemle iletişim kuran programlar yazacaksanız, başka dillerle işinizi çok daha rahat göreceksiniz.

Gelelim bir ikinci konuya. Mouse Pointer yani Mouse'un ekrandaki görüntüsü. Az önceki programla preferences'i çalıştırdık. Mouse Pointer'ın ve daha birçok özelliğin preferences programı ile değiştirilip kaydedilebildiğini biliyoruz. Şimdi isterseniz, preferences programının tekelinde olan bu konuya bir el atalım.

Her şeyden önce. Mouse Pointer Sprite adı verilen bir görüntü birimidir. 16 nokta genişlikte zorunlu olmasa da genelde 16 nokta yüksekliktedir ve dört renkten oluşur (Normal şartlarda). Mouse'un bir diğer özelliği ise. Hot Spot adı verilen bir hassas noktaya sahip olmasıdır. Mouse'un sol tuşuna basıldığında bu noktanın bulunduğu yere göre değerlendirme yapılır. Gelelim şekle: İkilik düzen hesaplarınızı hatırlayın bakalım. Her basamak ya 0 ya da bir olabiliyordu, iki basamak kullanarak 00, 01, 10, 11 gibi dört değişik sayı elde edebiliyorduk. Bu sayılar, istediğimiz görüntünün renklerini oluşturmamıza yetecek. Önemli konu bu iki basamağı yan yana yazmıyoruz. Önce 16 adet yani tam bir satır ikinci basamak yazılıyor sonra 16 adet birinci basamak. Genişliğin 16'yı geçemeyeceğini unutmayınız. Hemen bir örnek verelim, şu renk serisini saklamamızı inceleyelim.

0000 1111 2222 3333 Bu sayılara karşı düşen basamakları alt alta yazalım 0000 0000 1111 1111 00001111 0000 1111 Yukarıda olan satır ilk basamak, altında olan ise ikinci basamak. Görüntü işini de böylece hallettik. Kağıt üzerinde hesaplar sizi sıkıyorsa, basit bir program yazarak gerekli satırları oluşturmasını sağlayabilirsiniz.

Değişik renklerden bahsettik, ancak renk değerlerini anlatmadık. Alt renk zaten belirli, ekranın alt rengi (0 numaralı renk). Geri kalan renkler ise paletin 17, 18, 19 numaralı renkleri.

Aşağı yukarı her şey bitti. Pointer'ı değiştirmek için ne yapacağız. Ne kadar hoşunuza gitmese de, yine Library fonksiyonları kullanacağız. İlk olarak penceremize bağlı bir pointer yaratacağız. Yani pointer sadece kendi bizim penceremizde istediğimiz şekilde gözükecek. Prowrite'tan tanıdık gelmesi gereken bir özellik. Başka sefere tüm ekranda çalışan bir pointer yaparız olur biter.

Şimdi ihtiyacımız olan hafızada Pointer'ın görüntüsü için yer ayrılması, sonra görüntüyü oluşturacak dataların buraya kopyalanması, daha sonra ekrana getirilip en sonunda pointer'ın eski hale gelmesi.

Kullanacağımız fonksiyon SetPointer& adını taşıyor ve Intuition Library'sinin bir parçası. Bunun yanında hafıza ayırmak için AllocRemember& kullanılıyor. Şimdi programı görelim bakalım

DECLARE FUNCTION AllocRemember& LIBRARY LIBRARY ":bmaps intuition.library" RAMTipi&=2+65536& Remember&=0 RemKey&=VARPTR(Remember&) Memory&=AllocRemember& (RemKey&,66&,RAMTipi&) IF Memory&=0 THEN FreeRemember& RemKey&.-i : END

FOR a&=0 TO 68 STEP 2 READ Dat POKEW Memory&+a&,Dat NEXT a& DATA 0,0 DATA &H0001 .&H0001 ,&H0002.&H0002.&H3C3C.&H0004 DATA &H7E7C,&H0008,&H7FFE,&H0010,&H7FFE,&H0020 DATA &H7FFE,&H0040,&H3FFC,&H0000,&H1 FF8.&H0000 DATA&H0FF0.&H0000.&H07E0.&H0000.&H0BC0.&H0800 DATA&H5180.&H5000.&H6000.&H6000.&H5800.&H5800 DATA &H6000.&HE000.0.0 PALETTE 17,1,0,0 PALETTE 18,0,0,1 PALETTE 19,.7,.5,.6 SetPointer& WINDOW(7).Memory&. 16,16.0,-15 WHILE INKEY$="" : WEND

Ende: ClearPointer& WINDOW(7) FreeRemember& RemKey&,-1 LIBRARY CLOSE END

Son olarak biraz SetPointer fonksiyonunun parametrelerini açıklayalım. İlk olarak pencerenin adresinin (kabaca) bulunduğu adres var. WINDOW(7) bunu veriyor. Daha sonra dataların adresi var. Dataların sonunda ve başında sıfırların olduğu dikkatinizi çekmiş olmalı. Bunlar normal Sprite'larda kontrol için kullanılıyor; ancak Mouse Pointer normal bir sprite gibi kullanılmıyor, bu yüzden buraları sıfır. Sonra sırasıyla yükseklik ve genişlik yer alıyor. Sonraki iki sayı ise Hot Spot denen noktanın yeri. Bu sayıları eksi vermeniz gerekiyor. ClearPointer& ise, bu pointer'ı ortadan kaldırıyor. Benden bu aylık bu kadar, görüşmek üzere.

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