KÜÇÜK AMA MARİFETLİ İKİ PROGRAM

Merhaba... Bu ay BASIC köşemizde ufak bir değişiklik yaptık. Arkadaşımız F.KAĞAN GÜRKAYNAK, sizler için iki küçük Basic program hazırladı. Üstelik açıklamaları ile. Bakalım beğenecek misiniz? Şimdi Kağan'ın sözlerine kulak verelim:

Amiga'nın harika bir makine olduğunu belirtmeme gerek yok. Amiga'nın neler yapabileceğini birçok demoda ve oyunda hayretler içinde izledik. Ancak ortalama bir kullanıcı olarak Amiga'nın şaşırtıcı güçlerini kontrolümüz altına almak için yeterli olmadığımızı düşünmüşüzdür.

Gerçekten etkileyici, basit programları yazmak için, C'yi ezbere bilmeniz gerekmiyor. Amiga Basic'imiz ile bile ilginçlikler yapabiliriz.

İlk programla, bir Copper Listesi hazırlayarak rengarenk yazılara (Fontlara), menülere veya arka planlara sahip olabiliriz. Copper listelerini birçok demodan tanıyorsunuz. Copper Amiga'nın içinde temel olarak, ekranı tarayan elektronun yerine bağlı olarak programlanan ve hafızada bazı önemli değerleri (Register) değiştirebilen bir işlemcidir.

Sizi teknik detaylarla boğmadan, hemen programımıza geçelim. Lütfen yazılımdaki büyük ve küçük harflere özen gösterin. Bunun yanında % ve & işaretlerinde de dikkatli olmanızı öneririm; ikisi kolay karışıyor. ' işaretinden sonrakileri yazmayın, onlar sadece bilgi içindir.

'PROGRAM ADI  : COPPER LİSTESİ 
DECLARE FUNCTION AllocRemember& LIBRARY 
DECLARE FUNCTION      ViewPortAddress& LIBRARY 
LIBRARY ":bmaps/graphics.library" 
LIBRARY ":bmaps/lntuition.library" 
Copper Listesi Yaratma:
Print " Biraz Bekleyin :" 
InitCopperList 564  'Copper için yer açma 
FOR y% = -12 TO 270 
Ekranı boydan boya tarayalım 
b=b+1 
IF b=2 THEN
READ Renk% : c=c+1 : b=0     Renkleri okuma 
IF c=45 THEN c=0: RESTORE Curcuna 
CopWait y%,20 
Bu ilk emir 
CopMove 386.Renk%        Bu da ikincisi 
LOCATE 1.14 : PRINT 270-y°o 
END IF 
NEXT y%
CLS 
Copper Basla:
CopperStart WINDOW (7) 'Copper bu ekranda olacak 
Son:
LIBRARY CLOSE     Temizlik 
END 
'45 adet Hex data 
Curcuna:
DATA &H0FF,&H1 EF,&H2DF,&H3CF,&H4BF 
DATA&H5AF,&H69F,&H78F,&H87F,&H96F 
DATA &HA5F,&HB4F,&HC3F,&HD2F,&HE1 F 
DATA &HF0F.&HF1 E,&HF2D,&HF3C,&HF4B 
DATA&HF5A,&HF69,&HF78,&HF87,&HF96 
DATA&HFA5,&HFB4,&HFC3,&HFD2,&HFE1 
DATA &HFF0,&HEF1 ,&HDF2,&HCF3,&HBF4 
DATA&HAF5,&H9F6)&H8F7,&H7F8,&H6F9 
DATA &H5FA,&H4FB,&H3FC,&H2FD,&H1 FE 
' Buradan sonra kullandığımız yeni emirlerin tanımı var. 
SUB InitCopperList (KomutNo%) STATIC 
SHARED CopperList& 
Boyut%=KomutNo%*4+4 
'Copper için 
Remember&=0 
'yer ayarlama 
RemKey&=VARPTR(Remember&) 
CopperList&=AllocRemember&(RemKey&,Boyut%,65538&) 
IF CopperList&=0 THEN FreeRemember& RemKey%,-1 :END 
END SUB 
SUB CopperStart (Win&) STATIC 
SHARED CopperList 
CopWait 10000,256 
Ekranı tarama bitti mi ? 
ViewPort&=ViewPortAddress&(Win&) 
POKEL ViewPort&+20,CopperList&   'Yeni adres 
RethinkDisplay& 'Ekranı yeniden çiz 
END SUB 
SUB CopWait (Y%,X%) STATIC
SHARED CopperList& 
CWait& CopperList&,Y%,X% 
CBumb& CopperList% 
END SUB 
SUB CopMove (Offset%,Rakam%) STATIC
SHARED CopperList& 
CMove&CopperList&,Offset%,Rakam% 
CBump% CopperList& 
END SUB 
' Program Ash Amir R.Amir 
Evet fazla sürmüş olamaz. Çalıştırmadan evvel: Bu program Amiga'nın içinde bulunan Library'leri kullanıyor. 
Programın onlara erişebilmesi için, o Library'lere ilişkin .bmap dosyalarının Library komutundan sonra tımak 
AMIGA DÜNYASI 94

içinde belirtilen yerde olmaları gerekli. (Bu dosyaları daha önce kullanmadıysanız, Workbench'in Extras disketinde bulabilirsiniz. Library'den sonra belirtilen yeri geçerli bir DOS Path'i olması şartı ile kendi isteğinize göre değiştirebilirsiniz.)

Nasıl etkileyici değil mi? Gelelim kaba bir açıklamaya. Programda Copper'ı programlayabilmek için sistemin komutları kullanılmış. Bunları daha rahat kullanabilmek için, dört SUB emri hazırlanmış. (SUB emirleri size kendi isteğinize göre komutlar hazırlamanızı sağlıyor.)

Programın ilk kısmı, sistemin komutlarını kullanmak için Library'lerin açılarak programa dahil edilmesi ve fonksiyonların tanımlanması ile ilgili. Eğer Hi-Soft Basic kullanıyorsanız, LIBRARY komutlarını DECLARE FUNCTION komutlarının önüne almanız gerekiyor.

Daha sonraki bölümde 564 emirden oluşan bir Copper listesi hazırlanıyor (ekran 282 satır, her satıra bir CopWait ve bir CopMove komutu =282*2=564). Daha sonra bu liste datalardan yararlanılarak dolduruluyor. Listenin y. satırı kabaca şuna benziyor:

CopWait y CopMove 386,Renk İşlevi ise, yine kabaca: elektron y. inci satıra gelene dek bekle, sonra 386 nolu adrese rengi yaz. (Renk, datalardan okunan kısım). İşte bu 386 nolu adreste, ekrandaki yazı rengi tutuluyor. Bu adresi değiştirmek mümkün. 384 arka planın renginin, 386 yazı renginin, 388 ikinci rengin ve 390 üçüncü rengin bulunduğu adresler. (Workbench'teki 4 renk). Bu sayılar dışındaki sayıları deneyerek meşhur GURU'muzla tanışmanız mümkün.

Gelelim Datalara: Dataların başındaki &, sayılar 65535'ten büyük olduğu için ve &H sayılar hekzadesimal (16'lık düzende) olduğundan bulunuyor. Bunları takibeden sayılar rengin RGB kodu. İlk sayı renkteki kırmızı, ikinci sayı renkteki yeşil ve üçüncü sayı ise renkteki mavi katkısını belirliyor. (Sayıdan kastım 16'lık düzendeki sayılar 1-9,A,B,C,D,E,F). Bunları keyfinizce değiştirin. Copper listesi yazmanın tek dezavantajı, ekranı aşağı çekme hızınızın çok düşmesi. Bu arada program Copper'ı eski haline getirmiyor, ama programı değiştirip tekrar tekrar kullanabiliyorsunuz.

İŞTE BU DA İKİNCİ PROGRAM: Bir diğer programla, denemişseniz neredeyse imkansız bulduğunuz bir efekti gerçekleştireceğiz: Scroll. Ekranın istenen tarafa kayması anlamına gelen bu kelimeyi, bir çok oyundan, mesela SHADOW OF THE BEAST'ten tanıyorsunuz.

Belirtmeme gerek yok, Basic'in kendi emirleriyle fazla bir şey elde edilemiyor. (Hisoft veya GFA ile bile). Çözüm yine Amiga'nın sisteminde, library komutlarını Basic'ten kullanarak istediğimizi yapabiliriz. İşte program:

' Program SCROLLVPORT 
DECLARE FUNCTION ViewPortAddress& LIBRARY 
LIBRARY ":bmaps intuition.library" 
LIBRARY ":bmaps graphics.library" 
Giris: 
ViewPort&=ViewPortAddress&(WINDOW(7))
Raslnfo&=PEEKL(ViewPort&+36) 
CIRCLE (320,90),200,1 
LINE(310,90)-(330,90) 
LINE (320,85)-(320,95) 
PRINT "Lütfen Mouse'u" 
PRINT "Ortadaki artiya" 
PRINT "Yerleştirin." 
PRINT "Ekran" 
PRINT "Daire etrafinda" 
PRINT "Dönecektir." 
Bekle: 
WHILE MOUSE(1)<>320 OR MOUSE(2)<>90 
Status=MOUSE(0) 
WEND 
Hareket: 
WHILE INKEY$="" 
x=COS(Derece)*200 
y=SIN(Derece)*90

Derece=Derece+.1 POKEW RasInfo&+8,x POKEW RasInfo&+10,y ScrollVPort& ViewPort& WEND Eskihal: POKEW RasInfo&+8,0 Programın kısalığına bakmayın. Çalıştırınca ne kadar hünerli olduğunu göreceksiniz. İlk satırlar, bir önceki örnekte olduğu gibi sistemdeki Library'lerin Basic tarafından kullanılmasını sağlıyor ve fonksiyonlar tanımlanıyor. Girişte ise, sistem fonksiyonu yardımıyla ViewPort ve buna bağlı olan RasInfo adresleri okunuyor. Amiga tüm ekranını ViewPort'ta bulunan parametreler yardımıyla belirliyor. Bunları değiştirerek ekrandaki görüntünün istediğimiz hale gelmesini sağlayabiliriz. ViewPort adreslerinin hepsini öğrenip kullanabilmeniz için iyi bir Referans kitabına ihtiyacınız olacaktır. Programımız ViewPort'taki RasInfo adlı listeyi kullanan değişiklikler yapmaktadır.

Ekrana çizilen çember ve yazılan mesajdan sonra, program Mouse'u belirtilen yere getirmenizi bekleyecektir. Daha sonra Derece ile belirtilen açıdan, sin ve cos ile hesaplanan, x yönünde ve y yönünde ekranın yeni konumu bulunacaktır. Bulunan bu değerlerin RasInfo listesinde gereken yerlere yazılmasının ardından, ViewPort'un adresiyle beraber Library'nin ScrollVPort emri çağrılması scroll'u gerçekleyecektir. Normal workbench ekranında ViewPort'un büyüklüğü ekran kadardır. Normal ekranın dışına çıkıldığında, hafızanın aslında görüntü olmayan kısımları da sanki görüntü imiş gibi ekrana getirilir. Ekranda kenarlarda çıkan görüntüler bunun sonucu. Eğer ViewPort'unuz ekrandan büyükse (Max 1024x1024), bu numaraya ilginç uygulama alanları bulabilirsiniz : Kick-Off'taki ekranın kayması sadece bir örnek.

Sonrası yine kolay, herhangi bir tuşa basılınca, program While Wend döngüsünden çıkar, ekranın konumları sıfır olarak yeniden yazılır ve yine Library komutu ile Amiga ekranı düzenler. En son iş olarak Library'lerin kapatılması yer alıyor.

Programda değişiklik yapmaktansa programdaki kullanımı göz önüne alarak kendiniz bir kaç kaydırma yapmayı deneyin.