Amiga Dünyası sayı 27, sayfa 42

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 42

Program ScreenShuffler;

(Erhan OZTOP & F.Kagan GURKAY- NAK)

uses intuition; const MaxNScr - 41;

type ScrArr — array |1..MaxNScr|) of p screen;

var win : p window; scr :p screen; Pack : SerArr; : integer; begin win :— Open Window $0103,0,0, SCREEN 0,0);

Wscreen;

ifi >> MaxNScrt1 then Halt(5); packli)| :— ser; :— ScrA.NextScreen; Until ser — nil;

Forj:—1toido

begin ser :— MoveScreen(scr,0,k-scrA.topedge);

ScreenToFront(scr); k:— k4*ScrA.Barheight43; if k then k :— 0; end; end.

Hayat ne kadar güzel değil mi? Kullanacağımızı belirtmek. Bu library, Kick Pascal'da tanımlandığından kolayca USES yardımı ile sisteme bağlanıyoruz. Bu library, gerekli tüm include dosyalarını da otomatikman bağlayacaktır. Ekranları bir dizi kullanarak sıralamak istiyoruz. Belki lazım olur diye bunu tip olarak tanımlıyoruz. ARRAY ifadesinde kullandığımız sabit ile, kaç ekran düzenleyebileceğimizi belirtiyoruz (Geleneklerimize bakarak 41 tavanını kullandık.). Daha sonra da birkaç değişken tanımlıyoruz. Hatırlayın ekranların özelliklerine erişebilmek için ilk olarak onlara ait bir pointer bulmamız şart. İlerliyoruz. Bir pencere açıyoruz. Window tanımında Workbench ekranının adresi yer alır (WSCREEN). Bu sayede bir ekrana el atmış oluruz. Gerisi son derece kolay. Yardımı ile tüm ekranları bir dolaşmak. Ekranların bittiğini NextScreen'in Nil olması ile anlayabiliyoruz. Repeat until döngüsü, bu Nil'i sezene dek devam edecektir. Döngü içinde tüm ekran başlangıç adreslerini bir dizide topluyoruz. Hani olmaz ama, 41'den fazla ekran vardır diye de kontrol ediyoruz. Evet böyle bir durum varsa, Halt(5) ile program hemen DOS'a geri dönecek ve 5 hata kodunu verecektir.

Döngünün sonunda i değişkeni toplam ekran sayısını ve PACK dizisi de bu sayıda pointer'i barındıracaktır. Yeni bir döngü ile bu ekranları sıra ile ekrana yazalım. Ekranı hareket ettirebilmek için MoveScreen Library komutunu kullanıyoruz. Bu komut, belirtilen ekranı x (sözde) ve y düzlemlerinde kaydırabiliyor. Kaydırma için ise, kayma miktarı belirtilmeli. Sorun ekran tepelerinin aynı kalınlıkta olmasının gerekmemesi. Bu yüzden k değişkeni ile o an yazılacak olan ekranın y koordinatını belirliyoruz. Bu — eski k değeri ekran tepe kalınlığı kadar pixel (Anlaşılırlık için). Ancak MoveScreen'de fark belirtmek gerekiyor. Bu ama ilk olarak ekranın o anki konumu bulunuyor ve gitmesi gereken yerle arasındaki fark alınıyor. Ekran kaydıktan sonra bu ekran ScreenToFront Intuition emri ile en öne alınıyor. Bu şekilde tüm ekranlar üst üste yazılıyorlar. k değerinin 200'ü aşması durumunda tekrar sıfırlanıyor ki, ekranlar aşağıda kaybolacaklarına öbürlerinin üzerine yansınlar. Programı geliştirmek mümkün: Mesela kolayca bir ekran açıcı yapılabilir veya ekranların özellikleri sıralanabilir. Tüm bunlar, sizin hayal gücünüze bakarak gelişecektir. Bu adımları atarak, bilgisayar programlamanın aslında o kadar öcü bir şey olmadığını, basit adımlarla son derece iyi programlar yapılabileceğini anlamanız, beni son derece sevindirecek. Herkese bol güneşli ve keyifli bir yaz tatili dileyeyim (Tatil diye tembellik etmeyin bakalım).

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