Amiga Dünyası sayı 24, sayfa 43

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 43

açmak mümkün. Burada isim Library ismini, versiyon ise gerekiyorsa o library'nin sahip olması gereken minimum versiyon numarası, eğer önemsizse 0 girilir. Açılan Library sonra CloseLib fonksiyonu ile kapatılabilir, sistem bu işi de aslında otomatik olarak sizin yerinize halledecektir.

Bu 6 emir ile ufkumuz oldukça genişledi sayılır. Bu emirlere ek olarak programcıların eklediği birkaç emir ise şunlar:

FreeStack: Kalan Stack hafıza miktarını gösterir. Stack hafızayı, değişkenler için kullanırsınız. Dolayısıyla sistemde olan hafıza değil de, değişkenler için ayrılmış olan hafızanın miktarı önemlidir.

Random: 0-1 arası rasgele bir sayı verir.

Random (n): 0 ile n-1 arası rasgele bir sayı verir.

Randomize : Rasgele sayı fonksiyonu, zamanla işleme sokulur. Her ne kadar adı rasgele olsa da, bu fonksiyonun belirli bir periyodu vardır. Bu yüzden bu tür bir emre bazı uygulamalarda ihtiyaç duyulur.

Hi(integer): Bir integer veya word türü sayı iki byte'tan oluşur. Bu iki byte'ı bir basamak gibi düşünürseniz, Hi(i) ilk basamağı, Lo(i) ise ikinci basamağı verir.

Bir reel sayı da Trunc (x) ile tam ve Frac (x) ile ondalık kısmına ayrılabilir.

Addr(x): x değişkeninin bulunduğu adres değerini verir.

SizeOf: Belirtilen tipin uzunluğunu byte olarak verir.

sizeof(Word) = 2; sizeof(array[1.. 100] of long) = 400; Exit: Program akışını içinde bulunulan bloktan dışarı çıkartır.

KickPascal'ın bize sağladıkları neredeyse sadece bunlardan ibaret. Ama üzülmeyin, önümüzde büyük bir imkanlar paketi var. Amiga'nın Library'leri. Buna ek olarak programcılar tarafından hazırlanmış bazı unitler (komut paketleri) mevcut. Library'ler ile iletişim sağlarken bazı tanımların yapılması ve bazı değişkenlerin tanımlanması gerekir. Bu tanımlar sabit olarak hazırlanmıştır ve .h ile biten dosyalarda saklanır. Amiga'nın sistemi C ile yazılmıştır. Bu sebeple her türlü Library'si için C dilinde .h file'ları mevcuttur (Bu file'lara Header file denir). Hemen sevinmeyin, zira bu dosyaları kullanmanız mümkün değil, çünkü tanımların Pascal'a uygun olması gerekiyor. Burada tek sorun, bazı C'de büyük ve küçük harfin farklı kabul edilmesinden dolayı aynı isimli değişkenler ve fonksiyonlar bulunabiliyor, bu yüzden bazı isim değişiklikleri mevcut.

Peki bu library fonksiyonlarını nerelerden öğreneceğiz? Bu elbette bizim konumuz değil. Ancak bunu öğrenmenin tek yolu, iyi bir referansa bakmak. Bu iş için çeşitli kaynaklar var, ancak size Commodore'un kendi orijinal referansını tavsiye ederim.

Library Fonksiyonları, device'lar için, Amiga ROM Kernel Reference Manual INCLUDES & AUTODOCS; Amiga'nın sistemi, Library C örnekleri ve program teknikleri için, Amiga ROM Kernel Reference Manual LIBRARIES & DEVICES; Amiga'nın donanımı, teknik bilgi, low level programming için, Amiga HARDWARE Reference Manual kitapları önerilir. Bu kitapların yakın zamanda 2.0 versiyonu için olanları çıktı, onlarda fazladan sürü ile fonksiyon anlatılıyor (1.3 bilgisayar ile onları kullanamazsınız!!). Bu kitapların herbiri oldukça kalın, ama program yazmak, hele Library kullanmak istiyorsanız, özellikle ilki şart. Her üç kitabın da yayımevi ADDISON & WESLEY.

Yazımızın sonunda yine Kick Pascal disketlerindeki örnek programlardan kısaltarak, PROGRAM 2 kutusunda basit bir örnek program veriyorum. Programın ilk satırında, Library için gerekecek iki adet dosyayı sisteme ekliyoruz. Bunlar Graphics.lib ve intuition.h. Dikkat edin: Var kısmında kullanılan Window ve Rastport kelimelerini daha önce görmedik. Bu tipler ilk satırda eklediğimiz dosyalarda tanımlanmışlar. Eğer sistem üzerine kitaplar okuyanınız varsa, bu tanımları bileceklerdir. Daha sonra bir Library açıyoruz. Bu Library, bilgisayarın ROM'unda bulunan Graphics.library. Dikkat ederseniz GfxBase olarak tanımlanan pointer da bizce tanımlanmadı. Daha sonra bir pencere açıyoruz. Pencere açmak aslında Intuition Library'sinin işi; ancak burada, Pascal'ın fonksiyonunu kullanıyoruz, yani basit olanı. Ancak bu arada büyük harfler ile tanımlanmış bazı değerler görüyoruz. Bunlar bizim penceremizin türünü belirliyorlar, dikkat edin virgülle ayrılmıyor, toplanıyorlar, sebebi basit, bunların herbirinin bir değeri var ve her değer pencerenin bir başka özelliğini tanımlıyor. Arkasından enteresan ve kritik bir satır: Rp := Win^.RPort;

Rp değişkeni bir Rastport pointer'ı olarak tanımlanmıştı. Ancak bu değere nereden atama yapılıyor??? Dikkat edin Win, bir pointer ve tipi bir Window gösterecek şekilde tanımlanmıştı. Bizim göremediğimiz tip tanımında Window bir Record olarak tanımlanmış (göremediğiniz lafı yanlış, isteyen bu .h file'ları okuyabilir). Bu record'un bir parçası da Rport. Değeri buradan alıyoruz (tüm bunları anlamak için Amiga'da Window'un yapısını gösteren bir kaynak bulun ve yapıyı anladıktan sonra bir daha okuyun). Aslında şu aşamada tüm bu değerleri anlamanızı beklemiyorum. Ne işe yaradığını anlayarak da çok güzel şeyler yaratabilirsiniz. Hemen sonraki satır çok enteresan. SetAPen (Rp,3); emri, Rastport'u Rp olan pencerenin (bizim açtığımız), yazı rengini 3 numaralı renge çeviriyor. Bu emir Pascal'da yok, Library emri (Autodocs kitabı, sayfa A-108). For döngüsü içindeki iki emir, Move ve Draw için de aynı şey söz konusu. İkinci For döngüsündeki RectFill emri, bir dörtgen çizip içini dolduruyor. Yazı dizimizin ardından bu konularda detaylı örnekler ve uzun açıklamalar vermeyi umuyorum. Özellikle sistem yapılan ve bunların kullanımını gösteren teoriden uzak, programlar yazacağız. Gelecek ay, dizimizin son bölümünü göreceğiz, Burada bazı tekniklere, programlar arası iletişime ve başka sistemlerden program aktarımlarına ilişkin açıklamalar yapacağız. Bu arada lütfen disketlerdeki demo programları inceleyin. Size çok yardımcı olacaklardır. Hepinize iyi eğlenceler ve başarılar.

Var Ekran.pencere: ptr; PROGRAM

1 Begin

Ekran :=Open_Screen(0,0, (Sol üst köşe}

320,256,{Eni,boyu 320x256} 6, {Derinlik = 6 = 64 renk} 3,1, {Yazı renkleri} $0082 {Extra Halfbrite Modu, Derinlik 6 vermiştik}

'Merhaba'); {Bu da ismi} Pencere:=Open_Window(50,40, {Sol üst köse}

100,50, {Eni,boyu} $102, {Yazı rengi, $ heksadesimal sayıyı belirtiyor}

0, {IDCMP, yok} $9, {Pencere türü} DÜNYA', {İsim} Ekran, {Pencere,hangi ekranda ???} 10,10,200,200);{min'ler ve Max'lar} {Burada artık bir ekranımız ve penceremiz var} Delay (10*50); {Delay saniyenin 1/50'si kadar bekler} Close_Window(Pencere); Close_Screen(ekran); End.

{$incl "graphics.lib", "intuition/intuition.h" }

Var

Win: * Window; Rp: ARastPort; PROGRAM err: boolean; 2 Msg: Ptr; I: integer; Begin OpenLib(GfxBase, 'graphics.library', 0); Win:= Open_Window(0, 0, 640, 200,1, _CLOSEWINDOW, GIMMEZEROZERO+ACTIVATE+WINDOWCLOSE+ WINDOW DEPTH,

Grafikdemosu', Nil, 640, 200, 640, 200); Rp:= Wln

^.RPort; SetAPen(Rp, 3); For i:=0 to 20 Do Begin Move(Rp, 220+20*i, 5); Draw(Rp, 620, 5+9*i) End; Fori:=1 to 10 do Begin SetAPen(Rp, 1 + I mod 3); RectFill(Rp, 5*i, 75+2*i, 320-25M, 180-8*1) End; Msg:= Wait_Port(Win

^.UserPort); Msg:= Get_Msg(Win

^.Userport); Reply Msg(Msg);

Close_Window(Win); End.

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